ETH Price: $2,644.58 (+0.27%)

Token

Punkism (P)
 

Overview

Max Total Supply

100 P

Holders

47

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PunkismMain

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-24
*/

// SPDX-License-Identifier: MIT
// Twitter: https://x.com/Punkismeth
// Telegram: https://t.me/punkismeth
// Website: https://www.punkism.io/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// 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/IERC20Metadata.sol


// 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/utils/Context.sol


// 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/interfaces/draft-IERC6093.sol


// 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/ERC20.sol


// 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.
 *
 * 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 {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

    /**
     * @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 virtual {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @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: punkism/generator.sol


pragma solidity ^0.8.26;

contract Generator {
    string[] public hat_colors = [
        "#f4a261", "#e76f51", "#264653", "#2a9d8f", "#e9c46a", 
        "#8d99ae", "#d62828", "#f77f00", "#fcbf49", "#003049", 
        "#d4a373", "#ffb4a2", "#cb997e", "#a5a58d", "#6b705c", 
        "#ffe8d6", "#f28482", "#84a59d", "#f5cac3", "#f28482", 
        "#0d3b66", "#faf0ca", "#f4d35e", "#ee964b", "#f95738", 
        "#fb8500", "#023047", "#219ebc", "#8ecae6", "#ffb703", 
        "#adb5bd"
    ];

    string[] public face_colors = [
        "#ffddd2", "#ffe8d6", "#fcbf49", "#e63946", "#f1faee", 
        "#a8dadc", "#457b9d", "#1d3557", "#ffcdb2", "#ffb4a2", 
        "#e5989b", "#b5838d", "#6d6875", "#ffcc99", "#fddbb5", 
        "#f0c6a1", "#edc9af", "#d2b48c", "#deb887", "#ffe4c4", 
        "#faebd7", "#f4a460", "#d2691e", "#cd853f", "#f5deb3", 
        "#f8e4d9", "#ffe4b5", "#ffb6c1", "#f0e68c", "#ff6347", 
        "#ff4500"
    ];

    string[] public eye_colors = [
        "#3d405b", "#81b29a", "#f2cc8f", "#e07a5f", "#6a994e", 
        "#22223b", "#4a4e69", "#9a8c98", "#c9ada7", "#f2e9e4", 
        "#2d6a4f", "#40916c", "#52b788", "#74c69d", "#95d5b2", 
        "#2f3e46", "#4c566a", "#434c5e", "#8fbcbb", "#88c0d0", 
        "#81a1c1", "#5e81ac", "#bf616a", "#d08770", "#ebcb8b", 
        "#a3be8c", "#b48ead", "#3b4252", "#5e81ac", "#8fa1b3", 
        "#89b4c6"
    ];

    string[] public mouth_colors = [
        "#ef476f", "#ffd166", "#06d6a0", "#118ab2", "#073b4c", 
        "#f07167", "#f4a261", "#2a9d8f", "#d62828", "#f77f00", 
        "#118ab2", "#06d6a0", "#ffca3a", "#2ec4b6", "#f72585", 
        "#4361ee", "#4cc9f0", "#3a86ff", "#8338ec", "#ff006e", 
        "#fb5607", "#ffbe0b", "#ff7b00", "#ff0054", "#fe7f2d", 
        "#ef476f", "#8338ec", "#9d4edd", "#e36414", "#f08080", 
        "#ffcc00"
    ];

    string[] public nose_colors = [
        "#e09f3e", "#9c6644", "#cb997e", "#b5838d", "#6b705c", 
        "#ffddd2", "#f4a261", "#2a9d8f", "#e9c46a", "#003049", 
        "#d4a373", "#ffb4a2", "#d62828", "#f77f00", "#fcbf49", 
        "#8d99ae", "#264653", "#fb8500", "#219ebc", "#8ecae6", 
        "#84a98c", "#4a4e69", "#a8dadc", "#457b9d", "#e63946", 
        "#f1faee", "#f07167", "#f4a261", "#2a9d8f", "#d62828", 
        "#003049"
    ];

    string[] public background_colors = [
        "#f0efeb", "#e07a5f", "#3d405b", "#81b29a", "#f2cc8f", 
        "#ffddd2", "#ffe8d6", "#edf6f9", "#e9c46a", "#f4a261", 
        "#264653", "#2a9d8f", "#8d99ae", "#d62828", "#fcbf49", 
        "#f07167", "#3d5a80", "#293241", "#ee6c4d", "#98c1d9", 
        "#2b2d42", "#8d99ae", "#d4a373", "#cdb4db", "#ffb4a2", 
        "#6b705c", "#ffd166", "#06d6a0", "#118ab2", "#073b4c", 
        "#fca311"
    ];


    function randomColor(uint256 tokenId, string[] memory colorArray) internal view returns (string memory) {
        uint256 rand = uint256(keccak256(
            abi.encodePacked(
                block.timestamp,         
                tokenId,        
                blockhash(block.number), 
                tokenId,                 
                msg.sender 
            )
        )) % colorArray.length;

        return colorArray[rand];
    }

    function getPunkSVG(uint256 tokenId) public view returns (string memory) {
        return string(
            abi.encodePacked(
                "<svg xmlns='http://www.w3.org/2000/svg' style='background:", randomColor(tokenId, background_colors) ,"' version='1.0' width='386.000000pt' height='383.000000pt' viewBox='0 0 386.000000 383.000000'>",
                    "<g xmlns='http://www.w3.org/2000/svg' transform='translate(0.000000,383.000000) scale(0.100000,-0.100000)' stroke='none'>",
                        // face
                        "<path xmlns='http://www.w3.org/2000/svg' fill='", randomColor(tokenId, face_colors) ,"' d='M1280 3120 l0 -80 -80 0 -80 0 0 -80 0 -80 -80 0 -80 0 0 -400 0 -400 -80 0 -80 0 0 -80 0 -80 -80 0 -80 0 0 -80 0 -80 80 0 80 0 0 -160 0 -160 80 0 80 0 0 -720 0 -720 80 0 80 0 0 800 0 800 -80 0 -80 0 0 80 0 80 80 0 80 0 0 320 0 320 720 0 720 0 0 -160 0 -160 -160 0 -160 0 0 -160 0 -160 160 0 160 0 0 -560 0 -560 -80 0 -80 0 0 -80 0 -80 -400 0 -400 0 0 -240 0 -240 80 0 80 0 0 160 0 160 320 0 320 0 0 80 0 80 80 0 80 0 0 80 0 80 80 0 80 0 0 880 0 880 240 0 240 0 0 80 0 80 -80 0 -80 0 0 80 0 80 -240 0 -240 0 0 160 0 160 -80 0 -80 0 0 80 0 80 -560 0 -560 0 0 -80z m960 -160 l0 -80 80 0 80 0 0 -80 0 -80 -80 0 -80 0 0 80 0 80 -80 0 -80 0 0 80 0 80 80 0 80 0 0 -80z m-1280 -1120 l0 -80 -80 0 -80 0 0 80 0 80 80 0 80 0 0 -80z'/>",
                        // eyes
                        "<path xmlns='http://www.w3.org/2000/svg' fill='", randomColor(tokenId, eye_colors) ,"' d='M1440 1920 l0 -160 160 0 160 0 0 160 0 160 -160 0 -160 0 0 -160z'/>",
                        // nose
                        "<path xmlns='http://www.w3.org/2000/svg' fill='", randomColor(tokenId, nose_colors) ,"' d='M1920 1360 l0 -240 80 0 80 0 0 240 0 240 -80 0 -80 0 0 -240z'/>",
                        // mouth
                        "<path xmlns='http://www.w3.org/2000/svg' fill='", randomColor(tokenId, mouth_colors) ,"' d='M1600 880 l0 -80 400 0 400 0 0 80 0 80 -400 0 -400 0 0 -80z'/>",
                    "</g>",
                "</svg>"
            )
        );
    }
}

// File: punkism/main.sol

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract PunkismMain is ERC20, Generator {
    IUniswapV2Router01 public uniswapRouter;
    IUniswapV2Factory public uniswapFactory;

    uint256 public count = 0;
    address public owner;
    address public tokenPairAddress = address(0);

    struct activityLogs {
        address user;
        string visual;
    }
    mapping(uint256 => activityLogs) public activityLogsData;

    constructor(address _router) ERC20("Punkism", "P") {
        uniswapRouter = IUniswapV2Router01(_router);
        uniswapFactory = IUniswapV2Factory(uniswapRouter.factory());
        _mint(msg.sender, 100 * 10**decimals());
        owner = msg.sender;
    }

    function renounceOwnership() external {
        require(msg.sender == owner, "Access denied. #2");
        owner = address(0);
    }

    function start() external {
        require(tokenPairAddress == address(0), "Already started.");
        require(msg.sender == owner, "Access denied. #1");

        tokenPairAddress = uniswapFactory.createPair(address(this), uniswapRouter.WETH());
    }

    function addPunk(address user, uint256 val) internal{
        for (uint256 i = 0; i < val / 1 ether; i++) {
            ++count;
            activityLogsData[count] = activityLogs({
                user: user,
                visual: getPunkSVG(count)
            });
        }
        
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        super._transfer(sender, recipient, amount);

        if (sender == address(tokenPairAddress)) {
            // buy tx
            addPunk(tx.origin, amount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"activityLogsData","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"string","name":"visual","type":"string"}],"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":"uint256","name":"","type":"uint256"}],"name":"background_colors","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"count","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":"uint256","name":"","type":"uint256"}],"name":"eye_colors","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"face_colors","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getPunkSVG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hat_colors","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mouth_colors","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nose_colors","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router01","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6080604052604051806103e001604052806040518060400160405280600781526020017f236634613236310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236537366635310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233236343635330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233261396438660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236539633436610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233864393961650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236436323832380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236637376630300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236663626634390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030333034390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236434613337330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666623461320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236362393937650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236135613538640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233662373035630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666653864360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236632383438320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233834613539640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236635636163330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236632383438320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233064336236360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236661663063610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236634643335650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236565393634620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236639353733380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236662383530300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233032333034370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233231396562630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233865636165360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666623730330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2361646235626400000000000000000000000000000000000000000000000000815250815250600590601f6107439291906130b1565b50604051806103e001604052806040518060400160405280600781526020017f236666646464320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666653864360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236663626634390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236536333934360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236631666165650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236138646164630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233435376239640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233164333535370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666636462320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666623461320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236535393839620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236235383338640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233664363837350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666636339390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236664646262350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236630633661310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236564633961660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236432623438630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236465623838370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666653463340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236661656264370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236634613436300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236432363931650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236364383533660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236635646562330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236638653464390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666653462350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666623663310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236630653638630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666363334370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2366663435303000000000000000000000000000000000000000000000000000815250815250600690601f610e839291906130b1565b50604051806103e001604052806040518060400160405280600781526020017f233364343035620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233831623239610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236632636338660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236530376135660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233661393934650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233232323233620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233461346536390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233961386339380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236339616461370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236632653965340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233264366134660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233430393136630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233532623738380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233734633639640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233935643562320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233266336534360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233463353636610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233433346335650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233866626362620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233838633064300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233831613163310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233565383161630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236266363136610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236430383737300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236562636238620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236133626538630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236234386561640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233362343235320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233565383161630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233866613162330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2338396234633600000000000000000000000000000000000000000000000000815250815250600790601f6115c39291906130b1565b50604051806103e001604052806040518060400160405280600781526020017f236566343736660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666643136360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233036643661300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233131386162320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233037336234630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236630373136370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236634613236310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233261396438660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236436323832380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236637376630300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233131386162320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233036643661300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666636133610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233265633462360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236637323538350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233433363165650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233463633966300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233361383666660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233833333865630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666303036650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236662353630370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666626530620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666376230300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666303035340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236665376632640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236566343736660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233833333865630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233964346564640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236533363431340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236630383038300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2366666363303000000000000000000000000000000000000000000000000000815250815250600890601f611d039291906130b1565b50604051806103e001604052806040518060400160405280600781526020017f236530396633650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233963363634340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236362393937650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236235383338640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233662373035630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666646464320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236634613236310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233261396438660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236539633436610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030333034390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236434613337330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666623461320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236436323832380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236637376630300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236663626634390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233864393961650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233236343635330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236662383530300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233231396562630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233865636165360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233834613938630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233461346536390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236138646164630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233435376239640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236536333934360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236631666165650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236630373136370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236634613236310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233261396438660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236436323832380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2330303330343900000000000000000000000000000000000000000000000000815250815250600990601f6124439291906130b1565b50604051806103e001604052806040518060400160405280600781526020017f236630656665620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236530376135660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233364343035620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233831623239610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236632636338660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666646464320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666653864360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236564663666390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236539633436610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236634613236310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233236343635330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233261396438660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233864393961650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236436323832380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236663626634390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236630373136370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233364356138300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233239333234310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236565366334640000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233938633164390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233262326434320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233864393961650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236434613337330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236364623464620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666623461320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233662373035630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666643136360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233036643661300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233131386162320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233037336234630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2366636133313100000000000000000000000000000000000000000000000000815250815250600a90601f612b839291906130b1565b505f600d555f600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015612bd3575f80fd5b506040516167ae3803806167ae8339818101604052810190612bf591906131e1565b6040518060400160405280600781526020017f50756e6b69736d000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f50000000000000000000000000000000000000000000000000000000000000008152508160039081612c709190613446565b508060049081612c809190613446565b50505080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d5191906131e1565b600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612dc533612da2612e0b60201b60201c565b600a612dae919061367d565b6064612dba91906136c7565b612e1360201b60201c565b33600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506137c0565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e83575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401612e7a9190613717565b60405180910390fd5b612e945f8383612e9860201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee8578060025f828254612edc9190613730565b92505081905550612fb6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612f71578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612f6893929190613772565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ffd578060025f8282540392505081905550613047565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130a491906137a7565b60405180910390a3505050565b828054828255905f5260205f209081019282156130f7579160200282015b828111156130f65782518290816130e69190613446565b50916020019190600101906130cf565b5b5090506131049190613108565b5090565b5b80821115613127575f818161311e919061312b565b50600101613109565b5090565b50805461313790613270565b5f825580601f106131485750613165565b601f0160209004905f5260205f20908101906131649190613168565b5b50565b5b8082111561317f575f815f905550600101613169565b5090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131b082613187565b9050919050565b6131c0816131a6565b81146131ca575f80fd5b50565b5f815190506131db816131b7565b92915050565b5f602082840312156131f6576131f5613183565b5b5f613203848285016131cd565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061328757607f821691505b60208210810361329a57613299613243565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026132fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826132c1565b61330686836132c1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61334a6133456133408461331e565b613327565b61331e565b9050919050565b5f819050919050565b61336383613330565b61337761336f82613351565b8484546132cd565b825550505050565b5f90565b61338b61337f565b61339681848461335a565b505050565b5b818110156133b9576133ae5f82613383565b60018101905061339c565b5050565b601f8211156133fe576133cf816132a0565b6133d8846132b2565b810160208510156133e7578190505b6133fb6133f3856132b2565b83018261339b565b50505b505050565b5f82821c905092915050565b5f61341e5f1984600802613403565b1980831691505092915050565b5f613436838361340f565b9150826002028217905092915050565b61344f8261320c565b67ffffffffffffffff81111561346857613467613216565b5b6134728254613270565b61347d8282856133bd565b5f60209050601f8311600181146134ae575f841561349c578287015190505b6134a6858261342b565b86555061350d565b601f1984166134bc866132a0565b5f5b828110156134e3578489015182556001820191506020850194506020810190506134be565b8683101561350057848901516134fc601f89168261340f565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156135975780860481111561357357613572613515565b5b60018516156135825780820291505b808102905061359085613542565b9450613557565b94509492505050565b5f826135af576001905061366a565b816135bc575f905061366a565b81600181146135d257600281146135dc5761360b565b600191505061366a565b60ff8411156135ee576135ed613515565b5b8360020a91508482111561360557613604613515565b5b5061366a565b5060208310610133831016604e8410600b84101617156136405782820a90508381111561363b5761363a613515565b5b61366a565b61364d848484600161354e565b9250905081840481111561366457613663613515565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6136878261331e565b915061369283613671565b92506136bf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846135a0565b905092915050565b5f6136d18261331e565b91506136dc8361331e565b92508282026136ea8161331e565b9150828204841483151761370157613700613515565b5b5092915050565b613711816131a6565b82525050565b5f60208201905061372a5f830184613708565b92915050565b5f61373a8261331e565b91506137458361331e565b925082820190508082111561375d5761375c613515565b5b92915050565b61376c8161331e565b82525050565b5f6060820190506137855f830186613708565b6137926020830185613763565b61379f6040830184613763565b949350505050565b5f6020820190506137ba5f830184613763565b92915050565b612fe1806137cd5f395ff3fe608060405234801561000f575f80fd5b5060043610610156575f3560e01c8063735de9f7116100c1578063a9059cbb1161007a578063a9059cbb14610404578063a972aef914610434578063b8975c8e14610465578063be99e4d514610483578063be9a6555146104b3578063dd62ed3e146104bd57610156565b8063735de9f71461032c5780637673bfa41461034a57806377f239901461037a5780638bdb2afa146103aa5780638da5cb5b146103c857806395d89b41146103e657610156565b8063316fd91811610113578063316fd9181461023257806353388fd51461026257806353c55061146102925780635534b159146102c257806370a08231146102f2578063715018a61461032257610156565b806306661abd1461015a57806306fdde0314610178578063095ea7b31461019657806318160ddd146101c657806323b872dd146101e4578063313ce56714610214575b5f80fd5b6101626104ed565b60405161016f9190611ba7565b60405180910390f35b6101806104f3565b60405161018d9190611c30565b60405180910390f35b6101b060048036038101906101ab9190611cd8565b610583565b6040516101bd9190611d30565b60405180910390f35b6101ce6105a5565b6040516101db9190611ba7565b60405180910390f35b6101fe60048036038101906101f99190611d49565b6105ae565b60405161020b9190611d30565b60405180910390f35b61021c6105dc565b6040516102299190611db4565b60405180910390f35b61024c60048036038101906102479190611dcd565b6105e4565b6040516102599190611c30565b60405180910390f35b61027c60048036038101906102779190611dcd565b610a3e565b6040516102899190611c30565b60405180910390f35b6102ac60048036038101906102a79190611dcd565b610ae4565b6040516102b99190611c30565b60405180910390f35b6102dc60048036038101906102d79190611dcd565b610b8a565b6040516102e99190611c30565b60405180910390f35b61030c60048036038101906103079190611df8565b610c30565b6040516103199190611ba7565b60405180910390f35b61032a610c75565b005b610334610d46565b6040516103419190611e7e565b60405180910390f35b610364600480360381019061035f9190611dcd565b610d6b565b6040516103719190611c30565b60405180910390f35b610394600480360381019061038f9190611dcd565b610e11565b6040516103a19190611c30565b60405180910390f35b6103b2610eb7565b6040516103bf9190611eb7565b60405180910390f35b6103d0610edc565b6040516103dd9190611edf565b60405180910390f35b6103ee610f01565b6040516103fb9190611c30565b60405180910390f35b61041e60048036038101906104199190611cd8565b610f91565b60405161042b9190611d30565b60405180910390f35b61044e60048036038101906104499190611dcd565b610fb3565b60405161045c929190611ef8565b60405180910390f35b61046d611078565b60405161047a9190611edf565b60405180910390f35b61049d60048036038101906104989190611dcd565b61109d565b6040516104aa9190611c30565b60405180910390f35b6104bb611143565b005b6104d760048036038101906104d29190611f26565b6113cb565b6040516104e49190611ba7565b60405180910390f35b600d5481565b60606003805461050290611f91565b80601f016020809104026020016040519081016040528092919081815260200182805461052e90611f91565b80156105795780601f1061055057610100808354040283529160200191610579565b820191905f5260205f20905b81548152906001019060200180831161055c57829003601f168201915b5050505050905090565b5f8061058d61144d565b905061059a818585611454565b600191505092915050565b5f600254905090565b5f806105b861144d565b90506105c5858285611466565b6105d08585856114f8565b60019150509392505050565b5f6012905090565b60606106bc82600a805480602002602001604051908101604052809291908181526020015f905b828210156106b3578382905f5260205f2001805461062890611f91565b80601f016020809104026020016040519081016040528092919081815260200182805461065490611f91565b801561069f5780601f106106765761010080835404028352916020019161069f565b820191905f5260205f20905b81548152906001019060200180831161068257829003601f168201915b50505050508152602001906001019061060b565b50505050611567565b610792836006805480602002602001604051908101604052809291908181526020015f905b82821015610789578382905f5260205f200180546106fe90611f91565b80601f016020809104026020016040519081016040528092919081815260200182805461072a90611f91565b80156107755780601f1061074c57610100808354040283529160200191610775565b820191905f5260205f20905b81548152906001019060200180831161075857829003601f168201915b5050505050815260200190600101906106e1565b50505050611567565b610868846007805480602002602001604051908101604052809291908181526020015f905b8282101561085f578382905f5260205f200180546107d490611f91565b80601f016020809104026020016040519081016040528092919081815260200182805461080090611f91565b801561084b5780601f106108225761010080835404028352916020019161084b565b820191905f5260205f20905b81548152906001019060200180831161082e57829003601f168201915b5050505050815260200190600101906107b7565b50505050611567565b61093e856009805480602002602001604051908101604052809291908181526020015f905b82821015610935578382905f5260205f200180546108aa90611f91565b80601f01602080910402602001604051908101604052809291908181526020018280546108d690611f91565b80156109215780601f106108f857610100808354040283529160200191610921565b820191905f5260205f20905b81548152906001019060200180831161090457829003601f168201915b50505050508152602001906001019061088d565b50505050611567565b610a14866008805480602002602001604051908101604052809291908181526020015f905b82821015610a0b578382905f5260205f2001805461098090611f91565b80601f01602080910402602001604051908101604052809291908181526020018280546109ac90611f91565b80156109f75780601f106109ce576101008083540402835291602001916109f7565b820191905f5260205f20905b8154815290600101906020018083116109da57829003601f168201915b505050505081526020019060010190610963565b50505050611567565b604051602001610a28959493929190612822565b6040516020818303038152906040529050919050565b60088181548110610a4d575f80fd5b905f5260205f20015f915090508054610a6590611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9190611f91565b8015610adc5780601f10610ab357610100808354040283529160200191610adc565b820191905f5260205f20905b815481529060010190602001808311610abf57829003601f168201915b505050505081565b60098181548110610af3575f80fd5b905f5260205f20015f915090508054610b0b90611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3790611f91565b8015610b825780601f10610b5957610100808354040283529160200191610b82565b820191905f5260205f20905b815481529060010190602001808311610b6557829003601f168201915b505050505081565b60058181548110610b99575f80fd5b905f5260205f20015f915090508054610bb190611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdd90611f91565b8015610c285780601f10610bff57610100808354040283529160200191610c28565b820191905f5260205f20905b815481529060010190602001808311610c0b57829003601f168201915b505050505081565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90612945565b60405180910390fd5b5f600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a8181548110610d7a575f80fd5b905f5260205f20015f915090508054610d9290611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbe90611f91565b8015610e095780601f10610de057610100808354040283529160200191610e09565b820191905f5260205f20905b815481529060010190602001808311610dec57829003601f168201915b505050505081565b60078181548110610e20575f80fd5b905f5260205f20015f915090508054610e3890611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6490611f91565b8015610eaf5780601f10610e8657610100808354040283529160200191610eaf565b820191905f5260205f20905b815481529060010190602001808311610e9257829003601f168201915b505050505081565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610f1090611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3c90611f91565b8015610f875780601f10610f5e57610100808354040283529160200191610f87565b820191905f5260205f20905b815481529060010190602001808311610f6a57829003601f168201915b5050505050905090565b5f80610f9b61144d565b9050610fa88185856114f8565b600191505092915050565b6010602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054610ff790611f91565b80601f016020809104026020016040519081016040528092919081815260200182805461102390611f91565b801561106e5780601f106110455761010080835404028352916020019161106e565b820191905f5260205f20905b81548152906001019060200180831161105157829003601f168201915b5050505050905082565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600681815481106110ac575f80fd5b905f5260205f20015f9150905080546110c490611f91565b80601f01602080910402602001604051908101604052809291908181526020018280546110f090611f91565b801561113b5780601f106111125761010080835404028352916020019161113b565b820191905f5260205f20905b81548152906001019060200180831161111e57829003601f168201915b505050505081565b5f73ffffffffffffffffffffffffffffffffffffffff16600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c9906129ad565b60405180910390fd5b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890612a15565b60405180910390fd5b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611309573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132d9190612a47565b6040518363ffffffff1660e01b815260040161134a929190612a72565b6020604051808303815f875af1158015611366573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138a9190612a47565b600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b61146183838360016115ce565b505050565b5f61147184846113cb565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114f257818110156114e3578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016114da93929190612a99565b60405180910390fd5b6114f184848484035f6115ce565b5b50505050565b61150383838361179d565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361156257611561328261188d565b5b505050565b60605f8251428543408733604051602001611586959493929190612b5c565b604051602081830303815290604052805190602001205f1c6115a89190612be7565b90508281815181106115bd576115bc612c17565b5b602002602001015191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361163e575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016116359190611edf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116ae575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016116a59190611edf565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611797578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161178e9190611ba7565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361180d575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016118049190611edf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361187d575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016118749190611edf565b60405180910390fd5b611888838383611976565b505050565b5f5b670de0b6b3a7640000826118a39190612c71565b81101561197157600d5f81546118b890612ca1565b9190508190555060405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016118f1600d546105e4565b81525060105f600d5481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190816119609190612ea9565b50905050808060010191505061188f565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119c6578060025f8282546119ba9190612f78565b92505081905550611a94565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611a4f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611a4693929190612a99565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611adb578060025f8282540392505081905550611b25565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b829190611ba7565b60405180910390a3505050565b5f819050919050565b611ba181611b8f565b82525050565b5f602082019050611bba5f830184611b98565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611c0282611bc0565b611c0c8185611bca565b9350611c1c818560208601611bda565b611c2581611be8565b840191505092915050565b5f6020820190508181035f830152611c488184611bf8565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611c7d82611c54565b9050919050565b611c8d81611c73565b8114611c97575f80fd5b50565b5f81359050611ca881611c84565b92915050565b611cb781611b8f565b8114611cc1575f80fd5b50565b5f81359050611cd281611cae565b92915050565b5f8060408385031215611cee57611ced611c50565b5b5f611cfb85828601611c9a565b9250506020611d0c85828601611cc4565b9150509250929050565b5f8115159050919050565b611d2a81611d16565b82525050565b5f602082019050611d435f830184611d21565b92915050565b5f805f60608486031215611d6057611d5f611c50565b5b5f611d6d86828701611c9a565b9350506020611d7e86828701611c9a565b9250506040611d8f86828701611cc4565b9150509250925092565b5f60ff82169050919050565b611dae81611d99565b82525050565b5f602082019050611dc75f830184611da5565b92915050565b5f60208284031215611de257611de1611c50565b5b5f611def84828501611cc4565b91505092915050565b5f60208284031215611e0d57611e0c611c50565b5b5f611e1a84828501611c9a565b91505092915050565b5f819050919050565b5f611e46611e41611e3c84611c54565b611e23565b611c54565b9050919050565b5f611e5782611e2c565b9050919050565b5f611e6882611e4d565b9050919050565b611e7881611e5e565b82525050565b5f602082019050611e915f830184611e6f565b92915050565b5f611ea182611e4d565b9050919050565b611eb181611e97565b82525050565b5f602082019050611eca5f830184611ea8565b92915050565b611ed981611c73565b82525050565b5f602082019050611ef25f830184611ed0565b92915050565b5f604082019050611f0b5f830185611ed0565b8181036020830152611f1d8184611bf8565b90509392505050565b5f8060408385031215611f3c57611f3b611c50565b5b5f611f4985828601611c9a565b9250506020611f5a85828601611c9a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611fa857607f821691505b602082108103611fbb57611fba611f64565b5b50919050565b5f81905092915050565b7f3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f32305f8201527f30302f73766727207374796c653d276261636b67726f756e643a000000000000602082015250565b5f612025603a83611fc1565b915061203082611fcb565b603a82019050919050565b5f61204582611bc0565b61204f8185611fc1565b935061205f818560208601611bda565b80840191505092915050565b7f272076657273696f6e3d27312e30272077696474683d273338362e30303030305f8201527f30707427206865696768743d273338332e30303030303070742720766965774260208201527f6f783d27302030203338362e303030303030203338332e303030303030273e00604082015250565b5f6120eb605f83611fc1565b91506120f68261206b565b605f82019050919050565b7f3c6720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030305f8201527f2f73766727207472616e73666f726d3d277472616e736c61746528302e30303060208201527f3030302c3338332e30303030303029207363616c6528302e3130303030302c2d60408201527f302e3130303030302927207374726f6b653d276e6f6e65273e00000000000000606082015250565b5f6121a7607983611fc1565b91506121b282612101565b607982019050919050565b7f3c7061746820786d6c6e733d27687474703a2f2f7777772e77332e6f72672f325f8201527f3030302f737667272066696c6c3d270000000000000000000000000000000000602082015250565b5f612217602f83611fc1565b9150612222826121bd565b602f82019050919050565b7f2720643d274d313238302033313230206c30202d3830202d38302030202d38305f8201527f20302030202d38302030202d3830202d38302030202d383020302030202d343060208201527f302030202d343030202d38302030202d383020302030202d38302030202d383060408201527f202d38302030202d383020302030202d38302030202d3830203830203020383060608201527f20302030202d3136302030202d313630203830203020383020302030202d373260808201527f302030202d37323020383020302038302030203020383030203020383030202d60a08201527f38302030202d383020302030203830203020383020383020302038302030203060c08201527f203332302030203332302037323020302037323020302030202d31363020302060e08201527f2d313630202d3136302030202d31363020302030202d3136302030202d3136306101008201527f2031363020302031363020302030202d3536302030202d353630202d383020306101208201527f202d383020302030202d38302030202d3830202d3430302030202d34303020306101408201527f2030202d3234302030202d3234302038302030203830203020302031363020306101608201527f20313630203332302030203332302030203020383020302038302038302030206101808201527f38302030203020383020302038302038302030203830203020302038383020306101a08201527f2038383020323430203020323430203020302038302030203830202d383020306101c08201527f202d3830203020302038302030203830202d3234302030202d323430203020306101e08201527f20313630203020313630202d38302030202d38302030203020383020302038306102008201527f202d3536302030202d35363020302030202d38307a206d393630202d313630206102208201527f6c30202d3830203830203020383020302030202d38302030202d3830202d38306102408201527f2030202d3830203020302038302030203830202d38302030202d3830203020306102608201527f2038302030203830203830203020383020302030202d38307a206d2d313238306102808201527f202d31313230206c30202d3830202d38302030202d38302030203020383020306102a08201527f203830203830203020383020302030202d38307a272f3e0000000000000000006102c082015250565b5f6125b56102d783611fc1565b91506125c08261222d565b6102d782019050919050565b7f2720643d274d313434302031393230206c30202d3136302031363020302031365f8201527f302030203020313630203020313630202d3136302030202d313630203020302060208201527f2d3136307a272f3e000000000000000000000000000000000000000000000000604082015250565b5f61264c604883611fc1565b9150612657826125cc565b604882019050919050565b7f2720643d274d313932302031333630206c30202d3234302038302030203830205f8201527f30203020323430203020323430202d38302030202d383020302030202d32343060208201527f7a272f3e00000000000000000000000000000000000000000000000000000000604082015250565b5f6126e2604483611fc1565b91506126ed82612662565b604482019050919050565b7f2720643d274d3136303020383830206c30202d383020343030203020343030205f8201527f3020302038302030203830202d3430302030202d34303020302030202d38307a60208201527f272f3e0000000000000000000000000000000000000000000000000000000000604082015250565b5f612778604383611fc1565b9150612783826126f8565b604382019050919050565b7f3c2f673e000000000000000000000000000000000000000000000000000000005f82015250565b5f6127c2600483611fc1565b91506127cd8261278e565b600482019050919050565b7f3c2f7376673e00000000000000000000000000000000000000000000000000005f82015250565b5f61280c600683611fc1565b9150612817826127d8565b600682019050919050565b5f61282c82612019565b9150612838828861203b565b9150612843826120df565b915061284e8261219b565b91506128598261220b565b9150612865828761203b565b9150612870826125a8565b915061287b8261220b565b9150612887828661203b565b915061289282612640565b915061289d8261220b565b91506128a9828561203b565b91506128b4826126d6565b91506128bf8261220b565b91506128cb828461203b565b91506128d68261276c565b91506128e1826127b6565b91506128ec82612800565b91508190509695505050505050565b7f4163636573732064656e6965642e2023320000000000000000000000000000005f82015250565b5f61292f601183611bca565b915061293a826128fb565b602082019050919050565b5f6020820190508181035f83015261295c81612923565b9050919050565b7f416c726561647920737461727465642e000000000000000000000000000000005f82015250565b5f612997601083611bca565b91506129a282612963565b602082019050919050565b5f6020820190508181035f8301526129c48161298b565b9050919050565b7f4163636573732064656e6965642e2023310000000000000000000000000000005f82015250565b5f6129ff601183611bca565b9150612a0a826129cb565b602082019050919050565b5f6020820190508181035f830152612a2c816129f3565b9050919050565b5f81519050612a4181611c84565b92915050565b5f60208284031215612a5c57612a5b611c50565b5b5f612a6984828501612a33565b91505092915050565b5f604082019050612a855f830185611ed0565b612a926020830184611ed0565b9392505050565b5f606082019050612aac5f830186611ed0565b612ab96020830185611b98565b612ac66040830184611b98565b949350505050565b5f819050919050565b612ae8612ae382611b8f565b612ace565b82525050565b5f819050919050565b5f819050919050565b612b11612b0c82612aee565b612af7565b82525050565b5f8160601b9050919050565b5f612b2d82612b17565b9050919050565b5f612b3e82612b23565b9050919050565b612b56612b5182611c73565b612b34565b82525050565b5f612b678288612ad7565b602082019150612b778287612ad7565b602082019150612b878286612b00565b602082019150612b978285612ad7565b602082019150612ba78284612b45565b6014820191508190509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612bf182611b8f565b9150612bfc83611b8f565b925082612c0c57612c0b612bba565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c7b82611b8f565b9150612c8683611b8f565b925082612c9657612c95612bba565b5b828204905092915050565b5f612cab82611b8f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612cdd57612cdc612c44565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612d717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612d36565b612d7b8683612d36565b95508019841693508086168417925050509392505050565b5f612dad612da8612da384611b8f565b611e23565b611b8f565b9050919050565b5f819050919050565b612dc683612d93565b612dda612dd282612db4565b848454612d42565b825550505050565b5f90565b612dee612de2565b612df9818484612dbd565b505050565b5b81811015612e1c57612e115f82612de6565b600181019050612dff565b5050565b601f821115612e6157612e3281612d15565b612e3b84612d27565b81016020851015612e4a578190505b612e5e612e5685612d27565b830182612dfe565b50505b505050565b5f82821c905092915050565b5f612e815f1984600802612e66565b1980831691505092915050565b5f612e998383612e72565b9150826002028217905092915050565b612eb282611bc0565b67ffffffffffffffff811115612ecb57612eca612ce8565b5b612ed58254611f91565b612ee0828285612e20565b5f60209050601f831160018114612f11575f8415612eff578287015190505b612f098582612e8e565b865550612f70565b601f198416612f1f86612d15565b5f5b82811015612f4657848901518255600182019150602085019450602081019050612f21565b86831015612f635784890151612f5f601f891682612e72565b8355505b6001600288020188555050505b505050505050565b5f612f8282611b8f565b9150612f8d83611b8f565b9250828201905080821115612fa557612fa4612c44565b5b9291505056fea26469706673582212205cba871b9a6516f23cdeaf8ba71f0a679eeef45223b5ebde4d7d60da2faa9e2064736f6c634300081a00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610156575f3560e01c8063735de9f7116100c1578063a9059cbb1161007a578063a9059cbb14610404578063a972aef914610434578063b8975c8e14610465578063be99e4d514610483578063be9a6555146104b3578063dd62ed3e146104bd57610156565b8063735de9f71461032c5780637673bfa41461034a57806377f239901461037a5780638bdb2afa146103aa5780638da5cb5b146103c857806395d89b41146103e657610156565b8063316fd91811610113578063316fd9181461023257806353388fd51461026257806353c55061146102925780635534b159146102c257806370a08231146102f2578063715018a61461032257610156565b806306661abd1461015a57806306fdde0314610178578063095ea7b31461019657806318160ddd146101c657806323b872dd146101e4578063313ce56714610214575b5f80fd5b6101626104ed565b60405161016f9190611ba7565b60405180910390f35b6101806104f3565b60405161018d9190611c30565b60405180910390f35b6101b060048036038101906101ab9190611cd8565b610583565b6040516101bd9190611d30565b60405180910390f35b6101ce6105a5565b6040516101db9190611ba7565b60405180910390f35b6101fe60048036038101906101f99190611d49565b6105ae565b60405161020b9190611d30565b60405180910390f35b61021c6105dc565b6040516102299190611db4565b60405180910390f35b61024c60048036038101906102479190611dcd565b6105e4565b6040516102599190611c30565b60405180910390f35b61027c60048036038101906102779190611dcd565b610a3e565b6040516102899190611c30565b60405180910390f35b6102ac60048036038101906102a79190611dcd565b610ae4565b6040516102b99190611c30565b60405180910390f35b6102dc60048036038101906102d79190611dcd565b610b8a565b6040516102e99190611c30565b60405180910390f35b61030c60048036038101906103079190611df8565b610c30565b6040516103199190611ba7565b60405180910390f35b61032a610c75565b005b610334610d46565b6040516103419190611e7e565b60405180910390f35b610364600480360381019061035f9190611dcd565b610d6b565b6040516103719190611c30565b60405180910390f35b610394600480360381019061038f9190611dcd565b610e11565b6040516103a19190611c30565b60405180910390f35b6103b2610eb7565b6040516103bf9190611eb7565b60405180910390f35b6103d0610edc565b6040516103dd9190611edf565b60405180910390f35b6103ee610f01565b6040516103fb9190611c30565b60405180910390f35b61041e60048036038101906104199190611cd8565b610f91565b60405161042b9190611d30565b60405180910390f35b61044e60048036038101906104499190611dcd565b610fb3565b60405161045c929190611ef8565b60405180910390f35b61046d611078565b60405161047a9190611edf565b60405180910390f35b61049d60048036038101906104989190611dcd565b61109d565b6040516104aa9190611c30565b60405180910390f35b6104bb611143565b005b6104d760048036038101906104d29190611f26565b6113cb565b6040516104e49190611ba7565b60405180910390f35b600d5481565b60606003805461050290611f91565b80601f016020809104026020016040519081016040528092919081815260200182805461052e90611f91565b80156105795780601f1061055057610100808354040283529160200191610579565b820191905f5260205f20905b81548152906001019060200180831161055c57829003601f168201915b5050505050905090565b5f8061058d61144d565b905061059a818585611454565b600191505092915050565b5f600254905090565b5f806105b861144d565b90506105c5858285611466565b6105d08585856114f8565b60019150509392505050565b5f6012905090565b60606106bc82600a805480602002602001604051908101604052809291908181526020015f905b828210156106b3578382905f5260205f2001805461062890611f91565b80601f016020809104026020016040519081016040528092919081815260200182805461065490611f91565b801561069f5780601f106106765761010080835404028352916020019161069f565b820191905f5260205f20905b81548152906001019060200180831161068257829003601f168201915b50505050508152602001906001019061060b565b50505050611567565b610792836006805480602002602001604051908101604052809291908181526020015f905b82821015610789578382905f5260205f200180546106fe90611f91565b80601f016020809104026020016040519081016040528092919081815260200182805461072a90611f91565b80156107755780601f1061074c57610100808354040283529160200191610775565b820191905f5260205f20905b81548152906001019060200180831161075857829003601f168201915b5050505050815260200190600101906106e1565b50505050611567565b610868846007805480602002602001604051908101604052809291908181526020015f905b8282101561085f578382905f5260205f200180546107d490611f91565b80601f016020809104026020016040519081016040528092919081815260200182805461080090611f91565b801561084b5780601f106108225761010080835404028352916020019161084b565b820191905f5260205f20905b81548152906001019060200180831161082e57829003601f168201915b5050505050815260200190600101906107b7565b50505050611567565b61093e856009805480602002602001604051908101604052809291908181526020015f905b82821015610935578382905f5260205f200180546108aa90611f91565b80601f01602080910402602001604051908101604052809291908181526020018280546108d690611f91565b80156109215780601f106108f857610100808354040283529160200191610921565b820191905f5260205f20905b81548152906001019060200180831161090457829003601f168201915b50505050508152602001906001019061088d565b50505050611567565b610a14866008805480602002602001604051908101604052809291908181526020015f905b82821015610a0b578382905f5260205f2001805461098090611f91565b80601f01602080910402602001604051908101604052809291908181526020018280546109ac90611f91565b80156109f75780601f106109ce576101008083540402835291602001916109f7565b820191905f5260205f20905b8154815290600101906020018083116109da57829003601f168201915b505050505081526020019060010190610963565b50505050611567565b604051602001610a28959493929190612822565b6040516020818303038152906040529050919050565b60088181548110610a4d575f80fd5b905f5260205f20015f915090508054610a6590611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9190611f91565b8015610adc5780601f10610ab357610100808354040283529160200191610adc565b820191905f5260205f20905b815481529060010190602001808311610abf57829003601f168201915b505050505081565b60098181548110610af3575f80fd5b905f5260205f20015f915090508054610b0b90611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3790611f91565b8015610b825780601f10610b5957610100808354040283529160200191610b82565b820191905f5260205f20905b815481529060010190602001808311610b6557829003601f168201915b505050505081565b60058181548110610b99575f80fd5b905f5260205f20015f915090508054610bb190611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdd90611f91565b8015610c285780601f10610bff57610100808354040283529160200191610c28565b820191905f5260205f20905b815481529060010190602001808311610c0b57829003601f168201915b505050505081565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90612945565b60405180910390fd5b5f600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a8181548110610d7a575f80fd5b905f5260205f20015f915090508054610d9290611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbe90611f91565b8015610e095780601f10610de057610100808354040283529160200191610e09565b820191905f5260205f20905b815481529060010190602001808311610dec57829003601f168201915b505050505081565b60078181548110610e20575f80fd5b905f5260205f20015f915090508054610e3890611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6490611f91565b8015610eaf5780601f10610e8657610100808354040283529160200191610eaf565b820191905f5260205f20905b815481529060010190602001808311610e9257829003601f168201915b505050505081565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610f1090611f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3c90611f91565b8015610f875780601f10610f5e57610100808354040283529160200191610f87565b820191905f5260205f20905b815481529060010190602001808311610f6a57829003601f168201915b5050505050905090565b5f80610f9b61144d565b9050610fa88185856114f8565b600191505092915050565b6010602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054610ff790611f91565b80601f016020809104026020016040519081016040528092919081815260200182805461102390611f91565b801561106e5780601f106110455761010080835404028352916020019161106e565b820191905f5260205f20905b81548152906001019060200180831161105157829003601f168201915b5050505050905082565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600681815481106110ac575f80fd5b905f5260205f20015f9150905080546110c490611f91565b80601f01602080910402602001604051908101604052809291908181526020018280546110f090611f91565b801561113b5780601f106111125761010080835404028352916020019161113b565b820191905f5260205f20905b81548152906001019060200180831161111e57829003601f168201915b505050505081565b5f73ffffffffffffffffffffffffffffffffffffffff16600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c9906129ad565b60405180910390fd5b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890612a15565b60405180910390fd5b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611309573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132d9190612a47565b6040518363ffffffff1660e01b815260040161134a929190612a72565b6020604051808303815f875af1158015611366573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138a9190612a47565b600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b61146183838360016115ce565b505050565b5f61147184846113cb565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114f257818110156114e3578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016114da93929190612a99565b60405180910390fd5b6114f184848484035f6115ce565b5b50505050565b61150383838361179d565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361156257611561328261188d565b5b505050565b60605f8251428543408733604051602001611586959493929190612b5c565b604051602081830303815290604052805190602001205f1c6115a89190612be7565b90508281815181106115bd576115bc612c17565b5b602002602001015191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361163e575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016116359190611edf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116ae575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016116a59190611edf565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611797578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161178e9190611ba7565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361180d575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016118049190611edf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361187d575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016118749190611edf565b60405180910390fd5b611888838383611976565b505050565b5f5b670de0b6b3a7640000826118a39190612c71565b81101561197157600d5f81546118b890612ca1565b9190508190555060405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016118f1600d546105e4565b81525060105f600d5481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190816119609190612ea9565b50905050808060010191505061188f565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119c6578060025f8282546119ba9190612f78565b92505081905550611a94565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611a4f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611a4693929190612a99565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611adb578060025f8282540392505081905550611b25565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b829190611ba7565b60405180910390a3505050565b5f819050919050565b611ba181611b8f565b82525050565b5f602082019050611bba5f830184611b98565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611c0282611bc0565b611c0c8185611bca565b9350611c1c818560208601611bda565b611c2581611be8565b840191505092915050565b5f6020820190508181035f830152611c488184611bf8565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611c7d82611c54565b9050919050565b611c8d81611c73565b8114611c97575f80fd5b50565b5f81359050611ca881611c84565b92915050565b611cb781611b8f565b8114611cc1575f80fd5b50565b5f81359050611cd281611cae565b92915050565b5f8060408385031215611cee57611ced611c50565b5b5f611cfb85828601611c9a565b9250506020611d0c85828601611cc4565b9150509250929050565b5f8115159050919050565b611d2a81611d16565b82525050565b5f602082019050611d435f830184611d21565b92915050565b5f805f60608486031215611d6057611d5f611c50565b5b5f611d6d86828701611c9a565b9350506020611d7e86828701611c9a565b9250506040611d8f86828701611cc4565b9150509250925092565b5f60ff82169050919050565b611dae81611d99565b82525050565b5f602082019050611dc75f830184611da5565b92915050565b5f60208284031215611de257611de1611c50565b5b5f611def84828501611cc4565b91505092915050565b5f60208284031215611e0d57611e0c611c50565b5b5f611e1a84828501611c9a565b91505092915050565b5f819050919050565b5f611e46611e41611e3c84611c54565b611e23565b611c54565b9050919050565b5f611e5782611e2c565b9050919050565b5f611e6882611e4d565b9050919050565b611e7881611e5e565b82525050565b5f602082019050611e915f830184611e6f565b92915050565b5f611ea182611e4d565b9050919050565b611eb181611e97565b82525050565b5f602082019050611eca5f830184611ea8565b92915050565b611ed981611c73565b82525050565b5f602082019050611ef25f830184611ed0565b92915050565b5f604082019050611f0b5f830185611ed0565b8181036020830152611f1d8184611bf8565b90509392505050565b5f8060408385031215611f3c57611f3b611c50565b5b5f611f4985828601611c9a565b9250506020611f5a85828601611c9a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611fa857607f821691505b602082108103611fbb57611fba611f64565b5b50919050565b5f81905092915050565b7f3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f32305f8201527f30302f73766727207374796c653d276261636b67726f756e643a000000000000602082015250565b5f612025603a83611fc1565b915061203082611fcb565b603a82019050919050565b5f61204582611bc0565b61204f8185611fc1565b935061205f818560208601611bda565b80840191505092915050565b7f272076657273696f6e3d27312e30272077696474683d273338362e30303030305f8201527f30707427206865696768743d273338332e30303030303070742720766965774260208201527f6f783d27302030203338362e303030303030203338332e303030303030273e00604082015250565b5f6120eb605f83611fc1565b91506120f68261206b565b605f82019050919050565b7f3c6720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030305f8201527f2f73766727207472616e73666f726d3d277472616e736c61746528302e30303060208201527f3030302c3338332e30303030303029207363616c6528302e3130303030302c2d60408201527f302e3130303030302927207374726f6b653d276e6f6e65273e00000000000000606082015250565b5f6121a7607983611fc1565b91506121b282612101565b607982019050919050565b7f3c7061746820786d6c6e733d27687474703a2f2f7777772e77332e6f72672f325f8201527f3030302f737667272066696c6c3d270000000000000000000000000000000000602082015250565b5f612217602f83611fc1565b9150612222826121bd565b602f82019050919050565b7f2720643d274d313238302033313230206c30202d3830202d38302030202d38305f8201527f20302030202d38302030202d3830202d38302030202d383020302030202d343060208201527f302030202d343030202d38302030202d383020302030202d38302030202d383060408201527f202d38302030202d383020302030202d38302030202d3830203830203020383060608201527f20302030202d3136302030202d313630203830203020383020302030202d373260808201527f302030202d37323020383020302038302030203020383030203020383030202d60a08201527f38302030202d383020302030203830203020383020383020302038302030203060c08201527f203332302030203332302037323020302037323020302030202d31363020302060e08201527f2d313630202d3136302030202d31363020302030202d3136302030202d3136306101008201527f2031363020302031363020302030202d3536302030202d353630202d383020306101208201527f202d383020302030202d38302030202d3830202d3430302030202d34303020306101408201527f2030202d3234302030202d3234302038302030203830203020302031363020306101608201527f20313630203332302030203332302030203020383020302038302038302030206101808201527f38302030203020383020302038302038302030203830203020302038383020306101a08201527f2038383020323430203020323430203020302038302030203830202d383020306101c08201527f202d3830203020302038302030203830202d3234302030202d323430203020306101e08201527f20313630203020313630202d38302030202d38302030203020383020302038306102008201527f202d3536302030202d35363020302030202d38307a206d393630202d313630206102208201527f6c30202d3830203830203020383020302030202d38302030202d3830202d38306102408201527f2030202d3830203020302038302030203830202d38302030202d3830203020306102608201527f2038302030203830203830203020383020302030202d38307a206d2d313238306102808201527f202d31313230206c30202d3830202d38302030202d38302030203020383020306102a08201527f203830203830203020383020302030202d38307a272f3e0000000000000000006102c082015250565b5f6125b56102d783611fc1565b91506125c08261222d565b6102d782019050919050565b7f2720643d274d313434302031393230206c30202d3136302031363020302031365f8201527f302030203020313630203020313630202d3136302030202d313630203020302060208201527f2d3136307a272f3e000000000000000000000000000000000000000000000000604082015250565b5f61264c604883611fc1565b9150612657826125cc565b604882019050919050565b7f2720643d274d313932302031333630206c30202d3234302038302030203830205f8201527f30203020323430203020323430202d38302030202d383020302030202d32343060208201527f7a272f3e00000000000000000000000000000000000000000000000000000000604082015250565b5f6126e2604483611fc1565b91506126ed82612662565b604482019050919050565b7f2720643d274d3136303020383830206c30202d383020343030203020343030205f8201527f3020302038302030203830202d3430302030202d34303020302030202d38307a60208201527f272f3e0000000000000000000000000000000000000000000000000000000000604082015250565b5f612778604383611fc1565b9150612783826126f8565b604382019050919050565b7f3c2f673e000000000000000000000000000000000000000000000000000000005f82015250565b5f6127c2600483611fc1565b91506127cd8261278e565b600482019050919050565b7f3c2f7376673e00000000000000000000000000000000000000000000000000005f82015250565b5f61280c600683611fc1565b9150612817826127d8565b600682019050919050565b5f61282c82612019565b9150612838828861203b565b9150612843826120df565b915061284e8261219b565b91506128598261220b565b9150612865828761203b565b9150612870826125a8565b915061287b8261220b565b9150612887828661203b565b915061289282612640565b915061289d8261220b565b91506128a9828561203b565b91506128b4826126d6565b91506128bf8261220b565b91506128cb828461203b565b91506128d68261276c565b91506128e1826127b6565b91506128ec82612800565b91508190509695505050505050565b7f4163636573732064656e6965642e2023320000000000000000000000000000005f82015250565b5f61292f601183611bca565b915061293a826128fb565b602082019050919050565b5f6020820190508181035f83015261295c81612923565b9050919050565b7f416c726561647920737461727465642e000000000000000000000000000000005f82015250565b5f612997601083611bca565b91506129a282612963565b602082019050919050565b5f6020820190508181035f8301526129c48161298b565b9050919050565b7f4163636573732064656e6965642e2023310000000000000000000000000000005f82015250565b5f6129ff601183611bca565b9150612a0a826129cb565b602082019050919050565b5f6020820190508181035f830152612a2c816129f3565b9050919050565b5f81519050612a4181611c84565b92915050565b5f60208284031215612a5c57612a5b611c50565b5b5f612a6984828501612a33565b91505092915050565b5f604082019050612a855f830185611ed0565b612a926020830184611ed0565b9392505050565b5f606082019050612aac5f830186611ed0565b612ab96020830185611b98565b612ac66040830184611b98565b949350505050565b5f819050919050565b612ae8612ae382611b8f565b612ace565b82525050565b5f819050919050565b5f819050919050565b612b11612b0c82612aee565b612af7565b82525050565b5f8160601b9050919050565b5f612b2d82612b17565b9050919050565b5f612b3e82612b23565b9050919050565b612b56612b5182611c73565b612b34565b82525050565b5f612b678288612ad7565b602082019150612b778287612ad7565b602082019150612b878286612b00565b602082019150612b978285612ad7565b602082019150612ba78284612b45565b6014820191508190509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612bf182611b8f565b9150612bfc83611b8f565b925082612c0c57612c0b612bba565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c7b82611b8f565b9150612c8683611b8f565b925082612c9657612c95612bba565b5b828204905092915050565b5f612cab82611b8f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612cdd57612cdc612c44565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612d717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612d36565b612d7b8683612d36565b95508019841693508086168417925050509392505050565b5f612dad612da8612da384611b8f565b611e23565b611b8f565b9050919050565b5f819050919050565b612dc683612d93565b612dda612dd282612db4565b848454612d42565b825550505050565b5f90565b612dee612de2565b612df9818484612dbd565b505050565b5b81811015612e1c57612e115f82612de6565b600181019050612dff565b5050565b601f821115612e6157612e3281612d15565b612e3b84612d27565b81016020851015612e4a578190505b612e5e612e5685612d27565b830182612dfe565b50505b505050565b5f82821c905092915050565b5f612e815f1984600802612e66565b1980831691505092915050565b5f612e998383612e72565b9150826002028217905092915050565b612eb282611bc0565b67ffffffffffffffff811115612ecb57612eca612ce8565b5b612ed58254611f91565b612ee0828285612e20565b5f60209050601f831160018114612f11575f8415612eff578287015190505b612f098582612e8e565b865550612f70565b601f198416612f1f86612d15565b5f5b82811015612f4657848901518255600182019150602085019450602081019050612f21565b86831015612f635784890151612f5f601f891682612e72565b8355505b6001600288020188555050505b505050505050565b5f612f8282611b8f565b9150612f8d83611b8f565b9250828201905080821115612fa557612fa4612c44565b5b9291505056fea26469706673582212205cba871b9a6516f23cdeaf8ba71f0a679eeef45223b5ebde4d7d60da2faa9e2064736f6c634300081a0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

29069:1702:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29211:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13445:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15738:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14547:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16506:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14398:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26086:2110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24239:448;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24696:447;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22873:446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14709:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29738:135;;;:::i;:::-;;29117:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25152:453;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23784:446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29163:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29242:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13655:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15032:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29403:56;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;29269:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23328:447;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29881:258;;;:::i;:::-;;15277:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29211:24;;;;:::o;13445:91::-;13490:13;13523:5;13516:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13445:91;:::o;15738:190::-;15811:4;15828:13;15844:12;:10;:12::i;:::-;15828:28;;15867:31;15876:5;15883:7;15892:5;15867:8;:31::i;:::-;15916:4;15909:11;;;15738:190;;;;:::o;14547:99::-;14599:7;14626:12;;14619:19;;14547:99;:::o;16506:249::-;16593:4;16610:15;16628:12;:10;:12::i;:::-;16610:30;;16651:37;16667:4;16673:7;16682:5;16651:15;:37::i;:::-;16699:26;16709:4;16715:2;16719:5;16699:9;:26::i;:::-;16743:4;16736:11;;;16506:249;;;;;:::o;14398:84::-;14447:5;14472:2;14465:9;;14398:84;:::o;26086:2110::-;26144:13;26295:39;26307:7;26316:17;26295:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:39::i;:::-;26690:33;26702:7;26711:11;26690:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:33::i;:::-;27565:32;27577:7;27586:10;27565:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:32::i;:::-;27784:33;27796:7;27805:11;27784:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:33::i;:::-;28001:34;28013:7;28022:12;28001:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:34::i;:::-;26198:1979;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26170:2018;;26086:2110;;;:::o;24239:448::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24696:447::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22873:446::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14709:118::-;14774:7;14801:9;:18;14811:7;14801:18;;;;;;;;;;;;;;;;14794:25;;14709:118;;;:::o;29738:135::-;29809:5;;;;;;;;;;;29795:19;;:10;:19;;;29787:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;29863:1;29847:5;;:18;;;;;;;;;;;;;;;;;;29738:135::o;29117:39::-;;;;;;;;;;;;;:::o;25152:453::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23784:446::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29163:39::-;;;;;;;;;;;;;:::o;29242:20::-;;;;;;;;;;;;;:::o;13655:95::-;13702:13;13735:7;13728:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13655:95;:::o;15032:182::-;15101:4;15118:13;15134:12;:10;:12::i;:::-;15118:28;;15157:27;15167:5;15174:2;15178:5;15157:9;:27::i;:::-;15202:4;15195:11;;;15032:182;;;;:::o;29403:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29269:44::-;;;;;;;;;;;;;:::o;23328:447::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29881:258::-;29954:1;29926:30;;:16;;;;;;;;;;;:30;;;29918:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;30010:5;;;;;;;;;;;29996:19;;:10;:19;;;29988:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;30069:14;;;;;;;;;;;:25;;;30103:4;30110:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30069:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30050:16;;:81;;;;;;;;;;;;;;;;;;29881:258::o;15277:142::-;15357:7;15384:11;:18;15396:5;15384:18;;;;;;;;;;;;;;;:27;15403:7;15384:27;;;;;;;;;;;;;;;;15377:34;;15277:142;;;;:::o;4450:98::-;4503:7;4530:10;4523:17;;4450:98;:::o;20573:130::-;20658:37;20667:5;20674:7;20683:5;20690:4;20658:8;:37::i;:::-;20573:130;;;:::o;22289:487::-;22389:24;22416:25;22426:5;22433:7;22416:9;:25::i;:::-;22389:52;;22476:17;22456:16;:37;22452:317;;22533:5;22514:16;:24;22510:132;;;22593:7;22602:16;22620:5;22566:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;22510:132;22685:57;22694:5;22701:7;22729:5;22710:16;:24;22736:5;22685:8;:57::i;:::-;22452:317;22378:398;22289:487;;;:::o;30456:312::-;30589:42;30605:6;30613:9;30624:6;30589:15;:42::i;:::-;30666:16;;;;;;;;;;;30648:35;;:6;:35;;;30644:117;;30723:26;30731:9;30742:6;30723:7;:26::i;:::-;30644:117;30456:312;;;:::o;25616:462::-;25705:13;25731:12;26017:10;:17;25813:15;25856:7;25900:12;25890:23;25933:7;25976:10;25778:224;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25754:259;;;;;;25746:268;;:288;;;;:::i;:::-;25731:303;;26054:10;26065:4;26054:16;;;;;;;;:::i;:::-;;;;;;;;26047:23;;;25616:462;;;;:::o;21554:443::-;21684:1;21667:19;;:5;:19;;;21663:91;;21739:1;21710:32;;;;;;;;;;;:::i;:::-;;;;;;;;21663:91;21787:1;21768:21;;:7;:21;;;21764:92;;21841:1;21813:31;;;;;;;;;;;:::i;:::-;;;;;;;;21764:92;21896:5;21866:11;:18;21878:5;21866:18;;;;;;;;;;;;;;;:27;21885:7;21866:27;;;;;;;;;;;;;;;:35;;;;21916:9;21912:78;;;21963:7;21947:31;;21956:5;21947:31;;;21972:5;21947:31;;;;;;:::i;:::-;;;;;;;;21912:78;21554:443;;;;:::o;17140:316::-;17248:1;17232:18;;:4;:18;;;17228:88;;17301:1;17274:30;;;;;;;;;;;:::i;:::-;;;;;;;;17228:88;17344:1;17330:16;;:2;:16;;;17326:88;;17399:1;17370:32;;;;;;;;;;;:::i;:::-;;;;;;;;17326:88;17424:24;17432:4;17438:2;17442:5;17424:7;:24::i;:::-;17140:316;;;:::o;30147:301::-;30215:9;30210:221;30240:7;30234:3;:13;;;;:::i;:::-;30230:1;:17;30210:221;;;30271:5;;30269:7;;;;;:::i;:::-;;;;;;;;30317:102;;;;;;;;30355:4;30317:102;;;;;;30386:17;30397:5;;30386:10;:17::i;:::-;30317:102;;;30291:16;:23;30308:5;;30291:23;;;;;;;;;;;:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;30249:3;;;;;;;30210:221;;;;30147:301;;:::o;17780:1135::-;17886:1;17870:18;;:4;:18;;;17866:552;;18024:5;18008:12;;:21;;;;;;;:::i;:::-;;;;;;;;17866:552;;;18062:19;18084:9;:15;18094:4;18084:15;;;;;;;;;;;;;;;;18062:37;;18132:5;18118:11;:19;18114:117;;;18190:4;18196:11;18209:5;18165:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;18114:117;18386:5;18372:11;:19;18354:9;:15;18364:4;18354:15;;;;;;;;;;;;;;;:37;;;;18047:371;17866:552;18448:1;18434:16;;:2;:16;;;18430:435;;18616:5;18600:12;;:21;;;;;;;;;;;18430:435;;;18833:5;18816:9;:13;18826:2;18816:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;18430:435;18897:2;18882:25;;18891:4;18882:25;;;18901:5;18882:25;;;;;;:::i;:::-;;;;;;;;17780:1135;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:139::-;811:6;806:3;801;795:23;852:1;843:6;838:3;834:16;827:27;722:139;;;:::o;867:102::-;908:6;959:2;955:7;950:2;943:5;939:14;935:28;925:38;;867:102;;;:::o;975:377::-;1063:3;1091:39;1124:5;1091:39;:::i;:::-;1146:71;1210:6;1205:3;1146:71;:::i;:::-;1139:78;;1226:65;1284:6;1279:3;1272:4;1265:5;1261:16;1226:65;:::i;:::-;1316:29;1338:6;1316:29;:::i;:::-;1311:3;1307:39;1300:46;;1067:285;975:377;;;;:::o;1358:313::-;1471:4;1509:2;1498:9;1494:18;1486:26;;1558:9;1552:4;1548:20;1544:1;1533:9;1529:17;1522:47;1586:78;1659:4;1650:6;1586:78;:::i;:::-;1578:86;;1358:313;;;;:::o;1758:117::-;1867:1;1864;1857:12;2004:126;2041:7;2081:42;2074:5;2070:54;2059:65;;2004:126;;;:::o;2136:96::-;2173:7;2202:24;2220:5;2202:24;:::i;:::-;2191:35;;2136:96;;;:::o;2238:122::-;2311:24;2329:5;2311:24;:::i;:::-;2304:5;2301:35;2291:63;;2350:1;2347;2340:12;2291:63;2238:122;:::o;2366:139::-;2412:5;2450:6;2437:20;2428:29;;2466:33;2493:5;2466:33;:::i;:::-;2366:139;;;;:::o;2511:122::-;2584:24;2602:5;2584:24;:::i;:::-;2577:5;2574:35;2564:63;;2623:1;2620;2613:12;2564:63;2511:122;:::o;2639:139::-;2685:5;2723:6;2710:20;2701:29;;2739:33;2766:5;2739:33;:::i;:::-;2639:139;;;;:::o;2784:474::-;2852:6;2860;2909:2;2897:9;2888:7;2884:23;2880:32;2877:119;;;2915:79;;:::i;:::-;2877:119;3035:1;3060:53;3105:7;3096:6;3085:9;3081:22;3060:53;:::i;:::-;3050:63;;3006:117;3162:2;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3133:118;2784:474;;;;;:::o;3264:90::-;3298:7;3341:5;3334:13;3327:21;3316:32;;3264:90;;;:::o;3360:109::-;3441:21;3456:5;3441:21;:::i;:::-;3436:3;3429:34;3360:109;;:::o;3475:210::-;3562:4;3600:2;3589:9;3585:18;3577:26;;3613:65;3675:1;3664:9;3660:17;3651:6;3613:65;:::i;:::-;3475:210;;;;:::o;3691:619::-;3768:6;3776;3784;3833:2;3821:9;3812:7;3808:23;3804:32;3801:119;;;3839:79;;:::i;:::-;3801:119;3959:1;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;:::i;:::-;3974:63;;3930:117;4086:2;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4057:118;4214:2;4240:53;4285:7;4276:6;4265:9;4261:22;4240:53;:::i;:::-;4230:63;;4185:118;3691:619;;;;;:::o;4316:86::-;4351:7;4391:4;4384:5;4380:16;4369:27;;4316:86;;;:::o;4408:112::-;4491:22;4507:5;4491:22;:::i;:::-;4486:3;4479:35;4408:112;;:::o;4526:214::-;4615:4;4653:2;4642:9;4638:18;4630:26;;4666:67;4730:1;4719:9;4715:17;4706:6;4666:67;:::i;:::-;4526:214;;;;:::o;4746:329::-;4805:6;4854:2;4842:9;4833:7;4829:23;4825:32;4822:119;;;4860:79;;:::i;:::-;4822:119;4980:1;5005:53;5050:7;5041:6;5030:9;5026:22;5005:53;:::i;:::-;4995:63;;4951:117;4746:329;;;;:::o;5081:::-;5140:6;5189:2;5177:9;5168:7;5164:23;5160:32;5157:119;;;5195:79;;:::i;:::-;5157:119;5315:1;5340:53;5385:7;5376:6;5365:9;5361:22;5340:53;:::i;:::-;5330:63;;5286:117;5081:329;;;;:::o;5416:60::-;5444:3;5465:5;5458:12;;5416:60;;;:::o;5482:142::-;5532:9;5565:53;5583:34;5592:24;5610:5;5592:24;:::i;:::-;5583:34;:::i;:::-;5565:53;:::i;:::-;5552:66;;5482:142;;;:::o;5630:126::-;5680:9;5713:37;5744:5;5713:37;:::i;:::-;5700:50;;5630:126;;;:::o;5762:153::-;5839:9;5872:37;5903:5;5872:37;:::i;:::-;5859:50;;5762:153;;;:::o;5921:185::-;6035:64;6093:5;6035:64;:::i;:::-;6030:3;6023:77;5921:185;;:::o;6112:276::-;6232:4;6270:2;6259:9;6255:18;6247:26;;6283:98;6378:1;6367:9;6363:17;6354:6;6283:98;:::i;:::-;6112:276;;;;:::o;6394:152::-;6470:9;6503:37;6534:5;6503:37;:::i;:::-;6490:50;;6394:152;;;:::o;6552:183::-;6665:63;6722:5;6665:63;:::i;:::-;6660:3;6653:76;6552:183;;:::o;6741:274::-;6860:4;6898:2;6887:9;6883:18;6875:26;;6911:97;7005:1;6994:9;6990:17;6981:6;6911:97;:::i;:::-;6741:274;;;;:::o;7021:118::-;7108:24;7126:5;7108:24;:::i;:::-;7103:3;7096:37;7021:118;;:::o;7145:222::-;7238:4;7276:2;7265:9;7261:18;7253:26;;7289:71;7357:1;7346:9;7342:17;7333:6;7289:71;:::i;:::-;7145:222;;;;:::o;7373:423::-;7514:4;7552:2;7541:9;7537:18;7529:26;;7565:71;7633:1;7622:9;7618:17;7609:6;7565:71;:::i;:::-;7683:9;7677:4;7673:20;7668:2;7657:9;7653:18;7646:48;7711:78;7784:4;7775:6;7711:78;:::i;:::-;7703:86;;7373:423;;;;;:::o;7802:474::-;7870:6;7878;7927:2;7915:9;7906:7;7902:23;7898:32;7895:119;;;7933:79;;:::i;:::-;7895:119;8053:1;8078:53;8123:7;8114:6;8103:9;8099:22;8078:53;:::i;:::-;8068:63;;8024:117;8180:2;8206:53;8251:7;8242:6;8231:9;8227:22;8206:53;:::i;:::-;8196:63;;8151:118;7802:474;;;;;:::o;8282:180::-;8330:77;8327:1;8320:88;8427:4;8424:1;8417:15;8451:4;8448:1;8441:15;8468:320;8512:6;8549:1;8543:4;8539:12;8529:22;;8596:1;8590:4;8586:12;8617:18;8607:81;;8673:4;8665:6;8661:17;8651:27;;8607:81;8735:2;8727:6;8724:14;8704:18;8701:38;8698:84;;8754:18;;:::i;:::-;8698:84;8519:269;8468:320;;;:::o;8794:148::-;8896:11;8933:3;8918:18;;8794:148;;;;:::o;8948:253::-;9088:34;9084:1;9076:6;9072:14;9065:58;9161:28;9156:2;9148:6;9144:15;9137:53;8948:253;:::o;9211:418::-;9371:3;9396:85;9478:2;9473:3;9396:85;:::i;:::-;9389:92;;9494:93;9583:3;9494:93;:::i;:::-;9616:2;9611:3;9607:12;9600:19;;9211:418;;;:::o;9639:410::-;9745:3;9777:39;9810:5;9777:39;:::i;:::-;9836:89;9918:6;9913:3;9836:89;:::i;:::-;9829:96;;9938:65;9996:6;9991:3;9984:4;9977:5;9973:16;9938:65;:::i;:::-;10032:6;10027:3;10023:16;10016:23;;9749:300;9639:410;;;;:::o;10059:335::-;10203:34;10199:1;10191:6;10187:14;10180:58;10276:34;10271:2;10263:6;10259:15;10252:59;10349:33;10344:2;10336:6;10332:15;10325:58;10059:335;:::o;10404:418::-;10564:3;10589:85;10671:2;10666:3;10589:85;:::i;:::-;10582:92;;10687:93;10776:3;10687:93;:::i;:::-;10809:2;10804:3;10800:12;10793:19;;10404:418;;;:::o;10832:422::-;10976:34;10972:1;10964:6;10960:14;10953:58;11053:34;11048:2;11040:6;11036:15;11029:59;11134:34;11129:2;11121:6;11117:15;11110:59;11211:27;11206:2;11198:6;11194:15;11187:52;10832:422;:::o;11268:436::-;11428:3;11457:86;11539:3;11534;11457:86;:::i;:::-;11450:93;;11560;11649:3;11560:93;:::i;:::-;11686:3;11681;11677:13;11670:20;;11268:436;;;:::o;11718:266::-;11866:34;11862:1;11854:6;11850:14;11843:58;11947:17;11942:2;11934:6;11930:15;11923:42;11718:266;:::o;12002:450::-;12162:3;12195:85;12277:2;12272:3;12195:85;:::i;:::-;12188:92;;12301:93;12390:3;12301:93;:::i;:::-;12431:2;12426:3;12422:12;12415:19;;12002:450;;;:::o;12470:1998::-;12622:34;12618:1;12610:6;12606:14;12599:58;12703:34;12698:2;12690:6;12686:15;12679:59;12784:34;12779:2;12771:6;12767:15;12760:59;12865:34;12860:2;12852:6;12848:15;12841:59;12947:34;12941:3;12933:6;12929:16;12922:60;13029:34;13023:3;13015:6;13011:16;13004:60;13111:34;13105:3;13097:6;13093:16;13086:60;13193:34;13187:3;13179:6;13175:16;13168:60;13275:34;13269:3;13261:6;13257:16;13250:60;13357:34;13351:3;13343:6;13339:16;13332:60;13439:34;13433:3;13425:6;13421:16;13414:60;13521:34;13515:3;13507:6;13503:16;13496:60;13603:34;13597:3;13589:6;13585:16;13578:60;13685:34;13679:3;13671:6;13667:16;13660:60;13767:34;13761:3;13753:6;13749:16;13742:60;13849:34;13843:3;13835:6;13831:16;13824:60;13931:34;13925:3;13917:6;13913:16;13906:60;14013:34;14007:3;13999:6;13995:16;13988:60;14095:34;14089:3;14081:6;14077:16;14070:60;14177:34;14171:3;14163:6;14159:16;14152:60;14259:34;14253:3;14245:6;14241:16;14234:60;14341:34;14335:3;14327:6;14323:16;14316:60;14423:25;14417:3;14409:6;14405:16;14398:51;12470:1998;:::o;14486:452::-;14646:3;14679:86;14761:3;14756;14679:86;:::i;:::-;14672:93;;14786;14875:3;14786:93;:::i;:::-;14916:3;14911;14907:13;14900:20;;14486:452;;;:::o;14956:344::-;15108:34;15104:1;15096:6;15092:14;15085:58;15189:34;15184:2;15176:6;15172:15;15165:59;15270:10;15265:2;15257:6;15253:15;15246:35;14956:344;:::o;15318:450::-;15478:3;15511:85;15593:2;15588:3;15511:85;:::i;:::-;15504:92;;15617:93;15706:3;15617:93;:::i;:::-;15747:2;15742:3;15738:12;15731:19;;15318:450;;;:::o;15786:340::-;15938:34;15934:1;15926:6;15922:14;15915:58;16019:34;16014:2;16006:6;16002:15;15995:59;16100:6;16095:2;16087:6;16083:15;16076:31;15786:340;:::o;16144:450::-;16304:3;16337:85;16419:2;16414:3;16337:85;:::i;:::-;16330:92;;16443:93;16532:3;16443:93;:::i;:::-;16573:2;16568:3;16564:12;16557:19;;16144:450;;;:::o;16612:339::-;16764:34;16760:1;16752:6;16748:14;16741:58;16845:34;16840:2;16832:6;16828:15;16821:59;16926:5;16921:2;16913:6;16909:15;16902:30;16612:339;:::o;16969:450::-;17129:3;17162:85;17244:2;17239:3;17162:85;:::i;:::-;17155:92;;17268:93;17357:3;17268:93;:::i;:::-;17398:2;17393:3;17389:12;17382:19;;16969:450;;;:::o;17437:178::-;17589:6;17585:1;17577:6;17573:14;17566:30;17437:178;:::o;17633:448::-;17793:3;17826:84;17908:1;17903:3;17826:84;:::i;:::-;17819:91;;17931:93;18020:3;17931:93;:::i;:::-;18061:1;18056:3;18052:11;18045:18;;17633:448;;;:::o;18099:180::-;18251:8;18247:1;18239:6;18235:14;18228:32;18099:180;:::o;18297:448::-;18457:3;18490:84;18572:1;18567:3;18490:84;:::i;:::-;18483:91;;18595:93;18684:3;18595:93;:::i;:::-;18725:1;18720:3;18716:11;18709:18;;18297:448;;;:::o;18763:4613::-;20400:3;20434:148;20578:3;20434:148;:::i;:::-;20427:155;;20611:95;20702:3;20693:6;20611:95;:::i;:::-;20604:102;;20735:148;20879:3;20735:148;:::i;:::-;20728:155;;20912:148;21056:3;20912:148;:::i;:::-;20905:155;;21089:148;21233:3;21089:148;:::i;:::-;21082:155;;21266:95;21357:3;21348:6;21266:95;:::i;:::-;21259:102;;21390:148;21534:3;21390:148;:::i;:::-;21383:155;;21567:148;21711:3;21567:148;:::i;:::-;21560:155;;21744:95;21835:3;21826:6;21744:95;:::i;:::-;21737:102;;21868:148;22012:3;21868:148;:::i;:::-;21861:155;;22045:148;22189:3;22045:148;:::i;:::-;22038:155;;22222:95;22313:3;22304:6;22222:95;:::i;:::-;22215:102;;22346:148;22490:3;22346:148;:::i;:::-;22339:155;;22523:148;22667:3;22523:148;:::i;:::-;22516:155;;22700:95;22791:3;22782:6;22700:95;:::i;:::-;22693:102;;22824:148;22968:3;22824:148;:::i;:::-;22817:155;;23001:148;23145:3;23001:148;:::i;:::-;22994:155;;23178:148;23322:3;23178:148;:::i;:::-;23171:155;;23355:3;23348:10;;18763:4613;;;;;;;;:::o;23394:191::-;23546:19;23542:1;23534:6;23530:14;23523:43;23394:191;:::o;23603:414::-;23745:3;23778:67;23842:2;23837:3;23778:67;:::i;:::-;23771:74;;23866:93;23955:3;23866:93;:::i;:::-;23996:2;23991:3;23987:12;23980:19;;23603:414;;;:::o;24035:467::-;24201:4;24251:2;24240:9;24236:18;24228:26;;24312:9;24306:4;24302:20;24298:1;24287:9;24283:17;24276:47;24352:131;24478:4;24352:131;:::i;:::-;24344:139;;24035:467;;;:::o;24520:190::-;24672:18;24668:1;24660:6;24656:14;24649:42;24520:190;:::o;24728:414::-;24870:3;24903:67;24967:2;24962:3;24903:67;:::i;:::-;24896:74;;24991:93;25080:3;24991:93;:::i;:::-;25121:2;25116:3;25112:12;25105:19;;24728:414;;;:::o;25160:467::-;25326:4;25376:2;25365:9;25361:18;25353:26;;25437:9;25431:4;25427:20;25423:1;25412:9;25408:17;25401:47;25477:131;25603:4;25477:131;:::i;:::-;25469:139;;25160:467;;;:::o;25645:191::-;25797:19;25793:1;25785:6;25781:14;25774:43;25645:191;:::o;25854:414::-;25996:3;26029:67;26093:2;26088:3;26029:67;:::i;:::-;26022:74;;26117:93;26206:3;26117:93;:::i;:::-;26247:2;26242:3;26238:12;26231:19;;25854:414;;;:::o;26286:467::-;26452:4;26502:2;26491:9;26487:18;26479:26;;26563:9;26557:4;26553:20;26549:1;26538:9;26534:17;26527:47;26603:131;26729:4;26603:131;:::i;:::-;26595:139;;26286:467;;;:::o;26771:179::-;26828:5;26871:6;26865:13;26856:22;;26899:33;26926:5;26899:33;:::i;:::-;26771:179;;;;:::o;26968:423::-;27038:6;27099:2;27087:9;27078:7;27074:23;27070:32;27067:119;;;27105:79;;:::i;:::-;27067:119;27249:1;27286:64;27342:7;27333:6;27322:9;27318:22;27286:64;:::i;:::-;27276:74;;27208:164;26968:423;;;;:::o;27409:380::-;27530:4;27580:2;27569:9;27565:18;27557:26;;27605:71;27673:1;27662:9;27658:17;27649:6;27605:71;:::i;:::-;27698:72;27766:2;27755:9;27751:18;27742:6;27698:72;:::i;:::-;27409:380;;;;;:::o;27807:502::-;27956:4;28006:2;27995:9;27991:18;27983:26;;28031:71;28099:1;28088:9;28084:17;28075:6;28031:71;:::i;:::-;28124:72;28192:2;28181:9;28177:18;28168:6;28124:72;:::i;:::-;28218;28286:2;28275:9;28271:18;28262:6;28218:72;:::i;:::-;27807:502;;;;;;:::o;28327:103::-;28366:7;28407:5;28396:16;;28327:103;;;:::o;28448:181::-;28565:45;28585:24;28603:5;28585:24;:::i;:::-;28565:45;:::i;:::-;28560:3;28553:58;28448:181;;:::o;28647:101::-;28684:7;28725:5;28714:16;;28647:101;;;:::o;28766:103::-;28805:7;28846:5;28835:16;;28766:103;;;:::o;28887:181::-;29004:45;29024:24;29042:5;29024:24;:::i;:::-;29004:45;:::i;:::-;28999:3;28992:58;28887:181;;:::o;29086:130::-;29119:8;29191:5;29187:2;29183:14;29150:47;;29086:130;;;:::o;29234:118::-;29273:7;29314:20;29328:5;29314:20;:::i;:::-;29303:31;;29234:118;;;:::o;29370:124::-;29409:7;29450:26;29470:5;29450:26;:::i;:::-;29439:37;;29370:124;;;:::o;29512:181::-;29629:45;29649:24;29667:5;29649:24;:::i;:::-;29629:45;:::i;:::-;29624:3;29617:58;29512:181;;:::o;29711:964::-;29935:3;29962:75;30033:3;30024:6;29962:75;:::i;:::-;30074:2;30069:3;30065:12;30058:19;;30099:75;30170:3;30161:6;30099:75;:::i;:::-;30211:2;30206:3;30202:12;30195:19;;30236:75;30307:3;30298:6;30236:75;:::i;:::-;30348:2;30343:3;30339:12;30332:19;;30373:75;30444:3;30435:6;30373:75;:::i;:::-;30485:2;30480:3;30476:12;30469:19;;30510:75;30581:3;30572:6;30510:75;:::i;:::-;30622:2;30617:3;30613:12;30606:19;;30654:3;30647:10;;29711:964;;;;;;;;:::o;30693:228::-;30753:77;30750:1;30743:88;30862:4;30859:1;30852:15;30898:4;30895:1;30888:15;30939:236;30971:1;31000:20;31018:1;31000:20;:::i;:::-;30995:25;;31046:20;31064:1;31046:20;:::i;:::-;31041:25;;31097:1;31087:35;;31102:18;;:::i;:::-;31087:35;31155:1;31152;31148:9;31143:14;;30939:236;;;;:::o;31193:228::-;31253:77;31250:1;31243:88;31362:4;31359:1;31352:15;31398:4;31395:1;31388:15;31439:228;31499:77;31496:1;31489:88;31608:4;31605:1;31598:15;31644:4;31641:1;31634:15;31685:245;31725:1;31754:20;31772:1;31754:20;:::i;:::-;31749:25;;31800:20;31818:1;31800:20;:::i;:::-;31795:25;;31851:1;31841:35;;31856:18;;:::i;:::-;31841:35;31910:1;31907;31903:9;31898:14;;31685:245;;;;:::o;31948:281::-;31987:3;32022:24;32040:5;32022:24;:::i;:::-;32013:33;;32080:66;32073:5;32070:77;32067:103;;32150:18;;:::i;:::-;32067:103;32209:1;32202:5;32198:13;32191:20;;31948:281;;;:::o;32247:228::-;32307:77;32304:1;32297:88;32416:4;32413:1;32406:15;32452:4;32449:1;32442:15;32493:189;32542:4;32577:3;32569:11;;32612:3;32609:1;32602:14;32658:4;32655:1;32645:18;32637:26;;32493:189;;;:::o;32700:117::-;32737:6;32796:2;32791;32784:5;32780:14;32776:23;32766:33;;32700:117;;;:::o;32835:143::-;32879:8;32953:5;32947:4;32943:16;32910:49;;32835:143;;;;:::o;32996:465::-;33065:6;33127:1;33115:10;33111:18;33162:97;33192:66;33181:9;33162:97;:::i;:::-;33292:39;33322:8;33311:9;33292:39;:::i;:::-;33280:51;;33376:4;33372:9;33365:5;33361:21;33352:30;;33437:4;33427:8;33423:19;33416:5;33413:30;33403:40;;33072:389;;32996:465;;;;;:::o;33479:166::-;33529:9;33574:53;33592:34;33601:24;33619:5;33601:24;:::i;:::-;33592:34;:::i;:::-;33574:53;:::i;:::-;33561:66;;33479:166;;;:::o;33663:99::-;33706:3;33739:5;33732:12;;33663:99;;;:::o;33780:305::-;33902:39;33933:7;33902:39;:::i;:::-;33975:91;34024:41;34048:16;34024:41;:::i;:::-;34016:6;34009:4;34003:11;33975:91;:::i;:::-;33969:4;33962:105;33856:229;33780:305;;;:::o;34103:97::-;34148:3;34103:97;:::o;34218:225::-;34307:32;;:::i;:::-;34360:65;34418:6;34410;34404:4;34360:65;:::i;:::-;34271:172;34218:225;;:::o;34461:246::-;34533:156;34550:3;34543:5;34540:14;34533:156;;;34628:39;34665:1;34658:5;34628:39;:::i;:::-;34577:1;34570:5;34566:13;34557:22;;34533:156;;;34461:246;;:::o;34725:639::-;34838:2;34833:3;34830:11;34827:518;;;34884:38;34916:5;34884:38;:::i;:::-;34980:29;34998:10;34980:29;:::i;:::-;34970:8;34966:44;35187:2;35175:10;35172:18;35169:49;;;35208:8;35193:23;;35169:49;35243:80;35299:22;35317:3;35299:22;:::i;:::-;35289:8;35285:37;35272:11;35243:80;:::i;:::-;34842:503;;34827:518;34725:639;;;:::o;35382:153::-;35436:8;35510:5;35504:4;35500:16;35467:49;;35382:153;;;;:::o;35553:205::-;35597:6;35642:51;35690:1;35686:6;35678:5;35675:1;35671:13;35642:51;:::i;:::-;35638:56;35735:4;35729;35725:15;35715:25;;35604:154;35553:205;;;;:::o;35775:355::-;35851:4;36033:29;36058:3;36052:4;36033:29;:::i;:::-;36025:37;;36107:3;36104:1;36100:11;36094:4;36091:21;36083:29;;35775:355;;;;:::o;36147:1779::-;36276:37;36309:3;36276:37;:::i;:::-;36402:18;36394:6;36391:30;36388:56;;;36424:18;;:::i;:::-;36388:56;36480:38;36512:4;36506:11;36480:38;:::i;:::-;36589:67;36649:6;36641;36635:4;36589:67;:::i;:::-;36695:1;36731:4;36718:17;;36775:2;36767:6;36764:14;36804:1;36799:786;;;;37653:1;37682:6;37679:101;;;37743:9;37738:3;37734:19;37728:26;37719:35;;37679:101;37818:67;37878:6;37871:5;37818:67;:::i;:::-;37812:4;37805:81;37614:294;36757:1151;;36799:786;36863:4;36859:9;36851:6;36847:22;36909:37;36941:4;36909:37;:::i;:::-;36980:1;37006:256;37020:7;37017:1;37014:14;37006:256;;;37111:9;37106:3;37102:19;37096:26;37088:6;37081:42;37174:1;37166:6;37162:14;37152:24;;37233:2;37222:9;37218:18;37205:31;;37043:4;37040:1;37036:12;37031:17;;37006:256;;;37302:6;37293:7;37290:19;37287:215;;;37372:9;37367:3;37363:19;37357:26;37427:48;37469:4;37461:6;37457:17;37446:9;37427:48;:::i;:::-;37419:6;37412:64;37310:192;37287:215;37560:1;37556;37548:6;37544:14;37540:22;37534:4;37527:36;36806:779;;;36757:1151;;36239:1687;;;36147:1779;;:::o;37944:251::-;37984:3;38015:20;38033:1;38015:20;:::i;:::-;38010:25;;38061:20;38079:1;38061:20;:::i;:::-;38056:25;;38116:1;38113;38109:9;38102:16;;38149:3;38146:1;38143:10;38140:36;;;38156:18;;:::i;:::-;38140:36;37944:251;;;;:::o

Swarm Source

ipfs://5cba871b9a6516f23cdeaf8ba71f0a679eeef45223b5ebde4d7d60da2faa9e20
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.