UNPKG

@aave/governance-crosschain-bridges

Version:
693 lines 53.1 kB
{ "_format": "hh-sol-artifact-1", "contractName": "SimpleL2BridgeExecutor", "sourceName": "contracts/mocks/SimpleL2BridgeExecutor.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "ethereumGovernanceExecutor", "type": "address" }, { "internalType": "uint256", "name": "delay", "type": "uint256" }, { "internalType": "uint256", "name": "gracePeriod", "type": "uint256" }, { "internalType": "uint256", "name": "minimumDelay", "type": "uint256" }, { "internalType": "uint256", "name": "maximumDelay", "type": "uint256" }, { "internalType": "address", "name": "guardian", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "DelayLongerThanMax", "type": "error" }, { "inputs": [], "name": "DelayShorterThanMin", "type": "error" }, { "inputs": [], "name": "DuplicateAction", "type": "error" }, { "inputs": [], "name": "EmptyTargets", "type": "error" }, { "inputs": [], "name": "FailedActionExecution", "type": "error" }, { "inputs": [], "name": "GracePeriodTooShort", "type": "error" }, { "inputs": [], "name": "InconsistentParamsLength", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidActionsSetId", "type": "error" }, { "inputs": [], "name": "InvalidInitParams", "type": "error" }, { "inputs": [], "name": "MaximumDelayTooShort", "type": "error" }, { "inputs": [], "name": "MinimumDelayTooLong", "type": "error" }, { "inputs": [], "name": "NotGuardian", "type": "error" }, { "inputs": [], "name": "OnlyCallableByThis", "type": "error" }, { "inputs": [], "name": "OnlyQueuedActions", "type": "error" }, { "inputs": [], "name": "TimelockNotFinished", "type": "error" }, { "inputs": [], "name": "UnauthorizedEthereumExecutor", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "ActionsSetCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "initiatorExecution", "type": "address" }, { "indexed": false, "internalType": "bytes[]", "name": "returnedData", "type": "bytes[]" } ], "name": "ActionsSetExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "address[]", "name": "targets", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "indexed": false, "internalType": "string[]", "name": "signatures", "type": "string[]" }, { "indexed": false, "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" }, { "indexed": false, "internalType": "bool[]", "name": "withDelegatecalls", "type": "bool[]" }, { "indexed": false, "internalType": "uint256", "name": "executionTime", "type": "uint256" } ], "name": "ActionsSetQueued", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldDelay", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newDelay", "type": "uint256" } ], "name": "DelayUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldEthereumGovernanceExecutor", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newEthereumGovernanceExecutor", "type": "address" } ], "name": "EthereumGovernanceExecutorUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldGracePeriod", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newGracePeriod", "type": "uint256" } ], "name": "GracePeriodUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldGuardian", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newGuardian", "type": "address" } ], "name": "GuardianUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldMaximumDelay", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newMaximumDelay", "type": "uint256" } ], "name": "MaximumDelayUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldMinimumDelay", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newMinimumDelay", "type": "uint256" } ], "name": "MinimumDelayUpdate", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "cancel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "execute", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "executeDelegateCall", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "getActionsSetById", "outputs": [ { "components": [ { "internalType": "address[]", "name": "targets", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "string[]", "name": "signatures", "type": "string[]" }, { "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" }, { "internalType": "bool[]", "name": "withDelegatecalls", "type": "bool[]" }, { "internalType": "uint256", "name": "executionTime", "type": "uint256" }, { "internalType": "bool", "name": "executed", "type": "bool" }, { "internalType": "bool", "name": "canceled", "type": "bool" } ], "internalType": "struct IExecutorBase.ActionsSet", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getActionsSetCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "getCurrentState", "outputs": [ { "internalType": "enum IExecutorBase.ActionsSetState", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getEthereumGovernanceExecutor", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getGracePeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getGuardian", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMaximumDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMinimumDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "actionHash", "type": "bytes32" } ], "name": "isActionQueued", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "targets", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "string[]", "name": "signatures", "type": "string[]" }, { "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" }, { "internalType": "bool[]", "name": "withDelegatecalls", "type": "bool[]" } ], "name": "queue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "receiveFunds", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "delay", "type": "uint256" } ], "name": "updateDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "ethereumGovernanceExecutor", "type": "address" } ], "name": "updateEthereumGovernanceExecutor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "gracePeriod", "type": "uint256" } ], "name": "updateGracePeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "guardian", "type": "address" } ], "name": "updateGuardian", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maximumDelay", "type": "uint256" } ], "name": "updateMaximumDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minimumDelay", "type": "uint256" } ], "name": "updateMinimumDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b506040516200269b3803806200269b83398101604081905262000034916200027e565b8585858585858484848484610258841080620000505750818310155b806200005b57508285105b806200006657508185115b156200008557604051630a5addd160e21b815260040160405180910390fd5b6200009085620000f4565b6200009b8462000135565b620000a68362000176565b620000b182620001b7565b620000bc81620001f8565b5050600880546001600160a01b0319166001600160a01b039a909a169990991790985550620002db9c50505050505050505050505050565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200027957600080fd5b919050565b60008060008060008060c087890312156200029857600080fd5b620002a38762000261565b955060208701519450604087015193506060870151925060808701519150620002cf60a0880162000261565b90509295509295509295565b6123b080620002eb6000396000f3fe6080604052600436106101295760003560e01c8063b3c82e92116100ab578063d9a4cbdf1161006f578063d9a4cbdf1461031e578063dbd183881461033e578063e471b02614610353578063e68a5c3d14610373578063fc52539514610393578063fe0d94c1146103b357600080fd5b8063b3c82e9214610288578063b68df16d146102b5578063c3a76886146102d6578063cebc9a82146102f4578063d89aac391461030957600080fd5b80635ab98d5a116100f25780635ab98d5a146101c157806364d62353146101e15780638533f33714610201578063a75b87d214610216578063b1fc87961461024857600080fd5b80625c33e11461012e57806303c2762114610130578063083a73a21461015457806340e58ee5146101745780635748c13014610194575b600080fd5b005b34801561013c57600080fd5b506002545b6040519081526020015b60405180910390f35b34801561016057600080fd5b5061012e61016f366004611988565b6103c6565b34801561018057600080fd5b5061012e61018f366004611988565b61041f565b3480156101a057600080fd5b506101b46101af366004611988565b6106ca565b60405161014b91906119b7565b3480156101cd57600080fd5b5061012e6101dc366004611988565b610760565b3480156101ed57600080fd5b5061012e6101fc366004611988565b6107ac565b34801561020d57600080fd5b50600554610141565b34801561022257600080fd5b506004546001600160a01b03165b6040516001600160a01b03909116815260200161014b565b34801561025457600080fd5b50610278610263366004611988565b60009081526007602052604090205460ff1690565b604051901515815260200161014b565b34801561029457600080fd5b506102a86102a3366004611988565b6107de565b60405161014b9190611b36565b6102c86102c3366004611c1e565b610b51565b60405161014b929190611ca1565b3480156102e257600080fd5b506008546001600160a01b0316610230565b34801561030057600080fd5b50600054610141565b34801561031557600080fd5b50600354610141565b34801561032a57600080fd5b5061012e610339366004611ff9565b610be2565b34801561034a57600080fd5b50600154610141565b34801561035f57600080fd5b5061012e61036e366004611988565b610c21565b34801561037f57600080fd5b5061012e61038e3660046120cb565b610c6c565b34801561039f57600080fd5b5061012e6103ae3660046120cb565b610cf5565b61012e6103c1366004611988565b610d1e565b3330146103e657604051631dbf5f2360e01b815260040160405180910390fd5b60025481116104085760405163cb2f2b2360e01b815260040160405180910390fd5b61041181611046565b61041c600054611087565b50565b6004546001600160a01b0316331461044a576040516377b6878160e11b815260040160405180910390fd5b6000610455826106ca565b6003811115610466576104666119a1565b146104845760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602081905260408220908101805461ff001916610100179055805490915b81811015610699576106918360000182815481106104c9576104c96120ed565b6000918252602090912001546001850180546001600160a01b0390921691849081106104f7576104f76120ed565b9060005260206000200154856002018481548110610517576105176120ed565b90600052602060002001805461052c90612103565b80601f016020809104026020016040519081016040528092919081815260200182805461055890612103565b80156105a55780601f1061057a576101008083540402835291602001916105a5565b820191906000526020600020905b81548152906001019060200180831161058857829003601f168201915b50505050508660030185815481106105bf576105bf6120ed565b9060005260206000200180546105d490612103565b80601f016020809104026020016040519081016040528092919081815260200182805461060090612103565b801561064d5780601f106106225761010080835404028352916020019161064d565b820191906000526020600020905b81548152906001019060200180831161063057829003601f168201915b5050505050876005015488600401878154811061066c5761066c6120ed565b90600052602060002090602091828204019190069054906101000a900460ff166110cd565b6001016104a9565b5060405183907f0743c673685efcbf3db8591d9e1d98336bc844fe4f4599e6f7efb6d71c02563490600090a2505050565b600081600554116106ee5760405163e5bc0e7b60e01b815260040160405180910390fd5b600082815260066020819052604090912090810154610100900460ff16156107195750600292915050565b600681015460ff161561072f5750600192915050565b60015481600501546107419190612138565b4211156107515750600392915050565b50600092915050565b50919050565b33301461078057604051631dbf5f2360e01b815260040160405180910390fd5b6102588110156107a3576040516301f6f9e560e71b815260040160405180910390fd5b61041c8161111f565b3330146107cc57604051631dbf5f2360e01b815260040160405180910390fd5b6107d581611087565b61041c81611160565b61082a6040518061010001604052806060815260200160608152602001606081526020016060815260200160608152602001600081526020016000151581526020016000151581525090565b60008281526006602090815260409182902082518154610120938102820184019094526101008101848152909391928492849184018282801561089657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610878575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156108ee57602002820191906000526020600020905b8154815260200190600101908083116108da575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156109c857838290600052602060002001805461093b90612103565b80601f016020809104026020016040519081016040528092919081815260200182805461096790612103565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b50505050508152602001906001019061091c565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610aa1578382906000526020600020018054610a1490612103565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4090612103565b8015610a8d5780601f10610a6257610100808354040283529160200191610a8d565b820191906000526020600020905b815481529060010190602001808311610a7057829003601f168201915b5050505050815260200190600101906109f5565b50505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b1857602002820191906000526020600020906000905b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610ae75790505b50505091835250506005820154602082015260069091015460ff8082161515604084015261010090910416151560609091015292915050565b60006060333014610b7557604051631dbf5f2360e01b815260040160405180910390fd5b60006060866001600160a01b03168686604051610b9392919061215e565b600060405180830381855af49150503d8060008114610bce576040519150601f19603f3d011682016040523d82523d6000602084013e610bd3565b606091505b50909890975095505050505050565b6008546001600160a01b03163314610c0d576040516359e8359960e01b815260040160405180910390fd5b610c1a85858585856111a1565b5050505050565b333014610c4157604051631dbf5f2360e01b815260040160405180910390fd5b6003548110610c63576040516301b1029b60e61b815260040160405180910390fd5b6104118161140e565b333014610c8c57604051631dbf5f2360e01b815260040160405180910390fd5b600854604080516001600160a01b03928316815291831660208301527f01dd0ca50426f21c1b37ce7f3e95eef45b4a55bc5da80a7b67b2c65a7463caf0910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b333014610d1557604051631dbf5f2360e01b815260040160405180910390fd5b61041c8161144f565b6000610d29826106ca565b6003811115610d3a57610d3a6119a1565b14610d585760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602052604090206005810154421015610d8b57604051635192dd5560e01b815260040160405180910390fd5b60068101805460ff19166001179055805460008167ffffffffffffffff811115610db757610db7611cc4565b604051908082528060200260200182016040528015610dea57816020015b6060815260200190600190039081610dd55790505b50905060005b82811015610ffd57610fd8846000018281548110610e1057610e106120ed565b6000918252602090912001546001860180546001600160a01b039092169184908110610e3e57610e3e6120ed565b9060005260206000200154866002018481548110610e5e57610e5e6120ed565b906000526020600020018054610e7390612103565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9f90612103565b8015610eec5780601f10610ec157610100808354040283529160200191610eec565b820191906000526020600020905b815481529060010190602001808311610ecf57829003601f168201915b5050505050876003018581548110610f0657610f066120ed565b906000526020600020018054610f1b90612103565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4790612103565b8015610f945780601f10610f6957610100808354040283529160200191610f94565b820191906000526020600020905b815481529060010190602001808311610f7757829003601f168201915b50505050508860050154896004018781548110610fb357610fb36120ed565b90600052602060002090602091828204019190069054906101000a900460ff166114b8565b828281518110610fea57610fea6120ed565b6020908102919091010152600101610df0565b50336001600160a01b0316847ff5efc4bb09a12b6c9561a7e7ab02938a72a4351316b473d574fdaaa89c43eb9a83604051611038919061216e565b60405180910390a350505050565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b6002548110156110aa576040516361759e6560e01b815260040160405180910390fd5b60035481111561041c576040516386dac63560e01b815260040160405180910390fd5b60008686868686866040516020016110ea96959493929190612181565b60408051601f198184030181529181528151602092830120600090815260079092529020805460ff1916905550505050505050565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b84516111c057604051636a8e3e9360e11b815260040160405180910390fd5b84518451811415806111d3575083518114155b806111df575082518114155b806111eb575081518114155b1561120957604051630d10f63b60e01b815260040160405180910390fd5b6005546000805461121a9042612138565b600580546001019055905060005b8381101561133b576000898281518110611244576112446120ed565b602002602001015189838151811061125e5761125e6120ed565b6020026020010151898481518110611278576112786120ed565b6020026020010151898581518110611292576112926120ed565b6020026020010151868a87815181106112ad576112ad6120ed565b60200260200101516040516020016112ca96959493929190612181565b6040516020818303038152906040528051906020012090506112fb8160009081526007602052604090205460ff1690565b1561131957604051633b2f04e360e21b815260040160405180910390fd5b6000908152600760205260409020805460ff1916600190811790915501611228565b5060008281526006602090815260409091208951909161135f9183918c019061169e565b50875161137590600183019060208b0190611703565b50865161138b90600283019060208a019061173e565b5085516113a19060038301906020890190611797565b5084516113b790600483019060208801906117f0565b50818160050181905550827f0325966a4aa089b42f4766ec96f599405102bb309e065f24874aff59082dbc8b8a8a8a8a8a886040516113fb969594939291906121d5565b60405180910390a2505050505050505050565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6060854710156114db57604051631e9acf1760e31b815260040160405180910390fd5b60008787878787876040516020016114f896959493929190612181565b60408051601f198184030181529181528151602092830120600081815260079093529120805460ff191690558651909150606090611537575084611563565b86805190602001208660405160200161155192919061227c565b60405160208183030381529060405290505b6000606085156115e55760405163b68df16d60e01b8152309063b68df16d908c90611594908f9088906004016122ad565b60006040518083038185885af11580156115b2573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526115db91908101906122d1565b9092509050611647565b8a6001600160a01b03168a846040516115fe919061235e565b60006040518083038185875af1925050503d806000811461163b576040519150601f19603f3d011682016040523d82523d6000602084013e611640565b606091505b5090925090505b6116518282611660565b9b9a5050505050505050505050565b6060821561166f575080611698565b81511561167f5781518083602001fd5b6040516332f63ed360e21b815260040160405180910390fd5b92915050565b8280548282559060005260206000209081019282156116f3579160200282015b828111156116f357825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906116be565b506116ff92915061188c565b5090565b8280548282559060005260206000209081019282156116f3579160200282015b828111156116f3578251825591602001919060010190611723565b82805482825590600052602060002090810192821561178b579160200282015b8281111561178b578251805161177b9184916020909101906118a1565b509160200191906001019061175e565b506116ff929150611914565b8280548282559060005260206000209081019282156117e4579160200282015b828111156117e457825180516117d49184916020909101906118a1565b50916020019190600101906117b7565b506116ff929150611931565b82805482825590600052602060002090601f016020900481019282156116f35791602002820160005b8382111561185657835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302611819565b80156118835782816101000a81549060ff0219169055600101602081600001049283019260010302611856565b50506116ff9291505b5b808211156116ff576000815560010161188d565b8280546118ad90612103565b90600052602060002090601f0160209004810192826118cf57600085556116f3565b82601f106118e857805160ff19168380011785556116f3565b828001600101855582156116f357918201828111156116f3578251825591602001919060010190611723565b808211156116ff576000611928828261194e565b50600101611914565b808211156116ff576000611945828261194e565b50600101611931565b50805461195a90612103565b6000825580601f1061196a575050565b601f01602090049060005260206000209081019061041c919061188c565b60006020828403121561199a57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60208101600483106119d957634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b83811015611a185781516001600160a01b0316875295820195908201906001016119f3565b509495945050505050565b600081518084526020808501945080840160005b83811015611a1857815187529582019590820190600101611a37565b60005b83811015611a6e578181015183820152602001611a56565b83811115611a7d576000848401525b50505050565b60008151808452611a9b816020860160208601611a53565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611af7578284038952611ae5848351611a83565b98850198935090840190600101611acd565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611a18578151151587529582019590820190600101611b18565b6020815260008251610100806020850152611b556101208501836119df565b91506020850151601f1980868503016040870152611b738483611a23565b93506040870151915080868503016060870152611b908483611aaf565b93506060870151915080868503016080870152611bad8483611aaf565b935060808701519150808685030160a087015250611bcb8382611b04565b92505060a085015160c085015260c0850151611beb60e086018215159052565b5060e0850151801515858301525090949350505050565b80356001600160a01b0381168114611c1957600080fd5b919050565b600080600060408486031215611c3357600080fd5b611c3c84611c02565b9250602084013567ffffffffffffffff80821115611c5957600080fd5b818601915086601f830112611c6d57600080fd5b813581811115611c7c57600080fd5b876020828501011115611c8e57600080fd5b6020830194508093505050509250925092565b8215158152604060208201526000611cbc6040830184611a83565b949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d0357611d03611cc4565b604052919050565b600067ffffffffffffffff821115611d2557611d25611cc4565b5060051b60200190565b600082601f830112611d4057600080fd5b81356020611d55611d5083611d0b565b611cda565b82815260059290921b84018101918181019086841115611d7457600080fd5b8286015b84811015611d9657611d8981611c02565b8352918301918301611d78565b509695505050505050565b600082601f830112611db257600080fd5b81356020611dc2611d5083611d0b565b82815260059290921b84018101918181019086841115611de157600080fd5b8286015b84811015611d965780358352918301918301611de5565b600067ffffffffffffffff821115611e1657611e16611cc4565b50601f01601f191660200190565b6000611e32611d5084611dfc565b9050828152838383011115611e4657600080fd5b828260208301376000602084830101529392505050565b600082601f830112611e6e57600080fd5b81356020611e7e611d5083611d0b565b82815260059290921b84018101918181019086841115611e9d57600080fd5b8286015b84811015611d9657803567ffffffffffffffff811115611ec15760008081fd5b8701603f81018913611ed35760008081fd5b611ee4898683013560408401611e24565b845250918301918301611ea1565b600082601f830112611f0357600080fd5b81356020611f13611d5083611d0b565b82815260059290921b84018101918181019086841115611f3257600080fd5b8286015b84811015611d9657803567ffffffffffffffff811115611f565760008081fd5b8701603f81018913611f685760008081fd5b611f79898683013560408401611e24565b845250918301918301611f36565b801515811461041c57600080fd5b600082601f830112611fa657600080fd5b81356020611fb6611d5083611d0b565b82815260059290921b84018101918181019086841115611fd557600080fd5b8286015b84811015611d96578035611fec81611f87565b8352918301918301611fd9565b600080600080600060a0868803121561201157600080fd5b853567ffffffffffffffff8082111561202957600080fd5b61203589838a01611d2f565b9650602088013591508082111561204b57600080fd5b61205789838a01611da1565b9550604088013591508082111561206d57600080fd5b61207989838a01611e5d565b9450606088013591508082111561208f57600080fd5b61209b89838a01611ef2565b935060808801359150808211156120b157600080fd5b506120be88828901611f95565b9150509295509295909350565b6000602082840312156120dd57600080fd5b6120e682611c02565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061211757607f821691505b6020821081141561075a57634e487b7160e01b600052602260045260246000fd5b6000821982111561215957634e487b7160e01b600052601160045260246000fd5b500190565b8183823760009101908152919050565b6020815260006120e66020830184611aaf565b60018060a01b038716815285602082015260c0604082015260006121a860c0830187611a83565b82810360608401526121ba8187611a83565b6080840195909552505090151560a090910152949350505050565b60c0808252875190820181905260009060209060e0840190828b01845b828110156122175781516001600160a01b0316845292840192908401906001016121f2565b5050508381038285015261222b818a611a23565b91505082810360408401526122408188611aaf565b905082810360608401526122548187611aaf565b905082810360808401526122688186611b04565b9150508260a0830152979650505050505050565b6001600160e01b031983168152815160009061229f816004850160208701611a53565b919091016004019392505050565b6001600160a01b0383168152604060208201819052600090611cbc90830184611a83565b600080604083850312156122e457600080fd5b82516122ef81611f87565b602084015190925067ffffffffffffffff81111561230c57600080fd5b8301601f8101851361231d57600080fd5b805161232b611d5082611dfc565b81815286602083850101111561234057600080fd5b612351826020830160208601611a53565b8093505050509250929050565b60008251612370818460208701611a53565b919091019291505056fea264697066735822122029b489759614d672f70ec649cf2165d5d56ed761bd12905a226ef75a11d1ece264736f6c634300080a0033", "deployedBytecode": "0x6080604052600436106101295760003560e01c8063b3c82e92116100ab578063d9a4cbdf1161006f578063d9a4cbdf1461031e578063dbd183881461033e578063e471b02614610353578063e68a5c3d14610373578063fc52539514610393578063fe0d94c1146103b357600080fd5b8063b3c82e9214610288578063b68df16d146102b5578063c3a76886146102d6578063cebc9a82146102f4578063d89aac391461030957600080fd5b80635ab98d5a116100f25780635ab98d5a146101c157806364d62353146101e15780638533f33714610201578063a75b87d214610216578063b1fc87961461024857600080fd5b80625c33e11461012e57806303c2762114610130578063083a73a21461015457806340e58ee5146101745780635748c13014610194575b600080fd5b005b34801561013c57600080fd5b506002545b6040519081526020015b60405180910390f35b34801561016057600080fd5b5061012e61016f366004611988565b6103c6565b34801561018057600080fd5b5061012e61018f366004611988565b61041f565b3480156101a057600080fd5b506101b46101af366004611988565b6106ca565b60405161014b91906119b7565b3480156101cd57600080fd5b5061012e6101dc366004611988565b610760565b3480156101ed57600080fd5b5061012e6101fc366004611988565b6107ac565b34801561020d57600080fd5b50600554610141565b34801561022257600080fd5b506004546001600160a01b03165b6040516001600160a01b03909116815260200161014b565b34801561025457600080fd5b50610278610263366004611988565b60009081526007602052604090205460ff1690565b604051901515815260200161014b565b34801561029457600080fd5b506102a86102a3366004611988565b6107de565b60405161014b9190611b36565b6102c86102c3366004611c1e565b610b51565b60405161014b929190611ca1565b3480156102e257600080fd5b506008546001600160a01b0316610230565b34801561030057600080fd5b50600054610141565b34801561031557600080fd5b50600354610141565b34801561032a57600080fd5b5061012e610339366004611ff9565b610be2565b34801561034a57600080fd5b50600154610141565b34801561035f57600080fd5b5061012e61036e366004611988565b610c21565b34801561037f57600080fd5b5061012e61038e3660046120cb565b610c6c565b34801561039f57600080fd5b5061012e6103ae3660046120cb565b610cf5565b61012e6103c1366004611988565b610d1e565b3330146103e657604051631dbf5f2360e01b815260040160405180910390fd5b60025481116104085760405163cb2f2b2360e01b815260040160405180910390fd5b61041181611046565b61041c600054611087565b50565b6004546001600160a01b0316331461044a576040516377b6878160e11b815260040160405180910390fd5b6000610455826106ca565b6003811115610466576104666119a1565b146104845760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602081905260408220908101805461ff001916610100179055805490915b81811015610699576106918360000182815481106104c9576104c96120ed565b6000918252602090912001546001850180546001600160a01b0390921691849081106104f7576104f76120ed565b9060005260206000200154856002018481548110610517576105176120ed565b90600052602060002001805461052c90612103565b80601f016020809104026020016040519081016040528092919081815260200182805461055890612103565b80156105a55780601f1061057a576101008083540402835291602001916105a5565b820191906000526020600020905b81548152906001019060200180831161058857829003601f168201915b50505050508660030185815481106105bf576105bf6120ed565b9060005260206000200180546105d490612103565b80601f016020809104026020016040519081016040528092919081815260200182805461060090612103565b801561064d5780601f106106225761010080835404028352916020019161064d565b820191906000526020600020905b81548152906001019060200180831161063057829003601f168201915b5050505050876005015488600401878154811061066c5761066c6120ed565b90600052602060002090602091828204019190069054906101000a900460ff166110cd565b6001016104a9565b5060405183907f0743c673685efcbf3db8591d9e1d98336bc844fe4f4599e6f7efb6d71c02563490600090a2505050565b600081600554116106ee5760405163e5bc0e7b60e01b815260040160405180910390fd5b600082815260066020819052604090912090810154610100900460ff16156107195750600292915050565b600681015460ff161561072f5750600192915050565b60015481600501546107419190612138565b4211156107515750600392915050565b50600092915050565b50919050565b33301461078057604051631dbf5f2360e01b815260040160405180910390fd5b6102588110156107a3576040516301f6f9e560e71b815260040160405180910390fd5b61041c8161111f565b3330146107cc57604051631dbf5f2360e01b815260040160405180910390fd5b6107d581611087565b61041c81611160565b61082a6040518061010001604052806060815260200160608152602001606081526020016060815260200160608152602001600081526020016000151581526020016000151581525090565b60008281526006602090815260409182902082518154610120938102820184019094526101008101848152909391928492849184018282801561089657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610878575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156108ee57602002820191906000526020600020905b8154815260200190600101908083116108da575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156109c857838290600052602060002001805461093b90612103565b80601f016020809104026020016040519081016040528092919081815260200182805461096790612103565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b50505050508152602001906001019061091c565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610aa1578382906000526020600020018054610a1490612103565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4090612103565b8015610a8d5780601f10610a6257610100808354040283529160200191610a8d565b820191906000526020600020905b815481529060010190602001808311610a7057829003601f168201915b5050505050815260200190600101906109f5565b50505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b1857602002820191906000526020600020906000905b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610ae75790505b50505091835250506005820154602082015260069091015460ff8082161515604084015261010090910416151560609091015292915050565b60006060333014610b7557604051631dbf5f2360e01b815260040160405180910390fd5b60006060866001600160a01b03168686604051610b9392919061215e565b600060405180830381855af49150503d8060008114610bce576040519150601f19603f3d011682016040523d82523d6000602084013e610bd3565b606091505b50909890975095505050505050565b6008546001600160a01b03163314610c0d576040516359e8359960e01b815260040160405180910390fd5b610c1a85858585856111a1565b5050505050565b333014610c4157604051631dbf5f2360e01b815260040160405180910390fd5b6003548110610c63576040516301b1029b60e61b815260040160405180910390fd5b6104118161140e565b333014610c8c57604051631dbf5f2360e01b815260040160405180910390fd5b600854604080516001600160a01b03928316815291831660208301527f01dd0ca50426f21c1b37ce7f3e95eef45b4a55bc5da80a7b67b2c65a7463caf0910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b333014610d1557604051631dbf5f2360e01b815260040160405180910390fd5b61041c8161144f565b6000610d29826106ca565b6003811115610d3a57610d3a6119a1565b14610d585760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602052604090206005810154421015610d8b57604051635192dd5560e01b815260040160405180910390fd5b60068101805460ff19166001179055805460008167ffffffffffffffff811115610db757610db7611cc4565b604051908082528060200260200182016040528015610dea57816020015b6060815260200190600190039081610dd55790505b50905060005b82811015610ffd57610fd8846000018281548110610e1057610e106120ed565b6000918252602090912001546001860180546001600160a01b039092169184908110610e3e57610e3e6120ed565b9060005260206000200154866002018481548110610e5e57610e5e6120ed565b906000526020600020018054610e7390612103565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9f90612103565b8015610eec5780601f10610ec157610100808354040283529160200191610eec565b820191906000526020600020905b815481529060010190602001808311610ecf57829003601f168201915b5050505050876003018581548110610f0657610f066120ed565b906000526020600020018054610f1b90612103565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4790612103565b8015610f945780601f10610f6957610100808354040283529160200191610f94565b820191906000526020600020905b815481529060010190602001808311610f7757829003601f168201915b50505050508860050154896004018781548110610fb357610fb36120ed565b90600052602060002090602091828204019190069054906101000a900460ff166114b8565b828281518110610fea57610fea6120ed565b6020908102919091010152600101610df0565b50336001600160a01b0316847ff5efc4bb09a12b6c9561a7e7ab02938a72a4351316b473d574fdaaa89c43eb9a83604051611038919061216e565b60405180910390a350505050565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b6002548110156110aa576040516361759e6560e01b815260040160405180910390fd5b60035481111561041c576040516386dac63560e01b815260040160405180910390fd5b60008686868686866040516020016110ea96959493929190612181565b60408051601f198184030181529181528151602092830120600090815260079092529020805460ff1916905550505050505050565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b84516111c057604051636a8e3e9360e11b815260040160405180910390fd5b84518451811415806111d3575083518114155b806111df575082518114155b806111eb575081518114155b1561120957604051630d10f63b60e01b815260040160405180910390fd5b6005546000805461121a9042612138565b600580546001019055905060005b8381101561133b576000898281518110611244576112446120ed565b602002602001015189838151811061125e5761125e6120ed565b6020026020010151898481518110611278576112786120ed565b6020026020010151898581518110611292576112926120ed565b6020026020010151868a87815181106112ad576112ad6120ed565b60200260200101516040516020016112ca96959493929190612181565b6040516020818303038152906040528051906020012090506112fb8160009081526007602052604090205460ff1690565b1561131957604051633b2f04e360e21b815260040160405180910390fd5b6000908152600760205260409020805460ff1916600190811790915501611228565b5060008281526006602090815260409091208951909161135f9183918c019061169e565b50875161137590600183019060208b0190611703565b50865161138b90600283019060208a019061173e565b5085516113a19060038301906020890190611797565b5084516113b790600483019060208801906117f0565b50818160050181905550827f0325966a4aa089b42f4766ec96f599405102bb309e065f24874aff59082dbc8b8a8a8a8a8a886040516113fb969594939291906121d5565b60405180910390a2505050505050505050565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6060854710156114db57604051631e9acf1760e31b815260040160405180910390fd5b60008787878787876040516020016114f896959493929190612181565b60408051601f198184030181529181528151602092830120600081815260079093529120805460ff191690558651909150606090611537575084611563565b86805190602001208660405160200161155192919061227c565b60405160208183030381529060405290505b6000606085156115e55760405163b68df16d60e01b8152309063b68df16d908c90611594908f9088906004016122ad565b60006040518083038185885af11580156115b2573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526115db91908101906122d1565b9092509050611647565b8a6001600160a01b03168a846040516115fe919061235e565b60006040518083038185875af1925050503d806000811461163b576040519150601f19603f3d011682016040523d82523d6000602084013e611640565b606091505b5090925090505b6116518282611660565b9b9a5050505050505050505050565b6060821561166f575080611698565b81511561167f5781518083602001fd5b6040516332f63ed360e21b815260040160405180910390fd5b92915050565b8280548282559060005260206000209081019282156116f3579160200282015b828111156116f357825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906116be565b506116ff92915061188c565b5090565b8280548282559060005260206000209081019282156116f3579160200282015b828111156116f3578251825591602001919060010190611723565b82805482825590600052602060002090810192821561178b579160200282015b8281111561178b578251805161177b9184916020909101906118a1565b509160200191906001019061175e565b506116ff929150611914565b8280548282559060005260206000209081019282156117e4579160200282015b828111156117e457825180516117d49184916020909101906118a1565b50916020019190600101906117b7565b506116ff929150611931565b82805482825590600052602060002090601f016020900481019282156116f35791602002820160005b8382111561185657835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302611819565b80156118835782816101000a81549060ff0219169055600101602081600001049283019260010302611856565b50506116ff9291505b5b808211156116ff576000815560010161188d565b8280546118ad90612103565b90600052602060002090601f0160209004810192826118cf57600085556116f3565b82601f106118e857805160ff19168380011785556116f3565b828001600101855582156116f357918201828111156116f3578251825591602001919060010190611723565b808211156116ff576000611928828261194e565b50600101611914565b808211156116ff576000611945828261194e565b50600101611931565b50805461195a90612103565b6000825580601f1061196a575050565b601f01602090049060005260206000209081019061041c919061188c565b60006020828403121561199a57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60208101600483106119d957634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b83811015611a185781516001600160a01b0316875295820195908201906001016119f3565b509495945050505050565b600081518084526020808501945080840160005b83811015611a1857815187529582019590820190600101611a37565b60005b83811015611a6e578181015183820152602001611a56565b83811115611a7d576000848401525b50505050565b60008151808452611a9b816020860160208601611a53565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611af7578284038952611ae5848351611a83565b98850198935090840190600101611acd565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611a18578151151587529582019590820190600101611b18565b6020815260008251610100806020850152611b556101208501836119df565b91506020850151601f1980868503016040870152611b738483611a23565b93506040870151915080868503016060870152611b908483611aaf565b93506060870151915080868503016080870152611bad8483611aaf565b935060808701519150808685030160a087015250611bcb8382611b04565b92505060a085015160c085015260c0850151611beb60e086018215159052565b5060e0850151801515858301525090949350505050565b80356001600160a01b0381168114611c1957600080fd5b919050565b600080600060408486031215611c3357600080fd5b611c3c84611c02565b9250602084013567ffffffffffffffff80821115611c5957600080fd5b818601915086601f830112611c6d57600080fd5b813581811115611c7c57600080fd5b876020828501011115611c8e57600080fd5b6020830194508093505050509250925092565b8215158152604060208201526000611cbc6040830184611a83565b949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d0357611d03611cc4565b604052919050565b600067ffffffffffffffff821115611d2557611d25611cc4565b5060051b60200190565b600082601f830112611d4057600080fd5b81356020611d55611d5083611d0b565b611cda565b82815260059290921b84018101918181019086841115611d7457600080fd5b8286015b84811015611d9657611d8981611c02565b8352918301918301611d78565b509695505050505050565b600082601f830112611db257600080fd5b81356020611dc2611d5083611d0b565b82815260059290921b84018101918181019086841