ETH Price: $2,468.02 (+1.22%)

Token

NFT Mint Club (NFTMC)
 

Overview

Max Total Supply

1,566 NFTMC

Holders

157

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
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:
NFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-06
*/

// SPDX-License-Identifier: MIT

//  _______  ______________________    _____  .__        __    _________ .__       ___.    
//  \      \ \_   _____/\__    ___/   /     \ |__| _____/  |_  \_   ___ \|  |  __ _\_ |__  
//  /   |   \ |    __)    |    |     /  \ /  \|  |/    \   __\ /    \  \/|  | |  |  \ __ \ 
// /    |    \|     \     |    |    /    Y    \  |   |  \  |   \     \___|  |_|  |  / \_\ \
// \____|__  /\___  /     |____|    \____|__  /__|___|  /__|    \______  /____/____/|___  /
//         \/     \/                        \/        \/               \/               \/ 

// www.nftmintclub.com

pragma solidity ^0.8.0;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.8.0;

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

pragma solidity ^0.8.0;

interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
    function tokenByIndex(uint256 index) external view returns (uint256);
}

pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity ^0.8.0;
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function 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);
    }

    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);
    }
}

pragma solidity ^0.8.0;
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
    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");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    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");
    }
    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);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    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);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    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);
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;
interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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

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


// File: @openzeppelin/contracts/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: balance query for the zero address");
        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: owner query for nonexistent token");
        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) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        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 overriden 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 owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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: transfer caller is not 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: transfer caller is not 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) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, 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);
    }

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

    /**
     * @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 of token that is not own");
        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);
    }

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

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

// File: @openzeppelin/contracts/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.0;

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity >=0.7.0 <0.9.0;

contract NFT is ERC721Enumerable, Ownable {
  using Strings for uint256;

  string baseURI;
  string public baseExtension = ".json";
  uint256 public cost = 0.02 ether;
  uint256 public preSaleCost = 0.00 ether;
  uint256 public maxSupply = 5000;
  uint256 public maxMintAmount = 10;
  bool public paused = false;
  bool public revealed = false;
  string public notRevealedUri;
  bool public preSale = false;
  address public publicKey = 0xB0F8f33DE6F715aACbFB56D3fe0570EbddcEf776;

    // mapping
    mapping(bytes32 => bool) public executed;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
  }

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


    function showText() public view returns (string memory) {
           
    //bytes memory stringContract = abi.encodePacked(address(this));
    uint256 _allocation = 3;
    string memory stringWallet = Strings.toHexString(uint256(uint160(msg.sender)), 20);
    string memory stringAllocation = Strings.toString(_allocation);

    string memory stringContract = Strings.toHexString(uint256(uint160(address(this))), 20);
   
string memory combinedData = string(bytes.concat(bytes(stringWallet), bytes(stringContract), bytes(stringAllocation)));

       return combinedData;
    }


  // public
   function mint(uint256 _mintAmount, bytes memory _sig, uint256 _allocation) public payable {
    uint256 supply = totalSupply();

    // DRM start
  if (preSale == true) {

       cost = preSaleCost;

       string memory stringContract = Strings.toHexString(uint256(uint160(address(this))), 20);
       string memory stringAllocation = Strings.toString(_allocation);
       string memory stringWallet = Strings.toHexString(uint256(uint160(msg.sender)), 20);
       stringContract = toUpper(stringContract);
       stringAllocation = toUpper(stringAllocation);
       stringWallet = toUpper(stringWallet);
       string memory combinedData = string(bytes.concat(bytes(stringWallet), bytes(stringContract), bytes(stringAllocation)));

    bytes32 txHash = getMessageHash(combinedData);
    require(!executed[txHash], "Transaction already executed: Mint process stopped");
    require(verify(publicKey, combinedData, _sig), "Invalid signature: Mint process stopped");
    require(_mintAmount <= _allocation, "Allocation breached: Mint process stopped");
    executed[txHash] = true;    
    
    }
    // DRM end

    require(!paused, "Contract paused: Mint process stopped");
    require(_mintAmount > 0, "Mint amount too low:  Mint process stopped");
    require(_mintAmount <= maxMintAmount, "Mint amount too high:  Mint process stopped");
    require(supply + _mintAmount <= maxSupply, "Not enough supply:  Mint process stopped");

    if (msg.sender != owner()) {
      require(msg.value >= cost * _mintAmount, "Price too low:  Mint process stopped");
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      _safeMint(msg.sender, supply + i);
    }
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

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

  function reveal() public onlyOwner {
      revealed = true;
  }
  
  function setCost(uint256 _newCost) public onlyOwner {
    cost = _newCost;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
    maxMintAmount = _newmaxMintAmount;
  }
  
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }

    function preSaleState(bool _state) public onlyOwner {
    preSale = _state;
  }
 
  function withdraw() public payable onlyOwner {
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
  }

// Signature code
function verify(address _signer, string memory _message, bytes memory _sig) public pure returns (bool)
{
    bytes32 messageHash = getMessageHash(_message);
    bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);
    return recover(ethSignedMessageHash, _sig) == _signer;
}
function getMessageHash(string memory _word) internal pure returns(bytes32)
{
    bytes32 output = keccak256(abi.encodePacked(_word));
    return output;
}
function getEthSignedMessageHash(bytes32 _messageHash) internal pure returns(bytes32)
    {
    bytes32 output = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash));
    return output;
    }

function recover(bytes32 _ethSignedMessageHash, bytes memory _sig) internal pure returns (address)
    {
        (bytes32 r, bytes32 s, uint8 v) = split(_sig);
        return ecrecover(_ethSignedMessageHash, v, r, s);
    }

function split(bytes memory _sig) internal pure returns (bytes32 r, bytes32 s, uint8 v)
    {
       require(_sig.length == 65, "Invlaid signature length");
       assembly {
           r := mload(add(_sig, 32))
           s := mload(add(_sig, 64))
           v := byte(0, mload(add(_sig, 96)))
       }
    }

function toUpper(string memory str) internal pure returns (string memory) {
        bytes memory bStr = bytes(str);
        bytes memory bUpper = new bytes(bStr.length);
        for (uint i = 0; i < bStr.length; i++) {
            // Lowercase character...
            if ((uint8(bStr[i]) >= 97) && (uint8(bStr[i]) <= 122)) {
                // So we subtract 32 to make it uppercase
                bUpper[i] = bytes1(uint8(bStr[i]) - 32);
            } else {
                bUpper[i] = bStr[i];
            }
        }
        return string(bUpper);
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","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":"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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"executed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes","name":"_sig","type":"bytes"},{"internalType":"uint256","name":"_allocation","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"preSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"publicKey","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showText","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"string","name":"_message","type":"string"},{"internalType":"bytes","name":"_sig","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a09081526200002891600c91906200022b565b5066470de4df820000600d556000600e55611388600f55600a6010556011805461ffff19169055601380546001600160a81b03191674b0f8f33de6f715aacbfb56d3fe0570ebddcef776001790553480156200008357600080fd5b506040516200342e3803806200342e833981016040819052620000a69162000388565b835184908490620000bf9060009060208501906200022b565b508051620000d59060019060208401906200022b565b505050620000f2620000ec6200011260201b60201c565b62000116565b620000fd8262000168565b6200010881620001d0565b5050505062000494565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001b75760405162461bcd60e51b815260206004820181905260248201526000805160206200340e83398151915260448201526064015b60405180910390fd5b8051620001cc90600b9060208401906200022b565b5050565b600a546001600160a01b031633146200021b5760405162461bcd60e51b815260206004820181905260248201526000805160206200340e8339815191526044820152606401620001ae565b8051620001cc9060129060208401905b828054620002399062000441565b90600052602060002090601f0160209004810192826200025d5760008555620002a8565b82601f106200027857805160ff1916838001178555620002a8565b82800160010185558215620002a8579182015b82811115620002a85782518255916020019190600101906200028b565b50620002b6929150620002ba565b5090565b5b80821115620002b65760008155600101620002bb565b600082601f830112620002e357600080fd5b81516001600160401b03808211156200030057620003006200047e565b604051601f8301601f19908116603f011681019082821181831017156200032b576200032b6200047e565b816040528381526020925086838588010111156200034857600080fd5b600091505b838210156200036c57858201830151818301840152908201906200034d565b838211156200037e5760008385830101525b9695505050505050565b600080600080608085870312156200039f57600080fd5b84516001600160401b0380821115620003b757600080fd5b620003c588838901620002d1565b95506020870151915080821115620003dc57600080fd5b620003ea88838901620002d1565b945060408701519150808211156200040157600080fd5b6200040f88838901620002d1565b935060608701519150808211156200042657600080fd5b506200043587828801620002d1565b91505092959194509250565b600181811c908216806200045657607f821691505b602082108114156200047857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612f6a80620004a46000396000f3fe60806040526004361061025c5760003560e01c80635a7adf7f11610144578063a9fcfb33116100b6578063d5abeb011161007a578063d5abeb01146106c3578063da3ef23f146106d9578063e985e9c5146106f9578063f2c4ce1e14610742578063f2fde38b14610762578063fe4702ea1461078257600080fd5b8063a9fcfb3314610628578063b88d4fde14610658578063c668286214610678578063c87b56dd1461068d578063cc9ff9c6146106ad57600080fd5b8063715018a611610108578063715018a61461058b5780637f00c7a6146105a05780638da5cb5b146105c057806395d89b41146105de578063a22cb465146105f3578063a475b5dd1461061357600080fd5b80635a7adf7f146104f25780635c975abb1461050c5780636352211e1461052657806363ffab311461054657806370a082311461056b57600080fd5b806323b872dd116101dd57806342842e0e116101a157806342842e0e14610426578063438b63001461044657806344a0d68a146104735780634f6ccce71461049357806351830227146104b357806355f804b3146104d257600080fd5b806323b872dd146103ab5780632dd34f0f146103cb5780632e87871d146103eb5780632f745c59146103fe5780633ccfd60b1461041e57600080fd5b8063081c8c4411610224578063081c8c4414610327578063095ea7b31461033c57806313faede61461035c57806318160ddd14610380578063239c70ae1461039557600080fd5b806301ffc9a71461026157806302329a291461029657806306fdde03146102b857806307bc8829146102da578063081812fc146102ef575b600080fd5b34801561026d57600080fd5b5061028161027c366004612a04565b6107a2565b60405190151581526020015b60405180910390f35b3480156102a257600080fd5b506102b66102b13660046129d0565b6107cd565b005b3480156102c457600080fd5b506102cd610813565b60405161028d9190612c93565b3480156102e657600080fd5b506102cd6108a5565b3480156102fb57600080fd5b5061030f61030a3660046129eb565b610905565b6040516001600160a01b03909116815260200161028d565b34801561033357600080fd5b506102cd61099a565b34801561034857600080fd5b506102b66103573660046129a6565b610a28565b34801561036857600080fd5b50610372600d5481565b60405190815260200161028d565b34801561038c57600080fd5b50600854610372565b3480156103a157600080fd5b5061037260105481565b3480156103b757600080fd5b506102b66103c6366004612864565b610b3e565b3480156103d757600080fd5b506102816103e6366004612932565b610b6f565b6102b66103f9366004612a73565b610bb2565b34801561040a57600080fd5b506103726104193660046129a6565b611011565b6102b66110a7565b34801561043257600080fd5b506102b6610441366004612864565b611145565b34801561045257600080fd5b50610466610461366004612816565b611160565b60405161028d9190612c4f565b34801561047f57600080fd5b506102b661048e3660046129eb565b611202565b34801561049f57600080fd5b506103726104ae3660046129eb565b611231565b3480156104bf57600080fd5b5060115461028190610100900460ff1681565b3480156104de57600080fd5b506102b66104ed366004612a3e565b6112c4565b3480156104fe57600080fd5b506013546102819060ff1681565b34801561051857600080fd5b506011546102819060ff1681565b34801561053257600080fd5b5061030f6105413660046129eb565b611305565b34801561055257600080fd5b5060135461030f9061010090046001600160a01b031681565b34801561057757600080fd5b50610372610586366004612816565b61137c565b34801561059757600080fd5b506102b6611403565b3480156105ac57600080fd5b506102b66105bb3660046129eb565b611439565b3480156105cc57600080fd5b50600a546001600160a01b031661030f565b3480156105ea57600080fd5b506102cd611468565b3480156105ff57600080fd5b506102b661060e366004612908565b611477565b34801561061f57600080fd5b506102b661153c565b34801561063457600080fd5b506102816106433660046129eb565b60146020526000908152604090205460ff1681565b34801561066457600080fd5b506102b66106733660046128a0565b611577565b34801561068457600080fd5b506102cd6115af565b34801561069957600080fd5b506102cd6106a83660046129eb565b6115bc565b3480156106b957600080fd5b50610372600e5481565b3480156106cf57600080fd5b50610372600f5481565b3480156106e557600080fd5b506102b66106f4366004612a3e565b61173b565b34801561070557600080fd5b50610281610714366004612831565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074e57600080fd5b506102b661075d366004612a3e565b611778565b34801561076e57600080fd5b506102b661077d366004612816565b6117b5565b34801561078e57600080fd5b506102b661079d3660046129d0565b61184d565b60006001600160e01b0319821663780e9d6360e01b14806107c757506107c78261188a565b92915050565b600a546001600160a01b031633146108005760405162461bcd60e51b81526004016107f790612cf8565b60405180910390fd5b6011805460ff1916911515919091179055565b60606000805461082290612e46565b80601f016020809104026020016040519081016040528092919081815260200182805461084e90612e46565b801561089b5780601f106108705761010080835404028352916020019161089b565b820191906000526020600020905b81548152906001019060200180831161087e57829003601f168201915b5050505050905090565b6060600360006108b63360146118da565b905060006108c383611a76565b905060006108d23060146118da565b905060008382846040516020016108eb93929190612aef565b60408051601f198184030181529190529695505050505050565b6000818152600260205260408120546001600160a01b031661097e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107f7565b506000908152600460205260409020546001600160a01b031690565b601280546109a790612e46565b80601f01602080910402602001604051908101604052809291908181526020018280546109d390612e46565b8015610a205780601f106109f557610100808354040283529160200191610a20565b820191906000526020600020905b815481529060010190602001808311610a0357829003601f168201915b505050505081565b6000610a3382611305565b9050806001600160a01b0316836001600160a01b03161415610aa15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107f7565b336001600160a01b0382161480610abd5750610abd8133610714565b610b2f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107f7565b610b398383611b7c565b505050565b610b483382611bea565b610b645760405162461bcd60e51b81526004016107f790612d2d565b610b39838383611cdd565b600080610b7b84611e88565b90506000610b8882611ebb565b9050856001600160a01b0316610b9e8286611ef8565b6001600160a01b0316149695505050505050565b6000610bbd60085490565b60135490915060ff16151560011415610dca57600e54600d556000610be33060146118da565b90506000610bf084611a76565b90506000610bff3360146118da565b9050610c0a83611f77565b9250610c1582611f77565b9150610c2081611f77565b90506000818484604051602001610c3993929190612aef565b60405160208183030381529060405290506000610c5582611e88565b60008181526014602052604090205490915060ff1615610cd25760405162461bcd60e51b815260206004820152603260248201527f5472616e73616374696f6e20616c72656164792065786563757465643a204d696044820152711b9d081c1c9bd8d95cdcc81cdd1bdc1c195960721b60648201526084016107f7565b601354610cee9061010090046001600160a01b0316838a610b6f565b610d4a5760405162461bcd60e51b815260206004820152602760248201527f496e76616c6964207369676e61747572653a204d696e742070726f63657373206044820152661cdd1bdc1c195960ca1b60648201526084016107f7565b86891115610dac5760405162461bcd60e51b815260206004820152602960248201527f416c6c6f636174696f6e2062726561636865643a204d696e742070726f6365736044820152681cc81cdd1bdc1c195960ba1b60648201526084016107f7565b6000908152601460205260409020805460ff19166001179055505050505b60115460ff1615610e2b5760405162461bcd60e51b815260206004820152602560248201527f436f6e7472616374207061757365643a204d696e742070726f636573732073746044820152641bdc1c195960da1b60648201526084016107f7565b60008411610e8e5760405162461bcd60e51b815260206004820152602a60248201527f4d696e7420616d6f756e7420746f6f206c6f773a20204d696e742070726f63656044820152691cdcc81cdd1bdc1c195960b21b60648201526084016107f7565b601054841115610ef45760405162461bcd60e51b815260206004820152602b60248201527f4d696e7420616d6f756e7420746f6f20686967683a20204d696e742070726f6360448201526a195cdcc81cdd1bdc1c195960aa1b60648201526084016107f7565b600f54610f018583612d7e565b1115610f605760405162461bcd60e51b815260206004820152602860248201527f4e6f7420656e6f75676820737570706c793a20204d696e742070726f63657373604482015267081cdd1bdc1c195960c21b60648201526084016107f7565b600a546001600160a01b03163314610fdb5783600d54610f809190612daa565b341015610fdb5760405162461bcd60e51b8152602060048201526024808201527f507269636520746f6f206c6f773a20204d696e742070726f636573732073746f6044820152631c1c195960e21b60648201526084016107f7565b60015b84811161100a57610ff833610ff38385612d7e565b6120cc565b8061100281612e81565b915050610fde565b5050505050565b600061101c8361137c565b821061107e5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016107f7565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146110d15760405162461bcd60e51b81526004016107f790612cf8565b60006110e5600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461112f576040519150601f19603f3d011682016040523d82523d6000602084013e611134565b606091505b505090508061114257600080fd5b50565b610b3983838360405180602001604052806000815250611577565b6060600061116d8361137c565b905060008167ffffffffffffffff81111561118a5761118a612f08565b6040519080825280602002602001820160405280156111b3578160200160208202803683370190505b50905060005b828110156111fa576111cb8582611011565b8282815181106111dd576111dd612ef2565b6020908102919091010152806111f281612e81565b9150506111b9565b509392505050565b600a546001600160a01b0316331461122c5760405162461bcd60e51b81526004016107f790612cf8565b600d55565b600061123c60085490565b821061129f5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107f7565b600882815481106112b2576112b2612ef2565b90600052602060002001549050919050565b600a546001600160a01b031633146112ee5760405162461bcd60e51b81526004016107f790612cf8565b805161130190600b9060208401906126c4565b5050565b6000818152600260205260408120546001600160a01b0316806107c75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107f7565b60006001600160a01b0382166113e75760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107f7565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461142d5760405162461bcd60e51b81526004016107f790612cf8565b61143760006120e6565b565b600a546001600160a01b031633146114635760405162461bcd60e51b81526004016107f790612cf8565b601055565b60606001805461082290612e46565b6001600160a01b0382163314156114d05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107f7565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146115665760405162461bcd60e51b81526004016107f790612cf8565b6011805461ff001916610100179055565b6115813383611bea565b61159d5760405162461bcd60e51b81526004016107f790612d2d565b6115a984848484612138565b50505050565b600c80546109a790612e46565b6000818152600260205260409020546060906001600160a01b031661163b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107f7565b601154610100900460ff166116dc576012805461165790612e46565b80601f016020809104026020016040519081016040528092919081815260200182805461168390612e46565b80156116d05780601f106116a5576101008083540402835291602001916116d0565b820191906000526020600020905b8154815290600101906020018083116116b357829003601f168201915b50505050509050919050565b60006116e661216b565b905060008151116117065760405180602001604052806000815250611734565b8061171084611a76565b600c60405160200161172493929190612b4e565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146117655760405162461bcd60e51b81526004016107f790612cf8565b805161130190600c9060208401906126c4565b600a546001600160a01b031633146117a25760405162461bcd60e51b81526004016107f790612cf8565b80516113019060129060208401906126c4565b600a546001600160a01b031633146117df5760405162461bcd60e51b81526004016107f790612cf8565b6001600160a01b0381166118445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f7565b611142816120e6565b600a546001600160a01b031633146118775760405162461bcd60e51b81526004016107f790612cf8565b6013805460ff1916911515919091179055565b60006001600160e01b031982166380ac58cd60e01b14806118bb57506001600160e01b03198216635b5e139f60e01b145b806107c757506301ffc9a760e01b6001600160e01b03198316146107c7565b606060006118e9836002612daa565b6118f4906002612d7e565b67ffffffffffffffff81111561190c5761190c612f08565b6040519080825280601f01601f191660200182016040528015611936576020820181803683370190505b509050600360fc1b8160008151811061195157611951612ef2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061198057611980612ef2565b60200101906001600160f81b031916908160001a90535060006119a4846002612daa565b6119af906001612d7e565b90505b6001811115611a27576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106119e3576119e3612ef2565b1a60f81b8282815181106119f9576119f9612ef2565b60200101906001600160f81b031916908160001a90535060049490941c93611a2081612e2f565b90506119b2565b5083156117345760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107f7565b606081611a9a5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ac45780611aae81612e81565b9150611abd9050600a83612d96565b9150611a9e565b60008167ffffffffffffffff811115611adf57611adf612f08565b6040519080825280601f01601f191660200182016040528015611b09576020820181803683370190505b5090505b8415611b7457611b1e600183612dc9565b9150611b2b600a86612e9c565b611b36906030612d7e565b60f81b818381518110611b4b57611b4b612ef2565b60200101906001600160f81b031916908160001a905350611b6d600a86612d96565b9450611b0d565b949350505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611bb182611305565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611c635760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107f7565b6000611c6e83611305565b9050806001600160a01b0316846001600160a01b03161480611ca95750836001600160a01b0316611c9e84610905565b6001600160a01b0316145b80611b7457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16611b74565b826001600160a01b0316611cf082611305565b6001600160a01b031614611d585760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107f7565b6001600160a01b038216611dba5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107f7565b611dc583838361217a565b611dd0600082611b7c565b6001600160a01b0383166000908152600360205260408120805460019290611df9908490612dc9565b90915550506001600160a01b0382166000908152600360205260408120805460019290611e27908490612d7e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008082604051602001611e9c9190612b32565b60408051601f1981840301815291905280516020909101209392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526000908190605c01611e9c565b600080600080611f0785612232565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611f62573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b606060008290506000815167ffffffffffffffff811115611f9a57611f9a612f08565b6040519080825280601f01601f191660200182016040528015611fc4576020820181803683370190505b50905060005b82518110156111fa576061838281518110611fe757611fe7612ef2565b016020015160f81c108015906120175750607a83828151811061200c5761200c612ef2565b016020015160f81c11155b1561207357602083828151811061203057612030612ef2565b0160200151612042919060f81c612de0565b60f81b82828151811061205757612057612ef2565b60200101906001600160f81b031916908160001a9053506120ba565b82818151811061208557612085612ef2565b602001015160f81c60f81b8282815181106120a2576120a2612ef2565b60200101906001600160f81b031916908160001a9053505b806120c481612e81565b915050611fca565b6113018282604051806020016040528060008152506122a6565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612143848484611cdd565b61214f848484846122d9565b6115a95760405162461bcd60e51b81526004016107f790612ca6565b6060600b805461082290612e46565b6001600160a01b0383166121d5576121d081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6121f8565b816001600160a01b0316836001600160a01b0316146121f8576121f883826123e6565b6001600160a01b03821661220f57610b3981612483565b826001600160a01b0316826001600160a01b031614610b3957610b398282612532565b600080600083516041146122885760405162461bcd60e51b815260206004820152601860248201527f496e766c616964207369676e6174757265206c656e677468000000000000000060448201526064016107f7565b50505060208101516040820151606090920151909260009190911a90565b6122b08383612576565b6122bd60008484846122d9565b610b395760405162461bcd60e51b81526004016107f790612ca6565b60006001600160a01b0384163b156123db57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061231d903390899088908890600401612c12565b602060405180830381600087803b15801561233757600080fd5b505af1925050508015612367575060408051601f3d908101601f1916820190925261236491810190612a21565b60015b6123c1573d808015612395576040519150601f19603f3d011682016040523d82523d6000602084013e61239a565b606091505b5080516123b95760405162461bcd60e51b81526004016107f790612ca6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611b74565b506001949350505050565b600060016123f38461137c565b6123fd9190612dc9565b600083815260076020526040902054909150808214612450576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061249590600190612dc9565b600083815260096020526040812054600880549394509092849081106124bd576124bd612ef2565b9060005260206000200154905080600883815481106124de576124de612ef2565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061251657612516612edc565b6001900381819060005260206000200160009055905550505050565b600061253d8361137c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166125cc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107f7565b6000818152600260205260409020546001600160a01b0316156126315760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107f7565b61263d6000838361217a565b6001600160a01b0382166000908152600360205260408120805460019290612666908490612d7e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546126d090612e46565b90600052602060002090601f0160209004810192826126f25760008555612738565b82601f1061270b57805160ff1916838001178555612738565b82800160010185558215612738579182015b8281111561273857825182559160200191906001019061271d565b50612744929150612748565b5090565b5b808211156127445760008155600101612749565b80356001600160a01b038116811461277457600080fd5b919050565b8035801515811461277457600080fd5b600082601f83011261279a57600080fd5b813567ffffffffffffffff808211156127b5576127b5612f08565b604051601f8301601f19908116603f011681019082821181831017156127dd576127dd612f08565b816040528381528660208588010111156127f657600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561282857600080fd5b6117348261275d565b6000806040838503121561284457600080fd5b61284d8361275d565b915061285b6020840161275d565b90509250929050565b60008060006060848603121561287957600080fd5b6128828461275d565b92506128906020850161275d565b9150604084013590509250925092565b600080600080608085870312156128b657600080fd5b6128bf8561275d565b93506128cd6020860161275d565b925060408501359150606085013567ffffffffffffffff8111156128f057600080fd5b6128fc87828801612789565b91505092959194509250565b6000806040838503121561291b57600080fd5b6129248361275d565b915061285b60208401612779565b60008060006060848603121561294757600080fd5b6129508461275d565b9250602084013567ffffffffffffffff8082111561296d57600080fd5b61297987838801612789565b9350604086013591508082111561298f57600080fd5b5061299c86828701612789565b9150509250925092565b600080604083850312156129b957600080fd5b6129c28361275d565b946020939093013593505050565b6000602082840312156129e257600080fd5b61173482612779565b6000602082840312156129fd57600080fd5b5035919050565b600060208284031215612a1657600080fd5b813561173481612f1e565b600060208284031215612a3357600080fd5b815161173481612f1e565b600060208284031215612a5057600080fd5b813567ffffffffffffffff811115612a6757600080fd5b611b7484828501612789565b600080600060608486031215612a8857600080fd5b83359250602084013567ffffffffffffffff811115612aa657600080fd5b612ab286828701612789565b925050604084013590509250925092565b60008151808452612adb816020860160208601612e03565b601f01601f19169290920160200192915050565b60008451612b01818460208901612e03565b845190830190612b15818360208901612e03565b8451910190612b28818360208801612e03565b0195945050505050565b60008251612b44818460208701612e03565b9190910192915050565b600084516020612b618285838a01612e03565b855191840191612b748184848a01612e03565b8554920191600090600181811c9080831680612b9157607f831692505b858310811415612baf57634e487b7160e01b85526022600452602485fd5b808015612bc35760018114612bd457612c01565b60ff19851688528388019550612c01565b60008b81526020902060005b85811015612bf95781548a820152908401908801612be0565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c4590830184612ac3565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612c8757835183529284019291840191600101612c6b565b50909695505050505050565b6020815260006117346020830184612ac3565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612d9157612d91612eb0565b500190565b600082612da557612da5612ec6565b500490565b6000816000190483118215151615612dc457612dc4612eb0565b500290565b600082821015612ddb57612ddb612eb0565b500390565b600060ff821660ff841680821015612dfa57612dfa612eb0565b90039392505050565b60005b83811015612e1e578181015183820152602001612e06565b838111156115a95750506000910152565b600081612e3e57612e3e612eb0565b506000190190565b600181811c90821680612e5a57607f821691505b60208210811415612e7b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612e9557612e95612eb0565b5060010190565b600082612eab57612eab612ec6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461114257600080fdfea26469706673582212205febfc4ff226a1267203c59c8ea668fe42b50a95ac7de39722a3169904311c4964736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000d4e4654204d696e7420436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054e46544d430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e64484750774a79533873785354785a715357675a6a53656a71736446783647546a5033626772584d6a34432f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6648743255774c3968594b394d5261556a37794a72415a786e456231457a414a4a4a6557686947326f4156582f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061025c5760003560e01c80635a7adf7f11610144578063a9fcfb33116100b6578063d5abeb011161007a578063d5abeb01146106c3578063da3ef23f146106d9578063e985e9c5146106f9578063f2c4ce1e14610742578063f2fde38b14610762578063fe4702ea1461078257600080fd5b8063a9fcfb3314610628578063b88d4fde14610658578063c668286214610678578063c87b56dd1461068d578063cc9ff9c6146106ad57600080fd5b8063715018a611610108578063715018a61461058b5780637f00c7a6146105a05780638da5cb5b146105c057806395d89b41146105de578063a22cb465146105f3578063a475b5dd1461061357600080fd5b80635a7adf7f146104f25780635c975abb1461050c5780636352211e1461052657806363ffab311461054657806370a082311461056b57600080fd5b806323b872dd116101dd57806342842e0e116101a157806342842e0e14610426578063438b63001461044657806344a0d68a146104735780634f6ccce71461049357806351830227146104b357806355f804b3146104d257600080fd5b806323b872dd146103ab5780632dd34f0f146103cb5780632e87871d146103eb5780632f745c59146103fe5780633ccfd60b1461041e57600080fd5b8063081c8c4411610224578063081c8c4414610327578063095ea7b31461033c57806313faede61461035c57806318160ddd14610380578063239c70ae1461039557600080fd5b806301ffc9a71461026157806302329a291461029657806306fdde03146102b857806307bc8829146102da578063081812fc146102ef575b600080fd5b34801561026d57600080fd5b5061028161027c366004612a04565b6107a2565b60405190151581526020015b60405180910390f35b3480156102a257600080fd5b506102b66102b13660046129d0565b6107cd565b005b3480156102c457600080fd5b506102cd610813565b60405161028d9190612c93565b3480156102e657600080fd5b506102cd6108a5565b3480156102fb57600080fd5b5061030f61030a3660046129eb565b610905565b6040516001600160a01b03909116815260200161028d565b34801561033357600080fd5b506102cd61099a565b34801561034857600080fd5b506102b66103573660046129a6565b610a28565b34801561036857600080fd5b50610372600d5481565b60405190815260200161028d565b34801561038c57600080fd5b50600854610372565b3480156103a157600080fd5b5061037260105481565b3480156103b757600080fd5b506102b66103c6366004612864565b610b3e565b3480156103d757600080fd5b506102816103e6366004612932565b610b6f565b6102b66103f9366004612a73565b610bb2565b34801561040a57600080fd5b506103726104193660046129a6565b611011565b6102b66110a7565b34801561043257600080fd5b506102b6610441366004612864565b611145565b34801561045257600080fd5b50610466610461366004612816565b611160565b60405161028d9190612c4f565b34801561047f57600080fd5b506102b661048e3660046129eb565b611202565b34801561049f57600080fd5b506103726104ae3660046129eb565b611231565b3480156104bf57600080fd5b5060115461028190610100900460ff1681565b3480156104de57600080fd5b506102b66104ed366004612a3e565b6112c4565b3480156104fe57600080fd5b506013546102819060ff1681565b34801561051857600080fd5b506011546102819060ff1681565b34801561053257600080fd5b5061030f6105413660046129eb565b611305565b34801561055257600080fd5b5060135461030f9061010090046001600160a01b031681565b34801561057757600080fd5b50610372610586366004612816565b61137c565b34801561059757600080fd5b506102b6611403565b3480156105ac57600080fd5b506102b66105bb3660046129eb565b611439565b3480156105cc57600080fd5b50600a546001600160a01b031661030f565b3480156105ea57600080fd5b506102cd611468565b3480156105ff57600080fd5b506102b661060e366004612908565b611477565b34801561061f57600080fd5b506102b661153c565b34801561063457600080fd5b506102816106433660046129eb565b60146020526000908152604090205460ff1681565b34801561066457600080fd5b506102b66106733660046128a0565b611577565b34801561068457600080fd5b506102cd6115af565b34801561069957600080fd5b506102cd6106a83660046129eb565b6115bc565b3480156106b957600080fd5b50610372600e5481565b3480156106cf57600080fd5b50610372600f5481565b3480156106e557600080fd5b506102b66106f4366004612a3e565b61173b565b34801561070557600080fd5b50610281610714366004612831565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074e57600080fd5b506102b661075d366004612a3e565b611778565b34801561076e57600080fd5b506102b661077d366004612816565b6117b5565b34801561078e57600080fd5b506102b661079d3660046129d0565b61184d565b60006001600160e01b0319821663780e9d6360e01b14806107c757506107c78261188a565b92915050565b600a546001600160a01b031633146108005760405162461bcd60e51b81526004016107f790612cf8565b60405180910390fd5b6011805460ff1916911515919091179055565b60606000805461082290612e46565b80601f016020809104026020016040519081016040528092919081815260200182805461084e90612e46565b801561089b5780601f106108705761010080835404028352916020019161089b565b820191906000526020600020905b81548152906001019060200180831161087e57829003601f168201915b5050505050905090565b6060600360006108b63360146118da565b905060006108c383611a76565b905060006108d23060146118da565b905060008382846040516020016108eb93929190612aef565b60408051601f198184030181529190529695505050505050565b6000818152600260205260408120546001600160a01b031661097e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107f7565b506000908152600460205260409020546001600160a01b031690565b601280546109a790612e46565b80601f01602080910402602001604051908101604052809291908181526020018280546109d390612e46565b8015610a205780601f106109f557610100808354040283529160200191610a20565b820191906000526020600020905b815481529060010190602001808311610a0357829003601f168201915b505050505081565b6000610a3382611305565b9050806001600160a01b0316836001600160a01b03161415610aa15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107f7565b336001600160a01b0382161480610abd5750610abd8133610714565b610b2f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107f7565b610b398383611b7c565b505050565b610b483382611bea565b610b645760405162461bcd60e51b81526004016107f790612d2d565b610b39838383611cdd565b600080610b7b84611e88565b90506000610b8882611ebb565b9050856001600160a01b0316610b9e8286611ef8565b6001600160a01b0316149695505050505050565b6000610bbd60085490565b60135490915060ff16151560011415610dca57600e54600d556000610be33060146118da565b90506000610bf084611a76565b90506000610bff3360146118da565b9050610c0a83611f77565b9250610c1582611f77565b9150610c2081611f77565b90506000818484604051602001610c3993929190612aef565b60405160208183030381529060405290506000610c5582611e88565b60008181526014602052604090205490915060ff1615610cd25760405162461bcd60e51b815260206004820152603260248201527f5472616e73616374696f6e20616c72656164792065786563757465643a204d696044820152711b9d081c1c9bd8d95cdcc81cdd1bdc1c195960721b60648201526084016107f7565b601354610cee9061010090046001600160a01b0316838a610b6f565b610d4a5760405162461bcd60e51b815260206004820152602760248201527f496e76616c6964207369676e61747572653a204d696e742070726f63657373206044820152661cdd1bdc1c195960ca1b60648201526084016107f7565b86891115610dac5760405162461bcd60e51b815260206004820152602960248201527f416c6c6f636174696f6e2062726561636865643a204d696e742070726f6365736044820152681cc81cdd1bdc1c195960ba1b60648201526084016107f7565b6000908152601460205260409020805460ff19166001179055505050505b60115460ff1615610e2b5760405162461bcd60e51b815260206004820152602560248201527f436f6e7472616374207061757365643a204d696e742070726f636573732073746044820152641bdc1c195960da1b60648201526084016107f7565b60008411610e8e5760405162461bcd60e51b815260206004820152602a60248201527f4d696e7420616d6f756e7420746f6f206c6f773a20204d696e742070726f63656044820152691cdcc81cdd1bdc1c195960b21b60648201526084016107f7565b601054841115610ef45760405162461bcd60e51b815260206004820152602b60248201527f4d696e7420616d6f756e7420746f6f20686967683a20204d696e742070726f6360448201526a195cdcc81cdd1bdc1c195960aa1b60648201526084016107f7565b600f54610f018583612d7e565b1115610f605760405162461bcd60e51b815260206004820152602860248201527f4e6f7420656e6f75676820737570706c793a20204d696e742070726f63657373604482015267081cdd1bdc1c195960c21b60648201526084016107f7565b600a546001600160a01b03163314610fdb5783600d54610f809190612daa565b341015610fdb5760405162461bcd60e51b8152602060048201526024808201527f507269636520746f6f206c6f773a20204d696e742070726f636573732073746f6044820152631c1c195960e21b60648201526084016107f7565b60015b84811161100a57610ff833610ff38385612d7e565b6120cc565b8061100281612e81565b915050610fde565b5050505050565b600061101c8361137c565b821061107e5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016107f7565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146110d15760405162461bcd60e51b81526004016107f790612cf8565b60006110e5600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461112f576040519150601f19603f3d011682016040523d82523d6000602084013e611134565b606091505b505090508061114257600080fd5b50565b610b3983838360405180602001604052806000815250611577565b6060600061116d8361137c565b905060008167ffffffffffffffff81111561118a5761118a612f08565b6040519080825280602002602001820160405280156111b3578160200160208202803683370190505b50905060005b828110156111fa576111cb8582611011565b8282815181106111dd576111dd612ef2565b6020908102919091010152806111f281612e81565b9150506111b9565b509392505050565b600a546001600160a01b0316331461122c5760405162461bcd60e51b81526004016107f790612cf8565b600d55565b600061123c60085490565b821061129f5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107f7565b600882815481106112b2576112b2612ef2565b90600052602060002001549050919050565b600a546001600160a01b031633146112ee5760405162461bcd60e51b81526004016107f790612cf8565b805161130190600b9060208401906126c4565b5050565b6000818152600260205260408120546001600160a01b0316806107c75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107f7565b60006001600160a01b0382166113e75760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107f7565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461142d5760405162461bcd60e51b81526004016107f790612cf8565b61143760006120e6565b565b600a546001600160a01b031633146114635760405162461bcd60e51b81526004016107f790612cf8565b601055565b60606001805461082290612e46565b6001600160a01b0382163314156114d05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107f7565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146115665760405162461bcd60e51b81526004016107f790612cf8565b6011805461ff001916610100179055565b6115813383611bea565b61159d5760405162461bcd60e51b81526004016107f790612d2d565b6115a984848484612138565b50505050565b600c80546109a790612e46565b6000818152600260205260409020546060906001600160a01b031661163b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107f7565b601154610100900460ff166116dc576012805461165790612e46565b80601f016020809104026020016040519081016040528092919081815260200182805461168390612e46565b80156116d05780601f106116a5576101008083540402835291602001916116d0565b820191906000526020600020905b8154815290600101906020018083116116b357829003601f168201915b50505050509050919050565b60006116e661216b565b905060008151116117065760405180602001604052806000815250611734565b8061171084611a76565b600c60405160200161172493929190612b4e565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146117655760405162461bcd60e51b81526004016107f790612cf8565b805161130190600c9060208401906126c4565b600a546001600160a01b031633146117a25760405162461bcd60e51b81526004016107f790612cf8565b80516113019060129060208401906126c4565b600a546001600160a01b031633146117df5760405162461bcd60e51b81526004016107f790612cf8565b6001600160a01b0381166118445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f7565b611142816120e6565b600a546001600160a01b031633146118775760405162461bcd60e51b81526004016107f790612cf8565b6013805460ff1916911515919091179055565b60006001600160e01b031982166380ac58cd60e01b14806118bb57506001600160e01b03198216635b5e139f60e01b145b806107c757506301ffc9a760e01b6001600160e01b03198316146107c7565b606060006118e9836002612daa565b6118f4906002612d7e565b67ffffffffffffffff81111561190c5761190c612f08565b6040519080825280601f01601f191660200182016040528015611936576020820181803683370190505b509050600360fc1b8160008151811061195157611951612ef2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061198057611980612ef2565b60200101906001600160f81b031916908160001a90535060006119a4846002612daa565b6119af906001612d7e565b90505b6001811115611a27576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106119e3576119e3612ef2565b1a60f81b8282815181106119f9576119f9612ef2565b60200101906001600160f81b031916908160001a90535060049490941c93611a2081612e2f565b90506119b2565b5083156117345760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107f7565b606081611a9a5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ac45780611aae81612e81565b9150611abd9050600a83612d96565b9150611a9e565b60008167ffffffffffffffff811115611adf57611adf612f08565b6040519080825280601f01601f191660200182016040528015611b09576020820181803683370190505b5090505b8415611b7457611b1e600183612dc9565b9150611b2b600a86612e9c565b611b36906030612d7e565b60f81b818381518110611b4b57611b4b612ef2565b60200101906001600160f81b031916908160001a905350611b6d600a86612d96565b9450611b0d565b949350505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611bb182611305565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611c635760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107f7565b6000611c6e83611305565b9050806001600160a01b0316846001600160a01b03161480611ca95750836001600160a01b0316611c9e84610905565b6001600160a01b0316145b80611b7457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16611b74565b826001600160a01b0316611cf082611305565b6001600160a01b031614611d585760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107f7565b6001600160a01b038216611dba5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107f7565b611dc583838361217a565b611dd0600082611b7c565b6001600160a01b0383166000908152600360205260408120805460019290611df9908490612dc9565b90915550506001600160a01b0382166000908152600360205260408120805460019290611e27908490612d7e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008082604051602001611e9c9190612b32565b60408051601f1981840301815291905280516020909101209392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526000908190605c01611e9c565b600080600080611f0785612232565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611f62573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b606060008290506000815167ffffffffffffffff811115611f9a57611f9a612f08565b6040519080825280601f01601f191660200182016040528015611fc4576020820181803683370190505b50905060005b82518110156111fa576061838281518110611fe757611fe7612ef2565b016020015160f81c108015906120175750607a83828151811061200c5761200c612ef2565b016020015160f81c11155b1561207357602083828151811061203057612030612ef2565b0160200151612042919060f81c612de0565b60f81b82828151811061205757612057612ef2565b60200101906001600160f81b031916908160001a9053506120ba565b82818151811061208557612085612ef2565b602001015160f81c60f81b8282815181106120a2576120a2612ef2565b60200101906001600160f81b031916908160001a9053505b806120c481612e81565b915050611fca565b6113018282604051806020016040528060008152506122a6565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612143848484611cdd565b61214f848484846122d9565b6115a95760405162461bcd60e51b81526004016107f790612ca6565b6060600b805461082290612e46565b6001600160a01b0383166121d5576121d081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6121f8565b816001600160a01b0316836001600160a01b0316146121f8576121f883826123e6565b6001600160a01b03821661220f57610b3981612483565b826001600160a01b0316826001600160a01b031614610b3957610b398282612532565b600080600083516041146122885760405162461bcd60e51b815260206004820152601860248201527f496e766c616964207369676e6174757265206c656e677468000000000000000060448201526064016107f7565b50505060208101516040820151606090920151909260009190911a90565b6122b08383612576565b6122bd60008484846122d9565b610b395760405162461bcd60e51b81526004016107f790612ca6565b60006001600160a01b0384163b156123db57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061231d903390899088908890600401612c12565b602060405180830381600087803b15801561233757600080fd5b505af1925050508015612367575060408051601f3d908101601f1916820190925261236491810190612a21565b60015b6123c1573d808015612395576040519150601f19603f3d011682016040523d82523d6000602084013e61239a565b606091505b5080516123b95760405162461bcd60e51b81526004016107f790612ca6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611b74565b506001949350505050565b600060016123f38461137c565b6123fd9190612dc9565b600083815260076020526040902054909150808214612450576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061249590600190612dc9565b600083815260096020526040812054600880549394509092849081106124bd576124bd612ef2565b9060005260206000200154905080600883815481106124de576124de612ef2565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061251657612516612edc565b6001900381819060005260206000200160009055905550505050565b600061253d8361137c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166125cc5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107f7565b6000818152600260205260409020546001600160a01b0316156126315760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107f7565b61263d6000838361217a565b6001600160a01b0382166000908152600360205260408120805460019290612666908490612d7e565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546126d090612e46565b90600052602060002090601f0160209004810192826126f25760008555612738565b82601f1061270b57805160ff1916838001178555612738565b82800160010185558215612738579182015b8281111561273857825182559160200191906001019061271d565b50612744929150612748565b5090565b5b808211156127445760008155600101612749565b80356001600160a01b038116811461277457600080fd5b919050565b8035801515811461277457600080fd5b600082601f83011261279a57600080fd5b813567ffffffffffffffff808211156127b5576127b5612f08565b604051601f8301601f19908116603f011681019082821181831017156127dd576127dd612f08565b816040528381528660208588010111156127f657600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561282857600080fd5b6117348261275d565b6000806040838503121561284457600080fd5b61284d8361275d565b915061285b6020840161275d565b90509250929050565b60008060006060848603121561287957600080fd5b6128828461275d565b92506128906020850161275d565b9150604084013590509250925092565b600080600080608085870312156128b657600080fd5b6128bf8561275d565b93506128cd6020860161275d565b925060408501359150606085013567ffffffffffffffff8111156128f057600080fd5b6128fc87828801612789565b91505092959194509250565b6000806040838503121561291b57600080fd5b6129248361275d565b915061285b60208401612779565b60008060006060848603121561294757600080fd5b6129508461275d565b9250602084013567ffffffffffffffff8082111561296d57600080fd5b61297987838801612789565b9350604086013591508082111561298f57600080fd5b5061299c86828701612789565b9150509250925092565b600080604083850312156129b957600080fd5b6129c28361275d565b946020939093013593505050565b6000602082840312156129e257600080fd5b61173482612779565b6000602082840312156129fd57600080fd5b5035919050565b600060208284031215612a1657600080fd5b813561173481612f1e565b600060208284031215612a3357600080fd5b815161173481612f1e565b600060208284031215612a5057600080fd5b813567ffffffffffffffff811115612a6757600080fd5b611b7484828501612789565b600080600060608486031215612a8857600080fd5b83359250602084013567ffffffffffffffff811115612aa657600080fd5b612ab286828701612789565b925050604084013590509250925092565b60008151808452612adb816020860160208601612e03565b601f01601f19169290920160200192915050565b60008451612b01818460208901612e03565b845190830190612b15818360208901612e03565b8451910190612b28818360208801612e03565b0195945050505050565b60008251612b44818460208701612e03565b9190910192915050565b600084516020612b618285838a01612e03565b855191840191612b748184848a01612e03565b8554920191600090600181811c9080831680612b9157607f831692505b858310811415612baf57634e487b7160e01b85526022600452602485fd5b808015612bc35760018114612bd457612c01565b60ff19851688528388019550612c01565b60008b81526020902060005b85811015612bf95781548a820152908401908801612be0565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c4590830184612ac3565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612c8757835183529284019291840191600101612c6b565b50909695505050505050565b6020815260006117346020830184612ac3565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612d9157612d91612eb0565b500190565b600082612da557612da5612ec6565b500490565b6000816000190483118215151615612dc457612dc4612eb0565b500290565b600082821015612ddb57612ddb612eb0565b500390565b600060ff821660ff841680821015612dfa57612dfa612eb0565b90039392505050565b60005b83811015612e1e578181015183820152602001612e06565b838111156115a95750506000910152565b600081612e3e57612e3e612eb0565b506000190190565b600181811c90821680612e5a57607f821691505b60208210811415612e7b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612e9557612e95612eb0565b5060010190565b600082612eab57612eab612ec6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461114257600080fdfea26469706673582212205febfc4ff226a1267203c59c8ea668fe42b50a95ac7de39722a3169904311c4964736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000d4e4654204d696e7420436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054e46544d430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e64484750774a79533873785354785a715357675a6a53656a71736446783647546a5033626772584d6a34432f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6648743255774c3968594b394d5261556a37794a72415a786e456231457a414a4a4a6557686947326f4156582f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): NFT Mint Club
Arg [1] : _symbol (string): NFTMC
Arg [2] : _initBaseURI (string): ipfs://QmNdHGPwJyS8sxSTxZqSWgZjSejqsdFx6GTjP3bgrXMj4C/
Arg [3] : _initNotRevealedUri (string): ipfs://QmfHt2UwL9hYK9MRaUj7yJrAZxnEb1EzAJJJeWhiG2oAVX/hidden.json

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [5] : 4e4654204d696e7420436c756200000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 4e46544d43000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d4e64484750774a79533873785354785a715357675a6a53
Arg [10] : 656a71736446783647546a5033626772584d6a34432f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [12] : 697066733a2f2f516d6648743255774c3968594b394d5261556a37794a72415a
Arg [13] : 786e456231457a414a4a4a6557686947326f4156582f68696464656e2e6a736f
Arg [14] : 6e00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

31063:6908:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23915:224;;;;;;;;;;-1:-1:-1;23915:224:0;;;;;:::i;:::-;;:::i;:::-;;;10230:14:1;;10223:22;10205:41;;10193:2;10178:18;23915:224:0;;;;;;;;35821:73;;;;;;;;;;-1:-1:-1;35821:73:0;;;;;:::i;:::-;;:::i;:::-;;11815:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32010:588::-;;;;;;;;;;;;;:::i;13374:221::-;;;;;;;;;;-1:-1:-1;13374:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8891:32:1;;;8873:51;;8861:2;8846:18;13374:221:0;8727:203:1;31422:28:0;;;;;;;;;;;;;:::i;12897:411::-;;;;;;;;;;-1:-1:-1;12897:411:0;;;;;:::i;:::-;;:::i;31203:32::-;;;;;;;;;;;;;;;;;;;22231:25:1;;;22219:2;22204:18;31203:32:0;22085:177:1;24555:113:0;;;;;;;;;;-1:-1:-1;24643:10:0;:17;24555:113;;31320:33;;;;;;;;;;;;;;;;14264:339;;;;;;;;;;-1:-1:-1;14264:339:0;;;;;:::i;:::-;;:::i;36158:295::-;;;;;;;;;;-1:-1:-1;36158:295:0;;;;;:::i;:::-;;:::i;32620:1697::-;;;;;;:::i;:::-;;:::i;24223:256::-;;;;;;;;;;-1:-1:-1;24223:256:0;;;;;:::i;:::-;;:::i;35990:145::-;;;:::i;14674:185::-;;;;;;;;;;-1:-1:-1;14674:185:0;;;;;:::i;:::-;;:::i;34323:348::-;;;;;;;;;;-1:-1:-1;34323:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35253:80::-;;;;;;;;;;-1:-1:-1;35253:80:0;;;;;:::i;:::-;;:::i;24745:233::-;;;;;;;;;;-1:-1:-1;24745:233:0;;;;;:::i;:::-;;:::i;31389:28::-;;;;;;;;;;-1:-1:-1;31389:28:0;;;;;;;;;;;35589:98;;;;;;;;;;-1:-1:-1;35589:98:0;;;;;:::i;:::-;;:::i;31455:27::-;;;;;;;;;;-1:-1:-1;31455:27:0;;;;;;;;31358:26;;;;;;;;;;-1:-1:-1;31358:26:0;;;;;;;;11509:239;;;;;;;;;;-1:-1:-1;11509:239:0;;;;;:::i;:::-;;:::i;31487:69::-;;;;;;;;;;-1:-1:-1;31487:69:0;;;;;;;-1:-1:-1;;;;;31487:69:0;;;11239:208;;;;;;;;;;-1:-1:-1;11239:208:0;;;;;:::i;:::-;;:::i;30546:94::-;;;;;;;;;;;;;:::i;35339:116::-;;;;;;;;;;-1:-1:-1;35339:116:0;;;;;:::i;:::-;;:::i;30323:87::-;;;;;;;;;;-1:-1:-1;30396:6:0;;-1:-1:-1;;;;;30396:6:0;30323:87;;11984:104;;;;;;;;;;;;;:::i;13667:295::-;;;;;;;;;;-1:-1:-1;13667:295:0;;;;;:::i;:::-;;:::i;35180:65::-;;;;;;;;;;;;;:::i;31581:40::-;;;;;;;;;;-1:-1:-1;31581:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14930:328;;;;;;;;;;-1:-1:-1;14930:328:0;;;;;:::i;:::-;;:::i;31161:37::-;;;;;;;;;;;;;:::i;34677:497::-;;;;;;;;;;-1:-1:-1;34677:497:0;;;;;:::i;:::-;;:::i;31240:39::-;;;;;;;;;;;;;;;;31284:31;;;;;;;;;;;;;;;;35693:122;;;;;;;;;;-1:-1:-1;35693:122:0;;;;;:::i;:::-;;:::i;14033:164::-;;;;;;;;;;-1:-1:-1;14033:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;14154:25:0;;;14130:4;14154:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;14033:164;35463:120;;;;;;;;;;-1:-1:-1;35463:120:0;;;;;:::i;:::-;;:::i;30648:192::-;;;;;;;;;;-1:-1:-1;30648:192:0;;;;;:::i;:::-;;:::i;35902:81::-;;;;;;;;;;-1:-1:-1;35902:81:0;;;;;:::i;:::-;;:::i;23915:224::-;24017:4;-1:-1:-1;;;;;;24041:50:0;;-1:-1:-1;;;24041:50:0;;:90;;;24095:36;24119:11;24095:23;:36::i;:::-;24034:97;23915:224;-1:-1:-1;;23915:224:0:o;35821:73::-;30396:6;;-1:-1:-1;;;;;30396:6:0;9424:10;30458:23;30450:68;;;;-1:-1:-1;;;30450:68:0;;;;;;;:::i;:::-;;;;;;;;;35873:6:::1;:15:::0;;-1:-1:-1;;35873:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35821:73::o;11815:100::-;11869:13;11902:5;11895:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11815:100;:::o;32010:588::-;32051:13;32178:1;32156:19;32215:53;32251:10;32265:2;32215:19;:53::i;:::-;32186:82;;32275:30;32308:29;32325:11;32308:16;:29::i;:::-;32275:62;-1:-1:-1;32346:28:0;32377:56;32421:4;32430:2;32377:19;:56::i;:::-;32346:87;;32441:26;32496:12;32517:14;32540:16;32477:81;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;32477:81:0;;;;;;;;;;32010:588;-1:-1:-1;;;;;;32010:588:0:o;13374:221::-;13450:7;16857:16;;;:7;:16;;;;;;-1:-1:-1;;;;;16857:16:0;13470:73;;;;-1:-1:-1;;;13470:73:0;;17460:2:1;13470:73:0;;;17442:21:1;17499:2;17479:18;;;17472:30;17538:34;17518:18;;;17511:62;-1:-1:-1;;;17589:18:1;;;17582:42;17641:19;;13470:73:0;17258:408:1;13470:73:0;-1:-1:-1;13563:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;13563:24:0;;13374:221::o;31422:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12897:411::-;12978:13;12994:23;13009:7;12994:14;:23::i;:::-;12978:39;;13042:5;-1:-1:-1;;;;;13036:11:0;:2;-1:-1:-1;;;;;13036:11:0;;;13028:57;;;;-1:-1:-1;;;13028:57:0;;19821:2:1;13028:57:0;;;19803:21:1;19860:2;19840:18;;;19833:30;19899:34;19879:18;;;19872:62;-1:-1:-1;;;19950:18:1;;;19943:31;19991:19;;13028:57:0;19619:397:1;13028:57:0;9424:10;-1:-1:-1;;;;;13120:21:0;;;;:62;;-1:-1:-1;13145:37:0;13162:5;9424:10;14033:164;:::i;13145:37::-;13098:168;;;;-1:-1:-1;;;13098:168:0;;15853:2:1;13098:168:0;;;15835:21:1;15892:2;15872:18;;;15865:30;15931:34;15911:18;;;15904:62;16002:26;15982:18;;;15975:54;16046:19;;13098:168:0;15651:420:1;13098:168:0;13279:21;13288:2;13292:7;13279:8;:21::i;:::-;12967:341;12897:411;;:::o;14264:339::-;14459:41;9424:10;14492:7;14459:18;:41::i;:::-;14451:103;;;;-1:-1:-1;;;14451:103:0;;;;;;;:::i;:::-;14567:28;14577:4;14583:2;14587:7;14567:9;:28::i;36158:295::-;36255:4;36269:19;36291:24;36306:8;36291:14;:24::i;:::-;36269:46;;36322:28;36353:36;36377:11;36353:23;:36::i;:::-;36322:67;;36442:7;-1:-1:-1;;;;;36403:46:0;:35;36411:20;36433:4;36403:7;:35::i;:::-;-1:-1:-1;;;;;36403:46:0;;;36158:295;-1:-1:-1;;;;;;36158:295:0:o;32620:1697::-;32717:14;32734:13;24643:10;:17;;24555:113;32734:13;32776:7;;32717:30;;-1:-1:-1;32776:7:0;;:15;;:7;:15;32772:964;;;32812:11;;32805:4;:18;-1:-1:-1;32866:56:0;32910:4;32919:2;32866:19;:56::i;:::-;32835:87;;32932:30;32965:29;32982:11;32965:16;:29::i;:::-;32932:62;-1:-1:-1;33004:26:0;33033:53;33069:10;33083:2;33033:19;:53::i;:::-;33004:82;;33113:23;33121:14;33113:7;:23::i;:::-;33096:40;;33165:25;33173:16;33165:7;:25::i;:::-;33146:44;;33215:21;33223:12;33215:7;:21::i;:::-;33200:36;;33246:26;33301:12;33322:14;33345:16;33282:81;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33246:118;;33373:14;33390:28;33405:12;33390:14;:28::i;:::-;33434:16;;;;:8;:16;;;;;;33373:45;;-1:-1:-1;33434:16:0;;33433:17;33425:80;;;;-1:-1:-1;;;33425:80:0;;21868:2:1;33425:80:0;;;21850:21:1;21907:2;21887:18;;;21880:30;21946:34;21926:18;;;21919:62;-1:-1:-1;;;21997:18:1;;;21990:48;22055:19;;33425:80:0;21666:414:1;33425:80:0;33527:9;;33520:37;;33527:9;;;-1:-1:-1;;;;;33527:9:0;33538:12;33552:4;33520:6;:37::i;:::-;33512:89;;;;-1:-1:-1;;;33512:89:0;;17873:2:1;33512:89:0;;;17855:21:1;17912:2;17892:18;;;17885:30;17951:34;17931:18;;;17924:62;-1:-1:-1;;;18002:18:1;;;17995:37;18049:19;;33512:89:0;17671:403:1;33512:89:0;33631:11;33616;:26;;33608:80;;;;-1:-1:-1;;;33608:80:0;;13453:2:1;33608:80:0;;;13435:21:1;13492:2;13472:18;;;13465:30;13531:34;13511:18;;;13504:62;-1:-1:-1;;;13582:18:1;;;13575:39;13631:19;;33608:80:0;13251:405:1;33608:80:0;33695:16;;;;:8;:16;;;;;:23;;-1:-1:-1;;33695:23:0;33714:4;33695:23;;;-1:-1:-1;;;;32772:964:0;33769:6;;;;33768:7;33760:57;;;;-1:-1:-1;;;33760:57:0;;13863:2:1;33760:57:0;;;13845:21:1;13902:2;13882:18;;;13875:30;13941:34;13921:18;;;13914:62;-1:-1:-1;;;13992:18:1;;;13985:35;14037:19;;33760:57:0;13661:401:1;33760:57:0;33846:1;33832:11;:15;33824:70;;;;-1:-1:-1;;;33824:70:0;;11447:2:1;33824:70:0;;;11429:21:1;11486:2;11466:18;;;11459:30;11525:34;11505:18;;;11498:62;-1:-1:-1;;;11576:18:1;;;11569:40;11626:19;;33824:70:0;11245:406:1;33824:70:0;33924:13;;33909:11;:28;;33901:84;;;;-1:-1:-1;;;33901:84:0;;15028:2:1;33901:84:0;;;15010:21:1;15067:2;15047:18;;;15040:30;15106:34;15086:18;;;15079:62;-1:-1:-1;;;15157:18:1;;;15150:41;15208:19;;33901:84:0;14826:407:1;33901:84:0;34024:9;;34000:20;34009:11;34000:6;:20;:::i;:::-;:33;;33992:86;;;;-1:-1:-1;;;33992:86:0;;21459:2:1;33992:86:0;;;21441:21:1;21498:2;21478:18;;;21471:30;21537:34;21517:18;;;21510:62;-1:-1:-1;;;21588:18:1;;;21581:38;21636:19;;33992:86:0;21257:404:1;33992:86:0;30396:6;;-1:-1:-1;;;;;30396:6:0;34091:10;:21;34087:124;;34151:11;34144:4;;:18;;;;:::i;:::-;34131:9;:31;;34123:80;;;;-1:-1:-1;;;34123:80:0;;21054:2:1;34123:80:0;;;21036:21:1;21093:2;21073:18;;;21066:30;21132:34;21112:18;;;21105:62;-1:-1:-1;;;21183:18:1;;;21176:34;21227:19;;34123:80:0;20852:400:1;34123:80:0;34236:1;34219:93;34244:11;34239:1;:16;34219:93;;34271:33;34281:10;34293;34302:1;34293:6;:10;:::i;:::-;34271:9;:33::i;:::-;34257:3;;;;:::i;:::-;;;;34219:93;;;;32710:1607;32620:1697;;;:::o;24223:256::-;24320:7;24356:23;24373:5;24356:16;:23::i;:::-;24348:5;:31;24340:87;;;;-1:-1:-1;;;24340:87:0;;11858:2:1;24340:87:0;;;11840:21:1;11897:2;11877:18;;;11870:30;11936:34;11916:18;;;11909:62;-1:-1:-1;;;11987:18:1;;;11980:41;12038:19;;24340:87:0;11656:407:1;24340:87:0;-1:-1:-1;;;;;;24445:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;24223:256::o;35990:145::-;30396:6;;-1:-1:-1;;;;;30396:6:0;9424:10;30458:23;30450:68;;;;-1:-1:-1;;;30450:68:0;;;;;;;:::i;:::-;36043:7:::1;36064;30396:6:::0;;-1:-1:-1;;;;;30396:6:0;;30323:87;36064:7:::1;-1:-1:-1::0;;;;;36056:21:0::1;36085;36056:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36042:69;;;36126:2;36118:11;;;::::0;::::1;;36035:100;35990:145::o:0;14674:185::-;14812:39;14829:4;14835:2;14839:7;14812:39;;;;;;;;;;;;:16;:39::i;34323:348::-;34398:16;34426:23;34452:17;34462:6;34452:9;:17::i;:::-;34426:43;;34476:25;34518:15;34504:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34504:30:0;;34476:58;;34546:9;34541:103;34561:15;34557:1;:19;34541:103;;;34606:30;34626:6;34634:1;34606:19;:30::i;:::-;34592:8;34601:1;34592:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;34578:3;;;;:::i;:::-;;;;34541:103;;;-1:-1:-1;34657:8:0;34323:348;-1:-1:-1;;;34323:348:0:o;35253:80::-;30396:6;;-1:-1:-1;;;;;30396:6:0;9424:10;30458:23;30450:68;;;;-1:-1:-1;;;30450:68:0;;;;;;;:::i;:::-;35312:4:::1;:15:::0;35253:80::o;24745:233::-;24820:7;24856:30;24643:10;:17;;24555:113;24856:30;24848:5;:38;24840:95;;;;-1:-1:-1;;;24840:95:0;;20641:2:1;24840:95:0;;;20623:21:1;20680:2;20660:18;;;20653:30;20719:34;20699:18;;;20692:62;-1:-1:-1;;;20770:18:1;;;20763:42;20822:19;;24840:95:0;20439:408:1;24840:95:0;24953:10;24964:5;24953:17;;;;;;;;:::i;:::-;;;;;;;;;24946:24;;24745:233;;;:::o;35589:98::-;30396:6;;-1:-1:-1;;;;;30396:6:0;9424:10;30458:23;30450:68;;;;-1:-1:-1;;;30450:68:0;;;;;;;:::i;:::-;35660:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;35589:98:::0;:::o;11509:239::-;11581:7;11617:16;;;:7;:16;;;;;;-1:-1:-1;;;;;11617:16:0;11652:19;11644:73;;;;-1:-1:-1;;;11644:73:0;;16689:2:1;11644:73:0;;;16671:21:1;16728:2;16708:18;;;16701:30;16767:34;16747:18;;;16740:62;-1:-1:-1;;;16818:18:1;;;16811:39;16867:19;;11644:73:0;16487:405:1;11239:208:0;11311:7;-1:-1:-1;;;;;11339:19:0;;11331:74;;;;-1:-1:-1;;;11331:74:0;;16278:2:1;11331:74:0;;;16260:21:1;16317:2;16297:18;;;16290:30;16356:34;16336:18;;;16329:62;-1:-1:-1;;;16407:18:1;;;16400:40;16457:19;;11331:74:0;16076:406:1;11331:74:0;-1:-1:-1;;;;;;11423:16:0;;;;;:9;:16;;;;;;;11239:208::o;30546:94::-;30396:6;;-1:-1:-1;;;;;30396:6:0;9424:10;30458:23;30450:68;;;;-1:-1:-1;;;30450:68:0;;;;;;;:::i;:::-;30611:21:::1;30629:1;30611:9;:21::i;:::-;30546:94::o:0;35339:116::-;30396:6;;-1:-1:-1;;;;;30396:6:0;9424:10;30458:23;30450:68;;;;-1:-1:-1;;;30450:68:0;;;;;;;:::i;:::-;35416:13:::1;:33:::0;35339:116::o;11984:104::-;12040:13;12073:7;12066:14;;;;;:::i;13667:295::-;-1:-1:-1;;;;;13770:24:0;;9424:10;13770:24;;13762:62;;;;-1:-1:-1;;;13762:62:0;;14674:2:1;13762:62:0;;;14656:21:1;14713:2;14693:18;;;14686:30;14752:27;14732:18;;;14725:55;14797:18;;13762:62:0;14472:349:1;13762:62:0;9424:10;13837:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;13837:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;13837:53:0;;;;;;;;;;13906:48;;10205:41:1;;;13837:42:0;;9424:10;13906:48;;10178:18:1;13906:48:0;;;;;;;13667:295;;:::o;35180:65::-;30396:6;;-1:-1:-1;;;;;30396:6:0;9424:10;30458:23;30450:68;;;;-1:-1:-1;;;30450:68:0;;;;;;;:::i;:::-;35224:8:::1;:15:::0;;-1:-1:-1;;35224:15:0::1;;;::::0;;35180:65::o;14930:328::-;15105:41;9424:10;15138:7;15105:18;:41::i;:::-;15097:103;;;;-1:-1:-1;;;15097:103:0;;;;;;;:::i;:::-;15211:39;15225:4;15231:2;15235:7;15244:5;15211:13;:39::i;:::-;14930:328;;;;:::o;31161:37::-;;;;;;;:::i;34677:497::-;16833:4;16857:16;;;:7;:16;;;;;;34775:13;;-1:-1:-1;;;;;16857:16:0;34800:97;;;;-1:-1:-1;;;34800:97:0;;19052:2:1;34800:97:0;;;19034:21:1;19091:2;19071:18;;;19064:30;19130:34;19110:18;;;19103:62;-1:-1:-1;;;19181:18:1;;;19174:45;19236:19;;34800:97:0;18850:411:1;34800:97:0;34913:8;;;;;;;34910:62;;34950:14;34943:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34677:497;;;:::o;34910:62::-;34980:28;35011:10;:8;:10::i;:::-;34980:41;;35066:1;35041:14;35035:28;:32;:133;;;;;;;;;;;;;;;;;35103:14;35119:18;:7;:16;:18::i;:::-;35139:13;35086:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35035:133;35028:140;34677:497;-1:-1:-1;;;34677:497:0:o;35693:122::-;30396:6;;-1:-1:-1;;;;;30396:6:0;9424:10;30458:23;30450:68;;;;-1:-1:-1;;;30450:68:0;;;;;;;:::i;:::-;35776:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;35463:120::-:0;30396:6;;-1:-1:-1;;;;;30396:6:0;9424:10;30458:23;30450:68;;;;-1:-1:-1;;;30450:68:0;;;;;;;:::i;:::-;35545:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;30648:192::-:0;30396:6;;-1:-1:-1;;;;;30396:6:0;9424:10;30458:23;30450:68;;;;-1:-1:-1;;;30450:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30737:22:0;::::1;30729:73;;;::::0;-1:-1:-1;;;30729:73:0;;12689:2:1;30729:73:0::1;::::0;::::1;12671:21:1::0;12728:2;12708:18;;;12701:30;12767:34;12747:18;;;12740:62;-1:-1:-1;;;12818:18:1;;;12811:36;12864:19;;30729:73:0::1;12487:402:1::0;30729:73:0::1;30813:19;30823:8;30813:9;:19::i;35902:81::-:0;30396:6;;-1:-1:-1;;;;;30396:6:0;9424:10;30458:23;30450:68;;;;-1:-1:-1;;;30450:68:0;;;;;;;:::i;:::-;35961:7:::1;:16:::0;;-1:-1:-1;;35961:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35902:81::o;10870:305::-;10972:4;-1:-1:-1;;;;;;11009:40:0;;-1:-1:-1;;;11009:40:0;;:105;;-1:-1:-1;;;;;;;11066:48:0;;-1:-1:-1;;;11066:48:0;11009:105;:158;;;-1:-1:-1;;;;;;;;;;2442:40:0;;;11131:36;2333:157;3498:451;3573:13;3599:19;3631:10;3635:6;3631:1;:10;:::i;:::-;:14;;3644:1;3631:14;:::i;:::-;3621:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3621:25:0;;3599:47;;-1:-1:-1;;;3657:6:0;3664:1;3657:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;3657:15:0;;;;;;;;;-1:-1:-1;;;3683:6:0;3690:1;3683:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;3683:15:0;;;;;;;;-1:-1:-1;3714:9:0;3726:10;3730:6;3726:1;:10;:::i;:::-;:14;;3739:1;3726:14;:::i;:::-;3714:26;;3709:135;3746:1;3742;:5;3709:135;;;-1:-1:-1;;;3794:5:0;3802:3;3794:11;3781:25;;;;;;;:::i;:::-;;;;3769:6;3776:1;3769:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;3769:37:0;;;;;;;;-1:-1:-1;3831:1:0;3821:11;;;;;3749:3;;;:::i;:::-;;;3709:135;;;-1:-1:-1;3862:10:0;;3854:55;;;;-1:-1:-1;;;3854:55:0;;11086:2:1;3854:55:0;;;11068:21:1;;;11105:18;;;11098:30;11164:34;11144:18;;;11137:62;11216:18;;3854:55:0;10884:356:1;2610:532:0;2666:13;2696:10;2692:53;;-1:-1:-1;;2723:10:0;;;;;;;;;;;;-1:-1:-1;;;2723:10:0;;;;;2610:532::o;2692:53::-;2770:5;2755:12;2811:78;2818:9;;2811:78;;2844:8;;;;:::i;:::-;;-1:-1:-1;2867:10:0;;-1:-1:-1;2875:2:0;2867:10;;:::i;:::-;;;2811:78;;;2899:19;2931:6;2921:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2921:17:0;;2899:39;;2949:154;2956:10;;2949:154;;2983:11;2993:1;2983:11;;:::i;:::-;;-1:-1:-1;3052:10:0;3060:2;3052:5;:10;:::i;:::-;3039:24;;:2;:24;:::i;:::-;3026:39;;3009:6;3016;3009:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3009:56:0;;;;;;;;-1:-1:-1;3080:11:0;3089:2;3080:11;;:::i;:::-;;;2949:154;;;3127:6;2610:532;-1:-1:-1;;;;2610:532:0:o;20750:174::-;20825:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;20825:29:0;-1:-1:-1;;;;;20825:29:0;;;;;;;;:24;;20879:23;20825:24;20879:14;:23::i;:::-;-1:-1:-1;;;;;20870:46:0;;;;;;;;;;;20750:174;;:::o;17062:348::-;17155:4;16857:16;;;:7;:16;;;;;;-1:-1:-1;;;;;16857:16:0;17172:73;;;;-1:-1:-1;;;17172:73:0;;15440:2:1;17172:73:0;;;15422:21:1;15479:2;15459:18;;;15452:30;15518:34;15498:18;;;15491:62;-1:-1:-1;;;15569:18:1;;;15562:42;15621:19;;17172:73:0;15238:408:1;17172:73:0;17256:13;17272:23;17287:7;17272:14;:23::i;:::-;17256:39;;17325:5;-1:-1:-1;;;;;17314:16:0;:7;-1:-1:-1;;;;;17314:16:0;;:51;;;;17358:7;-1:-1:-1;;;;;17334:31:0;:20;17346:7;17334:11;:20::i;:::-;-1:-1:-1;;;;;17334:31:0;;17314:51;:87;;;-1:-1:-1;;;;;;14154:25:0;;;14130:4;14154:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;17369:32;14033:164;20054:578;20213:4;-1:-1:-1;;;;;20186:31:0;:23;20201:7;20186:14;:23::i;:::-;-1:-1:-1;;;;;20186:31:0;;20178:85;;;;-1:-1:-1;;;20178:85:0;;18642:2:1;20178:85:0;;;18624:21:1;18681:2;18661:18;;;18654:30;18720:34;18700:18;;;18693:62;-1:-1:-1;;;18771:18:1;;;18764:39;18820:19;;20178:85:0;18440:405:1;20178:85:0;-1:-1:-1;;;;;20282:16:0;;20274:65;;;;-1:-1:-1;;;20274:65:0;;14269:2:1;20274:65:0;;;14251:21:1;14308:2;14288:18;;;14281:30;14347:34;14327:18;;;14320:62;-1:-1:-1;;;14398:18:1;;;14391:34;14442:19;;20274:65:0;14067:400:1;20274:65:0;20352:39;20373:4;20379:2;20383:7;20352:20;:39::i;:::-;20456:29;20473:1;20477:7;20456:8;:29::i;:::-;-1:-1:-1;;;;;20498:15:0;;;;;;:9;:15;;;;;:20;;20517:1;;20498:15;:20;;20517:1;;20498:20;:::i;:::-;;;;-1:-1:-1;;;;;;;20529:13:0;;;;;;:9;:13;;;;;:18;;20546:1;;20529:13;:18;;20546:1;;20529:18;:::i;:::-;;;;-1:-1:-1;;20558:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;20558:21:0;-1:-1:-1;;;;;20558:21:0;;;;;;;;;20597:27;;20558:16;;20597:27;;;;;;;20054:578;;;:::o;36455:159::-;36522:7;36539:14;36583:5;36566:23;;;;;;;;:::i;:::-;;;;-1:-1:-1;;36566:23:0;;;;;;;;;36556:34;;36566:23;36556:34;;;;;36455:159;-1:-1:-1;;;36455:159:0:o;36616:220::-;36741:66;;8374::1;36741::0;;;8362:79:1;8457:12;;;8450:28;;;36693:7:0;;;;8494:12:1;;36741:66:0;8132:380:1;36840:227:0;36930:7;36956:9;36967;36978:7;36989:11;36995:4;36989:5;:11::i;:::-;37018:41;;;;;;;;;;;;10484:25:1;;;10557:4;10545:17;;10525:18;;;10518:45;;;;10579:18;;;10572:34;;;10622:18;;;10615:34;;;36955:45:0;;-1:-1:-1;36955:45:0;;-1:-1:-1;36955:45:0;-1:-1:-1;37018:41:0;;10456:19:1;;37018:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37018:41:0;;-1:-1:-1;;37018:41:0;;;36840:227;-1:-1:-1;;;;;;;36840:227:0:o;37392:572::-;37451:13;37477:17;37503:3;37477:30;;37518:19;37550:4;:11;37540:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37540:22:0;;37518:44;;37578:6;37573:352;37594:4;:11;37590:1;:15;37573:352;;;37689:2;37677:4;37682:1;37677:7;;;;;;;;:::i;:::-;;;;;;;37671:20;;;;37670:49;;;37715:3;37703:4;37708:1;37703:7;;;;;;;;:::i;:::-;;;;;;;37697:21;;37670:49;37666:248;;;37835:2;37824:4;37829:1;37824:7;;;;;;;;:::i;:::-;;;;;37818:19;;;37824:7;;37818:19;:::i;:::-;37811:27;;37799:6;37806:1;37799:9;;;;;;;;:::i;:::-;;;;:39;-1:-1:-1;;;;;37799:39:0;;;;;;;;;37666:248;;;37891:4;37896:1;37891:7;;;;;;;;:::i;:::-;;;;;;;;;37879:6;37886:1;37879:9;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;37879:19:0;;;;;;;;;37666:248;37607:3;;;;:::i;:::-;;;;37573:352;;17752:110;17828:26;17838:2;17842:7;17828:26;;;;;;;;;;;;:9;:26::i;30848:173::-;30923:6;;;-1:-1:-1;;;;;30940:17:0;;;-1:-1:-1;;;;;;30940:17:0;;;;;;;30973:40;;30923:6;;;30940:17;30923:6;;30973:40;;30904:16;;30973:40;30893:128;30848:173;:::o;16140:315::-;16297:28;16307:4;16313:2;16317:7;16297:9;:28::i;:::-;16344:48;16367:4;16373:2;16377:7;16386:5;16344:22;:48::i;:::-;16336:111;;;;-1:-1:-1;;;16336:111:0;;;;;;;:::i;31898:102::-;31958:13;31987:7;31980:14;;;;;:::i;25591:589::-;-1:-1:-1;;;;;25797:18:0;;25793:187;;25832:40;25864:7;27007:10;:17;;26980:24;;;;:15;:24;;;;;:44;;;27035:24;;;;;;;;;;;;26903:164;25832:40;25793:187;;;25902:2;-1:-1:-1;;;;;25894:10:0;:4;-1:-1:-1;;;;;25894:10:0;;25890:90;;25921:47;25954:4;25960:7;25921:32;:47::i;:::-;-1:-1:-1;;;;;25994:16:0;;25990:183;;26027:45;26064:7;26027:36;:45::i;25990:183::-;26100:4;-1:-1:-1;;;;;26094:10:0;:2;-1:-1:-1;;;;;26094:10:0;;26090:83;;26121:40;26149:2;26153:7;26121:27;:40::i;37071:317::-;37128:9;37139;37150:7;37182:4;:11;37197:2;37182:17;37174:54;;;;-1:-1:-1;;;37174:54:0;;19468:2:1;37174:54:0;;;19450:21:1;19507:2;19487:18;;;19480:30;19546:26;19526:18;;;19519:54;19590:18;;37174:54:0;19266:348:1;37174:54:0;-1:-1:-1;;;37282:2:0;37272:13;;37266:20;37320:2;37310:13;;37304:20;37366:2;37356:13;;;37350:20;37266;;37347:1;37342:29;;;;;37071:317::o;18089:321::-;18219:18;18225:2;18229:7;18219:5;:18::i;:::-;18270:54;18301:1;18305:2;18309:7;18318:5;18270:22;:54::i;:::-;18248:154;;;;-1:-1:-1;;;18248:154:0;;;;;;;:::i;21489:799::-;21644:4;-1:-1:-1;;;;;21665:13:0;;4136:20;4184:8;21661:620;;21701:72;;-1:-1:-1;;;21701:72:0;;-1:-1:-1;;;;;21701:36:0;;;;;:72;;9424:10;;21752:4;;21758:7;;21767:5;;21701:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21701:72:0;;;;;;;;-1:-1:-1;;21701:72:0;;;;;;;;;;;;:::i;:::-;;;21697:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21943:13:0;;21939:272;;21986:60;;-1:-1:-1;;;21986:60:0;;;;;;;:::i;21939:272::-;22161:6;22155:13;22146:6;22142:2;22138:15;22131:38;21697:529;-1:-1:-1;;;;;;21824:51:0;-1:-1:-1;;;21824:51:0;;-1:-1:-1;21817:58:0;;21661:620;-1:-1:-1;22265:4:0;21489:799;;;;;;:::o;27694:988::-;27960:22;28010:1;27985:22;28002:4;27985:16;:22::i;:::-;:26;;;;:::i;:::-;28022:18;28043:26;;;:17;:26;;;;;;27960:51;;-1:-1:-1;28176:28:0;;;28172:328;;-1:-1:-1;;;;;28243:18:0;;28221:19;28243:18;;;:12;:18;;;;;;;;:34;;;;;;;;;28294:30;;;;;;:44;;;28411:30;;:17;:30;;;;;:43;;;28172:328;-1:-1:-1;28596:26:0;;;;:17;:26;;;;;;;;28589:33;;;-1:-1:-1;;;;;28640:18:0;;;;;:12;:18;;;;;:34;;;;;;;28633:41;27694:988::o;28977:1079::-;29255:10;:17;29230:22;;29255:21;;29275:1;;29255:21;:::i;:::-;29287:18;29308:24;;;:15;:24;;;;;;29681:10;:26;;29230:46;;-1:-1:-1;29308:24:0;;29230:46;;29681:26;;;;;;:::i;:::-;;;;;;;;;29659:48;;29745:11;29720:10;29731;29720:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;29825:28;;;:15;:28;;;;;;;:41;;;29997:24;;;;;29990:31;30032:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;29048:1008;;;28977:1079;:::o;26481:221::-;26566:14;26583:20;26600:2;26583:16;:20::i;:::-;-1:-1:-1;;;;;26614:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;26659:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;26481:221:0:o;18746:382::-;-1:-1:-1;;;;;18826:16:0;;18818:61;;;;-1:-1:-1;;;18818:61:0;;17099:2:1;18818:61:0;;;17081:21:1;;;17118:18;;;17111:30;17177:34;17157:18;;;17150:62;17229:18;;18818:61:0;16897:356:1;18818:61:0;16833:4;16857:16;;;:7;:16;;;;;;-1:-1:-1;;;;;16857:16:0;:30;18890:58;;;;-1:-1:-1;;;18890:58:0;;13096:2:1;18890:58:0;;;13078:21:1;13135:2;13115:18;;;13108:30;13174;13154:18;;;13147:58;13222:18;;18890:58:0;12894:352:1;18890:58:0;18961:45;18990:1;18994:2;18998:7;18961:20;:45::i;:::-;-1:-1:-1;;;;;19019:13:0;;;;;;:9;:13;;;;;:18;;19036:1;;19019:13;:18;;19036:1;;19019:18;:::i;:::-;;;;-1:-1:-1;;19048:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;19048:21:0;-1:-1:-1;;;;;19048:21:0;;;;;;;;19087:33;;19048:16;;;19087:33;;19048:16;;19087:33;18746:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:160::-;257:20;;313:13;;306:21;296:32;;286:60;;342:1;339;332:12;357:718;399:5;452:3;445:4;437:6;433:17;429:27;419:55;;470:1;467;460:12;419:55;506:6;493:20;532:18;569:2;565;562:10;559:36;;;575:18;;:::i;:::-;650:2;644:9;618:2;704:13;;-1:-1:-1;;700:22:1;;;724:2;696:31;692:40;680:53;;;748:18;;;768:22;;;745:46;742:72;;;794:18;;:::i;:::-;834:10;830:2;823:22;869:2;861:6;854:18;915:3;908:4;903:2;895:6;891:15;887:26;884:35;881:55;;;932:1;929;922:12;881:55;996:2;989:4;981:6;977:17;970:4;962:6;958:17;945:54;1043:1;1036:4;1031:2;1023:6;1019:15;1015:26;1008:37;1063:6;1054:15;;;;;;357:718;;;;:::o;1080:186::-;1139:6;1192:2;1180:9;1171:7;1167:23;1163:32;1160:52;;;1208:1;1205;1198:12;1160:52;1231:29;1250:9;1231:29;:::i;1271:260::-;1339:6;1347;1400:2;1388:9;1379:7;1375:23;1371:32;1368:52;;;1416:1;1413;1406:12;1368:52;1439:29;1458:9;1439:29;:::i;:::-;1429:39;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1271:260;;;;;:::o;1536:328::-;1613:6;1621;1629;1682:2;1670:9;1661:7;1657:23;1653:32;1650:52;;;1698:1;1695;1688:12;1650:52;1721:29;1740:9;1721:29;:::i;:::-;1711:39;;1769:38;1803:2;1792:9;1788:18;1769:38;:::i;:::-;1759:48;;1854:2;1843:9;1839:18;1826:32;1816:42;;1536:328;;;;;:::o;1869:537::-;1964:6;1972;1980;1988;2041:3;2029:9;2020:7;2016:23;2012:33;2009:53;;;2058:1;2055;2048:12;2009:53;2081:29;2100:9;2081:29;:::i;:::-;2071:39;;2129:38;2163:2;2152:9;2148:18;2129:38;:::i;:::-;2119:48;;2214:2;2203:9;2199:18;2186:32;2176:42;;2269:2;2258:9;2254:18;2241:32;2296:18;2288:6;2285:30;2282:50;;;2328:1;2325;2318:12;2282:50;2351:49;2392:7;2383:6;2372:9;2368:22;2351:49;:::i;:::-;2341:59;;;1869:537;;;;;;;:::o;2411:254::-;2476:6;2484;2537:2;2525:9;2516:7;2512:23;2508:32;2505:52;;;2553:1;2550;2543:12;2505:52;2576:29;2595:9;2576:29;:::i;:::-;2566:39;;2624:35;2655:2;2644:9;2640:18;2624:35;:::i;2670:614::-;2766:6;2774;2782;2835:2;2823:9;2814:7;2810:23;2806:32;2803:52;;;2851:1;2848;2841:12;2803:52;2874:29;2893:9;2874:29;:::i;:::-;2864:39;;2954:2;2943:9;2939:18;2926:32;2977:18;3018:2;3010:6;3007:14;3004:34;;;3034:1;3031;3024:12;3004:34;3057:49;3098:7;3089:6;3078:9;3074:22;3057:49;:::i;:::-;3047:59;;3159:2;3148:9;3144:18;3131:32;3115:48;;3188:2;3178:8;3175:16;3172:36;;;3204:1;3201;3194:12;3172:36;;3227:51;3270:7;3259:8;3248:9;3244:24;3227:51;:::i;:::-;3217:61;;;2670:614;;;;;:::o;3289:254::-;3357:6;3365;3418:2;3406:9;3397:7;3393:23;3389:32;3386:52;;;3434:1;3431;3424:12;3386:52;3457:29;3476:9;3457:29;:::i;:::-;3447:39;3533:2;3518:18;;;;3505:32;;-1:-1:-1;;;3289:254:1:o;3548:180::-;3604:6;3657:2;3645:9;3636:7;3632:23;3628:32;3625:52;;;3673:1;3670;3663:12;3625:52;3696:26;3712:9;3696:26;:::i;3733:180::-;3792:6;3845:2;3833:9;3824:7;3820:23;3816:32;3813:52;;;3861:1;3858;3851:12;3813:52;-1:-1:-1;3884:23:1;;3733:180;-1:-1:-1;3733:180:1:o;3918:245::-;3976:6;4029:2;4017:9;4008:7;4004:23;4000:32;3997:52;;;4045:1;4042;4035:12;3997:52;4084:9;4071:23;4103:30;4127:5;4103:30;:::i;4168:249::-;4237:6;4290:2;4278:9;4269:7;4265:23;4261:32;4258:52;;;4306:1;4303;4296:12;4258:52;4338:9;4332:16;4357:30;4381:5;4357:30;:::i;4422:321::-;4491:6;4544:2;4532:9;4523:7;4519:23;4515:32;4512:52;;;4560:1;4557;4550:12;4512:52;4600:9;4587:23;4633:18;4625:6;4622:30;4619:50;;;4665:1;4662;4655:12;4619:50;4688:49;4729:7;4720:6;4709:9;4705:22;4688:49;:::i;4933:456::-;5019:6;5027;5035;5088:2;5076:9;5067:7;5063:23;5059:32;5056:52;;;5104:1;5101;5094:12;5056:52;5140:9;5127:23;5117:33;;5201:2;5190:9;5186:18;5173:32;5228:18;5220:6;5217:30;5214:50;;;5260:1;5257;5250:12;5214:50;5283:49;5324:7;5315:6;5304:9;5300:22;5283:49;:::i;:::-;5273:59;;;5379:2;5368:9;5364:18;5351:32;5341:42;;4933:456;;;;;:::o;5394:257::-;5435:3;5473:5;5467:12;5500:6;5495:3;5488:19;5516:63;5572:6;5565:4;5560:3;5556:14;5549:4;5542:5;5538:16;5516:63;:::i;:::-;5633:2;5612:15;-1:-1:-1;;5608:29:1;5599:39;;;;5640:4;5595:50;;5394:257;-1:-1:-1;;5394:257:1:o;5656:658::-;5877:3;5915:6;5909:13;5931:53;5977:6;5972:3;5965:4;5957:6;5953:17;5931:53;:::i;:::-;6047:13;;6006:16;;;;6069:57;6047:13;6006:16;6103:4;6091:17;;6069:57;:::i;:::-;6193:13;;6148:20;;;6215:57;6193:13;6148:20;6249:4;6237:17;;6215:57;:::i;:::-;6288:20;;5656:658;-1:-1:-1;;;;;5656:658:1:o;6319:276::-;6450:3;6488:6;6482:13;6504:53;6550:6;6545:3;6538:4;6530:6;6526:17;6504:53;:::i;:::-;6573:16;;;;;6319:276;-1:-1:-1;;6319:276:1:o;6600:1527::-;6824:3;6862:6;6856:13;6888:4;6901:51;6945:6;6940:3;6935:2;6927:6;6923:15;6901:51;:::i;:::-;7015:13;;6974:16;;;;7037:55;7015:13;6974:16;7059:15;;;7037:55;:::i;:::-;7181:13;;7114:20;;;7154:1;;7241;7263:18;;;;7316;;;;7343:93;;7421:4;7411:8;7407:19;7395:31;;7343:93;7484:2;7474:8;7471:16;7451:18;7448:40;7445:167;;;-1:-1:-1;;;7511:33:1;;7567:4;7564:1;7557:15;7597:4;7518:3;7585:17;7445:167;7628:18;7655:110;;;;7779:1;7774:328;;;;7621:481;;7655:110;-1:-1:-1;;7690:24:1;;7676:39;;7735:20;;;;-1:-1:-1;7655:110:1;;7774:328;22340:1;22333:14;;;22377:4;22364:18;;7869:1;7883:169;7897:8;7894:1;7891:15;7883:169;;;7979:14;;7964:13;;;7957:37;8022:16;;;;7914:10;;7883:169;;;7887:3;;8083:8;8076:5;8072:20;8065:27;;7621:481;-1:-1:-1;8118:3:1;;6600:1527;-1:-1:-1;;;;;;;;;;;6600:1527:1:o;8935:488::-;-1:-1:-1;;;;;9204:15:1;;;9186:34;;9256:15;;9251:2;9236:18;;9229:43;9303:2;9288:18;;9281:34;;;9351:3;9346:2;9331:18;;9324:31;;;9129:4;;9372:45;;9397:19;;9389:6;9372:45;:::i;:::-;9364:53;8935:488;-1:-1:-1;;;;;;8935:488:1:o;9428:632::-;9599:2;9651:21;;;9721:13;;9624:18;;;9743:22;;;9570:4;;9599:2;9822:15;;;;9796:2;9781:18;;;9570:4;9865:169;9879:6;9876:1;9873:13;9865:169;;;9940:13;;9928:26;;10009:15;;;;9974:12;;;;9901:1;9894:9;9865:169;;;-1:-1:-1;10051:3:1;;9428:632;-1:-1:-1;;;;;;9428:632:1:o;10660:219::-;10809:2;10798:9;10791:21;10772:4;10829:44;10869:2;10858:9;10854:18;10846:6;10829:44;:::i;12068:414::-;12270:2;12252:21;;;12309:2;12289:18;;;12282:30;12348:34;12343:2;12328:18;;12321:62;-1:-1:-1;;;12414:2:1;12399:18;;12392:48;12472:3;12457:19;;12068:414::o;18079:356::-;18281:2;18263:21;;;18300:18;;;18293:30;18359:34;18354:2;18339:18;;18332:62;18426:2;18411:18;;18079:356::o;20021:413::-;20223:2;20205:21;;;20262:2;20242:18;;;20235:30;20301:34;20296:2;20281:18;;20274:62;-1:-1:-1;;;20367:2:1;20352:18;;20345:47;20424:3;20409:19;;20021:413::o;22393:128::-;22433:3;22464:1;22460:6;22457:1;22454:13;22451:39;;;22470:18;;:::i;:::-;-1:-1:-1;22506:9:1;;22393:128::o;22526:120::-;22566:1;22592;22582:35;;22597:18;;:::i;:::-;-1:-1:-1;22631:9:1;;22526:120::o;22651:168::-;22691:7;22757:1;22753;22749:6;22745:14;22742:1;22739:21;22734:1;22727:9;22720:17;22716:45;22713:71;;;22764:18;;:::i;:::-;-1:-1:-1;22804:9:1;;22651:168::o;22824:125::-;22864:4;22892:1;22889;22886:8;22883:34;;;22897:18;;:::i;:::-;-1:-1:-1;22934:9:1;;22824:125::o;22954:195::-;22992:4;23029;23026:1;23022:12;23061:4;23058:1;23054:12;23086:3;23081;23078:12;23075:38;;;23093:18;;:::i;:::-;23130:13;;;22954:195;-1:-1:-1;;;22954:195:1:o;23154:258::-;23226:1;23236:113;23250:6;23247:1;23244:13;23236:113;;;23326:11;;;23320:18;23307:11;;;23300:39;23272:2;23265:10;23236:113;;;23367:6;23364:1;23361:13;23358:48;;;-1:-1:-1;;23402:1:1;23384:16;;23377:27;23154:258::o;23417:136::-;23456:3;23484:5;23474:39;;23493:18;;:::i;:::-;-1:-1:-1;;;23529:18:1;;23417:136::o;23558:380::-;23637:1;23633:12;;;;23680;;;23701:61;;23755:4;23747:6;23743:17;23733:27;;23701:61;23808:2;23800:6;23797:14;23777:18;23774:38;23771:161;;;23854:10;23849:3;23845:20;23842:1;23835:31;23889:4;23886:1;23879:15;23917:4;23914:1;23907:15;23771:161;;23558:380;;;:::o;23943:135::-;23982:3;-1:-1:-1;;24003:17:1;;24000:43;;;24023:18;;:::i;:::-;-1:-1:-1;24070:1:1;24059:13;;23943:135::o;24083:112::-;24115:1;24141;24131:35;;24146:18;;:::i;:::-;-1:-1:-1;24180:9:1;;24083:112::o;24200:127::-;24261:10;24256:3;24252:20;24249:1;24242:31;24292:4;24289:1;24282:15;24316:4;24313:1;24306:15;24332:127;24393:10;24388:3;24384:20;24381:1;24374:31;24424:4;24421:1;24414:15;24448:4;24445:1;24438:15;24464:127;24525:10;24520:3;24516:20;24513:1;24506:31;24556:4;24553:1;24546:15;24580:4;24577:1;24570:15;24596:127;24657:10;24652:3;24648:20;24645:1;24638:31;24688:4;24685:1;24678:15;24712:4;24709:1;24702:15;24728:127;24789:10;24784:3;24780:20;24777:1;24770:31;24820:4;24817:1;24810:15;24844:4;24841:1;24834:15;24860:131;-1:-1:-1;;;;;;24934:32:1;;24924:43;;24914:71;;24981:1;24978;24971:12

Swarm Source

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