ERC-20
Overview
Max Total Supply
1 JUAN
Holders
132
Market
Price
$0.00 @ 0.000000 FTM
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Juan
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2024-03-26 */ /** *Submitted for verification at scrollscan.com on 2024-03-23 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.2; /** * @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 @openzeppelin/contracts/token/ERC20/extensions/[email protected] /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File @openzeppelin/contracts/utils/[email protected] /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/token/ERC20/[email protected] /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `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"); unchecked { _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"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `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"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File @openzeppelin/contracts/access/[email protected] /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } // File @openzeppelin/contracts/utils/[email protected] /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/utils/introspection/[email protected] /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/access/[email protected] /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { 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 { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, 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 @openzeppelin/contracts/token/ERC20/extensions/[email protected] /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); unchecked { _approve(account, _msgSender(), currentAllowance - amount); } _burn(account, amount); } } // File @openzeppelin/contracts/access/[email protected] /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.2; contract Juan is ERC20, AccessControl, ERC20Burnable, Ownable { constructor() ERC20("There Can Only Be Juan", "JUAN") { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); } mapping (address => uint256) lastJuan; uint256 public juanPer100 = 1e15; //0.001 function lastJaunBlock(address to) public view returns (uint256) { return lastJuan[to]; } function mint() public { require( juanPer100 + totalSupply() <= 1e18, "Too much juan"); require( block.number - lastJaunBlock(msg.sender) >= 100, "Can only claim once per 100 blocks"); lastJuan[msg.sender] = block.number; _mint(msg.sender, juanPer100); } }
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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"juanPer100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"lastJaunBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266038d7ea4c680006008553480156200001c57600080fd5b506040518060400160405280601681526020017f54686572652043616e204f6e6c79204265204a75616e000000000000000000008152506040518060400160405280600481526020017f4a55414e0000000000000000000000000000000000000000000000000000000081525081600390816200009a9190620005a5565b508060049081620000ac9190620005a5565b505050620000cf620000c3620000ea60201b60201c565b620000f260201b60201c565b620000e46000801b33620001b860201b60201c565b6200068c565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001ca8282620001ce60201b60201c565b5050565b620001e08282620002c060201b60201c565b620002bc5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000261620000ea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003ad57607f821691505b602082108103620003c357620003c262000365565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200042d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003ee565b620004398683620003ee565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000486620004806200047a8462000451565b6200045b565b62000451565b9050919050565b6000819050919050565b620004a28362000465565b620004ba620004b1826200048d565b848454620003fb565b825550505050565b600090565b620004d1620004c2565b620004de81848462000497565b505050565b5b818110156200050657620004fa600082620004c7565b600181019050620004e4565b5050565b601f82111562000555576200051f81620003c9565b6200052a84620003de565b810160208510156200053a578190505b620005526200054985620003de565b830182620004e3565b50505b505050565b600082821c905092915050565b60006200057a600019846008026200055a565b1980831691505092915050565b600062000595838362000567565b9150826002028217905092915050565b620005b0826200032b565b67ffffffffffffffff811115620005cc57620005cb62000336565b5b620005d8825462000394565b620005e58282856200050a565b600060209050601f8311600181146200061d576000841562000608578287015190505b62000614858262000587565b86555062000684565b601f1984166200062d86620003c9565b60005b82811015620006575784890151825560018201915060208501945060208101905062000630565b8683101562000677578489015162000673601f89168262000567565b8355505b6001600288020188555050505b505050505050565b612d8e806200069c6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063a217fddf11610097578063b379303f11610071578063b379303f14610499578063d547741f146104c9578063dd62ed3e146104e5578063f2fde38b146105155761018e565b8063a217fddf1461041b578063a457c2d714610439578063a9059cbb146104695761018e565b806370a0823114610359578063715018a61461038957806379cc6790146103935780638da5cb5b146103af57806391d14854146103cd57806395d89b41146103fd5761018e565b8063248a9ca31161014b57806336568abe1161012557806336568abe146102d357806339509351146102ef57806342966c681461031f578063632063db1461033b5761018e565b8063248a9ca3146102695780632f2ff15d14610299578063313ce567146102b55761018e565b806301ffc9a71461019357806306fdde03146101c3578063095ea7b3146101e15780631249c58b1461021157806318160ddd1461021b57806323b872dd14610239575b600080fd5b6101ad60048036038101906101a89190611d2a565b610531565b6040516101ba9190611d72565b60405180910390f35b6101cb6105ab565b6040516101d89190611e1d565b60405180910390f35b6101fb60048036038101906101f69190611ed3565b61063d565b6040516102089190611d72565b60405180910390f35b61021961065b565b005b610223610763565b6040516102309190611f22565b60405180910390f35b610253600480360381019061024e9190611f3d565b61076d565b6040516102609190611d72565b60405180910390f35b610283600480360381019061027e9190611fc6565b610865565b6040516102909190612002565b60405180910390f35b6102b360048036038101906102ae919061201d565b610885565b005b6102bd6108ae565b6040516102ca9190612079565b60405180910390f35b6102ed60048036038101906102e8919061201d565b6108b7565b005b61030960048036038101906103049190611ed3565b61093a565b6040516103169190611d72565b60405180910390f35b61033960048036038101906103349190612094565b6109e6565b005b6103436109fa565b6040516103509190611f22565b60405180910390f35b610373600480360381019061036e91906120c1565b610a00565b6040516103809190611f22565b60405180910390f35b610391610a48565b005b6103ad60048036038101906103a89190611ed3565b610ad0565b005b6103b7610b4b565b6040516103c491906120fd565b60405180910390f35b6103e760048036038101906103e2919061201d565b610b75565b6040516103f49190611d72565b60405180910390f35b610405610be0565b6040516104129190611e1d565b60405180910390f35b610423610c72565b6040516104309190612002565b60405180910390f35b610453600480360381019061044e9190611ed3565b610c79565b6040516104609190611d72565b60405180910390f35b610483600480360381019061047e9190611ed3565b610d64565b6040516104909190611d72565b60405180910390f35b6104b360048036038101906104ae91906120c1565b610d82565b6040516104c09190611f22565b60405180910390f35b6104e360048036038101906104de919061201d565b610dcb565b005b6104ff60048036038101906104fa9190612118565b610df4565b60405161050c9190611f22565b60405180910390f35b61052f600480360381019061052a91906120c1565b610e7b565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105a457506105a382610f72565b5b9050919050565b6060600380546105ba90612187565b80601f01602080910402602001604051908101604052809291908181526020018280546105e690612187565b80156106335780601f1061060857610100808354040283529160200191610633565b820191906000526020600020905b81548152906001019060200180831161061657829003601f168201915b5050505050905090565b600061065161064a610fdc565b8484610fe4565b6001905092915050565b670de0b6b3a764000061066c610763565b60085461067991906121e7565b11156106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190612267565b60405180910390fd5b60646106c533610d82565b436106d09190612287565b1015610711576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107089061232d565b60405180910390fd5b43600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610761336008546111ad565b565b6000600254905090565b600061077a84848461130c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107c5610fdc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c906123bf565b60405180910390fd5b61085985610851610fdc565b858403610fe4565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b61088e82610865565b61089f8161089a610fdc565b61158b565b6108a98383611628565b505050565b60006012905090565b6108bf610fdc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092390612451565b60405180910390fd5b6109368282611709565b5050565b60006109dc610947610fdc565b848460016000610955610fdc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109d791906121e7565b610fe4565b6001905092915050565b6109f76109f1610fdc565b826117eb565b50565b60085481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a50610fdc565b73ffffffffffffffffffffffffffffffffffffffff16610a6e610b4b565b73ffffffffffffffffffffffffffffffffffffffff1614610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb906124bd565b60405180910390fd5b610ace60006119c1565b565b6000610ae383610ade610fdc565b610df4565b905081811015610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f9061254f565b60405180910390fd5b610b3c83610b34610fdc565b848403610fe4565b610b4683836117eb565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610bef90612187565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1b90612187565b8015610c685780601f10610c3d57610100808354040283529160200191610c68565b820191906000526020600020905b815481529060010190602001808311610c4b57829003601f168201915b5050505050905090565b6000801b81565b60008060016000610c88610fdc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906125e1565b60405180910390fd5b610d59610d50610fdc565b85858403610fe4565b600191505092915050565b6000610d78610d71610fdc565b848461130c565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dd482610865565b610de581610de0610fdc565b61158b565b610def8383611709565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e83610fdc565b73ffffffffffffffffffffffffffffffffffffffff16610ea1610b4b565b73ffffffffffffffffffffffffffffffffffffffff1614610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906124bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90612673565b60405180910390fd5b610f6f816119c1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104a90612705565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990612797565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111a09190611f22565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390612803565b60405180910390fd5b61122860008383611a87565b806002600082825461123a91906121e7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461128f91906121e7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112f49190611f22565b60405180910390a361130860008383611a8c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290612895565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190612927565b60405180910390fd5b6113f5838383611a87565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561147b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611472906129b9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461150e91906121e7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115729190611f22565b60405180910390a3611585848484611a8c565b50505050565b6115958282610b75565b611624576115ba8173ffffffffffffffffffffffffffffffffffffffff166014611a91565b6115c88360001c6020611a91565b6040516020016115d9929190612aad565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b9190611e1d565b60405180910390fd5b5050565b6116328282610b75565b6117055760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116aa610fdc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6117138282610b75565b156117e75760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061178c610fdc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190612b59565b60405180910390fd5b61186682600083611a87565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390612beb565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546119439190612287565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119a89190611f22565b60405180910390a36119bc83600084611a8c565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b606060006002836002611aa49190612c0b565b611aae91906121e7565b67ffffffffffffffff811115611ac757611ac6612c65565b5b6040519080825280601f01601f191660200182016040528015611af95781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611b3157611b30612c94565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611b9557611b94612c94565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611bd59190612c0b565b611bdf91906121e7565b90505b6001811115611c7f577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611c2157611c20612c94565b5b1a60f81b828281518110611c3857611c37612c94565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611c7890612cc3565b9050611be2565b5060008414611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba90612d38565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d0781611cd2565b8114611d1257600080fd5b50565b600081359050611d2481611cfe565b92915050565b600060208284031215611d4057611d3f611ccd565b5b6000611d4e84828501611d15565b91505092915050565b60008115159050919050565b611d6c81611d57565b82525050565b6000602082019050611d876000830184611d63565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611dc7578082015181840152602081019050611dac565b60008484015250505050565b6000601f19601f8301169050919050565b6000611def82611d8d565b611df98185611d98565b9350611e09818560208601611da9565b611e1281611dd3565b840191505092915050565b60006020820190508181036000830152611e378184611de4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e6a82611e3f565b9050919050565b611e7a81611e5f565b8114611e8557600080fd5b50565b600081359050611e9781611e71565b92915050565b6000819050919050565b611eb081611e9d565b8114611ebb57600080fd5b50565b600081359050611ecd81611ea7565b92915050565b60008060408385031215611eea57611ee9611ccd565b5b6000611ef885828601611e88565b9250506020611f0985828601611ebe565b9150509250929050565b611f1c81611e9d565b82525050565b6000602082019050611f376000830184611f13565b92915050565b600080600060608486031215611f5657611f55611ccd565b5b6000611f6486828701611e88565b9350506020611f7586828701611e88565b9250506040611f8686828701611ebe565b9150509250925092565b6000819050919050565b611fa381611f90565b8114611fae57600080fd5b50565b600081359050611fc081611f9a565b92915050565b600060208284031215611fdc57611fdb611ccd565b5b6000611fea84828501611fb1565b91505092915050565b611ffc81611f90565b82525050565b60006020820190506120176000830184611ff3565b92915050565b6000806040838503121561203457612033611ccd565b5b600061204285828601611fb1565b925050602061205385828601611e88565b9150509250929050565b600060ff82169050919050565b6120738161205d565b82525050565b600060208201905061208e600083018461206a565b92915050565b6000602082840312156120aa576120a9611ccd565b5b60006120b884828501611ebe565b91505092915050565b6000602082840312156120d7576120d6611ccd565b5b60006120e584828501611e88565b91505092915050565b6120f781611e5f565b82525050565b600060208201905061211260008301846120ee565b92915050565b6000806040838503121561212f5761212e611ccd565b5b600061213d85828601611e88565b925050602061214e85828601611e88565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061219f57607f821691505b6020821081036121b2576121b1612158565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121f282611e9d565b91506121fd83611e9d565b9250828201905080821115612215576122146121b8565b5b92915050565b7f546f6f206d756368206a75616e00000000000000000000000000000000000000600082015250565b6000612251600d83611d98565b915061225c8261221b565b602082019050919050565b6000602082019050818103600083015261228081612244565b9050919050565b600061229282611e9d565b915061229d83611e9d565b92508282039050818111156122b5576122b46121b8565b5b92915050565b7f43616e206f6e6c7920636c61696d206f6e6365207065722031303020626c6f6360008201527f6b73000000000000000000000000000000000000000000000000000000000000602082015250565b6000612317602283611d98565b9150612322826122bb565b604082019050919050565b600060208201905081810360008301526123468161230a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006123a9602883611d98565b91506123b48261234d565b604082019050919050565b600060208201905081810360008301526123d88161239c565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061243b602f83611d98565b9150612446826123df565b604082019050919050565b6000602082019050818103600083015261246a8161242e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006124a7602083611d98565b91506124b282612471565b602082019050919050565b600060208201905081810360008301526124d68161249a565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000612539602483611d98565b9150612544826124dd565b604082019050919050565b600060208201905081810360008301526125688161252c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006125cb602583611d98565b91506125d68261256f565b604082019050919050565b600060208201905081810360008301526125fa816125be565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061265d602683611d98565b915061266882612601565b604082019050919050565b6000602082019050818103600083015261268c81612650565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006126ef602483611d98565b91506126fa82612693565b604082019050919050565b6000602082019050818103600083015261271e816126e2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612781602283611d98565b915061278c82612725565b604082019050919050565b600060208201905081810360008301526127b081612774565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006127ed601f83611d98565b91506127f8826127b7565b602082019050919050565b6000602082019050818103600083015261281c816127e0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061287f602583611d98565b915061288a82612823565b604082019050919050565b600060208201905081810360008301526128ae81612872565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612911602383611d98565b915061291c826128b5565b604082019050919050565b6000602082019050818103600083015261294081612904565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006129a3602683611d98565b91506129ae82612947565b604082019050919050565b600060208201905081810360008301526129d281612996565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612a1a6017836129d9565b9150612a25826129e4565b601782019050919050565b6000612a3b82611d8d565b612a4581856129d9565b9350612a55818560208601611da9565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612a976011836129d9565b9150612aa282612a61565b601182019050919050565b6000612ab882612a0d565b9150612ac48285612a30565b9150612acf82612a8a565b9150612adb8284612a30565b91508190509392505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612b43602183611d98565b9150612b4e82612ae7565b604082019050919050565b60006020820190508181036000830152612b7281612b36565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bd5602283611d98565b9150612be082612b79565b604082019050919050565b60006020820190508181036000830152612c0481612bc8565b9050919050565b6000612c1682611e9d565b9150612c2183611e9d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c5a57612c596121b8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612cce82611e9d565b915060008203612ce157612ce06121b8565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612d22602083611d98565b9150612d2d82612cec565b602082019050919050565b60006020820190508181036000830152612d5181612d15565b905091905056fea264697066735822122048866b2943ba88f5412fdade0c04edb023d77108cb10dad21700f5e0f8f022c264736f6c63430008100033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063a217fddf11610097578063b379303f11610071578063b379303f14610499578063d547741f146104c9578063dd62ed3e146104e5578063f2fde38b146105155761018e565b8063a217fddf1461041b578063a457c2d714610439578063a9059cbb146104695761018e565b806370a0823114610359578063715018a61461038957806379cc6790146103935780638da5cb5b146103af57806391d14854146103cd57806395d89b41146103fd5761018e565b8063248a9ca31161014b57806336568abe1161012557806336568abe146102d357806339509351146102ef57806342966c681461031f578063632063db1461033b5761018e565b8063248a9ca3146102695780632f2ff15d14610299578063313ce567146102b55761018e565b806301ffc9a71461019357806306fdde03146101c3578063095ea7b3146101e15780631249c58b1461021157806318160ddd1461021b57806323b872dd14610239575b600080fd5b6101ad60048036038101906101a89190611d2a565b610531565b6040516101ba9190611d72565b60405180910390f35b6101cb6105ab565b6040516101d89190611e1d565b60405180910390f35b6101fb60048036038101906101f69190611ed3565b61063d565b6040516102089190611d72565b60405180910390f35b61021961065b565b005b610223610763565b6040516102309190611f22565b60405180910390f35b610253600480360381019061024e9190611f3d565b61076d565b6040516102609190611d72565b60405180910390f35b610283600480360381019061027e9190611fc6565b610865565b6040516102909190612002565b60405180910390f35b6102b360048036038101906102ae919061201d565b610885565b005b6102bd6108ae565b6040516102ca9190612079565b60405180910390f35b6102ed60048036038101906102e8919061201d565b6108b7565b005b61030960048036038101906103049190611ed3565b61093a565b6040516103169190611d72565b60405180910390f35b61033960048036038101906103349190612094565b6109e6565b005b6103436109fa565b6040516103509190611f22565b60405180910390f35b610373600480360381019061036e91906120c1565b610a00565b6040516103809190611f22565b60405180910390f35b610391610a48565b005b6103ad60048036038101906103a89190611ed3565b610ad0565b005b6103b7610b4b565b6040516103c491906120fd565b60405180910390f35b6103e760048036038101906103e2919061201d565b610b75565b6040516103f49190611d72565b60405180910390f35b610405610be0565b6040516104129190611e1d565b60405180910390f35b610423610c72565b6040516104309190612002565b60405180910390f35b610453600480360381019061044e9190611ed3565b610c79565b6040516104609190611d72565b60405180910390f35b610483600480360381019061047e9190611ed3565b610d64565b6040516104909190611d72565b60405180910390f35b6104b360048036038101906104ae91906120c1565b610d82565b6040516104c09190611f22565b60405180910390f35b6104e360048036038101906104de919061201d565b610dcb565b005b6104ff60048036038101906104fa9190612118565b610df4565b60405161050c9190611f22565b60405180910390f35b61052f600480360381019061052a91906120c1565b610e7b565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105a457506105a382610f72565b5b9050919050565b6060600380546105ba90612187565b80601f01602080910402602001604051908101604052809291908181526020018280546105e690612187565b80156106335780601f1061060857610100808354040283529160200191610633565b820191906000526020600020905b81548152906001019060200180831161061657829003601f168201915b5050505050905090565b600061065161064a610fdc565b8484610fe4565b6001905092915050565b670de0b6b3a764000061066c610763565b60085461067991906121e7565b11156106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190612267565b60405180910390fd5b60646106c533610d82565b436106d09190612287565b1015610711576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107089061232d565b60405180910390fd5b43600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610761336008546111ad565b565b6000600254905090565b600061077a84848461130c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107c5610fdc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c906123bf565b60405180910390fd5b61085985610851610fdc565b858403610fe4565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b61088e82610865565b61089f8161089a610fdc565b61158b565b6108a98383611628565b505050565b60006012905090565b6108bf610fdc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092390612451565b60405180910390fd5b6109368282611709565b5050565b60006109dc610947610fdc565b848460016000610955610fdc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109d791906121e7565b610fe4565b6001905092915050565b6109f76109f1610fdc565b826117eb565b50565b60085481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a50610fdc565b73ffffffffffffffffffffffffffffffffffffffff16610a6e610b4b565b73ffffffffffffffffffffffffffffffffffffffff1614610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb906124bd565b60405180910390fd5b610ace60006119c1565b565b6000610ae383610ade610fdc565b610df4565b905081811015610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f9061254f565b60405180910390fd5b610b3c83610b34610fdc565b848403610fe4565b610b4683836117eb565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610bef90612187565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1b90612187565b8015610c685780601f10610c3d57610100808354040283529160200191610c68565b820191906000526020600020905b815481529060010190602001808311610c4b57829003601f168201915b5050505050905090565b6000801b81565b60008060016000610c88610fdc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906125e1565b60405180910390fd5b610d59610d50610fdc565b85858403610fe4565b600191505092915050565b6000610d78610d71610fdc565b848461130c565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dd482610865565b610de581610de0610fdc565b61158b565b610def8383611709565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e83610fdc565b73ffffffffffffffffffffffffffffffffffffffff16610ea1610b4b565b73ffffffffffffffffffffffffffffffffffffffff1614610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906124bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90612673565b60405180910390fd5b610f6f816119c1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104a90612705565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990612797565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111a09190611f22565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390612803565b60405180910390fd5b61122860008383611a87565b806002600082825461123a91906121e7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461128f91906121e7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112f49190611f22565b60405180910390a361130860008383611a8c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290612895565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190612927565b60405180910390fd5b6113f5838383611a87565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561147b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611472906129b9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461150e91906121e7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115729190611f22565b60405180910390a3611585848484611a8c565b50505050565b6115958282610b75565b611624576115ba8173ffffffffffffffffffffffffffffffffffffffff166014611a91565b6115c88360001c6020611a91565b6040516020016115d9929190612aad565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b9190611e1d565b60405180910390fd5b5050565b6116328282610b75565b6117055760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116aa610fdc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6117138282610b75565b156117e75760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061178c610fdc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190612b59565b60405180910390fd5b61186682600083611a87565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390612beb565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546119439190612287565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119a89190611f22565b60405180910390a36119bc83600084611a8c565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b606060006002836002611aa49190612c0b565b611aae91906121e7565b67ffffffffffffffff811115611ac757611ac6612c65565b5b6040519080825280601f01601f191660200182016040528015611af95781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611b3157611b30612c94565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611b9557611b94612c94565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611bd59190612c0b565b611bdf91906121e7565b90505b6001811115611c7f577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611c2157611c20612c94565b5b1a60f81b828281518110611c3857611c37612c94565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611c7890612cc3565b9050611be2565b5060008414611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba90612d38565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d0781611cd2565b8114611d1257600080fd5b50565b600081359050611d2481611cfe565b92915050565b600060208284031215611d4057611d3f611ccd565b5b6000611d4e84828501611d15565b91505092915050565b60008115159050919050565b611d6c81611d57565b82525050565b6000602082019050611d876000830184611d63565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611dc7578082015181840152602081019050611dac565b60008484015250505050565b6000601f19601f8301169050919050565b6000611def82611d8d565b611df98185611d98565b9350611e09818560208601611da9565b611e1281611dd3565b840191505092915050565b60006020820190508181036000830152611e378184611de4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e6a82611e3f565b9050919050565b611e7a81611e5f565b8114611e8557600080fd5b50565b600081359050611e9781611e71565b92915050565b6000819050919050565b611eb081611e9d565b8114611ebb57600080fd5b50565b600081359050611ecd81611ea7565b92915050565b60008060408385031215611eea57611ee9611ccd565b5b6000611ef885828601611e88565b9250506020611f0985828601611ebe565b9150509250929050565b611f1c81611e9d565b82525050565b6000602082019050611f376000830184611f13565b92915050565b600080600060608486031215611f5657611f55611ccd565b5b6000611f6486828701611e88565b9350506020611f7586828701611e88565b9250506040611f8686828701611ebe565b9150509250925092565b6000819050919050565b611fa381611f90565b8114611fae57600080fd5b50565b600081359050611fc081611f9a565b92915050565b600060208284031215611fdc57611fdb611ccd565b5b6000611fea84828501611fb1565b91505092915050565b611ffc81611f90565b82525050565b60006020820190506120176000830184611ff3565b92915050565b6000806040838503121561203457612033611ccd565b5b600061204285828601611fb1565b925050602061205385828601611e88565b9150509250929050565b600060ff82169050919050565b6120738161205d565b82525050565b600060208201905061208e600083018461206a565b92915050565b6000602082840312156120aa576120a9611ccd565b5b60006120b884828501611ebe565b91505092915050565b6000602082840312156120d7576120d6611ccd565b5b60006120e584828501611e88565b91505092915050565b6120f781611e5f565b82525050565b600060208201905061211260008301846120ee565b92915050565b6000806040838503121561212f5761212e611ccd565b5b600061213d85828601611e88565b925050602061214e85828601611e88565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061219f57607f821691505b6020821081036121b2576121b1612158565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121f282611e9d565b91506121fd83611e9d565b9250828201905080821115612215576122146121b8565b5b92915050565b7f546f6f206d756368206a75616e00000000000000000000000000000000000000600082015250565b6000612251600d83611d98565b915061225c8261221b565b602082019050919050565b6000602082019050818103600083015261228081612244565b9050919050565b600061229282611e9d565b915061229d83611e9d565b92508282039050818111156122b5576122b46121b8565b5b92915050565b7f43616e206f6e6c7920636c61696d206f6e6365207065722031303020626c6f6360008201527f6b73000000000000000000000000000000000000000000000000000000000000602082015250565b6000612317602283611d98565b9150612322826122bb565b604082019050919050565b600060208201905081810360008301526123468161230a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006123a9602883611d98565b91506123b48261234d565b604082019050919050565b600060208201905081810360008301526123d88161239c565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061243b602f83611d98565b9150612446826123df565b604082019050919050565b6000602082019050818103600083015261246a8161242e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006124a7602083611d98565b91506124b282612471565b602082019050919050565b600060208201905081810360008301526124d68161249a565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000612539602483611d98565b9150612544826124dd565b604082019050919050565b600060208201905081810360008301526125688161252c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006125cb602583611d98565b91506125d68261256f565b604082019050919050565b600060208201905081810360008301526125fa816125be565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061265d602683611d98565b915061266882612601565b604082019050919050565b6000602082019050818103600083015261268c81612650565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006126ef602483611d98565b91506126fa82612693565b604082019050919050565b6000602082019050818103600083015261271e816126e2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612781602283611d98565b915061278c82612725565b604082019050919050565b600060208201905081810360008301526127b081612774565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006127ed601f83611d98565b91506127f8826127b7565b602082019050919050565b6000602082019050818103600083015261281c816127e0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061287f602583611d98565b915061288a82612823565b604082019050919050565b600060208201905081810360008301526128ae81612872565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612911602383611d98565b915061291c826128b5565b604082019050919050565b6000602082019050818103600083015261294081612904565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006129a3602683611d98565b91506129ae82612947565b604082019050919050565b600060208201905081810360008301526129d281612996565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612a1a6017836129d9565b9150612a25826129e4565b601782019050919050565b6000612a3b82611d8d565b612a4581856129d9565b9350612a55818560208601611da9565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612a976011836129d9565b9150612aa282612a61565b601182019050919050565b6000612ab882612a0d565b9150612ac48285612a30565b9150612acf82612a8a565b9150612adb8284612a30565b91508190509392505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612b43602183611d98565b9150612b4e82612ae7565b604082019050919050565b60006020820190508181036000830152612b7281612b36565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bd5602283611d98565b9150612be082612b79565b604082019050919050565b60006020820190508181036000830152612c0481612bc8565b9050919050565b6000612c1682611e9d565b9150612c2183611e9d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c5a57612c596121b8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612cce82611e9d565b915060008203612ce157612ce06121b8565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612d22602083611d98565b9150612d2d82612cec565b602082019050919050565b60006020820190508181036000830152612d5181612d15565b905091905056fea264697066735822122048866b2943ba88f5412fdade0c04edb023d77108cb10dad21700f5e0f8f022c264736f6c63430008100033
Deployed Bytecode Sourcemap
33818:749:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25659:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6402:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8569:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34213:351;;;:::i;:::-;;7522:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9220:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27070:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27455:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7364:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28503:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10121:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30745:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34055:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7693:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33162:94;;;:::i;:::-;;31155:368;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32511:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25955:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6621:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25046:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10839:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8033:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34102:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27847:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8271:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33411:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25659:204;25744:4;25783:32;25768:47;;;:11;:47;;;;:87;;;;25819:36;25843:11;25819:23;:36::i;:::-;25768:87;25761:94;;25659:204;;;:::o;6402:100::-;6456:13;6489:5;6482:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6402:100;:::o;8569:169::-;8652:4;8669:39;8678:12;:10;:12::i;:::-;8692:7;8701:6;8669:8;:39::i;:::-;8726:4;8719:11;;8569:169;;;;:::o;34213:351::-;34299:4;34282:13;:11;:13::i;:::-;34269:10;;:26;;;;:::i;:::-;:34;;34247:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;34412:3;34383:25;34397:10;34383:13;:25::i;:::-;34368:12;:40;;;;:::i;:::-;:47;;34346:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;34504:12;34481:8;:20;34490:10;34481:20;;;;;;;;;;;;;;;:35;;;;34527:29;34533:10;34545;;34527:5;:29::i;:::-;34213:351::o;7522:108::-;7583:7;7610:12;;7603:19;;7522:108;:::o;9220:492::-;9360:4;9377:36;9387:6;9395:9;9406:6;9377:9;:36::i;:::-;9426:24;9453:11;:19;9465:6;9453:19;;;;;;;;;;;;;;;:33;9473:12;:10;:12::i;:::-;9453:33;;;;;;;;;;;;;;;;9426:60;;9525:6;9505:16;:26;;9497:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9612:57;9621:6;9629:12;:10;:12::i;:::-;9662:6;9643:16;:25;9612:8;:57::i;:::-;9700:4;9693:11;;;9220:492;;;;;:::o;27070:123::-;27136:7;27163:6;:12;27170:4;27163:12;;;;;;;;;;;:22;;;27156:29;;27070:123;;;:::o;27455:147::-;27538:18;27551:4;27538:12;:18::i;:::-;25537:30;25548:4;25554:12;:10;:12::i;:::-;25537:10;:30::i;:::-;27569:25:::1;27580:4;27586:7;27569:10;:25::i;:::-;27455:147:::0;;;:::o;7364:93::-;7422:5;7447:2;7440:9;;7364:93;:::o;28503:218::-;28610:12;:10;:12::i;:::-;28599:23;;:7;:23;;;28591:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;28687:26;28699:4;28705:7;28687:11;:26::i;:::-;28503:218;;:::o;10121:215::-;10209:4;10226:80;10235:12;:10;:12::i;:::-;10249:7;10295:10;10258:11;:25;10270:12;:10;:12::i;:::-;10258:25;;;;;;;;;;;;;;;:34;10284:7;10258:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10226:8;:80::i;:::-;10324:4;10317:11;;10121:215;;;;:::o;30745:91::-;30801:27;30807:12;:10;:12::i;:::-;30821:6;30801:5;:27::i;:::-;30745:91;:::o;34055:32::-;;;;:::o;7693:127::-;7767:7;7794:9;:18;7804:7;7794:18;;;;;;;;;;;;;;;;7787:25;;7693:127;;;:::o;33162:94::-;32742:12;:10;:12::i;:::-;32731:23;;:7;:5;:7::i;:::-;:23;;;32723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33227:21:::1;33245:1;33227:9;:21::i;:::-;33162:94::o:0;31155:368::-;31232:24;31259:32;31269:7;31278:12;:10;:12::i;:::-;31259:9;:32::i;:::-;31232:59;;31330:6;31310:16;:26;;31302:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;31413:58;31422:7;31431:12;:10;:12::i;:::-;31464:6;31445:16;:25;31413:8;:58::i;:::-;31493:22;31499:7;31508:6;31493:5;:22::i;:::-;31221:302;31155:368;;:::o;32511:87::-;32557:7;32584:6;;;;;;;;;;;32577:13;;32511:87;:::o;25955:139::-;26033:4;26057:6;:12;26064:4;26057:12;;;;;;;;;;;:20;;:29;26078:7;26057:29;;;;;;;;;;;;;;;;;;;;;;;;;26050:36;;25955:139;;;;:::o;6621:104::-;6677:13;6710:7;6703:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6621:104;:::o;25046:49::-;25091:4;25046:49;;;:::o;10839:413::-;10932:4;10949:24;10976:11;:25;10988:12;:10;:12::i;:::-;10976:25;;;;;;;;;;;;;;;:34;11002:7;10976:34;;;;;;;;;;;;;;;;10949:61;;11049:15;11029:16;:35;;11021:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11142:67;11151:12;:10;:12::i;:::-;11165:7;11193:15;11174:16;:34;11142:8;:67::i;:::-;11240:4;11233:11;;;10839:413;;;;:::o;8033:175::-;8119:4;8136:42;8146:12;:10;:12::i;:::-;8160:9;8171:6;8136:9;:42::i;:::-;8196:4;8189:11;;8033:175;;;;:::o;34102:103::-;34158:7;34185:8;:12;34194:2;34185:12;;;;;;;;;;;;;;;;34178:19;;34102:103;;;:::o;27847:149::-;27931:18;27944:4;27931:12;:18::i;:::-;25537:30;25548:4;25554:12;:10;:12::i;:::-;25537:10;:30::i;:::-;27962:26:::1;27974:4;27980:7;27962:11;:26::i;:::-;27847:149:::0;;;:::o;8271:151::-;8360:7;8387:11;:18;8399:5;8387:18;;;;;;;;;;;;;;;:27;8406:7;8387:27;;;;;;;;;;;;;;;;8380:34;;8271:151;;;;:::o;33411:192::-;32742:12;:10;:12::i;:::-;32731:23;;:7;:5;:7::i;:::-;:23;;;32723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33520:1:::1;33500:22;;:8;:22;;::::0;33492:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33576:19;33586:8;33576:9;:19::i;:::-;33411:192:::0;:::o;22997:157::-;23082:4;23121:25;23106:40;;;:11;:40;;;;23099:47;;22997:157;;;:::o;4132:98::-;4185:7;4212:10;4205:17;;4132:98;:::o;14523:380::-;14676:1;14659:19;;:5;:19;;;14651:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14757:1;14738:21;;:7;:21;;;14730:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14841:6;14811:11;:18;14823:5;14811:18;;;;;;;;;;;;;;;:27;14830:7;14811:27;;;;;;;;;;;;;;;:36;;;;14879:7;14863:32;;14872:5;14863:32;;;14888:6;14863:32;;;;;;:::i;:::-;;;;;;;;14523:380;;;:::o;12762:399::-;12865:1;12846:21;;:7;:21;;;12838:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12916:49;12945:1;12949:7;12958:6;12916:20;:49::i;:::-;12994:6;12978:12;;:22;;;;;;;:::i;:::-;;;;;;;;13033:6;13011:9;:18;13021:7;13011:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13076:7;13055:37;;13072:1;13055:37;;;13085:6;13055:37;;;;;;:::i;:::-;;;;;;;;13105:48;13133:1;13137:7;13146:6;13105:19;:48::i;:::-;12762:399;;:::o;11742:733::-;11900:1;11882:20;;:6;:20;;;11874:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11984:1;11963:23;;:9;:23;;;11955:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12039:47;12060:6;12068:9;12079:6;12039:20;:47::i;:::-;12099:21;12123:9;:17;12133:6;12123:17;;;;;;;;;;;;;;;;12099:41;;12176:6;12159:13;:23;;12151:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12297:6;12281:13;:22;12261:9;:17;12271:6;12261:17;;;;;;;;;;;;;;;:42;;;;12349:6;12325:9;:20;12335:9;12325:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12390:9;12373:35;;12382:6;12373:35;;;12401:6;12373:35;;;;;;:::i;:::-;;;;;;;;12421:46;12441:6;12449:9;12460:6;12421:19;:46::i;:::-;11863:612;11742:733;;;:::o;26384:497::-;26465:22;26473:4;26479:7;26465;:22::i;:::-;26460:414;;26653:41;26681:7;26653:41;;26691:2;26653:19;:41::i;:::-;26767:38;26795:4;26787:13;;26802:2;26767:19;:38::i;:::-;26558:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26504:358;;;;;;;;;;;:::i;:::-;;;;;;;;26460:414;26384:497;;:::o;29807:229::-;29882:22;29890:4;29896:7;29882;:22::i;:::-;29877:152;;29953:4;29921:6;:12;29928:4;29921:12;;;;;;;;;;;:20;;:29;29942:7;29921:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30004:12;:10;:12::i;:::-;29977:40;;29995:7;29977:40;;29989:4;29977:40;;;;;;;;;;29877:152;29807:229;;:::o;30044:230::-;30119:22;30127:4;30133:7;30119;:22::i;:::-;30115:152;;;30190:5;30158:6;:12;30165:4;30158:12;;;;;;;;;;;:20;;:29;30179:7;30158:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30242:12;:10;:12::i;:::-;30215:40;;30233:7;30215:40;;30227:4;30215:40;;;;;;;;;;30115:152;30044:230;;:::o;13494:591::-;13597:1;13578:21;;:7;:21;;;13570:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13650:49;13671:7;13688:1;13692:6;13650:20;:49::i;:::-;13712:22;13737:9;:18;13747:7;13737:18;;;;;;;;;;;;;;;;13712:43;;13792:6;13774:14;:24;;13766:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13911:6;13894:14;:23;13873:9;:18;13883:7;13873:18;;;;;;;;;;;;;;;:44;;;;13955:6;13939:12;;:22;;;;;;;:::i;:::-;;;;;;;;14005:1;13979:37;;13988:7;13979:37;;;14009:6;13979:37;;;;;;:::i;:::-;;;;;;;;14029:48;14049:7;14066:1;14070:6;14029:19;:48::i;:::-;13559:526;13494:591;;:::o;33611:173::-;33667:16;33686:6;;;;;;;;;;;33667:25;;33712:8;33703:6;;:17;;;;;;;;;;;;;;;;;;33767:8;33736:40;;33757:8;33736:40;;;;;;;;;;;;33656:128;33611:173;:::o;15503:125::-;;;;:::o;16232:124::-;;;;:::o;20924:451::-;20999:13;21025:19;21070:1;21061:6;21057:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;21047:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21025:47;;21083:15;:6;21090:1;21083:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;21109;:6;21116:1;21109:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;21140:9;21165:1;21156:6;21152:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;21140:26;;21135:135;21172:1;21168;:5;21135:135;;;21207:12;21228:3;21220:5;:11;21207:25;;;;;;;:::i;:::-;;;;;21195:6;21202:1;21195:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;21257:1;21247:11;;;;;21175:3;;;;:::i;:::-;;;21135:135;;;;21297:1;21288:5;:10;21280:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21360:6;21346:21;;;20924:451;;;;:::o;88:117:1:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:126::-;2897:7;2937:42;2930:5;2926:54;2915:65;;2860:126;;;:::o;2992:96::-;3029:7;3058:24;3076:5;3058:24;:::i;:::-;3047:35;;2992:96;;;:::o;3094:122::-;3167:24;3185:5;3167:24;:::i;:::-;3160:5;3157:35;3147:63;;3206:1;3203;3196:12;3147:63;3094:122;:::o;3222:139::-;3268:5;3306:6;3293:20;3284:29;;3322:33;3349:5;3322:33;:::i;:::-;3222:139;;;;:::o;3367:77::-;3404:7;3433:5;3422:16;;3367:77;;;:::o;3450:122::-;3523:24;3541:5;3523:24;:::i;:::-;3516:5;3513:35;3503:63;;3562:1;3559;3552:12;3503:63;3450:122;:::o;3578:139::-;3624:5;3662:6;3649:20;3640:29;;3678:33;3705:5;3678:33;:::i;:::-;3578:139;;;;:::o;3723:474::-;3791:6;3799;3848:2;3836:9;3827:7;3823:23;3819:32;3816:119;;;3854:79;;:::i;:::-;3816:119;3974:1;3999:53;4044:7;4035:6;4024:9;4020:22;3999:53;:::i;:::-;3989:63;;3945:117;4101:2;4127:53;4172:7;4163:6;4152:9;4148:22;4127:53;:::i;:::-;4117:63;;4072:118;3723:474;;;;;:::o;4203:118::-;4290:24;4308:5;4290:24;:::i;:::-;4285:3;4278:37;4203:118;;:::o;4327:222::-;4420:4;4458:2;4447:9;4443:18;4435:26;;4471:71;4539:1;4528:9;4524:17;4515:6;4471:71;:::i;:::-;4327:222;;;;:::o;4555:619::-;4632:6;4640;4648;4697:2;4685:9;4676:7;4672:23;4668:32;4665:119;;;4703:79;;:::i;:::-;4665:119;4823:1;4848:53;4893:7;4884:6;4873:9;4869:22;4848:53;:::i;:::-;4838:63;;4794:117;4950:2;4976:53;5021:7;5012:6;5001:9;4997:22;4976:53;:::i;:::-;4966:63;;4921:118;5078:2;5104:53;5149:7;5140:6;5129:9;5125:22;5104:53;:::i;:::-;5094:63;;5049:118;4555:619;;;;;:::o;5180:77::-;5217:7;5246:5;5235:16;;5180:77;;;:::o;5263:122::-;5336:24;5354:5;5336:24;:::i;:::-;5329:5;5326:35;5316:63;;5375:1;5372;5365:12;5316:63;5263:122;:::o;5391:139::-;5437:5;5475:6;5462:20;5453:29;;5491:33;5518:5;5491:33;:::i;:::-;5391:139;;;;:::o;5536:329::-;5595:6;5644:2;5632:9;5623:7;5619:23;5615:32;5612:119;;;5650:79;;:::i;:::-;5612:119;5770:1;5795:53;5840:7;5831:6;5820:9;5816:22;5795:53;:::i;:::-;5785:63;;5741:117;5536:329;;;;:::o;5871:118::-;5958:24;5976:5;5958:24;:::i;:::-;5953:3;5946:37;5871:118;;:::o;5995:222::-;6088:4;6126:2;6115:9;6111:18;6103:26;;6139:71;6207:1;6196:9;6192:17;6183:6;6139:71;:::i;:::-;5995:222;;;;:::o;6223:474::-;6291:6;6299;6348:2;6336:9;6327:7;6323:23;6319:32;6316:119;;;6354:79;;:::i;:::-;6316:119;6474:1;6499:53;6544:7;6535:6;6524:9;6520:22;6499:53;:::i;:::-;6489:63;;6445:117;6601:2;6627:53;6672:7;6663:6;6652:9;6648:22;6627:53;:::i;:::-;6617:63;;6572:118;6223:474;;;;;:::o;6703:86::-;6738:7;6778:4;6771:5;6767:16;6756:27;;6703:86;;;:::o;6795:112::-;6878:22;6894:5;6878:22;:::i;:::-;6873:3;6866:35;6795:112;;:::o;6913:214::-;7002:4;7040:2;7029:9;7025:18;7017:26;;7053:67;7117:1;7106:9;7102:17;7093:6;7053:67;:::i;:::-;6913:214;;;;:::o;7133:329::-;7192:6;7241:2;7229:9;7220:7;7216:23;7212:32;7209:119;;;7247:79;;:::i;:::-;7209:119;7367:1;7392:53;7437:7;7428:6;7417:9;7413:22;7392:53;:::i;:::-;7382:63;;7338:117;7133:329;;;;:::o;7468:::-;7527:6;7576:2;7564:9;7555:7;7551:23;7547:32;7544:119;;;7582:79;;:::i;:::-;7544:119;7702:1;7727:53;7772:7;7763:6;7752:9;7748:22;7727:53;:::i;:::-;7717:63;;7673:117;7468:329;;;;:::o;7803:118::-;7890:24;7908:5;7890:24;:::i;:::-;7885:3;7878:37;7803:118;;:::o;7927:222::-;8020:4;8058:2;8047:9;8043:18;8035:26;;8071:71;8139:1;8128:9;8124:17;8115:6;8071:71;:::i;:::-;7927:222;;;;:::o;8155:474::-;8223:6;8231;8280:2;8268:9;8259:7;8255:23;8251:32;8248:119;;;8286:79;;:::i;:::-;8248:119;8406:1;8431:53;8476:7;8467:6;8456:9;8452:22;8431:53;:::i;:::-;8421:63;;8377:117;8533:2;8559:53;8604:7;8595:6;8584:9;8580:22;8559:53;:::i;:::-;8549:63;;8504:118;8155:474;;;;;:::o;8635:180::-;8683:77;8680:1;8673:88;8780:4;8777:1;8770:15;8804:4;8801:1;8794:15;8821:320;8865:6;8902:1;8896:4;8892:12;8882:22;;8949:1;8943:4;8939:12;8970:18;8960:81;;9026:4;9018:6;9014:17;9004:27;;8960:81;9088:2;9080:6;9077:14;9057:18;9054:38;9051:84;;9107:18;;:::i;:::-;9051:84;8872:269;8821:320;;;:::o;9147:180::-;9195:77;9192:1;9185:88;9292:4;9289:1;9282:15;9316:4;9313:1;9306:15;9333:191;9373:3;9392:20;9410:1;9392:20;:::i;:::-;9387:25;;9426:20;9444:1;9426:20;:::i;:::-;9421:25;;9469:1;9466;9462:9;9455:16;;9490:3;9487:1;9484:10;9481:36;;;9497:18;;:::i;:::-;9481:36;9333:191;;;;:::o;9530:163::-;9670:15;9666:1;9658:6;9654:14;9647:39;9530:163;:::o;9699:366::-;9841:3;9862:67;9926:2;9921:3;9862:67;:::i;:::-;9855:74;;9938:93;10027:3;9938:93;:::i;:::-;10056:2;10051:3;10047:12;10040:19;;9699:366;;;:::o;10071:419::-;10237:4;10275:2;10264:9;10260:18;10252:26;;10324:9;10318:4;10314:20;10310:1;10299:9;10295:17;10288:47;10352:131;10478:4;10352:131;:::i;:::-;10344:139;;10071:419;;;:::o;10496:194::-;10536:4;10556:20;10574:1;10556:20;:::i;:::-;10551:25;;10590:20;10608:1;10590:20;:::i;:::-;10585:25;;10634:1;10631;10627:9;10619:17;;10658:1;10652:4;10649:11;10646:37;;;10663:18;;:::i;:::-;10646:37;10496:194;;;;:::o;10696:221::-;10836:34;10832:1;10824:6;10820:14;10813:58;10905:4;10900:2;10892:6;10888:15;10881:29;10696:221;:::o;10923:366::-;11065:3;11086:67;11150:2;11145:3;11086:67;:::i;:::-;11079:74;;11162:93;11251:3;11162:93;:::i;:::-;11280:2;11275:3;11271:12;11264:19;;10923:366;;;:::o;11295:419::-;11461:4;11499:2;11488:9;11484:18;11476:26;;11548:9;11542:4;11538:20;11534:1;11523:9;11519:17;11512:47;11576:131;11702:4;11576:131;:::i;:::-;11568:139;;11295:419;;;:::o;11720:227::-;11860:34;11856:1;11848:6;11844:14;11837:58;11929:10;11924:2;11916:6;11912:15;11905:35;11720:227;:::o;11953:366::-;12095:3;12116:67;12180:2;12175:3;12116:67;:::i;:::-;12109:74;;12192:93;12281:3;12192:93;:::i;:::-;12310:2;12305:3;12301:12;12294:19;;11953:366;;;:::o;12325:419::-;12491:4;12529:2;12518:9;12514:18;12506:26;;12578:9;12572:4;12568:20;12564:1;12553:9;12549:17;12542:47;12606:131;12732:4;12606:131;:::i;:::-;12598:139;;12325:419;;;:::o;12750:234::-;12890:34;12886:1;12878:6;12874:14;12867:58;12959:17;12954:2;12946:6;12942:15;12935:42;12750:234;:::o;12990:366::-;13132:3;13153:67;13217:2;13212:3;13153:67;:::i;:::-;13146:74;;13229:93;13318:3;13229:93;:::i;:::-;13347:2;13342:3;13338:12;13331:19;;12990:366;;;:::o;13362:419::-;13528:4;13566:2;13555:9;13551:18;13543:26;;13615:9;13609:4;13605:20;13601:1;13590:9;13586:17;13579:47;13643:131;13769:4;13643:131;:::i;:::-;13635:139;;13362:419;;;:::o;13787:182::-;13927:34;13923:1;13915:6;13911:14;13904:58;13787:182;:::o;13975:366::-;14117:3;14138:67;14202:2;14197:3;14138:67;:::i;:::-;14131:74;;14214:93;14303:3;14214:93;:::i;:::-;14332:2;14327:3;14323:12;14316:19;;13975:366;;;:::o;14347:419::-;14513:4;14551:2;14540:9;14536:18;14528:26;;14600:9;14594:4;14590:20;14586:1;14575:9;14571:17;14564:47;14628:131;14754:4;14628:131;:::i;:::-;14620:139;;14347:419;;;:::o;14772:223::-;14912:34;14908:1;14900:6;14896:14;14889:58;14981:6;14976:2;14968:6;14964:15;14957:31;14772:223;:::o;15001:366::-;15143:3;15164:67;15228:2;15223:3;15164:67;:::i;:::-;15157:74;;15240:93;15329:3;15240:93;:::i;:::-;15358:2;15353:3;15349:12;15342:19;;15001:366;;;:::o;15373:419::-;15539:4;15577:2;15566:9;15562:18;15554:26;;15626:9;15620:4;15616:20;15612:1;15601:9;15597:17;15590:47;15654:131;15780:4;15654:131;:::i;:::-;15646:139;;15373:419;;;:::o;15798:224::-;15938:34;15934:1;15926:6;15922:14;15915:58;16007:7;16002:2;15994:6;15990:15;15983:32;15798:224;:::o;16028:366::-;16170:3;16191:67;16255:2;16250:3;16191:67;:::i;:::-;16184:74;;16267:93;16356:3;16267:93;:::i;:::-;16385:2;16380:3;16376:12;16369:19;;16028:366;;;:::o;16400:419::-;16566:4;16604:2;16593:9;16589:18;16581:26;;16653:9;16647:4;16643:20;16639:1;16628:9;16624:17;16617:47;16681:131;16807:4;16681:131;:::i;:::-;16673:139;;16400:419;;;:::o;16825:225::-;16965:34;16961:1;16953:6;16949:14;16942:58;17034:8;17029:2;17021:6;17017:15;17010:33;16825:225;:::o;17056:366::-;17198:3;17219:67;17283:2;17278:3;17219:67;:::i;:::-;17212:74;;17295:93;17384:3;17295:93;:::i;:::-;17413:2;17408:3;17404:12;17397:19;;17056:366;;;:::o;17428:419::-;17594:4;17632:2;17621:9;17617:18;17609:26;;17681:9;17675:4;17671:20;17667:1;17656:9;17652:17;17645:47;17709:131;17835:4;17709:131;:::i;:::-;17701:139;;17428:419;;;:::o;17853:223::-;17993:34;17989:1;17981:6;17977:14;17970:58;18062:6;18057:2;18049:6;18045:15;18038:31;17853:223;:::o;18082:366::-;18224:3;18245:67;18309:2;18304:3;18245:67;:::i;:::-;18238:74;;18321:93;18410:3;18321:93;:::i;:::-;18439:2;18434:3;18430:12;18423:19;;18082:366;;;:::o;18454:419::-;18620:4;18658:2;18647:9;18643:18;18635:26;;18707:9;18701:4;18697:20;18693:1;18682:9;18678:17;18671:47;18735:131;18861:4;18735:131;:::i;:::-;18727:139;;18454:419;;;:::o;18879:221::-;19019:34;19015:1;19007:6;19003:14;18996:58;19088:4;19083:2;19075:6;19071:15;19064:29;18879:221;:::o;19106:366::-;19248:3;19269:67;19333:2;19328:3;19269:67;:::i;:::-;19262:74;;19345:93;19434:3;19345:93;:::i;:::-;19463:2;19458:3;19454:12;19447:19;;19106:366;;;:::o;19478:419::-;19644:4;19682:2;19671:9;19667:18;19659:26;;19731:9;19725:4;19721:20;19717:1;19706:9;19702:17;19695:47;19759:131;19885:4;19759:131;:::i;:::-;19751:139;;19478:419;;;:::o;19903:181::-;20043:33;20039:1;20031:6;20027:14;20020:57;19903:181;:::o;20090:366::-;20232:3;20253:67;20317:2;20312:3;20253:67;:::i;:::-;20246:74;;20329:93;20418:3;20329:93;:::i;:::-;20447:2;20442:3;20438:12;20431:19;;20090:366;;;:::o;20462:419::-;20628:4;20666:2;20655:9;20651:18;20643:26;;20715:9;20709:4;20705:20;20701:1;20690:9;20686:17;20679:47;20743:131;20869:4;20743:131;:::i;:::-;20735:139;;20462:419;;;:::o;20887:224::-;21027:34;21023:1;21015:6;21011:14;21004:58;21096:7;21091:2;21083:6;21079:15;21072:32;20887:224;:::o;21117:366::-;21259:3;21280:67;21344:2;21339:3;21280:67;:::i;:::-;21273:74;;21356:93;21445:3;21356:93;:::i;:::-;21474:2;21469:3;21465:12;21458:19;;21117:366;;;:::o;21489:419::-;21655:4;21693:2;21682:9;21678:18;21670:26;;21742:9;21736:4;21732:20;21728:1;21717:9;21713:17;21706:47;21770:131;21896:4;21770:131;:::i;:::-;21762:139;;21489:419;;;:::o;21914:222::-;22054:34;22050:1;22042:6;22038:14;22031:58;22123:5;22118:2;22110:6;22106:15;22099:30;21914:222;:::o;22142:366::-;22284:3;22305:67;22369:2;22364:3;22305:67;:::i;:::-;22298:74;;22381:93;22470:3;22381:93;:::i;:::-;22499:2;22494:3;22490:12;22483:19;;22142:366;;;:::o;22514:419::-;22680:4;22718:2;22707:9;22703:18;22695:26;;22767:9;22761:4;22757:20;22753:1;22742:9;22738:17;22731:47;22795:131;22921:4;22795:131;:::i;:::-;22787:139;;22514:419;;;:::o;22939:225::-;23079:34;23075:1;23067:6;23063:14;23056:58;23148:8;23143:2;23135:6;23131:15;23124:33;22939:225;:::o;23170:366::-;23312:3;23333:67;23397:2;23392:3;23333:67;:::i;:::-;23326:74;;23409:93;23498:3;23409:93;:::i;:::-;23527:2;23522:3;23518:12;23511:19;;23170:366;;;:::o;23542:419::-;23708:4;23746:2;23735:9;23731:18;23723:26;;23795:9;23789:4;23785:20;23781:1;23770:9;23766:17;23759:47;23823:131;23949:4;23823:131;:::i;:::-;23815:139;;23542:419;;;:::o;23967:148::-;24069:11;24106:3;24091:18;;23967:148;;;;:::o;24121:173::-;24261:25;24257:1;24249:6;24245:14;24238:49;24121:173;:::o;24300:402::-;24460:3;24481:85;24563:2;24558:3;24481:85;:::i;:::-;24474:92;;24575:93;24664:3;24575:93;:::i;:::-;24693:2;24688:3;24684:12;24677:19;;24300:402;;;:::o;24708:390::-;24814:3;24842:39;24875:5;24842:39;:::i;:::-;24897:89;24979:6;24974:3;24897:89;:::i;:::-;24890:96;;24995:65;25053:6;25048:3;25041:4;25034:5;25030:16;24995:65;:::i;:::-;25085:6;25080:3;25076:16;25069:23;;24818:280;24708:390;;;;:::o;25104:167::-;25244:19;25240:1;25232:6;25228:14;25221:43;25104:167;:::o;25277:402::-;25437:3;25458:85;25540:2;25535:3;25458:85;:::i;:::-;25451:92;;25552:93;25641:3;25552:93;:::i;:::-;25670:2;25665:3;25661:12;25654:19;;25277:402;;;:::o;25685:967::-;26067:3;26089:148;26233:3;26089:148;:::i;:::-;26082:155;;26254:95;26345:3;26336:6;26254:95;:::i;:::-;26247:102;;26366:148;26510:3;26366:148;:::i;:::-;26359:155;;26531:95;26622:3;26613:6;26531:95;:::i;:::-;26524:102;;26643:3;26636:10;;25685:967;;;;;:::o;26658:220::-;26798:34;26794:1;26786:6;26782:14;26775:58;26867:3;26862:2;26854:6;26850:15;26843:28;26658:220;:::o;26884:366::-;27026:3;27047:67;27111:2;27106:3;27047:67;:::i;:::-;27040:74;;27123:93;27212:3;27123:93;:::i;:::-;27241:2;27236:3;27232:12;27225:19;;26884:366;;;:::o;27256:419::-;27422:4;27460:2;27449:9;27445:18;27437:26;;27509:9;27503:4;27499:20;27495:1;27484:9;27480:17;27473:47;27537:131;27663:4;27537:131;:::i;:::-;27529:139;;27256:419;;;:::o;27681:221::-;27821:34;27817:1;27809:6;27805:14;27798:58;27890:4;27885:2;27877:6;27873:15;27866:29;27681:221;:::o;27908:366::-;28050:3;28071:67;28135:2;28130:3;28071:67;:::i;:::-;28064:74;;28147:93;28236:3;28147:93;:::i;:::-;28265:2;28260:3;28256:12;28249:19;;27908:366;;;:::o;28280:419::-;28446:4;28484:2;28473:9;28469:18;28461:26;;28533:9;28527:4;28523:20;28519:1;28508:9;28504:17;28497:47;28561:131;28687:4;28561:131;:::i;:::-;28553:139;;28280:419;;;:::o;28705:348::-;28745:7;28768:20;28786:1;28768:20;:::i;:::-;28763:25;;28802:20;28820:1;28802:20;:::i;:::-;28797:25;;28990:1;28922:66;28918:74;28915:1;28912:81;28907:1;28900:9;28893:17;28889:105;28886:131;;;28997:18;;:::i;:::-;28886:131;29045:1;29042;29038:9;29027:20;;28705:348;;;;:::o;29059:180::-;29107:77;29104:1;29097:88;29204:4;29201:1;29194:15;29228:4;29225:1;29218:15;29245:180;29293:77;29290:1;29283:88;29390:4;29387:1;29380:15;29414:4;29411:1;29404:15;29431:171;29470:3;29493:24;29511:5;29493:24;:::i;:::-;29484:33;;29539:4;29532:5;29529:15;29526:41;;29547:18;;:::i;:::-;29526:41;29594:1;29587:5;29583:13;29576:20;;29431:171;;;:::o;29608:182::-;29748:34;29744:1;29736:6;29732:14;29725:58;29608:182;:::o;29796:366::-;29938:3;29959:67;30023:2;30018:3;29959:67;:::i;:::-;29952:74;;30035:93;30124:3;30035:93;:::i;:::-;30153:2;30148:3;30144:12;30137:19;;29796:366;;;:::o;30168:419::-;30334:4;30372:2;30361:9;30357:18;30349:26;;30421:9;30415:4;30411:20;30407:1;30396:9;30392:17;30385:47;30449:131;30575:4;30449:131;:::i;:::-;30441:139;;30168:419;;;:::o
Swarm Source
ipfs://48866b2943ba88f5412fdade0c04edb023d77108cb10dad21700f5e0f8f022c2
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.