ERC-20
Overview
Max Total Supply
302,311.3437234 GBONE
Holders
49
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,024.0640675 GBONEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Skeletonz_GBONEs
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-19 */ // SPDX-License-Identifier: MIT /* _/_/_/ _/ _/ _/ _/_/_/ _/ _/ _/ _/_/ _/ _/_/ _/_/_/_/ _/_/ _/_/_/ _/_/_/_/ _/ _/_/_/ _/_/_/ _/_/_/ _/_/ _/_/ _/_/_/_/ _/ _/_/_/_/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/_/ _/ _/ _/_/_/ _/ _/_/_/ _/_/ _/_/ _/ _/ _/_/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/_/ _/ _/_/ Handcrafted by zito */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @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] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/access/IAccessControl.sol // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @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; } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/access/AccessControl.sol // OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControl.sol) pragma solidity ^0.8.0; /** * @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, _msgSender()); _; } /** * @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 `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(uint160(account), 20), " 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. */ 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. */ 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`. */ 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. * * [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. */ 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. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: Skeletonz_GBONES.sol pragma solidity ^0.8.4; abstract contract Skeletonz_Contract { function balanceOf(address owner) virtual public view returns(uint); function totalSupply() virtual public view returns(uint); function ownerOf(uint tokenId) virtual public view returns(address); } abstract contract Skellies_Contract { function balanceOf(address owner) virtual public view returns(uint); function totalSupply() virtual public view returns(uint); function ownerOf(uint tokenId) virtual public view returns(address); function isMutantToken(uint256 tokenId) virtual public view returns(bool); function timestampOf(uint256 tokenId) virtual public view returns (uint64); } contract Skeletonz_GBONEs is ERC20, ReentrancyGuard, AccessControl { // Role Creation bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); bytes32 public constant PROXY_ROLE = keccak256("PROXY_ROLE"); struct DefaultSchedule { uint256 ceilToken; uint64 timestamp; } DefaultSchedule[] private _schedule; address _genesisContract; uint256 _genesisRate = 173610000000000; address _skellieContract; uint256 _mutantRate = 347220000000000; mapping(uint256 => uint64) private _genesis_claimTimestamp; mapping(uint256 => uint64) private _mutant_claimTimestamp; constructor(address genesisContract) ERC20("Skeletonz GBONEs", "GBONE") { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(ADMIN_ROLE,_msgSender()); _genesisContract = genesisContract; //set initial default time for first 666 tokens _schedule.push(DefaultSchedule({ceilToken: 666, timestamp: 1647772512})); } //--------------- WRITE FUNCTIONS function claimGenesisGbones(uint[] memory tokens) public nonReentrant { // load the contract Skeletonz_Contract source_data = Skeletonz_Contract(_genesisContract); uint256 totalClaimDelta = 0; uint64 claimTimestamp = uint64(block.timestamp); for (uint64 i=0; i<tokens.length;i++) { if (source_data.ownerOf(tokens[i]) == msg.sender) { totalClaimDelta += (claimTimestamp - getClaimTimeForGenesisToken(tokens[i])); _genesis_claimTimestamp[tokens[i]] = claimTimestamp; } } _mint(msg.sender, totalClaimDelta * _genesisRate); } function claimMutantGbones(uint[] memory tokens) public nonReentrant { uint256 totalClaimDelta = 0; uint64 claimTimestamp = uint64(block.timestamp); Skellies_Contract source_data = Skellies_Contract(_skellieContract); for (uint64 i=0; i<tokens.length;i++) { if (source_data.ownerOf(tokens[i]) == msg.sender && source_data.isMutantToken(tokens[i])) { totalClaimDelta += (claimTimestamp - getClaimTimeForSkellieToken(tokens[i])); _mutant_claimTimestamp[tokens[i]] = claimTimestamp; } } _mint(msg.sender,totalClaimDelta * _mutantRate); } function setSkellieContract(address skellieContract) external onlyRole(ADMIN_ROLE) { _skellieContract = skellieContract; } function pushSchedule(uint256 ceilToken, uint64 startTimestamp) external onlyRole(ADMIN_ROLE) { _schedule.push(DefaultSchedule({ceilToken: ceilToken,timestamp: startTimestamp})); } function burnGbones(address account, uint256 amount) external onlyRole(PROXY_ROLE) { _burn(account, amount); } //------------------- VIEW FUNCTIONS //-------------- GENESIS RELATED METHODS -------------------- function getClaimTimeForGenesisToken(uint256 tokenId) public view returns (uint64) { uint64 claimTimestamp = _genesis_claimTimestamp[tokenId]; if (claimTimestamp == 0) { //cycle through the schedule for (uint i=0; i<_schedule.length;i++) { if (tokenId < _schedule[i].ceilToken) { claimTimestamp = _schedule[i].timestamp; break; } } } return claimTimestamp; } function getTotalGenesisClaimAmountForOwner(address ownerAddress) public view returns (uint256) { uint[] memory tokens = getGenesisIDsByOwner(ownerAddress); uint256 totalClaimDelta = 0; uint64 claimTimestamp = uint64(block.timestamp); for (uint64 i=0; i<tokens.length;i++) { totalClaimDelta += (claimTimestamp - getClaimTimeForGenesisToken(tokens[i])); } return totalClaimDelta * _genesisRate; } function getGenesisIDsByOwner(address ownerAddress) public view returns (uint[] memory) { // load the contract Skeletonz_Contract source_data = Skeletonz_Contract(_genesisContract); uint[] memory output = new uint[](source_data.balanceOf(ownerAddress)); // set array length to number of tokens caller has uint total = source_data.totalSupply(); uint counter = 0; // iterate all tokens for (uint i = 0; i < total; i++) { // find the ones belonging to ownerAddress if (source_data.ownerOf(i) == ownerAddress) { // set output to those belonging to ownerAddress output[counter] = i; counter++; } } return output; } //------------ SKELLIE RELATED METHODS -------------------- function getClaimTimeForSkellieToken(uint256 tokenId) public view returns (uint64) { Skellies_Contract source_data = Skellies_Contract(_skellieContract); uint64 claimTimestamp = _mutant_claimTimestamp[tokenId]; uint64 txTimestamp = source_data.timestampOf(tokenId); if (txTimestamp > claimTimestamp) { claimTimestamp = txTimestamp; } return claimTimestamp; } function getTotalMutantClaimAmountForOwner(address ownerAddress) public view returns (uint256) { uint[] memory tokens = getSkellieIDsByOwner(ownerAddress); uint256 totalClaimDelta = 0; uint64 claimTimestamp = uint64(block.timestamp); Skellies_Contract source_data = Skellies_Contract(_skellieContract); for (uint64 i=0; i<tokens.length;i++) { if (source_data.isMutantToken(tokens[i])) { totalClaimDelta += (claimTimestamp - getClaimTimeForSkellieToken(tokens[i])); } } return totalClaimDelta * _mutantRate; } function getSkellieIDsByOwner(address ownerAddress) public view returns (uint[] memory) { // load the contract Skellies_Contract source_data = Skellies_Contract(_skellieContract); uint[] memory output = new uint[](source_data.balanceOf(ownerAddress)); // set array length to number of tokens caller has uint total = source_data.totalSupply(); uint counter = 0; // iterate all tokens for (uint i = 0; i < total; i++) { // find the ones belonging to ownerAddress if (source_data.ownerOf(i) == ownerAddress) { // set output to those belonging to ownerAddress output[counter] = i; counter++; } } return output; } function getScheduleSize() public view returns (uint) { return _schedule.length; } function getScheduleAtIndex(uint index) public view returns (uint256,uint64) { return (_schedule[index].ceilToken,_schedule[index].timestamp); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"genesisContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ADMIN_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":"PROXY_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnGbones","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"claimGenesisGbones","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"claimMutantGbones","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getClaimTimeForGenesisToken","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getClaimTimeForSkellieToken","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"}],"name":"getGenesisIDsByOwner","outputs":[{"internalType":"uint256[]","name":"","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":"uint256","name":"index","type":"uint256"}],"name":"getScheduleAtIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getScheduleSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"}],"name":"getSkellieIDsByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"}],"name":"getTotalGenesisClaimAmountForOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"}],"name":"getTotalMutantClaimAmountForOwner","outputs":[{"internalType":"uint256","name":"","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ceilToken","type":"uint256"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"name":"pushSchedule","outputs":[],"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":"skellieContract","type":"address"}],"name":"setSkellieContract","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052659de5ba61240060095566013bcb74c24800600b553480156200002657600080fd5b50604051620043f3380380620043f383398181016040528101906200004c91906200046e565b6040518060400160405280601081526020017f536b656c65746f6e7a2047424f4e4573000000000000000000000000000000008152506040518060400160405280600581526020017f47424f4e450000000000000000000000000000000000000000000000000000008152508160039080519060200190620000d0929190620003a7565b508060049080519060200190620000e9929190620003a7565b5050506001600581905550620001186000801b6200010c6200022c60201b60201c565b6200023460201b60201c565b620001597fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756200014d6200022c60201b60201c565b6200023460201b60201c565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506007604051806040016040528061029a8152602001636237036067ffffffffffffffff1681525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505062000558565b600033905090565b6200024682826200024a60201b60201c565b5050565b6200025c82826200033c60201b60201c565b620003385760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002dd6200022c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054620003b590620004d4565b90600052602060002090601f016020900481019282620003d9576000855562000425565b82601f10620003f457805160ff191683800117855562000425565b8280016001018555821562000425579182015b828111156200042457825182559160200191906001019062000407565b5b50905062000434919062000438565b5090565b5b808211156200045357600081600090555060010162000439565b5090565b60008151905062000468816200053e565b92915050565b60006020828403121562000487576200048662000539565b5b6000620004978482850162000457565b91505092915050565b6000620004ad82620004b4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006002820490506001821680620004ed57607f821691505b602082108114156200050457620005036200050a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200054981620004a0565b81146200055557600080fd5b50565b613e8b80620005686000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636e83bf181161011a578063a217fddf116100ad578063ced01cb91161007c578063ced01cb91461065f578063d547741f1461067b578063dd62ed3e14610697578063e48bf15b146106c7578063fe4cc1cc146106e5576101fb565b8063a217fddf146105c3578063a457c2d7146105e1578063a9059cbb14610611578063aace9dff14610641576101fb565b806379c1a552116100e957806379c1a5521461051557806391d148541461054557806395d89b41146105755780639d0fe6cf14610593576101fb565b80636e83bf181461047b57806370a08231146104ab57806375b238fc146104db57806379549171146104f9576101fb565b806323b872dd11610192578063313ce56711610161578063313ce567146103e057806336568abe146103fe578063395093511461041a578063512680081461044a576101fb565b806323b872dd14610348578063248a9ca3146103785780632cecbb17146103a85780632f2ff15d146103c4576101fb565b806309ee21c0116101ce57806309ee21c0146102ae5780630ee34654146102ca57806318160ddd146102fa5780631e5bd8b414610318576101fb565b806301ffc9a71461020057806306c7bbbc1461023057806306fdde0314610260578063095ea7b31461027e575b600080fd5b61021a60048036038101906102159190612e58565b610701565b6040516102279190613319565b60405180910390f35b61024a60048036038101906102459190612c48565b61077b565b6040516102579190613511565b60405180910390f35b610268610820565b604051610275919061334f565b60405180910390f35b61029860048036038101906102939190612d35565b6108b2565b6040516102a59190613319565b60405180910390f35b6102c860048036038101906102c39190612d35565b6108d5565b005b6102e460048036038101906102df9190612c48565b610916565b6040516102f191906132f7565b60405180910390f35b610302610bad565b60405161030f9190613511565b60405180910390f35b610332600480360381019061032d9190612e85565b610bb7565b60405161033f9190613555565b60405180910390f35b610362600480360381019061035d9190612ce2565b610c93565b60405161036f9190613319565b60405180910390f35b610392600480360381019061038d9190612deb565b610cc2565b60405161039f9190613334565b60405180910390f35b6103c260048036038101906103bd9190612edf565b610ce2565b005b6103de60048036038101906103d99190612e18565b610d9e565b005b6103e8610dc7565b6040516103f59190613570565b60405180910390f35b61041860048036038101906104139190612e18565b610dd0565b005b610434600480360381019061042f9190612d35565b610e53565b6040516104419190613319565b60405180910390f35b610464600480360381019061045f9190612e85565b610efd565b60405161047292919061352c565b60405180910390f35b61049560048036038101906104909190612c48565b610f69565b6040516104a291906132f7565b60405180910390f35b6104c560048036038101906104c09190612c48565b611200565b6040516104d29190613511565b60405180910390f35b6104e3611248565b6040516104f09190613334565b60405180910390f35b610513600480360381019061050e9190612d75565b61126c565b005b61052f600480360381019061052a9190612e85565b611579565b60405161053c9190613555565b60405180910390f35b61055f600480360381019061055a9190612e18565b611685565b60405161056c9190613319565b60405180910390f35b61057d6116f0565b60405161058a919061334f565b60405180910390f35b6105ad60048036038101906105a89190612c48565b611782565b6040516105ba9190613511565b60405180910390f35b6105cb611902565b6040516105d89190613334565b60405180910390f35b6105fb60048036038101906105f69190612d35565b611909565b6040516106089190613319565b60405180910390f35b61062b60048036038101906106269190612d35565b6119f3565b6040516106389190613319565b60405180910390f35b610649611a16565b6040516106569190613511565b60405180910390f35b61067960048036038101906106749190612d75565b611a23565b005b61069560048036038101906106909190612e18565b611c7b565b005b6106b160048036038101906106ac9190612ca2565b611ca4565b6040516106be9190613511565b60405180910390f35b6106cf611d2b565b6040516106dc9190613334565b60405180910390f35b6106ff60048036038101906106fa9190612c48565b611d4f565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610774575061077382611dc6565b5b9050919050565b60008061078783610916565b905060008042905060005b83518167ffffffffffffffff161015610807576107d2848267ffffffffffffffff16815181106107c5576107c461398b565b5b6020026020010151610bb7565b826107dd9190613720565b67ffffffffffffffff16836107f2919061363c565b925080806107ff906138fc565b915050610792565b50600954826108169190613692565b9350505050919050565b60606003805461082f90613850565b80601f016020809104026020016040519081016040528092919081815260200182805461085b90613850565b80156108a85780601f1061087d576101008083540402835291602001916108a8565b820191906000526020600020905b81548152906001019060200180831161088b57829003601f168201915b5050505050905090565b6000806108bd611e30565b90506108ca818585611e38565b600191505092915050565b7f77d72916e966418e6dc58a19999ae9934bef3f749f1547cde0a86e809f19c89b61090781610902611e30565b612003565b61091183836120a0565b505050565b60606000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161097a91906132dc565b60206040518083038186803b15801561099257600080fd5b505afa1580156109a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ca9190612eb2565b67ffffffffffffffff8111156109e3576109e26139ba565b5b604051908082528060200260200182016040528015610a115781602001602082028036833780820191505090505b50905060008273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a949190612eb2565b90506000805b82811015610ba0578673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610af29190613511565b60206040518083038186803b158015610b0a57600080fd5b505afa158015610b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b429190612c75565b73ffffffffffffffffffffffffffffffffffffffff161415610b8d5780848381518110610b7257610b7161398b565b5b6020026020010181815250508180610b89906138b3565b9250505b8080610b98906138b3565b915050610a9a565b5082945050505050919050565b6000600254905090565b600080600c600084815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008167ffffffffffffffff161415610c8a5760005b600780549050811015610c885760078181548110610c1b57610c1a61398b565b5b906000526020600020906002020160000154841015610c755760078181548110610c4857610c4761398b565b5b906000526020600020906002020160010160009054906101000a900467ffffffffffffffff169150610c88565b8080610c80906138b3565b915050610bfa565b505b80915050919050565b600080610c9e611e30565b9050610cab858285612277565b610cb6858585612303565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d1481610d0f611e30565b612003565b600760405180604001604052808581526020018467ffffffffffffffff1681525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050505050565b610da782610cc2565b610db881610db3611e30565b612003565b610dc28383612584565b505050565b60006012905090565b610dd8611e30565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c906134d1565b60405180910390fd5b610e4f8282612665565b5050565b600080610e5e611e30565b9050610ef2818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eed919061363c565b611e38565b600191505092915050565b60008060078381548110610f1457610f1361398b565b5b90600052602060002090600202016000015460078481548110610f3a57610f3961398b565b5b906000526020600020906002020160010160009054906101000a900467ffffffffffffffff1691509150915091565b60606000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610fcd91906132dc565b60206040518083038186803b158015610fe557600080fd5b505afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612eb2565b67ffffffffffffffff811115611036576110356139ba565b5b6040519080825280602002602001820160405280156110645781602001602082028036833780820191505090505b50905060008273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110af57600080fd5b505afa1580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e79190612eb2565b90506000805b828110156111f3578673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016111459190613511565b60206040518083038186803b15801561115d57600080fd5b505afa158015611171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111959190612c75565b73ffffffffffffffffffffffffffffffffffffffff1614156111e057808483815181106111c5576111c461398b565b5b60200260200101818152505081806111dc906138b3565b9250505b80806111eb906138b3565b9150506110ed565b5082945050505050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b600260055414156112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990613491565b60405180910390fd5b60026005819055506000804290506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b84518167ffffffffffffffff161015611553573373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e878467ffffffffffffffff168151811061134d5761134c61398b565b5b60200260200101516040518263ffffffff1660e01b81526004016113719190613511565b60206040518083038186803b15801561138957600080fd5b505afa15801561139d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c19190612c75565b73ffffffffffffffffffffffffffffffffffffffff1614801561148d57508173ffffffffffffffffffffffffffffffffffffffff16638d7bc4ac868367ffffffffffffffff16815181106114185761141761398b565b5b60200260200101516040518263ffffffff1660e01b815260040161143c9190613511565b60206040518083038186803b15801561145457600080fd5b505afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190612dbe565b5b15611540576114bf858267ffffffffffffffff16815181106114b2576114b161398b565b5b6020026020010151611579565b836114ca9190613720565b67ffffffffffffffff16846114df919061363c565b935082600d6000878467ffffffffffffffff16815181106115035761150261398b565b5b6020026020010151815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b808061154b906138fc565b9150506112ea565b5061156b33600b54856115669190613692565b612747565b505050600160058190555050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600d600085815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff16632d9c77e1866040518263ffffffff1660e01b81526004016116089190613511565b60206040518083038186803b15801561162057600080fd5b505afa158015611634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116589190612f1f565b90508167ffffffffffffffff168167ffffffffffffffff16111561167a578091505b819350505050919050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600480546116ff90613850565b80601f016020809104026020016040519081016040528092919081815260200182805461172b90613850565b80156117785780601f1061174d57610100808354040283529160200191611778565b820191906000526020600020905b81548152906001019060200180831161175b57829003601f168201915b5050505050905090565b60008061178e83610f69565b90506000804290506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b84518167ffffffffffffffff1610156118e8578173ffffffffffffffffffffffffffffffffffffffff16638d7bc4ac868367ffffffffffffffff168151811061180c5761180b61398b565b5b60200260200101516040518263ffffffff1660e01b81526004016118309190613511565b60206040518083038186803b15801561184857600080fd5b505afa15801561185c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118809190612dbe565b156118d5576118b2858267ffffffffffffffff16815181106118a5576118a461398b565b5b6020026020010151611579565b836118bd9190613720565b67ffffffffffffffff16846118d2919061363c565b93505b80806118e0906138fc565b9150506117c0565b50600b54836118f79190613692565b945050505050919050565b6000801b81565b600080611914611e30565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d1906134b1565b60405180910390fd5b6119e78286868403611e38565b60019250505092915050565b6000806119fe611e30565b9050611a0b818585612303565b600191505092915050565b6000600780549050905090565b60026005541415611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090613491565b60405180910390fd5b60026005819055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008042905060005b84518167ffffffffffffffff161015611c55573373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e878467ffffffffffffffff1681518110611b0457611b0361398b565b5b60200260200101516040518263ffffffff1660e01b8152600401611b289190613511565b60206040518083038186803b158015611b4057600080fd5b505afa158015611b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b789190612c75565b73ffffffffffffffffffffffffffffffffffffffff161415611c4257611bc1858267ffffffffffffffff1681518110611bb457611bb361398b565b5b6020026020010151610bb7565b82611bcc9190613720565b67ffffffffffffffff1683611be1919061363c565b925081600c6000878467ffffffffffffffff1681518110611c0557611c0461398b565b5b6020026020010151815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b8080611c4d906138fc565b915050611aa1565b50611c6d3360095484611c689190613692565b612747565b505050600160058190555050565b611c8482610cc2565b611c9581611c90611e30565b612003565b611c9f8383612665565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f77d72916e966418e6dc58a19999ae9934bef3f749f1547cde0a86e809f19c89b81565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611d8181611d7c611e30565b612003565b81600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90613471565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0f906133d1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff69190613511565b60405180910390a3505050565b61200d8282611685565b61209c576120328173ffffffffffffffffffffffffffffffffffffffff1660146128a7565b6120408360001c60206128a7565b6040516020016120519291906132a2565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612093919061334f565b60405180910390fd5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210790613431565b60405180910390fd5b61211c82600083612ae3565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156121a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612199906133b1565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546121f991906136ec565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161225e9190613511565b60405180910390a361227283600084612ae8565b505050565b60006122838484611ca4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146122fd57818110156122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e6906133f1565b60405180910390fd5b6122fc8484848403611e38565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90613451565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123da90613391565b60405180910390fd5b6123ee838383612ae3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246b90613411565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612507919061363c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161256b9190613511565b60405180910390a361257e848484612ae8565b50505050565b61258e8282611685565b6126615760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612606611e30565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61266f8282611685565b156127435760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506126e8611e30565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae906134f1565b60405180910390fd5b6127c360008383612ae3565b80600260008282546127d5919061363c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461282a919061363c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161288f9190613511565b60405180910390a36128a360008383612ae8565b5050565b6060600060028360026128ba9190613692565b6128c4919061363c565b67ffffffffffffffff8111156128dd576128dc6139ba565b5b6040519080825280601f01601f19166020018201604052801561290f5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106129475761294661398b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106129ab576129aa61398b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026129eb9190613692565b6129f5919061363c565b90505b6001811115612a95577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612a3757612a3661398b565b5b1a60f81b828281518110612a4e57612a4d61398b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612a8e90613826565b90506129f8565b5060008414612ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad090613371565b60405180910390fd5b8091505092915050565b505050565b505050565b6000612b00612afb846135b0565b61358b565b90508083825260208201905082856020860282011115612b2357612b226139ee565b5b60005b85811015612b535781612b398882612bf4565b845260208401935060208301925050600181019050612b26565b5050509392505050565b600081359050612b6c81613dcb565b92915050565b600081519050612b8181613dcb565b92915050565b600082601f830112612b9c57612b9b6139e9565b5b8135612bac848260208601612aed565b91505092915050565b600081519050612bc481613de2565b92915050565b600081359050612bd981613df9565b92915050565b600081359050612bee81613e10565b92915050565b600081359050612c0381613e27565b92915050565b600081519050612c1881613e27565b92915050565b600081359050612c2d81613e3e565b92915050565b600081519050612c4281613e3e565b92915050565b600060208284031215612c5e57612c5d6139f8565b5b6000612c6c84828501612b5d565b91505092915050565b600060208284031215612c8b57612c8a6139f8565b5b6000612c9984828501612b72565b91505092915050565b60008060408385031215612cb957612cb86139f8565b5b6000612cc785828601612b5d565b9250506020612cd885828601612b5d565b9150509250929050565b600080600060608486031215612cfb57612cfa6139f8565b5b6000612d0986828701612b5d565b9350506020612d1a86828701612b5d565b9250506040612d2b86828701612bf4565b9150509250925092565b60008060408385031215612d4c57612d4b6139f8565b5b6000612d5a85828601612b5d565b9250506020612d6b85828601612bf4565b9150509250929050565b600060208284031215612d8b57612d8a6139f8565b5b600082013567ffffffffffffffff811115612da957612da86139f3565b5b612db584828501612b87565b91505092915050565b600060208284031215612dd457612dd36139f8565b5b6000612de284828501612bb5565b91505092915050565b600060208284031215612e0157612e006139f8565b5b6000612e0f84828501612bca565b91505092915050565b60008060408385031215612e2f57612e2e6139f8565b5b6000612e3d85828601612bca565b9250506020612e4e85828601612b5d565b9150509250929050565b600060208284031215612e6e57612e6d6139f8565b5b6000612e7c84828501612bdf565b91505092915050565b600060208284031215612e9b57612e9a6139f8565b5b6000612ea984828501612bf4565b91505092915050565b600060208284031215612ec857612ec76139f8565b5b6000612ed684828501612c09565b91505092915050565b60008060408385031215612ef657612ef56139f8565b5b6000612f0485828601612bf4565b9250506020612f1585828601612c1e565b9150509250929050565b600060208284031215612f3557612f346139f8565b5b6000612f4384828501612c33565b91505092915050565b6000612f588383613266565b60208301905092915050565b612f6d81613754565b82525050565b6000612f7e826135ec565b612f88818561360f565b9350612f93836135dc565b8060005b83811015612fc4578151612fab8882612f4c565b9750612fb683613602565b925050600181019050612f97565b5085935050505092915050565b612fda81613766565b82525050565b612fe981613772565b82525050565b6000612ffa826135f7565b6130048185613620565b93506130148185602086016137f3565b61301d816139fd565b840191505092915050565b6000613033826135f7565b61303d8185613631565b935061304d8185602086016137f3565b80840191505092915050565b6000613066602083613620565b915061307182613a0e565b602082019050919050565b6000613089602383613620565b915061309482613a37565b604082019050919050565b60006130ac602283613620565b91506130b782613a86565b604082019050919050565b60006130cf602283613620565b91506130da82613ad5565b604082019050919050565b60006130f2601d83613620565b91506130fd82613b24565b602082019050919050565b6000613115602683613620565b915061312082613b4d565b604082019050919050565b6000613138602183613620565b915061314382613b9c565b604082019050919050565b600061315b602583613620565b915061316682613beb565b604082019050919050565b600061317e602483613620565b915061318982613c3a565b604082019050919050565b60006131a1601783613631565b91506131ac82613c89565b601782019050919050565b60006131c4601f83613620565b91506131cf82613cb2565b602082019050919050565b60006131e7602583613620565b91506131f282613cdb565b604082019050919050565b600061320a601183613631565b915061321582613d2a565b601182019050919050565b600061322d602f83613620565b915061323882613d53565b604082019050919050565b6000613250601f83613620565b915061325b82613da2565b602082019050919050565b61326f816137c8565b82525050565b61327e816137c8565b82525050565b61328d816137d2565b82525050565b61329c816137e6565b82525050565b60006132ad82613194565b91506132b98285613028565b91506132c4826131fd565b91506132d08284613028565b91508190509392505050565b60006020820190506132f16000830184612f64565b92915050565b600060208201905081810360008301526133118184612f73565b905092915050565b600060208201905061332e6000830184612fd1565b92915050565b60006020820190506133496000830184612fe0565b92915050565b600060208201905081810360008301526133698184612fef565b905092915050565b6000602082019050818103600083015261338a81613059565b9050919050565b600060208201905081810360008301526133aa8161307c565b9050919050565b600060208201905081810360008301526133ca8161309f565b9050919050565b600060208201905081810360008301526133ea816130c2565b9050919050565b6000602082019050818103600083015261340a816130e5565b9050919050565b6000602082019050818103600083015261342a81613108565b9050919050565b6000602082019050818103600083015261344a8161312b565b9050919050565b6000602082019050818103600083015261346a8161314e565b9050919050565b6000602082019050818103600083015261348a81613171565b9050919050565b600060208201905081810360008301526134aa816131b7565b9050919050565b600060208201905081810360008301526134ca816131da565b9050919050565b600060208201905081810360008301526134ea81613220565b9050919050565b6000602082019050818103600083015261350a81613243565b9050919050565b60006020820190506135266000830184613275565b92915050565b60006040820190506135416000830185613275565b61354e6020830184613284565b9392505050565b600060208201905061356a6000830184613284565b92915050565b60006020820190506135856000830184613293565b92915050565b60006135956135a6565b90506135a18282613882565b919050565b6000604051905090565b600067ffffffffffffffff8211156135cb576135ca6139ba565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613647826137c8565b9150613652836137c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136875761368661392d565b5b828201905092915050565b600061369d826137c8565b91506136a8836137c8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136e1576136e061392d565b5b828202905092915050565b60006136f7826137c8565b9150613702836137c8565b9250828210156137155761371461392d565b5b828203905092915050565b600061372b826137d2565b9150613736836137d2565b9250828210156137495761374861392d565b5b828203905092915050565b600061375f826137a8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60005b838110156138115780820151818401526020810190506137f6565b83811115613820576000848401525b50505050565b6000613831826137c8565b915060008214156138455761384461392d565b5b600182039050919050565b6000600282049050600182168061386857607f821691505b6020821081141561387c5761387b61395c565b5b50919050565b61388b826139fd565b810181811067ffffffffffffffff821117156138aa576138a96139ba565b5b80604052505050565b60006138be826137c8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138f1576138f061392d565b5b600182019050919050565b6000613907826137d2565b915067ffffffffffffffff8214156139225761392161392d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613dd481613754565b8114613ddf57600080fd5b50565b613deb81613766565b8114613df657600080fd5b50565b613e0281613772565b8114613e0d57600080fd5b50565b613e198161377c565b8114613e2457600080fd5b50565b613e30816137c8565b8114613e3b57600080fd5b50565b613e47816137d2565b8114613e5257600080fd5b5056fea2646970667358221220d1bc42021be05bf624e871d3402099c8295827a12a59780b41f5e2b85d52591864736f6c634300080700330000000000000000000000001f8c273ddc98163192273495dfa1e818c06bcd6d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636e83bf181161011a578063a217fddf116100ad578063ced01cb91161007c578063ced01cb91461065f578063d547741f1461067b578063dd62ed3e14610697578063e48bf15b146106c7578063fe4cc1cc146106e5576101fb565b8063a217fddf146105c3578063a457c2d7146105e1578063a9059cbb14610611578063aace9dff14610641576101fb565b806379c1a552116100e957806379c1a5521461051557806391d148541461054557806395d89b41146105755780639d0fe6cf14610593576101fb565b80636e83bf181461047b57806370a08231146104ab57806375b238fc146104db57806379549171146104f9576101fb565b806323b872dd11610192578063313ce56711610161578063313ce567146103e057806336568abe146103fe578063395093511461041a578063512680081461044a576101fb565b806323b872dd14610348578063248a9ca3146103785780632cecbb17146103a85780632f2ff15d146103c4576101fb565b806309ee21c0116101ce57806309ee21c0146102ae5780630ee34654146102ca57806318160ddd146102fa5780631e5bd8b414610318576101fb565b806301ffc9a71461020057806306c7bbbc1461023057806306fdde0314610260578063095ea7b31461027e575b600080fd5b61021a60048036038101906102159190612e58565b610701565b6040516102279190613319565b60405180910390f35b61024a60048036038101906102459190612c48565b61077b565b6040516102579190613511565b60405180910390f35b610268610820565b604051610275919061334f565b60405180910390f35b61029860048036038101906102939190612d35565b6108b2565b6040516102a59190613319565b60405180910390f35b6102c860048036038101906102c39190612d35565b6108d5565b005b6102e460048036038101906102df9190612c48565b610916565b6040516102f191906132f7565b60405180910390f35b610302610bad565b60405161030f9190613511565b60405180910390f35b610332600480360381019061032d9190612e85565b610bb7565b60405161033f9190613555565b60405180910390f35b610362600480360381019061035d9190612ce2565b610c93565b60405161036f9190613319565b60405180910390f35b610392600480360381019061038d9190612deb565b610cc2565b60405161039f9190613334565b60405180910390f35b6103c260048036038101906103bd9190612edf565b610ce2565b005b6103de60048036038101906103d99190612e18565b610d9e565b005b6103e8610dc7565b6040516103f59190613570565b60405180910390f35b61041860048036038101906104139190612e18565b610dd0565b005b610434600480360381019061042f9190612d35565b610e53565b6040516104419190613319565b60405180910390f35b610464600480360381019061045f9190612e85565b610efd565b60405161047292919061352c565b60405180910390f35b61049560048036038101906104909190612c48565b610f69565b6040516104a291906132f7565b60405180910390f35b6104c560048036038101906104c09190612c48565b611200565b6040516104d29190613511565b60405180910390f35b6104e3611248565b6040516104f09190613334565b60405180910390f35b610513600480360381019061050e9190612d75565b61126c565b005b61052f600480360381019061052a9190612e85565b611579565b60405161053c9190613555565b60405180910390f35b61055f600480360381019061055a9190612e18565b611685565b60405161056c9190613319565b60405180910390f35b61057d6116f0565b60405161058a919061334f565b60405180910390f35b6105ad60048036038101906105a89190612c48565b611782565b6040516105ba9190613511565b60405180910390f35b6105cb611902565b6040516105d89190613334565b60405180910390f35b6105fb60048036038101906105f69190612d35565b611909565b6040516106089190613319565b60405180910390f35b61062b60048036038101906106269190612d35565b6119f3565b6040516106389190613319565b60405180910390f35b610649611a16565b6040516106569190613511565b60405180910390f35b61067960048036038101906106749190612d75565b611a23565b005b61069560048036038101906106909190612e18565b611c7b565b005b6106b160048036038101906106ac9190612ca2565b611ca4565b6040516106be9190613511565b60405180910390f35b6106cf611d2b565b6040516106dc9190613334565b60405180910390f35b6106ff60048036038101906106fa9190612c48565b611d4f565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610774575061077382611dc6565b5b9050919050565b60008061078783610916565b905060008042905060005b83518167ffffffffffffffff161015610807576107d2848267ffffffffffffffff16815181106107c5576107c461398b565b5b6020026020010151610bb7565b826107dd9190613720565b67ffffffffffffffff16836107f2919061363c565b925080806107ff906138fc565b915050610792565b50600954826108169190613692565b9350505050919050565b60606003805461082f90613850565b80601f016020809104026020016040519081016040528092919081815260200182805461085b90613850565b80156108a85780601f1061087d576101008083540402835291602001916108a8565b820191906000526020600020905b81548152906001019060200180831161088b57829003601f168201915b5050505050905090565b6000806108bd611e30565b90506108ca818585611e38565b600191505092915050565b7f77d72916e966418e6dc58a19999ae9934bef3f749f1547cde0a86e809f19c89b61090781610902611e30565b612003565b61091183836120a0565b505050565b60606000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161097a91906132dc565b60206040518083038186803b15801561099257600080fd5b505afa1580156109a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ca9190612eb2565b67ffffffffffffffff8111156109e3576109e26139ba565b5b604051908082528060200260200182016040528015610a115781602001602082028036833780820191505090505b50905060008273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a949190612eb2565b90506000805b82811015610ba0578673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610af29190613511565b60206040518083038186803b158015610b0a57600080fd5b505afa158015610b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b429190612c75565b73ffffffffffffffffffffffffffffffffffffffff161415610b8d5780848381518110610b7257610b7161398b565b5b6020026020010181815250508180610b89906138b3565b9250505b8080610b98906138b3565b915050610a9a565b5082945050505050919050565b6000600254905090565b600080600c600084815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008167ffffffffffffffff161415610c8a5760005b600780549050811015610c885760078181548110610c1b57610c1a61398b565b5b906000526020600020906002020160000154841015610c755760078181548110610c4857610c4761398b565b5b906000526020600020906002020160010160009054906101000a900467ffffffffffffffff169150610c88565b8080610c80906138b3565b915050610bfa565b505b80915050919050565b600080610c9e611e30565b9050610cab858285612277565b610cb6858585612303565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d1481610d0f611e30565b612003565b600760405180604001604052808581526020018467ffffffffffffffff1681525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050505050565b610da782610cc2565b610db881610db3611e30565b612003565b610dc28383612584565b505050565b60006012905090565b610dd8611e30565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c906134d1565b60405180910390fd5b610e4f8282612665565b5050565b600080610e5e611e30565b9050610ef2818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eed919061363c565b611e38565b600191505092915050565b60008060078381548110610f1457610f1361398b565b5b90600052602060002090600202016000015460078481548110610f3a57610f3961398b565b5b906000526020600020906002020160010160009054906101000a900467ffffffffffffffff1691509150915091565b60606000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610fcd91906132dc565b60206040518083038186803b158015610fe557600080fd5b505afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612eb2565b67ffffffffffffffff811115611036576110356139ba565b5b6040519080825280602002602001820160405280156110645781602001602082028036833780820191505090505b50905060008273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110af57600080fd5b505afa1580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e79190612eb2565b90506000805b828110156111f3578673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016111459190613511565b60206040518083038186803b15801561115d57600080fd5b505afa158015611171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111959190612c75565b73ffffffffffffffffffffffffffffffffffffffff1614156111e057808483815181106111c5576111c461398b565b5b60200260200101818152505081806111dc906138b3565b9250505b80806111eb906138b3565b9150506110ed565b5082945050505050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b600260055414156112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990613491565b60405180910390fd5b60026005819055506000804290506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b84518167ffffffffffffffff161015611553573373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e878467ffffffffffffffff168151811061134d5761134c61398b565b5b60200260200101516040518263ffffffff1660e01b81526004016113719190613511565b60206040518083038186803b15801561138957600080fd5b505afa15801561139d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c19190612c75565b73ffffffffffffffffffffffffffffffffffffffff1614801561148d57508173ffffffffffffffffffffffffffffffffffffffff16638d7bc4ac868367ffffffffffffffff16815181106114185761141761398b565b5b60200260200101516040518263ffffffff1660e01b815260040161143c9190613511565b60206040518083038186803b15801561145457600080fd5b505afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190612dbe565b5b15611540576114bf858267ffffffffffffffff16815181106114b2576114b161398b565b5b6020026020010151611579565b836114ca9190613720565b67ffffffffffffffff16846114df919061363c565b935082600d6000878467ffffffffffffffff16815181106115035761150261398b565b5b6020026020010151815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b808061154b906138fc565b9150506112ea565b5061156b33600b54856115669190613692565b612747565b505050600160058190555050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600d600085815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff16632d9c77e1866040518263ffffffff1660e01b81526004016116089190613511565b60206040518083038186803b15801561162057600080fd5b505afa158015611634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116589190612f1f565b90508167ffffffffffffffff168167ffffffffffffffff16111561167a578091505b819350505050919050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600480546116ff90613850565b80601f016020809104026020016040519081016040528092919081815260200182805461172b90613850565b80156117785780601f1061174d57610100808354040283529160200191611778565b820191906000526020600020905b81548152906001019060200180831161175b57829003601f168201915b5050505050905090565b60008061178e83610f69565b90506000804290506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b84518167ffffffffffffffff1610156118e8578173ffffffffffffffffffffffffffffffffffffffff16638d7bc4ac868367ffffffffffffffff168151811061180c5761180b61398b565b5b60200260200101516040518263ffffffff1660e01b81526004016118309190613511565b60206040518083038186803b15801561184857600080fd5b505afa15801561185c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118809190612dbe565b156118d5576118b2858267ffffffffffffffff16815181106118a5576118a461398b565b5b6020026020010151611579565b836118bd9190613720565b67ffffffffffffffff16846118d2919061363c565b93505b80806118e0906138fc565b9150506117c0565b50600b54836118f79190613692565b945050505050919050565b6000801b81565b600080611914611e30565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d1906134b1565b60405180910390fd5b6119e78286868403611e38565b60019250505092915050565b6000806119fe611e30565b9050611a0b818585612303565b600191505092915050565b6000600780549050905090565b60026005541415611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090613491565b60405180910390fd5b60026005819055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008042905060005b84518167ffffffffffffffff161015611c55573373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e878467ffffffffffffffff1681518110611b0457611b0361398b565b5b60200260200101516040518263ffffffff1660e01b8152600401611b289190613511565b60206040518083038186803b158015611b4057600080fd5b505afa158015611b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b789190612c75565b73ffffffffffffffffffffffffffffffffffffffff161415611c4257611bc1858267ffffffffffffffff1681518110611bb457611bb361398b565b5b6020026020010151610bb7565b82611bcc9190613720565b67ffffffffffffffff1683611be1919061363c565b925081600c6000878467ffffffffffffffff1681518110611c0557611c0461398b565b5b6020026020010151815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b8080611c4d906138fc565b915050611aa1565b50611c6d3360095484611c689190613692565b612747565b505050600160058190555050565b611c8482610cc2565b611c9581611c90611e30565b612003565b611c9f8383612665565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f77d72916e966418e6dc58a19999ae9934bef3f749f1547cde0a86e809f19c89b81565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611d8181611d7c611e30565b612003565b81600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90613471565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0f906133d1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff69190613511565b60405180910390a3505050565b61200d8282611685565b61209c576120328173ffffffffffffffffffffffffffffffffffffffff1660146128a7565b6120408360001c60206128a7565b6040516020016120519291906132a2565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612093919061334f565b60405180910390fd5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210790613431565b60405180910390fd5b61211c82600083612ae3565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156121a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612199906133b1565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546121f991906136ec565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161225e9190613511565b60405180910390a361227283600084612ae8565b505050565b60006122838484611ca4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146122fd57818110156122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e6906133f1565b60405180910390fd5b6122fc8484848403611e38565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90613451565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123da90613391565b60405180910390fd5b6123ee838383612ae3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246b90613411565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612507919061363c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161256b9190613511565b60405180910390a361257e848484612ae8565b50505050565b61258e8282611685565b6126615760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612606611e30565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61266f8282611685565b156127435760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506126e8611e30565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae906134f1565b60405180910390fd5b6127c360008383612ae3565b80600260008282546127d5919061363c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461282a919061363c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161288f9190613511565b60405180910390a36128a360008383612ae8565b5050565b6060600060028360026128ba9190613692565b6128c4919061363c565b67ffffffffffffffff8111156128dd576128dc6139ba565b5b6040519080825280601f01601f19166020018201604052801561290f5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106129475761294661398b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106129ab576129aa61398b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026129eb9190613692565b6129f5919061363c565b90505b6001811115612a95577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612a3757612a3661398b565b5b1a60f81b828281518110612a4e57612a4d61398b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612a8e90613826565b90506129f8565b5060008414612ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad090613371565b60405180910390fd5b8091505092915050565b505050565b505050565b6000612b00612afb846135b0565b61358b565b90508083825260208201905082856020860282011115612b2357612b226139ee565b5b60005b85811015612b535781612b398882612bf4565b845260208401935060208301925050600181019050612b26565b5050509392505050565b600081359050612b6c81613dcb565b92915050565b600081519050612b8181613dcb565b92915050565b600082601f830112612b9c57612b9b6139e9565b5b8135612bac848260208601612aed565b91505092915050565b600081519050612bc481613de2565b92915050565b600081359050612bd981613df9565b92915050565b600081359050612bee81613e10565b92915050565b600081359050612c0381613e27565b92915050565b600081519050612c1881613e27565b92915050565b600081359050612c2d81613e3e565b92915050565b600081519050612c4281613e3e565b92915050565b600060208284031215612c5e57612c5d6139f8565b5b6000612c6c84828501612b5d565b91505092915050565b600060208284031215612c8b57612c8a6139f8565b5b6000612c9984828501612b72565b91505092915050565b60008060408385031215612cb957612cb86139f8565b5b6000612cc785828601612b5d565b9250506020612cd885828601612b5d565b9150509250929050565b600080600060608486031215612cfb57612cfa6139f8565b5b6000612d0986828701612b5d565b9350506020612d1a86828701612b5d565b9250506040612d2b86828701612bf4565b9150509250925092565b60008060408385031215612d4c57612d4b6139f8565b5b6000612d5a85828601612b5d565b9250506020612d6b85828601612bf4565b9150509250929050565b600060208284031215612d8b57612d8a6139f8565b5b600082013567ffffffffffffffff811115612da957612da86139f3565b5b612db584828501612b87565b91505092915050565b600060208284031215612dd457612dd36139f8565b5b6000612de284828501612bb5565b91505092915050565b600060208284031215612e0157612e006139f8565b5b6000612e0f84828501612bca565b91505092915050565b60008060408385031215612e2f57612e2e6139f8565b5b6000612e3d85828601612bca565b9250506020612e4e85828601612b5d565b9150509250929050565b600060208284031215612e6e57612e6d6139f8565b5b6000612e7c84828501612bdf565b91505092915050565b600060208284031215612e9b57612e9a6139f8565b5b6000612ea984828501612bf4565b91505092915050565b600060208284031215612ec857612ec76139f8565b5b6000612ed684828501612c09565b91505092915050565b60008060408385031215612ef657612ef56139f8565b5b6000612f0485828601612bf4565b9250506020612f1585828601612c1e565b9150509250929050565b600060208284031215612f3557612f346139f8565b5b6000612f4384828501612c33565b91505092915050565b6000612f588383613266565b60208301905092915050565b612f6d81613754565b82525050565b6000612f7e826135ec565b612f88818561360f565b9350612f93836135dc565b8060005b83811015612fc4578151612fab8882612f4c565b9750612fb683613602565b925050600181019050612f97565b5085935050505092915050565b612fda81613766565b82525050565b612fe981613772565b82525050565b6000612ffa826135f7565b6130048185613620565b93506130148185602086016137f3565b61301d816139fd565b840191505092915050565b6000613033826135f7565b61303d8185613631565b935061304d8185602086016137f3565b80840191505092915050565b6000613066602083613620565b915061307182613a0e565b602082019050919050565b6000613089602383613620565b915061309482613a37565b604082019050919050565b60006130ac602283613620565b91506130b782613a86565b604082019050919050565b60006130cf602283613620565b91506130da82613ad5565b604082019050919050565b60006130f2601d83613620565b91506130fd82613b24565b602082019050919050565b6000613115602683613620565b915061312082613b4d565b604082019050919050565b6000613138602183613620565b915061314382613b9c565b604082019050919050565b600061315b602583613620565b915061316682613beb565b604082019050919050565b600061317e602483613620565b915061318982613c3a565b604082019050919050565b60006131a1601783613631565b91506131ac82613c89565b601782019050919050565b60006131c4601f83613620565b91506131cf82613cb2565b602082019050919050565b60006131e7602583613620565b91506131f282613cdb565b604082019050919050565b600061320a601183613631565b915061321582613d2a565b601182019050919050565b600061322d602f83613620565b915061323882613d53565b604082019050919050565b6000613250601f83613620565b915061325b82613da2565b602082019050919050565b61326f816137c8565b82525050565b61327e816137c8565b82525050565b61328d816137d2565b82525050565b61329c816137e6565b82525050565b60006132ad82613194565b91506132b98285613028565b91506132c4826131fd565b91506132d08284613028565b91508190509392505050565b60006020820190506132f16000830184612f64565b92915050565b600060208201905081810360008301526133118184612f73565b905092915050565b600060208201905061332e6000830184612fd1565b92915050565b60006020820190506133496000830184612fe0565b92915050565b600060208201905081810360008301526133698184612fef565b905092915050565b6000602082019050818103600083015261338a81613059565b9050919050565b600060208201905081810360008301526133aa8161307c565b9050919050565b600060208201905081810360008301526133ca8161309f565b9050919050565b600060208201905081810360008301526133ea816130c2565b9050919050565b6000602082019050818103600083015261340a816130e5565b9050919050565b6000602082019050818103600083015261342a81613108565b9050919050565b6000602082019050818103600083015261344a8161312b565b9050919050565b6000602082019050818103600083015261346a8161314e565b9050919050565b6000602082019050818103600083015261348a81613171565b9050919050565b600060208201905081810360008301526134aa816131b7565b9050919050565b600060208201905081810360008301526134ca816131da565b9050919050565b600060208201905081810360008301526134ea81613220565b9050919050565b6000602082019050818103600083015261350a81613243565b9050919050565b60006020820190506135266000830184613275565b92915050565b60006040820190506135416000830185613275565b61354e6020830184613284565b9392505050565b600060208201905061356a6000830184613284565b92915050565b60006020820190506135856000830184613293565b92915050565b60006135956135a6565b90506135a18282613882565b919050565b6000604051905090565b600067ffffffffffffffff8211156135cb576135ca6139ba565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613647826137c8565b9150613652836137c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136875761368661392d565b5b828201905092915050565b600061369d826137c8565b91506136a8836137c8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136e1576136e061392d565b5b828202905092915050565b60006136f7826137c8565b9150613702836137c8565b9250828210156137155761371461392d565b5b828203905092915050565b600061372b826137d2565b9150613736836137d2565b9250828210156137495761374861392d565b5b828203905092915050565b600061375f826137a8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60005b838110156138115780820151818401526020810190506137f6565b83811115613820576000848401525b50505050565b6000613831826137c8565b915060008214156138455761384461392d565b5b600182039050919050565b6000600282049050600182168061386857607f821691505b6020821081141561387c5761387b61395c565b5b50919050565b61388b826139fd565b810181811067ffffffffffffffff821117156138aa576138a96139ba565b5b80604052505050565b60006138be826137c8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138f1576138f061392d565b5b600182019050919050565b6000613907826137d2565b915067ffffffffffffffff8214156139225761392161392d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613dd481613754565b8114613ddf57600080fd5b50565b613deb81613766565b8114613df657600080fd5b50565b613e0281613772565b8114613e0d57600080fd5b50565b613e198161377c565b8114613e2457600080fd5b50565b613e30816137c8565b8114613e3b57600080fd5b50565b613e47816137d2565b8114613e5257600080fd5b5056fea2646970667358221220d1bc42021be05bf624e871d3402099c8295827a12a59780b41f5e2b85d52591864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001f8c273ddc98163192273495dfa1e818c06bcd6d
-----Decoded View---------------
Arg [0] : genesisContract (address): 0x1f8C273DdC98163192273495DfA1e818C06bCD6d
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001f8c273ddc98163192273495dfa1e818c06bcd6d
Deployed Bytecode Sourcemap
39300:7116:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14492:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42872:475;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27767:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30118:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42086:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43355:804;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28887:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42335:529;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30899:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15919:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41882:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16312:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28729:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17360:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31603:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46251:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;45337:802;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29058:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39398:60;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41063:667;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44232:446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14788:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27986:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44686:643;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13879:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32346:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29391:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46147:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40395:660;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16704:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29647:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39465:60;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41738:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14492:204;14577:4;14616:32;14601:47;;;:11;:47;;;;:87;;;;14652:36;14676:11;14652:23;:36::i;:::-;14601:87;14594:94;;14492:204;;;:::o;42872:475::-;42959:7;42981:20;43004:34;43025:12;43004:20;:34::i;:::-;42981:57;;43049:23;43089:21;43120:15;43089:47;;43154:8;43149:141;43168:6;:13;43166:1;:15;;;43149:141;;;43239:38;43267:6;43274:1;43267:9;;;;;;;;;;:::i;:::-;;;;;;;;43239:27;:38::i;:::-;43222:14;:55;;;;:::i;:::-;43202:76;;;;;;;:::i;:::-;;;43182:3;;;;;:::i;:::-;;;;43149:141;;;;43327:12;;43309:15;:30;;;;:::i;:::-;43302:37;;;;;42872:475;;;:::o;27767:100::-;27821:13;27854:5;27847:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27767:100;:::o;30118:201::-;30201:4;30218:13;30234:12;:10;:12::i;:::-;30218:28;;30257:32;30266:5;30273:7;30282:6;30257:8;:32::i;:::-;30307:4;30300:11;;;30118:201;;;;:::o;42086:128::-;39502:23;14370:30;14381:4;14387:12;:10;:12::i;:::-;14370:10;:30::i;:::-;42182:22:::1;42188:7;42197:6;42182:5;:22::i;:::-;42086:128:::0;;;:::o;43355:804::-;43428:13;43486:30;43538:16;;;;;;;;;;;43486:69;;43568:20;43602:11;:21;;;43624:12;43602:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43591:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43568:70;;43702:10;43715:11;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43702:38;;43753:12;43818:6;43813:313;43834:5;43830:1;:9;43813:313;;;43949:12;43923:38;;:11;:19;;;43943:1;43923:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;;43919:196;;;44068:1;44050:6;44057:7;44050:15;;;;;;;;:::i;:::-;;;;;;;:19;;;;;44090:9;;;;;:::i;:::-;;;;43919:196;43841:3;;;;;:::i;:::-;;;;43813:313;;;;44145:6;44138:13;;;;;;43355:804;;;:::o;28887:108::-;28948:7;28975:12;;28968:19;;28887:108;:::o;42335:529::-;42410:6;42440:21;42464:23;:32;42488:7;42464:32;;;;;;;;;;;;;;;;;;;;;42440:56;;42531:1;42513:14;:19;;;42509:314;;;42596:6;42591:221;42608:9;:16;;;;42606:1;:18;42591:221;;;42663:9;42673:1;42663:12;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;;42653:7;:32;42649:148;;;42727:9;42737:1;42727:12;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;;;;;;;;;;;42710:39;;42772:5;;42649:148;42625:3;;;;;:::i;:::-;;;;42591:221;;;;42509:314;42842:14;42835:21;;;42335:529;;;:::o;30899:295::-;31030:4;31047:15;31065:12;:10;:12::i;:::-;31047:30;;31088:38;31104:4;31110:7;31119:6;31088:15;:38::i;:::-;31137:27;31147:4;31153:2;31157:6;31137:9;:27::i;:::-;31182:4;31175:11;;;30899:295;;;;;:::o;15919:131::-;15993:7;16020:6;:12;16027:4;16020:12;;;;;;;;;;;:22;;;16013:29;;15919:131;;;:::o;41882:196::-;39435:23;14370:30;14381:4;14387:12;:10;:12::i;:::-;14370:10;:30::i;:::-;41989:9:::1;42004:65;;;;;;;;42032:9;42004:65;;;;42053:14;42004:65;;;;::::0;41989:81:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41882:196:::0;;;:::o;16312:147::-;16395:18;16408:4;16395:12;:18::i;:::-;14370:30;14381:4;14387:12;:10;:12::i;:::-;14370:10;:30::i;:::-;16426:25:::1;16437:4;16443:7;16426:10;:25::i;:::-;16312:147:::0;;;:::o;28729:93::-;28787:5;28812:2;28805:9;;28729:93;:::o;17360:218::-;17467:12;:10;:12::i;:::-;17456:23;;:7;:23;;;17448:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;17544:26;17556:4;17562:7;17544:11;:26::i;:::-;17360:218;;:::o;31603:240::-;31691:4;31708:13;31724:12;:10;:12::i;:::-;31708:28;;31747:66;31756:5;31763:7;31802:10;31772:11;:18;31784:5;31772:18;;;;;;;;;;;;;;;:27;31791:7;31772:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;31747:8;:66::i;:::-;31831:4;31824:11;;;31603:240;;;;:::o;46251:160::-;46312:7;46320:6;46349:9;46359:5;46349:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;;;46376:9;46386:5;46376:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;;;;;;;;;;;;46341:62;;;;46251:160;;;:::o;45337:802::-;45410:13;45468:29;45518:16;;;;;;;;;;;45468:67;;45548:20;45582:11;:21;;;45604:12;45582:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45571:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45548:70;;45682:10;45695:11;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45682:38;;45733:12;45798:6;45793:313;45814:5;45810:1;:9;45793:313;;;45929:12;45903:38;;:11;:19;;;45923:1;45903:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;;45899:196;;;46048:1;46030:6;46037:7;46030:15;;;;;;;;:::i;:::-;;;;;;;:19;;;;;46070:9;;;;;:::i;:::-;;;;45899:196;45821:3;;;;;:::i;:::-;;;;45793:313;;;;46125:6;46118:13;;;;;;45337:802;;;:::o;29058:127::-;29132:7;29159:9;:18;29169:7;29159:18;;;;;;;;;;;;;;;;29152:25;;29058:127;;;:::o;39398:60::-;39435:23;39398:60;:::o;41063:667::-;10061:1;10659:7;;:19;;10651:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;10061:1;10792:7;:18;;;;41145:23:::1;41183:21:::0;41214:15:::1;41183:47;;41241:29;41291:16;;;;;;;;;;;41241:67;;41326:8;41321:334;41340:6;:13;41338:1;:15;;;41321:334;;;41412:10;41378:44;;:11;:19;;;41398:6;41405:1;41398:9;;;;;;;;;;:::i;:::-;;;;;;;;41378:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;;:84;;;;;41426:11;:25;;;41452:6;41459:1;41452:9;;;;;;;;;;:::i;:::-;;;;;;;;41426:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41378:84;41374:270;;;41520:38;41548:6;41555:1;41548:9;;;;;;;;;;:::i;:::-;;;;;;;;41520:27;:38::i;:::-;41503:14;:55;;;;:::i;:::-;41483:76;;;;;;;:::i;:::-;;;41614:14;41578:22;:33;41601:6;41608:1;41601:9;;;;;;;;;;:::i;:::-;;;;;;;;41578:33;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;41374:270;41354:3;;;;;:::i;:::-;;;;41321:334;;;;41675:47;41681:10;41710:11;;41692:15;:29;;;;:::i;:::-;41675:5;:47::i;:::-;41132:598;;;10017:1:::0;10971:7;:22;;;;41063:667;:::o;44232:446::-;44307:6;44328:29;44378:16;;;;;;;;;;;44328:67;;44408:21;44432:22;:31;44455:7;44432:31;;;;;;;;;;;;;;;;;;;;;44408:55;;44474:18;44495:11;:23;;;44519:7;44495:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44474:53;;44558:14;44544:28;;:11;:28;;;44540:89;;;44606:11;44589:28;;44540:89;44656:14;44649:21;;;;;44232:446;;;:::o;14788:147::-;14874:4;14898:6;:12;14905:4;14898:12;;;;;;;;;;;:20;;:29;14919:7;14898:29;;;;;;;;;;;;;;;;;;;;;;;;;14891:36;;14788:147;;;;:::o;27986:104::-;28042:13;28075:7;28068:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27986:104;:::o;44686:643::-;44772:7;44794:20;44817:34;44838:12;44817:20;:34::i;:::-;44794:57;;44862:23;44900:21;44931:15;44900:47;;44958:29;45008:16;;;;;;;;;;;44958:67;;45043:8;45038:235;45057:6;:13;45055:1;:15;;;45038:235;;;45095:11;:25;;;45121:6;45128:1;45121:9;;;;;;;;;;:::i;:::-;;;;;;;;45095:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45091:171;;;45189:38;45217:6;45224:1;45217:9;;;;;;;;;;:::i;:::-;;;;;;;;45189:27;:38::i;:::-;45172:14;:55;;;;:::i;:::-;45152:76;;;;;;;:::i;:::-;;;45091:171;45071:3;;;;;:::i;:::-;;;;45038:235;;;;45310:11;;45292:15;:29;;;;:::i;:::-;45285:36;;;;;;44686:643;;;:::o;13879:49::-;13924:4;13879:49;;;:::o;32346:438::-;32439:4;32456:13;32472:12;:10;:12::i;:::-;32456:28;;32495:24;32522:11;:18;32534:5;32522:18;;;;;;;;;;;;;;;:27;32541:7;32522:27;;;;;;;;;;;;;;;;32495:54;;32588:15;32568:16;:35;;32560:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32681:60;32690:5;32697:7;32725:15;32706:16;:34;32681:8;:60::i;:::-;32772:4;32765:11;;;;32346:438;;;;:::o;29391:193::-;29470:4;29487:13;29503:12;:10;:12::i;:::-;29487:28;;29526;29536:5;29543:2;29547:6;29526:9;:28::i;:::-;29572:4;29565:11;;;29391:193;;;;:::o;46147:96::-;46195:4;46219:9;:16;;;;46212:23;;46147:96;:::o;40395:660::-;10061:1;10659:7;;:19;;10651:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;10061:1;10792:7;:18;;;;40509:30:::1;40561:16;;;;;;;;;;;40509:69;;40591:23;40631:21:::0;40662:15:::1;40631:47;;40696:8;40691:295;40710:6;:13;40708:1;:15;;;40691:295;;;40782:10;40748:44;;:11;:19;;;40768:6;40775:1;40768:9;;;;;;;;;;:::i;:::-;;;;;;;;40748:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;;40744:231;;;40850:38;40878:6;40885:1;40878:9;;;;;;;;;;:::i;:::-;;;;;;;;40850:27;:38::i;:::-;40833:14;:55;;;;:::i;:::-;40813:76;;;;;;;:::i;:::-;;;40945:14;40908:23;:34;40932:6;40939:1;40932:9;;;;;;;;;;:::i;:::-;;;;;;;;40908:34;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;40744:231;40724:3;;;;;:::i;:::-;;;;40691:295;;;;40998:49;41004:10;41034:12;;41016:15;:30;;;;:::i;:::-;40998:5;:49::i;:::-;40465:590;;;10017:1:::0;10971:7;:22;;;;40395:660;:::o;16704:149::-;16788:18;16801:4;16788:12;:18::i;:::-;14370:30;14381:4;14387:12;:10;:12::i;:::-;14370:10;:30::i;:::-;16819:26:::1;16831:4;16837:7;16819:11;:26::i;:::-;16704:149:::0;;;:::o;29647:151::-;29736:7;29763:11;:18;29775:5;29763:18;;;;;;;;;;;;;;;:27;29782:7;29763:27;;;;;;;;;;;;;;;;29756:34;;29647:151;;;;:::o;39465:60::-;39502:23;39465:60;:::o;41738:136::-;39435:23;14370:30;14381:4;14387:12;:10;:12::i;:::-;14370:10;:30::i;:::-;41851:15:::1;41832:16;;:34;;;;;;;;;;;;;;;;;;41738:136:::0;;:::o;2920:157::-;3005:4;3044:25;3029:40;;;:11;:40;;;;3022:47;;2920:157;;;:::o;11687:98::-;11740:7;11767:10;11760:17;;11687:98;:::o;35982:380::-;36135:1;36118:19;;:5;:19;;;;36110:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36216:1;36197:21;;:7;:21;;;;36189:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36300:6;36270:11;:18;36282:5;36270:18;;;;;;;;;;;;;;;:27;36289:7;36270:27;;;;;;;;;;;;;;;:36;;;;36338:7;36322:32;;36331:5;36322:32;;;36347:6;36322:32;;;;;;:::i;:::-;;;;;;;;35982:380;;;:::o;15225:505::-;15314:22;15322:4;15328:7;15314;:22::i;:::-;15309:414;;15502:41;15530:7;15502:41;;15540:2;15502:19;:41::i;:::-;15616:38;15644:4;15636:13;;15651:2;15616:19;:38::i;:::-;15407:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15353:358;;;;;;;;;;;:::i;:::-;;;;;;;;15309:414;15225:505;;:::o;34953:591::-;35056:1;35037:21;;:7;:21;;;;35029:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35109:49;35130:7;35147:1;35151:6;35109:20;:49::i;:::-;35171:22;35196:9;:18;35206:7;35196:18;;;;;;;;;;;;;;;;35171:43;;35251:6;35233:14;:24;;35225:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35370:6;35353:14;:23;35332:9;:18;35342:7;35332:18;;;;;;;;;;;;;;;:44;;;;35414:6;35398:12;;:22;;;;;;;:::i;:::-;;;;;;;;35464:1;35438:37;;35447:7;35438:37;;;35468:6;35438:37;;;;;;:::i;:::-;;;;;;;;35488:48;35508:7;35525:1;35529:6;35488:19;:48::i;:::-;35018:526;34953:591;;:::o;36649:453::-;36784:24;36811:25;36821:5;36828:7;36811:9;:25::i;:::-;36784:52;;36871:17;36851:16;:37;36847:248;;36933:6;36913:16;:26;;36905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37017:51;37026:5;37033:7;37061:6;37042:16;:25;37017:8;:51::i;:::-;36847:248;36773:329;36649:453;;;:::o;33263:671::-;33410:1;33394:18;;:4;:18;;;;33386:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33487:1;33473:16;;:2;:16;;;;33465:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33542:38;33563:4;33569:2;33573:6;33542:20;:38::i;:::-;33593:19;33615:9;:15;33625:4;33615:15;;;;;;;;;;;;;;;;33593:37;;33664:6;33649:11;:21;;33641:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;33781:6;33767:11;:20;33749:9;:15;33759:4;33749:15;;;;;;;;;;;;;;;:38;;;;33826:6;33809:9;:13;33819:2;33809:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;33865:2;33850:26;;33859:4;33850:26;;;33869:6;33850:26;;;;;;:::i;:::-;;;;;;;;33889:37;33909:4;33915:2;33919:6;33889:19;:37::i;:::-;33375:559;33263:671;;;:::o;18861:238::-;18945:22;18953:4;18959:7;18945;:22::i;:::-;18940:152;;19016:4;18984:6;:12;18991:4;18984:12;;;;;;;;;;;:20;;:29;19005:7;18984:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;19067:12;:10;:12::i;:::-;19040:40;;19058:7;19040:40;;19052:4;19040:40;;;;;;;;;;18940:152;18861:238;;:::o;19231:239::-;19315:22;19323:4;19329:7;19315;:22::i;:::-;19311:152;;;19386:5;19354:6;:12;19361:4;19354:12;;;;;;;;;;;:20;;:29;19375:7;19354:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;19438:12;:10;:12::i;:::-;19411:40;;19429:7;19411:40;;19423:4;19411:40;;;;;;;;;;19311:152;19231:239;;:::o;34221:399::-;34324:1;34305:21;;:7;:21;;;;34297:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34375:49;34404:1;34408:7;34417:6;34375:20;:49::i;:::-;34453:6;34437:12;;:22;;;;;;;:::i;:::-;;;;;;;;34492:6;34470:9;:18;34480:7;34470:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;34535:7;34514:37;;34531:1;34514:37;;;34544:6;34514:37;;;;;;:::i;:::-;;;;;;;;34564:48;34592:1;34596:7;34605:6;34564:19;:48::i;:::-;34221:399;;:::o;4750:451::-;4825:13;4851:19;4896:1;4887:6;4883:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;4873:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4851:47;;4909:15;:6;4916:1;4909:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;4935;:6;4942:1;4935:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;4966:9;4991:1;4982:6;4978:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;4966:26;;4961:135;4998:1;4994;:5;4961:135;;;5033:12;5054:3;5046:5;:11;5033:25;;;;;;;:::i;:::-;;;;;5021:6;5028:1;5021:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;5083:1;5073:11;;;;;5001:3;;;;:::i;:::-;;;4961:135;;;;5123:1;5114:5;:10;5106:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;5186:6;5172:21;;;4750:451;;;;:::o;37702:125::-;;;;:::o;38431:124::-;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1063:370::-;1134:5;1183:3;1176:4;1168:6;1164:17;1160:27;1150:122;;1191:79;;:::i;:::-;1150:122;1308:6;1295:20;1333:94;1423:3;1415:6;1408:4;1400:6;1396:17;1333:94;:::i;:::-;1324:103;;1140:293;1063:370;;;;:::o;1439:137::-;1493:5;1524:6;1518:13;1509:22;;1540:30;1564:5;1540:30;:::i;:::-;1439:137;;;;:::o;1582:139::-;1628:5;1666:6;1653:20;1644:29;;1682:33;1709:5;1682:33;:::i;:::-;1582:139;;;;:::o;1727:137::-;1772:5;1810:6;1797:20;1788:29;;1826:32;1852:5;1826:32;:::i;:::-;1727:137;;;;:::o;1870:139::-;1916:5;1954:6;1941:20;1932:29;;1970:33;1997:5;1970:33;:::i;:::-;1870:139;;;;:::o;2015:143::-;2072:5;2103:6;2097:13;2088:22;;2119:33;2146:5;2119:33;:::i;:::-;2015:143;;;;:::o;2164:137::-;2209:5;2247:6;2234:20;2225:29;;2263:32;2289:5;2263:32;:::i;:::-;2164:137;;;;:::o;2307:141::-;2363:5;2394:6;2388:13;2379:22;;2410:32;2436:5;2410:32;:::i;:::-;2307:141;;;;:::o;2454:329::-;2513:6;2562:2;2550:9;2541:7;2537:23;2533:32;2530:119;;;2568:79;;:::i;:::-;2530:119;2688:1;2713:53;2758:7;2749:6;2738:9;2734:22;2713:53;:::i;:::-;2703:63;;2659:117;2454:329;;;;:::o;2789:351::-;2859:6;2908:2;2896:9;2887:7;2883:23;2879:32;2876:119;;;2914:79;;:::i;:::-;2876:119;3034:1;3059:64;3115:7;3106:6;3095:9;3091:22;3059:64;:::i;:::-;3049:74;;3005:128;2789:351;;;;:::o;3146:474::-;3214:6;3222;3271:2;3259:9;3250:7;3246:23;3242:32;3239:119;;;3277:79;;:::i;:::-;3239:119;3397:1;3422:53;3467:7;3458:6;3447:9;3443:22;3422:53;:::i;:::-;3412:63;;3368:117;3524:2;3550:53;3595:7;3586:6;3575:9;3571:22;3550:53;:::i;:::-;3540:63;;3495:118;3146:474;;;;;:::o;3626:619::-;3703:6;3711;3719;3768:2;3756:9;3747:7;3743:23;3739:32;3736:119;;;3774:79;;:::i;:::-;3736:119;3894:1;3919:53;3964:7;3955:6;3944:9;3940:22;3919:53;:::i;:::-;3909:63;;3865:117;4021:2;4047:53;4092:7;4083:6;4072:9;4068:22;4047:53;:::i;:::-;4037:63;;3992:118;4149:2;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4120:118;3626:619;;;;;:::o;4251:474::-;4319:6;4327;4376:2;4364:9;4355:7;4351:23;4347:32;4344:119;;;4382:79;;:::i;:::-;4344:119;4502:1;4527:53;4572:7;4563:6;4552:9;4548:22;4527:53;:::i;:::-;4517:63;;4473:117;4629:2;4655:53;4700:7;4691:6;4680:9;4676:22;4655:53;:::i;:::-;4645:63;;4600:118;4251:474;;;;;:::o;4731:539::-;4815:6;4864:2;4852:9;4843:7;4839:23;4835:32;4832:119;;;4870:79;;:::i;:::-;4832:119;5018:1;5007:9;5003:17;4990:31;5048:18;5040:6;5037:30;5034:117;;;5070:79;;:::i;:::-;5034:117;5175:78;5245:7;5236:6;5225:9;5221:22;5175:78;:::i;:::-;5165:88;;4961:302;4731:539;;;;:::o;5276:345::-;5343:6;5392:2;5380:9;5371:7;5367:23;5363:32;5360:119;;;5398:79;;:::i;:::-;5360:119;5518:1;5543:61;5596:7;5587:6;5576:9;5572:22;5543:61;:::i;:::-;5533:71;;5489:125;5276:345;;;;:::o;5627:329::-;5686:6;5735:2;5723:9;5714:7;5710:23;5706:32;5703:119;;;5741:79;;:::i;:::-;5703:119;5861:1;5886:53;5931:7;5922:6;5911:9;5907:22;5886:53;:::i;:::-;5876:63;;5832:117;5627:329;;;;:::o;5962:474::-;6030:6;6038;6087:2;6075:9;6066:7;6062:23;6058:32;6055:119;;;6093:79;;:::i;:::-;6055:119;6213:1;6238:53;6283:7;6274:6;6263:9;6259:22;6238:53;:::i;:::-;6228:63;;6184:117;6340:2;6366:53;6411:7;6402:6;6391:9;6387:22;6366:53;:::i;:::-;6356:63;;6311:118;5962:474;;;;;:::o;6442:327::-;6500:6;6549:2;6537:9;6528:7;6524:23;6520:32;6517:119;;;6555:79;;:::i;:::-;6517:119;6675:1;6700:52;6744:7;6735:6;6724:9;6720:22;6700:52;:::i;:::-;6690:62;;6646:116;6442:327;;;;:::o;6775:329::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:53;7079:7;7070:6;7059:9;7055:22;7034:53;:::i;:::-;7024:63;;6980:117;6775:329;;;;:::o;7110:351::-;7180:6;7229:2;7217:9;7208:7;7204:23;7200:32;7197:119;;;7235:79;;:::i;:::-;7197:119;7355:1;7380:64;7436:7;7427:6;7416:9;7412:22;7380:64;:::i;:::-;7370:74;;7326:128;7110:351;;;;:::o;7467:472::-;7534:6;7542;7591:2;7579:9;7570:7;7566:23;7562:32;7559:119;;;7597:79;;:::i;:::-;7559:119;7717:1;7742:53;7787:7;7778:6;7767:9;7763:22;7742:53;:::i;:::-;7732:63;;7688:117;7844:2;7870:52;7914:7;7905:6;7894:9;7890:22;7870:52;:::i;:::-;7860:62;;7815:117;7467:472;;;;;:::o;7945:349::-;8014:6;8063:2;8051:9;8042:7;8038:23;8034:32;8031:119;;;8069:79;;:::i;:::-;8031:119;8189:1;8214:63;8269:7;8260:6;8249:9;8245:22;8214:63;:::i;:::-;8204:73;;8160:127;7945:349;;;;:::o;8300:179::-;8369:10;8390:46;8432:3;8424:6;8390:46;:::i;:::-;8468:4;8463:3;8459:14;8445:28;;8300:179;;;;:::o;8485:118::-;8572:24;8590:5;8572:24;:::i;:::-;8567:3;8560:37;8485:118;;:::o;8639:732::-;8758:3;8787:54;8835:5;8787:54;:::i;:::-;8857:86;8936:6;8931:3;8857:86;:::i;:::-;8850:93;;8967:56;9017:5;8967:56;:::i;:::-;9046:7;9077:1;9062:284;9087:6;9084:1;9081:13;9062:284;;;9163:6;9157:13;9190:63;9249:3;9234:13;9190:63;:::i;:::-;9183:70;;9276:60;9329:6;9276:60;:::i;:::-;9266:70;;9122:224;9109:1;9106;9102:9;9097:14;;9062:284;;;9066:14;9362:3;9355:10;;8763:608;;;8639:732;;;;:::o;9377:109::-;9458:21;9473:5;9458:21;:::i;:::-;9453:3;9446:34;9377:109;;:::o;9492:118::-;9579:24;9597:5;9579:24;:::i;:::-;9574:3;9567:37;9492:118;;:::o;9616:364::-;9704:3;9732:39;9765:5;9732:39;:::i;:::-;9787:71;9851:6;9846:3;9787:71;:::i;:::-;9780:78;;9867:52;9912:6;9907:3;9900:4;9893:5;9889:16;9867:52;:::i;:::-;9944:29;9966:6;9944:29;:::i;:::-;9939:3;9935:39;9928:46;;9708:272;9616:364;;;;:::o;9986:377::-;10092:3;10120:39;10153:5;10120:39;:::i;:::-;10175:89;10257:6;10252:3;10175:89;:::i;:::-;10168:96;;10273:52;10318:6;10313:3;10306:4;10299:5;10295:16;10273:52;:::i;:::-;10350:6;10345:3;10341:16;10334:23;;10096:267;9986:377;;;;:::o;10369:366::-;10511:3;10532:67;10596:2;10591:3;10532:67;:::i;:::-;10525:74;;10608:93;10697:3;10608:93;:::i;:::-;10726:2;10721:3;10717:12;10710:19;;10369:366;;;:::o;10741:::-;10883:3;10904:67;10968:2;10963:3;10904:67;:::i;:::-;10897:74;;10980:93;11069:3;10980:93;:::i;:::-;11098:2;11093:3;11089:12;11082:19;;10741:366;;;:::o;11113:::-;11255:3;11276:67;11340:2;11335:3;11276:67;:::i;:::-;11269:74;;11352:93;11441:3;11352:93;:::i;:::-;11470:2;11465:3;11461:12;11454:19;;11113:366;;;:::o;11485:::-;11627:3;11648:67;11712:2;11707:3;11648:67;:::i;:::-;11641:74;;11724:93;11813:3;11724:93;:::i;:::-;11842:2;11837:3;11833:12;11826:19;;11485:366;;;:::o;11857:::-;11999:3;12020:67;12084:2;12079:3;12020:67;:::i;:::-;12013:74;;12096:93;12185:3;12096:93;:::i;:::-;12214:2;12209:3;12205:12;12198:19;;11857:366;;;:::o;12229:::-;12371:3;12392:67;12456:2;12451:3;12392:67;:::i;:::-;12385:74;;12468:93;12557:3;12468:93;:::i;:::-;12586:2;12581:3;12577:12;12570:19;;12229:366;;;:::o;12601:::-;12743:3;12764:67;12828:2;12823:3;12764:67;:::i;:::-;12757:74;;12840:93;12929:3;12840:93;:::i;:::-;12958:2;12953:3;12949:12;12942:19;;12601:366;;;:::o;12973:::-;13115:3;13136:67;13200:2;13195:3;13136:67;:::i;:::-;13129:74;;13212:93;13301:3;13212:93;:::i;:::-;13330:2;13325:3;13321:12;13314:19;;12973:366;;;:::o;13345:::-;13487:3;13508:67;13572:2;13567:3;13508:67;:::i;:::-;13501:74;;13584:93;13673:3;13584:93;:::i;:::-;13702:2;13697:3;13693:12;13686:19;;13345:366;;;:::o;13717:402::-;13877:3;13898:85;13980:2;13975:3;13898:85;:::i;:::-;13891:92;;13992:93;14081:3;13992:93;:::i;:::-;14110:2;14105:3;14101:12;14094:19;;13717:402;;;:::o;14125:366::-;14267:3;14288:67;14352:2;14347:3;14288:67;:::i;:::-;14281:74;;14364:93;14453:3;14364:93;:::i;:::-;14482:2;14477:3;14473:12;14466:19;;14125:366;;;:::o;14497:::-;14639:3;14660:67;14724:2;14719:3;14660:67;:::i;:::-;14653:74;;14736:93;14825:3;14736:93;:::i;:::-;14854:2;14849:3;14845:12;14838:19;;14497:366;;;:::o;14869:402::-;15029:3;15050:85;15132:2;15127:3;15050:85;:::i;:::-;15043:92;;15144:93;15233:3;15144:93;:::i;:::-;15262:2;15257:3;15253:12;15246:19;;14869:402;;;:::o;15277:366::-;15419:3;15440:67;15504:2;15499:3;15440:67;:::i;:::-;15433:74;;15516:93;15605:3;15516:93;:::i;:::-;15634:2;15629:3;15625:12;15618:19;;15277:366;;;:::o;15649:::-;15791:3;15812:67;15876:2;15871:3;15812:67;:::i;:::-;15805:74;;15888:93;15977:3;15888:93;:::i;:::-;16006:2;16001:3;15997:12;15990:19;;15649:366;;;:::o;16021:108::-;16098:24;16116:5;16098:24;:::i;:::-;16093:3;16086:37;16021:108;;:::o;16135:118::-;16222:24;16240:5;16222:24;:::i;:::-;16217:3;16210:37;16135:118;;:::o;16259:115::-;16344:23;16361:5;16344:23;:::i;:::-;16339:3;16332:36;16259:115;;:::o;16380:112::-;16463:22;16479:5;16463:22;:::i;:::-;16458:3;16451:35;16380:112;;:::o;16498:967::-;16880:3;16902:148;17046:3;16902:148;:::i;:::-;16895:155;;17067:95;17158:3;17149:6;17067:95;:::i;:::-;17060:102;;17179:148;17323:3;17179:148;:::i;:::-;17172:155;;17344:95;17435:3;17426:6;17344:95;:::i;:::-;17337:102;;17456:3;17449:10;;16498:967;;;;;:::o;17471:222::-;17564:4;17602:2;17591:9;17587:18;17579:26;;17615:71;17683:1;17672:9;17668:17;17659:6;17615:71;:::i;:::-;17471:222;;;;:::o;17699:373::-;17842:4;17880:2;17869:9;17865:18;17857:26;;17929:9;17923:4;17919:20;17915:1;17904:9;17900:17;17893:47;17957:108;18060:4;18051:6;17957:108;:::i;:::-;17949:116;;17699:373;;;;:::o;18078:210::-;18165:4;18203:2;18192:9;18188:18;18180:26;;18216:65;18278:1;18267:9;18263:17;18254:6;18216:65;:::i;:::-;18078:210;;;;:::o;18294:222::-;18387:4;18425:2;18414:9;18410:18;18402:26;;18438:71;18506:1;18495:9;18491:17;18482:6;18438:71;:::i;:::-;18294:222;;;;:::o;18522:313::-;18635:4;18673:2;18662:9;18658:18;18650:26;;18722:9;18716:4;18712:20;18708:1;18697:9;18693:17;18686:47;18750:78;18823:4;18814:6;18750:78;:::i;:::-;18742:86;;18522:313;;;;:::o;18841:419::-;19007:4;19045:2;19034:9;19030:18;19022:26;;19094:9;19088:4;19084:20;19080:1;19069:9;19065:17;19058:47;19122:131;19248:4;19122:131;:::i;:::-;19114:139;;18841:419;;;:::o;19266:::-;19432:4;19470:2;19459:9;19455:18;19447:26;;19519:9;19513:4;19509:20;19505:1;19494:9;19490:17;19483:47;19547:131;19673:4;19547:131;:::i;:::-;19539:139;;19266:419;;;:::o;19691:::-;19857:4;19895:2;19884:9;19880:18;19872:26;;19944:9;19938:4;19934:20;19930:1;19919:9;19915:17;19908:47;19972:131;20098:4;19972:131;:::i;:::-;19964:139;;19691:419;;;:::o;20116:::-;20282:4;20320:2;20309:9;20305:18;20297:26;;20369:9;20363:4;20359:20;20355:1;20344:9;20340:17;20333:47;20397:131;20523:4;20397:131;:::i;:::-;20389:139;;20116:419;;;:::o;20541:::-;20707:4;20745:2;20734:9;20730:18;20722:26;;20794:9;20788:4;20784:20;20780:1;20769:9;20765:17;20758:47;20822:131;20948:4;20822:131;:::i;:::-;20814:139;;20541:419;;;:::o;20966:::-;21132:4;21170:2;21159:9;21155:18;21147:26;;21219:9;21213:4;21209:20;21205:1;21194:9;21190:17;21183:47;21247:131;21373:4;21247:131;:::i;:::-;21239:139;;20966:419;;;:::o;21391:::-;21557:4;21595:2;21584:9;21580:18;21572:26;;21644:9;21638:4;21634:20;21630:1;21619:9;21615:17;21608:47;21672:131;21798:4;21672:131;:::i;:::-;21664:139;;21391:419;;;:::o;21816:::-;21982:4;22020:2;22009:9;22005:18;21997:26;;22069:9;22063:4;22059:20;22055:1;22044:9;22040:17;22033:47;22097:131;22223:4;22097:131;:::i;:::-;22089:139;;21816:419;;;:::o;22241:::-;22407:4;22445:2;22434:9;22430:18;22422:26;;22494:9;22488:4;22484:20;22480:1;22469:9;22465:17;22458:47;22522:131;22648:4;22522:131;:::i;:::-;22514:139;;22241:419;;;:::o;22666:::-;22832:4;22870:2;22859:9;22855:18;22847:26;;22919:9;22913:4;22909:20;22905:1;22894:9;22890:17;22883:47;22947:131;23073:4;22947:131;:::i;:::-;22939:139;;22666:419;;;:::o;23091:::-;23257:4;23295:2;23284:9;23280:18;23272:26;;23344:9;23338:4;23334:20;23330:1;23319:9;23315:17;23308:47;23372:131;23498:4;23372:131;:::i;:::-;23364:139;;23091:419;;;:::o;23516:::-;23682:4;23720:2;23709:9;23705:18;23697:26;;23769:9;23763:4;23759:20;23755:1;23744:9;23740:17;23733:47;23797:131;23923:4;23797:131;:::i;:::-;23789:139;;23516:419;;;:::o;23941:::-;24107:4;24145:2;24134:9;24130:18;24122:26;;24194:9;24188:4;24184:20;24180:1;24169:9;24165:17;24158:47;24222:131;24348:4;24222:131;:::i;:::-;24214:139;;23941:419;;;:::o;24366:222::-;24459:4;24497:2;24486:9;24482:18;24474:26;;24510:71;24578:1;24567:9;24563:17;24554:6;24510:71;:::i;:::-;24366:222;;;;:::o;24594:328::-;24713:4;24751:2;24740:9;24736:18;24728:26;;24764:71;24832:1;24821:9;24817:17;24808:6;24764:71;:::i;:::-;24845:70;24911:2;24900:9;24896:18;24887:6;24845:70;:::i;:::-;24594:328;;;;;:::o;24928:218::-;25019:4;25057:2;25046:9;25042:18;25034:26;;25070:69;25136:1;25125:9;25121:17;25112:6;25070:69;:::i;:::-;24928:218;;;;:::o;25152:214::-;25241:4;25279:2;25268:9;25264:18;25256:26;;25292:67;25356:1;25345:9;25341:17;25332:6;25292:67;:::i;:::-;25152:214;;;;:::o;25372:129::-;25406:6;25433:20;;:::i;:::-;25423:30;;25462:33;25490:4;25482:6;25462:33;:::i;:::-;25372:129;;;:::o;25507:75::-;25540:6;25573:2;25567:9;25557:19;;25507:75;:::o;25588:311::-;25665:4;25755:18;25747:6;25744:30;25741:56;;;25777:18;;:::i;:::-;25741:56;25827:4;25819:6;25815:17;25807:25;;25887:4;25881;25877:15;25869:23;;25588:311;;;:::o;25905:132::-;25972:4;25995:3;25987:11;;26025:4;26020:3;26016:14;26008:22;;25905:132;;;:::o;26043:114::-;26110:6;26144:5;26138:12;26128:22;;26043:114;;;:::o;26163:99::-;26215:6;26249:5;26243:12;26233:22;;26163:99;;;:::o;26268:113::-;26338:4;26370;26365:3;26361:14;26353:22;;26268:113;;;:::o;26387:184::-;26486:11;26520:6;26515:3;26508:19;26560:4;26555:3;26551:14;26536:29;;26387:184;;;;:::o;26577:169::-;26661:11;26695:6;26690:3;26683:19;26735:4;26730:3;26726:14;26711:29;;26577:169;;;;:::o;26752:148::-;26854:11;26891:3;26876:18;;26752:148;;;;:::o;26906:305::-;26946:3;26965:20;26983:1;26965:20;:::i;:::-;26960:25;;26999:20;27017:1;26999:20;:::i;:::-;26994:25;;27153:1;27085:66;27081:74;27078:1;27075:81;27072:107;;;27159:18;;:::i;:::-;27072:107;27203:1;27200;27196:9;27189:16;;26906:305;;;;:::o;27217:348::-;27257:7;27280:20;27298:1;27280:20;:::i;:::-;27275:25;;27314:20;27332:1;27314:20;:::i;:::-;27309:25;;27502:1;27434:66;27430:74;27427:1;27424:81;27419:1;27412:9;27405:17;27401:105;27398:131;;;27509:18;;:::i;:::-;27398:131;27557:1;27554;27550:9;27539:20;;27217:348;;;;:::o;27571:191::-;27611:4;27631:20;27649:1;27631:20;:::i;:::-;27626:25;;27665:20;27683:1;27665:20;:::i;:::-;27660:25;;27704:1;27701;27698:8;27695:34;;;27709:18;;:::i;:::-;27695:34;27754:1;27751;27747:9;27739:17;;27571:191;;;;:::o;27768:188::-;27807:4;27827:19;27844:1;27827:19;:::i;:::-;27822:24;;27860:19;27877:1;27860:19;:::i;:::-;27855:24;;27898:1;27895;27892:8;27889:34;;;27903:18;;:::i;:::-;27889:34;27948:1;27945;27941:9;27933:17;;27768:188;;;;:::o;27962:96::-;27999:7;28028:24;28046:5;28028:24;:::i;:::-;28017:35;;27962:96;;;:::o;28064:90::-;28098:7;28141:5;28134:13;28127:21;28116:32;;28064:90;;;:::o;28160:77::-;28197:7;28226:5;28215:16;;28160:77;;;:::o;28243:149::-;28279:7;28319:66;28312:5;28308:78;28297:89;;28243:149;;;:::o;28398:126::-;28435:7;28475:42;28468:5;28464:54;28453:65;;28398:126;;;:::o;28530:77::-;28567:7;28596:5;28585:16;;28530:77;;;:::o;28613:101::-;28649:7;28689:18;28682:5;28678:30;28667:41;;28613:101;;;:::o;28720:86::-;28755:7;28795:4;28788:5;28784:16;28773:27;;28720:86;;;:::o;28812:307::-;28880:1;28890:113;28904:6;28901:1;28898:13;28890:113;;;28989:1;28984:3;28980:11;28974:18;28970:1;28965:3;28961:11;28954:39;28926:2;28923:1;28919:10;28914:15;;28890:113;;;29021:6;29018:1;29015:13;29012:101;;;29101:1;29092:6;29087:3;29083:16;29076:27;29012:101;28861:258;28812:307;;;:::o;29125:171::-;29164:3;29187:24;29205:5;29187:24;:::i;:::-;29178:33;;29233:4;29226:5;29223:15;29220:41;;;29241:18;;:::i;:::-;29220:41;29288:1;29281:5;29277:13;29270:20;;29125:171;;;:::o;29302:320::-;29346:6;29383:1;29377:4;29373:12;29363:22;;29430:1;29424:4;29420:12;29451:18;29441:81;;29507:4;29499:6;29495:17;29485:27;;29441:81;29569:2;29561:6;29558:14;29538:18;29535:38;29532:84;;;29588:18;;:::i;:::-;29532:84;29353:269;29302:320;;;:::o;29628:281::-;29711:27;29733:4;29711:27;:::i;:::-;29703:6;29699:40;29841:6;29829:10;29826:22;29805:18;29793:10;29790:34;29787:62;29784:88;;;29852:18;;:::i;:::-;29784:88;29892:10;29888:2;29881:22;29671:238;29628:281;;:::o;29915:233::-;29954:3;29977:24;29995:5;29977:24;:::i;:::-;29968:33;;30023:66;30016:5;30013:77;30010:103;;;30093:18;;:::i;:::-;30010:103;30140:1;30133:5;30129:13;30122:20;;29915:233;;;:::o;30154:183::-;30192:3;30215:23;30232:5;30215:23;:::i;:::-;30206:32;;30260:18;30253:5;30250:29;30247:55;;;30282:18;;:::i;:::-;30247:55;30329:1;30322:5;30318:13;30311:20;;30154:183;;;:::o;30343:180::-;30391:77;30388:1;30381:88;30488:4;30485:1;30478:15;30512:4;30509:1;30502:15;30529:180;30577:77;30574:1;30567:88;30674:4;30671:1;30664:15;30698:4;30695:1;30688:15;30715:180;30763:77;30760:1;30753:88;30860:4;30857:1;30850:15;30884:4;30881:1;30874:15;30901:180;30949:77;30946:1;30939:88;31046:4;31043:1;31036:15;31070:4;31067:1;31060:15;31087:117;31196:1;31193;31186:12;31210:117;31319:1;31316;31309:12;31333:117;31442:1;31439;31432:12;31456:117;31565:1;31562;31555:12;31579:102;31620:6;31671:2;31667:7;31662:2;31655:5;31651:14;31647:28;31637:38;;31579:102;;;:::o;31687:182::-;31827:34;31823:1;31815:6;31811:14;31804:58;31687:182;:::o;31875:222::-;32015:34;32011:1;32003:6;31999:14;31992:58;32084:5;32079:2;32071:6;32067:15;32060:30;31875:222;:::o;32103:221::-;32243:34;32239:1;32231:6;32227:14;32220:58;32312:4;32307:2;32299:6;32295:15;32288:29;32103:221;:::o;32330:::-;32470:34;32466:1;32458:6;32454:14;32447:58;32539:4;32534:2;32526:6;32522:15;32515:29;32330:221;:::o;32557:179::-;32697:31;32693:1;32685:6;32681:14;32674:55;32557:179;:::o;32742:225::-;32882:34;32878:1;32870:6;32866:14;32859:58;32951:8;32946:2;32938:6;32934:15;32927:33;32742:225;:::o;32973:220::-;33113:34;33109:1;33101:6;33097:14;33090:58;33182:3;33177:2;33169:6;33165:15;33158:28;32973:220;:::o;33199:224::-;33339:34;33335:1;33327:6;33323:14;33316:58;33408:7;33403:2;33395:6;33391:15;33384:32;33199:224;:::o;33429:223::-;33569:34;33565:1;33557:6;33553:14;33546:58;33638:6;33633:2;33625:6;33621:15;33614:31;33429:223;:::o;33658:173::-;33798:25;33794:1;33786:6;33782:14;33775:49;33658:173;:::o;33837:181::-;33977:33;33973:1;33965:6;33961:14;33954:57;33837:181;:::o;34024:224::-;34164:34;34160:1;34152:6;34148:14;34141:58;34233:7;34228:2;34220:6;34216:15;34209:32;34024:224;:::o;34254:167::-;34394:19;34390:1;34382:6;34378:14;34371:43;34254:167;:::o;34427:234::-;34567:34;34563:1;34555:6;34551:14;34544:58;34636:17;34631:2;34623:6;34619:15;34612:42;34427:234;:::o;34667:181::-;34807:33;34803:1;34795:6;34791:14;34784:57;34667:181;:::o;34854:122::-;34927:24;34945:5;34927:24;:::i;:::-;34920:5;34917:35;34907:63;;34966:1;34963;34956:12;34907:63;34854:122;:::o;34982:116::-;35052:21;35067:5;35052:21;:::i;:::-;35045:5;35042:32;35032:60;;35088:1;35085;35078:12;35032:60;34982:116;:::o;35104:122::-;35177:24;35195:5;35177:24;:::i;:::-;35170:5;35167:35;35157:63;;35216:1;35213;35206:12;35157:63;35104:122;:::o;35232:120::-;35304:23;35321:5;35304:23;:::i;:::-;35297:5;35294:34;35284:62;;35342:1;35339;35332:12;35284:62;35232:120;:::o;35358:122::-;35431:24;35449:5;35431:24;:::i;:::-;35424:5;35421:35;35411:63;;35470:1;35467;35460:12;35411:63;35358:122;:::o;35486:120::-;35558:23;35575:5;35558:23;:::i;:::-;35551:5;35548:34;35538:62;;35596:1;35593;35586:12;35538:62;35486:120;:::o
Swarm Source
ipfs://d1bc42021be05bf624e871d3402099c8295827a12a59780b41f5e2b85d525918
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.