ETH Price: $3,480.77 (+7.23%)
Gas: 7 Gwei

Token

PAYC Frogtober (PAYC Frogtober)
 

Overview

Max Total Supply

2,707 PAYC Frogtober

Holders

238

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
payc-is-a-rug.eth
Balance
1 PAYC Frogtober
0xDA556f7c448806D6D445547f5991C4c161D9a3c6
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:
PAYCFrogtober

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-24
*/

// SPDX-License-Identifier: MIT
//PAYC Frogtober

pragma solidity ^0.8.0;
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

}

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: ERC2000000.sol



pragma solidity ^0.8.7;










library Address {
    function isContract(address account) internal view returns (bool) {
        uint size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}

abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    
    string private _name;
    string private _symbol;

    // Mapping from token ID to owner address
    address[] internal _owners;

    mapping(uint256 => address) private _tokenApprovals;
    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 (uint) 
    {
        require(owner != address(0), "ERC721: balance query for the zero address");

        uint count;
        uint length= _owners.length;
        for( uint i; i < length; ++i ){
          if( owner == _owners[i] )
            ++count;
        }
        delete length;
        return count;
    }

    /**
     * @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 {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 {
          require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
      
    }
     
       function pepetransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) internal {
        //solhint-disable-next-line max-line-length
       // require(
      //      _isApprovedOrOwner(_msgSender(), tokenId),
      //      "ERC721: transfer caller is not owner nor approved"
      //  );
      _beforeTokenTransferpepe(from , to ,tokenId);
         require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own"
        );

      _approve(address(0), tokenId);
        _owners[tokenId] = to;

        emit 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 tokenId < _owners.length && _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");

      
        _owners.push(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);
        _owners[tokenId] = address(0);

        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);
        _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 {}
      function _beforeTokenTransferpepe(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}


pragma solidity ^0.8.7;


/**
 * @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 but rips out the core of the gas-wasting processing that comes from OpenZeppelin.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    /**
     * @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-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _owners.length;
    }

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

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

        uint count;
        for(uint i; i < _owners.length; i++){
            if(owner == _owners[i]){
                if(count == index) return i;
                else count++;
            }
        }

        revert("ERC721Enumerable: owner index out of bounds");
    }
}
    pragma solidity ^0.8.7;

    interface IMain {
   
function transferFrom( address from,   address to, uint256 tokenId) external;
function ownerOf( uint _tokenid) external view returns (address);
}

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


  string private uriPrefix = "ipfs://QmW2Q6zT2sZzmopJSzPxw67BLm3ATKijSCzuzHqrUo5cxE/";
  string private uriSuffix = ".json";

  uint16 public constant maxSupply = 7777;
  uint public cost = 0 ether;

   mapping (uint => bool) public minted;
  

  
  mapping (uint => uint) public mappingOldtoNewTokens;
  mapping (uint => uint) public mappingNewtoOldTokens;
 

  address public mainAddress = 0x2D0D57D004F82e9f4471CaA8b9f8B1965a814154;
  IMain Main = IMain(mainAddress);

  constructor() ERC721("PAYC Frogtober", "PAYC Frogtober") {
    
  }
  
	function setMainAddress(address contractAddr) external onlyOwner {
		mainAddress = contractAddr;
        Main= IMain(mainAddress);
	}  
 

  function mint( uint tokenNumber) external payable {
     
          require(msg.value >= cost ,"Insufficient funds");
          require(minted[tokenNumber] == false , "Exchanged Already");
   

 
   uint16 totalSupply = uint16(_owners.length);

   
     Main.transferFrom( msg.sender, address(this),tokenNumber);
    _mint(msg.sender, totalSupply);
  
    mappingNewtoOldTokens[totalSupply] = tokenNumber;
    mappingOldtoNewTokens[tokenNumber] = totalSupply; 
    minted[tokenNumber] = true;
 
  }

 function _beforeTokenTransferpepe(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override  {
        uint token =mappingNewtoOldTokens[tokenId];
        address _address = Main.ownerOf(token);
        address _caddress = address(this);
        require (from == _caddress || to ==  _caddress , "Transfer not Allowed");
        require (from == _address || to ==  _address , "Transfer not Allowed ");
        delete token;
    }
    

  function ExchangeOldForNew( uint tokenNumber ) external  {

 
 
  uint _token = mappingOldtoNewTokens[tokenNumber] ;
    address _caddress = address(this);

  
  Main.transferFrom(msg.sender, _caddress,tokenNumber);
  pepetransferFrom( _caddress, msg.sender,_token);
  
  }

  

   function ExchangeNewForOld( uint tokenNumber) external  {

 

  uint _token = mappingNewtoOldTokens[tokenNumber] ;
    address _caddress = address(this);

  Main.transferFrom( _caddress, msg.sender,_token);
  pepetransferFrom( msg.sender, _caddress,tokenNumber);
 

    
  }
  

  function checkIfNFTExist(uint256 _tokenId)
    public
    view
   returns (bool)
   {
    bool exist =   _exists(_tokenId);
    return exist;
   }


   
  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
  

    _tokenId = mappingNewtoOldTokens[_tokenId];

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


  function setUriPrefix(string memory _uriPrefix) external onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setCost(uint _cost) external onlyOwner {
    cost = _cost;
  }





 
 

  
   function _mint(address to, uint256 tokenId) internal virtual override {
        _owners.push(to);
        emit Transfer(address(0), to, tokenId);
    }
    
  function withdraw() external onlyOwner {
  uint _balance = address(this).balance;
     payable(msg.sender).transfer(_balance ); 
       
  }


  function _baseURI() internal view  returns (string memory) {
    return uriPrefix;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"uint256","name":"tokenNumber","type":"uint256"}],"name":"ExchangeNewForOld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenNumber","type":"uint256"}],"name":"ExchangeOldForNew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkIfNFTExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"mainAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mappingNewtoOldTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mappingOldtoNewTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenNumber","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddr","type":"address"}],"name":"setMainAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e060405260366080818152906200238f60a039805162000029916006916020909101906200017a565b5060408051808201909152600580825264173539b7b760d91b602090920191825262000058916007916200017a565b506000600855600c8054732d0d57d004f82e9f4471caa8b9f8b1965a8141546001600160a01b03199182168117909255600d80549091169091179055348015620000a157600080fd5b50604080518082018252600e8082526d2820aca190233937b3ba37b132b960911b602080840182815285518087019096529285528401528151919291620000eb916000916200017a565b508051620001019060019060208401906200017a565b5050506200011e620001186200012460201b60201c565b62000128565b6200025d565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001889062000220565b90600052602060002090601f016020900481019282620001ac5760008555620001f7565b82601f10620001c757805160ff1916838001178555620001f7565b82800160010185558215620001f7579182015b82811115620001f7578251825591602001919060010190620001da565b506200020592915062000209565b5090565b5b808211156200020557600081556001016200020a565b600181811c908216806200023557607f821691505b602082108114156200025757634e487b7160e01b600052602260045260246000fd5b50919050565b612122806200026d6000396000f3fe6080604052600436106101ee5760003560e01c806376c638731161010d578063baf9e3dc116100a0578063d5abeb011161006f578063d5abeb0114610597578063d600ddef146105c0578063db9771f5146105e0578063e985e9c514610600578063f2fde38b1461064957600080fd5b8063baf9e3dc1461050a578063c87b56dd1461052a578063cf9bed2f1461054a578063d44624b21461057757600080fd5b806395d89b41116100dc57806395d89b41146104a2578063a0712d68146104b7578063a22cb465146104ca578063b88d4fde146104ea57600080fd5b806376c63873146104075780637dc0bf3f146104345780637ec4a659146104645780638da5cb5b1461048457600080fd5b80632f745c59116101855780634f6ccce7116101545780634f6ccce7146103925780636352211e146103b257806370a08231146103d2578063715018a6146103f257600080fd5b80632f745c591461031d5780633ccfd60b1461033d57806342842e0e1461035257806344a0d68a1461037257600080fd5b80630cdd4234116101c15780630cdd4234146102a457806313faede6146102c457806318160ddd146102e857806323b872dd146102fd57600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611c48565b610669565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d610694565b60405161021f9190611e11565b34801561025657600080fd5b5061026a610265366004611ccb565b610726565b6040516001600160a01b03909116815260200161021f565b34801561028e57600080fd5b506102a261029d366004611c1c565b6107b3565b005b3480156102b057600080fd5b50600c5461026a906001600160a01b031681565b3480156102d057600080fd5b506102da60085481565b60405190815260200161021f565b3480156102f457600080fd5b506002546102da565b34801561030957600080fd5b506102a2610318366004611b28565b6108c9565b34801561032957600080fd5b506102da610338366004611c1c565b6108fa565b34801561034957600080fd5b506102a26109ad565b34801561035e57600080fd5b506102a261036d366004611b28565b610a0a565b34801561037e57600080fd5b506102a261038d366004611ccb565b610a25565b34801561039e57600080fd5b506102da6103ad366004611ccb565b610a54565b3480156103be57600080fd5b5061026a6103cd366004611ccb565b610ac1565b3480156103de57600080fd5b506102da6103ed366004611ab5565b610b4d565b3480156103fe57600080fd5b506102a2610c1f565b34801561041357600080fd5b506102da610422366004611ccb565b600a6020526000908152604090205481565b34801561044057600080fd5b5061021361044f366004611ccb565b60096020526000908152604090205460ff1681565b34801561047057600080fd5b506102a261047f366004611c82565b610c55565b34801561049057600080fd5b506005546001600160a01b031661026a565b3480156104ae57600080fd5b5061023d610c92565b6102a26104c5366004611ccb565b610ca1565b3480156104d657600080fd5b506102a26104e5366004611be9565b610def565b3480156104f657600080fd5b506102a2610505366004611b69565b610eb4565b34801561051657600080fd5b506102a2610525366004611ccb565b610eec565b34801561053657600080fd5b5061023d610545366004611ccb565b610f73565b34801561055657600080fd5b506102da610565366004611ccb565b600b6020526000908152604090205481565b34801561058357600080fd5b506102a2610592366004611ccb565b61104f565b3480156105a357600080fd5b506105ad611e6181565b60405161ffff909116815260200161021f565b3480156105cc57600080fd5b506102136105db366004611ccb565b6110d6565b3480156105ec57600080fd5b506102a26105fb366004611ab5565b6110e2565b34801561060c57600080fd5b5061021361061b366004611aef565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b34801561065557600080fd5b506102a2610664366004611ab5565b611138565b60006001600160e01b0319821663780e9d6360e01b148061068e575061068e826111d3565b92915050565b6060600080546106a390611fff565b80601f01602080910402602001604051908101604052809291908181526020018280546106cf90611fff565b801561071c5780601f106106f15761010080835404028352916020019161071c565b820191906000526020600020905b8154815290600101906020018083116106ff57829003601f168201915b5050505050905090565b600061073182611223565b6107975760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006107be82610ac1565b9050806001600160a01b0316836001600160a01b0316141561082c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161078e565b336001600160a01b03821614806108485750610848813361061b565b6108ba5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161078e565b6108c4838361126d565b505050565b6108d333826112db565b6108ef5760405162461bcd60e51b815260040161078e90611f3f565b6108c48383836113c5565b600061090583610b4d565b82106109235760405162461bcd60e51b815260040161078e90611e24565b6000805b600254811015610994576002818154811061094457610944612095565b6000918252602090912001546001600160a01b0386811691161415610982578382141561097457915061068e9050565b8161097e8161203a565b9250505b8061098c8161203a565b915050610927565b5060405162461bcd60e51b815260040161078e90611e24565b6005546001600160a01b031633146109d75760405162461bcd60e51b815260040161078e90611ec1565b6040514790339082156108fc029083906000818181858888f19350505050158015610a06573d6000803e3d6000fd5b5050565b6108c483838360405180602001604052806000815250610eb4565b6005546001600160a01b03163314610a4f5760405162461bcd60e51b815260040161078e90611ec1565b600855565b6002546000908210610abd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161078e565b5090565b60008060028381548110610ad757610ad7612095565b6000918252602090912001546001600160a01b031690508061068e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161078e565b60006001600160a01b038216610bb85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161078e565b600254600090815b81811015610c165760028181548110610bdb57610bdb612095565b6000918252602090912001546001600160a01b0386811691161415610c0657610c038361203a565b92505b610c0f8161203a565b9050610bc0565b50909392505050565b6005546001600160a01b03163314610c495760405162461bcd60e51b815260040161078e90611ec1565b610c5360006114d9565b565b6005546001600160a01b03163314610c7f5760405162461bcd60e51b815260040161078e90611ec1565b8051610a069060069060208401906119af565b6060600180546106a390611fff565b600854341015610ce85760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b604482015260640161078e565b60008181526009602052604090205460ff1615610d3b5760405162461bcd60e51b815260206004820152601160248201527045786368616e67656420416c726561647960781b604482015260640161078e565b600254600d546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401600060405180830381600087803b158015610d9057600080fd5b505af1158015610da4573d6000803e3d6000fd5b50505050610db6338261ffff1661152b565b61ffff166000818152600b60209081526040808320859055938252600a815283822092909255600990915220805460ff19166001179055565b6001600160a01b038216331415610e485760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161078e565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ebe33836112db565b610eda5760405162461bcd60e51b815260040161078e90611f3f565b610ee6848484846115a7565b50505050565b6000818152600b60205260409081902054600d5491516323b872dd60e01b815230600482018190523360248301526044820183905291926001600160a01b0316906323b872dd90606401600060405180830381600087803b158015610f5057600080fd5b505af1158015610f64573d6000803e3d6000fd5b505050506108c43382856115da565b6060610f7e82611223565b610fe25760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161078e565b6000918252600b602052604082205491610ffa61161e565b9050600081511161101a5760405180602001604052806000815250611048565b806110248461162d565b600760405160200161103893929190611d10565b6040516020818303038152906040525b9392505050565b6000818152600a60205260409081902054600d5491516323b872dd60e01b815233600482015230602482018190526044820185905291926001600160a01b0316906323b872dd90606401600060405180830381600087803b1580156110b357600080fd5b505af11580156110c7573d6000803e3d6000fd5b505050506108c48133846115da565b60008061104883611223565b6005546001600160a01b0316331461110c5760405162461bcd60e51b815260040161078e90611ec1565b600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054909216179055565b6005546001600160a01b031633146111625760405162461bcd60e51b815260040161078e90611ec1565b6001600160a01b0381166111c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161078e565b6111d0816114d9565b50565b60006001600160e01b031982166380ac58cd60e01b148061120457506001600160e01b03198216635b5e139f60e01b145b8061068e57506301ffc9a760e01b6001600160e01b031983161461068e565b6002546000908210801561068e575060006001600160a01b03166002838154811061125057611250612095565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112a282610ac1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006112e682611223565b6113475760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161078e565b600061135283610ac1565b9050806001600160a01b0316846001600160a01b0316148061138d5750836001600160a01b031661138284610726565b6001600160a01b0316145b806113bd57506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166113d882610ac1565b6001600160a01b0316146113fe5760405162461bcd60e51b815260040161078e90611ef6565b6001600160a01b0382166114605760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161078e565b61146b60008261126d565b816002828154811061147f5761147f612095565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6115b28484846113c5565b6115be8484848461172b565b610ee65760405162461bcd60e51b815260040161078e90611e6f565b6115e5838383611838565b826001600160a01b03166115f882610ac1565b6001600160a01b0316146114605760405162461bcd60e51b815260040161078e90611ef6565b6060600680546106a390611fff565b6060816116515750506040805180820190915260018152600360fc1b602082015290565b8160005b811561167b57806116658161203a565b91506116749050600a83611fa8565b9150611655565b60008167ffffffffffffffff811115611696576116966120ab565b6040519080825280601f01601f1916602001820160405280156116c0576020820181803683370190505b5090505b84156113bd576116d5600183611fbc565b91506116e2600a86612055565b6116ed906030611f90565b60f81b81838151811061170257611702612095565b60200101906001600160f81b031916908160001a905350611724600a86611fa8565b94506116c4565b60006001600160a01b0384163b1561182d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061176f903390899088908890600401611dd4565b602060405180830381600087803b15801561178957600080fd5b505af19250505080156117b9575060408051601f3d908101601f191682019092526117b691810190611c65565b60015b611813573d8080156117e7576040519150601f19603f3d011682016040523d82523d6000602084013e6117ec565b606091505b50805161180b5760405162461bcd60e51b815260040161078e90611e6f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113bd565b506001949350505050565b6000818152600b602052604080822054600d5491516331a9108f60e11b8152600481018290529092916001600160a01b031690636352211e9060240160206040518083038186803b15801561188c57600080fd5b505afa1580156118a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c49190611ad2565b9050306001600160a01b0386168114806118ef5750806001600160a01b0316856001600160a01b0316145b6119325760405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c881b9bdd08105b1b1bddd95960621b604482015260640161078e565b816001600160a01b0316866001600160a01b031614806119635750816001600160a01b0316856001600160a01b0316145b6119a75760405162461bcd60e51b815260206004820152601560248201527402a3930b739b332b9103737ba1020b63637bbb2b21605d1b604482015260640161078e565b505050505050565b8280546119bb90611fff565b90600052602060002090601f0160209004810192826119dd5760008555611a23565b82601f106119f657805160ff1916838001178555611a23565b82800160010185558215611a23579182015b82811115611a23578251825591602001919060010190611a08565b50610abd9291505b80821115610abd5760008155600101611a2b565b600067ffffffffffffffff80841115611a5a57611a5a6120ab565b604051601f8501601f19908116603f01168101908282118183101715611a8257611a826120ab565b81604052809350858152868686011115611a9b57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611ac757600080fd5b8135611048816120c1565b600060208284031215611ae457600080fd5b8151611048816120c1565b60008060408385031215611b0257600080fd5b8235611b0d816120c1565b91506020830135611b1d816120c1565b809150509250929050565b600080600060608486031215611b3d57600080fd5b8335611b48816120c1565b92506020840135611b58816120c1565b929592945050506040919091013590565b60008060008060808587031215611b7f57600080fd5b8435611b8a816120c1565b93506020850135611b9a816120c1565b925060408501359150606085013567ffffffffffffffff811115611bbd57600080fd5b8501601f81018713611bce57600080fd5b611bdd87823560208401611a3f565b91505092959194509250565b60008060408385031215611bfc57600080fd5b8235611c07816120c1565b915060208301358015158114611b1d57600080fd5b60008060408385031215611c2f57600080fd5b8235611c3a816120c1565b946020939093013593505050565b600060208284031215611c5a57600080fd5b8135611048816120d6565b600060208284031215611c7757600080fd5b8151611048816120d6565b600060208284031215611c9457600080fd5b813567ffffffffffffffff811115611cab57600080fd5b8201601f81018413611cbc57600080fd5b6113bd84823560208401611a3f565b600060208284031215611cdd57600080fd5b5035919050565b60008151808452611cfc816020860160208601611fd3565b601f01601f19169290920160200192915050565b600084516020611d238285838a01611fd3565b855191840191611d368184848a01611fd3565b8554920191600090600181811c9080831680611d5357607f831692505b858310811415611d7157634e487b7160e01b85526022600452602485fd5b808015611d855760018114611d9657611dc3565b60ff19851688528388019550611dc3565b60008b81526020902060005b85811015611dbb5781548a820152908401908801611da2565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e0790830184611ce4565b9695505050505050565b6020815260006110486020830184611ce4565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611fa357611fa3612069565b500190565b600082611fb757611fb761207f565b500490565b600082821015611fce57611fce612069565b500390565b60005b83811015611fee578181015183820152602001611fd6565b83811115610ee65750506000910152565b600181811c9082168061201357607f821691505b6020821081141561203457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561204e5761204e612069565b5060010190565b6000826120645761206461207f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146111d057600080fd5b6001600160e01b0319811681146111d057600080fdfea2646970667358221220a8c7fda2b90187768e0e26aace8826c580a51a31edd12df366e97e8429ae88bd64736f6c63430008070033697066733a2f2f516d573251367a5432735a7a6d6f704a537a5078773637424c6d3341544b696a53437a757a487172556f356378452f

Deployed Bytecode

0x6080604052600436106101ee5760003560e01c806376c638731161010d578063baf9e3dc116100a0578063d5abeb011161006f578063d5abeb0114610597578063d600ddef146105c0578063db9771f5146105e0578063e985e9c514610600578063f2fde38b1461064957600080fd5b8063baf9e3dc1461050a578063c87b56dd1461052a578063cf9bed2f1461054a578063d44624b21461057757600080fd5b806395d89b41116100dc57806395d89b41146104a2578063a0712d68146104b7578063a22cb465146104ca578063b88d4fde146104ea57600080fd5b806376c63873146104075780637dc0bf3f146104345780637ec4a659146104645780638da5cb5b1461048457600080fd5b80632f745c59116101855780634f6ccce7116101545780634f6ccce7146103925780636352211e146103b257806370a08231146103d2578063715018a6146103f257600080fd5b80632f745c591461031d5780633ccfd60b1461033d57806342842e0e1461035257806344a0d68a1461037257600080fd5b80630cdd4234116101c15780630cdd4234146102a457806313faede6146102c457806318160ddd146102e857806323b872dd146102fd57600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611c48565b610669565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d610694565b60405161021f9190611e11565b34801561025657600080fd5b5061026a610265366004611ccb565b610726565b6040516001600160a01b03909116815260200161021f565b34801561028e57600080fd5b506102a261029d366004611c1c565b6107b3565b005b3480156102b057600080fd5b50600c5461026a906001600160a01b031681565b3480156102d057600080fd5b506102da60085481565b60405190815260200161021f565b3480156102f457600080fd5b506002546102da565b34801561030957600080fd5b506102a2610318366004611b28565b6108c9565b34801561032957600080fd5b506102da610338366004611c1c565b6108fa565b34801561034957600080fd5b506102a26109ad565b34801561035e57600080fd5b506102a261036d366004611b28565b610a0a565b34801561037e57600080fd5b506102a261038d366004611ccb565b610a25565b34801561039e57600080fd5b506102da6103ad366004611ccb565b610a54565b3480156103be57600080fd5b5061026a6103cd366004611ccb565b610ac1565b3480156103de57600080fd5b506102da6103ed366004611ab5565b610b4d565b3480156103fe57600080fd5b506102a2610c1f565b34801561041357600080fd5b506102da610422366004611ccb565b600a6020526000908152604090205481565b34801561044057600080fd5b5061021361044f366004611ccb565b60096020526000908152604090205460ff1681565b34801561047057600080fd5b506102a261047f366004611c82565b610c55565b34801561049057600080fd5b506005546001600160a01b031661026a565b3480156104ae57600080fd5b5061023d610c92565b6102a26104c5366004611ccb565b610ca1565b3480156104d657600080fd5b506102a26104e5366004611be9565b610def565b3480156104f657600080fd5b506102a2610505366004611b69565b610eb4565b34801561051657600080fd5b506102a2610525366004611ccb565b610eec565b34801561053657600080fd5b5061023d610545366004611ccb565b610f73565b34801561055657600080fd5b506102da610565366004611ccb565b600b6020526000908152604090205481565b34801561058357600080fd5b506102a2610592366004611ccb565b61104f565b3480156105a357600080fd5b506105ad611e6181565b60405161ffff909116815260200161021f565b3480156105cc57600080fd5b506102136105db366004611ccb565b6110d6565b3480156105ec57600080fd5b506102a26105fb366004611ab5565b6110e2565b34801561060c57600080fd5b5061021361061b366004611aef565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b34801561065557600080fd5b506102a2610664366004611ab5565b611138565b60006001600160e01b0319821663780e9d6360e01b148061068e575061068e826111d3565b92915050565b6060600080546106a390611fff565b80601f01602080910402602001604051908101604052809291908181526020018280546106cf90611fff565b801561071c5780601f106106f15761010080835404028352916020019161071c565b820191906000526020600020905b8154815290600101906020018083116106ff57829003601f168201915b5050505050905090565b600061073182611223565b6107975760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006107be82610ac1565b9050806001600160a01b0316836001600160a01b0316141561082c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161078e565b336001600160a01b03821614806108485750610848813361061b565b6108ba5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161078e565b6108c4838361126d565b505050565b6108d333826112db565b6108ef5760405162461bcd60e51b815260040161078e90611f3f565b6108c48383836113c5565b600061090583610b4d565b82106109235760405162461bcd60e51b815260040161078e90611e24565b6000805b600254811015610994576002818154811061094457610944612095565b6000918252602090912001546001600160a01b0386811691161415610982578382141561097457915061068e9050565b8161097e8161203a565b9250505b8061098c8161203a565b915050610927565b5060405162461bcd60e51b815260040161078e90611e24565b6005546001600160a01b031633146109d75760405162461bcd60e51b815260040161078e90611ec1565b6040514790339082156108fc029083906000818181858888f19350505050158015610a06573d6000803e3d6000fd5b5050565b6108c483838360405180602001604052806000815250610eb4565b6005546001600160a01b03163314610a4f5760405162461bcd60e51b815260040161078e90611ec1565b600855565b6002546000908210610abd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161078e565b5090565b60008060028381548110610ad757610ad7612095565b6000918252602090912001546001600160a01b031690508061068e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161078e565b60006001600160a01b038216610bb85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161078e565b600254600090815b81811015610c165760028181548110610bdb57610bdb612095565b6000918252602090912001546001600160a01b0386811691161415610c0657610c038361203a565b92505b610c0f8161203a565b9050610bc0565b50909392505050565b6005546001600160a01b03163314610c495760405162461bcd60e51b815260040161078e90611ec1565b610c5360006114d9565b565b6005546001600160a01b03163314610c7f5760405162461bcd60e51b815260040161078e90611ec1565b8051610a069060069060208401906119af565b6060600180546106a390611fff565b600854341015610ce85760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b604482015260640161078e565b60008181526009602052604090205460ff1615610d3b5760405162461bcd60e51b815260206004820152601160248201527045786368616e67656420416c726561647960781b604482015260640161078e565b600254600d546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401600060405180830381600087803b158015610d9057600080fd5b505af1158015610da4573d6000803e3d6000fd5b50505050610db6338261ffff1661152b565b61ffff166000818152600b60209081526040808320859055938252600a815283822092909255600990915220805460ff19166001179055565b6001600160a01b038216331415610e485760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161078e565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ebe33836112db565b610eda5760405162461bcd60e51b815260040161078e90611f3f565b610ee6848484846115a7565b50505050565b6000818152600b60205260409081902054600d5491516323b872dd60e01b815230600482018190523360248301526044820183905291926001600160a01b0316906323b872dd90606401600060405180830381600087803b158015610f5057600080fd5b505af1158015610f64573d6000803e3d6000fd5b505050506108c43382856115da565b6060610f7e82611223565b610fe25760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161078e565b6000918252600b602052604082205491610ffa61161e565b9050600081511161101a5760405180602001604052806000815250611048565b806110248461162d565b600760405160200161103893929190611d10565b6040516020818303038152906040525b9392505050565b6000818152600a60205260409081902054600d5491516323b872dd60e01b815233600482015230602482018190526044820185905291926001600160a01b0316906323b872dd90606401600060405180830381600087803b1580156110b357600080fd5b505af11580156110c7573d6000803e3d6000fd5b505050506108c48133846115da565b60008061104883611223565b6005546001600160a01b0316331461110c5760405162461bcd60e51b815260040161078e90611ec1565b600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054909216179055565b6005546001600160a01b031633146111625760405162461bcd60e51b815260040161078e90611ec1565b6001600160a01b0381166111c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161078e565b6111d0816114d9565b50565b60006001600160e01b031982166380ac58cd60e01b148061120457506001600160e01b03198216635b5e139f60e01b145b8061068e57506301ffc9a760e01b6001600160e01b031983161461068e565b6002546000908210801561068e575060006001600160a01b03166002838154811061125057611250612095565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112a282610ac1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006112e682611223565b6113475760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161078e565b600061135283610ac1565b9050806001600160a01b0316846001600160a01b0316148061138d5750836001600160a01b031661138284610726565b6001600160a01b0316145b806113bd57506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166113d882610ac1565b6001600160a01b0316146113fe5760405162461bcd60e51b815260040161078e90611ef6565b6001600160a01b0382166114605760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161078e565b61146b60008261126d565b816002828154811061147f5761147f612095565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6115b28484846113c5565b6115be8484848461172b565b610ee65760405162461bcd60e51b815260040161078e90611e6f565b6115e5838383611838565b826001600160a01b03166115f882610ac1565b6001600160a01b0316146114605760405162461bcd60e51b815260040161078e90611ef6565b6060600680546106a390611fff565b6060816116515750506040805180820190915260018152600360fc1b602082015290565b8160005b811561167b57806116658161203a565b91506116749050600a83611fa8565b9150611655565b60008167ffffffffffffffff811115611696576116966120ab565b6040519080825280601f01601f1916602001820160405280156116c0576020820181803683370190505b5090505b84156113bd576116d5600183611fbc565b91506116e2600a86612055565b6116ed906030611f90565b60f81b81838151811061170257611702612095565b60200101906001600160f81b031916908160001a905350611724600a86611fa8565b94506116c4565b60006001600160a01b0384163b1561182d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061176f903390899088908890600401611dd4565b602060405180830381600087803b15801561178957600080fd5b505af19250505080156117b9575060408051601f3d908101601f191682019092526117b691810190611c65565b60015b611813573d8080156117e7576040519150601f19603f3d011682016040523d82523d6000602084013e6117ec565b606091505b50805161180b5760405162461bcd60e51b815260040161078e90611e6f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113bd565b506001949350505050565b6000818152600b602052604080822054600d5491516331a9108f60e11b8152600481018290529092916001600160a01b031690636352211e9060240160206040518083038186803b15801561188c57600080fd5b505afa1580156118a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c49190611ad2565b9050306001600160a01b0386168114806118ef5750806001600160a01b0316856001600160a01b0316145b6119325760405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c881b9bdd08105b1b1bddd95960621b604482015260640161078e565b816001600160a01b0316866001600160a01b031614806119635750816001600160a01b0316856001600160a01b0316145b6119a75760405162461bcd60e51b815260206004820152601560248201527402a3930b739b332b9103737ba1020b63637bbb2b21605d1b604482015260640161078e565b505050505050565b8280546119bb90611fff565b90600052602060002090601f0160209004810192826119dd5760008555611a23565b82601f106119f657805160ff1916838001178555611a23565b82800160010185558215611a23579182015b82811115611a23578251825591602001919060010190611a08565b50610abd9291505b80821115610abd5760008155600101611a2b565b600067ffffffffffffffff80841115611a5a57611a5a6120ab565b604051601f8501601f19908116603f01168101908282118183101715611a8257611a826120ab565b81604052809350858152868686011115611a9b57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611ac757600080fd5b8135611048816120c1565b600060208284031215611ae457600080fd5b8151611048816120c1565b60008060408385031215611b0257600080fd5b8235611b0d816120c1565b91506020830135611b1d816120c1565b809150509250929050565b600080600060608486031215611b3d57600080fd5b8335611b48816120c1565b92506020840135611b58816120c1565b929592945050506040919091013590565b60008060008060808587031215611b7f57600080fd5b8435611b8a816120c1565b93506020850135611b9a816120c1565b925060408501359150606085013567ffffffffffffffff811115611bbd57600080fd5b8501601f81018713611bce57600080fd5b611bdd87823560208401611a3f565b91505092959194509250565b60008060408385031215611bfc57600080fd5b8235611c07816120c1565b915060208301358015158114611b1d57600080fd5b60008060408385031215611c2f57600080fd5b8235611c3a816120c1565b946020939093013593505050565b600060208284031215611c5a57600080fd5b8135611048816120d6565b600060208284031215611c7757600080fd5b8151611048816120d6565b600060208284031215611c9457600080fd5b813567ffffffffffffffff811115611cab57600080fd5b8201601f81018413611cbc57600080fd5b6113bd84823560208401611a3f565b600060208284031215611cdd57600080fd5b5035919050565b60008151808452611cfc816020860160208601611fd3565b601f01601f19169290920160200192915050565b600084516020611d238285838a01611fd3565b855191840191611d368184848a01611fd3565b8554920191600090600181811c9080831680611d5357607f831692505b858310811415611d7157634e487b7160e01b85526022600452602485fd5b808015611d855760018114611d9657611dc3565b60ff19851688528388019550611dc3565b60008b81526020902060005b85811015611dbb5781548a820152908401908801611da2565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e0790830184611ce4565b9695505050505050565b6020815260006110486020830184611ce4565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611fa357611fa3612069565b500190565b600082611fb757611fb761207f565b500490565b600082821015611fce57611fce612069565b500390565b60005b83811015611fee578181015183820152602001611fd6565b83811115610ee65750506000910152565b600181811c9082168061201357607f821691505b6020821081141561203457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561204e5761204e612069565b5060010190565b6000826120645761206461207f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146111d057600080fd5b6001600160e01b0319811681146111d057600080fdfea2646970667358221220a8c7fda2b90187768e0e26aace8826c580a51a31edd12df366e97e8429ae88bd64736f6c63430008070033

Deployed Bytecode Sourcemap

30135:3678:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28650:224;;;;;;;;;;-1:-1:-1;28650:224:0;;;;;:::i;:::-;;:::i;:::-;;;7736:14:1;;7729:22;7711:41;;7699:2;7684:18;28650:224:0;;;;;;;;16532:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17344:308::-;;;;;;;;;;-1:-1:-1;17344:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6654:32:1;;;6636:51;;6624:2;6609:18;17344:308:0;6490:203:1;16867:411:0;;;;;;;;;;-1:-1:-1;16867:411:0;;;;;:::i;:::-;;:::i;:::-;;30605:71;;;;;;;;;;-1:-1:-1;30605:71:0;;;;-1:-1:-1;;;;;30605:71:0;;;30403:26;;;;;;;;;;;;;;;;;;;16207:25:1;;;16195:2;16180:18;30403:26:0;16061:177:1;28950:110:0;;;;;;;;;;-1:-1:-1;29038:7:0;:14;28950:110;;18403:333;;;;;;;;;;-1:-1:-1;18403:333:0;;;;;:::i;:::-;;:::i;29426:490::-;;;;;;;;;;-1:-1:-1;29426:490:0;;;;;:::i;:::-;;:::i;33570:144::-;;;;;;;;;;;;;:::i;19464:185::-;;;;;;;;;;-1:-1:-1;19464:185:0;;;;;:::i;:::-;;:::i;33306:73::-;;;;;;;;;;-1:-1:-1;33306:73:0;;;;;:::i;:::-;;:::i;29137:205::-;;;;;;;;;;-1:-1:-1;29137:205:0;;;;;:::i;:::-;;:::i;16139:326::-;;;;;;;;;;-1:-1:-1;16139:326:0;;;;;:::i;:::-;;:::i;15631:446::-;;;;;;;;;;-1:-1:-1;15631:446:0;;;;;:::i;:::-;;:::i;3642:103::-;;;;;;;;;;;;;:::i;30488:51::-;;;;;;;;;;-1:-1:-1;30488:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;30437:36;;;;;;;;;;-1:-1:-1;30437:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33198:102;;;;;;;;;;-1:-1:-1;33198:102:0;;;;;:::i;:::-;;:::i;2991:87::-;;;;;;;;;;-1:-1:-1;3064:6:0;;-1:-1:-1;;;;;3064:6:0;2991:87;;16701:104;;;;;;;;;;;;;:::i;30942:515::-;;;;;;:::i;:::-;;:::i;17724:327::-;;;;;;;;;;-1:-1:-1;17724:327:0;;;;;:::i;:::-;;:::i;19720:381::-;;;;;;;;;;-1:-1:-1;19720:381:0;;;;;:::i;:::-;;:::i;32251:286::-;;;;;;;;;;-1:-1:-1;32251:286:0;;;;;:::i;:::-;;:::i;32713:477::-;;;;;;;;;;-1:-1:-1;32713:477:0;;;;;:::i;:::-;;:::i;30544:51::-;;;;;;;;;;-1:-1:-1;30544:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;31954:284;;;;;;;;;;-1:-1:-1;31954:284:0;;;;;:::i;:::-;;:::i;30359:39::-;;;;;;;;;;;;30394:4;30359:39;;;;;16042:6:1;16030:19;;;16012:38;;16000:2;15985:18;30359:39:0;15868:188:1;32547:153:0;;;;;;;;;;-1:-1:-1;32547:153:0;;;;;:::i;:::-;;:::i;30795:136::-;;;;;;;;;;-1:-1:-1;30795:136:0;;;;;:::i;:::-;;:::i;18122:214::-;;;;;;;;;;-1:-1:-1;18122:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;18293:25:0;;;18264:4;18293:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;18122:214;3900:201;;;;;;;;;;-1:-1:-1;3900:201:0;;;;;:::i;:::-;;:::i;28650:224::-;28752:4;-1:-1:-1;;;;;;28776:50:0;;-1:-1:-1;;;28776:50:0;;:90;;;28830:36;28854:11;28830:23;:36::i;:::-;28769:97;28650:224;-1:-1:-1;;28650:224:0:o;16532:100::-;16586:13;16619:5;16612:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16532:100;:::o;17344:308::-;17465:7;17512:16;17520:7;17512;:16::i;:::-;17490:110;;;;-1:-1:-1;;;17490:110:0;;12541:2:1;17490:110:0;;;12523:21:1;12580:2;12560:18;;;12553:30;12619:34;12599:18;;;12592:62;-1:-1:-1;;;12670:18:1;;;12663:42;12722:19;;17490:110:0;;;;;;;;;-1:-1:-1;17620:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;17620:24:0;;17344:308::o;16867:411::-;16948:13;16964:23;16979:7;16964:14;:23::i;:::-;16948:39;;17012:5;-1:-1:-1;;;;;17006:11:0;:2;-1:-1:-1;;;;;17006:11:0;;;16998:57;;;;-1:-1:-1;;;16998:57:0;;14141:2:1;16998:57:0;;;14123:21:1;14180:2;14160:18;;;14153:30;14219:34;14199:18;;;14192:62;-1:-1:-1;;;14270:18:1;;;14263:31;14311:19;;16998:57:0;13939:397:1;16998:57:0;1795:10;-1:-1:-1;;;;;17090:21:0;;;;:62;;-1:-1:-1;17115:37:0;17132:5;1795:10;18122:214;:::i;17115:37::-;17068:168;;;;-1:-1:-1;;;17068:168:0;;11295:2:1;17068:168:0;;;11277:21:1;11334:2;11314:18;;;11307:30;11373:34;11353:18;;;11346:62;11444:26;11424:18;;;11417:54;11488:19;;17068:168:0;11093:420:1;17068:168:0;17249:21;17258:2;17262:7;17249:8;:21::i;:::-;16937:341;16867:411;;:::o;18403:333::-;18561:41;1795:10;18594:7;18561:18;:41::i;:::-;18539:140;;;;-1:-1:-1;;;18539:140:0;;;;;;;:::i;:::-;18692:28;18702:4;18708:2;18712:7;18692:9;:28::i;29426:490::-;29523:15;29567:16;29577:5;29567:9;:16::i;:::-;29559:5;:24;29551:80;;;;-1:-1:-1;;;29551:80:0;;;;;;;:::i;:::-;29644:10;29669:6;29665:178;29681:7;:14;29677:18;;29665:178;;;29728:7;29736:1;29728:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;29719:19:0;;;29728:10;;29719:19;29716:116;;;29770:5;29761;:14;29758:58;;;29784:1;-1:-1:-1;29777:8:0;;-1:-1:-1;29777:8:0;29758:58;29809:7;;;;:::i;:::-;;;;29758:58;29697:3;;;;:::i;:::-;;;;29665:178;;;;29855:53;;-1:-1:-1;;;29855:53:0;;;;;;;:::i;33570:144::-;3064:6;;-1:-1:-1;;;;;3064:6:0;1795:10;3211:23;3203:68;;;;-1:-1:-1;;;3203:68:0;;;;;;;:::i;:::-;33659:39:::1;::::0;33630:21:::1;::::0;33667:10:::1;::::0;33659:39;::::1;;;::::0;33630:21;;33614:13:::1;33659:39:::0;33614:13;33659:39;33630:21;33667:10;33659:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33609:105;33570:144::o:0;19464:185::-;19602:39;19619:4;19625:2;19629:7;19602:39;;;;;;;;;;;;:16;:39::i;33306:73::-;3064:6;;-1:-1:-1;;;;;3064:6:0;1795:10;3211:23;3203:68;;;;-1:-1:-1;;;3203:68:0;;;;;;;:::i;:::-;33361:4:::1;:12:::0;33306:73::o;29137:205::-;29248:7;:14;29212:7;;29240:22;;29232:79;;;;-1:-1:-1;;;29232:79:0;;15311:2:1;29232:79:0;;;15293:21:1;15350:2;15330:18;;;15323:30;15389:34;15369:18;;;15362:62;-1:-1:-1;;;15440:18:1;;;15433:42;15492:19;;29232:79:0;15109:408:1;29232:79:0;-1:-1:-1;29329:5:0;29137:205::o;16139:326::-;16256:7;16281:13;16297:7;16305;16297:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;16297:16:0;;-1:-1:-1;16346:19:0;16324:110;;;;-1:-1:-1;;;16324:110:0;;12131:2:1;16324:110:0;;;12113:21:1;12170:2;12150:18;;;12143:30;12209:34;12189:18;;;12182:62;-1:-1:-1;;;12260:18:1;;;12253:39;12309:19;;16324:110:0;11929:405:1;15631:446:0;15753:4;-1:-1:-1;;;;;15784:19:0;;15776:74;;;;-1:-1:-1;;;15776:74:0;;11720:2:1;15776:74:0;;;11702:21:1;11759:2;11739:18;;;11732:30;11798:34;11778:18;;;11771:62;-1:-1:-1;;;11849:18:1;;;11842:40;11899:19;;15776:74:0;11518:406:1;15776:74:0;15897:7;:14;15863:10;;;15922:101;15939:6;15935:1;:10;15922:101;;;15978:7;15986:1;15978:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;15969:19:0;;;15978:10;;15969:19;15965:46;;;16004:7;;;:::i;:::-;;;15965:46;15947:3;;;:::i;:::-;;;15922:101;;;-1:-1:-1;16064:5:0;;15631:446;-1:-1:-1;;;15631:446:0:o;3642:103::-;3064:6;;-1:-1:-1;;;;;3064:6:0;1795:10;3211:23;3203:68;;;;-1:-1:-1;;;3203:68:0;;;;;;;:::i;:::-;3707:30:::1;3734:1;3707:18;:30::i;:::-;3642:103::o:0;33198:102::-;3064:6;;-1:-1:-1;;;;;3064:6:0;1795:10;3211:23;3203:68;;;;-1:-1:-1;;;3203:68:0;;;;;;;:::i;:::-;33272:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;16701:104::-:0;16757:13;16790:7;16783:14;;;;;:::i;30942:515::-;31033:4;;31020:9;:17;;31012:48;;;;-1:-1:-1;;;31012:48:0;;10948:2:1;31012:48:0;;;10930:21:1;10987:2;10967:18;;;10960:30;-1:-1:-1;;;11006:18:1;;;10999:48;11064:18;;31012:48:0;10746:342:1;31012:48:0;31081:19;;;;:6;:19;;;;;;;;:28;31073:59;;;;-1:-1:-1;;;31073:59:0;;15724:2:1;31073:59:0;;;15706:21:1;15763:2;15743:18;;;15736:30;-1:-1:-1;;;15782:18:1;;;15775:47;15839:18;;31073:59:0;15522:341:1;31073:59:0;31176:7;:14;31206:4;;:57;;-1:-1:-1;;;31206:57:0;;31225:10;31206:57;;;6938:34:1;31245:4:0;6988:18:1;;;6981:43;7040:18;;;7033:34;;;-1:-1:-1;;;;;31206:4:0;;;;:17;;6873:18:1;;31206:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31270:30;31276:10;31288:11;31270:30;;:5;:30::i;:::-;31311:34;;;;;;:21;:34;;;;;;;;:48;;;31366:34;;;:21;:34;;;;;:48;;;;31422:6;:19;;;;:26;;-1:-1:-1;;31422:26:0;31444:4;31422:26;;;30942:515::o;17724:327::-;-1:-1:-1;;;;;17859:24:0;;1795:10;17859:24;;17851:62;;;;-1:-1:-1;;;17851:62:0;;9832:2:1;17851:62:0;;;9814:21:1;9871:2;9851:18;;;9844:30;9910:27;9890:18;;;9883:55;9955:18;;17851:62:0;9630:349:1;17851:62:0;1795:10;17926:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;17926:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;17926:53:0;;;;;;;;;;17995:48;;7711:41:1;;;17926:42:0;;1795:10;17995:48;;7684:18:1;17995:48:0;;;;;;;17724:327;;:::o;19720:381::-;19907:41;1795:10;19940:7;19907:18;:41::i;:::-;19885:140;;;;-1:-1:-1;;;19885:140:0;;;;;;;:::i;:::-;20036:39;20050:4;20056:2;20060:7;20069:5;20036:13;:39::i;:::-;19720:381;;;;:::o;32251:286::-;32319:11;32333:34;;;:21;:34;;;;;;;;32415:4;;:48;;-1:-1:-1;;;32415:48:0;;32403:4;32415:48;;;6938:34:1;;;32445:10:0;6988:18:1;;;6981:43;7040:18;;;7033:34;;;32333::0;;-1:-1:-1;;;;;32415:4:0;;:17;;6873:18:1;;32415:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32468:52;32486:10;32498:9;32508:11;32468:16;:52::i;32713:477::-;32812:13;32853:17;32861:8;32853:7;:17::i;:::-;32837:98;;;;-1:-1:-1;;;32837:98:0;;13725:2:1;32837:98:0;;;13707:21:1;13764:2;13744:18;;;13737:30;13803:34;13783:18;;;13776:62;-1:-1:-1;;;13854:18:1;;;13847:45;13909:19;;32837:98:0;13523:411:1;32837:98:0;32959:31;;;;:21;:31;;;;;;;33030:10;:8;:10::i;:::-;32999:41;;33085:1;33060:14;33054:28;:32;:130;;;;;;;;;;;;;;;;;33122:14;33138:19;:8;:17;:19::i;:::-;33159:9;33105:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33054:130;33047:137;32713:477;-1:-1:-1;;;32713:477:0:o;31954:284::-;32024:11;32038:34;;;:21;:34;;;;;;;;32124:4;;:52;;-1:-1:-1;;;32124:52:0;;32142:10;32124:52;;;6938:34:1;32108:4:0;6988:18:1;;;6981:43;;;7040:18;;;7033:34;;;32038::0;;-1:-1:-1;;;;;32124:4:0;;:17;;6873:18:1;;32124:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32181:47;32199:9;32210:10;32221:6;32181:16;:47::i;32547:153::-;32625:4;32642:10;32657:17;32665:8;32657:7;:17::i;30795:136::-;3064:6;;-1:-1:-1;;;;;3064:6:0;1795:10;3211:23;3203:68;;;;-1:-1:-1;;;3203:68:0;;;;;;;:::i;:::-;30865:11:::1;:26:::0;;-1:-1:-1;;;;;30865:26:0;;::::1;-1:-1:-1::0;;;;;;30865:26:0;;::::1;::::0;::::1;::::0;;;30902:4:::1;:24:::0;;;;::::1;;::::0;;30795:136::o;3900:201::-;3064:6;;-1:-1:-1;;;;;3064:6:0;1795:10;3211:23;3203:68;;;;-1:-1:-1;;;3203:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3989:22:0;::::1;3981:73;;;::::0;-1:-1:-1;;;3981:73:0;;9020:2:1;3981:73:0::1;::::0;::::1;9002:21:1::0;9059:2;9039:18;;;9032:30;9098:34;9078:18;;;9071:62;-1:-1:-1;;;9149:18:1;;;9142:36;9195:19;;3981:73:0::1;8818:402:1::0;3981:73:0::1;4065:28;4084:8;4065:18;:28::i;:::-;3900:201:::0;:::o;15212:355::-;15359:4;-1:-1:-1;;;;;;15401:40:0;;-1:-1:-1;;;15401:40:0;;:105;;-1:-1:-1;;;;;;;15458:48:0;;-1:-1:-1;;;15458:48:0;15401:105;:158;;;-1:-1:-1;;;;;;;;;;7381:40:0;;;15523:36;7272:157;21659:155;21758:7;:14;21724:4;;21748:24;;:58;;;;;21804:1;-1:-1:-1;;;;;21776:30:0;:7;21784;21776:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;21776:16:0;:30;;21741:65;21659:155;-1:-1:-1;;21659:155:0:o;25636:174::-;25711:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;25711:29:0;-1:-1:-1;;;;;25711:29:0;;;;;;;;:24;;25765:23;25711:24;25765:14;:23::i;:::-;-1:-1:-1;;;;;25756:46:0;;;;;;;;;;;25636:174;;:::o;21981:452::-;22110:4;22154:16;22162:7;22154;:16::i;:::-;22132:110;;;;-1:-1:-1;;;22132:110:0;;10186:2:1;22132:110:0;;;10168:21:1;10225:2;10205:18;;;10198:30;10264:34;10244:18;;;10237:62;-1:-1:-1;;;10315:18:1;;;10308:42;10367:19;;22132:110:0;9984:408:1;22132:110:0;22253:13;22269:23;22284:7;22269:14;:23::i;:::-;22253:39;;22322:5;-1:-1:-1;;;;;22311:16:0;:7;-1:-1:-1;;;;;22311:16:0;;:64;;;;22368:7;-1:-1:-1;;;;;22344:31:0;:20;22356:7;22344:11;:20::i;:::-;-1:-1:-1;;;;;22344:31:0;;22311:64;:113;;;-1:-1:-1;;;;;;18293:25:0;;;18264:4;18293:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;22392:32;22303:122;21981:452;-1:-1:-1;;;;21981:452:0:o;24965:553::-;25138:4;-1:-1:-1;;;;;25111:31:0;:23;25126:7;25111:14;:23::i;:::-;-1:-1:-1;;;;;25111:31:0;;25089:122;;;;-1:-1:-1;;;25089:122:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25230:16:0;;25222:65;;;;-1:-1:-1;;;25222:65:0;;9427:2:1;25222:65:0;;;9409:21:1;9466:2;9446:18;;;9439:30;9505:34;9485:18;;;9478:62;-1:-1:-1;;;9556:18:1;;;9549:34;9600:19;;25222:65:0;9225:400:1;25222:65:0;25404:29;25421:1;25425:7;25404:8;:29::i;:::-;25463:2;25444:7;25452;25444:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;25444:21:0;-1:-1:-1;;;;;25444:21:0;;;;;;25483:27;;25502:7;;25483:27;;;;;;;;;;25444:16;25483:27;24965:553;;;:::o;4261:191::-;4354:6;;;-1:-1:-1;;;;;4371:17:0;;;-1:-1:-1;;;;;;4371:17:0;;;;;;;4404:40;;4354:6;;;4371:17;4354:6;;4404:40;;4335:16;;4404:40;4324:128;4261:191;:::o;33406:154::-;33487:7;:16;;;;;;;-1:-1:-1;33487:16:0;;;;;;;-1:-1:-1;;;;;;33487:16:0;-1:-1:-1;;;;;33487:16:0;;;;;;;;33519:33;;33544:7;;-1:-1:-1;33519:33:0;;-1:-1:-1;;33519:33:0;33406:154;;:::o;20983:363::-;21140:28;21150:4;21156:2;21160:7;21140:9;:28::i;:::-;21210:48;21233:4;21239:2;21243:7;21252:5;21210:22;:48::i;:::-;21188:148;;;;-1:-1:-1;;;21188:148:0;;;;;;;:::i;18752:636::-;19085:44;19110:4;19117:2;19121:7;19085:24;:44::i;:::-;19190:4;-1:-1:-1;;;;;19163:31:0;:23;19178:7;19163:14;:23::i;:::-;-1:-1:-1;;;;;19163:31:0;;19141:122;;;;-1:-1:-1;;;19141:122:0;;;;;;;:::i;33722:88::-;33766:13;33795:9;33788:16;;;;;:::i;304:723::-;360:13;581:10;577:53;;-1:-1:-1;;608:10:0;;;;;;;;;;;;-1:-1:-1;;;608:10:0;;;;;304:723::o;577:53::-;655:5;640:12;696:78;703:9;;696:78;;729:8;;;;:::i;:::-;;-1:-1:-1;752:10:0;;-1:-1:-1;760:2:0;752:10;;:::i;:::-;;;696:78;;;784:19;816:6;806:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;806:17:0;;784:39;;834:154;841:10;;834:154;;868:11;878:1;868:11;;:::i;:::-;;-1:-1:-1;937:10:0;945:2;937:5;:10;:::i;:::-;924:24;;:2;:24;:::i;:::-;911:39;;894:6;901;894:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;894:56:0;;;;;;;;-1:-1:-1;965:11:0;974:2;965:11;;:::i;:::-;;;834:154;;26375:980;26530:4;-1:-1:-1;;;;;26551:13:0;;14412:20;14460:8;26547:801;;26604:175;;-1:-1:-1;;;26604:175:0;;-1:-1:-1;;;;;26604:36:0;;;;;:175;;1795:10;;26698:4;;26725:7;;26755:5;;26604:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26604:175:0;;;;;;;;-1:-1:-1;;26604:175:0;;;;;;;;;;;;:::i;:::-;;;26583:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26962:13:0;;26958:320;;27005:108;;-1:-1:-1;;;27005:108:0;;;;;;;:::i;26958:320::-;27228:6;27222:13;27213:6;27209:2;27205:15;27198:38;26583:710;-1:-1:-1;;;;;;26843:51:0;-1:-1:-1;;;26843:51:0;;-1:-1:-1;26836:58:0;;26547:801;-1:-1:-1;27332:4:0;26375:980;;;;;;:::o;31462:480::-;31611:10;31623:30;;;:21;:30;;;;;;;31683:4;;:19;;-1:-1:-1;;;31683:19:0;;;;;16207:25:1;;;31623:30:0;;31611:10;-1:-1:-1;;;;;31683:4:0;;:12;;16180:18:1;;31683:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31664:38;-1:-1:-1;31741:4:0;-1:-1:-1;;;;;31766:17:0;;;;;:37;;;31794:9;-1:-1:-1;;;;;31787:16:0;:2;-1:-1:-1;;;;;31787:16:0;;31766:37;31757:72;;;;-1:-1:-1;;;31757:72:0;;10599:2:1;31757:72:0;;;10581:21:1;10638:2;10618:18;;;10611:30;-1:-1:-1;;;10657:18:1;;;10650:50;10717:18;;31757:72:0;10397:344:1;31757:72:0;31857:8;-1:-1:-1;;;;;31849:16:0;:4;-1:-1:-1;;;;;31849:16:0;;:35;;;;31876:8;-1:-1:-1;;;;;31869:15:0;:2;-1:-1:-1;;;;;31869:15:0;;31849:35;31840:71;;;;-1:-1:-1;;;31840:71:0;;14961:2:1;31840:71:0;;;14943:21:1;15000:2;14980:18;;;14973:30;-1:-1:-1;;;15019:18:1;;;15012:51;15080:18;;31840:71:0;14759:345:1;31840:71:0;-1:-1:-1;;;;;;31462:480:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:247::-;709:6;762:2;750:9;741:7;737:23;733:32;730:52;;;778:1;775;768:12;730:52;817:9;804:23;836:31;861:5;836:31;:::i;902:251::-;972:6;1025:2;1013:9;1004:7;1000:23;996:32;993:52;;;1041:1;1038;1031:12;993:52;1073:9;1067:16;1092:31;1117:5;1092:31;:::i;1158:388::-;1226:6;1234;1287:2;1275:9;1266:7;1262:23;1258:32;1255:52;;;1303:1;1300;1293:12;1255:52;1342:9;1329:23;1361:31;1386:5;1361:31;:::i;:::-;1411:5;-1:-1:-1;1468:2:1;1453:18;;1440:32;1481:33;1440:32;1481:33;:::i;:::-;1533:7;1523:17;;;1158:388;;;;;:::o;1551:456::-;1628:6;1636;1644;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;:::-;1821:5;-1:-1:-1;1878:2:1;1863:18;;1850:32;1891:33;1850:32;1891:33;:::i;:::-;1551:456;;1943:7;;-1:-1:-1;;;1997:2:1;1982:18;;;;1969:32;;1551:456::o;2012:794::-;2107:6;2115;2123;2131;2184:3;2172:9;2163:7;2159:23;2155:33;2152:53;;;2201:1;2198;2191:12;2152:53;2240:9;2227:23;2259:31;2284:5;2259:31;:::i;:::-;2309:5;-1:-1:-1;2366:2:1;2351:18;;2338:32;2379:33;2338:32;2379:33;:::i;:::-;2431:7;-1:-1:-1;2485:2:1;2470:18;;2457:32;;-1:-1:-1;2540:2:1;2525:18;;2512:32;2567:18;2556:30;;2553:50;;;2599:1;2596;2589:12;2553:50;2622:22;;2675:4;2667:13;;2663:27;-1:-1:-1;2653:55:1;;2704:1;2701;2694:12;2653:55;2727:73;2792:7;2787:2;2774:16;2769:2;2765;2761:11;2727:73;:::i;:::-;2717:83;;;2012:794;;;;;;;:::o;2811:416::-;2876:6;2884;2937:2;2925:9;2916:7;2912:23;2908:32;2905:52;;;2953:1;2950;2943:12;2905:52;2992:9;2979:23;3011:31;3036:5;3011:31;:::i;:::-;3061:5;-1:-1:-1;3118:2:1;3103:18;;3090:32;3160:15;;3153:23;3141:36;;3131:64;;3191:1;3188;3181:12;3232:315;3300:6;3308;3361:2;3349:9;3340:7;3336:23;3332:32;3329:52;;;3377:1;3374;3367:12;3329:52;3416:9;3403:23;3435:31;3460:5;3435:31;:::i;:::-;3485:5;3537:2;3522:18;;;;3509:32;;-1:-1:-1;;;3232:315:1:o;3552:245::-;3610:6;3663:2;3651:9;3642:7;3638:23;3634:32;3631:52;;;3679:1;3676;3669:12;3631:52;3718:9;3705:23;3737:30;3761:5;3737:30;:::i;3802:249::-;3871:6;3924:2;3912:9;3903:7;3899:23;3895:32;3892:52;;;3940:1;3937;3930:12;3892:52;3972:9;3966:16;3991:30;4015:5;3991:30;:::i;4056:450::-;4125:6;4178:2;4166:9;4157:7;4153:23;4149:32;4146:52;;;4194:1;4191;4184:12;4146:52;4234:9;4221:23;4267:18;4259:6;4256:30;4253:50;;;4299:1;4296;4289:12;4253:50;4322:22;;4375:4;4367:13;;4363:27;-1:-1:-1;4353:55:1;;4404:1;4401;4394:12;4353:55;4427:73;4492:7;4487:2;4474:16;4469:2;4465;4461:11;4427:73;:::i;4511:180::-;4570:6;4623:2;4611:9;4602:7;4598:23;4594:32;4591:52;;;4639:1;4636;4629:12;4591:52;-1:-1:-1;4662:23:1;;4511:180;-1:-1:-1;4511:180:1:o;4696:257::-;4737:3;4775:5;4769:12;4802:6;4797:3;4790:19;4818:63;4874:6;4867:4;4862:3;4858:14;4851:4;4844:5;4840:16;4818:63;:::i;:::-;4935:2;4914:15;-1:-1:-1;;4910:29:1;4901:39;;;;4942:4;4897:50;;4696:257;-1:-1:-1;;4696:257:1:o;4958:1527::-;5182:3;5220:6;5214:13;5246:4;5259:51;5303:6;5298:3;5293:2;5285:6;5281:15;5259:51;:::i;:::-;5373:13;;5332:16;;;;5395:55;5373:13;5332:16;5417:15;;;5395:55;:::i;:::-;5539:13;;5472:20;;;5512:1;;5599;5621:18;;;;5674;;;;5701:93;;5779:4;5769:8;5765:19;5753:31;;5701:93;5842:2;5832:8;5829:16;5809:18;5806:40;5803:167;;;-1:-1:-1;;;5869:33:1;;5925:4;5922:1;5915:15;5955:4;5876:3;5943:17;5803:167;5986:18;6013:110;;;;6137:1;6132:328;;;;5979:481;;6013:110;-1:-1:-1;;6048:24:1;;6034:39;;6093:20;;;;-1:-1:-1;6013:110:1;;6132:328;16316:1;16309:14;;;16353:4;16340:18;;6227:1;6241:169;6255:8;6252:1;6249:15;6241:169;;;6337:14;;6322:13;;;6315:37;6380:16;;;;6272:10;;6241:169;;;6245:3;;6441:8;6434:5;6430:20;6423:27;;5979:481;-1:-1:-1;6476:3:1;;4958:1527;-1:-1:-1;;;;;;;;;;;4958:1527:1:o;7078:488::-;-1:-1:-1;;;;;7347:15:1;;;7329:34;;7399:15;;7394:2;7379:18;;7372:43;7446:2;7431:18;;7424:34;;;7494:3;7489:2;7474:18;;7467:31;;;7272:4;;7515:45;;7540:19;;7532:6;7515:45;:::i;:::-;7507:53;7078:488;-1:-1:-1;;;;;;7078:488:1:o;7763:219::-;7912:2;7901:9;7894:21;7875:4;7932:44;7972:2;7961:9;7957:18;7949:6;7932:44;:::i;7987:407::-;8189:2;8171:21;;;8228:2;8208:18;;;8201:30;8267:34;8262:2;8247:18;;8240:62;-1:-1:-1;;;8333:2:1;8318:18;;8311:41;8384:3;8369:19;;7987:407::o;8399:414::-;8601:2;8583:21;;;8640:2;8620:18;;;8613:30;8679:34;8674:2;8659:18;;8652:62;-1:-1:-1;;;8745:2:1;8730:18;;8723:48;8803:3;8788:19;;8399:414::o;12752:356::-;12954:2;12936:21;;;12973:18;;;12966:30;13032:34;13027:2;13012:18;;13005:62;13099:2;13084:18;;12752:356::o;13113:405::-;13315:2;13297:21;;;13354:2;13334:18;;;13327:30;13393:34;13388:2;13373:18;;13366:62;-1:-1:-1;;;13459:2:1;13444:18;;13437:39;13508:3;13493:19;;13113:405::o;14341:413::-;14543:2;14525:21;;;14582:2;14562:18;;;14555:30;14621:34;14616:2;14601:18;;14594:62;-1:-1:-1;;;14687:2:1;14672:18;;14665:47;14744:3;14729:19;;14341:413::o;16369:128::-;16409:3;16440:1;16436:6;16433:1;16430:13;16427:39;;;16446:18;;:::i;:::-;-1:-1:-1;16482:9:1;;16369:128::o;16502:120::-;16542:1;16568;16558:35;;16573:18;;:::i;:::-;-1:-1:-1;16607:9:1;;16502:120::o;16627:125::-;16667:4;16695:1;16692;16689:8;16686:34;;;16700:18;;:::i;:::-;-1:-1:-1;16737:9:1;;16627:125::o;16757:258::-;16829:1;16839:113;16853:6;16850:1;16847:13;16839:113;;;16929:11;;;16923:18;16910:11;;;16903:39;16875:2;16868:10;16839:113;;;16970:6;16967:1;16964:13;16961:48;;;-1:-1:-1;;17005:1:1;16987:16;;16980:27;16757:258::o;17020:380::-;17099:1;17095:12;;;;17142;;;17163:61;;17217:4;17209:6;17205:17;17195:27;;17163:61;17270:2;17262:6;17259:14;17239:18;17236:38;17233:161;;;17316:10;17311:3;17307:20;17304:1;17297:31;17351:4;17348:1;17341:15;17379:4;17376:1;17369:15;17233:161;;17020:380;;;:::o;17405:135::-;17444:3;-1:-1:-1;;17465:17:1;;17462:43;;;17485:18;;:::i;:::-;-1:-1:-1;17532:1:1;17521:13;;17405:135::o;17545:112::-;17577:1;17603;17593:35;;17608:18;;:::i;:::-;-1:-1:-1;17642:9:1;;17545:112::o;17662:127::-;17723:10;17718:3;17714:20;17711:1;17704:31;17754:4;17751:1;17744:15;17778:4;17775:1;17768:15;17794:127;17855:10;17850:3;17846:20;17843:1;17836:31;17886:4;17883:1;17876:15;17910:4;17907:1;17900:15;17926:127;17987:10;17982:3;17978:20;17975:1;17968:31;18018:4;18015:1;18008:15;18042:4;18039:1;18032:15;18058:127;18119:10;18114:3;18110:20;18107:1;18100:31;18150:4;18147:1;18140:15;18174:4;18171:1;18164:15;18190:131;-1:-1:-1;;;;;18265:31:1;;18255:42;;18245:70;;18311:1;18308;18301:12;18326:131;-1:-1:-1;;;;;;18400:32:1;;18390:43;;18380:71;;18447:1;18444;18437:12

Swarm Source

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