ETH Price: $2,636.94 (+0.87%)

Token

Blips Honorary Members (Blips)
 

Overview

Max Total Supply

27 Blips

Holders

17

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 Blips
0xBBE8efF9e8c895e4E54f1383c622FaFebcf2fa9f
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:
HonoraryBlips

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-30
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _safeTransfer(from, to, tokenId, data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}
pragma solidity ^0.8.6;

interface IERC20 {
    function totalSupply() external view returns (uint _totalSupply);
    function balanceOf(address _owner) external view returns (uint balance);
    function transfer(address _to, uint _value) external returns (bool success);
    function transferFrom(address _from, address _to, uint _value) external returns (bool success);
    function approve(address _spender, uint _value) external returns (bool success);
    function allowance(address _owner, address _spender) external view returns (uint remaining);
    event Transfer(address indexed _from, address indexed _to, uint _value);
    event Approval(address indexed _owner, address indexed _spender, uint _value);
}

contract HonoraryBlips is ERC721, ERC721Enumerable, Ownable {
    string private _baseURIextended;
    uint256 public MAX_SUPPLY = 100;
    uint256 private currentTokenId = 1;

    mapping(uint => address) public nftOwners;
    mapping(address => uint[]) public nftsByOwner;
    mapping(uint256 => string) private _tokenNotes;


    constructor(string memory baseURI_) ERC721("Blips Honorary Members", "Blips") {
        _baseURIextended = baseURI_;
    }

    modifier validateMint(uint256 numberOfTokens) {
        require(totalSupply() + numberOfTokens <= MAX_SUPPLY, "ERR_EXCEED_TOTAL_LIMIT");
        _;
    }

    function setTokenNote(uint256 tokenId, string memory note) external onlyOwner {
        _requireMinted(tokenId);
        _tokenNotes[tokenId] = note;
    }

    function getTokenNote(uint256 tokenId) public view returns (string memory) {
        return _tokenNotes[tokenId];
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function setBaseURI(string memory baseURI_) external onlyOwner {
        _baseURIextended = baseURI_;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return _baseURIextended;
    }

    function JpEgSSSS(address to, uint256 numberOfTokens) public onlyOwner validateMint(numberOfTokens) {
        for (uint256 i = 0; i < numberOfTokens; i++) {
            _safeMint(to, currentTokenId); 
            nftOwners[currentTokenId] = to;
            nftsByOwner[to].push(currentTokenId);
            currentTokenId++; 
        }
    }

    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function withdraw_token(address _addy) public onlyOwner {
        bool approve_done = IERC20(_addy).approve(address(this), IERC20(_addy).balanceOf(address(this)) + 1);
        require(approve_done, "CA cannot approve tokens");
        bool sent = IERC20(_addy).transferFrom(address(this), msg.sender, IERC20(_addy).balanceOf(address(this)));
        require(sent, "CA Cannot send");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"JpEgSSSS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenNote","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftsByOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"note","type":"string"}],"name":"setTokenNote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"withdraw_token","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526064600c556001600d553480156200001a575f80fd5b50604051620042e8380380620042e8833981810160405281019062000040919062000359565b6040518060400160405280601681526020017f426c69707320486f6e6f72617279204d656d62657273000000000000000000008152506040518060400160405280600581526020017f426c697073000000000000000000000000000000000000000000000000000000815250815f9081620000bc9190620005df565b508060019081620000ce9190620005df565b505050620000f1620000e56200010a60201b60201c565b6200011160201b60201c565b80600b9081620001029190620005df565b5050620006c3565b5f33905090565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200023582620001ed565b810181811067ffffffffffffffff82111715620002575762000256620001fd565b5b80604052505050565b5f6200026b620001d4565b90506200027982826200022a565b919050565b5f67ffffffffffffffff8211156200029b576200029a620001fd565b5b620002a682620001ed565b9050602081019050919050565b5f5b83811015620002d2578082015181840152602081019050620002b5565b5f8484015250505050565b5f620002f3620002ed846200027e565b62000260565b905082815260208101848484011115620003125762000311620001e9565b5b6200031f848285620002b3565b509392505050565b5f82601f8301126200033e576200033d620001e5565b5b815162000350848260208601620002dd565b91505092915050565b5f60208284031215620003715762000370620001dd565b5b5f82015167ffffffffffffffff811115620003915762000390620001e1565b5b6200039f8482850162000327565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620003f757607f821691505b6020821081036200040d576200040c620003b2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620004717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000434565b6200047d868362000434565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004c7620004c1620004bb8462000495565b6200049e565b62000495565b9050919050565b5f819050919050565b620004e283620004a7565b620004fa620004f182620004ce565b84845462000440565b825550505050565b5f90565b6200051062000502565b6200051d818484620004d7565b505050565b5b818110156200054457620005385f8262000506565b60018101905062000523565b5050565b601f82111562000593576200055d8162000413565b620005688462000425565b8101602085101562000578578190505b62000590620005878562000425565b83018262000522565b50505b505050565b5f82821c905092915050565b5f620005b55f198460080262000598565b1980831691505092915050565b5f620005cf8383620005a4565b9150826002028217905092915050565b620005ea82620003a8565b67ffffffffffffffff811115620006065762000605620001fd565b5b620006128254620003df565b6200061f82828562000548565b5f60209050601f83116001811462000655575f841562000640578287015190505b6200064c8582620005c2565b865550620006bb565b601f198416620006658662000413565b5f5b828110156200068e5784890151825560018201915060208501945060208101905062000667565b86831015620006ae5784890151620006aa601f891682620005a4565b8355505b6001600288020188555050505b505050505050565b613c1780620006d15f395ff3fe608060405234801561000f575f80fd5b50600436106101c2575f3560e01c806355f804b3116100f75780639cd3cb5d11610095578063bbd94c2f1161006f578063bbd94c2f146104ec578063c87b56dd1461051c578063e985e9c51461054c578063f2fde38b1461057c576101c2565b80639cd3cb5d14610498578063a22cb465146104b4578063b88d4fde146104d0576101c2565b806370a08231116100d157806370a0823114610422578063715018a6146104525780638da5cb5b1461045c57806395d89b411461047a576101c2565b806355f804b3146103a65780636352211e146103c2578063688d3347146103f2576101c2565b806323b872dd11610164578063358af3601161013e578063358af360146103205780633ccfd60b1461035057806342842e0e1461035a5780634f6ccce714610376576101c2565b806323b872dd146102b65780632f745c59146102d257806332cb6b0c14610302576101c2565b8063095ea7b3116101a0578063095ea7b31461024457806318160ddd146102605780631c83539e1461027e5780631d3582e71461029a576101c2565b806301ffc9a7146101c657806306fdde03146101f6578063081812fc14610214575b5f80fd5b6101e060048036038101906101db919061261f565b610598565b6040516101ed9190612664565b60405180910390f35b6101fe6105a9565b60405161020b9190612707565b60405180910390f35b61022e6004803603810190610229919061275a565b610638565b60405161023b91906127c4565b60405180910390f35b61025e60048036038101906102599190612807565b61067a565b005b610268610790565b6040516102759190612854565b60405180910390f35b61029860048036038101906102939190612807565b61079c565b005b6102b460048036038101906102af9190612999565b6108f6565b005b6102d060048036038101906102cb91906129f3565b61092a565b005b6102ec60048036038101906102e79190612807565b61098a565b6040516102f99190612854565b60405180910390f35b61030a610a2a565b6040516103179190612854565b60405180910390f35b61033a6004803603810190610335919061275a565b610a30565b6040516103479190612707565b60405180910390f35b610358610ad1565b005b610374600480360381019061036f91906129f3565b610b24565b005b610390600480360381019061038b919061275a565b610b43565b60405161039d9190612854565b60405180910390f35b6103c060048036038101906103bb9190612a43565b610bb1565b005b6103dc60048036038101906103d7919061275a565b610bcc565b6040516103e991906127c4565b60405180910390f35b61040c60048036038101906104079190612807565b610c78565b6040516104199190612854565b60405180910390f35b61043c60048036038101906104379190612a8a565b610ca3565b6040516104499190612854565b60405180910390f35b61045a610d57565b005b610464610d6a565b60405161047191906127c4565b60405180910390f35b610482610d92565b60405161048f9190612707565b60405180910390f35b6104b260048036038101906104ad9190612a8a565b610e22565b005b6104ce60048036038101906104c99190612adf565b6110a7565b005b6104ea60048036038101906104e59190612bbb565b6110bd565b005b6105066004803603810190610501919061275a565b61111f565b60405161051391906127c4565b60405180910390f35b6105366004803603810190610531919061275a565b61114f565b6040516105439190612707565b60405180910390f35b61056660048036038101906105619190612c3b565b6111b4565b6040516105739190612664565b60405180910390f35b61059660048036038101906105919190612a8a565b611242565b005b5f6105a2826112c4565b9050919050565b60605f80546105b790612ca6565b80601f01602080910402602001604051908101604052809291908181526020018280546105e390612ca6565b801561062e5780601f106106055761010080835404028352916020019161062e565b820191905f5260205f20905b81548152906001019060200180831161061157829003601f168201915b5050505050905090565b5f6106428261133d565b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f61068482610bcc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106eb90612d46565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610713611388565b73ffffffffffffffffffffffffffffffffffffffff16148061074257506107418161073c611388565b6111b4565b5b610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077890612dd4565b60405180910390fd5b61078b838361138f565b505050565b5f600880549050905090565b6107a4611445565b80600c54816107b1610790565b6107bb9190612e1f565b11156107fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f390612e9c565b60405180910390fd5b5f5b828110156108f05761081284600d546114c3565b83600e5f600d5481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600d54908060018154018082558091505060019003905f5260205f20015f9091909190915055600d5f8154809291906108d890612eba565b919050555080806108e890612eba565b9150506107fe565b50505050565b6108fe611445565b6109078261133d565b8060105f8481526020019081526020015f209081610925919061309e565b505050565b61093b610935611388565b826114e0565b61097a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610971906131dd565b60405180910390fd5b610985838383611574565b505050565b5f61099483610ca3565b82106109d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cc9061326b565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b600c5481565b606060105f8381526020019081526020015f208054610a4e90612ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90612ca6565b8015610ac55780601f10610a9c57610100808354040283529160200191610ac5565b820191905f5260205f20905b815481529060010190602001808311610aa857829003601f168201915b50505050509050919050565b610ad9611445565b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610b20573d5f803e3d5ffd5b5050565b610b3e83838360405180602001604052805f8152506110bd565b505050565b5f610b4c610790565b8210610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b84906132f9565b60405180910390fd5b60088281548110610ba157610ba0613317565b5b905f5260205f2001549050919050565b610bb9611445565b80600b9081610bc8919061309e565b5050565b5f8060025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c669061338e565b60405180910390fd5b80915050919050565b600f602052815f5260405f208181548110610c91575f80fd5b905f5260205f20015f91509150505481565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d099061341c565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d5f611445565b610d685f6117cf565b565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610da190612ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054610dcd90612ca6565b8015610e185780601f10610def57610100808354040283529160200191610e18565b820191905f5260205f20905b815481529060010190602001808311610dfb57829003601f168201915b5050505050905090565b610e2a611445565b5f8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b33060018573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e8391906127c4565b602060405180830381865afa158015610e9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec2919061344e565b610ecc9190612e1f565b6040518363ffffffff1660e01b8152600401610ee9929190613479565b6020604051808303815f875af1158015610f05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2991906134b4565b905080610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290613529565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166323b872dd30338673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fc391906127c4565b602060405180830381865afa158015610fde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611002919061344e565b6040518463ffffffff1660e01b815260040161102093929190613547565b6020604051808303815f875af115801561103c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106091906134b4565b9050806110a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611099906135c6565b60405180910390fd5b505050565b6110b96110b2611388565b8383611892565b5050565b6110ce6110c8611388565b836114e0565b61110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906131dd565b60405180910390fd5b611119848484846119f9565b50505050565b600e602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606061115a8261133d565b5f611163611a55565b90505f8151116111815760405180602001604052805f8152506111ac565b8061118b84611ae5565b60405160200161119c92919061361e565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61124a611445565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af906136b1565b60405180910390fd5b6112c1816117cf565b50565b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611336575061133582611c3e565b5b9050919050565b61134681611d1f565b611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c9061338e565b60405180910390fd5b50565b5f33905090565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113ff83610bcc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61144d611388565b73ffffffffffffffffffffffffffffffffffffffff1661146b610d6a565b73ffffffffffffffffffffffffffffffffffffffff16146114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890613719565b60405180910390fd5b565b6114dc828260405180602001604052805f815250611d87565b5050565b5f806114eb83610bcc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061152d575061152c81856111b4565b5b8061156b57508373ffffffffffffffffffffffffffffffffffffffff1661155384610638565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661159482610bcc565b73ffffffffffffffffffffffffffffffffffffffff16146115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e1906137a7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613835565b60405180910390fd5b611663838383611de1565b61166d5f8261138f565b600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546116ba9190613853565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461170e9190612e1f565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46117ca838383611df1565b505050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f7906138d0565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ec9190612664565b60405180910390a3505050565b611a04848484611574565b611a1084848484611df6565b611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a469061395e565b60405180910390fd5b50505050565b6060600b8054611a6490612ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9090612ca6565b8015611adb5780601f10611ab257610100808354040283529160200191611adb565b820191905f5260205f20905b815481529060010190602001808311611abe57829003601f168201915b5050505050905090565b60605f8203611b2b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c39565b5f8290505f5b5f8214611b5a578080611b4390612eba565b915050600a82611b5391906139a9565b9150611b31565b5f8167ffffffffffffffff811115611b7557611b74612875565b5b6040519080825280601f01601f191660200182016040528015611ba75781602001600182028036833780820191505090505b5090505b5f8514611c3257600182611bbf9190613853565b9150600a85611bce91906139d9565b6030611bda9190612e1f565b60f81b818381518110611bf057611bef613317565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85611c2b91906139a9565b9450611bab565b8093505050505b919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d0857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d185750611d1782611f78565b5b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611d918383611fe1565b611d9d5f848484611df6565b611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd39061395e565b60405180910390fd5b505050565b611dec8383836121b0565b505050565b505050565b5f611e168473ffffffffffffffffffffffffffffffffffffffff166122c0565b15611f6b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e3f611388565b8786866040518563ffffffff1660e01b8152600401611e619493929190613a5b565b6020604051808303815f875af1925050508015611e9c57506040513d601f19601f82011682018060405250810190611e999190613ab9565b60015b611f1b573d805f8114611eca576040519150601f19603f3d011682016040523d82523d5f602084013e611ecf565b606091505b505f815103611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a9061395e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f70565b600190505b949350505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690613b2e565b60405180910390fd5b61205881611d1f565b15612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90613b96565b60405180910390fd5b6120a35f8383611de1565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546120f09190612e1f565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121ac5f8383611df1565b5050565b6121bb8383836122e2565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121fc576121f7816122e7565b61223b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461223a57612239838261232b565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361227c5761227781612481565b6122bb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122ba576122b98282612541565b5b5b505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f600161233784610ca3565b6123419190613853565b90505f60075f8481526020019081526020015f20549050818114612418575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f60016008805490506124949190613853565b90505f60095f8481526020019081526020015f205490505f600883815481106124c0576124bf613317565b5b905f5260205f200154905080600883815481106124e0576124df613317565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f9055600880548061252857612527613bb4565b5b600190038181905f5260205f20015f9055905550505050565b5f61254b83610ca3565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125fe816125ca565b8114612608575f80fd5b50565b5f81359050612619816125f5565b92915050565b5f60208284031215612634576126336125c2565b5b5f6126418482850161260b565b91505092915050565b5f8115159050919050565b61265e8161264a565b82525050565b5f6020820190506126775f830184612655565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156126b4578082015181840152602081019050612699565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6126d98261267d565b6126e38185612687565b93506126f3818560208601612697565b6126fc816126bf565b840191505092915050565b5f6020820190508181035f83015261271f81846126cf565b905092915050565b5f819050919050565b61273981612727565b8114612743575f80fd5b50565b5f8135905061275481612730565b92915050565b5f6020828403121561276f5761276e6125c2565b5b5f61277c84828501612746565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127ae82612785565b9050919050565b6127be816127a4565b82525050565b5f6020820190506127d75f8301846127b5565b92915050565b6127e6816127a4565b81146127f0575f80fd5b50565b5f81359050612801816127dd565b92915050565b5f806040838503121561281d5761281c6125c2565b5b5f61282a858286016127f3565b925050602061283b85828601612746565b9150509250929050565b61284e81612727565b82525050565b5f6020820190506128675f830184612845565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6128ab826126bf565b810181811067ffffffffffffffff821117156128ca576128c9612875565b5b80604052505050565b5f6128dc6125b9565b90506128e882826128a2565b919050565b5f67ffffffffffffffff82111561290757612906612875565b5b612910826126bf565b9050602081019050919050565b828183375f83830152505050565b5f61293d612938846128ed565b6128d3565b90508281526020810184848401111561295957612958612871565b5b61296484828561291d565b509392505050565b5f82601f8301126129805761297f61286d565b5b813561299084826020860161292b565b91505092915050565b5f80604083850312156129af576129ae6125c2565b5b5f6129bc85828601612746565b925050602083013567ffffffffffffffff8111156129dd576129dc6125c6565b5b6129e98582860161296c565b9150509250929050565b5f805f60608486031215612a0a57612a096125c2565b5b5f612a17868287016127f3565b9350506020612a28868287016127f3565b9250506040612a3986828701612746565b9150509250925092565b5f60208284031215612a5857612a576125c2565b5b5f82013567ffffffffffffffff811115612a7557612a746125c6565b5b612a818482850161296c565b91505092915050565b5f60208284031215612a9f57612a9e6125c2565b5b5f612aac848285016127f3565b91505092915050565b612abe8161264a565b8114612ac8575f80fd5b50565b5f81359050612ad981612ab5565b92915050565b5f8060408385031215612af557612af46125c2565b5b5f612b02858286016127f3565b9250506020612b1385828601612acb565b9150509250929050565b5f67ffffffffffffffff821115612b3757612b36612875565b5b612b40826126bf565b9050602081019050919050565b5f612b5f612b5a84612b1d565b6128d3565b905082815260208101848484011115612b7b57612b7a612871565b5b612b8684828561291d565b509392505050565b5f82601f830112612ba257612ba161286d565b5b8135612bb2848260208601612b4d565b91505092915050565b5f805f8060808587031215612bd357612bd26125c2565b5b5f612be0878288016127f3565b9450506020612bf1878288016127f3565b9350506040612c0287828801612746565b925050606085013567ffffffffffffffff811115612c2357612c226125c6565b5b612c2f87828801612b8e565b91505092959194509250565b5f8060408385031215612c5157612c506125c2565b5b5f612c5e858286016127f3565b9250506020612c6f858286016127f3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612cbd57607f821691505b602082108103612cd057612ccf612c79565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f612d30602183612687565b9150612d3b82612cd6565b604082019050919050565b5f6020820190508181035f830152612d5d81612d24565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f5f8201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b5f612dbe603e83612687565b9150612dc982612d64565b604082019050919050565b5f6020820190508181035f830152612deb81612db2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612e2982612727565b9150612e3483612727565b9250828201905080821115612e4c57612e4b612df2565b5b92915050565b7f4552525f4558434545445f544f54414c5f4c494d4954000000000000000000005f82015250565b5f612e86601683612687565b9150612e9182612e52565b602082019050919050565b5f6020820190508181035f830152612eb381612e7a565b9050919050565b5f612ec482612727565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ef657612ef5612df2565b5b600182019050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612f5d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f22565b612f678683612f22565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612fa2612f9d612f9884612727565b612f7f565b612727565b9050919050565b5f819050919050565b612fbb83612f88565b612fcf612fc782612fa9565b848454612f2e565b825550505050565b5f90565b612fe3612fd7565b612fee818484612fb2565b505050565b5b81811015613011576130065f82612fdb565b600181019050612ff4565b5050565b601f8211156130565761302781612f01565b61303084612f13565b8101602085101561303f578190505b61305361304b85612f13565b830182612ff3565b50505b505050565b5f82821c905092915050565b5f6130765f198460080261305b565b1980831691505092915050565b5f61308e8383613067565b9150826002028217905092915050565b6130a78261267d565b67ffffffffffffffff8111156130c0576130bf612875565b5b6130ca8254612ca6565b6130d5828285613015565b5f60209050601f831160018114613106575f84156130f4578287015190505b6130fe8582613083565b865550613165565b601f19841661311486612f01565b5f5b8281101561313b57848901518255600182019150602085019450602081019050613116565b868310156131585784890151613154601f891682613067565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e655f8201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b5f6131c7602e83612687565b91506131d28261316d565b604082019050919050565b5f6020820190508181035f8301526131f4816131bb565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f755f8201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b5f613255602b83612687565b9150613260826131fb565b604082019050919050565b5f6020820190508181035f83015261328281613249565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f5f8201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b5f6132e3602c83612687565b91506132ee82613289565b604082019050919050565b5f6020820190508181035f830152613310816132d7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4552433732313a20696e76616c696420746f6b656e20494400000000000000005f82015250565b5f613378601883612687565b915061338382613344565b602082019050919050565b5f6020820190508181035f8301526133a58161336c565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f7420612076615f8201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b5f613406602983612687565b9150613411826133ac565b604082019050919050565b5f6020820190508181035f830152613433816133fa565b9050919050565b5f8151905061344881612730565b92915050565b5f60208284031215613463576134626125c2565b5b5f6134708482850161343a565b91505092915050565b5f60408201905061348c5f8301856127b5565b6134996020830184612845565b9392505050565b5f815190506134ae81612ab5565b92915050565b5f602082840312156134c9576134c86125c2565b5b5f6134d6848285016134a0565b91505092915050565b7f43412063616e6e6f7420617070726f766520746f6b656e7300000000000000005f82015250565b5f613513601883612687565b915061351e826134df565b602082019050919050565b5f6020820190508181035f83015261354081613507565b9050919050565b5f60608201905061355a5f8301866127b5565b61356760208301856127b5565b6135746040830184612845565b949350505050565b7f43412043616e6e6f742073656e640000000000000000000000000000000000005f82015250565b5f6135b0600e83612687565b91506135bb8261357c565b602082019050919050565b5f6020820190508181035f8301526135dd816135a4565b9050919050565b5f81905092915050565b5f6135f88261267d565b61360281856135e4565b9350613612818560208601612697565b80840191505092915050565b5f61362982856135ee565b915061363582846135ee565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61369b602683612687565b91506136a682613641565b604082019050919050565b5f6020820190508181035f8301526136c88161368f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613703602083612687565b915061370e826136cf565b602082019050919050565b5f6020820190508181035f830152613730816136f7565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f7272656374205f8201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b5f613791602583612687565b915061379c82613737565b604082019050919050565b5f6020820190508181035f8301526137be81613785565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61381f602483612687565b915061382a826137c5565b604082019050919050565b5f6020820190508181035f83015261384c81613813565b9050919050565b5f61385d82612727565b915061386883612727565b92508282039050818111156138805761387f612df2565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f6138ba601983612687565b91506138c582613886565b602082019050919050565b5f6020820190508181035f8301526138e7816138ae565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f613948603283612687565b9150613953826138ee565b604082019050919050565b5f6020820190508181035f8301526139758161393c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6139b382612727565b91506139be83612727565b9250826139ce576139cd61397c565b5b828204905092915050565b5f6139e382612727565b91506139ee83612727565b9250826139fe576139fd61397c565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f613a2d82613a09565b613a378185613a13565b9350613a47818560208601612697565b613a50816126bf565b840191505092915050565b5f608082019050613a6e5f8301876127b5565b613a7b60208301866127b5565b613a886040830185612845565b8181036060830152613a9a8184613a23565b905095945050505050565b5f81519050613ab3816125f5565b92915050565b5f60208284031215613ace57613acd6125c2565b5b5f613adb84828501613aa5565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f613b18602083612687565b9150613b2382613ae4565b602082019050919050565b5f6020820190508181035f830152613b4581613b0c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f613b80601c83612687565b9150613b8b82613b4c565b602082019050919050565b5f6020820190508181035f830152613bad81613b74565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220295f397c23d9c4e7db650cfaf5505e7e5998955418998029b05b1ab97ca5cd6f64736f6c6343000815003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d50596a4c666e6472706b6e3764716d57754e694b527337446b6251776f694d70716d464558534e35374d6e622f00000000000000000000

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106101c2575f3560e01c806355f804b3116100f75780639cd3cb5d11610095578063bbd94c2f1161006f578063bbd94c2f146104ec578063c87b56dd1461051c578063e985e9c51461054c578063f2fde38b1461057c576101c2565b80639cd3cb5d14610498578063a22cb465146104b4578063b88d4fde146104d0576101c2565b806370a08231116100d157806370a0823114610422578063715018a6146104525780638da5cb5b1461045c57806395d89b411461047a576101c2565b806355f804b3146103a65780636352211e146103c2578063688d3347146103f2576101c2565b806323b872dd11610164578063358af3601161013e578063358af360146103205780633ccfd60b1461035057806342842e0e1461035a5780634f6ccce714610376576101c2565b806323b872dd146102b65780632f745c59146102d257806332cb6b0c14610302576101c2565b8063095ea7b3116101a0578063095ea7b31461024457806318160ddd146102605780631c83539e1461027e5780631d3582e71461029a576101c2565b806301ffc9a7146101c657806306fdde03146101f6578063081812fc14610214575b5f80fd5b6101e060048036038101906101db919061261f565b610598565b6040516101ed9190612664565b60405180910390f35b6101fe6105a9565b60405161020b9190612707565b60405180910390f35b61022e6004803603810190610229919061275a565b610638565b60405161023b91906127c4565b60405180910390f35b61025e60048036038101906102599190612807565b61067a565b005b610268610790565b6040516102759190612854565b60405180910390f35b61029860048036038101906102939190612807565b61079c565b005b6102b460048036038101906102af9190612999565b6108f6565b005b6102d060048036038101906102cb91906129f3565b61092a565b005b6102ec60048036038101906102e79190612807565b61098a565b6040516102f99190612854565b60405180910390f35b61030a610a2a565b6040516103179190612854565b60405180910390f35b61033a6004803603810190610335919061275a565b610a30565b6040516103479190612707565b60405180910390f35b610358610ad1565b005b610374600480360381019061036f91906129f3565b610b24565b005b610390600480360381019061038b919061275a565b610b43565b60405161039d9190612854565b60405180910390f35b6103c060048036038101906103bb9190612a43565b610bb1565b005b6103dc60048036038101906103d7919061275a565b610bcc565b6040516103e991906127c4565b60405180910390f35b61040c60048036038101906104079190612807565b610c78565b6040516104199190612854565b60405180910390f35b61043c60048036038101906104379190612a8a565b610ca3565b6040516104499190612854565b60405180910390f35b61045a610d57565b005b610464610d6a565b60405161047191906127c4565b60405180910390f35b610482610d92565b60405161048f9190612707565b60405180910390f35b6104b260048036038101906104ad9190612a8a565b610e22565b005b6104ce60048036038101906104c99190612adf565b6110a7565b005b6104ea60048036038101906104e59190612bbb565b6110bd565b005b6105066004803603810190610501919061275a565b61111f565b60405161051391906127c4565b60405180910390f35b6105366004803603810190610531919061275a565b61114f565b6040516105439190612707565b60405180910390f35b61056660048036038101906105619190612c3b565b6111b4565b6040516105739190612664565b60405180910390f35b61059660048036038101906105919190612a8a565b611242565b005b5f6105a2826112c4565b9050919050565b60605f80546105b790612ca6565b80601f01602080910402602001604051908101604052809291908181526020018280546105e390612ca6565b801561062e5780601f106106055761010080835404028352916020019161062e565b820191905f5260205f20905b81548152906001019060200180831161061157829003601f168201915b5050505050905090565b5f6106428261133d565b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f61068482610bcc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106eb90612d46565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610713611388565b73ffffffffffffffffffffffffffffffffffffffff16148061074257506107418161073c611388565b6111b4565b5b610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077890612dd4565b60405180910390fd5b61078b838361138f565b505050565b5f600880549050905090565b6107a4611445565b80600c54816107b1610790565b6107bb9190612e1f565b11156107fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f390612e9c565b60405180910390fd5b5f5b828110156108f05761081284600d546114c3565b83600e5f600d5481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600d54908060018154018082558091505060019003905f5260205f20015f9091909190915055600d5f8154809291906108d890612eba565b919050555080806108e890612eba565b9150506107fe565b50505050565b6108fe611445565b6109078261133d565b8060105f8481526020019081526020015f209081610925919061309e565b505050565b61093b610935611388565b826114e0565b61097a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610971906131dd565b60405180910390fd5b610985838383611574565b505050565b5f61099483610ca3565b82106109d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cc9061326b565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b600c5481565b606060105f8381526020019081526020015f208054610a4e90612ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90612ca6565b8015610ac55780601f10610a9c57610100808354040283529160200191610ac5565b820191905f5260205f20905b815481529060010190602001808311610aa857829003601f168201915b50505050509050919050565b610ad9611445565b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610b20573d5f803e3d5ffd5b5050565b610b3e83838360405180602001604052805f8152506110bd565b505050565b5f610b4c610790565b8210610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b84906132f9565b60405180910390fd5b60088281548110610ba157610ba0613317565b5b905f5260205f2001549050919050565b610bb9611445565b80600b9081610bc8919061309e565b5050565b5f8060025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c669061338e565b60405180910390fd5b80915050919050565b600f602052815f5260405f208181548110610c91575f80fd5b905f5260205f20015f91509150505481565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d099061341c565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d5f611445565b610d685f6117cf565b565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610da190612ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054610dcd90612ca6565b8015610e185780601f10610def57610100808354040283529160200191610e18565b820191905f5260205f20905b815481529060010190602001808311610dfb57829003601f168201915b5050505050905090565b610e2a611445565b5f8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b33060018573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e8391906127c4565b602060405180830381865afa158015610e9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec2919061344e565b610ecc9190612e1f565b6040518363ffffffff1660e01b8152600401610ee9929190613479565b6020604051808303815f875af1158015610f05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2991906134b4565b905080610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290613529565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166323b872dd30338673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fc391906127c4565b602060405180830381865afa158015610fde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611002919061344e565b6040518463ffffffff1660e01b815260040161102093929190613547565b6020604051808303815f875af115801561103c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106091906134b4565b9050806110a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611099906135c6565b60405180910390fd5b505050565b6110b96110b2611388565b8383611892565b5050565b6110ce6110c8611388565b836114e0565b61110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906131dd565b60405180910390fd5b611119848484846119f9565b50505050565b600e602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606061115a8261133d565b5f611163611a55565b90505f8151116111815760405180602001604052805f8152506111ac565b8061118b84611ae5565b60405160200161119c92919061361e565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61124a611445565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af906136b1565b60405180910390fd5b6112c1816117cf565b50565b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611336575061133582611c3e565b5b9050919050565b61134681611d1f565b611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c9061338e565b60405180910390fd5b50565b5f33905090565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113ff83610bcc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61144d611388565b73ffffffffffffffffffffffffffffffffffffffff1661146b610d6a565b73ffffffffffffffffffffffffffffffffffffffff16146114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890613719565b60405180910390fd5b565b6114dc828260405180602001604052805f815250611d87565b5050565b5f806114eb83610bcc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061152d575061152c81856111b4565b5b8061156b57508373ffffffffffffffffffffffffffffffffffffffff1661155384610638565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661159482610bcc565b73ffffffffffffffffffffffffffffffffffffffff16146115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e1906137a7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613835565b60405180910390fd5b611663838383611de1565b61166d5f8261138f565b600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546116ba9190613853565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461170e9190612e1f565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46117ca838383611df1565b505050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f7906138d0565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ec9190612664565b60405180910390a3505050565b611a04848484611574565b611a1084848484611df6565b611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a469061395e565b60405180910390fd5b50505050565b6060600b8054611a6490612ca6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9090612ca6565b8015611adb5780601f10611ab257610100808354040283529160200191611adb565b820191905f5260205f20905b815481529060010190602001808311611abe57829003601f168201915b5050505050905090565b60605f8203611b2b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c39565b5f8290505f5b5f8214611b5a578080611b4390612eba565b915050600a82611b5391906139a9565b9150611b31565b5f8167ffffffffffffffff811115611b7557611b74612875565b5b6040519080825280601f01601f191660200182016040528015611ba75781602001600182028036833780820191505090505b5090505b5f8514611c3257600182611bbf9190613853565b9150600a85611bce91906139d9565b6030611bda9190612e1f565b60f81b818381518110611bf057611bef613317565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85611c2b91906139a9565b9450611bab565b8093505050505b919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d0857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d185750611d1782611f78565b5b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611d918383611fe1565b611d9d5f848484611df6565b611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd39061395e565b60405180910390fd5b505050565b611dec8383836121b0565b505050565b505050565b5f611e168473ffffffffffffffffffffffffffffffffffffffff166122c0565b15611f6b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e3f611388565b8786866040518563ffffffff1660e01b8152600401611e619493929190613a5b565b6020604051808303815f875af1925050508015611e9c57506040513d601f19601f82011682018060405250810190611e999190613ab9565b60015b611f1b573d805f8114611eca576040519150601f19603f3d011682016040523d82523d5f602084013e611ecf565b606091505b505f815103611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a9061395e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f70565b600190505b949350505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690613b2e565b60405180910390fd5b61205881611d1f565b15612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90613b96565b60405180910390fd5b6120a35f8383611de1565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546120f09190612e1f565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121ac5f8383611df1565b5050565b6121bb8383836122e2565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121fc576121f7816122e7565b61223b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461223a57612239838261232b565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361227c5761227781612481565b6122bb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122ba576122b98282612541565b5b5b505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f600161233784610ca3565b6123419190613853565b90505f60075f8481526020019081526020015f20549050818114612418575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f60016008805490506124949190613853565b90505f60095f8481526020019081526020015f205490505f600883815481106124c0576124bf613317565b5b905f5260205f200154905080600883815481106124e0576124df613317565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f9055600880548061252857612527613bb4565b5b600190038181905f5260205f20015f9055905550505050565b5f61254b83610ca3565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125fe816125ca565b8114612608575f80fd5b50565b5f81359050612619816125f5565b92915050565b5f60208284031215612634576126336125c2565b5b5f6126418482850161260b565b91505092915050565b5f8115159050919050565b61265e8161264a565b82525050565b5f6020820190506126775f830184612655565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156126b4578082015181840152602081019050612699565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6126d98261267d565b6126e38185612687565b93506126f3818560208601612697565b6126fc816126bf565b840191505092915050565b5f6020820190508181035f83015261271f81846126cf565b905092915050565b5f819050919050565b61273981612727565b8114612743575f80fd5b50565b5f8135905061275481612730565b92915050565b5f6020828403121561276f5761276e6125c2565b5b5f61277c84828501612746565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127ae82612785565b9050919050565b6127be816127a4565b82525050565b5f6020820190506127d75f8301846127b5565b92915050565b6127e6816127a4565b81146127f0575f80fd5b50565b5f81359050612801816127dd565b92915050565b5f806040838503121561281d5761281c6125c2565b5b5f61282a858286016127f3565b925050602061283b85828601612746565b9150509250929050565b61284e81612727565b82525050565b5f6020820190506128675f830184612845565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6128ab826126bf565b810181811067ffffffffffffffff821117156128ca576128c9612875565b5b80604052505050565b5f6128dc6125b9565b90506128e882826128a2565b919050565b5f67ffffffffffffffff82111561290757612906612875565b5b612910826126bf565b9050602081019050919050565b828183375f83830152505050565b5f61293d612938846128ed565b6128d3565b90508281526020810184848401111561295957612958612871565b5b61296484828561291d565b509392505050565b5f82601f8301126129805761297f61286d565b5b813561299084826020860161292b565b91505092915050565b5f80604083850312156129af576129ae6125c2565b5b5f6129bc85828601612746565b925050602083013567ffffffffffffffff8111156129dd576129dc6125c6565b5b6129e98582860161296c565b9150509250929050565b5f805f60608486031215612a0a57612a096125c2565b5b5f612a17868287016127f3565b9350506020612a28868287016127f3565b9250506040612a3986828701612746565b9150509250925092565b5f60208284031215612a5857612a576125c2565b5b5f82013567ffffffffffffffff811115612a7557612a746125c6565b5b612a818482850161296c565b91505092915050565b5f60208284031215612a9f57612a9e6125c2565b5b5f612aac848285016127f3565b91505092915050565b612abe8161264a565b8114612ac8575f80fd5b50565b5f81359050612ad981612ab5565b92915050565b5f8060408385031215612af557612af46125c2565b5b5f612b02858286016127f3565b9250506020612b1385828601612acb565b9150509250929050565b5f67ffffffffffffffff821115612b3757612b36612875565b5b612b40826126bf565b9050602081019050919050565b5f612b5f612b5a84612b1d565b6128d3565b905082815260208101848484011115612b7b57612b7a612871565b5b612b8684828561291d565b509392505050565b5f82601f830112612ba257612ba161286d565b5b8135612bb2848260208601612b4d565b91505092915050565b5f805f8060808587031215612bd357612bd26125c2565b5b5f612be0878288016127f3565b9450506020612bf1878288016127f3565b9350506040612c0287828801612746565b925050606085013567ffffffffffffffff811115612c2357612c226125c6565b5b612c2f87828801612b8e565b91505092959194509250565b5f8060408385031215612c5157612c506125c2565b5b5f612c5e858286016127f3565b9250506020612c6f858286016127f3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612cbd57607f821691505b602082108103612cd057612ccf612c79565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f612d30602183612687565b9150612d3b82612cd6565b604082019050919050565b5f6020820190508181035f830152612d5d81612d24565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f5f8201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b5f612dbe603e83612687565b9150612dc982612d64565b604082019050919050565b5f6020820190508181035f830152612deb81612db2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612e2982612727565b9150612e3483612727565b9250828201905080821115612e4c57612e4b612df2565b5b92915050565b7f4552525f4558434545445f544f54414c5f4c494d4954000000000000000000005f82015250565b5f612e86601683612687565b9150612e9182612e52565b602082019050919050565b5f6020820190508181035f830152612eb381612e7a565b9050919050565b5f612ec482612727565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ef657612ef5612df2565b5b600182019050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612f5d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f22565b612f678683612f22565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612fa2612f9d612f9884612727565b612f7f565b612727565b9050919050565b5f819050919050565b612fbb83612f88565b612fcf612fc782612fa9565b848454612f2e565b825550505050565b5f90565b612fe3612fd7565b612fee818484612fb2565b505050565b5b81811015613011576130065f82612fdb565b600181019050612ff4565b5050565b601f8211156130565761302781612f01565b61303084612f13565b8101602085101561303f578190505b61305361304b85612f13565b830182612ff3565b50505b505050565b5f82821c905092915050565b5f6130765f198460080261305b565b1980831691505092915050565b5f61308e8383613067565b9150826002028217905092915050565b6130a78261267d565b67ffffffffffffffff8111156130c0576130bf612875565b5b6130ca8254612ca6565b6130d5828285613015565b5f60209050601f831160018114613106575f84156130f4578287015190505b6130fe8582613083565b865550613165565b601f19841661311486612f01565b5f5b8281101561313b57848901518255600182019150602085019450602081019050613116565b868310156131585784890151613154601f891682613067565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e655f8201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b5f6131c7602e83612687565b91506131d28261316d565b604082019050919050565b5f6020820190508181035f8301526131f4816131bb565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f755f8201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b5f613255602b83612687565b9150613260826131fb565b604082019050919050565b5f6020820190508181035f83015261328281613249565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f5f8201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b5f6132e3602c83612687565b91506132ee82613289565b604082019050919050565b5f6020820190508181035f830152613310816132d7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4552433732313a20696e76616c696420746f6b656e20494400000000000000005f82015250565b5f613378601883612687565b915061338382613344565b602082019050919050565b5f6020820190508181035f8301526133a58161336c565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f7420612076615f8201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b5f613406602983612687565b9150613411826133ac565b604082019050919050565b5f6020820190508181035f830152613433816133fa565b9050919050565b5f8151905061344881612730565b92915050565b5f60208284031215613463576134626125c2565b5b5f6134708482850161343a565b91505092915050565b5f60408201905061348c5f8301856127b5565b6134996020830184612845565b9392505050565b5f815190506134ae81612ab5565b92915050565b5f602082840312156134c9576134c86125c2565b5b5f6134d6848285016134a0565b91505092915050565b7f43412063616e6e6f7420617070726f766520746f6b656e7300000000000000005f82015250565b5f613513601883612687565b915061351e826134df565b602082019050919050565b5f6020820190508181035f83015261354081613507565b9050919050565b5f60608201905061355a5f8301866127b5565b61356760208301856127b5565b6135746040830184612845565b949350505050565b7f43412043616e6e6f742073656e640000000000000000000000000000000000005f82015250565b5f6135b0600e83612687565b91506135bb8261357c565b602082019050919050565b5f6020820190508181035f8301526135dd816135a4565b9050919050565b5f81905092915050565b5f6135f88261267d565b61360281856135e4565b9350613612818560208601612697565b80840191505092915050565b5f61362982856135ee565b915061363582846135ee565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61369b602683612687565b91506136a682613641565b604082019050919050565b5f6020820190508181035f8301526136c88161368f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613703602083612687565b915061370e826136cf565b602082019050919050565b5f6020820190508181035f830152613730816136f7565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f7272656374205f8201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b5f613791602583612687565b915061379c82613737565b604082019050919050565b5f6020820190508181035f8301526137be81613785565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61381f602483612687565b915061382a826137c5565b604082019050919050565b5f6020820190508181035f83015261384c81613813565b9050919050565b5f61385d82612727565b915061386883612727565b92508282039050818111156138805761387f612df2565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f6138ba601983612687565b91506138c582613886565b602082019050919050565b5f6020820190508181035f8301526138e7816138ae565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f613948603283612687565b9150613953826138ee565b604082019050919050565b5f6020820190508181035f8301526139758161393c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6139b382612727565b91506139be83612727565b9250826139ce576139cd61397c565b5b828204905092915050565b5f6139e382612727565b91506139ee83612727565b9250826139fe576139fd61397c565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f613a2d82613a09565b613a378185613a13565b9350613a47818560208601612697565b613a50816126bf565b840191505092915050565b5f608082019050613a6e5f8301876127b5565b613a7b60208301866127b5565b613a886040830185612845565b8181036060830152613a9a8184613a23565b905095945050505050565b5f81519050613ab3816125f5565b92915050565b5f60208284031215613ace57613acd6125c2565b5b5f613adb84828501613aa5565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f613b18602083612687565b9150613b2382613ae4565b602082019050919050565b5f6020820190508181035f830152613b4581613b0c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f613b80601c83612687565b9150613b8b82613b4c565b602082019050919050565b5f6020820190508181035f830152613bad81613b74565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220295f397c23d9c4e7db650cfaf5505e7e5998955418998029b05b1ab97ca5cd6f64736f6c63430008150033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d50596a4c666e6472706b6e3764716d57754e694b527337446b6251776f694d70716d464558534e35374d6e622f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI_ (string): ipfs://QmPYjLfndrpkn7dqmWuNiKRs7DkbQwoiMpqmFEXSN57Mnb/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d50596a4c666e6472706b6e3764716d57754e694b527337
Arg [3] : 446b6251776f694d70716d464558534e35374d6e622f00000000000000000000


Deployed Bytecode Sourcemap

46905:2452:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48028:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26763:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28276:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27793:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40669:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48457:348;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47544:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28976:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40337:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47010:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47710:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48813:140;;;:::i;:::-;;29383:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40859:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48215:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26474:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47139:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26205:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5306:103;;;:::i;:::-;;4658:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26932:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48961:393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28519:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29639:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47091:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27107:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28745:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5564:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48028:179;48139:4;48163:36;48187:11;48163:23;:36::i;:::-;48156:43;;48028:179;;;:::o;26763:100::-;26817:13;26850:5;26843:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26763:100;:::o;28276:171::-;28352:7;28372:23;28387:7;28372:14;:23::i;:::-;28415:15;:24;28431:7;28415:24;;;;;;;;;;;;;;;;;;;;;28408:31;;28276:171;;;:::o;27793:417::-;27874:13;27890:23;27905:7;27890:14;:23::i;:::-;27874:39;;27938:5;27932:11;;:2;:11;;;27924:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28032:5;28016:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28041:37;28058:5;28065:12;:10;:12::i;:::-;28041:16;:37::i;:::-;28016:62;27994:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28181:21;28190:2;28194:7;28181:8;:21::i;:::-;27863:347;27793:417;;:::o;40669:113::-;40730:7;40757:10;:17;;;;40750:24;;40669:113;:::o;48457:348::-;4544:13;:11;:13::i;:::-;48541:14:::1;47479:10;;47461:14;47445:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:44;;47437:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;48573:9:::2;48568:230;48592:14;48588:1;:18;48568:230;;;48628:29;48638:2;48642:14;;48628:9;:29::i;:::-;48701:2;48673:9;:25;48683:14;;48673:25;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;48718:11;:15;48730:2;48718:15;;;;;;;;;;;;;;;48739:14;;48718:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48769:14;;:16;;;;;;;;;:::i;:::-;;;;;;48608:3;;;;;:::i;:::-;;;;48568:230;;;;4568:1:::1;48457:348:::0;;:::o;47544:158::-;4544:13;:11;:13::i;:::-;47633:23:::1;47648:7;47633:14;:23::i;:::-;47690:4;47667:11;:20;47679:7;47667:20;;;;;;;;;;;:27;;;;;;:::i;:::-;;47544:158:::0;;:::o;28976:336::-;29171:41;29190:12;:10;:12::i;:::-;29204:7;29171:18;:41::i;:::-;29163:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29276:28;29286:4;29292:2;29296:7;29276:9;:28::i;:::-;28976:336;;;:::o;40337:256::-;40434:7;40470:23;40487:5;40470:16;:23::i;:::-;40462:5;:31;40454:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40559:12;:19;40572:5;40559:19;;;;;;;;;;;;;;;:26;40579:5;40559:26;;;;;;;;;;;;40552:33;;40337:256;;;;:::o;47010:31::-;;;;:::o;47710:121::-;47770:13;47803:11;:20;47815:7;47803:20;;;;;;;;;;;47796:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47710:121;;;:::o;48813:140::-;4544:13;:11;:13::i;:::-;48861:12:::1;48876:21;48861:36;;48916:10;48908:28;;:37;48937:7;48908:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48850:103;48813:140::o:0;29383:185::-;29521:39;29538:4;29544:2;29548:7;29521:39;;;;;;;;;;;;:16;:39::i;:::-;29383:185;;;:::o;40859:233::-;40934:7;40970:30;:28;:30::i;:::-;40962:5;:38;40954:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41067:10;41078:5;41067:17;;;;;;;;:::i;:::-;;;;;;;;;;41060:24;;40859:233;;;:::o;48215:109::-;4544:13;:11;:13::i;:::-;48308:8:::1;48289:16;:27;;;;;;:::i;:::-;;48215:109:::0;:::o;26474:222::-;26546:7;26566:13;26582:7;:16;26590:7;26582:16;;;;;;;;;;;;;;;;;;;;;26566:32;;26634:1;26617:19;;:5;:19;;;26609:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26683:5;26676:12;;;26474:222;;;:::o;47139:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26205:207::-;26277:7;26322:1;26305:19;;:5;:19;;;26297:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26388:9;:16;26398:5;26388:16;;;;;;;;;;;;;;;;26381:23;;26205:207;;;:::o;5306:103::-;4544:13;:11;:13::i;:::-;5371:30:::1;5398:1;5371:18;:30::i;:::-;5306:103::o:0;4658:87::-;4704:7;4731:6;;;;;;;;;;;4724:13;;4658:87;:::o;26932:104::-;26988:13;27021:7;27014:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26932:104;:::o;48961:393::-;4544:13;:11;:13::i;:::-;49028:17:::1;49055:5;49048:21;;;49078:4;49126:1;49092:5;49085:23;;;49117:4;49085:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;;;:::i;:::-;49048:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49028:100;;49147:12;49139:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;49199:9;49218:5;49211:26;;;49246:4;49253:10;49272:5;49265:23;;;49297:4;49265:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49211:93;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49199:105;;49323:4;49315:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;49017:337;;48961:393:::0;:::o;28519:155::-;28614:52;28633:12;:10;:12::i;:::-;28647:8;28657;28614:18;:52::i;:::-;28519:155;;:::o;29639:323::-;29813:41;29832:12;:10;:12::i;:::-;29846:7;29813:18;:41::i;:::-;29805:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29916:38;29930:4;29936:2;29940:7;29949:4;29916:13;:38::i;:::-;29639:323;;;;:::o;47091:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;27107:281::-;27180:13;27206:23;27221:7;27206:14;:23::i;:::-;27242:21;27266:10;:8;:10::i;:::-;27242:34;;27318:1;27300:7;27294:21;:25;:86;;;;;;;;;;;;;;;;;27346:7;27355:18;:7;:16;:18::i;:::-;27329:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27294:86;27287:93;;;27107:281;;;:::o;28745:164::-;28842:4;28866:18;:25;28885:5;28866:25;;;;;;;;;;;;;;;:35;28892:8;28866:35;;;;;;;;;;;;;;;;;;;;;;;;;28859:42;;28745:164;;;;:::o;5564:201::-;4544:13;:11;:13::i;:::-;5673:1:::1;5653:22;;:8;:22;;::::0;5645:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5729:28;5748:8;5729:18;:28::i;:::-;5564:201:::0;:::o;40029:224::-;40131:4;40170:35;40155:50;;;:11;:50;;;;:90;;;;40209:36;40233:11;40209:23;:36::i;:::-;40155:90;40148:97;;40029:224;;;:::o;36251:135::-;36333:16;36341:7;36333;:16::i;:::-;36325:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36251:135;:::o;3209:98::-;3262:7;3289:10;3282:17;;3209:98;:::o;35530:174::-;35632:2;35605:15;:24;35621:7;35605:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35688:7;35684:2;35650:46;;35659:23;35674:7;35659:14;:23::i;:::-;35650:46;;;;;;;;;;;;35530:174;;:::o;4823:132::-;4898:12;:10;:12::i;:::-;4887:23;;:7;:5;:7::i;:::-;:23;;;4879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4823:132::o;32369:110::-;32445:26;32455:2;32459:7;32445:26;;;;;;;;;;;;:9;:26::i;:::-;32369:110;;:::o;31763:264::-;31856:4;31873:13;31889:23;31904:7;31889:14;:23::i;:::-;31873:39;;31942:5;31931:16;;:7;:16;;;:52;;;;31951:32;31968:5;31975:7;31951:16;:32::i;:::-;31931:52;:87;;;;32011:7;31987:31;;:20;31999:7;31987:11;:20::i;:::-;:31;;;31931:87;31923:96;;;31763:264;;;;:::o;34786:625::-;34945:4;34918:31;;:23;34933:7;34918:14;:23::i;:::-;:31;;;34910:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35024:1;35010:16;;:2;:16;;;35002:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35080:39;35101:4;35107:2;35111:7;35080:20;:39::i;:::-;35184:29;35201:1;35205:7;35184:8;:29::i;:::-;35245:1;35226:9;:15;35236:4;35226:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35274:1;35257:9;:13;35267:2;35257:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35305:2;35286:7;:16;35294:7;35286:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35344:7;35340:2;35325:27;;35334:4;35325:27;;;;;;;;;;;;35365:38;35385:4;35391:2;35395:7;35365:19;:38::i;:::-;34786:625;;;:::o;5925:191::-;5999:16;6018:6;;;;;;;;;;;5999:25;;6044:8;6035:6;;:17;;;;;;;;;;;;;;;;;;6099:8;6068:40;;6089:8;6068:40;;;;;;;;;;;;5988:128;5925:191;:::o;35847:315::-;36002:8;35993:17;;:5;:17;;;35985:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36089:8;36051:18;:25;36070:5;36051:25;;;;;;;;;;;;;;;:35;36077:8;36051:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36135:8;36113:41;;36128:5;36113:41;;;36145:8;36113:41;;;;;;:::i;:::-;;;;;;;;35847:315;;;:::o;30843:313::-;30999:28;31009:4;31015:2;31019:7;30999:9;:28::i;:::-;31046:47;31069:4;31075:2;31079:7;31088:4;31046:22;:47::i;:::-;31038:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30843:313;;;;:::o;48332:117::-;48392:13;48425:16;48418:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48332:117;:::o;463:723::-;519:13;749:1;740:5;:10;736:53;;767:10;;;;;;;;;;;;;;;;;;;;;736:53;799:12;814:5;799:20;;830:14;855:78;870:1;862:4;:9;855:78;;888:8;;;;;:::i;:::-;;;;919:2;911:10;;;;;:::i;:::-;;;855:78;;;943:19;975:6;965:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;943:39;;993:154;1009:1;1000:5;:10;993:154;;1037:1;1027:11;;;;;:::i;:::-;;;1104:2;1096:5;:10;;;;:::i;:::-;1083:2;:24;;;;:::i;:::-;1070:39;;1053:6;1060;1053:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1133:2;1124:11;;;;;:::i;:::-;;;993:154;;;1171:6;1157:21;;;;;463:723;;;;:::o;25836:305::-;25938:4;25990:25;25975:40;;;:11;:40;;;;:105;;;;26047:33;26032:48;;;:11;:48;;;;25975:105;:158;;;;26097:36;26121:11;26097:23;:36::i;:::-;25975:158;25955:178;;25836:305;;;:::o;31469:127::-;31534:4;31586:1;31558:30;;:7;:16;31566:7;31558:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31551:37;;31469:127;;;:::o;32706:319::-;32835:18;32841:2;32845:7;32835:5;:18::i;:::-;32886:53;32917:1;32921:2;32925:7;32934:4;32886:22;:53::i;:::-;32864:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;32706:319;;;:::o;47839:181::-;47967:45;47994:4;48000:2;48004:7;47967:26;:45::i;:::-;47839:181;;;:::o;38886:125::-;;;;:::o;36950:853::-;37104:4;37125:15;:2;:13;;;:15::i;:::-;37121:675;;;37177:2;37161:36;;;37198:12;:10;:12::i;:::-;37212:4;37218:7;37227:4;37161:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37157:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37419:1;37402:6;:13;:18;37398:328;;37445:60;;;;;;;;;;:::i;:::-;;;;;;;;37398:328;37676:6;37670:13;37661:6;37657:2;37653:15;37646:38;37157:584;37293:41;;;37283:51;;;:6;:51;;;;37276:58;;;;;37121:675;37780:4;37773:11;;36950:853;;;;;;;:::o;17512:157::-;17597:4;17636:25;17621:40;;;:11;:40;;;;17614:47;;17512:157;;;:::o;33361:439::-;33455:1;33441:16;;:2;:16;;;33433:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33514:16;33522:7;33514;:16::i;:::-;33513:17;33505:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33576:45;33605:1;33609:2;33613:7;33576:20;:45::i;:::-;33651:1;33634:9;:13;33644:2;33634:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33682:2;33663:7;:16;33671:7;33663:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33727:7;33723:2;33702:33;;33719:1;33702:33;;;;;;;;;;;;33748:44;33776:1;33780:2;33784:7;33748:19;:44::i;:::-;33361:439;;:::o;41705:589::-;41849:45;41876:4;41882:2;41886:7;41849:26;:45::i;:::-;41927:1;41911:18;;:4;:18;;;41907:187;;41946:40;41978:7;41946:31;:40::i;:::-;41907:187;;;42016:2;42008:10;;:4;:10;;;42004:90;;42035:47;42068:4;42074:7;42035:32;:47::i;:::-;42004:90;41907:187;42122:1;42108:16;;:2;:16;;;42104:183;;42141:45;42178:7;42141:36;:45::i;:::-;42104:183;;;42214:4;42208:10;;:2;:10;;;42204:83;;42235:40;42263:2;42267:7;42235:27;:40::i;:::-;42204:83;42104:183;41705:589;;;:::o;7356:326::-;7416:4;7673:1;7651:7;:19;;;:23;7644:30;;7356:326;;;:::o;38375:126::-;;;;:::o;43017:164::-;43121:10;:17;;;;43094:15;:24;43110:7;43094:24;;;;;;;;;;;:44;;;;43149:10;43165:7;43149:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43017:164;:::o;43808:988::-;44074:22;44124:1;44099:22;44116:4;44099:16;:22::i;:::-;:26;;;;:::i;:::-;44074:51;;44136:18;44157:17;:26;44175:7;44157:26;;;;;;;;;;;;44136:47;;44304:14;44290:10;:28;44286:328;;44335:19;44357:12;:18;44370:4;44357:18;;;;;;;;;;;;;;;:34;44376:14;44357:34;;;;;;;;;;;;44335:56;;44441:11;44408:12;:18;44421:4;44408:18;;;;;;;;;;;;;;;:30;44427:10;44408:30;;;;;;;;;;;:44;;;;44558:10;44525:17;:30;44543:11;44525:30;;;;;;;;;;;:43;;;;44320:294;44286:328;44710:17;:26;44728:7;44710:26;;;;;;;;;;;44703:33;;;44754:12;:18;44767:4;44754:18;;;;;;;;;;;;;;;:34;44773:14;44754:34;;;;;;;;;;;44747:41;;;43889:907;;43808:988;;:::o;45091:1079::-;45344:22;45389:1;45369:10;:17;;;;:21;;;;:::i;:::-;45344:46;;45401:18;45422:15;:24;45438:7;45422:24;;;;;;;;;;;;45401:45;;45773:19;45795:10;45806:14;45795:26;;;;;;;;:::i;:::-;;;;;;;;;;45773:48;;45859:11;45834:10;45845;45834:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45970:10;45939:15;:28;45955:11;45939:28;;;;;;;;;;;:41;;;;46111:15;:24;46127:7;46111:24;;;;;;;;;;;46104:31;;;46146:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45162:1008;;;45091:1079;:::o;42595:221::-;42680:14;42697:20;42714:2;42697:16;:20::i;:::-;42680:37;;42755:7;42728:12;:16;42741:2;42728:16;;;;;;;;;;;;;;;:24;42745:6;42728:24;;;;;;;;;;;:34;;;;42802:6;42773:17;:26;42791:7;42773:26;;;;;;;;;;;:35;;;;42669:147;42595:221;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:117::-;5351:1;5348;5341:12;5365:117;5474:1;5471;5464:12;5488:180;5536:77;5533:1;5526:88;5633:4;5630:1;5623:15;5657:4;5654:1;5647:15;5674:281;5757:27;5779:4;5757:27;:::i;:::-;5749:6;5745:40;5887:6;5875:10;5872:22;5851:18;5839:10;5836:34;5833:62;5830:88;;;5898:18;;:::i;:::-;5830:88;5938:10;5934:2;5927:22;5717:238;5674:281;;:::o;5961:129::-;5995:6;6022:20;;:::i;:::-;6012:30;;6051:33;6079:4;6071:6;6051:33;:::i;:::-;5961:129;;;:::o;6096:308::-;6158:4;6248:18;6240:6;6237:30;6234:56;;;6270:18;;:::i;:::-;6234:56;6308:29;6330:6;6308:29;:::i;:::-;6300:37;;6392:4;6386;6382:15;6374:23;;6096:308;;;:::o;6410:146::-;6507:6;6502:3;6497;6484:30;6548:1;6539:6;6534:3;6530:16;6523:27;6410:146;;;:::o;6562:425::-;6640:5;6665:66;6681:49;6723:6;6681:49;:::i;:::-;6665:66;:::i;:::-;6656:75;;6754:6;6747:5;6740:21;6792:4;6785:5;6781:16;6830:3;6821:6;6816:3;6812:16;6809:25;6806:112;;;6837:79;;:::i;:::-;6806:112;6927:54;6974:6;6969:3;6964;6927:54;:::i;:::-;6646:341;6562:425;;;;;:::o;7007:340::-;7063:5;7112:3;7105:4;7097:6;7093:17;7089:27;7079:122;;7120:79;;:::i;:::-;7079:122;7237:6;7224:20;7262:79;7337:3;7329:6;7322:4;7314:6;7310:17;7262:79;:::i;:::-;7253:88;;7069:278;7007:340;;;;:::o;7353:654::-;7431:6;7439;7488:2;7476:9;7467:7;7463:23;7459:32;7456:119;;;7494:79;;:::i;:::-;7456:119;7614:1;7639:53;7684:7;7675:6;7664:9;7660:22;7639:53;:::i;:::-;7629:63;;7585:117;7769:2;7758:9;7754:18;7741:32;7800:18;7792:6;7789:30;7786:117;;;7822:79;;:::i;:::-;7786:117;7927:63;7982:7;7973:6;7962:9;7958:22;7927:63;:::i;:::-;7917:73;;7712:288;7353:654;;;;;:::o;8013:619::-;8090:6;8098;8106;8155:2;8143:9;8134:7;8130:23;8126:32;8123:119;;;8161:79;;:::i;:::-;8123:119;8281:1;8306:53;8351:7;8342:6;8331:9;8327:22;8306:53;:::i;:::-;8296:63;;8252:117;8408:2;8434:53;8479:7;8470:6;8459:9;8455:22;8434:53;:::i;:::-;8424:63;;8379:118;8536:2;8562:53;8607:7;8598:6;8587:9;8583:22;8562:53;:::i;:::-;8552:63;;8507:118;8013:619;;;;;:::o;8638:509::-;8707:6;8756:2;8744:9;8735:7;8731:23;8727:32;8724:119;;;8762:79;;:::i;:::-;8724:119;8910:1;8899:9;8895:17;8882:31;8940:18;8932:6;8929:30;8926:117;;;8962:79;;:::i;:::-;8926:117;9067:63;9122:7;9113:6;9102:9;9098:22;9067:63;:::i;:::-;9057:73;;8853:287;8638:509;;;;:::o;9153:329::-;9212:6;9261:2;9249:9;9240:7;9236:23;9232:32;9229:119;;;9267:79;;:::i;:::-;9229:119;9387:1;9412:53;9457:7;9448:6;9437:9;9433:22;9412:53;:::i;:::-;9402:63;;9358:117;9153:329;;;;:::o;9488:116::-;9558:21;9573:5;9558:21;:::i;:::-;9551:5;9548:32;9538:60;;9594:1;9591;9584:12;9538:60;9488:116;:::o;9610:133::-;9653:5;9691:6;9678:20;9669:29;;9707:30;9731:5;9707:30;:::i;:::-;9610:133;;;;:::o;9749:468::-;9814:6;9822;9871:2;9859:9;9850:7;9846:23;9842:32;9839:119;;;9877:79;;:::i;:::-;9839:119;9997:1;10022:53;10067:7;10058:6;10047:9;10043:22;10022:53;:::i;:::-;10012:63;;9968:117;10124:2;10150:50;10192:7;10183:6;10172:9;10168:22;10150:50;:::i;:::-;10140:60;;10095:115;9749:468;;;;;:::o;10223:307::-;10284:4;10374:18;10366:6;10363:30;10360:56;;;10396:18;;:::i;:::-;10360:56;10434:29;10456:6;10434:29;:::i;:::-;10426:37;;10518:4;10512;10508:15;10500:23;;10223:307;;;:::o;10536:423::-;10613:5;10638:65;10654:48;10695:6;10654:48;:::i;:::-;10638:65;:::i;:::-;10629:74;;10726:6;10719:5;10712:21;10764:4;10757:5;10753:16;10802:3;10793:6;10788:3;10784:16;10781:25;10778:112;;;10809:79;;:::i;:::-;10778:112;10899:54;10946:6;10941:3;10936;10899:54;:::i;:::-;10619:340;10536:423;;;;;:::o;10978:338::-;11033:5;11082:3;11075:4;11067:6;11063:17;11059:27;11049:122;;11090:79;;:::i;:::-;11049:122;11207:6;11194:20;11232:78;11306:3;11298:6;11291:4;11283:6;11279:17;11232:78;:::i;:::-;11223:87;;11039:277;10978:338;;;;:::o;11322:943::-;11417:6;11425;11433;11441;11490:3;11478:9;11469:7;11465:23;11461:33;11458:120;;;11497:79;;:::i;:::-;11458:120;11617:1;11642:53;11687:7;11678:6;11667:9;11663:22;11642:53;:::i;:::-;11632:63;;11588:117;11744:2;11770:53;11815:7;11806:6;11795:9;11791:22;11770:53;:::i;:::-;11760:63;;11715:118;11872:2;11898:53;11943:7;11934:6;11923:9;11919:22;11898:53;:::i;:::-;11888:63;;11843:118;12028:2;12017:9;12013:18;12000:32;12059:18;12051:6;12048:30;12045:117;;;12081:79;;:::i;:::-;12045:117;12186:62;12240:7;12231:6;12220:9;12216:22;12186:62;:::i;:::-;12176:72;;11971:287;11322:943;;;;;;;:::o;12271:474::-;12339:6;12347;12396:2;12384:9;12375:7;12371:23;12367:32;12364:119;;;12402:79;;:::i;:::-;12364:119;12522:1;12547:53;12592:7;12583:6;12572:9;12568:22;12547:53;:::i;:::-;12537:63;;12493:117;12649:2;12675:53;12720:7;12711:6;12700:9;12696:22;12675:53;:::i;:::-;12665:63;;12620:118;12271:474;;;;;:::o;12751:180::-;12799:77;12796:1;12789:88;12896:4;12893:1;12886:15;12920:4;12917:1;12910:15;12937:320;12981:6;13018:1;13012:4;13008:12;12998:22;;13065:1;13059:4;13055:12;13086:18;13076:81;;13142:4;13134:6;13130:17;13120:27;;13076:81;13204:2;13196:6;13193:14;13173:18;13170:38;13167:84;;13223:18;;:::i;:::-;13167:84;12988:269;12937:320;;;:::o;13263:220::-;13403:34;13399:1;13391:6;13387:14;13380:58;13472:3;13467:2;13459:6;13455:15;13448:28;13263:220;:::o;13489:366::-;13631:3;13652:67;13716:2;13711:3;13652:67;:::i;:::-;13645:74;;13728:93;13817:3;13728:93;:::i;:::-;13846:2;13841:3;13837:12;13830:19;;13489:366;;;:::o;13861:419::-;14027:4;14065:2;14054:9;14050:18;14042:26;;14114:9;14108:4;14104:20;14100:1;14089:9;14085:17;14078:47;14142:131;14268:4;14142:131;:::i;:::-;14134:139;;13861:419;;;:::o;14286:249::-;14426:34;14422:1;14414:6;14410:14;14403:58;14495:32;14490:2;14482:6;14478:15;14471:57;14286:249;:::o;14541:366::-;14683:3;14704:67;14768:2;14763:3;14704:67;:::i;:::-;14697:74;;14780:93;14869:3;14780:93;:::i;:::-;14898:2;14893:3;14889:12;14882:19;;14541:366;;;:::o;14913:419::-;15079:4;15117:2;15106:9;15102:18;15094:26;;15166:9;15160:4;15156:20;15152:1;15141:9;15137:17;15130:47;15194:131;15320:4;15194:131;:::i;:::-;15186:139;;14913:419;;;:::o;15338:180::-;15386:77;15383:1;15376:88;15483:4;15480:1;15473:15;15507:4;15504:1;15497:15;15524:191;15564:3;15583:20;15601:1;15583:20;:::i;:::-;15578:25;;15617:20;15635:1;15617:20;:::i;:::-;15612:25;;15660:1;15657;15653:9;15646:16;;15681:3;15678:1;15675:10;15672:36;;;15688:18;;:::i;:::-;15672:36;15524:191;;;;:::o;15721:172::-;15861:24;15857:1;15849:6;15845:14;15838:48;15721:172;:::o;15899:366::-;16041:3;16062:67;16126:2;16121:3;16062:67;:::i;:::-;16055:74;;16138:93;16227:3;16138:93;:::i;:::-;16256:2;16251:3;16247:12;16240:19;;15899:366;;;:::o;16271:419::-;16437:4;16475:2;16464:9;16460:18;16452:26;;16524:9;16518:4;16514:20;16510:1;16499:9;16495:17;16488:47;16552:131;16678:4;16552:131;:::i;:::-;16544:139;;16271:419;;;:::o;16696:233::-;16735:3;16758:24;16776:5;16758:24;:::i;:::-;16749:33;;16804:66;16797:5;16794:77;16791:103;;16874:18;;:::i;:::-;16791:103;16921:1;16914:5;16910:13;16903:20;;16696:233;;;:::o;16935:141::-;16984:4;17007:3;16999:11;;17030:3;17027:1;17020:14;17064:4;17061:1;17051:18;17043:26;;16935:141;;;:::o;17082:93::-;17119:6;17166:2;17161;17154:5;17150:14;17146:23;17136:33;;17082:93;;;:::o;17181:107::-;17225:8;17275:5;17269:4;17265:16;17244:37;;17181:107;;;;:::o;17294:393::-;17363:6;17413:1;17401:10;17397:18;17436:97;17466:66;17455:9;17436:97;:::i;:::-;17554:39;17584:8;17573:9;17554:39;:::i;:::-;17542:51;;17626:4;17622:9;17615:5;17611:21;17602:30;;17675:4;17665:8;17661:19;17654:5;17651:30;17641:40;;17370:317;;17294:393;;;;;:::o;17693:60::-;17721:3;17742:5;17735:12;;17693:60;;;:::o;17759:142::-;17809:9;17842:53;17860:34;17869:24;17887:5;17869:24;:::i;:::-;17860:34;:::i;:::-;17842:53;:::i;:::-;17829:66;;17759:142;;;:::o;17907:75::-;17950:3;17971:5;17964:12;;17907:75;;;:::o;17988:269::-;18098:39;18129:7;18098:39;:::i;:::-;18159:91;18208:41;18232:16;18208:41;:::i;:::-;18200:6;18193:4;18187:11;18159:91;:::i;:::-;18153:4;18146:105;18064:193;17988:269;;;:::o;18263:73::-;18308:3;18263:73;:::o;18342:189::-;18419:32;;:::i;:::-;18460:65;18518:6;18510;18504:4;18460:65;:::i;:::-;18395:136;18342:189;;:::o;18537:186::-;18597:120;18614:3;18607:5;18604:14;18597:120;;;18668:39;18705:1;18698:5;18668:39;:::i;:::-;18641:1;18634:5;18630:13;18621:22;;18597:120;;;18537:186;;:::o;18729:543::-;18830:2;18825:3;18822:11;18819:446;;;18864:38;18896:5;18864:38;:::i;:::-;18948:29;18966:10;18948:29;:::i;:::-;18938:8;18934:44;19131:2;19119:10;19116:18;19113:49;;;19152:8;19137:23;;19113:49;19175:80;19231:22;19249:3;19231:22;:::i;:::-;19221:8;19217:37;19204:11;19175:80;:::i;:::-;18834:431;;18819:446;18729:543;;;:::o;19278:117::-;19332:8;19382:5;19376:4;19372:16;19351:37;;19278:117;;;;:::o;19401:169::-;19445:6;19478:51;19526:1;19522:6;19514:5;19511:1;19507:13;19478:51;:::i;:::-;19474:56;19559:4;19553;19549:15;19539:25;;19452:118;19401:169;;;;:::o;19575:295::-;19651:4;19797:29;19822:3;19816:4;19797:29;:::i;:::-;19789:37;;19859:3;19856:1;19852:11;19846:4;19843:21;19835:29;;19575:295;;;;:::o;19875:1395::-;19992:37;20025:3;19992:37;:::i;:::-;20094:18;20086:6;20083:30;20080:56;;;20116:18;;:::i;:::-;20080:56;20160:38;20192:4;20186:11;20160:38;:::i;:::-;20245:67;20305:6;20297;20291:4;20245:67;:::i;:::-;20339:1;20363:4;20350:17;;20395:2;20387:6;20384:14;20412:1;20407:618;;;;21069:1;21086:6;21083:77;;;21135:9;21130:3;21126:19;21120:26;21111:35;;21083:77;21186:67;21246:6;21239:5;21186:67;:::i;:::-;21180:4;21173:81;21042:222;20377:887;;20407:618;20459:4;20455:9;20447:6;20443:22;20493:37;20525:4;20493:37;:::i;:::-;20552:1;20566:208;20580:7;20577:1;20574:14;20566:208;;;20659:9;20654:3;20650:19;20644:26;20636:6;20629:42;20710:1;20702:6;20698:14;20688:24;;20757:2;20746:9;20742:18;20729:31;;20603:4;20600:1;20596:12;20591:17;;20566:208;;;20802:6;20793:7;20790:19;20787:179;;;20860:9;20855:3;20851:19;20845:26;20903:48;20945:4;20937:6;20933:17;20922:9;20903:48;:::i;:::-;20895:6;20888:64;20810:156;20787:179;21012:1;21008;21000:6;20996:14;20992:22;20986:4;20979:36;20414:611;;;20377:887;;19967:1303;;;19875:1395;;:::o;21276:233::-;21416:34;21412:1;21404:6;21400:14;21393:58;21485:16;21480:2;21472:6;21468:15;21461:41;21276:233;:::o;21515:366::-;21657:3;21678:67;21742:2;21737:3;21678:67;:::i;:::-;21671:74;;21754:93;21843:3;21754:93;:::i;:::-;21872:2;21867:3;21863:12;21856:19;;21515:366;;;:::o;21887:419::-;22053:4;22091:2;22080:9;22076:18;22068:26;;22140:9;22134:4;22130:20;22126:1;22115:9;22111:17;22104:47;22168:131;22294:4;22168:131;:::i;:::-;22160:139;;21887:419;;;:::o;22312:230::-;22452:34;22448:1;22440:6;22436:14;22429:58;22521:13;22516:2;22508:6;22504:15;22497:38;22312:230;:::o;22548:366::-;22690:3;22711:67;22775:2;22770:3;22711:67;:::i;:::-;22704:74;;22787:93;22876:3;22787:93;:::i;:::-;22905:2;22900:3;22896:12;22889:19;;22548:366;;;:::o;22920:419::-;23086:4;23124:2;23113:9;23109:18;23101:26;;23173:9;23167:4;23163:20;23159:1;23148:9;23144:17;23137:47;23201:131;23327:4;23201:131;:::i;:::-;23193:139;;22920:419;;;:::o;23345:231::-;23485:34;23481:1;23473:6;23469:14;23462:58;23554:14;23549:2;23541:6;23537:15;23530:39;23345:231;:::o;23582:366::-;23724:3;23745:67;23809:2;23804:3;23745:67;:::i;:::-;23738:74;;23821:93;23910:3;23821:93;:::i;:::-;23939:2;23934:3;23930:12;23923:19;;23582:366;;;:::o;23954:419::-;24120:4;24158:2;24147:9;24143:18;24135:26;;24207:9;24201:4;24197:20;24193:1;24182:9;24178:17;24171:47;24235:131;24361:4;24235:131;:::i;:::-;24227:139;;23954:419;;;:::o;24379:180::-;24427:77;24424:1;24417:88;24524:4;24521:1;24514:15;24548:4;24545:1;24538:15;24565:174;24705:26;24701:1;24693:6;24689:14;24682:50;24565:174;:::o;24745:366::-;24887:3;24908:67;24972:2;24967:3;24908:67;:::i;:::-;24901:74;;24984:93;25073:3;24984:93;:::i;:::-;25102:2;25097:3;25093:12;25086:19;;24745:366;;;:::o;25117:419::-;25283:4;25321:2;25310:9;25306:18;25298:26;;25370:9;25364:4;25360:20;25356:1;25345:9;25341:17;25334:47;25398:131;25524:4;25398:131;:::i;:::-;25390:139;;25117:419;;;:::o;25542:228::-;25682:34;25678:1;25670:6;25666:14;25659:58;25751:11;25746:2;25738:6;25734:15;25727:36;25542:228;:::o;25776:366::-;25918:3;25939:67;26003:2;25998:3;25939:67;:::i;:::-;25932:74;;26015:93;26104:3;26015:93;:::i;:::-;26133:2;26128:3;26124:12;26117:19;;25776:366;;;:::o;26148:419::-;26314:4;26352:2;26341:9;26337:18;26329:26;;26401:9;26395:4;26391:20;26387:1;26376:9;26372:17;26365:47;26429:131;26555:4;26429:131;:::i;:::-;26421:139;;26148:419;;;:::o;26573:143::-;26630:5;26661:6;26655:13;26646:22;;26677:33;26704:5;26677:33;:::i;:::-;26573:143;;;;:::o;26722:351::-;26792:6;26841:2;26829:9;26820:7;26816:23;26812:32;26809:119;;;26847:79;;:::i;:::-;26809:119;26967:1;26992:64;27048:7;27039:6;27028:9;27024:22;26992:64;:::i;:::-;26982:74;;26938:128;26722:351;;;;:::o;27079:332::-;27200:4;27238:2;27227:9;27223:18;27215:26;;27251:71;27319:1;27308:9;27304:17;27295:6;27251:71;:::i;:::-;27332:72;27400:2;27389:9;27385:18;27376:6;27332:72;:::i;:::-;27079:332;;;;;:::o;27417:137::-;27471:5;27502:6;27496:13;27487:22;;27518:30;27542:5;27518:30;:::i;:::-;27417:137;;;;:::o;27560:345::-;27627:6;27676:2;27664:9;27655:7;27651:23;27647:32;27644:119;;;27682:79;;:::i;:::-;27644:119;27802:1;27827:61;27880:7;27871:6;27860:9;27856:22;27827:61;:::i;:::-;27817:71;;27773:125;27560:345;;;;:::o;27911:174::-;28051:26;28047:1;28039:6;28035:14;28028:50;27911:174;:::o;28091:366::-;28233:3;28254:67;28318:2;28313:3;28254:67;:::i;:::-;28247:74;;28330:93;28419:3;28330:93;:::i;:::-;28448:2;28443:3;28439:12;28432:19;;28091:366;;;:::o;28463:419::-;28629:4;28667:2;28656:9;28652:18;28644:26;;28716:9;28710:4;28706:20;28702:1;28691:9;28687:17;28680:47;28744:131;28870:4;28744:131;:::i;:::-;28736:139;;28463:419;;;:::o;28888:442::-;29037:4;29075:2;29064:9;29060:18;29052:26;;29088:71;29156:1;29145:9;29141:17;29132:6;29088:71;:::i;:::-;29169:72;29237:2;29226:9;29222:18;29213:6;29169:72;:::i;:::-;29251;29319:2;29308:9;29304:18;29295:6;29251:72;:::i;:::-;28888:442;;;;;;:::o;29336:164::-;29476:16;29472:1;29464:6;29460:14;29453:40;29336:164;:::o;29506:366::-;29648:3;29669:67;29733:2;29728:3;29669:67;:::i;:::-;29662:74;;29745:93;29834:3;29745:93;:::i;:::-;29863:2;29858:3;29854:12;29847:19;;29506:366;;;:::o;29878:419::-;30044:4;30082:2;30071:9;30067:18;30059:26;;30131:9;30125:4;30121:20;30117:1;30106:9;30102:17;30095:47;30159:131;30285:4;30159:131;:::i;:::-;30151:139;;29878:419;;;:::o;30303:148::-;30405:11;30442:3;30427:18;;30303:148;;;;:::o;30457:390::-;30563:3;30591:39;30624:5;30591:39;:::i;:::-;30646:89;30728:6;30723:3;30646:89;:::i;:::-;30639:96;;30744:65;30802:6;30797:3;30790:4;30783:5;30779:16;30744:65;:::i;:::-;30834:6;30829:3;30825:16;30818:23;;30567:280;30457:390;;;;:::o;30853:435::-;31033:3;31055:95;31146:3;31137:6;31055:95;:::i;:::-;31048:102;;31167:95;31258:3;31249:6;31167:95;:::i;:::-;31160:102;;31279:3;31272:10;;30853:435;;;;;:::o;31294:225::-;31434:34;31430:1;31422:6;31418:14;31411:58;31503:8;31498:2;31490:6;31486:15;31479:33;31294:225;:::o;31525:366::-;31667:3;31688:67;31752:2;31747:3;31688:67;:::i;:::-;31681:74;;31764:93;31853:3;31764:93;:::i;:::-;31882:2;31877:3;31873:12;31866:19;;31525:366;;;:::o;31897:419::-;32063:4;32101:2;32090:9;32086:18;32078:26;;32150:9;32144:4;32140:20;32136:1;32125:9;32121:17;32114:47;32178:131;32304:4;32178:131;:::i;:::-;32170:139;;31897:419;;;:::o;32322:182::-;32462:34;32458:1;32450:6;32446:14;32439:58;32322:182;:::o;32510:366::-;32652:3;32673:67;32737:2;32732:3;32673:67;:::i;:::-;32666:74;;32749:93;32838:3;32749:93;:::i;:::-;32867:2;32862:3;32858:12;32851:19;;32510:366;;;:::o;32882:419::-;33048:4;33086:2;33075:9;33071:18;33063:26;;33135:9;33129:4;33125:20;33121:1;33110:9;33106:17;33099:47;33163:131;33289:4;33163:131;:::i;:::-;33155:139;;32882:419;;;:::o;33307:224::-;33447:34;33443:1;33435:6;33431:14;33424:58;33516:7;33511:2;33503:6;33499:15;33492:32;33307:224;:::o;33537:366::-;33679:3;33700:67;33764:2;33759:3;33700:67;:::i;:::-;33693:74;;33776:93;33865:3;33776:93;:::i;:::-;33894:2;33889:3;33885:12;33878:19;;33537:366;;;:::o;33909:419::-;34075:4;34113:2;34102:9;34098:18;34090:26;;34162:9;34156:4;34152:20;34148:1;34137:9;34133:17;34126:47;34190:131;34316:4;34190:131;:::i;:::-;34182:139;;33909:419;;;:::o;34334:223::-;34474:34;34470:1;34462:6;34458:14;34451:58;34543:6;34538:2;34530:6;34526:15;34519:31;34334:223;:::o;34563:366::-;34705:3;34726:67;34790:2;34785:3;34726:67;:::i;:::-;34719:74;;34802:93;34891:3;34802:93;:::i;:::-;34920:2;34915:3;34911:12;34904:19;;34563:366;;;:::o;34935:419::-;35101:4;35139:2;35128:9;35124:18;35116:26;;35188:9;35182:4;35178:20;35174:1;35163:9;35159:17;35152:47;35216:131;35342:4;35216:131;:::i;:::-;35208:139;;34935:419;;;:::o;35360:194::-;35400:4;35420:20;35438:1;35420:20;:::i;:::-;35415:25;;35454:20;35472:1;35454:20;:::i;:::-;35449:25;;35498:1;35495;35491:9;35483:17;;35522:1;35516:4;35513:11;35510:37;;;35527:18;;:::i;:::-;35510:37;35360:194;;;;:::o;35560:175::-;35700:27;35696:1;35688:6;35684:14;35677:51;35560:175;:::o;35741:366::-;35883:3;35904:67;35968:2;35963:3;35904:67;:::i;:::-;35897:74;;35980:93;36069:3;35980:93;:::i;:::-;36098:2;36093:3;36089:12;36082:19;;35741:366;;;:::o;36113:419::-;36279:4;36317:2;36306:9;36302:18;36294:26;;36366:9;36360:4;36356:20;36352:1;36341:9;36337:17;36330:47;36394:131;36520:4;36394:131;:::i;:::-;36386:139;;36113:419;;;:::o;36538:237::-;36678:34;36674:1;36666:6;36662:14;36655:58;36747:20;36742:2;36734:6;36730:15;36723:45;36538:237;:::o;36781:366::-;36923:3;36944:67;37008:2;37003:3;36944:67;:::i;:::-;36937:74;;37020:93;37109:3;37020:93;:::i;:::-;37138:2;37133:3;37129:12;37122:19;;36781:366;;;:::o;37153:419::-;37319:4;37357:2;37346:9;37342:18;37334:26;;37406:9;37400:4;37396:20;37392:1;37381:9;37377:17;37370:47;37434:131;37560:4;37434:131;:::i;:::-;37426:139;;37153:419;;;:::o;37578:180::-;37626:77;37623:1;37616:88;37723:4;37720:1;37713:15;37747:4;37744:1;37737:15;37764:185;37804:1;37821:20;37839:1;37821:20;:::i;:::-;37816:25;;37855:20;37873:1;37855:20;:::i;:::-;37850:25;;37894:1;37884:35;;37899:18;;:::i;:::-;37884:35;37941:1;37938;37934:9;37929:14;;37764:185;;;;:::o;37955:176::-;37987:1;38004:20;38022:1;38004:20;:::i;:::-;37999:25;;38038:20;38056:1;38038:20;:::i;:::-;38033:25;;38077:1;38067:35;;38082:18;;:::i;:::-;38067:35;38123:1;38120;38116:9;38111:14;;37955:176;;;;:::o;38137:98::-;38188:6;38222:5;38216:12;38206:22;;38137:98;;;:::o;38241:168::-;38324:11;38358:6;38353:3;38346:19;38398:4;38393:3;38389:14;38374:29;;38241:168;;;;:::o;38415:373::-;38501:3;38529:38;38561:5;38529:38;:::i;:::-;38583:70;38646:6;38641:3;38583:70;:::i;:::-;38576:77;;38662:65;38720:6;38715:3;38708:4;38701:5;38697:16;38662:65;:::i;:::-;38752:29;38774:6;38752:29;:::i;:::-;38747:3;38743:39;38736:46;;38505:283;38415:373;;;;:::o;38794:640::-;38989:4;39027:3;39016:9;39012:19;39004:27;;39041:71;39109:1;39098:9;39094:17;39085:6;39041:71;:::i;:::-;39122:72;39190:2;39179:9;39175:18;39166:6;39122:72;:::i;:::-;39204;39272:2;39261:9;39257:18;39248:6;39204:72;:::i;:::-;39323:9;39317:4;39313:20;39308:2;39297:9;39293:18;39286:48;39351:76;39422:4;39413:6;39351:76;:::i;:::-;39343:84;;38794:640;;;;;;;:::o;39440:141::-;39496:5;39527:6;39521:13;39512:22;;39543:32;39569:5;39543:32;:::i;:::-;39440:141;;;;:::o;39587:349::-;39656:6;39705:2;39693:9;39684:7;39680:23;39676:32;39673:119;;;39711:79;;:::i;:::-;39673:119;39831:1;39856:63;39911:7;39902:6;39891:9;39887:22;39856:63;:::i;:::-;39846:73;;39802:127;39587:349;;;;:::o;39942:182::-;40082:34;40078:1;40070:6;40066:14;40059:58;39942:182;:::o;40130:366::-;40272:3;40293:67;40357:2;40352:3;40293:67;:::i;:::-;40286:74;;40369:93;40458:3;40369:93;:::i;:::-;40487:2;40482:3;40478:12;40471:19;;40130:366;;;:::o;40502:419::-;40668:4;40706:2;40695:9;40691:18;40683:26;;40755:9;40749:4;40745:20;40741:1;40730:9;40726:17;40719:47;40783:131;40909:4;40783:131;:::i;:::-;40775:139;;40502:419;;;:::o;40927:178::-;41067:30;41063:1;41055:6;41051:14;41044:54;40927:178;:::o;41111:366::-;41253:3;41274:67;41338:2;41333:3;41274:67;:::i;:::-;41267:74;;41350:93;41439:3;41350:93;:::i;:::-;41468:2;41463:3;41459:12;41452:19;;41111:366;;;:::o;41483:419::-;41649:4;41687:2;41676:9;41672:18;41664:26;;41736:9;41730:4;41726:20;41722:1;41711:9;41707:17;41700:47;41764:131;41890:4;41764:131;:::i;:::-;41756:139;;41483:419;;;:::o;41908:180::-;41956:77;41953:1;41946:88;42053:4;42050:1;42043:15;42077:4;42074:1;42067:15

Swarm Source

ipfs://295f397c23d9c4e7db650cfaf5505e7e5998955418998029b05b1ab97ca5cd6f
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.