From c7c13150527f08810743027d75bbd3d4647b1d60 Mon Sep 17 00:00:00 2001 From: tommyzhao451 Date: Wed, 15 Jan 2025 14:49:03 -0800 Subject: [PATCH 1/2] added decrease liquidity single V4 --- README.md | 7 +- .../42161/run-1736978362.json | 326 ++++++++++++++++++ .../42161/run-latest.json | 241 +++++++------ script/DeployUniV3Automan.s.sol | 18 +- .../42161/automan_params.json | 4 +- src/SlipStreamAutoman.sol | 179 +++------- src/base/Automan.sol | 179 +++------- src/base/Payments.sol | 5 +- src/interfaces/IAutoman.sol | 102 +----- test/Automan.t.sol | 14 +- test/uniswap/UniHandler.sol | 31 +- 11 files changed, 633 insertions(+), 473 deletions(-) create mode 100644 broadcast/DeployUniV3Automan.s.sol/42161/run-1736978362.json diff --git a/README.md b/README.md index 7e1c23f..cffff43 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ git clone https://github.com/0age/create2crunch cd create2crunch export FACTORY="0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2" export CALLER="[DEPLOYER_ADDRESS_GOES_HERE]" -export INIT_CODE_HASH="[INIT_CODE_HASH_GOES_HERE]" +export INIT_CODE_HASH="0x48684f451a08b8535db7a2b934c443c9f269775950f4bdea4388bc3b5fae75e7" cargo run --release $FACTORY $CALLER $INIT_CODE_HASH ``` @@ -129,11 +129,14 @@ Re-simulate `DeployUniV3Automan` with a dry-run to verify that the deployment ad Generate the standard JSON input and verify the contract on Etherscan with it: ```shell -forge verify-contract 0x00000000Ede6d8D217c60f93191C060747324bca UniV3Automan --optimizer-runs 4194304 --constructor-args 0x000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112 --show-standard-json-input > etherscan.json +forge verify-contract 0x0000003858948F29A38C6c3Ca09a1cD53a58DC34 UniV3Automan --optimizer-runs 4194304 --constructor-args 0x000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112 --show-standard-json-input > UniV3Automan.json +forge verify-contract 0x00000004D523574c93021f52E520ec4fb2FFA564 UniV3OptimalSwapRouter --optimizer-runs 4194304 --constructor-args 0x000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88 --show-standard-json-input > UniV3OptimalSwapRouter.json ``` Constructor args can be encoded easily using an online ABI tool like https://abi.hashex.org. The above example shows `UniV3Automan` constructor args consisting of the nonfungible position manager contract address followed by the deployer address as the temporary Automan owner during deployment. +When verifying contracts on etherscan, omit '0x' from Constructor Arguments ABI-encoded. + **Deployed Contracts** * [Mainnet](https://etherscan.io/address/0x00000000ede6d8d217c60f93191c060747324bca) diff --git a/broadcast/DeployUniV3Automan.s.sol/42161/run-1736978362.json b/broadcast/DeployUniV3Automan.s.sol/42161/run-1736978362.json new file mode 100644 index 0000000..dd7bff7 --- /dev/null +++ b/broadcast/DeployUniV3Automan.s.sol/42161/run-1736978362.json @@ -0,0 +1,326 @@ +{ + "transactions": [ + { + "hash": "0x0982ed74cb7761622552b977d1cfccd9112d56a2e10cb499877f6796b3aae83f", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", + "function": "deploy(uint256,bytes32,bytes)", + "arguments": [ + "0", + "0xbeef63ae5a2102506e8a352a5bb32aa8b30b311225946149e8de306029000020", + "0x60e08060405260208161213e803803809161001a828561013c565b83398101031261013757516001600160a01b03811690818103610137576080526040516312a9293f60e21b8152602081600481855afa91821561010e5760049260209260009161011a575b506001600160a01b031660a05260405163c45a015560e01b815292839182905afa90811561010e576000916100df575b5060c052604051611fa99081610195823960805181610654015260a0518181816103d8015281816106c101526106ff015260c05181818161019e015281816104ff01526105e50152f35b610101915060203d602011610107575b6100f9818361013c565b810190610175565b38610095565b503d6100ef565b6040513d6000823e3d90fd5b6101319150833d8511610107576100f9818361013c565b38610065565b600080fd5b601f909101601f19168101906001600160401b0382119082101761015f57604052565b634e487b7160e01b600052604160045260246000fd5b9081602091031261013757516001600160a01b0381168103610137579056fe60a080604052600436101561042a575b5036156103c157346103bc5760003560601c60143560601c9060313560f81c9060323560601c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63601838584180285189061008b6100833373ffffffffffffffffffffffffffffffffffffffff851661080b565b303385610847565b826014527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6034526f095ea7b3000000000000000000000000600052602060006044601082865af13d156001600051141716156103ae57600080918160345260405181605a82378260463560601c5af11561035f576044601060008093602095601452816034526f095ea7b300000000000000000000000082525af13d156001600051141716156103ae576000603452610145308261080b565b61014f308561080b565b90604051906060820182811067ffffffffffffffff82111761037f5760405283825285602083015260283560e81c60408301526040519474ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606083206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016956040526000146103695761023681610220338961080b565b8501905b602e3560e81d602b3560e81d896108a0565b50506080519560009382610285575b50506000039485831802809218019318019180610273575b50508061026657005b610271913390611544565b005b61027e913390611544565b388061025d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09194500192604060008551926060875282517f128acb080000000000000000000000000000000000000000000000000000000081523060048201528a60248201528560448201528a73fffd8963efd1fc6a506488495d951d53639afb810273fffd8963efd1fc6a506488495d951d5263988d2518606482015260a060848201528260c489516020810160a48501818d60045afa5001925af160403d14161561035f57600051878160205118021860000393523880610245565b3d6000803e3d6000fd5b610236610376338661080b565b82018490610224565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b633e3f8f736000526004601cfd5b600080fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361040057005b7f2f1ca35a0000000000000000000000000000000000000000000000000000000060005260046000fd5b60003560e01c9081634aa4a4fc14610678575080637f1e9ef614610609578063c45a01551461059a5763fa461e3314610463573861000f565b346103bc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc5760443560043567ffffffffffffffff82116103bc57366023830112156103bc5781600401359167ffffffffffffffff83116103bc57602481019260243691830101116103bc5760405190606084600037606060002074ff00000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000176000526020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016916040528133036103bc5760008313156105855750610271923090356106e5565b610271935060243592503090604401356106e5565b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b92919073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168073ffffffffffffffffffffffffffffffffffffffff86161480610802575b610776575b5073ffffffffffffffffffffffffffffffffffffffff8116300361076d575061076b92611544565b565b61076b93610847565b3484036107d85760006004818681947fd0e30db00000000000000000000000000000000000000000000000000000000083525af1156103bc573073ffffffffffffffffffffffffffffffffffffffff8316146107d25738610743565b50505050565b7fa11a990f0000000000000000000000000000000000000000000000000000000060005260046000fd5b5034151561073e565b6024600080926020947f70a082310000000000000000000000000000000000000000000000000000000083526004525afa156103bc5760005190565b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615610892576000606052604052565b637939f4246000526004601cfd5b60006080819052959491939182158061153c575b611525578360020b8560020b90808212918215926114fb575b5081156114ee575b506114c457813b156114b657604051610120810181811067ffffffffffffffff82111761037f576040526000815260006020820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e082015260006101008201527f3850c7bd0000000000000000000000000000000000000000000000000000000060005260406000600481865afa156103bc576000519260205196849760408401527f1a6865020000000000000000000000000000000000000000000000000000000060005260206000600481855afa156103bc57600051907fddca3f430000000000000000000000000000000000000000000000000000000060005260206000600481865afa156103bc5762ffffff60005116907fd0c93a7c0000000000000000000000000000000000000000000000000000000060005260206000600481875afa156103bc57610a5a92610a549260005191875288602088015289606088015287608088015260e087015261010086015261158f565b9661158f565b938660a08401528460c0840152610ab673ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff891673ffffffffffffffffffffffffffffffffffffffff8416878a6118e9565b608052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000906000905b600084604081015160020b9461010082015160020b946080516000146113da5783868807128688050360081d9160010b8260010b146000146113ca575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260ff8399898881830712910503161b01165b801561138c577f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a17955b948196610bf182828560081b010261158f565b946080511560001461133057610c4173ffffffffffffffffffffffffffffffffffffffff6020870151166fffffffffffffffffffffffffffffffff8751166080880151908960e08a015193611b4a565b92919690969260608201510196608082015103975b73ffffffffffffffffffffffffffffffffffffffff8085169116810361131f57610c919060a083015160c06080511515940151918b8b6118e9565b1515146112a757505050505050505050505b80519260208201519260608301519660808401519260805115600014610fdd575073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff861610610ee3575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff85161015610d40575b50505090610d3a9185611a59565b91030191565b9196509291975085519286602081015160c08201519560e08301519081620f424003908060601b84810460608701510190610d7f60a088015183611f0f565b9a610d98610d928689620f424002611a98565b85611f0f565b95610daf60a060808b01519889019a015186611f0f565b890396871115610ed557610d3a9c86610e7e96610dcf85610ec89d611da7565b930204900303940290620f42400204900360011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b058181119082180218978a89038060ff1d908101189060016c0100000000000000000000000060e0610eb4858a611f0f565b930151620f42400393880915151601611cf8565b9103019690913880610d2c565b63202368086000526004601cfd5b999750610f03610efc60e0850151620f42400384611c66565b8686611ad1565b9773ffffffffffffffffffffffffffffffffffffffff8b1673ffffffffffffffffffffffffffffffffffffffff8a1610600014610f5a575073ffffffffffffffffffffffffffffffffffffffff819a5b9050610cf8565b9993918585610fac92610fa482879c969c038060ff1d90810118610f7e8186611f0f565b60016c0100000000000000000000000060e08c0151620f42400393880915151601611cf8565b900394611a59565b019573ffffffffffffffffffffffffffffffffffffffff848181166020860152886060860152836080860152610f53565b905073ffffffffffffffffffffffffffffffffffffffff819893989792971673ffffffffffffffffffffffffffffffffffffffff8616116111da575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff85161115611065575b50505090610d3a9185038060ff1d9081011890611f0f565b9196509291975085519260208701519360c08801519460e08901519182620f4240039260608b0151908260601b908985870283620f4240020484019204820392831115610ed55784868e95611100610d3a9d6110f86110f26111cd9c60a08c60806110e16110da6111a49e8585015190611f0f565b9b8a611f0f565b910151019c0151620f424002611a98565b84611f0f565b890398611da7565b93020401039160011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b0481811090821802189760e06111bf868d8c611a0b565b910151620f42400390611cf8565b910301969091388061104d565b9997506111fa6111f360e0850151620f42400384611c66565b8686611971565b9773ffffffffffffffffffffffffffffffffffffffff8b8116908a161061123b575073ffffffffffffffffffffffffffffffffffffffff819a5b9050611019565b999391611276906112636112538886899c969c611a0b565b60e0870151620f42400390611cf8565b90039285038060ff1d9081011886611f0f565b019573ffffffffffffffffffffffffffffffffffffffff848181166020860152836060860152886080860152611234565b7ff30dba9300000000000000000000000000000000000000000000000000000000815283838660081b010260020b6004526040816024818b5afa1561131c5760205190608051900318608051018a51018a5260208a01526080519260081b010203604087015260608601526080850152610ae0565b80fd5b505050505050505050505050610ca3565b9361137573ffffffffffffffffffffffffffffffffffffffff6020830151166fffffffffffffffffffffffffffffffff8351166060840151908960e086015193611b4a565b969192906060820151039660808201510197610c56565b50919450507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160010b6113c08183611f5d565b9390859085610b52565b506113d58185611f5d565b610b1d565b60018487890712878905030160020b60081d9160010b8260010b146000146114a6575b60018082988887818307129105030160ff161b8403165b801561148657808403167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1792831c63d76453e004161a1795610bde565b50905060019194500160010b61149c8183611f5d565b9390859085611414565b506114b18185611f5d565b6113fd565b6301ac05a56000526004601cfd5b7f30673a1b0000000000000000000000000000000000000000000000000000000060005260046000fd5b620d89e8915013386108d5565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618139150386108cd565b505050505090506000906000906000608052600090565b5080156108b4565b6010600060449260209582956014526034526fa9059cbb00000000000000000000000082525af13d15600160005114171615611581576000603452565b6390b8ec186000526004601cfd5b8060ff1d81810118620d89e881116118d15763ffffffff91600182167001fffcb933bd6fad37aa2d162d1a594001027001000000000000000000000000000000001891600281166118b5575b60048116611899575b6008811661187d575b60108116611861575b60208116611845575b60408116611829575b6080811661180d575b61010081166117f1575b61020081166117d5575b61040081166117b9575b610800811661179d575b6110008116611781575b6120008116611765575b6140008116611749575b618000811661172d575b620100008116611711575b6202000081166116f6575b6204000081166116db575b62080000166116c2575b60001261169b575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04611694565b6b048a170391f7dc42444e8fa290910260801c9061168c565b6d2216e584f5fa1ea926041bedfe9890920260801c91611682565b916e5d6af8dedb81196699c329225ee6040260801c91611677565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161166c565b916f31be135f97d08fd981231505542fcfa60260801c91611661565b916f70d869a156d2a1b890bb3df62baf32f70260801c91611657565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161164d565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91611643565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91611639565b916ff3392b0822b70005940c7a398e4b70f30260801c9161162f565b916ff987a7253ac413176f2b074cf7815e540260801c91611625565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c9161161b565b916ffe5dee046a99a2a811c461f1969c30530260801c91611611565b916fff2ea16466c96a3843ec78b326b528610260801c91611608565b916fff973b41fa98c081472e6896dfb254c00260801c916115ff565b916fffcb9843d60f6159c9db58835c9266440260801c916115f6565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916115ed565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916115e4565b916ffff97272373d413259a46990580e213a0260801c916115db565b6308c379a0600052602080526101546041526045601cfd5b9193918385116118fd575050505050600090565b82851061190e575050505050600190565b6119319361191f8661192893611f0f565b90860390611f0f565b93820390611e68565b1090565b9190820180921161194257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908115611a065760601b9180820281838204146119b9575b5082916119ad9173ffffffffffffffffffffffffffffffffffffffff9404611935565b80820615159104011690565b830183811061198a5791506119cf828285611e68565b92096119ef575b73ffffffffffffffffffffffffffffffffffffffff1690565b600101806119d6575b63ae47f7026000526004601cfd5b505090565b918282108284180280808518931893146103bc5760019060601b92828103611a4a73ffffffffffffffffffffffffffffffffffffffff83168287611e68565b94098284061715151691040190565b818118818310028082189392811891146103bc57611a94918373ffffffffffffffffffffffffffffffffffffffff831692039060601b611e68565b0490565b8115611aa2570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9073ffffffffffffffffffffffffffffffffffffffff90611b04938060a01c15600014611b3a5760601b04915b16611935565b740100000000000000000000000000000000000000008110156103bc5773ffffffffffffffffffffffffffffffffffffffff1690565b90611b4491611da7565b91611afe565b919094929473ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8416101594620f42400390611b908288611c66565b8615611c3457611ba1848684611a0b565b975b888210611bfd575050958691620f4240611bbd8284611cf8565b9209611beb575b945b15611be25791611bdf92038060ff1d9081011890611f0f565b90565b611bdf92611a59565b600191500180156119f8578590611bc4565b96975091505082158215176103bc578515611c2457611c1d908284611971565b8095611bc6565b611c2f908284611ad1565b611c1d565b8185038060ff1d9081011860016c01000000000000000000000000611c598388611f0f565b9287091515160197611ba3565b81810291620f424081838504148315170215611c87575050620f4240900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620f42409284098481108501900392099080620f424011156119f857828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c261390290565b90620f424082029181620f4240828504148215170215611d185750900490565b81620f42407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8184098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b908160601b91816c01000000000000000000000000828504148215170215611dcf5750900490565b816c010000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8184098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b81810292918115828504821417830215611e83575050900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff849284098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b818102917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff910981811082019003806c0100000000000000000000000011156119f85760a01b9060601c1790565b6024600080926020947f5339c29600000000000000000000000000000000000000000000000000000000835260010b6004525afa156103bc576000519056fea164736f6c634300081a000a000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88" + ], + "transaction": { + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", + "gas": "0x3b68e3", + "value": "0x0", + "input": "0x66cfa0570000000000000000000000000000000000000000000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b311225946149e8de3060290000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000215e60e08060405260208161213e803803809161001a828561013c565b83398101031261013757516001600160a01b03811690818103610137576080526040516312a9293f60e21b8152602081600481855afa91821561010e5760049260209260009161011a575b506001600160a01b031660a05260405163c45a015560e01b815292839182905afa90811561010e576000916100df575b5060c052604051611fa99081610195823960805181610654015260a0518181816103d8015281816106c101526106ff015260c05181818161019e015281816104ff01526105e50152f35b610101915060203d602011610107575b6100f9818361013c565b810190610175565b38610095565b503d6100ef565b6040513d6000823e3d90fd5b6101319150833d8511610107576100f9818361013c565b38610065565b600080fd5b601f909101601f19168101906001600160401b0382119082101761015f57604052565b634e487b7160e01b600052604160045260246000fd5b9081602091031261013757516001600160a01b0381168103610137579056fe60a080604052600436101561042a575b5036156103c157346103bc5760003560601c60143560601c9060313560f81c9060323560601c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63601838584180285189061008b6100833373ffffffffffffffffffffffffffffffffffffffff851661080b565b303385610847565b826014527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6034526f095ea7b3000000000000000000000000600052602060006044601082865af13d156001600051141716156103ae57600080918160345260405181605a82378260463560601c5af11561035f576044601060008093602095601452816034526f095ea7b300000000000000000000000082525af13d156001600051141716156103ae576000603452610145308261080b565b61014f308561080b565b90604051906060820182811067ffffffffffffffff82111761037f5760405283825285602083015260283560e81c60408301526040519474ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606083206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016956040526000146103695761023681610220338961080b565b8501905b602e3560e81d602b3560e81d896108a0565b50506080519560009382610285575b50506000039485831802809218019318019180610273575b50508061026657005b610271913390611544565b005b61027e913390611544565b388061025d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09194500192604060008551926060875282517f128acb080000000000000000000000000000000000000000000000000000000081523060048201528a60248201528560448201528a73fffd8963efd1fc6a506488495d951d53639afb810273fffd8963efd1fc6a506488495d951d5263988d2518606482015260a060848201528260c489516020810160a48501818d60045afa5001925af160403d14161561035f57600051878160205118021860000393523880610245565b3d6000803e3d6000fd5b610236610376338661080b565b82018490610224565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b633e3f8f736000526004601cfd5b600080fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361040057005b7f2f1ca35a0000000000000000000000000000000000000000000000000000000060005260046000fd5b60003560e01c9081634aa4a4fc14610678575080637f1e9ef614610609578063c45a01551461059a5763fa461e3314610463573861000f565b346103bc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc5760443560043567ffffffffffffffff82116103bc57366023830112156103bc5781600401359167ffffffffffffffff83116103bc57602481019260243691830101116103bc5760405190606084600037606060002074ff00000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000176000526020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016916040528133036103bc5760008313156105855750610271923090356106e5565b610271935060243592503090604401356106e5565b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b92919073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168073ffffffffffffffffffffffffffffffffffffffff86161480610802575b610776575b5073ffffffffffffffffffffffffffffffffffffffff8116300361076d575061076b92611544565b565b61076b93610847565b3484036107d85760006004818681947fd0e30db00000000000000000000000000000000000000000000000000000000083525af1156103bc573073ffffffffffffffffffffffffffffffffffffffff8316146107d25738610743565b50505050565b7fa11a990f0000000000000000000000000000000000000000000000000000000060005260046000fd5b5034151561073e565b6024600080926020947f70a082310000000000000000000000000000000000000000000000000000000083526004525afa156103bc5760005190565b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615610892576000606052604052565b637939f4246000526004601cfd5b60006080819052959491939182158061153c575b611525578360020b8560020b90808212918215926114fb575b5081156114ee575b506114c457813b156114b657604051610120810181811067ffffffffffffffff82111761037f576040526000815260006020820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e082015260006101008201527f3850c7bd0000000000000000000000000000000000000000000000000000000060005260406000600481865afa156103bc576000519260205196849760408401527f1a6865020000000000000000000000000000000000000000000000000000000060005260206000600481855afa156103bc57600051907fddca3f430000000000000000000000000000000000000000000000000000000060005260206000600481865afa156103bc5762ffffff60005116907fd0c93a7c0000000000000000000000000000000000000000000000000000000060005260206000600481875afa156103bc57610a5a92610a549260005191875288602088015289606088015287608088015260e087015261010086015261158f565b9661158f565b938660a08401528460c0840152610ab673ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff891673ffffffffffffffffffffffffffffffffffffffff8416878a6118e9565b608052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000906000905b600084604081015160020b9461010082015160020b946080516000146113da5783868807128688050360081d9160010b8260010b146000146113ca575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260ff8399898881830712910503161b01165b801561138c577f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a17955b948196610bf182828560081b010261158f565b946080511560001461133057610c4173ffffffffffffffffffffffffffffffffffffffff6020870151166fffffffffffffffffffffffffffffffff8751166080880151908960e08a015193611b4a565b92919690969260608201510196608082015103975b73ffffffffffffffffffffffffffffffffffffffff8085169116810361131f57610c919060a083015160c06080511515940151918b8b6118e9565b1515146112a757505050505050505050505b80519260208201519260608301519660808401519260805115600014610fdd575073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff861610610ee3575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff85161015610d40575b50505090610d3a9185611a59565b91030191565b9196509291975085519286602081015160c08201519560e08301519081620f424003908060601b84810460608701510190610d7f60a088015183611f0f565b9a610d98610d928689620f424002611a98565b85611f0f565b95610daf60a060808b01519889019a015186611f0f565b890396871115610ed557610d3a9c86610e7e96610dcf85610ec89d611da7565b930204900303940290620f42400204900360011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b058181119082180218978a89038060ff1d908101189060016c0100000000000000000000000060e0610eb4858a611f0f565b930151620f42400393880915151601611cf8565b9103019690913880610d2c565b63202368086000526004601cfd5b999750610f03610efc60e0850151620f42400384611c66565b8686611ad1565b9773ffffffffffffffffffffffffffffffffffffffff8b1673ffffffffffffffffffffffffffffffffffffffff8a1610600014610f5a575073ffffffffffffffffffffffffffffffffffffffff819a5b9050610cf8565b9993918585610fac92610fa482879c969c038060ff1d90810118610f7e8186611f0f565b60016c0100000000000000000000000060e08c0151620f42400393880915151601611cf8565b900394611a59565b019573ffffffffffffffffffffffffffffffffffffffff848181166020860152886060860152836080860152610f53565b905073ffffffffffffffffffffffffffffffffffffffff819893989792971673ffffffffffffffffffffffffffffffffffffffff8616116111da575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff85161115611065575b50505090610d3a9185038060ff1d9081011890611f0f565b9196509291975085519260208701519360c08801519460e08901519182620f4240039260608b0151908260601b908985870283620f4240020484019204820392831115610ed55784868e95611100610d3a9d6110f86110f26111cd9c60a08c60806110e16110da6111a49e8585015190611f0f565b9b8a611f0f565b910151019c0151620f424002611a98565b84611f0f565b890398611da7565b93020401039160011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b0481811090821802189760e06111bf868d8c611a0b565b910151620f42400390611cf8565b910301969091388061104d565b9997506111fa6111f360e0850151620f42400384611c66565b8686611971565b9773ffffffffffffffffffffffffffffffffffffffff8b8116908a161061123b575073ffffffffffffffffffffffffffffffffffffffff819a5b9050611019565b999391611276906112636112538886899c969c611a0b565b60e0870151620f42400390611cf8565b90039285038060ff1d9081011886611f0f565b019573ffffffffffffffffffffffffffffffffffffffff848181166020860152836060860152886080860152611234565b7ff30dba9300000000000000000000000000000000000000000000000000000000815283838660081b010260020b6004526040816024818b5afa1561131c5760205190608051900318608051018a51018a5260208a01526080519260081b010203604087015260608601526080850152610ae0565b80fd5b505050505050505050505050610ca3565b9361137573ffffffffffffffffffffffffffffffffffffffff6020830151166fffffffffffffffffffffffffffffffff8351166060840151908960e086015193611b4a565b969192906060820151039660808201510197610c56565b50919450507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160010b6113c08183611f5d565b9390859085610b52565b506113d58185611f5d565b610b1d565b60018487890712878905030160020b60081d9160010b8260010b146000146114a6575b60018082988887818307129105030160ff161b8403165b801561148657808403167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1792831c63d76453e004161a1795610bde565b50905060019194500160010b61149c8183611f5d565b9390859085611414565b506114b18185611f5d565b6113fd565b6301ac05a56000526004601cfd5b7f30673a1b0000000000000000000000000000000000000000000000000000000060005260046000fd5b620d89e8915013386108d5565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618139150386108cd565b505050505090506000906000906000608052600090565b5080156108b4565b6010600060449260209582956014526034526fa9059cbb00000000000000000000000082525af13d15600160005114171615611581576000603452565b6390b8ec186000526004601cfd5b8060ff1d81810118620d89e881116118d15763ffffffff91600182167001fffcb933bd6fad37aa2d162d1a594001027001000000000000000000000000000000001891600281166118b5575b60048116611899575b6008811661187d575b60108116611861575b60208116611845575b60408116611829575b6080811661180d575b61010081166117f1575b61020081166117d5575b61040081166117b9575b610800811661179d575b6110008116611781575b6120008116611765575b6140008116611749575b618000811661172d575b620100008116611711575b6202000081166116f6575b6204000081166116db575b62080000166116c2575b60001261169b575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04611694565b6b048a170391f7dc42444e8fa290910260801c9061168c565b6d2216e584f5fa1ea926041bedfe9890920260801c91611682565b916e5d6af8dedb81196699c329225ee6040260801c91611677565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161166c565b916f31be135f97d08fd981231505542fcfa60260801c91611661565b916f70d869a156d2a1b890bb3df62baf32f70260801c91611657565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161164d565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91611643565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91611639565b916ff3392b0822b70005940c7a398e4b70f30260801c9161162f565b916ff987a7253ac413176f2b074cf7815e540260801c91611625565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c9161161b565b916ffe5dee046a99a2a811c461f1969c30530260801c91611611565b916fff2ea16466c96a3843ec78b326b528610260801c91611608565b916fff973b41fa98c081472e6896dfb254c00260801c916115ff565b916fffcb9843d60f6159c9db58835c9266440260801c916115f6565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916115ed565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916115e4565b916ffff97272373d413259a46990580e213a0260801c916115db565b6308c379a0600052602080526101546041526045601cfd5b9193918385116118fd575050505050600090565b82851061190e575050505050600190565b6119319361191f8661192893611f0f565b90860390611f0f565b93820390611e68565b1090565b9190820180921161194257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908115611a065760601b9180820281838204146119b9575b5082916119ad9173ffffffffffffffffffffffffffffffffffffffff9404611935565b80820615159104011690565b830183811061198a5791506119cf828285611e68565b92096119ef575b73ffffffffffffffffffffffffffffffffffffffff1690565b600101806119d6575b63ae47f7026000526004601cfd5b505090565b918282108284180280808518931893146103bc5760019060601b92828103611a4a73ffffffffffffffffffffffffffffffffffffffff83168287611e68565b94098284061715151691040190565b818118818310028082189392811891146103bc57611a94918373ffffffffffffffffffffffffffffffffffffffff831692039060601b611e68565b0490565b8115611aa2570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9073ffffffffffffffffffffffffffffffffffffffff90611b04938060a01c15600014611b3a5760601b04915b16611935565b740100000000000000000000000000000000000000008110156103bc5773ffffffffffffffffffffffffffffffffffffffff1690565b90611b4491611da7565b91611afe565b919094929473ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8416101594620f42400390611b908288611c66565b8615611c3457611ba1848684611a0b565b975b888210611bfd575050958691620f4240611bbd8284611cf8565b9209611beb575b945b15611be25791611bdf92038060ff1d9081011890611f0f565b90565b611bdf92611a59565b600191500180156119f8578590611bc4565b96975091505082158215176103bc578515611c2457611c1d908284611971565b8095611bc6565b611c2f908284611ad1565b611c1d565b8185038060ff1d9081011860016c01000000000000000000000000611c598388611f0f565b9287091515160197611ba3565b81810291620f424081838504148315170215611c87575050620f4240900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620f42409284098481108501900392099080620f424011156119f857828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c261390290565b90620f424082029181620f4240828504148215170215611d185750900490565b81620f42407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8184098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b908160601b91816c01000000000000000000000000828504148215170215611dcf5750900490565b816c010000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8184098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b81810292918115828504821417830215611e83575050900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff849284098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b818102917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff910981811082019003806c0100000000000000000000000011156119f85760a01b9060601c1790565b6024600080926020947f5339c29600000000000000000000000000000000000000000000000000000000835260010b6004525afa156103bc576000519056fea164736f6c634300081a000a000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe880000", + "nonce": "0x73", + "chainId": "0xa4b1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x35283a9517c1782c4217c5c0de3ac78f10f549f29f346b6f32969f354c37c095", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", + "function": "deploy(uint256,bytes32,bytes)", + "arguments": [ + "0", + "0xbeef63ae5a2102506e8a352a5bb32aa8b30b311269530b801afaa8bd16010080", + "0x60e0806040526040816152dd803803809161001a828561027d565b83398101031261020d5780516001600160a01b0381169182820361020d576001600160a01b039061004d906020016102b6565b1690811561026757600080546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36080526312a9293f60e21b8152602081600481855afa90811561021a57600091610226575b506001600160a01b031660a05260405163c45a015560e01b815290602090829060049082905afa90811561021a576000916101db575b5060c05260405161501290816102cb823960805181818161046c01528181610ef401528181611ef701528181611f50015281816121d0015281816123510152818161246b0152818161252f015281816125ce0152818161264101528181612682015281816128860152818161294201528181613dc001528181613e2701528181613ee8015261448f015260a05181818160320152818161106d01528181611bf701528181613a5f0152613b28015260c051818181610331015281816108fe01528181611dfb0152818161209e01528181612aec01528181613f44015261422a0152f35b90506020813d602011610212575b816101f66020938361027d565b8101031261020d57610207906102b6565b386100f8565b600080fd5b3d91506101e9565b6040513d6000823e3d90fd5b90506020813d60201161025f575b816102416020938361027d565b8101031261020d576004916102576020926102b6565b9150916100c2565b3d9150610234565b631e4fbdf760e01b600052600060045260246000fd5b601f909101601f19168101906001600160401b038211908210176102a057604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361020d5756fe60a0806040526004361015610084575b50361561001b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361005a57005b7f2f1ca35a0000000000000000000000000000000000000000000000000000000060005260046000fd5b60003560e01c9081630e24818e14611615575080631376f4c4146114bd5780631e5eb1d014611460578063218b625f1461140e578063219f5d171461133b5780632c45e5a01461126e5780632e5ad1e2146111ef578063322790961461117e57806343cfbe52146110915780634aa4a4fc1461102257806370f3c18014610fb4578063715018a614610f185780637f1e9ef614610ea95780638831645614610dc95780638ba1e27314610d2c5780638da5cb5b14610cda57806399642fb114610b3d578063a5fd1e3c14610a83578063af3ed5861461098c578063b429afeb14610922578063c45a0155146108b3578063c747e2b314610736578063f2fde38b14610644578063f3e17b87146103cc578063fa461e33146102b75763fc0e92cc146101af573861000f565b346102b2576102607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576101e836611717565b610164356101c43567ffffffffffffffff81116102b25761020d903690600401611836565b90610204359260ff841684036102b2576102ae94610245610254956102318461230b565b610244359061022435906101e4358661293f565b6101a4359161018435916127eb565b90604094929451948486957f811d4760f1a92875eb76dbd3dc2359544b2f6a000ba5b78784c0b105b3469bd0600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b0390f35b600080fd5b346102b25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25760043560443567ffffffffffffffff81116102b257610309903690600401611836565b5090604051606083600037606060002074ff00000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000176000526020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016906040528033036102b25760008213156103b8576103b692309035611bdd565b005b6103b6926024359250309060200135611bdd565b6103d5366119a1565b6103e093919361279c565b8083036102b25760005b8381106104295750610424907fb398a28fa151438e6fbfb63bb5dcf5aab5446ef8c4274546890ea394dc1993e29460405194859485611add565b0390a1005b61043c610437828686611a4d565b611abc565b9061045061044b828589611a4d565b611a8c565b156105f35773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169173ffffffffffffffffffffffffffffffffffffffff8116928084146105955760009182918260405160208101927f095ea7b30000000000000000000000000000000000000000000000000000000084526024820152816044820152604481526104f76064826116d6565b51925af13d156105ee573d67ffffffffffffffff81116105bf576040519061054760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601836116d6565b8152600060203d92013e5b6105955760019160005260036020526040600020827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555b016103ea565b7f78f200710000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610552565b73ffffffffffffffffffffffffffffffffffffffff60019216600052600360205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905561058f565b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25773ffffffffffffffffffffffffffffffffffffffff61069061167b565b61069861279c565b1680156107075773ffffffffffffffffffffffffffffffffffffffff600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257600061076a61279c565b670de0b6b3a76400006bffffffffffffffffffffffff610788611b92565b1610156108b05773ffffffffffffffffffffffffffffffffffffffff6107ac611a99565b16156108b05773ffffffffffffffffffffffffffffffffffffffff6107cf611a99565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155610801611b92565b73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff00000000000000000000000000000000000000006001549260a01b169116176001557f42200c2a55e71251cd849a86c7ece1a42ddabecbb489150a136f6c0d239c7a5c61086e611a99565b610876611b92565b6040805173ffffffffffffffffffffffffffffffffffffffff9390931683526bffffffffffffffffffffffff91909116602083015290a180f35b80fd5b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25773ffffffffffffffffffffffffffffffffffffffff61096e61167b565b166000526002602052602060ff604060002054166040519015158152f35b346102b2576101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576109c53661190a565b6101043567ffffffffffffffff81116102b2576109e6903690600401611836565b9091610144359160ff831683036102b2576102ae9382610a22610a2f945195610a0e8761230b565b61018435906101643590610124358961293f565b60e4359060c43590612a98565b906040949294519485947fc13e24d2b0a3bacd5d1a7c514125a1e27323abf7c86f6d36597f8752bbd7eed7600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102b2576101807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610abc36611864565b610ac46118dc565b90610124359060ff821682036102b25760409281610afe610b0b935194610aea8661230b565b61016435906101443590610104358861293f565b60c4359060a435906123c5565b908351927f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a282526020820152f35b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610b713661190a565b60c43567ffffffffffffffff81116102b257610c60610c26610c56846040610ba06102ae963690600401611836565b60e4949194359461010435610c2f610bb8875161258b565b9173ffffffffffffffffffffffffffffffffffffffff8351169989610c1d838d9c73ffffffffffffffffffffffffffffffffffffffff6020890151169e8f9d602081019d8e91825180610cc8575b50019e8f91825180610cb6575b5051915192611d54565b50508851611a11565b87528751611a11565b8652610c3a81611bad565b906080606082015160020b91015160020b865191885193611dc8565b909252528461267e565b9092919351926040519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b610cc290303385611bdd565b38610c13565b610cd490303387611bdd565b38610c06565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b346102b25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610d6361167b565b602435908160020b82036102b2576044358060020b81036102b25760809273ffffffffffffffffffffffffffffffffffffffff92610da8926084359260643592612c4d565b92919290845190604051948552602085015215156040840152166060820152f35b6101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576102ae610e4f610e0336611717565b610e4a73ffffffffffffffffffffffffffffffffffffffff82511673ffffffffffffffffffffffffffffffffffffffff60208401511660a08401519060c085015192612606565b61219d565b90604094929451948486957f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a84665600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610f4f61279c565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102b2576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610fed3661190a565b610104359067ffffffffffffffff82116102b257610a2f6110156102ae933690600401611836565b90835193610a228561230b565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b2576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576110ca36611864565b6110d26118eb565b906101043567ffffffffffffffff81116102b2576110f4903690600401611836565b6110ff9291926118fa565b90610164359360ff851685036102b257602095846111396111519651976111258961230b565b6101a435906101843590610144358b61293f565b60e4359160c4359161114b815161258b565b90613e4f565b604051917f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a28152f35b346102b2576101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576111b736611717565b6101c4356101643567ffffffffffffffff82116102b2576102ae926111e3610254933690600401611836565b9290916102458261230b565b346102b2576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25761122836611864565b6112306118eb565b906101043567ffffffffffffffff81116102b257602092611258611151923690600401611836565b906112616118fa565b928551956111398761230b565b611277366119a1565b929061128161279c565b8383036102b25760005b8381106112c557507f2077016b05a05d3f12f6d9a8ca3667fbecaf29eba7083f7e2d1d70dc3709f635936104249160405194859485611add565b806112d661044b6001938886611a4d565b73ffffffffffffffffffffffffffffffffffffffff6112f9610437848989611a4d565b16600052600260205260406000209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00835416911515161790550161128b565b60c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576102ae6113713661190a565b6113ba8151916113808361258b565b73ffffffffffffffffffffffffffffffffffffffff60208183511692015116916113b560208201516040830151908585612606565b61267e565b906040949294519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102b2576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257604061144936611864565b610b0b6114546118dc565b825192610afe8461230b565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576001546040805173ffffffffffffffffffffffffffffffffffffffff8316815260a09290921c602083015290f35b6101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576114f136611717565b6101643567ffffffffffffffff81116102b2576102ae91611519610e4f923690600401611836565b906115b361018435926101a4359261153086611bad565b61159660a08801958651806115ea575b50610c2660c08a01988951806115bc575b50610c1d838273ffffffffffffffffffffffffffffffffffffffff8851168d8d73ffffffffffffffffffffffffffffffffffffffff60208c0151169051915192611d54565b90818752606088015160020b608089015160020b90875192611dc8565b9092525261219d565b6115e49073ffffffffffffffffffffffffffffffffffffffff60208801511630903390611bdd565b8d611551565b61160f9073ffffffffffffffffffffffffffffffffffffffff85511630903390611bdd565b8b611540565b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25760209073ffffffffffffffffffffffffffffffffffffffff61166461167b565b166000526003825260ff6040600020541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102b257565b60a0810190811067ffffffffffffffff8211176105bf57604052565b60c0810190811067ffffffffffffffff8211176105bf57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105bf57604052565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6101609101126102b25760405190610160820182811067ffffffffffffffff8211176105bf576040528160043573ffffffffffffffffffffffffffffffffffffffff811681036102b257815260243573ffffffffffffffffffffffffffffffffffffffff811681036102b257602082015260443562ffffff811681036102b25760408201526064358060020b81036102b25760608201526084358060020b81036102b257608082015260a43560a082015260c43560c082015260e43560e0820152610104356101008201526101243573ffffffffffffffffffffffffffffffffffffffff811681036102b25761012082015261014061014435910152565b9181601f840112156102b25782359167ffffffffffffffff83116102b257602083818601950101116102b257565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a09101126102b2576040519061189b8261169e565b8160043581526024356fffffffffffffffffffffffffffffffff811681036102b2576020820152604435604082015260643560608201526080608435910152565b60e4359081151582036102b257565b60a4359081151582036102b257565b610124359081151582036102b257565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c09101126102b25760405190611941826116ba565b6004358252602435602083015260443560408301526064356060830152608435608083015260a43560a0830152565b9181601f840112156102b25782359167ffffffffffffffff83116102b2576020808501948460051b0101116102b257565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102b25760043567ffffffffffffffff81116102b257816119ea91600401611970565b929092916024359067ffffffffffffffff82116102b257611a0d91600401611970565b9091565b91908203918211611a1e57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611a5d5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3580151581036102b25790565b60043573ffffffffffffffffffffffffffffffffffffffff811681036102b25790565b3573ffffffffffffffffffffffffffffffffffffffff811681036102b25790565b939293826040820160408352526060810191926000905b808210611b42575050808203602091820152838252019291600091505b808210611b1e5750505090565b9091928335908115158092036102b257602081600193829352019401920190611b11565b90919284359073ffffffffffffffffffffffffffffffffffffffff821682036102b25773ffffffffffffffffffffffffffffffffffffffff91909116815260209485019401929160010190611af4565b6024356bffffffffffffffffffffffff811681036102b25790565b6040516060810181811067ffffffffffffffff8211176105bf576000916040918252828152826020820152015290565b92919073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168073ffffffffffffffffffffffffffffffffffffffff86161480611d4b575b611cbf575b5073ffffffffffffffffffffffffffffffffffffffff81163003611c655750611c63926138c0565b565b601c60006020949560649382956040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615611cb1576000606052604052565b637939f4246000526004601cfd5b348403611d215760006004818681947fd0e30db00000000000000000000000000000000000000000000000000000000083525af1156102b2573073ffffffffffffffffffffffffffffffffffffffff831614611d1b5738611c3b565b50505050565b7fa11a990f0000000000000000000000000000000000000000000000000000000060005260046000fd5b50341515611c36565b95949193909295611d65858361390b565b611d6f878461390b565b73ffffffffffffffffffffffffffffffffffffffff600154169180611db3575b505081611d9e575b5050509190565b81611dab93960395613a48565b388080611d97565b8281611dc193970396613a48565b3880611d8f565b96909590949293928782612060578492508591509273ffffffffffffffffffffffffffffffffffffffff611e86611e8e957f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b169788612c4d565b50506080516000959092919081611f7b575b50600003918286180280921801931801925b83611f1d575b8280611ec2575050565b73ffffffffffffffffffffffffffffffffffffffff6020611c639301511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b611f768473ffffffffffffffffffffffffffffffffffffffff83511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b611eb8565b95507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08701956040600088519260608a5282517f128acb080000000000000000000000000000000000000000000000000000000081523060048201528760248201528560448201528773fffd8963efd1fc6a506488495d951d53639afb810273fffd8963efd1fc6a506488495d951d5263988d2518606482015260a060848201528260c48c518d60208201908160a487019160045afa5001925af160403d141615612056576000518481602051180218600003965238611ea0565b3d6000803e3d6000fd5b92909396612147929561214e979873ffffffffffffffffffffffffffffffffffffffff808061213c61213661212f8361212961209b8f613bbe565b9d7f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b166144cd565b5097614509565b97614509565b169516931691614863565b9086614a94565b5061217173ffffffffffffffffffffffffffffffffffffffff8351163090614b26565b906121963073ffffffffffffffffffffffffffffffffffffffff602086015116614b26565b9192611eb2565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820180516388316456825290937f000000000000000000000000000000000000000000000000000000000000000093608060006101647ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc840182895af115612306576000519460205194604051946060519852604052600060605286938095969773ffffffffffffffffffffffffffffffffffffffff610120850151169160a08501519060c086015191848183106122c1575b505050808210612286575b5050505050565b6122b073ffffffffffffffffffffffffffffffffffffffff8060206122b798015116951685613c06565b0391613a48565b388080808061227f565b6122fe9273ffffffffffffffffffffffffffffffffffffffff895116926122b073ffffffffffffffffffffffffffffffffffffffff8a1685613c06565b388084612274565b3d6000fd5b33600052600260205260ff604060002054166123c2577f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa156120565773ffffffffffffffffffffffffffffffffffffffff60005116330361239857565b7fc19f17a90000000000000000000000000000000000000000000000000000000060005260046000fd5b50565b909391926123d3825161258b565b9061243460208401956fffffffffffffffffffffffffffffffff875116612529575b84519773ffffffffffffffffffffffffffffffffffffffff85511698602086019973ffffffffffffffffffffffffffffffffffffffff8b511691613d55565b908196819886517f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa15612056576fffffffffffffffffffffffffffffffff9460a0948694600051908381612500575b5050816124d7575b50505050511692015116146124cd5750565b611c639051613df7565b73ffffffffffffffffffffffffffffffffffffffff6124f7945116613b0d565b388080806124bb565b612522918373ffffffffffffffffffffffffffffffffffffffff8d5116613b0d565b38836124b3565b612553857f0000000000000000000000000000000000000000000000000000000000000000613ceb565b50506123f5565b60405190612567826116ba565b600060a0838281528260208201528260408201528260608201528260808201520152565b61259361255a565b5061259c61255a565b907f99fbab880000000000000000000000000000000000000000000000000000000060005260045261010081602460007f00000000000000000000000000000000000000000000000000000000000000005afa1561260257806101006040920182520190565b3d90fd5b90929180612667575b50508061261a575050565b611c639161262a82303384611bdd565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b6126779161262a82303384611bdd565b388061260f565b90927f0000000000000000000000000000000000000000000000000000000000000000604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840180519063219f5d1781526060600060c47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc890182885af1156120565752600051946020516040519160405281958197986040602083015192015192828110612770575b50505080821061273b5750505050565b61275e73ffffffffffffffffffffffffffffffffffffffff612767951684613c06565b03903390613a48565b38808080611d1b565b6127949261275e73ffffffffffffffffffffffffffffffffffffffff891684613c06565b38808061272b565b73ffffffffffffffffffffffffffffffffffffffff6000541633036127bd57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b93909260006024816128b46020949996996101408a01519a604051809c6128118261169e565b8b825260808983019287845287604082015287606082015201526128348b61258b565b9073ffffffffffffffffffffffffffffffffffffffff825116906fffffffffffffffffffffffffffffffff60a073ffffffffffffffffffffffffffffffffffffffff8c860151169401511690526128ac7f00000000000000000000000000000000000000000000000000000000000000009e8f613ceb565b50508b613d55565b9990977f6352211e0000000000000000000000000000000000000000000000000000000083526004525afa15612056576129399461292a9373ffffffffffffffffffffffffffffffffffffffff6000511661012087015261291486611bad565b606087015160020b608088015160020b91611dc8565b60c083015260a082015261219d565b90919293565b907f00000000000000000000000000000000000000000000000000000000000000007f081812fc000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa156120565760005173ffffffffffffffffffffffffffffffffffffffff163014612a90577f6352211e000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa15612056576000517fe985e9c5000000000000000000000000000000000000000000000000000000006000526004523060245260206000604481845afa15612056576000516000602452612a9057600095869560c4958794604051967f7ac2ff7b000000000000000000000000000000000000000000000000000000008852306004890152602488015260448701526064860152608485015260a48401525af11561205657565b505050505050565b9273ffffffffffffffffffffffffffffffffffffffff9291612bf6612c0b968594938594612ac6895161258b565b94612ad086611bad565b6040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606083206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b209152612be490612b65908a9073ffffffffffffffffffffffffffffffffffffffff16612129565b50936060890193612b79855160020b614509565b9560808b01968b6fffffffffffffffffffffffffffffffff60a0612ba08b5160020b614509565b9201511691808210828218028091189118928e81168f8316811115600014612c1257505091612bce92614b62565b505b8d518b8b511660208c019e8f511691613d55565b9390925160020b905160020b91611dc8565b6040870152602086015251169151169161267e565b9192909190565b8f85161015600014612c3f5790818f9284612c3996612c3092614b62565b50031690614f78565b50612bd0565b50612c3992038d1690614f78565b929094939460006080526000958215806138b8575b6138a1578360020b8260020b9080821291821592613877575b50811561386a575b5061384057843b1561383257604051610120810181811067ffffffffffffffff8211176105bf576040526000815260006020820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e08201526000610100820152612cf3866144cd565b969093849760408401527f1a6865020000000000000000000000000000000000000000000000000000000060005260206000600481855afa156102b257600051907fddca3f430000000000000000000000000000000000000000000000000000000060005260206000600481865afa156102b25762ffffff60005116907fd0c93a7c0000000000000000000000000000000000000000000000000000000060005260206000600481875afa156102b257612dd992612dd39260005191875288602088015289606088015287608088015260e0870152610100860152614509565b96614509565b938660a08401528460c0840152612e3573ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff891673ffffffffffffffffffffffffffffffffffffffff8416878a614863565b608052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000906000905b600084604081015160020b9461010082015160020b946080516000146137565783868807128688050360081d9160010b8260010b14600014613746575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260ff8399898881830712910503161b01165b8015613708577f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a17955b948196612f7082828560081b0102614509565b94608051156000146136ac57612fc073ffffffffffffffffffffffffffffffffffffffff6020870151166fffffffffffffffffffffffffffffffff8751166080880151908960e08a015193614bb3565b92919690969260608201510196608082015103975b73ffffffffffffffffffffffffffffffffffffffff8085169116810361369b576130109060a083015160c06080511515940151918b8b614863565b15151461362657505050505050505050505b8051926020820151926060830151966080840151926080511560001461335c575073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff861610613262575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851610156130bf575b505050906130b991856149a3565b91030191565b9196509291975085519286602081015160c08201519560e08301519081620f424003908060601b848104606087015101906130fe60a088015183614f78565b9a6131176131118689620f4240026149e2565b85614f78565b9561312e60a060808b01519889019a015186614f78565b890396871115613254576130b99c866131fd9661314e856132479d614e10565b930204900303940290620f42400204900360011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b058181119082180218978a89038060ff1d908101189060016c0100000000000000000000000060e0613233858a614f78565b930151620f42400393880915151601614d61565b91030196909138806130ab565b63202368086000526004601cfd5b99975061328261327b60e0850151620f42400384614ccf565b8686614a1b565b9773ffffffffffffffffffffffffffffffffffffffff8b1673ffffffffffffffffffffffffffffffffffffffff8a16106000146132d9575073ffffffffffffffffffffffffffffffffffffffff819a5b9050613077565b999391858561332b9261332382879c969c038060ff1d908101186132fd8186614f78565b60016c0100000000000000000000000060e08c0151620f42400393880915151601614d61565b9003946149a3565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528860608601528360808601526132d2565b905073ffffffffffffffffffffffffffffffffffffffff819893989792971673ffffffffffffffffffffffffffffffffffffffff861611613559575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851611156133e4575b505050906130b99185038060ff1d9081011890614f78565b9196509291975085519260208701519360c08801519460e08901519182620f4240039260608b0151908260601b908985870283620f42400204840192048203928311156132545784868e9561347f6130b99d61347761347161354c9c60a08c60806134606134596135239e8585015190614f78565b9b8a614f78565b910151019c0151620f4240026149e2565b84614f78565b890398614e10565b93020401039160011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b0481811090821802189760e061353e868d8c614955565b910151620f42400390614d61565b91030196909138806133cc565b99975061357961357260e0850151620f42400384614ccf565b86866148bc565b9773ffffffffffffffffffffffffffffffffffffffff8b8116908a16106135ba575073ffffffffffffffffffffffffffffffffffffffff819a5b9050613398565b9993916135f5906135e26135d28886899c969c614955565b60e0870151620f42400390614d61565b90039285038060ff1d9081011886614f78565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528360608601528860808601526135b3565b7ff30dba9300000000000000000000000000000000000000000000000000000000815283838660081b010260020b6004526040816024818b5afa156108b05760205190608051900318608051018a51018a5260208a01526080519260081b010203604087015260608601526080850152612e5f565b505050505050505050505050613022565b936136f173ffffffffffffffffffffffffffffffffffffffff6020830151166fffffffffffffffffffffffffffffffff8351166060840151908960e086015193614bb3565b969192906060820151039660808201510197612fd5565b50919450507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160010b61373c8183614fc6565b9390859085612ed1565b506137518185614fc6565b612e9c565b60018487890712878905030160020b60081d9160010b8260010b14600014613822575b60018082988887818307129105030160ff161b8403165b801561380257808403167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1792831c63d76453e004161a1795612f5d565b50905060019194500160010b6138188183614fc6565b9390859085613790565b5061382d8185614fc6565b613779565b6301ac05a56000526004601cfd5b7f30673a1b0000000000000000000000000000000000000000000000000000000060005260046000fd5b620d89e891501338612c83565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761813915038612c7b565b505050505090506000906000906000608052600090565b508015612c62565b6010600060449260209582956014526034526fa9059cbb00000000000000000000000082525af13d156001600051141716156138fd576000603452565b6390b8ec186000526004601cfd5b90818110613a1e578061391c575050565b670de0b6b3a7640000820291818115670de0b6b3a76400008386041417021561397a575090045b60015460a01c1061395057565b7feab9763d0000000000000000000000000000000000000000000000000000000060005260046000fd5b81670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a10578390048060030260021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600184848303049480600003040192119003021702613943565b63ae47f7026000526004601cfd5b7f5945ea560000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908173ffffffffffffffffffffffffffffffffffffffff82161480613b05575b15613af9575060006024818080947f2e1a7d4d000000000000000000000000000000000000000000000000000000008252876004525af1156102b257600080809338935af115613aeb57565b63b12d13eb6000526004601cfd5b611c63939291506138c0565b506001613a9f565b9290919273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918273ffffffffffffffffffffffffffffffffffffffff8316149081613bb6575b5015613af9575060006024818080947f2e1a7d4d000000000000000000000000000000000000000000000000000000008252876004525af1156102b257600080809338935af115613aeb57565b905038613b69565b3560601c9081600052600360205260ff6040600020541615613bdc57565b7fe1cf4d030000000000000000000000000000000000000000000000000000000060005260046000fd5b6044601060008093602095601452816034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b633e3f8f736000526004601cfd5b60446010600080936020956014527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b6010600060449260209582956014526034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b6040600060a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0850193827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc865197630c49ccbe885201915af11561205657526000519060205190565b60006084604092969594968351907ffc6f786500000000000000000000000000000000000000000000000000000000825260048201523060248201526fffffffffffffffffffffffffffffffff60448201526fffffffffffffffffffffffffffffffff6064820152827f00000000000000000000000000000000000000000000000000000000000000005af11561205657611a0d936000519060205192611d54565b7f42966c6800000000000000000000000000000000000000000000000000000000600052600452600080602481807f00000000000000000000000000000000000000000000000000000000000000005af11561205657565b9392959473ffffffffffffffffffffffffffffffffffffffff98979195836000146144ba57613eb660608701956000875197525b60208801976fffffffffffffffffffffffffffffffff895116614489575b51998c8a511660208b019d8e5116908c613d55565b927f6352211e0000000000000000000000000000000000000000000000000000000060005289600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa156120565760005195156141f757613f2089611bad565b92806141375750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff166000928261406b575b50505073ffffffffffffffffffffffffffffffffffffffff9984613fe4938593905b019b8c925116613b0d565b61400673ffffffffffffffffffffffffffffffffffffffff8651163090614b26565b80614042575b5050505b8510613a1e5760a06fffffffffffffffffffffffffffffffff8092511692015116146140395750565b611c6390613df7565b6140639273ffffffffffffffffffffffffffffffffffffffff875116613b0d565b38808061400c565b60409193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000919d939d019384519d606086528351907f128acb080000000000000000000000000000000000000000000000000000000082523060048301526001602483015260448201526401000276a4606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c488516020810160a48601818c60045afa500193165af160403d141615612056576020519a909152986000038984613fe4613fb7565b9092915061414483613bbe565b9060008080601473ffffffffffffffffffffffffffffffffffffffff80602089015116975116946141753089614b26565b986141808888613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af1156141ef57509385936141e873ffffffffffffffffffffffffffffffffffffffff9e946141e18a95613fe499613c06565b3090614b26565b0390613fd9565b3d81803e3d90fd5b614206899c969c949294611bad565b92806143f65750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff169060009281614323575b505050905b01976142c8828a8373ffffffffffffffffffffffffffffffffffffffff8a5116613b0d565b6142ea73ffffffffffffffffffffffffffffffffffffffff8451163090614b26565b90816142fa575b50505050614010565b73ffffffffffffffffffffffffffffffffffffffff61431a945116613b0d565b388080806142f1565b6040919293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000910193845193606086528351907f128acb08000000000000000000000000000000000000000000000000000000008252306004830152836024830152604482015273fffd8963efd1fc6a506488495d951d5263988d25606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c488516020810160a48601818c60045afa500193165af160403d14161561205657600051600003915238808061429e565b91509161440283613bbe565b9060008080601473ffffffffffffffffffffffffffffffffffffffff80602087015116955116966144333089614b26565b9861443e8888613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af1156141ef575061448292916141e191613c06565b03906142a3565b6144b3817f0000000000000000000000000000000000000000000000000000000000000000613ceb565b5050613ea1565b613eb66040870195600087519752613e83565b60006004816040937f3850c7bd0000000000000000000000000000000000000000000000000000000082525afa156102b2576000519060205190565b8060ff1d81810118620d89e8811161484b5763ffffffff91600182167001fffcb933bd6fad37aa2d162d1a5940010270010000000000000000000000000000000018916002811661482f575b60048116614813575b600881166147f7575b601081166147db575b602081166147bf575b604081166147a3575b60808116614787575b610100811661476b575b610200811661474f575b6104008116614733575b6108008116614717575b61100081166146fb575b61200081166146df575b61400081166146c3575b61800081166146a7575b62010000811661468b575b620200008116614670575b620400008116614655575b620800001661463c575b600012614615575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0461460e565b6b048a170391f7dc42444e8fa290910260801c90614606565b6d2216e584f5fa1ea926041bedfe9890920260801c916145fc565b916e5d6af8dedb81196699c329225ee6040260801c916145f1565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c916145e6565b916f31be135f97d08fd981231505542fcfa60260801c916145db565b916f70d869a156d2a1b890bb3df62baf32f70260801c916145d1565b916fa9f746462d870fdf8a65dc1f90e061e50260801c916145c7565b916fd097f3bdfd2022b8845ad8f792aa58250260801c916145bd565b916fe7159475a2c29b7443b29c7fa6e889d90260801c916145b3565b916ff3392b0822b70005940c7a398e4b70f30260801c916145a9565b916ff987a7253ac413176f2b074cf7815e540260801c9161459f565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91614595565b916ffe5dee046a99a2a811c461f1969c30530260801c9161458b565b916fff2ea16466c96a3843ec78b326b528610260801c91614582565b916fff973b41fa98c081472e6896dfb254c00260801c91614579565b916fffcb9843d60f6159c9db58835c9266440260801c91614570565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91614567565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c9161455e565b916ffff97272373d413259a46990580e213a0260801c91614555565b6308c379a0600052602080526101546041526045601cfd5b919391838511614877575050505050600090565b828510614888575050505050600190565b6148ab93614899866148a293614f78565b90860390614f78565b93820390614ed1565b1090565b91908201809211611a1e57565b919081156149505760601b918082028183820414614904575b5082916148f89173ffffffffffffffffffffffffffffffffffffffff94046148af565b80820615159104011690565b83018381106148d557915061491a828285614ed1565b920961493a575b73ffffffffffffffffffffffffffffffffffffffff1690565b600101806149215763ae47f7026000526004601cfd5b505090565b918282108284180280808518931893146102b25760019060601b9282810361499473ffffffffffffffffffffffffffffffffffffffff83168287614ed1565b94098284061715151691040190565b818118818310028082189392811891146102b2576149de918373ffffffffffffffffffffffffffffffffffffffff831692039060601b614ed1565b0490565b81156149ec570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9073ffffffffffffffffffffffffffffffffffffffff90614a4e938060a01c15600014614a845760601b04915b166148af565b740100000000000000000000000000000000000000008110156102b25773ffffffffffffffffffffffffffffffffffffffff1690565b90614a8e91614e10565b91614a48565b6000601473ffffffffffffffffffffffffffffffffffffffff829397959496978180602083015116915116958682180280911895181694614ad53087614b26565b97614ae08887613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af11561205657614b22926141e191613c06565b0390565b6024600080926020947f70a082310000000000000000000000000000000000000000000000000000000083526004525afa156102b25760005190565b9173ffffffffffffffffffffffffffffffffffffffff91614bac917bffffffffffffffffffffffffffffffff00000000000000000000000084868185169403169160601b16614ed1565b9116900490565b919094929473ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8416101594620f42400390614bf98288614ccf565b8615614c9d57614c0a848684614955565b975b888210614c66575050958691620f4240614c268284614d61565b9209614c54575b945b15614c4b5791614c4892038060ff1d9081011890614f78565b90565b614c48926149a3565b60019150018015613a10578590614c2d565b96975091505082158215176102b2578515614c8d57614c869082846148bc565b8095614c2f565b614c98908284614a1b565b614c86565b8185038060ff1d9081011860016c01000000000000000000000000614cc28388614f78565b9287091515160197614c0c565b81810291620f424081838504148315170215614cf0575050620f4240900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620f42409284098481108501900392099080620f42401115613a1057828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c261390290565b90620f424082029181620f4240828504148215170215614d815750900490565b81620f42407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b908160601b91816c01000000000000000000000000828504148215170215614e385750900490565b816c010000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b81810292918115828504821417830215614eec575050900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84928409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b818102917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff910981811082019003806c010000000000000000000000001115613a105760a01b9060601c1790565b6024600080926020947f5339c29600000000000000000000000000000000000000000000000000000000835260010b6004525afa156102b2576000519056fea164736f6c634300081a000a000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112" + ], + "transaction": { + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", + "gas": "0x8b0489", + "value": "0x0", + "input": "0x66cfa0570000000000000000000000000000000000000000000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b311269530b801afaa8bd160100800000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000531d60e0806040526040816152dd803803809161001a828561027d565b83398101031261020d5780516001600160a01b0381169182820361020d576001600160a01b039061004d906020016102b6565b1690811561026757600080546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36080526312a9293f60e21b8152602081600481855afa90811561021a57600091610226575b506001600160a01b031660a05260405163c45a015560e01b815290602090829060049082905afa90811561021a576000916101db575b5060c05260405161501290816102cb823960805181818161046c01528181610ef401528181611ef701528181611f50015281816121d0015281816123510152818161246b0152818161252f015281816125ce0152818161264101528181612682015281816128860152818161294201528181613dc001528181613e2701528181613ee8015261448f015260a05181818160320152818161106d01528181611bf701528181613a5f0152613b28015260c051818181610331015281816108fe01528181611dfb0152818161209e01528181612aec01528181613f44015261422a0152f35b90506020813d602011610212575b816101f66020938361027d565b8101031261020d57610207906102b6565b386100f8565b600080fd5b3d91506101e9565b6040513d6000823e3d90fd5b90506020813d60201161025f575b816102416020938361027d565b8101031261020d576004916102576020926102b6565b9150916100c2565b3d9150610234565b631e4fbdf760e01b600052600060045260246000fd5b601f909101601f19168101906001600160401b038211908210176102a057604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361020d5756fe60a0806040526004361015610084575b50361561001b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361005a57005b7f2f1ca35a0000000000000000000000000000000000000000000000000000000060005260046000fd5b60003560e01c9081630e24818e14611615575080631376f4c4146114bd5780631e5eb1d014611460578063218b625f1461140e578063219f5d171461133b5780632c45e5a01461126e5780632e5ad1e2146111ef578063322790961461117e57806343cfbe52146110915780634aa4a4fc1461102257806370f3c18014610fb4578063715018a614610f185780637f1e9ef614610ea95780638831645614610dc95780638ba1e27314610d2c5780638da5cb5b14610cda57806399642fb114610b3d578063a5fd1e3c14610a83578063af3ed5861461098c578063b429afeb14610922578063c45a0155146108b3578063c747e2b314610736578063f2fde38b14610644578063f3e17b87146103cc578063fa461e33146102b75763fc0e92cc146101af573861000f565b346102b2576102607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576101e836611717565b610164356101c43567ffffffffffffffff81116102b25761020d903690600401611836565b90610204359260ff841684036102b2576102ae94610245610254956102318461230b565b610244359061022435906101e4358661293f565b6101a4359161018435916127eb565b90604094929451948486957f811d4760f1a92875eb76dbd3dc2359544b2f6a000ba5b78784c0b105b3469bd0600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b0390f35b600080fd5b346102b25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25760043560443567ffffffffffffffff81116102b257610309903690600401611836565b5090604051606083600037606060002074ff00000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000176000526020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016906040528033036102b25760008213156103b8576103b692309035611bdd565b005b6103b6926024359250309060200135611bdd565b6103d5366119a1565b6103e093919361279c565b8083036102b25760005b8381106104295750610424907fb398a28fa151438e6fbfb63bb5dcf5aab5446ef8c4274546890ea394dc1993e29460405194859485611add565b0390a1005b61043c610437828686611a4d565b611abc565b9061045061044b828589611a4d565b611a8c565b156105f35773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169173ffffffffffffffffffffffffffffffffffffffff8116928084146105955760009182918260405160208101927f095ea7b30000000000000000000000000000000000000000000000000000000084526024820152816044820152604481526104f76064826116d6565b51925af13d156105ee573d67ffffffffffffffff81116105bf576040519061054760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601836116d6565b8152600060203d92013e5b6105955760019160005260036020526040600020827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555b016103ea565b7f78f200710000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610552565b73ffffffffffffffffffffffffffffffffffffffff60019216600052600360205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905561058f565b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25773ffffffffffffffffffffffffffffffffffffffff61069061167b565b61069861279c565b1680156107075773ffffffffffffffffffffffffffffffffffffffff600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257600061076a61279c565b670de0b6b3a76400006bffffffffffffffffffffffff610788611b92565b1610156108b05773ffffffffffffffffffffffffffffffffffffffff6107ac611a99565b16156108b05773ffffffffffffffffffffffffffffffffffffffff6107cf611a99565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155610801611b92565b73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff00000000000000000000000000000000000000006001549260a01b169116176001557f42200c2a55e71251cd849a86c7ece1a42ddabecbb489150a136f6c0d239c7a5c61086e611a99565b610876611b92565b6040805173ffffffffffffffffffffffffffffffffffffffff9390931683526bffffffffffffffffffffffff91909116602083015290a180f35b80fd5b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25773ffffffffffffffffffffffffffffffffffffffff61096e61167b565b166000526002602052602060ff604060002054166040519015158152f35b346102b2576101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576109c53661190a565b6101043567ffffffffffffffff81116102b2576109e6903690600401611836565b9091610144359160ff831683036102b2576102ae9382610a22610a2f945195610a0e8761230b565b61018435906101643590610124358961293f565b60e4359060c43590612a98565b906040949294519485947fc13e24d2b0a3bacd5d1a7c514125a1e27323abf7c86f6d36597f8752bbd7eed7600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102b2576101807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610abc36611864565b610ac46118dc565b90610124359060ff821682036102b25760409281610afe610b0b935194610aea8661230b565b61016435906101443590610104358861293f565b60c4359060a435906123c5565b908351927f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a282526020820152f35b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610b713661190a565b60c43567ffffffffffffffff81116102b257610c60610c26610c56846040610ba06102ae963690600401611836565b60e4949194359461010435610c2f610bb8875161258b565b9173ffffffffffffffffffffffffffffffffffffffff8351169989610c1d838d9c73ffffffffffffffffffffffffffffffffffffffff6020890151169e8f9d602081019d8e91825180610cc8575b50019e8f91825180610cb6575b5051915192611d54565b50508851611a11565b87528751611a11565b8652610c3a81611bad565b906080606082015160020b91015160020b865191885193611dc8565b909252528461267e565b9092919351926040519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b610cc290303385611bdd565b38610c13565b610cd490303387611bdd565b38610c06565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b346102b25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610d6361167b565b602435908160020b82036102b2576044358060020b81036102b25760809273ffffffffffffffffffffffffffffffffffffffff92610da8926084359260643592612c4d565b92919290845190604051948552602085015215156040840152166060820152f35b6101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576102ae610e4f610e0336611717565b610e4a73ffffffffffffffffffffffffffffffffffffffff82511673ffffffffffffffffffffffffffffffffffffffff60208401511660a08401519060c085015192612606565b61219d565b90604094929451948486957f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a84665600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610f4f61279c565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102b2576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610fed3661190a565b610104359067ffffffffffffffff82116102b257610a2f6110156102ae933690600401611836565b90835193610a228561230b565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b2576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576110ca36611864565b6110d26118eb565b906101043567ffffffffffffffff81116102b2576110f4903690600401611836565b6110ff9291926118fa565b90610164359360ff851685036102b257602095846111396111519651976111258961230b565b6101a435906101843590610144358b61293f565b60e4359160c4359161114b815161258b565b90613e4f565b604051917f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a28152f35b346102b2576101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576111b736611717565b6101c4356101643567ffffffffffffffff82116102b2576102ae926111e3610254933690600401611836565b9290916102458261230b565b346102b2576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25761122836611864565b6112306118eb565b906101043567ffffffffffffffff81116102b257602092611258611151923690600401611836565b906112616118fa565b928551956111398761230b565b611277366119a1565b929061128161279c565b8383036102b25760005b8381106112c557507f2077016b05a05d3f12f6d9a8ca3667fbecaf29eba7083f7e2d1d70dc3709f635936104249160405194859485611add565b806112d661044b6001938886611a4d565b73ffffffffffffffffffffffffffffffffffffffff6112f9610437848989611a4d565b16600052600260205260406000209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00835416911515161790550161128b565b60c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576102ae6113713661190a565b6113ba8151916113808361258b565b73ffffffffffffffffffffffffffffffffffffffff60208183511692015116916113b560208201516040830151908585612606565b61267e565b906040949294519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102b2576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257604061144936611864565b610b0b6114546118dc565b825192610afe8461230b565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576001546040805173ffffffffffffffffffffffffffffffffffffffff8316815260a09290921c602083015290f35b6101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576114f136611717565b6101643567ffffffffffffffff81116102b2576102ae91611519610e4f923690600401611836565b906115b361018435926101a4359261153086611bad565b61159660a08801958651806115ea575b50610c2660c08a01988951806115bc575b50610c1d838273ffffffffffffffffffffffffffffffffffffffff8851168d8d73ffffffffffffffffffffffffffffffffffffffff60208c0151169051915192611d54565b90818752606088015160020b608089015160020b90875192611dc8565b9092525261219d565b6115e49073ffffffffffffffffffffffffffffffffffffffff60208801511630903390611bdd565b8d611551565b61160f9073ffffffffffffffffffffffffffffffffffffffff85511630903390611bdd565b8b611540565b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25760209073ffffffffffffffffffffffffffffffffffffffff61166461167b565b166000526003825260ff6040600020541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102b257565b60a0810190811067ffffffffffffffff8211176105bf57604052565b60c0810190811067ffffffffffffffff8211176105bf57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105bf57604052565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6101609101126102b25760405190610160820182811067ffffffffffffffff8211176105bf576040528160043573ffffffffffffffffffffffffffffffffffffffff811681036102b257815260243573ffffffffffffffffffffffffffffffffffffffff811681036102b257602082015260443562ffffff811681036102b25760408201526064358060020b81036102b25760608201526084358060020b81036102b257608082015260a43560a082015260c43560c082015260e43560e0820152610104356101008201526101243573ffffffffffffffffffffffffffffffffffffffff811681036102b25761012082015261014061014435910152565b9181601f840112156102b25782359167ffffffffffffffff83116102b257602083818601950101116102b257565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a09101126102b2576040519061189b8261169e565b8160043581526024356fffffffffffffffffffffffffffffffff811681036102b2576020820152604435604082015260643560608201526080608435910152565b60e4359081151582036102b257565b60a4359081151582036102b257565b610124359081151582036102b257565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c09101126102b25760405190611941826116ba565b6004358252602435602083015260443560408301526064356060830152608435608083015260a43560a0830152565b9181601f840112156102b25782359167ffffffffffffffff83116102b2576020808501948460051b0101116102b257565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102b25760043567ffffffffffffffff81116102b257816119ea91600401611970565b929092916024359067ffffffffffffffff82116102b257611a0d91600401611970565b9091565b91908203918211611a1e57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611a5d5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3580151581036102b25790565b60043573ffffffffffffffffffffffffffffffffffffffff811681036102b25790565b3573ffffffffffffffffffffffffffffffffffffffff811681036102b25790565b939293826040820160408352526060810191926000905b808210611b42575050808203602091820152838252019291600091505b808210611b1e5750505090565b9091928335908115158092036102b257602081600193829352019401920190611b11565b90919284359073ffffffffffffffffffffffffffffffffffffffff821682036102b25773ffffffffffffffffffffffffffffffffffffffff91909116815260209485019401929160010190611af4565b6024356bffffffffffffffffffffffff811681036102b25790565b6040516060810181811067ffffffffffffffff8211176105bf576000916040918252828152826020820152015290565b92919073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168073ffffffffffffffffffffffffffffffffffffffff86161480611d4b575b611cbf575b5073ffffffffffffffffffffffffffffffffffffffff81163003611c655750611c63926138c0565b565b601c60006020949560649382956040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615611cb1576000606052604052565b637939f4246000526004601cfd5b348403611d215760006004818681947fd0e30db00000000000000000000000000000000000000000000000000000000083525af1156102b2573073ffffffffffffffffffffffffffffffffffffffff831614611d1b5738611c3b565b50505050565b7fa11a990f0000000000000000000000000000000000000000000000000000000060005260046000fd5b50341515611c36565b95949193909295611d65858361390b565b611d6f878461390b565b73ffffffffffffffffffffffffffffffffffffffff600154169180611db3575b505081611d9e575b5050509190565b81611dab93960395613a48565b388080611d97565b8281611dc193970396613a48565b3880611d8f565b96909590949293928782612060578492508591509273ffffffffffffffffffffffffffffffffffffffff611e86611e8e957f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b169788612c4d565b50506080516000959092919081611f7b575b50600003918286180280921801931801925b83611f1d575b8280611ec2575050565b73ffffffffffffffffffffffffffffffffffffffff6020611c639301511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b611f768473ffffffffffffffffffffffffffffffffffffffff83511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b611eb8565b95507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08701956040600088519260608a5282517f128acb080000000000000000000000000000000000000000000000000000000081523060048201528760248201528560448201528773fffd8963efd1fc6a506488495d951d53639afb810273fffd8963efd1fc6a506488495d951d5263988d2518606482015260a060848201528260c48c518d60208201908160a487019160045afa5001925af160403d141615612056576000518481602051180218600003965238611ea0565b3d6000803e3d6000fd5b92909396612147929561214e979873ffffffffffffffffffffffffffffffffffffffff808061213c61213661212f8361212961209b8f613bbe565b9d7f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b166144cd565b5097614509565b97614509565b169516931691614863565b9086614a94565b5061217173ffffffffffffffffffffffffffffffffffffffff8351163090614b26565b906121963073ffffffffffffffffffffffffffffffffffffffff602086015116614b26565b9192611eb2565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820180516388316456825290937f000000000000000000000000000000000000000000000000000000000000000093608060006101647ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc840182895af115612306576000519460205194604051946060519852604052600060605286938095969773ffffffffffffffffffffffffffffffffffffffff610120850151169160a08501519060c086015191848183106122c1575b505050808210612286575b5050505050565b6122b073ffffffffffffffffffffffffffffffffffffffff8060206122b798015116951685613c06565b0391613a48565b388080808061227f565b6122fe9273ffffffffffffffffffffffffffffffffffffffff895116926122b073ffffffffffffffffffffffffffffffffffffffff8a1685613c06565b388084612274565b3d6000fd5b33600052600260205260ff604060002054166123c2577f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa156120565773ffffffffffffffffffffffffffffffffffffffff60005116330361239857565b7fc19f17a90000000000000000000000000000000000000000000000000000000060005260046000fd5b50565b909391926123d3825161258b565b9061243460208401956fffffffffffffffffffffffffffffffff875116612529575b84519773ffffffffffffffffffffffffffffffffffffffff85511698602086019973ffffffffffffffffffffffffffffffffffffffff8b511691613d55565b908196819886517f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa15612056576fffffffffffffffffffffffffffffffff9460a0948694600051908381612500575b5050816124d7575b50505050511692015116146124cd5750565b611c639051613df7565b73ffffffffffffffffffffffffffffffffffffffff6124f7945116613b0d565b388080806124bb565b612522918373ffffffffffffffffffffffffffffffffffffffff8d5116613b0d565b38836124b3565b612553857f0000000000000000000000000000000000000000000000000000000000000000613ceb565b50506123f5565b60405190612567826116ba565b600060a0838281528260208201528260408201528260608201528260808201520152565b61259361255a565b5061259c61255a565b907f99fbab880000000000000000000000000000000000000000000000000000000060005260045261010081602460007f00000000000000000000000000000000000000000000000000000000000000005afa1561260257806101006040920182520190565b3d90fd5b90929180612667575b50508061261a575050565b611c639161262a82303384611bdd565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b6126779161262a82303384611bdd565b388061260f565b90927f0000000000000000000000000000000000000000000000000000000000000000604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840180519063219f5d1781526060600060c47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc890182885af1156120565752600051946020516040519160405281958197986040602083015192015192828110612770575b50505080821061273b5750505050565b61275e73ffffffffffffffffffffffffffffffffffffffff612767951684613c06565b03903390613a48565b38808080611d1b565b6127949261275e73ffffffffffffffffffffffffffffffffffffffff891684613c06565b38808061272b565b73ffffffffffffffffffffffffffffffffffffffff6000541633036127bd57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b93909260006024816128b46020949996996101408a01519a604051809c6128118261169e565b8b825260808983019287845287604082015287606082015201526128348b61258b565b9073ffffffffffffffffffffffffffffffffffffffff825116906fffffffffffffffffffffffffffffffff60a073ffffffffffffffffffffffffffffffffffffffff8c860151169401511690526128ac7f00000000000000000000000000000000000000000000000000000000000000009e8f613ceb565b50508b613d55565b9990977f6352211e0000000000000000000000000000000000000000000000000000000083526004525afa15612056576129399461292a9373ffffffffffffffffffffffffffffffffffffffff6000511661012087015261291486611bad565b606087015160020b608088015160020b91611dc8565b60c083015260a082015261219d565b90919293565b907f00000000000000000000000000000000000000000000000000000000000000007f081812fc000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa156120565760005173ffffffffffffffffffffffffffffffffffffffff163014612a90577f6352211e000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa15612056576000517fe985e9c5000000000000000000000000000000000000000000000000000000006000526004523060245260206000604481845afa15612056576000516000602452612a9057600095869560c4958794604051967f7ac2ff7b000000000000000000000000000000000000000000000000000000008852306004890152602488015260448701526064860152608485015260a48401525af11561205657565b505050505050565b9273ffffffffffffffffffffffffffffffffffffffff9291612bf6612c0b968594938594612ac6895161258b565b94612ad086611bad565b6040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606083206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b209152612be490612b65908a9073ffffffffffffffffffffffffffffffffffffffff16612129565b50936060890193612b79855160020b614509565b9560808b01968b6fffffffffffffffffffffffffffffffff60a0612ba08b5160020b614509565b9201511691808210828218028091189118928e81168f8316811115600014612c1257505091612bce92614b62565b505b8d518b8b511660208c019e8f511691613d55565b9390925160020b905160020b91611dc8565b6040870152602086015251169151169161267e565b9192909190565b8f85161015600014612c3f5790818f9284612c3996612c3092614b62565b50031690614f78565b50612bd0565b50612c3992038d1690614f78565b929094939460006080526000958215806138b8575b6138a1578360020b8260020b9080821291821592613877575b50811561386a575b5061384057843b1561383257604051610120810181811067ffffffffffffffff8211176105bf576040526000815260006020820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e08201526000610100820152612cf3866144cd565b969093849760408401527f1a6865020000000000000000000000000000000000000000000000000000000060005260206000600481855afa156102b257600051907fddca3f430000000000000000000000000000000000000000000000000000000060005260206000600481865afa156102b25762ffffff60005116907fd0c93a7c0000000000000000000000000000000000000000000000000000000060005260206000600481875afa156102b257612dd992612dd39260005191875288602088015289606088015287608088015260e0870152610100860152614509565b96614509565b938660a08401528460c0840152612e3573ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff891673ffffffffffffffffffffffffffffffffffffffff8416878a614863565b608052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000906000905b600084604081015160020b9461010082015160020b946080516000146137565783868807128688050360081d9160010b8260010b14600014613746575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260ff8399898881830712910503161b01165b8015613708577f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a17955b948196612f7082828560081b0102614509565b94608051156000146136ac57612fc073ffffffffffffffffffffffffffffffffffffffff6020870151166fffffffffffffffffffffffffffffffff8751166080880151908960e08a015193614bb3565b92919690969260608201510196608082015103975b73ffffffffffffffffffffffffffffffffffffffff8085169116810361369b576130109060a083015160c06080511515940151918b8b614863565b15151461362657505050505050505050505b8051926020820151926060830151966080840151926080511560001461335c575073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff861610613262575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851610156130bf575b505050906130b991856149a3565b91030191565b9196509291975085519286602081015160c08201519560e08301519081620f424003908060601b848104606087015101906130fe60a088015183614f78565b9a6131176131118689620f4240026149e2565b85614f78565b9561312e60a060808b01519889019a015186614f78565b890396871115613254576130b99c866131fd9661314e856132479d614e10565b930204900303940290620f42400204900360011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b058181119082180218978a89038060ff1d908101189060016c0100000000000000000000000060e0613233858a614f78565b930151620f42400393880915151601614d61565b91030196909138806130ab565b63202368086000526004601cfd5b99975061328261327b60e0850151620f42400384614ccf565b8686614a1b565b9773ffffffffffffffffffffffffffffffffffffffff8b1673ffffffffffffffffffffffffffffffffffffffff8a16106000146132d9575073ffffffffffffffffffffffffffffffffffffffff819a5b9050613077565b999391858561332b9261332382879c969c038060ff1d908101186132fd8186614f78565b60016c0100000000000000000000000060e08c0151620f42400393880915151601614d61565b9003946149a3565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528860608601528360808601526132d2565b905073ffffffffffffffffffffffffffffffffffffffff819893989792971673ffffffffffffffffffffffffffffffffffffffff861611613559575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851611156133e4575b505050906130b99185038060ff1d9081011890614f78565b9196509291975085519260208701519360c08801519460e08901519182620f4240039260608b0151908260601b908985870283620f42400204840192048203928311156132545784868e9561347f6130b99d61347761347161354c9c60a08c60806134606134596135239e8585015190614f78565b9b8a614f78565b910151019c0151620f4240026149e2565b84614f78565b890398614e10565b93020401039160011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b0481811090821802189760e061353e868d8c614955565b910151620f42400390614d61565b91030196909138806133cc565b99975061357961357260e0850151620f42400384614ccf565b86866148bc565b9773ffffffffffffffffffffffffffffffffffffffff8b8116908a16106135ba575073ffffffffffffffffffffffffffffffffffffffff819a5b9050613398565b9993916135f5906135e26135d28886899c969c614955565b60e0870151620f42400390614d61565b90039285038060ff1d9081011886614f78565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528360608601528860808601526135b3565b7ff30dba9300000000000000000000000000000000000000000000000000000000815283838660081b010260020b6004526040816024818b5afa156108b05760205190608051900318608051018a51018a5260208a01526080519260081b010203604087015260608601526080850152612e5f565b505050505050505050505050613022565b936136f173ffffffffffffffffffffffffffffffffffffffff6020830151166fffffffffffffffffffffffffffffffff8351166060840151908960e086015193614bb3565b969192906060820151039660808201510197612fd5565b50919450507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160010b61373c8183614fc6565b9390859085612ed1565b506137518185614fc6565b612e9c565b60018487890712878905030160020b60081d9160010b8260010b14600014613822575b60018082988887818307129105030160ff161b8403165b801561380257808403167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1792831c63d76453e004161a1795612f5d565b50905060019194500160010b6138188183614fc6565b9390859085613790565b5061382d8185614fc6565b613779565b6301ac05a56000526004601cfd5b7f30673a1b0000000000000000000000000000000000000000000000000000000060005260046000fd5b620d89e891501338612c83565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761813915038612c7b565b505050505090506000906000906000608052600090565b508015612c62565b6010600060449260209582956014526034526fa9059cbb00000000000000000000000082525af13d156001600051141716156138fd576000603452565b6390b8ec186000526004601cfd5b90818110613a1e578061391c575050565b670de0b6b3a7640000820291818115670de0b6b3a76400008386041417021561397a575090045b60015460a01c1061395057565b7feab9763d0000000000000000000000000000000000000000000000000000000060005260046000fd5b81670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a10578390048060030260021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600184848303049480600003040192119003021702613943565b63ae47f7026000526004601cfd5b7f5945ea560000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908173ffffffffffffffffffffffffffffffffffffffff82161480613b05575b15613af9575060006024818080947f2e1a7d4d000000000000000000000000000000000000000000000000000000008252876004525af1156102b257600080809338935af115613aeb57565b63b12d13eb6000526004601cfd5b611c63939291506138c0565b506001613a9f565b9290919273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918273ffffffffffffffffffffffffffffffffffffffff8316149081613bb6575b5015613af9575060006024818080947f2e1a7d4d000000000000000000000000000000000000000000000000000000008252876004525af1156102b257600080809338935af115613aeb57565b905038613b69565b3560601c9081600052600360205260ff6040600020541615613bdc57565b7fe1cf4d030000000000000000000000000000000000000000000000000000000060005260046000fd5b6044601060008093602095601452816034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b633e3f8f736000526004601cfd5b60446010600080936020956014527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b6010600060449260209582956014526034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b6040600060a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0850193827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc865197630c49ccbe885201915af11561205657526000519060205190565b60006084604092969594968351907ffc6f786500000000000000000000000000000000000000000000000000000000825260048201523060248201526fffffffffffffffffffffffffffffffff60448201526fffffffffffffffffffffffffffffffff6064820152827f00000000000000000000000000000000000000000000000000000000000000005af11561205657611a0d936000519060205192611d54565b7f42966c6800000000000000000000000000000000000000000000000000000000600052600452600080602481807f00000000000000000000000000000000000000000000000000000000000000005af11561205657565b9392959473ffffffffffffffffffffffffffffffffffffffff98979195836000146144ba57613eb660608701956000875197525b60208801976fffffffffffffffffffffffffffffffff895116614489575b51998c8a511660208b019d8e5116908c613d55565b927f6352211e0000000000000000000000000000000000000000000000000000000060005289600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa156120565760005195156141f757613f2089611bad565b92806141375750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff166000928261406b575b50505073ffffffffffffffffffffffffffffffffffffffff9984613fe4938593905b019b8c925116613b0d565b61400673ffffffffffffffffffffffffffffffffffffffff8651163090614b26565b80614042575b5050505b8510613a1e5760a06fffffffffffffffffffffffffffffffff8092511692015116146140395750565b611c6390613df7565b6140639273ffffffffffffffffffffffffffffffffffffffff875116613b0d565b38808061400c565b60409193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000919d939d019384519d606086528351907f128acb080000000000000000000000000000000000000000000000000000000082523060048301526001602483015260448201526401000276a4606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c488516020810160a48601818c60045afa500193165af160403d141615612056576020519a909152986000038984613fe4613fb7565b9092915061414483613bbe565b9060008080601473ffffffffffffffffffffffffffffffffffffffff80602089015116975116946141753089614b26565b986141808888613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af1156141ef57509385936141e873ffffffffffffffffffffffffffffffffffffffff9e946141e18a95613fe499613c06565b3090614b26565b0390613fd9565b3d81803e3d90fd5b614206899c969c949294611bad565b92806143f65750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff169060009281614323575b505050905b01976142c8828a8373ffffffffffffffffffffffffffffffffffffffff8a5116613b0d565b6142ea73ffffffffffffffffffffffffffffffffffffffff8451163090614b26565b90816142fa575b50505050614010565b73ffffffffffffffffffffffffffffffffffffffff61431a945116613b0d565b388080806142f1565b6040919293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000910193845193606086528351907f128acb08000000000000000000000000000000000000000000000000000000008252306004830152836024830152604482015273fffd8963efd1fc6a506488495d951d5263988d25606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c488516020810160a48601818c60045afa500193165af160403d14161561205657600051600003915238808061429e565b91509161440283613bbe565b9060008080601473ffffffffffffffffffffffffffffffffffffffff80602087015116955116966144333089614b26565b9861443e8888613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af1156141ef575061448292916141e191613c06565b03906142a3565b6144b3817f0000000000000000000000000000000000000000000000000000000000000000613ceb565b5050613ea1565b613eb66040870195600087519752613e83565b60006004816040937f3850c7bd0000000000000000000000000000000000000000000000000000000082525afa156102b2576000519060205190565b8060ff1d81810118620d89e8811161484b5763ffffffff91600182167001fffcb933bd6fad37aa2d162d1a5940010270010000000000000000000000000000000018916002811661482f575b60048116614813575b600881166147f7575b601081166147db575b602081166147bf575b604081166147a3575b60808116614787575b610100811661476b575b610200811661474f575b6104008116614733575b6108008116614717575b61100081166146fb575b61200081166146df575b61400081166146c3575b61800081166146a7575b62010000811661468b575b620200008116614670575b620400008116614655575b620800001661463c575b600012614615575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0461460e565b6b048a170391f7dc42444e8fa290910260801c90614606565b6d2216e584f5fa1ea926041bedfe9890920260801c916145fc565b916e5d6af8dedb81196699c329225ee6040260801c916145f1565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c916145e6565b916f31be135f97d08fd981231505542fcfa60260801c916145db565b916f70d869a156d2a1b890bb3df62baf32f70260801c916145d1565b916fa9f746462d870fdf8a65dc1f90e061e50260801c916145c7565b916fd097f3bdfd2022b8845ad8f792aa58250260801c916145bd565b916fe7159475a2c29b7443b29c7fa6e889d90260801c916145b3565b916ff3392b0822b70005940c7a398e4b70f30260801c916145a9565b916ff987a7253ac413176f2b074cf7815e540260801c9161459f565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91614595565b916ffe5dee046a99a2a811c461f1969c30530260801c9161458b565b916fff2ea16466c96a3843ec78b326b528610260801c91614582565b916fff973b41fa98c081472e6896dfb254c00260801c91614579565b916fffcb9843d60f6159c9db58835c9266440260801c91614570565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91614567565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c9161455e565b916ffff97272373d413259a46990580e213a0260801c91614555565b6308c379a0600052602080526101546041526045601cfd5b919391838511614877575050505050600090565b828510614888575050505050600190565b6148ab93614899866148a293614f78565b90860390614f78565b93820390614ed1565b1090565b91908201809211611a1e57565b919081156149505760601b918082028183820414614904575b5082916148f89173ffffffffffffffffffffffffffffffffffffffff94046148af565b80820615159104011690565b83018381106148d557915061491a828285614ed1565b920961493a575b73ffffffffffffffffffffffffffffffffffffffff1690565b600101806149215763ae47f7026000526004601cfd5b505090565b918282108284180280808518931893146102b25760019060601b9282810361499473ffffffffffffffffffffffffffffffffffffffff83168287614ed1565b94098284061715151691040190565b818118818310028082189392811891146102b2576149de918373ffffffffffffffffffffffffffffffffffffffff831692039060601b614ed1565b0490565b81156149ec570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9073ffffffffffffffffffffffffffffffffffffffff90614a4e938060a01c15600014614a845760601b04915b166148af565b740100000000000000000000000000000000000000008110156102b25773ffffffffffffffffffffffffffffffffffffffff1690565b90614a8e91614e10565b91614a48565b6000601473ffffffffffffffffffffffffffffffffffffffff829397959496978180602083015116915116958682180280911895181694614ad53087614b26565b97614ae08887613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af11561205657614b22926141e191613c06565b0390565b6024600080926020947f70a082310000000000000000000000000000000000000000000000000000000083526004525afa156102b25760005190565b9173ffffffffffffffffffffffffffffffffffffffff91614bac917bffffffffffffffffffffffffffffffff00000000000000000000000084868185169403169160601b16614ed1565b9116900490565b919094929473ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8416101594620f42400390614bf98288614ccf565b8615614c9d57614c0a848684614955565b975b888210614c66575050958691620f4240614c268284614d61565b9209614c54575b945b15614c4b5791614c4892038060ff1d9081011890614f78565b90565b614c48926149a3565b60019150018015613a10578590614c2d565b96975091505082158215176102b2578515614c8d57614c869082846148bc565b8095614c2f565b614c98908284614a1b565b614c86565b8185038060ff1d9081011860016c01000000000000000000000000614cc28388614f78565b9287091515160197614c0c565b81810291620f424081838504148315170215614cf0575050620f4240900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620f42409284098481108501900392099080620f42401115613a1057828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c261390290565b90620f424082029181620f4240828504148215170215614d815750900490565b81620f42407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b908160601b91816c01000000000000000000000000828504148215170215614e385750900490565b816c010000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b81810292918115828504821417830215614eec575050900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84928409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b818102917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff910981811082019003806c010000000000000000000000001115613a105760a01b9060601c1790565b6024600080926020947f5339c29600000000000000000000000000000000000000000000000000000000835260010b6004525afa156102b2576000519056fea164736f6c634300081a000a000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112000000", + "nonce": "0x74", + "chainId": "0xa4b1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x62f88933d3329a1d70abb2c73f00151cd90881907eca4e82f70ddb682f637822", + "transactionType": "CALL", + "contractName": "UniV3Automan", + "contractAddress": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "function": "setFeeConfig((address,uint96))", + "arguments": [ + "(0x145304a5cfEc1B616Cf035C43f084CE1233d9Ea7, 200000000000000000)" + ], + "transaction": { + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "gas": "0x17df3", + "value": "0x0", + "input": "0xc747e2b3000000000000000000000000145304a5cfec1b616cf035c43f084ce1233d9ea700000000000000000000000000000000000000000000000002c68af0bb140000", + "nonce": "0x75", + "chainId": "0xa4b1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd78cf0ace211fe3f89de27831210097968baaf0a8dd4bf317e819ea1ddf8eb0c", + "transactionType": "CALL", + "contractName": "UniV3Automan", + "contractAddress": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "function": "setControllers(address[],bool[])", + "arguments": [ + "[0x1Dd333d27746D2283D01C5a759cB04A0eAD821D4]", + "[true]" + ], + "transaction": { + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "gas": "0x1d357", + "value": "0x0", + "input": "0x2c45e5a00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001dd333d27746d2283d01c5a759cb04a0ead821d400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x76", + "chainId": "0xa4b1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x98c2093ce498ad3943c024168394c98d236ed1f6c4a11ccc84e8d6e6104d4204", + "transactionType": "CALL", + "contractName": "UniV3Automan", + "contractAddress": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "function": "setSwapRouters(address[],bool[])", + "arguments": [ + "[0x00000004D523574c93021f52E520ec4fb2FFA564]", + "[true]" + ], + "transaction": { + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "gas": "0x1d976", + "value": "0x0", + "input": "0xf3e17b8700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000004d523574c93021f52e520ec4fb2ffa56400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x77", + "chainId": "0xa4b1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8d72670ce9ff2e7bc28e210b161aa98ddd2ee1a405fa9ee11f0e0c6f8e1ebd4f", + "transactionType": "CALL", + "contractName": "UniV3Automan", + "contractAddress": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "function": "transferOwnership(address)", + "arguments": [ + "0x145304a5cfEc1B616Cf035C43f084CE1233d9Ea7" + ], + "transaction": { + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "gas": "0x152ea", + "value": "0x0", + "input": "0xf2fde38b000000000000000000000000145304a5cfec1b616cf035c43f084ce1233d9ea7", + "nonce": "0x78", + "chainId": "0xa4b1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x337e9a", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0982ed74cb7761622552b977d1cfccd9112d56a2e10cb499877f6796b3aae83f", + "transactionIndex": "0x4", + "blockHash": "0x0151ba74ee13a7f02c383b93e478e92c328770e4ec1675f40c43ed935be2294c", + "blockNumber": "0x11a1c8ac", + "gasUsed": "0x2b1fa4", + "effectiveGasPrice": "0x989680", + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", + "contractAddress": null, + "gasUsedForL1": "0xf772a", + "l1BlockNumber": "0x14a16d5" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x684948", + "logs": [ + { + "address": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112" + ], + "data": "0x", + "blockHash": "0xb0059771a49287f46431467551c4cc33a59999fff3d93fa37ebbda30d4870c83", + "blockNumber": "0x11a1c8b2", + "transactionHash": "0x35283a9517c1782c4217c5c0de3ac78f10f549f29f346b6f32969f354c37c095", + "transactionIndex": "0x2", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000400000000000100000000000000000000000000000000000000000000000000100000000020000000080000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x35283a9517c1782c4217c5c0de3ac78f10f549f29f346b6f32969f354c37c095", + "transactionIndex": "0x2", + "blockHash": "0xb0059771a49287f46431467551c4cc33a59999fff3d93fa37ebbda30d4870c83", + "blockNumber": "0x11a1c8b2", + "gasUsed": "0x657910", + "effectiveGasPrice": "0x989680", + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", + "contractAddress": null, + "gasUsedForL1": "0x20b018", + "l1BlockNumber": "0x14a16d5" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x8101b", + "logs": [ + { + "address": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "topics": [ + "0x42200c2a55e71251cd849a86c7ece1a42ddabecbb489150a136f6c0d239c7a5c" + ], + "data": "0x000000000000000000000000145304a5cfec1b616cf035c43f084ce1233d9ea700000000000000000000000000000000000000000000000002c68af0bb140000", + "blockHash": "0x310652428933939383f9183321050c5315bd1a1252d11f11b7b324777d158066", + "blockNumber": "0x11a1c8b7", + "transactionHash": "0x62f88933d3329a1d70abb2c73f00151cd90881907eca4e82f70ddb682f637822", + "transactionIndex": "0x4", + "logIndex": "0x9", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x62f88933d3329a1d70abb2c73f00151cd90881907eca4e82f70ddb682f637822", + "transactionIndex": "0x4", + "blockHash": "0x310652428933939383f9183321050c5315bd1a1252d11f11b7b324777d158066", + "blockNumber": "0x11a1c8b7", + "gasUsed": "0x15c56", + "effectiveGasPrice": "0x989680", + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "contractAddress": null, + "gasUsedForL1": "0x9eff", + "l1BlockNumber": "0x14a16d5" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x19d47", + "logs": [ + { + "address": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "topics": [ + "0x2077016b05a05d3f12f6d9a8ca3667fbecaf29eba7083f7e2d1d70dc3709f635" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001dd333d27746d2283d01c5a759cb04a0ead821d400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x56afc72e8fc785945cfe5ac825a0a602661b1badcbda040cc220b35157cb65ce", + "blockNumber": "0x11a1c8bb", + "transactionHash": "0xd78cf0ace211fe3f89de27831210097968baaf0a8dd4bf317e819ea1ddf8eb0c", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000004000000000000000020000000000000000000000040100000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xd78cf0ace211fe3f89de27831210097968baaf0a8dd4bf317e819ea1ddf8eb0c", + "transactionIndex": "0x1", + "blockHash": "0x56afc72e8fc785945cfe5ac825a0a602661b1badcbda040cc220b35157cb65ce", + "blockNumber": "0x11a1c8bb", + "gasUsed": "0x19d47", + "effectiveGasPrice": "0x989680", + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "contractAddress": null, + "gasUsedForL1": "0xd8fa", + "l1BlockNumber": "0x14a16d5" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1e23e91", + "logs": [ + { + "address": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "topics": [ + "0xb398a28fa151438e6fbfb63bb5dcf5aab5446ef8c4274546890ea394dc1993e2" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000004d523574c93021f52e520ec4fb2ffa56400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x7b0339cc2c55a567902ada641ba6f39d7340fdbfba61eedfc90805115bb43dfe", + "blockNumber": "0x11a1c8c0", + "transactionHash": "0x98c2093ce498ad3943c024168394c98d236ed1f6c4a11ccc84e8d6e6104d4204", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000100000000000000000000000000000000000000000000000000020000100000000000000000000000000000000000000000000000000100000000000000000000000000004000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x98c2093ce498ad3943c024168394c98d236ed1f6c4a11ccc84e8d6e6104d4204", + "transactionIndex": "0x1", + "blockHash": "0x7b0339cc2c55a567902ada641ba6f39d7340fdbfba61eedfc90805115bb43dfe", + "blockNumber": "0x11a1c8c0", + "gasUsed": "0x1e23e91", + "effectiveGasPrice": "0x989680", + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "contractAddress": null, + "gasUsedForL1": "0xdf20", + "l1BlockNumber": "0x14a16d5" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1220ca", + "logs": [ + { + "address": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112", + "0x000000000000000000000000145304a5cfec1b616cf035c43f084ce1233d9ea7" + ], + "data": "0x", + "blockHash": "0xbd6bf576b9d527a668305f51312dd9a6dc2c34ba3fba4e86c9f4972ca51e2791", + "blockNumber": "0x11a1c8c4", + "transactionHash": "0x8d72670ce9ff2e7bc28e210b161aa98ddd2ee1a405fa9ee11f0e0c6f8e1ebd4f", + "transactionIndex": "0x3", + "logIndex": "0x1a", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000010000000000800000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000400000000000100000000000000400000000000000000000000000000000000100000000000000000080000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x8d72670ce9ff2e7bc28e210b161aa98ddd2ee1a405fa9ee11f0e0c6f8e1ebd4f", + "transactionIndex": "0x3", + "blockHash": "0xbd6bf576b9d527a668305f51312dd9a6dc2c34ba3fba4e86c9f4972ca51e2791", + "blockNumber": "0x11a1c8c4", + "gasUsed": "0xf293", + "effectiveGasPrice": "0x989680", + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "contractAddress": null, + "gasUsedForL1": "0x8202", + "l1BlockNumber": "0x14a16d5" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1736978362, + "chain": 42161, + "commit": "bc412e6" +} \ No newline at end of file diff --git a/broadcast/DeployUniV3Automan.s.sol/42161/run-latest.json b/broadcast/DeployUniV3Automan.s.sol/42161/run-latest.json index 991e4a1..dd7bff7 100644 --- a/broadcast/DeployUniV3Automan.s.sol/42161/run-latest.json +++ b/broadcast/DeployUniV3Automan.s.sol/42161/run-latest.json @@ -1,54 +1,77 @@ { "transactions": [ { - "hash": "0xbe7cfd257f5163b2158dc124b383b6dac4cf69d561b18fb6942aa6a4f9aa06b8", + "hash": "0x0982ed74cb7761622552b977d1cfccd9112d56a2e10cb499877f6796b3aae83f", "transactionType": "CALL", "contractName": null, "contractAddress": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", "function": "deploy(uint256,bytes32,bytes)", "arguments": [ "0", - "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112e429609defd54e2600050000", - "0x60e08060405260408161533b803803809161001a8285610276565b8339810103126102065780516001600160a01b03811691828203610206576001600160a01b039061004d906020016102af565b1690811561026057600080546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36080526312a9293f60e21b8152602081600481855afa9081156102135760009161021f575b506001600160a01b031660a05260405163c45a015560e01b815290602090829060049082905afa908115610213576000916101d4575b5060c05260405161507790816102c4823960805181818161049801528181610ebd01528181611cf401528181611d8a015281816121d20152818161222b015281816124a101528181612650015281816126c301528181612704015281816128e10152818161296501528181612b3f01528181613aaa01528181613eb801528181613eff015261450a015260a05181818160320152818161116901528181611ed40152613af8015260c05181818161035d0152818161092a015281816120d60152818161236f01528181612c0101528181613f9f01526142500152f35b90506020813d60201161020b575b816101ef60209383610276565b8101031261020657610200906102af565b386100f8565b600080fd5b3d91506101e2565b6040513d6000823e3d90fd5b90506020813d602011610258575b8161023a60209383610276565b81010312610206576004916102506020926102af565b9150916100c2565b3d915061022d565b631e4fbdf760e01b600052600060045260246000fd5b601f909101601f19168101906001600160401b0382119082101761029957604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036102065756fe60a0806040526004361015610084575b50361561001b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361005a57005b7f2f1ca35a0000000000000000000000000000000000000000000000000000000060005260046000fd5b60003560e01c9081630e24818e146115c257508063100d1c78146115a05780631376f4c4146114485780631e5eb1d0146113eb578063219f5d17146113185780632c45e5a01461124b57806332279096146111da578063408477631461118d5780634aa4a4fc1461111e5780634d0a0c97146111085780634f46cde9146110e657806353189324146110815780636163cc1b1461105c57806370f3c18014610fee578063715018a614610f525780637d251ee314610ee15780637f1e9ef614610e725780638831645614610d925780638ba1e27314610cf55780638da5cb5b14610ca357806399642fb114610b06578063ab1df9a614610aaf578063af3ed586146109b8578063b429afeb1461094e578063c45a0155146108df578063c747e2b314610762578063f2fde38b14610670578063f3e17b87146103f8578063fa461e33146102e35763fc0e92cc146101db573861000f565b346102de576102607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5761021436611765565b610164356101c43567ffffffffffffffff81116102de57610239903690600401611884565b90610204359260ff841684036102de576102da946102716102809561025d84611cae565b610244359061022435906101e43586612962565b6101a43591610184359161286d565b90604094929451948486957f811d4760f1a92875eb76dbd3dc2359544b2f6a000ba5b78784c0b105b3469bd0600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b0390f35b600080fd5b346102de5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5760043560443567ffffffffffffffff81116102de57610335903690600401611884565b5090604051606083600037606060002074ff00000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000176000526020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016906040528033036102de5760008213156103e4576103e292309035611eba565b005b6103e2926024359250309060200135611eba565b61040136611949565b61040c93919361281e565b8083036102de5760005b8381106104555750610450907fb398a28fa151438e6fbfb63bb5dcf5aab5446ef8c4274546890ea394dc1993e29460405194859485611bdd565b0390a1005b610468610463828686611b4d565b611bbc565b9061047c610477828589611b4d565b611b8c565b1561061f5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169173ffffffffffffffffffffffffffffffffffffffff8116928084146105c15760009182918260405160208101927f095ea7b3000000000000000000000000000000000000000000000000000000008452602482015281604482015260448152610523606482611683565b51925af13d1561061a573d67ffffffffffffffff81116105eb576040519061057360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160183611683565b8152600060203d92013e5b6105c15760019160005260036020526040600020827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555b01610416565b7f78f200710000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61057e565b73ffffffffffffffffffffffffffffffffffffffff60019216600052600360205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690556105bb565b346102de5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5773ffffffffffffffffffffffffffffffffffffffff6106bc611628565b6106c461281e565b1680156107335773ffffffffffffffffffffffffffffffffffffffff600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57600061079661281e565b670de0b6b3a76400006bffffffffffffffffffffffff6107b4611c93565b1610156108dc5773ffffffffffffffffffffffffffffffffffffffff6107d8611b99565b16156108dc5773ffffffffffffffffffffffffffffffffffffffff6107fb611b99565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015561082d611c93565b73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff00000000000000000000000000000000000000006001549260a01b169116176001557f42200c2a55e71251cd849a86c7ece1a42ddabecbb489150a136f6c0d239c7a5c61089a611b99565b6108a2611c93565b6040805173ffffffffffffffffffffffffffffffffffffffff9390931683526bffffffffffffffffffffffff91909116602083015290a180f35b80fd5b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102de5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5773ffffffffffffffffffffffffffffffffffffffff61099a611628565b166000526002602052602060ff604060002054166040519015158152f35b346102de576101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de576109f1366118b2565b6101043567ffffffffffffffff81116102de57610a12903690600401611884565b9091610144359160ff831683036102de576102da9382610a4e610a5b945195610a3a87611cae565b610184359061016435906101243589612962565b60e4359060c43590612bad565b906040949294519485947fc13e24d2b0a3bacd5d1a7c514125a1e27323abf7c86f6d36597f8752bbd7eed7600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102de576020610ad9610ac236611aa5565b938596959391935196610ad488611cae565b612abb565b604051917f9a5a8a32afd899e7f95003c6e21c9fab2d50e11992439d14472229180c60c7aa600080a28152f35b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57610b3a366118b2565b60c43567ffffffffffffffff81116102de57610c29610bef610c1f846040610b696102da963690600401611884565b60e4949194359461010435610bf8610b81875161260d565b9173ffffffffffffffffffffffffffffffffffffffff8351169989610be6838d9c73ffffffffffffffffffffffffffffffffffffffff6020890151169e8f9d602081019d8e91825180610c91575b50019e8f91825180610c7f575b505191519261202f565b50508851611b11565b87528751611b11565b8652610c0381611e8a565b906080606082015160020b91015160020b8651918851936120a3565b9092525284612700565b9092919351926040519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b610c8b90303385611eba565b38610bdc565b610c9d90303387611eba565b38610bcf565b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b346102de5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57610d2c611628565b602435908160020b82036102de576044358060020b81036102de5760809273ffffffffffffffffffffffffffffffffffffffff92610d71926084359260643592612d62565b92919290845190604051948552602085015215156040840152166060820152f35b6101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de576102da610e18610dcc36611765565b610e1373ffffffffffffffffffffffffffffffffffffffff82511673ffffffffffffffffffffffffffffffffffffffff60208401511660a08401519060c085015192612688565b61246e565b90604094929451948486957f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a84665600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102de576020610f15610f25610ef736611a17565b918994999b939b989598979697519b610f0f8d611cae565b8c612962565b610f1f815161260d565b90613ee3565b604051917f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a28152f35b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57610f8961281e565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102de576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57611027366118b2565b610104359067ffffffffffffffff82116102de57610a5b61104f6102da933690600401611884565b90835193610a4e85611cae565b346102de576020610f2561106f36611aa5565b938596959391935196610f1588611cae565b346102de5760406110af6110b4611097366119b9565b9186949698939851986110a98a611cae565b89612962565b612afc565b908351927f9a5a8a32afd899e7f95003c6e21c9fab2d50e11992439d14472229180c60c7aa600080a282526020820152f35b346102de5760406110b46110f936611725565b9082939251936110af85611cae565b346102de576020610ad4610ad9610ef736611a17565b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102de5760406111a36111a8611097366119b9565b611d72565b908351927f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a282526020820152f35b346102de576101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5761121336611765565b6101c4356101643567ffffffffffffffff82116102de576102da9261123f610280933690600401611884565b92909161027182611cae565b61125436611949565b929061125e61281e565b8383036102de5760005b8381106112a257507f2077016b05a05d3f12f6d9a8ca3667fbecaf29eba7083f7e2d1d70dc3709f635936104509160405194859485611bdd565b806112b36104776001938886611b4d565b73ffffffffffffffffffffffffffffffffffffffff6112d6610463848989611b4d565b16600052600260205260406000209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008354169115151617905501611268565b60c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de576102da61134e366118b2565b61139781519161135d8361260d565b73ffffffffffffffffffffffffffffffffffffffff602081835116920151169161139260208201516040830151908585612688565b612700565b906040949294519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de576001546040805173ffffffffffffffffffffffffffffffffffffffff8316815260a09290921c602083015290f35b6101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5761147c36611765565b6101643567ffffffffffffffff81116102de576102da916114a4610e18923690600401611884565b9061153e61018435926101a435926114bb86611e8a565b61152160a0880195865180611575575b50610bef60c08a0198895180611547575b50610be6838273ffffffffffffffffffffffffffffffffffffffff8851168d8d73ffffffffffffffffffffffffffffffffffffffff60208c015116905191519261202f565b90818752606088015160020b608089015160020b908751926120a3565b9092525261246e565b61156f9073ffffffffffffffffffffffffffffffffffffffff60208801511630903390611eba565b8d6114dc565b61159a9073ffffffffffffffffffffffffffffffffffffffff85511630903390611eba565b8b6114cb565b346102de5760406111a86115b336611725565b9082939251936111a385611cae565b346102de5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5760209073ffffffffffffffffffffffffffffffffffffffff611611611628565b166000526003825260ff6040600020541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102de57565b60a0810190811067ffffffffffffffff8211176105eb57604052565b60c0810190811067ffffffffffffffff8211176105eb57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105eb57604052565b91908260a09103126102de576040516116dc8161164b565b80928035825260208101356fffffffffffffffffffffffffffffffff811681036102de576080918291602085015260408101356040850152606081013560608501520135910152565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102de5761175a9060046116c4565b9060a4359060c43590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6101609101126102de5760405190610160820182811067ffffffffffffffff8211176105eb576040528160043573ffffffffffffffffffffffffffffffffffffffff811681036102de57815260243573ffffffffffffffffffffffffffffffffffffffff811681036102de57602082015260443562ffffff811681036102de5760408201526064358060020b81036102de5760608201526084358060020b81036102de57608082015260a43560a082015260c43560c082015260e43560e0820152610104356101008201526101243573ffffffffffffffffffffffffffffffffffffffff811681036102de5761012082015261014061014435910152565b9181601f840112156102de5782359167ffffffffffffffff83116102de57602083818601950101116102de57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c09101126102de57604051906118e982611667565b6004358252602435602083015260443560408301526064356060830152608435608083015260a43560a0830152565b9181601f840112156102de5782359167ffffffffffffffff83116102de576020808501948460051b0101116102de57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102de5760043567ffffffffffffffff81116102de578161199291600401611918565b929092916024359067ffffffffffffffff82116102de576119b591600401611918565b9091565b6101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102de576119ef9060046116c4565b9060a4359060c4359060e435906101043560ff811681036102de579061012435906101443590565b6101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102de57611a4d8160046116c4565b9160a43580151581036102de579160c4359160e43591610104359067ffffffffffffffff82116102de57611a8391600401611884565b909161012435906101443560ff811681036102de579061016435906101843590565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102de57611adb8160046116c4565b9160a43580151581036102de579160c4359160e43591610104359067ffffffffffffffff82116102de576119b591600401611884565b91908203918211611b1e57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611b5d5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3580151581036102de5790565b60043573ffffffffffffffffffffffffffffffffffffffff811681036102de5790565b3573ffffffffffffffffffffffffffffffffffffffff811681036102de5790565b939293826040820160408352526060810191926000905b808210611c43575050808203602091820152838252019291600091505b808210611c1e5750505090565b90919283359081151582036102de576020809160019315158152019401920190611c11565b90919284359073ffffffffffffffffffffffffffffffffffffffff821682036102de5773ffffffffffffffffffffffffffffffffffffffff91909116815260209485019401929160010190611bf4565b6024356bffffffffffffffffffffffff811681036102de5790565b33600052600260205260ff60406000205416611d6f577f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa15611d655773ffffffffffffffffffffffffffffffffffffffff600051163303611d3b57565b7fc19f17a90000000000000000000000000000000000000000000000000000000060005260046000fd5b3d6000803e3d6000fd5b50565b919290825193611def611d848661260d565b91611db07f000000000000000000000000000000000000000000000000000000000000000096876139d5565b505073ffffffffffffffffffffffffffffffffffffffff83511693602084019473ffffffffffffffffffffffffffffffffffffffff8651169089613a3f565b91602060006024818699869b7f6352211e0000000000000000000000000000000000000000000000000000000083526004525afa15611d6557600051918281611e62575b50505081611e4057505050565b73ffffffffffffffffffffffffffffffffffffffff611e60935116613ae1565b565b73ffffffffffffffffffffffffffffffffffffffff611e82935116613ae1565b388082611e33565b6040516060810181811067ffffffffffffffff8211176105eb576000916040918252828152826020820152015290565b92919073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168073ffffffffffffffffffffffffffffffffffffffff86161480612026575b611f9a575b5073ffffffffffffffffffffffffffffffffffffffff81163003611f405750611e6092613b96565b601c60006020949560649382956040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615611f8c576000606052604052565b637939f4246000526004601cfd5b348403611ffc5760006004818681947fd0e30db00000000000000000000000000000000000000000000000000000000083525af1156102de573073ffffffffffffffffffffffffffffffffffffffff831614611ff65738611f18565b50505050565b7fa11a990f0000000000000000000000000000000000000000000000000000000060005260046000fd5b50341515611f13565b959491939092956120408583613be1565b61204a8784613be1565b73ffffffffffffffffffffffffffffffffffffffff60015416918061208e575b505081612079575b5050509190565b8161208693960395613ae1565b388080612072565b828161209c93970396613ae1565b388061206a565b96909590949293928782612331578492508591509273ffffffffffffffffffffffffffffffffffffffff612161612169957f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b169788612d62565b50506080516000959092919081612256575b50600003918286180280921801931801925b836121f8575b828061219d575050565b73ffffffffffffffffffffffffffffffffffffffff6020611e609301511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613e0e565b6122518473ffffffffffffffffffffffffffffffffffffffff83511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613e0e565b612193565b95507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08701956040600088519260608a5282517f128acb080000000000000000000000000000000000000000000000000000000081523060048201528760248201528560448201528773fffd8963efd1fc6a506488495d951d53639afb810273fffd8963efd1fc6a506488495d951d5263988d2518606482015260a060848201528260c48c518d60208201908160a487019160045afa5001925af160403d141615611d6557600051848160205118021860000396523861217b565b92909396612418929561241f979873ffffffffffffffffffffffffffffffffffffffff808061240d612407612400836123fa61236c8f613d1e565b9d7f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b16614532565b509761456e565b9761456e565b1695169316916148c8565b9086614af9565b5061244273ffffffffffffffffffffffffffffffffffffffff8351163090614b8b565b906124673073ffffffffffffffffffffffffffffffffffffffff602086015116614b8b565b919261218d565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820180516388316456825290937f000000000000000000000000000000000000000000000000000000000000000093608060006101647ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc840182895af1156125d7576000519460205194604051946060519852604052600060605286938095969773ffffffffffffffffffffffffffffffffffffffff610120850151169160a08501519060c08601519184818310612592575b505050808210612557575b5050505050565b61258173ffffffffffffffffffffffffffffffffffffffff80602061258898015116951685613d66565b0391613ae1565b3880808080612550565b6125cf9273ffffffffffffffffffffffffffffffffffffffff8951169261258173ffffffffffffffffffffffffffffffffffffffff8a1685613d66565b388084612545565b3d6000fd5b604051906125e982611667565b600060a0838281528260208201528260408201528260608201528260808201520152565b6126156125dc565b5061261e6125dc565b907f99fbab880000000000000000000000000000000000000000000000000000000060005260045261010081602460007f00000000000000000000000000000000000000000000000000000000000000005afa1561268457806101006040920182520190565b3d90fd5b909291806126e9575b50508061269c575050565b611e60916126ac82303384611eba565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613e0e565b6126f9916126ac82303384611eba565b3880612691565b90927f0000000000000000000000000000000000000000000000000000000000000000604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840180519063219f5d1781526060600060c47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc890182885af115611d6557526000519460205160405191604052819581979860406020830151920151928281106127f2575b5050508082106127bd5750505050565b6127e073ffffffffffffffffffffffffffffffffffffffff6127e9951684613d66565b03903390613ae1565b38808080611ff6565b612816926127e073ffffffffffffffffffffffffffffffffffffffff891684613d66565b3880806127ad565b73ffffffffffffffffffffffffffffffffffffffff60005416330361283f57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b939491926128ab9193610140860151604051906128898261164b565b8682526000602083015260006040830152600060608301526080820152613e4b565b9692509390507f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa15611d655761295c9461294d9373ffffffffffffffffffffffffffffffffffffffff6000511661012087015261293786611e8a565b606087015160020b608088015160020b916120a3565b60c083015260a082015261246e565b90919293565b907f00000000000000000000000000000000000000000000000000000000000000007f081812fc000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa15611d655760005173ffffffffffffffffffffffffffffffffffffffff163014612ab3577f6352211e000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa15611d65576000517fe985e9c5000000000000000000000000000000000000000000000000000000006000526004523060245260206000604481845afa15611d65576000516000602452612ab357600095869560c4958794604051967f7ac2ff7b000000000000000000000000000000000000000000000000000000008852306004890152602488015260448701526064860152608485015260a48401525af115611d6557565b505050505050565b95949192612af693611e609592885198612ad48a61260d565b906fffffffffffffffffffffffffffffffff60a0830151166020820152613ee3565b926144da565b9291612b0a91845194613e4b565b949092917f6352211e0000000000000000000000000000000000000000000000000000000060005281600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa15611d655785612b879360005190868281612b9c575b50505081612b8b575b5050506144da565b9190565b612b9492613ae1565b388581612b7f565b612ba592613ae1565b388682612b76565b9273ffffffffffffffffffffffffffffffffffffffff9291612d0b612d20968594938594612bdb895161260d565b94612be586611e8a565b6040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606083206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b209152612cf990612c7a908a9073ffffffffffffffffffffffffffffffffffffffff166123fa565b50936060890193612c8e855160020b61456e565b9560808b01968b6fffffffffffffffffffffffffffffffff60a0612cb58b5160020b61456e565b9201511691808210828218028091189118928e81168f8316811115600014612d2757505091612ce392614bc7565b505b8d518b8b511660208c019e8f511691613a3f565b9390925160020b905160020b916120a3565b60408701526020860152511691511691612700565b9192909190565b8f85161015600014612d545790818f9284612d4e96612d4592614bc7565b50031690614fdd565b50612ce5565b50612d4e92038d1690614fdd565b929094939460006080526000958215806139cd575b6139b6578360020b8260020b908082129182159261398c575b50811561397f575b5061395557843b1561394757604051610120810181811067ffffffffffffffff8211176105eb576040526000815260006020820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e08201526000610100820152612e0886614532565b969093849760408401527f1a6865020000000000000000000000000000000000000000000000000000000060005260206000600481855afa156102de57600051907fddca3f430000000000000000000000000000000000000000000000000000000060005260206000600481865afa156102de5762ffffff60005116907fd0c93a7c0000000000000000000000000000000000000000000000000000000060005260206000600481875afa156102de57612eee92612ee89260005191875288602088015289606088015287608088015260e087015261010086015261456e565b9661456e565b938660a08401528460c0840152612f4a73ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff891673ffffffffffffffffffffffffffffffffffffffff8416878a6148c8565b608052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000906000905b600084604081015160020b9461010082015160020b9460805160001461386b5783868807128688050360081d9160010b8260010b1460001461385b575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260ff8399898881830712910503161b01165b801561381d577f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a17955b94819661308582828560081b010261456e565b94608051156000146137c1576130d573ffffffffffffffffffffffffffffffffffffffff6020870151166fffffffffffffffffffffffffffffffff8751166080880151908960e08a015193614c18565b92919690969260608201510196608082015103975b73ffffffffffffffffffffffffffffffffffffffff808516911681036137b0576131259060a083015160c06080511515940151918b8b6148c8565b15151461373b57505050505050505050505b80519260208201519260608301519660808401519260805115600014613471575073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff861610613377575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851610156131d4575b505050906131ce9185614a08565b91030191565b9196509291975085519286602081015160c08201519560e08301519081620f424003908060601b8481046060870151019061321360a088015183614fdd565b9a61322c6132268689620f424002614a47565b85614fdd565b9561324360a060808b01519889019a015186614fdd565b890396871115613369576131ce9c86613312966132638561335c9d614e75565b930204900303940290620f42400204900360011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b058181119082180218978a89038060ff1d908101189060016c0100000000000000000000000060e0613348858a614fdd565b930151620f42400393880915151601614dc6565b91030196909138806131c0565b63202368086000526004601cfd5b99975061339761339060e0850151620f42400384614d34565b8686614a80565b9773ffffffffffffffffffffffffffffffffffffffff8b1673ffffffffffffffffffffffffffffffffffffffff8a16106000146133ee575073ffffffffffffffffffffffffffffffffffffffff819a5b905061318c565b99939185856134409261343882879c969c038060ff1d908101186134128186614fdd565b60016c0100000000000000000000000060e08c0151620f42400393880915151601614dc6565b900394614a08565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528860608601528360808601526133e7565b905073ffffffffffffffffffffffffffffffffffffffff819893989792971673ffffffffffffffffffffffffffffffffffffffff86161161366e575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851611156134f9575b505050906131ce9185038060ff1d9081011890614fdd565b9196509291975085519260208701519360c08801519460e08901519182620f4240039260608b0151908260601b908985870283620f42400204840192048203928311156133695784868e956135946131ce9d61358c6135866136619c60a08c608061357561356e6136389e8585015190614fdd565b9b8a614fdd565b910151019c0151620f424002614a47565b84614fdd565b890398614e75565b93020401039160011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b0481811090821802189760e0613653868d8c6149ba565b910151620f42400390614dc6565b91030196909138806134e1565b99975061368e61368760e0850151620f42400384614d34565b8686614921565b9773ffffffffffffffffffffffffffffffffffffffff8b8116908a16106136cf575073ffffffffffffffffffffffffffffffffffffffff819a5b90506134ad565b99939161370a906136f76136e78886899c969c6149ba565b60e0870151620f42400390614dc6565b90039285038060ff1d9081011886614fdd565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528360608601528860808601526136c8565b7ff30dba9300000000000000000000000000000000000000000000000000000000815283838660081b010260020b6004526040816024818b5afa156108dc5760205190608051900318608051018a51018a5260208a01526080519260081b010203604087015260608601526080850152612f74565b505050505050505050505050613137565b9361380673ffffffffffffffffffffffffffffffffffffffff6020830151166fffffffffffffffffffffffffffffffff8351166060840151908960e086015193614c18565b9691929060608201510396608082015101976130ea565b50919450507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160010b613851818361502b565b9390859085612fe6565b50613866818561502b565b612fb1565b60018487890712878905030160020b60081d9160010b8260010b14600014613937575b60018082988887818307129105030160ff161b8403165b801561391757808403167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1792831c63d76453e004161a1795613072565b50905060019194500160010b61392d818361502b565b93908590856138a5565b50613942818561502b565b61388e565b6301ac05a56000526004601cfd5b7f30673a1b0000000000000000000000000000000000000000000000000000000060005260046000fd5b620d89e891501338612d98565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761813915038612d90565b505050505090506000906000906000608052600090565b508015612d77565b6040600060a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0850193827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc865197630c49ccbe885201915af115611d6557526000519060205190565b60006084604092969594968351907ffc6f786500000000000000000000000000000000000000000000000000000000825260048201523060248201526fffffffffffffffffffffffffffffffff60448201526fffffffffffffffffffffffffffffffff6064820152827f00000000000000000000000000000000000000000000000000000000000000005af115611d65576119b593600051906020519261202f565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908173ffffffffffffffffffffffffffffffffffffffff821614600014613b8e575060006024818080947f2e1a7d4d000000000000000000000000000000000000000000000000000000008252876004525af1156102de57600080809338935af115613b8057565b63b12d13eb6000526004601cfd5b611e60939291505b6010600060449260209582956014526034526fa9059cbb00000000000000000000000082525af13d15600160005114171615613bd3576000603452565b6390b8ec186000526004601cfd5b90818110613cf45780613bf2575050565b670de0b6b3a7640000820291818115670de0b6b3a764000083860414170215613c50575090045b60015460a01c10613c2657565b7feab9763d0000000000000000000000000000000000000000000000000000000060005260046000fd5b81670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613ce6578390048060030260021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600184848303049480600003040192119003021702613c19565b63ae47f7026000526004601cfd5b7f5945ea560000000000000000000000000000000000000000000000000000000060005260046000fd5b3560601c9081600052600360205260ff6040600020541615613d3c57565b7fe1cf4d030000000000000000000000000000000000000000000000000000000060005260046000fd5b6044601060008093602095601452816034526f095ea7b300000000000000000000000082525af13d15600160005114171615613da3576000603452565b633e3f8f736000526004601cfd5b60446010600080936020956014527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6034526f095ea7b300000000000000000000000082525af13d15600160005114171615613da3576000603452565b6010600060449260209582956014526034526f095ea7b300000000000000000000000082525af13d15600160005114171615613da3576000603452565b60a092613edc94926119b592805190613e638261260d565b9173ffffffffffffffffffffffffffffffffffffffff8351169889926fffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff6020870151169a8b9601511660208201527f00000000000000000000000000000000000000000000000000000000000000006139d5565b5050613a3f565b929695909180156144ca5760608401956000875197525b613f6a7f000000000000000000000000000000000000000000000000000000000000000095613f2981886139d5565b5050519673ffffffffffffffffffffffffffffffffffffffff8651169a602087019b73ffffffffffffffffffffffffffffffffffffffff8d5116908a613a3f565b9490921561421e57613f7b90611e8a565b928061415c5750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff166000928261407e575b505050600060209373ffffffffffffffffffffffffffffffffffffffff8294602494905b01995116957f6352211e0000000000000000000000000000000000000000000000000000000083526004525afa15611d6557836140769160005190613ae1565b8210613cf457565b604091929493507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000910192835195606085528351907f128acb080000000000000000000000000000000000000000000000000000000082523060048301526001602483015260448201526401000276a4606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c487516020810160a48601818b60045afa500193165af160403d141615611d6557602051929052906000908103908373ffffffffffffffffffffffffffffffffffffffff614012565b9092915061416983613d1e565b9060008080601473ffffffffffffffffffffffffffffffffffffffff806020890151169751169461419a3089614b8b565b986141a58888613db1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af115614216575060009460249461420f879561420860209a9673ffffffffffffffffffffffffffffffffffffffff96613d66565b3090614b8b565b0390614036565b3d81803e3d90fd5b985061422c89949294611e8a565b92806144185750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff166000928261432c575b505050600060209373ffffffffffffffffffffffffffffffffffffffff8294602494905b01995116957f6352211e0000000000000000000000000000000000000000000000000000000083526004525afa15611d6557836143279160005190613ae1565b614076565b604091929493507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000910192835195606085528351907f128acb08000000000000000000000000000000000000000000000000000000008252306004830152836024830152604482015273fffd8963efd1fc6a506488495d951d5263988d25606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c487516020810160a48601818b60045afa500193165af160403d141615611d6557600080519390915290918103908373ffffffffffffffffffffffffffffffffffffffff6142c3565b91509161442483613d1e565b9060008080601473ffffffffffffffffffffffffffffffffffffffff80602087015116955116966144553089614b8b565b986144608888613db1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af11561421657506000946024946144c3879561420860209a9673ffffffffffffffffffffffffffffffffffffffff96613d66565b03906142e7565b6040840195600087519752613efa565b7f42966c6800000000000000000000000000000000000000000000000000000000600052600452600080602481807f00000000000000000000000000000000000000000000000000000000000000005af115611d6557565b60006004816040937f3850c7bd0000000000000000000000000000000000000000000000000000000082525afa156102de576000519060205190565b8060ff1d81810118620d89e881116148b05763ffffffff91600182167001fffcb933bd6fad37aa2d162d1a59400102700100000000000000000000000000000000189160028116614894575b60048116614878575b6008811661485c575b60108116614840575b60208116614824575b60408116614808575b608081166147ec575b61010081166147d0575b61020081166147b4575b6104008116614798575b610800811661477c575b6110008116614760575b6120008116614744575b6140008116614728575b618000811661470c575b6201000081166146f0575b6202000081166146d5575b6204000081166146ba575b62080000166146a1575b60001261467a575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04614673565b6b048a170391f7dc42444e8fa290910260801c9061466b565b6d2216e584f5fa1ea926041bedfe9890920260801c91614661565b916e5d6af8dedb81196699c329225ee6040260801c91614656565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161464b565b916f31be135f97d08fd981231505542fcfa60260801c91614640565b916f70d869a156d2a1b890bb3df62baf32f70260801c91614636565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161462c565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91614622565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91614618565b916ff3392b0822b70005940c7a398e4b70f30260801c9161460e565b916ff987a7253ac413176f2b074cf7815e540260801c91614604565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c916145fa565b916ffe5dee046a99a2a811c461f1969c30530260801c916145f0565b916fff2ea16466c96a3843ec78b326b528610260801c916145e7565b916fff973b41fa98c081472e6896dfb254c00260801c916145de565b916fffcb9843d60f6159c9db58835c9266440260801c916145d5565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916145cc565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916145c3565b916ffff97272373d413259a46990580e213a0260801c916145ba565b6308c379a0600052602080526101546041526045601cfd5b9193918385116148dc575050505050600090565b8285106148ed575050505050600190565b614910936148fe8661490793614fdd565b90860390614fdd565b93820390614f36565b1090565b91908201809211611b1e57565b919081156149b55760601b918082028183820414614969575b50829161495d9173ffffffffffffffffffffffffffffffffffffffff9404614914565b80820615159104011690565b830183811061493a57915061497f828285614f36565b920961499f575b73ffffffffffffffffffffffffffffffffffffffff1690565b600101806149865763ae47f7026000526004601cfd5b505090565b918282108284180280808518931893146102de5760019060601b928281036149f973ffffffffffffffffffffffffffffffffffffffff83168287614f36565b94098284061715151691040190565b818118818310028082189392811891146102de57614a43918373ffffffffffffffffffffffffffffffffffffffff831692039060601b614f36565b0490565b8115614a51570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9073ffffffffffffffffffffffffffffffffffffffff90614ab3938060a01c15600014614ae95760601b04915b16614914565b740100000000000000000000000000000000000000008110156102de5773ffffffffffffffffffffffffffffffffffffffff1690565b90614af391614e75565b91614aad565b6000601473ffffffffffffffffffffffffffffffffffffffff829397959496978180602083015116915116958682180280911895181694614b3a3087614b8b565b97614b458887613db1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af115611d6557614b879261420891613d66565b0390565b6024600080926020947f70a082310000000000000000000000000000000000000000000000000000000083526004525afa156102de5760005190565b9173ffffffffffffffffffffffffffffffffffffffff91614c11917bffffffffffffffffffffffffffffffff00000000000000000000000084868185169403169160601b16614f36565b9116900490565b919094929473ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8416101594620f42400390614c5e8288614d34565b8615614d0257614c6f8486846149ba565b975b888210614ccb575050958691620f4240614c8b8284614dc6565b9209614cb9575b945b15614cb05791614cad92038060ff1d9081011890614fdd565b90565b614cad92614a08565b60019150018015613ce6578590614c92565b96975091505082158215176102de578515614cf257614ceb908284614921565b8095614c94565b614cfd908284614a80565b614ceb565b8185038060ff1d9081011860016c01000000000000000000000000614d278388614fdd565b9287091515160197614c71565b81810291620f424081838504148315170215614d55575050620f4240900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620f42409284098481108501900392099080620f42401115613ce657828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c261390290565b90620f424082029181620f4240828504148215170215614de65750900490565b81620f42407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613ce657839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b908160601b91816c01000000000000000000000000828504148215170215614e9d5750900490565b816c010000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613ce657839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b81810292918115828504821417830215614f51575050900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84928409858110860190039209908260000383169281811115613ce657839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b818102917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff910981811082019003806c010000000000000000000000001115613ce65760a01b9060601c1790565b6024600080926020947f5339c29600000000000000000000000000000000000000000000000000000000835260010b6004525afa156102de576000519056fea164736f6c634300081a000a000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112" + "0xbeef63ae5a2102506e8a352a5bb32aa8b30b311225946149e8de306029000020", + "0x60e08060405260208161213e803803809161001a828561013c565b83398101031261013757516001600160a01b03811690818103610137576080526040516312a9293f60e21b8152602081600481855afa91821561010e5760049260209260009161011a575b506001600160a01b031660a05260405163c45a015560e01b815292839182905afa90811561010e576000916100df575b5060c052604051611fa99081610195823960805181610654015260a0518181816103d8015281816106c101526106ff015260c05181818161019e015281816104ff01526105e50152f35b610101915060203d602011610107575b6100f9818361013c565b810190610175565b38610095565b503d6100ef565b6040513d6000823e3d90fd5b6101319150833d8511610107576100f9818361013c565b38610065565b600080fd5b601f909101601f19168101906001600160401b0382119082101761015f57604052565b634e487b7160e01b600052604160045260246000fd5b9081602091031261013757516001600160a01b0381168103610137579056fe60a080604052600436101561042a575b5036156103c157346103bc5760003560601c60143560601c9060313560f81c9060323560601c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63601838584180285189061008b6100833373ffffffffffffffffffffffffffffffffffffffff851661080b565b303385610847565b826014527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6034526f095ea7b3000000000000000000000000600052602060006044601082865af13d156001600051141716156103ae57600080918160345260405181605a82378260463560601c5af11561035f576044601060008093602095601452816034526f095ea7b300000000000000000000000082525af13d156001600051141716156103ae576000603452610145308261080b565b61014f308561080b565b90604051906060820182811067ffffffffffffffff82111761037f5760405283825285602083015260283560e81c60408301526040519474ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606083206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016956040526000146103695761023681610220338961080b565b8501905b602e3560e81d602b3560e81d896108a0565b50506080519560009382610285575b50506000039485831802809218019318019180610273575b50508061026657005b610271913390611544565b005b61027e913390611544565b388061025d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09194500192604060008551926060875282517f128acb080000000000000000000000000000000000000000000000000000000081523060048201528a60248201528560448201528a73fffd8963efd1fc6a506488495d951d53639afb810273fffd8963efd1fc6a506488495d951d5263988d2518606482015260a060848201528260c489516020810160a48501818d60045afa5001925af160403d14161561035f57600051878160205118021860000393523880610245565b3d6000803e3d6000fd5b610236610376338661080b565b82018490610224565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b633e3f8f736000526004601cfd5b600080fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361040057005b7f2f1ca35a0000000000000000000000000000000000000000000000000000000060005260046000fd5b60003560e01c9081634aa4a4fc14610678575080637f1e9ef614610609578063c45a01551461059a5763fa461e3314610463573861000f565b346103bc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc5760443560043567ffffffffffffffff82116103bc57366023830112156103bc5781600401359167ffffffffffffffff83116103bc57602481019260243691830101116103bc5760405190606084600037606060002074ff00000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000176000526020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016916040528133036103bc5760008313156105855750610271923090356106e5565b610271935060243592503090604401356106e5565b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b92919073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168073ffffffffffffffffffffffffffffffffffffffff86161480610802575b610776575b5073ffffffffffffffffffffffffffffffffffffffff8116300361076d575061076b92611544565b565b61076b93610847565b3484036107d85760006004818681947fd0e30db00000000000000000000000000000000000000000000000000000000083525af1156103bc573073ffffffffffffffffffffffffffffffffffffffff8316146107d25738610743565b50505050565b7fa11a990f0000000000000000000000000000000000000000000000000000000060005260046000fd5b5034151561073e565b6024600080926020947f70a082310000000000000000000000000000000000000000000000000000000083526004525afa156103bc5760005190565b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615610892576000606052604052565b637939f4246000526004601cfd5b60006080819052959491939182158061153c575b611525578360020b8560020b90808212918215926114fb575b5081156114ee575b506114c457813b156114b657604051610120810181811067ffffffffffffffff82111761037f576040526000815260006020820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e082015260006101008201527f3850c7bd0000000000000000000000000000000000000000000000000000000060005260406000600481865afa156103bc576000519260205196849760408401527f1a6865020000000000000000000000000000000000000000000000000000000060005260206000600481855afa156103bc57600051907fddca3f430000000000000000000000000000000000000000000000000000000060005260206000600481865afa156103bc5762ffffff60005116907fd0c93a7c0000000000000000000000000000000000000000000000000000000060005260206000600481875afa156103bc57610a5a92610a549260005191875288602088015289606088015287608088015260e087015261010086015261158f565b9661158f565b938660a08401528460c0840152610ab673ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff891673ffffffffffffffffffffffffffffffffffffffff8416878a6118e9565b608052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000906000905b600084604081015160020b9461010082015160020b946080516000146113da5783868807128688050360081d9160010b8260010b146000146113ca575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260ff8399898881830712910503161b01165b801561138c577f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a17955b948196610bf182828560081b010261158f565b946080511560001461133057610c4173ffffffffffffffffffffffffffffffffffffffff6020870151166fffffffffffffffffffffffffffffffff8751166080880151908960e08a015193611b4a565b92919690969260608201510196608082015103975b73ffffffffffffffffffffffffffffffffffffffff8085169116810361131f57610c919060a083015160c06080511515940151918b8b6118e9565b1515146112a757505050505050505050505b80519260208201519260608301519660808401519260805115600014610fdd575073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff861610610ee3575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff85161015610d40575b50505090610d3a9185611a59565b91030191565b9196509291975085519286602081015160c08201519560e08301519081620f424003908060601b84810460608701510190610d7f60a088015183611f0f565b9a610d98610d928689620f424002611a98565b85611f0f565b95610daf60a060808b01519889019a015186611f0f565b890396871115610ed557610d3a9c86610e7e96610dcf85610ec89d611da7565b930204900303940290620f42400204900360011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b058181119082180218978a89038060ff1d908101189060016c0100000000000000000000000060e0610eb4858a611f0f565b930151620f42400393880915151601611cf8565b9103019690913880610d2c565b63202368086000526004601cfd5b999750610f03610efc60e0850151620f42400384611c66565b8686611ad1565b9773ffffffffffffffffffffffffffffffffffffffff8b1673ffffffffffffffffffffffffffffffffffffffff8a1610600014610f5a575073ffffffffffffffffffffffffffffffffffffffff819a5b9050610cf8565b9993918585610fac92610fa482879c969c038060ff1d90810118610f7e8186611f0f565b60016c0100000000000000000000000060e08c0151620f42400393880915151601611cf8565b900394611a59565b019573ffffffffffffffffffffffffffffffffffffffff848181166020860152886060860152836080860152610f53565b905073ffffffffffffffffffffffffffffffffffffffff819893989792971673ffffffffffffffffffffffffffffffffffffffff8616116111da575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff85161115611065575b50505090610d3a9185038060ff1d9081011890611f0f565b9196509291975085519260208701519360c08801519460e08901519182620f4240039260608b0151908260601b908985870283620f4240020484019204820392831115610ed55784868e95611100610d3a9d6110f86110f26111cd9c60a08c60806110e16110da6111a49e8585015190611f0f565b9b8a611f0f565b910151019c0151620f424002611a98565b84611f0f565b890398611da7565b93020401039160011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b0481811090821802189760e06111bf868d8c611a0b565b910151620f42400390611cf8565b910301969091388061104d565b9997506111fa6111f360e0850151620f42400384611c66565b8686611971565b9773ffffffffffffffffffffffffffffffffffffffff8b8116908a161061123b575073ffffffffffffffffffffffffffffffffffffffff819a5b9050611019565b999391611276906112636112538886899c969c611a0b565b60e0870151620f42400390611cf8565b90039285038060ff1d9081011886611f0f565b019573ffffffffffffffffffffffffffffffffffffffff848181166020860152836060860152886080860152611234565b7ff30dba9300000000000000000000000000000000000000000000000000000000815283838660081b010260020b6004526040816024818b5afa1561131c5760205190608051900318608051018a51018a5260208a01526080519260081b010203604087015260608601526080850152610ae0565b80fd5b505050505050505050505050610ca3565b9361137573ffffffffffffffffffffffffffffffffffffffff6020830151166fffffffffffffffffffffffffffffffff8351166060840151908960e086015193611b4a565b969192906060820151039660808201510197610c56565b50919450507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160010b6113c08183611f5d565b9390859085610b52565b506113d58185611f5d565b610b1d565b60018487890712878905030160020b60081d9160010b8260010b146000146114a6575b60018082988887818307129105030160ff161b8403165b801561148657808403167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1792831c63d76453e004161a1795610bde565b50905060019194500160010b61149c8183611f5d565b9390859085611414565b506114b18185611f5d565b6113fd565b6301ac05a56000526004601cfd5b7f30673a1b0000000000000000000000000000000000000000000000000000000060005260046000fd5b620d89e8915013386108d5565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618139150386108cd565b505050505090506000906000906000608052600090565b5080156108b4565b6010600060449260209582956014526034526fa9059cbb00000000000000000000000082525af13d15600160005114171615611581576000603452565b6390b8ec186000526004601cfd5b8060ff1d81810118620d89e881116118d15763ffffffff91600182167001fffcb933bd6fad37aa2d162d1a594001027001000000000000000000000000000000001891600281166118b5575b60048116611899575b6008811661187d575b60108116611861575b60208116611845575b60408116611829575b6080811661180d575b61010081166117f1575b61020081166117d5575b61040081166117b9575b610800811661179d575b6110008116611781575b6120008116611765575b6140008116611749575b618000811661172d575b620100008116611711575b6202000081166116f6575b6204000081166116db575b62080000166116c2575b60001261169b575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04611694565b6b048a170391f7dc42444e8fa290910260801c9061168c565b6d2216e584f5fa1ea926041bedfe9890920260801c91611682565b916e5d6af8dedb81196699c329225ee6040260801c91611677565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161166c565b916f31be135f97d08fd981231505542fcfa60260801c91611661565b916f70d869a156d2a1b890bb3df62baf32f70260801c91611657565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161164d565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91611643565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91611639565b916ff3392b0822b70005940c7a398e4b70f30260801c9161162f565b916ff987a7253ac413176f2b074cf7815e540260801c91611625565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c9161161b565b916ffe5dee046a99a2a811c461f1969c30530260801c91611611565b916fff2ea16466c96a3843ec78b326b528610260801c91611608565b916fff973b41fa98c081472e6896dfb254c00260801c916115ff565b916fffcb9843d60f6159c9db58835c9266440260801c916115f6565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916115ed565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916115e4565b916ffff97272373d413259a46990580e213a0260801c916115db565b6308c379a0600052602080526101546041526045601cfd5b9193918385116118fd575050505050600090565b82851061190e575050505050600190565b6119319361191f8661192893611f0f565b90860390611f0f565b93820390611e68565b1090565b9190820180921161194257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908115611a065760601b9180820281838204146119b9575b5082916119ad9173ffffffffffffffffffffffffffffffffffffffff9404611935565b80820615159104011690565b830183811061198a5791506119cf828285611e68565b92096119ef575b73ffffffffffffffffffffffffffffffffffffffff1690565b600101806119d6575b63ae47f7026000526004601cfd5b505090565b918282108284180280808518931893146103bc5760019060601b92828103611a4a73ffffffffffffffffffffffffffffffffffffffff83168287611e68565b94098284061715151691040190565b818118818310028082189392811891146103bc57611a94918373ffffffffffffffffffffffffffffffffffffffff831692039060601b611e68565b0490565b8115611aa2570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9073ffffffffffffffffffffffffffffffffffffffff90611b04938060a01c15600014611b3a5760601b04915b16611935565b740100000000000000000000000000000000000000008110156103bc5773ffffffffffffffffffffffffffffffffffffffff1690565b90611b4491611da7565b91611afe565b919094929473ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8416101594620f42400390611b908288611c66565b8615611c3457611ba1848684611a0b565b975b888210611bfd575050958691620f4240611bbd8284611cf8565b9209611beb575b945b15611be25791611bdf92038060ff1d9081011890611f0f565b90565b611bdf92611a59565b600191500180156119f8578590611bc4565b96975091505082158215176103bc578515611c2457611c1d908284611971565b8095611bc6565b611c2f908284611ad1565b611c1d565b8185038060ff1d9081011860016c01000000000000000000000000611c598388611f0f565b9287091515160197611ba3565b81810291620f424081838504148315170215611c87575050620f4240900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620f42409284098481108501900392099080620f424011156119f857828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c261390290565b90620f424082029181620f4240828504148215170215611d185750900490565b81620f42407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8184098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b908160601b91816c01000000000000000000000000828504148215170215611dcf5750900490565b816c010000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8184098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b81810292918115828504821417830215611e83575050900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff849284098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b818102917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff910981811082019003806c0100000000000000000000000011156119f85760a01b9060601c1790565b6024600080926020947f5339c29600000000000000000000000000000000000000000000000000000000835260010b6004525afa156103bc576000519056fea164736f6c634300081a000a000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88" ], "transaction": { "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", "to": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", - "gas": "0x13f8366", + "gas": "0x3b68e3", "value": "0x0", - "input": "0x66cfa0570000000000000000000000000000000000000000000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112e429609defd54e26000500000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000537b60e08060405260408161533b803803809161001a8285610276565b8339810103126102065780516001600160a01b03811691828203610206576001600160a01b039061004d906020016102af565b1690811561026057600080546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36080526312a9293f60e21b8152602081600481855afa9081156102135760009161021f575b506001600160a01b031660a05260405163c45a015560e01b815290602090829060049082905afa908115610213576000916101d4575b5060c05260405161507790816102c4823960805181818161049801528181610ebd01528181611cf401528181611d8a015281816121d20152818161222b015281816124a101528181612650015281816126c301528181612704015281816128e10152818161296501528181612b3f01528181613aaa01528181613eb801528181613eff015261450a015260a05181818160320152818161116901528181611ed40152613af8015260c05181818161035d0152818161092a015281816120d60152818161236f01528181612c0101528181613f9f01526142500152f35b90506020813d60201161020b575b816101ef60209383610276565b8101031261020657610200906102af565b386100f8565b600080fd5b3d91506101e2565b6040513d6000823e3d90fd5b90506020813d602011610258575b8161023a60209383610276565b81010312610206576004916102506020926102af565b9150916100c2565b3d915061022d565b631e4fbdf760e01b600052600060045260246000fd5b601f909101601f19168101906001600160401b0382119082101761029957604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036102065756fe60a0806040526004361015610084575b50361561001b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361005a57005b7f2f1ca35a0000000000000000000000000000000000000000000000000000000060005260046000fd5b60003560e01c9081630e24818e146115c257508063100d1c78146115a05780631376f4c4146114485780631e5eb1d0146113eb578063219f5d17146113185780632c45e5a01461124b57806332279096146111da578063408477631461118d5780634aa4a4fc1461111e5780634d0a0c97146111085780634f46cde9146110e657806353189324146110815780636163cc1b1461105c57806370f3c18014610fee578063715018a614610f525780637d251ee314610ee15780637f1e9ef614610e725780638831645614610d925780638ba1e27314610cf55780638da5cb5b14610ca357806399642fb114610b06578063ab1df9a614610aaf578063af3ed586146109b8578063b429afeb1461094e578063c45a0155146108df578063c747e2b314610762578063f2fde38b14610670578063f3e17b87146103f8578063fa461e33146102e35763fc0e92cc146101db573861000f565b346102de576102607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5761021436611765565b610164356101c43567ffffffffffffffff81116102de57610239903690600401611884565b90610204359260ff841684036102de576102da946102716102809561025d84611cae565b610244359061022435906101e43586612962565b6101a43591610184359161286d565b90604094929451948486957f811d4760f1a92875eb76dbd3dc2359544b2f6a000ba5b78784c0b105b3469bd0600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b0390f35b600080fd5b346102de5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5760043560443567ffffffffffffffff81116102de57610335903690600401611884565b5090604051606083600037606060002074ff00000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000176000526020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016906040528033036102de5760008213156103e4576103e292309035611eba565b005b6103e2926024359250309060200135611eba565b61040136611949565b61040c93919361281e565b8083036102de5760005b8381106104555750610450907fb398a28fa151438e6fbfb63bb5dcf5aab5446ef8c4274546890ea394dc1993e29460405194859485611bdd565b0390a1005b610468610463828686611b4d565b611bbc565b9061047c610477828589611b4d565b611b8c565b1561061f5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169173ffffffffffffffffffffffffffffffffffffffff8116928084146105c15760009182918260405160208101927f095ea7b3000000000000000000000000000000000000000000000000000000008452602482015281604482015260448152610523606482611683565b51925af13d1561061a573d67ffffffffffffffff81116105eb576040519061057360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160183611683565b8152600060203d92013e5b6105c15760019160005260036020526040600020827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555b01610416565b7f78f200710000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61057e565b73ffffffffffffffffffffffffffffffffffffffff60019216600052600360205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690556105bb565b346102de5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5773ffffffffffffffffffffffffffffffffffffffff6106bc611628565b6106c461281e565b1680156107335773ffffffffffffffffffffffffffffffffffffffff600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57600061079661281e565b670de0b6b3a76400006bffffffffffffffffffffffff6107b4611c93565b1610156108dc5773ffffffffffffffffffffffffffffffffffffffff6107d8611b99565b16156108dc5773ffffffffffffffffffffffffffffffffffffffff6107fb611b99565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015561082d611c93565b73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff00000000000000000000000000000000000000006001549260a01b169116176001557f42200c2a55e71251cd849a86c7ece1a42ddabecbb489150a136f6c0d239c7a5c61089a611b99565b6108a2611c93565b6040805173ffffffffffffffffffffffffffffffffffffffff9390931683526bffffffffffffffffffffffff91909116602083015290a180f35b80fd5b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102de5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5773ffffffffffffffffffffffffffffffffffffffff61099a611628565b166000526002602052602060ff604060002054166040519015158152f35b346102de576101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de576109f1366118b2565b6101043567ffffffffffffffff81116102de57610a12903690600401611884565b9091610144359160ff831683036102de576102da9382610a4e610a5b945195610a3a87611cae565b610184359061016435906101243589612962565b60e4359060c43590612bad565b906040949294519485947fc13e24d2b0a3bacd5d1a7c514125a1e27323abf7c86f6d36597f8752bbd7eed7600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102de576020610ad9610ac236611aa5565b938596959391935196610ad488611cae565b612abb565b604051917f9a5a8a32afd899e7f95003c6e21c9fab2d50e11992439d14472229180c60c7aa600080a28152f35b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57610b3a366118b2565b60c43567ffffffffffffffff81116102de57610c29610bef610c1f846040610b696102da963690600401611884565b60e4949194359461010435610bf8610b81875161260d565b9173ffffffffffffffffffffffffffffffffffffffff8351169989610be6838d9c73ffffffffffffffffffffffffffffffffffffffff6020890151169e8f9d602081019d8e91825180610c91575b50019e8f91825180610c7f575b505191519261202f565b50508851611b11565b87528751611b11565b8652610c0381611e8a565b906080606082015160020b91015160020b8651918851936120a3565b9092525284612700565b9092919351926040519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b610c8b90303385611eba565b38610bdc565b610c9d90303387611eba565b38610bcf565b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b346102de5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57610d2c611628565b602435908160020b82036102de576044358060020b81036102de5760809273ffffffffffffffffffffffffffffffffffffffff92610d71926084359260643592612d62565b92919290845190604051948552602085015215156040840152166060820152f35b6101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de576102da610e18610dcc36611765565b610e1373ffffffffffffffffffffffffffffffffffffffff82511673ffffffffffffffffffffffffffffffffffffffff60208401511660a08401519060c085015192612688565b61246e565b90604094929451948486957f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a84665600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102de576020610f15610f25610ef736611a17565b918994999b939b989598979697519b610f0f8d611cae565b8c612962565b610f1f815161260d565b90613ee3565b604051917f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a28152f35b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57610f8961281e565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102de576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57611027366118b2565b610104359067ffffffffffffffff82116102de57610a5b61104f6102da933690600401611884565b90835193610a4e85611cae565b346102de576020610f2561106f36611aa5565b938596959391935196610f1588611cae565b346102de5760406110af6110b4611097366119b9565b9186949698939851986110a98a611cae565b89612962565b612afc565b908351927f9a5a8a32afd899e7f95003c6e21c9fab2d50e11992439d14472229180c60c7aa600080a282526020820152f35b346102de5760406110b46110f936611725565b9082939251936110af85611cae565b346102de576020610ad4610ad9610ef736611a17565b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102de5760406111a36111a8611097366119b9565b611d72565b908351927f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a282526020820152f35b346102de576101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5761121336611765565b6101c4356101643567ffffffffffffffff82116102de576102da9261123f610280933690600401611884565b92909161027182611cae565b61125436611949565b929061125e61281e565b8383036102de5760005b8381106112a257507f2077016b05a05d3f12f6d9a8ca3667fbecaf29eba7083f7e2d1d70dc3709f635936104509160405194859485611bdd565b806112b36104776001938886611b4d565b73ffffffffffffffffffffffffffffffffffffffff6112d6610463848989611b4d565b16600052600260205260406000209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008354169115151617905501611268565b60c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de576102da61134e366118b2565b61139781519161135d8361260d565b73ffffffffffffffffffffffffffffffffffffffff602081835116920151169161139260208201516040830151908585612688565b612700565b906040949294519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102de5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de576001546040805173ffffffffffffffffffffffffffffffffffffffff8316815260a09290921c602083015290f35b6101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5761147c36611765565b6101643567ffffffffffffffff81116102de576102da916114a4610e18923690600401611884565b9061153e61018435926101a435926114bb86611e8a565b61152160a0880195865180611575575b50610bef60c08a0198895180611547575b50610be6838273ffffffffffffffffffffffffffffffffffffffff8851168d8d73ffffffffffffffffffffffffffffffffffffffff60208c015116905191519261202f565b90818752606088015160020b608089015160020b908751926120a3565b9092525261246e565b61156f9073ffffffffffffffffffffffffffffffffffffffff60208801511630903390611eba565b8d6114dc565b61159a9073ffffffffffffffffffffffffffffffffffffffff85511630903390611eba565b8b6114cb565b346102de5760406111a86115b336611725565b9082939251936111a385611cae565b346102de5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102de5760209073ffffffffffffffffffffffffffffffffffffffff611611611628565b166000526003825260ff6040600020541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102de57565b60a0810190811067ffffffffffffffff8211176105eb57604052565b60c0810190811067ffffffffffffffff8211176105eb57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105eb57604052565b91908260a09103126102de576040516116dc8161164b565b80928035825260208101356fffffffffffffffffffffffffffffffff811681036102de576080918291602085015260408101356040850152606081013560608501520135910152565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102de5761175a9060046116c4565b9060a4359060c43590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6101609101126102de5760405190610160820182811067ffffffffffffffff8211176105eb576040528160043573ffffffffffffffffffffffffffffffffffffffff811681036102de57815260243573ffffffffffffffffffffffffffffffffffffffff811681036102de57602082015260443562ffffff811681036102de5760408201526064358060020b81036102de5760608201526084358060020b81036102de57608082015260a43560a082015260c43560c082015260e43560e0820152610104356101008201526101243573ffffffffffffffffffffffffffffffffffffffff811681036102de5761012082015261014061014435910152565b9181601f840112156102de5782359167ffffffffffffffff83116102de57602083818601950101116102de57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c09101126102de57604051906118e982611667565b6004358252602435602083015260443560408301526064356060830152608435608083015260a43560a0830152565b9181601f840112156102de5782359167ffffffffffffffff83116102de576020808501948460051b0101116102de57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102de5760043567ffffffffffffffff81116102de578161199291600401611918565b929092916024359067ffffffffffffffff82116102de576119b591600401611918565b9091565b6101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102de576119ef9060046116c4565b9060a4359060c4359060e435906101043560ff811681036102de579061012435906101443590565b6101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102de57611a4d8160046116c4565b9160a43580151581036102de579160c4359160e43591610104359067ffffffffffffffff82116102de57611a8391600401611884565b909161012435906101443560ff811681036102de579061016435906101843590565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102de57611adb8160046116c4565b9160a43580151581036102de579160c4359160e43591610104359067ffffffffffffffff82116102de576119b591600401611884565b91908203918211611b1e57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611b5d5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3580151581036102de5790565b60043573ffffffffffffffffffffffffffffffffffffffff811681036102de5790565b3573ffffffffffffffffffffffffffffffffffffffff811681036102de5790565b939293826040820160408352526060810191926000905b808210611c43575050808203602091820152838252019291600091505b808210611c1e5750505090565b90919283359081151582036102de576020809160019315158152019401920190611c11565b90919284359073ffffffffffffffffffffffffffffffffffffffff821682036102de5773ffffffffffffffffffffffffffffffffffffffff91909116815260209485019401929160010190611bf4565b6024356bffffffffffffffffffffffff811681036102de5790565b33600052600260205260ff60406000205416611d6f577f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa15611d655773ffffffffffffffffffffffffffffffffffffffff600051163303611d3b57565b7fc19f17a90000000000000000000000000000000000000000000000000000000060005260046000fd5b3d6000803e3d6000fd5b50565b919290825193611def611d848661260d565b91611db07f000000000000000000000000000000000000000000000000000000000000000096876139d5565b505073ffffffffffffffffffffffffffffffffffffffff83511693602084019473ffffffffffffffffffffffffffffffffffffffff8651169089613a3f565b91602060006024818699869b7f6352211e0000000000000000000000000000000000000000000000000000000083526004525afa15611d6557600051918281611e62575b50505081611e4057505050565b73ffffffffffffffffffffffffffffffffffffffff611e60935116613ae1565b565b73ffffffffffffffffffffffffffffffffffffffff611e82935116613ae1565b388082611e33565b6040516060810181811067ffffffffffffffff8211176105eb576000916040918252828152826020820152015290565b92919073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168073ffffffffffffffffffffffffffffffffffffffff86161480612026575b611f9a575b5073ffffffffffffffffffffffffffffffffffffffff81163003611f405750611e6092613b96565b601c60006020949560649382956040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615611f8c576000606052604052565b637939f4246000526004601cfd5b348403611ffc5760006004818681947fd0e30db00000000000000000000000000000000000000000000000000000000083525af1156102de573073ffffffffffffffffffffffffffffffffffffffff831614611ff65738611f18565b50505050565b7fa11a990f0000000000000000000000000000000000000000000000000000000060005260046000fd5b50341515611f13565b959491939092956120408583613be1565b61204a8784613be1565b73ffffffffffffffffffffffffffffffffffffffff60015416918061208e575b505081612079575b5050509190565b8161208693960395613ae1565b388080612072565b828161209c93970396613ae1565b388061206a565b96909590949293928782612331578492508591509273ffffffffffffffffffffffffffffffffffffffff612161612169957f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b169788612d62565b50506080516000959092919081612256575b50600003918286180280921801931801925b836121f8575b828061219d575050565b73ffffffffffffffffffffffffffffffffffffffff6020611e609301511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613e0e565b6122518473ffffffffffffffffffffffffffffffffffffffff83511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613e0e565b612193565b95507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08701956040600088519260608a5282517f128acb080000000000000000000000000000000000000000000000000000000081523060048201528760248201528560448201528773fffd8963efd1fc6a506488495d951d53639afb810273fffd8963efd1fc6a506488495d951d5263988d2518606482015260a060848201528260c48c518d60208201908160a487019160045afa5001925af160403d141615611d6557600051848160205118021860000396523861217b565b92909396612418929561241f979873ffffffffffffffffffffffffffffffffffffffff808061240d612407612400836123fa61236c8f613d1e565b9d7f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b16614532565b509761456e565b9761456e565b1695169316916148c8565b9086614af9565b5061244273ffffffffffffffffffffffffffffffffffffffff8351163090614b8b565b906124673073ffffffffffffffffffffffffffffffffffffffff602086015116614b8b565b919261218d565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820180516388316456825290937f000000000000000000000000000000000000000000000000000000000000000093608060006101647ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc840182895af1156125d7576000519460205194604051946060519852604052600060605286938095969773ffffffffffffffffffffffffffffffffffffffff610120850151169160a08501519060c08601519184818310612592575b505050808210612557575b5050505050565b61258173ffffffffffffffffffffffffffffffffffffffff80602061258898015116951685613d66565b0391613ae1565b3880808080612550565b6125cf9273ffffffffffffffffffffffffffffffffffffffff8951169261258173ffffffffffffffffffffffffffffffffffffffff8a1685613d66565b388084612545565b3d6000fd5b604051906125e982611667565b600060a0838281528260208201528260408201528260608201528260808201520152565b6126156125dc565b5061261e6125dc565b907f99fbab880000000000000000000000000000000000000000000000000000000060005260045261010081602460007f00000000000000000000000000000000000000000000000000000000000000005afa1561268457806101006040920182520190565b3d90fd5b909291806126e9575b50508061269c575050565b611e60916126ac82303384611eba565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613e0e565b6126f9916126ac82303384611eba565b3880612691565b90927f0000000000000000000000000000000000000000000000000000000000000000604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840180519063219f5d1781526060600060c47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc890182885af115611d6557526000519460205160405191604052819581979860406020830151920151928281106127f2575b5050508082106127bd5750505050565b6127e073ffffffffffffffffffffffffffffffffffffffff6127e9951684613d66565b03903390613ae1565b38808080611ff6565b612816926127e073ffffffffffffffffffffffffffffffffffffffff891684613d66565b3880806127ad565b73ffffffffffffffffffffffffffffffffffffffff60005416330361283f57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b939491926128ab9193610140860151604051906128898261164b565b8682526000602083015260006040830152600060608301526080820152613e4b565b9692509390507f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa15611d655761295c9461294d9373ffffffffffffffffffffffffffffffffffffffff6000511661012087015261293786611e8a565b606087015160020b608088015160020b916120a3565b60c083015260a082015261246e565b90919293565b907f00000000000000000000000000000000000000000000000000000000000000007f081812fc000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa15611d655760005173ffffffffffffffffffffffffffffffffffffffff163014612ab3577f6352211e000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa15611d65576000517fe985e9c5000000000000000000000000000000000000000000000000000000006000526004523060245260206000604481845afa15611d65576000516000602452612ab357600095869560c4958794604051967f7ac2ff7b000000000000000000000000000000000000000000000000000000008852306004890152602488015260448701526064860152608485015260a48401525af115611d6557565b505050505050565b95949192612af693611e609592885198612ad48a61260d565b906fffffffffffffffffffffffffffffffff60a0830151166020820152613ee3565b926144da565b9291612b0a91845194613e4b565b949092917f6352211e0000000000000000000000000000000000000000000000000000000060005281600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa15611d655785612b879360005190868281612b9c575b50505081612b8b575b5050506144da565b9190565b612b9492613ae1565b388581612b7f565b612ba592613ae1565b388682612b76565b9273ffffffffffffffffffffffffffffffffffffffff9291612d0b612d20968594938594612bdb895161260d565b94612be586611e8a565b6040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606083206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b209152612cf990612c7a908a9073ffffffffffffffffffffffffffffffffffffffff166123fa565b50936060890193612c8e855160020b61456e565b9560808b01968b6fffffffffffffffffffffffffffffffff60a0612cb58b5160020b61456e565b9201511691808210828218028091189118928e81168f8316811115600014612d2757505091612ce392614bc7565b505b8d518b8b511660208c019e8f511691613a3f565b9390925160020b905160020b916120a3565b60408701526020860152511691511691612700565b9192909190565b8f85161015600014612d545790818f9284612d4e96612d4592614bc7565b50031690614fdd565b50612ce5565b50612d4e92038d1690614fdd565b929094939460006080526000958215806139cd575b6139b6578360020b8260020b908082129182159261398c575b50811561397f575b5061395557843b1561394757604051610120810181811067ffffffffffffffff8211176105eb576040526000815260006020820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e08201526000610100820152612e0886614532565b969093849760408401527f1a6865020000000000000000000000000000000000000000000000000000000060005260206000600481855afa156102de57600051907fddca3f430000000000000000000000000000000000000000000000000000000060005260206000600481865afa156102de5762ffffff60005116907fd0c93a7c0000000000000000000000000000000000000000000000000000000060005260206000600481875afa156102de57612eee92612ee89260005191875288602088015289606088015287608088015260e087015261010086015261456e565b9661456e565b938660a08401528460c0840152612f4a73ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff891673ffffffffffffffffffffffffffffffffffffffff8416878a6148c8565b608052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000906000905b600084604081015160020b9461010082015160020b9460805160001461386b5783868807128688050360081d9160010b8260010b1460001461385b575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260ff8399898881830712910503161b01165b801561381d577f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a17955b94819661308582828560081b010261456e565b94608051156000146137c1576130d573ffffffffffffffffffffffffffffffffffffffff6020870151166fffffffffffffffffffffffffffffffff8751166080880151908960e08a015193614c18565b92919690969260608201510196608082015103975b73ffffffffffffffffffffffffffffffffffffffff808516911681036137b0576131259060a083015160c06080511515940151918b8b6148c8565b15151461373b57505050505050505050505b80519260208201519260608301519660808401519260805115600014613471575073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff861610613377575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851610156131d4575b505050906131ce9185614a08565b91030191565b9196509291975085519286602081015160c08201519560e08301519081620f424003908060601b8481046060870151019061321360a088015183614fdd565b9a61322c6132268689620f424002614a47565b85614fdd565b9561324360a060808b01519889019a015186614fdd565b890396871115613369576131ce9c86613312966132638561335c9d614e75565b930204900303940290620f42400204900360011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b058181119082180218978a89038060ff1d908101189060016c0100000000000000000000000060e0613348858a614fdd565b930151620f42400393880915151601614dc6565b91030196909138806131c0565b63202368086000526004601cfd5b99975061339761339060e0850151620f42400384614d34565b8686614a80565b9773ffffffffffffffffffffffffffffffffffffffff8b1673ffffffffffffffffffffffffffffffffffffffff8a16106000146133ee575073ffffffffffffffffffffffffffffffffffffffff819a5b905061318c565b99939185856134409261343882879c969c038060ff1d908101186134128186614fdd565b60016c0100000000000000000000000060e08c0151620f42400393880915151601614dc6565b900394614a08565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528860608601528360808601526133e7565b905073ffffffffffffffffffffffffffffffffffffffff819893989792971673ffffffffffffffffffffffffffffffffffffffff86161161366e575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851611156134f9575b505050906131ce9185038060ff1d9081011890614fdd565b9196509291975085519260208701519360c08801519460e08901519182620f4240039260608b0151908260601b908985870283620f42400204840192048203928311156133695784868e956135946131ce9d61358c6135866136619c60a08c608061357561356e6136389e8585015190614fdd565b9b8a614fdd565b910151019c0151620f424002614a47565b84614fdd565b890398614e75565b93020401039160011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b0481811090821802189760e0613653868d8c6149ba565b910151620f42400390614dc6565b91030196909138806134e1565b99975061368e61368760e0850151620f42400384614d34565b8686614921565b9773ffffffffffffffffffffffffffffffffffffffff8b8116908a16106136cf575073ffffffffffffffffffffffffffffffffffffffff819a5b90506134ad565b99939161370a906136f76136e78886899c969c6149ba565b60e0870151620f42400390614dc6565b90039285038060ff1d9081011886614fdd565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528360608601528860808601526136c8565b7ff30dba9300000000000000000000000000000000000000000000000000000000815283838660081b010260020b6004526040816024818b5afa156108dc5760205190608051900318608051018a51018a5260208a01526080519260081b010203604087015260608601526080850152612f74565b505050505050505050505050613137565b9361380673ffffffffffffffffffffffffffffffffffffffff6020830151166fffffffffffffffffffffffffffffffff8351166060840151908960e086015193614c18565b9691929060608201510396608082015101976130ea565b50919450507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160010b613851818361502b565b9390859085612fe6565b50613866818561502b565b612fb1565b60018487890712878905030160020b60081d9160010b8260010b14600014613937575b60018082988887818307129105030160ff161b8403165b801561391757808403167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1792831c63d76453e004161a1795613072565b50905060019194500160010b61392d818361502b565b93908590856138a5565b50613942818561502b565b61388e565b6301ac05a56000526004601cfd5b7f30673a1b0000000000000000000000000000000000000000000000000000000060005260046000fd5b620d89e891501338612d98565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761813915038612d90565b505050505090506000906000906000608052600090565b508015612d77565b6040600060a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0850193827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc865197630c49ccbe885201915af115611d6557526000519060205190565b60006084604092969594968351907ffc6f786500000000000000000000000000000000000000000000000000000000825260048201523060248201526fffffffffffffffffffffffffffffffff60448201526fffffffffffffffffffffffffffffffff6064820152827f00000000000000000000000000000000000000000000000000000000000000005af115611d65576119b593600051906020519261202f565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908173ffffffffffffffffffffffffffffffffffffffff821614600014613b8e575060006024818080947f2e1a7d4d000000000000000000000000000000000000000000000000000000008252876004525af1156102de57600080809338935af115613b8057565b63b12d13eb6000526004601cfd5b611e60939291505b6010600060449260209582956014526034526fa9059cbb00000000000000000000000082525af13d15600160005114171615613bd3576000603452565b6390b8ec186000526004601cfd5b90818110613cf45780613bf2575050565b670de0b6b3a7640000820291818115670de0b6b3a764000083860414170215613c50575090045b60015460a01c10613c2657565b7feab9763d0000000000000000000000000000000000000000000000000000000060005260046000fd5b81670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613ce6578390048060030260021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600184848303049480600003040192119003021702613c19565b63ae47f7026000526004601cfd5b7f5945ea560000000000000000000000000000000000000000000000000000000060005260046000fd5b3560601c9081600052600360205260ff6040600020541615613d3c57565b7fe1cf4d030000000000000000000000000000000000000000000000000000000060005260046000fd5b6044601060008093602095601452816034526f095ea7b300000000000000000000000082525af13d15600160005114171615613da3576000603452565b633e3f8f736000526004601cfd5b60446010600080936020956014527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6034526f095ea7b300000000000000000000000082525af13d15600160005114171615613da3576000603452565b6010600060449260209582956014526034526f095ea7b300000000000000000000000082525af13d15600160005114171615613da3576000603452565b60a092613edc94926119b592805190613e638261260d565b9173ffffffffffffffffffffffffffffffffffffffff8351169889926fffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff6020870151169a8b9601511660208201527f00000000000000000000000000000000000000000000000000000000000000006139d5565b5050613a3f565b929695909180156144ca5760608401956000875197525b613f6a7f000000000000000000000000000000000000000000000000000000000000000095613f2981886139d5565b5050519673ffffffffffffffffffffffffffffffffffffffff8651169a602087019b73ffffffffffffffffffffffffffffffffffffffff8d5116908a613a3f565b9490921561421e57613f7b90611e8a565b928061415c5750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff166000928261407e575b505050600060209373ffffffffffffffffffffffffffffffffffffffff8294602494905b01995116957f6352211e0000000000000000000000000000000000000000000000000000000083526004525afa15611d6557836140769160005190613ae1565b8210613cf457565b604091929493507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000910192835195606085528351907f128acb080000000000000000000000000000000000000000000000000000000082523060048301526001602483015260448201526401000276a4606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c487516020810160a48601818b60045afa500193165af160403d141615611d6557602051929052906000908103908373ffffffffffffffffffffffffffffffffffffffff614012565b9092915061416983613d1e565b9060008080601473ffffffffffffffffffffffffffffffffffffffff806020890151169751169461419a3089614b8b565b986141a58888613db1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af115614216575060009460249461420f879561420860209a9673ffffffffffffffffffffffffffffffffffffffff96613d66565b3090614b8b565b0390614036565b3d81803e3d90fd5b985061422c89949294611e8a565b92806144185750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff166000928261432c575b505050600060209373ffffffffffffffffffffffffffffffffffffffff8294602494905b01995116957f6352211e0000000000000000000000000000000000000000000000000000000083526004525afa15611d6557836143279160005190613ae1565b614076565b604091929493507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000910192835195606085528351907f128acb08000000000000000000000000000000000000000000000000000000008252306004830152836024830152604482015273fffd8963efd1fc6a506488495d951d5263988d25606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c487516020810160a48601818b60045afa500193165af160403d141615611d6557600080519390915290918103908373ffffffffffffffffffffffffffffffffffffffff6142c3565b91509161442483613d1e565b9060008080601473ffffffffffffffffffffffffffffffffffffffff80602087015116955116966144553089614b8b565b986144608888613db1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af11561421657506000946024946144c3879561420860209a9673ffffffffffffffffffffffffffffffffffffffff96613d66565b03906142e7565b6040840195600087519752613efa565b7f42966c6800000000000000000000000000000000000000000000000000000000600052600452600080602481807f00000000000000000000000000000000000000000000000000000000000000005af115611d6557565b60006004816040937f3850c7bd0000000000000000000000000000000000000000000000000000000082525afa156102de576000519060205190565b8060ff1d81810118620d89e881116148b05763ffffffff91600182167001fffcb933bd6fad37aa2d162d1a59400102700100000000000000000000000000000000189160028116614894575b60048116614878575b6008811661485c575b60108116614840575b60208116614824575b60408116614808575b608081166147ec575b61010081166147d0575b61020081166147b4575b6104008116614798575b610800811661477c575b6110008116614760575b6120008116614744575b6140008116614728575b618000811661470c575b6201000081166146f0575b6202000081166146d5575b6204000081166146ba575b62080000166146a1575b60001261467a575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04614673565b6b048a170391f7dc42444e8fa290910260801c9061466b565b6d2216e584f5fa1ea926041bedfe9890920260801c91614661565b916e5d6af8dedb81196699c329225ee6040260801c91614656565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161464b565b916f31be135f97d08fd981231505542fcfa60260801c91614640565b916f70d869a156d2a1b890bb3df62baf32f70260801c91614636565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161462c565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91614622565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91614618565b916ff3392b0822b70005940c7a398e4b70f30260801c9161460e565b916ff987a7253ac413176f2b074cf7815e540260801c91614604565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c916145fa565b916ffe5dee046a99a2a811c461f1969c30530260801c916145f0565b916fff2ea16466c96a3843ec78b326b528610260801c916145e7565b916fff973b41fa98c081472e6896dfb254c00260801c916145de565b916fffcb9843d60f6159c9db58835c9266440260801c916145d5565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916145cc565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916145c3565b916ffff97272373d413259a46990580e213a0260801c916145ba565b6308c379a0600052602080526101546041526045601cfd5b9193918385116148dc575050505050600090565b8285106148ed575050505050600190565b614910936148fe8661490793614fdd565b90860390614fdd565b93820390614f36565b1090565b91908201809211611b1e57565b919081156149b55760601b918082028183820414614969575b50829161495d9173ffffffffffffffffffffffffffffffffffffffff9404614914565b80820615159104011690565b830183811061493a57915061497f828285614f36565b920961499f575b73ffffffffffffffffffffffffffffffffffffffff1690565b600101806149865763ae47f7026000526004601cfd5b505090565b918282108284180280808518931893146102de5760019060601b928281036149f973ffffffffffffffffffffffffffffffffffffffff83168287614f36565b94098284061715151691040190565b818118818310028082189392811891146102de57614a43918373ffffffffffffffffffffffffffffffffffffffff831692039060601b614f36565b0490565b8115614a51570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9073ffffffffffffffffffffffffffffffffffffffff90614ab3938060a01c15600014614ae95760601b04915b16614914565b740100000000000000000000000000000000000000008110156102de5773ffffffffffffffffffffffffffffffffffffffff1690565b90614af391614e75565b91614aad565b6000601473ffffffffffffffffffffffffffffffffffffffff829397959496978180602083015116915116958682180280911895181694614b3a3087614b8b565b97614b458887613db1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af115611d6557614b879261420891613d66565b0390565b6024600080926020947f70a082310000000000000000000000000000000000000000000000000000000083526004525afa156102de5760005190565b9173ffffffffffffffffffffffffffffffffffffffff91614c11917bffffffffffffffffffffffffffffffff00000000000000000000000084868185169403169160601b16614f36565b9116900490565b919094929473ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8416101594620f42400390614c5e8288614d34565b8615614d0257614c6f8486846149ba565b975b888210614ccb575050958691620f4240614c8b8284614dc6565b9209614cb9575b945b15614cb05791614cad92038060ff1d9081011890614fdd565b90565b614cad92614a08565b60019150018015613ce6578590614c92565b96975091505082158215176102de578515614cf257614ceb908284614921565b8095614c94565b614cfd908284614a80565b614ceb565b8185038060ff1d9081011860016c01000000000000000000000000614d278388614fdd565b9287091515160197614c71565b81810291620f424081838504148315170215614d55575050620f4240900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620f42409284098481108501900392099080620f42401115613ce657828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c261390290565b90620f424082029181620f4240828504148215170215614de65750900490565b81620f42407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613ce657839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b908160601b91816c01000000000000000000000000828504148215170215614e9d5750900490565b816c010000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613ce657839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b81810292918115828504821417830215614f51575050900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84928409858110860190039209908260000383169281811115613ce657839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b818102917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff910981811082019003806c010000000000000000000000001115613ce65760a01b9060601c1790565b6024600080926020947f5339c29600000000000000000000000000000000000000000000000000000000835260010b6004525afa156102de576000519056fea164736f6c634300081a000a000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b31120000000000", - "nonce": "0x6e", + "input": "0x66cfa0570000000000000000000000000000000000000000000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b311225946149e8de3060290000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000215e60e08060405260208161213e803803809161001a828561013c565b83398101031261013757516001600160a01b03811690818103610137576080526040516312a9293f60e21b8152602081600481855afa91821561010e5760049260209260009161011a575b506001600160a01b031660a05260405163c45a015560e01b815292839182905afa90811561010e576000916100df575b5060c052604051611fa99081610195823960805181610654015260a0518181816103d8015281816106c101526106ff015260c05181818161019e015281816104ff01526105e50152f35b610101915060203d602011610107575b6100f9818361013c565b810190610175565b38610095565b503d6100ef565b6040513d6000823e3d90fd5b6101319150833d8511610107576100f9818361013c565b38610065565b600080fd5b601f909101601f19168101906001600160401b0382119082101761015f57604052565b634e487b7160e01b600052604160045260246000fd5b9081602091031261013757516001600160a01b0381168103610137579056fe60a080604052600436101561042a575b5036156103c157346103bc5760003560601c60143560601c9060313560f81c9060323560601c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63601838584180285189061008b6100833373ffffffffffffffffffffffffffffffffffffffff851661080b565b303385610847565b826014527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6034526f095ea7b3000000000000000000000000600052602060006044601082865af13d156001600051141716156103ae57600080918160345260405181605a82378260463560601c5af11561035f576044601060008093602095601452816034526f095ea7b300000000000000000000000082525af13d156001600051141716156103ae576000603452610145308261080b565b61014f308561080b565b90604051906060820182811067ffffffffffffffff82111761037f5760405283825285602083015260283560e81c60408301526040519474ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606083206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016956040526000146103695761023681610220338961080b565b8501905b602e3560e81d602b3560e81d896108a0565b50506080519560009382610285575b50506000039485831802809218019318019180610273575b50508061026657005b610271913390611544565b005b61027e913390611544565b388061025d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09194500192604060008551926060875282517f128acb080000000000000000000000000000000000000000000000000000000081523060048201528a60248201528560448201528a73fffd8963efd1fc6a506488495d951d53639afb810273fffd8963efd1fc6a506488495d951d5263988d2518606482015260a060848201528260c489516020810160a48501818d60045afa5001925af160403d14161561035f57600051878160205118021860000393523880610245565b3d6000803e3d6000fd5b610236610376338661080b565b82018490610224565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b633e3f8f736000526004601cfd5b600080fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361040057005b7f2f1ca35a0000000000000000000000000000000000000000000000000000000060005260046000fd5b60003560e01c9081634aa4a4fc14610678575080637f1e9ef614610609578063c45a01551461059a5763fa461e3314610463573861000f565b346103bc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc5760443560043567ffffffffffffffff82116103bc57366023830112156103bc5781600401359167ffffffffffffffff83116103bc57602481019260243691830101116103bc5760405190606084600037606060002074ff00000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000176000526020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016916040528133036103bc5760008313156105855750610271923090356106e5565b610271935060243592503090604401356106e5565b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103bc5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b92919073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168073ffffffffffffffffffffffffffffffffffffffff86161480610802575b610776575b5073ffffffffffffffffffffffffffffffffffffffff8116300361076d575061076b92611544565b565b61076b93610847565b3484036107d85760006004818681947fd0e30db00000000000000000000000000000000000000000000000000000000083525af1156103bc573073ffffffffffffffffffffffffffffffffffffffff8316146107d25738610743565b50505050565b7fa11a990f0000000000000000000000000000000000000000000000000000000060005260046000fd5b5034151561073e565b6024600080926020947f70a082310000000000000000000000000000000000000000000000000000000083526004525afa156103bc5760005190565b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615610892576000606052604052565b637939f4246000526004601cfd5b60006080819052959491939182158061153c575b611525578360020b8560020b90808212918215926114fb575b5081156114ee575b506114c457813b156114b657604051610120810181811067ffffffffffffffff82111761037f576040526000815260006020820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e082015260006101008201527f3850c7bd0000000000000000000000000000000000000000000000000000000060005260406000600481865afa156103bc576000519260205196849760408401527f1a6865020000000000000000000000000000000000000000000000000000000060005260206000600481855afa156103bc57600051907fddca3f430000000000000000000000000000000000000000000000000000000060005260206000600481865afa156103bc5762ffffff60005116907fd0c93a7c0000000000000000000000000000000000000000000000000000000060005260206000600481875afa156103bc57610a5a92610a549260005191875288602088015289606088015287608088015260e087015261010086015261158f565b9661158f565b938660a08401528460c0840152610ab673ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff891673ffffffffffffffffffffffffffffffffffffffff8416878a6118e9565b608052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000906000905b600084604081015160020b9461010082015160020b946080516000146113da5783868807128688050360081d9160010b8260010b146000146113ca575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260ff8399898881830712910503161b01165b801561138c577f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a17955b948196610bf182828560081b010261158f565b946080511560001461133057610c4173ffffffffffffffffffffffffffffffffffffffff6020870151166fffffffffffffffffffffffffffffffff8751166080880151908960e08a015193611b4a565b92919690969260608201510196608082015103975b73ffffffffffffffffffffffffffffffffffffffff8085169116810361131f57610c919060a083015160c06080511515940151918b8b6118e9565b1515146112a757505050505050505050505b80519260208201519260608301519660808401519260805115600014610fdd575073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff861610610ee3575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff85161015610d40575b50505090610d3a9185611a59565b91030191565b9196509291975085519286602081015160c08201519560e08301519081620f424003908060601b84810460608701510190610d7f60a088015183611f0f565b9a610d98610d928689620f424002611a98565b85611f0f565b95610daf60a060808b01519889019a015186611f0f565b890396871115610ed557610d3a9c86610e7e96610dcf85610ec89d611da7565b930204900303940290620f42400204900360011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b058181119082180218978a89038060ff1d908101189060016c0100000000000000000000000060e0610eb4858a611f0f565b930151620f42400393880915151601611cf8565b9103019690913880610d2c565b63202368086000526004601cfd5b999750610f03610efc60e0850151620f42400384611c66565b8686611ad1565b9773ffffffffffffffffffffffffffffffffffffffff8b1673ffffffffffffffffffffffffffffffffffffffff8a1610600014610f5a575073ffffffffffffffffffffffffffffffffffffffff819a5b9050610cf8565b9993918585610fac92610fa482879c969c038060ff1d90810118610f7e8186611f0f565b60016c0100000000000000000000000060e08c0151620f42400393880915151601611cf8565b900394611a59565b019573ffffffffffffffffffffffffffffffffffffffff848181166020860152886060860152836080860152610f53565b905073ffffffffffffffffffffffffffffffffffffffff819893989792971673ffffffffffffffffffffffffffffffffffffffff8616116111da575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff85161115611065575b50505090610d3a9185038060ff1d9081011890611f0f565b9196509291975085519260208701519360c08801519460e08901519182620f4240039260608b0151908260601b908985870283620f4240020484019204820392831115610ed55784868e95611100610d3a9d6110f86110f26111cd9c60a08c60806110e16110da6111a49e8585015190611f0f565b9b8a611f0f565b910151019c0151620f424002611a98565b84611f0f565b890398611da7565b93020401039160011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b0481811090821802189760e06111bf868d8c611a0b565b910151620f42400390611cf8565b910301969091388061104d565b9997506111fa6111f360e0850151620f42400384611c66565b8686611971565b9773ffffffffffffffffffffffffffffffffffffffff8b8116908a161061123b575073ffffffffffffffffffffffffffffffffffffffff819a5b9050611019565b999391611276906112636112538886899c969c611a0b565b60e0870151620f42400390611cf8565b90039285038060ff1d9081011886611f0f565b019573ffffffffffffffffffffffffffffffffffffffff848181166020860152836060860152886080860152611234565b7ff30dba9300000000000000000000000000000000000000000000000000000000815283838660081b010260020b6004526040816024818b5afa1561131c5760205190608051900318608051018a51018a5260208a01526080519260081b010203604087015260608601526080850152610ae0565b80fd5b505050505050505050505050610ca3565b9361137573ffffffffffffffffffffffffffffffffffffffff6020830151166fffffffffffffffffffffffffffffffff8351166060840151908960e086015193611b4a565b969192906060820151039660808201510197610c56565b50919450507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160010b6113c08183611f5d565b9390859085610b52565b506113d58185611f5d565b610b1d565b60018487890712878905030160020b60081d9160010b8260010b146000146114a6575b60018082988887818307129105030160ff161b8403165b801561148657808403167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1792831c63d76453e004161a1795610bde565b50905060019194500160010b61149c8183611f5d565b9390859085611414565b506114b18185611f5d565b6113fd565b6301ac05a56000526004601cfd5b7f30673a1b0000000000000000000000000000000000000000000000000000000060005260046000fd5b620d89e8915013386108d5565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618139150386108cd565b505050505090506000906000906000608052600090565b5080156108b4565b6010600060449260209582956014526034526fa9059cbb00000000000000000000000082525af13d15600160005114171615611581576000603452565b6390b8ec186000526004601cfd5b8060ff1d81810118620d89e881116118d15763ffffffff91600182167001fffcb933bd6fad37aa2d162d1a594001027001000000000000000000000000000000001891600281166118b5575b60048116611899575b6008811661187d575b60108116611861575b60208116611845575b60408116611829575b6080811661180d575b61010081166117f1575b61020081166117d5575b61040081166117b9575b610800811661179d575b6110008116611781575b6120008116611765575b6140008116611749575b618000811661172d575b620100008116611711575b6202000081166116f6575b6204000081166116db575b62080000166116c2575b60001261169b575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04611694565b6b048a170391f7dc42444e8fa290910260801c9061168c565b6d2216e584f5fa1ea926041bedfe9890920260801c91611682565b916e5d6af8dedb81196699c329225ee6040260801c91611677565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161166c565b916f31be135f97d08fd981231505542fcfa60260801c91611661565b916f70d869a156d2a1b890bb3df62baf32f70260801c91611657565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161164d565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91611643565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91611639565b916ff3392b0822b70005940c7a398e4b70f30260801c9161162f565b916ff987a7253ac413176f2b074cf7815e540260801c91611625565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c9161161b565b916ffe5dee046a99a2a811c461f1969c30530260801c91611611565b916fff2ea16466c96a3843ec78b326b528610260801c91611608565b916fff973b41fa98c081472e6896dfb254c00260801c916115ff565b916fffcb9843d60f6159c9db58835c9266440260801c916115f6565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916115ed565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916115e4565b916ffff97272373d413259a46990580e213a0260801c916115db565b6308c379a0600052602080526101546041526045601cfd5b9193918385116118fd575050505050600090565b82851061190e575050505050600190565b6119319361191f8661192893611f0f565b90860390611f0f565b93820390611e68565b1090565b9190820180921161194257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908115611a065760601b9180820281838204146119b9575b5082916119ad9173ffffffffffffffffffffffffffffffffffffffff9404611935565b80820615159104011690565b830183811061198a5791506119cf828285611e68565b92096119ef575b73ffffffffffffffffffffffffffffffffffffffff1690565b600101806119d6575b63ae47f7026000526004601cfd5b505090565b918282108284180280808518931893146103bc5760019060601b92828103611a4a73ffffffffffffffffffffffffffffffffffffffff83168287611e68565b94098284061715151691040190565b818118818310028082189392811891146103bc57611a94918373ffffffffffffffffffffffffffffffffffffffff831692039060601b611e68565b0490565b8115611aa2570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9073ffffffffffffffffffffffffffffffffffffffff90611b04938060a01c15600014611b3a5760601b04915b16611935565b740100000000000000000000000000000000000000008110156103bc5773ffffffffffffffffffffffffffffffffffffffff1690565b90611b4491611da7565b91611afe565b919094929473ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8416101594620f42400390611b908288611c66565b8615611c3457611ba1848684611a0b565b975b888210611bfd575050958691620f4240611bbd8284611cf8565b9209611beb575b945b15611be25791611bdf92038060ff1d9081011890611f0f565b90565b611bdf92611a59565b600191500180156119f8578590611bc4565b96975091505082158215176103bc578515611c2457611c1d908284611971565b8095611bc6565b611c2f908284611ad1565b611c1d565b8185038060ff1d9081011860016c01000000000000000000000000611c598388611f0f565b9287091515160197611ba3565b81810291620f424081838504148315170215611c87575050620f4240900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620f42409284098481108501900392099080620f424011156119f857828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c261390290565b90620f424082029181620f4240828504148215170215611d185750900490565b81620f42407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8184098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b908160601b91816c01000000000000000000000000828504148215170215611dcf5750900490565b816c010000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8184098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b81810292918115828504821417830215611e83575050900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff849284098581108601900392099082600003831692818111156119f857839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b818102917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff910981811082019003806c0100000000000000000000000011156119f85760a01b9060601c1790565b6024600080926020947f5339c29600000000000000000000000000000000000000000000000000000000835260010b6004525afa156103bc576000519056fea164736f6c634300081a000a000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe880000", + "nonce": "0x73", "chainId": "0xa4b1" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x67ecabcc6ed9d3ec0b381e2d79bfd9b53fd3cbf0134ad8df47faba1ee0966a08", + "hash": "0x35283a9517c1782c4217c5c0de3ac78f10f549f29f346b6f32969f354c37c095", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", + "function": "deploy(uint256,bytes32,bytes)", + "arguments": [ + "0", + "0xbeef63ae5a2102506e8a352a5bb32aa8b30b311269530b801afaa8bd16010080", + "0x60e0806040526040816152dd803803809161001a828561027d565b83398101031261020d5780516001600160a01b0381169182820361020d576001600160a01b039061004d906020016102b6565b1690811561026757600080546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36080526312a9293f60e21b8152602081600481855afa90811561021a57600091610226575b506001600160a01b031660a05260405163c45a015560e01b815290602090829060049082905afa90811561021a576000916101db575b5060c05260405161501290816102cb823960805181818161046c01528181610ef401528181611ef701528181611f50015281816121d0015281816123510152818161246b0152818161252f015281816125ce0152818161264101528181612682015281816128860152818161294201528181613dc001528181613e2701528181613ee8015261448f015260a05181818160320152818161106d01528181611bf701528181613a5f0152613b28015260c051818181610331015281816108fe01528181611dfb0152818161209e01528181612aec01528181613f44015261422a0152f35b90506020813d602011610212575b816101f66020938361027d565b8101031261020d57610207906102b6565b386100f8565b600080fd5b3d91506101e9565b6040513d6000823e3d90fd5b90506020813d60201161025f575b816102416020938361027d565b8101031261020d576004916102576020926102b6565b9150916100c2565b3d9150610234565b631e4fbdf760e01b600052600060045260246000fd5b601f909101601f19168101906001600160401b038211908210176102a057604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361020d5756fe60a0806040526004361015610084575b50361561001b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361005a57005b7f2f1ca35a0000000000000000000000000000000000000000000000000000000060005260046000fd5b60003560e01c9081630e24818e14611615575080631376f4c4146114bd5780631e5eb1d014611460578063218b625f1461140e578063219f5d171461133b5780632c45e5a01461126e5780632e5ad1e2146111ef578063322790961461117e57806343cfbe52146110915780634aa4a4fc1461102257806370f3c18014610fb4578063715018a614610f185780637f1e9ef614610ea95780638831645614610dc95780638ba1e27314610d2c5780638da5cb5b14610cda57806399642fb114610b3d578063a5fd1e3c14610a83578063af3ed5861461098c578063b429afeb14610922578063c45a0155146108b3578063c747e2b314610736578063f2fde38b14610644578063f3e17b87146103cc578063fa461e33146102b75763fc0e92cc146101af573861000f565b346102b2576102607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576101e836611717565b610164356101c43567ffffffffffffffff81116102b25761020d903690600401611836565b90610204359260ff841684036102b2576102ae94610245610254956102318461230b565b610244359061022435906101e4358661293f565b6101a4359161018435916127eb565b90604094929451948486957f811d4760f1a92875eb76dbd3dc2359544b2f6a000ba5b78784c0b105b3469bd0600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b0390f35b600080fd5b346102b25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25760043560443567ffffffffffffffff81116102b257610309903690600401611836565b5090604051606083600037606060002074ff00000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000176000526020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016906040528033036102b25760008213156103b8576103b692309035611bdd565b005b6103b6926024359250309060200135611bdd565b6103d5366119a1565b6103e093919361279c565b8083036102b25760005b8381106104295750610424907fb398a28fa151438e6fbfb63bb5dcf5aab5446ef8c4274546890ea394dc1993e29460405194859485611add565b0390a1005b61043c610437828686611a4d565b611abc565b9061045061044b828589611a4d565b611a8c565b156105f35773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169173ffffffffffffffffffffffffffffffffffffffff8116928084146105955760009182918260405160208101927f095ea7b30000000000000000000000000000000000000000000000000000000084526024820152816044820152604481526104f76064826116d6565b51925af13d156105ee573d67ffffffffffffffff81116105bf576040519061054760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601836116d6565b8152600060203d92013e5b6105955760019160005260036020526040600020827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555b016103ea565b7f78f200710000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610552565b73ffffffffffffffffffffffffffffffffffffffff60019216600052600360205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905561058f565b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25773ffffffffffffffffffffffffffffffffffffffff61069061167b565b61069861279c565b1680156107075773ffffffffffffffffffffffffffffffffffffffff600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257600061076a61279c565b670de0b6b3a76400006bffffffffffffffffffffffff610788611b92565b1610156108b05773ffffffffffffffffffffffffffffffffffffffff6107ac611a99565b16156108b05773ffffffffffffffffffffffffffffffffffffffff6107cf611a99565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155610801611b92565b73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff00000000000000000000000000000000000000006001549260a01b169116176001557f42200c2a55e71251cd849a86c7ece1a42ddabecbb489150a136f6c0d239c7a5c61086e611a99565b610876611b92565b6040805173ffffffffffffffffffffffffffffffffffffffff9390931683526bffffffffffffffffffffffff91909116602083015290a180f35b80fd5b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25773ffffffffffffffffffffffffffffffffffffffff61096e61167b565b166000526002602052602060ff604060002054166040519015158152f35b346102b2576101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576109c53661190a565b6101043567ffffffffffffffff81116102b2576109e6903690600401611836565b9091610144359160ff831683036102b2576102ae9382610a22610a2f945195610a0e8761230b565b61018435906101643590610124358961293f565b60e4359060c43590612a98565b906040949294519485947fc13e24d2b0a3bacd5d1a7c514125a1e27323abf7c86f6d36597f8752bbd7eed7600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102b2576101807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610abc36611864565b610ac46118dc565b90610124359060ff821682036102b25760409281610afe610b0b935194610aea8661230b565b61016435906101443590610104358861293f565b60c4359060a435906123c5565b908351927f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a282526020820152f35b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610b713661190a565b60c43567ffffffffffffffff81116102b257610c60610c26610c56846040610ba06102ae963690600401611836565b60e4949194359461010435610c2f610bb8875161258b565b9173ffffffffffffffffffffffffffffffffffffffff8351169989610c1d838d9c73ffffffffffffffffffffffffffffffffffffffff6020890151169e8f9d602081019d8e91825180610cc8575b50019e8f91825180610cb6575b5051915192611d54565b50508851611a11565b87528751611a11565b8652610c3a81611bad565b906080606082015160020b91015160020b865191885193611dc8565b909252528461267e565b9092919351926040519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b610cc290303385611bdd565b38610c13565b610cd490303387611bdd565b38610c06565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b346102b25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610d6361167b565b602435908160020b82036102b2576044358060020b81036102b25760809273ffffffffffffffffffffffffffffffffffffffff92610da8926084359260643592612c4d565b92919290845190604051948552602085015215156040840152166060820152f35b6101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576102ae610e4f610e0336611717565b610e4a73ffffffffffffffffffffffffffffffffffffffff82511673ffffffffffffffffffffffffffffffffffffffff60208401511660a08401519060c085015192612606565b61219d565b90604094929451948486957f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a84665600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610f4f61279c565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102b2576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610fed3661190a565b610104359067ffffffffffffffff82116102b257610a2f6110156102ae933690600401611836565b90835193610a228561230b565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b2576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576110ca36611864565b6110d26118eb565b906101043567ffffffffffffffff81116102b2576110f4903690600401611836565b6110ff9291926118fa565b90610164359360ff851685036102b257602095846111396111519651976111258961230b565b6101a435906101843590610144358b61293f565b60e4359160c4359161114b815161258b565b90613e4f565b604051917f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a28152f35b346102b2576101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576111b736611717565b6101c4356101643567ffffffffffffffff82116102b2576102ae926111e3610254933690600401611836565b9290916102458261230b565b346102b2576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25761122836611864565b6112306118eb565b906101043567ffffffffffffffff81116102b257602092611258611151923690600401611836565b906112616118fa565b928551956111398761230b565b611277366119a1565b929061128161279c565b8383036102b25760005b8381106112c557507f2077016b05a05d3f12f6d9a8ca3667fbecaf29eba7083f7e2d1d70dc3709f635936104249160405194859485611add565b806112d661044b6001938886611a4d565b73ffffffffffffffffffffffffffffffffffffffff6112f9610437848989611a4d565b16600052600260205260406000209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00835416911515161790550161128b565b60c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576102ae6113713661190a565b6113ba8151916113808361258b565b73ffffffffffffffffffffffffffffffffffffffff60208183511692015116916113b560208201516040830151908585612606565b61267e565b906040949294519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102b2576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257604061144936611864565b610b0b6114546118dc565b825192610afe8461230b565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576001546040805173ffffffffffffffffffffffffffffffffffffffff8316815260a09290921c602083015290f35b6101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576114f136611717565b6101643567ffffffffffffffff81116102b2576102ae91611519610e4f923690600401611836565b906115b361018435926101a4359261153086611bad565b61159660a08801958651806115ea575b50610c2660c08a01988951806115bc575b50610c1d838273ffffffffffffffffffffffffffffffffffffffff8851168d8d73ffffffffffffffffffffffffffffffffffffffff60208c0151169051915192611d54565b90818752606088015160020b608089015160020b90875192611dc8565b9092525261219d565b6115e49073ffffffffffffffffffffffffffffffffffffffff60208801511630903390611bdd565b8d611551565b61160f9073ffffffffffffffffffffffffffffffffffffffff85511630903390611bdd565b8b611540565b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25760209073ffffffffffffffffffffffffffffffffffffffff61166461167b565b166000526003825260ff6040600020541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102b257565b60a0810190811067ffffffffffffffff8211176105bf57604052565b60c0810190811067ffffffffffffffff8211176105bf57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105bf57604052565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6101609101126102b25760405190610160820182811067ffffffffffffffff8211176105bf576040528160043573ffffffffffffffffffffffffffffffffffffffff811681036102b257815260243573ffffffffffffffffffffffffffffffffffffffff811681036102b257602082015260443562ffffff811681036102b25760408201526064358060020b81036102b25760608201526084358060020b81036102b257608082015260a43560a082015260c43560c082015260e43560e0820152610104356101008201526101243573ffffffffffffffffffffffffffffffffffffffff811681036102b25761012082015261014061014435910152565b9181601f840112156102b25782359167ffffffffffffffff83116102b257602083818601950101116102b257565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a09101126102b2576040519061189b8261169e565b8160043581526024356fffffffffffffffffffffffffffffffff811681036102b2576020820152604435604082015260643560608201526080608435910152565b60e4359081151582036102b257565b60a4359081151582036102b257565b610124359081151582036102b257565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c09101126102b25760405190611941826116ba565b6004358252602435602083015260443560408301526064356060830152608435608083015260a43560a0830152565b9181601f840112156102b25782359167ffffffffffffffff83116102b2576020808501948460051b0101116102b257565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102b25760043567ffffffffffffffff81116102b257816119ea91600401611970565b929092916024359067ffffffffffffffff82116102b257611a0d91600401611970565b9091565b91908203918211611a1e57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611a5d5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3580151581036102b25790565b60043573ffffffffffffffffffffffffffffffffffffffff811681036102b25790565b3573ffffffffffffffffffffffffffffffffffffffff811681036102b25790565b939293826040820160408352526060810191926000905b808210611b42575050808203602091820152838252019291600091505b808210611b1e5750505090565b9091928335908115158092036102b257602081600193829352019401920190611b11565b90919284359073ffffffffffffffffffffffffffffffffffffffff821682036102b25773ffffffffffffffffffffffffffffffffffffffff91909116815260209485019401929160010190611af4565b6024356bffffffffffffffffffffffff811681036102b25790565b6040516060810181811067ffffffffffffffff8211176105bf576000916040918252828152826020820152015290565b92919073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168073ffffffffffffffffffffffffffffffffffffffff86161480611d4b575b611cbf575b5073ffffffffffffffffffffffffffffffffffffffff81163003611c655750611c63926138c0565b565b601c60006020949560649382956040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615611cb1576000606052604052565b637939f4246000526004601cfd5b348403611d215760006004818681947fd0e30db00000000000000000000000000000000000000000000000000000000083525af1156102b2573073ffffffffffffffffffffffffffffffffffffffff831614611d1b5738611c3b565b50505050565b7fa11a990f0000000000000000000000000000000000000000000000000000000060005260046000fd5b50341515611c36565b95949193909295611d65858361390b565b611d6f878461390b565b73ffffffffffffffffffffffffffffffffffffffff600154169180611db3575b505081611d9e575b5050509190565b81611dab93960395613a48565b388080611d97565b8281611dc193970396613a48565b3880611d8f565b96909590949293928782612060578492508591509273ffffffffffffffffffffffffffffffffffffffff611e86611e8e957f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b169788612c4d565b50506080516000959092919081611f7b575b50600003918286180280921801931801925b83611f1d575b8280611ec2575050565b73ffffffffffffffffffffffffffffffffffffffff6020611c639301511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b611f768473ffffffffffffffffffffffffffffffffffffffff83511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b611eb8565b95507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08701956040600088519260608a5282517f128acb080000000000000000000000000000000000000000000000000000000081523060048201528760248201528560448201528773fffd8963efd1fc6a506488495d951d53639afb810273fffd8963efd1fc6a506488495d951d5263988d2518606482015260a060848201528260c48c518d60208201908160a487019160045afa5001925af160403d141615612056576000518481602051180218600003965238611ea0565b3d6000803e3d6000fd5b92909396612147929561214e979873ffffffffffffffffffffffffffffffffffffffff808061213c61213661212f8361212961209b8f613bbe565b9d7f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b166144cd565b5097614509565b97614509565b169516931691614863565b9086614a94565b5061217173ffffffffffffffffffffffffffffffffffffffff8351163090614b26565b906121963073ffffffffffffffffffffffffffffffffffffffff602086015116614b26565b9192611eb2565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820180516388316456825290937f000000000000000000000000000000000000000000000000000000000000000093608060006101647ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc840182895af115612306576000519460205194604051946060519852604052600060605286938095969773ffffffffffffffffffffffffffffffffffffffff610120850151169160a08501519060c086015191848183106122c1575b505050808210612286575b5050505050565b6122b073ffffffffffffffffffffffffffffffffffffffff8060206122b798015116951685613c06565b0391613a48565b388080808061227f565b6122fe9273ffffffffffffffffffffffffffffffffffffffff895116926122b073ffffffffffffffffffffffffffffffffffffffff8a1685613c06565b388084612274565b3d6000fd5b33600052600260205260ff604060002054166123c2577f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa156120565773ffffffffffffffffffffffffffffffffffffffff60005116330361239857565b7fc19f17a90000000000000000000000000000000000000000000000000000000060005260046000fd5b50565b909391926123d3825161258b565b9061243460208401956fffffffffffffffffffffffffffffffff875116612529575b84519773ffffffffffffffffffffffffffffffffffffffff85511698602086019973ffffffffffffffffffffffffffffffffffffffff8b511691613d55565b908196819886517f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa15612056576fffffffffffffffffffffffffffffffff9460a0948694600051908381612500575b5050816124d7575b50505050511692015116146124cd5750565b611c639051613df7565b73ffffffffffffffffffffffffffffffffffffffff6124f7945116613b0d565b388080806124bb565b612522918373ffffffffffffffffffffffffffffffffffffffff8d5116613b0d565b38836124b3565b612553857f0000000000000000000000000000000000000000000000000000000000000000613ceb565b50506123f5565b60405190612567826116ba565b600060a0838281528260208201528260408201528260608201528260808201520152565b61259361255a565b5061259c61255a565b907f99fbab880000000000000000000000000000000000000000000000000000000060005260045261010081602460007f00000000000000000000000000000000000000000000000000000000000000005afa1561260257806101006040920182520190565b3d90fd5b90929180612667575b50508061261a575050565b611c639161262a82303384611bdd565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b6126779161262a82303384611bdd565b388061260f565b90927f0000000000000000000000000000000000000000000000000000000000000000604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840180519063219f5d1781526060600060c47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc890182885af1156120565752600051946020516040519160405281958197986040602083015192015192828110612770575b50505080821061273b5750505050565b61275e73ffffffffffffffffffffffffffffffffffffffff612767951684613c06565b03903390613a48565b38808080611d1b565b6127949261275e73ffffffffffffffffffffffffffffffffffffffff891684613c06565b38808061272b565b73ffffffffffffffffffffffffffffffffffffffff6000541633036127bd57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b93909260006024816128b46020949996996101408a01519a604051809c6128118261169e565b8b825260808983019287845287604082015287606082015201526128348b61258b565b9073ffffffffffffffffffffffffffffffffffffffff825116906fffffffffffffffffffffffffffffffff60a073ffffffffffffffffffffffffffffffffffffffff8c860151169401511690526128ac7f00000000000000000000000000000000000000000000000000000000000000009e8f613ceb565b50508b613d55565b9990977f6352211e0000000000000000000000000000000000000000000000000000000083526004525afa15612056576129399461292a9373ffffffffffffffffffffffffffffffffffffffff6000511661012087015261291486611bad565b606087015160020b608088015160020b91611dc8565b60c083015260a082015261219d565b90919293565b907f00000000000000000000000000000000000000000000000000000000000000007f081812fc000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa156120565760005173ffffffffffffffffffffffffffffffffffffffff163014612a90577f6352211e000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa15612056576000517fe985e9c5000000000000000000000000000000000000000000000000000000006000526004523060245260206000604481845afa15612056576000516000602452612a9057600095869560c4958794604051967f7ac2ff7b000000000000000000000000000000000000000000000000000000008852306004890152602488015260448701526064860152608485015260a48401525af11561205657565b505050505050565b9273ffffffffffffffffffffffffffffffffffffffff9291612bf6612c0b968594938594612ac6895161258b565b94612ad086611bad565b6040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606083206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b209152612be490612b65908a9073ffffffffffffffffffffffffffffffffffffffff16612129565b50936060890193612b79855160020b614509565b9560808b01968b6fffffffffffffffffffffffffffffffff60a0612ba08b5160020b614509565b9201511691808210828218028091189118928e81168f8316811115600014612c1257505091612bce92614b62565b505b8d518b8b511660208c019e8f511691613d55565b9390925160020b905160020b91611dc8565b6040870152602086015251169151169161267e565b9192909190565b8f85161015600014612c3f5790818f9284612c3996612c3092614b62565b50031690614f78565b50612bd0565b50612c3992038d1690614f78565b929094939460006080526000958215806138b8575b6138a1578360020b8260020b9080821291821592613877575b50811561386a575b5061384057843b1561383257604051610120810181811067ffffffffffffffff8211176105bf576040526000815260006020820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e08201526000610100820152612cf3866144cd565b969093849760408401527f1a6865020000000000000000000000000000000000000000000000000000000060005260206000600481855afa156102b257600051907fddca3f430000000000000000000000000000000000000000000000000000000060005260206000600481865afa156102b25762ffffff60005116907fd0c93a7c0000000000000000000000000000000000000000000000000000000060005260206000600481875afa156102b257612dd992612dd39260005191875288602088015289606088015287608088015260e0870152610100860152614509565b96614509565b938660a08401528460c0840152612e3573ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff891673ffffffffffffffffffffffffffffffffffffffff8416878a614863565b608052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000906000905b600084604081015160020b9461010082015160020b946080516000146137565783868807128688050360081d9160010b8260010b14600014613746575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260ff8399898881830712910503161b01165b8015613708577f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a17955b948196612f7082828560081b0102614509565b94608051156000146136ac57612fc073ffffffffffffffffffffffffffffffffffffffff6020870151166fffffffffffffffffffffffffffffffff8751166080880151908960e08a015193614bb3565b92919690969260608201510196608082015103975b73ffffffffffffffffffffffffffffffffffffffff8085169116810361369b576130109060a083015160c06080511515940151918b8b614863565b15151461362657505050505050505050505b8051926020820151926060830151966080840151926080511560001461335c575073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff861610613262575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851610156130bf575b505050906130b991856149a3565b91030191565b9196509291975085519286602081015160c08201519560e08301519081620f424003908060601b848104606087015101906130fe60a088015183614f78565b9a6131176131118689620f4240026149e2565b85614f78565b9561312e60a060808b01519889019a015186614f78565b890396871115613254576130b99c866131fd9661314e856132479d614e10565b930204900303940290620f42400204900360011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b058181119082180218978a89038060ff1d908101189060016c0100000000000000000000000060e0613233858a614f78565b930151620f42400393880915151601614d61565b91030196909138806130ab565b63202368086000526004601cfd5b99975061328261327b60e0850151620f42400384614ccf565b8686614a1b565b9773ffffffffffffffffffffffffffffffffffffffff8b1673ffffffffffffffffffffffffffffffffffffffff8a16106000146132d9575073ffffffffffffffffffffffffffffffffffffffff819a5b9050613077565b999391858561332b9261332382879c969c038060ff1d908101186132fd8186614f78565b60016c0100000000000000000000000060e08c0151620f42400393880915151601614d61565b9003946149a3565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528860608601528360808601526132d2565b905073ffffffffffffffffffffffffffffffffffffffff819893989792971673ffffffffffffffffffffffffffffffffffffffff861611613559575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851611156133e4575b505050906130b99185038060ff1d9081011890614f78565b9196509291975085519260208701519360c08801519460e08901519182620f4240039260608b0151908260601b908985870283620f42400204840192048203928311156132545784868e9561347f6130b99d61347761347161354c9c60a08c60806134606134596135239e8585015190614f78565b9b8a614f78565b910151019c0151620f4240026149e2565b84614f78565b890398614e10565b93020401039160011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b0481811090821802189760e061353e868d8c614955565b910151620f42400390614d61565b91030196909138806133cc565b99975061357961357260e0850151620f42400384614ccf565b86866148bc565b9773ffffffffffffffffffffffffffffffffffffffff8b8116908a16106135ba575073ffffffffffffffffffffffffffffffffffffffff819a5b9050613398565b9993916135f5906135e26135d28886899c969c614955565b60e0870151620f42400390614d61565b90039285038060ff1d9081011886614f78565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528360608601528860808601526135b3565b7ff30dba9300000000000000000000000000000000000000000000000000000000815283838660081b010260020b6004526040816024818b5afa156108b05760205190608051900318608051018a51018a5260208a01526080519260081b010203604087015260608601526080850152612e5f565b505050505050505050505050613022565b936136f173ffffffffffffffffffffffffffffffffffffffff6020830151166fffffffffffffffffffffffffffffffff8351166060840151908960e086015193614bb3565b969192906060820151039660808201510197612fd5565b50919450507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160010b61373c8183614fc6565b9390859085612ed1565b506137518185614fc6565b612e9c565b60018487890712878905030160020b60081d9160010b8260010b14600014613822575b60018082988887818307129105030160ff161b8403165b801561380257808403167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1792831c63d76453e004161a1795612f5d565b50905060019194500160010b6138188183614fc6565b9390859085613790565b5061382d8185614fc6565b613779565b6301ac05a56000526004601cfd5b7f30673a1b0000000000000000000000000000000000000000000000000000000060005260046000fd5b620d89e891501338612c83565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761813915038612c7b565b505050505090506000906000906000608052600090565b508015612c62565b6010600060449260209582956014526034526fa9059cbb00000000000000000000000082525af13d156001600051141716156138fd576000603452565b6390b8ec186000526004601cfd5b90818110613a1e578061391c575050565b670de0b6b3a7640000820291818115670de0b6b3a76400008386041417021561397a575090045b60015460a01c1061395057565b7feab9763d0000000000000000000000000000000000000000000000000000000060005260046000fd5b81670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a10578390048060030260021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600184848303049480600003040192119003021702613943565b63ae47f7026000526004601cfd5b7f5945ea560000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908173ffffffffffffffffffffffffffffffffffffffff82161480613b05575b15613af9575060006024818080947f2e1a7d4d000000000000000000000000000000000000000000000000000000008252876004525af1156102b257600080809338935af115613aeb57565b63b12d13eb6000526004601cfd5b611c63939291506138c0565b506001613a9f565b9290919273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918273ffffffffffffffffffffffffffffffffffffffff8316149081613bb6575b5015613af9575060006024818080947f2e1a7d4d000000000000000000000000000000000000000000000000000000008252876004525af1156102b257600080809338935af115613aeb57565b905038613b69565b3560601c9081600052600360205260ff6040600020541615613bdc57565b7fe1cf4d030000000000000000000000000000000000000000000000000000000060005260046000fd5b6044601060008093602095601452816034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b633e3f8f736000526004601cfd5b60446010600080936020956014527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b6010600060449260209582956014526034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b6040600060a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0850193827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc865197630c49ccbe885201915af11561205657526000519060205190565b60006084604092969594968351907ffc6f786500000000000000000000000000000000000000000000000000000000825260048201523060248201526fffffffffffffffffffffffffffffffff60448201526fffffffffffffffffffffffffffffffff6064820152827f00000000000000000000000000000000000000000000000000000000000000005af11561205657611a0d936000519060205192611d54565b7f42966c6800000000000000000000000000000000000000000000000000000000600052600452600080602481807f00000000000000000000000000000000000000000000000000000000000000005af11561205657565b9392959473ffffffffffffffffffffffffffffffffffffffff98979195836000146144ba57613eb660608701956000875197525b60208801976fffffffffffffffffffffffffffffffff895116614489575b51998c8a511660208b019d8e5116908c613d55565b927f6352211e0000000000000000000000000000000000000000000000000000000060005289600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa156120565760005195156141f757613f2089611bad565b92806141375750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff166000928261406b575b50505073ffffffffffffffffffffffffffffffffffffffff9984613fe4938593905b019b8c925116613b0d565b61400673ffffffffffffffffffffffffffffffffffffffff8651163090614b26565b80614042575b5050505b8510613a1e5760a06fffffffffffffffffffffffffffffffff8092511692015116146140395750565b611c6390613df7565b6140639273ffffffffffffffffffffffffffffffffffffffff875116613b0d565b38808061400c565b60409193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000919d939d019384519d606086528351907f128acb080000000000000000000000000000000000000000000000000000000082523060048301526001602483015260448201526401000276a4606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c488516020810160a48601818c60045afa500193165af160403d141615612056576020519a909152986000038984613fe4613fb7565b9092915061414483613bbe565b9060008080601473ffffffffffffffffffffffffffffffffffffffff80602089015116975116946141753089614b26565b986141808888613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af1156141ef57509385936141e873ffffffffffffffffffffffffffffffffffffffff9e946141e18a95613fe499613c06565b3090614b26565b0390613fd9565b3d81803e3d90fd5b614206899c969c949294611bad565b92806143f65750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff169060009281614323575b505050905b01976142c8828a8373ffffffffffffffffffffffffffffffffffffffff8a5116613b0d565b6142ea73ffffffffffffffffffffffffffffffffffffffff8451163090614b26565b90816142fa575b50505050614010565b73ffffffffffffffffffffffffffffffffffffffff61431a945116613b0d565b388080806142f1565b6040919293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000910193845193606086528351907f128acb08000000000000000000000000000000000000000000000000000000008252306004830152836024830152604482015273fffd8963efd1fc6a506488495d951d5263988d25606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c488516020810160a48601818c60045afa500193165af160403d14161561205657600051600003915238808061429e565b91509161440283613bbe565b9060008080601473ffffffffffffffffffffffffffffffffffffffff80602087015116955116966144333089614b26565b9861443e8888613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af1156141ef575061448292916141e191613c06565b03906142a3565b6144b3817f0000000000000000000000000000000000000000000000000000000000000000613ceb565b5050613ea1565b613eb66040870195600087519752613e83565b60006004816040937f3850c7bd0000000000000000000000000000000000000000000000000000000082525afa156102b2576000519060205190565b8060ff1d81810118620d89e8811161484b5763ffffffff91600182167001fffcb933bd6fad37aa2d162d1a5940010270010000000000000000000000000000000018916002811661482f575b60048116614813575b600881166147f7575b601081166147db575b602081166147bf575b604081166147a3575b60808116614787575b610100811661476b575b610200811661474f575b6104008116614733575b6108008116614717575b61100081166146fb575b61200081166146df575b61400081166146c3575b61800081166146a7575b62010000811661468b575b620200008116614670575b620400008116614655575b620800001661463c575b600012614615575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0461460e565b6b048a170391f7dc42444e8fa290910260801c90614606565b6d2216e584f5fa1ea926041bedfe9890920260801c916145fc565b916e5d6af8dedb81196699c329225ee6040260801c916145f1565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c916145e6565b916f31be135f97d08fd981231505542fcfa60260801c916145db565b916f70d869a156d2a1b890bb3df62baf32f70260801c916145d1565b916fa9f746462d870fdf8a65dc1f90e061e50260801c916145c7565b916fd097f3bdfd2022b8845ad8f792aa58250260801c916145bd565b916fe7159475a2c29b7443b29c7fa6e889d90260801c916145b3565b916ff3392b0822b70005940c7a398e4b70f30260801c916145a9565b916ff987a7253ac413176f2b074cf7815e540260801c9161459f565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91614595565b916ffe5dee046a99a2a811c461f1969c30530260801c9161458b565b916fff2ea16466c96a3843ec78b326b528610260801c91614582565b916fff973b41fa98c081472e6896dfb254c00260801c91614579565b916fffcb9843d60f6159c9db58835c9266440260801c91614570565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91614567565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c9161455e565b916ffff97272373d413259a46990580e213a0260801c91614555565b6308c379a0600052602080526101546041526045601cfd5b919391838511614877575050505050600090565b828510614888575050505050600190565b6148ab93614899866148a293614f78565b90860390614f78565b93820390614ed1565b1090565b91908201809211611a1e57565b919081156149505760601b918082028183820414614904575b5082916148f89173ffffffffffffffffffffffffffffffffffffffff94046148af565b80820615159104011690565b83018381106148d557915061491a828285614ed1565b920961493a575b73ffffffffffffffffffffffffffffffffffffffff1690565b600101806149215763ae47f7026000526004601cfd5b505090565b918282108284180280808518931893146102b25760019060601b9282810361499473ffffffffffffffffffffffffffffffffffffffff83168287614ed1565b94098284061715151691040190565b818118818310028082189392811891146102b2576149de918373ffffffffffffffffffffffffffffffffffffffff831692039060601b614ed1565b0490565b81156149ec570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9073ffffffffffffffffffffffffffffffffffffffff90614a4e938060a01c15600014614a845760601b04915b166148af565b740100000000000000000000000000000000000000008110156102b25773ffffffffffffffffffffffffffffffffffffffff1690565b90614a8e91614e10565b91614a48565b6000601473ffffffffffffffffffffffffffffffffffffffff829397959496978180602083015116915116958682180280911895181694614ad53087614b26565b97614ae08887613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af11561205657614b22926141e191613c06565b0390565b6024600080926020947f70a082310000000000000000000000000000000000000000000000000000000083526004525afa156102b25760005190565b9173ffffffffffffffffffffffffffffffffffffffff91614bac917bffffffffffffffffffffffffffffffff00000000000000000000000084868185169403169160601b16614ed1565b9116900490565b919094929473ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8416101594620f42400390614bf98288614ccf565b8615614c9d57614c0a848684614955565b975b888210614c66575050958691620f4240614c268284614d61565b9209614c54575b945b15614c4b5791614c4892038060ff1d9081011890614f78565b90565b614c48926149a3565b60019150018015613a10578590614c2d565b96975091505082158215176102b2578515614c8d57614c869082846148bc565b8095614c2f565b614c98908284614a1b565b614c86565b8185038060ff1d9081011860016c01000000000000000000000000614cc28388614f78565b9287091515160197614c0c565b81810291620f424081838504148315170215614cf0575050620f4240900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620f42409284098481108501900392099080620f42401115613a1057828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c261390290565b90620f424082029181620f4240828504148215170215614d815750900490565b81620f42407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b908160601b91816c01000000000000000000000000828504148215170215614e385750900490565b816c010000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b81810292918115828504821417830215614eec575050900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84928409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b818102917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff910981811082019003806c010000000000000000000000001115613a105760a01b9060601c1790565b6024600080926020947f5339c29600000000000000000000000000000000000000000000000000000000835260010b6004525afa156102b2576000519056fea164736f6c634300081a000a000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112" + ], + "transaction": { + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", + "gas": "0x8b0489", + "value": "0x0", + "input": "0x66cfa0570000000000000000000000000000000000000000000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b311269530b801afaa8bd160100800000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000531d60e0806040526040816152dd803803809161001a828561027d565b83398101031261020d5780516001600160a01b0381169182820361020d576001600160a01b039061004d906020016102b6565b1690811561026757600080546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36080526312a9293f60e21b8152602081600481855afa90811561021a57600091610226575b506001600160a01b031660a05260405163c45a015560e01b815290602090829060049082905afa90811561021a576000916101db575b5060c05260405161501290816102cb823960805181818161046c01528181610ef401528181611ef701528181611f50015281816121d0015281816123510152818161246b0152818161252f015281816125ce0152818161264101528181612682015281816128860152818161294201528181613dc001528181613e2701528181613ee8015261448f015260a05181818160320152818161106d01528181611bf701528181613a5f0152613b28015260c051818181610331015281816108fe01528181611dfb0152818161209e01528181612aec01528181613f44015261422a0152f35b90506020813d602011610212575b816101f66020938361027d565b8101031261020d57610207906102b6565b386100f8565b600080fd5b3d91506101e9565b6040513d6000823e3d90fd5b90506020813d60201161025f575b816102416020938361027d565b8101031261020d576004916102576020926102b6565b9150916100c2565b3d9150610234565b631e4fbdf760e01b600052600060045260246000fd5b601f909101601f19168101906001600160401b038211908210176102a057604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361020d5756fe60a0806040526004361015610084575b50361561001b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361005a57005b7f2f1ca35a0000000000000000000000000000000000000000000000000000000060005260046000fd5b60003560e01c9081630e24818e14611615575080631376f4c4146114bd5780631e5eb1d014611460578063218b625f1461140e578063219f5d171461133b5780632c45e5a01461126e5780632e5ad1e2146111ef578063322790961461117e57806343cfbe52146110915780634aa4a4fc1461102257806370f3c18014610fb4578063715018a614610f185780637f1e9ef614610ea95780638831645614610dc95780638ba1e27314610d2c5780638da5cb5b14610cda57806399642fb114610b3d578063a5fd1e3c14610a83578063af3ed5861461098c578063b429afeb14610922578063c45a0155146108b3578063c747e2b314610736578063f2fde38b14610644578063f3e17b87146103cc578063fa461e33146102b75763fc0e92cc146101af573861000f565b346102b2576102607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576101e836611717565b610164356101c43567ffffffffffffffff81116102b25761020d903690600401611836565b90610204359260ff841684036102b2576102ae94610245610254956102318461230b565b610244359061022435906101e4358661293f565b6101a4359161018435916127eb565b90604094929451948486957f811d4760f1a92875eb76dbd3dc2359544b2f6a000ba5b78784c0b105b3469bd0600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b0390f35b600080fd5b346102b25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25760043560443567ffffffffffffffff81116102b257610309903690600401611836565b5090604051606083600037606060002074ff00000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000176000526020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b2016906040528033036102b25760008213156103b8576103b692309035611bdd565b005b6103b6926024359250309060200135611bdd565b6103d5366119a1565b6103e093919361279c565b8083036102b25760005b8381106104295750610424907fb398a28fa151438e6fbfb63bb5dcf5aab5446ef8c4274546890ea394dc1993e29460405194859485611add565b0390a1005b61043c610437828686611a4d565b611abc565b9061045061044b828589611a4d565b611a8c565b156105f35773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169173ffffffffffffffffffffffffffffffffffffffff8116928084146105955760009182918260405160208101927f095ea7b30000000000000000000000000000000000000000000000000000000084526024820152816044820152604481526104f76064826116d6565b51925af13d156105ee573d67ffffffffffffffff81116105bf576040519061054760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601836116d6565b8152600060203d92013e5b6105955760019160005260036020526040600020827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555b016103ea565b7f78f200710000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610552565b73ffffffffffffffffffffffffffffffffffffffff60019216600052600360205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905561058f565b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25773ffffffffffffffffffffffffffffffffffffffff61069061167b565b61069861279c565b1680156107075773ffffffffffffffffffffffffffffffffffffffff600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257600061076a61279c565b670de0b6b3a76400006bffffffffffffffffffffffff610788611b92565b1610156108b05773ffffffffffffffffffffffffffffffffffffffff6107ac611a99565b16156108b05773ffffffffffffffffffffffffffffffffffffffff6107cf611a99565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155610801611b92565b73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff00000000000000000000000000000000000000006001549260a01b169116176001557f42200c2a55e71251cd849a86c7ece1a42ddabecbb489150a136f6c0d239c7a5c61086e611a99565b610876611b92565b6040805173ffffffffffffffffffffffffffffffffffffffff9390931683526bffffffffffffffffffffffff91909116602083015290a180f35b80fd5b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25773ffffffffffffffffffffffffffffffffffffffff61096e61167b565b166000526002602052602060ff604060002054166040519015158152f35b346102b2576101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576109c53661190a565b6101043567ffffffffffffffff81116102b2576109e6903690600401611836565b9091610144359160ff831683036102b2576102ae9382610a22610a2f945195610a0e8761230b565b61018435906101643590610124358961293f565b60e4359060c43590612a98565b906040949294519485947fc13e24d2b0a3bacd5d1a7c514125a1e27323abf7c86f6d36597f8752bbd7eed7600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102b2576101807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610abc36611864565b610ac46118dc565b90610124359060ff821682036102b25760409281610afe610b0b935194610aea8661230b565b61016435906101443590610104358861293f565b60c4359060a435906123c5565b908351927f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a282526020820152f35b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610b713661190a565b60c43567ffffffffffffffff81116102b257610c60610c26610c56846040610ba06102ae963690600401611836565b60e4949194359461010435610c2f610bb8875161258b565b9173ffffffffffffffffffffffffffffffffffffffff8351169989610c1d838d9c73ffffffffffffffffffffffffffffffffffffffff6020890151169e8f9d602081019d8e91825180610cc8575b50019e8f91825180610cb6575b5051915192611d54565b50508851611a11565b87528751611a11565b8652610c3a81611bad565b906080606082015160020b91015160020b865191885193611dc8565b909252528461267e565b9092919351926040519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b610cc290303385611bdd565b38610c13565b610cd490303387611bdd565b38610c06565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b346102b25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610d6361167b565b602435908160020b82036102b2576044358060020b81036102b25760809273ffffffffffffffffffffffffffffffffffffffff92610da8926084359260643592612c4d565b92919290845190604051948552602085015215156040840152166060820152f35b6101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576102ae610e4f610e0336611717565b610e4a73ffffffffffffffffffffffffffffffffffffffff82511673ffffffffffffffffffffffffffffffffffffffff60208401511660a08401519060c085015192612606565b61219d565b90604094929451948486957f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a84665600080a285526fffffffffffffffffffffffffffffffff166020850152604084015260608301526080820190565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610f4f61279c565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102b2576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257610fed3661190a565b610104359067ffffffffffffffff82116102b257610a2f6110156102ae933690600401611836565b90835193610a228561230b565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102b2576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576110ca36611864565b6110d26118eb565b906101043567ffffffffffffffff81116102b2576110f4903690600401611836565b6110ff9291926118fa565b90610164359360ff851685036102b257602095846111396111519651976111258961230b565b6101a435906101843590610144358b61293f565b60e4359160c4359161114b815161258b565b90613e4f565b604051917f269a3942fe0284ff30ff93f97529fba299f93b8b85221afab5686fdab8bfa84b600080a28152f35b346102b2576101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576111b736611717565b6101c4356101643567ffffffffffffffff82116102b2576102ae926111e3610254933690600401611836565b9290916102458261230b565b346102b2576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25761122836611864565b6112306118eb565b906101043567ffffffffffffffff81116102b257602092611258611151923690600401611836565b906112616118fa565b928551956111398761230b565b611277366119a1565b929061128161279c565b8383036102b25760005b8381106112c557507f2077016b05a05d3f12f6d9a8ca3667fbecaf29eba7083f7e2d1d70dc3709f635936104249160405194859485611add565b806112d661044b6001938886611a4d565b73ffffffffffffffffffffffffffffffffffffffff6112f9610437848989611a4d565b16600052600260205260406000209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00835416911515161790550161128b565b60c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576102ae6113713661190a565b6113ba8151916113808361258b565b73ffffffffffffffffffffffffffffffffffffffff60208183511692015116916113b560208201516040830151908585612606565b61267e565b906040949294519485947fe93a38a2f007635b024bb3a896c7021e73edc7146c413a63e6b69c337304c698600080a26fffffffffffffffffffffffffffffffff168452602084015260408301526060820190565b346102b2576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b257604061144936611864565b610b0b6114546118dc565b825192610afe8461230b565b346102b25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576001546040805173ffffffffffffffffffffffffffffffffffffffff8316815260a09290921c602083015290f35b6101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b2576114f136611717565b6101643567ffffffffffffffff81116102b2576102ae91611519610e4f923690600401611836565b906115b361018435926101a4359261153086611bad565b61159660a08801958651806115ea575b50610c2660c08a01988951806115bc575b50610c1d838273ffffffffffffffffffffffffffffffffffffffff8851168d8d73ffffffffffffffffffffffffffffffffffffffff60208c0151169051915192611d54565b90818752606088015160020b608089015160020b90875192611dc8565b9092525261219d565b6115e49073ffffffffffffffffffffffffffffffffffffffff60208801511630903390611bdd565b8d611551565b61160f9073ffffffffffffffffffffffffffffffffffffffff85511630903390611bdd565b8b611540565b346102b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b25760209073ffffffffffffffffffffffffffffffffffffffff61166461167b565b166000526003825260ff6040600020541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102b257565b60a0810190811067ffffffffffffffff8211176105bf57604052565b60c0810190811067ffffffffffffffff8211176105bf57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105bf57604052565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6101609101126102b25760405190610160820182811067ffffffffffffffff8211176105bf576040528160043573ffffffffffffffffffffffffffffffffffffffff811681036102b257815260243573ffffffffffffffffffffffffffffffffffffffff811681036102b257602082015260443562ffffff811681036102b25760408201526064358060020b81036102b25760608201526084358060020b81036102b257608082015260a43560a082015260c43560c082015260e43560e0820152610104356101008201526101243573ffffffffffffffffffffffffffffffffffffffff811681036102b25761012082015261014061014435910152565b9181601f840112156102b25782359167ffffffffffffffff83116102b257602083818601950101116102b257565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a09101126102b2576040519061189b8261169e565b8160043581526024356fffffffffffffffffffffffffffffffff811681036102b2576020820152604435604082015260643560608201526080608435910152565b60e4359081151582036102b257565b60a4359081151582036102b257565b610124359081151582036102b257565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c09101126102b25760405190611941826116ba565b6004358252602435602083015260443560408301526064356060830152608435608083015260a43560a0830152565b9181601f840112156102b25782359167ffffffffffffffff83116102b2576020808501948460051b0101116102b257565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102b25760043567ffffffffffffffff81116102b257816119ea91600401611970565b929092916024359067ffffffffffffffff82116102b257611a0d91600401611970565b9091565b91908203918211611a1e57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611a5d5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3580151581036102b25790565b60043573ffffffffffffffffffffffffffffffffffffffff811681036102b25790565b3573ffffffffffffffffffffffffffffffffffffffff811681036102b25790565b939293826040820160408352526060810191926000905b808210611b42575050808203602091820152838252019291600091505b808210611b1e5750505090565b9091928335908115158092036102b257602081600193829352019401920190611b11565b90919284359073ffffffffffffffffffffffffffffffffffffffff821682036102b25773ffffffffffffffffffffffffffffffffffffffff91909116815260209485019401929160010190611af4565b6024356bffffffffffffffffffffffff811681036102b25790565b6040516060810181811067ffffffffffffffff8211176105bf576000916040918252828152826020820152015290565b92919073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168073ffffffffffffffffffffffffffffffffffffffff86161480611d4b575b611cbf575b5073ffffffffffffffffffffffffffffffffffffffff81163003611c655750611c63926138c0565b565b601c60006020949560649382956040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615611cb1576000606052604052565b637939f4246000526004601cfd5b348403611d215760006004818681947fd0e30db00000000000000000000000000000000000000000000000000000000083525af1156102b2573073ffffffffffffffffffffffffffffffffffffffff831614611d1b5738611c3b565b50505050565b7fa11a990f0000000000000000000000000000000000000000000000000000000060005260046000fd5b50341515611c36565b95949193909295611d65858361390b565b611d6f878461390b565b73ffffffffffffffffffffffffffffffffffffffff600154169180611db3575b505081611d9e575b5050509190565b81611dab93960395613a48565b388080611d97565b8281611dc193970396613a48565b3880611d8f565b96909590949293928782612060578492508591509273ffffffffffffffffffffffffffffffffffffffff611e86611e8e957f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b169788612c4d565b50506080516000959092919081611f7b575b50600003918286180280921801931801925b83611f1d575b8280611ec2575050565b73ffffffffffffffffffffffffffffffffffffffff6020611c639301511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b611f768473ffffffffffffffffffffffffffffffffffffffff83511673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b611eb8565b95507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08701956040600088519260608a5282517f128acb080000000000000000000000000000000000000000000000000000000081523060048201528760248201528560448201528773fffd8963efd1fc6a506488495d951d53639afb810273fffd8963efd1fc6a506488495d951d5263988d2518606482015260a060848201528260c48c518d60208201908160a487019160045afa5001925af160403d141615612056576000518481602051180218600003965238611ea0565b3d6000803e3d6000fd5b92909396612147929561214e979873ffffffffffffffffffffffffffffffffffffffff808061213c61213661212f8361212961209b8f613bbe565b9d7f0000000000000000000000000000000000000000000000000000000000000000919060609074ff00000000000000000000000000000000000000006040519417600052206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460405273ffffffffffffffffffffffffffffffffffffffff6055600b201691604052565b166144cd565b5097614509565b97614509565b169516931691614863565b9086614a94565b5061217173ffffffffffffffffffffffffffffffffffffffff8351163090614b26565b906121963073ffffffffffffffffffffffffffffffffffffffff602086015116614b26565b9192611eb2565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820180516388316456825290937f000000000000000000000000000000000000000000000000000000000000000093608060006101647ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc840182895af115612306576000519460205194604051946060519852604052600060605286938095969773ffffffffffffffffffffffffffffffffffffffff610120850151169160a08501519060c086015191848183106122c1575b505050808210612286575b5050505050565b6122b073ffffffffffffffffffffffffffffffffffffffff8060206122b798015116951685613c06565b0391613a48565b388080808061227f565b6122fe9273ffffffffffffffffffffffffffffffffffffffff895116926122b073ffffffffffffffffffffffffffffffffffffffff8a1685613c06565b388084612274565b3d6000fd5b33600052600260205260ff604060002054166123c2577f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa156120565773ffffffffffffffffffffffffffffffffffffffff60005116330361239857565b7fc19f17a90000000000000000000000000000000000000000000000000000000060005260046000fd5b50565b909391926123d3825161258b565b9061243460208401956fffffffffffffffffffffffffffffffff875116612529575b84519773ffffffffffffffffffffffffffffffffffffffff85511698602086019973ffffffffffffffffffffffffffffffffffffffff8b511691613d55565b908196819886517f6352211e00000000000000000000000000000000000000000000000000000000600052600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa15612056576fffffffffffffffffffffffffffffffff9460a0948694600051908381612500575b5050816124d7575b50505050511692015116146124cd5750565b611c639051613df7565b73ffffffffffffffffffffffffffffffffffffffff6124f7945116613b0d565b388080806124bb565b612522918373ffffffffffffffffffffffffffffffffffffffff8d5116613b0d565b38836124b3565b612553857f0000000000000000000000000000000000000000000000000000000000000000613ceb565b50506123f5565b60405190612567826116ba565b600060a0838281528260208201528260408201528260608201528260808201520152565b61259361255a565b5061259c61255a565b907f99fbab880000000000000000000000000000000000000000000000000000000060005260045261010081602460007f00000000000000000000000000000000000000000000000000000000000000005afa1561260257806101006040920182520190565b3d90fd5b90929180612667575b50508061261a575050565b611c639161262a82303384611bdd565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690613cae565b6126779161262a82303384611bdd565b388061260f565b90927f0000000000000000000000000000000000000000000000000000000000000000604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840180519063219f5d1781526060600060c47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc890182885af1156120565752600051946020516040519160405281958197986040602083015192015192828110612770575b50505080821061273b5750505050565b61275e73ffffffffffffffffffffffffffffffffffffffff612767951684613c06565b03903390613a48565b38808080611d1b565b6127949261275e73ffffffffffffffffffffffffffffffffffffffff891684613c06565b38808061272b565b73ffffffffffffffffffffffffffffffffffffffff6000541633036127bd57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b93909260006024816128b46020949996996101408a01519a604051809c6128118261169e565b8b825260808983019287845287604082015287606082015201526128348b61258b565b9073ffffffffffffffffffffffffffffffffffffffff825116906fffffffffffffffffffffffffffffffff60a073ffffffffffffffffffffffffffffffffffffffff8c860151169401511690526128ac7f00000000000000000000000000000000000000000000000000000000000000009e8f613ceb565b50508b613d55565b9990977f6352211e0000000000000000000000000000000000000000000000000000000083526004525afa15612056576129399461292a9373ffffffffffffffffffffffffffffffffffffffff6000511661012087015261291486611bad565b606087015160020b608088015160020b91611dc8565b60c083015260a082015261219d565b90919293565b907f00000000000000000000000000000000000000000000000000000000000000007f081812fc000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa156120565760005173ffffffffffffffffffffffffffffffffffffffff163014612a90577f6352211e000000000000000000000000000000000000000000000000000000006000528260045260206000602481845afa15612056576000517fe985e9c5000000000000000000000000000000000000000000000000000000006000526004523060245260206000604481845afa15612056576000516000602452612a9057600095869560c4958794604051967f7ac2ff7b000000000000000000000000000000000000000000000000000000008852306004890152602488015260448701526064860152608485015260a48401525af11561205657565b505050505050565b9273ffffffffffffffffffffffffffffffffffffffff9291612bf6612c0b968594938594612ac6895161258b565b94612ad086611bad565b6040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606083206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b209152612be490612b65908a9073ffffffffffffffffffffffffffffffffffffffff16612129565b50936060890193612b79855160020b614509565b9560808b01968b6fffffffffffffffffffffffffffffffff60a0612ba08b5160020b614509565b9201511691808210828218028091189118928e81168f8316811115600014612c1257505091612bce92614b62565b505b8d518b8b511660208c019e8f511691613d55565b9390925160020b905160020b91611dc8565b6040870152602086015251169151169161267e565b9192909190565b8f85161015600014612c3f5790818f9284612c3996612c3092614b62565b50031690614f78565b50612bd0565b50612c3992038d1690614f78565b929094939460006080526000958215806138b8575b6138a1578360020b8260020b9080821291821592613877575b50811561386a575b5061384057843b1561383257604051610120810181811067ffffffffffffffff8211176105bf576040526000815260006020820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e08201526000610100820152612cf3866144cd565b969093849760408401527f1a6865020000000000000000000000000000000000000000000000000000000060005260206000600481855afa156102b257600051907fddca3f430000000000000000000000000000000000000000000000000000000060005260206000600481865afa156102b25762ffffff60005116907fd0c93a7c0000000000000000000000000000000000000000000000000000000060005260206000600481875afa156102b257612dd992612dd39260005191875288602088015289606088015287608088015260e0870152610100860152614509565b96614509565b938660a08401528460c0840152612e3573ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff891673ffffffffffffffffffffffffffffffffffffffff8416878a614863565b608052507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000906000905b600084604081015160020b9461010082015160020b946080516000146137565783868807128688050360081d9160010b8260010b14600014613746575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260ff8399898881830712910503161b01165b8015613708577f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a17955b948196612f7082828560081b0102614509565b94608051156000146136ac57612fc073ffffffffffffffffffffffffffffffffffffffff6020870151166fffffffffffffffffffffffffffffffff8751166080880151908960e08a015193614bb3565b92919690969260608201510196608082015103975b73ffffffffffffffffffffffffffffffffffffffff8085169116810361369b576130109060a083015160c06080511515940151918b8b614863565b15151461362657505050505050505050505b8051926020820151926060830151966080840151926080511560001461335c575073ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff861610613262575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851610156130bf575b505050906130b991856149a3565b91030191565b9196509291975085519286602081015160c08201519560e08301519081620f424003908060601b848104606087015101906130fe60a088015183614f78565b9a6131176131118689620f4240026149e2565b85614f78565b9561312e60a060808b01519889019a015186614f78565b890396871115613254576130b99c866131fd9661314e856132479d614e10565b930204900303940290620f42400204900360011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b058181119082180218978a89038060ff1d908101189060016c0100000000000000000000000060e0613233858a614f78565b930151620f42400393880915151601614d61565b91030196909138806130ab565b63202368086000526004601cfd5b99975061328261327b60e0850151620f42400384614ccf565b8686614a1b565b9773ffffffffffffffffffffffffffffffffffffffff8b1673ffffffffffffffffffffffffffffffffffffffff8a16106000146132d9575073ffffffffffffffffffffffffffffffffffffffff819a5b9050613077565b999391858561332b9261332382879c969c038060ff1d908101186132fd8186614f78565b60016c0100000000000000000000000060e08c0151620f42400393880915151601614d61565b9003946149a3565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528860608601528360808601526132d2565b905073ffffffffffffffffffffffffffffffffffffffff819893989792971673ffffffffffffffffffffffffffffffffffffffff861611613559575b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff851611156133e4575b505050906130b99185038060ff1d9081011890614f78565b9196509291975085519260208701519360c08801519460e08901519182620f4240039260608b0151908260601b908985870283620f42400204840192048203928311156132545784868e9561347f6130b99d61347761347161354c9c60a08c60806134606134596135239e8585015190614f78565b9b8a614f78565b910151019c0151620f4240026149e2565b84614f78565b890398614e10565b93020401039160011b9260011b8302828002018070ffffffffffffffffffffffffffffffffff1060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900390565b0160601b0481811090821802189760e061353e868d8c614955565b910151620f42400390614d61565b91030196909138806133cc565b99975061357961357260e0850151620f42400384614ccf565b86866148bc565b9773ffffffffffffffffffffffffffffffffffffffff8b8116908a16106135ba575073ffffffffffffffffffffffffffffffffffffffff819a5b9050613398565b9993916135f5906135e26135d28886899c969c614955565b60e0870151620f42400390614d61565b90039285038060ff1d9081011886614f78565b019573ffffffffffffffffffffffffffffffffffffffff8481811660208601528360608601528860808601526135b3565b7ff30dba9300000000000000000000000000000000000000000000000000000000815283838660081b010260020b6004526040816024818b5afa156108b05760205190608051900318608051018a51018a5260208a01526080519260081b010203604087015260608601526080850152612e5f565b505050505050505050505050613022565b936136f173ffffffffffffffffffffffffffffffffffffffff6020830151166fffffffffffffffffffffffffffffffff8351166060840151908960e086015193614bb3565b969192906060820151039660808201510197612fd5565b50919450507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160010b61373c8183614fc6565b9390859085612ed1565b506137518185614fc6565b612e9c565b60018487890712878905030160020b60081d9160010b8260010b14600014613822575b60018082988887818307129105030160ff161b8403165b801561380257808403167e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405601f826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1792831c63d76453e004161a1795612f5d565b50905060019194500160010b6138188183614fc6565b9390859085613790565b5061382d8185614fc6565b613779565b6301ac05a56000526004601cfd5b7f30673a1b0000000000000000000000000000000000000000000000000000000060005260046000fd5b620d89e891501338612c83565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761813915038612c7b565b505050505090506000906000906000608052600090565b508015612c62565b6010600060449260209582956014526034526fa9059cbb00000000000000000000000082525af13d156001600051141716156138fd576000603452565b6390b8ec186000526004601cfd5b90818110613a1e578061391c575050565b670de0b6b3a7640000820291818115670de0b6b3a76400008386041417021561397a575090045b60015460a01c1061395057565b7feab9763d0000000000000000000000000000000000000000000000000000000060005260046000fd5b81670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a10578390048060030260021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600184848303049480600003040192119003021702613943565b63ae47f7026000526004601cfd5b7f5945ea560000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908173ffffffffffffffffffffffffffffffffffffffff82161480613b05575b15613af9575060006024818080947f2e1a7d4d000000000000000000000000000000000000000000000000000000008252876004525af1156102b257600080809338935af115613aeb57565b63b12d13eb6000526004601cfd5b611c63939291506138c0565b506001613a9f565b9290919273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918273ffffffffffffffffffffffffffffffffffffffff8316149081613bb6575b5015613af9575060006024818080947f2e1a7d4d000000000000000000000000000000000000000000000000000000008252876004525af1156102b257600080809338935af115613aeb57565b905038613b69565b3560601c9081600052600360205260ff6040600020541615613bdc57565b7fe1cf4d030000000000000000000000000000000000000000000000000000000060005260046000fd5b6044601060008093602095601452816034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b633e3f8f736000526004601cfd5b60446010600080936020956014527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b6010600060449260209582956014526034526f095ea7b300000000000000000000000082525af13d15600160005114171615613c43576000603452565b6040600060a47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0850193827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc865197630c49ccbe885201915af11561205657526000519060205190565b60006084604092969594968351907ffc6f786500000000000000000000000000000000000000000000000000000000825260048201523060248201526fffffffffffffffffffffffffffffffff60448201526fffffffffffffffffffffffffffffffff6064820152827f00000000000000000000000000000000000000000000000000000000000000005af11561205657611a0d936000519060205192611d54565b7f42966c6800000000000000000000000000000000000000000000000000000000600052600452600080602481807f00000000000000000000000000000000000000000000000000000000000000005af11561205657565b9392959473ffffffffffffffffffffffffffffffffffffffff98979195836000146144ba57613eb660608701956000875197525b60208801976fffffffffffffffffffffffffffffffff895116614489575b51998c8a511660208b019d8e5116908c613d55565b927f6352211e0000000000000000000000000000000000000000000000000000000060005289600452602060006024817f00000000000000000000000000000000000000000000000000000000000000005afa156120565760005195156141f757613f2089611bad565b92806141375750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff166000928261406b575b50505073ffffffffffffffffffffffffffffffffffffffff9984613fe4938593905b019b8c925116613b0d565b61400673ffffffffffffffffffffffffffffffffffffffff8651163090614b26565b80614042575b5050505b8510613a1e5760a06fffffffffffffffffffffffffffffffff8092511692015116146140395750565b611c6390613df7565b6140639273ffffffffffffffffffffffffffffffffffffffff875116613b0d565b38808061400c565b60409193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000919d939d019384519d606086528351907f128acb080000000000000000000000000000000000000000000000000000000082523060048301526001602483015260448201526401000276a4606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c488516020810160a48601818c60045afa500193165af160403d141615612056576020519a909152986000038984613fe4613fb7565b9092915061414483613bbe565b9060008080601473ffffffffffffffffffffffffffffffffffffffff80602089015116975116946141753089614b26565b986141808888613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af1156141ef57509385936141e873ffffffffffffffffffffffffffffffffffffffff9e946141e18a95613fe499613c06565b3090614b26565b0390613fd9565b3d81803e3d90fd5b614206899c969c949294611bad565b92806143f65750506040805174ff00000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000017600052606084206020527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5482526055600b20915273ffffffffffffffffffffffffffffffffffffffff169060009281614323575b505050905b01976142c8828a8373ffffffffffffffffffffffffffffffffffffffff8a5116613b0d565b6142ea73ffffffffffffffffffffffffffffffffffffffff8451163090614b26565b90816142fa575b50505050614010565b73ffffffffffffffffffffffffffffffffffffffff61431a945116613b0d565b388080806142f1565b6040919293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06000910193845193606086528351907f128acb08000000000000000000000000000000000000000000000000000000008252306004830152836024830152604482015273fffd8963efd1fc6a506488495d951d5263988d25606482015260a060848201528273ffffffffffffffffffffffffffffffffffffffff60c488516020810160a48601818c60045afa500193165af160403d14161561205657600051600003915238808061429e565b91509161440283613bbe565b9060008080601473ffffffffffffffffffffffffffffffffffffffff80602087015116955116966144333089614b26565b9861443e8888613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af1156141ef575061448292916141e191613c06565b03906142a3565b6144b3817f0000000000000000000000000000000000000000000000000000000000000000613ceb565b5050613ea1565b613eb66040870195600087519752613e83565b60006004816040937f3850c7bd0000000000000000000000000000000000000000000000000000000082525afa156102b2576000519060205190565b8060ff1d81810118620d89e8811161484b5763ffffffff91600182167001fffcb933bd6fad37aa2d162d1a5940010270010000000000000000000000000000000018916002811661482f575b60048116614813575b600881166147f7575b601081166147db575b602081166147bf575b604081166147a3575b60808116614787575b610100811661476b575b610200811661474f575b6104008116614733575b6108008116614717575b61100081166146fb575b61200081166146df575b61400081166146c3575b61800081166146a7575b62010000811661468b575b620200008116614670575b620400008116614655575b620800001661463c575b600012614615575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0461460e565b6b048a170391f7dc42444e8fa290910260801c90614606565b6d2216e584f5fa1ea926041bedfe9890920260801c916145fc565b916e5d6af8dedb81196699c329225ee6040260801c916145f1565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c916145e6565b916f31be135f97d08fd981231505542fcfa60260801c916145db565b916f70d869a156d2a1b890bb3df62baf32f70260801c916145d1565b916fa9f746462d870fdf8a65dc1f90e061e50260801c916145c7565b916fd097f3bdfd2022b8845ad8f792aa58250260801c916145bd565b916fe7159475a2c29b7443b29c7fa6e889d90260801c916145b3565b916ff3392b0822b70005940c7a398e4b70f30260801c916145a9565b916ff987a7253ac413176f2b074cf7815e540260801c9161459f565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91614595565b916ffe5dee046a99a2a811c461f1969c30530260801c9161458b565b916fff2ea16466c96a3843ec78b326b528610260801c91614582565b916fff973b41fa98c081472e6896dfb254c00260801c91614579565b916fffcb9843d60f6159c9db58835c9266440260801c91614570565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91614567565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c9161455e565b916ffff97272373d413259a46990580e213a0260801c91614555565b6308c379a0600052602080526101546041526045601cfd5b919391838511614877575050505050600090565b828510614888575050505050600190565b6148ab93614899866148a293614f78565b90860390614f78565b93820390614ed1565b1090565b91908201809211611a1e57565b919081156149505760601b918082028183820414614904575b5082916148f89173ffffffffffffffffffffffffffffffffffffffff94046148af565b80820615159104011690565b83018381106148d557915061491a828285614ed1565b920961493a575b73ffffffffffffffffffffffffffffffffffffffff1690565b600101806149215763ae47f7026000526004601cfd5b505090565b918282108284180280808518931893146102b25760019060601b9282810361499473ffffffffffffffffffffffffffffffffffffffff83168287614ed1565b94098284061715151691040190565b818118818310028082189392811891146102b2576149de918373ffffffffffffffffffffffffffffffffffffffff831692039060601b614ed1565b0490565b81156149ec570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9073ffffffffffffffffffffffffffffffffffffffff90614a4e938060a01c15600014614a845760601b04915b166148af565b740100000000000000000000000000000000000000008110156102b25773ffffffffffffffffffffffffffffffffffffffff1690565b90614a8e91614e10565b91614a48565b6000601473ffffffffffffffffffffffffffffffffffffffff829397959496978180602083015116915116958682180280911895181694614ad53087614b26565b97614ae08887613c51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec604051920192839101823782875af11561205657614b22926141e191613c06565b0390565b6024600080926020947f70a082310000000000000000000000000000000000000000000000000000000083526004525afa156102b25760005190565b9173ffffffffffffffffffffffffffffffffffffffff91614bac917bffffffffffffffffffffffffffffffff00000000000000000000000084868185169403169160601b16614ed1565b9116900490565b919094929473ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8416101594620f42400390614bf98288614ccf565b8615614c9d57614c0a848684614955565b975b888210614c66575050958691620f4240614c268284614d61565b9209614c54575b945b15614c4b5791614c4892038060ff1d9081011890614f78565b90565b614c48926149a3565b60019150018015613a10578590614c2d565b96975091505082158215176102b2578515614c8d57614c869082846148bc565b8095614c2f565b614c98908284614a1b565b614c86565b8185038060ff1d9081011860016c01000000000000000000000000614cc28388614f78565b9287091515160197614c0c565b81810291620f424081838504148315170215614cf0575050620f4240900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620f42409284098481108501900392099080620f42401115613a1057828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c261390290565b90620f424082029181620f4240828504148215170215614d815750900490565b81620f42407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b908160601b91816c01000000000000000000000000828504148215170215614e385750900490565b816c010000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b81810292918115828504821417830215614eec575050900490565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84928409858110860190039209908260000383169281811115613a1057839004806003026002188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018484830304948060000304019211900302170290565b818102917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff910981811082019003806c010000000000000000000000001115613a105760a01b9060601c1790565b6024600080926020947f5339c29600000000000000000000000000000000000000000000000000000000835260010b6004525afa156102b2576000519056fea164736f6c634300081a000a000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112000000", + "nonce": "0x74", + "chainId": "0xa4b1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x62f88933d3329a1d70abb2c73f00151cd90881907eca4e82f70ddb682f637822", "transactionType": "CALL", "contractName": "UniV3Automan", - "contractAddress": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "contractAddress": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "function": "setFeeConfig((address,uint96))", "arguments": [ "(0x145304a5cfEc1B616Cf035C43f084CE1233d9Ea7, 200000000000000000)" ], "transaction": { "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", - "to": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", - "gas": "0x57c75", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "gas": "0x17df3", "value": "0x0", "input": "0xc747e2b3000000000000000000000000145304a5cfec1b616cf035c43f084ce1233d9ea700000000000000000000000000000000000000000000000002c68af0bb140000", - "nonce": "0x6f", + "nonce": "0x75", "chainId": "0xa4b1" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0xec8e2683680086b17ba52687059156f22f621a61d83a8a1629384a421cac3cd3", + "hash": "0xd78cf0ace211fe3f89de27831210097968baaf0a8dd4bf317e819ea1ddf8eb0c", "transactionType": "CALL", "contractName": "UniV3Automan", - "contractAddress": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "contractAddress": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "function": "setControllers(address[],bool[])", "arguments": [ "[0x1Dd333d27746D2283D01C5a759cB04A0eAD821D4]", @@ -56,54 +79,54 @@ ], "transaction": { "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", - "to": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", - "gas": "0x7243a", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "gas": "0x1d357", "value": "0x0", "input": "0x2c45e5a00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001dd333d27746d2283d01c5a759cb04a0ead821d400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "nonce": "0x70", + "nonce": "0x76", "chainId": "0xa4b1" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x7683e11b3fcad55979b0fa8a2a32973da2ca84e607b2f85ef233e1fe970e1271", + "hash": "0x98c2093ce498ad3943c024168394c98d236ed1f6c4a11ccc84e8d6e6104d4204", "transactionType": "CALL", "contractName": "UniV3Automan", - "contractAddress": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "contractAddress": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "function": "setSwapRouters(address[],bool[])", "arguments": [ - "[0x00000000063E0E1E06A0FE61e16bE8Bdec1BEA31]", + "[0x00000004D523574c93021f52E520ec4fb2FFA564]", "[true]" ], "transaction": { "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", - "to": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", - "gas": "0x71def", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "gas": "0x1d976", "value": "0x0", - "input": "0xf3e17b8700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000063e0e1e06a0fe61e16be8bdec1bea3100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "nonce": "0x71", + "input": "0xf3e17b8700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000004d523574c93021f52e520ec4fb2ffa56400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x77", "chainId": "0xa4b1" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x90e9e727d7f3bf540a6d4927a41d4af605b0a5c629a7e28fd74dd8e3323e1527", + "hash": "0x8d72670ce9ff2e7bc28e210b161aa98ddd2ee1a405fa9ee11f0e0c6f8e1ebd4f", "transactionType": "CALL", "contractName": "UniV3Automan", - "contractAddress": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "contractAddress": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "function": "transferOwnership(address)", "arguments": [ "0x145304a5cfEc1B616Cf035C43f084CE1233d9Ea7" ], "transaction": { "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", - "to": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", - "gas": "0x4b214", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", + "gas": "0x152ea", "value": "0x0", "input": "0xf2fde38b000000000000000000000000145304a5cfec1b616cf035c43f084ce1233d9ea7", - "nonce": "0x72", + "nonce": "0x78", "chainId": "0xa4b1" }, "additionalContracts": [], @@ -113,173 +136,191 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0xf12216", + "cumulativeGasUsed": "0x337e9a", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0982ed74cb7761622552b977d1cfccd9112d56a2e10cb499877f6796b3aae83f", + "transactionIndex": "0x4", + "blockHash": "0x0151ba74ee13a7f02c383b93e478e92c328770e4ec1675f40c43ed935be2294c", + "blockNumber": "0x11a1c8ac", + "gasUsed": "0x2b1fa4", + "effectiveGasPrice": "0x989680", + "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", + "to": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", + "contractAddress": null, + "gasUsedForL1": "0xf772a", + "l1BlockNumber": "0x14a16d5" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x684948", "logs": [ { - "address": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "address": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112" ], "data": "0x", - "blockHash": "0xa660d8b3274dce6ecd26dc54eabbf02dcaaa0d164989121cd4b372491427873b", - "blockNumber": "0xf99e628", - "transactionHash": "0xbe7cfd257f5163b2158dc124b383b6dac4cf69d561b18fb6942aa6a4f9aa06b8", + "blockHash": "0xb0059771a49287f46431467551c4cc33a59999fff3d93fa37ebbda30d4870c83", + "blockNumber": "0x11a1c8b2", + "transactionHash": "0x35283a9517c1782c4217c5c0de3ac78f10f549f29f346b6f32969f354c37c095", "transactionIndex": "0x2", - "logIndex": "0xb", + "logIndex": "0x2", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000000000010000000000800000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000020000000080000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000400000000000100000000000000000000000000000000000000000000000000100000000020000000080000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0xbe7cfd257f5163b2158dc124b383b6dac4cf69d561b18fb6942aa6a4f9aa06b8", + "transactionHash": "0x35283a9517c1782c4217c5c0de3ac78f10f549f29f346b6f32969f354c37c095", "transactionIndex": "0x2", - "blockHash": "0xa660d8b3274dce6ecd26dc54eabbf02dcaaa0d164989121cd4b372491427873b", - "blockNumber": "0xf99e628", - "gasUsed": "0xe1f1fb", + "blockHash": "0xb0059771a49287f46431467551c4cc33a59999fff3d93fa37ebbda30d4870c83", + "blockNumber": "0x11a1c8b2", + "gasUsed": "0x657910", "effectiveGasPrice": "0x989680", "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", "to": "0x13b0d85ccb8bf860b6b79af3029fca081ae9bef2", "contractAddress": null, - "gasUsedForL1": "0x9cd463", - "l1BlockNumber": "0x13f40d2" + "gasUsedForL1": "0x20b018", + "l1BlockNumber": "0x14a16d5" }, { "status": "0x1", - "cumulativeGasUsed": "0xd422b", + "cumulativeGasUsed": "0x8101b", "logs": [ { - "address": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "address": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "topics": [ "0x42200c2a55e71251cd849a86c7ece1a42ddabecbb489150a136f6c0d239c7a5c" ], "data": "0x000000000000000000000000145304a5cfec1b616cf035c43f084ce1233d9ea700000000000000000000000000000000000000000000000002c68af0bb140000", - "blockHash": "0x0a9988aa51bdd90cbc271035c9ea8bf2690679d7f4355207b80b1409e4a7f32f", - "blockNumber": "0xf99e62c", - "transactionHash": "0x67ecabcc6ed9d3ec0b381e2d79bfd9b53fd3cbf0134ad8df47faba1ee0966a08", - "transactionIndex": "0x3", - "logIndex": "0x4", + "blockHash": "0x310652428933939383f9183321050c5315bd1a1252d11f11b7b324777d158066", + "blockNumber": "0x11a1c8b7", + "transactionHash": "0x62f88933d3329a1d70abb2c73f00151cd90881907eca4e82f70ddb682f637822", + "transactionIndex": "0x4", + "logIndex": "0x9", "removed": false } ], - "logsBloom": "0x00000000000000000000010000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x67ecabcc6ed9d3ec0b381e2d79bfd9b53fd3cbf0134ad8df47faba1ee0966a08", - "transactionIndex": "0x3", - "blockHash": "0x0a9988aa51bdd90cbc271035c9ea8bf2690679d7f4355207b80b1409e4a7f32f", - "blockNumber": "0xf99e62c", - "gasUsed": "0x3b4b4", + "transactionHash": "0x62f88933d3329a1d70abb2c73f00151cd90881907eca4e82f70ddb682f637822", + "transactionIndex": "0x4", + "blockHash": "0x310652428933939383f9183321050c5315bd1a1252d11f11b7b324777d158066", + "blockNumber": "0x11a1c8b7", + "gasUsed": "0x15c56", "effectiveGasPrice": "0x989680", "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", - "to": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "contractAddress": null, - "gasUsedForL1": "0x2f705", - "l1BlockNumber": "0x13f40d2" + "gasUsedForL1": "0x9eff", + "l1BlockNumber": "0x14a16d5" }, { "status": "0x1", - "cumulativeGasUsed": "0x4d01a", + "cumulativeGasUsed": "0x19d47", "logs": [ { - "address": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "address": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "topics": [ "0x2077016b05a05d3f12f6d9a8ca3667fbecaf29eba7083f7e2d1d70dc3709f635" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001dd333d27746d2283d01c5a759cb04a0ead821d400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "blockHash": "0x3116a12d364da5e228776aaefd360f1a7b573e6cad10b6f8923bc7685b2d848d", - "blockNumber": "0xf99e62f", - "transactionHash": "0xec8e2683680086b17ba52687059156f22f621a61d83a8a1629384a421cac3cd3", + "blockHash": "0x56afc72e8fc785945cfe5ac825a0a602661b1badcbda040cc220b35157cb65ce", + "blockNumber": "0x11a1c8bb", + "transactionHash": "0xd78cf0ace211fe3f89de27831210097968baaf0a8dd4bf317e819ea1ddf8eb0c", "transactionIndex": "0x1", "logIndex": "0x0", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000004000000000000000020000000000002000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000004000000000000000020000000000000000000000040100000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0xec8e2683680086b17ba52687059156f22f621a61d83a8a1629384a421cac3cd3", + "transactionHash": "0xd78cf0ace211fe3f89de27831210097968baaf0a8dd4bf317e819ea1ddf8eb0c", "transactionIndex": "0x1", - "blockHash": "0x3116a12d364da5e228776aaefd360f1a7b573e6cad10b6f8923bc7685b2d848d", - "blockNumber": "0xf99e62f", - "gasUsed": "0x4d01a", + "blockHash": "0x56afc72e8fc785945cfe5ac825a0a602661b1badcbda040cc220b35157cb65ce", + "blockNumber": "0x11a1c8bb", + "gasUsed": "0x19d47", "effectiveGasPrice": "0x989680", "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", - "to": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "contractAddress": null, - "gasUsedForL1": "0x40bca", - "l1BlockNumber": "0x13f40d2" + "gasUsedForL1": "0xd8fa", + "l1BlockNumber": "0x14a16d5" }, { "status": "0x1", - "cumulativeGasUsed": "0x1e57396", + "cumulativeGasUsed": "0x1e23e91", "logs": [ { - "address": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "address": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "topics": [ "0xb398a28fa151438e6fbfb63bb5dcf5aab5446ef8c4274546890ea394dc1993e2" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000063e0e1e06a0fe61e16be8bdec1bea3100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "blockHash": "0xacf8fa7e8ab3f26ba2c1aa8f484b97ae0bbd07870392e7e05559757f61806b32", - "blockNumber": "0xf99e634", - "transactionHash": "0x7683e11b3fcad55979b0fa8a2a32973da2ca84e607b2f85ef233e1fe970e1271", + "data": "0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000004d523574c93021f52e520ec4fb2ffa56400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x7b0339cc2c55a567902ada641ba6f39d7340fdbfba61eedfc90805115bb43dfe", + "blockNumber": "0x11a1c8c0", + "transactionHash": "0x98c2093ce498ad3943c024168394c98d236ed1f6c4a11ccc84e8d6e6104d4204", "transactionIndex": "0x1", "logIndex": "0x0", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000100000000000000000000000000000000000000000002000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000100000000000000000000000000000000000000000000000000020000100000000000000000000000000000000000000000000000000100000000000000000000000000004000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x7683e11b3fcad55979b0fa8a2a32973da2ca84e607b2f85ef233e1fe970e1271", + "transactionHash": "0x98c2093ce498ad3943c024168394c98d236ed1f6c4a11ccc84e8d6e6104d4204", "transactionIndex": "0x1", - "blockHash": "0xacf8fa7e8ab3f26ba2c1aa8f484b97ae0bbd07870392e7e05559757f61806b32", - "blockNumber": "0xf99e634", - "gasUsed": "0x1e57396", + "blockHash": "0x7b0339cc2c55a567902ada641ba6f39d7340fdbfba61eedfc90805115bb43dfe", + "blockNumber": "0x11a1c8c0", + "gasUsed": "0x1e23e91", "effectiveGasPrice": "0x989680", "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", - "to": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "contractAddress": null, - "gasUsedForL1": "0x4142d", - "l1BlockNumber": "0x13f40d2" + "gasUsedForL1": "0xdf20", + "l1BlockNumber": "0x14a16d5" }, { "status": "0x1", - "cumulativeGasUsed": "0x8f481", + "cumulativeGasUsed": "0x1220ca", "logs": [ { - "address": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "address": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000beef63ae5a2102506e8a352a5bb32aa8b30b3112", "0x000000000000000000000000145304a5cfec1b616cf035c43f084ce1233d9ea7" ], "data": "0x", - "blockHash": "0xa58dbb0098926f946a11a8ff378189a2095c71c0b85bf8a96685953e936e78c0", - "blockNumber": "0xf99e638", - "transactionHash": "0x90e9e727d7f3bf540a6d4927a41d4af605b0a5c629a7e28fd74dd8e3323e1527", + "blockHash": "0xbd6bf576b9d527a668305f51312dd9a6dc2c34ba3fba4e86c9f4972ca51e2791", + "blockNumber": "0x11a1c8c4", + "transactionHash": "0x8d72670ce9ff2e7bc28e210b161aa98ddd2ee1a405fa9ee11f0e0c6f8e1ebd4f", "transactionIndex": "0x3", - "logIndex": "0x1", + "logIndex": "0x1a", "removed": false } ], - "logsBloom": "0x00000000000000000000000000000000000000010000000000800000000000000000100000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000", + "logsBloom": "0x00000000000000000000000000000000000000010000000000800000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000400000000000100000000000000400000000000000000000000000000000000100000000000000000080000000000000000000000000000000000000000000000000000000000", "type": "0x2", - "transactionHash": "0x90e9e727d7f3bf540a6d4927a41d4af605b0a5c629a7e28fd74dd8e3323e1527", + "transactionHash": "0x8d72670ce9ff2e7bc28e210b161aa98ddd2ee1a405fa9ee11f0e0c6f8e1ebd4f", "transactionIndex": "0x3", - "blockHash": "0xa58dbb0098926f946a11a8ff378189a2095c71c0b85bf8a96685953e936e78c0", - "blockNumber": "0xf99e638", - "gasUsed": "0x2dd8b", + "blockHash": "0xbd6bf576b9d527a668305f51312dd9a6dc2c34ba3fba4e86c9f4972ca51e2791", + "blockNumber": "0x11a1c8c4", + "gasUsed": "0xf293", "effectiveGasPrice": "0x989680", "from": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112", - "to": "0x00000070ee937917c1d9bd91729ce1dd9a77d8e3", + "to": "0x0000003858948f29a38c6c3ca09a1cd53a58dc34", "contractAddress": null, - "gasUsedForL1": "0x26ca2", - "l1BlockNumber": "0x13f40d2" + "gasUsedForL1": "0x8202", + "l1BlockNumber": "0x14a16d5" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1728411176, + "timestamp": 1736978362, "chain": 42161, - "commit": "bc739ac" + "commit": "bc412e6" } \ No newline at end of file diff --git a/script/DeployUniV3Automan.s.sol b/script/DeployUniV3Automan.s.sol index 717c37c..ae359c8 100644 --- a/script/DeployUniV3Automan.s.sol +++ b/script/DeployUniV3Automan.s.sol @@ -9,23 +9,17 @@ import {UniV3Automan} from "../src/UniV3Automan.sol"; contract DeployUniV3Automan is Script { struct DeployParams { // Has to be alphabetically ordered per https://book.getfoundry.sh/cheatcodes/parse-json + bytes32 automanSalt; address controller; UniV3Automan.FeeConfig feeConfig; INPM npm; address optimalSwapRouter; // Deploy optimal swap router if parsed as address(0). + bytes32 optimalSwapRouterSalt; address owner; } // https://github.com/pcaversaccio/create2deployer Create2Deployer internal constant create2deployer = Create2Deployer(0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2); - // bytes32 internal constant automanSalt = 0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112e429609defd54e2600050000; // mainnet, arbitrum_one, optimism, and polygon - // bytes32 internal constant automanSalt = 0xbeef63ae5a2102506e8a352a5bb32aa8b30b31126da13df7e082a0874b020028; // base - // bytes32 internal constant automanSalt = 0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112350766a71aff01bd0a000040; // bnb - // bytes32 internal constant automanSalt = 0xbeef63ae5a2102506e8a352a5bb32aa8b30b31129e5100c6f38046891d010080; // avalanche - // bytes32 internal constant automanSalt = 0xbeef63ae5a2102506e8a352a5bb32aa8b30b31127d2397bf1d3d45097b00002c; // scroll - bytes32 internal constant automanSalt = 0xbeef63ae5a2102506e8a352a5bb32aa8b30b311279cd7418ade4641cb50000e0; // manta - bytes32 internal constant optimalSwapSalt = 0xbeef63ae5a2102506e8a352a5bb32aa8b30b31127dfc30de0987800003da9a65; - bytes32 internal constant routerProxySalt = 0xbeef63ae5a2102506e8a352a5bb32aa8b30b3112bc2281f12f80c0000280f6fd; // https://book.getfoundry.sh/tutorials/best-practices#scripts function readInput(string memory input) internal view returns (string memory) { @@ -60,11 +54,11 @@ contract DeployUniV3Automan is Script { console2.log("OptimalSwapRouter initCodeHash:"); console2.logBytes32(initCodeHash); UniV3OptimalSwapRouter optimalSwapRouter = UniV3OptimalSwapRouter( - payable(create2deployer.computeAddress(optimalSwapSalt, initCodeHash)) + payable(create2deployer.computeAddress(params.optimalSwapRouterSalt, initCodeHash)) ); if (address(optimalSwapRouter).code.length == 0) { // Deploy optimalSwapRouter - create2deployer.deploy(0, optimalSwapSalt, initCode); + create2deployer.deploy(0, params.optimalSwapRouterSalt, initCode); console2.log("UniV3OptimalSwapRouter deployed at: %s", address(optimalSwapRouter)); } params.optimalSwapRouter = address(optimalSwapRouter); @@ -78,11 +72,11 @@ contract DeployUniV3Automan is Script { console2.log("UniV3Automan initCodeHash:"); console2.logBytes32(initCodeHash); // Compute the address of the contract to be deployed - UniV3Automan automan = UniV3Automan(payable(create2deployer.computeAddress(automanSalt, initCodeHash))); + UniV3Automan automan = UniV3Automan(payable(create2deployer.computeAddress(params.automanSalt, initCodeHash))); if (address(automan).code.length == 0) { // Deploy automan - create2deployer.deploy(0, automanSalt, initCode); + create2deployer.deploy(0, params.automanSalt, initCode); // Set up automan automan.setFeeConfig(params.feeConfig); diff --git a/script/UniV3Automan_input/42161/automan_params.json b/script/UniV3Automan_input/42161/automan_params.json index e1950bd..f5b6ebf 100644 --- a/script/UniV3Automan_input/42161/automan_params.json +++ b/script/UniV3Automan_input/42161/automan_params.json @@ -6,5 +6,7 @@ "feeCollector": "0x145304a5cfEc1B616Cf035C43f084CE1233d9Ea7" }, "controller": "0x1Dd333d27746D2283D01C5a759cB04A0eAD821D4", - "optimalSwapRouter": "0x00000000063E0E1E06A0FE61e16bE8Bdec1BEA31" + "automanSalt": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b311269530b801afaa8bd16010080", + "optimalSwapRouter": "0x0000000000000000000000000000000000000000", + "optimalSwapRouterSalt": "0xbeef63ae5a2102506e8a352a5bb32aa8b30b311225946149e8de306029000020" } diff --git a/src/SlipStreamAutoman.sol b/src/SlipStreamAutoman.sol index 015fe25..fb28118 100644 --- a/src/SlipStreamAutoman.sol +++ b/src/SlipStreamAutoman.sol @@ -6,6 +6,7 @@ import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol"; import {ICommonNonfungiblePositionManager as INPM, ISlipStreamNonfungiblePositionManager as ISlipStreamNPM} from "@aperture_finance/uni-v3-lib/src/interfaces/ISlipStreamNonfungiblePositionManager.sol"; +import {ERC20Callee} from "./libraries/ERC20Caller.sol"; import {LiquidityAmounts} from "@aperture_finance/uni-v3-lib/src/LiquidityAmounts.sol"; import {NPMCaller, SlipStreamPosition} from "@aperture_finance/uni-v3-lib/src/NPMCaller.sol"; import {SlipStreamSwapRouter} from "./base/SlipStreamSwapRouter.sol"; @@ -256,12 +257,12 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu if (amount0 < amount0Desired) { address token0 = params.token0; token0.safeApprove(address(npm), 0); - refund(token0, recipient, amount0Desired - amount0); + refund(token0, recipient, amount0Desired - amount0, /* isUnwrapNative = */ true); } if (amount1 < amount1Desired) { address token1 = params.token1; token1.safeApprove(address(npm), 0); - refund(token1, recipient, amount1Desired - amount1); + refund(token1, recipient, amount1Desired - amount1, /* isUnwrapNative = */ true); } } } @@ -279,11 +280,11 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu unchecked { if (amount0 < amount0Desired) { token0.safeApprove(address(npm), 0); - refund(token0, msg.sender, amount0Desired - amount0); + refund(token0, msg.sender, amount0Desired - amount0, /* isUnwrapNative = */ true); } if (amount1 < amount1Desired) { token1.safeApprove(address(npm), 0); - refund(token1, msg.sender, amount1Desired - amount1); + refund(token1, msg.sender, amount1Desired - amount1, /* isUnwrapNative = */ true); } } } @@ -312,11 +313,11 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu address _feeCollector = feeConfig.feeCollector; if (token0FeeAmount != 0) { token0DeductibleAmount -= token0FeeAmount; - refund(token0, _feeCollector, token0FeeAmount); + refund(token0, _feeCollector, token0FeeAmount, /* isUnwrapNative = */ true); } if (token1FeeAmount != 0) { token1DeductibleAmount -= token1FeeAmount; - refund(token1, _feeCollector, token1FeeAmount); + refund(token1, _feeCollector, token1FeeAmount, /* isUnwrapNative = */ true); } } return (token0DeductibleAmount, token1DeductibleAmount); @@ -341,18 +342,24 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu function _decreaseLiquidity( INPM.DecreaseLiquidityParams memory params, uint256 token0FeeAmount, - uint256 token1FeeAmount + uint256 token1FeeAmount, + bool isUnwrapNative ) private returns (uint256 amount0, uint256 amount1) { - uint256 tokenId = params.tokenId; - SlipStreamPosition memory pos = _positions(tokenId); + // uint256 tokenId = params.tokenId; // stacktoodeep error + SlipStreamPosition memory pos = _positions(params.tokenId); // Slippage check is delegated to `NonfungiblePositionManager` via `DecreaseLiquidityParams`. - NPMCaller.decreaseLiquidity(npm, params); + if (params.liquidity != 0) { + NPMCaller.decreaseLiquidity(npm, params); + } // Collect the tokens owed and deduct gas and aperture fees. - (amount0, amount1) = _collectDeductFees(tokenId, pos.token0, pos.token1, token0FeeAmount, token1FeeAmount); + (amount0, amount1) = _collectDeductFees(params.tokenId, pos.token0, pos.token1, token0FeeAmount, token1FeeAmount); // Send the remaining amounts to the position owner - address owner = NPMCaller.ownerOf(npm, tokenId); - if (amount0 != 0) refund(pos.token0, owner, amount0); - if (amount1 != 0) refund(pos.token1, owner, amount1); + address owner = NPMCaller.ownerOf(npm, params.tokenId); + if (amount0 != 0) refund(pos.token0, owner, amount0, isUnwrapNative); + if (amount1 != 0) refund(pos.token1, owner, amount1, isUnwrapNative); + if (params.liquidity == pos.liquidity) { + _burn(params.tokenId); + } } /// @dev Decrease liquidity and swap the tokens to a single token @@ -362,7 +369,8 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu bool zeroForOne, uint256 token0FeeAmount, uint256 token1FeeAmount, - bytes calldata swapData + bytes calldata swapData, + bool isUnwrapNative ) private returns (uint256 amount) { uint256 amountMin; // Slippage check is done here instead of `NonfungiblePositionManager` @@ -373,7 +381,9 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu amountMin = params.amount0Min; params.amount0Min = 0; } - NPMCaller.decreaseLiquidity(npm, params); + if (params.liquidity != 0) { + NPMCaller.decreaseLiquidity(npm, params); + } // Collect the tokens owed and deduct gas and aperture fees. uint256 tokenId = params.tokenId; (uint256 amount0, uint256 amount1) = _collectDeductFees( @@ -384,17 +394,30 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu token1FeeAmount ); // Swap to the desired token and send it to the position owner - // It is assumed that the swap is `exactIn` and all of the input tokens are consumed. + // Refund any unswapped amount back to the position owner. + address owner = NPMCaller.ownerOf(npm, tokenId); unchecked { + uint256 amountRefund; if (zeroForOne) { amount = amount1 + _swap(castPoolKey(pos), amount0, true, swapData); - refund(pos.token1, NPMCaller.ownerOf(npm, tokenId), amount); + refund(pos.token1, owner, amount, isUnwrapNative); + amountRefund = ERC20Callee.wrap(pos.token0).balanceOf(address(this)); + if (amountRefund != 0) { + refund(pos.token0, owner, amountRefund, isUnwrapNative); + } } else { amount = amount0 + _swap(castPoolKey(pos), amount1, false, swapData); - refund(pos.token0, NPMCaller.ownerOf(npm, tokenId), amount); + refund(pos.token0, owner, amount, isUnwrapNative); + amountRefund = ERC20Callee.wrap(pos.token1).balanceOf(address(this)); + if (amountRefund != 0) { + refund(pos.token1, owner, amountRefund, isUnwrapNative); + } } } if (amount < amountMin) revert InsufficientAmount(); + if (params.liquidity == pos.liquidity) { + _burn(tokenId); + } } /// @dev Internal decrease liquidity abstraction @@ -403,10 +426,11 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu bool zeroForOne, uint256 token0FeeAmount, uint256 token1FeeAmount, - bytes calldata swapData + bytes calldata swapData, + bool isUnwrapNative ) private returns (uint256 amount) { SlipStreamPosition memory pos = _positions(params.tokenId); - amount = _decreaseCollectSingle(params, pos, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); + amount = _decreaseCollectSingle(params, pos, zeroForOne, token0FeeAmount, token1FeeAmount, swapData, isUnwrapNative); } /// @dev Internal function to remove liquidity, collect tokens to this contract, and deduct fees @@ -426,41 +450,6 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu (amount0, amount1) = _collectDeductFees(tokenId, token0, token1, token0FeeAmount, token1FeeAmount); } - /// @dev Internal remove liquidity abstraction - function _removeLiquidity( - INPM.DecreaseLiquidityParams memory params, - uint256 token0FeeAmount, - uint256 token1FeeAmount - ) private returns (uint256, uint256) { - uint256 tokenId = params.tokenId; - (address token0, address token1, uint256 amount0, uint256 amount1) = _removeAndCollect( - params, - token0FeeAmount, - token1FeeAmount - ); - address owner = NPMCaller.ownerOf(npm, tokenId); - if (amount0 != 0) refund(token0, owner, amount0); - if (amount1 != 0) refund(token1, owner, amount1); - _burn(tokenId); - return (amount0, amount1); - } - - /// @dev Internal function to remove liquidity and swap to a single token - function _removeLiquiditySingle( - INPM.DecreaseLiquidityParams memory params, - bool zeroForOne, - uint256 token0FeeAmount, - uint256 token1FeeAmount, - bytes calldata swapData - ) private returns (uint256 amount) { - uint256 tokenId = params.tokenId; - SlipStreamPosition memory pos = _positions(tokenId); - // Update `params.liquidity` to the current liquidity - params.liquidity = pos.liquidity; - amount = _decreaseCollectSingle(params, pos, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); - _burn(tokenId); - } - /// @dev Internal reinvest abstraction function _reinvest( INPM.IncreaseLiquidityParams memory params, @@ -644,11 +633,12 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu function decreaseLiquidity( INPM.DecreaseLiquidityParams memory params, uint256 token0FeeAmount, - uint256 token1FeeAmount + uint256 token1FeeAmount, + bool isUnwrapNative ) external returns (uint256 amount0, uint256 amount1) { uint256 tokenId = params.tokenId; checkAuthorizedForToken(tokenId); - (amount0, amount1) = _decreaseLiquidity(params, token0FeeAmount, token1FeeAmount); + (amount0, amount1) = _decreaseLiquidity(params, token0FeeAmount, token1FeeAmount, isUnwrapNative); emit DecreaseLiquidity(tokenId); } @@ -657,6 +647,7 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu INPM.DecreaseLiquidityParams memory params, uint256 token0FeeAmount, uint256 token1FeeAmount, + bool isUnwrapNative, uint256 permitDeadline, uint8 v, bytes32 r, @@ -665,7 +656,7 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu uint256 tokenId = params.tokenId; checkAuthorizedForToken(tokenId); selfPermitIfNecessary(tokenId, permitDeadline, v, r, s); - (amount0, amount1) = _decreaseLiquidity(params, token0FeeAmount, token1FeeAmount); + (amount0, amount1) = _decreaseLiquidity(params, token0FeeAmount, token1FeeAmount, isUnwrapNative); emit DecreaseLiquidity(tokenId); } @@ -675,11 +666,12 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu bool zeroForOne, uint256 token0FeeAmount, uint256 token1FeeAmount, - bytes calldata swapData + bytes calldata swapData, + bool isUnwrapNative ) external returns (uint256 amount) { uint256 tokenId = params.tokenId; checkAuthorizedForToken(tokenId); - amount = _decreaseLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); + amount = _decreaseLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData, isUnwrapNative); emit DecreaseLiquidity(tokenId); } @@ -690,6 +682,7 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu uint256 token0FeeAmount, uint256 token1FeeAmount, bytes calldata swapData, + bool isUnwrapNative, uint256 permitDeadline, uint8 v, bytes32 r, @@ -698,72 +691,10 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu uint256 tokenId = params.tokenId; checkAuthorizedForToken(tokenId); selfPermitIfNecessary(tokenId, permitDeadline, v, r, s); - amount = _decreaseLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); + amount = _decreaseLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData, isUnwrapNative); emit DecreaseLiquidity(tokenId); } - /// @inheritdoc IAutomanCommon - function removeLiquidity( - INPM.DecreaseLiquidityParams memory params, - uint256 token0FeeAmount, - uint256 token1FeeAmount - ) external returns (uint256 amount0, uint256 amount1) { - uint256 tokenId = params.tokenId; - checkAuthorizedForToken(tokenId); - (amount0, amount1) = _removeLiquidity(params, token0FeeAmount, token1FeeAmount); - emit RemoveLiquidity(tokenId); - } - - /// @inheritdoc IAutomanCommon - function removeLiquidity( - INPM.DecreaseLiquidityParams memory params, - uint256 token0FeeAmount, - uint256 token1FeeAmount, - uint256 permitDeadline, - uint8 v, - bytes32 r, - bytes32 s - ) external returns (uint256 amount0, uint256 amount1) { - uint256 tokenId = params.tokenId; - checkAuthorizedForToken(tokenId); - selfPermitIfNecessary(tokenId, permitDeadline, v, r, s); - (amount0, amount1) = _removeLiquidity(params, token0FeeAmount, token1FeeAmount); - emit RemoveLiquidity(tokenId); - } - - /// @inheritdoc IAutomanCommon - function removeLiquiditySingle( - INPM.DecreaseLiquidityParams memory params, - bool zeroForOne, - uint256 token0FeeAmount, - uint256 token1FeeAmount, - bytes calldata swapData - ) external returns (uint256 amount) { - uint256 tokenId = params.tokenId; - checkAuthorizedForToken(tokenId); - amount = _removeLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); - emit RemoveLiquidity(tokenId); - } - - /// @inheritdoc IAutomanCommon - function removeLiquiditySingle( - INPM.DecreaseLiquidityParams memory params, - bool zeroForOne, - uint256 token0FeeAmount, - uint256 token1FeeAmount, - bytes calldata swapData, - uint256 permitDeadline, - uint8 v, - bytes32 r, - bytes32 s - ) external returns (uint256 amount) { - uint256 tokenId = params.tokenId; - checkAuthorizedForToken(tokenId); - selfPermitIfNecessary(tokenId, permitDeadline, v, r, s); - amount = _removeLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); - emit RemoveLiquidity(tokenId); - } - /// @inheritdoc IAutomanCommon function reinvest( INPM.IncreaseLiquidityParams memory params, diff --git a/src/base/Automan.sol b/src/base/Automan.sol index 1b5cd9f..4a5c386 100644 --- a/src/base/Automan.sol +++ b/src/base/Automan.sol @@ -7,6 +7,7 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol"; import "@uniswap/v3-periphery/contracts/interfaces/IPoolInitializer.sol"; import {ICommonNonfungiblePositionManager as INPM, IUniswapV3NonfungiblePositionManager as IUniV3NPM} from "@aperture_finance/uni-v3-lib/src/interfaces/IUniswapV3NonfungiblePositionManager.sol"; +import {ERC20Callee} from "../libraries/ERC20Caller.sol"; import {LiquidityAmounts} from "@aperture_finance/uni-v3-lib/src/LiquidityAmounts.sol"; import {NPMCaller, Position} from "@aperture_finance/uni-v3-lib/src/NPMCaller.sol"; import {PoolKey} from "@aperture_finance/uni-v3-lib/src/PoolKey.sol"; @@ -252,12 +253,12 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M if (amount0 < amount0Desired) { address token0 = params.token0; token0.safeApprove(address(npm), 0); - refund(token0, recipient, amount0Desired - amount0); + refund(token0, recipient, amount0Desired - amount0, /* isUnwrapNative = */ true); } if (amount1 < amount1Desired) { address token1 = params.token1; token1.safeApprove(address(npm), 0); - refund(token1, recipient, amount1Desired - amount1); + refund(token1, recipient, amount1Desired - amount1, /* isUnwrapNative = */ true); } } } @@ -275,11 +276,11 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M unchecked { if (amount0 < amount0Desired) { token0.safeApprove(address(npm), 0); - refund(token0, msg.sender, amount0Desired - amount0); + refund(token0, msg.sender, amount0Desired - amount0, /* isUnwrapNative = */ true); } if (amount1 < amount1Desired) { token1.safeApprove(address(npm), 0); - refund(token1, msg.sender, amount1Desired - amount1); + refund(token1, msg.sender, amount1Desired - amount1, /* isUnwrapNative = */ true); } } } @@ -308,11 +309,11 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M address _feeCollector = feeConfig.feeCollector; if (token0FeeAmount != 0) { token0DeductibleAmount -= token0FeeAmount; - refund(token0, _feeCollector, token0FeeAmount); + refund(token0, _feeCollector, token0FeeAmount, /* isUnwrapNative = */ true); } if (token1FeeAmount != 0) { token1DeductibleAmount -= token1FeeAmount; - refund(token1, _feeCollector, token1FeeAmount); + refund(token1, _feeCollector, token1FeeAmount, /* isUnwrapNative = */ true); } } return (token0DeductibleAmount, token1DeductibleAmount); @@ -337,18 +338,24 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M function _decreaseLiquidity( INPM.DecreaseLiquidityParams memory params, uint256 token0FeeAmount, - uint256 token1FeeAmount + uint256 token1FeeAmount, + bool isUnwrapNative ) private returns (uint256 amount0, uint256 amount1) { - uint256 tokenId = params.tokenId; - Position memory pos = _positions(tokenId); + // uint256 tokenId = params.tokenId; // stacktoodeep error + Position memory pos = _positions(params.tokenId); // Slippage check is delegated to `NonfungiblePositionManager` via `DecreaseLiquidityParams`. - NPMCaller.decreaseLiquidity(npm, params); + if (params.liquidity != 0) { + NPMCaller.decreaseLiquidity(npm, params); + } // Collect the tokens owed and deduct gas and aperture fees. - (amount0, amount1) = _collectDeductFees(tokenId, pos.token0, pos.token1, token0FeeAmount, token1FeeAmount); + (amount0, amount1) = _collectDeductFees(params.tokenId, pos.token0, pos.token1, token0FeeAmount, token1FeeAmount); // Send the remaining amounts to the position owner - address owner = NPMCaller.ownerOf(npm, tokenId); - if (amount0 != 0) refund(pos.token0, owner, amount0); - if (amount1 != 0) refund(pos.token1, owner, amount1); + address owner = NPMCaller.ownerOf(npm, params.tokenId); + if (amount0 != 0) refund(pos.token0, owner, amount0, isUnwrapNative); + if (amount1 != 0) refund(pos.token1, owner, amount1, isUnwrapNative); + if (params.liquidity == pos.liquidity) { + _burn(params.tokenId); + } } /// @dev Decrease liquidity and swap the tokens to a single token @@ -358,7 +365,8 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M bool zeroForOne, uint256 token0FeeAmount, uint256 token1FeeAmount, - bytes calldata swapData + bytes calldata swapData, + bool isUnwrapNative ) private returns (uint256 amount) { uint256 amountMin; // Slippage check is done here instead of `NonfungiblePositionManager` @@ -369,7 +377,9 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M amountMin = params.amount0Min; params.amount0Min = 0; } - NPMCaller.decreaseLiquidity(npm, params); + if (params.liquidity != 0) { + NPMCaller.decreaseLiquidity(npm, params); + } // Collect the tokens owed and deduct gas and aperture fees. uint256 tokenId = params.tokenId; (uint256 amount0, uint256 amount1) = _collectDeductFees( @@ -380,17 +390,30 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M token1FeeAmount ); // Swap to the desired token and send it to the position owner - // It is assumed that the swap is `exactIn` and all of the input tokens are consumed. + // Refund any unswapped amount back to the position owner. + address owner = NPMCaller.ownerOf(npm, tokenId); unchecked { + uint256 amountRefund; if (zeroForOne) { amount = amount1 + _swap(castPoolKey(pos), amount0, true, swapData); - refund(pos.token1, NPMCaller.ownerOf(npm, tokenId), amount); + refund(pos.token1, owner, amount, isUnwrapNative); + amountRefund = ERC20Callee.wrap(pos.token0).balanceOf(address(this)); + if (amountRefund != 0) { + refund(pos.token0, owner, amountRefund, isUnwrapNative); + } } else { amount = amount0 + _swap(castPoolKey(pos), amount1, false, swapData); - refund(pos.token0, NPMCaller.ownerOf(npm, tokenId), amount); + refund(pos.token0, owner, amount, isUnwrapNative); + amountRefund = ERC20Callee.wrap(pos.token1).balanceOf(address(this)); + if (amountRefund != 0) { + refund(pos.token1, owner, amountRefund, isUnwrapNative); + } } } if (amount < amountMin) revert InsufficientAmount(); + if (params.liquidity == pos.liquidity) { + _burn(tokenId); + } } /// @dev Internal decrease liquidity abstraction @@ -399,10 +422,11 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M bool zeroForOne, uint256 token0FeeAmount, uint256 token1FeeAmount, - bytes calldata swapData + bytes calldata swapData, + bool isUnwrapNative ) private returns (uint256 amount) { Position memory pos = _positions(params.tokenId); - amount = _decreaseCollectSingle(params, pos, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); + amount = _decreaseCollectSingle(params, pos, zeroForOne, token0FeeAmount, token1FeeAmount, swapData, isUnwrapNative); } /// @dev Internal function to remove liquidity, collect tokens to this contract, and deduct fees @@ -422,41 +446,6 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M (amount0, amount1) = _collectDeductFees(tokenId, token0, token1, token0FeeAmount, token1FeeAmount); } - /// @dev Internal remove liquidity abstraction - function _removeLiquidity( - INPM.DecreaseLiquidityParams memory params, - uint256 token0FeeAmount, - uint256 token1FeeAmount - ) private returns (uint256, uint256) { - uint256 tokenId = params.tokenId; - (address token0, address token1, uint256 amount0, uint256 amount1) = _removeAndCollect( - params, - token0FeeAmount, - token1FeeAmount - ); - address owner = NPMCaller.ownerOf(npm, tokenId); - if (amount0 != 0) refund(token0, owner, amount0); - if (amount1 != 0) refund(token1, owner, amount1); - _burn(tokenId); - return (amount0, amount1); - } - - /// @dev Internal function to remove liquidity and swap to a single token - function _removeLiquiditySingle( - INPM.DecreaseLiquidityParams memory params, - bool zeroForOne, - uint256 token0FeeAmount, - uint256 token1FeeAmount, - bytes calldata swapData - ) private returns (uint256 amount) { - uint256 tokenId = params.tokenId; - Position memory pos = _positions(tokenId); - // Update `params.liquidity` to the current liquidity - params.liquidity = pos.liquidity; - amount = _decreaseCollectSingle(params, pos, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); - _burn(tokenId); - } - /// @dev Internal reinvest abstraction function _reinvest( INPM.IncreaseLiquidityParams memory params, @@ -640,11 +629,12 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M function decreaseLiquidity( INPM.DecreaseLiquidityParams memory params, uint256 token0FeeAmount, - uint256 token1FeeAmount + uint256 token1FeeAmount, + bool isUnwrapNative ) external returns (uint256 amount0, uint256 amount1) { uint256 tokenId = params.tokenId; checkAuthorizedForToken(tokenId); - (amount0, amount1) = _decreaseLiquidity(params, token0FeeAmount, token1FeeAmount); + (amount0, amount1) = _decreaseLiquidity(params, token0FeeAmount, token1FeeAmount, isUnwrapNative); emit DecreaseLiquidity(tokenId); } @@ -653,6 +643,7 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M INPM.DecreaseLiquidityParams memory params, uint256 token0FeeAmount, uint256 token1FeeAmount, + bool isUnwrapNative, uint256 permitDeadline, uint8 v, bytes32 r, @@ -661,7 +652,7 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M uint256 tokenId = params.tokenId; checkAuthorizedForToken(tokenId); selfPermitIfNecessary(tokenId, permitDeadline, v, r, s); - (amount0, amount1) = _decreaseLiquidity(params, token0FeeAmount, token1FeeAmount); + (amount0, amount1) = _decreaseLiquidity(params, token0FeeAmount, token1FeeAmount, isUnwrapNative); emit DecreaseLiquidity(tokenId); } @@ -671,11 +662,12 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M bool zeroForOne, uint256 token0FeeAmount, uint256 token1FeeAmount, - bytes calldata swapData + bytes calldata swapData, + bool isUnwrapNative ) external returns (uint256 amount) { uint256 tokenId = params.tokenId; checkAuthorizedForToken(tokenId); - amount = _decreaseLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); + amount = _decreaseLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData, isUnwrapNative); emit DecreaseLiquidity(tokenId); } @@ -686,6 +678,7 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M uint256 token0FeeAmount, uint256 token1FeeAmount, bytes calldata swapData, + bool isUnwrapNative, uint256 permitDeadline, uint8 v, bytes32 r, @@ -694,72 +687,10 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M uint256 tokenId = params.tokenId; checkAuthorizedForToken(tokenId); selfPermitIfNecessary(tokenId, permitDeadline, v, r, s); - amount = _decreaseLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); + amount = _decreaseLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData, isUnwrapNative); emit DecreaseLiquidity(tokenId); } - /// @inheritdoc IAutomanCommon - function removeLiquidity( - INPM.DecreaseLiquidityParams memory params, - uint256 token0FeeAmount, - uint256 token1FeeAmount - ) external returns (uint256 amount0, uint256 amount1) { - uint256 tokenId = params.tokenId; - checkAuthorizedForToken(tokenId); - (amount0, amount1) = _removeLiquidity(params, token0FeeAmount, token1FeeAmount); - emit RemoveLiquidity(tokenId); - } - - /// @inheritdoc IAutomanCommon - function removeLiquidity( - INPM.DecreaseLiquidityParams memory params, - uint256 token0FeeAmount, - uint256 token1FeeAmount, - uint256 permitDeadline, - uint8 v, - bytes32 r, - bytes32 s - ) external returns (uint256 amount0, uint256 amount1) { - uint256 tokenId = params.tokenId; - checkAuthorizedForToken(tokenId); - selfPermitIfNecessary(tokenId, permitDeadline, v, r, s); - (amount0, amount1) = _removeLiquidity(params, token0FeeAmount, token1FeeAmount); - emit RemoveLiquidity(tokenId); - } - - /// @inheritdoc IAutomanCommon - function removeLiquiditySingle( - INPM.DecreaseLiquidityParams memory params, - bool zeroForOne, - uint256 token0FeeAmount, - uint256 token1FeeAmount, - bytes calldata swapData - ) external returns (uint256 amount) { - uint256 tokenId = params.tokenId; - checkAuthorizedForToken(tokenId); - amount = _removeLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); - emit RemoveLiquidity(tokenId); - } - - /// @inheritdoc IAutomanCommon - function removeLiquiditySingle( - INPM.DecreaseLiquidityParams memory params, - bool zeroForOne, - uint256 token0FeeAmount, - uint256 token1FeeAmount, - bytes calldata swapData, - uint256 permitDeadline, - uint8 v, - bytes32 r, - bytes32 s - ) external returns (uint256 amount) { - uint256 tokenId = params.tokenId; - checkAuthorizedForToken(tokenId); - selfPermitIfNecessary(tokenId, permitDeadline, v, r, s); - amount = _removeLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData); - emit RemoveLiquidity(tokenId); - } - /// @inheritdoc IAutomanCommon function reinvest( INPM.IncreaseLiquidityParams memory params, diff --git a/src/base/Payments.sol b/src/base/Payments.sol index e9d1eb2..054608a 100644 --- a/src/base/Payments.sol +++ b/src/base/Payments.sol @@ -43,8 +43,9 @@ abstract contract Payments is Immutables { /// @param token The token to pay /// @param recipient The address that will receive the payment /// @param value The amount to pay - function refund(address token, address recipient, uint256 value) internal { - if (token == WETH9) { + /// @param isUnwrapNative Whether to unwrap WETH and send native ETH + function refund(address token, address recipient, uint256 value, bool isUnwrapNative) internal { + if (token == WETH9 && isUnwrapNative) { // Unwrap WETH WETHCallee.wrap(WETH9).withdraw(value); // Send native ETH to recipient diff --git a/src/interfaces/IAutoman.sol b/src/interfaces/IAutoman.sol index 42a8f66..a23d958 100644 --- a/src/interfaces/IAutoman.sol +++ b/src/interfaces/IAutoman.sol @@ -130,12 +130,14 @@ interface IAutomanCommon { /// deadline The time by which the transaction must be included to effect the change /// @param token0FeeAmount The amount of token0 to send to feeCollector /// @param token1FeeAmount The amount of token1 to send to feeCollector + /// @param isUnwrapNative Whether to unwrap WETH and send native ETH /// @return amount0 The amount of token0 returned minus fees /// @return amount1 The amount of token1 returned minus fees function decreaseLiquidity( INPM.DecreaseLiquidityParams memory params, uint256 token0FeeAmount, - uint256 token1FeeAmount + uint256 token1FeeAmount, + bool isUnwrapNative ) external returns (uint256 amount0, uint256 amount1); /// @notice Decreases the amount of liquidity in a position and accounts it to the position using permit @@ -148,6 +150,7 @@ interface IAutomanCommon { /// deadline The time by which the transaction must be included to effect the change /// @param token0FeeAmount The amount of token0 to send to feeCollector /// @param token1FeeAmount The amount of token1 to send to feeCollector + /// @param isUnwrapNative Whether to unwrap WETH and send native ETH /// @param permitDeadline The deadline of the permit signature /// @param v The recovery byte of the signature /// @param r Half of the ECDSA signature pair @@ -158,6 +161,7 @@ interface IAutomanCommon { INPM.DecreaseLiquidityParams memory params, uint256 token0FeeAmount, uint256 token1FeeAmount, + bool isUnwrapNative, uint256 permitDeadline, uint8 v, bytes32 r, @@ -176,13 +180,15 @@ interface IAutomanCommon { /// @param token0FeeAmount The amount of token0 to send to feeCollector /// @param token1FeeAmount The amount of token1 to send to feeCollector /// @param swapData The address of the external router and call data + /// @param isUnwrapNative Whether to unwrap WETH and send native ETH /// @return amount The total amount of desired token returned minus fees function decreaseLiquiditySingle( INPM.DecreaseLiquidityParams memory params, bool zeroForOne, uint256 token0FeeAmount, uint256 token1FeeAmount, - bytes calldata swapData + bytes calldata swapData, + bool isUnwrapNative ) external returns (uint256 amount); /// @notice Decreases the amount of liquidity in a position and swaps to a single token using permit @@ -197,6 +203,7 @@ interface IAutomanCommon { /// @param token0FeeAmount The amount of token0 to send to feeCollector /// @param token1FeeAmount The amount of token1 to send to feeCollector /// @param swapData The address of the external router and call data + /// @param isUnwrapNative Whether to unwrap WETH and send native ETH /// @param permitDeadline The deadline of the permit signature /// @param v The recovery byte of the signature /// @param r Half of the ECDSA signature pair @@ -208,96 +215,7 @@ interface IAutomanCommon { uint256 token0FeeAmount, uint256 token1FeeAmount, bytes calldata swapData, - uint256 permitDeadline, - uint8 v, - bytes32 r, - bytes32 s - ) external returns (uint256 amount); - - /// @notice Removes all liquidity from a position - /// @dev Slippage check is delegated to `NonfungiblePositionManager` via `DecreaseLiquidityParams`. - /// It is applied on the principal amounts excluding trading fees. - /// @param params tokenId The ID of the token for which liquidity is being removed, - /// amount0Min The minimum amount of token0 that should be accounted for the burned liquidity, - /// amount1Min The minimum amount of token1 that should be accounted for the burned liquidity, - /// deadline The time by which the transaction must be included to effect the change - /// @param token0FeeAmount The amount of token0 to send to feeCollector - /// @param token1FeeAmount The amount of token1 to send to feeCollector - /// @return amount0 The amount of token0 returned minus fees - /// @return amount1 The amount of token1 returned minus fees - function removeLiquidity( - INPM.DecreaseLiquidityParams memory params, - uint256 token0FeeAmount, - uint256 token1FeeAmount - ) external returns (uint256 amount0, uint256 amount1); - - /// @notice Removes all liquidity from a position using permit - /// @dev Slippage check is delegated to `NonfungiblePositionManager` via `DecreaseLiquidityParams`. - /// It is applied on the principal amounts excluding trading fees. - /// @param params tokenId The ID of the token for which liquidity is being removed, - /// amount0Min The minimum amount of token0 that should be accounted for the burned liquidity, - /// amount1Min The minimum amount of token1 that should be accounted for the burned liquidity, - /// deadline The time by which the transaction must be included to effect the change - /// @param token0FeeAmount The amount of token0 to send to feeCollector - /// @param token1FeeAmount The amount of token1 to send to feeCollector - /// @param permitDeadline The deadline of the permit signature - /// @param v The recovery byte of the signature - /// @param r Half of the ECDSA signature pair - /// @param s Half of the ECDSA signature pair - /// @return amount0 The amount of token0 returned minus fees - /// @return amount1 The amount of token1 returned minus fees - function removeLiquidity( - INPM.DecreaseLiquidityParams memory params, - uint256 token0FeeAmount, - uint256 token1FeeAmount, - uint256 permitDeadline, - uint8 v, - bytes32 r, - bytes32 s - ) external returns (uint256 amount0, uint256 amount1); - - /// @notice Removes all liquidity from a position and swaps to a single token - /// @dev Slippage check is enforced by specifying `amount0Min` when `token0` is the target token - /// and `amount1Min` otherwise, applied after transaction fees. - /// @param params tokenId The ID of the token for which liquidity is being removed, - /// amount0Min The minimum amount of token0 that should be accounted for the burned liquidity, - /// amount1Min The minimum amount of token1 that should be accounted for the burned liquidity, - /// deadline The time by which the transaction must be included to effect the change - /// @param zeroForOne True if token0 is being swapped for token1, false otherwise - /// @param token0FeeAmount The amount of token0 to send to feeCollector - /// @param token1FeeAmount The amount of token1 to send to feeCollector - /// @param swapData The address of the external router and call data - /// @return amount The total amount of desired token returned minus fees - function removeLiquiditySingle( - INPM.DecreaseLiquidityParams memory params, - bool zeroForOne, - uint256 token0FeeAmount, - uint256 token1FeeAmount, - bytes calldata swapData - ) external returns (uint256 amount); - - /// @notice Removes all liquidity from a position and swaps to a single token using permit - /// @dev Slippage check is enforced by specifying `amount0Min` when `token0` is the target token - /// and `amount1Min` otherwise, applied after transaction fees. - /// @param params tokenId The ID of the token for which liquidity is being removed, - /// amount0Min The minimum amount of token0 that should be accounted for the burned liquidity, - /// amount1Min The minimum amount of token1 that should be accounted for the burned liquidity, - /// deadline The time by which the transaction must be included to effect the change - /// @param zeroForOne True if token0 is being swapped for token1, false otherwise - /// @param token0FeeAmount The amount of token0 to send to feeCollector - /// @param token1FeeAmount The amount of token1 to send to feeCollector - /// @param swapData The address of the external router and call data - /// @param permitDeadline The deadline of the permit signature - /// @param v The recovery byte of the signature - /// @param r Half of the ECDSA signature pair - /// @param s Half of the ECDSA signature pair - /// @return amount The total amount of desired token returned minus fees - function removeLiquiditySingle( - INPM.DecreaseLiquidityParams memory params, - bool zeroForOne, - uint256 token0FeeAmount, - uint256 token1FeeAmount, - bytes calldata swapData, + bool isUnwrapNative, uint256 permitDeadline, uint8 v, bytes32 r, diff --git a/test/Automan.t.sol b/test/Automan.t.sol index 089f15e..4141fee 100644 --- a/test/Automan.t.sol +++ b/test/Automan.t.sol @@ -450,6 +450,7 @@ contract UniV3AutomanTest is UniHandler { INPM.DecreaseLiquidityParams(tokenId, liquidityDesired, 0, 0, deadline), /* token0FeeAmount= */ 0, /* token1FeeAmount= */ 0, + /* isUnwrapNative= */ true, deadline, v, r, @@ -492,6 +493,7 @@ contract UniV3AutomanTest is UniHandler { /* token0FeeAmount= */ 0, /* token1FeeAmount= */ 0, new bytes(0), + /* isUnwrapNative= */ true, deadline, v, r, @@ -526,16 +528,18 @@ contract UniV3AutomanTest is UniHandler { uint256 deadline = block.timestamp; (uint8 v, bytes32 r, bytes32 s) = permitSig(address(automan), tokenId, deadline, pk); uint256 gasBefore = gasleft(); - (uint256 amount0, uint256 amount1) = automan.removeLiquidity( + (, , , , , , , uint128 liquidity, , , , ) = IUniV3NPM(address(npm)).positions(tokenId); + (uint256 amount0, uint256 amount1) = automan.decreaseLiquidity( INPM.DecreaseLiquidityParams({ tokenId: tokenId, - liquidity: 0, + liquidity: liquidity, amount0Min: 0, amount1Min: 0, deadline: deadline }), /* token0FeeAmount= */ 0, /* token1FeeAmount= */ 0, + /* isUnwrapNative= */ true, deadline, v, r, @@ -571,10 +575,11 @@ contract UniV3AutomanTest is UniHandler { uint256 tokenId = thisTokenId; uint256 deadline = block.timestamp; (uint8 v, bytes32 r, bytes32 s) = sign(permitDigest(address(automan), tokenId, deadline)); - automan.removeLiquiditySingle( + (, , , , , , , uint128 liquidity, , , , ) = IUniV3NPM(address(npm)).positions(tokenId); + automan.decreaseLiquiditySingle( INPM.DecreaseLiquidityParams({ tokenId: tokenId, - liquidity: 0, + liquidity: liquidity, amount0Min: 0, amount1Min: 0, deadline: deadline @@ -583,6 +588,7 @@ contract UniV3AutomanTest is UniHandler { /* token0FeeAmount= */ 0, /* token1FeeAmount= */ 0, new bytes(0), + /* isUnwrapNative= */ true, deadline, v, r, diff --git a/test/uniswap/UniHandler.sol b/test/uniswap/UniHandler.sol index 197bbbd..03207dc 100644 --- a/test/uniswap/UniHandler.sol +++ b/test/uniswap/UniHandler.sol @@ -303,7 +303,8 @@ contract UniHandler is UniBase { (amount0, amount1) = automan.decreaseLiquidity( INPM.DecreaseLiquidityParams(tokenId, liquidityDelta, 0, 0, block.timestamp), token0FeeAmount, - token1FeeAmount + token1FeeAmount, + /* isUnwrapNative= */ true ); } @@ -320,7 +321,8 @@ contract UniHandler is UniBase { zeroForOne, token0FeeAmount, token1FeeAmount, - new bytes(0) + new bytes(0), + /* isUnwrapNative= */ true ); } @@ -330,16 +332,18 @@ contract UniHandler is UniBase { uint256 token0FeeAmount, uint256 token1FeeAmount ) internal returns (uint256 amount0, uint256 amount1) { - (amount0, amount1) = automan.removeLiquidity( + (, , , , , , , uint128 liquidity, , , , ) = IUniV3NPM(address(npm)).positions(tokenId); + (amount0, amount1) = automan.decreaseLiquidity( INPM.DecreaseLiquidityParams({ tokenId: tokenId, - liquidity: 0, + liquidity: liquidity, amount0Min: 0, amount1Min: 0, deadline: block.timestamp }), token0FeeAmount, - token1FeeAmount + token1FeeAmount, + /* isUnwrapNative= */ true ); } @@ -350,10 +354,11 @@ contract UniHandler is UniBase { uint256 token0FeeAmount, uint256 token1FeeAmount ) internal returns (uint256 amount) { - amount = automan.removeLiquiditySingle( + (, , , , , , , uint128 liquidity, , , , ) = IUniV3NPM(address(npm)).positions(tokenId); + amount = automan.decreaseLiquiditySingle( INPM.DecreaseLiquidityParams({ tokenId: tokenId, - liquidity: 0, + liquidity: liquidity, amount0Min: 0, amount1Min: 0, deadline: block.timestamp @@ -361,7 +366,8 @@ contract UniHandler is UniBase { zeroForOne, token0FeeAmount, token1FeeAmount, - new bytes(0) + new bytes(0), + /* isUnwrapNative= */ true ); } @@ -592,9 +598,9 @@ contract UniHandler is UniBase { if (liquidity != 0) { vm.prank(NPMCaller.ownerOf(npm, tokenId)); npm.approve(address(automan), tokenId); - (amount0, amount1) = _removeLiquidity(tokenId, /* token0FeeAmount= */ 0, /* token1FeeAmount= */ 0); + (amount0, amount1) = _decreaseLiquidity(tokenId, liquidity, /* token0FeeAmount= */ 0, /* token1FeeAmount= */ 0); _tokenIds.remove(tokenId); - countCall("removeLiquidity"); + countCall("decreaseLiquidity"); } } } @@ -607,14 +613,15 @@ contract UniHandler is UniBase { if (liquidity != 0) { vm.prank(NPMCaller.ownerOf(npm, tokenId)); npm.approve(address(automan), tokenId); - amount = _removeLiquiditySingle( + amount = _decreaseLiquiditySingle( tokenId, + liquidity, zeroForOne, /* token0FeeAmount= */ 0, /* token1FeeAmount= */ 0 ); _tokenIds.remove(tokenId); - countCall("removeLiquiditySingle"); + countCall("decreaseLiquiditySingle"); } } } From c2a255151406a908817c89c734c994e6b86f8a6f Mon Sep 17 00:00:00 2001 From: tommyzhao451 Date: Wed, 15 Jan 2025 14:58:46 -0800 Subject: [PATCH 2/2] lint --- README.md | 2 +- src/SlipStreamAutoman.sol | 19 ++++++++----- src/base/Automan.sol | 55 +++++++++++++++++++++++++++++-------- test/uniswap/UniHandler.sol | 7 ++++- 4 files changed, 63 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index cffff43..7b66668 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ git clone https://github.com/0age/create2crunch cd create2crunch export FACTORY="0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2" export CALLER="[DEPLOYER_ADDRESS_GOES_HERE]" -export INIT_CODE_HASH="0x48684f451a08b8535db7a2b934c443c9f269775950f4bdea4388bc3b5fae75e7" +export INIT_CODE_HASH="[INIT_CODE_HASH_GOES_HERE]" cargo run --release $FACTORY $CALLER $INIT_CODE_HASH ``` diff --git a/src/SlipStreamAutoman.sol b/src/SlipStreamAutoman.sol index fb28118..88d4a44 100644 --- a/src/SlipStreamAutoman.sol +++ b/src/SlipStreamAutoman.sol @@ -257,12 +257,12 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu if (amount0 < amount0Desired) { address token0 = params.token0; token0.safeApprove(address(npm), 0); - refund(token0, recipient, amount0Desired - amount0, /* isUnwrapNative = */ true); + refund(token0, recipient, amount0Desired - amount0, /* isUnwrapNative= */ true); } if (amount1 < amount1Desired) { address token1 = params.token1; token1.safeApprove(address(npm), 0); - refund(token1, recipient, amount1Desired - amount1, /* isUnwrapNative = */ true); + refund(token1, recipient, amount1Desired - amount1, /* isUnwrapNative= */ true); } } } @@ -280,11 +280,11 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu unchecked { if (amount0 < amount0Desired) { token0.safeApprove(address(npm), 0); - refund(token0, msg.sender, amount0Desired - amount0, /* isUnwrapNative = */ true); + refund(token0, msg.sender, amount0Desired - amount0, /* isUnwrapNative= */ true); } if (amount1 < amount1Desired) { token1.safeApprove(address(npm), 0); - refund(token1, msg.sender, amount1Desired - amount1, /* isUnwrapNative = */ true); + refund(token1, msg.sender, amount1Desired - amount1, /* isUnwrapNative= */ true); } } } @@ -313,11 +313,11 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu address _feeCollector = feeConfig.feeCollector; if (token0FeeAmount != 0) { token0DeductibleAmount -= token0FeeAmount; - refund(token0, _feeCollector, token0FeeAmount, /* isUnwrapNative = */ true); + refund(token0, _feeCollector, token0FeeAmount, /* isUnwrapNative= */ true); } if (token1FeeAmount != 0) { token1DeductibleAmount -= token1FeeAmount; - refund(token1, _feeCollector, token1FeeAmount, /* isUnwrapNative = */ true); + refund(token1, _feeCollector, token1FeeAmount, /* isUnwrapNative= */ true); } } return (token0DeductibleAmount, token1DeductibleAmount); @@ -347,8 +347,9 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu ) private returns (uint256 amount0, uint256 amount1) { // uint256 tokenId = params.tokenId; // stacktoodeep error SlipStreamPosition memory pos = _positions(params.tokenId); - // Slippage check is delegated to `NonfungiblePositionManager` via `DecreaseLiquidityParams`. + // Optionally collect without decreasing liquidity. if (params.liquidity != 0) { + // Slippage check is delegated to `NonfungiblePositionManager` via `DecreaseLiquidityParams`. NPMCaller.decreaseLiquidity(npm, params); } // Collect the tokens owed and deduct gas and aperture fees. @@ -358,6 +359,7 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu if (amount0 != 0) refund(pos.token0, owner, amount0, isUnwrapNative); if (amount1 != 0) refund(pos.token1, owner, amount1, isUnwrapNative); if (params.liquidity == pos.liquidity) { + // Burn token when removing all liquidity. _burn(params.tokenId); } } @@ -381,7 +383,9 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu amountMin = params.amount0Min; params.amount0Min = 0; } + // Optionally collect without decreasing liquidity. if (params.liquidity != 0) { + // Slippage check is delegated to `NonfungiblePositionManager` via `DecreaseLiquidityParams`. NPMCaller.decreaseLiquidity(npm, params); } // Collect the tokens owed and deduct gas and aperture fees. @@ -416,6 +420,7 @@ contract SlipStreamAutoman is Ownable, SlipStreamSwapRouter, IAutomanCommon, IAu } if (amount < amountMin) revert InsufficientAmount(); if (params.liquidity == pos.liquidity) { + // Burn token when removing all liquidity. _burn(tokenId); } } diff --git a/src/base/Automan.sol b/src/base/Automan.sol index 4a5c386..4aa8c61 100644 --- a/src/base/Automan.sol +++ b/src/base/Automan.sol @@ -253,12 +253,12 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M if (amount0 < amount0Desired) { address token0 = params.token0; token0.safeApprove(address(npm), 0); - refund(token0, recipient, amount0Desired - amount0, /* isUnwrapNative = */ true); + refund(token0, recipient, amount0Desired - amount0, /* isUnwrapNative= */ true); } if (amount1 < amount1Desired) { address token1 = params.token1; token1.safeApprove(address(npm), 0); - refund(token1, recipient, amount1Desired - amount1, /* isUnwrapNative = */ true); + refund(token1, recipient, amount1Desired - amount1, /* isUnwrapNative= */ true); } } } @@ -276,11 +276,11 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M unchecked { if (amount0 < amount0Desired) { token0.safeApprove(address(npm), 0); - refund(token0, msg.sender, amount0Desired - amount0, /* isUnwrapNative = */ true); + refund(token0, msg.sender, amount0Desired - amount0, /* isUnwrapNative= */ true); } if (amount1 < amount1Desired) { token1.safeApprove(address(npm), 0); - refund(token1, msg.sender, amount1Desired - amount1, /* isUnwrapNative = */ true); + refund(token1, msg.sender, amount1Desired - amount1, /* isUnwrapNative= */ true); } } } @@ -309,11 +309,11 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M address _feeCollector = feeConfig.feeCollector; if (token0FeeAmount != 0) { token0DeductibleAmount -= token0FeeAmount; - refund(token0, _feeCollector, token0FeeAmount, /* isUnwrapNative = */ true); + refund(token0, _feeCollector, token0FeeAmount, /* isUnwrapNative= */ true); } if (token1FeeAmount != 0) { token1DeductibleAmount -= token1FeeAmount; - refund(token1, _feeCollector, token1FeeAmount, /* isUnwrapNative = */ true); + refund(token1, _feeCollector, token1FeeAmount, /* isUnwrapNative= */ true); } } return (token0DeductibleAmount, token1DeductibleAmount); @@ -343,17 +343,25 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M ) private returns (uint256 amount0, uint256 amount1) { // uint256 tokenId = params.tokenId; // stacktoodeep error Position memory pos = _positions(params.tokenId); - // Slippage check is delegated to `NonfungiblePositionManager` via `DecreaseLiquidityParams`. + // Optionally collect without decreasing liquidity. if (params.liquidity != 0) { + // Slippage check is delegated to `NonfungiblePositionManager` via `DecreaseLiquidityParams`. NPMCaller.decreaseLiquidity(npm, params); } // Collect the tokens owed and deduct gas and aperture fees. - (amount0, amount1) = _collectDeductFees(params.tokenId, pos.token0, pos.token1, token0FeeAmount, token1FeeAmount); + (amount0, amount1) = _collectDeductFees( + params.tokenId, + pos.token0, + pos.token1, + token0FeeAmount, + token1FeeAmount + ); // Send the remaining amounts to the position owner address owner = NPMCaller.ownerOf(npm, params.tokenId); if (amount0 != 0) refund(pos.token0, owner, amount0, isUnwrapNative); if (amount1 != 0) refund(pos.token1, owner, amount1, isUnwrapNative); if (params.liquidity == pos.liquidity) { + // Burn token when removing all liquidity. _burn(params.tokenId); } } @@ -377,7 +385,9 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M amountMin = params.amount0Min; params.amount0Min = 0; } + // Optionally collect without decreasing liquidity. if (params.liquidity != 0) { + // Slippage check is delegated to `NonfungiblePositionManager` via `DecreaseLiquidityParams`. NPMCaller.decreaseLiquidity(npm, params); } // Collect the tokens owed and deduct gas and aperture fees. @@ -412,6 +422,7 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M } if (amount < amountMin) revert InsufficientAmount(); if (params.liquidity == pos.liquidity) { + // Burn token when removing all liquidity. _burn(tokenId); } } @@ -426,7 +437,15 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M bool isUnwrapNative ) private returns (uint256 amount) { Position memory pos = _positions(params.tokenId); - amount = _decreaseCollectSingle(params, pos, zeroForOne, token0FeeAmount, token1FeeAmount, swapData, isUnwrapNative); + amount = _decreaseCollectSingle( + params, + pos, + zeroForOne, + token0FeeAmount, + token1FeeAmount, + swapData, + isUnwrapNative + ); } /// @dev Internal function to remove liquidity, collect tokens to this contract, and deduct fees @@ -667,7 +686,14 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M ) external returns (uint256 amount) { uint256 tokenId = params.tokenId; checkAuthorizedForToken(tokenId); - amount = _decreaseLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData, isUnwrapNative); + amount = _decreaseLiquiditySingle( + params, + zeroForOne, + token0FeeAmount, + token1FeeAmount, + swapData, + isUnwrapNative + ); emit DecreaseLiquidity(tokenId); } @@ -687,7 +713,14 @@ abstract contract Automan is Ownable, SwapRouter, IAutomanCommon, IAutomanUniV3M uint256 tokenId = params.tokenId; checkAuthorizedForToken(tokenId); selfPermitIfNecessary(tokenId, permitDeadline, v, r, s); - amount = _decreaseLiquiditySingle(params, zeroForOne, token0FeeAmount, token1FeeAmount, swapData, isUnwrapNative); + amount = _decreaseLiquiditySingle( + params, + zeroForOne, + token0FeeAmount, + token1FeeAmount, + swapData, + isUnwrapNative + ); emit DecreaseLiquidity(tokenId); } diff --git a/test/uniswap/UniHandler.sol b/test/uniswap/UniHandler.sol index 03207dc..32c5320 100644 --- a/test/uniswap/UniHandler.sol +++ b/test/uniswap/UniHandler.sol @@ -598,7 +598,12 @@ contract UniHandler is UniBase { if (liquidity != 0) { vm.prank(NPMCaller.ownerOf(npm, tokenId)); npm.approve(address(automan), tokenId); - (amount0, amount1) = _decreaseLiquidity(tokenId, liquidity, /* token0FeeAmount= */ 0, /* token1FeeAmount= */ 0); + (amount0, amount1) = _decreaseLiquidity( + tokenId, + liquidity, + /* token0FeeAmount= */ 0, + /* token1FeeAmount= */ 0 + ); _tokenIds.remove(tokenId); countCall("decreaseLiquidity"); }