Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 21 from a total of 21 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Execute | 19223649 | 298 days ago | IN | 0 ETH | 0.00219438 | ||||
Execute | 19223643 | 298 days ago | IN | 0 ETH | 0.00234842 | ||||
Execute | 19223637 | 298 days ago | IN | 0 ETH | 0.00227583 | ||||
Execute | 19223624 | 298 days ago | IN | 0 ETH | 0.00223023 | ||||
Execute | 19221163 | 299 days ago | IN | 0 ETH | 0.00365591 | ||||
Execute | 19221157 | 299 days ago | IN | 0 ETH | 0.00377914 | ||||
Execute | 19221151 | 299 days ago | IN | 0 ETH | 0.00433243 | ||||
Execute | 19221124 | 299 days ago | IN | 0 ETH | 0.0043435 | ||||
Execute | 19221121 | 299 days ago | IN | 0 ETH | 0.00294654 | ||||
Execute | 19221108 | 299 days ago | IN | 0 ETH | 0.00419326 | ||||
Execute | 19221073 | 299 days ago | IN | 0 ETH | 0.00398172 | ||||
Execute | 19219436 | 299 days ago | IN | 0 ETH | 0.00555725 | ||||
Execute | 19219363 | 299 days ago | IN | 0 ETH | 0.00248544 | ||||
Execute | 19067383 | 320 days ago | IN | 0 ETH | 0.00152966 | ||||
Execute | 18514388 | 398 days ago | IN | 0 ETH | 0.00373976 | ||||
Execute | 18122089 | 453 days ago | IN | 0 ETH | 0.00244266 | ||||
Execute | 18122084 | 453 days ago | IN | 0 ETH | 0.00258454 | ||||
Execute | 18122081 | 453 days ago | IN | 0 ETH | 0.00217502 | ||||
Execute | 18122040 | 453 days ago | IN | 0 ETH | 0.00215193 | ||||
Execute | 18121852 | 453 days ago | IN | 0 ETH | 0.00227704 | ||||
Execute | 18121847 | 453 days ago | IN | 0 ETH | 0.00240237 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TimeLock
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-01-24 */ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.18; // OpenZeppelin Contracts (last updated v4.8.2) (governance/TimelockController.sol) // OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol) // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `_msgSender()` is missing `role`. * Overriding this function changes the behavior of the {onlyRole} modifier. * * Format of the revert message is described in {_checkRole}. * * _Available since v4.6._ */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(account), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * May emit a {RoleGranted} event. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } /** * @dev Contract module which acts as a timelocked controller. When set as the * owner of an `Ownable` smart contract, it enforces a timelock on all * `onlyOwner` maintenance operations. This gives time for users of the * controlled contract to exit before a potentially dangerous maintenance * operation is applied. * * By default, this contract is self administered, meaning administration tasks * have to go through the timelock process. The proposer (resp executor) role * is in charge of proposing (resp executing) operations. A common use case is * to position this {TimelockController} as the owner of a smart contract, with * a multisig or a DAO as the sole proposer. * * _Available since v3.3._ */ contract TimelockController is AccessControl, IERC721Receiver, IERC1155Receiver { bytes32 public constant TIMELOCK_ADMIN_ROLE = keccak256("TIMELOCK_ADMIN_ROLE"); bytes32 public constant PROPOSER_ROLE = keccak256("PROPOSER_ROLE"); bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE"); bytes32 public constant CANCELLER_ROLE = keccak256("CANCELLER_ROLE"); uint256 internal constant _DONE_TIMESTAMP = uint256(1); mapping(bytes32 => uint256) private _timestamps; uint256 private _minDelay; /** * @dev Emitted when a call is scheduled as part of operation `id`. */ event CallScheduled( bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data, bytes32 predecessor, uint256 delay ); /** * @dev Emitted when a call is performed as part of operation `id`. */ event CallExecuted(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data); /** * @dev Emitted when operation `id` is cancelled. */ event Cancelled(bytes32 indexed id); /** * @dev Emitted when the minimum delay for future operations is modified. */ event MinDelayChange(uint256 oldDuration, uint256 newDuration); /** * @dev Initializes the contract with the following parameters: * * - `minDelay`: initial minimum delay for operations * - `proposers`: accounts to be granted proposer and canceller roles * - `executors`: accounts to be granted executor role * - `admin`: optional account to be granted admin role; disable with zero address * * IMPORTANT: The optional admin can aid with initial configuration of roles after deployment * without being subject to delay, but this role should be subsequently renounced in favor of * administration through timelocked proposals. Previous versions of this contract would assign * this admin to the deployer automatically and should be renounced as well. */ constructor( uint256 minDelay, address[] memory proposers, address[] memory executors, address admin ) { _setRoleAdmin(TIMELOCK_ADMIN_ROLE, TIMELOCK_ADMIN_ROLE); _setRoleAdmin(PROPOSER_ROLE, TIMELOCK_ADMIN_ROLE); _setRoleAdmin(EXECUTOR_ROLE, TIMELOCK_ADMIN_ROLE); _setRoleAdmin(CANCELLER_ROLE, TIMELOCK_ADMIN_ROLE); // self administration _setupRole(TIMELOCK_ADMIN_ROLE, address(this)); // optional admin if (admin != address(0)) { _setupRole(TIMELOCK_ADMIN_ROLE, admin); } // register proposers and cancellers for (uint256 i = 0; i < proposers.length; ++i) { _setupRole(PROPOSER_ROLE, proposers[i]); _setupRole(CANCELLER_ROLE, proposers[i]); } // register executors for (uint256 i = 0; i < executors.length; ++i) { _setupRole(EXECUTOR_ROLE, executors[i]); } _minDelay = minDelay; emit MinDelayChange(0, minDelay); } /** * @dev Modifier to make a function callable only by a certain role. In * addition to checking the sender's role, `address(0)` 's role is also * considered. Granting a role to `address(0)` is equivalent to enabling * this role for everyone. */ modifier onlyRoleOrOpenRole(bytes32 role) { if (!hasRole(role, address(0))) { _checkRole(role, _msgSender()); } _; } /** * @dev Contract might receive/hold ETH as part of the maintenance process. */ receive() external payable {} /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, AccessControl) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns whether an id correspond to a registered operation. This * includes both Pending, Ready and Done operations. */ function isOperation(bytes32 id) public view virtual returns (bool registered) { return getTimestamp(id) > 0; } /** * @dev Returns whether an operation is pending or not. */ function isOperationPending(bytes32 id) public view virtual returns (bool pending) { return getTimestamp(id) > _DONE_TIMESTAMP; } /** * @dev Returns whether an operation is ready or not. */ function isOperationReady(bytes32 id) public view virtual returns (bool ready) { uint256 timestamp = getTimestamp(id); return timestamp > _DONE_TIMESTAMP && timestamp <= block.timestamp; } /** * @dev Returns whether an operation is done or not. */ function isOperationDone(bytes32 id) public view virtual returns (bool done) { return getTimestamp(id) == _DONE_TIMESTAMP; } /** * @dev Returns the timestamp at with an operation becomes ready (0 for * unset operations, 1 for done operations). */ function getTimestamp(bytes32 id) public view virtual returns (uint256 timestamp) { return _timestamps[id]; } /** * @dev Returns the minimum delay for an operation to become valid. * * This value can be changed by executing an operation that calls `updateDelay`. */ function getMinDelay() public view virtual returns (uint256 duration) { return _minDelay; } /** * @dev Returns the identifier of an operation containing a single * transaction. */ function hashOperation( address target, uint256 value, bytes calldata data, bytes32 predecessor, bytes32 salt ) public pure virtual returns (bytes32 hash) { return keccak256(abi.encode(target, value, data, predecessor, salt)); } /** * @dev Returns the identifier of an operation containing a batch of * transactions. */ function hashOperationBatch( address[] calldata targets, uint256[] calldata values, bytes[] calldata payloads, bytes32 predecessor, bytes32 salt ) public pure virtual returns (bytes32 hash) { return keccak256(abi.encode(targets, values, payloads, predecessor, salt)); } /** * @dev Schedule an operation containing a single transaction. * * Emits a {CallScheduled} event. * * Requirements: * * - the caller must have the 'proposer' role. */ function schedule( address target, uint256 value, bytes calldata data, bytes32 predecessor, bytes32 salt, uint256 delay ) public virtual onlyRole(PROPOSER_ROLE) { bytes32 id = hashOperation(target, value, data, predecessor, salt); _schedule(id, delay); emit CallScheduled(id, 0, target, value, data, predecessor, delay); } /** * @dev Schedule an operation containing a batch of transactions. * * Emits one {CallScheduled} event per transaction in the batch. * * Requirements: * * - the caller must have the 'proposer' role. */ function scheduleBatch( address[] calldata targets, uint256[] calldata values, bytes[] calldata payloads, bytes32 predecessor, bytes32 salt, uint256 delay ) public virtual onlyRole(PROPOSER_ROLE) { require(targets.length == values.length, "TimelockController: length mismatch"); require(targets.length == payloads.length, "TimelockController: length mismatch"); bytes32 id = hashOperationBatch(targets, values, payloads, predecessor, salt); _schedule(id, delay); for (uint256 i = 0; i < targets.length; ++i) { emit CallScheduled(id, i, targets[i], values[i], payloads[i], predecessor, delay); } } /** * @dev Schedule an operation that is to becomes valid after a given delay. */ function _schedule(bytes32 id, uint256 delay) private { require(!isOperation(id), "TimelockController: operation already scheduled"); require(delay >= getMinDelay(), "TimelockController: insufficient delay"); _timestamps[id] = block.timestamp + delay; } /** * @dev Cancel an operation. * * Requirements: * * - the caller must have the 'canceller' role. */ function cancel(bytes32 id) public virtual onlyRole(CANCELLER_ROLE) { require(isOperationPending(id), "TimelockController: operation cannot be cancelled"); delete _timestamps[id]; emit Cancelled(id); } /** * @dev Execute an (ready) operation containing a single transaction. * * Emits a {CallExecuted} event. * * Requirements: * * - the caller must have the 'executor' role. */ // This function can reenter, but it doesn't pose a risk because _afterCall checks that the proposal is pending, // thus any modifications to the operation during reentrancy should be caught. // slither-disable-next-line reentrancy-eth function execute( address target, uint256 value, bytes calldata payload, bytes32 predecessor, bytes32 salt ) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) { bytes32 id = hashOperation(target, value, payload, predecessor, salt); _beforeCall(id, predecessor); _execute(target, value, payload); emit CallExecuted(id, 0, target, value, payload); _afterCall(id); } /** * @dev Execute an (ready) operation containing a batch of transactions. * * Emits one {CallExecuted} event per transaction in the batch. * * Requirements: * * - the caller must have the 'executor' role. */ // This function can reenter, but it doesn't pose a risk because _afterCall checks that the proposal is pending, // thus any modifications to the operation during reentrancy should be caught. // slither-disable-next-line reentrancy-eth function executeBatch( address[] calldata targets, uint256[] calldata values, bytes[] calldata payloads, bytes32 predecessor, bytes32 salt ) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) { require(targets.length == values.length, "TimelockController: length mismatch"); require(targets.length == payloads.length, "TimelockController: length mismatch"); bytes32 id = hashOperationBatch(targets, values, payloads, predecessor, salt); _beforeCall(id, predecessor); for (uint256 i = 0; i < targets.length; ++i) { address target = targets[i]; uint256 value = values[i]; bytes calldata payload = payloads[i]; _execute(target, value, payload); emit CallExecuted(id, i, target, value, payload); } _afterCall(id); } /** * @dev Execute an operation's call. */ function _execute( address target, uint256 value, bytes calldata data ) internal virtual { (bool success, ) = target.call{value: value}(data); require(success, "TimelockController: underlying transaction reverted"); } /** * @dev Checks before execution of an operation's calls. */ function _beforeCall(bytes32 id, bytes32 predecessor) private view { require(isOperationReady(id), "TimelockController: operation is not ready"); require(predecessor == bytes32(0) || isOperationDone(predecessor), "TimelockController: missing dependency"); } /** * @dev Checks after execution of an operation's calls. */ function _afterCall(bytes32 id) private { require(isOperationReady(id), "TimelockController: operation is not ready"); _timestamps[id] = _DONE_TIMESTAMP; } /** * @dev Changes the minimum timelock duration for future operations. * * Emits a {MinDelayChange} event. * * Requirements: * * - the caller must be the timelock itself. This can only be achieved by scheduling and later executing * an operation where the timelock is the target and the data is the ABI-encoded call to this function. */ function updateDelay(uint256 newDelay) external virtual { require(msg.sender == address(this), "TimelockController: caller must be timelock"); emit MinDelayChange(_minDelay, newDelay); _minDelay = newDelay; } /** * @dev See {IERC721Receiver-onERC721Received}. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } /** * @dev See {IERC1155Receiver-onERC1155Received}. */ function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } /** * @dev See {IERC1155Receiver-onERC1155BatchReceived}. */ function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } } /// @title TimeLock. /// @author ClayStack. /// @notice Implementation of TimelockController. /// @dev By default, this contract is self administered, meaning administration tasks /// have to go through the Timelock process. The proposer (resp executor) role /// is in charge of proposing (resp executing) operations. contract TimeLock is TimelockController { /// @notice Initializes the contract with a given `_minDelay` and sets `_proposers` & `_executors`. /// @param _minDelay : Minimum delay for execution of the scheduled operation. /// @param _proposers : List of addresses that can schedule operations. /// @param _executors : List of addresses that can cancel/execute scheduled operations. /// @param _admin: optional account to be granted admin role; disable with zero address constructor( uint256 _minDelay, address[] memory _proposers, address[] memory _executors, address _admin ) TimelockController(_minDelay, _proposers, _executors, _admin) {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_minDelay","type":"uint256"},{"internalType":"address[]","name":"_proposers","type":"address[]"},{"internalType":"address[]","name":"_executors","type":"address[]"},{"internalType":"address","name":"_admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"CallExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"CallScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"Cancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"MinDelayChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"CANCELLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXECUTOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"executeBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getMinDelay","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"hashOperation","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"hashOperationBatch","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperation","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationDone","outputs":[{"internalType":"bool","name":"done","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationPending","outputs":[{"internalType":"bool","name":"pending","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationReady","outputs":[{"internalType":"bool","name":"ready","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"schedule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"scheduleBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"updateDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200230838038062002308833981016040819052620000349162000410565b8383838362000053600080516020620022888339815191528062000235565b6200007d600080516020620022a88339815191526000805160206200228883398151915262000235565b620000a7600080516020620022c88339815191526000805160206200228883398151915262000235565b620000d1600080516020620022e88339815191526000805160206200228883398151915262000235565b620000ec600080516020620022888339815191523062000280565b6001600160a01b03811615620001175762000117600080516020620022888339815191528262000280565b60005b83518110156200019d5762000161600080516020620022a88339815191528583815181106200014d576200014d62000497565b60200260200101516200028060201b60201c565b6200018a600080516020620022e88339815191528583815181106200014d576200014d62000497565b6200019581620004ad565b90506200011a565b5060005b8251811015620001e757620001d4600080516020620022c88339815191528483815181106200014d576200014d62000497565b620001df81620004ad565b9050620001a1565b5060028490556040805160008152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a15050505050505050620004d5565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6200028c828262000290565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200028c576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002ec3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200035e57600080fd5b919050565b600082601f8301126200037557600080fd5b815160206001600160401b038083111562000394576200039462000330565b8260051b604051601f19603f83011681018181108482111715620003bc57620003bc62000330565b604052938452858101830193838101925087851115620003db57600080fd5b83870191505b848210156200040557620003f58262000346565b83529183019190830190620003e1565b979650505050505050565b600080600080608085870312156200042757600080fd5b845160208601519094506001600160401b03808211156200044757600080fd5b620004558883890162000363565b945060408701519150808211156200046c57600080fd5b506200047b8782880162000363565b9250506200048c6060860162000346565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b600060018201620004ce57634e487b7160e01b600052601160045260246000fd5b5060010190565b611da380620004e56000396000f3fe6080604052600436106101bb5760003560e01c80638065657f116100ec578063bc197c811161008a578063d547741f11610064578063d547741f14610582578063e38335e5146105a2578063f23a6e61146105b5578063f27a0c92146105e157600080fd5b8063bc197c8114610509578063c4d252f514610535578063d45c44351461055557600080fd5b806391d14854116100c657806391d1485414610480578063a217fddf146104a0578063b08e51c0146104b5578063b1c5f427146104e957600080fd5b80638065657f1461040c5780638f2a0bb01461042c5780638f61f4f51461044c57600080fd5b8063248a9ca31161015957806331d507501161013357806331d507501461038c57806336568abe146103ac578063584b153e146103cc57806364d62353146103ec57600080fd5b8063248a9ca31461030b5780632ab0f5291461033b5780632f2ff15d1461036c57600080fd5b80630d3cf6fc116101955780630d3cf6fc14610260578063134008d31461029457806313bc9f20146102a7578063150b7a02146102c757600080fd5b806301d5062a146101c757806301ffc9a7146101e957806307bd02651461021e57600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101e76101e23660046113c0565b6105f6565b005b3480156101f557600080fd5b50610209610204366004611434565b61068b565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b506102527fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610215565b34801561026c57600080fd5b506102527f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b6101e76102a236600461145e565b6106b6565b3480156102b357600080fd5b506102096102c23660046114c9565b61076b565b3480156102d357600080fd5b506102f26102e2366004611597565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610215565b34801561031757600080fd5b506102526103263660046114c9565b60009081526020819052604090206001015490565b34801561034757600080fd5b506102096103563660046114c9565b6000908152600160208190526040909120541490565b34801561037857600080fd5b506101e76103873660046115fe565b610791565b34801561039857600080fd5b506102096103a73660046114c9565b6107bb565b3480156103b857600080fd5b506101e76103c73660046115fe565b6107d4565b3480156103d857600080fd5b506102096103e73660046114c9565b610857565b3480156103f857600080fd5b506101e76104073660046114c9565b61086d565b34801561041857600080fd5b5061025261042736600461145e565b610911565b34801561043857600080fd5b506101e761044736600461166e565b610950565b34801561045857600080fd5b506102527fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b34801561048c57600080fd5b5061020961049b3660046115fe565b610aa2565b3480156104ac57600080fd5b50610252600081565b3480156104c157600080fd5b506102527ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b3480156104f557600080fd5b5061025261050436600461171f565b610acb565b34801561051557600080fd5b506102f2610524366004611846565b63bc197c8160e01b95945050505050565b34801561054157600080fd5b506101e76105503660046114c9565b610b10565b34801561056157600080fd5b506102526105703660046114c9565b60009081526001602052604090205490565b34801561058e57600080fd5b506101e761059d3660046115fe565b610be5565b6101e76105b036600461171f565b610c0a565b3480156105c157600080fd5b506102f26105d03660046118ef565b63f23a6e6160e01b95945050505050565b3480156105ed57600080fd5b50600254610252565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161062081610d94565b6000610630898989898989610911565b905061063c8184610da1565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a6040516106789695949392919061197c565b60405180910390a3505050505050505050565b60006001600160e01b03198216630271189760e51b14806106b057506106b082610e90565b92915050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e636106e2816000610aa2565b6106f0576106f08133610ec5565b6000610700888888888888610911565b905061070c8185610f1e565b61071888888888610fba565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a60405161075094939291906119b9565b60405180910390a36107618161108d565b5050505050505050565b60008181526001602052604081205460018111801561078a5750428111155b9392505050565b6000828152602081905260409020600101546107ac81610d94565b6107b683836110c6565b505050565b60008181526001602052604081205481905b1192915050565b6001600160a01b03811633146108495760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610853828261114a565b5050565b60008181526001602081905260408220546107cd565b3330146108d05760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201526a62652074696d656c6f636b60a81b6064820152608401610840565b60025460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1600255565b600086868686868660405160200161092e9695949392919061197c565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161097a81610d94565b8887146109995760405162461bcd60e51b8152600401610840906119eb565b8885146109b85760405162461bcd60e51b8152600401610840906119eb565b60006109ca8b8b8b8b8b8b8b8b610acb565b90506109d68184610da1565b60005b8a811015610a945780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610a1657610a16611a2e565b9050602002016020810190610a2b9190611a44565b8d8d86818110610a3d57610a3d611a2e565b905060200201358c8c87818110610a5657610a56611a2e565b9050602002810190610a689190611a5f565b8c8b604051610a7c9695949392919061197c565b60405180910390a3610a8d81611abb565b90506109d9565b505050505050505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008888888888888888604051602001610aec989796959493929190611b65565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610b3a81610d94565b610b4382610857565b610ba95760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e2063616044820152701b9b9bdd0818994818d85b98d95b1b1959607a1b6064820152608401610840565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610c0081610d94565b6107b6838361114a565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610c36816000610aa2565b610c4457610c448133610ec5565b878614610c635760405162461bcd60e51b8152600401610840906119eb565b878414610c825760405162461bcd60e51b8152600401610840906119eb565b6000610c948a8a8a8a8a8a8a8a610acb565b9050610ca08185610f1e565b60005b89811015610d7e5760008b8b83818110610cbf57610cbf611a2e565b9050602002016020810190610cd49190611a44565b905060008a8a84818110610cea57610cea611a2e565b9050602002013590503660008a8a86818110610d0857610d08611a2e565b9050602002810190610d1a9190611a5f565b91509150610d2a84848484610fba565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610d6194939291906119b9565b60405180910390a35050505080610d7790611abb565b9050610ca3565b50610d888161108d565b50505050505050505050565b610d9e8133610ec5565b50565b610daa826107bb565b15610e0f5760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201526e1c9958591e481cd8da19591d5b1959608a1b6064820152608401610840565b600254811015610e705760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e746044820152652064656c617960d01b6064820152608401610840565b610e7a8142611c06565b6000928352600160205260409092209190915550565b60006001600160e01b03198216637965db0b60e01b14806106b057506301ffc9a760e01b6001600160e01b03198316146106b0565b610ecf8282610aa2565b61085357610edc816111af565b610ee78360206111c1565b604051602001610ef8929190611c3d565b60408051601f198184030181529082905262461bcd60e51b825261084091600401611cb2565b610f278261076b565b610f435760405162461bcd60e51b815260040161084090611ce5565b801580610f5f5750600081815260016020819052604090912054145b6108535760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e6720646570656044820152656e64656e637960d01b6064820152608401610840565b6000846001600160a01b0316848484604051610fd7929190611d2f565b60006040518083038185875af1925050503d8060008114611014576040519150601f19603f3d011682016040523d82523d6000602084013e611019565b606091505b50509050806110865760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e6720746044820152721c985b9cd858dd1a5bdb881c995d995c9d1959606a1b6064820152608401610840565b5050505050565b6110968161076b565b6110b25760405162461bcd60e51b815260040161084090611ce5565b600090815260016020819052604090912055565b6110d08282610aa2565b610853576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556111063390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6111548282610aa2565b15610853576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606106b06001600160a01b03831660145b606060006111d0836002611d3f565b6111db906002611c06565b6001600160401b038111156111f2576111f26114e2565b6040519080825280601f01601f19166020018201604052801561121c576020820181803683370190505b509050600360fc1b8160008151811061123757611237611a2e565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061126657611266611a2e565b60200101906001600160f81b031916908160001a905350600061128a846002611d3f565b611295906001611c06565b90505b600181111561130d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106112c9576112c9611a2e565b1a60f81b8282815181106112df576112df611a2e565b60200101906001600160f81b031916908160001a90535060049490941c9361130681611d56565b9050611298565b50831561078a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610840565b80356001600160a01b038116811461137357600080fd5b919050565b60008083601f84011261138a57600080fd5b5081356001600160401b038111156113a157600080fd5b6020830191508360208285010111156113b957600080fd5b9250929050565b600080600080600080600060c0888a0312156113db57600080fd5b6113e48861135c565b96506020880135955060408801356001600160401b0381111561140657600080fd5b6114128a828b01611378565b989b979a50986060810135976080820135975060a09091013595509350505050565b60006020828403121561144657600080fd5b81356001600160e01b03198116811461078a57600080fd5b60008060008060008060a0878903121561147757600080fd5b6114808761135c565b95506020870135945060408701356001600160401b038111156114a257600080fd5b6114ae89828a01611378565b979a9699509760608101359660809091013595509350505050565b6000602082840312156114db57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611520576115206114e2565b604052919050565b600082601f83011261153957600080fd5b81356001600160401b03811115611552576115526114e2565b611565601f8201601f19166020016114f8565b81815284602083860101111561157a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156115ad57600080fd5b6115b68561135c565b93506115c46020860161135c565b92506040850135915060608501356001600160401b038111156115e657600080fd5b6115f287828801611528565b91505092959194509250565b6000806040838503121561161157600080fd5b823591506116216020840161135c565b90509250929050565b60008083601f84011261163c57600080fd5b5081356001600160401b0381111561165357600080fd5b6020830191508360208260051b85010111156113b957600080fd5b600080600080600080600080600060c08a8c03121561168c57600080fd5b89356001600160401b03808211156116a357600080fd5b6116af8d838e0161162a565b909b50995060208c01359150808211156116c857600080fd5b6116d48d838e0161162a565b909950975060408c01359150808211156116ed57600080fd5b506116fa8c828d0161162a565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b03121561173b57600080fd5b88356001600160401b038082111561175257600080fd5b61175e8c838d0161162a565b909a50985060208b013591508082111561177757600080fd5b6117838c838d0161162a565b909850965060408b013591508082111561179c57600080fd5b506117a98b828c0161162a565b999c989b509699959896976060870135966080013595509350505050565b600082601f8301126117d857600080fd5b813560206001600160401b038211156117f3576117f36114e2565b8160051b6118028282016114f8565b928352848101820192828101908785111561181c57600080fd5b83870192505b8483101561183b57823582529183019190830190611822565b979650505050505050565b600080600080600060a0868803121561185e57600080fd5b6118678661135c565b94506118756020870161135c565b935060408601356001600160401b038082111561189157600080fd5b61189d89838a016117c7565b945060608801359150808211156118b357600080fd5b6118bf89838a016117c7565b935060808801359150808211156118d557600080fd5b506118e288828901611528565b9150509295509295909350565b600080600080600060a0868803121561190757600080fd5b6119108661135c565b945061191e6020870161135c565b9350604086013592506060860135915060808601356001600160401b0381111561194757600080fd5b6118e288828901611528565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a0604082015260006119a460a083018688611953565b60608301949094525060800152949350505050565b60018060a01b03851681528360208201526060604082015260006119e1606083018486611953565b9695505050505050565b60208082526023908201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616040820152620e8c6d60eb1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611a5657600080fd5b61078a8261135c565b6000808335601e19843603018112611a7657600080fd5b8301803591506001600160401b03821115611a9057600080fd5b6020019150368190038213156113b957600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611acd57611acd611aa5565b5060010190565b81835260006020808501808196508560051b810191508460005b87811015611b585782840389528135601e19883603018112611b0f57600080fd5b870185810190356001600160401b03811115611b2a57600080fd5b803603821315611b3957600080fd5b611b44868284611953565b9a87019a9550505090840190600101611aee565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b811015611ba6576001600160a01b03611b918461135c565b16825260209283019290910190600101611b78565b5083810360208501528881526001600160fb1b03891115611bc657600080fd5b8860051b9150818a60208301370182810360209081016040850152611bee9082018789611ad4565b60608401959095525050608001529695505050505050565b808201808211156106b0576106b0611aa5565b60005b83811015611c34578181015183820152602001611c1c565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611c75816017850160208801611c19565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ca6816028840160208801611c19565b01602801949350505050565b6020815260008251806020840152611cd1816040850160208701611c19565b601f01601f19169190910160400192915050565b6020808252602a908201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e206973604082015269206e6f7420726561647960b01b606082015260800190565b8183823760009101908152919050565b80820281158282048414176106b0576106b0611aa5565b600081611d6557611d65611aa5565b50600019019056fea264697066735822122037db28051c3f948226b8cacb1d7339f1cb9798ac59b446cb1e6beef9baee284964736f6c634300081200335f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5b09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1d8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63fd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f7830000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000006f0f7ea764a686fca103eb0495436ae94e227521000000000000000000000000000000000000000000000000000000000000000400000000000000000000000036e655069464be6202e0e4d5ee9f76034c0ad9b60000000000000000000000006f0f7ea764a686fca103eb0495436ae94e227521000000000000000000000000eb374984e791a70caf237f86e6387e7ffcb14f38000000000000000000000000e2f96d6c335caf7ab3c3cfdc5d0d7b7b002b93b2
Deployed Bytecode
0x6080604052600436106101bb5760003560e01c80638065657f116100ec578063bc197c811161008a578063d547741f11610064578063d547741f14610582578063e38335e5146105a2578063f23a6e61146105b5578063f27a0c92146105e157600080fd5b8063bc197c8114610509578063c4d252f514610535578063d45c44351461055557600080fd5b806391d14854116100c657806391d1485414610480578063a217fddf146104a0578063b08e51c0146104b5578063b1c5f427146104e957600080fd5b80638065657f1461040c5780638f2a0bb01461042c5780638f61f4f51461044c57600080fd5b8063248a9ca31161015957806331d507501161013357806331d507501461038c57806336568abe146103ac578063584b153e146103cc57806364d62353146103ec57600080fd5b8063248a9ca31461030b5780632ab0f5291461033b5780632f2ff15d1461036c57600080fd5b80630d3cf6fc116101955780630d3cf6fc14610260578063134008d31461029457806313bc9f20146102a7578063150b7a02146102c757600080fd5b806301d5062a146101c757806301ffc9a7146101e957806307bd02651461021e57600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101e76101e23660046113c0565b6105f6565b005b3480156101f557600080fd5b50610209610204366004611434565b61068b565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b506102527fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610215565b34801561026c57600080fd5b506102527f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b6101e76102a236600461145e565b6106b6565b3480156102b357600080fd5b506102096102c23660046114c9565b61076b565b3480156102d357600080fd5b506102f26102e2366004611597565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610215565b34801561031757600080fd5b506102526103263660046114c9565b60009081526020819052604090206001015490565b34801561034757600080fd5b506102096103563660046114c9565b6000908152600160208190526040909120541490565b34801561037857600080fd5b506101e76103873660046115fe565b610791565b34801561039857600080fd5b506102096103a73660046114c9565b6107bb565b3480156103b857600080fd5b506101e76103c73660046115fe565b6107d4565b3480156103d857600080fd5b506102096103e73660046114c9565b610857565b3480156103f857600080fd5b506101e76104073660046114c9565b61086d565b34801561041857600080fd5b5061025261042736600461145e565b610911565b34801561043857600080fd5b506101e761044736600461166e565b610950565b34801561045857600080fd5b506102527fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b34801561048c57600080fd5b5061020961049b3660046115fe565b610aa2565b3480156104ac57600080fd5b50610252600081565b3480156104c157600080fd5b506102527ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b3480156104f557600080fd5b5061025261050436600461171f565b610acb565b34801561051557600080fd5b506102f2610524366004611846565b63bc197c8160e01b95945050505050565b34801561054157600080fd5b506101e76105503660046114c9565b610b10565b34801561056157600080fd5b506102526105703660046114c9565b60009081526001602052604090205490565b34801561058e57600080fd5b506101e761059d3660046115fe565b610be5565b6101e76105b036600461171f565b610c0a565b3480156105c157600080fd5b506102f26105d03660046118ef565b63f23a6e6160e01b95945050505050565b3480156105ed57600080fd5b50600254610252565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161062081610d94565b6000610630898989898989610911565b905061063c8184610da1565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a6040516106789695949392919061197c565b60405180910390a3505050505050505050565b60006001600160e01b03198216630271189760e51b14806106b057506106b082610e90565b92915050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e636106e2816000610aa2565b6106f0576106f08133610ec5565b6000610700888888888888610911565b905061070c8185610f1e565b61071888888888610fba565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a60405161075094939291906119b9565b60405180910390a36107618161108d565b5050505050505050565b60008181526001602052604081205460018111801561078a5750428111155b9392505050565b6000828152602081905260409020600101546107ac81610d94565b6107b683836110c6565b505050565b60008181526001602052604081205481905b1192915050565b6001600160a01b03811633146108495760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610853828261114a565b5050565b60008181526001602081905260408220546107cd565b3330146108d05760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201526a62652074696d656c6f636b60a81b6064820152608401610840565b60025460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1600255565b600086868686868660405160200161092e9695949392919061197c565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161097a81610d94565b8887146109995760405162461bcd60e51b8152600401610840906119eb565b8885146109b85760405162461bcd60e51b8152600401610840906119eb565b60006109ca8b8b8b8b8b8b8b8b610acb565b90506109d68184610da1565b60005b8a811015610a945780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610a1657610a16611a2e565b9050602002016020810190610a2b9190611a44565b8d8d86818110610a3d57610a3d611a2e565b905060200201358c8c87818110610a5657610a56611a2e565b9050602002810190610a689190611a5f565b8c8b604051610a7c9695949392919061197c565b60405180910390a3610a8d81611abb565b90506109d9565b505050505050505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008888888888888888604051602001610aec989796959493929190611b65565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610b3a81610d94565b610b4382610857565b610ba95760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e2063616044820152701b9b9bdd0818994818d85b98d95b1b1959607a1b6064820152608401610840565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610c0081610d94565b6107b6838361114a565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610c36816000610aa2565b610c4457610c448133610ec5565b878614610c635760405162461bcd60e51b8152600401610840906119eb565b878414610c825760405162461bcd60e51b8152600401610840906119eb565b6000610c948a8a8a8a8a8a8a8a610acb565b9050610ca08185610f1e565b60005b89811015610d7e5760008b8b83818110610cbf57610cbf611a2e565b9050602002016020810190610cd49190611a44565b905060008a8a84818110610cea57610cea611a2e565b9050602002013590503660008a8a86818110610d0857610d08611a2e565b9050602002810190610d1a9190611a5f565b91509150610d2a84848484610fba565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610d6194939291906119b9565b60405180910390a35050505080610d7790611abb565b9050610ca3565b50610d888161108d565b50505050505050505050565b610d9e8133610ec5565b50565b610daa826107bb565b15610e0f5760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201526e1c9958591e481cd8da19591d5b1959608a1b6064820152608401610840565b600254811015610e705760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e746044820152652064656c617960d01b6064820152608401610840565b610e7a8142611c06565b6000928352600160205260409092209190915550565b60006001600160e01b03198216637965db0b60e01b14806106b057506301ffc9a760e01b6001600160e01b03198316146106b0565b610ecf8282610aa2565b61085357610edc816111af565b610ee78360206111c1565b604051602001610ef8929190611c3d565b60408051601f198184030181529082905262461bcd60e51b825261084091600401611cb2565b610f278261076b565b610f435760405162461bcd60e51b815260040161084090611ce5565b801580610f5f5750600081815260016020819052604090912054145b6108535760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e6720646570656044820152656e64656e637960d01b6064820152608401610840565b6000846001600160a01b0316848484604051610fd7929190611d2f565b60006040518083038185875af1925050503d8060008114611014576040519150601f19603f3d011682016040523d82523d6000602084013e611019565b606091505b50509050806110865760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e6720746044820152721c985b9cd858dd1a5bdb881c995d995c9d1959606a1b6064820152608401610840565b5050505050565b6110968161076b565b6110b25760405162461bcd60e51b815260040161084090611ce5565b600090815260016020819052604090912055565b6110d08282610aa2565b610853576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556111063390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6111548282610aa2565b15610853576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606106b06001600160a01b03831660145b606060006111d0836002611d3f565b6111db906002611c06565b6001600160401b038111156111f2576111f26114e2565b6040519080825280601f01601f19166020018201604052801561121c576020820181803683370190505b509050600360fc1b8160008151811061123757611237611a2e565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061126657611266611a2e565b60200101906001600160f81b031916908160001a905350600061128a846002611d3f565b611295906001611c06565b90505b600181111561130d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106112c9576112c9611a2e565b1a60f81b8282815181106112df576112df611a2e565b60200101906001600160f81b031916908160001a90535060049490941c9361130681611d56565b9050611298565b50831561078a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610840565b80356001600160a01b038116811461137357600080fd5b919050565b60008083601f84011261138a57600080fd5b5081356001600160401b038111156113a157600080fd5b6020830191508360208285010111156113b957600080fd5b9250929050565b600080600080600080600060c0888a0312156113db57600080fd5b6113e48861135c565b96506020880135955060408801356001600160401b0381111561140657600080fd5b6114128a828b01611378565b989b979a50986060810135976080820135975060a09091013595509350505050565b60006020828403121561144657600080fd5b81356001600160e01b03198116811461078a57600080fd5b60008060008060008060a0878903121561147757600080fd5b6114808761135c565b95506020870135945060408701356001600160401b038111156114a257600080fd5b6114ae89828a01611378565b979a9699509760608101359660809091013595509350505050565b6000602082840312156114db57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611520576115206114e2565b604052919050565b600082601f83011261153957600080fd5b81356001600160401b03811115611552576115526114e2565b611565601f8201601f19166020016114f8565b81815284602083860101111561157a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156115ad57600080fd5b6115b68561135c565b93506115c46020860161135c565b92506040850135915060608501356001600160401b038111156115e657600080fd5b6115f287828801611528565b91505092959194509250565b6000806040838503121561161157600080fd5b823591506116216020840161135c565b90509250929050565b60008083601f84011261163c57600080fd5b5081356001600160401b0381111561165357600080fd5b6020830191508360208260051b85010111156113b957600080fd5b600080600080600080600080600060c08a8c03121561168c57600080fd5b89356001600160401b03808211156116a357600080fd5b6116af8d838e0161162a565b909b50995060208c01359150808211156116c857600080fd5b6116d48d838e0161162a565b909950975060408c01359150808211156116ed57600080fd5b506116fa8c828d0161162a565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b03121561173b57600080fd5b88356001600160401b038082111561175257600080fd5b61175e8c838d0161162a565b909a50985060208b013591508082111561177757600080fd5b6117838c838d0161162a565b909850965060408b013591508082111561179c57600080fd5b506117a98b828c0161162a565b999c989b509699959896976060870135966080013595509350505050565b600082601f8301126117d857600080fd5b813560206001600160401b038211156117f3576117f36114e2565b8160051b6118028282016114f8565b928352848101820192828101908785111561181c57600080fd5b83870192505b8483101561183b57823582529183019190830190611822565b979650505050505050565b600080600080600060a0868803121561185e57600080fd5b6118678661135c565b94506118756020870161135c565b935060408601356001600160401b038082111561189157600080fd5b61189d89838a016117c7565b945060608801359150808211156118b357600080fd5b6118bf89838a016117c7565b935060808801359150808211156118d557600080fd5b506118e288828901611528565b9150509295509295909350565b600080600080600060a0868803121561190757600080fd5b6119108661135c565b945061191e6020870161135c565b9350604086013592506060860135915060808601356001600160401b0381111561194757600080fd5b6118e288828901611528565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a0604082015260006119a460a083018688611953565b60608301949094525060800152949350505050565b60018060a01b03851681528360208201526060604082015260006119e1606083018486611953565b9695505050505050565b60208082526023908201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616040820152620e8c6d60eb1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611a5657600080fd5b61078a8261135c565b6000808335601e19843603018112611a7657600080fd5b8301803591506001600160401b03821115611a9057600080fd5b6020019150368190038213156113b957600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611acd57611acd611aa5565b5060010190565b81835260006020808501808196508560051b810191508460005b87811015611b585782840389528135601e19883603018112611b0f57600080fd5b870185810190356001600160401b03811115611b2a57600080fd5b803603821315611b3957600080fd5b611b44868284611953565b9a87019a9550505090840190600101611aee565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b811015611ba6576001600160a01b03611b918461135c565b16825260209283019290910190600101611b78565b5083810360208501528881526001600160fb1b03891115611bc657600080fd5b8860051b9150818a60208301370182810360209081016040850152611bee9082018789611ad4565b60608401959095525050608001529695505050505050565b808201808211156106b0576106b0611aa5565b60005b83811015611c34578181015183820152602001611c1c565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611c75816017850160208801611c19565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ca6816028840160208801611c19565b01602801949350505050565b6020815260008251806020840152611cd1816040850160208701611c19565b601f01601f19169190910160400192915050565b6020808252602a908201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e206973604082015269206e6f7420726561647960b01b606082015260800190565b8183823760009101908152919050565b80820281158282048414176106b0576106b0611aa5565b600081611d6557611d65611aa5565b50600019019056fea264697066735822122037db28051c3f948226b8cacb1d7339f1cb9798ac59b446cb1e6beef9baee284964736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000006f0f7ea764a686fca103eb0495436ae94e227521000000000000000000000000000000000000000000000000000000000000000400000000000000000000000036e655069464be6202e0e4d5ee9f76034c0ad9b60000000000000000000000006f0f7ea764a686fca103eb0495436ae94e227521000000000000000000000000eb374984e791a70caf237f86e6387e7ffcb14f38000000000000000000000000e2f96d6c335caf7ab3c3cfdc5d0d7b7b002b93b2
-----Decoded View---------------
Arg [0] : _minDelay (uint256): 1
Arg [1] : _proposers (address[]): 0x6F0f7Ea764A686FCA103eB0495436ae94e227521
Arg [2] : _executors (address[]): 0x36e655069464Be6202e0e4D5Ee9f76034c0ad9b6,0x6F0f7Ea764A686FCA103eB0495436ae94e227521,0xEb374984e791a70CaF237f86E6387E7FFcB14F38,0xE2f96D6C335caf7Ab3C3CfDC5d0D7B7b002B93b2
Arg [3] : _admin (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000006f0f7ea764a686fca103eb0495436ae94e227521
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 00000000000000000000000036e655069464be6202e0e4d5ee9f76034c0ad9b6
Arg [8] : 0000000000000000000000006f0f7ea764a686fca103eb0495436ae94e227521
Arg [9] : 000000000000000000000000eb374984e791a70caf237f86e6387e7ffcb14f38
Arg [10] : 000000000000000000000000e2f96d6c335caf7ab3c3cfdc5d0d7b7b002b93b2
Deployed Bytecode Sourcemap
56572:714:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49115:413;;;;;;;;;;-1:-1:-1;49115:413:0;;;;;:::i;:::-;;:::i;:::-;;46179:230;;;;;;;;;;-1:-1:-1;46179:230:0;;;;;:::i;:::-;;:::i;:::-;;;1763:14:1;;1756:22;1738:41;;1726:2;1711:18;46179:230:0;;;;;;;;42578:66;;;;;;;;;;;;42618:26;42578:66;;;;;1936:25:1;;;1924:2;1909:18;42578:66:0;1790:177:1;42420:78:0;;;;;;;;;;;;42466:32;42420:78;;51788:472;;;;;;:::i;:::-;;:::i;47011:211::-;;;;;;;;;;-1:-1:-1;47011:211:0;;;;;:::i;:::-;;:::i;55383:207::-;;;;;;;;;;-1:-1:-1;55383:207:0;;;;;:::i;:::-;-1:-1:-1;;;55383:207:0;;;;;;;;;;-1:-1:-1;;;;;;4502:33:1;;;4484:52;;4472:2;4457:18;55383:207:0;4340:202:1;24996:131:0;;;;;;;;;;-1:-1:-1;24996:131:0;;;;;:::i;:::-;25070:7;25097:12;;;;;;;;;;:22;;;;24996:131;47306:138;;;;;;;;;;-1:-1:-1;47306:138:0;;;;;:::i;:::-;47372:9;47697:15;;;42778:1;47697:15;;;;;;;;;47401:35;;47306:138;25437:147;;;;;;;;;;-1:-1:-1;25437:147:0;;;;;:::i;:::-;;:::i;46571:125::-;;;;;;;;;;-1:-1:-1;46571:125:0;;;;;:::i;:::-;;:::i;26581:218::-;;;;;;;;;;-1:-1:-1;26581:218:0;;;;;:::i;:::-;;:::i;46783:143::-;;;;;;;;;;-1:-1:-1;46783:143:0;;;;;:::i;:::-;;:::i;55064:240::-;;;;;;;;;;-1:-1:-1;55064:240:0;;;;;:::i;:::-;;:::i;48137:292::-;;;;;;;;;;-1:-1:-1;48137:292:0;;;;;:::i;:::-;;:::i;49793:729::-;;;;;;;;;;-1:-1:-1;49793:729:0;;;;;:::i;:::-;;:::i;42505:66::-;;;;;;;;;;;;42545:26;42505:66;;23469:147;;;;;;;;;;-1:-1:-1;23469:147:0;;;;;:::i;:::-;;:::i;22574:49::-;;;;;;;;;;-1:-1:-1;22574:49:0;22619:4;22574:49;;42651:68;;;;;;;;;;;;42692:27;42651:68;;48551:333;;;;;;;;;;-1:-1:-1;48551:333:0;;;;;:::i;:::-;;:::i;55984:255::-;;;;;;;;;;-1:-1:-1;55984:255:0;;;;;:::i;:::-;-1:-1:-1;;;55984:255:0;;;;;;;;51065:235;;;;;;;;;;-1:-1:-1;51065:235:0;;;;;:::i;:::-;;:::i;47597:123::-;;;;;;;;;;-1:-1:-1;47597:123:0;;;;;:::i;:::-;47660:17;47697:15;;;:11;:15;;;;;;;47597:123;25877:149;;;;;;;;;;-1:-1:-1;25877:149:0;;;;;:::i;:::-;;:::i;52782:904::-;;;;;;:::i;:::-;;:::i;55671:227::-;;;;;;;;;;-1:-1:-1;55671:227:0;;;;;:::i;:::-;-1:-1:-1;;;55671:227:0;;;;;;;;47913:105;;;;;;;;;;-1:-1:-1;48001:9:0;;47913:105;;49115:413;42545:26;23065:16;23076:4;23065:10;:16::i;:::-;49346:10:::1;49359:53;49373:6;49381:5;49388:4;;49394:11;49407:4;49359:13;:53::i;:::-;49346:66;;49423:20;49433:2;49437:5;49423:9;:20::i;:::-;49477:1;49473:2;49459:61;49480:6;49488:5;49495:4;;49501:11;49514:5;49459:61;;;;;;;;;;;:::i;:::-;;;;;;;;49335:193;49115:413:::0;;;;;;;;:::o;46179:230::-;46288:4;-1:-1:-1;;;;;;46312:49:0;;-1:-1:-1;;;46312:49:0;;:89;;;46365:36;46389:11;46365:23;:36::i;:::-;46305:96;46179:230;-1:-1:-1;;46179:230:0:o;51788:472::-;42618:26;45868:25;45876:4;45890:1;45868:7;:25::i;:::-;45863:89;;45910:30;45921:4;3858:10;45910;:30::i;:::-;52015:10:::1;52028:56;52042:6;52050:5;52057:7;;52066:11;52079:4;52028:13;:56::i;:::-;52015:69;;52097:28;52109:2;52113:11;52097;:28::i;:::-;52136:32;52145:6;52153:5;52160:7;;52136:8;:32::i;:::-;52201:1;52197:2;52184:43;52204:6;52212:5;52219:7;;52184:43;;;;;;;;;:::i;:::-;;;;;;;;52238:14;52249:2;52238:10;:14::i;:::-;52004:256;51788:472:::0;;;;;;;:::o;47011:211::-;47078:10;47697:15;;;:11;:15;;;;;;42778:1;47155:9;:27;:59;;;;;47199:15;47186:9;:28;;47155:59;47148:66;47011:211;-1:-1:-1;;;47011:211:0:o;25437:147::-;25070:7;25097:12;;;;;;;;;;:22;;;23065:16;23076:4;23065:10;:16::i;:::-;25551:25:::1;25562:4;25568:7;25551:10;:25::i;:::-;25437:147:::0;;;:::o;46571:125::-;46633:15;47697;;;:11;:15;;;;;;46633;;46668:16;:20;;46571:125;-1:-1:-1;;46571:125:0:o;26581:218::-;-1:-1:-1;;;;;26677:23:0;;3858:10;26677:23;26669:83;;;;-1:-1:-1;;;26669:83:0;;11826:2:1;26669:83:0;;;11808:21:1;11865:2;11845:18;;;11838:30;11904:34;11884:18;;;11877:62;-1:-1:-1;;;11955:18:1;;;11948:45;12010:19;;26669:83:0;;;;;;;;;26765:26;26777:4;26783:7;26765:11;:26::i;:::-;26581:218;;:::o;46783:143::-;46852:12;47697:15;;;42778:1;47697:15;;;;;;;;46884:16;47597:123;55064:240;55139:10;55161:4;55139:27;55131:83;;;;-1:-1:-1;;;55131:83:0;;12242:2:1;55131:83:0;;;12224:21:1;12281:2;12261:18;;;12254:30;12320:34;12300:18;;;12293:62;-1:-1:-1;;;12371:18:1;;;12364:41;12422:19;;55131:83:0;12040:407:1;55131:83:0;55245:9;;55230:35;;;12626:25:1;;;12682:2;12667:18;;12660:34;;;55230:35:0;;12599:18:1;55230:35:0;;;;;;;55276:9;:20;55064:240::o;48137:292::-;48328:12;48381:6;48389:5;48396:4;;48402:11;48415:4;48370:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48360:61;;;;;;48353:68;;48137:292;;;;;;;;:::o;49793:729::-;42545:26;23065:16;23076:4;23065:10;:16::i;:::-;50067:31;;::::1;50059:79;;;;-1:-1:-1::0;;;50059:79:0::1;;;;;;;:::i;:::-;50157:33:::0;;::::1;50149:81;;;;-1:-1:-1::0;;;50149:81:0::1;;;;;;;:::i;:::-;50243:10;50256:64;50275:7;;50284:6;;50292:8;;50302:11;50315:4;50256:18;:64::i;:::-;50243:77;;50331:20;50341:2;50345:5;50331:9;:20::i;:::-;50367:9;50362:153;50382:18:::0;;::::1;50362:153;;;50445:1;50441:2;50427:76;50448:7;;50456:1;50448:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;50460:6;;50467:1;50460:9;;;;;;;:::i;:::-;;;;;;;50471:8;;50480:1;50471:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;50484;50497:5;50427:76;;;;;;;;;;;:::i;:::-;;;;;;;;50402:3;::::0;::::1;:::i;:::-;;;50362:153;;;;50048:474;49793:729:::0;;;;;;;;;;:::o;23469:147::-;23555:4;23579:12;;;;;;;;;;;-1:-1:-1;;;;;23579:29:0;;;;;;;;;;;;;;;23469:147::o;48551:333::-;48777:12;48830:7;;48839:6;;48847:8;;48857:11;48870:4;48819:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48809:67;;;;;;48802:74;;48551:333;;;;;;;;;;:::o;51065:235::-;42692:27;23065:16;23076:4;23065:10;:16::i;:::-;51152:22:::1;51171:2;51152:18;:22::i;:::-;51144:84;;;::::0;-1:-1:-1;;;51144:84:0;;17464:2:1;51144:84:0::1;::::0;::::1;17446:21:1::0;17503:2;17483:18;;;17476:30;17542:34;17522:18;;;17515:62;-1:-1:-1;;;17593:18:1;;;17586:47;17650:19;;51144:84:0::1;17262:413:1::0;51144:84:0::1;51246:15;::::0;;;:11:::1;:15;::::0;;;;;51239:22;;;51279:13;51258:2;;51279:13:::1;::::0;::::1;51065:235:::0;;:::o;25877:149::-;25070:7;25097:12;;;;;;;;;;:22;;;23065:16;23076:4;23065:10;:16::i;:::-;25992:26:::1;26004:4;26010:7;25992:11;:26::i;52782:904::-:0;42618:26;45868:25;45876:4;45890:1;45868:7;:25::i;:::-;45863:89;;45910:30;45921:4;3858:10;45910;:30::i;:::-;53049:31;;::::1;53041:79;;;;-1:-1:-1::0;;;53041:79:0::1;;;;;;;:::i;:::-;53139:33:::0;;::::1;53131:81;;;;-1:-1:-1::0;;;53131:81:0::1;;;;;;;:::i;:::-;53225:10;53238:64;53257:7;;53266:6;;53274:8;;53284:11;53297:4;53238:18;:64::i;:::-;53225:77;;53315:28;53327:2;53331:11;53315;:28::i;:::-;53359:9;53354:300;53374:18:::0;;::::1;53354:300;;;53414:14;53431:7;;53439:1;53431:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;53414:27;;53456:13;53472:6;;53479:1;53472:9;;;;;;;:::i;:::-;;;;;;;53456:25;;53496:22;;53521:8;;53530:1;53521:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;53496:36;;;;53547:32;53556:6;53564:5;53571:7;;53547:8;:32::i;:::-;53616:1;53612:2;53599:43;53619:6;53627:5;53634:7;;53599:43;;;;;;;;;:::i;:::-;;;;;;;;53399:255;;;;53394:3;;;;:::i;:::-;;;53354:300;;;;53664:14;53675:2;53664:10;:14::i;:::-;53030:656;52782:904:::0;;;;;;;;;:::o;23920:105::-;23987:30;23998:4;3858:10;45910;:30::i;23987:::-;23920:105;:::o;50629:285::-;50703:15;50715:2;50703:11;:15::i;:::-;50702:16;50694:76;;;;-1:-1:-1;;;50694:76:0;;17882:2:1;50694:76:0;;;17864:21:1;17921:2;17901:18;;;17894:30;17960:34;17940:18;;;17933:62;-1:-1:-1;;;18011:18:1;;;18004:45;18066:19;;50694:76:0;17680:411:1;50694:76:0;48001:9;;50789:5;:22;;50781:73;;;;-1:-1:-1;;;50781:73:0;;18298:2:1;50781:73:0;;;18280:21:1;18337:2;18317:18;;;18310:30;18376:34;18356:18;;;18349:62;-1:-1:-1;;;18427:18:1;;;18420:36;18473:19;;50781:73:0;18096:402:1;50781:73:0;50883:23;50901:5;50883:15;:23;:::i;:::-;50865:15;;;;:11;:15;;;;;;:41;;;;-1:-1:-1;50629:285:0:o;23173:204::-;23258:4;-1:-1:-1;;;;;;23282:47:0;;-1:-1:-1;;;23282:47:0;;:87;;-1:-1:-1;;;;;;;;;;20717:40:0;;;23333:36;20608:157;24315:492;24404:22;24412:4;24418:7;24404;:22::i;:::-;24399:401;;24592:28;24612:7;24592:19;:28::i;:::-;24693:38;24721:4;24728:2;24693:19;:38::i;:::-;24497:257;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24497:257:0;;;;;;;;;;-1:-1:-1;;;24443:345:0;;;;;;;:::i;54114:280::-;54200:20;54217:2;54200:16;:20::i;:::-;54192:75;;;;-1:-1:-1;;;54192:75:0;;;;;;;:::i;:::-;54286:25;;;:57;;-1:-1:-1;47372:9:0;47697:15;;;42778:1;47697:15;;;;;;;;;47401:35;54315:28;54278:108;;;;-1:-1:-1;;;54278:108:0;;20719:2:1;54278:108:0;;;20701:21:1;20758:2;20738:18;;;20731:30;20797:34;20777:18;;;20770:62;-1:-1:-1;;;20848:18:1;;;20841:36;20894:19;;54278:108:0;20517:402:1;53754:272:0;53887:12;53905:6;-1:-1:-1;;;;;53905:11:0;53924:5;53931:4;;53905:31;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53886:50;;;53955:7;53947:71;;;;-1:-1:-1;;;53947:71:0;;21402:2:1;53947:71:0;;;21384:21:1;21441:2;21421:18;;;21414:30;21480:34;21460:18;;;21453:62;-1:-1:-1;;;21531:18:1;;;21524:49;21590:19;;53947:71:0;21200:415:1;53947:71:0;53875:151;53754:272;;;;:::o;54481:178::-;54540:20;54557:2;54540:16;:20::i;:::-;54532:75;;;;-1:-1:-1;;;54532:75:0;;;;;;;:::i;:::-;54618:15;;;;42778:1;54618:15;;;;;;;;:33;54481:178::o;28178:238::-;28262:22;28270:4;28276:7;28262;:22::i;:::-;28257:152;;28301:6;:12;;;;;;;;;;;-1:-1:-1;;;;;28301:29:0;;;;;;;;;:36;;-1:-1:-1;;28301:36:0;28333:4;28301:36;;;28384:12;3858:10;;3778:98;28384:12;-1:-1:-1;;;;;28357:40:0;28375:7;-1:-1:-1;;;;;28357:40:0;28369:4;28357:40;;;;;;;;;;28178:238;;:::o;28596:239::-;28680:22;28688:4;28694:7;28680;:22::i;:::-;28676:152;;;28751:5;28719:12;;;;;;;;;;;-1:-1:-1;;;;;28719:29:0;;;;;;;;;;:37;;-1:-1:-1;;28719:37:0;;;28776:40;3858:10;;28719:12;;28776:40;;28751:5;28776:40;28596:239;;:::o;18863:151::-;18921:13;18954:52;-1:-1:-1;;;;;18966:22:0;;17018:2;18259:447;18334:13;18360:19;18392:10;18396:6;18392:1;:10;:::i;:::-;:14;;18405:1;18392:14;:::i;:::-;-1:-1:-1;;;;;18382:25:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18382:25:0;;18360:47;;-1:-1:-1;;;18418:6:0;18425:1;18418:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;18418:15:0;;;;;;;;;-1:-1:-1;;;18444:6:0;18451:1;18444:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;18444:15:0;;;;;;;;-1:-1:-1;18475:9:0;18487:10;18491:6;18487:1;:10;:::i;:::-;:14;;18500:1;18487:14;:::i;:::-;18475:26;;18470:131;18507:1;18503;:5;18470:131;;;-1:-1:-1;;;18551:5:0;18559:3;18551:11;18542:21;;;;;;;:::i;:::-;;;;18530:6;18537:1;18530:9;;;;;;;;:::i;:::-;;;;:33;-1:-1:-1;;;;;18530:33:0;;;;;;;;-1:-1:-1;18588:1:0;18578:11;;;;;18510:3;;;:::i;:::-;;;18470:131;;;-1:-1:-1;18619:10:0;;18611:55;;;;-1:-1:-1;;;18611:55:0;;22136:2:1;18611:55:0;;;22118:21:1;;;22155:18;;;22148:30;22214:34;22194:18;;;22187:62;22266:18;;18611:55:0;21934:356:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:347::-;243:8;253:6;307:3;300:4;292:6;288:17;284:27;274:55;;325:1;322;315:12;274:55;-1:-1:-1;348:20:1;;-1:-1:-1;;;;;380:30:1;;377:50;;;423:1;420;413:12;377:50;460:4;452:6;448:17;436:29;;512:3;505:4;496:6;488;484:19;480:30;477:39;474:59;;;529:1;526;519:12;474:59;192:347;;;;;:::o;544:758::-;659:6;667;675;683;691;699;707;760:3;748:9;739:7;735:23;731:33;728:53;;;777:1;774;767:12;728:53;800:29;819:9;800:29;:::i;:::-;790:39;;876:2;865:9;861:18;848:32;838:42;;931:2;920:9;916:18;903:32;-1:-1:-1;;;;;950:6:1;947:30;944:50;;;990:1;987;980:12;944:50;1029:58;1079:7;1070:6;1059:9;1055:22;1029:58;:::i;:::-;544:758;;;;-1:-1:-1;1106:8:1;1188:2;1173:18;;1160:32;;1239:3;1224:19;;1211:33;;-1:-1:-1;1291:3:1;1276:19;;;1263:33;;-1:-1:-1;544:758:1;-1:-1:-1;;;;544:758:1:o;1307:286::-;1365:6;1418:2;1406:9;1397:7;1393:23;1389:32;1386:52;;;1434:1;1431;1424:12;1386:52;1460:23;;-1:-1:-1;;;;;;1512:32:1;;1502:43;;1492:71;;1559:1;1556;1549:12;1972:689;2078:6;2086;2094;2102;2110;2118;2171:3;2159:9;2150:7;2146:23;2142:33;2139:53;;;2188:1;2185;2178:12;2139:53;2211:29;2230:9;2211:29;:::i;:::-;2201:39;;2287:2;2276:9;2272:18;2259:32;2249:42;;2342:2;2331:9;2327:18;2314:32;-1:-1:-1;;;;;2361:6:1;2358:30;2355:50;;;2401:1;2398;2391:12;2355:50;2440:58;2490:7;2481:6;2470:9;2466:22;2440:58;:::i;:::-;1972:689;;;;-1:-1:-1;2517:8:1;2599:2;2584:18;;2571:32;;2650:3;2635:19;;;2622:33;;-1:-1:-1;1972:689:1;-1:-1:-1;;;;1972:689:1:o;2666:180::-;2725:6;2778:2;2766:9;2757:7;2753:23;2749:32;2746:52;;;2794:1;2791;2784:12;2746:52;-1:-1:-1;2817:23:1;;2666:180;-1:-1:-1;2666:180:1:o;2851:127::-;2912:10;2907:3;2903:20;2900:1;2893:31;2943:4;2940:1;2933:15;2967:4;2964:1;2957:15;2983:275;3054:2;3048:9;3119:2;3100:13;;-1:-1:-1;;3096:27:1;3084:40;;-1:-1:-1;;;;;3139:34:1;;3175:22;;;3136:62;3133:88;;;3201:18;;:::i;:::-;3237:2;3230:22;2983:275;;-1:-1:-1;2983:275:1:o;3263:530::-;3305:5;3358:3;3351:4;3343:6;3339:17;3335:27;3325:55;;3376:1;3373;3366:12;3325:55;3412:6;3399:20;-1:-1:-1;;;;;3434:2:1;3431:26;3428:52;;;3460:18;;:::i;:::-;3504:55;3547:2;3528:13;;-1:-1:-1;;3524:27:1;3553:4;3520:38;3504:55;:::i;:::-;3584:2;3575:7;3568:19;3630:3;3623:4;3618:2;3610:6;3606:15;3602:26;3599:35;3596:55;;;3647:1;3644;3637:12;3596:55;3712:2;3705:4;3697:6;3693:17;3686:4;3677:7;3673:18;3660:55;3760:1;3735:16;;;3753:4;3731:27;3724:38;;;;3739:7;3263:530;-1:-1:-1;;;3263:530:1:o;3798:537::-;3893:6;3901;3909;3917;3970:3;3958:9;3949:7;3945:23;3941:33;3938:53;;;3987:1;3984;3977:12;3938:53;4010:29;4029:9;4010:29;:::i;:::-;4000:39;;4058:38;4092:2;4081:9;4077:18;4058:38;:::i;:::-;4048:48;;4143:2;4132:9;4128:18;4115:32;4105:42;;4198:2;4187:9;4183:18;4170:32;-1:-1:-1;;;;;4217:6:1;4214:30;4211:50;;;4257:1;4254;4247:12;4211:50;4280:49;4321:7;4312:6;4301:9;4297:22;4280:49;:::i;:::-;4270:59;;;3798:537;;;;;;;:::o;4547:254::-;4615:6;4623;4676:2;4664:9;4655:7;4651:23;4647:32;4644:52;;;4692:1;4689;4682:12;4644:52;4728:9;4715:23;4705:33;;4757:38;4791:2;4780:9;4776:18;4757:38;:::i;:::-;4747:48;;4547:254;;;;;:::o;4991:367::-;5054:8;5064:6;5118:3;5111:4;5103:6;5099:17;5095:27;5085:55;;5136:1;5133;5126:12;5085:55;-1:-1:-1;5159:20:1;;-1:-1:-1;;;;;5191:30:1;;5188:50;;;5234:1;5231;5224:12;5188:50;5271:4;5263:6;5259:17;5247:29;;5331:3;5324:4;5314:6;5311:1;5307:14;5299:6;5295:27;5291:38;5288:47;5285:67;;;5348:1;5345;5338:12;5363:1306;5559:6;5567;5575;5583;5591;5599;5607;5615;5623;5676:3;5664:9;5655:7;5651:23;5647:33;5644:53;;;5693:1;5690;5683:12;5644:53;5733:9;5720:23;-1:-1:-1;;;;;5803:2:1;5795:6;5792:14;5789:34;;;5819:1;5816;5809:12;5789:34;5858:70;5920:7;5911:6;5900:9;5896:22;5858:70;:::i;:::-;5947:8;;-1:-1:-1;5832:96:1;-1:-1:-1;6035:2:1;6020:18;;6007:32;;-1:-1:-1;6051:16:1;;;6048:36;;;6080:1;6077;6070:12;6048:36;6119:72;6183:7;6172:8;6161:9;6157:24;6119:72;:::i;:::-;6210:8;;-1:-1:-1;6093:98:1;-1:-1:-1;6298:2:1;6283:18;;6270:32;;-1:-1:-1;6314:16:1;;;6311:36;;;6343:1;6340;6333:12;6311:36;;6382:72;6446:7;6435:8;6424:9;6420:24;6382:72;:::i;:::-;5363:1306;;;;-1:-1:-1;5363:1306:1;;;;6473:8;;6555:2;6540:18;;6527:32;;6606:3;6591:19;;6578:33;;-1:-1:-1;6658:3:1;6643:19;6630:33;;-1:-1:-1;5363:1306:1;-1:-1:-1;;;;5363:1306:1:o;6674:1237::-;6861:6;6869;6877;6885;6893;6901;6909;6917;6970:3;6958:9;6949:7;6945:23;6941:33;6938:53;;;6987:1;6984;6977:12;6938:53;7027:9;7014:23;-1:-1:-1;;;;;7097:2:1;7089:6;7086:14;7083:34;;;7113:1;7110;7103:12;7083:34;7152:70;7214:7;7205:6;7194:9;7190:22;7152:70;:::i;:::-;7241:8;;-1:-1:-1;7126:96:1;-1:-1:-1;7329:2:1;7314:18;;7301:32;;-1:-1:-1;7345:16:1;;;7342:36;;;7374:1;7371;7364:12;7342:36;7413:72;7477:7;7466:8;7455:9;7451:24;7413:72;:::i;:::-;7504:8;;-1:-1:-1;7387:98:1;-1:-1:-1;7592:2:1;7577:18;;7564:32;;-1:-1:-1;7608:16:1;;;7605:36;;;7637:1;7634;7627:12;7605:36;;7676:72;7740:7;7729:8;7718:9;7714:24;7676:72;:::i;:::-;6674:1237;;;;-1:-1:-1;6674:1237:1;;;;7767:8;;7849:2;7834:18;;7821:32;;7900:3;7885:19;7872:33;;-1:-1:-1;6674:1237:1;-1:-1:-1;;;;6674:1237:1:o;7916:712::-;7970:5;8023:3;8016:4;8008:6;8004:17;8000:27;7990:55;;8041:1;8038;8031:12;7990:55;8077:6;8064:20;8103:4;-1:-1:-1;;;;;8122:2:1;8119:26;8116:52;;;8148:18;;:::i;:::-;8194:2;8191:1;8187:10;8217:28;8241:2;8237;8233:11;8217:28;:::i;:::-;8279:15;;;8349;;;8345:24;;;8310:12;;;;8381:15;;;8378:35;;;8409:1;8406;8399:12;8378:35;8445:2;8437:6;8433:15;8422:26;;8457:142;8473:6;8468:3;8465:15;8457:142;;;8539:17;;8527:30;;8490:12;;;;8577;;;;8457:142;;;8617:5;7916:712;-1:-1:-1;;;;;;;7916:712:1:o;8633:943::-;8787:6;8795;8803;8811;8819;8872:3;8860:9;8851:7;8847:23;8843:33;8840:53;;;8889:1;8886;8879:12;8840:53;8912:29;8931:9;8912:29;:::i;:::-;8902:39;;8960:38;8994:2;8983:9;8979:18;8960:38;:::i;:::-;8950:48;;9049:2;9038:9;9034:18;9021:32;-1:-1:-1;;;;;9113:2:1;9105:6;9102:14;9099:34;;;9129:1;9126;9119:12;9099:34;9152:61;9205:7;9196:6;9185:9;9181:22;9152:61;:::i;:::-;9142:71;;9266:2;9255:9;9251:18;9238:32;9222:48;;9295:2;9285:8;9282:16;9279:36;;;9311:1;9308;9301:12;9279:36;9334:63;9389:7;9378:8;9367:9;9363:24;9334:63;:::i;:::-;9324:73;;9450:3;9439:9;9435:19;9422:33;9406:49;;9480:2;9470:8;9467:16;9464:36;;;9496:1;9493;9486:12;9464:36;;9519:51;9562:7;9551:8;9540:9;9536:24;9519:51;:::i;:::-;9509:61;;;8633:943;;;;;;;;:::o;9763:606::-;9867:6;9875;9883;9891;9899;9952:3;9940:9;9931:7;9927:23;9923:33;9920:53;;;9969:1;9966;9959:12;9920:53;9992:29;10011:9;9992:29;:::i;:::-;9982:39;;10040:38;10074:2;10063:9;10059:18;10040:38;:::i;:::-;10030:48;;10125:2;10114:9;10110:18;10097:32;10087:42;;10176:2;10165:9;10161:18;10148:32;10138:42;;10231:3;10220:9;10216:19;10203:33;-1:-1:-1;;;;;10251:6:1;10248:30;10245:50;;;10291:1;10288;10281:12;10245:50;10314:49;10355:7;10346:6;10335:9;10331:22;10314:49;:::i;10374:266::-;10462:6;10457:3;10450:19;10514:6;10507:5;10500:4;10495:3;10491:14;10478:43;-1:-1:-1;10566:1:1;10541:16;;;10559:4;10537:27;;;10530:38;;;;10622:2;10601:15;;;-1:-1:-1;;10597:29:1;10588:39;;;10584:50;;10374:266::o;10645:557::-;10943:1;10939;10934:3;10930:11;10926:19;10918:6;10914:32;10903:9;10896:51;10983:6;10978:2;10967:9;10963:18;10956:34;11026:3;11021:2;11010:9;11006:18;10999:31;10877:4;11047:62;11104:3;11093:9;11089:19;11081:6;11073;11047:62;:::i;:::-;11140:2;11125:18;;11118:34;;;;-1:-1:-1;11183:3:1;11168:19;11161:35;11039:70;10645:557;-1:-1:-1;;;;10645:557:1:o;11207:412::-;11449:1;11445;11440:3;11436:11;11432:19;11424:6;11420:32;11409:9;11402:51;11489:6;11484:2;11473:9;11469:18;11462:34;11532:2;11527;11516:9;11512:18;11505:30;11383:4;11552:61;11609:2;11598:9;11594:18;11586:6;11578;11552:61;:::i;:::-;11544:69;11207:412;-1:-1:-1;;;;;;11207:412:1:o;13267:399::-;13469:2;13451:21;;;13508:2;13488:18;;;13481:30;13547:34;13542:2;13527:18;;13520:62;-1:-1:-1;;;13613:2:1;13598:18;;13591:33;13656:3;13641:19;;13267:399::o;13671:127::-;13732:10;13727:3;13723:20;13720:1;13713:31;13763:4;13760:1;13753:15;13787:4;13784:1;13777:15;13803:186;13862:6;13915:2;13903:9;13894:7;13890:23;13886:32;13883:52;;;13931:1;13928;13921:12;13883:52;13954:29;13973:9;13954:29;:::i;13994:521::-;14071:4;14077:6;14137:11;14124:25;14231:2;14227:7;14216:8;14200:14;14196:29;14192:43;14172:18;14168:68;14158:96;;14250:1;14247;14240:12;14158:96;14277:33;;14329:20;;;-1:-1:-1;;;;;;14361:30:1;;14358:50;;;14404:1;14401;14394:12;14358:50;14437:4;14425:17;;-1:-1:-1;14468:14:1;14464:27;;;14454:38;;14451:58;;;14505:1;14502;14495:12;14520:127;14581:10;14576:3;14572:20;14569:1;14562:31;14612:4;14609:1;14602:15;14636:4;14633:1;14626:15;14652:135;14691:3;14712:17;;;14709:43;;14732:18;;:::i;:::-;-1:-1:-1;14779:1:1;14768:13;;14652:135::o;14792:1067::-;14899:6;14894:3;14887:19;14869:3;14925:4;14966:2;14961:3;14957:12;14991:11;15018;15011:18;;15068:6;15065:1;15061:14;15054:5;15050:26;15038:38;;15099:5;15122:1;15132:701;15146:6;15143:1;15140:13;15132:701;;;15217:5;15211:4;15207:16;15202:3;15195:29;15276:6;15263:20;15366:2;15362:7;15354:5;15338:14;15334:26;15330:40;15310:18;15306:65;15296:93;;15385:1;15382;15375:12;15296:93;15417:30;;15525:16;;;;15476:21;-1:-1:-1;;;;;15557:32:1;;15554:52;;;15602:1;15599;15592:12;15554:52;15655:8;15639:14;15635:29;15626:7;15622:43;15619:63;;;15678:1;15675;15668:12;15619:63;15703:50;15748:4;15738:8;15729:7;15703:50;:::i;:::-;15811:12;;;;15695:58;-1:-1:-1;;;15776:15:1;;;;15168:1;15161:9;15132:701;;;-1:-1:-1;15849:4:1;;14792:1067;-1:-1:-1;;;;;;;14792:1067:1:o;15864:1393::-;16316:3;16329:22;;;16301:19;;16386:22;;;16268:4;16466:6;16439:3;16424:19;;16268:4;16500:235;16514:6;16511:1;16508:13;16500:235;;;-1:-1:-1;;;;;16579:26:1;16598:6;16579:26;:::i;:::-;16575:52;16563:65;;16651:4;16710:15;;;;16675:12;;;;16536:1;16529:9;16500:235;;;-1:-1:-1;16773:19:1;;;16766:4;16751:20;;16744:49;16802:19;;;-1:-1:-1;;;;;16833:31:1;;16830:51;;;16877:1;16874;16867:12;16830:51;16911:6;16908:1;16904:14;16890:28;;16964:6;16956;16949:4;16944:3;16940:14;16927:44;16990:16;17046:18;;;17066:4;17042:29;;;17037:2;17022:18;;17015:57;17089:75;;17150:13;;17142:6;17134;17089:75;:::i;:::-;17195:2;17180:18;;17173:34;;;;-1:-1:-1;;17238:3:1;17223:19;17216:35;17081:83;15864:1393;-1:-1:-1;;;;;;15864:1393:1:o;18503:125::-;18568:9;;;18589:10;;;18586:36;;;18602:18;;:::i;18633:250::-;18718:1;18728:113;18742:6;18739:1;18736:13;18728:113;;;18818:11;;;18812:18;18799:11;;;18792:39;18764:2;18757:10;18728:113;;;-1:-1:-1;;18875:1:1;18857:16;;18850:27;18633:250::o;18888:812::-;19299:25;19294:3;19287:38;19269:3;19354:6;19348:13;19370:75;19438:6;19433:2;19428:3;19424:12;19417:4;19409:6;19405:17;19370:75;:::i;:::-;-1:-1:-1;;;19504:2:1;19464:16;;;19496:11;;;19489:40;19554:13;;19576:76;19554:13;19638:2;19630:11;;19623:4;19611:17;;19576:76;:::i;:::-;19672:17;19691:2;19668:26;;18888:812;-1:-1:-1;;;;18888:812:1:o;19705:396::-;19854:2;19843:9;19836:21;19817:4;19886:6;19880:13;19929:6;19924:2;19913:9;19909:18;19902:34;19945:79;20017:6;20012:2;20001:9;19997:18;19992:2;19984:6;19980:15;19945:79;:::i;:::-;20085:2;20064:15;-1:-1:-1;;20060:29:1;20045:45;;;;20092:2;20041:54;;19705:396;-1:-1:-1;;19705:396:1:o;20106:406::-;20308:2;20290:21;;;20347:2;20327:18;;;20320:30;20386:34;20381:2;20366:18;;20359:62;-1:-1:-1;;;20452:2:1;20437:18;;20430:40;20502:3;20487:19;;20106:406::o;20924:271::-;21107:6;21099;21094:3;21081:33;21063:3;21133:16;;21158:13;;;21133:16;20924:271;-1:-1:-1;20924:271:1:o;21620:168::-;21693:9;;;21724;;21741:15;;;21735:22;;21721:37;21711:71;;21762:18;;:::i;21793:136::-;21832:3;21860:5;21850:39;;21869:18;;:::i;:::-;-1:-1:-1;;;21905:18:1;;21793:136::o
Swarm Source
ipfs://37db28051c3f948226b8cacb1d7339f1cb9798ac59b446cb1e6beef9baee2849
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.