diff --git a/README.md b/README.md index 00b2dc5..b62887f 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ You can find a [specification for the protocol here](https://github.com/flashbot 1. **Verify Flashtestation Transaction** - a. Policy contract checks signature against registry of registered TEEs + a. Policy contract checks sender's signature against registry of registered TEEs b. Policy computes WorkloadId from the stored report body @@ -55,13 +55,13 @@ You can find a [specification for the protocol here](https://github.com/flashbot a. Can only be done by the policy owner - b. WorkloadId is computed externally from TEE's report body + b. WorkloadId is computed from TEE's report body c. Once added, TEEs with matching WorkloadId can prove they built blocks via "Verify Flashtestation Transaction" 1. **Removing a WorkloadId from a Policy** - a. Done when TEE software is outdated or has bugs + a. Executed when the TEE software for this workloadId is outdated or has bugs b. Can only be done by the policy owner @@ -129,6 +129,29 @@ Then, to deploy, run: forge script --chain 1301 script/BlockBuilderPolicy.s.sol:BlockBuilderPolicyScript --rpc-url $UNICHAIN_SEPOLIA_RPC_URL --broadcast --verify --interactives 1 -vvvv ``` +#### MockQuotes + +**FetchRemoteQuote** + +Create a raw attestation quote and store it in `script/raw_tdx_quotes/`. This is needed for the `RegisterTEEScript` script for its $PATH_TO_ATTESTATION_QUOTE argument + +Before executing this script, provide correct values for the following env vars: + +``` +# the TEE-controlled address you want to fetch a remote quote for +# this address will be embedded in the quote's report data. +# Note: **you should control the private key for this address** because +# later on you will need to send transactions using this address +TEE_ADDRESS=0x0000000000000000000000000000000000000042 + +``` + +Then, to fetch the quote, run: + +``` +forge script script/MockQuotes.s.sol:FetchRemoteQuote --rpc-url $UNICHAIN_SEPOLIA_RPC_URL -vvvv +``` + #### Interactions **RegisterTEEScript** @@ -141,7 +164,8 @@ Before executing this script, provide correct values for the following env vars: # this is the contract FlashtestationRegistry you deployed up above FLASHTESTATION_REGISTRY_ADDRESS=0x0000000000000000000000000000000000000042 -# this is an absolute path to the raw attestation quote, see the example at: script/raw_tdx_quotes/342ad26adb6185cda1aea67ee5f35e9cb5c9cec32b03e8d4382492ca35d53331e906b20edbe46d9337b7b2b2248c633cc2a3aeb3a0ce480dd22b5950860c8a2c +# this is an absolute path to the raw attestation quote, see the example at: script/raw_tdx_quotes/0x12c14e56d585Dcf3B36f37476c00E78bA9363742/quote.bin. +# If you used `FetchRemoteQuote` script above, you can use the path that the quote was written to by that script for this env var PATH_TO_ATTESTATION_QUOTE=/some/path/quote.bin ``` @@ -159,32 +183,65 @@ Then, to execute, run: forge script --chain 1301 script/Interactions.s.sol:RegisterTEEScript --rpc-url $UNICHAIN_SEPOLIA_RPC_URL --broadcast --verify --interactives 1 -vvvv --skip-simulation ``` +**ComputeWorkloadIdScript** + +Prints out the WorkloadId for a TEE registered by TEE-controlled address (like in the `RegisterTEEScript` above). + +This is needed for the `AddWorkloadToPolicyScript` and `RemoveWorkloadToPolicyScript` scripts below + +Before executing this script, provide correct values for the following env vars: + +``` +# the TEE-controlled address that is embedded in the first 20 bytes of the report data from the +# attestation quote passed in `RegisterTEEScript`. Look at the $PATH_TO_ATTESTATION_QUOTE env var +# you used in `RegisterTEEScript` and use the address from that path +TEE_ADDRESS=0x0000000000000000000000000000000000000042 + +# this is the proxy address of the FlashtestationRegistry contract you deployed in FlashtestationRegistryScript +FLASHTESTATION_REGISTRY_ADDRESS=0x0000000000000000000000000000000000000042 + +# this is the proxy address of the BlockBuilderPolicy contract you deployed in BlockBuilderPolicyScript +ADDRESS_BLOCK_BUILDER_POLICY=0x0000000000000000000000000000000000000042 +``` + +Then, to execute, run: + +``` +forge script --chain 1301 script/Interactions.s.sol:ComputeWorkloadIdScript --rpc-url $UNICHAIN_SEPOLIA_RPC_URL +``` + **AddWorkloadToPolicyScript** -Add a workloadId that was previously registered with the `RegisterTEEScript` script above +Add a workloadId computed from the `ComputeWorkloadIdScript` script above Before executing this script, provide correct values for the following env vars: ``` + # this is the contract BlockBuilderPolicy you deployed up above + ADDRESS_BLOCK_BUILDER_POLICY=0x0000000000000000000000000000000000000042 # this is the workload ID computed from the TEE's measurement registers + # You can compute this from a registered TEE's report body using BlockBuilderPolicy.workloadIdForTDRegistration -WORKLOAD_ID=0xeee********************************************************9164e + +WORKLOAD_ID=0xeee**************************\*\*\*\***************************9164e # this is the commit hash of the source code that was used to build the TEE image + # identified by the WORKLOAD_ID above + COMMIT_HASH=1234567890abcdef1234567890abcdef12345678 # a comma-separated list of URLs that point to the source code that was used to build the TEE image identified by the WORKLOAD_ID above -RECORD_LOCATORS=https://github.com/flashbots/flashbots-images/commit/a5aa6c75fbecc4b88faf4886cbd3cb2c667f4a8c, https://ipfs.io/ipfs/bafybeihkoviema7g3gxyt6la7vd5ho32ictqbilu3wnlo3rs7ewhnp7lly + +RECORD_LOCATORS="https://github.com/flashbots/flashbots-images/commit/a5aa6c75fbecc4b88faf4886cbd3cb2c667f4a8c, https://ipfs.io/ipfs/bafybeihkoviema7g3gxyt6la7vd5ho32ictqbilu3wnlo3rs7ewhnp7lly" + ``` Then, to execute, run: ``` - forge script --chain 1301 script/Interactions.s.sol:AddWorkloadToPolicyScript --rpc-url $UNICHAIN_SEPOLIA_RPC_URL --broadcast --verify --interactives 1 -vvvv - ``` diff --git a/broadcast/BlockBuilderPolicy.s.sol/1301/run-latest.json b/broadcast/BlockBuilderPolicy.s.sol/1301/run-latest.json index 1db909e..511d274 100644 --- a/broadcast/BlockBuilderPolicy.s.sol/1301/run-latest.json +++ b/broadcast/BlockBuilderPolicy.s.sol/1301/run-latest.json @@ -1,151 +1,52 @@ { "transactions": [ { - "hash": "0xf4ec5182b9cb2335f4aa95eecb986de50766b739988c92a1569fb2843cb5dfe0", + "hash": "0x539fcf80627aaa5a122668036876c8d088eb542ccea1f89f82004bf8036527a2", "transactionType": "CREATE", "contractName": "BlockBuilderPolicy", - "contractAddress": "0x732217c72906f9c0cea039285b50154af108ed56", + "contractAddress": "0x56e5f1339eeb6a186e6bfbcce98e46fe581de981", "function": null, "arguments": null, "transaction": { - "from": "0x636860551bce455fa00384e171de672cd0195dd3", - "gas": "0x2ec47b", + "from": "0x9654a3786f960db19a64dff16fdc34ed6090a760", + "gas": "0x37c1bf", "value": "0x0", - "input": "0x60a08060405234602957306080526129e4908161002e82396080518181816109ce0152610ac00152f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c9081631aa5bfd114611723575080632dd8abfe146115a1578063485cc95514610d7d5780634f1ef28614610a4657806352d1902d146109895780635c40e542146108ec5780635f8cc76d146108ab5780636931164e1461086f5780636973b4cf146107f5578063715018a61461071b57806373016923146106c35780637b103999146106725780637dec71a9146106215780637ecebe00146105be57806384b0196e146104195780638da5cb5b146103a9578063a0f95a5c14610362578063ad3cb1cc146102e1578063b29b408114610296578063b33d59da14610252578063d275356114610203578063d3770710146101665763f2fde38b14610119575f80fd5b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257610160610153611802565b61015b612216565b61203b565b005b5f80fd5b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162576004356101a0612216565b6101a9816127aa565b156101db5760207fcbb92e241e191fed6d0b0da0a918c7dcf595e77d868e2e3bf9e6b0b91589c7ad91604051908152a1005b7f72477348000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257604061024461023f611802565b611f5f565b825191151582526020820152f35b346101625760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625761016061028c6117f2565b6024359033612128565b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625760206102d260043561195e565b90549060031b1c604051908152f35b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625761035e604051610320604082611825565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906118d6565b0390f35b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257600435600354811015610162576102d2602091611919565b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610595575b15610537576104db6104806122d3565b6104886123e6565b60206104e96040519261049b8385611825565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e08701906118d6565b9085820360408701526118d6565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b82811061052057505050500390f35b835185528695509381019392810192600101610511565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610470565b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625773ffffffffffffffffffffffffffffffffffffffff61060a611802565b165f526004602052602060405f2054604051908152f35b346101625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257602061066a61065d6117f2565b6044359060243590611f0b565b604051908152f35b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625760206040517f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc8152f35b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257610751612216565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101625760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625761082c611802565b602435907fffffffffffffffffffffffffffffffff00000000000000000000000000000000821682036101625760209161086591611aee565b6040519015158152f35b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257602061066a6004356119c6565b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625760206108656108e76117f2565b611989565b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257600435610926612216565b61092f81612622565b156109615760207f56c387a9be1bf0e0e4f852c577a225db98e8253ad401d1b4ea73926f27d6af0991604051908152a1005b7f22faf042000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a1e5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257610a78611802565b60243567ffffffffffffffff8111610162573660238201121561016257610aa99036906024816004013591016118a0565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610d3b575b50610a1e57610af8612216565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f9181610d07575b50610b7857837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc859203610cdc5750813b15610cb157807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115610c80575f8083602061016095519101845af43d15610c78573d91610c5c83611866565b92610c6a6040519485611825565b83523d5f602085013e61288f565b60609161288f565b505034610c8957005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011610d33575b81610d2360209383611825565b8101031261016257519085610b47565b3d9150610d16565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141583610aeb565b346101625760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257610db4611802565b6024359073ffffffffffffffffffffffffffffffffffffffff8216809203610162577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159167ffffffffffffffff821680159081611599575b600114908161158f575b159081611586575b5061155e57818360017fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000610e8f9516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611509575b50610e876125cb565b61015b6125cb565b604090815192610e9f8385611825565b601284527f426c6f636b4275696c646572506f6c69637900000000000000000000000000006020850152825193610ed68486611825565b600185527f31000000000000000000000000000000000000000000000000000000000000006020860152610f086125cb565b610f106125cb565b80519067ffffffffffffffff82116111fa578190610f4e7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254612282565b601f811161147c575b50602090601f831160011461139d575f92611392575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916177fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102555b835167ffffffffffffffff81116111fa57610ffa7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354612282565b601f8111611310575b50602094601f8211600114611232579481929394955f92611227575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916177fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155807fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255600354680100000000000000008110156111fa577f27fe5f0c1c3b1ed427cc63d0f05759ffdecf9aec9e18d31ef366fc8a6cb5dc3b9161112982600160209401600355611919565b81549060031b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001831b921b19161790558451908152a161116857005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555160018152a1005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b01519050858061101f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52805f20915f5b8881106112f8575083600195969798106112c1575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355611071565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080611294565b9192602060018192868501518155019401920161127f565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c81019160208410611388575b601f0160051c01905b81811061137d5750611003565b5f8155600101611370565b9091508190611367565b015190508680610f6d565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52815f20925f5b818110611464575090846001959493921061142d575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10255610fbf565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080611400565b929360206001819287860151815501950193016113ea565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f529091507f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f840160051c810191602085106114ff575b90601f859493920160051c01905b8181106114f15750610f57565b5f81558493506001016114e4565b90915081906114d6565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005584610e7e565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501585610e27565b303b159150610e1f565b849150610e15565b346101625760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162576115d86117f2565b602435604435916064359267ffffffffffffffff841161016257366023850112156101625783600401359367ffffffffffffffff8511610162573660248683010111610162576116569461164761164d9261163c611637868989611f0b565b6119c6565b9260243692016118a0565b906124b9565b909591956124f3565b73ffffffffffffffffffffffffffffffffffffffff841690815f52600460205260405f20548082036116f55750505f52600460205260405f20928354937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85146116c857600161016095019055612128565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162575f54908181526020810180925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563905f5b8181106117dc575050508161179a910382611825565b604051918291602083019060208452518091526040830191905f5b8181106117c3575050500390f35b82518452859450602093840193909201916001016117b5565b8254845260209093019260019283019201611784565b6004359060ff8216820361016257565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361016257565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176111fa57604052565b67ffffffffffffffff81116111fa57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926118ac82611866565b916118ba6040519384611825565b829481845281830111610162578281602093845f960137010152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6003548110156119315760035f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f54811015611931575f805260205f2001905f90565b8054821015611931575f5260205f2001905f90565b600354905f5b82811061199d575050505f90565b6119a681611919565b90549060031b1c60ff8316146119be5760010161198f565b505050600190565b6042906119d1612928565b6119d9612992565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611a2a60c082611825565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b81601f8201121561016257805190611a7a82611866565b92611a886040519485611825565b8284526020838301011161016257815f9260208093018386015e8301015290565b51907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361016257565b90816020910312610162575180151581036101625790565b905f905f549273ffffffffffffffffffffffffffffffffffffffff60025416925b848110611b1f5750505050505f90565b611b288161195e565b90546040517f6387ca6800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201529160031b1c5f82602481895afa908115611c8e5784925f92611c99575b506040517f2820b0ff000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff909216602483015260208280604481015b0381895afa918215611c8e575f92611c5e575b5081611c0f575b50611c0557600101611b0f565b5050505050600190565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000915051167fffffffffffffffffffffffffffffffff000000000000000000000000000000008416145f611bf8565b611c8091925060203d8111611c87575b611c788183611825565b810190611ad6565b905f611bf1565b503d611c6e565b6040513d5f823e3d90fd5b925090503d805f843e611cac8184611825565b8201916020818403126101625780519067ffffffffffffffff82116101625701916101e083820312610162576040516101e0810181811067ffffffffffffffff8211176111fa5760405283517fffffffffffffffffffffffffffffffff0000000000000000000000000000000081168103610162578152602084015167ffffffffffffffff81116101625782611d43918601611a63565b6020820152604084015167ffffffffffffffff81116101625782611d68918601611a63565b6040820152611d7960608501611aa9565b6060820152611d8a60808501611aa9565b6080820152611d9b60a08501611aa9565b60a082015260c084015167ffffffffffffffff81116101625782611dc0918601611a63565b60c082015260e084015167ffffffffffffffff81116101625782611de5918601611a63565b60e082015261010084015167ffffffffffffffff81116101625782611e0b918601611a63565b61010082015261012084015167ffffffffffffffff81116101625782611e32918601611a63565b61012082015261014084015167ffffffffffffffff81116101625782611e59918601611a63565b61014082015261016084015167ffffffffffffffff81116101625782611e80918601611a63565b61016082015261018084015167ffffffffffffffff81116101625782611ea7918601611a63565b6101808201526101a084015167ffffffffffffffff81116101625782611ece918601611a63565b6101a08201526101c08401519067ffffffffffffffff821161016257611efc6020938893611bde9701611a63565b6101c082015292915092611b89565b916040519160ff60208401947f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc86521660408401526060830152608082015260808152611f5960a082611825565b51902090565b5f905f549073ffffffffffffffffffffffffffffffffffffffff60025416925b828110611f9057505050505f905f90565b611f998161195e565b90546040517f2820b0ff00000000000000000000000000000000000000000000000000000000815260039290921b1c6004820181905273ffffffffffffffffffffffffffffffffffffffff8416602483015290602081604481895afa908115611c8e575f9161201d575b506120115750600101611f7f565b94935050505060019190565b612035915060203d8111611c8757611c788183611825565b5f612003565b73ffffffffffffffffffffffffffffffffffffffff1680156120fc5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b919061213381611989565b156121e75761214183611f5f565b90156121a5579160ff7f6e7d0380a26ae0e9c50a37f342cc9548d3a90a10d5446051ba4412c540fbf225949260a09473ffffffffffffffffffffffffffffffffffffffff6040519516855260208501524360408501521660608301526080820152a1565b73ffffffffffffffffffffffffffffffffffffffff847f4c547670000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60ff907f4fc7a241000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361225657565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b90600182811c921680156122c9575b602083101461229c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691612291565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102549161230583612282565b80835292600181169081156123a9575060011461232b575b61232992500383611825565b565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b81831061238d5750509060206123299282010161231d565b6020919350806001915483858901015201910190918492612375565b602092506123299491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b82010161231d565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103549161241883612282565b80835292600181169081156123a9575060011461243b5761232992500383611825565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b81831061249d5750509060206123299282010161231d565b6020919350806001915483858901015201910190918492612485565b81519190604183036124e9576124e29250602082015190606060408401519301515f1a90612800565b9192909190565b50505f9160029190565b600481101561259e5780612505575050565b60018103612535577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361256957507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146125735750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156125fa57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f8181526001602052604090205480156127a4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116116c8575f54907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116116c857818103612739575b5050505f54801561270c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016126cc815f611974565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555f555f5260016020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61278e612749612759935f611974565b90549060031b1c9283925f611974565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90555f52600160205260405f20555f8080612695565b50505f90565b805f52600160205260405f2054155f146127fb575f54680100000000000000008110156111fa576127e56127598260018594015f555f611974565b90555f54905f52600160205260405f2055600190565b505f90565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612884579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611c8e575f5173ffffffffffffffffffffffffffffffffffffffff81161561287a57905f905f90565b505f906001905f90565b5050505f9160039190565b906128cc57508051156128a457805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151158061291f575b6128dd575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156128d5565b6129306122d3565b8051908115612940576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054801561296d5790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b61299a6123e6565b80519081156129aa576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10154801561296d579056fea164736f6c634300081c000a", - "nonce": "0x1e", + "input": "0x60a0806040523460295730608052613215908161002e8239608051818181610ab801526110d50152f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816310c07d8714611cb6575080632dd8abfe14611b55578063485cc955146113925780634f1ef2861461106c5780634f3a415a14610b3057806352d1902d14610a735780635c40e542146109835780635f8cc76d146109385780636931164e146108fc578063715018a61461082257806373016923146107ca5780637b103999146107795780637dec71a9146107285780637ecebe00146106c557806384b0196e146105205780638da5cb5b146104b05780639695b8c714610455578063a0f95a5c146103ff578063abd45d211461027a578063ad3cb1cc146101f9578063b33d59da146101b5578063d2753561146101665763f2fde38b14610119575f80fd5b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162576101606101536121b1565b61015b612e5c565b612c57565b005b5f80fd5b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625760406101a76101a26121b1565b6128c9565b825191151582526020820152f35b346101625760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162576101606101ef612173565b6024359033612d44565b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257610276604051610238604082612077565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906121d4565b0390f35b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257606060206040516102b98161205b565b82815201526004355f525f60205260405f206001604051916102da8361205b565b6102e38161244e565b83520180546102f1816126a5565b916102ff6040519384612077565b81835260208301905f5260205f205f915b8383106103e25761033f86866020820190815260405192839260208452516040602085015260608401906121d4565b9051907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838203016040840152815180825260208201916020808360051b8301019401925f915b8383106103935786860387f35b9193955091936020806103d0837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516121d4565b97019301930190928695949293610386565b6001602081926103f18561244e565b815201920192019190610310565b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162576004356002548110156101625761044660209161250a565b90549060031b1c604051908152f35b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162576004355f525f60205261027661049c60405f2061244e565b6040519182916020835260208301906121d4565b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054158061069c575b1561063e576105e2610587612268565b61058f61237b565b60206105f0604051926105a28385612077565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e08701906121d4565b9085820360408701526121d4565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b82811061062757505050500390f35b835185528695509381019392810192600101610618565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610577565b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625773ffffffffffffffffffffffffffffffffffffffff6107116121b1565b165f526003602052602060405f2054604051908152f35b346101625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162576020610771610764612173565b60443590602435906127fb565b604051908152f35b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625760206040517f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc8152f35b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257610858612e5c565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257602061077160043561275e565b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162576020610979610974612173565b612721565b6040519015158152f35b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162576004356109bd612e5c565b805f525f6020526109d160405f2054612217565b15610a4b57805f525f602052600160405f206109ec816126d3565b018054905f815581610a26575b7f56c387a9be1bf0e0e4f852c577a225db98e8253ad401d1b4ea73926f27d6af09602084604051908152a1005b5f5260205f20908101905b818110156109f95780610a456001926126d3565b01610a31565b7f22faf042000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610162575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610b085760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625760043560243567ffffffffffffffff811161016257610b82903690600401612183565b919060443567ffffffffffffffff811161016257366023820112156101625780600401359167ffffffffffffffff83116101625760248360051b8301019036821161016257610bcf612e5c565b851561104057845f525f602052610be960405f2054612217565b61101857610c059060405196610bfe8861205b565b36916120f2565b8552610c10836126a5565b92610c1e6040519485612077565b83526024820191602084015b828410610fd7575050505060208301908152815f525f60205260405f20925192835167ffffffffffffffff8111610ea057610c658254612217565b601f8111610fa7575b506020601f8211600114610f05579080610cc09260019596975f92610efa575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b81555b019051805190680100000000000000008211610ea0578254828455808310610ecd575b50602001915f5260205f20915f905b828210610d29577fcbb92e241e191fed6d0b0da0a918c7dcf595e77d868e2e3bf9e6b0b91589c7ad602086604051908152a1005b805180519067ffffffffffffffff8211610ea057610d478654612217565b601f8111610e65575b50602090601f8311600114610dbf5792610da5836001959460209487965f92610db45750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b87555b01940191019092610cf5565b015190508b80610c8e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691875f52815f20925f5b818110610e4d5750936020936001969387969383889510610e16575b505050811b018755610da8565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558a8080610e09565b92936020600181928786015181550195019301610ded565b610e9090875f5260205f20601f850160051c81019160208610610e96575b601f0160051c01906126bd565b87610d50565b9091508190610e83565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b835f528260205f2091820191015b818110610ee85750610ce6565b80610ef46001926126d3565b01610edb565b015190508780610c8e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821695835f52815f20965f5b818110610f8f5750916001959697918487959410610f58575b505050811b018155610cc3565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080610f4b565b83830151895560019098019760209384019301610f32565b610fd190835f5260205f20601f840160051c81019160208510610e9657601f0160051c01906126bd565b85610c6e565b833567ffffffffffffffff8111610162578201366043820112156101625760209161100d839236906044602482013591016120f2565b815201930192610c2a565b7f72477348000000000000000000000000000000000000000000000000000000005f5260045ffd5b857f9209053f000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625761109e6121b1565b60243567ffffffffffffffff8111610162576110be903690600401612128565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115611350575b50610b085761110d612e5c565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f918161131c575b5061118d57837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8592036112f15750813b156112c657807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611295575f8083602061016095519101845af43d1561128d573d91611271836120b8565b9261127f6040519485612077565b83523d5f602085013e6130c0565b6060916130c0565b50503461129e57005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011611348575b8161133860209383612077565b810103126101625751908561115c565b3d915061132b565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141583611100565b346101625760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610162576113c96121b1565b6024359073ffffffffffffffffffffffffffffffffffffffff8216809203610162577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159167ffffffffffffffff821680159081611b4d575b6001149081611b43575b159081611b3a575b50611b1257818360017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006114a49516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611abd575b5061149c612fda565b61015b612fda565b6040908151926114b48385612077565b601284527f426c6f636b4275696c646572506f6c696379000000000000000000000000000060208501528251936114eb8486612077565b600185527f3100000000000000000000000000000000000000000000000000000000000000602086015261151d612fda565b611525612fda565b80519067ffffffffffffffff8211610ea0576115617fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254612217565b601f8111611a50575b50602090601f8311600114611970576115b792915f9183610efa5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102555b835167ffffffffffffffff8111610ea0576116157fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354612217565b601f8111611903575b50602094601f82116001146118255761166e9293949582915f9261181a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155807fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015560025468010000000000000000811015610ea0577f27fe5f0c1c3b1ed427cc63d0f05759ffdecf9aec9e18d31ef366fc8a6cb5dc3b916117498260016020940160025561250a565b81549060031b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001831b921b19161790558451908152a161178857005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555160018152a1005b015190508680610c8e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52805f20915f5b8881106118eb575083600195969798106118b4575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355611691565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080611887565b91926020600181928685015181550194019201611872565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f5261196a907f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f840160051c81019160208510610e9657601f0160051c01906126bd565b8561161e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52815f20925f5b818110611a385750908460019594939210611a01575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556115da565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558680806119d4565b929360206001819287860151815501950193016119be565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52611ab7907f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f850160051c81019160208610610e9657601f0160051c01906126bd565b8661156a565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005584611493565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158561143c565b303b159150611434565b84915061142a565b346101625760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016257611b8c612173565b602435604435916064359267ffffffffffffffff841161016257611be0611bda611bbd611be9963690600401612183565b9190611bd2611bcd8689896127fb565b61275e565b9236916120f2565b90612ec8565b90959195612f02565b73ffffffffffffffffffffffffffffffffffffffff841690815f52600360205260405f2054808203611c885750505f52600360205260405f20928354937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8514611c5b57600161016095019055612d44565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b346101625760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101625760043567ffffffffffffffff81116101625760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261016257611d2c82612022565b80600401358015158103610162578252602481013567ffffffffffffffff811161016257611d609060043691840101612128565b6020830152604481013567ffffffffffffffff81116101625781016101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101625760405190611db58261203e565b60048101357fffffffffffffffffffffffffffffffff0000000000000000000000000000000081168103610162578252602481013567ffffffffffffffff811161016257611e099060043691840101612128565b6020830152604481013567ffffffffffffffff811161016257611e329060043691840101612128565b6040830152611e4360648201612146565b6060830152611e5460848201612146565b6080830152611e6560a48201612146565b60a083015260c481013567ffffffffffffffff811161016257611e8e9060043691840101612128565b60c083015260e481013567ffffffffffffffff811161016257611eb79060043691840101612128565b60e083015261010481013567ffffffffffffffff811161016257611ee19060043691840101612128565b61010083015261012481013567ffffffffffffffff811161016257611f0c9060043691840101612128565b61012083015261014481013567ffffffffffffffff811161016257611f379060043691840101612128565b61014083015261016481013567ffffffffffffffff811161016257611f629060043691840101612128565b61016083015261018481013567ffffffffffffffff811161016257611f8d9060043691840101612128565b6101808301526101a481013567ffffffffffffffff811161016257611fb89060043691840101612128565b6101a08301526101c48101359067ffffffffffffffff8211610162576004611fe39236920101612128565b6101c0820152604083015260648101359167ffffffffffffffff83116101625761201861077192600460209536920101612128565b606082015261254f565b6080810190811067ffffffffffffffff821117610ea057604052565b6101e0810190811067ffffffffffffffff821117610ea057604052565b6040810190811067ffffffffffffffff821117610ea057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610ea057604052565b67ffffffffffffffff8111610ea057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926120fe826120b8565b9161210c6040519384612077565b829481845281830111610162578281602093845f960137010152565b9080601f8301121561016257816020612143933591016120f2565b90565b35907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361016257565b6004359060ff8216820361016257565b9181601f840112156101625782359167ffffffffffffffff8311610162576020838186019501011161016257565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361016257565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90600182811c9216801561225e575b602083101461223157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691612226565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102549161229a83612217565b808352926001811690811561233e57506001146122c0575b6122be92500383612077565b565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106123225750509060206122be928201016122b2565b602091935080600191548385890101520191019091849261230a565b602092506122be9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016122b2565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354916123ad83612217565b808352926001811690811561233e57506001146123d0576122be92500383612077565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106124325750509060206122be928201016122b2565b602091935080600191548385890101520191019091849261241a565b9060405191825f82549261246184612217565b80845293600181169081156124ca5750600114612486575b506122be92500383612077565b90505f9291925260205f20905f915b8183106124ae5750509060206122be928201015f612479565b6020919350806001915483858901015201910190918492612495565b602093506122be9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f612479565b6002548110156125225760025f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040015160c081015190610140810151610160820151916101808101516101a082015160e08301519060a08401517fffffffffffffffff0000000000000000000000000000000000000000000000001678030000000000000000000000000000000000000000000000001893608001517fffffffff2fffffff00000000000000000000000000000000000000000000000016926040519687966020880199805160208192018c5e880160208101915f83528051926020849201905e016020015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e01917fffffffffffffffff0000000000000000000000000000000000000000000000001682526008820152037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff08101825260100161269f9082612077565b51902090565b67ffffffffffffffff8111610ea05760051b60200190565b8181106126c8575050565b5f81556001016126bd565b6126dd8154612217565b90816126e7575050565b81601f5f93116001146126f8575055565b8183526020832061271491601f0160051c8101906001016126bd565b8082528160208120915555565b600254905f5b828110612735575050505f90565b61273e8161250a565b90549060031b1c60ff83161461275657600101612727565b505050600190565b604290612769613159565b6127716131c3565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526127c260c082612077565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b916040519160ff60208401947f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc8652166040840152606083015260808201526080815261269f60a082612077565b5190811515820361016257565b81601f820112156101625780519061286d826120b8565b9261287b6040519485612077565b8284526020838301011161016257815f9260208093018386015e8301015290565b51907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361016257565b5f73ffffffffffffffffffffffffffffffffffffffff602481600154169360405194859384927f727310620000000000000000000000000000000000000000000000000000000084521660048301525afa908115612c4c575f905f92612964575b501561295d576129399061254f565b805f525f60205261294d60405f2054612217565b61295857505f905f90565b600191565b505f905f90565b9150503d805f833e6129768183612077565b8101906040818303126101625761298c81612849565b9060208101519067ffffffffffffffff8211610162570160808184031261016257604051926129ba84612022565b6129c382612849565b8452602082015167ffffffffffffffff811161016257816129e5918401612856565b6020850152604082015167ffffffffffffffff81116101625782016101e0818303126101625760405190612a188261203e565b80517fffffffffffffffffffffffffffffffff0000000000000000000000000000000081168103610162578252602081015167ffffffffffffffff81116101625783612a65918301612856565b6020830152604081015167ffffffffffffffff81116101625783612a8a918301612856565b6040830152612a9b6060820161289c565b6060830152612aac6080820161289c565b6080830152612abd60a0820161289c565b60a083015260c081015167ffffffffffffffff81116101625783612ae2918301612856565b60c083015260e081015167ffffffffffffffff81116101625783612b07918301612856565b60e083015261010081015167ffffffffffffffff81116101625783612b2d918301612856565b61010083015261012081015167ffffffffffffffff81116101625783612b54918301612856565b61012083015261014081015167ffffffffffffffff81116101625783612b7b918301612856565b61014083015261016081015167ffffffffffffffff81116101625783612ba2918301612856565b61016083015261018081015167ffffffffffffffff81116101625783612bc9918301612856565b6101808301526101a081015167ffffffffffffffff81116101625783612bf0918301612856565b6101a08301526101c08101519067ffffffffffffffff821161016257612c1891849101612856565b6101c08201526040850152606082015167ffffffffffffffff811161016257612c419201612856565b60608301525f61292a565b6040513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff168015612d185773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b91612d4e82612721565b15612e2d57612d5c836128c9565b929015612deb57827f7ee219ecd2883be979f2fa9a59b6424da187c54193dc20859cbd4071d9bf519c949260ff612de69373ffffffffffffffffffffffffffffffffffffffff965f525f602052612db560405f2061244e565b936040519788971687526020870152436040870152166060850152608084015260c060a084015260c08301906121d4565b0390a1565b73ffffffffffffffffffffffffffffffffffffffff847f4c547670000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60ff827f4fc7a241000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612e9c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b8151919060418303612ef857612ef19250602082015190606060408401519301515f1a90613031565b9192909190565b50505f9160029190565b6004811015612fad5780612f14575050565b60018103612f44577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612f7857507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612f825750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561300957565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116130b5579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612c4c575f5173ffffffffffffffffffffffffffffffffffffffff8116156130ab57905f905f90565b505f906001905f90565b5050505f9160039190565b906130fd57508051156130d557602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613150575b61310e575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613106565b613161612268565b8051908115613171576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054801561319e5790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b6131cb61237b565b80519081156131db576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10154801561319e579056fea164736f6c634300081c000a", + "nonce": "0xe90", "chainId": "0x515" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0xf3f272715a94d66e496258db35cd9ca4d10c3ba1b868735fad0faa463786fb8c", + "hash": null, "transactionType": "CREATE", "contractName": "ERC1967Proxy", - "contractAddress": "0xe3d3b4b2c9ad46aaa9db6d6a18dea576499918de", + "contractAddress": "0x3b03b3caabd49ca12de9eba46a6a2950700b1db4", "function": null, "arguments": [ - "0x732217C72906F9c0ceA039285b50154Af108ED56", - "0x485cc955000000000000000000000000636860551bce455fa00384e171de672cd0195dd300000000000000000000000031e95d2a9b1507d83cfd417f72bcae140633d6f2" + "0x56E5f1339eeB6a186E6BfBcce98E46fE581de981", + "0x485cc9550000000000000000000000009654a3786f960db19a64dff16fdc34ed6090a760000000000000000000000000d2b914537e25cf3931c2d7578ab2085e19067313" ], "transaction": { - "from": "0x636860551bce455fa00384e171de672cd0195dd3", - "gas": "0x57f69", + "from": "0x9654a3786f960db19a64dff16fdc34ed6090a760", + "gas": "0x57f94", "value": "0x0", - "input": "0x608060405261027f8038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b6040516064908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffdfea164736f6c634300081c000a000000000000000000000000732217c72906f9c0cea039285b50154af108ed5600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000636860551bce455fa00384e171de672cd0195dd300000000000000000000000031e95d2a9b1507d83cfd417f72bcae140633d6f200000000000000000000000000000000000000000000000000000000", - "nonce": "0x1f", + "input": "0x608060405261027f8038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b6040516064908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157602081519101fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffdfea164736f6c634300081c000a00000000000000000000000056e5f1339eeb6a186e6bfbcce98e46fe581de98100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000009654a3786f960db19a64dff16fdc34ed6090a760000000000000000000000000d2b914537e25cf3931c2d7578ab2085e1906731300000000000000000000000000000000000000000000000000000000", + "nonce": "0xe91", "chainId": "0x515" }, "additionalContracts": [], "isFixedGasLimit": false } ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x25009e", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0xf4ec5182b9cb2335f4aa95eecb986de50766b739988c92a1569fb2843cb5dfe0", - "transactionIndex": "0x2", - "blockHash": "0x8125b15605cea938366038ea51a6259e3f998bba4e7c36cabf7e13867a4937b5", - "blockNumber": "0x1642740", - "gasUsed": "0x23f99a", - "effectiveGasPrice": "0x55c", - "from": "0x636860551bce455fa00384e171de672cd0195dd3", - "to": null, - "contractAddress": "0x732217c72906f9c0cea039285b50154af108ed56", - "l1BaseFeeScalar": "0x7d0", - "l1BlobBaseFee": "0x1", - "l1BlobBaseFeeScalar": "0xdbba0", - "l1Fee": "0x67c6582", - "l1GasPrice": "0xb518e", - "l1GasUsed": "0x11e81" - }, - { - "status": "0x1", - "cumulativeGasUsed": "0x293b3e", - "logs": [ - { - "address": "0xe3d3b4b2c9ad46aaa9db6d6a18dea576499918de", - "topics": [ - "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000732217c72906f9c0cea039285b50154af108ed56" - ], - "data": "0x", - "blockHash": "0x8125b15605cea938366038ea51a6259e3f998bba4e7c36cabf7e13867a4937b5", - "blockNumber": "0x1642740", - "transactionHash": "0xf3f272715a94d66e496258db35cd9ca4d10c3ba1b868735fad0faa463786fb8c", - "transactionIndex": "0x3", - "logIndex": "0x0", - "removed": false - }, - { - "address": "0xe3d3b4b2c9ad46aaa9db6d6a18dea576499918de", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000636860551bce455fa00384e171de672cd0195dd3" - ], - "data": "0x", - "blockHash": "0x8125b15605cea938366038ea51a6259e3f998bba4e7c36cabf7e13867a4937b5", - "blockNumber": "0x1642740", - "transactionHash": "0xf3f272715a94d66e496258db35cd9ca4d10c3ba1b868735fad0faa463786fb8c", - "transactionIndex": "0x3", - "logIndex": "0x1", - "removed": false - }, - { - "address": "0xe3d3b4b2c9ad46aaa9db6d6a18dea576499918de", - "topics": [ - "0x27fe5f0c1c3b1ed427cc63d0f05759ffdecf9aec9e18d31ef366fc8a6cb5dc3b" - ], - "data": "0x00000000000000000000000031e95d2a9b1507d83cfd417f72bcae140633d6f2", - "blockHash": "0x8125b15605cea938366038ea51a6259e3f998bba4e7c36cabf7e13867a4937b5", - "blockNumber": "0x1642740", - "transactionHash": "0xf3f272715a94d66e496258db35cd9ca4d10c3ba1b868735fad0faa463786fb8c", - "transactionIndex": "0x3", - "logIndex": "0x2", - "removed": false - }, - { - "address": "0xe3d3b4b2c9ad46aaa9db6d6a18dea576499918de", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "blockHash": "0x8125b15605cea938366038ea51a6259e3f998bba4e7c36cabf7e13867a4937b5", - "blockNumber": "0x1642740", - "transactionHash": "0xf3f272715a94d66e496258db35cd9ca4d10c3ba1b868735fad0faa463786fb8c", - "transactionIndex": "0x3", - "logIndex": "0x3", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000000000000400000000000000000820000000002000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000000000000000000402000000400000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000004000000000000000010000020000000000008000000000020000800000084000000000000000020000000000000000000000000000000000000000000000000000000000000008000", - "type": "0x2", - "transactionHash": "0xf3f272715a94d66e496258db35cd9ca4d10c3ba1b868735fad0faa463786fb8c", - "transactionIndex": "0x3", - "blockHash": "0x8125b15605cea938366038ea51a6259e3f998bba4e7c36cabf7e13867a4937b5", - "blockNumber": "0x1642740", - "gasUsed": "0x43aa0", - "effectiveGasPrice": "0x55c", - "from": "0x636860551bce455fa00384e171de672cd0195dd3", - "to": null, - "contractAddress": "0xe3d3b4b2c9ad46aaa9db6d6a18dea576499918de", - "l1BaseFeeScalar": "0x7d0", - "l1BlobBaseFee": "0x1", - "l1BlobBaseFeeScalar": "0xdbba0", - "l1Fee": "0xcf4548", - "l1GasPrice": "0xb518e", - "l1GasUsed": "0x23c3" - } - ], + "receipts": [], "libraries": [], - "pending": [], + "pending": [ + "0x539fcf80627aaa5a122668036876c8d088eb542ccea1f89f82004bf8036527a2" + ], "returns": {}, - "timestamp": 1750193327, + "timestamp": 1753986344, "chain": 1301, - "commit": "2c90ba2" + "commit": "49dcb19" } \ No newline at end of file diff --git a/broadcast/FlashtestationRegistry.s.sol/1301/run-latest.json b/broadcast/FlashtestationRegistry.s.sol/1301/run-latest.json index cde9600..65be87b 100644 --- a/broadcast/FlashtestationRegistry.s.sol/1301/run-latest.json +++ b/broadcast/FlashtestationRegistry.s.sol/1301/run-latest.json @@ -1,39 +1,39 @@ { "transactions": [ { - "hash": "0x154991e80d370b4fdd726ff3f532676059efd55e01b1eec88abfb431cef4b53c", + "hash": "0xe63293160184bfe74b79ae770e26d0377fb01bcf96b5f178144ac5bb53737b46", "transactionType": "CREATE", "contractName": "FlashtestationRegistry", - "contractAddress": "0x789494060ab4d8c861b6e1bd244b1b4ad15cb4c2", + "contractAddress": "0x1a3208ae6a2d2bd6140ac7076155c2f7c46d0ca8", "function": null, "arguments": null, "transaction": { - "from": "0x636860551bce455fa00384e171de672cd0195dd3", - "gas": "0x508188", + "from": "0x9654a3786f960db19a64dff16fdc34ed6090a760", + "gas": "0x536f9d", "value": "0x0", - "input": "0x60a08060405234602957306080526148bb908161002e82396080518181816106e001526108ee0152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80632820b0ff146101545780632e87d95d1461014f578063485cc9551461014a5780634f1ef2861461014557806352d1902d146101405780636387ca681461013b5780636931164e146101365780636a5306a314610131578063715018a61461012c5780637ecebe001461012757806384b0196e1461012257806387be6d4e1461011d5780638da5cb5b14610118578063aaae748e14610113578063ad3cb1cc1461010e578063c00962fb14610109578063df791f3014610104578063f2fde38b146100ff578063f745cb30146100fa5763f9b68b31146100f5575f80fd5b6119ad565b61190a565b61178c565b6115ba565b6112ca565b61124d565b611213565b6111a3565b611153565b611034565b610f23565b610e49565b610df1565b610d7a565b610c8c565b6108a9565b610665565b6102c5565b610260565b6101a3565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361017c57565b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361017c57565b3461017c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c5760043573ffffffffffffffffffffffffffffffffffffffff6101f2610159565b1690815f52600160205260ff600260405f20015416918261021b575b6040518315158152602090f35b9091505f52600160205260405f2054145f8061020e565b9181601f8401121561017c5782359167ffffffffffffffff831161017c576020838186019501011161017c57565b3461017c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c5760043567ffffffffffffffff811161017c576102bd6102b46020923690600401610232565b60243591611c2a565b604051908152f35b3461017c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c576102fc610180565b610304610159565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054919067ffffffffffffffff61035460ff604086901c1615610346565b1590565b9467ffffffffffffffff1690565b168015908161054c575b6001149081610542575b159081610539575b50610511576103f191836103e860017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61049657611c88565b6103f757005b6104627fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080602081015b0390a1005b61050c680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611c88565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f610370565b303b159150610368565b84915061035e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6101e0810190811067ffffffffffffffff82111761059e57604052565b610554565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761059e57604052565b604051906105f36080836105a3565b565b67ffffffffffffffff811161059e57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b92919261063b826105f5565b9161064960405193846105a3565b82948184528183011161017c578281602093845f960137010152565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c57610697610180565b60243567ffffffffffffffff811161017c573660238201121561017c576106c890369060248160040135910161062f565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610867575b5061083f576107186123c7565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f938161080e575b506107ad577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc83036107e1576107df9250613256565b005b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b61083191945060203d602011610838575b61082981836105a3565b810190612379565b925f610766565b503d61081f565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f61070b565b3461017c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c5773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361083f5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90816101c0610c55610c21610beb610bb5610b7f610b49610b13610ade610a266109f2610c899d6101e060408f6020908185526109e282860182517fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b01519201526102008d019061093e565b60408d01518c82037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00160608e015261093e565b60608c01517fffffffffffffffff0000000000000000000000000000000000000000000000001660808c015260808c01517fffffffffffffffff0000000000000000000000000000000000000000000000001660a08c015260a08c01517fffffffffffffffff0000000000000000000000000000000000000000000000001660c08c015260c08c01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08c83030160e08d015261093e565b60e08b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08b8303016101008c015261093e565b6101008a01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a8303016101208b015261093e565b6101208901517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0898303016101408a015261093e565b6101408801517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08883030161016089015261093e565b6101608701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08783030161018088015261093e565b6101808601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868303016101a087015261093e565b6101a08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858303018486015261093e565b920151906101e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08285030191015261093e565b90565b3461017c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c57610d0373ffffffffffffffffffffffffffffffffffffffff610cdb610180565b610ce3611fab565b5016805f526001602052610d0a600160405f200160405193848092611824565b03836105a3565b815115610d4f57610d4b610d3f610d3a84610d23611fab565b508051610d3590610278811015612388565b613387565b614178565b60405191829182610981565b0390f35b7fbb527454000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461017c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c5760206102bd600435610db9614676565b604291604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b3461017c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c5760206040517ffc355315de9f3bfae8392f96decb6b87d1f1419d0b3012f0bd8483044e2cd6138152f35b3461017c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c57610e7f6123c7565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c5773ffffffffffffffffffffffffffffffffffffffff610f6f610180565b165f526002602052602060405f2054604051908152f35b92939073ffffffffffffffffffffffffffffffffffffffff92610fda610fe8927f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e087019061093e565b90858203604087015261093e565b9360608401521660808201525f60a082015260c0818303910152602080835192838152019201905f5b81811061101e5750505090565b8251845260209384019390920191600101611011565b3461017c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054158061112a575b156110cc57611098612433565b6110a0612542565b90610d4b6040516110b26020826105a3565b5f8082523660208301376040519384933091469186610f86565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101541561108b565b3461017c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461017c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461017c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c5760206040516150008152f35b3461017c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c57610d4b60405161128c6040826105a3565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061093e565b3461017c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c5760043567ffffffffffffffff811161017c57611319903690600401610232565b6024359060443567ffffffffffffffff811161017c5761133d903690600401610232565b91909361135a61134e36848461062f565b51615000811115612018565b611362612613565b61139c6113835f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f60405180927f38d8480a0000000000000000000000000000000000000000000000000000000082528183816113d68989600484016120fd565b03925af19081156115b5575f905f92611590575b5015611556576113fc6114c4916126ac565b936114be61140986612884565b976114b66114b161144061143a6113838d6020815191012073ffffffffffffffffffffffffffffffffffffffff1690565b99612ab9565b996114768161146d8c73ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2090565b5480821461212a565b61149e8a73ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2090565b6114a8815461218e565b90558888611c2a565b6123bb565b92369161062f565b90612b5e565b73ffffffffffffffffffffffffffffffffffffffff80851691160361152e5784826115167f1d4f72cae22ebdc85004ad3a21c727d734ae6074995f2f639b5836b9bfca4e8e976115239585888a612eca565b92604051968796876121c0565b0390a16107df612687565b7f8baa579f000000000000000000000000000000000000000000000000000000005f5260045ffd5b61158c906040519182917f64d10cb100000000000000000000000000000000000000000000000000000000835260048301612119565b0390fd5b90506115ae91503d805f833e6115a681836105a3565b81019061204b565b905f6113ea565b61210e565b3461017c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c5760043567ffffffffffffffff811161017c57611609903690600401610232565b61161761134e36838561062f565b61161f612613565b6116406113835f5473ffffffffffffffffffffffffffffffffffffffff1690565b5f60405180927f38d8480a00000000000000000000000000000000000000000000000000000000825281838161167a888a600484016120fd565b03925af19081156115b5575f905f9261176f575b50156115565761169d906126ac565b916116a783612884565b6116d66116d06113838351602085012073ffffffffffffffffffffffffffffffffffffffff1690565b94612ab9565b923373ffffffffffffffffffffffffffffffffffffffff86160361172957918183611516611523948896857f1d4f72cae22ebdc85004ad3a21c727d734ae6074995f2f639b5836b9bfca4e8e9a8a612eca565b7f5d23870f000000000000000000000000000000000000000000000000000000005f523360045273ffffffffffffffffffffffffffffffffffffffff851660245260445ffd5b905061178591503d805f833e6115a681836105a3565b905f61168e565b3461017c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c576107df6117c6610180565b6117ce6123c7565b612215565b90600182811c9216801561181a575b60208310146117ed57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916117e2565b5f9291815491611833836117d3565b8083529260018116908115611888575060011461184f57505050565b5f9081526020812093945091925b83831061186e575060209250010190565b60018160209294939454838587010152019101919061185d565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b906105f3610d039260405193848092611824565b90610c8994926118f591835260806020840152608083019061093e565b9215156040820152606081840391015261093e565b3461017c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c5773ffffffffffffffffffffffffffffffffffffffff611956610180565b165f52600160205260405f208054610d4b6003604051936119858561197e8160018501611824565b03866105a3565b6119a160ff60028301541691610d036040518095819301611824565b604051948594856118d8565b3461017c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017c576119e4610180565b611a14611a0f8273ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b612302565b805115611be857611a2b6103426040830151151590565b611ba6575f611a9081926020611a58611383855473ffffffffffffffffffffffffffffffffffffffff1690565b9101516040519485809481937f38d8480a00000000000000000000000000000000000000000000000000000000835260048301612119565b03925af19081156115b5575f91611b8b575b5015611ae9577f927b3443000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff1660045260245ffd5b61049181611b646002611b3b7f5bb0bbb0993a623e10dd3579bf5b9403deba943e0bfe950b740d60209c9135ef9573ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b611b9f91503d805f833e6115a681836105a3565b505f611aa2565b7f138c0ee8000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b7fbb527454000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b611c3591369161062f565b60208151910120906040519060208201927ffc355315de9f3bfae8392f96decb6b87d1f1419d0b3012f0bd8483044e2cd61384526040830152606082015260608152611c826080826105a3565b51902090565b611c9f90929192611c97613031565b6117ce613031565b604091825192611caf81856105a3565b601684527f466c617368746573746174696f6e5265676973747279000000000000000000006020850152611ce5815191826105a3565b600181527f31000000000000000000000000000000000000000000000000000000000000006020820152611d17613031565b611d1f613031565b835167ffffffffffffffff811161059e57611d6381611d5e7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102546117d3565b612b8a565b6020601f8211600114611e905791611dce82611df59373ffffffffffffffffffffffffffffffffffffffff96956105f398995f92611e85575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10255613088565b611e1d5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10055565b611e455f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155565b1673ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f55565b015190505f80611d9c565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d965f5b818110611f935750926105f3969773ffffffffffffffffffffffffffffffffffffffff96959360019383611df59710611f5c575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10255613088565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080611f2f565b83830151895560019098019760209384019301611efb565b60405190611fb882610581565b60606101c0835f81528260208201528260408201525f838201525f60808201525f60a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a08201520152565b156120205750565b7f9e24c2f6000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b919060408382031261017c578251801515810361017c579260208101519067ffffffffffffffff821161017c570181601f8201121561017c57805190612090826105f5565b9261209e60405194856105a3565b8284526020838301011161017c57815f9260208093018386015e8301015290565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b916020610c899381815201916120bf565b6040513d5f823e3d90fd5b906020610c8992818152019061093e565b15612133575050565b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121bb5760010190565b612161565b94919260809461220d9473ffffffffffffffffffffffffffffffffffffffff6121ff949a999a168852602088015260a0604088015260a08701916120bf565b90848203606086015261093e565b931515910152565b73ffffffffffffffffffffffffffffffffffffffff1680156122d65773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b906040516080810181811067ffffffffffffffff82111761059e5760039160609160405261237581958054835260405161234a816123438160018601611824565b03826105a3565b602084015260ff6002820154161515604084015261236e6040518096819301611824565b03846105a3565b0152565b9081602091031261017c575190565b156123905750565b7fd915602a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b610c8990610db9614676565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361240757565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6040517fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254815f612463836117d3565b80835292600181169081156125055750600114612487575b610c89925003826105a3565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106124e9575050906020610c899282010161247b565b60209193508060019154838588010152019101909183926124d1565b60209250610c899491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b82010161247b565b6040517fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354815f612572836117d3565b8083529260018116908115612505575060011461259557610c89925003826105a3565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106125f7575050906020610c899282010161247b565b60209193508060019154838588010152019101909183926125df565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c61265f5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b6126b4611fab565b50805160021161017c576126c860026105f5565b6126d560405191826105a3565b600281526126e360026105f5565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602082019201368337816020840160025b6020811015612836578061281757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b51825182169119161790525190517fffff000000000000000000000000000000000000000000000000000000000000811691600281106127e2575b505060f01c600481036127b75750610d3a816127a1610c899361430b565b80516127b290610255811015612388565b613450565b7f940a5ec6000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fffff0000000000000000000000000000000000000000000000000000000000009250829060020360031b1b16165f80612783565b61282b6128266128309261462c565b614667565b61463a565b90612748565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561271657612161565b6101c00180515160408103612998575051805160401161017c576128a860406105f5565b906128b660405192836105a3565b604082526128c460406105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060200160405b602081101561294a578061293557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b61282b6128266129449261462c565b90612927565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156128f557612161565b7f4fe16298000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b95612a4990612a3b612a9197612a2d6105f39d9f9e9c9798612a1f8c612a659b6101209f99612a579b612a03612a1192610140865261014086019061093e565b90848203602086015261093e565b91604081840391015261093e565b8c810360608e01529061093e565b908a820360808c015261093e565b9088820360a08a015261093e565b9086820360c088015261093e565b9084820360e086015261093e565b7fffffffffffffffff000000000000000000000000000000000000000000000000909716610100830152565b01907fffffffffffffffff000000000000000000000000000000000000000000000000169052565b60c081015190611c82610140820151612b3261016084015193610180810151906101a08101516101008201516101208301519060e0840151927fffffffffffffffff00000000000000000000000000000000000000000000000060a08160808801511696015116956040519a8b9960208b019d8e6129c3565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826105a3565b610c8991612b6b916144b0565b90929192614521565b818110612b7f575050565b5f8155600101612b74565b90601f8211612b97575050565b6105f3917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f5260205f20906020601f840160051c83019310612be2575b601f0160051c0190612b74565b9091508190612bd5565b9190601f8111612bfb57505050565b6105f3925f5260205f20906020601f840160051c83019310612be257601f0160051c0190612b74565b919091825167ffffffffffffffff811161059e57612c4c81612c4684546117d3565b84612bec565b6020601f8211600114612c9d578190612c999394955f92611e855750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821690612cce845f5260205f2090565b915f5b818110612d2757509583600195969710612cf0575b505050811b019055565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080612ce6565b9192602060018192868b015181550194019201612cd1565b908051825560018201602082015180519067ffffffffffffffff821161059e57612d7382612d6d85546117d3565b85612bec565b602090601f8311600114612e1a5792612dca836060946105f39897946003975f92611e855750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b612e11612ddd6040830151151590565b600286019060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b01519101612c24565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691612e4c855f5260205f2090565b925f5b818110612eb25750936105f3979693600396936001938360609810612e7c575b505050811b019055612dcd565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f8848a1b161c191690555f8080612e6f565b92936020600181928786015181550195019301612e4f565b92949390915f9584612efa8573ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b541480612fde575b612f9757612f2e8473ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b54612f8e575b91612f546105f3959492612f8994612f4a6105e4565b968752369161062f565b602085015260016040850152606084015273ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b612d3f565b60019650612f34565b7fd5a406a6000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff8416600452602485905260445ffd5b50613012600161300c8673ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b016118c4565b6020815191012061302436838561062f565b6020815191012014612f02565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561306057565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90815167ffffffffffffffff811161059e576130ee816130c87fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103546117d3565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103612bec565b602092601f821160011461315f5761313b929382915f92611e855750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216937f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75915f5b86811061323e5750836001959610613207575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80806131dd565b919260206001819286850151815501940192016131ca565b90813b156133455773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a280511561331457613311916145e8565b50565b50503461331d57565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b80516102781161017c5761339c6102486105f5565b906133aa60405192836105a3565b61024882526133ba6102486105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906050016102485b6020811015613402578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156133ec57612161565b80516102551161017c576134656102486105f5565b9061347360405192836105a3565b61024882526134836102486105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208401910136823790602d016102485b60208110156134cb578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156134b557612161565b805160101161017c5761352c60106105f5565b9061353a60405192836105a3565b6010825261354860106105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060200160105b602081101561358f578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561357957612161565b805160401161017c576135f060306105f5565b906135fe60405192836105a3565b6030825261360c60306105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237603080920190915b6020811015613654578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561363e57612161565b805160701161017c576136b560306105f5565b906136c360405192836105a3565b603082526136d160306105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060600160305b6020811015613718578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561370257612161565b805160781161017c5761377960086105f5565b9061378760405192836105a3565b6008825261379560086105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060900160085b60208110156137dc578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156137c657612161565b805160801161017c5761383d60086105f5565b9061384b60405192836105a3565b6008825261385960086105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060980160085b60208110156138a0578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561388a57612161565b805160881161017c5761390160086105f5565b9061390f60405192836105a3565b6008825261391d60086105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060a00160085b6020811015613964578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561394e57612161565b805160b81161017c576139c560306105f5565b906139d360405192836105a3565b603082526139e160306105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060a80160305b6020811015613a28578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613a1257612161565b805160e81161017c57613a8960306105f5565b90613a9760405192836105a3565b60308252613aa560306105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060d80160305b6020811015613aec578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613ad657612161565b80516101181161017c57613b4e60306105f5565b90613b5c60405192836105a3565b60308252613b6a60306105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101080160305b6020811015613bb2578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613b9c57612161565b80516101481161017c57613c1460306105f5565b90613c2260405192836105a3565b60308252613c3060306105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101380160305b6020811015613c78578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613c6257612161565b80516101781161017c57613cda60306105f5565b90613ce860405192836105a3565b60308252613cf660306105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101680160305b6020811015613d3e578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613d2857612161565b80516101a81161017c57613da060306105f5565b90613dae60405192836105a3565b60308252613dbc60306105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101980160305b6020811015613e04578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613dee57612161565b80516101d81161017c57613e6660306105f5565b90613e7460405192836105a3565b60308252613e8260306105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101c80160305b6020811015613eca578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613eb457612161565b80516102081161017c57613f2c60306105f5565b90613f3a60405192836105a3565b60308252613f4860306105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101f80160305b6020811015613f90578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613f7a57612161565b80516102481161017c57613ff260406105f5565b9061400060405192836105a3565b6040825261400e60406105f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906102280160405b6020811015614056578061293557509192915050565b909182518152602081018091116121bb5791602081018091116121bb57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561404057612161565b90602082519201517fffffffffffffffffffffffffffffffff00000000000000000000000000000000811692601081106140dc575050565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000929350829060100360031b1b161690565b90602082519201517fffffffffffffffff00000000000000000000000000000000000000000000000081169260088110614146575050565b7fffffffffffffffff000000000000000000000000000000000000000000000000929350829060080360031b1b161690565b90614303614184611fab565b926141bf61419961419483613519565b6140a4565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000168552565b6141c8816135dd565b60208501526141d6816136a2565b60408501526142186141ef6141ea83613766565b61410e565b7fffffffffffffffff000000000000000000000000000000000000000000000000166060860152565b6142506142276141ea8361382a565b7fffffffffffffffff000000000000000000000000000000000000000000000000166080860152565b61428861425f6141ea836138ee565b7fffffffffffffffff0000000000000000000000000000000000000000000000001660a0860152565b614291816139b2565b60c085015261429f81613a76565b60e08501526142ad81613b3a565b6101008501526142bc81613c00565b6101208501526142cb81613cc6565b6101408501526142da81613d8c565b6101608501526142e981613e52565b6101808501526142f881613f18565b6101a0850152613fde565b6101c0830152565b90815160081161017c5761431f60066105f5565b61432c60405191826105a3565b6006815261433a60066105f5565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208201920136833760226006940182905b6020861015614463577fffffffff00000000000000000000000000000000000000000000000000000000949580155f1461444e57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b51825182169119161790525190518281169160048110614439575b5050167f8100000000000000000000000000000000000000000000000000000000000000810361440e5750565b7fea75591a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b839250829060040360031b1b16165f806143e1565b61282b61282661445d9261462c565b906143c6565b9081518152602081018091116121bb5790602081018091116121bb57947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081116121bb579461436e565b81519190604183036144e0576144d99250602082015190606060408401519301515f1a906146d7565b9192909190565b50505f9160029190565b600411156144f457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b61452a816144ea565b80614533575050565b61453c816144ea565b6001810361456c577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b614575816144ea565b600281036145a957507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b806145b56003926144ea565b146145bd5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b5f80610c8993602081519101845af43d15614624573d91614608836105f5565b9261461660405194856105a3565b83523d5f602085013e614766565b606091614766565b60200390602082116121bb57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116121bb57565b601f81116121bb576101000a90565b61467e6147ff565b614686614869565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611c8260c0826105a3565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161475b579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156115b5575f5173ffffffffffffffffffffffffffffffffffffffff81161561475157905f905f90565b505f906001905f90565b5050505f9160039190565b906147a3575080511561477b57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806147f6575b6147b4575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156147ac565b614807612433565b8051908115614817576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156148445790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b614871612542565b8051908115614881576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101548015614844579056fea164736f6c634300081c000a", - "nonce": "0x1c", + "input": "0x60a0806040523460295730608052614b73908161002e8239608051818181610abd0152610cc90152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806322a43e251461015457806322ba2bbf1461014f5780634111c12b1461014a578063485cc955146101455780634980f288146101405780634f1ef2861461013b57806352d1902d146101365780636a5306a314610131578063715018a61461012c57806372731062146101275780637ecebe001461012257806384b0196e1461011d57806387be6d4e146101185780638da5cb5b14610113578063aaae748e1461010e578063ad3cb1cc14610109578063e416895214610104578063f2fde38b146100ff578063f745cb30146100fa5763f9b68b31146100f5575f80fd5b61198a565b6118e0565b611569565b611530565b6114b3565b611479565b611409565b6113b9565b61129a565b611189565b6110dd565b610d71565b610d19565b610c84565b610a42565b6108c9565b610643565b61055c565b610214565b61018b565b9181601f840112156101875782359167ffffffffffffffff8311610187576020838186019501011161018757565b5f80fd5b346101875760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101875760043567ffffffffffffffff8111610187576101da903690600401610159565b906024359067ffffffffffffffff82116101875760209261020261020c933690600401610159565b9160443593611bf9565b604051908152f35b346101875760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101875760043567ffffffffffffffff811161018757610263903690600401610159565b9060243567ffffffffffffffff811161018757610284903690600401610159565b9261028d6123c3565b6102a761029b368386610a0c565b51615000811115612437565b6102b561029b368685610a0c565b6102ef6102d65f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f60405180927f38d8480a000000000000000000000000000000000000000000000000000000008252818381610329888b6004840161265d565b03925af1908115610557575f905f92610532575b50156104f85761034c90612eeb565b6101c08101805151603481106104cd575061036790516130c8565b73ffffffffffffffffffffffffffffffffffffffff82959216330361048757610391368884610a0c565b6020815191012090808203610459575050916104407f206fdb1a74851a8542447b8b6704db24a36b906a7297cc23c2b984dc357b9978969261040e61044c956103e46103de36878c610a0c565b89613283565b956103ed6109b1565b60018152936103fd36888d610a0c565b602086015260408501523691610a0c565b606082015261043b8673ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b612a9c565b60405194859485612c20565b0390a1610457611d29565b005b7fcc14da59000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7f5d23870f000000000000000000000000000000000000000000000000000000005f523360045273ffffffffffffffffffffffffffffffffffffffff851660245260445ffd5b7f4fe16298000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b61052e906040519182917f64d10cb1000000000000000000000000000000000000000000000000000000008352600483016123a7565b0390fd5b905061055091503d805f833e6105488183610970565b810190612333565b905f61033d565b6123b8565b346101875760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101875760043567ffffffffffffffff8111610187576105ab903690600401610159565b60243567ffffffffffffffff8111610187576105cb903690600401610159565b6064359391604435919067ffffffffffffffff8611610187576105f5610457963690600401610159565b959094611c73565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018757565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361018757565b346101875760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101875761067a6105fd565b610682610620565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054919067ffffffffffffffff6106c960ff604086901c16159467ffffffffffffffff1690565b16801590816108c1575b60011490816108b7575b1590816108ae575b5061088657610766918361075d60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61080b57611dae565b61076c57005b6107d77fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080602081015b0390a1005b610881680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611dae565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f6106e5565b303b1591506106dd565b8491506106d3565b346101875760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018757602061020c6004356120d1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761094e57604052565b610905565b6101e0810190811067ffffffffffffffff82111761094e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761094e57604052565b604051906109c0608083610970565b565b604051906109c06101e083610970565b67ffffffffffffffff811161094e57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192610a18826109d2565b91610a266040519384610970565b829481845281830111610187578281602093845f960137010152565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018757610a746105fd565b60243567ffffffffffffffff8111610187573660238201121561018757610aa5903690602481600401359101610a0c565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610c42575b50610c1a57610af5612c6c565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610be9575b50610b8a577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610bbc576104579250613675565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b610c0c91945060203d602011610c13575b610c048183610970565b810190612c5d565b925f610b43565b503d610bfa565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610ae8565b34610187575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101875773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610c1a5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b34610187575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101875760206040517feca8d14af78b9a0b51933c07f541d31f1b01bc1fd108fadacba3347ee02abe538152f35b34610187575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018757610da7612c6c565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b816101c061102b611017611003610fef610fdb610fc7610fb3610fa1610f0b610ef861103d9d6101e060208f8190610ee88582517fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b01519201526101e08d0190610e4b565b60408d01518c6040818403910152610e4b565b60608c8101517fffffffffffffffff00000000000000000000000000000000000000000000000016908c015260808c8101517fffffffffffffffff00000000000000000000000000000000000000000000000016908c015260a08c8101517fffffffffffffffff00000000000000000000000000000000000000000000000016908c015260c08c01518b820360c08d0152610e4b565b60e08b01518a820360e08c0152610e4b565b6101008a01518982036101008b0152610e4b565b6101208901518882036101208a0152610e4b565b610140880151878203610140890152610e4b565b610160870151868203610160880152610e4b565b610180860151858203610180870152610e4b565b6101a08501518482036101a0860152610e4b565b920151906101c0818403910152610e4b565b90565b61103d9291151581526040602082015281511515604082015260606110aa611076602085015160808486015260c0850190610e4b565b60408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0858303016080860152610e8e565b9201519060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc082850301910152610e4b565b346101875760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101875773ffffffffffffffffffffffffffffffffffffffff6111296105fd565b60608060405161113881610932565b5f815281602082015261114961216e565b6040820152015216805f52600160205260ff60405f205416905f52600160205261117560405f206121db565b9061118560405192839283611040565b0390f35b346101875760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101875773ffffffffffffffffffffffffffffffffffffffff6111d56105fd565b165f526002602052602060405f2054604051908152f35b92939073ffffffffffffffffffffffffffffffffffffffff9261124061124e927f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e0870190610e4b565b908582036040870152610e4b565b9360608401521660808201525f60a082015260c0818303910152602080835192838152019201905f5b8181106112845750505090565b8251845260209384019390920191600101611277565b34610187575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610187577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580611390575b15611332576112fe612cd8565b611306612de7565b90611185604051611318602082610970565b5f80825236602083013760405193849330914691866111ec565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10154156112f1565b34610187575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018757602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610187575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018757602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b34610187575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101875760206040516150008152f35b34610187575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610187576111856040516114f2604082610970565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610e4b565b34610187575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018757602060405160348152f35b346101875760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610187576104576115a36105fd565b6115ab612c6c565b612246565b90600182811c921680156115f7575b60208310146115ca57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916115bf565b5f9291815491611610836115b0565b8083529260018116908115611665575060011461162c57505050565b5f9081526020812093945091925b83831061164b575060209250010190565b60018160209294939454838587010152019101919061163a565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b906109c06116b59260405193848092611601565b0383610970565b9061189a600c6116ca6109c2565b936116ff6116d9825460801b90565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000168652565b61170b600182016116a1565b602086015261171c600282016116a1565b60408601526118066117dd60038301546117626117398260c01b90565b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608a0152565b6117b5608082901b7fffffffffffffffff000000000000000000000000000000000000000000000000167fffffffffffffffff0000000000000000000000000000000000000000000000001660808a0152565b60401b7fffffffffffffffff0000000000000000000000000000000000000000000000001690565b7fffffffffffffffff0000000000000000000000000000000000000000000000001660a0870152565b611812600482016116a1565b60c0860152611823600582016116a1565b60e0860152611834600682016116a1565b610100860152611846600782016116a1565b610120860152611858600882016116a1565b61014086015261186a600982016116a1565b61016086015261187c600a82016116a1565b61018086015261188e600b82016116a1565b6101a0860152016116a1565b6101c0830152565b926118c461103d95936118d29315158652608060208701526080860190610e4b565b908482036040860152610e8e565b916060818403910152610e4b565b346101875760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101875773ffffffffffffffffffffffffffffffffffffffff61192c6105fd565b165f52600160205260405f2060ff815416611185600f6040519361195e856119578160018501611601565b0386610970565b61197e61196d600283016116bc565b916116b56040518095819301611601565b604051948594856118a2565b346101875760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610187576119c16105fd565b6119f16119ec8273ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b6121db565b602081019081515115611bb7575115611b75575f611a628192611a2b6102d6845473ffffffffffffffffffffffffffffffffffffffff1690565b90516040519485809481937f38d8480a000000000000000000000000000000000000000000000000000000008352600483016123a7565b03925af1908115610557575f91611b5a575b5015611abb577f927b3443000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff1660045260245ffd5b61080681611b33611b0b7f5bb0bbb0993a623e10dd3579bf5b9403deba943e0bfe950b740d60209c9135ef9473ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b611b6e91503d805f833e6105488183610970565b505f611a74565b7f138c0ee8000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b7fbb527454000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff831660045260245ffd5b611c0c90611c1b93929594953691610a0c565b60208151910120933691610a0c565b60208151910120906040519160208301937feca8d14af78b9a0b51933c07f541d31f1b01bc1fd108fadacba3347ee02abe53855260408401526060830152608082015260808152611c6d60a082610970565b51902090565b9193909294611cb796611ca8611cae92611c8b6123c3565b611ca0611c9b868b8b8b8b611bf9565b6120d1565b923691610a0c565b90613318565b90979197613389565b73ffffffffffffffffffffffffffffffffffffffff861690815f52600260205260405f2054808203611d535750505f52600260205260405f20948554957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8714611d4e576001611d299701905561246a565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b611d81565b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b611dc590929192611dbd613450565b6115ab613450565b604091825192611dd58185610970565b601684527f466c617368746573746174696f6e5265676973747279000000000000000000006020850152611e0b81519182610970565b600181527f31000000000000000000000000000000000000000000000000000000000000006020820152611e3d613450565b611e45613450565b835167ffffffffffffffff811161094e57611e8981611e847fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102546115b0565b612684565b6020601f8211600114611fb65791611ef482611f1b9373ffffffffffffffffffffffffffffffffffffffff96956109c098995f92611fab575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556134a7565b611f435f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10055565b611f6b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155565b1673ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f55565b015190505f80611ec2565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d965f5b8181106120b95750926109c0969773ffffffffffffffffffffffffffffffffffffffff96959360019383611f1b9710612082575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556134a7565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080612055565b83830151895560019098019760209384019301612021565b6042906120dc614a1e565b6120e4614a88565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261213560c082610970565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b6040519061217b82610953565b60606101c0835f81528260208201528260408201525f838201525f60808201525f60a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a08201520152565b90600f60606040516121ec81610932565b612242819560ff815416151583526040516122158161220e8160018601611601565b0382610970565b6020840152612226600282016116bc565b604084015261223b6040518096819301611601565b0384610970565b0152565b73ffffffffffffffffffffffffffffffffffffffff1680156123075773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b91906040838203126101875782518015158103610187579260208101519067ffffffffffffffff8211610187570181601f8201121561018757805190612378826109d2565b926123866040519485610970565b8284526020838301011161018757815f9260208093018386015e8301015290565b90602061103d928181520190610e4b565b6040513d5f823e3d90fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c61240f5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561243f5750565b7f9e24c2f6000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b91909294939461247e61029b368487610a0c565b61248c61029b368884610a0c565b6124ad6102d65f5473ffffffffffffffffffffffffffffffffffffffff1690565b5f60405180927f38d8480a0000000000000000000000000000000000000000000000000000000082528183816124e7898c6004840161265d565b03925af1908115610557575f905f92612602575b50156104f85761250a90612eeb565b906101c08201805151603481106104cd575061252690516130c8565b909473ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036125ba5750612567368984610a0c565b6020815191012090808203610459575050916104407f206fdb1a74851a8542447b8b6704db24a36b906a7297cc23c2b984dc357b997896979261040e6125b5956103e46103de36878c610a0c565b0390a1565b7f5d23870f000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff908116600452851660245260445ffd5b905061261891503d805f833e6105488183610970565b905f6124fb565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b91602061103d93818152019161261f565b818110612679575050565b5f815560010161266e565b90601f8211612691575050565b6109c0917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f5260205f20906020601f840160051c830193106126dc575b601f0160051c019061266e565b90915081906126cf565b9190601f81116126f557505050565b6109c0925f5260205f20906020601f840160051c830193106126dc57601f0160051c019061266e565b919091825167ffffffffffffffff811161094e576127468161274084546115b0565b846126e6565b6020601f82116001146127975781906127939394955f92611fab5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216906127c8845f5260205f2090565b915f5b818110612821575095836001959697106127ea575b505050811b019055565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80806127e0565b9192602060018192868b0151815501940192016127cb565b600c6101c06109c09361289d61286f82517fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b859060801c7fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b6128ae60208201516001860161271e565b6128bf60408201516002860161271e565b612a05600385016129246128f660608501517fffffffffffffffff0000000000000000000000000000000000000000000000001690565b829060c01c7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b61299561295460808501517fffffffffffffffff0000000000000000000000000000000000000000000000001690565b82547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff1660809190911c6fffffffffffffffff000000000000000016178255565b60a08301517fffffffffffffffff0000000000000000000000000000000000000000000000001681547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660409190911c77ffffffffffffffff0000000000000000000000000000000016179055565b612a1660c08201516004860161271e565b612a2760e08201516005860161271e565b612a396101008201516006860161271e565b612a4b6101208201516007860161271e565b612a5d6101408201516008860161271e565b612a6f6101608201516009860161271e565b612a81610180820151600a860161271e565b612a936101a0820151600b860161271e565b0151910161271e565b90612ad581511515839060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b60018201602082015180519067ffffffffffffffff821161094e57612b0482612afe85546115b0565b856126e6565b602090601f8311600114612b6f5792612b5b836060946109c0989794600f975f92611fab5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b612a93604082015160028601612839565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691612ba1855f5260205f2090565b925f5b818110612c085750936109c0979693600f96936001938360609810612bd1575b505050811b019055612b5e565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080612bc4565b92936020600181928786015181550195019301612ba4565b929160409273ffffffffffffffffffffffffffffffffffffffff612c559397969716855260606020860152606085019161261f565b931515910152565b90816020910312610187575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612cac57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6040517fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254815f612d08836115b0565b8083529260018116908115612daa5750600114612d2c575b61103d92500382610970565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310612d8e57505090602061103d92820101612d20565b6020919350806001915483858801015201910190918392612d76565b6020925061103d9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101612d20565b6040517fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354815f612e17836115b0565b8083529260018116908115612daa5750600114612e3a5761103d92500382610970565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310612e9c57505090602061103d92820101612d20565b6020919350806001915483858801015201910190918392612e84565b15612ec05750565b7fd915602a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b612ef361216e565b50805160021161018757612f0760026109d2565b612f146040519182610970565b60028152612f2260026109d2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602082019201368337816020840160025b602081101561307a578061305b57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b51825182169119161790525190517fffff00000000000000000000000000000000000000000000000000000000000081169160028110613026575b505060f01c60048103612ffb5750612ff681612fe061103d936137a6565b8051612ff190610255811015612eb8565b61394b565b614776565b7f940a5ec6000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fffff0000000000000000000000000000000000000000000000000000000000009250829060020360031b1b16165f80612fc2565b61306f61306a613074926149d4565b614a0f565b6149e2565b90612f87565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115612f5557611d81565b8051601411610187576130db60146109d2565b916130e96040519384610970565b601483526130f760146109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501910136823760149381602085015b6020871015613236576131ab94959680155f1461322157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b51825182169119161790525190517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000811691601481106131ec575b505060601c92613a53565b6020815191015190602081106131bf575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009250829060140360031b1b16165f806131a0565b61306f61306a613230926149d4565b90613165565b908151815260208101809111611d4e579060208101809111611d4e57957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111611d4e579561312a565b9073ffffffffffffffffffffffffffffffffffffffff9060208151910120911690815f52600160205261220e6132c5600160405f200160405192838092611601565b60208151910120146132ed575f5260016020526132e8600160405f2001546115b0565b151590565b7ffb5bab5b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8151919060418303613348576133419250602082015190606060408401519301515f1a90614901565b9192909190565b50505f9160029190565b6004111561335c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b61339281613352565b8061339b575050565b6133a481613352565b600181036133d4577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6133dd81613352565b6002810361341157507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8061341d600392613352565b146134255750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561347f57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90815167ffffffffffffffff811161094e5761350d816134e77fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103546115b0565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1036126e6565b602092601f821160011461357e5761355a929382915f92611fab5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216937f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75915f5b86811061365d5750836001959610613626575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80806135fc565b919260206001819286850151815501940192016135e9565b90813b156137645773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28051156137335761373091614990565b50565b50503461373c57565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b908151600611610187576137ba60046109d2565b6137c76040519182610970565b600481526137d560046109d2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208201920136833760226004940182905b60208610156138fe577fffffffff00000000000000000000000000000000000000000000000000000000949580155f146138e957507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905251905182811691600481106138d4575b5050167f810000000000000000000000000000000000000000000000000000000000000081036138a95750565b7fea75591a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b839250829060040360031b1b16165f8061387c565b61306f61306a6138f8926149d4565b90613861565b908151815260208101809111611d4e579060208101809111611d4e57947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111611d4e5794613809565b805161025511610187576139606102486109d2565b9061396e6040519283610970565b610248825261397e6102486109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208401910136823790602d016102485b6020811015613a0557806139f057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b61306f61306a6139ff926149d4565b906139e2565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156139b057611d81565b805160341161018757613a6660206109d2565b90613a746040519283610970565b60208252613a8260206109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060340160205b6020811015613ac957806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613ab357611d81565b805160101161018757613b2a60106109d2565b90613b386040519283610970565b60108252613b4660106109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060200160105b6020811015613b8d57806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613b7757611d81565b805160401161018757613bee60306109d2565b90613bfc6040519283610970565b60308252613c0a60306109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237603080920190915b6020811015613c5257806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613c3c57611d81565b805160701161018757613cb360306109d2565b90613cc16040519283610970565b60308252613ccf60306109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060600160305b6020811015613d1657806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613d0057611d81565b805160781161018757613d7760086109d2565b90613d856040519283610970565b60088252613d9360086109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060900160085b6020811015613dda57806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613dc457611d81565b805160801161018757613e3b60086109d2565b90613e496040519283610970565b60088252613e5760086109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060980160085b6020811015613e9e57806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613e8857611d81565b805160881161018757613eff60086109d2565b90613f0d6040519283610970565b60088252613f1b60086109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060a00160085b6020811015613f6257806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613f4c57611d81565b805160b81161018757613fc360306109d2565b90613fd16040519283610970565b60308252613fdf60306109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060a80160305b602081101561402657806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561401057611d81565b805160e8116101875761408760306109d2565b906140956040519283610970565b603082526140a360306109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060d80160305b60208110156140ea57806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156140d457611d81565b8051610118116101875761414c60306109d2565b9061415a6040519283610970565b6030825261416860306109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101080160305b60208110156141b057806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561419a57611d81565b8051610148116101875761421260306109d2565b906142206040519283610970565b6030825261422e60306109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101380160305b602081101561427657806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561426057611d81565b805161017811610187576142d860306109d2565b906142e66040519283610970565b603082526142f460306109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101680160305b602081101561433c57806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561432657611d81565b80516101a8116101875761439e60306109d2565b906143ac6040519283610970565b603082526143ba60306109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101980160305b602081101561440257806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156143ec57611d81565b80516101d8116101875761446460306109d2565b906144726040519283610970565b6030825261448060306109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101c80160305b60208110156144c857806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156144b257611d81565b8051610208116101875761452a60306109d2565b906145386040519283610970565b6030825261454660306109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101f80160305b602081101561458e57806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561457857611d81565b805161024811610187576145f060406109d2565b906145fe6040519283610970565b6040825261460c60406109d2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906102280160405b602081101561465457806139f057509192915050565b90918251815260208101809111611d4e579160208101809111611d4e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561463e57611d81565b90602082519201517fffffffffffffffffffffffffffffffff00000000000000000000000000000000811692601081106146da575050565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000929350829060100360031b1b161690565b90602082519201517fffffffffffffffff00000000000000000000000000000000000000000000000081169260088110614744575050565b7fffffffffffffffff000000000000000000000000000000000000000000000000929350829060080360031b1b161690565b9061189a61478261216e565b926147bd61479761479283613b17565b6146a2565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000168552565b6147c681613bdb565b60208501526147d481613ca0565b60408501526148166147ed6147e883613d64565b61470c565b7fffffffffffffffff000000000000000000000000000000000000000000000000166060860152565b61484e6148256147e883613e28565b7fffffffffffffffff000000000000000000000000000000000000000000000000166080860152565b61488661485d6147e883613eec565b7fffffffffffffffff0000000000000000000000000000000000000000000000001660a0860152565b61488f81613fb0565b60c085015261489d81614074565b60e08501526148ab81614138565b6101008501526148ba816141fe565b6101208501526148c9816142c4565b6101408501526148d88161438a565b6101608501526148e781614450565b6101808501526148f681614516565b6101a08501526145dc565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411614985579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610557575f5173ffffffffffffffffffffffffffffffffffffffff81161561497b57905f905f90565b505f906001905f90565b5050505f9160039190565b5f8061103d93602081519101845af43d156149cc573d916149b0836109d2565b926149be6040519485610970565b83523d5f602085013e614acd565b606091614acd565b6020039060208211611d4e57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211611d4e57565b601f8111611d4e576101000a90565b614a26612cd8565b8051908115614a36576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100548015614a635790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b614a90612de7565b8051908115614aa0576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101548015614a635790565b90614b0a5750805115614ae257602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580614b5d575b614b1b575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15614b1356fea164736f6c634300081c000a", + "nonce": "0xe8e", "chainId": "0x515" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x2b399cf0bb3f88213e08e274141e5b7fd092098966010ca8d01ac6f09717fca9", + "hash": "0xac34158a0ab61f914ed9af12672c41853b1c9f8754a623f9b815072135640a52", "transactionType": "CREATE", "contractName": "ERC1967Proxy", - "contractAddress": "0x31e95d2a9b1507d83cfd417f72bcae140633d6f2", + "contractAddress": "0xd2b914537e25cf3931c2d7578ab2085e19067313", "function": null, "arguments": [ - "0x789494060ab4d8C861b6E1bD244B1B4Ad15Cb4c2", - "0x485cc955000000000000000000000000636860551bce455fa00384e171de672cd0195dd300000000000000000000000095175096a9b74165be0ac84260cc14fc1c0ef5ff" + "0x1a3208aE6a2d2Bd6140aC7076155c2F7C46D0CA8", + "0x485cc9550000000000000000000000009654a3786f960db19a64dff16fdc34ed6090a76000000000000000000000000095175096a9b74165be0ac84260cc14fc1c0ef5ff" ], "transaction": { - "from": "0x636860551bce455fa00384e171de672cd0195dd3", - "gas": "0x49acb", + "from": "0x9654a3786f960db19a64dff16fdc34ed6090a760", + "gas": "0x49ad8", "value": "0x0", - "input": "0x608060405261027f8038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b6040516064908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffdfea164736f6c634300081c000a000000000000000000000000789494060ab4d8c861b6e1bd244b1b4ad15cb4c200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000636860551bce455fa00384e171de672cd0195dd300000000000000000000000095175096a9b74165be0ac84260cc14fc1c0ef5ff00000000000000000000000000000000000000000000000000000000", - "nonce": "0x1d", + "input": "0x608060405261027f8038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b6040516064908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157602081519101fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffdfea164736f6c634300081c000a0000000000000000000000001a3208ae6a2d2bd6140ac7076155c2f7c46d0ca800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044485cc9550000000000000000000000009654a3786f960db19a64dff16fdc34ed6090a76000000000000000000000000095175096a9b74165be0ac84260cc14fc1c0ef5ff00000000000000000000000000000000000000000000000000000000", + "nonce": "0xe8f", "chainId": "0x515" }, "additionalContracts": [], @@ -43,96 +43,96 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x3f6b64", + "cumulativeGasUsed": "0x41ddb9", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x154991e80d370b4fdd726ff3f532676059efd55e01b1eec88abfb431cef4b53c", - "transactionIndex": "0x3", - "blockHash": "0x1a5001033d79b8915cf78c9db1eae63b292f3f3147c10a33eb67dc04bd6b4c29", - "blockNumber": "0x16425e4", - "gasUsed": "0x3ded7d", - "effectiveGasPrice": "0x55c", - "from": "0x636860551bce455fa00384e171de672cd0195dd3", + "transactionHash": "0xe63293160184bfe74b79ae770e26d0377fb01bcf96b5f178144ac5bb53737b46", + "transactionIndex": "0x4", + "blockHash": "0xecb9ab558c40d261d6469ef56e9fa221111c63c8b023b2e8202b0abd3a349ec7", + "blockNumber": "0x19e06c1", + "gasUsed": "0x402e79", + "effectiveGasPrice": "0xfd", + "from": "0x9654a3786f960db19a64dff16fdc34ed6090a760", "to": null, - "contractAddress": "0x789494060ab4d8c861b6e1bd244b1b4ad15cb4c2", + "contractAddress": "0x1a3208ae6a2d2bd6140ac7076155c2f7c46d0ca8", "l1BaseFeeScalar": "0x7d0", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xdbba0", - "l1Fee": "0x8eb7aa7", - "l1GasPrice": "0xa16c3", - "l1GasUsed": "0x1ba0a" + "l1Fee": "0x3a19ead4", + "l1GasPrice": "0x3e6400", + "l1GasUsed": "0x1d19f" }, { "status": "0x1", - "cumulativeGasUsed": "0x42f628", + "cumulativeGasUsed": "0x456887", "logs": [ { - "address": "0x31e95d2a9b1507d83cfd417f72bcae140633d6f2", + "address": "0xd2b914537e25cf3931c2d7578ab2085e19067313", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000789494060ab4d8c861b6e1bd244b1b4ad15cb4c2" + "0x0000000000000000000000001a3208ae6a2d2bd6140ac7076155c2f7c46d0ca8" ], "data": "0x", - "blockHash": "0x1a5001033d79b8915cf78c9db1eae63b292f3f3147c10a33eb67dc04bd6b4c29", - "blockNumber": "0x16425e4", - "transactionHash": "0x2b399cf0bb3f88213e08e274141e5b7fd092098966010ca8d01ac6f09717fca9", - "transactionIndex": "0x4", - "logIndex": "0x1", + "blockHash": "0xecb9ab558c40d261d6469ef56e9fa221111c63c8b023b2e8202b0abd3a349ec7", + "blockNumber": "0x19e06c1", + "transactionHash": "0xac34158a0ab61f914ed9af12672c41853b1c9f8754a623f9b815072135640a52", + "transactionIndex": "0x5", + "logIndex": "0x0", "removed": false }, { - "address": "0x31e95d2a9b1507d83cfd417f72bcae140633d6f2", + "address": "0xd2b914537e25cf3931c2d7578ab2085e19067313", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000636860551bce455fa00384e171de672cd0195dd3" + "0x0000000000000000000000009654a3786f960db19a64dff16fdc34ed6090a760" ], "data": "0x", - "blockHash": "0x1a5001033d79b8915cf78c9db1eae63b292f3f3147c10a33eb67dc04bd6b4c29", - "blockNumber": "0x16425e4", - "transactionHash": "0x2b399cf0bb3f88213e08e274141e5b7fd092098966010ca8d01ac6f09717fca9", - "transactionIndex": "0x4", - "logIndex": "0x2", + "blockHash": "0xecb9ab558c40d261d6469ef56e9fa221111c63c8b023b2e8202b0abd3a349ec7", + "blockNumber": "0x19e06c1", + "transactionHash": "0xac34158a0ab61f914ed9af12672c41853b1c9f8754a623f9b815072135640a52", + "transactionIndex": "0x5", + "logIndex": "0x1", "removed": false }, { - "address": "0x31e95d2a9b1507d83cfd417f72bcae140633d6f2", + "address": "0xd2b914537e25cf3931c2d7578ab2085e19067313", "topics": [ "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "blockHash": "0x1a5001033d79b8915cf78c9db1eae63b292f3f3147c10a33eb67dc04bd6b4c29", - "blockNumber": "0x16425e4", - "transactionHash": "0x2b399cf0bb3f88213e08e274141e5b7fd092098966010ca8d01ac6f09717fca9", - "transactionIndex": "0x4", - "logIndex": "0x3", + "blockHash": "0xecb9ab558c40d261d6469ef56e9fa221111c63c8b023b2e8202b0abd3a349ec7", + "blockNumber": "0x19e06c1", + "transactionHash": "0xac34158a0ab61f914ed9af12672c41853b1c9f8754a623f9b815072135640a52", + "transactionIndex": "0x5", + "logIndex": "0x2", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000000000000000000002000000400010100000000000000800000000000000000000000080000000000000000000000000000000000000000000008000000000000000000000000000000000000010000020000000000001000000000000000000000004000000000000000022000000000000000000000000000000000000000100000000000000000000008000", + "logsBloom": "0x00000001000020000000000000000000400000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000000080000000000000800000400000000000000000000800000000000000000000000080000000000000000000080000000000000000000000000000000000000000000000000000000000000000000020000008000000000000000000000000000004000000000000004020000000000000000000000000000000000000000000000000000000000000000100", "type": "0x2", - "transactionHash": "0x2b399cf0bb3f88213e08e274141e5b7fd092098966010ca8d01ac6f09717fca9", - "transactionIndex": "0x4", - "blockHash": "0x1a5001033d79b8915cf78c9db1eae63b292f3f3147c10a33eb67dc04bd6b4c29", - "blockNumber": "0x16425e4", - "gasUsed": "0x38ac4", - "effectiveGasPrice": "0x55c", - "from": "0x636860551bce455fa00384e171de672cd0195dd3", + "transactionHash": "0xac34158a0ab61f914ed9af12672c41853b1c9f8754a623f9b815072135640a52", + "transactionIndex": "0x5", + "blockHash": "0xecb9ab558c40d261d6469ef56e9fa221111c63c8b023b2e8202b0abd3a349ec7", + "blockNumber": "0x19e06c1", + "gasUsed": "0x38ace", + "effectiveGasPrice": "0xfd", + "from": "0x9654a3786f960db19a64dff16fdc34ed6090a760", "to": null, - "contractAddress": "0x31e95d2a9b1507d83cfd417f72bcae140633d6f2", + "contractAddress": "0xd2b914537e25cf3931c2d7578ab2085e19067313", "l1BaseFeeScalar": "0x7d0", "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xdbba0", - "l1Fee": "0xb8c0df", - "l1GasPrice": "0xa16c3", - "l1GasUsed": "0x23c3" + "l1Fee": "0x474d198", + "l1GasPrice": "0x3e6400", + "l1GasUsed": "0x23b6" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1750192982, + "timestamp": 1753986062, "chain": 1301, - "commit": "2c90ba2" + "commit": "49dcb19" } \ No newline at end of file diff --git a/broadcast/Interactions.s.sol/1301/run-latest.json b/broadcast/Interactions.s.sol/1301/run-latest.json index 7d737dd..41ef65b 100644 --- a/broadcast/Interactions.s.sol/1301/run-latest.json +++ b/broadcast/Interactions.s.sol/1301/run-latest.json @@ -1,20 +1,23 @@ { "transactions": [ { - "hash": "0xe3d7a909c4d7bf5fad54d88299c9d8ed88b1f8b674e7ae6877080f0f6c1d604d", + "hash": "0xa2a85913b852db9c012fa706e3305ba4805daed64bccd587f930ff10fc74b089", "transactionType": "CALL", "contractName": null, - "contractAddress": "0x8b8b25e8ec87e3aebdce02d85d3174534b4611ca", - "function": "registerTEEService(bytes)", + "contractAddress": "0x3b03b3caabd49ca12de9eba46a6a2950700b1db4", + "function": "addWorkloadToPolicy(bytes32,string,string[])", "arguments": [ - "0x040002008100000000000000939a7233f79c4ca9940a0db3957f0607cd160a048b99007a8fe3b0d746a15b5c00000000050103000000000000000000000000001cc6a17ab799e9a693fac7536be61c12ee1e0fabada82d0c999e08ccee2aa86de77b0870f558c570e7ffe55d6d47fa0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000e70206000000000047a1cc074b914df8596bad0ed13d50d561ad1effc7f7cc530ab86da7ea49ffc03e57e7da829f8cba9c629c397050532300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1dad5455e5fa87974edb69e13296dd1ba9fa86356d70b68be15dd5d36767643904de1893c1b4d47fc8d3a90675391a7157e7c5f932e9babac9209d4527ec9ed837b8e335a931517677fa746db51ee56062e3324e266e3f39ec26a516f4f71e63560e50830e22fbc9b06cdce8afe784bf111e4251256cf104050f1347cd4ad9f30da408475066575145da0b098a124000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342ad26adb6185cda1aea67ee5f35e9cb5c9cec32b03e8d4382492ca35d53331e906b20edbe46d9337b7b2b2248c633cc2a3aeb3a0ce480dd22b5950860c8a2ccc1000005641dff236e36eef438e1cfdb85efcba6ff6c8366e81b993e7d112d9592c9dc0703d3bd1bb0de9c9ca9bfd6295bd9687e0a7700e77c67969b3b10d5d3fd5191335f87015188d46a1ef4aa88d18b30859c81b8ef25b7570bf1badafa68e739c521a333aa57d46375a278c4ee6eaccdb93c825612c6659d388902fb0cfc7516c930600461000000303191b04ff0006000000000000000000000000000000000000000000000000000000000000000000000000000000001500000000000000e700000000000000e5a3a7b5d830c2953b98534c6c59a3a34fdc34e933f7f5898f0a85cf08846bca0000000000000000000000000000000000000000000000000000000000000000dc9e2a7c6f948f17474e34a7fc43ed030f7c1563f1babddf6340c82e0e54a8c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007114206b21f8d20e0dc3116c04ea472ac90da5feaf5cb2180f5496f4a9b0a1fc000000000000000000000000000000000000000000000000000000000000000093ea0ccd7a2ed69dffc26f03224949fca0921672b735c948a89cb47a6f5b2b3c79be64b5d0378b32342a834be8587c6a3b4b7c83ca23421cd020d393987f63a62000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f05005e0e00002d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d494945377a4343424a61674177494241674955582b637372796d2f7848756269487477517a6e4f33564c56344d3077436759494b6f5a497a6a3045417749770a634445694d434147413155454177775a535735305a577767553064594946424453794251624746305a6d397962534244515445614d42674741315545436777520a535735305a577767513239796347397959585270623234784644415342674e564241634d43314e68626e526849454e7359584a684d51737743515944565151490a44414a445154454c4d416b474131554542684d4356564d774868634e4d6a51784d6a45354d544d784d6a51335768634e4d7a45784d6a45354d544d784d6a51330a576a42774d534977494159445651514444426c4a626e526c624342545231676755454e4c49454e6c636e52705a6d6c6a5958526c4d526f77474159445651514b0a4442464a626e526c6243424462334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e560a4241674d416b4e424d517377435159445651514745774a56557a425a4d424d4742797147534d34394167454743437147534d34394177454841304941424f694e0a6c6e7069572b3646486e526f6a4279426a765572466d4552435068614551324c385855332f66354e546b33782b544b616a314c593749556e32736253493241380a525a4e77714f666a702f426979437771546f6d6a67674d4d4d4949444344416642674e5648534d4547444157674253566231334e765276683655424a796454300a4d383442567776655644427242674e56485238455a4442694d47436758714263686c706f64485277637a6f764c32467761533530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c334e6e6543396a5a584a3061575a7059324630615739754c3359304c33426a61324e796244396a595431770a624746305a6d397962535a6c626d4e765a476c755a7a316b5a584977485159445652304f4242594546483571784d6a54704f72636956753245684855334267790a513562364d41344741315564447745422f775145417749477744414d42674e5648524d4241663845416a41414d4949434f51594a4b6f5a496876684e415130420a424949434b6a4343416959774867594b4b6f5a496876684e41513042415151514b77636533654d5a456367484361647076544c754544434341574d47436971470a534962345451454e41514977676746544d42414743797147534962345451454e41514942416745444d42414743797147534962345451454e41514943416745440a4d42414743797147534962345451454e41514944416745434d42414743797147534962345451454e41514945416745434d42414743797147534962345451454e0a41514946416745454d42414743797147534962345451454e41514947416745424d42414743797147534962345451454e41514948416745414d424147437971470a534962345451454e41514949416745464d42414743797147534962345451454e4151494a416745414d42414743797147534962345451454e4151494b416745410a4d42414743797147534962345451454e4151494c416745414d42414743797147534962345451454e4151494d416745414d42414743797147534962345451454e0a4151494e416745414d42414743797147534962345451454e4151494f416745414d42414743797147534962345451454e41514950416745414d424147437971470a534962345451454e41514951416745414d42414743797147534962345451454e415149524167454c4d42384743797147534962345451454e41514953424241440a41774943424145414251414141414141414141414d42414743697147534962345451454e41514d45416741414d42514743697147534962345451454e415151450a42724441627741414144415042676f71686b69472b45304244514546436745424d42344743697147534962345451454e4151594545504a37616e5030784c54710a67414b4c66623758444a6f775241594b4b6f5a496876684e41513042427a41324d42414743797147534962345451454e415163424151482f4d424147437971470a534962345451454e415163434151482f4d42414743797147534962345451454e415163444151482f4d416f4743437147534d343942414d43413063414d4551430a49446e376357783947662b586a5436487547304c4e66396d316b6459562b4a526b4743394a376b305331536241694246457a69542b53556c41554b6d546f77380a2f577a45526d614473433657556537325a5164444b7834346a413d3d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436c6a4343416a32674177494241674956414a567658633239472b487051456e4a3150517a7a674658433935554d416f4743437147534d343942414d430a4d476778476a415942674e5642414d4d45556c756447567349464e48574342536232393049454e424d526f77474159445651514b4442464a626e526c624342440a62334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e564241674d416b4e424d5173770a435159445651514745774a56557a4165467730784f4441314d6a45784d4455774d5442614677307a4d7a41314d6a45784d4455774d5442614d484178496a41670a42674e5642414d4d47556c756447567349464e4857434251513073675547786864475a76636d306751304578476a415942674e5642416f4d45556c75644756730a49454e76636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b474131554543417743513045780a437a414a42674e5642415954416c56544d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a304441516344516741454e53422f377432316c58534f0a3243757a7078773734654a423732457944476757357258437478327456544c7136684b6b367a2b5569525a436e71523770734f766771466553786c6d546c4a6c0a65546d693257597a33714f42757a43427544416642674e5648534d4547444157674251695a517a575770303069664f44744a5653763141624f536347724442530a42674e5648523845537a424a4d45656752614244686b466f64485277637a6f764c324e6c636e52705a6d6c6a5958526c63793530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c306c756447567355306459556d397664454e424c6d526c636a416442674e5648513445466751556c5739640a7a62306234656c4153636e553944504f4156634c336c517744675944565230504151482f42415144416745474d42494741315564457745422f7751494d4159420a4166384341514177436759494b6f5a497a6a30454177494452774177524149675873566b6930772b6936565947573355462f32327561586530594a446a3155650a6e412b546a44316169356343494359623153416d4435786b66545670766f34556f79695359787244574c6d5552344349394e4b7966504e2b0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436a7a4343416a53674177494241674955496d554d316c71644e496e7a6737535655723951477a6b6e42717777436759494b6f5a497a6a3045417749770a614445614d4267474131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e760a636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a0a42674e5642415954416c56544d423458445445344d4455794d5445774e4455784d466f58445451354d54497a4d54497a4e546b314f566f77614445614d4267470a4131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e76636e4276636d46300a615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a42674e56424159540a416c56544d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a3044415163445167414543366e45774d4449595a4f6a2f69505773437a61454b69370a314f694f534c52466857476a626e42564a66566e6b59347533496a6b4459594c304d784f346d717379596a6c42616c54565978465032734a424b357a6c4b4f420a757a43427544416642674e5648534d4547444157674251695a517a575770303069664f44744a5653763141624f5363477244425342674e5648523845537a424a0a4d45656752614244686b466f64485277637a6f764c324e6c636e52705a6d6c6a5958526c63793530636e567a6447566b63325679646d6c6a5a584d75615735300a5a577775593239744c306c756447567355306459556d397664454e424c6d526c636a416442674e564851344546675155496d554d316c71644e496e7a673753560a55723951477a6b6e4271777744675944565230504151482f42415144416745474d42494741315564457745422f7751494d4159424166384341514577436759490a4b6f5a497a6a3045417749445351417752674968414f572f35516b522b533943695344634e6f6f774c7550524c735747662f59693747535839344267775477670a41694541344a306c72486f4d732b586f356f2f7358364f39515778485241765a55474f6452513763767152586171493d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0xf724e7d117f5655cf33beefdfc7d31e930278fcb65cf6d1de632595e97ca82b2", + "1234567890abcdef1234567890abcdef12345678", + "[https://github.com/flashbots/flashbots-images/commit/a5aa6c75fbecc4b88faf4886cbd3cb2c667f4a8c, https://ipfs.io/ipfs/bafybeihkoviema7g3gxyt6la7vd5ho32ictqbilu3wnlo3rs7ewhnp7lly]" ], "transaction": { - "from": "0x636860551bce455fa00384e171de672cd0195dd3", - "to": "0x8b8b25e8ec87e3aebdce02d85d3174534b4611ca", + "from": "0x9654a3786f960db19a64dff16fdc34ed6090a760", + "to": "0x3b03b3caabd49ca12de9eba46a6a2950700b1db4", + "gas": "0x6c8f3", "value": "0x0", - "input": "0xdf791f300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000138e040002008100000000000000939a7233f79c4ca9940a0db3957f0607cd160a048b99007a8fe3b0d746a15b5c00000000050103000000000000000000000000001cc6a17ab799e9a693fac7536be61c12ee1e0fabada82d0c999e08ccee2aa86de77b0870f558c570e7ffe55d6d47fa0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000e70206000000000047a1cc074b914df8596bad0ed13d50d561ad1effc7f7cc530ab86da7ea49ffc03e57e7da829f8cba9c629c397050532300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1dad5455e5fa87974edb69e13296dd1ba9fa86356d70b68be15dd5d36767643904de1893c1b4d47fc8d3a90675391a7157e7c5f932e9babac9209d4527ec9ed837b8e335a931517677fa746db51ee56062e3324e266e3f39ec26a516f4f71e63560e50830e22fbc9b06cdce8afe784bf111e4251256cf104050f1347cd4ad9f30da408475066575145da0b098a124000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342ad26adb6185cda1aea67ee5f35e9cb5c9cec32b03e8d4382492ca35d53331e906b20edbe46d9337b7b2b2248c633cc2a3aeb3a0ce480dd22b5950860c8a2ccc1000005641dff236e36eef438e1cfdb85efcba6ff6c8366e81b993e7d112d9592c9dc0703d3bd1bb0de9c9ca9bfd6295bd9687e0a7700e77c67969b3b10d5d3fd5191335f87015188d46a1ef4aa88d18b30859c81b8ef25b7570bf1badafa68e739c521a333aa57d46375a278c4ee6eaccdb93c825612c6659d388902fb0cfc7516c930600461000000303191b04ff0006000000000000000000000000000000000000000000000000000000000000000000000000000000001500000000000000e700000000000000e5a3a7b5d830c2953b98534c6c59a3a34fdc34e933f7f5898f0a85cf08846bca0000000000000000000000000000000000000000000000000000000000000000dc9e2a7c6f948f17474e34a7fc43ed030f7c1563f1babddf6340c82e0e54a8c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007114206b21f8d20e0dc3116c04ea472ac90da5feaf5cb2180f5496f4a9b0a1fc000000000000000000000000000000000000000000000000000000000000000093ea0ccd7a2ed69dffc26f03224949fca0921672b735c948a89cb47a6f5b2b3c79be64b5d0378b32342a834be8587c6a3b4b7c83ca23421cd020d393987f63a62000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f05005e0e00002d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d494945377a4343424a61674177494241674955582b637372796d2f7848756269487477517a6e4f33564c56344d3077436759494b6f5a497a6a3045417749770a634445694d434147413155454177775a535735305a577767553064594946424453794251624746305a6d397962534244515445614d42674741315545436777520a535735305a577767513239796347397959585270623234784644415342674e564241634d43314e68626e526849454e7359584a684d51737743515944565151490a44414a445154454c4d416b474131554542684d4356564d774868634e4d6a51784d6a45354d544d784d6a51335768634e4d7a45784d6a45354d544d784d6a51330a576a42774d534977494159445651514444426c4a626e526c624342545231676755454e4c49454e6c636e52705a6d6c6a5958526c4d526f77474159445651514b0a4442464a626e526c6243424462334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e560a4241674d416b4e424d517377435159445651514745774a56557a425a4d424d4742797147534d34394167454743437147534d34394177454841304941424f694e0a6c6e7069572b3646486e526f6a4279426a765572466d4552435068614551324c385855332f66354e546b33782b544b616a314c593749556e32736253493241380a525a4e77714f666a702f426979437771546f6d6a67674d4d4d4949444344416642674e5648534d4547444157674253566231334e765276683655424a796454300a4d383442567776655644427242674e56485238455a4442694d47436758714263686c706f64485277637a6f764c32467761533530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c334e6e6543396a5a584a3061575a7059324630615739754c3359304c33426a61324e796244396a595431770a624746305a6d397962535a6c626d4e765a476c755a7a316b5a584977485159445652304f4242594546483571784d6a54704f72636956753245684855334267790a513562364d41344741315564447745422f775145417749477744414d42674e5648524d4241663845416a41414d4949434f51594a4b6f5a496876684e415130420a424949434b6a4343416959774867594b4b6f5a496876684e41513042415151514b77636533654d5a456367484361647076544c754544434341574d47436971470a534962345451454e41514977676746544d42414743797147534962345451454e41514942416745444d42414743797147534962345451454e41514943416745440a4d42414743797147534962345451454e41514944416745434d42414743797147534962345451454e41514945416745434d42414743797147534962345451454e0a41514946416745454d42414743797147534962345451454e41514947416745424d42414743797147534962345451454e41514948416745414d424147437971470a534962345451454e41514949416745464d42414743797147534962345451454e4151494a416745414d42414743797147534962345451454e4151494b416745410a4d42414743797147534962345451454e4151494c416745414d42414743797147534962345451454e4151494d416745414d42414743797147534962345451454e0a4151494e416745414d42414743797147534962345451454e4151494f416745414d42414743797147534962345451454e41514950416745414d424147437971470a534962345451454e41514951416745414d42414743797147534962345451454e415149524167454c4d42384743797147534962345451454e41514953424241440a41774943424145414251414141414141414141414d42414743697147534962345451454e41514d45416741414d42514743697147534962345451454e415151450a42724441627741414144415042676f71686b69472b45304244514546436745424d42344743697147534962345451454e4151594545504a37616e5030784c54710a67414b4c66623758444a6f775241594b4b6f5a496876684e41513042427a41324d42414743797147534962345451454e415163424151482f4d424147437971470a534962345451454e415163434151482f4d42414743797147534962345451454e415163444151482f4d416f4743437147534d343942414d43413063414d4551430a49446e376357783947662b586a5436487547304c4e66396d316b6459562b4a526b4743394a376b305331536241694246457a69542b53556c41554b6d546f77380a2f577a45526d614473433657556537325a5164444b7834346a413d3d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436c6a4343416a32674177494241674956414a567658633239472b487051456e4a3150517a7a674658433935554d416f4743437147534d343942414d430a4d476778476a415942674e5642414d4d45556c756447567349464e48574342536232393049454e424d526f77474159445651514b4442464a626e526c624342440a62334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e564241674d416b4e424d5173770a435159445651514745774a56557a4165467730784f4441314d6a45784d4455774d5442614677307a4d7a41314d6a45784d4455774d5442614d484178496a41670a42674e5642414d4d47556c756447567349464e4857434251513073675547786864475a76636d306751304578476a415942674e5642416f4d45556c75644756730a49454e76636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b474131554543417743513045780a437a414a42674e5642415954416c56544d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a304441516344516741454e53422f377432316c58534f0a3243757a7078773734654a423732457944476757357258437478327456544c7136684b6b367a2b5569525a436e71523770734f766771466553786c6d546c4a6c0a65546d693257597a33714f42757a43427544416642674e5648534d4547444157674251695a517a575770303069664f44744a5653763141624f536347724442530a42674e5648523845537a424a4d45656752614244686b466f64485277637a6f764c324e6c636e52705a6d6c6a5958526c63793530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c306c756447567355306459556d397664454e424c6d526c636a416442674e5648513445466751556c5739640a7a62306234656c4153636e553944504f4156634c336c517744675944565230504151482f42415144416745474d42494741315564457745422f7751494d4159420a4166384341514177436759494b6f5a497a6a30454177494452774177524149675873566b6930772b6936565947573355462f32327561586530594a446a3155650a6e412b546a44316169356343494359623153416d4435786b66545670766f34556f79695359787244574c6d5552344349394e4b7966504e2b0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436a7a4343416a53674177494241674955496d554d316c71644e496e7a6737535655723951477a6b6e42717777436759494b6f5a497a6a3045417749770a614445614d4267474131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e760a636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a0a42674e5642415954416c56544d423458445445344d4455794d5445774e4455784d466f58445451354d54497a4d54497a4e546b314f566f77614445614d4267470a4131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e76636e4276636d46300a615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a42674e56424159540a416c56544d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a3044415163445167414543366e45774d4449595a4f6a2f69505773437a61454b69370a314f694f534c52466857476a626e42564a66566e6b59347533496a6b4459594c304d784f346d717379596a6c42616c54565978465032734a424b357a6c4b4f420a757a43427544416642674e5648534d4547444157674251695a517a575770303069664f44744a5653763141624f5363477244425342674e5648523845537a424a0a4d45656752614244686b466f64485277637a6f764c324e6c636e52705a6d6c6a5958526c63793530636e567a6447566b63325679646d6c6a5a584d75615735300a5a577775593239744c306c756447567355306459556d397664454e424c6d526c636a416442674e564851344546675155496d554d316c71644e496e7a673753560a55723951477a6b6e4271777744675944565230504151482f42415144416745474d42494741315564457745422f7751494d4159424166384341514577436759490a4b6f5a497a6a3045417749445351417752674968414f572f35516b522b533943695344634e6f6f774c7550524c735747662f59693747535839344267775477670a41694541344a306c72486f4d732b586f356f2f7358364f39515778485241765a55474f6452513763767152586171493d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x11", + "input": "0x4f3a415af724e7d117f5655cf33beefdfc7d31e930278fcb65cf6d1de632595e97ca82b2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000028313233343536373839306162636465663132333435363738393061626364656631323334353637380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000005d68747470733a2f2f6769746875622e636f6d2f666c617368626f74732f666c617368626f74732d696d616765732f636f6d6d69742f61356161366337356662656363346238386661663438383663626433636232633636376634613863000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f697066732e696f2f697066732f62616679626569686b6f7669656d6137673367787974366c6137766435686f33326963747162696c7533776e6c6f337273376577686e70376c6c7900000000000000000000000000000000", + "nonce": "0xe93", "chainId": "0x515" }, "additionalContracts": [], @@ -24,58 +27,45 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x6fc141", + "cumulativeGasUsed": "0x5ad55", "logs": [ { - "address": "0x95175096a9b74165be0ac84260cc14fc1c0ef5ff", + "address": "0x3b03b3caabd49ca12de9eba46a6a2950700b1db4", "topics": [ - "0x2a0eadb6ff52afa314e513d000bde06ac5db14a2a06a4f86ee5445dd314cd061" + "0xcbb92e241e191fed6d0b0da0a918c7dcf595e77d868e2e3bf9e6b0b91589c7ad" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000025500048100000000b0c06f000000050103000000000000000000000000001cc6a17ab799e9a693fac7536be61c12ee1e0fabada82d0c999e08ccee2aa86de77b0870f558c570e7ffe55d6d47fa0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000e70206000000000047a1cc074b914df8596bad0ed13d50d561ad1effc7f7cc530ab86da7ea49ffc03e57e7da829f8cba9c629c397050532300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1dad5455e5fa87974edb69e13296dd1ba9fa86356d70b68be15dd5d36767643904de1893c1b4d47fc8d3a90675391a7157e7c5f932e9babac9209d4527ec9ed837b8e335a931517677fa746db51ee56062e3324e266e3f39ec26a516f4f71e63560e50830e22fbc9b06cdce8afe784bf111e4251256cf104050f1347cd4ad9f30da408475066575145da0b098a124000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342ad26adb6185cda1aea67ee5f35e9cb5c9cec32b03e8d4382492ca35d53331e906b20edbe46d9337b7b2b2248c633cc2a3aeb3a0ce480dd22b5950860c8a2c0000000000000000000000", - "blockHash": "0xd72ba28f962da1a64d9776f2ca47790d4b32571ecf3e76c3cf1a6350827461d6", - "blockNumber": "0x15bf465", - "transactionHash": "0xe3d7a909c4d7bf5fad54d88299c9d8ed88b1f8b674e7ae6877080f0f6c1d604d", - "transactionIndex": "0x1", + "data": "0xf724e7d117f5655cf33beefdfc7d31e930278fcb65cf6d1de632595e97ca82b2", + "blockHash": "0x64f0f9475c046860e4f2372ce14ecea8cad0a3e7cf56364006b818ffa884bb79", + "blockNumber": "0x19e10a8", + "transactionHash": "0xa2a85913b852db9c012fa706e3305ba4805daed64bccd587f930ff10fc74b089", + "transactionIndex": "0x2", "logIndex": "0x0", "removed": false - }, - { - "address": "0x8b8b25e8ec87e3aebdce02d85d3174534b4611ca", - "topics": [ - "0x1d4f72cae22ebdc85004ad3a21c727d734ae6074995f2f639b5836b9bfca4e8e" - ], - "data": "0x000000000000000000000000636860551bce455fa00384e171de672cd0195dd3eee0d5f864e6d46d6da790c7d60baac5c8478eb89e86667336d3f17655e9164e00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000014600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000138e040002008100000000000000939a7233f79c4ca9940a0db3957f0607cd160a048b99007a8fe3b0d746a15b5c00000000050103000000000000000000000000001cc6a17ab799e9a693fac7536be61c12ee1e0fabada82d0c999e08ccee2aa86de77b0870f558c570e7ffe55d6d47fa0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000e70206000000000047a1cc074b914df8596bad0ed13d50d561ad1effc7f7cc530ab86da7ea49ffc03e57e7da829f8cba9c629c397050532300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1dad5455e5fa87974edb69e13296dd1ba9fa86356d70b68be15dd5d36767643904de1893c1b4d47fc8d3a90675391a7157e7c5f932e9babac9209d4527ec9ed837b8e335a931517677fa746db51ee56062e3324e266e3f39ec26a516f4f71e63560e50830e22fbc9b06cdce8afe784bf111e4251256cf104050f1347cd4ad9f30da408475066575145da0b098a124000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342ad26adb6185cda1aea67ee5f35e9cb5c9cec32b03e8d4382492ca35d53331e906b20edbe46d9337b7b2b2248c633cc2a3aeb3a0ce480dd22b5950860c8a2ccc1000005641dff236e36eef438e1cfdb85efcba6ff6c8366e81b993e7d112d9592c9dc0703d3bd1bb0de9c9ca9bfd6295bd9687e0a7700e77c67969b3b10d5d3fd5191335f87015188d46a1ef4aa88d18b30859c81b8ef25b7570bf1badafa68e739c521a333aa57d46375a278c4ee6eaccdb93c825612c6659d388902fb0cfc7516c930600461000000303191b04ff0006000000000000000000000000000000000000000000000000000000000000000000000000000000001500000000000000e700000000000000e5a3a7b5d830c2953b98534c6c59a3a34fdc34e933f7f5898f0a85cf08846bca0000000000000000000000000000000000000000000000000000000000000000dc9e2a7c6f948f17474e34a7fc43ed030f7c1563f1babddf6340c82e0e54a8c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007114206b21f8d20e0dc3116c04ea472ac90da5feaf5cb2180f5496f4a9b0a1fc000000000000000000000000000000000000000000000000000000000000000093ea0ccd7a2ed69dffc26f03224949fca0921672b735c948a89cb47a6f5b2b3c79be64b5d0378b32342a834be8587c6a3b4b7c83ca23421cd020d393987f63a62000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f05005e0e00002d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d494945377a4343424a61674177494241674955582b637372796d2f7848756269487477517a6e4f33564c56344d3077436759494b6f5a497a6a3045417749770a634445694d434147413155454177775a535735305a577767553064594946424453794251624746305a6d397962534244515445614d42674741315545436777520a535735305a577767513239796347397959585270623234784644415342674e564241634d43314e68626e526849454e7359584a684d51737743515944565151490a44414a445154454c4d416b474131554542684d4356564d774868634e4d6a51784d6a45354d544d784d6a51335768634e4d7a45784d6a45354d544d784d6a51330a576a42774d534977494159445651514444426c4a626e526c624342545231676755454e4c49454e6c636e52705a6d6c6a5958526c4d526f77474159445651514b0a4442464a626e526c6243424462334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e560a4241674d416b4e424d517377435159445651514745774a56557a425a4d424d4742797147534d34394167454743437147534d34394177454841304941424f694e0a6c6e7069572b3646486e526f6a4279426a765572466d4552435068614551324c385855332f66354e546b33782b544b616a314c593749556e32736253493241380a525a4e77714f666a702f426979437771546f6d6a67674d4d4d4949444344416642674e5648534d4547444157674253566231334e765276683655424a796454300a4d383442567776655644427242674e56485238455a4442694d47436758714263686c706f64485277637a6f764c32467761533530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c334e6e6543396a5a584a3061575a7059324630615739754c3359304c33426a61324e796244396a595431770a624746305a6d397962535a6c626d4e765a476c755a7a316b5a584977485159445652304f4242594546483571784d6a54704f72636956753245684855334267790a513562364d41344741315564447745422f775145417749477744414d42674e5648524d4241663845416a41414d4949434f51594a4b6f5a496876684e415130420a424949434b6a4343416959774867594b4b6f5a496876684e41513042415151514b77636533654d5a456367484361647076544c754544434341574d47436971470a534962345451454e41514977676746544d42414743797147534962345451454e41514942416745444d42414743797147534962345451454e41514943416745440a4d42414743797147534962345451454e41514944416745434d42414743797147534962345451454e41514945416745434d42414743797147534962345451454e0a41514946416745454d42414743797147534962345451454e41514947416745424d42414743797147534962345451454e41514948416745414d424147437971470a534962345451454e41514949416745464d42414743797147534962345451454e4151494a416745414d42414743797147534962345451454e4151494b416745410a4d42414743797147534962345451454e4151494c416745414d42414743797147534962345451454e4151494d416745414d42414743797147534962345451454e0a4151494e416745414d42414743797147534962345451454e4151494f416745414d42414743797147534962345451454e41514950416745414d424147437971470a534962345451454e41514951416745414d42414743797147534962345451454e415149524167454c4d42384743797147534962345451454e41514953424241440a41774943424145414251414141414141414141414d42414743697147534962345451454e41514d45416741414d42514743697147534962345451454e415151450a42724441627741414144415042676f71686b69472b45304244514546436745424d42344743697147534962345451454e4151594545504a37616e5030784c54710a67414b4c66623758444a6f775241594b4b6f5a496876684e41513042427a41324d42414743797147534962345451454e415163424151482f4d424147437971470a534962345451454e415163434151482f4d42414743797147534962345451454e415163444151482f4d416f4743437147534d343942414d43413063414d4551430a49446e376357783947662b586a5436487547304c4e66396d316b6459562b4a526b4743394a376b305331536241694246457a69542b53556c41554b6d546f77380a2f577a45526d614473433657556537325a5164444b7834346a413d3d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436c6a4343416a32674177494241674956414a567658633239472b487051456e4a3150517a7a674658433935554d416f4743437147534d343942414d430a4d476778476a415942674e5642414d4d45556c756447567349464e48574342536232393049454e424d526f77474159445651514b4442464a626e526c624342440a62334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e564241674d416b4e424d5173770a435159445651514745774a56557a4165467730784f4441314d6a45784d4455774d5442614677307a4d7a41314d6a45784d4455774d5442614d484178496a41670a42674e5642414d4d47556c756447567349464e4857434251513073675547786864475a76636d306751304578476a415942674e5642416f4d45556c75644756730a49454e76636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b474131554543417743513045780a437a414a42674e5642415954416c56544d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a304441516344516741454e53422f377432316c58534f0a3243757a7078773734654a423732457944476757357258437478327456544c7136684b6b367a2b5569525a436e71523770734f766771466553786c6d546c4a6c0a65546d693257597a33714f42757a43427544416642674e5648534d4547444157674251695a517a575770303069664f44744a5653763141624f536347724442530a42674e5648523845537a424a4d45656752614244686b466f64485277637a6f764c324e6c636e52705a6d6c6a5958526c63793530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c306c756447567355306459556d397664454e424c6d526c636a416442674e5648513445466751556c5739640a7a62306234656c4153636e553944504f4156634c336c517744675944565230504151482f42415144416745474d42494741315564457745422f7751494d4159420a4166384341514177436759494b6f5a497a6a30454177494452774177524149675873566b6930772b6936565947573355462f32327561586530594a446a3155650a6e412b546a44316169356343494359623153416d4435786b66545670766f34556f79695359787244574c6d5552344349394e4b7966504e2b0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436a7a4343416a53674177494241674955496d554d316c71644e496e7a6737535655723951477a6b6e42717777436759494b6f5a497a6a3045417749770a614445614d4267474131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e760a636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a0a42674e5642415954416c56544d423458445445344d4455794d5445774e4455784d466f58445451354d54497a4d54497a4e546b314f566f77614445614d4267470a4131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e76636e4276636d46300a615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a42674e56424159540a416c56544d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a3044415163445167414543366e45774d4449595a4f6a2f69505773437a61454b69370a314f694f534c52466857476a626e42564a66566e6b59347533496a6b4459594c304d784f346d717379596a6c42616c54565978465032734a424b357a6c4b4f420a757a43427544416642674e5648534d4547444157674251695a517a575770303069664f44744a5653763141624f5363477244425342674e5648523845537a424a0a4d45656752614244686b466f64485277637a6f764c324e6c636e52705a6d6c6a5958526c63793530636e567a6447566b63325679646d6c6a5a584d75615735300a5a577775593239744c306c756447567355306459556d397664454e424c6d526c636a416442674e564851344546675155496d554d316c71644e496e7a673753560a55723951477a6b6e4271777744675944565230504151482f42415144416745474d42494741315564457745422f7751494d4159424166384341514577436759490a4b6f5a497a6a3045417749445351417752674968414f572f35516b522b533943695344634e6f6f774c7550524c735747662f59693747535839344267775477670a41694541344a306c72486f4d732b586f356f2f7358364f39515778485241765a55474f6452513763767152586171493d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040342ad26adb6185cda1aea67ee5f35e9cb5c9cec32b03e8d4382492ca35d53331e906b20edbe46d9337b7b2b2248c633cc2a3aeb3a0ce480dd22b5950860c8a2c", - "blockHash": "0xd72ba28f962da1a64d9776f2ca47790d4b32571ecf3e76c3cf1a6350827461d6", - "blockNumber": "0x15bf465", - "transactionHash": "0xe3d7a909c4d7bf5fad54d88299c9d8ed88b1f8b674e7ae6877080f0f6c1d604d", - "transactionIndex": "0x1", - "logIndex": "0x1", - "removed": false } ], - "logsBloom": "0x00000000000001000000000000000000000800000000004000000010002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000004000000000000000000000000040000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000000002000000000000000000000000000002000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000", "type": "0x2", - "transactionHash": "0xe3d7a909c4d7bf5fad54d88299c9d8ed88b1f8b674e7ae6877080f0f6c1d604d", - "transactionIndex": "0x1", - "blockHash": "0xd72ba28f962da1a64d9776f2ca47790d4b32571ecf3e76c3cf1a6350827461d6", - "blockNumber": "0x15bf465", - "gasUsed": "0x6f0d19", - "effectiveGasPrice": "0x557", - "from": "0x636860551bce455fa00384e171de672cd0195dd3", - "to": "0x8b8b25e8ec87e3aebdce02d85d3174534b4611ca", + "transactionHash": "0xa2a85913b852db9c012fa706e3305ba4805daed64bccd587f930ff10fc74b089", + "transactionIndex": "0x2", + "blockHash": "0x64f0f9475c046860e4f2372ce14ecea8cad0a3e7cf56364006b818ffa884bb79", + "blockNumber": "0x19e10a8", + "gasUsed": "0x4a3a9", + "effectiveGasPrice": "0xfd", + "from": "0x9654a3786f960db19a64dff16fdc34ed6090a760", + "to": "0x3b03b3caabd49ca12de9eba46a6a2950700b1db4", "contractAddress": null, "l1BaseFeeScalar": "0x7d0", - "l1BlobBaseFee": "0xe", + "l1BlobBaseFee": "0x1", "l1BlobBaseFeeScalar": "0xdbba0", - "l1Fee": "0x747c7270", - "l1GasPrice": "0x154903b", - "l1GasUsed": "0xab04" + "l1Fee": "0x71036d", + "l1GasPrice": "0xc734d", + "l1GasUsed": "0x11ba" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1749655987, + "timestamp": 1753988596, "chain": 1301, - "commit": "57143c5" + "commit": "49dcb19" } \ No newline at end of file diff --git a/env.sample b/env.sample index afe024a..2389902 100644 --- a/env.sample +++ b/env.sample @@ -11,5 +11,7 @@ OWNER_BLOCK_BUILDER_POLICY=0x0000000000000000000000000000000000000042 ADDRESS_BLOCK_BUILDER_POLICY=0x0000000000000000000000000000000000000042 WORKLOAD_ID=0xeee********************************************************9164e COMMIT_HASH=1234567890abcdef1234567890abcdef12345678 -RECORD_LOCATORS=https://github.com/flashbots/flashbots-images/commit/a5aa6c75fbecc4b88faf4886cbd3cb2c667f4a8c, https://ipfs.io/ipfs/bafybeihkoviema7g3gxyt6la7vd5ho32ictqbilu3wnlo3rs7ewhnp7lly -PATH_TO_ATTESTATION_QUOTE=/some/path/quote.bin \ No newline at end of file +RECORD_LOCATORS="https://github.com/flashbots/flashbots-images/commit/a5aa6c75fbecc4b88faf4886cbd3cb2c667f4a8c, https://ipfs.io/ipfs/bafybeihkoviema7g3gxyt6la7vd5ho32ictqbilu3wnlo3rs7ewhnp7lly" +PATH_TO_ATTESTATION_QUOTE=/some/path/quote.bin + +TEE_ADDRESS=0x0000000000000000000000000000000000000042 \ No newline at end of file diff --git a/script/Interactions.s.sol b/script/Interactions.s.sol index 06a4783..cd2bd1d 100644 --- a/script/Interactions.s.sol +++ b/script/Interactions.s.sol @@ -4,9 +4,43 @@ pragma solidity 0.8.28; import {Script, console} from "forge-std/Script.sol"; import {BlockBuilderPolicy, WorkloadId} from "../src/BlockBuilderPolicy.sol"; import {FlashtestationRegistry} from "../src/FlashtestationRegistry.sol"; +import {IFlashtestationRegistry} from "../src/interfaces/IFlashtestationRegistry.sol"; import {DeploymentUtils} from "./utils/DeploymentUtils.sol"; import {StringUtils} from "../src/utils/StringUtils.sol"; +/// @title ComputeWorkloadIdScript +/// @notice Script to compute the WorkloadId for a registered TEE using the FlashtestationRegistry and BlockBuilderPolicy +contract ComputeWorkloadIdScript is Script { + function setUp() public {} + + function run() public view { + // Read environment variables + address teeAddress = vm.envAddress("TEE_ADDRESS"); + address registryAddress = vm.envAddress("FLASHTESTATION_REGISTRY_ADDRESS"); + address policyAddress = vm.envAddress("ADDRESS_BLOCK_BUILDER_POLICY"); + + // Log input addresses + console.log("TEE_ADDRESS:"); + console.logAddress(teeAddress); + console.log("FLASHTESTATION_REGISTRY_ADDRESS:"); + console.logAddress(registryAddress); + console.log("ADDRESS_BLOCK_BUILDER_POLICY:"); + console.logAddress(policyAddress); + + // Instantiate contracts + FlashtestationRegistry registry = FlashtestationRegistry(registryAddress); + BlockBuilderPolicy policy = BlockBuilderPolicy(policyAddress); + + // Get the actual workloadId from the registration + (, IFlashtestationRegistry.RegisteredTEE memory registration) = registry.getRegistration(teeAddress); + WorkloadId actualWorkloadId = policy.workloadIdForTDRegistration(registration); + + // Print the workloadId as a hex string + console.log("Computed WorkloadId:"); + console.logBytes32(WorkloadId.unwrap(actualWorkloadId)); + } +} + /// @title AddWorkloadToPolicyScript /// @notice A simple helper script to add a workload to the policy contract AddWorkloadToPolicyScript is Script { diff --git a/script/raw_tdx_quotes/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/quote-l2b-opt-uni-exp-33611633-bld-00.bin b/script/raw_tdx_quotes/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/quote-l2b-opt-uni-exp-33611633-bld-00.bin deleted file mode 100644 index e981462..0000000 Binary files a/script/raw_tdx_quotes/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/quote-l2b-opt-uni-exp-33611633-bld-00.bin and /dev/null differ diff --git a/script/raw_tdx_quotes/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/quote-l2b-opt-uni-exp-33611633-bld-01.bin b/script/raw_tdx_quotes/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/quote-l2b-opt-uni-exp-33611633-bld-01.bin deleted file mode 100644 index f675f6f..0000000 Binary files a/script/raw_tdx_quotes/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/quote-l2b-opt-uni-exp-33611633-bld-01.bin and /dev/null differ diff --git a/script/raw_tdx_quotes/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/quote-l2b-opt-uni-exp-33611633-bld-02.bin b/script/raw_tdx_quotes/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/quote-l2b-opt-uni-exp-33611633-bld-02.bin deleted file mode 100644 index 09fb042..0000000 Binary files a/script/raw_tdx_quotes/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/quote-l2b-opt-uni-exp-33611633-bld-02.bin and /dev/null differ diff --git a/script/raw_tdx_quotes/342ad26adb6185cda1aea67ee5f35e9cb5c9cec32b03e8d4382492ca35d53331e906b20edbe46d9337b7b2b2248c633cc2a3aeb3a0ce480dd22b5950860c8a2c/quote.bin b/script/raw_tdx_quotes/342ad26adb6185cda1aea67ee5f35e9cb5c9cec32b03e8d4382492ca35d53331e906b20edbe46d9337b7b2b2248c633cc2a3aeb3a0ce480dd22b5950860c8a2c/quote.bin deleted file mode 100644 index d87d3e7..0000000 Binary files a/script/raw_tdx_quotes/342ad26adb6185cda1aea67ee5f35e9cb5c9cec32b03e8d4382492ca35d53331e906b20edbe46d9337b7b2b2248c633cc2a3aeb3a0ce480dd22b5950860c8a2c/quote.bin and /dev/null differ diff --git a/src/BlockBuilderPolicy.sol b/src/BlockBuilderPolicy.sol index 5ea161e..71c6291 100644 --- a/src/BlockBuilderPolicy.sol +++ b/src/BlockBuilderPolicy.sol @@ -17,12 +17,13 @@ import {FlashtestationRegistry} from "./FlashtestationRegistry.sol"; type WorkloadId is bytes32; /** - * @dev Metadata associated with a workload + * @notice Metadata associated with a workload + * @dev Used to track the source code used to build the TEE image identified by the workloadId */ struct WorkloadMetadata { - // The Git commit hash of the source code. + /// @notice The Git commit hash of the source code repository string commitHash; - // An array of URLs pointing to the source code. + /// @notice An array of URLs pointing to the source code repository string[] sourceLocators; } @@ -44,38 +45,47 @@ contract BlockBuilderPolicy is Initializable, UUPSUpgradeable, OwnableUpgradeabl bytes32 public constant VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH = keccak256("VerifyBlockBuilderProof(uint8 version,bytes32 blockContentHash,uint256 nonce)"); - // TDX workload constants - // See section 11.5.3 in TDX Module v1.5 Base Architecture Specification https://www.intel.com/content/www/us/en/content-details/733575/intel-tdx-module-v1-5-base-architecture-specification.html - bytes8 constant TD_XFAM_FPU = 0x0000000000000001; // Enabled FPU (always enabled) - bytes8 constant TD_XFAM_SSE = 0x0000000000000002; // Enabled SSE (always enabled) - - // See section 3.4.1 in TDX Module ABI specification https://cdrdv2.intel.com/v1/dl/getContent/733579 - bytes8 constant TD_TDATTRS_VE_DISABLED = 0x0000000010000000; // Allows disabling of EPT violation conversion to #VE on access of PENDING pages. Needed for Linux. - bytes8 constant TD_TDATTRS_PKS = 0x0000000040000000; // Enabled Supervisor Protection Keys (PKS) - bytes8 constant TD_TDATTRS_KL = 0x0000000080000000; // Enabled Key Locker (KL) - - // Mapping from workloadId to its metadata (commit hash and source locators) - // This is only updateable by governance (i.e. the owner) of the Policy contract. - // Adding, and removing a workload is O(1). - // The critical `isAllowedPolicy` function is now O(1) since we can directly check if a workloadId exists - // in the mapping + // ============ TDX workload constants ============ + + /// @dev See section 11.5.3 in TDX Module v1.5 Base Architecture Specification https://www.intel.com/content/www/us/en/content-details/733575/intel-tdx-module-v1-5-base-architecture-specification.html + /// @notice Enabled FPU (always enabled) + bytes8 constant TD_XFAM_FPU = 0x0000000000000001; + /// @notice Enabled SSE (always enabled) + bytes8 constant TD_XFAM_SSE = 0x0000000000000002; + + /// @dev See section 3.4.1 in TDX Module ABI specification https://cdrdv2.intel.com/v1/dl/getContent/733579 + /// @notice Allows disabling of EPT violation conversion to #VE on access of PENDING pages. Needed for Linux + bytes8 constant TD_TDATTRS_VE_DISABLED = 0x0000000010000000; + /// @notice Enabled Supervisor Protection Keys (PKS) + bytes8 constant TD_TDATTRS_PKS = 0x0000000040000000; + /// @notice Enabled Key Locker (KL) + bytes8 constant TD_TDATTRS_KL = 0x0000000080000000; + + /// @notice Mapping from workloadId to its metadata (commit hash and source locators) + /// @dev This is only updateable by governance (i.e. the owner) of the Policy contract + /// Adding and removing a workload is O(1). + /// This means the critical `isAllowedPolicy` function is O(1) since we can directly check if a workloadId exists + /// in the mapping mapping(bytes32 => WorkloadMetadata) public approvedWorkloads; + /// @notice Address of the FlashtestationRegistry contract that verifies TEE quotes address public registry; - // only v1 supported for now, but this will change with a contract upgrade - // Note: we have to use a non-constant array because solidity only supports constant arrays - // of value or bytes type. This means in future upgrades the upgrade logic will need to - // account for adding new versions to the array + /// @notice Array of supported flashtestation protocol versions + /// @dev Only v1 supported for now, but this will change with a contract upgrade + /// Note: we have to use a non-constant array because solidity only supports constant arrays + /// of value or bytes type. This means in future upgrades the upgrade logic will need to + /// account for adding new versions to the array uint256[] public SUPPORTED_VERSIONS; - // Tracks nonces for EIP-712 signatures to prevent replay attacks + /// @notice Tracks nonces for EIP-712 signatures to prevent replay attacks mapping(address => uint256) public nonces; - // Gap for future contract upgrades - uint256[48] __gap; + /// @dev Storage gap to allow for future storage variable additions in upgrades + /// @dev This reserves 46 storage slots (out of 50 total - 4 used for approvedWorkloads, registry, SUPPORTED_VERSIONS and nonces) + uint256[46] __gap; - // Errors + // ============ Errors ============ error WorkloadAlreadyInPolicy(); error WorkloadNotInPolicy(); @@ -84,22 +94,29 @@ contract BlockBuilderPolicy is Initializable, UUPSUpgradeable, OwnableUpgradeabl error InvalidNonce(uint256 expected, uint256 provided); error CommitHashLengthError(uint256 length); - // Events + // ============ Events ============ event WorkloadAddedToPolicy(WorkloadId workloadId); event WorkloadRemovedFromPolicy(WorkloadId workloadId); event RegistrySet(address registry); + /// @notice Emitted when a block builder proof is successfully verified + /// @param caller The address that called the verification function (TEE address) + /// @param workloadId The workload identifier of the TEE + /// @param blockNumber The block number when the verification occurred + /// @param version The flashtestation protocol version used + /// @param blockContentHash The hash of the block content + /// @param commitHash The git commit hash associated with the workload event BlockBuilderProofVerified( address caller, WorkloadId workloadId, uint256 blockNumber, uint8 version, bytes32 blockContentHash, - string commit_hash + string commitHash ); /** - * Initializer to set the FlashtestationRegistry contract, which verifies TEE quotes + * @notice Initializer to set the FlashtestationRegistry contract which verifies TEE quotes and the initial owner of the contract * @param _initialOwner The address of the initial owner of the contract * @param _registry The address of the registry contract */ @@ -111,9 +128,11 @@ contract BlockBuilderPolicy is Initializable, UUPSUpgradeable, OwnableUpgradeabl emit RegistrySet(_registry); } + /// @notice Restricts upgrades to owner only + /// @param newImplementation The address of the new implementation contract function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} - /// @notice Verify a block builder proof + /// @notice Verify a block builder proof with a Flashtestation Transaction /// @param version The version of the flashtestation's protocol used to generate the block builder proof /// @param blockContentHash The hash of the block content /// @notice This function will only succeed if the caller is a registered TEE-controlled address from an attested TEE @@ -127,7 +146,7 @@ contract BlockBuilderPolicy is Initializable, UUPSUpgradeable, OwnableUpgradeabl _verifyBlockBuilderProof(msg.sender, version, blockContentHash); } - /// @notice Verify a block builder proof using EIP-712 signatures + /// @notice Verify a block builder proof with a Flashtestation Transaction using EIP-712 signatures /// @param version The version of the flashtestation's protocol used to generate the block builder proof /// @param blockContentHash The hash of the block content /// @param nonce The nonce to use for the EIP-712 signature @@ -196,7 +215,8 @@ contract BlockBuilderPolicy is Initializable, UUPSUpgradeable, OwnableUpgradeabl return false; } - /// @notice Check if an address is allowed under any workload in the policy + /// @notice Check if this TEE-controlled address has registered a valid TEE workload with the registry, and + /// if the workload is approved under this policy /// @param teeAddress The TEE-controlled address /// @return allowed True if the TEE is valid for any workload in the policy /// @return workloadId The workloadId of the TEE that is valid for the policy, or 0 if the TEE is not valid for any workload in the policy @@ -218,9 +238,11 @@ contract BlockBuilderPolicy is Initializable, UUPSUpgradeable, OwnableUpgradeabl return (false, WorkloadId.wrap(0)); } - // Application specific mapping of registration data to a workload identifier - // Think of the workload identifier as the version of the application for governance - // The workload id verifiably maps to a version of source code for the VM image + /// @notice Application specific mapping of registration data to a workload identifier + /// @dev Think of the workload identifier as the version of the application for governance. + /// The workloadId verifiably maps to a version of source code that builds the TEE VM image + /// @param registration The registration data from a TEE device + /// @return The computed workload identifier function workloadIdForTDRegistration(FlashtestationRegistry.RegisteredTEE memory registration) public pure @@ -302,6 +324,8 @@ contract BlockBuilderPolicy is Initializable, UUPSUpgradeable, OwnableUpgradeabl } /// @notice Get the metadata for a workload + /// @param workloadId The workload identifier to query + /// @return The metadata associated with the workload function getWorkloadMetadata(WorkloadId workloadId) external view returns (WorkloadMetadata memory) { return approvedWorkloads[WorkloadId.unwrap(workloadId)]; } diff --git a/src/FlashtestationRegistry.sol b/src/FlashtestationRegistry.sol index f8c2505..07378d8 100644 --- a/src/FlashtestationRegistry.sol +++ b/src/FlashtestationRegistry.sol @@ -27,34 +27,36 @@ contract FlashtestationRegistry is { using ECDSA for bytes32; - // Constants - - // Minimum length of the td reportdata field: tee address (20) and hash of extended data (32) + /// @notice Minimum length of the td reportdata field: tee address (20 bytes) and hash of extendedRegistrationData(32 bytes) + /// @dev This is the minimum length of the td reportdata field, which is required by the TDX specification + /// @dev The remaining 12 bytes of the 64 byte reportdata field is left unused, it does not matter what is put there uint256 public constant TD_REPORTDATA_LENGTH = 52; - // Maximum size for byte arrays to prevent DoS attacks - uint256 public constant MAX_BYTES_SIZE = 20 * 1024; // 20KB limit + /// @notice Maximum size for byte arrays to prevent DoS attacks + /// @dev 20KB limit + uint256 public constant MAX_BYTES_SIZE = 20 * 1024; - // EIP-712 Constants + /// @notice EIP-712 Typehash, used in the permitRegisterTEEService function bytes32 public constant REGISTER_TYPEHASH = keccak256("RegisterTEEService(bytes rawQuote,bytes extendedRegistrationData,uint256 nonce)"); // Storage Variables - // The address of the Automata DCAP Attestation contract, which verifies TEE quotes. - // This is deployed by Automata, and once set on the FlashtestationRegistry, it cannot be changed + /// @notice The address of the Automata DCAP Attestation contract, which verifies TEE quotes + /// @dev This is deployed by Automata and set during initialization IAttestation public attestationContract; - // Tracks the TEE-controlled address that registered a particular attestation quote and app data. - // This enables efficient O(1) lookup in `getRegistration`, so that apps can quickly verify the - // output of a TEE workload + /// @notice Tracks the TEE-controlled address that registered a particular attestation quote and app data. + /// @dev This enables efficient O(1) lookup in `getRegistration`, so that apps can quickly verify the + /// output of a TEE workload mapping(address => RegisteredTEE) public registeredTEEs; - // Tracks nonces for EIP-712 signatures to prevent replay attacks + /// @notice Tracks nonces for EIP-712 signatures to prevent replay attacks mapping(address => uint256) public nonces; - // Gap for future contract upgrades - uint256[48] __gap; + /// @dev Storage gap to allow for future storage variable additions in upgrades + /// @dev This reserves 47 storage slots (out of 50 total - 3 used for attestationContract, registeredTEEs and nonces) + uint256[47] __gap; /** * Initializer to set the Automata DCAP Attestation contract, which verifies TEE quotes @@ -66,6 +68,14 @@ contract FlashtestationRegistry is attestationContract = IAttestation(_attestationContract); } + /** + * @notice Internal function to authorize contract upgrades to the contract + * @dev Only the owner can authorize upgrades + * @dev This function is required by the UUPSUpgradeable contract + * @dev Once there are no bugs in the code for a safe amount of time, we plan to transfer ownership + * to the 0x0 address, so that the contract is no longer upgradeable + * @param newImplementation The address of the new implementation contract + */ function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} /** @@ -98,9 +108,12 @@ contract FlashtestationRegistry is * @dev In order to mitigate DoS attacks, the quote must be less than 20KB * @dev This function exists so that the TEE does not need to be funded with gas for transaction fees, and * instead can rely on any EOA to execute the transaction, but still only allow quotes from attested TEEs - * @dev Replay is implicitly shielded against through the transaction's nonce (TEE must sign the new nonce) + * @dev Replay is implicitly shielded against replay attacks through the transaction's nonce (TEE must sign the new nonce) * @param rawQuote The raw quote from the TEE device. Must be a V4 TDX quote - * @param extendedRegistrationData Abi-encoded application specific attested data, reserved for future upgrades + * @param extendedRegistrationData Abi-encoded application specific attested data, this is arbitrary app-related + * data that the app wants to associate with the TEE-controlled address. Even though it's passed in as a parameter, + * we can trust that it comes from the TEE because we verify that the hash derived from all of the variables in + * extendedRegistrationData matches the hash in the TDX report data. * @param nonce The nonce to use for the EIP-712 signature (to prevent replay attacks) * @param signature The EIP-712 signature of the registration message */ @@ -128,13 +141,12 @@ contract FlashtestationRegistry is } /** - * @notice Registers a TEE workload with a specific TEE-controlled address in the FlashtestationRegistry - * @notice The TEE must be registered with a quote whose validity is verified by the attestationContract + * @notice Verifies + Registers a TEE workload with a specific TEE-controlled address in the FlashtestationRegistry * @dev In order to mitigate DoS attacks, the quote must be less than 20KB * @dev This is a costly operation (5 million gas) and should be used sparingly. * @param caller The address from which registration request originates, must match the one in the quote * @param rawQuote The raw quote from the TEE device. Must be a V4 TDX quote - * @param extendedRegistrationData Abi-encoded application specific attested data, reserved for future upgrades + * @param extendedRegistrationData Abi-encoded application specific attested data */ function doRegister(address caller, bytes calldata rawQuote, bytes calldata extendedRegistrationData) internal @@ -156,16 +168,22 @@ contract FlashtestationRegistry is } (address teeAddress, bytes32 extendedDataReportHash) = QuoteParser.parseReportData(td10ReportBody.reportData); + + // Ensure that the caller is the TEE-controlled address, otherwise we have no guarantees that + // the TEE-controlled address is the one that is registering the TEE if (caller != teeAddress) { revert SenderMustMatchTEEAddress(caller, teeAddress); } + + // Verify that the extended registration data matches the hash in the TDX report data + // This is to ensure that the values in extendedRegistrationData are the same as the values + // in the TDX report data, which cannot be forged by the TEE-controlled address bytes32 extendedRegistrationDataHash = keccak256(extendedRegistrationData); if (extendedRegistrationDataHash != extendedDataReportHash) { revert InvalidRegistrationDataHash(extendedDataReportHash, extendedRegistrationDataHash); } - bytes32 quoteHash = keccak256(rawQuote); - bool previouslyRegistered = checkPreviousRegistration(teeAddress, quoteHash); + bool previouslyRegistered = checkPreviousRegistration(teeAddress, rawQuote); // Register the address in the registry with the raw quote so later on if the TEE has its // underlying DCAP endorsements updated, we can invalidate the TEE's attestation @@ -190,11 +208,11 @@ contract FlashtestationRegistry is * @dev We do not need to check the public key, because the address has a cryptographically-ensured * 1-to-1 relationship with the public key, so checking it would be redundant * @param teeAddress The TEE-controlled address of the TEE - * @param quoteHash The hash of registration's raw quote + * @param quote The hash of registration's raw quote * @return Whether the TEE is already registered but is updating its quote */ - function checkPreviousRegistration(address teeAddress, bytes32 quoteHash) internal view returns (bool) { - if (keccak256(registeredTEEs[teeAddress].rawQuote) == quoteHash) { + function checkPreviousRegistration(address teeAddress, bytes memory quote) internal view returns (bool) { + if (keccak256(quote) == keccak256(registeredTEEs[teeAddress].rawQuote)) { revert TEEServiceAlreadyRegistered(teeAddress); } @@ -206,7 +224,8 @@ contract FlashtestationRegistry is /** * @notice Fetches TEE registration for a given address * @param teeAddress The TEE-controlled address to check - * @return Raw quote, and whether the TEE quote, td attributes, or xfam have not been invalidated + * @return isValid Whether the TEE quote, td attributes, or xfam have not been invalidated + * @return registeredTEE The RegisteredTEE struct containing raw quote, parsed report body, and extended data * @dev getRegistration will only return true if a valid TEE quote containing * teeAddress in its reportData field was previously registered with the FlashtestationRegistry * using the registerTEEService function. diff --git a/src/interfaces/IFlashtestationRegistry.sol b/src/interfaces/IFlashtestationRegistry.sol index 4bab33c..8dd63d2 100644 --- a/src/interfaces/IFlashtestationRegistry.sol +++ b/src/interfaces/IFlashtestationRegistry.sol @@ -31,6 +31,5 @@ interface IFlashtestationRegistry { error TEEServiceNotRegistered(address teeAddress); error TEEServiceAlreadyInvalid(address teeAddress); error TEEIsStillValid(address teeAddress); - error InvalidSignature(); error InvalidNonce(uint256 expected, uint256 provided); } diff --git a/test/FlashtestationRegistry.t.sol b/test/FlashtestationRegistry.t.sol index af9e3cb..a5c5eb9 100644 --- a/test/FlashtestationRegistry.t.sol +++ b/test/FlashtestationRegistry.t.sol @@ -148,7 +148,6 @@ contract FlashtestationRegistryTest is Test { bytes memory mockOutput = mockf200.output; bytes memory mockQuote = mockf200.quote; address expectedAddress = mockf200.teeAddress; - bytes32 expectedQuoteHash = keccak256(mockQuote); attestationContract.setQuoteResult(mockQuote, true, mockOutput); @@ -156,9 +155,7 @@ contract FlashtestationRegistryTest is Test { registry.registerTEEService(mockQuote, mockf200.extData); vm.expectRevert( - abi.encodeWithSelector( - IFlashtestationRegistry.TEEServiceAlreadyRegistered.selector, expectedAddress, expectedQuoteHash - ) + abi.encodeWithSelector(IFlashtestationRegistry.TEEServiceAlreadyRegistered.selector, expectedAddress) ); vm.prank(expectedAddress); registry.registerTEEService(mockQuote, mockf200.extData); @@ -297,14 +294,13 @@ contract FlashtestationRegistryTest is Test { bytes memory mockOutput = mockf200.output; bytes memory mockQuote = mockf200.quote; address teeAddress = mockf200.teeAddress; - bytes32 quoteHash = keccak256(mockQuote); attestationContract.setQuoteResult(mockQuote, true, mockOutput); vm.prank(teeAddress); registry.registerTEEService(mockQuote, mockf200.extData); // Now, invalidate with success==true (still valid) attestationContract.setQuoteResult(mockQuote, true, mockOutput); - vm.expectRevert(abi.encodeWithSelector(IFlashtestationRegistry.TEEIsStillValid.selector, teeAddress, quoteHash)); + vm.expectRevert(abi.encodeWithSelector(IFlashtestationRegistry.TEEIsStillValid.selector, teeAddress)); registry.invalidateAttestation(teeAddress); } diff --git a/test/StringUtils.t.sol b/test/StringUtils.t.sol index b25ff40..5aef176 100644 --- a/test/StringUtils.t.sol +++ b/test/StringUtils.t.sol @@ -5,7 +5,7 @@ import "forge-std/Test.sol"; import "../src/utils/StringUtils.sol"; contract StringUtilsTest is Test { - function test_splitCommaSeparated_singleURL() public { + function test_splitCommaSeparated_singleURL() public pure { string memory input = "https://github.com/flashbots/flashbots-images/commit/a5aa6c75fbecc4b88faf4886cbd3cb2c667f4a8c"; string[] memory result = StringUtils.splitCommaSeparated(input); @@ -17,7 +17,7 @@ contract StringUtilsTest is Test { ); } - function test_splitCommaSeparated_multipleURLs() public { + function test_splitCommaSeparated_multipleURLs() public pure { string memory input = "https://github.com/flashbots/mev-boost/commit/7fb1e6f8f96b55c0f672b0b66b61e7f10e1b6e8a,https://ipfs.io/ipfs/bafybeihkoviema7g3gxyt6la7vd5ho32ictqbilu3wnlo3rs7ewhnp7lly"; string[] memory result = StringUtils.splitCommaSeparated(input); @@ -34,7 +34,7 @@ contract StringUtilsTest is Test { ); } - function test_splitCommaSeparated_trimsWhitespaceURLs() public { + function test_splitCommaSeparated_trimsWhitespaceURLs() public pure { string memory input = " https://github.com/ethereum/go-ethereum/commit/9bbb9df18529f495f1312e94db22ddcf3e3022f8 , https://github.com/flashbots/builder/commit/d8e2d3e5f8ad7f8dd8e99e7e023e8e5e4bbbc8fb ,https://ipfs.io/ipfs/bafkreigjpewirtzmt2ggqx7zqd5g5eqrtcnfli5oobqp7w3s2tagtusomy "; string[] memory result = StringUtils.splitCommaSeparated(input); @@ -56,14 +56,14 @@ contract StringUtilsTest is Test { ); } - function test_splitCommaSeparated_emptyString() public { + function test_splitCommaSeparated_emptyString() public pure { string memory input = ""; string[] memory result = StringUtils.splitCommaSeparated(input); assertEq(result.length, 1, "Should return one element for empty string"); assertEq(result[0], "", "Element should be empty string"); } - function test_splitCommaSeparated_leadingAndTrailingCommasURLs() public { + function test_splitCommaSeparated_leadingAndTrailingCommasURLs() public pure { string memory input = ",https://github.com/flashbots/rbuilder/commit/c2e3d7c5f8ad7f8dd8e99e7e023e8e5e4bbbc8fb,https://ipfs.io/ipfs/bafybeif7l5k6vk6kpnfsc3biswihqz3le5ngnf47mj3lzrjbdh6jmqnzyi,"; string[] memory result = StringUtils.splitCommaSeparated(input); @@ -82,7 +82,7 @@ contract StringUtilsTest is Test { assertEq(result[3], "", "Fourth element should be empty"); } - function test_splitCommaSeparated_onlyCommas() public { + function test_splitCommaSeparated_onlyCommas() public pure { string memory input = ",,,"; string[] memory result = StringUtils.splitCommaSeparated(input); assertEq(result.length, 4, "Should return four empty elements"); @@ -91,7 +91,7 @@ contract StringUtilsTest is Test { } } - function test_splitCommaSeparated_spacesOnly() public { + function test_splitCommaSeparated_spacesOnly() public pure { string memory input = " , , "; string[] memory result = StringUtils.splitCommaSeparated(input); assertEq(result.length, 3, "Should return three elements"); @@ -100,7 +100,7 @@ contract StringUtilsTest is Test { } } - function test_splitCommaSeparated_variousURLs() public { + function test_splitCommaSeparated_variousURLs() public pure { string memory input = "https://github.com/flashbots/rollup-boost/commit/a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0, https://github.com/paradigmxyz/reth/commit/b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0 ,https://ipfs.io/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"; string[] memory result = StringUtils.splitCommaSeparated(input); @@ -122,7 +122,7 @@ contract StringUtilsTest is Test { ); } - function test_splitCommaSeparated_URLsWithQueryStrings() public { + function test_splitCommaSeparated_URLsWithQueryStrings() public pure { string memory input = "https://github.com/flashbots/mev-boost-relay/commit/e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0?ref=main, https://ipfs.io/ipfs/bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq?filename=wiki.html"; string[] memory result = StringUtils.splitCommaSeparated(input);