ERC-20
Advertising
Overview
Max Total Supply
5,114,477,611 ZESC
Holders
21 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 4 Decimals)
Balance
17,652,583.6716 ZESCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Zescoin
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-05-21 */ // File: node_modules\@openzeppelin\contracts\token\ERC20\IERC20.sol // SPDX-License-Identifier: MIT 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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, 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: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: node_modules\@openzeppelin\contracts\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 guidelines: functions revert instead * of 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 defaut 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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, 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: * * - `to` 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); } /** * @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"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(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 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 to 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 { } } // File: node_modules\@openzeppelin\contracts\security\Pausable.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin\contracts\token\ERC20\extensions\ERC20Pausable.sol pragma solidity ^0.8.0; /** * @dev ERC20 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC20Pausable is ERC20, Pausable { /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override { super._beforeTokenTransfer(from, to, amount); require(!paused(), "ERC20Pausable: token transfer while paused"); } } // File: node_modules\@openzeppelin\contracts\utils\Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\access\AccessControl.sol pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @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 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 {_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 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]{20}) is missing role (0x[0-9a-f]{32})$/ * * _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 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]{20}) is missing role (0x[0-9a-f]{32})$/ */ function _checkRole(bytes32 role, address account) internal view { 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 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 granted `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}. * ==== */ 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 { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: node_modules\@openzeppelin\contracts\utils\structs\EnumerableSet.sol pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } // File: @openzeppelin\contracts\access\AccessControlEnumerable.sol pragma solidity ^0.8.0; /** * @dev External interface of AccessControlEnumerable declared to support ERC165 detection. */ interface IAccessControlEnumerable { function getRoleMember(bytes32 role, uint256 index) external view returns (address); function getRoleMemberCount(bytes32 role) external view returns (uint256); } /** * @dev Extension of {AccessControl} that allows enumerating the members of each role. */ abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl { using EnumerableSet for EnumerableSet.AddressSet; mapping (bytes32 => EnumerableSet.AddressSet) private _roleMembers; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns one of the accounts that have `role`. `index` must be a * value between 0 and {getRoleMemberCount}, non-inclusive. * * Role bearers are not sorted in any particular way, and their ordering may * change at any point. * * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure * you perform all queries on the same block. See the following * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] * for more information. */ function getRoleMember(bytes32 role, uint256 index) public view override returns (address) { return _roleMembers[role].at(index); } /** * @dev Returns the number of accounts that have `role`. Can be used * together with {getRoleMember} to enumerate all bearers of a role. */ function getRoleMemberCount(bytes32 role) public view override returns (uint256) { return _roleMembers[role].length(); } /** * @dev Overload {grantRole} to track enumerable memberships */ function grantRole(bytes32 role, address account) public virtual override { super.grantRole(role, account); _roleMembers[role].add(account); } /** * @dev Overload {revokeRole} to track enumerable memberships */ function revokeRole(bytes32 role, address account) public virtual override { super.revokeRole(role, account); _roleMembers[role].remove(account); } /** * @dev Overload {renounceRole} to track enumerable memberships */ function renounceRole(bytes32 role, address account) public virtual override { super.renounceRole(role, account); _roleMembers[role].remove(account); } /** * @dev Overload {_setupRole} to track enumerable memberships */ function _setupRole(bytes32 role, address account) internal virtual override { super._setupRole(role, account); _roleMembers[role].add(account); } } // File: contracts\ZesCoin.sol pragma solidity ^0.8.0; // ---------------------------------------------------------------------------- // ZesCoin contract by SecLab LLC // // Symbol : ZESC // Name : ZesCoin // Total supply: 5,114,477,611 // Decimals : 4 // Access Control : Role Based Access Control // // Copyright (c) 2021 zOS Global Limited, The MIT License // ---------------------------------------------------------------------------- contract Zescoin is AccessControlEnumerable, ERC20Pausable { uint256 private initialSupply; string private _name = "ZesCoin"; string private _symbol = "ZESC"; uint8 private _decimals; bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE"); constructor() ERC20(_name, _symbol) { _decimals = 4; initialSupply = 5114477611 * 10**uint(_decimals); _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _mint(msg.sender, initialSupply); } function decimals() public view override virtual returns (uint8) { return 4; } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. * - the caller must have the `BURNER_ROLE`. */ function burnFrom(address account, uint256 amount) public virtual { require(hasRole(BURNER_ROLE, _msgSender()), "ERC20: must have burner role to mint"); uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), currentAllowance - amount); _burn(account, amount); } /** * @dev Creates `amount` new tokens for `to`. * * Requirements: * * - the caller must have the `MINTER_ROLE`. */ function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) { _mint(to, amount); } /** * @dev Pauses all token transfers. * * Requirements: * * - the caller must have the `PAUSER_ROLE`. */ function pause() public virtual { require(hasRole(PAUSER_ROLE, _msgSender()), "ERC20Pausable: must have pauser role to pause"); _pause(); } /** * @dev Unpauses all token transfers. * * Requirements: * * - the caller must have the `PAUSER_ROLE`. */ function unpause() public virtual { require(hasRole(PAUSER_ROLE, _msgSender()), "ERC20Pausable: must have pauser role to unpause"); _unpause(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"BURNER_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":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_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":"burnFrom","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":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600781526020017f5a6573436f696e0000000000000000000000000000000000000000000000000081525060099080519060200190620000519291906200073e565b506040518060400160405280600481526020017f5a45534300000000000000000000000000000000000000000000000000000000815250600a90805190602001906200009f9291906200073e565b50348015620000ad57600080fd5b5060098054620000bd9062000b7b565b80601f0160208091040260200160405190810160405280929190818152602001828054620000eb9062000b7b565b80156200013c5780601f1062000110576101008083540402835291602001916200013c565b820191906000526020600020905b8154815290600101906020018083116200011e57829003601f168201915b5050505050600a8054620001509062000b7b565b80601f01602080910402602001604051908101604052809291908181526020018280546200017e9062000b7b565b8015620001cf5780601f10620001a357610100808354040283529160200191620001cf565b820191906000526020600020905b815481529060010190602001808311620001b157829003601f168201915b50505050508160059080519060200190620001ec9291906200073e565b508060069080519060200190620002059291906200073e565b5050506000600760006101000a81548160ff0219169083151502179055506004600b60006101000a81548160ff021916908360ff160217905550600b60009054906101000a900460ff1660ff16600a620002609190620009d3565b640130d8bc2b62000272919062000b10565b6008819055506200029c6000801b62000290620002b660201b60201c565b620002be60201b60201c565b620002b0336008546200030660201b60201c565b62000c1c565b600033905090565b620002d582826200046c60201b62000f401760201c565b6200030181600160008581526020019081526020016000206200048260201b62000f4e1790919060201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037090620008a9565b60405180910390fd5b6200038d60008383620004ba60201b60201c565b8060046000828254620003a191906200091b565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003f991906200091b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004609190620008ed565b60405180910390a35050565b6200047e82826200052a60201b60201c565b5050565b6000620004b2836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200061b60201b60201c565b905092915050565b620004d28383836200069560201b62000f7e1760201c565b620004e26200069a60201b60201c565b1562000525576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200051c90620008cb565b60405180910390fd5b505050565b6200053c8282620006b160201b60201c565b6200061757600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005bc620002b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006200062f83836200071b60201b60201c565b6200068a5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506200068f565b600090505b92915050565b505050565b6000600760009054906101000a900460ff16905090565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546200074c9062000b7b565b90600052602060002090601f016020900481019282620007705760008555620007bc565b82601f106200078b57805160ff1916838001178555620007bc565b82800160010185558215620007bc579182015b82811115620007bb5782518255916020019190600101906200079e565b5b509050620007cb9190620007cf565b5090565b5b80821115620007ea576000816000905550600101620007d0565b5090565b6000620007fd601f836200090a565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b60006200083f602a836200090a565b91507f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008301527f696c6520706175736564000000000000000000000000000000000000000000006020830152604082019050919050565b620008a38162000b71565b82525050565b60006020820190508181036000830152620008c481620007ee565b9050919050565b60006020820190508181036000830152620008e68162000830565b9050919050565b600060208201905062000904600083018462000898565b92915050565b600082825260208201905092915050565b6000620009288262000b71565b9150620009358362000b71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200096d576200096c62000bb1565b5b828201905092915050565b6000808291508390505b6001851115620009ca57808604811115620009a257620009a162000bb1565b5b6001851615620009b25780820291505b8081029050620009c28562000c0f565b945062000982565b94509492505050565b6000620009e08262000b71565b9150620009ed8362000b71565b925062000a1c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a24565b905092915050565b60008262000a36576001905062000b09565b8162000a46576000905062000b09565b816001811462000a5f576002811462000a6a5762000aa0565b600191505062000b09565b60ff84111562000a7f5762000a7e62000bb1565b5b8360020a91508482111562000a995762000a9862000bb1565b5b5062000b09565b5060208310610133831016604e8410600b841016171562000ada5782820a90508381111562000ad45762000ad362000bb1565b5b62000b09565b62000ae9848484600162000978565b9250905081840481111562000b035762000b0262000bb1565b5b81810290505b9392505050565b600062000b1d8262000b71565b915062000b2a8362000b71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000b665762000b6562000bb1565b5b828202905092915050565b6000819050919050565b6000600282049050600182168062000b9457607f821691505b6020821081141562000bab5762000baa62000be0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b6133f88062000c2c6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a457c2d711610097578063d539139311610071578063d53913931461052f578063d547741f1461054d578063dd62ed3e14610569578063e63ab1e914610599576101c4565b8063a457c2d71461049f578063a9059cbb146104cf578063ca15c873146104ff576101c4565b80639010d07c116100d35780639010d07c1461040357806391d148541461043357806395d89b4114610463578063a217fddf14610481576101c4565b806370a08231146103ad57806379cc6790146103dd5780638456cb59146103f9576101c4565b80632f2ff15d11610166578063395093511161014057806339509351146103395780633f4ba83a1461036957806340c10f19146103735780635c975abb1461038f576101c4565b80632f2ff15d146102e3578063313ce567146102ff57806336568abe1461031d576101c4565b806318160ddd116101a257806318160ddd1461024757806323b872dd14610265578063248a9ca314610295578063282c51f3146102c5576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063095ea7b314610217575b600080fd5b6101e360048036038101906101de91906124b1565b6105b7565b6040516101f09190612dc4565b60405180910390f35b610201610631565b60405161020e9190612dfa565b60405180910390f35b610231600480360381019061022c91906123d4565b6106c3565b60405161023e9190612dc4565b60405180910390f35b61024f6106e1565b60405161025c919061309c565b60405180910390f35b61027f600480360381019061027a9190612385565b6106eb565b60405161028c9190612dc4565b60405180910390f35b6102af60048036038101906102aa9190612410565b6107ec565b6040516102bc9190612ddf565b60405180910390f35b6102cd61080b565b6040516102da9190612ddf565b60405180910390f35b6102fd60048036038101906102f89190612439565b61082f565b005b610307610863565b60405161031491906130b7565b60405180910390f35b61033760048036038101906103329190612439565b61086c565b005b610353600480360381019061034e91906123d4565b6108a0565b6040516103609190612dc4565b60405180910390f35b61037161094c565b005b61038d600480360381019061038891906123d4565b6109c6565b005b610397610a07565b6040516103a49190612dc4565b60405180910390f35b6103c760048036038101906103c29190612320565b610a1e565b6040516103d4919061309c565b60405180910390f35b6103f760048036038101906103f291906123d4565b610a67565b005b610401610b5b565b005b61041d60048036038101906104189190612475565b610bd5565b60405161042a9190612da9565b60405180910390f35b61044d60048036038101906104489190612439565b610c04565b60405161045a9190612dc4565b60405180910390f35b61046b610c6e565b6040516104789190612dfa565b60405180910390f35b610489610d00565b6040516104969190612ddf565b60405180910390f35b6104b960048036038101906104b491906123d4565b610d07565b6040516104c69190612dc4565b60405180910390f35b6104e960048036038101906104e491906123d4565b610dfb565b6040516104f69190612dc4565b60405180910390f35b61051960048036038101906105149190612410565b610e19565b604051610526919061309c565b60405180910390f35b610537610e3d565b6040516105449190612ddf565b60405180910390f35b61056760048036038101906105629190612439565b610e61565b005b610583600480360381019061057e9190612349565b610e95565b604051610590919061309c565b60405180910390f35b6105a1610f1c565b6040516105ae9190612ddf565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061062a575061062982610f83565b5b9050919050565b606060058054610640906132c5565b80601f016020809104026020016040519081016040528092919081815260200182805461066c906132c5565b80156106b95780601f1061068e576101008083540402835291602001916106b9565b820191906000526020600020905b81548152906001019060200180831161069c57829003601f168201915b5050505050905090565b60006106d76106d0610ffd565b8484611005565b6001905092915050565b6000600454905090565b60006106f88484846111d0565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610743610ffd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba90612f5c565b60405180910390fd5b6107e0856107cf610ffd565b85846107db91906131a9565b611005565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b6108398282611452565b61085e8160016000858152602001908152602001600020610f4e90919063ffffffff16565b505050565b60006004905090565b610876828261147b565b61089b81600160008581526020019081526020016000206114fe90919063ffffffff16565b505050565b60006109426108ad610ffd565b8484600360006108bb610ffd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461093d91906130f9565b611005565b6001905092915050565b61097d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610978610ffd565b610c04565b6109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b390612ffc565b60405180910390fd5b6109c461152e565b565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109f8816109f3610ffd565b6115d0565b610a02838361166d565b505050565b6000600760009054906101000a900460ff16905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a987f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848610a93610ffd565b610c04565b610ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ace90612efc565b60405180910390fd5b6000610aea83610ae5610ffd565b610e95565b905081811015610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690612f7c565b60405180910390fd5b610b4c83610b3b610ffd565b8484610b4791906131a9565b611005565b610b5683836117c2565b505050565b610b8c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b87610ffd565b610c04565b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc290612f3c565b60405180910390fd5b610bd3611998565b565b6000610bfc8260016000868152602001908152602001600020611a3b90919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060068054610c7d906132c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca9906132c5565b8015610cf65780601f10610ccb57610100808354040283529160200191610cf6565b820191906000526020600020905b815481529060010190602001808311610cd957829003601f168201915b5050505050905090565b6000801b81565b60008060036000610d16610ffd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca9061301c565b60405180910390fd5b610df0610dde610ffd565b858584610deb91906131a9565b611005565b600191505092915050565b6000610e0f610e08610ffd565b84846111d0565b6001905092915050565b6000610e3660016000848152602001908152602001600020611a55565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610e6b8282611a6a565b610e9081600160008581526020019081526020016000206114fe90919063ffffffff16565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610f4a8282611a93565b5050565b6000610f76836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611b73565b905092915050565b505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ff65750610ff582611be3565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90612fdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90612ebc565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111c3919061309c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790612fbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790612e5c565b60405180910390fd5b6112bb838383611c4d565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990612edc565b60405180910390fd5b818161134e91906131a9565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113e091906130f9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611444919061309c565b60405180910390a350505050565b61145b826107ec565b61146c81611467610ffd565b6115d0565b6114768383611a93565b505050565b611483610ffd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e79061303c565b60405180910390fd5b6114fa8282611ca5565b5050565b6000611526836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611d86565b905092915050565b611536610a07565b611575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156c90612e7c565b60405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115b9610ffd565b6040516115c69190612da9565b60405180910390a1565b6115da8282610c04565b611669576115ff8173ffffffffffffffffffffffffffffffffffffffff166014611f04565b61160d8360001c6020611f04565b60405160200161161e929190612d6f565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116609190612dfa565b60405180910390fd5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d49061305c565b60405180910390fd5b6116e960008383611c4d565b80600460008282546116fb91906130f9565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461175191906130f9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117b6919061309c565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990612f9c565b60405180910390fd5b61183e82600083611c4d565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90612e9c565b60405180910390fd5b81816118d191906131a9565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816004600082825461192691906131a9565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161198b919061309c565b60405180910390a3505050565b6119a0610a07565b156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d790612f1c565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a24610ffd565b604051611a319190612da9565b60405180910390a1565b6000611a4a83600001836121fe565b60001c905092915050565b6000611a6382600001612298565b9050919050565b611a73826107ec565b611a8481611a7f610ffd565b6115d0565b611a8e8383611ca5565b505050565b611a9d8282610c04565b611b6f57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b14610ffd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000611b7f83836122a9565b611bd8578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611bdd565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c58838383610f7e565b611c60610a07565b15611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c979061307c565b60405180910390fd5b505050565b611caf8282610c04565b15611d8257600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d27610ffd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008083600101600084815260200190815260200160002054905060008114611ef8576000600182611db891906131a9565b9050600060018660000180549050611dd091906131a9565b90506000866000018281548110611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611e5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550838760010160008381526020019081526020016000208190555086600001805480611ebc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611efe565b60009150505b92915050565b606060006002836002611f17919061314f565b611f2191906130f9565b67ffffffffffffffff811115611f60577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611f925781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611ff0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061207a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026120ba919061314f565b6120c491906130f9565b90505b60018111156121b0577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061212c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612169577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806121a99061329b565b90506120c7565b50600084146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90612e3c565b60405180910390fd5b8091505092915050565b600081836000018054905011612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224090612e1c565b60405180910390fd5b826000018281548110612285577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b6000813590506122db81613366565b92915050565b6000813590506122f08161337d565b92915050565b60008135905061230581613394565b92915050565b60008135905061231a816133ab565b92915050565b60006020828403121561233257600080fd5b6000612340848285016122cc565b91505092915050565b6000806040838503121561235c57600080fd5b600061236a858286016122cc565b925050602061237b858286016122cc565b9150509250929050565b60008060006060848603121561239a57600080fd5b60006123a8868287016122cc565b93505060206123b9868287016122cc565b92505060406123ca8682870161230b565b9150509250925092565b600080604083850312156123e757600080fd5b60006123f5858286016122cc565b92505060206124068582860161230b565b9150509250929050565b60006020828403121561242257600080fd5b6000612430848285016122e1565b91505092915050565b6000806040838503121561244c57600080fd5b600061245a858286016122e1565b925050602061246b858286016122cc565b9150509250929050565b6000806040838503121561248857600080fd5b6000612496858286016122e1565b92505060206124a78582860161230b565b9150509250929050565b6000602082840312156124c357600080fd5b60006124d1848285016122f6565b91505092915050565b6124e3816131dd565b82525050565b6124f2816131ef565b82525050565b612501816131fb565b82525050565b6000612512826130d2565b61251c81856130dd565b935061252c818560208601613268565b61253581613355565b840191505092915050565b600061254b826130d2565b61255581856130ee565b9350612565818560208601613268565b80840191505092915050565b600061257e6022836130dd565b91507f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006125e46020836130dd565b91507f537472696e67733a20686578206c656e67746820696e73756666696369656e746000830152602082019050919050565b60006126246023836130dd565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061268a6014836130dd565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b60006126ca6022836130dd565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006127306022836130dd565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006127966026836130dd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006127fc6024836130dd565b91507f45524332303a206d7573742068617665206275726e657220726f6c6520746f2060008301527f6d696e74000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006128626010836130dd565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b60006128a2602d836130dd565b91507f45524332305061757361626c653a206d7573742068617665207061757365722060008301527f726f6c6520746f207061757365000000000000000000000000000000000000006020830152604082019050919050565b60006129086028836130dd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b600061296e6024836130dd565b91507f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006129d46021836130dd565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612a3a6025836130dd565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612aa06024836130dd565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b066017836130ee565b91507f416363657373436f6e74726f6c3a206163636f756e74200000000000000000006000830152601782019050919050565b6000612b46602f836130dd565b91507f45524332305061757361626c653a206d7573742068617665207061757365722060008301527f726f6c6520746f20756e706175736500000000000000000000000000000000006020830152604082019050919050565b6000612bac6025836130dd565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c126011836130ee565b91507f206973206d697373696e6720726f6c65200000000000000000000000000000006000830152601182019050919050565b6000612c52602f836130dd565b91507f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008301527f20726f6c657320666f722073656c6600000000000000000000000000000000006020830152604082019050919050565b6000612cb8601f836130dd565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000612cf8602a836130dd565b91507f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008301527f696c6520706175736564000000000000000000000000000000000000000000006020830152604082019050919050565b612d5a81613251565b82525050565b612d698161325b565b82525050565b6000612d7a82612af9565b9150612d868285612540565b9150612d9182612c05565b9150612d9d8284612540565b91508190509392505050565b6000602082019050612dbe60008301846124da565b92915050565b6000602082019050612dd960008301846124e9565b92915050565b6000602082019050612df460008301846124f8565b92915050565b60006020820190508181036000830152612e148184612507565b905092915050565b60006020820190508181036000830152612e3581612571565b9050919050565b60006020820190508181036000830152612e55816125d7565b9050919050565b60006020820190508181036000830152612e7581612617565b9050919050565b60006020820190508181036000830152612e958161267d565b9050919050565b60006020820190508181036000830152612eb5816126bd565b9050919050565b60006020820190508181036000830152612ed581612723565b9050919050565b60006020820190508181036000830152612ef581612789565b9050919050565b60006020820190508181036000830152612f15816127ef565b9050919050565b60006020820190508181036000830152612f3581612855565b9050919050565b60006020820190508181036000830152612f5581612895565b9050919050565b60006020820190508181036000830152612f75816128fb565b9050919050565b60006020820190508181036000830152612f9581612961565b9050919050565b60006020820190508181036000830152612fb5816129c7565b9050919050565b60006020820190508181036000830152612fd581612a2d565b9050919050565b60006020820190508181036000830152612ff581612a93565b9050919050565b6000602082019050818103600083015261301581612b39565b9050919050565b6000602082019050818103600083015261303581612b9f565b9050919050565b6000602082019050818103600083015261305581612c45565b9050919050565b6000602082019050818103600083015261307581612cab565b9050919050565b6000602082019050818103600083015261309581612ceb565b9050919050565b60006020820190506130b16000830184612d51565b92915050565b60006020820190506130cc6000830184612d60565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061310482613251565b915061310f83613251565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613144576131436132f7565b5b828201905092915050565b600061315a82613251565b915061316583613251565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561319e5761319d6132f7565b5b828202905092915050565b60006131b482613251565b91506131bf83613251565b9250828210156131d2576131d16132f7565b5b828203905092915050565b60006131e882613231565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561328657808201518184015260208101905061326b565b83811115613295576000848401525b50505050565b60006132a682613251565b915060008214156132ba576132b96132f7565b5b600182039050919050565b600060028204905060018216806132dd57607f821691505b602082108114156132f1576132f0613326565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61336f816131dd565b811461337a57600080fd5b50565b613386816131fb565b811461339157600080fd5b50565b61339d81613205565b81146133a857600080fd5b50565b6133b481613251565b81146133bf57600080fd5b5056fea26469706673582212200694f2b9508a62cd9417f1b75edf897e9d544699af020d8f5553ac0c1fe3b5cf64736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a457c2d711610097578063d539139311610071578063d53913931461052f578063d547741f1461054d578063dd62ed3e14610569578063e63ab1e914610599576101c4565b8063a457c2d71461049f578063a9059cbb146104cf578063ca15c873146104ff576101c4565b80639010d07c116100d35780639010d07c1461040357806391d148541461043357806395d89b4114610463578063a217fddf14610481576101c4565b806370a08231146103ad57806379cc6790146103dd5780638456cb59146103f9576101c4565b80632f2ff15d11610166578063395093511161014057806339509351146103395780633f4ba83a1461036957806340c10f19146103735780635c975abb1461038f576101c4565b80632f2ff15d146102e3578063313ce567146102ff57806336568abe1461031d576101c4565b806318160ddd116101a257806318160ddd1461024757806323b872dd14610265578063248a9ca314610295578063282c51f3146102c5576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063095ea7b314610217575b600080fd5b6101e360048036038101906101de91906124b1565b6105b7565b6040516101f09190612dc4565b60405180910390f35b610201610631565b60405161020e9190612dfa565b60405180910390f35b610231600480360381019061022c91906123d4565b6106c3565b60405161023e9190612dc4565b60405180910390f35b61024f6106e1565b60405161025c919061309c565b60405180910390f35b61027f600480360381019061027a9190612385565b6106eb565b60405161028c9190612dc4565b60405180910390f35b6102af60048036038101906102aa9190612410565b6107ec565b6040516102bc9190612ddf565b60405180910390f35b6102cd61080b565b6040516102da9190612ddf565b60405180910390f35b6102fd60048036038101906102f89190612439565b61082f565b005b610307610863565b60405161031491906130b7565b60405180910390f35b61033760048036038101906103329190612439565b61086c565b005b610353600480360381019061034e91906123d4565b6108a0565b6040516103609190612dc4565b60405180910390f35b61037161094c565b005b61038d600480360381019061038891906123d4565b6109c6565b005b610397610a07565b6040516103a49190612dc4565b60405180910390f35b6103c760048036038101906103c29190612320565b610a1e565b6040516103d4919061309c565b60405180910390f35b6103f760048036038101906103f291906123d4565b610a67565b005b610401610b5b565b005b61041d60048036038101906104189190612475565b610bd5565b60405161042a9190612da9565b60405180910390f35b61044d60048036038101906104489190612439565b610c04565b60405161045a9190612dc4565b60405180910390f35b61046b610c6e565b6040516104789190612dfa565b60405180910390f35b610489610d00565b6040516104969190612ddf565b60405180910390f35b6104b960048036038101906104b491906123d4565b610d07565b6040516104c69190612dc4565b60405180910390f35b6104e960048036038101906104e491906123d4565b610dfb565b6040516104f69190612dc4565b60405180910390f35b61051960048036038101906105149190612410565b610e19565b604051610526919061309c565b60405180910390f35b610537610e3d565b6040516105449190612ddf565b60405180910390f35b61056760048036038101906105629190612439565b610e61565b005b610583600480360381019061057e9190612349565b610e95565b604051610590919061309c565b60405180910390f35b6105a1610f1c565b6040516105ae9190612ddf565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061062a575061062982610f83565b5b9050919050565b606060058054610640906132c5565b80601f016020809104026020016040519081016040528092919081815260200182805461066c906132c5565b80156106b95780601f1061068e576101008083540402835291602001916106b9565b820191906000526020600020905b81548152906001019060200180831161069c57829003601f168201915b5050505050905090565b60006106d76106d0610ffd565b8484611005565b6001905092915050565b6000600454905090565b60006106f88484846111d0565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610743610ffd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba90612f5c565b60405180910390fd5b6107e0856107cf610ffd565b85846107db91906131a9565b611005565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b6108398282611452565b61085e8160016000858152602001908152602001600020610f4e90919063ffffffff16565b505050565b60006004905090565b610876828261147b565b61089b81600160008581526020019081526020016000206114fe90919063ffffffff16565b505050565b60006109426108ad610ffd565b8484600360006108bb610ffd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461093d91906130f9565b611005565b6001905092915050565b61097d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610978610ffd565b610c04565b6109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b390612ffc565b60405180910390fd5b6109c461152e565b565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109f8816109f3610ffd565b6115d0565b610a02838361166d565b505050565b6000600760009054906101000a900460ff16905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a987f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848610a93610ffd565b610c04565b610ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ace90612efc565b60405180910390fd5b6000610aea83610ae5610ffd565b610e95565b905081811015610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690612f7c565b60405180910390fd5b610b4c83610b3b610ffd565b8484610b4791906131a9565b611005565b610b5683836117c2565b505050565b610b8c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b87610ffd565b610c04565b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc290612f3c565b60405180910390fd5b610bd3611998565b565b6000610bfc8260016000868152602001908152602001600020611a3b90919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060068054610c7d906132c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca9906132c5565b8015610cf65780601f10610ccb57610100808354040283529160200191610cf6565b820191906000526020600020905b815481529060010190602001808311610cd957829003601f168201915b5050505050905090565b6000801b81565b60008060036000610d16610ffd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca9061301c565b60405180910390fd5b610df0610dde610ffd565b858584610deb91906131a9565b611005565b600191505092915050565b6000610e0f610e08610ffd565b84846111d0565b6001905092915050565b6000610e3660016000848152602001908152602001600020611a55565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610e6b8282611a6a565b610e9081600160008581526020019081526020016000206114fe90919063ffffffff16565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610f4a8282611a93565b5050565b6000610f76836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611b73565b905092915050565b505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ff65750610ff582611be3565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90612fdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90612ebc565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111c3919061309c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790612fbc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790612e5c565b60405180910390fd5b6112bb838383611c4d565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990612edc565b60405180910390fd5b818161134e91906131a9565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113e091906130f9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611444919061309c565b60405180910390a350505050565b61145b826107ec565b61146c81611467610ffd565b6115d0565b6114768383611a93565b505050565b611483610ffd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e79061303c565b60405180910390fd5b6114fa8282611ca5565b5050565b6000611526836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611d86565b905092915050565b611536610a07565b611575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156c90612e7c565b60405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115b9610ffd565b6040516115c69190612da9565b60405180910390a1565b6115da8282610c04565b611669576115ff8173ffffffffffffffffffffffffffffffffffffffff166014611f04565b61160d8360001c6020611f04565b60405160200161161e929190612d6f565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116609190612dfa565b60405180910390fd5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d49061305c565b60405180910390fd5b6116e960008383611c4d565b80600460008282546116fb91906130f9565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461175191906130f9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117b6919061309c565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990612f9c565b60405180910390fd5b61183e82600083611c4d565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90612e9c565b60405180910390fd5b81816118d191906131a9565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816004600082825461192691906131a9565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161198b919061309c565b60405180910390a3505050565b6119a0610a07565b156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d790612f1c565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a24610ffd565b604051611a319190612da9565b60405180910390a1565b6000611a4a83600001836121fe565b60001c905092915050565b6000611a6382600001612298565b9050919050565b611a73826107ec565b611a8481611a7f610ffd565b6115d0565b611a8e8383611ca5565b505050565b611a9d8282610c04565b611b6f57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b14610ffd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000611b7f83836122a9565b611bd8578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611bdd565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c58838383610f7e565b611c60610a07565b15611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c979061307c565b60405180910390fd5b505050565b611caf8282610c04565b15611d8257600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d27610ffd565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008083600101600084815260200190815260200160002054905060008114611ef8576000600182611db891906131a9565b9050600060018660000180549050611dd091906131a9565b90506000866000018281548110611e10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611e5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550838760010160008381526020019081526020016000208190555086600001805480611ebc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611efe565b60009150505b92915050565b606060006002836002611f17919061314f565b611f2191906130f9565b67ffffffffffffffff811115611f60577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611f925781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611ff0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061207a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026120ba919061314f565b6120c491906130f9565b90505b60018111156121b0577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061212c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612169577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806121a99061329b565b90506120c7565b50600084146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90612e3c565b60405180910390fd5b8091505092915050565b600081836000018054905011612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224090612e1c565b60405180910390fd5b826000018281548110612285577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b6000813590506122db81613366565b92915050565b6000813590506122f08161337d565b92915050565b60008135905061230581613394565b92915050565b60008135905061231a816133ab565b92915050565b60006020828403121561233257600080fd5b6000612340848285016122cc565b91505092915050565b6000806040838503121561235c57600080fd5b600061236a858286016122cc565b925050602061237b858286016122cc565b9150509250929050565b60008060006060848603121561239a57600080fd5b60006123a8868287016122cc565b93505060206123b9868287016122cc565b92505060406123ca8682870161230b565b9150509250925092565b600080604083850312156123e757600080fd5b60006123f5858286016122cc565b92505060206124068582860161230b565b9150509250929050565b60006020828403121561242257600080fd5b6000612430848285016122e1565b91505092915050565b6000806040838503121561244c57600080fd5b600061245a858286016122e1565b925050602061246b858286016122cc565b9150509250929050565b6000806040838503121561248857600080fd5b6000612496858286016122e1565b92505060206124a78582860161230b565b9150509250929050565b6000602082840312156124c357600080fd5b60006124d1848285016122f6565b91505092915050565b6124e3816131dd565b82525050565b6124f2816131ef565b82525050565b612501816131fb565b82525050565b6000612512826130d2565b61251c81856130dd565b935061252c818560208601613268565b61253581613355565b840191505092915050565b600061254b826130d2565b61255581856130ee565b9350612565818560208601613268565b80840191505092915050565b600061257e6022836130dd565b91507f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006125e46020836130dd565b91507f537472696e67733a20686578206c656e67746820696e73756666696369656e746000830152602082019050919050565b60006126246023836130dd565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061268a6014836130dd565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b60006126ca6022836130dd565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006127306022836130dd565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006127966026836130dd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006127fc6024836130dd565b91507f45524332303a206d7573742068617665206275726e657220726f6c6520746f2060008301527f6d696e74000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006128626010836130dd565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b60006128a2602d836130dd565b91507f45524332305061757361626c653a206d7573742068617665207061757365722060008301527f726f6c6520746f207061757365000000000000000000000000000000000000006020830152604082019050919050565b60006129086028836130dd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b600061296e6024836130dd565b91507f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006129d46021836130dd565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612a3a6025836130dd565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612aa06024836130dd565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b066017836130ee565b91507f416363657373436f6e74726f6c3a206163636f756e74200000000000000000006000830152601782019050919050565b6000612b46602f836130dd565b91507f45524332305061757361626c653a206d7573742068617665207061757365722060008301527f726f6c6520746f20756e706175736500000000000000000000000000000000006020830152604082019050919050565b6000612bac6025836130dd565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c126011836130ee565b91507f206973206d697373696e6720726f6c65200000000000000000000000000000006000830152601182019050919050565b6000612c52602f836130dd565b91507f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008301527f20726f6c657320666f722073656c6600000000000000000000000000000000006020830152604082019050919050565b6000612cb8601f836130dd565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000612cf8602a836130dd565b91507f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008301527f696c6520706175736564000000000000000000000000000000000000000000006020830152604082019050919050565b612d5a81613251565b82525050565b612d698161325b565b82525050565b6000612d7a82612af9565b9150612d868285612540565b9150612d9182612c05565b9150612d9d8284612540565b91508190509392505050565b6000602082019050612dbe60008301846124da565b92915050565b6000602082019050612dd960008301846124e9565b92915050565b6000602082019050612df460008301846124f8565b92915050565b60006020820190508181036000830152612e148184612507565b905092915050565b60006020820190508181036000830152612e3581612571565b9050919050565b60006020820190508181036000830152612e55816125d7565b9050919050565b60006020820190508181036000830152612e7581612617565b9050919050565b60006020820190508181036000830152612e958161267d565b9050919050565b60006020820190508181036000830152612eb5816126bd565b9050919050565b60006020820190508181036000830152612ed581612723565b9050919050565b60006020820190508181036000830152612ef581612789565b9050919050565b60006020820190508181036000830152612f15816127ef565b9050919050565b60006020820190508181036000830152612f3581612855565b9050919050565b60006020820190508181036000830152612f5581612895565b9050919050565b60006020820190508181036000830152612f75816128fb565b9050919050565b60006020820190508181036000830152612f9581612961565b9050919050565b60006020820190508181036000830152612fb5816129c7565b9050919050565b60006020820190508181036000830152612fd581612a2d565b9050919050565b60006020820190508181036000830152612ff581612a93565b9050919050565b6000602082019050818103600083015261301581612b39565b9050919050565b6000602082019050818103600083015261303581612b9f565b9050919050565b6000602082019050818103600083015261305581612c45565b9050919050565b6000602082019050818103600083015261307581612cab565b9050919050565b6000602082019050818103600083015261309581612ceb565b9050919050565b60006020820190506130b16000830184612d51565b92915050565b60006020820190506130cc6000830184612d60565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061310482613251565b915061310f83613251565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613144576131436132f7565b5b828201905092915050565b600061315a82613251565b915061316583613251565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561319e5761319d6132f7565b5b828202905092915050565b60006131b482613251565b91506131bf83613251565b9250828210156131d2576131d16132f7565b5b828203905092915050565b60006131e882613231565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561328657808201518184015260208101905061326b565b83811115613295576000848401525b50505050565b60006132a682613251565b915060008214156132ba576132b96132f7565b5b600182039050919050565b600060028204905060018216806132dd57607f821691505b602082108114156132f1576132f0613326565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61336f816131dd565b811461337a57600080fd5b50565b613386816131fb565b811461339157600080fd5b50565b61339d81613205565b81146133a857600080fd5b50565b6133b481613251565b81146133bf57600080fd5b5056fea26469706673582212200694f2b9508a62cd9417f1b75edf897e9d544699af020d8f5553ac0c1fe3b5cf64736f6c63430008000033
Deployed Bytecode Sourcemap
44333:2400:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41512:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6580:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8747:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7700:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9398:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27811:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44686:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42883:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44989:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43406:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10229:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46556:168;;;:::i;:::-;;45984:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16439:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7871:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45391:426;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46241:162;;;:::i;:::-;;42338:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26809:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6799:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24774:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10947:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8211:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42657:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44617:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43141:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8449:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44548:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41512:227;41597:4;41636:42;41621:57;;;:11;:57;;;;:110;;;;41695:36;41719:11;41695:23;:36::i;:::-;41621:110;41614:117;;41512:227;;;:::o;6580:100::-;6634:13;6667:5;6660:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6580:100;:::o;8747:169::-;8830:4;8847:39;8856:12;:10;:12::i;:::-;8870:7;8879:6;8847:8;:39::i;:::-;8904:4;8897:11;;8747:169;;;;:::o;7700:108::-;7761:7;7788:12;;7781:19;;7700:108;:::o;9398:422::-;9504:4;9521:36;9531:6;9539:9;9550:6;9521:9;:36::i;:::-;9570:24;9597:11;:19;9609:6;9597:19;;;;;;;;;;;;;;;:33;9617:12;:10;:12::i;:::-;9597:33;;;;;;;;;;;;;;;;9570:60;;9669:6;9649:16;:26;;9641:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9731:57;9740:6;9748:12;:10;:12::i;:::-;9781:6;9762:16;:25;;;;:::i;:::-;9731:8;:57::i;:::-;9808:4;9801:11;;;9398:422;;;;;:::o;27811:123::-;27877:7;27904:6;:12;27911:4;27904:12;;;;;;;;;;;:22;;;27897:29;;27811:123;;;:::o;44686:62::-;44724:24;44686:62;:::o;42883:165::-;42968:30;42984:4;42990:7;42968:15;:30::i;:::-;43009:31;43032:7;43009:12;:18;43022:4;43009:18;;;;;;;;;;;:22;;:31;;;;:::i;:::-;;42883:165;;:::o;44989:92::-;45047:5;45072:1;45065:8;;44989:92;:::o;43406:174::-;43494:33;43513:4;43519:7;43494:18;:33::i;:::-;43538:34;43564:7;43538:12;:18;43551:4;43538:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;43406:174;;:::o;10229:215::-;10317:4;10334:80;10343:12;:10;:12::i;:::-;10357:7;10403:10;10366:11;:25;10378:12;:10;:12::i;:::-;10366:25;;;;;;;;;;;;;;;:34;10392:7;10366:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10334:8;:80::i;:::-;10432:4;10425:11;;10229:215;;;;:::o;46556:168::-;46609:34;44586:24;46630:12;:10;:12::i;:::-;46609:7;:34::i;:::-;46601:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;46706:10;:8;:10::i;:::-;46556:168::o;45984:107::-;44655:24;26378:30;26389:4;26395:12;:10;:12::i;:::-;26378:10;:30::i;:::-;46066:17:::1;46072:2;46076:6;46066:5;:17::i;:::-;45984:107:::0;;;:::o;16439:86::-;16486:4;16510:7;;;;;;;;;;;16503:14;;16439:86;:::o;7871:127::-;7945:7;7972:9;:18;7982:7;7972:18;;;;;;;;;;;;;;;;7965:25;;7871:127;;;:::o;45391:426::-;45476:34;44724:24;45497:12;:10;:12::i;:::-;45476:7;:34::i;:::-;45468:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;45562:24;45589:32;45599:7;45608:12;:10;:12::i;:::-;45589:9;:32::i;:::-;45562:59;;45660:6;45640:16;:26;;45632:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;45718:58;45727:7;45736:12;:10;:12::i;:::-;45769:6;45750:16;:25;;;;:::i;:::-;45718:8;:58::i;:::-;45787:22;45793:7;45802:6;45787:5;:22::i;:::-;45391:426;;;:::o;46241:162::-;46292:34;44586:24;46313:12;:10;:12::i;:::-;46292:7;:34::i;:::-;46284:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;46387:8;:6;:8::i;:::-;46241:162::o;42338:145::-;42420:7;42447:28;42469:5;42447:12;:18;42460:4;42447:18;;;;;;;;;;;:21;;:28;;;;:::i;:::-;42440:35;;42338:145;;;;:::o;26809:139::-;26887:4;26911:6;:12;26918:4;26911:12;;;;;;;;;;;:20;;:29;26932:7;26911:29;;;;;;;;;;;;;;;;;;;;;;;;;26904:36;;26809:139;;;;:::o;6799:104::-;6855:13;6888:7;6881:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6799:104;:::o;24774:49::-;24819:4;24774:49;;;:::o;10947:377::-;11040:4;11057:24;11084:11;:25;11096:12;:10;:12::i;:::-;11084:25;;;;;;;;;;;;;;;:34;11110:7;11084:34;;;;;;;;;;;;;;;;11057:61;;11157:15;11137:16;:35;;11129:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11225:67;11234:12;:10;:12::i;:::-;11248:7;11276:15;11257:16;:34;;;;:::i;:::-;11225:8;:67::i;:::-;11312:4;11305:11;;;10947:377;;;;:::o;8211:175::-;8297:4;8314:42;8324:12;:10;:12::i;:::-;8338:9;8349:6;8314:9;:42::i;:::-;8374:4;8367:11;;8211:175;;;;:::o;42657:134::-;42729:7;42756:27;:12;:18;42769:4;42756:18;;;;;;;;;;;:25;:27::i;:::-;42749:34;;42657:134;;;:::o;44617:62::-;44655:24;44617:62;:::o;43141:170::-;43227:31;43244:4;43250:7;43227:16;:31::i;:::-;43269:34;43295:7;43269:12;:18;43282:4;43269:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;43141:170;;:::o;8449:151::-;8538:7;8565:11;:18;8577:5;8565:18;;;;;;;;;;;;;;;:27;8584:7;8565:27;;;;;;;;;;;;;;;;8558:34;;8449:151;;;;:::o;44548:62::-;44586:24;44548:62;:::o;30045:112::-;30124:25;30135:4;30141:7;30124:10;:25::i;:::-;30045:112;;:::o;37646:152::-;37716:4;37740:50;37745:3;:10;;37781:5;37765:23;;37757:32;;37740:4;:50::i;:::-;37733:57;;37646:152;;;;:::o;15252:92::-;;;;:::o;26500:217::-;26585:4;26624:32;26609:47;;;:11;:47;;;;:100;;;;26673:36;26697:11;26673:23;:36::i;:::-;26609:100;26602:107;;26500:217;;;:::o;4154:98::-;4207:7;4234:10;4227:17;;4154:98;:::o;14303:346::-;14422:1;14405:19;;:5;:19;;;;14397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14503:1;14484:21;;:7;:21;;;;14476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14587:6;14557:11;:18;14569:5;14557:18;;;;;;;;;;;;;;;:27;14576:7;14557:27;;;;;;;;;;;;;;;:36;;;;14625:7;14609:32;;14618:5;14609:32;;;14634:6;14609:32;;;;;;:::i;:::-;;;;;;;;14303:346;;;:::o;11814:604::-;11938:1;11920:20;;:6;:20;;;;11912:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12022:1;12001:23;;:9;:23;;;;11993:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12077:47;12098:6;12106:9;12117:6;12077:20;:47::i;:::-;12137:21;12161:9;:17;12171:6;12161:17;;;;;;;;;;;;;;;;12137:41;;12214:6;12197:13;:23;;12189:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12310:6;12294:13;:22;;;;:::i;:::-;12274:9;:17;12284:6;12274:17;;;;;;;;;;;;;;;:42;;;;12351:6;12327:9;:20;12337:9;12327:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12392:9;12375:35;;12384:6;12375:35;;;12403:6;12375:35;;;;;;:::i;:::-;;;;;;;;11814:604;;;;:::o;28196:147::-;28279:18;28292:4;28279:12;:18::i;:::-;26378:30;26389:4;26395:12;:10;:12::i;:::-;26378:10;:30::i;:::-;28310:25:::1;28321:4;28327:7;28310:10;:25::i;:::-;28196:147:::0;;;:::o;29244:218::-;29351:12;:10;:12::i;:::-;29340:23;;:7;:23;;;29332:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;29428:26;29440:4;29446:7;29428:11;:26::i;:::-;29244:218;;:::o;37974:158::-;38047:4;38071:53;38079:3;:10;;38115:5;38099:23;;38091:32;;38071:7;:53::i;:::-;38064:60;;37974:158;;;;:::o;17498:120::-;17042:8;:6;:8::i;:::-;17034:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;17567:5:::1;17557:7;;:15;;;;;;;;;;;;;;;;;;17588:22;17597:12;:10;:12::i;:::-;17588:22;;;;;;:::i;:::-;;;;;;;;17498:120::o:0;27238:384::-;27318:22;27326:4;27332:7;27318;:22::i;:::-;27314:301;;27450:41;27478:7;27450:41;;27488:2;27450:19;:41::i;:::-;27548:38;27576:4;27568:13;;27583:2;27548:19;:38::i;:::-;27371:230;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27357:246;;;;;;;;;;;:::i;:::-;;;;;;;;27314:301;27238:384;;:::o;12700:338::-;12803:1;12784:21;;:7;:21;;;;12776:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12854:49;12883:1;12887:7;12896:6;12854:20;:49::i;:::-;12932:6;12916:12;;:22;;;;;;;:::i;:::-;;;;;;;;12971:6;12949:9;:18;12959:7;12949:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13014:7;12993:37;;13010:1;12993:37;;;13023:6;12993:37;;;;;;:::i;:::-;;;;;;;;12700:338;;:::o;13371:494::-;13474:1;13455:21;;:7;:21;;;;13447:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13527:49;13548:7;13565:1;13569:6;13527:20;:49::i;:::-;13589:22;13614:9;:18;13624:7;13614:18;;;;;;;;;;;;;;;;13589:43;;13669:6;13651:14;:24;;13643:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13763:6;13746:14;:23;;;;:::i;:::-;13725:9;:18;13735:7;13725:18;;;;;;;;;;;;;;;:44;;;;13796:6;13780:12;;:22;;;;;;;:::i;:::-;;;;;;;;13846:1;13820:37;;13829:7;13820:37;;;13850:6;13820:37;;;;;;:::i;:::-;;;;;;;;13371:494;;;:::o;17239:118::-;16765:8;:6;:8::i;:::-;16764:9;16756:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;17309:4:::1;17299:7;;:14;;;;;;;;;;;;;;;;;;17329:20;17336:12;:10;:12::i;:::-;17329:20;;;;;;:::i;:::-;;;;;;;;17239:118::o:0;38932:158::-;39006:7;39057:22;39061:3;:10;;39073:5;39057:3;:22::i;:::-;39049:31;;39026:56;;38932:158;;;;:::o;38471:117::-;38534:7;38561:19;38569:3;:10;;38561:7;:19::i;:::-;38554:26;;38471:117;;;:::o;28588:149::-;28672:18;28685:4;28672:12;:18::i;:::-;26378:30;26389:4;26395:12;:10;:12::i;:::-;26378:10;:30::i;:::-;28703:26:::1;28715:4;28721:7;28703:11;:26::i;:::-;28588:149:::0;;;:::o;30492:229::-;30567:22;30575:4;30581:7;30567;:22::i;:::-;30562:152;;30638:4;30606:6;:12;30613:4;30606:12;;;;;;;;;;;:20;;:29;30627:7;30606:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30689:12;:10;:12::i;:::-;30662:40;;30680:7;30662:40;;30674:4;30662:40;;;;;;;;;;30562:152;30492:229;;:::o;32701:414::-;32764:4;32786:21;32796:3;32801:5;32786:9;:21::i;:::-;32781:327;;32824:3;:11;;32841:5;32824:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33007:3;:11;;:18;;;;32985:3;:12;;:19;32998:5;32985:19;;;;;;;;;;;:40;;;;33047:4;33040:11;;;;32781:327;33091:5;33084:12;;32701:414;;;;;:::o;22213:157::-;22298:4;22337:25;22322:40;;;:11;:40;;;;22315:47;;22213:157;;;:::o;18218:238::-;18327:44;18354:4;18360:2;18364:6;18327:26;:44::i;:::-;18393:8;:6;:8::i;:::-;18392:9;18384:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18218:238;;;:::o;30729:230::-;30804:22;30812:4;30818:7;30804;:22::i;:::-;30800:152;;;30875:5;30843:6;:12;30850:4;30843:12;;;;;;;;;;;:20;;:29;30864:7;30843:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30927:12;:10;:12::i;:::-;30900:40;;30918:7;30900:40;;30912:4;30900:40;;;;;;;;;;30800:152;30729:230;;:::o;33291:1553::-;33357:4;33475:18;33496:3;:12;;:19;33509:5;33496:19;;;;;;;;;;;;33475:40;;33546:1;33532:10;:15;33528:1309;;33894:21;33931:1;33918:10;:14;;;;:::i;:::-;33894:38;;33947:17;33988:1;33967:3;:11;;:18;;;;:22;;;;:::i;:::-;33947:42;;34234:17;34254:3;:11;;34266:9;34254:22;;;;;;;;;;;;;;;;;;;;;;;;34234:42;;34400:9;34371:3;:11;;34383:13;34371:26;;;;;;;;;;;;;;;;;;;;;;;:38;;;;34503:10;34477:3;:12;;:23;34490:9;34477:23;;;;;;;;;;;:36;;;;34638:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34733:3;:12;;:19;34746:5;34733:19;;;;;;;;;;;34726:26;;;34776:4;34769:11;;;;;;;;33528:1309;34820:5;34813:12;;;33291:1553;;;;;:::o;20084:447::-;20159:13;20185:19;20230:1;20221:6;20217:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;20207:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20185:47;;20243:15;:6;20250:1;20243:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;20269;:6;20276:1;20269:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;20300:9;20325:1;20316:6;20312:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;20300:26;;20295:131;20332:1;20328;:5;20295:131;;;20367:8;20384:3;20376:5;:11;20367:21;;;;;;;;;;;;;;;;;;20355:6;20362:1;20355:9;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;20413:1;20403:11;;;;;20335:3;;;;:::i;:::-;;;20295:131;;;;20453:1;20444:5;:10;20436:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;20516:6;20502:21;;;20084:447;;;;:::o;35598:204::-;35665:7;35714:5;35693:3;:11;;:18;;;;:26;35685:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35776:3;:11;;35788:5;35776:18;;;;;;;;;;;;;;;;;;;;;;;;35769:25;;35598:204;;;;:::o;35145:109::-;35201:7;35228:3;:11;;:18;;;;35221:25;;35145:109;;;:::o;34930:129::-;35003:4;35050:1;35027:3;:12;;:19;35040:5;35027:19;;;;;;;;;;;;:24;;35020:31;;34930:129;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:137::-;;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;348:86;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:407::-;;;978:2;966:9;957:7;953:23;949:32;946:2;;;994:1;991;984:12;946:2;1037:1;1062:53;1107:7;1098:6;1087:9;1083:22;1062:53;:::i;:::-;1052:63;;1008:117;1164:2;1190:53;1235:7;1226:6;1215:9;1211:22;1190:53;:::i;:::-;1180:63;;1135:118;936:324;;;;;:::o;1266:552::-;;;;1408:2;1396:9;1387:7;1383:23;1379:32;1376:2;;;1424:1;1421;1414:12;1376:2;1467:1;1492:53;1537:7;1528:6;1517:9;1513:22;1492:53;:::i;:::-;1482:63;;1438:117;1594:2;1620:53;1665:7;1656:6;1645:9;1641:22;1620:53;:::i;:::-;1610:63;;1565:118;1722:2;1748:53;1793:7;1784:6;1773:9;1769:22;1748:53;:::i;:::-;1738:63;;1693:118;1366:452;;;;;:::o;1824:407::-;;;1949:2;1937:9;1928:7;1924:23;1920:32;1917:2;;;1965:1;1962;1955:12;1917:2;2008:1;2033:53;2078:7;2069:6;2058:9;2054:22;2033:53;:::i;:::-;2023:63;;1979:117;2135:2;2161:53;2206:7;2197:6;2186:9;2182:22;2161:53;:::i;:::-;2151:63;;2106:118;1907:324;;;;;:::o;2237:262::-;;2345:2;2333:9;2324:7;2320:23;2316:32;2313:2;;;2361:1;2358;2351:12;2313:2;2404:1;2429:53;2474:7;2465:6;2454:9;2450:22;2429:53;:::i;:::-;2419:63;;2375:117;2303:196;;;;:::o;2505:407::-;;;2630:2;2618:9;2609:7;2605:23;2601:32;2598:2;;;2646:1;2643;2636:12;2598:2;2689:1;2714:53;2759:7;2750:6;2739:9;2735:22;2714:53;:::i;:::-;2704:63;;2660:117;2816:2;2842:53;2887:7;2878:6;2867:9;2863:22;2842:53;:::i;:::-;2832:63;;2787:118;2588:324;;;;;:::o;2918:407::-;;;3043:2;3031:9;3022:7;3018:23;3014:32;3011:2;;;3059:1;3056;3049:12;3011:2;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;3229:2;3255:53;3300:7;3291:6;3280:9;3276:22;3255:53;:::i;:::-;3245:63;;3200:118;3001:324;;;;;:::o;3331:260::-;;3438:2;3426:9;3417:7;3413:23;3409:32;3406:2;;;3454:1;3451;3444:12;3406:2;3497:1;3522:52;3566:7;3557:6;3546:9;3542:22;3522:52;:::i;:::-;3512:62;;3468:116;3396:195;;;;:::o;3597:118::-;3684:24;3702:5;3684:24;:::i;:::-;3679:3;3672:37;3662:53;;:::o;3721:109::-;3802:21;3817:5;3802:21;:::i;:::-;3797:3;3790:34;3780:50;;:::o;3836:118::-;3923:24;3941:5;3923:24;:::i;:::-;3918:3;3911:37;3901:53;;:::o;3960:364::-;;4076:39;4109:5;4076:39;:::i;:::-;4131:71;4195:6;4190:3;4131:71;:::i;:::-;4124:78;;4211:52;4256:6;4251:3;4244:4;4237:5;4233:16;4211:52;:::i;:::-;4288:29;4310:6;4288:29;:::i;:::-;4283:3;4279:39;4272:46;;4052:272;;;;;:::o;4330:377::-;;4464:39;4497:5;4464:39;:::i;:::-;4519:89;4601:6;4596:3;4519:89;:::i;:::-;4512:96;;4617:52;4662:6;4657:3;4650:4;4643:5;4639:16;4617:52;:::i;:::-;4694:6;4689:3;4685:16;4678:23;;4440:267;;;;;:::o;4713:366::-;;4876:67;4940:2;4935:3;4876:67;:::i;:::-;4869:74;;4973:34;4969:1;4964:3;4960:11;4953:55;5039:4;5034:2;5029:3;5025:12;5018:26;5070:2;5065:3;5061:12;5054:19;;4859:220;;;:::o;5085:330::-;;5248:67;5312:2;5307:3;5248:67;:::i;:::-;5241:74;;5345:34;5341:1;5336:3;5332:11;5325:55;5406:2;5401:3;5397:12;5390:19;;5231:184;;;:::o;5421:367::-;;5584:67;5648:2;5643:3;5584:67;:::i;:::-;5577:74;;5681:34;5677:1;5672:3;5668:11;5661:55;5747:5;5742:2;5737:3;5733:12;5726:27;5779:2;5774:3;5770:12;5763:19;;5567:221;;;:::o;5794:318::-;;5957:67;6021:2;6016:3;5957:67;:::i;:::-;5950:74;;6054:22;6050:1;6045:3;6041:11;6034:43;6103:2;6098:3;6094:12;6087:19;;5940:172;;;:::o;6118:366::-;;6281:67;6345:2;6340:3;6281:67;:::i;:::-;6274:74;;6378:34;6374:1;6369:3;6365:11;6358:55;6444:4;6439:2;6434:3;6430:12;6423:26;6475:2;6470:3;6466:12;6459:19;;6264:220;;;:::o;6490:366::-;;6653:67;6717:2;6712:3;6653:67;:::i;:::-;6646:74;;6750:34;6746:1;6741:3;6737:11;6730:55;6816:4;6811:2;6806:3;6802:12;6795:26;6847:2;6842:3;6838:12;6831:19;;6636:220;;;:::o;6862:370::-;;7025:67;7089:2;7084:3;7025:67;:::i;:::-;7018:74;;7122:34;7118:1;7113:3;7109:11;7102:55;7188:8;7183:2;7178:3;7174:12;7167:30;7223:2;7218:3;7214:12;7207:19;;7008:224;;;:::o;7238:368::-;;7401:67;7465:2;7460:3;7401:67;:::i;:::-;7394:74;;7498:34;7494:1;7489:3;7485:11;7478:55;7564:6;7559:2;7554:3;7550:12;7543:28;7597:2;7592:3;7588:12;7581:19;;7384:222;;;:::o;7612:314::-;;7775:67;7839:2;7834:3;7775:67;:::i;:::-;7768:74;;7872:18;7868:1;7863:3;7859:11;7852:39;7917:2;7912:3;7908:12;7901:19;;7758:168;;;:::o;7932:377::-;;8095:67;8159:2;8154:3;8095:67;:::i;:::-;8088:74;;8192:34;8188:1;8183:3;8179:11;8172:55;8258:15;8253:2;8248:3;8244:12;8237:37;8300:2;8295:3;8291:12;8284:19;;8078:231;;;:::o;8315:372::-;;8478:67;8542:2;8537:3;8478:67;:::i;:::-;8471:74;;8575:34;8571:1;8566:3;8562:11;8555:55;8641:10;8636:2;8631:3;8627:12;8620:32;8678:2;8673:3;8669:12;8662:19;;8461:226;;;:::o;8693:368::-;;8856:67;8920:2;8915:3;8856:67;:::i;:::-;8849:74;;8953:34;8949:1;8944:3;8940:11;8933:55;9019:6;9014:2;9009:3;9005:12;8998:28;9052:2;9047:3;9043:12;9036:19;;8839:222;;;:::o;9067:365::-;;9230:67;9294:2;9289:3;9230:67;:::i;:::-;9223:74;;9327:34;9323:1;9318:3;9314:11;9307:55;9393:3;9388:2;9383:3;9379:12;9372:25;9423:2;9418:3;9414:12;9407:19;;9213:219;;;:::o;9438:369::-;;9601:67;9665:2;9660:3;9601:67;:::i;:::-;9594:74;;9698:34;9694:1;9689:3;9685:11;9678:55;9764:7;9759:2;9754:3;9750:12;9743:29;9798:2;9793:3;9789:12;9782:19;;9584:223;;;:::o;9813:368::-;;9976:67;10040:2;10035:3;9976:67;:::i;:::-;9969:74;;10073:34;10069:1;10064:3;10060:11;10053:55;10139:6;10134:2;10129:3;10125:12;10118:28;10172:2;10167:3;10163:12;10156:19;;9959:222;;;:::o;10187:357::-;;10368:85;10450:2;10445:3;10368:85;:::i;:::-;10361:92;;10483:25;10479:1;10474:3;10470:11;10463:46;10535:2;10530:3;10526:12;10519:19;;10351:193;;;:::o;10550:379::-;;10713:67;10777:2;10772:3;10713:67;:::i;:::-;10706:74;;10810:34;10806:1;10801:3;10797:11;10790:55;10876:17;10871:2;10866:3;10862:12;10855:39;10920:2;10915:3;10911:12;10904:19;;10696:233;;;:::o;10935:369::-;;11098:67;11162:2;11157:3;11098:67;:::i;:::-;11091:74;;11195:34;11191:1;11186:3;11182:11;11175:55;11261:7;11256:2;11251:3;11247:12;11240:29;11295:2;11290:3;11286:12;11279:19;;11081:223;;;:::o;11310:351::-;;11491:85;11573:2;11568:3;11491:85;:::i;:::-;11484:92;;11606:19;11602:1;11597:3;11593:11;11586:40;11652:2;11647:3;11643:12;11636:19;;11474:187;;;:::o;11667:379::-;;11830:67;11894:2;11889:3;11830:67;:::i;:::-;11823:74;;11927:34;11923:1;11918:3;11914:11;11907:55;11993:17;11988:2;11983:3;11979:12;11972:39;12037:2;12032:3;12028:12;12021:19;;11813:233;;;:::o;12052:329::-;;12215:67;12279:2;12274:3;12215:67;:::i;:::-;12208:74;;12312:33;12308:1;12303:3;12299:11;12292:54;12372:2;12367:3;12363:12;12356:19;;12198:183;;;:::o;12387:374::-;;12550:67;12614:2;12609:3;12550:67;:::i;:::-;12543:74;;12647:34;12643:1;12638:3;12634:11;12627:55;12713:12;12708:2;12703:3;12699:12;12692:34;12752:2;12747:3;12743:12;12736:19;;12533:228;;;:::o;12767:118::-;12854:24;12872:5;12854:24;:::i;:::-;12849:3;12842:37;12832:53;;:::o;12891:112::-;12974:22;12990:5;12974:22;:::i;:::-;12969:3;12962:35;12952:51;;:::o;13009:967::-;;13413:148;13557:3;13413:148;:::i;:::-;13406:155;;13578:95;13669:3;13660:6;13578:95;:::i;:::-;13571:102;;13690:148;13834:3;13690:148;:::i;:::-;13683:155;;13855:95;13946:3;13937:6;13855:95;:::i;:::-;13848:102;;13967:3;13960:10;;13395:581;;;;;:::o;13982:222::-;;14113:2;14102:9;14098:18;14090:26;;14126:71;14194:1;14183:9;14179:17;14170:6;14126:71;:::i;:::-;14080:124;;;;:::o;14210:210::-;;14335:2;14324:9;14320:18;14312:26;;14348:65;14410:1;14399:9;14395:17;14386:6;14348:65;:::i;:::-;14302:118;;;;:::o;14426:222::-;;14557:2;14546:9;14542:18;14534:26;;14570:71;14638:1;14627:9;14623:17;14614:6;14570:71;:::i;:::-;14524:124;;;;:::o;14654:313::-;;14805:2;14794:9;14790:18;14782:26;;14854:9;14848:4;14844:20;14840:1;14829:9;14825:17;14818:47;14882:78;14955:4;14946:6;14882:78;:::i;:::-;14874:86;;14772:195;;;;:::o;14973:419::-;;15177:2;15166:9;15162:18;15154:26;;15226:9;15220:4;15216:20;15212:1;15201:9;15197:17;15190:47;15254:131;15380:4;15254:131;:::i;:::-;15246:139;;15144:248;;;:::o;15398:419::-;;15602:2;15591:9;15587:18;15579:26;;15651:9;15645:4;15641:20;15637:1;15626:9;15622:17;15615:47;15679:131;15805:4;15679:131;:::i;:::-;15671:139;;15569:248;;;:::o;15823:419::-;;16027:2;16016:9;16012:18;16004:26;;16076:9;16070:4;16066:20;16062:1;16051:9;16047:17;16040:47;16104:131;16230:4;16104:131;:::i;:::-;16096:139;;15994:248;;;:::o;16248:419::-;;16452:2;16441:9;16437:18;16429:26;;16501:9;16495:4;16491:20;16487:1;16476:9;16472:17;16465:47;16529:131;16655:4;16529:131;:::i;:::-;16521:139;;16419:248;;;:::o;16673:419::-;;16877:2;16866:9;16862:18;16854:26;;16926:9;16920:4;16916:20;16912:1;16901:9;16897:17;16890:47;16954:131;17080:4;16954:131;:::i;:::-;16946:139;;16844:248;;;:::o;17098:419::-;;17302:2;17291:9;17287:18;17279:26;;17351:9;17345:4;17341:20;17337:1;17326:9;17322:17;17315:47;17379:131;17505:4;17379:131;:::i;:::-;17371:139;;17269:248;;;:::o;17523:419::-;;17727:2;17716:9;17712:18;17704:26;;17776:9;17770:4;17766:20;17762:1;17751:9;17747:17;17740:47;17804:131;17930:4;17804:131;:::i;:::-;17796:139;;17694:248;;;:::o;17948:419::-;;18152:2;18141:9;18137:18;18129:26;;18201:9;18195:4;18191:20;18187:1;18176:9;18172:17;18165:47;18229:131;18355:4;18229:131;:::i;:::-;18221:139;;18119:248;;;:::o;18373:419::-;;18577:2;18566:9;18562:18;18554:26;;18626:9;18620:4;18616:20;18612:1;18601:9;18597:17;18590:47;18654:131;18780:4;18654:131;:::i;:::-;18646:139;;18544:248;;;:::o;18798:419::-;;19002:2;18991:9;18987:18;18979:26;;19051:9;19045:4;19041:20;19037:1;19026:9;19022:17;19015:47;19079:131;19205:4;19079:131;:::i;:::-;19071:139;;18969:248;;;:::o;19223:419::-;;19427:2;19416:9;19412:18;19404:26;;19476:9;19470:4;19466:20;19462:1;19451:9;19447:17;19440:47;19504:131;19630:4;19504:131;:::i;:::-;19496:139;;19394:248;;;:::o;19648:419::-;;19852:2;19841:9;19837:18;19829:26;;19901:9;19895:4;19891:20;19887:1;19876:9;19872:17;19865:47;19929:131;20055:4;19929:131;:::i;:::-;19921:139;;19819:248;;;:::o;20073:419::-;;20277:2;20266:9;20262:18;20254:26;;20326:9;20320:4;20316:20;20312:1;20301:9;20297:17;20290:47;20354:131;20480:4;20354:131;:::i;:::-;20346:139;;20244:248;;;:::o;20498:419::-;;20702:2;20691:9;20687:18;20679:26;;20751:9;20745:4;20741:20;20737:1;20726:9;20722:17;20715:47;20779:131;20905:4;20779:131;:::i;:::-;20771:139;;20669:248;;;:::o;20923:419::-;;21127:2;21116:9;21112:18;21104:26;;21176:9;21170:4;21166:20;21162:1;21151:9;21147:17;21140:47;21204:131;21330:4;21204:131;:::i;:::-;21196:139;;21094:248;;;:::o;21348:419::-;;21552:2;21541:9;21537:18;21529:26;;21601:9;21595:4;21591:20;21587:1;21576:9;21572:17;21565:47;21629:131;21755:4;21629:131;:::i;:::-;21621:139;;21519:248;;;:::o;21773:419::-;;21977:2;21966:9;21962:18;21954:26;;22026:9;22020:4;22016:20;22012:1;22001:9;21997:17;21990:47;22054:131;22180:4;22054:131;:::i;:::-;22046:139;;21944:248;;;:::o;22198:419::-;;22402:2;22391:9;22387:18;22379:26;;22451:9;22445:4;22441:20;22437:1;22426:9;22422:17;22415:47;22479:131;22605:4;22479:131;:::i;:::-;22471:139;;22369:248;;;:::o;22623:419::-;;22827:2;22816:9;22812:18;22804:26;;22876:9;22870:4;22866:20;22862:1;22851:9;22847:17;22840:47;22904:131;23030:4;22904:131;:::i;:::-;22896:139;;22794:248;;;:::o;23048:419::-;;23252:2;23241:9;23237:18;23229:26;;23301:9;23295:4;23291:20;23287:1;23276:9;23272:17;23265:47;23329:131;23455:4;23329:131;:::i;:::-;23321:139;;23219:248;;;:::o;23473:222::-;;23604:2;23593:9;23589:18;23581:26;;23617:71;23685:1;23674:9;23670:17;23661:6;23617:71;:::i;:::-;23571:124;;;;:::o;23701:214::-;;23828:2;23817:9;23813:18;23805:26;;23841:67;23905:1;23894:9;23890:17;23881:6;23841:67;:::i;:::-;23795:120;;;;:::o;23921:99::-;;24007:5;24001:12;23991:22;;23980:40;;;:::o;24026:169::-;;24144:6;24139:3;24132:19;24184:4;24179:3;24175:14;24160:29;;24122:73;;;;:::o;24201:148::-;;24340:3;24325:18;;24315:34;;;;:::o;24355:305::-;;24414:20;24432:1;24414:20;:::i;:::-;24409:25;;24448:20;24466:1;24448:20;:::i;:::-;24443:25;;24602:1;24534:66;24530:74;24527:1;24524:81;24521:2;;;24608:18;;:::i;:::-;24521:2;24652:1;24649;24645:9;24638:16;;24399:261;;;;:::o;24666:348::-;;24729:20;24747:1;24729:20;:::i;:::-;24724:25;;24763:20;24781:1;24763:20;:::i;:::-;24758:25;;24951:1;24883:66;24879:74;24876:1;24873:81;24868:1;24861:9;24854:17;24850:105;24847:2;;;24958:18;;:::i;:::-;24847:2;25006:1;25003;24999:9;24988:20;;24714:300;;;;:::o;25020:191::-;;25080:20;25098:1;25080:20;:::i;:::-;25075:25;;25114:20;25132:1;25114:20;:::i;:::-;25109:25;;25153:1;25150;25147:8;25144:2;;;25158:18;;:::i;:::-;25144:2;25203:1;25200;25196:9;25188:17;;25065:146;;;;:::o;25217:96::-;;25283:24;25301:5;25283:24;:::i;:::-;25272:35;;25262:51;;;:::o;25319:90::-;;25396:5;25389:13;25382:21;25371:32;;25361:48;;;:::o;25415:77::-;;25481:5;25470:16;;25460:32;;;:::o;25498:149::-;;25574:66;25567:5;25563:78;25552:89;;25542:105;;;:::o;25653:126::-;;25730:42;25723:5;25719:54;25708:65;;25698:81;;;:::o;25785:77::-;;25851:5;25840:16;;25830:32;;;:::o;25868:86::-;;25943:4;25936:5;25932:16;25921:27;;25911:43;;;:::o;25960:307::-;26028:1;26038:113;26052:6;26049:1;26046:13;26038:113;;;26137:1;26132:3;26128:11;26122:18;26118:1;26113:3;26109:11;26102:39;26074:2;26071:1;26067:10;26062:15;;26038:113;;;26169:6;26166:1;26163:13;26160:2;;;26249:1;26240:6;26235:3;26231:16;26224:27;26160:2;26009:258;;;;:::o;26273:171::-;;26335:24;26353:5;26335:24;:::i;:::-;26326:33;;26381:4;26374:5;26371:15;26368:2;;;26389:18;;:::i;:::-;26368:2;26436:1;26429:5;26425:13;26418:20;;26316:128;;;:::o;26450:320::-;;26531:1;26525:4;26521:12;26511:22;;26578:1;26572:4;26568:12;26599:18;26589:2;;26655:4;26647:6;26643:17;26633:27;;26589:2;26717;26709:6;26706:14;26686:18;26683:38;26680:2;;;26736:18;;:::i;:::-;26680:2;26501:269;;;;:::o;26776:180::-;26824:77;26821:1;26814:88;26921:4;26918:1;26911:15;26945:4;26942:1;26935:15;26962:180;27010:77;27007:1;27000:88;27107:4;27104:1;27097:15;27131:4;27128:1;27121:15;27148:102;;27240:2;27236:7;27231:2;27224:5;27220:14;27216:28;27206:38;;27196:54;;;:::o;27256:122::-;27329:24;27347:5;27329:24;:::i;:::-;27322:5;27319:35;27309:2;;27368:1;27365;27358:12;27309:2;27299:79;:::o;27384:122::-;27457:24;27475:5;27457:24;:::i;:::-;27450:5;27447:35;27437:2;;27496:1;27493;27486:12;27437:2;27427:79;:::o;27512:120::-;27584:23;27601:5;27584:23;:::i;:::-;27577:5;27574:34;27564:2;;27622:1;27619;27612:12;27564:2;27554:78;:::o;27638:122::-;27711:24;27729:5;27711:24;:::i;:::-;27704:5;27701:35;27691:2;;27750:1;27747;27740:12;27691:2;27681:79;:::o
Swarm Source
ipfs://0694f2b9508a62cd9417f1b75edf897e9d544699af020d8f5553ac0c1fe3b5cf
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.