1 tx
13 calls
constructor
constructor(address initialAdmin_, uint256 redemptionDelayInSeconds_)
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (uint64)
canCall
viewfunction canCall(address caller, address target, bytes4 selector) view returns (bool immediate, uint32 delay)
expiration
viewfunction expiration() view returns (uint32)
getAccess
viewfunction getAccess(uint64 roleId, address account) view returns (uint48 since, uint32 currentDelay, uint32 pendingDelay, uint48 effect)
getAccountLockTime
viewfunction getAccountLockTime(address account_) view returns (uint256)
getMinimalExecutionDelayForRole
viewfunction getMinimalExecutionDelayForRole(uint64 roleId_) view returns (uint256)
getNonce
viewfunction getNonce(bytes32 id) view returns (uint32)
getRoleAdmin
viewfunction getRoleAdmin(uint64 roleId) view returns (uint64)
getRoleGrantDelay
viewfunction getRoleGrantDelay(uint64 roleId) view returns (uint32)
getRoleGuardian
viewfunction getRoleGuardian(uint64 roleId) view returns (uint64)
getSchedule
viewfunction getSchedule(bytes32 id) view returns (uint48)
getTargetAdminDelay
viewfunction getTargetAdminDelay(address target) view returns (uint32)
getTargetFunctionRole
viewfunction getTargetFunctionRole(address target, bytes4 selector) view returns (uint64)
hashOperation
viewfunction hashOperation(address caller, address target, bytes data) view returns (bytes32)
hasRole
viewfunction hasRole(uint64 roleId, address account) view returns (bool isMember, uint32 executionDelay)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
isTargetClosed
viewfunction isTargetClosed(address target) view returns (bool)
MAX_REDEMPTION_DELAY_IN_SECONDS
viewfunction MAX_REDEMPTION_DELAY_IN_SECONDS() view returns (uint256)
minSetback
viewfunction minSetback() view returns (uint32)
PUBLIC_ROLE
viewfunction PUBLIC_ROLE() view returns (uint64)
REDEMPTION_DELAY_IN_SECONDS
viewfunction REDEMPTION_DELAY_IN_SECONDS() view returns (uint256)
canCallAndUpdate
nonpayablefunction canCallAndUpdate(address caller_, address target_, bytes4 selector_) returns (bool immediate, uint32 delay)
cancel
nonpayablefunction cancel(address caller, address target, bytes data) returns (uint32)
consumeScheduledOp
nonpayablefunction consumeScheduledOp(address caller, bytes data)
convertToPublicVault
nonpayablefunction convertToPublicVault(address vault_)
enableTransferShares
nonpayablefunction enableTransferShares(address vault_)
execute
payablefunction execute(address target, bytes data) payable returns (uint32)
grantRole
nonpayablefunction grantRole(uint64 roleId_, address account_, uint32 executionDelay_)
initialize
nonpayablefunction initialize(tuple initialData_)
labelRole
nonpayablefunction labelRole(uint64 roleId, string label)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
renounceRole
nonpayablefunction renounceRole(uint64 roleId, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(uint64 roleId, address account)
schedule
nonpayablefunction schedule(address target, bytes data, uint48 when) returns (bytes32 operationId, uint32 nonce)
setGrantDelay
nonpayablefunction setGrantDelay(uint64 roleId, uint32 newDelay)
setMinimalExecutionDelaysForRoles
nonpayablefunction setMinimalExecutionDelaysForRoles(uint64[] rolesIds_, uint256[] delays_)
setRoleAdmin
nonpayablefunction setRoleAdmin(uint64 roleId, uint64 admin)
setRoleGuardian
nonpayablefunction setRoleGuardian(uint64 roleId, uint64 guardian)
setTargetAdminDelay
nonpayablefunction setTargetAdminDelay(address target, uint32 newDelay)
setTargetClosed
nonpayablefunction setTargetClosed(address target, bool closed)
setTargetFunctionRole
nonpayablefunction setTargetFunctionRole(address target, bytes4[] selectors, uint64 roleId)
updateAuthority
nonpayablefunction updateAuthority(address target, address newAuthority)
updateTargetClosed
nonpayablefunction updateTargetClosed(address target_, bool closed_)
events
IporFusionAccessManagerInitialized
event IporFusionAccessManagerInitialized()
MinimalExecutionDelayForRoleUpdated
event MinimalExecutionDelayForRoleUpdated(uint64 roleId, uint256 delay)
OperationCanceled
event OperationCanceled(bytes32 indexed operationId, uint32 indexed nonce)
OperationExecuted
event OperationExecuted(bytes32 indexed operationId, uint32 indexed nonce)
OperationScheduled
event OperationScheduled(bytes32 indexed operationId, uint32 indexed nonce, uint48 schedule, address caller, address target, bytes data)
RedemptionDelayForAccountUpdated
event RedemptionDelayForAccountUpdated(address account, uint256 redemptionDelay)
RoleAdminChanged
event RoleAdminChanged(uint64 indexed roleId, uint64 indexed admin)
RoleGrantDelayChanged
event RoleGrantDelayChanged(uint64 indexed roleId, uint32 delay, uint48 since)
RoleGranted
event RoleGranted(uint64 indexed roleId, address indexed account, uint32 delay, uint48 since, bool newMember)
RoleGuardianChanged
event RoleGuardianChanged(uint64 indexed roleId, uint64 indexed guardian)
RoleLabel
event RoleLabel(uint64 indexed roleId, string label)
RoleRevoked
event RoleRevoked(uint64 indexed roleId, address indexed account)
TargetAdminDelayUpdated
event TargetAdminDelayUpdated(address indexed target, uint32 delay, uint48 since)
TargetClosed
event TargetClosed(address indexed target, bool closed)
TargetFunctionRoleUpdated
event TargetFunctionRoleUpdated(address indexed target, bytes4 selector, uint64 indexed roleId)
errors
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
AccessManagerAlreadyScheduled
error AccessManagerAlreadyScheduled(bytes32 operationId)
AccessManagerBadConfirmation
error AccessManagerBadConfirmation()
AccessManagerExpired
error AccessManagerExpired(bytes32 operationId)
AccessManagerInvalidInitialAdmin
error AccessManagerInvalidInitialAdmin(address initialAdmin)
AccessManagerLockedAccount
error AccessManagerLockedAccount(address account)
AccessManagerLockedRole
error AccessManagerLockedRole(uint64 roleId)
AccessManagerNotReady
error AccessManagerNotReady(bytes32 operationId)
AccessManagerNotScheduled
error AccessManagerNotScheduled(bytes32 operationId)
AccessManagerUnauthorizedAccount
error AccessManagerUnauthorizedAccount(address msgsender, uint64 roleId)
AccessManagerUnauthorizedCall
error AccessManagerUnauthorizedCall(address caller, address target, bytes4 selector)
AccessManagerUnauthorizedCancel
error AccessManagerUnauthorizedCancel(address msgsender, address caller, address target, bytes4 selector)
AccessManagerUnauthorizedConsume
error AccessManagerUnauthorizedConsume(address target)
AccountIsLocked
error AccountIsLocked(uint256 unlockTime)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AlreadyInitialized
error AlreadyInitialized()
FailedInnerCall
error FailedInnerCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
TooLongRedemptionDelay
error TooLongRedemptionDelay(uint256 redemptionDelayInSeconds)
TooShortExecutionDelayForRole
error TooShortExecutionDelayForRole(uint64 roleId, uint32 executionDelay)
creation bytecode
0x60a060405234801561000f575f80fd5b5060405161486738038061486783398101604081905261002e9161047c565b816001600160a01b03811661005d57604051630409d6d160e11b81525f60048201526024015b60405180910390fd5b6100695f82818061009b565b505062093a808111156100925760405163254d373d60e11b815260048101829052602401610054565b60805250610501565b5f6002600160401b03196001600160401b038616016100d85760405163061c6a4360e21b81526001600160401b0386166004820152602401610054565b6001600160401b0385165f9081526001602090815260408083206001600160a01b038816845290915281205465ffffffffffff16159081156101cd5763ffffffff85166101236102e1565b61012d91906104c7565b905060405180604001604052808265ffffffffffff16815260200161015d8663ffffffff166102f060201b60201c565b6001600160701b039081169091526001600160401b0389165f9081526001602090815260408083206001600160a01b038c16845282529091208351815494909201519092166601000000000000026001600160a01b031990931665ffffffffffff90911617919091179055610273565b6001600160401b0387165f9081526001602090815260408083206001600160a01b038a1684529091528120546102199166010000000000009091046001600160701b03169086906102f9565b6001600160401b0389165f9081526001602090815260408083206001600160a01b038c168452909152902080546001600160701b03909316660100000000000002600160301b600160a01b03199093169290921790915590505b6040805163ffffffff8616815265ffffffffffff831660208201528315158183015290516001600160a01b038816916001600160401b038a16917ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9181900360600190a35095945050505050565b5f6102eb4261039f565b905090565b63ffffffff1690565b5f808061030e6001600160701b0387166103d5565b90505f6103498563ffffffff168763ffffffff168463ffffffff1611610334575f61033e565b61033e88856104e5565b63ffffffff166103f3565b905063ffffffff811661035a6102e1565b61036491906104c7565b925063ffffffff8616602083901b67ffffffff0000000016604085901b6dffffffffffff000000000000000016171793505050935093915050565b5f65ffffffffffff8211156103d1576040516306dfcc6560e41b81526030600482015260248101839052604401610054565b5090565b5f806103e96001600160701b03841661040c565b5090949350505050565b5f8183116104015781610403565b825b90505b92915050565b5f80806104208461041b6102e1565b61042d565b9250925092509193909250565b5f80806001600160501b03602086901c166001600160701b03861665ffffffffffff604088901c81169087168111156104685782828261046c565b815f805b9550955095505050509250925092565b5f806040838503121561048d575f80fd5b82516001600160a01b03811681146104a3575f80fd5b6020939093015192949293505050565b634e487b7160e01b5f52601160045260245ffd5b65ffffffffffff8181168382160190811115610406576104066104b3565b63ffffffff8281168282160390811115610406576104066104b3565b60805161434e6105195f395f6109a8015261434e5ff3fe6080604052600436106102cc575f3560e01c80636d5115bd1161017b578063ac9650d8116100d1578063d1f856ee11610087578063f801a69811610062578063f801a6981461093f578063fe0776f514610978578063feeb4e6a14610997575f80fd5b8063d1f856ee146108e2578063d22b598914610901578063d6bb62c614610920575f80fd5b8063b7d2b162116100b7578063b7d2b16214610898578063c19eba5b146108b7578063cc1b6c81146108cd575f80fd5b8063ac9650d81461084d578063b700961314610879575f80fd5b80638fb3603711610131578063a166aa891161010c578063a166aa89146107b3578063a64d95ce1461080f578063abd9bd2a1461082e575f80fd5b80638fb360371461073057806394c7d7ee146107755780639852f89c14610794575f80fd5b806377d973701161016157806377d97370146106b7578063853551b8146106f25780638b88e01c14610711575f80fd5b80636d5115bd1461063757806375b238fc146106a4575f80fd5b80633adc277a116102305780634665096d116101e657806352962952116101c157806352962952146105bd578063530dd456146105dc57806367d9201114610618575f80fd5b80634665096d1461056a578063478493041461057f5780634c1da1e21461059e575f80fd5b80634136a33c116102165780634136a33c146104e357806342f88ad31461051e57806342f88b281461054b575f80fd5b80633adc277a146104925780633ca7c02a146104c8575f80fd5b806318ff183c1161028557806325c471a01161026b57806325c471a0146103fb5780633078f1141461041a57806330cae18714610473575f80fd5b806318ff183c146103c95780631cff79cd146103e8575f80fd5b806312be8727116102b557806312be872714610357578063167bd3951461038b57806317dbfc93146103aa575f80fd5b806308d6122d146102d05780630b0a93ba146102f1575b5f80fd5b3480156102db575f80fd5b506102ef6102ea3660046138e6565b6109ca565b005b3480156102fc575f80fd5b5061033961030b366004613949565b67ffffffffffffffff9081165f90815260016020819052604090912001546801000000000000000090041690565b60405167ffffffffffffffff90911681526020015b60405180910390f35b348015610362575f80fd5b50610376610371366004613949565b610a1c565b60405163ffffffff909116815260200161034e565b348015610396575f80fd5b506102ef6103a5366004613962565b610a6b565b3480156103b5575f80fd5b506102ef6103c436600461399d565b610a81565b3480156103d4575f80fd5b506102ef6103e33660046139b8565b610af6565b6103766103f6366004613a22565b610b71565b348015610406575f80fd5b506102ef610415366004613a86565b610d23565b348015610425575f80fd5b50610439610434366004613ac8565b610d3b565b60405161034e949392919065ffffffffffff948516815263ffffffff93841660208201529190921660408201529116606082015260800190565b34801561047e575f80fd5b506102ef61048d366004613ae2565b610daa565b34801561049d575f80fd5b506104b16104ac366004613b13565b610dbc565b60405165ffffffffffff909116815260200161034e565b3480156104d3575f80fd5b5061033967ffffffffffffffff81565b3480156104ee575f80fd5b506103766104fd366004613b13565b5f908152600260205260409020546601000000000000900463ffffffff1690565b348015610529575f80fd5b5061053d61053836600461399d565b610ded565b60405190815260200161034e565b348015610556575f80fd5b506102ef610565366004613962565b610e29565b348015610575575f80fd5b5062093a80610376565b34801561058a575f80fd5b506102ef61059936600461399d565b610e32565b3480156105a9575f80fd5b506103766105b836600461399d565b610ed4565b3480156105c8575f80fd5b506102ef6105d7366004613ae2565b610f08565b3480156105e7575f80fd5b506103396105f6366004613949565b67ffffffffffffffff9081165f90815260016020819052604090912001541690565b348015610623575f80fd5b506102ef610632366004613b2a565b610f1a565b348015610642575f80fd5b50610339610651366004613bc3565b6001600160a01b0382165f908152602081815260408083207fffffffff000000000000000000000000000000000000000000000000000000008516845290915290205467ffffffffffffffff1692915050565b3480156106af575f80fd5b506103395f81565b3480156106c2575f80fd5b506106d66106d1366004613bef565b610f94565b60408051921515835263ffffffff90911660208301520161034e565b3480156106fd575f80fd5b506102ef61070c366004613c37565b610fb8565b34801561071c575f80fd5b506102ef61072b366004613c52565b61106c565b34801561073b575f80fd5b5061074461150a565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161034e565b348015610780575f80fd5b506102ef61078f366004613a22565b611542565b34801561079f575f80fd5b5061053d6107ae366004613949565b611636565b3480156107be575f80fd5b506107ff6107cd36600461399d565b6001600160a01b03165f908152602081905260409020600101546e010000000000000000000000000000900460ff1690565b604051901515815260200161034e565b34801561081a575f80fd5b506102ef610829366004613c89565b611673565b348015610839575f80fd5b5061053d610848366004613cb1565b611685565b348015610858575f80fd5b5061086c610867366004613d06565b6116bd565b60405161034e9190613d45565b348015610884575f80fd5b506106d6610893366004613bef565b6117a3565b3480156108a3575f80fd5b506102ef6108b2366004613ac8565b6118d6565b3480156108c2575f80fd5b5061053d62093a8081565b3480156108d8575f80fd5b5062069780610376565b3480156108ed575f80fd5b506106d66108fc366004613ac8565b6118e8565b34801561090c575f80fd5b506102ef61091b366004613e05565b611979565b34801561092b575f80fd5b5061037661093a366004613cb1565b61198b565b34801561094a575f80fd5b5061095e610959366004613e21565b611b8f565b6040805192835263ffffffff90911660208301520161034e565b348015610983575f80fd5b506102ef610992366004613ac8565b611ce8565b3480156109a2575f80fd5b5061053d7f000000000000000000000000000000000000000000000000000000000000000081565b6109d2611d2a565b5f5b82811015610a1557610a0d858585848181106109f2576109f2613e8f565b9050602002016020810190610a079190613ebc565b84611dbb565b6001016109d4565b5050505050565b67ffffffffffffffff81165f90815260016020819052604082200154610a659070010000000000000000000000000000000090046dffffffffffffffffffffffffffff16611e6c565b92915050565b610a73611d2a565b610a7d8282611e91565b5050565b610a8d335b5f36611f75565b610ac0817fa9059cbb0000000000000000000000000000000000000000000000000000000067ffffffffffffffff611dbb565b610af3817f23b872dd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff611dbb565b50565b610afe611d2a565b6040517f7a9e5e4b0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690637a9e5e4b906024015f604051808303815f87803b158015610b57575f80fd5b505af1158015610b69573d5f803e3d5ffd5b505050505050565b5f338180610b81838888886120a8565b9150915081158015610b97575063ffffffff8116155b15610c1b578287610ba888886120f9565b6040517f81c6f24b0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529290911660248301527fffffffff000000000000000000000000000000000000000000000000000000001660448201526064015b60405180910390fd5b5f610c2884898989611685565b90505f63ffffffff8316151580610c4e5750610c4382610dbc565b65ffffffffffff1615155b15610c5f57610c5c82612110565b90505b600354610cca8a610c708b8b6120f9565b604080516001600160a01b03939093166020808501919091527fffffffff00000000000000000000000000000000000000000000000000000000929092168382015280518084038201815260609093019052815191012090565b600381905550610d118a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250349250612275915050565b506003559450505050505b9392505050565b610d2b611d2a565b610d36838383612327565b505050565b67ffffffffffffffff82165f9081526001602090815260408083206001600160a01b03851684529091528120805465ffffffffffff811692918291829190610d9c90660100000000000090046dffffffffffffffffffffffffffff166123ca565b969991985096509350505050565b610db2611d2a565b610a7d82826123eb565b5f8181526002602052604081205465ffffffffffff16610ddb816124c2565b610de55780610d1c565b5f9392505050565b6001600160a01b0381165f9081527f5e07febb5bd598f6b55406c9bf939d497fd39a2dbc2b5891f20f6640c3f325006020526040812054610a65565b610a7333610a86565b610e3b33610a86565b610e6e817f94bf804d0000000000000000000000000000000000000000000000000000000067ffffffffffffffff611dbb565b610ea1817f6e553f650000000000000000000000000000000000000000000000000000000067ffffffffffffffff611dbb565b610af3817f4021a8740000000000000000000000000000000000000000000000000000000067ffffffffffffffff611dbb565b6001600160a01b0381165f90815260208190526040812060010154610a65906dffffffffffffffffffffffffffff16611e6c565b610f10611d2a565b610a7d82826124f0565b610f2333610a86565b610f8e8484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250506040805160208088028281018201909352878252909350879250869182918501908490808284375f920191909152506125d292505050565b50505050565b5f80610fa085846126e9565b610fab8585856117a3565b915091505b935093915050565b610fc0611d2a565b67ffffffffffffffff83161580610fe0575067ffffffffffffffff838116145b15611023576040517f1871a90c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610c12565b8267ffffffffffffffff167f1256f5b5ecb89caec12db449738f2fbcd1ba5806cf38f35413f4e5c15bf6a450838360405161105f929190613f1e565b60405180910390a2505050565b61107533610a86565b61107d6128de565b6110875f33612967565b505f6110938280613f39565b905090505f8167ffffffffffffffff8111156110b1576110b1613f9d565b6040519080825280602002602001820160405280156110da578160200160208202803683370190505b5090505f8267ffffffffffffffff8111156110f7576110f7613f9d565b604051908082528060200260200182016040528015611120578160200160208202803683370190505b509050821561138e575f5b8381101561138c576111cf6111408680613f39565b8381811061115057611150613e8f565b611166926020608090920201908101915061399d565b6111708780613f39565b8481811061118057611180613e8f565b90506080020160400160208101906111989190613ebc565b6111a28880613f39565b858181106111b2576111b2613e8f565b90506080020160200160208101906111ca9190613949565b611dbb565b6111d98580613f39565b828181106111e9576111e9613e8f565b90506080020160200160208101906112019190613949565b83828151811061121357611213613e8f565b67ffffffffffffffff909216602092830291909101909101526112368580613f39565b8281811061124657611246613e8f565b9050608002016060013582828151811061126257611262613e8f565b60209081029190910101525f6112788680613f39565b8381811061128857611288613e8f565b90506080020160200160208101906112a09190613949565b67ffffffffffffffff16141580156112f4575060026112bf8680613f39565b838181106112cf576112cf613e8f565b90506080020160200160208101906112e79190613949565b67ffffffffffffffff1614155b8015611343575067ffffffffffffffff61130e8680613f39565b8381811061131e5761131e613e8f565b90506080020160200160208101906113369190613949565b67ffffffffffffffff1614155b15611384576113846113558680613f39565b8381811061136557611365613e8f565b905060800201602001602081019061137d9190613949565b60026124f0565b60010161112b565b505b61139882826125d2565b5f6113a66040860186613fca565b9150508015611433575f5b81811015611431576114296113c96040880188613fca565b838181106113d9576113d9613e8f565b6113ef9260206040909202019081019150613949565b6113fc6040890189613fca565b8481811061140c5761140c613e8f565b90506040020160200160208101906114249190613949565b6123eb565b6001016113b1565b505b5f611441602087018761402e565b9150508015610b69575f5b81811015611501576114f9611464602089018961402e565b8381811061147457611474613e8f565b61148a9260206060909202019081019150613949565b61149760208a018a61402e565b848181106114a7576114a7613e8f565b90506060020160200160208101906114bf919061399d565b6114cc60208b018b61402e565b858181106114dc576114dc613e8f565b90506060020160400160208101906114f49190614091565b612327565b60010161144c565b50505050505050565b6004545f9060ff1661151b57505f90565b7f8fb36037000000000000000000000000000000000000000000000000000000005b905090565b604080517f8fb360370000000000000000000000000000000000000000000000000000000080825291513392918391638fb36037916004808201926020929091908290030181865afa15801561159a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115be91906140aa565b7fffffffff000000000000000000000000000000000000000000000000000000001614611622576040517f320ff7480000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610c12565b610a1561163185838686611685565b612110565b67ffffffffffffffff81165f9081527f2e44a6c6f75b62bc581bae68fca3a6629eb7343eef230a6702d4acd6389fd6006020526040812054610a65565b61167b611d2a565b610a7d8282612a9c565b5f8484848460405160200161169d94939291906140c5565b604051602081830303815290604052805190602001209050949350505050565b604080515f8152602081019091526060908267ffffffffffffffff8111156116e7576116e7613f9d565b60405190808252806020026020018201604052801561171a57816020015b60608152602001906001900390816117055790505b5091505f5b8381101561179b576117763086868481811061173d5761173d613e8f565b905060200281019061174f919061414a565b85604051602001611762939291906141c2565b604051602081830303815290604052612c15565b83828151811061178857611788613e8f565b602090810291909101015260010161171f565b505092915050565b6001600160a01b0382165f9081526020819052604081206001015481906e010000000000000000000000000000900460ff16156117e457505f905080610fb0565b306001600160a01b0386160361185757604080516001600160a01b0386166020808301919091527fffffffff0000000000000000000000000000000000000000000000000000000086168284015282518083038401815260609092019092528051910120600354145b5f91509150610fb0565b6001600160a01b0384165f908152602081815260408083207fffffffff000000000000000000000000000000000000000000000000000000008716845290915281205467ffffffffffffffff1690806118b083896118e8565b91509150816118c0575f806118ca565b63ffffffff811615815b94509450505050610fb0565b6118de611d2a565b610d368282612967565b5f807fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000167ffffffffffffffff8516016119265750600190505f611972565b5f806119328686610d3b565b5050915091508165ffffffffffff165f141580156119675750611953612c87565b65ffffffffffff168265ffffffffffff1611155b935091506119729050565b9250929050565b611981611d2a565b610a7d8282612c91565b5f338161199885856120f9565b90505f6119a788888888611685565b5f8181526002602052604081205491925065ffffffffffff90911690036119fd576040517f60a299b000000000000000000000000000000000000000000000000000000000815260048101829052602401610c12565b826001600160a01b0316886001600160a01b031614611b12575f611a215f856118e8565b506001600160a01b0389165f908152602081815260408083207fffffffff000000000000000000000000000000000000000000000000000000008816845290915281205491925090611a8690611a809067ffffffffffffffff1661030b565b866118e8565b50905081158015611a95575080155b15611b0f576040517f3fe2751c0000000000000000000000000000000000000000000000000000000081526001600160a01b038087166004830152808c1660248301528a1660448201527fffffffff0000000000000000000000000000000000000000000000000000000085166064820152608401610c12565b50505b5f8181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000016908190559051660100000000000090910463ffffffff1691829184917fbd9ac67a6e2f6463b80927326310338bcbb4bdb7936ce1365ea3e01067e7b9f791a398975050505050505050565b5f803381611b9f828989896120a8565b9150505f8163ffffffff16611bb2612c87565b611bbc91906141d7565b905063ffffffff82161580611bf257505f8665ffffffffffff16118015611bf257508065ffffffffffff168665ffffffffffff16105b15611c03578289610ba88a8a6120f9565b611c1d8665ffffffffffff168265ffffffffffff16612d6b565b9550611c2b838a8a8a611685565b9450611c3685612d80565b5f8581526002602052604090819020805465ffffffffffff89167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000082161766010000000000009182900463ffffffff90811660010190811692830291909117909255915190955086907f82a2da5dee54ea8021c6545b4444620291e07ee83be6dd57edb175062715f3b490611cd4908a9088908f908f908f906141f5565b60405180910390a350505094509492505050565b6001600160a01b03811633146118de576040517f5f159e6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f80611d38838236612de5565b9150915081610d36578063ffffffff165f03611dac575f611d598136612eef565b506040517ff07e038f0000000000000000000000000000000000000000000000000000000081526001600160a01b038716600482015267ffffffffffffffff821660248201529092506044019050610c12565b610f8e61163184305f36611685565b6001600160a01b0383165f818152602081815260408083207fffffffff0000000000000000000000000000000000000000000000000000000087168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155905192835292917f9ea6790c7dadfd01c9f8b9762b3682607af2c7e79e05a9f9fdf5580dde949151910160405180910390a3505050565b5f80611e87836dffffffffffffffffffffffffffff166123ca565b5090949350505050565b306001600160a01b03831603611ede576040517f5a068bc80000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610c12565b6001600160a01b0382165f818152602081905260409081902060010180548415156e010000000000000000000000000000027fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff909116179055517f90d4e7bb7e5d933792b3562e1741306f8be94837e1348dacef9b6f1df56eb13890611f6990841515815260200190565b60405180910390a25050565b5f80611f928530611f89600485888a614123565b6108939161423f565b9150915081610a155763ffffffff81161561206b57600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781556040517f94c7d7ee00000000000000000000000000000000000000000000000000000000815230916394c7d7ee9161201091899189918991016142a5565b5f604051808303815f87803b158015612027575f80fd5b505af1158015612039573d5f803e3d5ffd5b5050600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550610a159050565b6040517f068ca9d80000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610c12565b5f80306001600160a01b038616036120ce576120c5868585612de5565b915091506120f0565b600483106120ea576120e5868661089387876120f9565b6120c5565b505f9050805b94509492505050565b5f6121076004828486614123565b610d1c9161423f565b5f8181526002602052604081205465ffffffffffff8116906601000000000000900463ffffffff16818303612174576040517f60a299b000000000000000000000000000000000000000000000000000000000815260048101859052602401610c12565b61217c612c87565b65ffffffffffff168265ffffffffffff1611156121c8576040517f18cb6b7a00000000000000000000000000000000000000000000000000000000815260048101859052602401610c12565b6121d1826124c2565b1561220b576040517f78a5d6e400000000000000000000000000000000000000000000000000000000815260048101859052602401610c12565b5f8481526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690555163ffffffff83169186917f76a2a46953689d4861a5d3f6ed883ad7e6af674a21f8e162707159fc9dde614d9190a39392505050565b6060814710156122b3576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c12565b5f80856001600160a01b031684866040516122ce91906142c7565b5f6040518083038185875af1925050503d805f8114612308576040519150601f19603f3d011682016040523d82523d5f602084013e61230d565b606091505b509150915061231d8683836132b7565b9695505050505050565b67ffffffffffffffff83165f9081527f2e44a6c6f75b62bc581bae68fca3a6629eb7343eef230a6702d4acd6389fd60060205260409020548163ffffffff1610156123b6576040517f640450fe00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416600482015263ffffffff82166024820152604401610c12565b610f8e83836123c486610a1c565b8461332c565b5f805f6123de846123d9612c87565b6135ea565b9250925092509193909250565b67ffffffffffffffff8216158061240b575067ffffffffffffffff828116145b1561244e576040517f1871a90c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c12565b67ffffffffffffffff8281165f81815260016020819052604080832090910180547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000169486169485179055517f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63409190a35050565b5f6124cb612c87565b65ffffffffffff166124e062093a80846141d7565b65ffffffffffff16111592915050565b67ffffffffffffffff82161580612510575067ffffffffffffffff828116145b15612553576040517f1871a90c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c12565b67ffffffffffffffff8281165f81815260016020819052604080832090910180547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff1668010000000000000000958716958602179055517f7a8059630b897b5de4c08ade69f8b90c3ead1f8596d62d10b6c4d14a0afb4ae29190a35050565b81515f5b81811015610f8e578281815181106125f0576125f0613e8f565b602002602001015161261f7f2e44a6c6f75b62bc581bae68fca3a6629eb7343eef230a6702d4acd6389fd60090565b5f015f86848151811061263457612634613e8f565b602002602001015167ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f20819055507fc7bb31b15cf43f1b87219681155266b9026771e099177146a7913d68cfbabd0284828151811061269457612694613e8f565b60200260200101518483815181106126ae576126ae613e8f565b60200260200101516040516126d992919067ffffffffffffffff929092168252602082015260400190565b60405180910390a16001016125d6565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fb460af9400000000000000000000000000000000000000000000000000000000148061277a57507fffffffff0000000000000000000000000000000000000000000000000000000081167fba08765200000000000000000000000000000000000000000000000000000000145b156127f3576001600160a01b0382165f9081527f5e07febb5bd598f6b55406c9bf939d497fd39a2dbc2b5891f20f6640c3f32500602052604090205442811115610d36576040517fa592703b00000000000000000000000000000000000000000000000000000000815260048101829052602401610c12565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f6e553f6500000000000000000000000000000000000000000000000000000000148061288457507fffffffff0000000000000000000000000000000000000000000000000000000081167f94bf804d00000000000000000000000000000000000000000000000000000000145b806128d057507fffffffff0000000000000000000000000000000000000000000000000000000081167f4021a87400000000000000000000000000000000000000000000000000000000145b15610a7d57610a7d82613643565b7f25e922da7c41a5d012dbc2479dd6a7bd57760f359ea3a3be13608d287fc89400805415612938576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600181556040517fb54d712960684daa449dd48da65696020bd235d9589433ccfa4b075a7cb43b50905f90a150565b5f7fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000167ffffffffffffffff8416016129d7576040517f1871a90c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610c12565b67ffffffffffffffff83165f9081526001602090815260408083206001600160a01b038616845290915281205465ffffffffffff169003612a1957505f610a65565b67ffffffffffffffff83165f8181526001602090815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055519092917ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c16691a350600192915050565b7fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000167ffffffffffffffff831601612b0b576040517f1871a90c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c12565b67ffffffffffffffff82165f90815260016020819052604082200154612b599070010000000000000000000000000000000090046dffffffffffffffffffffffffffff168362069780613737565b67ffffffffffffffff85165f818152600160208190526040918290200180546dffffffffffffffffffffffffffff909516700100000000000000000000000000000000027fffff0000000000000000000000000000ffffffffffffffffffffffffffffffff9095169490941790935591519092507ffeb69018ee8b8fd50ea86348f1267d07673379f72cffdeccec63853ee8ce8b489061105f908590859063ffffffff92909216825265ffffffffffff16602082015260400190565b60605f80846001600160a01b031684604051612c3191906142c7565b5f60405180830381855af49150503d805f8114612c69576040519150601f19603f3d011682016040523d82523d5f602084013e612c6e565b606091505b5091509150612c7e8583836132b7565b95945050505050565b5f61153d426137e4565b6001600160a01b0382165f90815260208190526040812060010154612cca906dffffffffffffffffffffffffffff168362069780613737565b6001600160a01b0385165f818152602081815260409182902060010180547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff9690961695909517909455805163ffffffff8716815265ffffffffffff841694810194909452919350917fa56b76017453f399ec2327ba00375dbfb1fd070ff854341ad6191e6a2e2de19c910161105f565b5f818311612d795781610d1c565b5090919050565b5f8181526002602052604090205465ffffffffffff168015801590612dab5750612da9816124c2565b155b15610a7d576040517f813e945900000000000000000000000000000000000000000000000000000000815260048101839052602401610c12565b5f806004831015612dfa57505f905080610fb0565b306001600160a01b03861603612e765761184d30612e1886866120f9565b604080516001600160a01b03939093166020808501919091527fffffffff0000000000000000000000000000000000000000000000000000000092909216838201528051808403820181526060909301905281519101206003541490565b5f805f612e838787612eef565b92509250925082612e9c575f8094509450505050610fb0565b5f80612ea8848b6118e8565b9150915081612ec1575f80965096505050505050610fb0565b612ed78363ffffffff168263ffffffff16612d6b565b63ffffffff8116159b909a5098505050505050505050565b5f80806004841015612f0857505f9150819050806132b0565b5f612f1386866120f9565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f853551b8000000000000000000000000000000000000000000000000000000001480612fa657507fffffffff0000000000000000000000000000000000000000000000000000000081167f30cae18700000000000000000000000000000000000000000000000000000000145b80612ff257507fffffffff0000000000000000000000000000000000000000000000000000000081167f5296295200000000000000000000000000000000000000000000000000000000145b8061303e57507fffffffff0000000000000000000000000000000000000000000000000000000081167fa64d95ce00000000000000000000000000000000000000000000000000000000145b8061308a57507fffffffff0000000000000000000000000000000000000000000000000000000081167fd22b598900000000000000000000000000000000000000000000000000000000145b1561309f5760015f80935093509350506132b0565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f18ff183c00000000000000000000000000000000000000000000000000000000148061313057507fffffffff0000000000000000000000000000000000000000000000000000000081167f167bd39500000000000000000000000000000000000000000000000000000000145b8061317c57507fffffffff0000000000000000000000000000000000000000000000000000000081167f08d6122d00000000000000000000000000000000000000000000000000000000145b156131bb575f61319060246004888a614123565b81019061319d919061399d565b90505f6131a982610ed4565b600196505f955093506132b092505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f25c471a000000000000000000000000000000000000000000000000000000000148061324c57507fffffffff0000000000000000000000000000000000000000000000000000000081167fb7d2b16200000000000000000000000000000000000000000000000000000000145b156132a5575f61326060246004888a614123565b81019061326d9190613949565b905060016132978267ffffffffffffffff9081165f90815260016020819052604090912001541690565b5f94509450945050506132b0565b5f805f935093509350505b9250925092565b6060826132cc576132c782613833565b610d1c565b81511580156132e357506001600160a01b0384163b155b15613325576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610c12565b5080610d1c565b5f7fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000167ffffffffffffffff86160161339c576040517f1871a90c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86166004820152602401610c12565b67ffffffffffffffff85165f9081526001602090815260408083206001600160a01b038816845290915281205465ffffffffffff16159081156134b0578463ffffffff166133e8612c87565b6133f291906141d7565b905060405180604001604052808265ffffffffffff1681526020016134208663ffffffff1663ffffffff1690565b6dffffffffffffffffffffffffffff90811690915267ffffffffffffffff89165f9081526001602090815260408083206001600160a01b038c16845282529091208351815494909201519092166601000000000000027fffffffffffffffffffffffff000000000000000000000000000000000000000090931665ffffffffffff9091161791909117905561357b565b67ffffffffffffffff87165f9081526001602090815260408083206001600160a01b038a1684529091528120546135049166010000000000009091046dffffffffffffffffffffffffffff16908690613737565b67ffffffffffffffff89165f9081526001602090815260408083206001600160a01b038c168452909152902080546dffffffffffffffffffffffffffff9093166601000000000000027fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff9093169290921790915590505b6040805163ffffffff8616815265ffffffffffff831660208201528315158183015290516001600160a01b0388169167ffffffffffffffff8a16917ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9181900360600190a35095945050505050565b5f808069ffffffffffffffffffff602086901c166dffffffffffffffffffffffffffff861665ffffffffffff604088901c811690871681111561362f57828282613633565b815f805b9550955095505050509250925092565b5f306001600160a01b031663feeb4e6a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613680573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136a491906142d2565b9050805f036136b1575050565b7f5e07febb5bd598f6b55406c9bf939d497fd39a2dbc2b5891f20f6640c3f325005f6136dd83426142e9565b6001600160a01b0385165f8181526020858152604091829020849055815192835282018390529192507f112bf9476a9dede256e63220549319653003f259281acdde16d536e0d64acdcc910160405180910390a150505050565b5f805f613753866dffffffffffffffffffffffffffff16611e6c565b90505f61378e8563ffffffff168763ffffffff168463ffffffff1611613779575f613783565b61378388856142fc565b63ffffffff16612d6b565b90508063ffffffff1661379f612c87565b6137a991906141d7565b925063ffffffff8616602083901b67ffffffff0000000016604085901b6dffffffffffff000000000000000016171793505050935093915050565b5f65ffffffffffff82111561382f576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526030600482015260248101839052604401610c12565b5090565b8051156138435780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381168114610af3575f80fd5b5f8083601f840112613899575f80fd5b50813567ffffffffffffffff8111156138b0575f80fd5b6020830191508360208260051b8501011115611972575f80fd5b803567ffffffffffffffff811681146138e1575f80fd5b919050565b5f805f80606085870312156138f9575f80fd5b843561390481613875565b9350602085013567ffffffffffffffff81111561391f575f80fd5b61392b87828801613889565b909450925061393e9050604086016138ca565b905092959194509250565b5f60208284031215613959575f80fd5b610d1c826138ca565b5f8060408385031215613973575f80fd5b823561397e81613875565b915060208301358015158114613992575f80fd5b809150509250929050565b5f602082840312156139ad575f80fd5b8135610d1c81613875565b5f80604083850312156139c9575f80fd5b82356139d481613875565b9150602083013561399281613875565b5f8083601f8401126139f4575f80fd5b50813567ffffffffffffffff811115613a0b575f80fd5b602083019150836020828501011115611972575f80fd5b5f805f60408486031215613a34575f80fd5b8335613a3f81613875565b9250602084013567ffffffffffffffff811115613a5a575f80fd5b613a66868287016139e4565b9497909650939450505050565b803563ffffffff811681146138e1575f80fd5b5f805f60608486031215613a98575f80fd5b613aa1846138ca565b92506020840135613ab181613875565b9150613abf60408501613a73565b90509250925092565b5f8060408385031215613ad9575f80fd5b6139d4836138ca565b5f8060408385031215613af3575f80fd5b613afc836138ca565b9150613b0a602084016138ca565b90509250929050565b5f60208284031215613b23575f80fd5b5035919050565b5f805f8060408587031215613b3d575f80fd5b843567ffffffffffffffff811115613b53575f80fd5b613b5f87828801613889565b909550935050602085013567ffffffffffffffff811115613b7e575f80fd5b613b8a87828801613889565b95989497509550505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610af3575f80fd5b5f8060408385031215613bd4575f80fd5b8235613bdf81613875565b9150602083013561399281613b96565b5f805f60608486031215613c01575f80fd5b8335613c0c81613875565b92506020840135613c1c81613875565b91506040840135613c2c81613b96565b809150509250925092565b5f805f60408486031215613c49575f80fd5b613a3f846138ca565b5f60208284031215613c62575f80fd5b813567ffffffffffffffff811115613c78575f80fd5b820160608185031215610d1c575f80fd5b5f8060408385031215613c9a575f80fd5b613ca3836138ca565b9150613b0a60208401613a73565b5f805f8060608587031215613cc4575f80fd5b8435613ccf81613875565b93506020850135613cdf81613875565b9250604085013567ffffffffffffffff811115613cfa575f80fd5b613b8a878288016139e4565b5f8060208385031215613d17575f80fd5b823567ffffffffffffffff811115613d2d575f80fd5b613d3985828601613889565b90969095509350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613df9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518087528060208301602089015e5f6020828901015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011688010196505050602082019150602084019350600181019050613d6b565b50929695505050505050565b5f8060408385031215613e16575f80fd5b8235613ca381613875565b5f805f8060608587031215613e34575f80fd5b8435613e3f81613875565b9350602085013567ffffffffffffffff811115613e5a575f80fd5b613e66878288016139e4565b909450925050604085013565ffffffffffff81168114613e84575f80fd5b939692955090935050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613ecc575f80fd5b8135610d1c81613b96565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f613f31602083018486613ed7565b949350505050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f6c575f80fd5b83018035915067ffffffffffffffff821115613f86575f80fd5b6020019150600781901b3603821315611972575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613ffd575f80fd5b83018035915067ffffffffffffffff821115614017575f80fd5b6020019150600681901b3603821315611972575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614061575f80fd5b83018035915067ffffffffffffffff82111561407b575f80fd5b6020019150606081023603821315611972575f80fd5b5f602082840312156140a1575f80fd5b610d1c82613a73565b5f602082840312156140ba575f80fd5b8151610d1c81613b96565b6001600160a01b03851681526001600160a01b0384166020820152606060408201525f61231d606083018486613ed7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8085851115614131575f80fd5b8386111561413d575f80fd5b5050820193919092039150565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261417d575f80fd5b83018035915067ffffffffffffffff821115614197575f80fd5b602001915036819003821315611972575f80fd5b5f81518060208401855e5f93019283525090919050565b828482375f8382015f815261231d81856141ab565b65ffffffffffff8181168382160190811115610a6557610a656140f6565b65ffffffffffff861681526001600160a01b03851660208201526001600160a01b0384166040820152608060608201525f614234608083018486613ed7565b979650505050505050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811690600484101561429e577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b6001600160a01b0384168152604060208201525f612c7e604083018486613ed7565b5f610d1c82846141ab565b5f602082840312156142e2575f80fd5b5051919050565b80820180821115610a6557610a656140f6565b63ffffffff8281168282160390811115610a6557610a656140f656fea2646970667358221220534e0a1a4e42a5823092220b0933a749b633279ae60c9f8788153da9ee2da74564736f6c634300081a0033000000000000000000000000838293b726a34edf8d4dbda7c273f59f1482f6060000000000000000000000000000000000000000000000000000000000000001