UNPKG

@openzeppelin/contracts-upgradeable

Version:
1,197 lines 69.8 kB
{ "_format": "hh-sol-artifact-1", "contractName": "AccessManagerUpgradeable", "sourceName": "contracts/access/manager/AccessManagerUpgradeable.sol", "abi": [ { "inputs": [ { "internalType": "bytes32", "name": "operationId", "type": "bytes32" } ], "name": "AccessManagerAlreadyScheduled", "type": "error" }, { "inputs": [], "name": "AccessManagerBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "operationId", "type": "bytes32" } ], "name": "AccessManagerExpired", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "initialAdmin", "type": "address" } ], "name": "AccessManagerInvalidInitialAdmin", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" } ], "name": "AccessManagerLockedRole", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "operationId", "type": "bytes32" } ], "name": "AccessManagerNotReady", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "operationId", "type": "bytes32" } ], "name": "AccessManagerNotScheduled", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "msgsender", "type": "address" }, { "internalType": "uint64", "name": "roleId", "type": "uint64" } ], "name": "AccessManagerUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "AccessManagerUnauthorizedCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "msgsender", "type": "address" }, { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "AccessManagerUnauthorizedCancel", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AccessManagerUnauthorizedConsume", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [], "name": "FailedCall", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "operationId", "type": "bytes32" }, { "indexed": true, "internalType": "uint32", "name": "nonce", "type": "uint32" } ], "name": "OperationCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "operationId", "type": "bytes32" }, { "indexed": true, "internalType": "uint32", "name": "nonce", "type": "uint32" } ], "name": "OperationExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "operationId", "type": "bytes32" }, { "indexed": true, "internalType": "uint32", "name": "nonce", "type": "uint32" }, { "indexed": false, "internalType": "uint48", "name": "schedule", "type": "uint48" }, { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "OperationScheduled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "indexed": true, "internalType": "uint64", "name": "admin", "type": "uint64" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "indexed": false, "internalType": "uint32", "name": "delay", "type": "uint32" }, { "indexed": false, "internalType": "uint48", "name": "since", "type": "uint48" } ], "name": "RoleGrantDelayChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint32", "name": "delay", "type": "uint32" }, { "indexed": false, "internalType": "uint48", "name": "since", "type": "uint48" }, { "indexed": false, "internalType": "bool", "name": "newMember", "type": "bool" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "indexed": true, "internalType": "uint64", "name": "guardian", "type": "uint64" } ], "name": "RoleGuardianChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "indexed": false, "internalType": "string", "name": "label", "type": "string" } ], "name": "RoleLabel", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "uint32", "name": "delay", "type": "uint32" }, { "indexed": false, "internalType": "uint48", "name": "since", "type": "uint48" } ], "name": "TargetAdminDelayUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "closed", "type": "bool" } ], "name": "TargetClosed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "bytes4", "name": "selector", "type": "bytes4" }, { "indexed": true, "internalType": "uint64", "name": "roleId", "type": "uint64" } ], "name": "TargetFunctionRoleUpdated", "type": "event" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PUBLIC_ROLE", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "canCall", "outputs": [ { "internalType": "bool", "name": "immediate", "type": "bool" }, { "internalType": "uint32", "name": "delay", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "cancel", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "consumeScheduledOp", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "execute", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "expiration", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "getAccess", "outputs": [ { "internalType": "uint48", "name": "since", "type": "uint48" }, { "internalType": "uint32", "name": "currentDelay", "type": "uint32" }, { "internalType": "uint32", "name": "pendingDelay", "type": "uint32" }, { "internalType": "uint48", "name": "effect", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "getNonce", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" } ], "name": "getRoleGrantDelay", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" } ], "name": "getRoleGuardian", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "getSchedule", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "getTargetAdminDelay", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "getTargetFunctionRole", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "executionDelay", "type": "uint32" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "isMember", "type": "bool" }, { "internalType": "uint32", "name": "executionDelay", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "hashOperation", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "initialAdmin", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "isTargetClosed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "internalType": "string", "name": "label", "type": "string" } ], "name": "labelRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minSetback", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint48", "name": "when", "type": "uint48" } ], "name": "schedule", "outputs": [ { "internalType": "bytes32", "name": "operationId", "type": "bytes32" }, { "internalType": "uint32", "name": "nonce", "type": "uint32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "internalType": "uint32", "name": "newDelay", "type": "uint32" } ], "name": "setGrantDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "internalType": "uint64", "name": "admin", "type": "uint64" } ], "name": "setRoleAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "roleId", "type": "uint64" }, { "internalType": "uint64", "name": "guardian", "type": "uint64" } ], "name": "setRoleGuardian", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "uint32", "name": "newDelay", "type": "uint32" } ], "name": "setTargetAdminDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bool", "name": "closed", "type": "bool" } ], "name": "setTargetClosed", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes4[]", "name": "selectors", "type": "bytes4[]" }, { "internalType": "uint64", "name": "roleId", "type": "uint64" } ], "name": "setTargetFunctionRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "address", "name": "newAuthority", "type": "address" } ], "name": "updateAuthority", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x608060405234801561000f575f80fd5b50612bab8061001d5f395ff3fe6080604052600436106101e6575f3560e01c80636d5115bd11610108578063b70096131161009d578063d1f856ee1161006d578063d1f856ee146105e9578063d22b598914610608578063d6bb62c614610627578063f801a69814610646578063fe0776f51461067f575f80fd5b8063b70096131461055b578063b7d2b16214610596578063c4d66de8146105b5578063cc1b6c81146105d4575f80fd5b8063a166aa89116100d8578063a166aa89146104b4578063a64d95ce146104e3578063abd9bd2a14610502578063ac9650d81461052f575f80fd5b80636d5115bd1461044457806375b238fc14610463578063853551b81461047657806394c7d7ee14610495575f80fd5b806330cae1871161017e5780634665096d1161014e5780634665096d146103d25780634c1da1e2146103e75780635296295214610406578063530dd45614610425575f80fd5b806330cae187146103445780633adc277a146103635780633ca7c02a146103995780634136a33c146103b3575f80fd5b806318ff183c116101b957806318ff183c1461029a5780631cff79cd146102b957806325c471a0146102cc5780633078f114146102eb575f80fd5b806308d6122d146101ea5780630b0a93ba1461020b57806312be872714610247578063167bd3951461027b575b5f80fd5b3480156101f5575f80fd5b5061020961020436600461246f565b61069e565b005b348015610216575f80fd5b5061022a6102253660046124d1565b6106f0565b6040516001600160401b0390911681526020015b60405180910390f35b348015610252575f80fd5b506102666102613660046124d1565b610727565b60405163ffffffff909116815260200161023e565b348015610286575f80fd5b506102096102953660046124ea565b610771565b3480156102a5575f80fd5b506102096102b4366004612525565b610787565b6102666102c736600461258e565b6107e9565b3480156102d7575f80fd5b506102096102e63660046125f1565b61092a565b3480156102f6575f80fd5b5061030a610305366004612633565b61094c565b60405161023e949392919065ffffffffffff948516815263ffffffff93841660208201529190921660408201529116606082015260800190565b34801561034f575f80fd5b5061020961035e36600461264d565b6109bf565b34801561036e575f80fd5b5061038261037d36600461267e565b6109d1565b60405165ffffffffffff909116815260200161023e565b3480156103a4575f80fd5b5061022a6001600160401b0381565b3480156103be575f80fd5b506102666103cd36600461267e565b610a13565b3480156103dd575f80fd5b5062093a80610266565b3480156103f2575f80fd5b50610266610401366004612695565b610a3e565b348015610411575f80fd5b5061020961042036600461264d565b610a78565b348015610430575f80fd5b5061022a61043f3660046124d1565b610a8a565b34801561044f575f80fd5b5061022a61045e3660046126c5565b610aba565b34801561046e575f80fd5b5061022a5f81565b348015610481575f80fd5b506102096104903660046126f1565b610b01565b3480156104a0575f80fd5b506102096104af36600461258e565b610b98565b3480156104bf575f80fd5b506104d36104ce366004612695565b610c42565b604051901515815260200161023e565b3480156104ee575f80fd5b506102096104fd36600461270c565b610c79565b34801561050d575f80fd5b5061052161051c366004612734565b610c8b565b60405190815260200161023e565b34801561053a575f80fd5b5061054e610549366004612794565b610cc3565b60405161023e91906127f4565b348015610566575f80fd5b5061057a61057536600461286c565b610da8565b60408051921515835263ffffffff90911660208301520161023e565b3480156105a1575f80fd5b506102096105b0366004612633565b610e29565b3480156105c0575f80fd5b506102096105cf366004612695565b610e40565b3480156105df575f80fd5b5062069780610266565b3480156105f4575f80fd5b5061057a610603366004612633565b610f36565b348015610613575f80fd5b506102096106223660046128b4565b610faf565b348015610632575f80fd5b50610266610641366004612734565b610fc1565b348015610651575f80fd5b506106656106603660046128d0565b611124565b6040805192835263ffffffff90911660208301520161023e565b34801561068a575f80fd5b50610209610699366004612633565b6112c0565b6106a66112e9565b5f5b828110156106e9576106e1858585848181106106c6576106c661293d565b90506020020160208101906106db9190612951565b84611360565b6001016106a8565b5050505050565b5f806106fa6113ec565b6001600160401b039384165f9081526001918201602052604090200154600160401b900490921692915050565b5f806107316113ec565b6001600160401b0384165f90815260018281016020526040909120015490915061076a90600160801b90046001600160701b0316611410565b9392505050565b6107796112e9565b610783828261142e565b5050565b61078f6112e9565b604051637a9e5e4b60e01b81526001600160a01b038281166004830152831690637a9e5e4b906024015f604051808303815f87803b1580156107cf575f80fd5b505af11580156107e1573d5f803e3d5ffd5b505050505050565b5f806107f36113ec565b9050335f80610804838989896114a0565b915091508115801561081a575063ffffffff8116155b1561086d57828861082b89896114f1565b6040516381c6f24b60e01b81526001600160a01b0393841660048201529290911660248301526001600160e01b03191660448201526064015b60405180910390fd5b5f61087a848a8a8a610c8b565b90505f63ffffffff83161515806108a05750610895826109d1565b65ffffffffffff1615155b156108b1576108ae82611508565b90505b60038601546108c98b6108c48c8c6114f1565b611619565b87600301819055506109128b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525034925061165b915050565b50600390960195909555509293505050509392505050565b6109326112e9565b610946838361094086610727565b846116fb565b50505050565b5f805f805f6109596113ec565b6001600160401b0388165f90815260018201602090815260408083206001600160a01b038b1684529091529020805465ffffffffffff81169750919250906109b090600160301b90046001600160701b0316611955565b979a9199509750945050505050565b6109c76112e9565b6107838282611976565b5f806109db6113ec565b5f84815260028201602052604090205490915065ffffffffffff166109ff81611a26565b610a095780610a0b565b5f5b949350505050565b5f80610a1d6113ec565b5f93845260020160205250506040902054600160301b900463ffffffff1690565b5f80610a486113ec565b6001600160a01b0384165f9081526020829052604090206001015490915061076a906001600160701b0316611410565b610a806112e9565b6107838282611a54565b5f80610a946113ec565b6001600160401b039384165f908152600191820160205260409020015490921692915050565b5f80610ac46113ec565b6001600160a01b0385165f908152602091825260408082206001600160e01b03198716835290925220546001600160401b03169150505b92915050565b610b096112e9565b6001600160401b0383161580610b2757506001600160401b03838116145b15610b505760405163061c6a4360e21b81526001600160401b0384166004820152602401610864565b826001600160401b03167f1256f5b5ecb89caec12db449738f2fbcd1ba5806cf38f35413f4e5c15bf6a4508383604051610b8b929190612994565b60405180910390a2505050565b60408051638fb3603760e01b80825291513392918391638fb36037916004808201926020929091908290030181865afa158015610bd7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfb91906129a7565b6001600160e01b03191614610c2e57604051630641fee960e31b81526001600160a01b0382166004820152602401610864565b6106e9610c3d85838686610c8b565b611508565b5f80610c4c6113ec565b6001600160a01b039093165f9081526020939093525050604090206001015460ff600160701b9091041690565b610c816112e9565b6107838282611b12565b5f84848484604051602001610ca394939291906129c2565b604051602081830303815290604052805190602001209050949350505050565b604080515f815260208101909152606090826001600160401b03811115610cec57610cec612a29565b604051908082528060200260200182016040528015610d1f57816020015b6060815260200190600190039081610d0a5790505b5091505f5b83811015610da057610d7b30868684818110610d4257610d4261293d565b9050602002810190610d549190612a3d565b85604051602001610d6793929190612a7f565b604051602081830303815290604052611c3c565b838281518110610d8d57610d8d61293d565b6020908102919091010152600101610d24565b505092915050565b5f80610db384610c42565b15610dc257505f905080610e21565b306001600160a01b03861603610de657610ddc8484611cae565b5f91509150610e21565b5f610df18585610aba565b90505f80610dff8389610f36565b9150915081610e0f575f80610e19565b63ffffffff811615815b945094505050505b935093915050565b610e316112e9565b610e3b8282611cd2565b505050565b5f610e49611dcd565b805490915060ff600160401b82041615906001600160401b03165f81158015610e6f5750825b90505f826001600160401b03166001148015610e8a5750303b155b905081158015610e98575080155b15610eb65760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ee057845460ff60401b1916600160401b1785555b610ee986611df5565b83156107e157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b5f8067fffffffffffffffe196001600160401b03851601610f5c5750600190505f610fa8565b5f80610f68868661094c565b5050915091508165ffffffffffff165f14158015610f9d5750610f89611e09565b65ffffffffffff168265ffffffffffff1611155b93509150610fa89050565b9250929050565b610fb76112e9565b6107838282611e18565b5f80610fcb6113ec565b9050335f610fd986866114f1565b90505f610fe889898989610c8b565b5f81815260028601602052604081205491925065ffffffffffff90911690036110275760405163060a299b60e41b815260048101829052602401610864565b826001600160a01b0316896001600160a01b0316146110c0575f61104b5f85610f36565b5090505f61106561105f6102258c87610aba565b86610f36565b50905081158015611074575080155b156110bd57604051630ff89d4760e21b81526001600160a01b038087166004830152808d1660248301528b1660448201526001600160e01b031985166064820152608401610864565b50505b5f818152600285016020526040808220805465ffffffffffff1916908190559051600160301b90910463ffffffff1691829184917fbd9ac67a6e2f6463b80927326310338bcbb4bdb7936ce1365ea3e01067e7b9f791a39998505050505050505050565b5f805f61112f6113ec565b9050335f61113f828a8a8a6114a0565b9150505f8163ffffffff16611152611e09565b61115c9190612aa4565b905063ffffffff8216158061119257505f8765ffffffffffff1611801561119257508065ffffffffffff168765ffffffffffff16105b156111a357828a61082b8b8b6114f1565b6111bd8765ffffffffffff168265ffffffffffff16611ee0565b96506111cb838b8b8b610c8b565b95506111d686611eef565b836002015f8781526020019081526020015f205f0160069054906101000a900463ffffffff16600101945086846002015f8881526020019081526020015f205f015f6101000a81548165ffffffffffff021916908365ffffffffffff16021790555084846002015f8881526020019081526020015f205f0160066101000a81548163ffffffff021916908363ffffffff1602179055508463ffffffff16867f82a2da5dee54ea8021c6545b4444620291e07ee83be6dd57edb175062715f3b489868e8e8e6040516112ab959493929190612aca565b60405180910390a35050505094509492505050565b6001600160a01b0381163314610e3157604051635f159e6360e01b815260040160405180910390fd5b335f806112f7838236611f49565b9150915081610e3b578063ffffffff165f03611351575f611318813661200c565b5060405163f07e038f60e01b81526001600160a01b03871660048201526001600160401b03821660248201529092506044019050610864565b610946610c3d84305f36610c8b565b5f6113696113ec565b6001600160a01b0385165f818152602083815260408083206001600160e01b0319891680855290835292819020805467ffffffffffffffff19166001600160401b03891690811790915590519283529394507f9ea6790c7dadfd01c9f8b9762b3682607af2c7e79e05a9f9fdf5580dde949151910160405180910390a350505050565b7f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0090565b5f80611424836001600160701b0316611955565b5090949350505050565b5f6114376113ec565b6001600160a01b0384165f81815260208390526040908190206001018054861515600160701b0260ff60701b1990911617905551919250907f90d4e7bb7e5d933792b3562e1741306f8be94837e1348dacef9b6f1df56eb13890610b8b90851515815260200190565b5f80306001600160a01b038616036114c6576114bd868585611f49565b915091506114e8565b600483106114e2576114dd868661057587876114f1565b6114bd565b505f9050805b94509492505050565b5f6114ff6004828486612a02565b61076a91612b0f565b5f806115126113ec565b5f84815260028201602052604081205491925065ffffffffffff821691600160301b900463ffffffff16908290036115605760405163060a299b60e41b815260048101869052602401610864565b611568611e09565b65ffffffffffff168265ffffffffffff16111561159b57604051630c65b5bd60e11b815260048101869052602401610864565b6115a482611a26565b156115c557604051631e2975b960e21b815260048101869052602401610864565b5f858152600284016020526040808220805465ffffffffffff191690555163ffffffff83169187917f76a2a46953689d4861a5d3f6ed883ad7e6af674a21f8e162707159fc9dde614d9190a3949350505050565b604080516001600160a01b03939093166020808501919091526001600160e01b0319929092168382015280518084038201815260609093019052815191012090565b6060814710156116875760405163cf47918160e01b815247600482015260248101839052604401610864565b5f80856001600160a01b031684866040516116a29190612b3d565b5f6040518083038185875af1925050503d805f81146116dc576040519150601f19603f3d011682016040523d82523d5f602084013e6116e1565b606091505b50915091506116f18683836121d6565b9695505050505050565b5f806117056113ec565b905067fffffffffffffffe196001600160401b038716016117445760405163061c6a4360e21b81526001600160401b0387166004820152602401610864565b6001600160401b0386165f90815260018201602090815260408083206001600160a01b038916845290915281205465ffffffffffff1615908115611838578563ffffffff16611791611e09565b61179b9190612aa4565b905060405180604001604052808265ffffffffffff1681526020016117c98763ffffffff1663ffffffff1690565b6001600160701b039081169091526001600160401b038a165f90815260018601602090815260408083206001600160a01b038d1684528252909120835181549490920151909216600160301b026001600160a01b031990931665ffffffffffff909116179190911790556118e6565b6001600160401b0388165f90815260018401602090815260408083206001600160a01b038b16845290915281205461188391600160301b9091046001600160701b0316908790612232565b6001600160401b038a165f90815260018601602090815260408083206001600160a01b038d168452909152902080546001600160701b03909316600160301b0273ffffffffffffffffffffffffffff000000000000199093169290921790915590505b6040805163ffffffff8716815265ffffffffffff831660208201528315158183015290516001600160a01b038916916001600160401b038b16917ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9181900360600190a3509695505050505050565b5f805f61196984611964611e09565b6122d8565b9250925092509193909250565b5f61197f6113ec565b90506001600160401b038316158061199f57506001600160401b03838116145b156119c85760405163061c6a4360e21b81526001600160401b0384166004820152602401610864565b6001600160401b038381165f81815260018481016020526040808320909101805467ffffffffffffffff19169487169485179055517f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63409190a3505050565b5f611a2f611e09565b65ffffffffffff16611a4462093a8084612aa4565b65ffffffffffff16111592915050565b5f611a5d6113ec565b90506001600160401b0383161580611a7d57506001600160401b03838116145b15611aa65760405163061c6a4360e21b81526001600160401b0384166004820152602401610864565b6001600160401b038381165f8181526001848101602052604080832090910180546fffffffffffffffff00000000000000001916600160401b958816958602179055517f7a8059630b897b5de4c08ade69f8b90c3ead1f8596d62d10b6c4d14a0afb4ae29190a3505050565b5f611b1b6113ec565b905067fffffffffffffffe196001600160401b03841601611b5a5760405163061c6a4360e21b81526001600160401b0384166004820152602401610864565b6001600160401b0383165f9081526001828101602052604082200154611b9490600160801b90046001600160701b03168462069780612232565b6001600160401b0386165f81815260018087016020526040918290200180546001600160701b03909516600160801b026dffffffffffffffffffffffffffff60801b199095169490941790935591519092507ffeb69018ee8b8fd50ea86348f1267d07673379f72cffdeccec63853ee8ce8b4890611c2e908690859063ffffffff92909216825265ffffffffffff16602082015260400190565b60405180910390a250505050565b60605f80846001600160a01b031684604051611c589190612b3d565b5f60405180830381855af49150503d805f8114611c90576040519150601f19603f3d011682016040523d82523d5f602084013e611c95565b606091505b5091509150611ca58583836121d6565b95945050505050565b5f80611cb86113ec565b9050611cc48484611619565b600390910154149392505050565b5f80611cdc6113ec565b905067fffffffffffffffe196001600160401b03851601611d1b5760405163061c6a4360e21b81526001600160401b0385166004820152602401610864565b6001600160401b0384165f90815260018201602090815260408083206001600160a01b038716845290915281205465ffffffffffff169003611d60575f915050610afb565b6001600160401b0384165f81815260018301602090815260408083206001600160a01b038816808552925280832080546001600160a01b0319169055519092917ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c16691a35060019392505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610afb565b611dfd612324565b611e068161234b565b50565b5f611e1342612388565b905090565b5f611e216113ec565b90505f611e5783620697806001600160a01b0387165f908152602086905260409020600101546001600160701b03169190612232565b6001600160a01b0386165f818152602086815260409182902060010180546dffffffffffffffffffffffffffff19166001600160701b039690961695909517909455805163ffffffff8816815265ffffffffffff841694810194909452919350917fa56b76017453f399ec2327ba00375dbfb1fd070ff854341ad6191e6a2e2de19c9101611c2e565b5f82821882841102821861076a565b5f611ef86113ec565b5f83815260028201602052604090205490915065ffffffffffff168015801590611f285750611f2681611a26565b155b15610e3b5760405163813e945960e01b815260048101849052602401610864565b5f806004831015611f5e57505f905080610e21565b306001600160a01b03861603611f8157610ddc30611f7c86866114f1565b611cae565b5f805f611f8e878761200c565b92509250925082158015611fa65750611fa630610c42565b15611fb9575f8094509450505050610e21565b5f80611fc5848b610f36565b9150915081611fde575f80965096505050505050610e21565b611ff48363ffffffff168263ffffffff16611ee0565b63ffffffff8116159b909a5098505050505050505050565b5f8080600484101561202557505f9150819050806121cf565b5f61203086866114f1565b90506001600160e01b031981166310a6aa3760e31b148061206157506001600160e01b031981166330cae18760e01b145b8061207c57506001600160e01b0319811663294b14a960e11b145b8061209757506001600160e01b03198116635326cae760e11b145b806120b257506001600160e01b0319811663d22b598960e01b145b156120c75760015f80935093509350506121cf565b6001600160e01b0319811663063fc60f60e21b14806120f657506001600160e01b0319811663167bd39560e01b145b8061211157506001600160e01b031981166308d6122d60e01b145b15612150575f61212560246004888a612a02565b8101906121329190612695565b90505f61213e82610a3e565b600196505f955093506121cf92505050565b6001600160e01b0319811663012e238d60e51b148061217f57506001600160e01b03198116635be958b160e11b145b156121bb575f61219360246004888a612a02565b8101906121a091906124d1565b905060016121ad82610a8a565b5f94509450945050506121cf565b5f6121c63083610aba565b5f935093509350505b9250925092565b6060826121eb576121e6826123be565b61076a565b815115801561220257506001600160a01b0384163b155b1561222b57604051639996b31560e01b81526001600160a01b0385166004820152602401610864565b508061076a565b5f805f612247866001600160701b0316611410565b90505f6122828563ffffffff168763ffffffff168463ffffffff161161226d575f612277565b6122778885612b58565b63ffffffff16611ee0565b90508063ffffffff16612293611e09565b61229d9190612aa4565b925063ffffffff8616602083901b67ffffffff0000000016604085901b6dffffffffffff000000000000000016171793505050935093915050565b69ffffffffffffffffffff602083901c166001600160701b03831665ffffffffffff604085901c811690841681111561231357828282612317565b815f805b9250925092509250925092565b61232c6123e7565b61234957604051631afcd79f60e31b815260040160405180910390fd5b565b612353612324565b6001600160a01b03811661237c57604051630409d6d160e11b81525f6004820152602401610864565b6107835f825f806116fb565b5f65ffffffffffff8211156123ba576040516306dfcc6560e41b81526030600482015260248101839052604401610864565b5090565b8051156123ce5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f6123f0611dcd565b54600160401b900460ff16919050565b6001600160a01b0381168114611e06575f80fd5b5f8083601f840112612424575f80fd5b5081356001600160401b0381111561243a575f80fd5b6020830191508360208260051b8501011115610fa8575f80fd5b80356001600160401b038116811461246a575f80fd5b919050565b5f805f8060608587031215612482575f80fd5b843561248d81612400565b935060208501356001600160401b038111156124a7575f80fd5b6124b387828801612414565b90945092506124c6905060408601612454565b905092959194509250565b5f602082840312156124e1575f80fd5b61076a82612454565b5f80604083850312156124fb575f80fd5b823561250681612400565b91506020830135801515811461251a575f80fd5b809150509250929050565b5f8060408385031215612536575f80fd5b823561254181612400565b9150602083013561251a81612400565b5f8083601f840112612561575f80fd5b5081356001600160401b03811115612577575f80fd5b602083019150836020828501011115610fa8575f80fd5b5f805f604084860312156125a0575f80fd5b83356125ab81612400565b925060208401356001600160401b038111156125c5575f80fd5b6125d186828701612551565b9497909650939450505050565b803563ffffffff8116811461246a575f80fd5b5f805f60608486031215612603575f80fd5b61260c84612454565b9250602084013561261c81612400565b915061262a604085016125de565b90509250925092565b5f8060408385031215612644575f80fd5b61254183612454565b5f806040838503121561265e575f80fd5b61266783612454565b915061267560208401612454565b90509250929050565b5f6020828403121561268e575f80fd5b5035919050565b5f602082840312156126a5575f80fd5b813561076a81612400565b6001600160e01b031981168114611e06575f80fd5b5f80604083850312156126d6575f80fd5b82356126e181612400565b9150602083013561251a816126b0565b5f805f60408486031215612703575f80fd5b6125ab84612454565b5f806040838503121561271d575f80fd5b61272683612454565b9150612675602084016125de565b5f805f8060608587031215612747575f80fd5b843561275281612400565b9350602085013561276281612400565b925060408501356001600160401b0381111561277c575f80fd5b61278887828801612551565b95989497509550505050565b5f80602083850312156127a5575f80fd5b82356001600160401b038111156127ba575f80fd5b6127c685828601612414565b90969095509350505050565b5f5b838110156127ec5781810151838201526020016127d4565b50505f910152565b5f602080830181845280855180835260408601915060408160051b87010192508387015f5b8281101561285f57878503603f1901845281518051808752612840818989018a85016127d2565b601f01601f191695909501860194509285019290850190600101612819565b5092979650505050505050565b5f805f6060848603121561287e575f80fd5b833561288981612400565b9250602084013561289981612400565b915060408401356128a9816126b0565b809150509250925092565b5f80604083850312156128c5575f80fd5b823561272681612400565b5f805f80606085870312156128e3575f80fd5b84356128ee81612400565b935060208501356001600160401b03811115612908575f80fd5b61291487828801612551565b909450925050604085013565ffffffffffff81168114612932575f80fd5b939692955090935050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612961575f80fd5b813561076a816126b0565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610a0b60208301848661296c565b5f602082840312156129b7575f80fd5b815161076a816126b0565b6001600160a01b038581168252841660208201526060604082018190525f906116f1908301848661296c565b634e487b7160e01b5f52601160045260245ffd5b5f8085851115612a10575f80fd5b83861115612a1c575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f808335601e19843603018112612a52575f80fd5b8301803591506001600160401b03821115612a6b575f80fd5b602001915036819003821315610fa8575f80fd5b828482375f8382015f81528351612a9a8183602088016127d2565b0195945050505050565b65ffffffffffff818116838216019080821115612ac357612ac36129ee565b5092915050565b65ffffffffffff861681526001600160a01b038581166020830152841660408201526080606082018190525f90612b04908301848661296c565b979650505050505050565b6001600160e01b03198135818116916004851015610da05760049490940360031b84901b1690921692915050565b5f8251612b4e8184602087016127d2565b9190910192915050565b63ffffffff828116828216039080821115612ac357612ac36129ee56fea26469706673582212206f6bc01aa1525d032d3d7986b52a271c17b92c365f4296d33466b84551eb567864736f6c63430008180033", "deployedBytecode": "0x6080604052600436106101e6575f3560e01c80636d5115bd11610108578063b70096131161009d578063d1f856ee1161006d578063d1f856ee146105e9578063d22b598914610608578063d6bb62c614610627578063f801a69814610646578063fe0776f51461067f575f80fd5b8063b70096131461055b578063b7d2b16214610596578063c4d66de8146105b5578063cc1b6c81146105d4575f80fd5b8063a166aa89116100d8578063a166aa89146104b4578063a64d95ce146104e3578063abd9bd2a14610502578063ac9650d81461052f575f80fd5b80636d5115bd1461044457806375b238fc14610463578063853551b81461047657806394c7d7ee14610495575f80fd5b806330cae1871161017e5780634665096d1161014e5780634665096d146103d25780634c1da1e2146103e75780635296295214610406578063530dd45614610425575f80fd5b806330cae187146103445780633adc277a146103635780633ca7c02a146103995780634136a33c146103b3575f80fd5b806318ff183c116101b957806318ff183c1461029a5780631cff79cd146102b957806325c471a0146102cc5780633078f114146102eb575f80fd5b806308d6122d146101ea5780630b0a93ba1461020b57806312be872714610247578063167bd3951461027b575b5f80fd5b3480156101f5575f80fd5b5061020961020436600461246f565b61069e565b005b348015610216575f80fd5b5061022a6102253660046124d1565b6106f0565b6040516001600160401b0390911681526020015b60405180910390f35b348015610252575f80fd5b506102666102613660046124d1565b610727565b60405163ffffffff909116815260200161023e565b348015610286575f80fd5b506102096102953660046124ea565b610771565b3480156102a5575f80fd5b506102096102b4366004612525565b610787565b6102666102c736600461258e565b6107e9565b3480156102d7575f80fd5b506102096102e63660046125f1565b61092a565b3480156102f6575f80fd5b5061030a610305366004612633565b61094c565b60405161023e949392919065ffffffffffff948516815263ffffffff93841660208201529190921660408201529116606082015260800190565b34801561034f575f80fd5b5061020961035e36600461264d565b6109bf565b34801561036e575f80fd5b5061038261037d36600461267e565b6109d1565b60405165ffffffffffff909116815260200161023e565b3480156103a4575f80fd5b5061022a6001600160401b0381565b3480156103be575f80fd5b506102666103cd36600461267e565b610a13565b3480156103dd575f80fd5b5062093a80610266565b3480156103f2575f80fd5b50610266610401366004612695565b610a3e565b348015610411575f80fd5b5061020961042036600461264d565b610a78565b348015610430575f80fd5b5061022a61043f3660046124d1565b610a8a565b34801561044f575f80fd5b5061022a61045e3660046126c5565b610aba565b34801561046e575f80fd5b5061022a5f81565b348015610481575f80fd5b506102096104903660046126f1565b610b01565b3480156104a0575f80fd5b506102096104af36600461258e565b610b98565b3480156104bf575f80fd5b506104d36104ce366004612695565b610c42565b604051901515815260200161023e565b3480156104ee575f80fd5b506102096104fd36600461270c565b610c79565b34801561050d575f80fd