diff --git a/.env.example b/.env.example index 5a1c7e0..d6043a7 100644 --- a/.env.example +++ b/.env.example @@ -1,8 +1,5 @@ MAINNET_RPC_URL="" SEPOLIA_RPC_URL="https://rpc.sepolia.org" BASE_SEPOLIA_RPC_URL="https://sepolia.base.org" -BASESCAN_API_KEY="" -CREATE2SALT=""" -DEPLOYER="" -PRIVATE_KEY="0x{YOUR_PRIVATE_KEY}" -MNEMONIC="" \ No newline at end of file +ETHERSCAN_API_KEY="" +CREATE2SALT=""" \ No newline at end of file diff --git a/Makefile b/Makefile index 8a0eec1..17ae6d1 100644 --- a/Makefile +++ b/Makefile @@ -22,8 +22,8 @@ tests-coverage :; ./script/coverage.sh # - {RPC_URL} with the network RPC used for deployment deploy-invoice-collection: forge script script/DeployInvoiceCollection.s.sol:DeployInvoiceCollection \ - $(CREATE2SALT) {RELAYER} {NAME} {SYMBOL} \ - --sig "run(string,address,string,string)" --rpc-url {RPC_URL} --private-key $(PRIVATE_KEY) --etherscan-api-key $(ETHERSCAN_API_KEY) + {RELAYER} {NAME} {SYMBOL} \ + --sig "run(address,string,string)" --rpc-url {RPC_URL} --account dev --etherscan-api-key $(ETHERSCAN_API_KEY) --broadcast --verify # Deploys the {ModuleKeeper} contract deterministically @@ -34,7 +34,7 @@ deploy-deterministic-module-keeper: forge script script/DeployDeterministicModuleKeeper.s.sol:DeployDeterministicModuleKeeper \ $(CREATE2SALT) {INITIAL_OWNER} \ --sig "run(string,address)" --rpc-url {RPC_URL} \ - --private-key $(PRIVATE_KEY) --etherscan-api-key $(ETHERSCAN_API_KEY) \ + --account dev --etherscan-api-key $(ETHERSCAN_API_KEY) \ --broadcast --verify # Deploys the {StationRegistry} contract deterministically @@ -43,12 +43,12 @@ deploy-deterministic-module-keeper: # - {ENTRYPOINT} with the address of the {Entrypoint} contract (currently v6) # - {MODULE_KEEPER} with the address of the {ModuleKeeper} deployment # - {RPC_URL} with the network RPC used for deployment -deploy-deterministic-dock-registry: +deploy-deterministic-station-registry: forge script script/DeployDeterministicStationRegistry.s.sol:DeployDeterministicStationRegistry \ $(CREATE2SALT) {INITIAL_OWNER} {ENTRYPOINT} {MODULE_KEEPER} \ - --sig "run(string,address,address)" --rpc-url {RPC_URL} \ - --private-key $(PRIVATE_KEY) --etherscan-api-key $(ETHERSCAN_API_KEY) \ - --broadcast --verify + --sig "run(string,address,address,address)" --rpc-url {RPC_URL} \ + --account dev --etherscan-api-key $(ETHERSCAN_API_KEY) \ + --broadcast --verify --ffi # Deploys the {PaymentModule} contract deterministically # @@ -61,10 +61,10 @@ deploy-deterministic-dock-registry: deploy-payment-module: forge script script/DeployDeterministicPaymentModule.s.sol:DeployDeterministicPaymentModule \ $(CREATE2SALT) {SABLIER_LOCKUP_LINEAR} {SABLIER_LOCKUP_TRANCHED} {INITIAL_OWNER} {BROKER_ACCOUNT} \ - --sig "run(string,address,address,address,address)" --rpc-url {RPC_URL} --private-key $(PRIVATE_KEY) --etherscan-api-key $(ETHERSCAN_API_KEY) + --sig "run(string,address,address,address,address)" --rpc-url {RPC_URL} --account dev --etherscan-api-key $(ETHERSCAN_API_KEY) --broadcast --verify - # Deploys the {PaymentModule} contract deterministically +# Deploys the {PaymentModule} contract deterministically # Deploys the core contracts deterministically # @@ -77,6 +77,6 @@ deploy-payment-module: # - {RPC_URL} with the network RPC used for deployment deploy-core: forge script script/DeployDeterministicCore.s.sol:DeployDeterministicCore \ - $(CREATE2SALT) {SABLIER_LOCKUP_LINEAR} {SABLIER_LOCKUP_TRANCHED} {INITIAL_OWNER} {BROKER_ACCOUNT} {ENTRYPOINT}\ - --sig "run(string,address,address,address,address,address)" --rpc-url {RPC_URL} --private-key $(PRIVATE_KEY) --etherscan-api-key $(ETHERSCAN_API_KEY) - --broadcast --verify \ No newline at end of file + $(CREATE2SALT) {SABLIER_LOCKUP_LINEAR} {SABLIER_LOCKUP_TRANCHED} {INITIAL_OWNER} {BROKER_ACCOUNT} {ENTRYPOINT} \ + --sig "run(string,address,address,address,address,address)" --rpc-url {RPC_URL} --account dev \ + --broadcast --verify --etherscan-api-key $(ETHERSCAN_API_KEY) --ffi \ No newline at end of file diff --git a/broadcast/DeployDeterministicCore.s.sol/84532/run-1732820030.json b/broadcast/DeployDeterministicCore.s.sol/84532/run-1732820030.json new file mode 100644 index 0000000..33bb991 --- /dev/null +++ b/broadcast/DeployDeterministicCore.s.sol/84532/run-1732820030.json @@ -0,0 +1,352 @@ +{ + "transactions": [ + { + "hash": "0x19161d71b4187301427ab0db5eeeff1b86c48a482ac05d9a7d547ace90e1c757", + "transactionType": "CREATE2", + "contractName": "ModuleKeeper", + "contractAddress": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "function": null, + "arguments": [ + "0x85E094B259718Be1AF0D8CbBD41dd7409c2200aa" + ], + "transaction": { + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5bf9e", + "value": "0x0", + "input": "0x33333037383136383036000000000000000000000000000000000000000000006080604052348015600f57600080fd5b50604051610415380380610415833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b6103888061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80638da5cb5b116100505780638da5cb5b146100b9578063f2fde38b146100e4578063f8e86ece146100f757600080fd5b806305a3b8091461006c5780635da93d7e146100a4575b600080fd5b61008f61007a366004610322565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100b76100b2366004610322565b61010a565b005b6000546100cc906001600160a01b031681565b6040516001600160a01b03909116815260200161009b565b6100b76100f2366004610322565b610185565b6100b7610105366004610322565b61025d565b6000546001600160a01b03163314610134576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03808216600081815260016020526040808220805460ff1916905581549051929316917fc141e02c90a605f7b8e81cd1b69f7c5574cc70a895c1c20873e5f7946d777cd39190a350565b6000546001600160a01b031633146101af576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381166101ef576040517fee2d835d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811790915560405190815233907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09060200160405180910390a250565b6000546001600160a01b03163314610287576040516282b42960e81b815260040160405180910390fd5b806001600160a01b03163b6000036102cb576040517ffdc72f1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038082166000818152600160208190526040808320805460ff191690921790915581549051929316917f2deff0ce80851d5346ba1bc7678a74ce90f0b8109fea432a35e00bc11c028ca69190a350565b60006020828403121561033457600080fd5b81356001600160a01b038116811461034b57600080fd5b939250505056fea2646970667358221220df1b4fb4964f410e14098632c8644983e4dadc247feb1d66015daf6bbc18eab564736f6c634300081a003300000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa", + "nonce": "0x25", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x93911c62d24feb6b174a60dd9674ffdb477ca9ee8070da3a1568807216744727", + "transactionType": "CREATE2", + "contractName": "StationRegistry", + "contractAddress": "0x20fff38b7187d4748ba0f10f33ea63bad1bd58e9", + "function": null, + "arguments": [ + "0x85E094B259718Be1AF0D8CbBD41dd7409c2200aa", + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "0x520cb1322b1060f057c7bab1a31EC7cc5a30b9Dd" + ], + "transaction": { + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x87804f", + "value": "0x0", + "input": "0x333330373831363830360000000000000000000000000000000000000000000060c060405234801561001057600080fd5b5060405161756638038061756683398101604081905261002f916101c1565b813060405161003d9061019c565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610070573d6000803e3d6000fd5b506001600160a01b03908116608052821660a05261008f6000846100bc565b6001600955600680546001600160a01b0319166001600160a01b0392909216919091179055506102359050565b6100c682826100d4565b6100d0828261012f565b5050565b60008281526003602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60008281526005602052604081208054916001919061014e838561020e565b9091555050600092835260056020908152604080852083865260018101835281862080546001600160a01b039096166001600160a01b03199096168617905593855260029093019052912055565b61549e806120c883390190565b6001600160a01b03811681146101be57600080fd5b50565b6000806000606084860312156101d657600080fd5b83516101e1816101a9565b60208501519093506101f2816101a9565b6040850151909250610203816101a9565b809150509250925092565b8082018082111561022f57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a051611e52610276600039600081816103ce01526112610152600081816102140152818161084d01528181610f9501526111bd0152611e526000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806391d14854116100f9578063c3c5a54711610097578063d547741f11610071578063d547741f14610449578063d8fd8f441461045c578063e68a7c3b1461046f578063e6e1c5f81461048257600080fd5b8063c3c5a54714610410578063ca15c87314610423578063d0b3b66d1461043657600080fd5b8063a217fddf116100d3578063a217fddf146103ae578063a32fa5b3146103b6578063a65d69d4146103c9578063ac9650d8146103f057600080fd5b806391d148541461033f5780639387a380146103885780639efb95f71461039b57600080fd5b806340e0df2c116101665780637e5ef8a5116101405780637e5ef8a5146102e657806383a03f8c146103065780638878ed33146103195780639010d07c1461032c57600080fd5b806340e0df2c146102a257806358451f97146102b55780636424ea02146102bd57600080fd5b806311464fbe116101a257806311464fbe1461020f578063248a9ca31461024e5780632f2ff15d1461027c57806336568abe1461028f57600080fd5b806308e93d0a146101c95780630b61e12b146101e75780630e6254fd146101fc575b600080fd5b6101d1610495565b6040516101de91906118ca565b60405180910390f35b6101fa6101f5366004611905565b6104a6565b005b6101d161020a366004611931565b610573565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101de565b61026e61025c36600461194e565b60009081526004602052604090205490565b6040519081526020016101de565b6101fa61028a366004611967565b61059d565b6101fa61029d366004611967565b610633565b6101fa6102b0366004611967565b610690565b61026e610736565b6102366102cb36600461194e565b6007602052600090815260409020546001600160a01b031681565b61026e6102f4366004611931565b60086020526000908152604090205481565b6101fa61031436600461194e565b610742565b610236610327366004611997565b610803565b61023661033a366004611a1e565b61087d565b61037861034d366004611967565b60009182526003602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60405190151581526020016101de565b6101fa610396366004611905565b61097d565b600654610236906001600160a01b031681565b61026e600081565b6103786103c4366004611967565b610a44565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6104036103fe366004611a40565b610a9a565b6040516101de9190611b07565b61037861041e366004611931565b610bf7565b61026e61043136600461194e565b610c03565b61026e610444366004611931565b610c9e565b6101fa610457366004611967565b610cbf565b61023661046a366004611997565b610cd8565b6101d161047d366004611a1e565b610dd3565b6101fa610490366004611931565b610f1f565b60606104a16000610f80565b905090565b336104b18183610f8d565b6105025760405162461bcd60e51b815260206004820152601f60248201527f4163636f756e74466163746f72793a206e6f7420616e206163636f756e742e0060448201526064015b60405180910390fd5b6001600160a01b03831660009081526002602052604081206105249083610fd1565b9050801561056d57836001600160a01b0316826001600160a01b03167f12146497b3b826918ec47f0cac7272a09ed06b30c16c030e99ec48ff5dd60b4760405160405180910390a35b50505050565b6001600160a01b038116600090815260026020526040902060609061059790610f80565b92915050565b6000828152600460205260409020546105b69033610fe6565b60008281526003602090815260408083206001600160a01b038516845290915290205460ff1615610625576040517fd49c166a0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016104f9565b61062f8282611054565b5050565b336001600160a01b03821614610686576040517f4169c6220000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821660248201526044016104f9565b61062f8282611068565b6000828152600760205260409020546001600160a01b03163381146106c8576040516393d3ad0560e01b815260040160405180910390fd5b60008381526007602090815260409182902080546001600160a01b0319166001600160a01b03868116918217909255835191851682529181019190915284917ee234973d1c05a2bee786e3b7f12d0cfeb868b28869411adea70677d8817089910160405180910390a2505050565b60006104a160006110bf565b3361074d8183610f8d565b6107995760405162461bcd60e51b815260206004820152601f60248201527f4163636f756e74466163746f72793a206e6f7420616e206163636f756e742e0060448201526064016104f9565b6107a4600082610fd1565b61062f5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e74466163746f72793a206163636f756e7420616c7265616479206044820152691c9959da5cdd195c995960b21b60648201526084016104f9565b6000806108468585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110c992505050565b90506108727f0000000000000000000000000000000000000000000000000000000000000000826110fc565b9150505b9392505050565b60008281526005602052604081205481805b828110156109745760008681526005602090815260408083208484526001019091529020546001600160a01b03161561090b578482036108f95760008681526005602090815260408083209383526001909301905220546001600160a01b03169250610597915050565b610904600183611b82565b9150610962565b600086815260036020908152604080832083805290915290205460ff16801561094f5750600086815260056020908152604080832083805260020190915290205481145b156109625761095f600183611b82565b91505b61096d600182611b82565b905061088f565b50505092915050565b336109888183610f8d565b6109d45760405162461bcd60e51b815260206004820152601f60248201527f4163636f756e74466163746f72793a206e6f7420616e206163636f756e742e0060448201526064016104f9565b6001600160a01b03831660009081526002602052604081206109f6908361115c565b9050801561056d57836001600160a01b0316826001600160a01b03167f98d1ebbe00ae92a5de96a0f49742a8afa89f42363592bc2e7cfaaed68b45e7a660405160405180910390a350505050565b600082815260036020908152604080832083805290915281205460ff16610a91575060008281526003602090815260408083206001600160a01b038516845290915290205460ff16610597565b50600192915050565b60608167ffffffffffffffff811115610ab557610ab5611b95565b604051908082528060200260200182016040528015610ae857816020015b6060815260200190600190039081610ad35790505b509050336000805b84811015610974578115610b6f57610b4d30878784818110610b1457610b14611bab565b9050602002810190610b269190611bc1565b86604051602001610b3993929190611c0f565b604051602081830303815290604052611171565b848281518110610b5f57610b5f611bab565b6020026020010181905250610bef565b610bd130878784818110610b8557610b85611bab565b9050602002810190610b979190611bc1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061117192505050565b848281518110610be357610be3611bab565b60200260200101819052505b600101610af0565b60006105978183611196565b600081815260056020526040812054815b81811015610c675760008481526005602090815260408083208484526001019091529020546001600160a01b031615610c5557610c52600184611b82565b92505b610c60600182611b82565b9050610c14565b50600083815260036020908152604080832083805290915290205460ff1615610c9857610c95600183611b82565b91505b50919050565b6001600160a01b0381166000908152600260205260408120610597906110bf565b6000828152600460205260409020546106869033610fe6565b60008080610ce884860186611c35565b925092505081600003610d265760098054600081815260076020526040902080546001600160a01b0319163317905581546001019091559150610d5d565b6000828152600760205260409020546001600160a01b03163314610d5d576040516393d3ad0560e01b815260040160405180910390fd5b6000610d6a8787876111b8565b6001600160a01b0380821660009081526008602052604090819020869055519192508491908916907f3903d8288d7344aa44289047c6bed49db2c60352f049fe106a40bd65c17d870790610dc19085908790611d1a565b60405180910390a39695505050505050565b60608183108015610ded5750610de960006110bf565b8211155b610e5f5760405162461bcd60e51b815260206004820152602360248201527f426173654163636f756e74466163746f72793a20696e76616c696420696e646960448201527f636573000000000000000000000000000000000000000000000000000000000060648201526084016104f9565b6000610e6b8484611d3c565b9050610e778484611d3c565b67ffffffffffffffff811115610e8f57610e8f611b95565b604051908082528060200260200182016040528015610eb8578160200160208202803683370190505b50915060005b81811015610f1757610edb610ed38683611b82565b600090611346565b838281518110610eed57610eed611bab565b6001600160a01b0390921660209283029190910190910152610f10600182611b82565b9050610ebe565b505092915050565b6000610f2b8133610fe6565b600680546001600160a01b0319166001600160a01b0384169081179091556040519081527fe42f11c76713655cf0556d673fadbfff81330af747a8a1871cfbac889f8ea8f39060200160405180910390a15050565b6060600061087683611352565b600080610fba7f0000000000000000000000000000000000000000000000000000000000000000846110fc565b6001600160a01b0385811691161491505092915050565b6000610876836001600160a01b0384166113ae565b60008281526003602090815260408083206001600160a01b038516845290915290205460ff1661062f576040517f0878b1060000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016104f9565b61105e82826113fd565b61062f8282611458565b61107282826114c5565b60008281526005602090815260408083206001600160a01b03851680855260028201808552838620805487526001909301855292852080546001600160a01b031916905584529152555050565b6000610597825490565b600082826040516020016110de929190611d4f565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c82012060788201526055604390910120600090610876565b6000610876836001600160a01b038416611527565b60606108768383604051806060016040528060278152602001611df66027913961161a565b6001600160a01b03811660009081526001830160205260408120541515610876565b6000807f0000000000000000000000000000000000000000000000000000000000000000905060006112208686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110c992505050565b9050600061122e83836110fc565b90506001600160a01b0381163b1561124a579250610876915050565b6112548383611692565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112f057611291600082610fd1565b6112f05760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e74466163746f72793a206163636f756e7420616c7265616479206044820152691c9959da5cdd195c995960b21b60648201526084016104f9565b6112fc8188888861172f565b866001600160a01b0316816001600160a01b03167fac631f3001b55ea1509cf3d7e74898f85392a61a76e8149181ae1259622dabc860405160405180910390a39695505050505050565b600061087683836117b0565b6060816000018054806020026020016040519081016040528092919081815260200182805480156113a257602002820191906000526020600020905b81548152602001906001019080831161138e575b50505050509050919050565b60008181526001830160205260408120546113f557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610597565b506000610597565b60008281526003602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000828152600560205260408120805491600191906114778385611b82565b9091555050600092835260056020908152604080852083865260018101835281862080546001600160a01b039096166001600160a01b03199096168617905593855260029093019052912055565b6114cf8282610fe6565b60008281526003602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818152600183016020526040812054801561161057600061154b600183611d3c565b855490915060009061155f90600190611d3c565b90508181146115c457600086600001828154811061157f5761157f611bab565b90600052602060002001549050808760000184815481106115a2576115a2611bab565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115d5576115d5611d71565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610597565b6000915050610597565b6060600080856001600160a01b0316856040516116379190611d87565b600060405180830381855af49150503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b5091509150611688868383876117da565b9695505050505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166105975760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016104f9565b6040517fd1f578940000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063d1f578949061177890869086908690600401611da3565b600060405180830381600087803b15801561179257600080fd5b505af11580156117a6573d6000803e3d6000fd5b5050505050505050565b60008260000182815481106117c7576117c7611bab565b9060005260206000200154905092915050565b60608315611849578251600003611842576001600160a01b0385163b6118425760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104f9565b5081611853565b611853838361185b565b949350505050565b81511561186b5781518083602001fd5b8060405162461bcd60e51b81526004016104f99190611de2565b600081518084526020840193506020830160005b828110156118c05781516001600160a01b0316865260209586019590910190600101611899565b5093949350505050565b6020815260006108766020830184611885565b6001600160a01b03811681146118f257600080fd5b50565b8035611900816118dd565b919050565b6000806040838503121561191857600080fd5b8235611923816118dd565b946020939093013593505050565b60006020828403121561194357600080fd5b8135610876816118dd565b60006020828403121561196057600080fd5b5035919050565b6000806040838503121561197a57600080fd5b82359150602083013561198c816118dd565b809150509250929050565b6000806000604084860312156119ac57600080fd5b83356119b7816118dd565b9250602084013567ffffffffffffffff8111156119d357600080fd5b8401601f810186136119e457600080fd5b803567ffffffffffffffff8111156119fb57600080fd5b866020828401011115611a0d57600080fd5b939660209190910195509293505050565b60008060408385031215611a3157600080fd5b50508035926020909101359150565b60008060208385031215611a5357600080fd5b823567ffffffffffffffff811115611a6a57600080fd5b8301601f81018513611a7b57600080fd5b803567ffffffffffffffff811115611a9257600080fd5b8560208260051b8401011115611aa757600080fd5b6020919091019590945092505050565b60005b83811015611ad2578181015183820152602001611aba565b50506000910152565b60008151808452611af3816020860160208601611ab7565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015611b6057603f19878603018452611b4b858351611adb565b94506020938401939190910190600101611b2f565b50929695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561059757610597611b6c565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611bd857600080fd5b83018035915067ffffffffffffffff821115611bf357600080fd5b602001915036819003821315611c0857600080fd5b9250929050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600080600060608486031215611c4a57600080fd5b8335925060208401359150604084013567ffffffffffffffff811115611c6f57600080fd5b8401601f81018613611c8057600080fd5b803567ffffffffffffffff811115611c9a57611c9a611b95565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715611cc757611cc7611b95565b604052918252602081840181019290810189841115611ce557600080fd5b6020850194505b83851015611d0b57611cfd856118f5565b815260209485019401611cec565b50809450505050509250925092565b6001600160a01b03831681526040602082015260006118536040830184611885565b8181038181111561059757610597611b6c565b6001600160a01b03831681526040602082015260006118536040830184611adb565b634e487b7160e01b600052603160045260246000fd5b60008251611d99818460208701611ab7565b9190910192915050565b6001600160a01b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6020815260006108766020830184611adb56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ee3d8cdff3ca257901dbb1f2e14e76adec8788f7ab6eaeb528e81527ac3ab06664736f6c634300081a003361018060405234801561001157600080fd5b5060405161549e38038061549e83398101604081905261003091610245565b60408051808201825260078152661058d8dbdd5b9d60ca1b60208083019182528351808501855260018152603160f81b908201529151902060e08190527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c0938401909652805194019390932090925291905261012052818161011061012c565b6001600160a01b039081166101405216610160525061027f9050565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee03005460ff8082169161010090041680156101bc5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60ff8281161015610229577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805460ff191660ff90811790915560408051918252517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989181900360200190a15b5050565b6001600160a01b038116811461024257600080fd5b50565b6000806040838503121561025857600080fd5b82516102638161022d565b60208401519092506102748161022d565b809150509250929050565b60805160a05160c05160e051610100516101205161014051610160516151896103156000396000611f210152600081816105ec01528181611867015281816121c601528181612e9201528181612ec801528181612f800152818161300d015261303d01526000612a0c01526000612a5b01526000612a360152600061298f015260006129b9015260006129e301526151896000f3fe6080604052600436106101dc5760003560e01c80638b52d72311610102578063c45a015511610095578063d8cb0d6611610064578063d8cb0d6614610658578063e9523c9714610678578063f15d424e1461069a578063f23a6e61146106c757610219565b8063c45a0155146105da578063d087d2881461060e578063d1f5789414610623578063d42f2f351461064357610219565b8063b0d691fe116100d1578063b0d691fe1461054d578063b61d27f61461057a578063b76464d51461059a578063bc197c81146105ba57610219565b80638b52d7231461049f578063a9082d84146104c1578063a95f524614610500578063ac9650d81461052057610219565b8063399b77da1161017a57806347e1da2a1161014957806347e1da2a1461041f5780635892e2361461043f578063610b59251461045f5780637dff5a791461047f57610219565b8063399b77da146103915780633a871cdd146103bf5780634025feb2146103df57806344004cc1146103ff57610219565b80631626ba7e116101b65780631626ba7e146102db5780631dd756c5146102fb57806324d7806c1461031b5780632d9ad53d1461036157610219565b806301ffc9a71461024b57806307b18bde14610280578063150b7a02146102a257610219565b366102195760405134815233907f8ac633e5b094e1150d2a6495df4d0c77f51d293abe99e7733c78870dfbee7660906020015b60405180910390a2005b60405134815233907f8ac633e5b094e1150d2a6495df4d0c77f51d293abe99e7733c78870dfbee76609060200161020f565b34801561025757600080fd5b5061026b61026636600461400e565b6106e7565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b36600461405d565b61079f565b005b3480156102ae57600080fd5b506102c26102bd366004614140565b61094b565b6040516001600160e01b03199091168152602001610277565b3480156102e757600080fd5b506102c26102f63660046141ac565b610996565b34801561030757600080fd5b5061026b61031636600461420c565b610ac1565b34801561032757600080fd5b5061026b610336366004614252565b6001600160a01b031660009081526000805160206150ed833981519152602052604090205460ff1690565b34801561036d57600080fd5b5061026b61037c366004614252565b60006020819052908152604090205460ff1681565b34801561039d57600080fd5b506103b16103ac36600461426f565b610db7565b604051908152602001610277565b3480156103cb57600080fd5b506103b16103da366004614288565b610e82565b3480156103eb57600080fd5b506102a06103fa3660046142d6565b610ea8565b34801561040b57600080fd5b506102a061041a3660046142d6565b611007565b34801561042b57600080fd5b506102a061043a36600461435c565b6111b3565b34801561044b57600080fd5b506102a061045a366004614444565b61134a565b34801561046b57600080fd5b506102a061047a366004614252565b6117ca565b34801561048b57600080fd5b5061026b61049a366004614252565b6118f7565b3480156104ab57600080fd5b506104b46119cf565b604051610277919061455d565b3480156104cd57600080fd5b506104e16104dc366004614444565b611c58565b6040805192151583526001600160a01b03909116602083015201610277565b34801561050c57600080fd5b506102a061051b366004614252565b611ce4565b34801561052c57600080fd5b5061054061053b3660046145c2565b611d89565b6040516102779190614654565b34801561055957600080fd5b50610562611ee6565b6040516001600160a01b039091168152602001610277565b34801561058657600080fd5b5061026b6105953660046146ad565b611f46565b3480156105a657600080fd5b506102a06105b5366004614252565b611fff565b3480156105c657600080fd5b506102c26105d536600461479a565b612060565b3480156105e657600080fd5b506105627f000000000000000000000000000000000000000000000000000000000000000081565b34801561061a57600080fd5b506103b1612117565b34801561062f57600080fd5b506102a061063e366004614854565b6121b0565b34801561064f57600080fd5b506104b4612264565b34801561066457600080fd5b506102a0610673366004614874565b61241b565b34801561068457600080fd5b5061068d612658565b60405161027791906148f6565b3480156106a657600080fd5b506106ba6106b5366004614252565b612671565b6040516102779190614942565b3480156106d357600080fd5b506102c26106e2366004614955565b61277b565b60006001600160e01b031982167f1338becd00000000000000000000000000000000000000000000000000000000148061074a57506001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061076557506001600160e01b03198216630a85bd0160e11b145b8061079957506001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6107a7611ee6565b6001600160a01b0316336001600160a01b031614806107e257503360009081526000805160206150ed833981519152602052604090205460ff165b61083d5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b60648201526084015b60405180910390fd5b47811115610877576040517f433bcf7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108c4576040519150601f19603f3d011682016040523d82523d6000602084013e6108c9565b606091505b5050905080610904576040517f8103725c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518281526000906001600160a01b038516907f6f9cbac839b826cc524f53d10416c053fce34ec15fd1001720e777cc49720e76906020015b60405180910390a3505050565b600082846001600160a01b03167f35a641d6803b18b3c2a97b78c27d31dab914e9626b63b48fb9c5747c93a3f96d60405160405180910390a350630a85bd0160e11b5b949350505050565b6000806109a284610db7565b905060006109b082856127ec565b90506109e1816001600160a01b031660009081526000805160206150ed833981519152602052604090205460ff1690565b156109f85750630b135d3f60e11b91506107999050565b6001600160a01b03811660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0660205260409020610a398133612816565b80610a695750610a4881612838565b6001148015610a6957506000610a5e8282612842565b6001600160a01b0316145b610a9f576040517f81799bfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa8826118f7565b15610ab857630b135d3f60e11b93505b50505092915050565b6001600160a01b03821660009081526000805160206150ed833981519152602052604081205460ff1615610af757506001610799565b6001600160a01b03831660008181527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def05602090815260408083208151606081018352815481526001909101546001600160801b03808216838601908152600160801b9092048116838501529585527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0690935292209051919290914291161180610bad575081604001516001600160801b03164210155b80610bbe5750610bbc81612838565b155b15610bce57600092505050610799565b6000610be5610be060608701876149b2565b61284e565b90506000610bf283612838565b6001148015610c1357506000610c088482612842565b6001600160a01b0316145b90507f49e2d80a000000000000000000000000000000000000000000000000000000006001600160e01b0319831601610ca357600080610c5e610c5960608a018a6149b2565b6128a0565b9150915082610c8457610c718583612816565b610c845760009650505050505050610799565b8551811115610c9c5760009650505050505050610799565b5050610daa565b7fb81e25d6000000000000000000000000000000000000000000000000000000006001600160e01b0319831601610d9d57600080610cec610ce760608a018a6149b2565b61291d565b509150915082610d4c5760005b8251811015610d4a57610d2e838281518110610d1757610d176149f9565b60200260200101518761281690919063ffffffff16565b610d42576000975050505050505050610799565b600101610cf9565b505b60005b8251811015610d9557818181518110610d6a57610d6a6149f9565b602002602001015187600001511015610d8d576000975050505050505050610799565b600101610d4f565b505050610daa565b6000945050505050610799565b5060019695505050505050565b60008082604051602001610dcd91815260200190565b60405160208183030381529060405280519060200120905060007f82cac545155fcbf147f2a9013809613677ac7d65498556e6d19ce43bcbf6c28482604051602001610e23929190918252602082015260400190565b604051602081830303815290604052805190602001209050610e43612982565b60405161190160f01b60208201526022810191909152604281018290526062016040516020818303038152906040528051906020012092505050919050565b6000610e8c612aa9565b610e968484612b13565b9050610ea182612c8d565b9392505050565b610eb0611ee6565b6001600160a01b0316336001600160a01b03161480610eeb57503360009081526000805160206150ed833981519152602052604090205460ff165b610f415760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b6040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038481166024830152604482018390528316906342842e0e90606401600060405180830381600087803b158015610faa57600080fd5b505af1158015610fbe573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b03167feea167c0d54572a80626f5fd092a7c1f7b5d8e309533747e7e7d77b0558d6cf18360405161093e91815260200190565b61100f611ee6565b6001600160a01b0316336001600160a01b0316148061104a57503360009081526000805160206150ed833981519152602052604090205460ff165b6110a05760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa1580156110fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111219190614a0f565b81111561115a576040517fb5a0380d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116e6001600160a01b0383168483612cda565b816001600160a01b0316836001600160a01b03167f6f9cbac839b826cc524f53d10416c053fce34ec15fd1001720e777cc49720e768360405161093e91815260200190565b6111bb611ee6565b6001600160a01b0316336001600160a01b031614806111f657503360009081526000805160206150ed833981519152602052604090205460ff165b61124c5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b84818114801561125b57508084145b611291576040517f9e63483b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015611340576112cb8888838181106112b1576112b16149f9565b90506020020160208101906112c69190614252565b612d5f565b6113378888838181106112e0576112e06149f9565b90506020020160208101906112f59190614252565b878784818110611307576113076149f9565b90506020020135868685818110611320576113206149f9565b905060200281019061133291906149b2565b612dbc565b50600101611294565b5050505050505050565b60006113596020850185614252565b90504261136c60e0860160c08701614a3f565b6001600160801b03161115801561139b575061138f610100850160e08601614a3f565b6001600160801b031642105b6113e75760405162461bcd60e51b815260206004820152600760248201527f21706572696f64000000000000000000000000000000000000000000000000006044820152606401610834565b6000806113f5868686611c58565b91509150816114485760405162461bcd60e51b81526004016108349060208082526004908201527f2173696700000000000000000000000000000000000000000000000000000000604082015260600190565b61010086013560009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0760209081526040808320805460ff1916600117905561149891908901908901614a6b565b60ff1611156114ce5760006114b36040880160208901614a6b565b60ff1660011490506114c58482612e7e565b50505050505050565b6001600160a01b03831660009081526000805160206150ed833981519152602052604090205460ff16156115445760405162461bcd60e51b815260206004820152600560248201527f61646d696e0000000000000000000000000000000000000000000000000000006044820152606401610834565b61156e7f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0284612fcc565b506040518060600160405280876060013581526020018760800160208101906115979190614a3f565b6001600160801b031681526020016115b560c0890160a08a01614a3f565b6001600160801b031690526000805160206151348339815191526001600160a01b03851660009081526005919091016020908152604080832084518155918401519301516001600160801b03908116600160801b0293169290921760019092019190915561165261163160008051602061513483398151915290565b6001600160a01b038616600090815260069190910160205260409020612fe1565b805190915060005b818110156116c9576116b6838281518110611677576116776149f9565b602002602001015161169460008051602061513483398151915290565b6001600160a01b03891660009081526006919091016020526040902090612fee565b506116c2600182614a9c565b905061165a565b506116d76040890189614aaf565b9050905060005b8181101561176b576117586116f660408b018b614aaf565b83818110611706576117066149f9565b905060200201602081019061171b9190614252565b6001600160a01b03881660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def066020526040902090612fcc565b50611764600182614a9c565b90506116de565b5061177588613003565b846001600160a01b0316836001600160a01b03167ff21d10c26e35863a8df291aca54181ee8c4a3bc8e00246c3f7a5a14b69d826a78a6040516117b89190614b8c565b60405180910390a35050505050505050565b6117d2611ee6565b6001600160a01b0316336001600160a01b0316148061180d57503360009081526000805160206150ed833981519152602052604090205460ff165b6118635760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639efb95f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e79190614c84565b90506118f381836130ee565b5050565b6001600160a01b03811660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def05602090815260408083208151606081018352815481526001909101546001600160801b03808216948301859052600160801b9091041691810191909152904210801590611980575080604001516001600160801b031642105b8015610ea157506001600160a01b03831660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def06602052604081206119c790612838565b119392505050565b606060006119ee6000805160206151348339815191525b600201612fe1565b80519091506000805b82811015611a7f57611a21848281518110611a1457611a146149f9565b60200260200101516118f7565b15611a385781611a3081614ca1565b925050611a6d565b6000848281518110611a4c57611a4c6149f9565b60200260200101906001600160a01b031690816001600160a01b0316815250505b611a78600182614a9c565b90506119f7565b508067ffffffffffffffff811115611a9957611a99614089565b604051908082528060200260200182016040528015611af257816020015b6040805160a081018252600080825260606020808401829052938301829052820181905260808201528252600019909201910181611ab75790505b5093506000805b83811015611c505760006001600160a01b0316858281518110611b1e57611b1e6149f9565b60200260200101516001600160a01b031614611c3e576000858281518110611b4857611b486149f9565b602002602001015190506000611b6960008051602061513483398151915290565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611bdf600080516020615134833981519152611631565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250888580611c1e90614ca1565b965081518110611c3057611c306149f9565b602002602001018190525050505b611c49600182614a9c565b9050611af9565b505050505090565b600080611c6e611c67866131f6565b858561333a565b61010086013560009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def07602052604090205490915060ff16158015611cda57506001600160a01b03811660009081526000805160206150ed833981519152602052604090205460ff165b9150935093915050565b611cec611ee6565b6001600160a01b0316336001600160a01b03161480611d2757503360009081526000805160206150ed833981519152602052604090205460ff165b611d7d5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b611d868161338c565b50565b60608167ffffffffffffffff811115611da457611da4614089565b604051908082528060200260200182016040528015611dd757816020015b6060815260200190600190039081611dc25790505b509050336000805b84811015610ab8578115611e5e57611e3c30878784818110611e0357611e036149f9565b9050602002810190611e1591906149b2565b86604051602001611e2893929190614cba565b6040516020818303038152906040526133d7565b848281518110611e4e57611e4e6149f9565b6020026020010181905250611ede565b611ec030878784818110611e7457611e746149f9565b9050602002810190611e8691906149b2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506133d792505050565b848281518110611ed257611ed26149f9565b60200260200101819052505b600101611ddf565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300546000906001600160a01b03168015611f1f57919050565b7f000000000000000000000000000000000000000000000000000000000000000091505090565b6000611f50611ee6565b6001600160a01b0316336001600160a01b03161480611f8b57503360009081526000805160206150ed833981519152602052604090205460ff165b611fe15760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b611fea85612d5f565b611ff685858585612dbc565b95945050505050565b6120076133fc565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000805b84518110156120eb5784818151811061207f5761207f6149f9565b6020026020010151866001600160a01b03167f82cdbe4ae422077a9568bd10613c8abdb5dc95a06a18ebacad5907f88a07b5338684815181106120c4576120c46149f9565b60200260200101516040516120db91815260200190565b60405180910390a3600101612064565b507fbc197c81000000000000000000000000000000000000000000000000000000009695505050505050565b6000612121611ee6565b6040517f35567e1a000000000000000000000000000000000000000000000000000000008152306004820152600060248201526001600160a01b0391909116906335567e1a90604401602060405180830381865afa158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190614a0f565b905090565b60006121be82840184614d47565b9250505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639efb95f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612222573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122469190614c84565b90506122528183613468565b61225d85858561348c565b5050505050565b6060600061227f6000805160206151348339815191526119e6565b80519091508067ffffffffffffffff81111561229d5761229d614089565b6040519080825280602002602001820160405280156122f657816020015b6040805160a0810182526000808252606060208084018290529383018290528201819052608082015282526000199092019101816122bb5790505b50925060005b81811015612415576000838281518110612318576123186149f9565b60200260200101519050600061233960008051602061513483398151915290565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a0810190945291835290925081016123af600080516020615134833981519152611631565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b03168152508684815181106123f4576123f46149f9565b6020026020010181905250505060018161240e9190614a9c565b90506122fc565b50505090565b612423611ee6565b6001600160a01b0316336001600160a01b0316148061245e57503360009081526000805160206150ed833981519152602052604090205460ff165b6124b45760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b600182511115612540576040517f2eb2c2d60000000000000000000000000000000000000000000000000000000081526001600160a01b03841690632eb2c2d690612509903090339087908790600401614dc9565b600060405180830381600087803b15801561252357600080fd5b505af1158015612537573d6000803e3d6000fd5b50505050612605565b826001600160a01b031663f242432a303385600081518110612564576125646149f9565b60200260200101518560008151811061257f5761257f6149f9565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529390921660248401526044830152606482015260a06084820152600060a482015260c401600060405180830381600087803b1580156125ec57600080fd5b505af1158015612600573d6000803e3d6000fd5b505050505b826001600160a01b0316846001600160a01b03167f910db9ce6f750316c5cbc1d9a16b0d05a718599b12f03354ed7354889c3e2495848460405161264a929190614e29565b60405180910390a350505050565b60606121ab600080516020615134833981519152612fe1565b6040805160a08082018352600080835260606020808501829052848601839052818501839052608085018390526001600160a01b0387168084527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0582528684208751938401885280548452600101546001600160801b0380821685850152600160801b90910416838801528651948501875280855283527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def06815294909120929390929082019061274090612fe1565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250915050919050565b600083856001600160a01b03167f82cdbe4ae422077a9568bd10613c8abdb5dc95a06a18ebacad5907f88a07b533856040516127b991815260200190565b60405180910390a3507ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6000806000806127fc8686613690565b92509250925061280c82826136dd565b5090949350505050565b6001600160a01b03811660009081526001830160205260408120541515610ea1565b6000610799825490565b6000610ea183836137e1565b600060048210156128895760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b612897600460008486614e4e565b610ea191614e78565b60008060448310156128dc5760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b6128ea602460048587614e4e565b8101906128f79190614252565b9150612907604460248587614e4e565b810190612914919061426f565b90509250929050565b60608080606484101561295a5760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b6129678460048188614e4e565b8101906129749190614ead565b919790965090945092505050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156129db57507f000000000000000000000000000000000000000000000000000000000000000046145b15612a0557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b612ab1611ee6565b6001600160a01b0316336001600160a01b031614612b115760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610834565b565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c81206000612b92612b556101408701876149b2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061380b9050565b9050612b9e8186610ac1565b612bad57600192505050610799565b6001600160a01b031660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0560209081526040808320815160608082018452825482526001909201546001600160801b0380821683870152600160801b8204908116928501929092528351928301845294825265ffffffffffff8086169483019490945292831691015260d09190911b7fffffffffffff00000000000000000000000000000000000000000000000000001660a09190911b79ffffffffffff00000000000000000000000000000000000000001617949350505050565b8015611d8657604051600090339060001990849084818181858888f193505050503d806000811461225d576040519150601f19603f3d011682016040523d82523d6000602084013e61225d565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612d5a90849061382f565b505050565b6001600160a01b03811660009081526020819052604090205460ff16611d86576040517f21ac7c5f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610834565b60006060856001600160a01b0316858585604051612ddb929190614fbd565b60006040518083038185875af1925050503d8060008114612e18576040519150601f19603f3d011682016040523d82523d6000602084013e612e1d565b606091505b50909250905081612e3057805160208201fd5b856001600160a01b03167fbd580b8dbdf0089f9c3c255442bbef5c4ae91e268f64a237e8fef2b898806276868686604051612e6d93929190614fcd565b60405180910390a250949350505050565b612e8882826138bf565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156118f3578015612f76576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b61e12b837f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b5483005b600101546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612f5a57600080fd5b505af1158015612f6e573d6000803e3d6000fd5b505050505050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639387a380837f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300612f10565b6000610ea1836001600160a01b03841661397a565b60606000610ea1836139c9565b6000610ea1836001600160a01b038416613a25565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15611d86576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b61e12b61306f6020840184614252565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300600101546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156130da57600080fd5b505af115801561225d573d6000803e3d6000fd5b6040517f05a3b8090000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528316906305a3b80990602401602060405180830381865afa15801561314d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131719190615003565b6131a7576040517f967bcfbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600081815260208190526040808220805460ff19166001179055513392917fa05fd23fb8e1c138e73b916ea82ed8f5a77a80a4aefb217defddec7508f6502291a35050565b60607f3fd4a1a1a267c84185e3b7eecd57c68783c0581d538b9d6e5f23e4670497c1e96132266020840184614252565b6132366040850160208601614a6b565b6132436040860186614aaf565b604051602001613254929190615025565b60408051601f198184030181529190528051602090910120606086013561328160a0880160808901614a3f565b61329160c0890160a08a01614a3f565b6132a160e08a0160c08b01614a3f565b6132b26101008b0160e08c01614a3f565b60408051602081019a909a526001600160a01b039098169789019790975260ff9095166060880152608087019390935260a08601919091526001600160801b0390811660c086015290811660e0850152908116610100848101919091529116610120830152830135610140820152610160016040516020818303038152906040529050919050565b600061098e83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508751602089012061338692509050613b1f565b9061380b565b6001600160a01b038116600081815260208190526040808220805460ff19169055513392917f857479d213c45c7f46523c3e64420c84d4dd0b6ec4d904484a2657a08ac6928c91a350565b6060610ea1838360405180606001604052806027815260200161510d60279139613b4c565b3360009081526000805160206150ed833981519152602052604090205460ff16612b115760405162461bcd60e51b815260206004820152600660248201527f2161646d696e00000000000000000000000000000000000000000000000000006044820152606401610834565b306000908152602081905260409020805460ff191660011790556118f38282613bc4565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee03005460ff8082169161010090041680158080156134cc575060018360ff16105b806134e45750303b1580156134e457508260ff166001145b6135565760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610834565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805460ff1916600117905580156135b7577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805461ff0019166101001790555b6135f78686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613bfb92505050565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830155613624866001612e7e565b8015612f6e577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805461ff0019169055604080516001815290517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989181900360200190a1505050505050565b600080600083516041036136ca5760208401516040850151606086015160001a6136bc88828585613c2e565b9550955095505050506136d6565b50508151600091506002905b9250925092565b60008260038111156136f1576136f161505c565b036136fa575050565b600182600381111561370e5761370e61505c565b03613745576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156137595761375961505c565b03613793576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610834565b60038260038111156137a7576137a761505c565b036118f3576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610834565b60008260000182815481106137f8576137f86149f9565b9060005260206000200154905092915050565b600080600061381a8585613cfd565b9150915061382781613d42565b509392505050565b600080602060008451602086016000885af180613852576040513d6000823e3d81fd5b50506000513d9150811561386a578060011415613877565b6001600160a01b0384163b155b156138b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610834565b50505050565b6001600160a01b03821660009081526000805160206150ed83398151915260205260409020805460ff191682158015919091179091556139175761391160008051602061513483398151915283612fcc565b50613931565b61392f60008051602061513483398151915283612fee565b505b816001600160a01b03167f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a111338260405161396e911515815260200190565b60405180910390a25050565b60008181526001830160205260408120546139c157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610799565b506000610799565b606081600001805480602002602001604051908101604052809291908181526020018280548015613a1957602002820191906000526020600020905b815481526020019060010190808311613a05575b50505050509050919050565b60008181526001830160205260408120548015613b0e576000613a49600183615072565b8554909150600090613a5d90600190615072565b9050818114613ac2576000866000018281548110613a7d57613a7d6149f9565b9060005260206000200154905080876000018481548110613aa057613aa06149f9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613ad357613ad3615085565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610799565b6000915050610799565b5092915050565b6000610799613b2c612982565b8360405161190160f01b8152600281019290925260228201526042902090565b6060600080856001600160a01b031685604051613b69919061509b565b600060405180830381855af49150503d8060008114613ba4576040519150601f19603f3d011682016040523d82523d6000602084013e613ba9565b606091505b5091509150613bba86838387613ea7565b9695505050505050565b60005b8151811015612d5a57613bf383838381518110613be657613be66149f9565b60200260200101516130ee565b600101613bc7565b60008282604051602001613c109291906150b7565b60405160208183030381529060405280519060200120905092915050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613c695750600091506003905082613cf3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613cbd573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613ce957506000925060019150829050613cf3565b9250600091508190505b9450945094915050565b6000808251604103613d335760208301516040840151606085015160001a613d2787828585613f20565b94509450505050613d3b565b506000905060025b9250929050565b6000816004811115613d5657613d5661505c565b03613d5e5750565b6001816004811115613d7257613d7261505c565b03613dbf5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610834565b6002816004811115613dd357613dd361505c565b03613e205760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610834565b6003816004811115613e3457613e3461505c565b03611d865760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610834565b60608315613f16578251600003613f0f576001600160a01b0385163b613f0f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610834565b508161098e565b61098e8383613fe4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613f575750600090506003613fdb565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613fab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613fd457600060019250925050613fdb565b9150600090505b94509492505050565b815115613ff45781518083602001fd5b8060405162461bcd60e51b815260040161083491906150d9565b60006020828403121561402057600080fd5b81356001600160e01b031981168114610ea157600080fd5b6001600160a01b0381168114611d8657600080fd5b803561405881614038565b919050565b6000806040838503121561407057600080fd5b823561407b81614038565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140c8576140c8614089565b604052919050565b600082601f8301126140e157600080fd5b813567ffffffffffffffff8111156140fb576140fb614089565b61410e601f8201601f191660200161409f565b81815284602083860101111561412357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561415657600080fd5b843561416181614038565b9350602085013561417181614038565b925060408501359150606085013567ffffffffffffffff81111561419457600080fd5b6141a0878288016140d0565b91505092959194509250565b600080604083850312156141bf57600080fd5b82359150602083013567ffffffffffffffff8111156141dd57600080fd5b6141e9858286016140d0565b9150509250929050565b6000610160828403121561420657600080fd5b50919050565b6000806040838503121561421f57600080fd5b823561422a81614038565b9150602083013567ffffffffffffffff81111561424657600080fd5b6141e9858286016141f3565b60006020828403121561426457600080fd5b8135610ea181614038565b60006020828403121561428157600080fd5b5035919050565b60008060006060848603121561429d57600080fd5b833567ffffffffffffffff8111156142b457600080fd5b6142c0868287016141f3565b9660208601359650604090950135949350505050565b6000806000606084860312156142eb57600080fd5b83356142f681614038565b9250602084013561430681614038565b929592945050506040919091013590565b60008083601f84011261432957600080fd5b50813567ffffffffffffffff81111561434157600080fd5b6020830191508360208260051b8501011115613d3b57600080fd5b6000806000806000806060878903121561437557600080fd5b863567ffffffffffffffff81111561438c57600080fd5b61439889828a01614317565b909750955050602087013567ffffffffffffffff8111156143b857600080fd5b6143c489828a01614317565b909550935050604087013567ffffffffffffffff8111156143e457600080fd5b6143f089828a01614317565b979a9699509497509295939492505050565b60008083601f84011261441457600080fd5b50813567ffffffffffffffff81111561442c57600080fd5b602083019150836020828501011115613d3b57600080fd5b60008060006040848603121561445957600080fd5b833567ffffffffffffffff81111561447057600080fd5b8401610120818703121561448357600080fd5b9250602084013567ffffffffffffffff81111561449f57600080fd5b6144ab86828701614402565b9497909650939450505050565b600060a083016001600160a01b038351168452602083015160a0602086015281815180845260c087019150602083019350600092505b8083101561451a576001600160a01b0384511682526020820191506020840193506001830192506144ee565b50604085015160408701526060850151925061454160608701846001600160801b03169052565b60808501519250611ff660808701846001600160801b03169052565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156145b657603f198786030184526145a18583516144b8565b94506020938401939190910190600101614585565b50929695505050505050565b600080602083850312156145d557600080fd5b823567ffffffffffffffff8111156145ec57600080fd5b6145f885828601614317565b90969095509350505050565b60005b8381101561461f578181015183820152602001614607565b50506000910152565b60008151808452614640816020860160208601614604565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156145b657603f19878603018452614698858351614628565b9450602093840193919091019060010161467c565b600080600080606085870312156146c357600080fd5b84356146ce81614038565b935060208501359250604085013567ffffffffffffffff8111156146f157600080fd5b6146fd87828801614402565b95989497509550505050565b600067ffffffffffffffff82111561472357614723614089565b5060051b60200190565b600082601f83011261473e57600080fd5b813561475161474c82614709565b61409f565b8082825260208201915060208360051b86010192508583111561477357600080fd5b602085015b83811015614790578035835260209283019201614778565b5095945050505050565b600080600080600060a086880312156147b257600080fd5b85356147bd81614038565b945060208601356147cd81614038565b9350604086013567ffffffffffffffff8111156147e957600080fd5b6147f58882890161472d565b935050606086013567ffffffffffffffff81111561481257600080fd5b61481e8882890161472d565b925050608086013567ffffffffffffffff81111561483b57600080fd5b614847888289016140d0565b9150509295509295909350565b60008060006040848603121561486957600080fd5b833561448381614038565b6000806000806080858703121561488a57600080fd5b843561489581614038565b935060208501356148a581614038565b9250604085013567ffffffffffffffff8111156148c157600080fd5b6148cd8782880161472d565b925050606085013567ffffffffffffffff8111156148ea57600080fd5b6141a08782880161472d565b602080825282518282018190526000918401906040840190835b818110156149375783516001600160a01b0316835260209384019390920191600101614910565b509095945050505050565b602081526000610ea160208301846144b8565b600080600080600060a0868803121561496d57600080fd5b853561497881614038565b9450602086013561498881614038565b93506040860135925060608601359150608086013567ffffffffffffffff81111561483b57600080fd5b6000808335601e198436030181126149c957600080fd5b83018035915067ffffffffffffffff8211156149e457600080fd5b602001915036819003821315613d3b57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614a2157600080fd5b5051919050565b80356001600160801b038116811461405857600080fd5b600060208284031215614a5157600080fd5b610ea182614a28565b803560ff8116811461405857600080fd5b600060208284031215614a7d57600080fd5b610ea182614a5a565b634e487b7160e01b600052601160045260246000fd5b8082018082111561079957610799614a86565b6000808335601e19843603018112614ac657600080fd5b83018035915067ffffffffffffffff821115614ae157600080fd5b6020019150600581901b3603821315613d3b57600080fd5b6000808335601e19843603018112614b1057600080fd5b830160208101925035905067ffffffffffffffff811115614b3057600080fd5b8060051b3603821315613d3b57600080fd5b81835260208301925060008160005b84811015614b82578135614b6481614038565b6001600160a01b031686526020958601959190910190600101614b51565b5093949350505050565b60208152614bad60208201614ba08461404d565b6001600160a01b03169052565b6000614bbb60208401614a5a565b60ff8116604084015250614bd26040840184614af9565b6101206060850152614be961014085018284614b42565b91505060006060850135905080608085015250614c0860808501614a28565b6001600160801b03811660a085015250614c2460a08501614a28565b6001600160801b03811660c085015250614c4060c08501614a28565b6001600160801b03811660e085015250614c5c60e08501614a28565b6001600160801b03811661010085015250610100939093013561012092909201919091525090565b600060208284031215614c9657600080fd5b8151610ea181614038565b600060018201614cb357614cb3614a86565b5060010190565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082601f830112614cf157600080fd5b8135614cff61474c82614709565b8082825260208201915060208360051b860101925085831115614d2157600080fd5b602085015b83811015614790578035614d3981614038565b835260209283019201614d26565b600080600060608486031215614d5c57600080fd5b8335925060208401359150604084013567ffffffffffffffff811115614d8157600080fd5b614d8d86828701614ce0565b9150509250925092565b600081518084526020840193506020830160005b82811015614b82578151865260209586019590910190600101614dab565b6001600160a01b03851681526001600160a01b038416602082015260a060408201526000614dfa60a0830185614d97565b8281036060840152614e0c8185614d97565b838103608090940193909352505060008152602001949350505050565b604081526000614e3c6040830185614d97565b8281036020840152611ff68185614d97565b60008085851115614e5e57600080fd5b83861115614e6b57600080fd5b5050820193919092039150565b80356001600160e01b03198116906004841015613b18576001600160e01b0319808560040360031b1b82161691505092915050565b600080600060608486031215614ec257600080fd5b833567ffffffffffffffff811115614ed957600080fd5b614ee586828701614ce0565b935050602084013567ffffffffffffffff811115614f0257600080fd5b614f0e8682870161472d565b925050604084013567ffffffffffffffff811115614f2b57600080fd5b8401601f81018613614f3c57600080fd5b8035614f4a61474c82614709565b8082825260208201915060208360051b850101925088831115614f6c57600080fd5b602084015b83811015614fae57803567ffffffffffffffff811115614f9057600080fd5b614f9f8b6020838901016140d0565b84525060209283019201614f71565b50809450505050509250925092565b8183823760009101908152919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561501557600080fd5b81518015158114610ea157600080fd5b60008184825b8581101561493757813561503e81614038565b6001600160a01b03168352602092830192919091019060010161502b565b634e487b7160e01b600052602160045260246000fd5b8181038181111561079957610799614a86565b634e487b7160e01b600052603160045260246000fd5b600082516150ad818460208701614604565b9190910192915050565b6001600160a01b038316815260406020820152600061098e6040830184614628565b602081526000610ea1602083018461462856fe3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def04416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65643181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def00a2646970667358221220031ec29b7d10b58b08603b27c2e7c45ad33fe3849a37f3597e7f540a333d900464736f6c634300081a003300000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789000000000000000000000000520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "nonce": "0x26", + "chainId": "0x14a34" + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0x328ef0ccf52e5b3ac2f842794349bc379b5e67ed", + "initCode": "0x61018060405234801561001157600080fd5b5060405161549e38038061549e83398101604081905261003091610245565b60408051808201825260078152661058d8dbdd5b9d60ca1b60208083019182528351808501855260018152603160f81b908201529151902060e08190527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c0938401909652805194019390932090925291905261012052818161011061012c565b6001600160a01b039081166101405216610160525061027f9050565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee03005460ff8082169161010090041680156101bc5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60ff8281161015610229577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805460ff191660ff90811790915560408051918252517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989181900360200190a15b5050565b6001600160a01b038116811461024257600080fd5b50565b6000806040838503121561025857600080fd5b82516102638161022d565b60208401519092506102748161022d565b809150509250929050565b60805160a05160c05160e051610100516101205161014051610160516151896103156000396000611f210152600081816105ec01528181611867015281816121c601528181612e9201528181612ec801528181612f800152818161300d015261303d01526000612a0c01526000612a5b01526000612a360152600061298f015260006129b9015260006129e301526151896000f3fe6080604052600436106101dc5760003560e01c80638b52d72311610102578063c45a015511610095578063d8cb0d6611610064578063d8cb0d6614610658578063e9523c9714610678578063f15d424e1461069a578063f23a6e61146106c757610219565b8063c45a0155146105da578063d087d2881461060e578063d1f5789414610623578063d42f2f351461064357610219565b8063b0d691fe116100d1578063b0d691fe1461054d578063b61d27f61461057a578063b76464d51461059a578063bc197c81146105ba57610219565b80638b52d7231461049f578063a9082d84146104c1578063a95f524614610500578063ac9650d81461052057610219565b8063399b77da1161017a57806347e1da2a1161014957806347e1da2a1461041f5780635892e2361461043f578063610b59251461045f5780637dff5a791461047f57610219565b8063399b77da146103915780633a871cdd146103bf5780634025feb2146103df57806344004cc1146103ff57610219565b80631626ba7e116101b65780631626ba7e146102db5780631dd756c5146102fb57806324d7806c1461031b5780632d9ad53d1461036157610219565b806301ffc9a71461024b57806307b18bde14610280578063150b7a02146102a257610219565b366102195760405134815233907f8ac633e5b094e1150d2a6495df4d0c77f51d293abe99e7733c78870dfbee7660906020015b60405180910390a2005b60405134815233907f8ac633e5b094e1150d2a6495df4d0c77f51d293abe99e7733c78870dfbee76609060200161020f565b34801561025757600080fd5b5061026b61026636600461400e565b6106e7565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b36600461405d565b61079f565b005b3480156102ae57600080fd5b506102c26102bd366004614140565b61094b565b6040516001600160e01b03199091168152602001610277565b3480156102e757600080fd5b506102c26102f63660046141ac565b610996565b34801561030757600080fd5b5061026b61031636600461420c565b610ac1565b34801561032757600080fd5b5061026b610336366004614252565b6001600160a01b031660009081526000805160206150ed833981519152602052604090205460ff1690565b34801561036d57600080fd5b5061026b61037c366004614252565b60006020819052908152604090205460ff1681565b34801561039d57600080fd5b506103b16103ac36600461426f565b610db7565b604051908152602001610277565b3480156103cb57600080fd5b506103b16103da366004614288565b610e82565b3480156103eb57600080fd5b506102a06103fa3660046142d6565b610ea8565b34801561040b57600080fd5b506102a061041a3660046142d6565b611007565b34801561042b57600080fd5b506102a061043a36600461435c565b6111b3565b34801561044b57600080fd5b506102a061045a366004614444565b61134a565b34801561046b57600080fd5b506102a061047a366004614252565b6117ca565b34801561048b57600080fd5b5061026b61049a366004614252565b6118f7565b3480156104ab57600080fd5b506104b46119cf565b604051610277919061455d565b3480156104cd57600080fd5b506104e16104dc366004614444565b611c58565b6040805192151583526001600160a01b03909116602083015201610277565b34801561050c57600080fd5b506102a061051b366004614252565b611ce4565b34801561052c57600080fd5b5061054061053b3660046145c2565b611d89565b6040516102779190614654565b34801561055957600080fd5b50610562611ee6565b6040516001600160a01b039091168152602001610277565b34801561058657600080fd5b5061026b6105953660046146ad565b611f46565b3480156105a657600080fd5b506102a06105b5366004614252565b611fff565b3480156105c657600080fd5b506102c26105d536600461479a565b612060565b3480156105e657600080fd5b506105627f000000000000000000000000000000000000000000000000000000000000000081565b34801561061a57600080fd5b506103b1612117565b34801561062f57600080fd5b506102a061063e366004614854565b6121b0565b34801561064f57600080fd5b506104b4612264565b34801561066457600080fd5b506102a0610673366004614874565b61241b565b34801561068457600080fd5b5061068d612658565b60405161027791906148f6565b3480156106a657600080fd5b506106ba6106b5366004614252565b612671565b6040516102779190614942565b3480156106d357600080fd5b506102c26106e2366004614955565b61277b565b60006001600160e01b031982167f1338becd00000000000000000000000000000000000000000000000000000000148061074a57506001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061076557506001600160e01b03198216630a85bd0160e11b145b8061079957506001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6107a7611ee6565b6001600160a01b0316336001600160a01b031614806107e257503360009081526000805160206150ed833981519152602052604090205460ff165b61083d5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b60648201526084015b60405180910390fd5b47811115610877576040517f433bcf7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108c4576040519150601f19603f3d011682016040523d82523d6000602084013e6108c9565b606091505b5050905080610904576040517f8103725c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518281526000906001600160a01b038516907f6f9cbac839b826cc524f53d10416c053fce34ec15fd1001720e777cc49720e76906020015b60405180910390a3505050565b600082846001600160a01b03167f35a641d6803b18b3c2a97b78c27d31dab914e9626b63b48fb9c5747c93a3f96d60405160405180910390a350630a85bd0160e11b5b949350505050565b6000806109a284610db7565b905060006109b082856127ec565b90506109e1816001600160a01b031660009081526000805160206150ed833981519152602052604090205460ff1690565b156109f85750630b135d3f60e11b91506107999050565b6001600160a01b03811660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0660205260409020610a398133612816565b80610a695750610a4881612838565b6001148015610a6957506000610a5e8282612842565b6001600160a01b0316145b610a9f576040517f81799bfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa8826118f7565b15610ab857630b135d3f60e11b93505b50505092915050565b6001600160a01b03821660009081526000805160206150ed833981519152602052604081205460ff1615610af757506001610799565b6001600160a01b03831660008181527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def05602090815260408083208151606081018352815481526001909101546001600160801b03808216838601908152600160801b9092048116838501529585527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0690935292209051919290914291161180610bad575081604001516001600160801b03164210155b80610bbe5750610bbc81612838565b155b15610bce57600092505050610799565b6000610be5610be060608701876149b2565b61284e565b90506000610bf283612838565b6001148015610c1357506000610c088482612842565b6001600160a01b0316145b90507f49e2d80a000000000000000000000000000000000000000000000000000000006001600160e01b0319831601610ca357600080610c5e610c5960608a018a6149b2565b6128a0565b9150915082610c8457610c718583612816565b610c845760009650505050505050610799565b8551811115610c9c5760009650505050505050610799565b5050610daa565b7fb81e25d6000000000000000000000000000000000000000000000000000000006001600160e01b0319831601610d9d57600080610cec610ce760608a018a6149b2565b61291d565b509150915082610d4c5760005b8251811015610d4a57610d2e838281518110610d1757610d176149f9565b60200260200101518761281690919063ffffffff16565b610d42576000975050505050505050610799565b600101610cf9565b505b60005b8251811015610d9557818181518110610d6a57610d6a6149f9565b602002602001015187600001511015610d8d576000975050505050505050610799565b600101610d4f565b505050610daa565b6000945050505050610799565b5060019695505050505050565b60008082604051602001610dcd91815260200190565b60405160208183030381529060405280519060200120905060007f82cac545155fcbf147f2a9013809613677ac7d65498556e6d19ce43bcbf6c28482604051602001610e23929190918252602082015260400190565b604051602081830303815290604052805190602001209050610e43612982565b60405161190160f01b60208201526022810191909152604281018290526062016040516020818303038152906040528051906020012092505050919050565b6000610e8c612aa9565b610e968484612b13565b9050610ea182612c8d565b9392505050565b610eb0611ee6565b6001600160a01b0316336001600160a01b03161480610eeb57503360009081526000805160206150ed833981519152602052604090205460ff165b610f415760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b6040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038481166024830152604482018390528316906342842e0e90606401600060405180830381600087803b158015610faa57600080fd5b505af1158015610fbe573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b03167feea167c0d54572a80626f5fd092a7c1f7b5d8e309533747e7e7d77b0558d6cf18360405161093e91815260200190565b61100f611ee6565b6001600160a01b0316336001600160a01b0316148061104a57503360009081526000805160206150ed833981519152602052604090205460ff165b6110a05760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa1580156110fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111219190614a0f565b81111561115a576040517fb5a0380d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116e6001600160a01b0383168483612cda565b816001600160a01b0316836001600160a01b03167f6f9cbac839b826cc524f53d10416c053fce34ec15fd1001720e777cc49720e768360405161093e91815260200190565b6111bb611ee6565b6001600160a01b0316336001600160a01b031614806111f657503360009081526000805160206150ed833981519152602052604090205460ff165b61124c5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b84818114801561125b57508084145b611291576040517f9e63483b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015611340576112cb8888838181106112b1576112b16149f9565b90506020020160208101906112c69190614252565b612d5f565b6113378888838181106112e0576112e06149f9565b90506020020160208101906112f59190614252565b878784818110611307576113076149f9565b90506020020135868685818110611320576113206149f9565b905060200281019061133291906149b2565b612dbc565b50600101611294565b5050505050505050565b60006113596020850185614252565b90504261136c60e0860160c08701614a3f565b6001600160801b03161115801561139b575061138f610100850160e08601614a3f565b6001600160801b031642105b6113e75760405162461bcd60e51b815260206004820152600760248201527f21706572696f64000000000000000000000000000000000000000000000000006044820152606401610834565b6000806113f5868686611c58565b91509150816114485760405162461bcd60e51b81526004016108349060208082526004908201527f2173696700000000000000000000000000000000000000000000000000000000604082015260600190565b61010086013560009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0760209081526040808320805460ff1916600117905561149891908901908901614a6b565b60ff1611156114ce5760006114b36040880160208901614a6b565b60ff1660011490506114c58482612e7e565b50505050505050565b6001600160a01b03831660009081526000805160206150ed833981519152602052604090205460ff16156115445760405162461bcd60e51b815260206004820152600560248201527f61646d696e0000000000000000000000000000000000000000000000000000006044820152606401610834565b61156e7f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0284612fcc565b506040518060600160405280876060013581526020018760800160208101906115979190614a3f565b6001600160801b031681526020016115b560c0890160a08a01614a3f565b6001600160801b031690526000805160206151348339815191526001600160a01b03851660009081526005919091016020908152604080832084518155918401519301516001600160801b03908116600160801b0293169290921760019092019190915561165261163160008051602061513483398151915290565b6001600160a01b038616600090815260069190910160205260409020612fe1565b805190915060005b818110156116c9576116b6838281518110611677576116776149f9565b602002602001015161169460008051602061513483398151915290565b6001600160a01b03891660009081526006919091016020526040902090612fee565b506116c2600182614a9c565b905061165a565b506116d76040890189614aaf565b9050905060005b8181101561176b576117586116f660408b018b614aaf565b83818110611706576117066149f9565b905060200201602081019061171b9190614252565b6001600160a01b03881660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def066020526040902090612fcc565b50611764600182614a9c565b90506116de565b5061177588613003565b846001600160a01b0316836001600160a01b03167ff21d10c26e35863a8df291aca54181ee8c4a3bc8e00246c3f7a5a14b69d826a78a6040516117b89190614b8c565b60405180910390a35050505050505050565b6117d2611ee6565b6001600160a01b0316336001600160a01b0316148061180d57503360009081526000805160206150ed833981519152602052604090205460ff165b6118635760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639efb95f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e79190614c84565b90506118f381836130ee565b5050565b6001600160a01b03811660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def05602090815260408083208151606081018352815481526001909101546001600160801b03808216948301859052600160801b9091041691810191909152904210801590611980575080604001516001600160801b031642105b8015610ea157506001600160a01b03831660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def06602052604081206119c790612838565b119392505050565b606060006119ee6000805160206151348339815191525b600201612fe1565b80519091506000805b82811015611a7f57611a21848281518110611a1457611a146149f9565b60200260200101516118f7565b15611a385781611a3081614ca1565b925050611a6d565b6000848281518110611a4c57611a4c6149f9565b60200260200101906001600160a01b031690816001600160a01b0316815250505b611a78600182614a9c565b90506119f7565b508067ffffffffffffffff811115611a9957611a99614089565b604051908082528060200260200182016040528015611af257816020015b6040805160a081018252600080825260606020808401829052938301829052820181905260808201528252600019909201910181611ab75790505b5093506000805b83811015611c505760006001600160a01b0316858281518110611b1e57611b1e6149f9565b60200260200101516001600160a01b031614611c3e576000858281518110611b4857611b486149f9565b602002602001015190506000611b6960008051602061513483398151915290565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611bdf600080516020615134833981519152611631565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250888580611c1e90614ca1565b965081518110611c3057611c306149f9565b602002602001018190525050505b611c49600182614a9c565b9050611af9565b505050505090565b600080611c6e611c67866131f6565b858561333a565b61010086013560009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def07602052604090205490915060ff16158015611cda57506001600160a01b03811660009081526000805160206150ed833981519152602052604090205460ff165b9150935093915050565b611cec611ee6565b6001600160a01b0316336001600160a01b03161480611d2757503360009081526000805160206150ed833981519152602052604090205460ff165b611d7d5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b611d868161338c565b50565b60608167ffffffffffffffff811115611da457611da4614089565b604051908082528060200260200182016040528015611dd757816020015b6060815260200190600190039081611dc25790505b509050336000805b84811015610ab8578115611e5e57611e3c30878784818110611e0357611e036149f9565b9050602002810190611e1591906149b2565b86604051602001611e2893929190614cba565b6040516020818303038152906040526133d7565b848281518110611e4e57611e4e6149f9565b6020026020010181905250611ede565b611ec030878784818110611e7457611e746149f9565b9050602002810190611e8691906149b2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506133d792505050565b848281518110611ed257611ed26149f9565b60200260200101819052505b600101611ddf565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300546000906001600160a01b03168015611f1f57919050565b7f000000000000000000000000000000000000000000000000000000000000000091505090565b6000611f50611ee6565b6001600160a01b0316336001600160a01b03161480611f8b57503360009081526000805160206150ed833981519152602052604090205460ff165b611fe15760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b611fea85612d5f565b611ff685858585612dbc565b95945050505050565b6120076133fc565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000805b84518110156120eb5784818151811061207f5761207f6149f9565b6020026020010151866001600160a01b03167f82cdbe4ae422077a9568bd10613c8abdb5dc95a06a18ebacad5907f88a07b5338684815181106120c4576120c46149f9565b60200260200101516040516120db91815260200190565b60405180910390a3600101612064565b507fbc197c81000000000000000000000000000000000000000000000000000000009695505050505050565b6000612121611ee6565b6040517f35567e1a000000000000000000000000000000000000000000000000000000008152306004820152600060248201526001600160a01b0391909116906335567e1a90604401602060405180830381865afa158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190614a0f565b905090565b60006121be82840184614d47565b9250505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639efb95f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612222573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122469190614c84565b90506122528183613468565b61225d85858561348c565b5050505050565b6060600061227f6000805160206151348339815191526119e6565b80519091508067ffffffffffffffff81111561229d5761229d614089565b6040519080825280602002602001820160405280156122f657816020015b6040805160a0810182526000808252606060208084018290529383018290528201819052608082015282526000199092019101816122bb5790505b50925060005b81811015612415576000838281518110612318576123186149f9565b60200260200101519050600061233960008051602061513483398151915290565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a0810190945291835290925081016123af600080516020615134833981519152611631565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b03168152508684815181106123f4576123f46149f9565b6020026020010181905250505060018161240e9190614a9c565b90506122fc565b50505090565b612423611ee6565b6001600160a01b0316336001600160a01b0316148061245e57503360009081526000805160206150ed833981519152602052604090205460ff165b6124b45760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b600182511115612540576040517f2eb2c2d60000000000000000000000000000000000000000000000000000000081526001600160a01b03841690632eb2c2d690612509903090339087908790600401614dc9565b600060405180830381600087803b15801561252357600080fd5b505af1158015612537573d6000803e3d6000fd5b50505050612605565b826001600160a01b031663f242432a303385600081518110612564576125646149f9565b60200260200101518560008151811061257f5761257f6149f9565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529390921660248401526044830152606482015260a06084820152600060a482015260c401600060405180830381600087803b1580156125ec57600080fd5b505af1158015612600573d6000803e3d6000fd5b505050505b826001600160a01b0316846001600160a01b03167f910db9ce6f750316c5cbc1d9a16b0d05a718599b12f03354ed7354889c3e2495848460405161264a929190614e29565b60405180910390a350505050565b60606121ab600080516020615134833981519152612fe1565b6040805160a08082018352600080835260606020808501829052848601839052818501839052608085018390526001600160a01b0387168084527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0582528684208751938401885280548452600101546001600160801b0380821685850152600160801b90910416838801528651948501875280855283527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def06815294909120929390929082019061274090612fe1565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250915050919050565b600083856001600160a01b03167f82cdbe4ae422077a9568bd10613c8abdb5dc95a06a18ebacad5907f88a07b533856040516127b991815260200190565b60405180910390a3507ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6000806000806127fc8686613690565b92509250925061280c82826136dd565b5090949350505050565b6001600160a01b03811660009081526001830160205260408120541515610ea1565b6000610799825490565b6000610ea183836137e1565b600060048210156128895760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b612897600460008486614e4e565b610ea191614e78565b60008060448310156128dc5760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b6128ea602460048587614e4e565b8101906128f79190614252565b9150612907604460248587614e4e565b810190612914919061426f565b90509250929050565b60608080606484101561295a5760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b6129678460048188614e4e565b8101906129749190614ead565b919790965090945092505050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156129db57507f000000000000000000000000000000000000000000000000000000000000000046145b15612a0557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b612ab1611ee6565b6001600160a01b0316336001600160a01b031614612b115760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610834565b565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c81206000612b92612b556101408701876149b2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061380b9050565b9050612b9e8186610ac1565b612bad57600192505050610799565b6001600160a01b031660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0560209081526040808320815160608082018452825482526001909201546001600160801b0380821683870152600160801b8204908116928501929092528351928301845294825265ffffffffffff8086169483019490945292831691015260d09190911b7fffffffffffff00000000000000000000000000000000000000000000000000001660a09190911b79ffffffffffff00000000000000000000000000000000000000001617949350505050565b8015611d8657604051600090339060001990849084818181858888f193505050503d806000811461225d576040519150601f19603f3d011682016040523d82523d6000602084013e61225d565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612d5a90849061382f565b505050565b6001600160a01b03811660009081526020819052604090205460ff16611d86576040517f21ac7c5f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610834565b60006060856001600160a01b0316858585604051612ddb929190614fbd565b60006040518083038185875af1925050503d8060008114612e18576040519150601f19603f3d011682016040523d82523d6000602084013e612e1d565b606091505b50909250905081612e3057805160208201fd5b856001600160a01b03167fbd580b8dbdf0089f9c3c255442bbef5c4ae91e268f64a237e8fef2b898806276868686604051612e6d93929190614fcd565b60405180910390a250949350505050565b612e8882826138bf565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156118f3578015612f76576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b61e12b837f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b5483005b600101546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612f5a57600080fd5b505af1158015612f6e573d6000803e3d6000fd5b505050505050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639387a380837f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300612f10565b6000610ea1836001600160a01b03841661397a565b60606000610ea1836139c9565b6000610ea1836001600160a01b038416613a25565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15611d86576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b61e12b61306f6020840184614252565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300600101546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156130da57600080fd5b505af115801561225d573d6000803e3d6000fd5b6040517f05a3b8090000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528316906305a3b80990602401602060405180830381865afa15801561314d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131719190615003565b6131a7576040517f967bcfbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600081815260208190526040808220805460ff19166001179055513392917fa05fd23fb8e1c138e73b916ea82ed8f5a77a80a4aefb217defddec7508f6502291a35050565b60607f3fd4a1a1a267c84185e3b7eecd57c68783c0581d538b9d6e5f23e4670497c1e96132266020840184614252565b6132366040850160208601614a6b565b6132436040860186614aaf565b604051602001613254929190615025565b60408051601f198184030181529190528051602090910120606086013561328160a0880160808901614a3f565b61329160c0890160a08a01614a3f565b6132a160e08a0160c08b01614a3f565b6132b26101008b0160e08c01614a3f565b60408051602081019a909a526001600160a01b039098169789019790975260ff9095166060880152608087019390935260a08601919091526001600160801b0390811660c086015290811660e0850152908116610100848101919091529116610120830152830135610140820152610160016040516020818303038152906040529050919050565b600061098e83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508751602089012061338692509050613b1f565b9061380b565b6001600160a01b038116600081815260208190526040808220805460ff19169055513392917f857479d213c45c7f46523c3e64420c84d4dd0b6ec4d904484a2657a08ac6928c91a350565b6060610ea1838360405180606001604052806027815260200161510d60279139613b4c565b3360009081526000805160206150ed833981519152602052604090205460ff16612b115760405162461bcd60e51b815260206004820152600660248201527f2161646d696e00000000000000000000000000000000000000000000000000006044820152606401610834565b306000908152602081905260409020805460ff191660011790556118f38282613bc4565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee03005460ff8082169161010090041680158080156134cc575060018360ff16105b806134e45750303b1580156134e457508260ff166001145b6135565760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610834565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805460ff1916600117905580156135b7577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805461ff0019166101001790555b6135f78686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613bfb92505050565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830155613624866001612e7e565b8015612f6e577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805461ff0019169055604080516001815290517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989181900360200190a1505050505050565b600080600083516041036136ca5760208401516040850151606086015160001a6136bc88828585613c2e565b9550955095505050506136d6565b50508151600091506002905b9250925092565b60008260038111156136f1576136f161505c565b036136fa575050565b600182600381111561370e5761370e61505c565b03613745576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156137595761375961505c565b03613793576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610834565b60038260038111156137a7576137a761505c565b036118f3576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610834565b60008260000182815481106137f8576137f86149f9565b9060005260206000200154905092915050565b600080600061381a8585613cfd565b9150915061382781613d42565b509392505050565b600080602060008451602086016000885af180613852576040513d6000823e3d81fd5b50506000513d9150811561386a578060011415613877565b6001600160a01b0384163b155b156138b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610834565b50505050565b6001600160a01b03821660009081526000805160206150ed83398151915260205260409020805460ff191682158015919091179091556139175761391160008051602061513483398151915283612fcc565b50613931565b61392f60008051602061513483398151915283612fee565b505b816001600160a01b03167f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a111338260405161396e911515815260200190565b60405180910390a25050565b60008181526001830160205260408120546139c157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610799565b506000610799565b606081600001805480602002602001604051908101604052809291908181526020018280548015613a1957602002820191906000526020600020905b815481526020019060010190808311613a05575b50505050509050919050565b60008181526001830160205260408120548015613b0e576000613a49600183615072565b8554909150600090613a5d90600190615072565b9050818114613ac2576000866000018281548110613a7d57613a7d6149f9565b9060005260206000200154905080876000018481548110613aa057613aa06149f9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613ad357613ad3615085565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610799565b6000915050610799565b5092915050565b6000610799613b2c612982565b8360405161190160f01b8152600281019290925260228201526042902090565b6060600080856001600160a01b031685604051613b69919061509b565b600060405180830381855af49150503d8060008114613ba4576040519150601f19603f3d011682016040523d82523d6000602084013e613ba9565b606091505b5091509150613bba86838387613ea7565b9695505050505050565b60005b8151811015612d5a57613bf383838381518110613be657613be66149f9565b60200260200101516130ee565b600101613bc7565b60008282604051602001613c109291906150b7565b60405160208183030381529060405280519060200120905092915050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613c695750600091506003905082613cf3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613cbd573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613ce957506000925060019150829050613cf3565b9250600091508190505b9450945094915050565b6000808251604103613d335760208301516040840151606085015160001a613d2787828585613f20565b94509450505050613d3b565b506000905060025b9250929050565b6000816004811115613d5657613d5661505c565b03613d5e5750565b6001816004811115613d7257613d7261505c565b03613dbf5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610834565b6002816004811115613dd357613dd361505c565b03613e205760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610834565b6003816004811115613e3457613e3461505c565b03611d865760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610834565b60608315613f16578251600003613f0f576001600160a01b0385163b613f0f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610834565b508161098e565b61098e8383613fe4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613f575750600090506003613fdb565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613fab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613fd457600060019250925050613fdb565b9150600090505b94509492505050565b815115613ff45781518083602001fd5b8060405162461bcd60e51b815260040161083491906150d9565b60006020828403121561402057600080fd5b81356001600160e01b031981168114610ea157600080fd5b6001600160a01b0381168114611d8657600080fd5b803561405881614038565b919050565b6000806040838503121561407057600080fd5b823561407b81614038565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140c8576140c8614089565b604052919050565b600082601f8301126140e157600080fd5b813567ffffffffffffffff8111156140fb576140fb614089565b61410e601f8201601f191660200161409f565b81815284602083860101111561412357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561415657600080fd5b843561416181614038565b9350602085013561417181614038565b925060408501359150606085013567ffffffffffffffff81111561419457600080fd5b6141a0878288016140d0565b91505092959194509250565b600080604083850312156141bf57600080fd5b82359150602083013567ffffffffffffffff8111156141dd57600080fd5b6141e9858286016140d0565b9150509250929050565b6000610160828403121561420657600080fd5b50919050565b6000806040838503121561421f57600080fd5b823561422a81614038565b9150602083013567ffffffffffffffff81111561424657600080fd5b6141e9858286016141f3565b60006020828403121561426457600080fd5b8135610ea181614038565b60006020828403121561428157600080fd5b5035919050565b60008060006060848603121561429d57600080fd5b833567ffffffffffffffff8111156142b457600080fd5b6142c0868287016141f3565b9660208601359650604090950135949350505050565b6000806000606084860312156142eb57600080fd5b83356142f681614038565b9250602084013561430681614038565b929592945050506040919091013590565b60008083601f84011261432957600080fd5b50813567ffffffffffffffff81111561434157600080fd5b6020830191508360208260051b8501011115613d3b57600080fd5b6000806000806000806060878903121561437557600080fd5b863567ffffffffffffffff81111561438c57600080fd5b61439889828a01614317565b909750955050602087013567ffffffffffffffff8111156143b857600080fd5b6143c489828a01614317565b909550935050604087013567ffffffffffffffff8111156143e457600080fd5b6143f089828a01614317565b979a9699509497509295939492505050565b60008083601f84011261441457600080fd5b50813567ffffffffffffffff81111561442c57600080fd5b602083019150836020828501011115613d3b57600080fd5b60008060006040848603121561445957600080fd5b833567ffffffffffffffff81111561447057600080fd5b8401610120818703121561448357600080fd5b9250602084013567ffffffffffffffff81111561449f57600080fd5b6144ab86828701614402565b9497909650939450505050565b600060a083016001600160a01b038351168452602083015160a0602086015281815180845260c087019150602083019350600092505b8083101561451a576001600160a01b0384511682526020820191506020840193506001830192506144ee565b50604085015160408701526060850151925061454160608701846001600160801b03169052565b60808501519250611ff660808701846001600160801b03169052565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156145b657603f198786030184526145a18583516144b8565b94506020938401939190910190600101614585565b50929695505050505050565b600080602083850312156145d557600080fd5b823567ffffffffffffffff8111156145ec57600080fd5b6145f885828601614317565b90969095509350505050565b60005b8381101561461f578181015183820152602001614607565b50506000910152565b60008151808452614640816020860160208601614604565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156145b657603f19878603018452614698858351614628565b9450602093840193919091019060010161467c565b600080600080606085870312156146c357600080fd5b84356146ce81614038565b935060208501359250604085013567ffffffffffffffff8111156146f157600080fd5b6146fd87828801614402565b95989497509550505050565b600067ffffffffffffffff82111561472357614723614089565b5060051b60200190565b600082601f83011261473e57600080fd5b813561475161474c82614709565b61409f565b8082825260208201915060208360051b86010192508583111561477357600080fd5b602085015b83811015614790578035835260209283019201614778565b5095945050505050565b600080600080600060a086880312156147b257600080fd5b85356147bd81614038565b945060208601356147cd81614038565b9350604086013567ffffffffffffffff8111156147e957600080fd5b6147f58882890161472d565b935050606086013567ffffffffffffffff81111561481257600080fd5b61481e8882890161472d565b925050608086013567ffffffffffffffff81111561483b57600080fd5b614847888289016140d0565b9150509295509295909350565b60008060006040848603121561486957600080fd5b833561448381614038565b6000806000806080858703121561488a57600080fd5b843561489581614038565b935060208501356148a581614038565b9250604085013567ffffffffffffffff8111156148c157600080fd5b6148cd8782880161472d565b925050606085013567ffffffffffffffff8111156148ea57600080fd5b6141a08782880161472d565b602080825282518282018190526000918401906040840190835b818110156149375783516001600160a01b0316835260209384019390920191600101614910565b509095945050505050565b602081526000610ea160208301846144b8565b600080600080600060a0868803121561496d57600080fd5b853561497881614038565b9450602086013561498881614038565b93506040860135925060608601359150608086013567ffffffffffffffff81111561483b57600080fd5b6000808335601e198436030181126149c957600080fd5b83018035915067ffffffffffffffff8211156149e457600080fd5b602001915036819003821315613d3b57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614a2157600080fd5b5051919050565b80356001600160801b038116811461405857600080fd5b600060208284031215614a5157600080fd5b610ea182614a28565b803560ff8116811461405857600080fd5b600060208284031215614a7d57600080fd5b610ea182614a5a565b634e487b7160e01b600052601160045260246000fd5b8082018082111561079957610799614a86565b6000808335601e19843603018112614ac657600080fd5b83018035915067ffffffffffffffff821115614ae157600080fd5b6020019150600581901b3603821315613d3b57600080fd5b6000808335601e19843603018112614b1057600080fd5b830160208101925035905067ffffffffffffffff811115614b3057600080fd5b8060051b3603821315613d3b57600080fd5b81835260208301925060008160005b84811015614b82578135614b6481614038565b6001600160a01b031686526020958601959190910190600101614b51565b5093949350505050565b60208152614bad60208201614ba08461404d565b6001600160a01b03169052565b6000614bbb60208401614a5a565b60ff8116604084015250614bd26040840184614af9565b6101206060850152614be961014085018284614b42565b91505060006060850135905080608085015250614c0860808501614a28565b6001600160801b03811660a085015250614c2460a08501614a28565b6001600160801b03811660c085015250614c4060c08501614a28565b6001600160801b03811660e085015250614c5c60e08501614a28565b6001600160801b03811661010085015250610100939093013561012092909201919091525090565b600060208284031215614c9657600080fd5b8151610ea181614038565b600060018201614cb357614cb3614a86565b5060010190565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082601f830112614cf157600080fd5b8135614cff61474c82614709565b8082825260208201915060208360051b860101925085831115614d2157600080fd5b602085015b83811015614790578035614d3981614038565b835260209283019201614d26565b600080600060608486031215614d5c57600080fd5b8335925060208401359150604084013567ffffffffffffffff811115614d8157600080fd5b614d8d86828701614ce0565b9150509250925092565b600081518084526020840193506020830160005b82811015614b82578151865260209586019590910190600101614dab565b6001600160a01b03851681526001600160a01b038416602082015260a060408201526000614dfa60a0830185614d97565b8281036060840152614e0c8185614d97565b838103608090940193909352505060008152602001949350505050565b604081526000614e3c6040830185614d97565b8281036020840152611ff68185614d97565b60008085851115614e5e57600080fd5b83861115614e6b57600080fd5b5050820193919092039150565b80356001600160e01b03198116906004841015613b18576001600160e01b0319808560040360031b1b82161691505092915050565b600080600060608486031215614ec257600080fd5b833567ffffffffffffffff811115614ed957600080fd5b614ee586828701614ce0565b935050602084013567ffffffffffffffff811115614f0257600080fd5b614f0e8682870161472d565b925050604084013567ffffffffffffffff811115614f2b57600080fd5b8401601f81018613614f3c57600080fd5b8035614f4a61474c82614709565b8082825260208201915060208360051b850101925088831115614f6c57600080fd5b602084015b83811015614fae57803567ffffffffffffffff811115614f9057600080fd5b614f9f8b6020838901016140d0565b84525060209283019201614f71565b50809450505050509250925092565b8183823760009101908152919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561501557600080fd5b81518015158114610ea157600080fd5b60008184825b8581101561493757813561503e81614038565b6001600160a01b03168352602092830192919091019060010161502b565b634e487b7160e01b600052602160045260246000fd5b8181038181111561079957610799614a86565b634e487b7160e01b600052603160045260246000fd5b600082516150ad818460208701614604565b9190910192915050565b6001600160a01b038316815260406020820152600061098e6040830184614628565b602081526000610ea1602083018461462856fe3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def04416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65643181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def00a2646970667358221220031ec29b7d10b58b08603b27c2e7c45ad33fe3849a37f3597e7f540a333d900464736f6c634300081a00330000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d278900000000000000000000000020fff38b7187d4748ba0f10f33ea63bad1bd58e9" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x3d74c70ad1fbb666774d0407b8657e1f876e77aaf5e7da9039dccef11c69e464", + "transactionType": "CREATE", + "contractName": "PaymentModule", + "contractAddress": "0x0cc7d827546555c874e1e4d45646efd424898bf2", + "function": null, + "arguments": [ + "0xFE7fc0Bbde84C239C0aB89111D617dC7cc58049f", + "0xb8c724df3eC8f2Bf8fA808dF2cB5dbab22f3E68c" + ], + "transaction": { + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "gas": "0x4ccb81", + "value": "0x0", + "input": "0x60e06040523060c05234801561001457600080fd5b506040516146a63803806146a683398101604081905261003391610129565b6001600160a01b03808316608052811660a0528181610050610062565b5061005b9050610062565b5050610163565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100b25760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101115780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6001600160a01b038116811461011157600080fd5b6000806040838503121561013c57600080fd5b825161014781610114565b602084015190925061015881610114565b809150509250929050565b60805160a05160c0516144ce6101d8600039600081816122420152818161226b01526123ee0152600081816105a50152818161150e01528181611b43015281816122120152612ab8015260008181610418015281816110e601528181611d85015281816121eb0152612c8801526144ce6000f3fe6080604052600436106101ac5760003560e01c80638da5cb5b116100ec578063ad3cb1cc1161008a578063f2fde38b11610064578063f2fde38b146105c7578063f8458ac1146105e7578063f94d24a114610607578063ffa1ad741461062757600080fd5b8063ad3cb1cc14610510578063c58343ef14610566578063da7924681461059357600080fd5b80639e93e577116100c65780639e93e57714610406578063a57b04b81461043a578063abff01101461045a578063ad35efd4146104e357600080fd5b80638da5cb5b1461037557806390866032146103c6578063982e85c8146103e657600080fd5b806343a681c01161015957806352d1902d1161013357806352d1902d1461030b57806363d4dd3b146103205780636b181a9414610333578063715018a61461036057600080fd5b806343a681c0146102ab5780634ec66d24146102d85780634f1ef286146102f857600080fd5b80631fc702d71161018a5780631fc702d7146102265780633015394c1461025357806342d0708a1461027357600080fd5b80630ef59a6d146101b15780631794bb3c146101e4578063180b7a3a14610206575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004613466565b610670565b6040519081526020015b60405180910390f35b3480156101f057600080fd5b506102046101ff366004613497565b610e5b565b005b34801561021257600080fd5b506102046102213660046134d8565b610fc8565b34801561023257600080fd5b506102466102413660046134d8565b611053565b6040516101db91906134f1565b34801561025f57600080fd5b5061020461026e3660046134d8565b611160565b34801561027f57600080fd5b5061029361028e366004613645565b6113fb565b6040516001600160801b0390911681526020016101db565b3480156102b757600080fd5b506102cb6102c63660046134d8565b61147b565b6040516101db91906136c7565b3480156102e457600080fd5b506102936102f3366004613645565b611585565b610204610306366004613866565b6115bd565b34801561031757600080fd5b506101d16115dc565b61020461032e3660046134d8565b61160b565b34801561033f57600080fd5b5061035361034e366004613645565b611932565b6040516101db9190613929565b34801561036c57600080fd5b506102046119ab565b34801561038157600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016101db565b3480156103d257600080fd5b506102936103e13660046134d8565b6119bf565b3480156103f257600080fd5b50610293610401366004613943565b611b2d565b34801561041257600080fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044657600080fd5b506101d16104553660046139ba565b611b3a565b34801561046657600080fd5b50604080518082018252600080825260209182015281518083019092527f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d290401546001600160a01b031682527f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d29040254908201526040516101db9190613a38565b3480156104ef57600080fd5b506105036104fe3660046134d8565b611bbd565b6040516101db9190613a68565b34801561051c57600080fd5b506105596040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101db9190613a99565b34801561057257600080fd5b506105866105813660046134d8565b611bc8565b6040516101db9190613ae0565b34801561059f57600080fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d357600080fd5b506102046105e2366004613ba2565b611d20565b3480156105f357600080fd5b506101d1610602366004613bbf565b611d7c565b34801561061357600080fd5b50610204610622366004613645565b611dfd565b34801561063357600080fd5b506105596040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6000333b81036106ac576040517f9fc7601100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f1338becd00000000000000000000000000000000000000000000000000000000600482018190529033906301ffc9a790602401602060405180830381865afa158015610723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190613c40565b61077d576040517f8a05e37700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061078f60a0850160808601613ba2565b6001600160a01b0316036107cf576040517f8034b81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e161014084016101208501613c5b565b6001600160801b0316600003610823576040517f932ca0a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108336080840160608501613c78565b64ffffffffff1661084a6060850160408601613c78565b64ffffffffff161115610889576040517f7afb02cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4261089a6080850160608601613c78565b64ffffffffff168164ffffffffff16106108e0576040517f804491f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026108f260c0860160a08701613c95565b600281111561090357610903613913565b0361096257600061091a60e0860160c08701613cb0565b600381111561092b5761092b613913565b03610962576040517f53667a2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018061097560c0870160a08801613c95565b600281111561098657610986613913565b141580156109b5575060006109a160e0870160c08801613cb0565b60038111156109b2576109b2613913565b14155b156109f5576109f26109cd60e0870160c08801613cb0565b6109dd6060880160408901613c78565b6109ed6080890160608a01613c78565b611e07565b90505b6002610a0760c0870160a08801613c95565b6002811115610a1857610a18613913565b03610a21575060015b6000610a3360c0870160a08801613c95565b6002811115610a4457610a44613913565b14610a9d576000610a5d61012087016101008801613ba2565b6001600160a01b031603610a9d576040517ff7ac6ea000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e01546040805160c081018252600080825260208201529195507f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e00919081810190610b0d9060608a01908a01613c78565b64ffffffffff168152602001610b296080890160608a01613c78565b64ffffffffff168152602001610b4560a0890160808a01613ba2565b6001600160a01b031681526020016040518060c001604052808960a0016000016020810190610b749190613c95565b6002811115610b8557610b85613913565b8152602001610b9a60e08b0160c08c01613cb0565b6003811115610bab57610bab613913565b815264ffffffffff86166020820152604001610bcf6101208b016101008c01613ba2565b6001600160a01b03168152602001610bef6101408b016101208c01613c5b565b6001600160801b0316815260006020918201819052919092528781528382526040908190208351815493850151928501516060860151608087015161ffff1990961692151561ff0019169290921761010094151594909402939093176bffffffffffffffffffff000019166201000064ffffffffff948516026bffffffffff00000000000000191617600160381b9390911692909202919091176bffffffffffffffffffffffff16600160601b6001600160a01b039093169290920291909117815560a0820151805160018084018054909291839160ff191690836002811115610cdb57610cdb613913565b021790555060208201518154829061ff001916610100836003811115610d0357610d03613913565b02179055506040820151815460608401516001600160a01b0316600160381b027fffffffffff0000000000000000000000000000000000000000ffffffffffffff64ffffffffff9093166201000002929092167fffffffffff00000000000000000000000000000000000000000000000000ffff90911617178155608080830151600180840180546001600160801b039093167fffffffffffffffffffffffffffffffff000000000000000000000000000000009093169290921790915560a0938401516002909301929092558582018054909201909155610dec935090890191508801613ba2565b6001600160a01b0316857f97f6a2f67a21f7dcf96e83472a3e6fe85185d53d2658da0a76860fc850b2edb0610e2760608a0160408b01613c78565b610e3760808b0160608c01613c78565b8a60a001604051610e4a93929190613ccb565b60405180910390a350505050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610ea65750825b905060008267ffffffffffffffff166001148015610ec35750303b155b905081158015610ed1575080155b15610f08576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f3c57845468ff00000000000000001916680100000000000000001785555b610f47888888611e61565b610f4f611eeb565b60017f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e01558315610fbe57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610fd0611ef3565b7f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d29040254604080519182526020820183905280517f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d290400927fb5b3ce389419083c8f6504f82412a8e8cbe1bc51bb0df0ffeb81e0fe9536667692908290030190a160020155565b6110d060408051610180810182526000808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e08401839052610100840183905261012084018390528451908101855282815290810182905292830152906101408201908152600060209091015290565b60405163894e9a0d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063894e9a0d906024016101c060405180830381865afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a9190613e04565b92915050565b60008181527f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e0060208181526040808420815160c08082018452825460ff808216151584526101008204811615159684019690965262010000810464ffffffffff90811684870152600160381b8204166060840152600160601b90046001600160a01b0316608083015283519081019093526001820180549596959194929360a08601939092839116600281111561121957611219613913565b600281111561122a5761122a613913565b81528154602090910190610100900460ff16600381111561124d5761124d613913565b600381111561125e5761125e613913565b8152815462010000810464ffffffffff166020830152600160381b90046001600160a01b0316604082015260018201546001600160801b03166060820152600290910154608090910152905250905060006112b884611f67565b905060028160038111156112ce576112ce613913565b036112ec57604051635e99e00160e11b815260040160405180910390fd5b600381600381111561130057611300613913565b0361131e57604051633837625b60e21b815260040160405180910390fd5b600081600381111561133257611332613913565b036113825760808201516001600160a01b0316331461137d576040517fb57aca0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b5565b600060a083015151600281111561139b5761139b613913565b146113b55760a08083015180519101516113b59190611dfd565b600084815260208490526040808220805460ff191660011790555185917f6187bf55f2675dbecee951f81c92ecac87f54ed5bf888d31b09e634749b848ef91a250505050565b6000611406836121cd565b6001600160a01b0316634869e12d836040518263ffffffff1660e01b815260040161143391815260200190565b602060405180830381865afa158015611450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114749190613ef7565b9392505050565b6114f860408051610180810182526000808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e08401839052610100840183905261012084018390528451908101855282815290810182905292830152906101408201908152602001606081525090565b60405163894e9a0d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063894e9a0d90602401600060405180830381865afa15801561155d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261115a9190810190613fd3565b6000611590836121cd565b6001600160a01b031663d975dfed836040518263ffffffff1660e01b815260040161143391815260200190565b6115c5612237565b6115ce826122ee565b6115d882826122f6565b5050565b60006115e66123e3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b60008181527f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e0060208181526040808420815160c08082018452825460ff808216151584526101008204811615159684019690965262010000810464ffffffffff90811684870152600160381b8204166060840152600160601b90046001600160a01b0316608083015283519081019093526001820180549596959194929360a0860193909283911660028111156116c4576116c4613913565b60028111156116d5576116d5613913565b81528154602090910190610100900460ff1660038111156116f8576116f8613913565b600381111561170957611709613913565b8152815464ffffffffff6201000082041660208301526001600160a01b03600160381b9091048116604083015260018301546001600160801b031660608301526002909201546080918201529190925283015192935091909116905061179b576040517fe054e29800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006117a684611f67565b905060028160038111156117bc576117bc613913565b14806117d5575060a08201516040015164ffffffffff16155b156117f357604051635e99e00160e11b815260040160405180910390fd5b600381600381111561180757611807613913565b0361182557604051633837625b60e21b815260040160405180910390fd5b600060a083015151600281111561183e5761183e613913565b036118515761184c8261242c565b6118a0565b6000600160a084015151600281111561186c5761186c613913565b036118815761187a83612581565b905061188d565b61188a836125ac565b90505b6000858152602085905260409020600301555b60a08201516040908101516000868152602086905282902060018101805464ffffffffff600019909401938416620100000266ffffffffff000019909116178155815461ff0019166101001790915591519091339187917f33c8f93fb4c77fcc3018c358d38dfd0ff049d3541d7bff0c8ab12f0bec9295a2916119239190614109565b60405180910390a35050505050565b600061193d836121cd565b6001600160a01b031663ad35efd4836040518263ffffffff1660e01b815260040161196a91815260200190565b602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114749190614176565b6119b3611ef3565b6119bd600061260b565b565b60008181527f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e0060208181526040808420815160c08082018452825460ff808216151584526101008204811615159684019690965262010000810464ffffffffff90811684870152600160381b8204166060840152600160601b90046001600160a01b0316608083015283519081019093526001820180548795929460a08601939092918391166002811115611a7657611a76613913565b6002811115611a8757611a87613913565b81528154602090910190610100900460ff166003811115611aaa57611aaa613913565b6003811115611abb57611abb613913565b8152815462010000810464ffffffffff166020830152600160381b90046001600160a01b0316604082015260018201546001600160801b03166060820152600290910154608091820152915260a083810151805191015191840151939450611b2593909250611b2d565b949350505050565b6000611b2584848461267c565b6000611b6787877f0000000000000000000000000000000000000000000000000000000000000000612721565b611b758787878787876127d9565b60008181527f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d2904006020526040902080546001600160a01b03191633179055979650505050505050565b600061115a82611f67565b611bd06133f8565b60008281527f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e006020818152604092839020835160c08082018652825460ff808216151584526101008204811615159584019590955262010000810464ffffffffff90811684890152600160381b8204166060840152600160601b90046001600160a01b03166080830152855190810190955260018201805494959194929360a08601938391166002811115611c8757611c87613913565b6002811115611c9857611c98613913565b81528154602090910190610100900460ff166003811115611cbb57611cbb613913565b6003811115611ccc57611ccc613913565b8152815462010000810464ffffffffff166020830152600160381b90046001600160a01b0316604082015260018201546001600160801b031660608201526002909101546080909101529052509392505050565b611d28611ef3565b6001600160a01b038116611d70576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b611d798161260b565b50565b6000611da986867f0000000000000000000000000000000000000000000000000000000000000000612721565b611db68686868686612b44565b60008181527f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d2904006020526040902080546001600160a01b031916331790559695505050505050565b6115d88282612d0e565b6000828203611e168582612e13565b91508164ffffffffff16600003611e59576040517f28998a5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b611e69612e8f565b611e7283612ef6565b604080518082019091526001600160a01b039290921680835260209092018190527f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d29040180546001600160a01b0319169092179091557f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d2904025550565b6119bd612e8f565b33611f257f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146119bd576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401611d67565b60008181527f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e0060208181526040808420815160c08082018452825460ff808216151584526101008204811615159684019690965262010000810464ffffffffff90811684870152600160381b8204166060840152600160601b90046001600160a01b0316608083015283519081019093526001820180548795929460a0860193909291839116600281111561201e5761201e613913565b600281111561202f5761202f613913565b81528154602090910190610100900460ff16600381111561205257612052613913565b600381111561206357612063613913565b8152815462010000810464ffffffffff16602080840191909152600160381b9091046001600160a01b0316604083015260018301546001600160801b031660608301526002909201546080909101529152820151919250501580156120c757508051155b156120d6575060009392505050565b60a0808201510151156121915760a08082015180519101516000916120fa91611932565b9050600281600481111561211057612110613913565b0361212057506002949350505050565b600481600481111561213457612134613913565b036121845760a0808301518051910151600091612150916113fb565b90508260a00151608001516001600160801b0316816001600160801b03161061217a57600261217d565b60035b505061218f565b506001949350505050565b505b8051156121a2575060039392505050565b8060a001516040015164ffffffffff166000036121c3575060029392505050565b5060019392505050565b600060018260028111156121e3576121e3613913565b0361220f57507f0000000000000000000000000000000000000000000000000000000000000000919050565b507f00000000000000000000000000000000000000000000000000000000000000005b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122d057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122c47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156119bd5760405163703e46dd60e11b815260040160405180910390fd5b611d79611ef3565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612350575060408051601f3d908101601f1916820190925261234d91810190614197565b60015b61237857604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611d67565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146123d4576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611d67565b6123de8383612f07565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146119bd5760405163703e46dd60e11b815260040160405180910390fd5b60a0810151606001516001600160a01b0316612544578060a00151608001516001600160801b03163410156124a25760a0810151608001516040517f7309d6860000000000000000000000000000000000000000000000000000000081526001600160801b039091166004820152602401611d67565b600081608001516001600160a01b03168260a00151608001516001600160801b031660405160006040518083038185875af1925050503d8060008114612504576040519150601f19603f3d011682016040523d82523d6000602084013e612509565b606091505b50509050806115d8576040517fa7b62ffc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d793382608001518360a00151608001516001600160801b03168460a00151606001516001600160a01b0316612f5d909392919063ffffffff16565b600061115a8260a00151606001518360a0015160800151846040015185606001518660800151611d7c565b6000806125d48360a0015160200151846040015185606001516125cf91906141c6565b612e13565b90506114748360a00151606001518460a0015160800151856040015186608001518564ffffffffff168860a0015160200151611b3a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080612688856121cd565b6040517fea5ead19000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0385811660248301529192509082169063ea5ead19906044016020604051808303816000875af11580156126f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127189190613ef7565b95945050505050565b61273f6001600160a01b03841633306001600160801b038616612f5d565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526001600160801b038416602483015284169063095ea7b3906044016020604051808303816000875af11580156127af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d39190613c40565b50505050565b6000807f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d290400905061285a60408051610120810182526000808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e084015283518085019094528184528301529061010082015290565b3081526001600160a01b0386811660208301526001600160801b03891660408301528916606082015260016080820152600060a0820181905264ffffffffff881660c08301526128a985612fe5565b905060006128d66128d185600101600101546128cb8d6001600160801b031690565b90613051565b613063565b905060006128e4828c6141e3565b905060006128f28983614218565b90506000896001600160801b031667ffffffffffffffff811115612918576129186137d2565b60405190808252806020026020018201604052801561295d57816020015b60408051808201909152600080825260208201528152602001906001900390816129365790505b5060e087015260005b8a6001600160801b0316811015612a0b576040518060400160405280846001600160801b03168152602001878f61299d9190614246565b64ffffffffff168152508760e0015182815181106129bd576129bd614263565b60209081029190910101526129d2868e614246565b9c508660e0015181815181106129ea576129ea614263565b60200260200101516000015182612a019190614279565b9150600101612966565b50612a1681846141e3565b60e0870151612a2660018d6141e3565b6001600160801b031681518110612a3f57612a3f614263565b6020026020010151600001818151612a579190614279565b6001600160801b031690525060408051808201825260018901546001600160a01b03908116825260028a0154602083015261010089019190915290517f32fbe22b0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000909116906332fbe22b90612aef908990600401614298565b6020604051808303816000875af1158015612b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b329190614197565b9e9d5050505050505050505050505050565b60007f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d290400612bd060408051610100810182526000808252602080830182905282840182905260608084018390526080840183905260a084018390528451908101855282815280820183905280850183905260c084015283518085019094528184528301529060e082015290565b3081526001600160a01b038481166020808401919091526001600160801b0389166040808501919091528a8316606080860191909152600160808601819052600060a087018190528351928301845264ffffffffff808d168452838601919091528a168284015260c086019190915281518083018352908601548416815260028601549281019290925260e0840191909152517f53b157270000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000909116906353b1572790612cbf90849060040161436e565b6020604051808303816000875af1158015612cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d029190614197565b98975050505050505050565b7f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d2904006000612d3a846121cd565b6000848152602084905260409020549091506001600160a01b0316338114612d99576040517f0c0cedc20000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611d67565b6040517f40e58ee5000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b038316906340e58ee590602401600060405180830381600087803b158015612df457600080fd5b505af1158015612e08573d6000803e3d6000fd5b505050505050505050565b60006001836003811115612e2957612e29613913565b03612e4257612e3b62093a8083614452565b905061115a565b6002836003811115612e5657612e56613913565b03612e6857612e3b6224ea0083614452565b6003836003811115612e7c57612e7c613913565b0361115a576114746301baf80083614452565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166119bd576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612efe612e8f565b611d79816130aa565b612f10826130b2565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612f55576123de8282613129565b6115d8613196565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526127d39085906131ce565b60006001826003811115612ffb57612ffb613913565b0361300a575062093a80919050565b600282600381111561301e5761301e613913565b0361302d57506224ea00919050565b600382600381111561304157613041613913565b0361223257506301baf800919050565b60006114746130608484613258565b90565b6000816001600160801b0381111561115a576040517f4916adce00000000000000000000000000000000000000000000000000000000815260048101849052602401611d67565b611d28612e8f565b806001600160a01b03163b6000036130e857604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611d67565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051613146919061447c565b600060405180830381855af49150503d8060008114613181576040519150601f19603f3d011682016040523d82523d6000602084013e613186565b606091505b5091509150612718858383613341565b34156119bd576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080602060008451602086016000885af1806131f1576040513d6000823e3d81fd5b50506000513d91508115613209578060011415613216565b6001600160a01b0384163b155b156127d3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611d67565b600080806000198486098486029250828110838203039150508060000361328c5750670de0b6b3a76400009004905061115a565b670de0b6b3a764000081106132d7576040517f5173648d0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401611d67565b6000670de0b6b3a7640000858709620400008185030493109091037d40000000000000000000000000000000000000000000000000000000000002919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b60608261335657613351826133b6565b611474565b815115801561336d57506001600160a01b0384163b155b156133af576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611d67565b5080611474565b8051156133c65780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260008082526020820181905291810182905260608101829052608081019190915260a081016134616040805160c08101909152806000815260200160008152600060208201819052604082018190526060820181905260809091015290565b905290565b600061016082840312801561347a57600080fd5b509092915050565b6001600160a01b0381168114611d7957600080fd5b6000806000606084860312156134ac57600080fd5b83356134b781613482565b925060208401356134c781613482565b929592945050506040919091013590565b6000602082840312156134ea57600080fd5b5035919050565b81516001600160a01b031681526101c08101602083015161351d60208401826001600160a01b03169052565b506040830151613536604084018264ffffffffff169052565b50606083015161354a606084018215159052565b50608083015161355e608084018215159052565b5060a083015161357960a08401826001600160a01b03169052565b5060c083015161359260c084018264ffffffffff169052565b5060e08301516135a660e084018215159052565b506101008301516135bc61010084018215159052565b506101208301516135d261012084018215159052565b506101408301516136196101408401826001600160801b0381511682526001600160801b0360208201511660208301526001600160801b0360408201511660408301525050565b5061016083015164ffffffffff81166101a08401525b5092915050565b80356003811061223257600080fd5b6000806040838503121561365857600080fd5b61366183613636565b946020939093013593505050565b600081518084526020840193506020830160005b828110156136bd57815180516001600160801b0316875260209081015164ffffffffff168188015260409096019590910190600101613683565b5093949350505050565b602081526136e16020820183516001600160a01b03169052565b600060208301516136fd60408401826001600160a01b03169052565b50604083015164ffffffffff8116606084015250606083015164ffffffffff8116608084015250608083015180151560a08401525060a083015180151560c08401525060c08301516001600160a01b03811660e08401525060e083015180151561010084015250610100830151801515610120840152506101208301518015156101408401525061014083015180516001600160801b03908116610160850152602082015181166101808501526040820151166101a0840152506101608301516101c080840152611b256101e084018261366f565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff8111828210171561380c5761380c6137d2565b60405290565b6040805190810167ffffffffffffffff8111828210171561380c5761380c6137d2565b604051601f8201601f1916810167ffffffffffffffff8111828210171561385e5761385e6137d2565b604052919050565b6000806040838503121561387957600080fd5b823561388481613482565b9150602083013567ffffffffffffffff8111156138a057600080fd5b8301601f810185136138b157600080fd5b803567ffffffffffffffff8111156138cb576138cb6137d2565b6138de601f8201601f1916602001613835565b8181528660208385010111156138f357600080fd5b816020840160208301376000602083830101528093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016005831061393d5761393d613913565b91905290565b60008060006060848603121561395857600080fd5b61396184613636565b925060208401359150604084013561397881613482565b809150509250925092565b6001600160801b0381168114611d7957600080fd5b64ffffffffff81168114611d7957600080fd5b80356004811061223257600080fd5b60008060008060008060c087890312156139d357600080fd5b86356139de81613482565b955060208701356139ee81613983565b945060408701356139fe81613998565b93506060870135613a0e81613482565b92506080870135613a1e81613983565b9150613a2c60a088016139ab565b90509295509295509295565b81516001600160a01b03168152602080830151908201526040810161115a565b60048110611d7957611d79613913565b6020810161393d83613a58565b60005b83811015613a90578181015183820152602001613a78565b50506000910152565b6020815260008251806020840152613ab8816040850160208701613a75565b601f01601f19169190910160400192915050565b60038110613adc57613adc613913565b9052565b60006101608201905082511515825260208301511515602083015264ffffffffff604084015116604083015264ffffffffff60608401511660608301526001600160a01b03608084015116608083015260a0830151613b4360a084018251613acc565b6020810151613b5181613a58565b60c0840152604081015164ffffffffff1660e084015260608101516001600160a01b031661010084015260808101516001600160801b031661012084015260a0015161014090920191909152919050565b600060208284031215613bb457600080fd5b813561147481613482565b600080600080600060a08688031215613bd757600080fd5b8535613be281613482565b94506020860135613bf281613983565b93506040860135613c0281613998565b92506060860135613c1281613998565b91506080860135613c2281613482565b809150509295509295909350565b8051801515811461223257600080fd5b600060208284031215613c5257600080fd5b61147482613c30565b600060208284031215613c6d57600080fd5b813561147481613983565b600060208284031215613c8a57600080fd5b813561147481613998565b600060208284031215613ca757600080fd5b61147482613636565b600060208284031215613cc257600080fd5b611474826139ab565b64ffffffffff8481168252831660208201526101008101613cf760408301613cf285613636565b613acc565b613d03602084016139ab565b613d0c81613a58565b60608301526040830135613d1f81613998565b64ffffffffff1660808301526060830135613d3981613482565b6001600160a01b031660a08301526080830135613d5581613983565b6001600160801b031660c083015260a0929092013560e09091015292915050565b805161223281613482565b805161223281613998565b600060608284031215613d9e57600080fd5b6040516060810167ffffffffffffffff81118282101715613dc157613dc16137d2565b80604052508091508251613dd481613983565b81526020830151613de481613983565b60208201526040830151613df781613983565b6040919091015292915050565b60006101c0828403128015613e1857600080fd5b50613e216137e8565b613e2a83613d76565b8152613e3860208401613d76565b6020820152613e4960408401613d81565b6040820152613e5a60608401613c30565b6060820152613e6b60808401613c30565b6080820152613e7c60a08401613d76565b60a0820152613e8d60c08401613d81565b60c0820152613e9e60e08401613c30565b60e0820152613eb06101008401613c30565b610100820152613ec36101208401613c30565b610120820152613ed7846101408501613d8c565b610140820152613eea6101a08401613d81565b6101608201529392505050565b600060208284031215613f0957600080fd5b815161147481613983565b600082601f830112613f2557600080fd5b815167ffffffffffffffff811115613f3f57613f3f6137d2565b613f4e60208260051b01613835565b8082825260208201915060208360061b860101925085831115613f7057600080fd5b602085015b83811015613fc95760408188031215613f8d57600080fd5b613f95613812565b8151613fa081613983565b81526020820151613fb081613998565b6020828101919091529084529290920191604001613f75565b5095945050505050565b600060208284031215613fe557600080fd5b815167ffffffffffffffff811115613ffc57600080fd5b82016101c0818503121561400f57600080fd5b6140176137e8565b61402082613d76565b815261402e60208301613d76565b602082015261403f60408301613d81565b604082015261405060608301613d81565b606082015261406160808301613c30565b608082015261407260a08301613c30565b60a082015261408360c08301613d76565b60c082015261409460e08301613c30565b60e08201526140a66101008301613c30565b6101008201526140b96101208301613c30565b6101208201526140cd856101408401613d8c565b6101408201526101a082015167ffffffffffffffff8111156140ee57600080fd5b6140fa86828501613f14565b61016083015250949350505050565b815460c082019061411d8360ff8316613acc565b60ff8160081c1661412d81613a58565b6020840152601081901c64ffffffffff16604084015260381c6001600160a01b0316606083015260018301546001600160801b0316608083015260029092015460a09091015290565b60006020828403121561418857600080fd5b81516005811061147457600080fd5b6000602082840312156141a957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b64ffffffffff828116828216039081111561115a5761115a6141b0565b6001600160801b03828116828216039081111561115a5761115a6141b0565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b0383168061423157614231614202565b806001600160801b0384160491505092915050565b64ffffffffff818116838216019081111561115a5761115a6141b0565b634e487b7160e01b600052603260045260246000fd5b6001600160801b03818116838216019081111561115a5761115a6141b0565b602081526142b26020820183516001600160a01b03169052565b600060208301516142ce60408401826001600160a01b03169052565b5060408301516001600160801b03811660608401525060608301516001600160a01b038116608084015250608083015180151560a08401525060a083015180151560c08401525060c083015164ffffffffff811660e08401525060e083015161014061010084015261434461016084018261366f565b61010085015180516001600160a01b03166101208601526020810151610140860152909150611e59565b6000610160820190506001600160a01b0383511682526001600160a01b0360208401511660208301526001600160801b03604084015116604083015260608301516143c460608401826001600160a01b03169052565b5060808301516143d8608084018215159052565b5060a08301516143ec60a084018215159052565b5060c083015161442b60c084018264ffffffffff815116825264ffffffffff602082015116602083015264ffffffffff60408201511660408301525050565b5060e083015180516001600160a01b0316610120840152602081015161014084015261362f565b600064ffffffffff83168061446957614469614202565b8064ffffffffff84160491505092915050565b6000825161448e818460208701613a75565b919091019291505056fea2646970667358221220f77e8ead89d3e1674724a66b6d27d22f4de928891bba332004143e86f7f6d17064736f6c634300081a0033000000000000000000000000fe7fc0bbde84c239c0ab89111d617dc7cc58049f000000000000000000000000b8c724df3ec8f2bf8fa808df2cb5dbab22f3e68c", + "nonce": "0x27", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe37f63678aa84e6dc27e689de20a770cf44beb886d67822c0e6cdb2be488a4a5", + "transactionType": "CREATE2", + "contractName": "ERC1967Proxy", + "contractAddress": "0x5b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "function": null, + "arguments": [ + "0x0CC7D827546555C874E1E4d45646Efd424898Bf2", + "0x1794bb3c00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa0000000000000000000000000000000000000000000000000000000000000000" + ], + "transaction": { + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x52cc1", + "value": "0x0", + "input": "0x3333303738313638303600000000000000000000000000000000000000000000608060405260405161041d38038061041d83398101604081905261002291610268565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b919061033c565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b038111156102ae57600080fd5b8301601f810185136102bf57600080fd5b80516001600160401b038111156102d8576102d861022e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103065761030661022e565b60405281815282820160200187101561031e57600080fd5b61032f826020830160208601610244565b8093505050509250929050565b6000825161034e818460208701610244565b9190910192915050565b60b7806103666000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea26469706673582212206c8796a415d4fa6af6aa47adf983c4d24a38673de0194737183e24829108ceb964736f6c634300081a00330000000000000000000000000cc7d827546555c874e1e4d45646efd424898bf2000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000641794bb3c00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x28", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0e2371bdaf58cc296ada882e80ce02c10548a821e86bea91ec8926f455e7509c", + "transactionType": "CALL", + "contractName": "ModuleKeeper", + "contractAddress": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "function": "addToAllowlist(address)", + "arguments": [ + "0x5b2FD952D60b4AF54b698C2BF2D6D6f8042F83B2" + ], + "transaction": { + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "gas": "0x11fd7", + "value": "0x0", + "input": "0xf8e86ece0000000000000000000000005b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "nonce": "0x29", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x9e766", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x19161d71b4187301427ab0db5eeeff1b86c48a482ac05d9a7d547ace90e1c757", + "transactionIndex": "0x4", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "gasUsed": "0x429b2", + "effectiveGasPrice": "0x8ffe9", + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0xe09386b", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x2057875565", + "l1GasPrice": "0x8b1ab5e3", + "l1GasUsed": "0x2c2e" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x6c0dc8", + "logs": [ + { + "address": "0x328ef0ccf52e5b3ac2f842794349bc379b5e67ed", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0x93911c62d24feb6b174a60dd9674ffdb477ca9ee8070da3a1568807216744727", + "transactionIndex": "0x5", + "logIndex": "0x7", + "removed": false + }, + { + "address": "0x20fff38b7187d4748ba0f10f33ea63bad1bd58e9", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa", + "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c" + ], + "data": "0x", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0x93911c62d24feb6b174a60dd9674ffdb477ca9ee8070da3a1568807216744727", + "transactionIndex": "0x5", + "logIndex": "0x8", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000020000000000010000000000000000010000000000000000020000000000000000000800000000000000000000080000000000000000000000000000000000000000000000000000001080000000000000000000000000080001000000000000000400000000000000000000001000000000000000000080000000000000800000040000000000000000000100000000000020000002000000000000000000000000000080000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x93911c62d24feb6b174a60dd9674ffdb477ca9ee8070da3a1568807216744727", + "transactionIndex": "0x5", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "gasUsed": "0x622662", + "effectiveGasPrice": "0x8ffe9", + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x20fff38b7187d4748ba0f10f33ea63bad1bd58e9", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0xe09386b", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x2a1f1b31bb8", + "l1GasPrice": "0x8b1ab5e3", + "l1GasUsed": "0x398ad" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xa724ea", + "logs": [ + { + "address": "0x0cc7d827546555c874e1e4d45646efd424898bf2", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0x3d74c70ad1fbb666774d0407b8657e1f876e77aaf5e7da9039dccef11c69e464", + "transactionIndex": "0x6", + "logIndex": "0x9", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000008000000000000004000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x3d74c70ad1fbb666774d0407b8657e1f876e77aaf5e7da9039dccef11c69e464", + "transactionIndex": "0x6", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "gasUsed": "0x3b1722", + "effectiveGasPrice": "0x8ffe9", + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": null, + "contractAddress": "0x0cc7d827546555c874e1e4d45646efd424898bf2", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0xe09386b", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x188d93754c0", + "l1GasPrice": "0x8b1ab5e3", + "l1GasUsed": "0x218ab" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xaaaf0b", + "logs": [ + { + "address": "0x5b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000000cc7d827546555c874e1e4d45646efd424898bf2" + ], + "data": "0x", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0xe37f63678aa84e6dc27e689de20a770cf44beb886d67822c0e6cdb2be488a4a5", + "transactionIndex": "0x7", + "logIndex": "0xa", + "removed": false + }, + { + "address": "0x5b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa" + ], + "data": "0x", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0xe37f63678aa84e6dc27e689de20a770cf44beb886d67822c0e6cdb2be488a4a5", + "transactionIndex": "0x7", + "logIndex": "0xb", + "removed": false + }, + { + "address": "0x5b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0xe37f63678aa84e6dc27e689de20a770cf44beb886d67822c0e6cdb2be488a4a5", + "transactionIndex": "0x7", + "logIndex": "0xc", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000002000001010000000000000000010000000000000000020000000000000000000800000000000000000000080000000000400010000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000400000000020000000000000008000000000000000000000000000004000000000000000000000", + "type": "0x2", + "transactionHash": "0xe37f63678aa84e6dc27e689de20a770cf44beb886d67822c0e6cdb2be488a4a5", + "transactionIndex": "0x7", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "gasUsed": "0x38a21", + "effectiveGasPrice": "0x8ffe9", + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x5b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0xe09386b", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x284d58ff81", + "l1GasPrice": "0x8b1ab5e3", + "l1GasUsed": "0x370e" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xab73dc", + "logs": [ + { + "address": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "topics": [ + "0x2deff0ce80851d5346ba1bc7678a74ce90f0b8109fea432a35e00bc11c028ca6", + "0x00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa", + "0x0000000000000000000000005b2fd952d60b4af54b698c2bf2d6d6f8042f83b2" + ], + "data": "0x", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0x0e2371bdaf58cc296ada882e80ce02c10548a821e86bea91ec8926f455e7509c", + "transactionIndex": "0x8", + "logIndex": "0xd", + "removed": false + } + ], + "logsBloom": "0x00000000010000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000010000000000100000000000000000000000000000000000000000000010000000000000000010000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000104000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0e2371bdaf58cc296ada882e80ce02c10548a821e86bea91ec8926f455e7509c", + "transactionIndex": "0x8", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "gasUsed": "0xc4d1", + "effectiveGasPrice": "0x8ffe9", + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "contractAddress": null, + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0xe09386b", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x49336d579", + "l1GasPrice": "0x8b1ab5e3", + "l1GasUsed": "0x640" + } + ], + "libraries": [], + "pending": [], + "returns": { + "moduleKeeper": { + "internal_type": "contract ModuleKeeper", + "value": "0x520cb1322b1060f057c7bab1a31EC7cc5a30b9Dd" + }, + "stationRegistry": { + "internal_type": "contract StationRegistry", + "value": "0x20FFF38B7187d4748Ba0F10f33Ea63BAD1Bd58E9" + }, + "paymentModule": { + "internal_type": "contract PaymentModule", + "value": "0x5b2FD952D60b4AF54b698C2BF2D6D6f8042F83B2" + } + }, + "timestamp": 1732820030, + "chain": 84532, + "commit": "3e162a6" +} \ No newline at end of file diff --git a/broadcast/DeployDeterministicCore.s.sol/84532/run-latest.json b/broadcast/DeployDeterministicCore.s.sol/84532/run-latest.json new file mode 100644 index 0000000..33bb991 --- /dev/null +++ b/broadcast/DeployDeterministicCore.s.sol/84532/run-latest.json @@ -0,0 +1,352 @@ +{ + "transactions": [ + { + "hash": "0x19161d71b4187301427ab0db5eeeff1b86c48a482ac05d9a7d547ace90e1c757", + "transactionType": "CREATE2", + "contractName": "ModuleKeeper", + "contractAddress": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "function": null, + "arguments": [ + "0x85E094B259718Be1AF0D8CbBD41dd7409c2200aa" + ], + "transaction": { + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5bf9e", + "value": "0x0", + "input": "0x33333037383136383036000000000000000000000000000000000000000000006080604052348015600f57600080fd5b50604051610415380380610415833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b6103888061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80638da5cb5b116100505780638da5cb5b146100b9578063f2fde38b146100e4578063f8e86ece146100f757600080fd5b806305a3b8091461006c5780635da93d7e146100a4575b600080fd5b61008f61007a366004610322565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100b76100b2366004610322565b61010a565b005b6000546100cc906001600160a01b031681565b6040516001600160a01b03909116815260200161009b565b6100b76100f2366004610322565b610185565b6100b7610105366004610322565b61025d565b6000546001600160a01b03163314610134576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03808216600081815260016020526040808220805460ff1916905581549051929316917fc141e02c90a605f7b8e81cd1b69f7c5574cc70a895c1c20873e5f7946d777cd39190a350565b6000546001600160a01b031633146101af576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381166101ef576040517fee2d835d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811790915560405190815233907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09060200160405180910390a250565b6000546001600160a01b03163314610287576040516282b42960e81b815260040160405180910390fd5b806001600160a01b03163b6000036102cb576040517ffdc72f1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038082166000818152600160208190526040808320805460ff191690921790915581549051929316917f2deff0ce80851d5346ba1bc7678a74ce90f0b8109fea432a35e00bc11c028ca69190a350565b60006020828403121561033457600080fd5b81356001600160a01b038116811461034b57600080fd5b939250505056fea2646970667358221220df1b4fb4964f410e14098632c8644983e4dadc247feb1d66015daf6bbc18eab564736f6c634300081a003300000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa", + "nonce": "0x25", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x93911c62d24feb6b174a60dd9674ffdb477ca9ee8070da3a1568807216744727", + "transactionType": "CREATE2", + "contractName": "StationRegistry", + "contractAddress": "0x20fff38b7187d4748ba0f10f33ea63bad1bd58e9", + "function": null, + "arguments": [ + "0x85E094B259718Be1AF0D8CbBD41dd7409c2200aa", + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "0x520cb1322b1060f057c7bab1a31EC7cc5a30b9Dd" + ], + "transaction": { + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x87804f", + "value": "0x0", + "input": "0x333330373831363830360000000000000000000000000000000000000000000060c060405234801561001057600080fd5b5060405161756638038061756683398101604081905261002f916101c1565b813060405161003d9061019c565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610070573d6000803e3d6000fd5b506001600160a01b03908116608052821660a05261008f6000846100bc565b6001600955600680546001600160a01b0319166001600160a01b0392909216919091179055506102359050565b6100c682826100d4565b6100d0828261012f565b5050565b60008281526003602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60008281526005602052604081208054916001919061014e838561020e565b9091555050600092835260056020908152604080852083865260018101835281862080546001600160a01b039096166001600160a01b03199096168617905593855260029093019052912055565b61549e806120c883390190565b6001600160a01b03811681146101be57600080fd5b50565b6000806000606084860312156101d657600080fd5b83516101e1816101a9565b60208501519093506101f2816101a9565b6040850151909250610203816101a9565b809150509250925092565b8082018082111561022f57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a051611e52610276600039600081816103ce01526112610152600081816102140152818161084d01528181610f9501526111bd0152611e526000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806391d14854116100f9578063c3c5a54711610097578063d547741f11610071578063d547741f14610449578063d8fd8f441461045c578063e68a7c3b1461046f578063e6e1c5f81461048257600080fd5b8063c3c5a54714610410578063ca15c87314610423578063d0b3b66d1461043657600080fd5b8063a217fddf116100d3578063a217fddf146103ae578063a32fa5b3146103b6578063a65d69d4146103c9578063ac9650d8146103f057600080fd5b806391d148541461033f5780639387a380146103885780639efb95f71461039b57600080fd5b806340e0df2c116101665780637e5ef8a5116101405780637e5ef8a5146102e657806383a03f8c146103065780638878ed33146103195780639010d07c1461032c57600080fd5b806340e0df2c146102a257806358451f97146102b55780636424ea02146102bd57600080fd5b806311464fbe116101a257806311464fbe1461020f578063248a9ca31461024e5780632f2ff15d1461027c57806336568abe1461028f57600080fd5b806308e93d0a146101c95780630b61e12b146101e75780630e6254fd146101fc575b600080fd5b6101d1610495565b6040516101de91906118ca565b60405180910390f35b6101fa6101f5366004611905565b6104a6565b005b6101d161020a366004611931565b610573565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101de565b61026e61025c36600461194e565b60009081526004602052604090205490565b6040519081526020016101de565b6101fa61028a366004611967565b61059d565b6101fa61029d366004611967565b610633565b6101fa6102b0366004611967565b610690565b61026e610736565b6102366102cb36600461194e565b6007602052600090815260409020546001600160a01b031681565b61026e6102f4366004611931565b60086020526000908152604090205481565b6101fa61031436600461194e565b610742565b610236610327366004611997565b610803565b61023661033a366004611a1e565b61087d565b61037861034d366004611967565b60009182526003602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60405190151581526020016101de565b6101fa610396366004611905565b61097d565b600654610236906001600160a01b031681565b61026e600081565b6103786103c4366004611967565b610a44565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6104036103fe366004611a40565b610a9a565b6040516101de9190611b07565b61037861041e366004611931565b610bf7565b61026e61043136600461194e565b610c03565b61026e610444366004611931565b610c9e565b6101fa610457366004611967565b610cbf565b61023661046a366004611997565b610cd8565b6101d161047d366004611a1e565b610dd3565b6101fa610490366004611931565b610f1f565b60606104a16000610f80565b905090565b336104b18183610f8d565b6105025760405162461bcd60e51b815260206004820152601f60248201527f4163636f756e74466163746f72793a206e6f7420616e206163636f756e742e0060448201526064015b60405180910390fd5b6001600160a01b03831660009081526002602052604081206105249083610fd1565b9050801561056d57836001600160a01b0316826001600160a01b03167f12146497b3b826918ec47f0cac7272a09ed06b30c16c030e99ec48ff5dd60b4760405160405180910390a35b50505050565b6001600160a01b038116600090815260026020526040902060609061059790610f80565b92915050565b6000828152600460205260409020546105b69033610fe6565b60008281526003602090815260408083206001600160a01b038516845290915290205460ff1615610625576040517fd49c166a0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016104f9565b61062f8282611054565b5050565b336001600160a01b03821614610686576040517f4169c6220000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821660248201526044016104f9565b61062f8282611068565b6000828152600760205260409020546001600160a01b03163381146106c8576040516393d3ad0560e01b815260040160405180910390fd5b60008381526007602090815260409182902080546001600160a01b0319166001600160a01b03868116918217909255835191851682529181019190915284917ee234973d1c05a2bee786e3b7f12d0cfeb868b28869411adea70677d8817089910160405180910390a2505050565b60006104a160006110bf565b3361074d8183610f8d565b6107995760405162461bcd60e51b815260206004820152601f60248201527f4163636f756e74466163746f72793a206e6f7420616e206163636f756e742e0060448201526064016104f9565b6107a4600082610fd1565b61062f5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e74466163746f72793a206163636f756e7420616c7265616479206044820152691c9959da5cdd195c995960b21b60648201526084016104f9565b6000806108468585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110c992505050565b90506108727f0000000000000000000000000000000000000000000000000000000000000000826110fc565b9150505b9392505050565b60008281526005602052604081205481805b828110156109745760008681526005602090815260408083208484526001019091529020546001600160a01b03161561090b578482036108f95760008681526005602090815260408083209383526001909301905220546001600160a01b03169250610597915050565b610904600183611b82565b9150610962565b600086815260036020908152604080832083805290915290205460ff16801561094f5750600086815260056020908152604080832083805260020190915290205481145b156109625761095f600183611b82565b91505b61096d600182611b82565b905061088f565b50505092915050565b336109888183610f8d565b6109d45760405162461bcd60e51b815260206004820152601f60248201527f4163636f756e74466163746f72793a206e6f7420616e206163636f756e742e0060448201526064016104f9565b6001600160a01b03831660009081526002602052604081206109f6908361115c565b9050801561056d57836001600160a01b0316826001600160a01b03167f98d1ebbe00ae92a5de96a0f49742a8afa89f42363592bc2e7cfaaed68b45e7a660405160405180910390a350505050565b600082815260036020908152604080832083805290915281205460ff16610a91575060008281526003602090815260408083206001600160a01b038516845290915290205460ff16610597565b50600192915050565b60608167ffffffffffffffff811115610ab557610ab5611b95565b604051908082528060200260200182016040528015610ae857816020015b6060815260200190600190039081610ad35790505b509050336000805b84811015610974578115610b6f57610b4d30878784818110610b1457610b14611bab565b9050602002810190610b269190611bc1565b86604051602001610b3993929190611c0f565b604051602081830303815290604052611171565b848281518110610b5f57610b5f611bab565b6020026020010181905250610bef565b610bd130878784818110610b8557610b85611bab565b9050602002810190610b979190611bc1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061117192505050565b848281518110610be357610be3611bab565b60200260200101819052505b600101610af0565b60006105978183611196565b600081815260056020526040812054815b81811015610c675760008481526005602090815260408083208484526001019091529020546001600160a01b031615610c5557610c52600184611b82565b92505b610c60600182611b82565b9050610c14565b50600083815260036020908152604080832083805290915290205460ff1615610c9857610c95600183611b82565b91505b50919050565b6001600160a01b0381166000908152600260205260408120610597906110bf565b6000828152600460205260409020546106869033610fe6565b60008080610ce884860186611c35565b925092505081600003610d265760098054600081815260076020526040902080546001600160a01b0319163317905581546001019091559150610d5d565b6000828152600760205260409020546001600160a01b03163314610d5d576040516393d3ad0560e01b815260040160405180910390fd5b6000610d6a8787876111b8565b6001600160a01b0380821660009081526008602052604090819020869055519192508491908916907f3903d8288d7344aa44289047c6bed49db2c60352f049fe106a40bd65c17d870790610dc19085908790611d1a565b60405180910390a39695505050505050565b60608183108015610ded5750610de960006110bf565b8211155b610e5f5760405162461bcd60e51b815260206004820152602360248201527f426173654163636f756e74466163746f72793a20696e76616c696420696e646960448201527f636573000000000000000000000000000000000000000000000000000000000060648201526084016104f9565b6000610e6b8484611d3c565b9050610e778484611d3c565b67ffffffffffffffff811115610e8f57610e8f611b95565b604051908082528060200260200182016040528015610eb8578160200160208202803683370190505b50915060005b81811015610f1757610edb610ed38683611b82565b600090611346565b838281518110610eed57610eed611bab565b6001600160a01b0390921660209283029190910190910152610f10600182611b82565b9050610ebe565b505092915050565b6000610f2b8133610fe6565b600680546001600160a01b0319166001600160a01b0384169081179091556040519081527fe42f11c76713655cf0556d673fadbfff81330af747a8a1871cfbac889f8ea8f39060200160405180910390a15050565b6060600061087683611352565b600080610fba7f0000000000000000000000000000000000000000000000000000000000000000846110fc565b6001600160a01b0385811691161491505092915050565b6000610876836001600160a01b0384166113ae565b60008281526003602090815260408083206001600160a01b038516845290915290205460ff1661062f576040517f0878b1060000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016104f9565b61105e82826113fd565b61062f8282611458565b61107282826114c5565b60008281526005602090815260408083206001600160a01b03851680855260028201808552838620805487526001909301855292852080546001600160a01b031916905584529152555050565b6000610597825490565b600082826040516020016110de929190611d4f565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c82012060788201526055604390910120600090610876565b6000610876836001600160a01b038416611527565b60606108768383604051806060016040528060278152602001611df66027913961161a565b6001600160a01b03811660009081526001830160205260408120541515610876565b6000807f0000000000000000000000000000000000000000000000000000000000000000905060006112208686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110c992505050565b9050600061122e83836110fc565b90506001600160a01b0381163b1561124a579250610876915050565b6112548383611692565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112f057611291600082610fd1565b6112f05760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e74466163746f72793a206163636f756e7420616c7265616479206044820152691c9959da5cdd195c995960b21b60648201526084016104f9565b6112fc8188888861172f565b866001600160a01b0316816001600160a01b03167fac631f3001b55ea1509cf3d7e74898f85392a61a76e8149181ae1259622dabc860405160405180910390a39695505050505050565b600061087683836117b0565b6060816000018054806020026020016040519081016040528092919081815260200182805480156113a257602002820191906000526020600020905b81548152602001906001019080831161138e575b50505050509050919050565b60008181526001830160205260408120546113f557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610597565b506000610597565b60008281526003602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000828152600560205260408120805491600191906114778385611b82565b9091555050600092835260056020908152604080852083865260018101835281862080546001600160a01b039096166001600160a01b03199096168617905593855260029093019052912055565b6114cf8282610fe6565b60008281526003602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000818152600183016020526040812054801561161057600061154b600183611d3c565b855490915060009061155f90600190611d3c565b90508181146115c457600086600001828154811061157f5761157f611bab565b90600052602060002001549050808760000184815481106115a2576115a2611bab565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115d5576115d5611d71565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610597565b6000915050610597565b6060600080856001600160a01b0316856040516116379190611d87565b600060405180830381855af49150503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b5091509150611688868383876117da565b9695505050505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166105975760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016104f9565b6040517fd1f578940000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063d1f578949061177890869086908690600401611da3565b600060405180830381600087803b15801561179257600080fd5b505af11580156117a6573d6000803e3d6000fd5b5050505050505050565b60008260000182815481106117c7576117c7611bab565b9060005260206000200154905092915050565b60608315611849578251600003611842576001600160a01b0385163b6118425760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104f9565b5081611853565b611853838361185b565b949350505050565b81511561186b5781518083602001fd5b8060405162461bcd60e51b81526004016104f99190611de2565b600081518084526020840193506020830160005b828110156118c05781516001600160a01b0316865260209586019590910190600101611899565b5093949350505050565b6020815260006108766020830184611885565b6001600160a01b03811681146118f257600080fd5b50565b8035611900816118dd565b919050565b6000806040838503121561191857600080fd5b8235611923816118dd565b946020939093013593505050565b60006020828403121561194357600080fd5b8135610876816118dd565b60006020828403121561196057600080fd5b5035919050565b6000806040838503121561197a57600080fd5b82359150602083013561198c816118dd565b809150509250929050565b6000806000604084860312156119ac57600080fd5b83356119b7816118dd565b9250602084013567ffffffffffffffff8111156119d357600080fd5b8401601f810186136119e457600080fd5b803567ffffffffffffffff8111156119fb57600080fd5b866020828401011115611a0d57600080fd5b939660209190910195509293505050565b60008060408385031215611a3157600080fd5b50508035926020909101359150565b60008060208385031215611a5357600080fd5b823567ffffffffffffffff811115611a6a57600080fd5b8301601f81018513611a7b57600080fd5b803567ffffffffffffffff811115611a9257600080fd5b8560208260051b8401011115611aa757600080fd5b6020919091019590945092505050565b60005b83811015611ad2578181015183820152602001611aba565b50506000910152565b60008151808452611af3816020860160208601611ab7565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015611b6057603f19878603018452611b4b858351611adb565b94506020938401939190910190600101611b2f565b50929695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561059757610597611b6c565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611bd857600080fd5b83018035915067ffffffffffffffff821115611bf357600080fd5b602001915036819003821315611c0857600080fd5b9250929050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600080600060608486031215611c4a57600080fd5b8335925060208401359150604084013567ffffffffffffffff811115611c6f57600080fd5b8401601f81018613611c8057600080fd5b803567ffffffffffffffff811115611c9a57611c9a611b95565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715611cc757611cc7611b95565b604052918252602081840181019290810189841115611ce557600080fd5b6020850194505b83851015611d0b57611cfd856118f5565b815260209485019401611cec565b50809450505050509250925092565b6001600160a01b03831681526040602082015260006118536040830184611885565b8181038181111561059757610597611b6c565b6001600160a01b03831681526040602082015260006118536040830184611adb565b634e487b7160e01b600052603160045260246000fd5b60008251611d99818460208701611ab7565b9190910192915050565b6001600160a01b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6020815260006108766020830184611adb56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ee3d8cdff3ca257901dbb1f2e14e76adec8788f7ab6eaeb528e81527ac3ab06664736f6c634300081a003361018060405234801561001157600080fd5b5060405161549e38038061549e83398101604081905261003091610245565b60408051808201825260078152661058d8dbdd5b9d60ca1b60208083019182528351808501855260018152603160f81b908201529151902060e08190527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c0938401909652805194019390932090925291905261012052818161011061012c565b6001600160a01b039081166101405216610160525061027f9050565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee03005460ff8082169161010090041680156101bc5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60ff8281161015610229577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805460ff191660ff90811790915560408051918252517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989181900360200190a15b5050565b6001600160a01b038116811461024257600080fd5b50565b6000806040838503121561025857600080fd5b82516102638161022d565b60208401519092506102748161022d565b809150509250929050565b60805160a05160c05160e051610100516101205161014051610160516151896103156000396000611f210152600081816105ec01528181611867015281816121c601528181612e9201528181612ec801528181612f800152818161300d015261303d01526000612a0c01526000612a5b01526000612a360152600061298f015260006129b9015260006129e301526151896000f3fe6080604052600436106101dc5760003560e01c80638b52d72311610102578063c45a015511610095578063d8cb0d6611610064578063d8cb0d6614610658578063e9523c9714610678578063f15d424e1461069a578063f23a6e61146106c757610219565b8063c45a0155146105da578063d087d2881461060e578063d1f5789414610623578063d42f2f351461064357610219565b8063b0d691fe116100d1578063b0d691fe1461054d578063b61d27f61461057a578063b76464d51461059a578063bc197c81146105ba57610219565b80638b52d7231461049f578063a9082d84146104c1578063a95f524614610500578063ac9650d81461052057610219565b8063399b77da1161017a57806347e1da2a1161014957806347e1da2a1461041f5780635892e2361461043f578063610b59251461045f5780637dff5a791461047f57610219565b8063399b77da146103915780633a871cdd146103bf5780634025feb2146103df57806344004cc1146103ff57610219565b80631626ba7e116101b65780631626ba7e146102db5780631dd756c5146102fb57806324d7806c1461031b5780632d9ad53d1461036157610219565b806301ffc9a71461024b57806307b18bde14610280578063150b7a02146102a257610219565b366102195760405134815233907f8ac633e5b094e1150d2a6495df4d0c77f51d293abe99e7733c78870dfbee7660906020015b60405180910390a2005b60405134815233907f8ac633e5b094e1150d2a6495df4d0c77f51d293abe99e7733c78870dfbee76609060200161020f565b34801561025757600080fd5b5061026b61026636600461400e565b6106e7565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b36600461405d565b61079f565b005b3480156102ae57600080fd5b506102c26102bd366004614140565b61094b565b6040516001600160e01b03199091168152602001610277565b3480156102e757600080fd5b506102c26102f63660046141ac565b610996565b34801561030757600080fd5b5061026b61031636600461420c565b610ac1565b34801561032757600080fd5b5061026b610336366004614252565b6001600160a01b031660009081526000805160206150ed833981519152602052604090205460ff1690565b34801561036d57600080fd5b5061026b61037c366004614252565b60006020819052908152604090205460ff1681565b34801561039d57600080fd5b506103b16103ac36600461426f565b610db7565b604051908152602001610277565b3480156103cb57600080fd5b506103b16103da366004614288565b610e82565b3480156103eb57600080fd5b506102a06103fa3660046142d6565b610ea8565b34801561040b57600080fd5b506102a061041a3660046142d6565b611007565b34801561042b57600080fd5b506102a061043a36600461435c565b6111b3565b34801561044b57600080fd5b506102a061045a366004614444565b61134a565b34801561046b57600080fd5b506102a061047a366004614252565b6117ca565b34801561048b57600080fd5b5061026b61049a366004614252565b6118f7565b3480156104ab57600080fd5b506104b46119cf565b604051610277919061455d565b3480156104cd57600080fd5b506104e16104dc366004614444565b611c58565b6040805192151583526001600160a01b03909116602083015201610277565b34801561050c57600080fd5b506102a061051b366004614252565b611ce4565b34801561052c57600080fd5b5061054061053b3660046145c2565b611d89565b6040516102779190614654565b34801561055957600080fd5b50610562611ee6565b6040516001600160a01b039091168152602001610277565b34801561058657600080fd5b5061026b6105953660046146ad565b611f46565b3480156105a657600080fd5b506102a06105b5366004614252565b611fff565b3480156105c657600080fd5b506102c26105d536600461479a565b612060565b3480156105e657600080fd5b506105627f000000000000000000000000000000000000000000000000000000000000000081565b34801561061a57600080fd5b506103b1612117565b34801561062f57600080fd5b506102a061063e366004614854565b6121b0565b34801561064f57600080fd5b506104b4612264565b34801561066457600080fd5b506102a0610673366004614874565b61241b565b34801561068457600080fd5b5061068d612658565b60405161027791906148f6565b3480156106a657600080fd5b506106ba6106b5366004614252565b612671565b6040516102779190614942565b3480156106d357600080fd5b506102c26106e2366004614955565b61277b565b60006001600160e01b031982167f1338becd00000000000000000000000000000000000000000000000000000000148061074a57506001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061076557506001600160e01b03198216630a85bd0160e11b145b8061079957506001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6107a7611ee6565b6001600160a01b0316336001600160a01b031614806107e257503360009081526000805160206150ed833981519152602052604090205460ff165b61083d5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b60648201526084015b60405180910390fd5b47811115610877576040517f433bcf7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108c4576040519150601f19603f3d011682016040523d82523d6000602084013e6108c9565b606091505b5050905080610904576040517f8103725c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518281526000906001600160a01b038516907f6f9cbac839b826cc524f53d10416c053fce34ec15fd1001720e777cc49720e76906020015b60405180910390a3505050565b600082846001600160a01b03167f35a641d6803b18b3c2a97b78c27d31dab914e9626b63b48fb9c5747c93a3f96d60405160405180910390a350630a85bd0160e11b5b949350505050565b6000806109a284610db7565b905060006109b082856127ec565b90506109e1816001600160a01b031660009081526000805160206150ed833981519152602052604090205460ff1690565b156109f85750630b135d3f60e11b91506107999050565b6001600160a01b03811660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0660205260409020610a398133612816565b80610a695750610a4881612838565b6001148015610a6957506000610a5e8282612842565b6001600160a01b0316145b610a9f576040517f81799bfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa8826118f7565b15610ab857630b135d3f60e11b93505b50505092915050565b6001600160a01b03821660009081526000805160206150ed833981519152602052604081205460ff1615610af757506001610799565b6001600160a01b03831660008181527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def05602090815260408083208151606081018352815481526001909101546001600160801b03808216838601908152600160801b9092048116838501529585527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0690935292209051919290914291161180610bad575081604001516001600160801b03164210155b80610bbe5750610bbc81612838565b155b15610bce57600092505050610799565b6000610be5610be060608701876149b2565b61284e565b90506000610bf283612838565b6001148015610c1357506000610c088482612842565b6001600160a01b0316145b90507f49e2d80a000000000000000000000000000000000000000000000000000000006001600160e01b0319831601610ca357600080610c5e610c5960608a018a6149b2565b6128a0565b9150915082610c8457610c718583612816565b610c845760009650505050505050610799565b8551811115610c9c5760009650505050505050610799565b5050610daa565b7fb81e25d6000000000000000000000000000000000000000000000000000000006001600160e01b0319831601610d9d57600080610cec610ce760608a018a6149b2565b61291d565b509150915082610d4c5760005b8251811015610d4a57610d2e838281518110610d1757610d176149f9565b60200260200101518761281690919063ffffffff16565b610d42576000975050505050505050610799565b600101610cf9565b505b60005b8251811015610d9557818181518110610d6a57610d6a6149f9565b602002602001015187600001511015610d8d576000975050505050505050610799565b600101610d4f565b505050610daa565b6000945050505050610799565b5060019695505050505050565b60008082604051602001610dcd91815260200190565b60405160208183030381529060405280519060200120905060007f82cac545155fcbf147f2a9013809613677ac7d65498556e6d19ce43bcbf6c28482604051602001610e23929190918252602082015260400190565b604051602081830303815290604052805190602001209050610e43612982565b60405161190160f01b60208201526022810191909152604281018290526062016040516020818303038152906040528051906020012092505050919050565b6000610e8c612aa9565b610e968484612b13565b9050610ea182612c8d565b9392505050565b610eb0611ee6565b6001600160a01b0316336001600160a01b03161480610eeb57503360009081526000805160206150ed833981519152602052604090205460ff165b610f415760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b6040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038481166024830152604482018390528316906342842e0e90606401600060405180830381600087803b158015610faa57600080fd5b505af1158015610fbe573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b03167feea167c0d54572a80626f5fd092a7c1f7b5d8e309533747e7e7d77b0558d6cf18360405161093e91815260200190565b61100f611ee6565b6001600160a01b0316336001600160a01b0316148061104a57503360009081526000805160206150ed833981519152602052604090205460ff165b6110a05760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa1580156110fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111219190614a0f565b81111561115a576040517fb5a0380d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116e6001600160a01b0383168483612cda565b816001600160a01b0316836001600160a01b03167f6f9cbac839b826cc524f53d10416c053fce34ec15fd1001720e777cc49720e768360405161093e91815260200190565b6111bb611ee6565b6001600160a01b0316336001600160a01b031614806111f657503360009081526000805160206150ed833981519152602052604090205460ff165b61124c5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b84818114801561125b57508084145b611291576040517f9e63483b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015611340576112cb8888838181106112b1576112b16149f9565b90506020020160208101906112c69190614252565b612d5f565b6113378888838181106112e0576112e06149f9565b90506020020160208101906112f59190614252565b878784818110611307576113076149f9565b90506020020135868685818110611320576113206149f9565b905060200281019061133291906149b2565b612dbc565b50600101611294565b5050505050505050565b60006113596020850185614252565b90504261136c60e0860160c08701614a3f565b6001600160801b03161115801561139b575061138f610100850160e08601614a3f565b6001600160801b031642105b6113e75760405162461bcd60e51b815260206004820152600760248201527f21706572696f64000000000000000000000000000000000000000000000000006044820152606401610834565b6000806113f5868686611c58565b91509150816114485760405162461bcd60e51b81526004016108349060208082526004908201527f2173696700000000000000000000000000000000000000000000000000000000604082015260600190565b61010086013560009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0760209081526040808320805460ff1916600117905561149891908901908901614a6b565b60ff1611156114ce5760006114b36040880160208901614a6b565b60ff1660011490506114c58482612e7e565b50505050505050565b6001600160a01b03831660009081526000805160206150ed833981519152602052604090205460ff16156115445760405162461bcd60e51b815260206004820152600560248201527f61646d696e0000000000000000000000000000000000000000000000000000006044820152606401610834565b61156e7f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0284612fcc565b506040518060600160405280876060013581526020018760800160208101906115979190614a3f565b6001600160801b031681526020016115b560c0890160a08a01614a3f565b6001600160801b031690526000805160206151348339815191526001600160a01b03851660009081526005919091016020908152604080832084518155918401519301516001600160801b03908116600160801b0293169290921760019092019190915561165261163160008051602061513483398151915290565b6001600160a01b038616600090815260069190910160205260409020612fe1565b805190915060005b818110156116c9576116b6838281518110611677576116776149f9565b602002602001015161169460008051602061513483398151915290565b6001600160a01b03891660009081526006919091016020526040902090612fee565b506116c2600182614a9c565b905061165a565b506116d76040890189614aaf565b9050905060005b8181101561176b576117586116f660408b018b614aaf565b83818110611706576117066149f9565b905060200201602081019061171b9190614252565b6001600160a01b03881660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def066020526040902090612fcc565b50611764600182614a9c565b90506116de565b5061177588613003565b846001600160a01b0316836001600160a01b03167ff21d10c26e35863a8df291aca54181ee8c4a3bc8e00246c3f7a5a14b69d826a78a6040516117b89190614b8c565b60405180910390a35050505050505050565b6117d2611ee6565b6001600160a01b0316336001600160a01b0316148061180d57503360009081526000805160206150ed833981519152602052604090205460ff165b6118635760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639efb95f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e79190614c84565b90506118f381836130ee565b5050565b6001600160a01b03811660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def05602090815260408083208151606081018352815481526001909101546001600160801b03808216948301859052600160801b9091041691810191909152904210801590611980575080604001516001600160801b031642105b8015610ea157506001600160a01b03831660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def06602052604081206119c790612838565b119392505050565b606060006119ee6000805160206151348339815191525b600201612fe1565b80519091506000805b82811015611a7f57611a21848281518110611a1457611a146149f9565b60200260200101516118f7565b15611a385781611a3081614ca1565b925050611a6d565b6000848281518110611a4c57611a4c6149f9565b60200260200101906001600160a01b031690816001600160a01b0316815250505b611a78600182614a9c565b90506119f7565b508067ffffffffffffffff811115611a9957611a99614089565b604051908082528060200260200182016040528015611af257816020015b6040805160a081018252600080825260606020808401829052938301829052820181905260808201528252600019909201910181611ab75790505b5093506000805b83811015611c505760006001600160a01b0316858281518110611b1e57611b1e6149f9565b60200260200101516001600160a01b031614611c3e576000858281518110611b4857611b486149f9565b602002602001015190506000611b6960008051602061513483398151915290565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611bdf600080516020615134833981519152611631565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250888580611c1e90614ca1565b965081518110611c3057611c306149f9565b602002602001018190525050505b611c49600182614a9c565b9050611af9565b505050505090565b600080611c6e611c67866131f6565b858561333a565b61010086013560009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def07602052604090205490915060ff16158015611cda57506001600160a01b03811660009081526000805160206150ed833981519152602052604090205460ff165b9150935093915050565b611cec611ee6565b6001600160a01b0316336001600160a01b03161480611d2757503360009081526000805160206150ed833981519152602052604090205460ff165b611d7d5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b611d868161338c565b50565b60608167ffffffffffffffff811115611da457611da4614089565b604051908082528060200260200182016040528015611dd757816020015b6060815260200190600190039081611dc25790505b509050336000805b84811015610ab8578115611e5e57611e3c30878784818110611e0357611e036149f9565b9050602002810190611e1591906149b2565b86604051602001611e2893929190614cba565b6040516020818303038152906040526133d7565b848281518110611e4e57611e4e6149f9565b6020026020010181905250611ede565b611ec030878784818110611e7457611e746149f9565b9050602002810190611e8691906149b2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506133d792505050565b848281518110611ed257611ed26149f9565b60200260200101819052505b600101611ddf565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300546000906001600160a01b03168015611f1f57919050565b7f000000000000000000000000000000000000000000000000000000000000000091505090565b6000611f50611ee6565b6001600160a01b0316336001600160a01b03161480611f8b57503360009081526000805160206150ed833981519152602052604090205460ff165b611fe15760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b611fea85612d5f565b611ff685858585612dbc565b95945050505050565b6120076133fc565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000805b84518110156120eb5784818151811061207f5761207f6149f9565b6020026020010151866001600160a01b03167f82cdbe4ae422077a9568bd10613c8abdb5dc95a06a18ebacad5907f88a07b5338684815181106120c4576120c46149f9565b60200260200101516040516120db91815260200190565b60405180910390a3600101612064565b507fbc197c81000000000000000000000000000000000000000000000000000000009695505050505050565b6000612121611ee6565b6040517f35567e1a000000000000000000000000000000000000000000000000000000008152306004820152600060248201526001600160a01b0391909116906335567e1a90604401602060405180830381865afa158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190614a0f565b905090565b60006121be82840184614d47565b9250505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639efb95f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612222573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122469190614c84565b90506122528183613468565b61225d85858561348c565b5050505050565b6060600061227f6000805160206151348339815191526119e6565b80519091508067ffffffffffffffff81111561229d5761229d614089565b6040519080825280602002602001820160405280156122f657816020015b6040805160a0810182526000808252606060208084018290529383018290528201819052608082015282526000199092019101816122bb5790505b50925060005b81811015612415576000838281518110612318576123186149f9565b60200260200101519050600061233960008051602061513483398151915290565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a0810190945291835290925081016123af600080516020615134833981519152611631565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b03168152508684815181106123f4576123f46149f9565b6020026020010181905250505060018161240e9190614a9c565b90506122fc565b50505090565b612423611ee6565b6001600160a01b0316336001600160a01b0316148061245e57503360009081526000805160206150ed833981519152602052604090205460ff165b6124b45760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b600182511115612540576040517f2eb2c2d60000000000000000000000000000000000000000000000000000000081526001600160a01b03841690632eb2c2d690612509903090339087908790600401614dc9565b600060405180830381600087803b15801561252357600080fd5b505af1158015612537573d6000803e3d6000fd5b50505050612605565b826001600160a01b031663f242432a303385600081518110612564576125646149f9565b60200260200101518560008151811061257f5761257f6149f9565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529390921660248401526044830152606482015260a06084820152600060a482015260c401600060405180830381600087803b1580156125ec57600080fd5b505af1158015612600573d6000803e3d6000fd5b505050505b826001600160a01b0316846001600160a01b03167f910db9ce6f750316c5cbc1d9a16b0d05a718599b12f03354ed7354889c3e2495848460405161264a929190614e29565b60405180910390a350505050565b60606121ab600080516020615134833981519152612fe1565b6040805160a08082018352600080835260606020808501829052848601839052818501839052608085018390526001600160a01b0387168084527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0582528684208751938401885280548452600101546001600160801b0380821685850152600160801b90910416838801528651948501875280855283527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def06815294909120929390929082019061274090612fe1565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250915050919050565b600083856001600160a01b03167f82cdbe4ae422077a9568bd10613c8abdb5dc95a06a18ebacad5907f88a07b533856040516127b991815260200190565b60405180910390a3507ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6000806000806127fc8686613690565b92509250925061280c82826136dd565b5090949350505050565b6001600160a01b03811660009081526001830160205260408120541515610ea1565b6000610799825490565b6000610ea183836137e1565b600060048210156128895760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b612897600460008486614e4e565b610ea191614e78565b60008060448310156128dc5760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b6128ea602460048587614e4e565b8101906128f79190614252565b9150612907604460248587614e4e565b810190612914919061426f565b90509250929050565b60608080606484101561295a5760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b6129678460048188614e4e565b8101906129749190614ead565b919790965090945092505050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156129db57507f000000000000000000000000000000000000000000000000000000000000000046145b15612a0557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b612ab1611ee6565b6001600160a01b0316336001600160a01b031614612b115760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610834565b565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c81206000612b92612b556101408701876149b2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061380b9050565b9050612b9e8186610ac1565b612bad57600192505050610799565b6001600160a01b031660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0560209081526040808320815160608082018452825482526001909201546001600160801b0380821683870152600160801b8204908116928501929092528351928301845294825265ffffffffffff8086169483019490945292831691015260d09190911b7fffffffffffff00000000000000000000000000000000000000000000000000001660a09190911b79ffffffffffff00000000000000000000000000000000000000001617949350505050565b8015611d8657604051600090339060001990849084818181858888f193505050503d806000811461225d576040519150601f19603f3d011682016040523d82523d6000602084013e61225d565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612d5a90849061382f565b505050565b6001600160a01b03811660009081526020819052604090205460ff16611d86576040517f21ac7c5f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610834565b60006060856001600160a01b0316858585604051612ddb929190614fbd565b60006040518083038185875af1925050503d8060008114612e18576040519150601f19603f3d011682016040523d82523d6000602084013e612e1d565b606091505b50909250905081612e3057805160208201fd5b856001600160a01b03167fbd580b8dbdf0089f9c3c255442bbef5c4ae91e268f64a237e8fef2b898806276868686604051612e6d93929190614fcd565b60405180910390a250949350505050565b612e8882826138bf565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156118f3578015612f76576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b61e12b837f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b5483005b600101546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612f5a57600080fd5b505af1158015612f6e573d6000803e3d6000fd5b505050505050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639387a380837f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300612f10565b6000610ea1836001600160a01b03841661397a565b60606000610ea1836139c9565b6000610ea1836001600160a01b038416613a25565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15611d86576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b61e12b61306f6020840184614252565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300600101546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156130da57600080fd5b505af115801561225d573d6000803e3d6000fd5b6040517f05a3b8090000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528316906305a3b80990602401602060405180830381865afa15801561314d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131719190615003565b6131a7576040517f967bcfbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600081815260208190526040808220805460ff19166001179055513392917fa05fd23fb8e1c138e73b916ea82ed8f5a77a80a4aefb217defddec7508f6502291a35050565b60607f3fd4a1a1a267c84185e3b7eecd57c68783c0581d538b9d6e5f23e4670497c1e96132266020840184614252565b6132366040850160208601614a6b565b6132436040860186614aaf565b604051602001613254929190615025565b60408051601f198184030181529190528051602090910120606086013561328160a0880160808901614a3f565b61329160c0890160a08a01614a3f565b6132a160e08a0160c08b01614a3f565b6132b26101008b0160e08c01614a3f565b60408051602081019a909a526001600160a01b039098169789019790975260ff9095166060880152608087019390935260a08601919091526001600160801b0390811660c086015290811660e0850152908116610100848101919091529116610120830152830135610140820152610160016040516020818303038152906040529050919050565b600061098e83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508751602089012061338692509050613b1f565b9061380b565b6001600160a01b038116600081815260208190526040808220805460ff19169055513392917f857479d213c45c7f46523c3e64420c84d4dd0b6ec4d904484a2657a08ac6928c91a350565b6060610ea1838360405180606001604052806027815260200161510d60279139613b4c565b3360009081526000805160206150ed833981519152602052604090205460ff16612b115760405162461bcd60e51b815260206004820152600660248201527f2161646d696e00000000000000000000000000000000000000000000000000006044820152606401610834565b306000908152602081905260409020805460ff191660011790556118f38282613bc4565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee03005460ff8082169161010090041680158080156134cc575060018360ff16105b806134e45750303b1580156134e457508260ff166001145b6135565760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610834565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805460ff1916600117905580156135b7577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805461ff0019166101001790555b6135f78686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613bfb92505050565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830155613624866001612e7e565b8015612f6e577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805461ff0019169055604080516001815290517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989181900360200190a1505050505050565b600080600083516041036136ca5760208401516040850151606086015160001a6136bc88828585613c2e565b9550955095505050506136d6565b50508151600091506002905b9250925092565b60008260038111156136f1576136f161505c565b036136fa575050565b600182600381111561370e5761370e61505c565b03613745576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156137595761375961505c565b03613793576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610834565b60038260038111156137a7576137a761505c565b036118f3576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610834565b60008260000182815481106137f8576137f86149f9565b9060005260206000200154905092915050565b600080600061381a8585613cfd565b9150915061382781613d42565b509392505050565b600080602060008451602086016000885af180613852576040513d6000823e3d81fd5b50506000513d9150811561386a578060011415613877565b6001600160a01b0384163b155b156138b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610834565b50505050565b6001600160a01b03821660009081526000805160206150ed83398151915260205260409020805460ff191682158015919091179091556139175761391160008051602061513483398151915283612fcc565b50613931565b61392f60008051602061513483398151915283612fee565b505b816001600160a01b03167f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a111338260405161396e911515815260200190565b60405180910390a25050565b60008181526001830160205260408120546139c157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610799565b506000610799565b606081600001805480602002602001604051908101604052809291908181526020018280548015613a1957602002820191906000526020600020905b815481526020019060010190808311613a05575b50505050509050919050565b60008181526001830160205260408120548015613b0e576000613a49600183615072565b8554909150600090613a5d90600190615072565b9050818114613ac2576000866000018281548110613a7d57613a7d6149f9565b9060005260206000200154905080876000018481548110613aa057613aa06149f9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613ad357613ad3615085565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610799565b6000915050610799565b5092915050565b6000610799613b2c612982565b8360405161190160f01b8152600281019290925260228201526042902090565b6060600080856001600160a01b031685604051613b69919061509b565b600060405180830381855af49150503d8060008114613ba4576040519150601f19603f3d011682016040523d82523d6000602084013e613ba9565b606091505b5091509150613bba86838387613ea7565b9695505050505050565b60005b8151811015612d5a57613bf383838381518110613be657613be66149f9565b60200260200101516130ee565b600101613bc7565b60008282604051602001613c109291906150b7565b60405160208183030381529060405280519060200120905092915050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613c695750600091506003905082613cf3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613cbd573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613ce957506000925060019150829050613cf3565b9250600091508190505b9450945094915050565b6000808251604103613d335760208301516040840151606085015160001a613d2787828585613f20565b94509450505050613d3b565b506000905060025b9250929050565b6000816004811115613d5657613d5661505c565b03613d5e5750565b6001816004811115613d7257613d7261505c565b03613dbf5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610834565b6002816004811115613dd357613dd361505c565b03613e205760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610834565b6003816004811115613e3457613e3461505c565b03611d865760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610834565b60608315613f16578251600003613f0f576001600160a01b0385163b613f0f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610834565b508161098e565b61098e8383613fe4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613f575750600090506003613fdb565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613fab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613fd457600060019250925050613fdb565b9150600090505b94509492505050565b815115613ff45781518083602001fd5b8060405162461bcd60e51b815260040161083491906150d9565b60006020828403121561402057600080fd5b81356001600160e01b031981168114610ea157600080fd5b6001600160a01b0381168114611d8657600080fd5b803561405881614038565b919050565b6000806040838503121561407057600080fd5b823561407b81614038565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140c8576140c8614089565b604052919050565b600082601f8301126140e157600080fd5b813567ffffffffffffffff8111156140fb576140fb614089565b61410e601f8201601f191660200161409f565b81815284602083860101111561412357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561415657600080fd5b843561416181614038565b9350602085013561417181614038565b925060408501359150606085013567ffffffffffffffff81111561419457600080fd5b6141a0878288016140d0565b91505092959194509250565b600080604083850312156141bf57600080fd5b82359150602083013567ffffffffffffffff8111156141dd57600080fd5b6141e9858286016140d0565b9150509250929050565b6000610160828403121561420657600080fd5b50919050565b6000806040838503121561421f57600080fd5b823561422a81614038565b9150602083013567ffffffffffffffff81111561424657600080fd5b6141e9858286016141f3565b60006020828403121561426457600080fd5b8135610ea181614038565b60006020828403121561428157600080fd5b5035919050565b60008060006060848603121561429d57600080fd5b833567ffffffffffffffff8111156142b457600080fd5b6142c0868287016141f3565b9660208601359650604090950135949350505050565b6000806000606084860312156142eb57600080fd5b83356142f681614038565b9250602084013561430681614038565b929592945050506040919091013590565b60008083601f84011261432957600080fd5b50813567ffffffffffffffff81111561434157600080fd5b6020830191508360208260051b8501011115613d3b57600080fd5b6000806000806000806060878903121561437557600080fd5b863567ffffffffffffffff81111561438c57600080fd5b61439889828a01614317565b909750955050602087013567ffffffffffffffff8111156143b857600080fd5b6143c489828a01614317565b909550935050604087013567ffffffffffffffff8111156143e457600080fd5b6143f089828a01614317565b979a9699509497509295939492505050565b60008083601f84011261441457600080fd5b50813567ffffffffffffffff81111561442c57600080fd5b602083019150836020828501011115613d3b57600080fd5b60008060006040848603121561445957600080fd5b833567ffffffffffffffff81111561447057600080fd5b8401610120818703121561448357600080fd5b9250602084013567ffffffffffffffff81111561449f57600080fd5b6144ab86828701614402565b9497909650939450505050565b600060a083016001600160a01b038351168452602083015160a0602086015281815180845260c087019150602083019350600092505b8083101561451a576001600160a01b0384511682526020820191506020840193506001830192506144ee565b50604085015160408701526060850151925061454160608701846001600160801b03169052565b60808501519250611ff660808701846001600160801b03169052565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156145b657603f198786030184526145a18583516144b8565b94506020938401939190910190600101614585565b50929695505050505050565b600080602083850312156145d557600080fd5b823567ffffffffffffffff8111156145ec57600080fd5b6145f885828601614317565b90969095509350505050565b60005b8381101561461f578181015183820152602001614607565b50506000910152565b60008151808452614640816020860160208601614604565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156145b657603f19878603018452614698858351614628565b9450602093840193919091019060010161467c565b600080600080606085870312156146c357600080fd5b84356146ce81614038565b935060208501359250604085013567ffffffffffffffff8111156146f157600080fd5b6146fd87828801614402565b95989497509550505050565b600067ffffffffffffffff82111561472357614723614089565b5060051b60200190565b600082601f83011261473e57600080fd5b813561475161474c82614709565b61409f565b8082825260208201915060208360051b86010192508583111561477357600080fd5b602085015b83811015614790578035835260209283019201614778565b5095945050505050565b600080600080600060a086880312156147b257600080fd5b85356147bd81614038565b945060208601356147cd81614038565b9350604086013567ffffffffffffffff8111156147e957600080fd5b6147f58882890161472d565b935050606086013567ffffffffffffffff81111561481257600080fd5b61481e8882890161472d565b925050608086013567ffffffffffffffff81111561483b57600080fd5b614847888289016140d0565b9150509295509295909350565b60008060006040848603121561486957600080fd5b833561448381614038565b6000806000806080858703121561488a57600080fd5b843561489581614038565b935060208501356148a581614038565b9250604085013567ffffffffffffffff8111156148c157600080fd5b6148cd8782880161472d565b925050606085013567ffffffffffffffff8111156148ea57600080fd5b6141a08782880161472d565b602080825282518282018190526000918401906040840190835b818110156149375783516001600160a01b0316835260209384019390920191600101614910565b509095945050505050565b602081526000610ea160208301846144b8565b600080600080600060a0868803121561496d57600080fd5b853561497881614038565b9450602086013561498881614038565b93506040860135925060608601359150608086013567ffffffffffffffff81111561483b57600080fd5b6000808335601e198436030181126149c957600080fd5b83018035915067ffffffffffffffff8211156149e457600080fd5b602001915036819003821315613d3b57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614a2157600080fd5b5051919050565b80356001600160801b038116811461405857600080fd5b600060208284031215614a5157600080fd5b610ea182614a28565b803560ff8116811461405857600080fd5b600060208284031215614a7d57600080fd5b610ea182614a5a565b634e487b7160e01b600052601160045260246000fd5b8082018082111561079957610799614a86565b6000808335601e19843603018112614ac657600080fd5b83018035915067ffffffffffffffff821115614ae157600080fd5b6020019150600581901b3603821315613d3b57600080fd5b6000808335601e19843603018112614b1057600080fd5b830160208101925035905067ffffffffffffffff811115614b3057600080fd5b8060051b3603821315613d3b57600080fd5b81835260208301925060008160005b84811015614b82578135614b6481614038565b6001600160a01b031686526020958601959190910190600101614b51565b5093949350505050565b60208152614bad60208201614ba08461404d565b6001600160a01b03169052565b6000614bbb60208401614a5a565b60ff8116604084015250614bd26040840184614af9565b6101206060850152614be961014085018284614b42565b91505060006060850135905080608085015250614c0860808501614a28565b6001600160801b03811660a085015250614c2460a08501614a28565b6001600160801b03811660c085015250614c4060c08501614a28565b6001600160801b03811660e085015250614c5c60e08501614a28565b6001600160801b03811661010085015250610100939093013561012092909201919091525090565b600060208284031215614c9657600080fd5b8151610ea181614038565b600060018201614cb357614cb3614a86565b5060010190565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082601f830112614cf157600080fd5b8135614cff61474c82614709565b8082825260208201915060208360051b860101925085831115614d2157600080fd5b602085015b83811015614790578035614d3981614038565b835260209283019201614d26565b600080600060608486031215614d5c57600080fd5b8335925060208401359150604084013567ffffffffffffffff811115614d8157600080fd5b614d8d86828701614ce0565b9150509250925092565b600081518084526020840193506020830160005b82811015614b82578151865260209586019590910190600101614dab565b6001600160a01b03851681526001600160a01b038416602082015260a060408201526000614dfa60a0830185614d97565b8281036060840152614e0c8185614d97565b838103608090940193909352505060008152602001949350505050565b604081526000614e3c6040830185614d97565b8281036020840152611ff68185614d97565b60008085851115614e5e57600080fd5b83861115614e6b57600080fd5b5050820193919092039150565b80356001600160e01b03198116906004841015613b18576001600160e01b0319808560040360031b1b82161691505092915050565b600080600060608486031215614ec257600080fd5b833567ffffffffffffffff811115614ed957600080fd5b614ee586828701614ce0565b935050602084013567ffffffffffffffff811115614f0257600080fd5b614f0e8682870161472d565b925050604084013567ffffffffffffffff811115614f2b57600080fd5b8401601f81018613614f3c57600080fd5b8035614f4a61474c82614709565b8082825260208201915060208360051b850101925088831115614f6c57600080fd5b602084015b83811015614fae57803567ffffffffffffffff811115614f9057600080fd5b614f9f8b6020838901016140d0565b84525060209283019201614f71565b50809450505050509250925092565b8183823760009101908152919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561501557600080fd5b81518015158114610ea157600080fd5b60008184825b8581101561493757813561503e81614038565b6001600160a01b03168352602092830192919091019060010161502b565b634e487b7160e01b600052602160045260246000fd5b8181038181111561079957610799614a86565b634e487b7160e01b600052603160045260246000fd5b600082516150ad818460208701614604565b9190910192915050565b6001600160a01b038316815260406020820152600061098e6040830184614628565b602081526000610ea1602083018461462856fe3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def04416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65643181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def00a2646970667358221220031ec29b7d10b58b08603b27c2e7c45ad33fe3849a37f3597e7f540a333d900464736f6c634300081a003300000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789000000000000000000000000520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "nonce": "0x26", + "chainId": "0x14a34" + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0x328ef0ccf52e5b3ac2f842794349bc379b5e67ed", + "initCode": "0x61018060405234801561001157600080fd5b5060405161549e38038061549e83398101604081905261003091610245565b60408051808201825260078152661058d8dbdd5b9d60ca1b60208083019182528351808501855260018152603160f81b908201529151902060e08190527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c0938401909652805194019390932090925291905261012052818161011061012c565b6001600160a01b039081166101405216610160525061027f9050565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee03005460ff8082169161010090041680156101bc5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60ff8281161015610229577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805460ff191660ff90811790915560408051918252517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989181900360200190a15b5050565b6001600160a01b038116811461024257600080fd5b50565b6000806040838503121561025857600080fd5b82516102638161022d565b60208401519092506102748161022d565b809150509250929050565b60805160a05160c05160e051610100516101205161014051610160516151896103156000396000611f210152600081816105ec01528181611867015281816121c601528181612e9201528181612ec801528181612f800152818161300d015261303d01526000612a0c01526000612a5b01526000612a360152600061298f015260006129b9015260006129e301526151896000f3fe6080604052600436106101dc5760003560e01c80638b52d72311610102578063c45a015511610095578063d8cb0d6611610064578063d8cb0d6614610658578063e9523c9714610678578063f15d424e1461069a578063f23a6e61146106c757610219565b8063c45a0155146105da578063d087d2881461060e578063d1f5789414610623578063d42f2f351461064357610219565b8063b0d691fe116100d1578063b0d691fe1461054d578063b61d27f61461057a578063b76464d51461059a578063bc197c81146105ba57610219565b80638b52d7231461049f578063a9082d84146104c1578063a95f524614610500578063ac9650d81461052057610219565b8063399b77da1161017a57806347e1da2a1161014957806347e1da2a1461041f5780635892e2361461043f578063610b59251461045f5780637dff5a791461047f57610219565b8063399b77da146103915780633a871cdd146103bf5780634025feb2146103df57806344004cc1146103ff57610219565b80631626ba7e116101b65780631626ba7e146102db5780631dd756c5146102fb57806324d7806c1461031b5780632d9ad53d1461036157610219565b806301ffc9a71461024b57806307b18bde14610280578063150b7a02146102a257610219565b366102195760405134815233907f8ac633e5b094e1150d2a6495df4d0c77f51d293abe99e7733c78870dfbee7660906020015b60405180910390a2005b60405134815233907f8ac633e5b094e1150d2a6495df4d0c77f51d293abe99e7733c78870dfbee76609060200161020f565b34801561025757600080fd5b5061026b61026636600461400e565b6106e7565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b36600461405d565b61079f565b005b3480156102ae57600080fd5b506102c26102bd366004614140565b61094b565b6040516001600160e01b03199091168152602001610277565b3480156102e757600080fd5b506102c26102f63660046141ac565b610996565b34801561030757600080fd5b5061026b61031636600461420c565b610ac1565b34801561032757600080fd5b5061026b610336366004614252565b6001600160a01b031660009081526000805160206150ed833981519152602052604090205460ff1690565b34801561036d57600080fd5b5061026b61037c366004614252565b60006020819052908152604090205460ff1681565b34801561039d57600080fd5b506103b16103ac36600461426f565b610db7565b604051908152602001610277565b3480156103cb57600080fd5b506103b16103da366004614288565b610e82565b3480156103eb57600080fd5b506102a06103fa3660046142d6565b610ea8565b34801561040b57600080fd5b506102a061041a3660046142d6565b611007565b34801561042b57600080fd5b506102a061043a36600461435c565b6111b3565b34801561044b57600080fd5b506102a061045a366004614444565b61134a565b34801561046b57600080fd5b506102a061047a366004614252565b6117ca565b34801561048b57600080fd5b5061026b61049a366004614252565b6118f7565b3480156104ab57600080fd5b506104b46119cf565b604051610277919061455d565b3480156104cd57600080fd5b506104e16104dc366004614444565b611c58565b6040805192151583526001600160a01b03909116602083015201610277565b34801561050c57600080fd5b506102a061051b366004614252565b611ce4565b34801561052c57600080fd5b5061054061053b3660046145c2565b611d89565b6040516102779190614654565b34801561055957600080fd5b50610562611ee6565b6040516001600160a01b039091168152602001610277565b34801561058657600080fd5b5061026b6105953660046146ad565b611f46565b3480156105a657600080fd5b506102a06105b5366004614252565b611fff565b3480156105c657600080fd5b506102c26105d536600461479a565b612060565b3480156105e657600080fd5b506105627f000000000000000000000000000000000000000000000000000000000000000081565b34801561061a57600080fd5b506103b1612117565b34801561062f57600080fd5b506102a061063e366004614854565b6121b0565b34801561064f57600080fd5b506104b4612264565b34801561066457600080fd5b506102a0610673366004614874565b61241b565b34801561068457600080fd5b5061068d612658565b60405161027791906148f6565b3480156106a657600080fd5b506106ba6106b5366004614252565b612671565b6040516102779190614942565b3480156106d357600080fd5b506102c26106e2366004614955565b61277b565b60006001600160e01b031982167f1338becd00000000000000000000000000000000000000000000000000000000148061074a57506001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061076557506001600160e01b03198216630a85bd0160e11b145b8061079957506001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6107a7611ee6565b6001600160a01b0316336001600160a01b031614806107e257503360009081526000805160206150ed833981519152602052604090205460ff165b61083d5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b60648201526084015b60405180910390fd5b47811115610877576040517f433bcf7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108c4576040519150601f19603f3d011682016040523d82523d6000602084013e6108c9565b606091505b5050905080610904576040517f8103725c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518281526000906001600160a01b038516907f6f9cbac839b826cc524f53d10416c053fce34ec15fd1001720e777cc49720e76906020015b60405180910390a3505050565b600082846001600160a01b03167f35a641d6803b18b3c2a97b78c27d31dab914e9626b63b48fb9c5747c93a3f96d60405160405180910390a350630a85bd0160e11b5b949350505050565b6000806109a284610db7565b905060006109b082856127ec565b90506109e1816001600160a01b031660009081526000805160206150ed833981519152602052604090205460ff1690565b156109f85750630b135d3f60e11b91506107999050565b6001600160a01b03811660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0660205260409020610a398133612816565b80610a695750610a4881612838565b6001148015610a6957506000610a5e8282612842565b6001600160a01b0316145b610a9f576040517f81799bfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa8826118f7565b15610ab857630b135d3f60e11b93505b50505092915050565b6001600160a01b03821660009081526000805160206150ed833981519152602052604081205460ff1615610af757506001610799565b6001600160a01b03831660008181527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def05602090815260408083208151606081018352815481526001909101546001600160801b03808216838601908152600160801b9092048116838501529585527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0690935292209051919290914291161180610bad575081604001516001600160801b03164210155b80610bbe5750610bbc81612838565b155b15610bce57600092505050610799565b6000610be5610be060608701876149b2565b61284e565b90506000610bf283612838565b6001148015610c1357506000610c088482612842565b6001600160a01b0316145b90507f49e2d80a000000000000000000000000000000000000000000000000000000006001600160e01b0319831601610ca357600080610c5e610c5960608a018a6149b2565b6128a0565b9150915082610c8457610c718583612816565b610c845760009650505050505050610799565b8551811115610c9c5760009650505050505050610799565b5050610daa565b7fb81e25d6000000000000000000000000000000000000000000000000000000006001600160e01b0319831601610d9d57600080610cec610ce760608a018a6149b2565b61291d565b509150915082610d4c5760005b8251811015610d4a57610d2e838281518110610d1757610d176149f9565b60200260200101518761281690919063ffffffff16565b610d42576000975050505050505050610799565b600101610cf9565b505b60005b8251811015610d9557818181518110610d6a57610d6a6149f9565b602002602001015187600001511015610d8d576000975050505050505050610799565b600101610d4f565b505050610daa565b6000945050505050610799565b5060019695505050505050565b60008082604051602001610dcd91815260200190565b60405160208183030381529060405280519060200120905060007f82cac545155fcbf147f2a9013809613677ac7d65498556e6d19ce43bcbf6c28482604051602001610e23929190918252602082015260400190565b604051602081830303815290604052805190602001209050610e43612982565b60405161190160f01b60208201526022810191909152604281018290526062016040516020818303038152906040528051906020012092505050919050565b6000610e8c612aa9565b610e968484612b13565b9050610ea182612c8d565b9392505050565b610eb0611ee6565b6001600160a01b0316336001600160a01b03161480610eeb57503360009081526000805160206150ed833981519152602052604090205460ff165b610f415760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b6040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038481166024830152604482018390528316906342842e0e90606401600060405180830381600087803b158015610faa57600080fd5b505af1158015610fbe573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b03167feea167c0d54572a80626f5fd092a7c1f7b5d8e309533747e7e7d77b0558d6cf18360405161093e91815260200190565b61100f611ee6565b6001600160a01b0316336001600160a01b0316148061104a57503360009081526000805160206150ed833981519152602052604090205460ff165b6110a05760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa1580156110fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111219190614a0f565b81111561115a576040517fb5a0380d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116e6001600160a01b0383168483612cda565b816001600160a01b0316836001600160a01b03167f6f9cbac839b826cc524f53d10416c053fce34ec15fd1001720e777cc49720e768360405161093e91815260200190565b6111bb611ee6565b6001600160a01b0316336001600160a01b031614806111f657503360009081526000805160206150ed833981519152602052604090205460ff165b61124c5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b84818114801561125b57508084145b611291576040517f9e63483b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015611340576112cb8888838181106112b1576112b16149f9565b90506020020160208101906112c69190614252565b612d5f565b6113378888838181106112e0576112e06149f9565b90506020020160208101906112f59190614252565b878784818110611307576113076149f9565b90506020020135868685818110611320576113206149f9565b905060200281019061133291906149b2565b612dbc565b50600101611294565b5050505050505050565b60006113596020850185614252565b90504261136c60e0860160c08701614a3f565b6001600160801b03161115801561139b575061138f610100850160e08601614a3f565b6001600160801b031642105b6113e75760405162461bcd60e51b815260206004820152600760248201527f21706572696f64000000000000000000000000000000000000000000000000006044820152606401610834565b6000806113f5868686611c58565b91509150816114485760405162461bcd60e51b81526004016108349060208082526004908201527f2173696700000000000000000000000000000000000000000000000000000000604082015260600190565b61010086013560009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0760209081526040808320805460ff1916600117905561149891908901908901614a6b565b60ff1611156114ce5760006114b36040880160208901614a6b565b60ff1660011490506114c58482612e7e565b50505050505050565b6001600160a01b03831660009081526000805160206150ed833981519152602052604090205460ff16156115445760405162461bcd60e51b815260206004820152600560248201527f61646d696e0000000000000000000000000000000000000000000000000000006044820152606401610834565b61156e7f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0284612fcc565b506040518060600160405280876060013581526020018760800160208101906115979190614a3f565b6001600160801b031681526020016115b560c0890160a08a01614a3f565b6001600160801b031690526000805160206151348339815191526001600160a01b03851660009081526005919091016020908152604080832084518155918401519301516001600160801b03908116600160801b0293169290921760019092019190915561165261163160008051602061513483398151915290565b6001600160a01b038616600090815260069190910160205260409020612fe1565b805190915060005b818110156116c9576116b6838281518110611677576116776149f9565b602002602001015161169460008051602061513483398151915290565b6001600160a01b03891660009081526006919091016020526040902090612fee565b506116c2600182614a9c565b905061165a565b506116d76040890189614aaf565b9050905060005b8181101561176b576117586116f660408b018b614aaf565b83818110611706576117066149f9565b905060200201602081019061171b9190614252565b6001600160a01b03881660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def066020526040902090612fcc565b50611764600182614a9c565b90506116de565b5061177588613003565b846001600160a01b0316836001600160a01b03167ff21d10c26e35863a8df291aca54181ee8c4a3bc8e00246c3f7a5a14b69d826a78a6040516117b89190614b8c565b60405180910390a35050505050505050565b6117d2611ee6565b6001600160a01b0316336001600160a01b0316148061180d57503360009081526000805160206150ed833981519152602052604090205460ff165b6118635760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639efb95f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e79190614c84565b90506118f381836130ee565b5050565b6001600160a01b03811660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def05602090815260408083208151606081018352815481526001909101546001600160801b03808216948301859052600160801b9091041691810191909152904210801590611980575080604001516001600160801b031642105b8015610ea157506001600160a01b03831660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def06602052604081206119c790612838565b119392505050565b606060006119ee6000805160206151348339815191525b600201612fe1565b80519091506000805b82811015611a7f57611a21848281518110611a1457611a146149f9565b60200260200101516118f7565b15611a385781611a3081614ca1565b925050611a6d565b6000848281518110611a4c57611a4c6149f9565b60200260200101906001600160a01b031690816001600160a01b0316815250505b611a78600182614a9c565b90506119f7565b508067ffffffffffffffff811115611a9957611a99614089565b604051908082528060200260200182016040528015611af257816020015b6040805160a081018252600080825260606020808401829052938301829052820181905260808201528252600019909201910181611ab75790505b5093506000805b83811015611c505760006001600160a01b0316858281518110611b1e57611b1e6149f9565b60200260200101516001600160a01b031614611c3e576000858281518110611b4857611b486149f9565b602002602001015190506000611b6960008051602061513483398151915290565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611bdf600080516020615134833981519152611631565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250888580611c1e90614ca1565b965081518110611c3057611c306149f9565b602002602001018190525050505b611c49600182614a9c565b9050611af9565b505050505090565b600080611c6e611c67866131f6565b858561333a565b61010086013560009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def07602052604090205490915060ff16158015611cda57506001600160a01b03811660009081526000805160206150ed833981519152602052604090205460ff165b9150935093915050565b611cec611ee6565b6001600160a01b0316336001600160a01b03161480611d2757503360009081526000805160206150ed833981519152602052604090205460ff165b611d7d5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b611d868161338c565b50565b60608167ffffffffffffffff811115611da457611da4614089565b604051908082528060200260200182016040528015611dd757816020015b6060815260200190600190039081611dc25790505b509050336000805b84811015610ab8578115611e5e57611e3c30878784818110611e0357611e036149f9565b9050602002810190611e1591906149b2565b86604051602001611e2893929190614cba565b6040516020818303038152906040526133d7565b848281518110611e4e57611e4e6149f9565b6020026020010181905250611ede565b611ec030878784818110611e7457611e746149f9565b9050602002810190611e8691906149b2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506133d792505050565b848281518110611ed257611ed26149f9565b60200260200101819052505b600101611ddf565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300546000906001600160a01b03168015611f1f57919050565b7f000000000000000000000000000000000000000000000000000000000000000091505090565b6000611f50611ee6565b6001600160a01b0316336001600160a01b03161480611f8b57503360009081526000805160206150ed833981519152602052604090205460ff165b611fe15760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b611fea85612d5f565b611ff685858585612dbc565b95945050505050565b6120076133fc565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000805b84518110156120eb5784818151811061207f5761207f6149f9565b6020026020010151866001600160a01b03167f82cdbe4ae422077a9568bd10613c8abdb5dc95a06a18ebacad5907f88a07b5338684815181106120c4576120c46149f9565b60200260200101516040516120db91815260200190565b60405180910390a3600101612064565b507fbc197c81000000000000000000000000000000000000000000000000000000009695505050505050565b6000612121611ee6565b6040517f35567e1a000000000000000000000000000000000000000000000000000000008152306004820152600060248201526001600160a01b0391909116906335567e1a90604401602060405180830381865afa158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190614a0f565b905090565b60006121be82840184614d47565b9250505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639efb95f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612222573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122469190614c84565b90506122528183613468565b61225d85858561348c565b5050505050565b6060600061227f6000805160206151348339815191526119e6565b80519091508067ffffffffffffffff81111561229d5761229d614089565b6040519080825280602002602001820160405280156122f657816020015b6040805160a0810182526000808252606060208084018290529383018290528201819052608082015282526000199092019101816122bb5790505b50925060005b81811015612415576000838281518110612318576123186149f9565b60200260200101519050600061233960008051602061513483398151915290565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a0810190945291835290925081016123af600080516020615134833981519152611631565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b03168152508684815181106123f4576123f46149f9565b6020026020010181905250505060018161240e9190614a9c565b90506122fc565b50505090565b612423611ee6565b6001600160a01b0316336001600160a01b0316148061245e57503360009081526000805160206150ed833981519152602052604090205460ff165b6124b45760405162461bcd60e51b815260206004820152602160248201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746044820152601760f91b6064820152608401610834565b600182511115612540576040517f2eb2c2d60000000000000000000000000000000000000000000000000000000081526001600160a01b03841690632eb2c2d690612509903090339087908790600401614dc9565b600060405180830381600087803b15801561252357600080fd5b505af1158015612537573d6000803e3d6000fd5b50505050612605565b826001600160a01b031663f242432a303385600081518110612564576125646149f9565b60200260200101518560008151811061257f5761257f6149f9565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529390921660248401526044830152606482015260a06084820152600060a482015260c401600060405180830381600087803b1580156125ec57600080fd5b505af1158015612600573d6000803e3d6000fd5b505050505b826001600160a01b0316846001600160a01b03167f910db9ce6f750316c5cbc1d9a16b0d05a718599b12f03354ed7354889c3e2495848460405161264a929190614e29565b60405180910390a350505050565b60606121ab600080516020615134833981519152612fe1565b6040805160a08082018352600080835260606020808501829052848601839052818501839052608085018390526001600160a01b0387168084527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0582528684208751938401885280548452600101546001600160801b0380821685850152600160801b90910416838801528651948501875280855283527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def06815294909120929390929082019061274090612fe1565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250915050919050565b600083856001600160a01b03167f82cdbe4ae422077a9568bd10613c8abdb5dc95a06a18ebacad5907f88a07b533856040516127b991815260200190565b60405180910390a3507ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b6000806000806127fc8686613690565b92509250925061280c82826136dd565b5090949350505050565b6001600160a01b03811660009081526001830160205260408120541515610ea1565b6000610799825490565b6000610ea183836137e1565b600060048210156128895760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b612897600460008486614e4e565b610ea191614e78565b60008060448310156128dc5760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b6128ea602460048587614e4e565b8101906128f79190614252565b9150612907604460248587614e4e565b810190612914919061426f565b90509250929050565b60608080606484101561295a5760405162461bcd60e51b8152602060048201526005602482015264214461746160d81b6044820152606401610834565b6129678460048188614e4e565b8101906129749190614ead565b919790965090945092505050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156129db57507f000000000000000000000000000000000000000000000000000000000000000046145b15612a0557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b612ab1611ee6565b6001600160a01b0316336001600160a01b031614612b115760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152606401610834565b565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c81206000612b92612b556101408701876149b2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061380b9050565b9050612b9e8186610ac1565b612bad57600192505050610799565b6001600160a01b031660009081527f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0560209081526040808320815160608082018452825482526001909201546001600160801b0380821683870152600160801b8204908116928501929092528351928301845294825265ffffffffffff8086169483019490945292831691015260d09190911b7fffffffffffff00000000000000000000000000000000000000000000000000001660a09190911b79ffffffffffff00000000000000000000000000000000000000001617949350505050565b8015611d8657604051600090339060001990849084818181858888f193505050503d806000811461225d576040519150601f19603f3d011682016040523d82523d6000602084013e61225d565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612d5a90849061382f565b505050565b6001600160a01b03811660009081526020819052604090205460ff16611d86576040517f21ac7c5f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610834565b60006060856001600160a01b0316858585604051612ddb929190614fbd565b60006040518083038185875af1925050503d8060008114612e18576040519150601f19603f3d011682016040523d82523d6000602084013e612e1d565b606091505b50909250905081612e3057805160208201fd5b856001600160a01b03167fbd580b8dbdf0089f9c3c255442bbef5c4ae91e268f64a237e8fef2b898806276868686604051612e6d93929190614fcd565b60405180910390a250949350505050565b612e8882826138bf565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156118f3578015612f76576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b61e12b837f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b5483005b600101546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612f5a57600080fd5b505af1158015612f6e573d6000803e3d6000fd5b505050505050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639387a380837f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300612f10565b6000610ea1836001600160a01b03841661397a565b60606000610ea1836139c9565b6000610ea1836001600160a01b038416613a25565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15611d86576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b61e12b61306f6020840184614252565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b548300600101546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156130da57600080fd5b505af115801561225d573d6000803e3d6000fd5b6040517f05a3b8090000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528316906305a3b80990602401602060405180830381865afa15801561314d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131719190615003565b6131a7576040517f967bcfbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600081815260208190526040808220805460ff19166001179055513392917fa05fd23fb8e1c138e73b916ea82ed8f5a77a80a4aefb217defddec7508f6502291a35050565b60607f3fd4a1a1a267c84185e3b7eecd57c68783c0581d538b9d6e5f23e4670497c1e96132266020840184614252565b6132366040850160208601614a6b565b6132436040860186614aaf565b604051602001613254929190615025565b60408051601f198184030181529190528051602090910120606086013561328160a0880160808901614a3f565b61329160c0890160a08a01614a3f565b6132a160e08a0160c08b01614a3f565b6132b26101008b0160e08c01614a3f565b60408051602081019a909a526001600160a01b039098169789019790975260ff9095166060880152608087019390935260a08601919091526001600160801b0390811660c086015290811660e0850152908116610100848101919091529116610120830152830135610140820152610160016040516020818303038152906040529050919050565b600061098e83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508751602089012061338692509050613b1f565b9061380b565b6001600160a01b038116600081815260208190526040808220805460ff19169055513392917f857479d213c45c7f46523c3e64420c84d4dd0b6ec4d904484a2657a08ac6928c91a350565b6060610ea1838360405180606001604052806027815260200161510d60279139613b4c565b3360009081526000805160206150ed833981519152602052604090205460ff16612b115760405162461bcd60e51b815260206004820152600660248201527f2161646d696e00000000000000000000000000000000000000000000000000006044820152606401610834565b306000908152602081905260409020805460ff191660011790556118f38282613bc4565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee03005460ff8082169161010090041680158080156134cc575060018360ff16105b806134e45750303b1580156134e457508260ff166001145b6135565760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610834565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805460ff1916600117905580156135b7577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805461ff0019166101001790555b6135f78686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613bfb92505050565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830155613624866001612e7e565b8015612f6e577f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee0300805461ff0019169055604080516001815290517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989181900360200190a1505050505050565b600080600083516041036136ca5760208401516040850151606086015160001a6136bc88828585613c2e565b9550955095505050506136d6565b50508151600091506002905b9250925092565b60008260038111156136f1576136f161505c565b036136fa575050565b600182600381111561370e5761370e61505c565b03613745576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156137595761375961505c565b03613793576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610834565b60038260038111156137a7576137a761505c565b036118f3576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610834565b60008260000182815481106137f8576137f86149f9565b9060005260206000200154905092915050565b600080600061381a8585613cfd565b9150915061382781613d42565b509392505050565b600080602060008451602086016000885af180613852576040513d6000823e3d81fd5b50506000513d9150811561386a578060011415613877565b6001600160a01b0384163b155b156138b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610834565b50505050565b6001600160a01b03821660009081526000805160206150ed83398151915260205260409020805460ff191682158015919091179091556139175761391160008051602061513483398151915283612fcc565b50613931565b61392f60008051602061513483398151915283612fee565b505b816001600160a01b03167f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a111338260405161396e911515815260200190565b60405180910390a25050565b60008181526001830160205260408120546139c157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610799565b506000610799565b606081600001805480602002602001604051908101604052809291908181526020018280548015613a1957602002820191906000526020600020905b815481526020019060010190808311613a05575b50505050509050919050565b60008181526001830160205260408120548015613b0e576000613a49600183615072565b8554909150600090613a5d90600190615072565b9050818114613ac2576000866000018281548110613a7d57613a7d6149f9565b9060005260206000200154905080876000018481548110613aa057613aa06149f9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613ad357613ad3615085565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610799565b6000915050610799565b5092915050565b6000610799613b2c612982565b8360405161190160f01b8152600281019290925260228201526042902090565b6060600080856001600160a01b031685604051613b69919061509b565b600060405180830381855af49150503d8060008114613ba4576040519150601f19603f3d011682016040523d82523d6000602084013e613ba9565b606091505b5091509150613bba86838387613ea7565b9695505050505050565b60005b8151811015612d5a57613bf383838381518110613be657613be66149f9565b60200260200101516130ee565b600101613bc7565b60008282604051602001613c109291906150b7565b60405160208183030381529060405280519060200120905092915050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613c695750600091506003905082613cf3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613cbd573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613ce957506000925060019150829050613cf3565b9250600091508190505b9450945094915050565b6000808251604103613d335760208301516040840151606085015160001a613d2787828585613f20565b94509450505050613d3b565b506000905060025b9250929050565b6000816004811115613d5657613d5661505c565b03613d5e5750565b6001816004811115613d7257613d7261505c565b03613dbf5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610834565b6002816004811115613dd357613dd361505c565b03613e205760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610834565b6003816004811115613e3457613e3461505c565b03611d865760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610834565b60608315613f16578251600003613f0f576001600160a01b0385163b613f0f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610834565b508161098e565b61098e8383613fe4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613f575750600090506003613fdb565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613fab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613fd457600060019250925050613fdb565b9150600090505b94509492505050565b815115613ff45781518083602001fd5b8060405162461bcd60e51b815260040161083491906150d9565b60006020828403121561402057600080fd5b81356001600160e01b031981168114610ea157600080fd5b6001600160a01b0381168114611d8657600080fd5b803561405881614038565b919050565b6000806040838503121561407057600080fd5b823561407b81614038565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140c8576140c8614089565b604052919050565b600082601f8301126140e157600080fd5b813567ffffffffffffffff8111156140fb576140fb614089565b61410e601f8201601f191660200161409f565b81815284602083860101111561412357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561415657600080fd5b843561416181614038565b9350602085013561417181614038565b925060408501359150606085013567ffffffffffffffff81111561419457600080fd5b6141a0878288016140d0565b91505092959194509250565b600080604083850312156141bf57600080fd5b82359150602083013567ffffffffffffffff8111156141dd57600080fd5b6141e9858286016140d0565b9150509250929050565b6000610160828403121561420657600080fd5b50919050565b6000806040838503121561421f57600080fd5b823561422a81614038565b9150602083013567ffffffffffffffff81111561424657600080fd5b6141e9858286016141f3565b60006020828403121561426457600080fd5b8135610ea181614038565b60006020828403121561428157600080fd5b5035919050565b60008060006060848603121561429d57600080fd5b833567ffffffffffffffff8111156142b457600080fd5b6142c0868287016141f3565b9660208601359650604090950135949350505050565b6000806000606084860312156142eb57600080fd5b83356142f681614038565b9250602084013561430681614038565b929592945050506040919091013590565b60008083601f84011261432957600080fd5b50813567ffffffffffffffff81111561434157600080fd5b6020830191508360208260051b8501011115613d3b57600080fd5b6000806000806000806060878903121561437557600080fd5b863567ffffffffffffffff81111561438c57600080fd5b61439889828a01614317565b909750955050602087013567ffffffffffffffff8111156143b857600080fd5b6143c489828a01614317565b909550935050604087013567ffffffffffffffff8111156143e457600080fd5b6143f089828a01614317565b979a9699509497509295939492505050565b60008083601f84011261441457600080fd5b50813567ffffffffffffffff81111561442c57600080fd5b602083019150836020828501011115613d3b57600080fd5b60008060006040848603121561445957600080fd5b833567ffffffffffffffff81111561447057600080fd5b8401610120818703121561448357600080fd5b9250602084013567ffffffffffffffff81111561449f57600080fd5b6144ab86828701614402565b9497909650939450505050565b600060a083016001600160a01b038351168452602083015160a0602086015281815180845260c087019150602083019350600092505b8083101561451a576001600160a01b0384511682526020820191506020840193506001830192506144ee565b50604085015160408701526060850151925061454160608701846001600160801b03169052565b60808501519250611ff660808701846001600160801b03169052565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156145b657603f198786030184526145a18583516144b8565b94506020938401939190910190600101614585565b50929695505050505050565b600080602083850312156145d557600080fd5b823567ffffffffffffffff8111156145ec57600080fd5b6145f885828601614317565b90969095509350505050565b60005b8381101561461f578181015183820152602001614607565b50506000910152565b60008151808452614640816020860160208601614604565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156145b657603f19878603018452614698858351614628565b9450602093840193919091019060010161467c565b600080600080606085870312156146c357600080fd5b84356146ce81614038565b935060208501359250604085013567ffffffffffffffff8111156146f157600080fd5b6146fd87828801614402565b95989497509550505050565b600067ffffffffffffffff82111561472357614723614089565b5060051b60200190565b600082601f83011261473e57600080fd5b813561475161474c82614709565b61409f565b8082825260208201915060208360051b86010192508583111561477357600080fd5b602085015b83811015614790578035835260209283019201614778565b5095945050505050565b600080600080600060a086880312156147b257600080fd5b85356147bd81614038565b945060208601356147cd81614038565b9350604086013567ffffffffffffffff8111156147e957600080fd5b6147f58882890161472d565b935050606086013567ffffffffffffffff81111561481257600080fd5b61481e8882890161472d565b925050608086013567ffffffffffffffff81111561483b57600080fd5b614847888289016140d0565b9150509295509295909350565b60008060006040848603121561486957600080fd5b833561448381614038565b6000806000806080858703121561488a57600080fd5b843561489581614038565b935060208501356148a581614038565b9250604085013567ffffffffffffffff8111156148c157600080fd5b6148cd8782880161472d565b925050606085013567ffffffffffffffff8111156148ea57600080fd5b6141a08782880161472d565b602080825282518282018190526000918401906040840190835b818110156149375783516001600160a01b0316835260209384019390920191600101614910565b509095945050505050565b602081526000610ea160208301846144b8565b600080600080600060a0868803121561496d57600080fd5b853561497881614038565b9450602086013561498881614038565b93506040860135925060608601359150608086013567ffffffffffffffff81111561483b57600080fd5b6000808335601e198436030181126149c957600080fd5b83018035915067ffffffffffffffff8211156149e457600080fd5b602001915036819003821315613d3b57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614a2157600080fd5b5051919050565b80356001600160801b038116811461405857600080fd5b600060208284031215614a5157600080fd5b610ea182614a28565b803560ff8116811461405857600080fd5b600060208284031215614a7d57600080fd5b610ea182614a5a565b634e487b7160e01b600052601160045260246000fd5b8082018082111561079957610799614a86565b6000808335601e19843603018112614ac657600080fd5b83018035915067ffffffffffffffff821115614ae157600080fd5b6020019150600581901b3603821315613d3b57600080fd5b6000808335601e19843603018112614b1057600080fd5b830160208101925035905067ffffffffffffffff811115614b3057600080fd5b8060051b3603821315613d3b57600080fd5b81835260208301925060008160005b84811015614b82578135614b6481614038565b6001600160a01b031686526020958601959190910190600101614b51565b5093949350505050565b60208152614bad60208201614ba08461404d565b6001600160a01b03169052565b6000614bbb60208401614a5a565b60ff8116604084015250614bd26040840184614af9565b6101206060850152614be961014085018284614b42565b91505060006060850135905080608085015250614c0860808501614a28565b6001600160801b03811660a085015250614c2460a08501614a28565b6001600160801b03811660c085015250614c4060c08501614a28565b6001600160801b03811660e085015250614c5c60e08501614a28565b6001600160801b03811661010085015250610100939093013561012092909201919091525090565b600060208284031215614c9657600080fd5b8151610ea181614038565b600060018201614cb357614cb3614a86565b5060010190565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082601f830112614cf157600080fd5b8135614cff61474c82614709565b8082825260208201915060208360051b860101925085831115614d2157600080fd5b602085015b83811015614790578035614d3981614038565b835260209283019201614d26565b600080600060608486031215614d5c57600080fd5b8335925060208401359150604084013567ffffffffffffffff811115614d8157600080fd5b614d8d86828701614ce0565b9150509250925092565b600081518084526020840193506020830160005b82811015614b82578151865260209586019590910190600101614dab565b6001600160a01b03851681526001600160a01b038416602082015260a060408201526000614dfa60a0830185614d97565b8281036060840152614e0c8185614d97565b838103608090940193909352505060008152602001949350505050565b604081526000614e3c6040830185614d97565b8281036020840152611ff68185614d97565b60008085851115614e5e57600080fd5b83861115614e6b57600080fd5b5050820193919092039150565b80356001600160e01b03198116906004841015613b18576001600160e01b0319808560040360031b1b82161691505092915050565b600080600060608486031215614ec257600080fd5b833567ffffffffffffffff811115614ed957600080fd5b614ee586828701614ce0565b935050602084013567ffffffffffffffff811115614f0257600080fd5b614f0e8682870161472d565b925050604084013567ffffffffffffffff811115614f2b57600080fd5b8401601f81018613614f3c57600080fd5b8035614f4a61474c82614709565b8082825260208201915060208360051b850101925088831115614f6c57600080fd5b602084015b83811015614fae57803567ffffffffffffffff811115614f9057600080fd5b614f9f8b6020838901016140d0565b84525060209283019201614f71565b50809450505050509250925092565b8183823760009101908152919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561501557600080fd5b81518015158114610ea157600080fd5b60008184825b8581101561493757813561503e81614038565b6001600160a01b03168352602092830192919091019060010161502b565b634e487b7160e01b600052602160045260246000fd5b8181038181111561079957610799614a86565b634e487b7160e01b600052603160045260246000fd5b600082516150ad818460208701614604565b9190910192915050565b6001600160a01b038316815260406020820152600061098e6040830184614628565b602081526000610ea1602083018461462856fe3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def04416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65643181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def00a2646970667358221220031ec29b7d10b58b08603b27c2e7c45ad33fe3849a37f3597e7f540a333d900464736f6c634300081a00330000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d278900000000000000000000000020fff38b7187d4748ba0f10f33ea63bad1bd58e9" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x3d74c70ad1fbb666774d0407b8657e1f876e77aaf5e7da9039dccef11c69e464", + "transactionType": "CREATE", + "contractName": "PaymentModule", + "contractAddress": "0x0cc7d827546555c874e1e4d45646efd424898bf2", + "function": null, + "arguments": [ + "0xFE7fc0Bbde84C239C0aB89111D617dC7cc58049f", + "0xb8c724df3eC8f2Bf8fA808dF2cB5dbab22f3E68c" + ], + "transaction": { + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "gas": "0x4ccb81", + "value": "0x0", + "input": "0x60e06040523060c05234801561001457600080fd5b506040516146a63803806146a683398101604081905261003391610129565b6001600160a01b03808316608052811660a0528181610050610062565b5061005b9050610062565b5050610163565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100b25760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101115780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6001600160a01b038116811461011157600080fd5b6000806040838503121561013c57600080fd5b825161014781610114565b602084015190925061015881610114565b809150509250929050565b60805160a05160c0516144ce6101d8600039600081816122420152818161226b01526123ee0152600081816105a50152818161150e01528181611b43015281816122120152612ab8015260008181610418015281816110e601528181611d85015281816121eb0152612c8801526144ce6000f3fe6080604052600436106101ac5760003560e01c80638da5cb5b116100ec578063ad3cb1cc1161008a578063f2fde38b11610064578063f2fde38b146105c7578063f8458ac1146105e7578063f94d24a114610607578063ffa1ad741461062757600080fd5b8063ad3cb1cc14610510578063c58343ef14610566578063da7924681461059357600080fd5b80639e93e577116100c65780639e93e57714610406578063a57b04b81461043a578063abff01101461045a578063ad35efd4146104e357600080fd5b80638da5cb5b1461037557806390866032146103c6578063982e85c8146103e657600080fd5b806343a681c01161015957806352d1902d1161013357806352d1902d1461030b57806363d4dd3b146103205780636b181a9414610333578063715018a61461036057600080fd5b806343a681c0146102ab5780634ec66d24146102d85780634f1ef286146102f857600080fd5b80631fc702d71161018a5780631fc702d7146102265780633015394c1461025357806342d0708a1461027357600080fd5b80630ef59a6d146101b15780631794bb3c146101e4578063180b7a3a14610206575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004613466565b610670565b6040519081526020015b60405180910390f35b3480156101f057600080fd5b506102046101ff366004613497565b610e5b565b005b34801561021257600080fd5b506102046102213660046134d8565b610fc8565b34801561023257600080fd5b506102466102413660046134d8565b611053565b6040516101db91906134f1565b34801561025f57600080fd5b5061020461026e3660046134d8565b611160565b34801561027f57600080fd5b5061029361028e366004613645565b6113fb565b6040516001600160801b0390911681526020016101db565b3480156102b757600080fd5b506102cb6102c63660046134d8565b61147b565b6040516101db91906136c7565b3480156102e457600080fd5b506102936102f3366004613645565b611585565b610204610306366004613866565b6115bd565b34801561031757600080fd5b506101d16115dc565b61020461032e3660046134d8565b61160b565b34801561033f57600080fd5b5061035361034e366004613645565b611932565b6040516101db9190613929565b34801561036c57600080fd5b506102046119ab565b34801561038157600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016101db565b3480156103d257600080fd5b506102936103e13660046134d8565b6119bf565b3480156103f257600080fd5b50610293610401366004613943565b611b2d565b34801561041257600080fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044657600080fd5b506101d16104553660046139ba565b611b3a565b34801561046657600080fd5b50604080518082018252600080825260209182015281518083019092527f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d290401546001600160a01b031682527f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d29040254908201526040516101db9190613a38565b3480156104ef57600080fd5b506105036104fe3660046134d8565b611bbd565b6040516101db9190613a68565b34801561051c57600080fd5b506105596040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101db9190613a99565b34801561057257600080fd5b506105866105813660046134d8565b611bc8565b6040516101db9190613ae0565b34801561059f57600080fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d357600080fd5b506102046105e2366004613ba2565b611d20565b3480156105f357600080fd5b506101d1610602366004613bbf565b611d7c565b34801561061357600080fd5b50610204610622366004613645565b611dfd565b34801561063357600080fd5b506105596040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6000333b81036106ac576040517f9fc7601100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f1338becd00000000000000000000000000000000000000000000000000000000600482018190529033906301ffc9a790602401602060405180830381865afa158015610723573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107479190613c40565b61077d576040517f8a05e37700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061078f60a0850160808601613ba2565b6001600160a01b0316036107cf576040517f8034b81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e161014084016101208501613c5b565b6001600160801b0316600003610823576040517f932ca0a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108336080840160608501613c78565b64ffffffffff1661084a6060850160408601613c78565b64ffffffffff161115610889576040517f7afb02cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4261089a6080850160608601613c78565b64ffffffffff168164ffffffffff16106108e0576040517f804491f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026108f260c0860160a08701613c95565b600281111561090357610903613913565b0361096257600061091a60e0860160c08701613cb0565b600381111561092b5761092b613913565b03610962576040517f53667a2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018061097560c0870160a08801613c95565b600281111561098657610986613913565b141580156109b5575060006109a160e0870160c08801613cb0565b60038111156109b2576109b2613913565b14155b156109f5576109f26109cd60e0870160c08801613cb0565b6109dd6060880160408901613c78565b6109ed6080890160608a01613c78565b611e07565b90505b6002610a0760c0870160a08801613c95565b6002811115610a1857610a18613913565b03610a21575060015b6000610a3360c0870160a08801613c95565b6002811115610a4457610a44613913565b14610a9d576000610a5d61012087016101008801613ba2565b6001600160a01b031603610a9d576040517ff7ac6ea000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e01546040805160c081018252600080825260208201529195507f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e00919081810190610b0d9060608a01908a01613c78565b64ffffffffff168152602001610b296080890160608a01613c78565b64ffffffffff168152602001610b4560a0890160808a01613ba2565b6001600160a01b031681526020016040518060c001604052808960a0016000016020810190610b749190613c95565b6002811115610b8557610b85613913565b8152602001610b9a60e08b0160c08c01613cb0565b6003811115610bab57610bab613913565b815264ffffffffff86166020820152604001610bcf6101208b016101008c01613ba2565b6001600160a01b03168152602001610bef6101408b016101208c01613c5b565b6001600160801b0316815260006020918201819052919092528781528382526040908190208351815493850151928501516060860151608087015161ffff1990961692151561ff0019169290921761010094151594909402939093176bffffffffffffffffffff000019166201000064ffffffffff948516026bffffffffff00000000000000191617600160381b9390911692909202919091176bffffffffffffffffffffffff16600160601b6001600160a01b039093169290920291909117815560a0820151805160018084018054909291839160ff191690836002811115610cdb57610cdb613913565b021790555060208201518154829061ff001916610100836003811115610d0357610d03613913565b02179055506040820151815460608401516001600160a01b0316600160381b027fffffffffff0000000000000000000000000000000000000000ffffffffffffff64ffffffffff9093166201000002929092167fffffffffff00000000000000000000000000000000000000000000000000ffff90911617178155608080830151600180840180546001600160801b039093167fffffffffffffffffffffffffffffffff000000000000000000000000000000009093169290921790915560a0938401516002909301929092558582018054909201909155610dec935090890191508801613ba2565b6001600160a01b0316857f97f6a2f67a21f7dcf96e83472a3e6fe85185d53d2658da0a76860fc850b2edb0610e2760608a0160408b01613c78565b610e3760808b0160608c01613c78565b8a60a001604051610e4a93929190613ccb565b60405180910390a350505050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610ea65750825b905060008267ffffffffffffffff166001148015610ec35750303b155b905081158015610ed1575080155b15610f08576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f3c57845468ff00000000000000001916680100000000000000001785555b610f47888888611e61565b610f4f611eeb565b60017f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e01558315610fbe57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610fd0611ef3565b7f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d29040254604080519182526020820183905280517f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d290400927fb5b3ce389419083c8f6504f82412a8e8cbe1bc51bb0df0ffeb81e0fe9536667692908290030190a160020155565b6110d060408051610180810182526000808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e08401839052610100840183905261012084018390528451908101855282815290810182905292830152906101408201908152600060209091015290565b60405163894e9a0d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063894e9a0d906024016101c060405180830381865afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a9190613e04565b92915050565b60008181527f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e0060208181526040808420815160c08082018452825460ff808216151584526101008204811615159684019690965262010000810464ffffffffff90811684870152600160381b8204166060840152600160601b90046001600160a01b0316608083015283519081019093526001820180549596959194929360a08601939092839116600281111561121957611219613913565b600281111561122a5761122a613913565b81528154602090910190610100900460ff16600381111561124d5761124d613913565b600381111561125e5761125e613913565b8152815462010000810464ffffffffff166020830152600160381b90046001600160a01b0316604082015260018201546001600160801b03166060820152600290910154608090910152905250905060006112b884611f67565b905060028160038111156112ce576112ce613913565b036112ec57604051635e99e00160e11b815260040160405180910390fd5b600381600381111561130057611300613913565b0361131e57604051633837625b60e21b815260040160405180910390fd5b600081600381111561133257611332613913565b036113825760808201516001600160a01b0316331461137d576040517fb57aca0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b5565b600060a083015151600281111561139b5761139b613913565b146113b55760a08083015180519101516113b59190611dfd565b600084815260208490526040808220805460ff191660011790555185917f6187bf55f2675dbecee951f81c92ecac87f54ed5bf888d31b09e634749b848ef91a250505050565b6000611406836121cd565b6001600160a01b0316634869e12d836040518263ffffffff1660e01b815260040161143391815260200190565b602060405180830381865afa158015611450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114749190613ef7565b9392505050565b6114f860408051610180810182526000808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e08401839052610100840183905261012084018390528451908101855282815290810182905292830152906101408201908152602001606081525090565b60405163894e9a0d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063894e9a0d90602401600060405180830381865afa15801561155d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261115a9190810190613fd3565b6000611590836121cd565b6001600160a01b031663d975dfed836040518263ffffffff1660e01b815260040161143391815260200190565b6115c5612237565b6115ce826122ee565b6115d882826122f6565b5050565b60006115e66123e3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b60008181527f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e0060208181526040808420815160c08082018452825460ff808216151584526101008204811615159684019690965262010000810464ffffffffff90811684870152600160381b8204166060840152600160601b90046001600160a01b0316608083015283519081019093526001820180549596959194929360a0860193909283911660028111156116c4576116c4613913565b60028111156116d5576116d5613913565b81528154602090910190610100900460ff1660038111156116f8576116f8613913565b600381111561170957611709613913565b8152815464ffffffffff6201000082041660208301526001600160a01b03600160381b9091048116604083015260018301546001600160801b031660608301526002909201546080918201529190925283015192935091909116905061179b576040517fe054e29800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006117a684611f67565b905060028160038111156117bc576117bc613913565b14806117d5575060a08201516040015164ffffffffff16155b156117f357604051635e99e00160e11b815260040160405180910390fd5b600381600381111561180757611807613913565b0361182557604051633837625b60e21b815260040160405180910390fd5b600060a083015151600281111561183e5761183e613913565b036118515761184c8261242c565b6118a0565b6000600160a084015151600281111561186c5761186c613913565b036118815761187a83612581565b905061188d565b61188a836125ac565b90505b6000858152602085905260409020600301555b60a08201516040908101516000868152602086905282902060018101805464ffffffffff600019909401938416620100000266ffffffffff000019909116178155815461ff0019166101001790915591519091339187917f33c8f93fb4c77fcc3018c358d38dfd0ff049d3541d7bff0c8ab12f0bec9295a2916119239190614109565b60405180910390a35050505050565b600061193d836121cd565b6001600160a01b031663ad35efd4836040518263ffffffff1660e01b815260040161196a91815260200190565b602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114749190614176565b6119b3611ef3565b6119bd600061260b565b565b60008181527f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e0060208181526040808420815160c08082018452825460ff808216151584526101008204811615159684019690965262010000810464ffffffffff90811684870152600160381b8204166060840152600160601b90046001600160a01b0316608083015283519081019093526001820180548795929460a08601939092918391166002811115611a7657611a76613913565b6002811115611a8757611a87613913565b81528154602090910190610100900460ff166003811115611aaa57611aaa613913565b6003811115611abb57611abb613913565b8152815462010000810464ffffffffff166020830152600160381b90046001600160a01b0316604082015260018201546001600160801b03166060820152600290910154608091820152915260a083810151805191015191840151939450611b2593909250611b2d565b949350505050565b6000611b2584848461267c565b6000611b6787877f0000000000000000000000000000000000000000000000000000000000000000612721565b611b758787878787876127d9565b60008181527f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d2904006020526040902080546001600160a01b03191633179055979650505050505050565b600061115a82611f67565b611bd06133f8565b60008281527f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e006020818152604092839020835160c08082018652825460ff808216151584526101008204811615159584019590955262010000810464ffffffffff90811684890152600160381b8204166060840152600160601b90046001600160a01b03166080830152855190810190955260018201805494959194929360a08601938391166002811115611c8757611c87613913565b6002811115611c9857611c98613913565b81528154602090910190610100900460ff166003811115611cbb57611cbb613913565b6003811115611ccc57611ccc613913565b8152815462010000810464ffffffffff166020830152600160381b90046001600160a01b0316604082015260018201546001600160801b031660608201526002909101546080909101529052509392505050565b611d28611ef3565b6001600160a01b038116611d70576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b611d798161260b565b50565b6000611da986867f0000000000000000000000000000000000000000000000000000000000000000612721565b611db68686868686612b44565b60008181527f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d2904006020526040902080546001600160a01b031916331790559695505050505050565b6115d88282612d0e565b6000828203611e168582612e13565b91508164ffffffffff16600003611e59576040517f28998a5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b611e69612e8f565b611e7283612ef6565b604080518082019091526001600160a01b039290921680835260209092018190527f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d29040180546001600160a01b0319169092179091557f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d2904025550565b6119bd612e8f565b33611f257f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146119bd576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401611d67565b60008181527f69242e762af97d314866e2398c5d39d67197520146b0e3b1471c97ebda768e0060208181526040808420815160c08082018452825460ff808216151584526101008204811615159684019690965262010000810464ffffffffff90811684870152600160381b8204166060840152600160601b90046001600160a01b0316608083015283519081019093526001820180548795929460a0860193909291839116600281111561201e5761201e613913565b600281111561202f5761202f613913565b81528154602090910190610100900460ff16600381111561205257612052613913565b600381111561206357612063613913565b8152815462010000810464ffffffffff16602080840191909152600160381b9091046001600160a01b0316604083015260018301546001600160801b031660608301526002909201546080909101529152820151919250501580156120c757508051155b156120d6575060009392505050565b60a0808201510151156121915760a08082015180519101516000916120fa91611932565b9050600281600481111561211057612110613913565b0361212057506002949350505050565b600481600481111561213457612134613913565b036121845760a0808301518051910151600091612150916113fb565b90508260a00151608001516001600160801b0316816001600160801b03161061217a57600261217d565b60035b505061218f565b506001949350505050565b505b8051156121a2575060039392505050565b8060a001516040015164ffffffffff166000036121c3575060029392505050565b5060019392505050565b600060018260028111156121e3576121e3613913565b0361220f57507f0000000000000000000000000000000000000000000000000000000000000000919050565b507f00000000000000000000000000000000000000000000000000000000000000005b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122d057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122c47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156119bd5760405163703e46dd60e11b815260040160405180910390fd5b611d79611ef3565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612350575060408051601f3d908101601f1916820190925261234d91810190614197565b60015b61237857604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611d67565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146123d4576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611d67565b6123de8383612f07565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146119bd5760405163703e46dd60e11b815260040160405180910390fd5b60a0810151606001516001600160a01b0316612544578060a00151608001516001600160801b03163410156124a25760a0810151608001516040517f7309d6860000000000000000000000000000000000000000000000000000000081526001600160801b039091166004820152602401611d67565b600081608001516001600160a01b03168260a00151608001516001600160801b031660405160006040518083038185875af1925050503d8060008114612504576040519150601f19603f3d011682016040523d82523d6000602084013e612509565b606091505b50509050806115d8576040517fa7b62ffc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d793382608001518360a00151608001516001600160801b03168460a00151606001516001600160a01b0316612f5d909392919063ffffffff16565b600061115a8260a00151606001518360a0015160800151846040015185606001518660800151611d7c565b6000806125d48360a0015160200151846040015185606001516125cf91906141c6565b612e13565b90506114748360a00151606001518460a0015160800151856040015186608001518564ffffffffff168860a0015160200151611b3a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080612688856121cd565b6040517fea5ead19000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0385811660248301529192509082169063ea5ead19906044016020604051808303816000875af11580156126f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127189190613ef7565b95945050505050565b61273f6001600160a01b03841633306001600160801b038616612f5d565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526001600160801b038416602483015284169063095ea7b3906044016020604051808303816000875af11580156127af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d39190613c40565b50505050565b6000807f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d290400905061285a60408051610120810182526000808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e084015283518085019094528184528301529061010082015290565b3081526001600160a01b0386811660208301526001600160801b03891660408301528916606082015260016080820152600060a0820181905264ffffffffff881660c08301526128a985612fe5565b905060006128d66128d185600101600101546128cb8d6001600160801b031690565b90613051565b613063565b905060006128e4828c6141e3565b905060006128f28983614218565b90506000896001600160801b031667ffffffffffffffff811115612918576129186137d2565b60405190808252806020026020018201604052801561295d57816020015b60408051808201909152600080825260208201528152602001906001900390816129365790505b5060e087015260005b8a6001600160801b0316811015612a0b576040518060400160405280846001600160801b03168152602001878f61299d9190614246565b64ffffffffff168152508760e0015182815181106129bd576129bd614263565b60209081029190910101526129d2868e614246565b9c508660e0015181815181106129ea576129ea614263565b60200260200101516000015182612a019190614279565b9150600101612966565b50612a1681846141e3565b60e0870151612a2660018d6141e3565b6001600160801b031681518110612a3f57612a3f614263565b6020026020010151600001818151612a579190614279565b6001600160801b031690525060408051808201825260018901546001600160a01b03908116825260028a0154602083015261010089019190915290517f32fbe22b0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000909116906332fbe22b90612aef908990600401614298565b6020604051808303816000875af1158015612b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b329190614197565b9e9d5050505050505050505050505050565b60007f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d290400612bd060408051610100810182526000808252602080830182905282840182905260608084018390526080840183905260a084018390528451908101855282815280820183905280850183905260c084015283518085019094528184528301529060e082015290565b3081526001600160a01b038481166020808401919091526001600160801b0389166040808501919091528a8316606080860191909152600160808601819052600060a087018190528351928301845264ffffffffff808d168452838601919091528a168284015260c086019190915281518083018352908601548416815260028601549281019290925260e0840191909152517f53b157270000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000909116906353b1572790612cbf90849060040161436e565b6020604051808303816000875af1158015612cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d029190614197565b98975050505050505050565b7f37eb5ed31cc419f1937b308ec5ab43829484edc140a0a162efda74d20d2904006000612d3a846121cd565b6000848152602084905260409020549091506001600160a01b0316338114612d99576040517f0c0cedc20000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611d67565b6040517f40e58ee5000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b038316906340e58ee590602401600060405180830381600087803b158015612df457600080fd5b505af1158015612e08573d6000803e3d6000fd5b505050505050505050565b60006001836003811115612e2957612e29613913565b03612e4257612e3b62093a8083614452565b905061115a565b6002836003811115612e5657612e56613913565b03612e6857612e3b6224ea0083614452565b6003836003811115612e7c57612e7c613913565b0361115a576114746301baf80083614452565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166119bd576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612efe612e8f565b611d79816130aa565b612f10826130b2565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612f55576123de8282613129565b6115d8613196565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526127d39085906131ce565b60006001826003811115612ffb57612ffb613913565b0361300a575062093a80919050565b600282600381111561301e5761301e613913565b0361302d57506224ea00919050565b600382600381111561304157613041613913565b0361223257506301baf800919050565b60006114746130608484613258565b90565b6000816001600160801b0381111561115a576040517f4916adce00000000000000000000000000000000000000000000000000000000815260048101849052602401611d67565b611d28612e8f565b806001600160a01b03163b6000036130e857604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611d67565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051613146919061447c565b600060405180830381855af49150503d8060008114613181576040519150601f19603f3d011682016040523d82523d6000602084013e613186565b606091505b5091509150612718858383613341565b34156119bd576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080602060008451602086016000885af1806131f1576040513d6000823e3d81fd5b50506000513d91508115613209578060011415613216565b6001600160a01b0384163b155b156127d3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611d67565b600080806000198486098486029250828110838203039150508060000361328c5750670de0b6b3a76400009004905061115a565b670de0b6b3a764000081106132d7576040517f5173648d0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401611d67565b6000670de0b6b3a7640000858709620400008185030493109091037d40000000000000000000000000000000000000000000000000000000000002919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b60608261335657613351826133b6565b611474565b815115801561336d57506001600160a01b0384163b155b156133af576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611d67565b5080611474565b8051156133c65780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260008082526020820181905291810182905260608101829052608081019190915260a081016134616040805160c08101909152806000815260200160008152600060208201819052604082018190526060820181905260809091015290565b905290565b600061016082840312801561347a57600080fd5b509092915050565b6001600160a01b0381168114611d7957600080fd5b6000806000606084860312156134ac57600080fd5b83356134b781613482565b925060208401356134c781613482565b929592945050506040919091013590565b6000602082840312156134ea57600080fd5b5035919050565b81516001600160a01b031681526101c08101602083015161351d60208401826001600160a01b03169052565b506040830151613536604084018264ffffffffff169052565b50606083015161354a606084018215159052565b50608083015161355e608084018215159052565b5060a083015161357960a08401826001600160a01b03169052565b5060c083015161359260c084018264ffffffffff169052565b5060e08301516135a660e084018215159052565b506101008301516135bc61010084018215159052565b506101208301516135d261012084018215159052565b506101408301516136196101408401826001600160801b0381511682526001600160801b0360208201511660208301526001600160801b0360408201511660408301525050565b5061016083015164ffffffffff81166101a08401525b5092915050565b80356003811061223257600080fd5b6000806040838503121561365857600080fd5b61366183613636565b946020939093013593505050565b600081518084526020840193506020830160005b828110156136bd57815180516001600160801b0316875260209081015164ffffffffff168188015260409096019590910190600101613683565b5093949350505050565b602081526136e16020820183516001600160a01b03169052565b600060208301516136fd60408401826001600160a01b03169052565b50604083015164ffffffffff8116606084015250606083015164ffffffffff8116608084015250608083015180151560a08401525060a083015180151560c08401525060c08301516001600160a01b03811660e08401525060e083015180151561010084015250610100830151801515610120840152506101208301518015156101408401525061014083015180516001600160801b03908116610160850152602082015181166101808501526040820151166101a0840152506101608301516101c080840152611b256101e084018261366f565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff8111828210171561380c5761380c6137d2565b60405290565b6040805190810167ffffffffffffffff8111828210171561380c5761380c6137d2565b604051601f8201601f1916810167ffffffffffffffff8111828210171561385e5761385e6137d2565b604052919050565b6000806040838503121561387957600080fd5b823561388481613482565b9150602083013567ffffffffffffffff8111156138a057600080fd5b8301601f810185136138b157600080fd5b803567ffffffffffffffff8111156138cb576138cb6137d2565b6138de601f8201601f1916602001613835565b8181528660208385010111156138f357600080fd5b816020840160208301376000602083830101528093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016005831061393d5761393d613913565b91905290565b60008060006060848603121561395857600080fd5b61396184613636565b925060208401359150604084013561397881613482565b809150509250925092565b6001600160801b0381168114611d7957600080fd5b64ffffffffff81168114611d7957600080fd5b80356004811061223257600080fd5b60008060008060008060c087890312156139d357600080fd5b86356139de81613482565b955060208701356139ee81613983565b945060408701356139fe81613998565b93506060870135613a0e81613482565b92506080870135613a1e81613983565b9150613a2c60a088016139ab565b90509295509295509295565b81516001600160a01b03168152602080830151908201526040810161115a565b60048110611d7957611d79613913565b6020810161393d83613a58565b60005b83811015613a90578181015183820152602001613a78565b50506000910152565b6020815260008251806020840152613ab8816040850160208701613a75565b601f01601f19169190910160400192915050565b60038110613adc57613adc613913565b9052565b60006101608201905082511515825260208301511515602083015264ffffffffff604084015116604083015264ffffffffff60608401511660608301526001600160a01b03608084015116608083015260a0830151613b4360a084018251613acc565b6020810151613b5181613a58565b60c0840152604081015164ffffffffff1660e084015260608101516001600160a01b031661010084015260808101516001600160801b031661012084015260a0015161014090920191909152919050565b600060208284031215613bb457600080fd5b813561147481613482565b600080600080600060a08688031215613bd757600080fd5b8535613be281613482565b94506020860135613bf281613983565b93506040860135613c0281613998565b92506060860135613c1281613998565b91506080860135613c2281613482565b809150509295509295909350565b8051801515811461223257600080fd5b600060208284031215613c5257600080fd5b61147482613c30565b600060208284031215613c6d57600080fd5b813561147481613983565b600060208284031215613c8a57600080fd5b813561147481613998565b600060208284031215613ca757600080fd5b61147482613636565b600060208284031215613cc257600080fd5b611474826139ab565b64ffffffffff8481168252831660208201526101008101613cf760408301613cf285613636565b613acc565b613d03602084016139ab565b613d0c81613a58565b60608301526040830135613d1f81613998565b64ffffffffff1660808301526060830135613d3981613482565b6001600160a01b031660a08301526080830135613d5581613983565b6001600160801b031660c083015260a0929092013560e09091015292915050565b805161223281613482565b805161223281613998565b600060608284031215613d9e57600080fd5b6040516060810167ffffffffffffffff81118282101715613dc157613dc16137d2565b80604052508091508251613dd481613983565b81526020830151613de481613983565b60208201526040830151613df781613983565b6040919091015292915050565b60006101c0828403128015613e1857600080fd5b50613e216137e8565b613e2a83613d76565b8152613e3860208401613d76565b6020820152613e4960408401613d81565b6040820152613e5a60608401613c30565b6060820152613e6b60808401613c30565b6080820152613e7c60a08401613d76565b60a0820152613e8d60c08401613d81565b60c0820152613e9e60e08401613c30565b60e0820152613eb06101008401613c30565b610100820152613ec36101208401613c30565b610120820152613ed7846101408501613d8c565b610140820152613eea6101a08401613d81565b6101608201529392505050565b600060208284031215613f0957600080fd5b815161147481613983565b600082601f830112613f2557600080fd5b815167ffffffffffffffff811115613f3f57613f3f6137d2565b613f4e60208260051b01613835565b8082825260208201915060208360061b860101925085831115613f7057600080fd5b602085015b83811015613fc95760408188031215613f8d57600080fd5b613f95613812565b8151613fa081613983565b81526020820151613fb081613998565b6020828101919091529084529290920191604001613f75565b5095945050505050565b600060208284031215613fe557600080fd5b815167ffffffffffffffff811115613ffc57600080fd5b82016101c0818503121561400f57600080fd5b6140176137e8565b61402082613d76565b815261402e60208301613d76565b602082015261403f60408301613d81565b604082015261405060608301613d81565b606082015261406160808301613c30565b608082015261407260a08301613c30565b60a082015261408360c08301613d76565b60c082015261409460e08301613c30565b60e08201526140a66101008301613c30565b6101008201526140b96101208301613c30565b6101208201526140cd856101408401613d8c565b6101408201526101a082015167ffffffffffffffff8111156140ee57600080fd5b6140fa86828501613f14565b61016083015250949350505050565b815460c082019061411d8360ff8316613acc565b60ff8160081c1661412d81613a58565b6020840152601081901c64ffffffffff16604084015260381c6001600160a01b0316606083015260018301546001600160801b0316608083015260029092015460a09091015290565b60006020828403121561418857600080fd5b81516005811061147457600080fd5b6000602082840312156141a957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b64ffffffffff828116828216039081111561115a5761115a6141b0565b6001600160801b03828116828216039081111561115a5761115a6141b0565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b0383168061423157614231614202565b806001600160801b0384160491505092915050565b64ffffffffff818116838216019081111561115a5761115a6141b0565b634e487b7160e01b600052603260045260246000fd5b6001600160801b03818116838216019081111561115a5761115a6141b0565b602081526142b26020820183516001600160a01b03169052565b600060208301516142ce60408401826001600160a01b03169052565b5060408301516001600160801b03811660608401525060608301516001600160a01b038116608084015250608083015180151560a08401525060a083015180151560c08401525060c083015164ffffffffff811660e08401525060e083015161014061010084015261434461016084018261366f565b61010085015180516001600160a01b03166101208601526020810151610140860152909150611e59565b6000610160820190506001600160a01b0383511682526001600160a01b0360208401511660208301526001600160801b03604084015116604083015260608301516143c460608401826001600160a01b03169052565b5060808301516143d8608084018215159052565b5060a08301516143ec60a084018215159052565b5060c083015161442b60c084018264ffffffffff815116825264ffffffffff602082015116602083015264ffffffffff60408201511660408301525050565b5060e083015180516001600160a01b0316610120840152602081015161014084015261362f565b600064ffffffffff83168061446957614469614202565b8064ffffffffff84160491505092915050565b6000825161448e818460208701613a75565b919091019291505056fea2646970667358221220f77e8ead89d3e1674724a66b6d27d22f4de928891bba332004143e86f7f6d17064736f6c634300081a0033000000000000000000000000fe7fc0bbde84c239c0ab89111d617dc7cc58049f000000000000000000000000b8c724df3ec8f2bf8fa808df2cb5dbab22f3e68c", + "nonce": "0x27", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe37f63678aa84e6dc27e689de20a770cf44beb886d67822c0e6cdb2be488a4a5", + "transactionType": "CREATE2", + "contractName": "ERC1967Proxy", + "contractAddress": "0x5b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "function": null, + "arguments": [ + "0x0CC7D827546555C874E1E4d45646Efd424898Bf2", + "0x1794bb3c00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa0000000000000000000000000000000000000000000000000000000000000000" + ], + "transaction": { + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x52cc1", + "value": "0x0", + "input": "0x3333303738313638303600000000000000000000000000000000000000000000608060405260405161041d38038061041d83398101604081905261002291610268565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b919061033c565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b038111156102ae57600080fd5b8301601f810185136102bf57600080fd5b80516001600160401b038111156102d8576102d861022e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103065761030661022e565b60405281815282820160200187101561031e57600080fd5b61032f826020830160208601610244565b8093505050509250929050565b6000825161034e818460208701610244565b9190910192915050565b60b7806103666000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea26469706673582212206c8796a415d4fa6af6aa47adf983c4d24a38673de0194737183e24829108ceb964736f6c634300081a00330000000000000000000000000cc7d827546555c874e1e4d45646efd424898bf2000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000641794bb3c00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x28", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0e2371bdaf58cc296ada882e80ce02c10548a821e86bea91ec8926f455e7509c", + "transactionType": "CALL", + "contractName": "ModuleKeeper", + "contractAddress": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "function": "addToAllowlist(address)", + "arguments": [ + "0x5b2FD952D60b4AF54b698C2BF2D6D6f8042F83B2" + ], + "transaction": { + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "gas": "0x11fd7", + "value": "0x0", + "input": "0xf8e86ece0000000000000000000000005b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "nonce": "0x29", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x9e766", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x19161d71b4187301427ab0db5eeeff1b86c48a482ac05d9a7d547ace90e1c757", + "transactionIndex": "0x4", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "gasUsed": "0x429b2", + "effectiveGasPrice": "0x8ffe9", + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0xe09386b", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x2057875565", + "l1GasPrice": "0x8b1ab5e3", + "l1GasUsed": "0x2c2e" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x6c0dc8", + "logs": [ + { + "address": "0x328ef0ccf52e5b3ac2f842794349bc379b5e67ed", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0x93911c62d24feb6b174a60dd9674ffdb477ca9ee8070da3a1568807216744727", + "transactionIndex": "0x5", + "logIndex": "0x7", + "removed": false + }, + { + "address": "0x20fff38b7187d4748ba0f10f33ea63bad1bd58e9", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa", + "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c" + ], + "data": "0x", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0x93911c62d24feb6b174a60dd9674ffdb477ca9ee8070da3a1568807216744727", + "transactionIndex": "0x5", + "logIndex": "0x8", + "removed": false + } + ], + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000020000000000010000000000000000010000000000000000020000000000000000000800000000000000000000080000000000000000000000000000000000000000000000000000001080000000000000000000000000080001000000000000000400000000000000000000001000000000000000000080000000000000800000040000000000000000000100000000000020000002000000000000000000000000000080000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x93911c62d24feb6b174a60dd9674ffdb477ca9ee8070da3a1568807216744727", + "transactionIndex": "0x5", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "gasUsed": "0x622662", + "effectiveGasPrice": "0x8ffe9", + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x20fff38b7187d4748ba0f10f33ea63bad1bd58e9", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0xe09386b", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x2a1f1b31bb8", + "l1GasPrice": "0x8b1ab5e3", + "l1GasUsed": "0x398ad" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xa724ea", + "logs": [ + { + "address": "0x0cc7d827546555c874e1e4d45646efd424898bf2", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0x3d74c70ad1fbb666774d0407b8657e1f876e77aaf5e7da9039dccef11c69e464", + "transactionIndex": "0x6", + "logIndex": "0x9", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000008000000000000004000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x3d74c70ad1fbb666774d0407b8657e1f876e77aaf5e7da9039dccef11c69e464", + "transactionIndex": "0x6", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "gasUsed": "0x3b1722", + "effectiveGasPrice": "0x8ffe9", + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": null, + "contractAddress": "0x0cc7d827546555c874e1e4d45646efd424898bf2", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0xe09386b", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x188d93754c0", + "l1GasPrice": "0x8b1ab5e3", + "l1GasUsed": "0x218ab" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xaaaf0b", + "logs": [ + { + "address": "0x5b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000000cc7d827546555c874e1e4d45646efd424898bf2" + ], + "data": "0x", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0xe37f63678aa84e6dc27e689de20a770cf44beb886d67822c0e6cdb2be488a4a5", + "transactionIndex": "0x7", + "logIndex": "0xa", + "removed": false + }, + { + "address": "0x5b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa" + ], + "data": "0x", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0xe37f63678aa84e6dc27e689de20a770cf44beb886d67822c0e6cdb2be488a4a5", + "transactionIndex": "0x7", + "logIndex": "0xb", + "removed": false + }, + { + "address": "0x5b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0xe37f63678aa84e6dc27e689de20a770cf44beb886d67822c0e6cdb2be488a4a5", + "transactionIndex": "0x7", + "logIndex": "0xc", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000002000001010000000000000000010000000000000000020000000000000000000800000000000000000000080000000000400010000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000400000000020000000000000008000000000000000000000000000004000000000000000000000", + "type": "0x2", + "transactionHash": "0xe37f63678aa84e6dc27e689de20a770cf44beb886d67822c0e6cdb2be488a4a5", + "transactionIndex": "0x7", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "gasUsed": "0x38a21", + "effectiveGasPrice": "0x8ffe9", + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x5b2fd952d60b4af54b698c2bf2d6d6f8042f83b2", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0xe09386b", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x284d58ff81", + "l1GasPrice": "0x8b1ab5e3", + "l1GasUsed": "0x370e" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xab73dc", + "logs": [ + { + "address": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "topics": [ + "0x2deff0ce80851d5346ba1bc7678a74ce90f0b8109fea432a35e00bc11c028ca6", + "0x00000000000000000000000085e094b259718be1af0d8cbbd41dd7409c2200aa", + "0x0000000000000000000000005b2fd952d60b4af54b698c2bf2d6d6f8042f83b2" + ], + "data": "0x", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "transactionHash": "0x0e2371bdaf58cc296ada882e80ce02c10548a821e86bea91ec8926f455e7509c", + "transactionIndex": "0x8", + "logIndex": "0xd", + "removed": false + } + ], + "logsBloom": "0x00000000010000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000010000000000100000000000000000000000000000000000000000000010000000000000000010000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000104000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0e2371bdaf58cc296ada882e80ce02c10548a821e86bea91ec8926f455e7509c", + "transactionIndex": "0x8", + "blockHash": "0x3c7f7b503b9deee2df8325c8c2cfd17b38bd118b1fe87cfca92e6a47bf9ceedc", + "blockNumber": "0x11aae82", + "gasUsed": "0xc4d1", + "effectiveGasPrice": "0x8ffe9", + "from": "0x85e094b259718be1af0d8cbbd41dd7409c2200aa", + "to": "0x520cb1322b1060f057c7bab1a31ec7cc5a30b9dd", + "contractAddress": null, + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0xe09386b", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x49336d579", + "l1GasPrice": "0x8b1ab5e3", + "l1GasUsed": "0x640" + } + ], + "libraries": [], + "pending": [], + "returns": { + "moduleKeeper": { + "internal_type": "contract ModuleKeeper", + "value": "0x520cb1322b1060f057c7bab1a31EC7cc5a30b9Dd" + }, + "stationRegistry": { + "internal_type": "contract StationRegistry", + "value": "0x20FFF38B7187d4748Ba0F10f33Ea63BAD1Bd58E9" + }, + "paymentModule": { + "internal_type": "contract PaymentModule", + "value": "0x5b2FD952D60b4AF54b698C2BF2D6D6f8042F83B2" + } + }, + "timestamp": 1732820030, + "chain": 84532, + "commit": "3e162a6" +} \ No newline at end of file diff --git a/script/Base.s.sol b/script/Base.s.sol index 7c6a7e8..f236d4c 100644 --- a/script/Base.s.sol +++ b/script/Base.s.sol @@ -4,27 +4,8 @@ pragma solidity ^0.8.22; import { Script } from "forge-std/Script.sol"; contract BaseScript is Script { - /// @dev Junk mnemonic seed phrase use as a fallback in case there is no mnemonic set in the `.env` file - string internal constant TEST_MNEMONIC = "test test test test test test test test test test test junk"; - - /// @dev Used to derive the deployer's address - string internal mnemonic; - - /// @dev Stores the deployer address - address deployer; - - constructor() { - address from = vm.envOr({ name: "DEPLOYER", defaultValue: address(0) }); - if (from != address(0)) { - deployer = from; - } else { - mnemonic = vm.envOr({ name: "MNEMONIC", defaultValue: TEST_MNEMONIC }); - (deployer,) = deriveRememberKey(mnemonic, 0); - } - } - modifier broadcast() { - vm.startBroadcast(deployer); + vm.startBroadcast(); _; vm.stopBroadcast(); } diff --git a/src/ModuleKeeper.sol b/src/ModuleKeeper.sol index fda2c70..a794e6d 100644 --- a/src/ModuleKeeper.sol +++ b/src/ModuleKeeper.sol @@ -20,7 +20,7 @@ contract ModuleKeeper is IModuleKeeper, Ownable { //////////////////////////////////////////////////////////////////////////*/ /// @dev Initializes the initial owner of the {ModuleKeeper} - constructor(address _initialOwner) Ownable(_initialOwner) {} + constructor(address _initialOwner) Ownable(_initialOwner) { } /*////////////////////////////////////////////////////////////////////////// NON-CONSTANT FUNCTIONS diff --git a/src/Space.sol b/src/Space.sol index 16aaa56..bfc7a83 100644 --- a/src/Space.sol +++ b/src/Space.sol @@ -14,7 +14,6 @@ import { AccountCore } from "@thirdweb/contracts/prebuilts/account/utils/Account import { IEntryPoint } from "@thirdweb/contracts/prebuilts/account/interface/IEntrypoint.sol"; import { ERC1271 } from "@thirdweb/contracts/eip/ERC1271.sol"; import { EnumerableSet } from "@thirdweb/contracts/external-deps/openzeppelin/utils/structs/EnumerableSet.sol"; -import { AccountCoreStorage } from "@thirdweb/contracts/prebuilts/account/utils/AccountCoreStorage.sol"; import { ISpace } from "./interfaces/ISpace.sol"; import { ModuleManager } from "./abstracts/ModuleManager.sol"; @@ -37,11 +36,11 @@ contract Space is ISpace, AccountCore, ERC1271, ModuleManager { //////////////////////////////////////////////////////////////////////////*/ /// @dev Initializes the address of the EIP 4337 factory and EntryPoint contract - constructor(IEntryPoint _entrypoint, address _factory) AccountCore(_entrypoint, _factory) {} + constructor(IEntryPoint _entrypoint, address _factory) AccountCore(_entrypoint, _factory) { } /// @notice Initializes the {ModuleKeeper}, enables initial modules and configures the {Space} smart account function initialize(address _defaultAdmin, bytes calldata _data) public override { - (, , address[] memory initialModules) = abi.decode(_data, (uint256, uint256, address[])); + (,, address[] memory initialModules) = abi.decode(_data, (uint256, uint256, address[])); // Enable the initial module(s) ModuleKeeper moduleKeeper = StationRegistry(factory).moduleKeeper(); @@ -49,8 +48,6 @@ contract Space is ISpace, AccountCore, ERC1271, ModuleManager { // Initialize the {Space} smart contract super.initialize(_defaultAdmin, _data); - - _registerOnFactory(); } /*////////////////////////////////////////////////////////////////////////// @@ -87,7 +84,11 @@ contract Space is ISpace, AccountCore, ERC1271, ModuleManager { address module, uint256 value, bytes calldata data - ) public onlyAdminOrEntrypoint returns (bool success) { + ) + public + onlyAdminOrEntrypoint + returns (bool success) + { // Checks: the `module` module is enabled on the smart account _checkIfModuleIsEnabled(module); @@ -100,7 +101,10 @@ contract Space is ISpace, AccountCore, ERC1271, ModuleManager { address[] calldata modules, uint256[] calldata values, bytes[] calldata data - ) external onlyAdminOrEntrypoint { + ) + external + onlyAdminOrEntrypoint + { // Cache the length of the modules array uint256 modulesLength = modules.length; @@ -118,74 +122,66 @@ contract Space is ISpace, AccountCore, ERC1271, ModuleManager { } /// @inheritdoc ISpace - function withdrawERC20(IERC20 asset, uint256 amount) public onlyAdminOrEntrypoint { + function withdrawERC20(address to, IERC20 asset, uint256 amount) public onlyAdminOrEntrypoint { // Checks: the available ERC20 balance of the space is greater enough to support the withdrawal if (amount > asset.balanceOf(address(this))) revert Errors.InsufficientERC20ToWithdraw(); - // Interactions: withdraw by transferring the amount to the sender - asset.safeTransfer({ to: msg.sender, value: amount }); + // Interactions: withdraw by transferring the `amount` to the `to` address + asset.safeTransfer({ to: to, value: amount }); // Log the successful ERC-20 token withdrawal - emit AssetWithdrawn({ to: msg.sender, asset: address(asset), amount: amount }); + emit AssetWithdrawn({ to: to, asset: address(asset), amount: amount }); } /// @inheritdoc ISpace - function withdrawERC721(IERC721 collection, uint256 tokenId) public onlyAdminOrEntrypoint { - // Checks, Effects, Interactions: withdraw by transferring the token to the space owner + function withdrawERC721(address to, IERC721 collection, uint256 tokenId) public onlyAdminOrEntrypoint { + // Checks, Effects, Interactions: withdraw by transferring the `tokenId` token to the `to` address // Notes: - // - we're using `safeTransferFrom` as the owner can be an ERC-4337 smart account + // - we're using `safeTransferFrom` as the owner can be a smart contract // therefore the `onERC721Received` hook must be implemented - collection.safeTransferFrom(address(this), msg.sender, tokenId); + collection.safeTransferFrom({ from: address(this), to: to, tokenId: tokenId }); // Log the successful ERC-721 token withdrawal - emit ERC721Withdrawn({ to: msg.sender, collection: address(collection), tokenId: tokenId }); + emit ERC721Withdrawn({ to: to, collection: address(collection), tokenId: tokenId }); } /// @inheritdoc ISpace function withdrawERC1155( + address to, IERC1155 collection, uint256[] memory ids, uint256[] memory amounts - ) public onlyAdminOrEntrypoint { - // Checks, Effects, Interactions: withdraw by transferring the tokens to the space owner + ) + public + onlyAdminOrEntrypoint + { + // Checks, Effects, Interactions: withdraw by transferring the tokens to the `to` address // Notes: - // - we're using `safeTransferFrom` as the owner can be an ERC-4337 smart account + // - we're using `safeTransferFrom` as the owner can be a smart contract // therefore the `onERC1155Received` hook must be implemented // - depending on the length of the `ids` array, we're using `safeBatchTransferFrom` or `safeTransferFrom` if (ids.length > 1) { - collection.safeBatchTransferFrom({ - from: address(this), - to: msg.sender, - ids: ids, - values: amounts, - data: "" - }); + collection.safeBatchTransferFrom({ from: address(this), to: msg.sender, ids: ids, values: amounts, data: "" }); } else { - collection.safeTransferFrom({ - from: address(this), - to: msg.sender, - id: ids[0], - value: amounts[0], - data: "" - }); + collection.safeTransferFrom({ from: address(this), to: msg.sender, id: ids[0], value: amounts[0], data: "" }); } // Log the successful ERC-1155 token withdrawal - emit ERC1155Withdrawn(msg.sender, address(collection), ids, amounts); + emit ERC1155Withdrawn({ to: to, collection: address(collection), ids: ids, values: amounts }); } /// @inheritdoc ISpace - function withdrawNative(uint256 amount) public onlyAdminOrEntrypoint { - // Checks: the native balance of the space minus the amount locked for operations is greater than the requested amount + function withdrawNative(address to, uint256 amount) public onlyAdminOrEntrypoint { + // Checks: the native balance of the space is greater enough to support the withdrawal if (amount > address(this).balance) revert Errors.InsufficientNativeToWithdraw(); - // Interactions: withdraw by transferring the amount to the sender - (bool success, ) = msg.sender.call{ value: amount }(""); + // Interactions: withdraw by transferring the `amount` to the `to` address + (bool success,) = to.call{ value: amount }(""); // Revert if the call failed if (!success) revert Errors.NativeWithdrawFailed(); // Log the successful native token withdrawal - emit AssetWithdrawn({ to: msg.sender, asset: address(0), amount: amount }); + emit AssetWithdrawn({ to: to, asset: address(0), amount: amount }); } /// @inheritdoc IModuleManager @@ -208,7 +204,15 @@ contract Space is ISpace, AccountCore, ERC1271, ModuleManager { //////////////////////////////////////////////////////////////////////////*/ /// @inheritdoc ERC1271 - function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4 magicValue) { + function isValidSignature( + bytes32 _hash, + bytes memory _signature + ) + public + view + override + returns (bytes4 magicValue) + { // Compute the hash of message the should be signed bytes32 targetDigest = getMessageHash(_hash); @@ -241,11 +245,8 @@ contract Space is ISpace, AccountCore, ERC1271, ModuleManager { /// @inheritdoc IERC165 function supportsInterface(bytes4 interfaceId) public pure returns (bool) { - return - interfaceId == type(ISpace).interfaceId || - interfaceId == type(IERC1155Receiver).interfaceId || - interfaceId == type(IERC721Receiver).interfaceId || - interfaceId == type(IERC165).interfaceId; + return interfaceId == type(ISpace).interfaceId || interfaceId == type(IERC1155Receiver).interfaceId + || interfaceId == type(IERC721Receiver).interfaceId || interfaceId == type(IERC165).interfaceId; } /// @inheritdoc IERC721Receiver @@ -254,7 +255,11 @@ contract Space is ISpace, AccountCore, ERC1271, ModuleManager { address from, uint256 tokenId, bytes memory - ) public override returns (bytes4) { + ) + public + override + returns (bytes4) + { // Silence unused variable warning operator = operator; @@ -271,7 +276,11 @@ contract Space is ISpace, AccountCore, ERC1271, ModuleManager { uint256 id, uint256 value, bytes memory - ) public override returns (bytes4) { + ) + public + override + returns (bytes4) + { // Silence unused variable warning operator = operator; @@ -288,7 +297,11 @@ contract Space is ISpace, AccountCore, ERC1271, ModuleManager { uint256[] memory ids, uint256[] memory values, bytes memory - ) public override returns (bytes4) { + ) + public + override + returns (bytes4) + { for (uint256 i; i < ids.length; ++i) { // Log the successful ERC-1155 token receipt emit ERC1155Received(from, ids[i], values[i]); @@ -301,18 +314,6 @@ contract Space is ISpace, AccountCore, ERC1271, ModuleManager { INTERNAL FUNCTIONS //////////////////////////////////////////////////////////////////////////*/ - /// @dev Registers the account on the factory if it hasn't been registered yet - function _registerOnFactory() internal { - // Get the address of the factory contract - StationRegistry factoryContract = StationRegistry(factory); - - // Checks: the smart account is registered on the factory contract - if (!factoryContract.isRegistered(address(this))) { - // Otherwise register it - factoryContract.onRegister(AccountCoreStorage.data().creationSalt); - } - } - /// @dev Executes a low-level call on the `module` contract with the `data` data forwarding the `value` value function _call(address module, uint256 value, bytes calldata data) internal returns (bool success) { // Execute the call via assembly diff --git a/src/abstracts/ModuleManager.sol b/src/abstracts/ModuleManager.sol index 9eaac85..92d47e2 100644 --- a/src/abstracts/ModuleManager.sol +++ b/src/abstracts/ModuleManager.sol @@ -21,6 +21,10 @@ abstract contract ModuleManager is IModuleManager { /// @dev Initializes the initial module(s) enabled on the space function _initializeModuleManager(ModuleKeeper moduleKeeper, address[] memory _initialModules) internal { + // Effects: enable the smart account itself as a module to allow self-execution + isModuleEnabled[address(this)] = true; + + // Effects: enable the initial module(s) _enableBatchModules(moduleKeeper, _initialModules); } diff --git a/src/interfaces/ISpace.sol b/src/interfaces/ISpace.sol index c2ff98f..72e247a 100644 --- a/src/interfaces/ISpace.sol +++ b/src/interfaces/ISpace.sol @@ -87,34 +87,44 @@ interface ISpace is IERC165, IERC721Receiver, IERC1155Receiver { /// Requirements: /// - `msg.sender` must be the owner of the space /// + /// @param to The address to which the ERC-20 token will be transferred /// @param asset The address of the ERC-20 token to withdraw /// @param amount The amount of the ERC-20 token to withdraw - function withdrawERC20(IERC20 asset, uint256 amount) external; + function withdrawERC20(address to, IERC20 asset, uint256 amount) external; /// @notice Withdraws the `tokenId` token of the ERC-721 `collection` collection /// /// Requirements: /// - `msg.sender` must be the owner of the space /// + /// @param to The address to which the ERC-721 token will be transferred /// @param collection The address of the ERC-721 collection /// @param tokenId The ID of the token to withdraw - function withdrawERC721(IERC721 collection, uint256 tokenId) external; + function withdrawERC721(address to, IERC721 collection, uint256 tokenId) external; /// @notice Withdraws an `amount` amount of the ERC-1155 `id` token /// /// Requirements: /// - `msg.sender` must be the owner of the space /// + /// @param to The address to which the ERC-1155 tokens will be transferred /// @param collection The address of the ERC-1155 collection /// @param ids The IDs of tokens to withdraw /// @param amounts The amounts of tokens to withdraw - function withdrawERC1155(IERC1155 collection, uint256[] memory ids, uint256[] memory amounts) external; + function withdrawERC1155( + address to, + IERC1155 collection, + uint256[] memory ids, + uint256[] memory amounts + ) + external; /// @notice Withdraws an `amount` amount of native token (ETH) /// /// Requirements: /// - `msg.sender` must be the owner of the space /// + /// @param to The address to which the native token will be transferred /// @param amount The amount of the native token to withdraw - function withdrawNative(uint256 amount) external; + function withdrawNative(address to, uint256 amount) external; } diff --git a/src/modules/payment-module/interfaces/IPaymentModule.sol b/src/modules/payment-module/interfaces/IPaymentModule.sol index aec84c1..9a84170 100644 --- a/src/modules/payment-module/interfaces/IPaymentModule.sol +++ b/src/modules/payment-module/interfaces/IPaymentModule.sol @@ -17,7 +17,7 @@ interface IPaymentModule { /// @param endTime The timestamp by which the payment request must be paid /// @param config Struct representing the payment details associated with the payment request event RequestCreated( - uint256 requestId, address indexed recipient, uint40 startTime, uint40 endTime, Types.Config config + uint256 indexed requestId, address indexed recipient, uint40 startTime, uint40 endTime, Types.Config config ); /// @notice Emitted when a payment is made for a payment request diff --git a/src/modules/payment-module/sablier-v2/StreamManager.sol b/src/modules/payment-module/sablier-v2/StreamManager.sol index 9c26be4..419c083 100644 --- a/src/modules/payment-module/sablier-v2/StreamManager.sol +++ b/src/modules/payment-module/sablier-v2/StreamManager.sol @@ -20,9 +20,11 @@ abstract contract StreamManager is IStreamManager, Initializable, OwnableUpgrade using SafeERC20 for IERC20; /// @inheritdoc IStreamManager + /// @custom:oz-upgrades-unsafe-allow state-variable-immutable ISablierV2LockupLinear public immutable override LOCKUP_LINEAR; /// @inheritdoc IStreamManager + /// @custom:oz-upgrades-unsafe-allow state-variable-immutable ISablierV2LockupTranched public immutable override LOCKUP_TRANCHED; /*////////////////////////////////////////////////////////////////////////// diff --git a/test/mocks/MockBadSpace.sol b/test/mocks/MockBadSpace.sol index c0d3973..7c73c9f 100644 --- a/test/mocks/MockBadSpace.sol +++ b/test/mocks/MockBadSpace.sol @@ -37,7 +37,7 @@ contract MockBadSpace is ISpace, AccountCore, ERC1271, ModuleManager { //////////////////////////////////////////////////////////////////////////*/ /// @dev Initializes the address of the {Space} owner, {ModuleKeeper} and enables the initial module(s) - constructor(IEntryPoint _entrypoint, address _factory) AccountCore(_entrypoint, _factory) {} + constructor(IEntryPoint _entrypoint, address _factory) AccountCore(_entrypoint, _factory) { } /*////////////////////////////////////////////////////////////////////////// RECEIVE & FALLBACK @@ -73,7 +73,11 @@ contract MockBadSpace is ISpace, AccountCore, ERC1271, ModuleManager { address module, uint256 value, bytes calldata data - ) public onlyAdminOrEntrypoint returns (bool success) { + ) + public + onlyAdminOrEntrypoint + returns (bool success) + { // Check and register the smart account on the {StationRegistry} factory if it is not registered yet _registerOnFactory(); @@ -89,7 +93,10 @@ contract MockBadSpace is ISpace, AccountCore, ERC1271, ModuleManager { address[] calldata modules, uint256[] calldata values, bytes[] calldata data - ) external onlyAdminOrEntrypoint { + ) + external + onlyAdminOrEntrypoint + { // Check and register the smart account on the {StationRegistry} factory if it is not registered yet _registerOnFactory(); @@ -110,74 +117,66 @@ contract MockBadSpace is ISpace, AccountCore, ERC1271, ModuleManager { } /// @inheritdoc ISpace - function withdrawERC20(IERC20 asset, uint256 amount) public onlyAdminOrEntrypoint { + function withdrawERC20(address to, IERC20 asset, uint256 amount) public onlyAdminOrEntrypoint { // Checks: the available ERC20 balance of the space is greater enough to support the withdrawal if (amount > asset.balanceOf(address(this))) revert Errors.InsufficientERC20ToWithdraw(); - // Interactions: withdraw by transferring the amount to the sender - asset.safeTransfer({ to: msg.sender, value: amount }); + // Interactions: withdraw by transferring the `amount` to the `to` address + asset.safeTransfer({ to: to, value: amount }); // Log the successful ERC-20 token withdrawal - emit AssetWithdrawn({ to: msg.sender, asset: address(asset), amount: amount }); + emit AssetWithdrawn({ to: to, asset: address(asset), amount: amount }); } /// @inheritdoc ISpace - function withdrawERC721(IERC721 collection, uint256 tokenId) public onlyAdminOrEntrypoint { - // Checks, Effects, Interactions: withdraw by transferring the token to the space owner + function withdrawERC721(address to, IERC721 collection, uint256 tokenId) public onlyAdminOrEntrypoint { + // Checks, Effects, Interactions: withdraw by transferring the `tokenId` token to the `to` address // Notes: - // - we're using `safeTransferFrom` as the owner can be an ERC-4337 smart account + // - we're using `safeTransferFrom` as the owner can be a smart contract // therefore the `onERC721Received` hook must be implemented - collection.safeTransferFrom(address(this), msg.sender, tokenId); + collection.safeTransferFrom({ from: address(this), to: to, tokenId: tokenId }); // Log the successful ERC-721 token withdrawal - emit ERC721Withdrawn({ to: msg.sender, collection: address(collection), tokenId: tokenId }); + emit ERC721Withdrawn({ to: to, collection: address(collection), tokenId: tokenId }); } /// @inheritdoc ISpace function withdrawERC1155( + address to, IERC1155 collection, uint256[] memory ids, uint256[] memory amounts - ) public onlyAdminOrEntrypoint { - // Checks, Effects, Interactions: withdraw by transferring the tokens to the space owner + ) + public + onlyAdminOrEntrypoint + { + // Checks, Effects, Interactions: withdraw by transferring the tokens to the `to` address // Notes: - // - we're using `safeTransferFrom` as the owner can be an ERC-4337 smart account + // - we're using `safeTransferFrom` as the owner can be a smart contract // therefore the `onERC1155Received` hook must be implemented // - depending on the length of the `ids` array, we're using `safeBatchTransferFrom` or `safeTransferFrom` if (ids.length > 1) { - collection.safeBatchTransferFrom({ - from: address(this), - to: msg.sender, - ids: ids, - values: amounts, - data: "" - }); + collection.safeBatchTransferFrom({ from: address(this), to: msg.sender, ids: ids, values: amounts, data: "" }); } else { - collection.safeTransferFrom({ - from: address(this), - to: msg.sender, - id: ids[0], - value: amounts[0], - data: "" - }); + collection.safeTransferFrom({ from: address(this), to: msg.sender, id: ids[0], value: amounts[0], data: "" }); } // Log the successful ERC-1155 token withdrawal - emit ERC1155Withdrawn(msg.sender, address(collection), ids, amounts); + emit ERC1155Withdrawn({ to: to, collection: address(collection), ids: ids, values: amounts }); } /// @inheritdoc ISpace - function withdrawNative(uint256 amount) public onlyAdminOrEntrypoint { - // Checks: the native balance of the space minus the amount locked for operations is greater than the requested amount + function withdrawNative(address to, uint256 amount) public onlyAdminOrEntrypoint { + // Checks: the native balance of the space is greater enough to support the withdrawal if (amount > address(this).balance) revert Errors.InsufficientNativeToWithdraw(); - // Interactions: withdraw by transferring the amount to the sender - (bool success, ) = msg.sender.call{ value: amount }(""); + // Interactions: withdraw by transferring the `amount` to the `to` address + (bool success,) = to.call{ value: amount }(""); // Revert if the call failed if (!success) revert Errors.NativeWithdrawFailed(); // Log the successful native token withdrawal - emit AssetWithdrawn({ to: msg.sender, asset: address(0), amount: amount }); + emit AssetWithdrawn({ to: to, asset: address(0), amount: amount }); } /// @inheritdoc IModuleManager @@ -197,7 +196,15 @@ contract MockBadSpace is ISpace, AccountCore, ERC1271, ModuleManager { //////////////////////////////////////////////////////////////////////////*/ /// @inheritdoc ERC1271 - function isValidSignature(bytes32 _hash, bytes memory _signature) public view override returns (bytes4 magicValue) { + function isValidSignature( + bytes32 _hash, + bytes memory _signature + ) + public + view + override + returns (bytes4 magicValue) + { // Compute the hash of message the should be signed bytes32 targetDigest = getMessageHash(_hash); @@ -230,11 +237,8 @@ contract MockBadSpace is ISpace, AccountCore, ERC1271, ModuleManager { /// @inheritdoc IERC165 function supportsInterface(bytes4 interfaceId) public pure returns (bool) { - return - interfaceId == type(ISpace).interfaceId || - interfaceId == type(IERC1155Receiver).interfaceId || - interfaceId == type(IERC721Receiver).interfaceId || - interfaceId == type(IERC165).interfaceId; + return interfaceId == type(ISpace).interfaceId || interfaceId == type(IERC1155Receiver).interfaceId + || interfaceId == type(IERC721Receiver).interfaceId || interfaceId == type(IERC165).interfaceId; } /// @inheritdoc IERC721Receiver @@ -243,7 +247,11 @@ contract MockBadSpace is ISpace, AccountCore, ERC1271, ModuleManager { address from, uint256 tokenId, bytes memory - ) public override returns (bytes4) { + ) + public + override + returns (bytes4) + { // Silence unused variable warning operator = operator; @@ -260,7 +268,11 @@ contract MockBadSpace is ISpace, AccountCore, ERC1271, ModuleManager { uint256 id, uint256 value, bytes memory - ) public override returns (bytes4) { + ) + public + override + returns (bytes4) + { // Silence unused variable warning operator = operator; @@ -277,7 +289,11 @@ contract MockBadSpace is ISpace, AccountCore, ERC1271, ModuleManager { uint256[] memory ids, uint256[] memory values, bytes memory - ) public override returns (bytes4) { + ) + public + override + returns (bytes4) + { for (uint256 i; i < ids.length; ++i) { // Log the successful ERC-1155 token receipt emit ERC1155Received(from, ids[i], values[i]); diff --git a/test/mocks/MockNFTDescriptor.sol b/test/mocks/MockNFTDescriptor.sol index a09f556..60c80b4 100644 --- a/test/mocks/MockNFTDescriptor.sol +++ b/test/mocks/MockNFTDescriptor.sol @@ -27,7 +27,11 @@ contract MockNFTDescriptor is SablierV2NFTDescriptor { function calculateStreamedPercentage_( uint128 streamedAmount, uint128 depositedAmount - ) external pure returns (uint256) { + ) + external + pure + returns (uint256) + { return calculateStreamedPercentage(streamedAmount, depositedAmount); } @@ -39,7 +43,11 @@ contract MockNFTDescriptor is SablierV2NFTDescriptor { string memory assetSymbol, string memory sender, string memory status - ) external pure returns (string memory) { + ) + external + pure + returns (string memory) + { return generateAttributes(assetSymbol, sender, status); } @@ -50,7 +58,11 @@ contract MockNFTDescriptor is SablierV2NFTDescriptor { string memory assetAddress, string memory streamId, bool isTransferable - ) external pure returns (string memory) { + ) + external + pure + returns (string memory) + { return generateDescription(sablierModel, assetSymbol, sablierAddress, assetAddress, streamId, isTransferable); } diff --git a/test/mocks/MockOwnable.sol b/test/mocks/MockOwnable.sol index 53e8dc6..e9db589 100644 --- a/test/mocks/MockOwnable.sol +++ b/test/mocks/MockOwnable.sol @@ -6,5 +6,5 @@ import { Ownable } from "./../../src/abstracts/Ownable.sol"; /// @title MockOwnable /// @notice A mock implementation that uses the `onlyOwner` auth mechanism contract MockOwnable is Ownable { - constructor(address _owner) Ownable(_owner) {} + constructor(address _owner) Ownable(_owner) { } } diff --git a/test/unit/concrete/space/fallback/fallback.t.sol b/test/unit/concrete/space/fallback/fallback.t.sol index 2b676c8..49d321f 100644 --- a/test/unit/concrete/space/fallback/fallback.t.sol +++ b/test/unit/concrete/space/fallback/fallback.t.sol @@ -18,7 +18,7 @@ contract Fallback_Unit_Concrete_Test is Space_Unit_Concrete_Test { emit Events.NativeReceived({ from: users.bob, amount: 1 ether }); // Run the test - (bool success, ) = address(space).call{ value: 1 ether }("test"); + (bool success,) = address(space).call{ value: 1 ether }("test"); if (!success) revert(); // Assert the {Space} contract balance diff --git a/test/unit/concrete/space/receive/receive.t.sol b/test/unit/concrete/space/receive/receive.t.sol index 7a73912..9d74f39 100644 --- a/test/unit/concrete/space/receive/receive.t.sol +++ b/test/unit/concrete/space/receive/receive.t.sol @@ -18,7 +18,7 @@ contract Receive_Unit_Concrete_Test is Space_Unit_Concrete_Test { emit Events.NativeReceived({ from: users.bob, amount: 1 ether }); // Run the test - (bool success, ) = address(space).call{ value: 1 ether }(""); + (bool success,) = address(space).call{ value: 1 ether }(""); if (!success) revert(); // Assert the {Space} contract balance diff --git a/test/unit/concrete/space/withdraw-erc1155/withdrawERC1155.t.sol b/test/unit/concrete/space/withdraw-erc1155/withdrawERC1155.t.sol index 5b71816..9e7c800 100644 --- a/test/unit/concrete/space/withdraw-erc1155/withdrawERC1155.t.sol +++ b/test/unit/concrete/space/withdraw-erc1155/withdrawERC1155.t.sol @@ -30,7 +30,7 @@ contract WithdrawERC1155_Unit_Concrete_Test is Space_Unit_Concrete_Test { vm.expectRevert("Account: not admin or EntryPoint."); // Run the test - space.withdrawERC1155({ collection: IERC1155(address(0x0)), ids: ids, amounts: amounts }); + space.withdrawERC1155({ to: users.bob, collection: IERC1155(address(0x0)), ids: ids, amounts: amounts }); } modifier whenCallerOwner() { @@ -46,7 +46,7 @@ contract WithdrawERC1155_Unit_Concrete_Test is Space_Unit_Concrete_Test { ); // Run the test by attempting to withdraw a nonexistent ERC1155 token - space.withdrawERC1155({ collection: mockERC1155, ids: ids, amounts: amounts }); + space.withdrawERC1155({ to: users.eve, collection: mockERC1155, ids: ids, amounts: amounts }); } modifier whenExistingERC1155Token() { @@ -71,7 +71,7 @@ contract WithdrawERC1155_Unit_Concrete_Test is Space_Unit_Concrete_Test { }); // Run the test - space.withdrawERC1155({ collection: mockERC1155, ids: idsToWithdraw, amounts: amountsToWithdraw }); + space.withdrawERC1155({ to: users.eve, collection: mockERC1155, ids: idsToWithdraw, amounts: amountsToWithdraw }); // Assert the actual and expected token type 1 ERC1155 balance of Eve uint256 actualBalanceOfEve = mockERC1155.balanceOf(users.eve, idsToWithdraw[0]); @@ -84,7 +84,7 @@ contract WithdrawERC1155_Unit_Concrete_Test is Space_Unit_Concrete_Test { emit Events.ERC1155Withdrawn({ to: users.eve, collection: address(mockERC1155), ids: ids, amounts: amounts }); // Run the test - space.withdrawERC1155({ collection: mockERC1155, ids: ids, amounts: amounts }); + space.withdrawERC1155({ to: users.eve, collection: mockERC1155, ids: ids, amounts: amounts }); // Assert the actual and expected balance of any ERC1155 tokens uint256 numberOfTokens = ids.length; diff --git a/test/unit/concrete/space/withdraw-erc20/withdrawERC20.t.sol b/test/unit/concrete/space/withdraw-erc20/withdrawERC20.t.sol index e94a2df..aa74518 100644 --- a/test/unit/concrete/space/withdraw-erc20/withdrawERC20.t.sol +++ b/test/unit/concrete/space/withdraw-erc20/withdrawERC20.t.sol @@ -19,7 +19,7 @@ contract WithdrawERC20_Unit_Concrete_Test is Space_Unit_Concrete_Test { vm.expectRevert("Account: not admin or EntryPoint."); // Run the test - space.withdrawERC20({ asset: IERC20(address(0x0)), amount: 100e6 }); + space.withdrawERC20({ to: users.bob, asset: IERC20(address(0x0)), amount: 100e6 }); } modifier whenCallerOwner() { @@ -33,7 +33,7 @@ contract WithdrawERC20_Unit_Concrete_Test is Space_Unit_Concrete_Test { vm.expectRevert(Errors.InsufficientERC20ToWithdraw.selector); // Run the test - space.withdrawERC20({ asset: IERC20(address(usdt)), amount: 100e6 }); + space.withdrawERC20({ to: users.eve, asset: IERC20(address(usdt)), amount: 100e6 }); } modifier whenSufficientERC20ToWithdraw() { @@ -54,7 +54,7 @@ contract WithdrawERC20_Unit_Concrete_Test is Space_Unit_Concrete_Test { emit Events.AssetWithdrawn({ to: users.eve, asset: address(usdt), amount: 10e6 }); // Run the test - space.withdrawERC20({ asset: IERC20(address(usdt)), amount: 10e6 }); + space.withdrawERC20({ to: users.eve, asset: IERC20(address(usdt)), amount: 10e6 }); // Assert the USDT balance of the {Space} contract uint256 actualBalanceOfSpace = usdt.balanceOf(address(space)); diff --git a/test/unit/concrete/space/withdraw-erc721/withdrawERC721.t.sol b/test/unit/concrete/space/withdraw-erc721/withdrawERC721.t.sol index 80849b4..30818d5 100644 --- a/test/unit/concrete/space/withdraw-erc721/withdrawERC721.t.sol +++ b/test/unit/concrete/space/withdraw-erc721/withdrawERC721.t.sol @@ -19,7 +19,7 @@ contract WithdrawERC721_Unit_Concrete_Test is Space_Unit_Concrete_Test { vm.expectRevert("Account: not admin or EntryPoint."); // Run the test - space.withdrawERC721({ collection: IERC721(address(0x0)), tokenId: 1 }); + space.withdrawERC721({ to: users.bob, collection: IERC721(address(0x0)), tokenId: 1 }); } modifier whenCallerOwner() { @@ -33,7 +33,7 @@ contract WithdrawERC721_Unit_Concrete_Test is Space_Unit_Concrete_Test { vm.expectRevert(abi.encodeWithSelector(Errors.ERC721NonexistentToken.selector, 1)); // Run the test by attempting to withdraw a nonexistent ERC721 token - space.withdrawERC721({ collection: mockERC721, tokenId: 1 }); + space.withdrawERC721({ to: users.eve, collection: mockERC721, tokenId: 1 }); } modifier whenExistingERC721Token() { @@ -48,7 +48,7 @@ contract WithdrawERC721_Unit_Concrete_Test is Space_Unit_Concrete_Test { emit Events.ERC721Withdrawn({ to: users.eve, collection: address(mockERC721), tokenId: 1 }); // Run the test - space.withdrawERC721({ collection: mockERC721, tokenId: 1 }); + space.withdrawERC721({ to: users.eve, collection: mockERC721, tokenId: 1 }); // Assert the actual and expected owner of the ERC721 token address actualOwner = mockERC721.ownerOf(1); diff --git a/test/unit/concrete/space/withdraw-native/withdrawNative.t.sol b/test/unit/concrete/space/withdraw-native/withdrawNative.t.sol index d1eff62..5ba400c 100644 --- a/test/unit/concrete/space/withdraw-native/withdrawNative.t.sol +++ b/test/unit/concrete/space/withdraw-native/withdrawNative.t.sol @@ -32,7 +32,7 @@ contract WithdrawNative_Unit_Concrete_Test is Space_Unit_Concrete_Test { vm.expectRevert("Account: not admin or EntryPoint."); // Run the test - space.withdrawNative({ amount: 2 ether }); + space.withdrawNative({ to: users.bob, amount: 2 ether }); } modifier whenCallerOwner(address caller) { @@ -46,7 +46,7 @@ contract WithdrawNative_Unit_Concrete_Test is Space_Unit_Concrete_Test { vm.expectRevert(Errors.InsufficientNativeToWithdraw.selector); // Run the test - space.withdrawNative({ amount: 2 ether }); + space.withdrawNative({ to: users.eve, amount: 2 ether }); } modifier whenSufficientNativeToWithdraw(Space space) { @@ -65,7 +65,7 @@ contract WithdrawNative_Unit_Concrete_Test is Space_Unit_Concrete_Test { vm.expectRevert(Errors.NativeWithdrawFailed.selector); // Run the test - badSpace.withdrawNative({ amount: 1 ether }); + badSpace.withdrawNative({ to: badReceiver, amount: 1 ether }); } modifier whenNativeWithdrawSucceeds() { @@ -88,7 +88,7 @@ contract WithdrawNative_Unit_Concrete_Test is Space_Unit_Concrete_Test { emit Events.AssetWithdrawn({ to: users.eve, asset: address(0x0), amount: ethToWithdraw }); // Run the test - space.withdrawNative({ amount: ethToWithdraw }); + space.withdrawNative({ to: users.eve, amount: ethToWithdraw }); // Assert the ETH balance of the {Space} contract uint256 actualBalanceOfSpace = address(space).balance; diff --git a/test/unit/concrete/station-registry/update-module-keeper/updateModuleKeeper.t.sol b/test/unit/concrete/station-registry/update-module-keeper/updateModuleKeeper.t.sol index 8bcd281..75ab7f5 100644 --- a/test/unit/concrete/station-registry/update-module-keeper/updateModuleKeeper.t.sol +++ b/test/unit/concrete/station-registry/update-module-keeper/updateModuleKeeper.t.sol @@ -19,9 +19,7 @@ contract UpdateModuleKeeper_Unit_Concrete_Test is StationRegistry_Unit_Concrete_ // Expect the next call to revert with the {PermissionsUnauthorizedAccount} error vm.expectRevert( abi.encodeWithSelector( - Errors.PermissionsUnauthorizedAccount.selector, - users.bob, - Constants.DEFAULT_ADMIN_ROLE + Errors.PermissionsUnauthorizedAccount.selector, users.bob, Constants.DEFAULT_ADMIN_ROLE ) ); diff --git a/test/utils/Events.sol b/test/utils/Events.sol index fcea57a..982045d 100644 --- a/test/utils/Events.sol +++ b/test/utils/Events.sol @@ -102,7 +102,7 @@ abstract contract Events { /// @param endTime The timestamp by which the payment request must be paid /// @param config Struct representing the payment details associated with the payment request event RequestCreated( - uint256 requestId, address indexed recipient, uint40 startTime, uint40 endTime, Types.Config config + uint256 indexed requestId, address indexed recipient, uint40 startTime, uint40 endTime, Types.Config config ); /// @notice Emitted when a payment is made for a payment request