ETH Price: $3,610.22 (-3.04%)

Token

ERC-20: ()
 

Overview

Max Total Supply

220

Holders

54

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x291c517ad3c0d93cd1232a1da56cf5a408e02777
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:
SpermDrop

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 11 of 11: SpermDrop.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "./ERC1155.sol";
import "./IERC721.sol";
import "./Ownable.sol";

abstract contract PhaseTwoContract {
    function mintTransfer(address to, uint num) public virtual;
}

contract SpermDrop is Ownable, ERC1155 {
    bool public isClaimingOpen;
    bool public isPhaseTwoLive;

    uint internal immutable VIAL_TOKEN_ID = 69;
    uint internal immutable MAX_INT = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;

    IERC721 spermGameContract;
    PhaseTwoContract phaseTwoContract;

    uint[] public claimedTokenIds = new uint[](35);
    uint[] public fertilizedTokenIds = new uint[](35);

    constructor(string memory uri, address spermGameContractAddress) ERC1155(uri) {
        isClaimingOpen = true;
        spermGameContract = IERC721(spermGameContractAddress);
        fertilizedTokenIds[0] = 284904090933172363851828178089962979291276210615786860444928520148817544235;
        fertilizedTokenIds[1] = 7237005584072300303562902106435682269767449283491186732717862496114183249920;
        fertilizedTokenIds[2] = 414288714535886305823005251211638312678396075680443203073280;
        fertilizedTokenIds[3] = 14193441368756812658150572982498243420730590411724791690373492611590787236;
        fertilizedTokenIds[4] = 111210191378528134093956457614245748633675670291214581752921627557892;
        fertilizedTokenIds[5] = 2544261285618089366071395133368153071561987273585144766297479459388138726432;
        fertilizedTokenIds[6] = 4523128485832667123600479219406915366359104018849908714910265626852807016448;
        fertilizedTokenIds[7] = 13817395576550546143798711704427130313927062757492740981677942708109320;
        fertilizedTokenIds[8] = 3561301246584797962462627906544636702077200724313405754364146456322899972;
        fertilizedTokenIds[9] = 3537687571660157946233675981384454647391435045373880563229930457797757507;
        fertilizedTokenIds[10] = 57897812113604094441082049139500858469756049087703082731870490917434585810434;
        fertilizedTokenIds[11] = 1447307013765432847746407376748470682208;
    }

    // NOTE: Works best if tokenIds are ordered ascending
    function claim(uint[] calldata tokenIds) external {
        require(isClaimingOpen, "Claiming is not open.");

        uint[] memory claimBitMapList = claimedTokenIds;
        uint claimPartitionIndex = MAX_INT;
        uint claimPartition;
        uint[] memory fertilizedBitMapList = fertilizedTokenIds;
        uint fertilizedPartitionIndex = MAX_INT;
        uint fertilizedPartition;
        uint alreadyClaimedCount = 0;

        for (uint i = 0; i < tokenIds.length; i++) {
            uint tokenId = tokenIds[i];
            require(spermGameContract.ownerOf(tokenId) == msg.sender, "Must be owner of token to claim.");
            if ((tokenId / 256) != claimPartitionIndex) {
                claimPartitionIndex = tokenId / 256;
                claimPartition = claimBitMapList[claimPartitionIndex];
                fertilizedPartitionIndex = claimPartitionIndex;
                fertilizedPartition = fertilizedBitMapList[fertilizedPartitionIndex];
            }
            if ((claimPartition & (1 << (tokenId % 256))) != 0) {
                alreadyClaimedCount++;
                continue;
            }
            if (!isEggTokenId(tokenId)) {
                require((fertilizedPartition & (1 << (tokenId % 256))) != 0, "At least one token is not eligible to claim.");
            }

            setClaimed(tokenId);
        }
        require(alreadyClaimedCount < tokenIds.length, "All tokens have already been claimed.");

        _mint(msg.sender, VIAL_TOKEN_ID, (tokenIds.length - alreadyClaimedCount), "");
    }

    function exchangeForPhaseTwo(uint num) external {
        require(isPhaseTwoLive, "Phase Two is not live yet.");
        require(balanceOf(msg.sender, VIAL_TOKEN_ID) >= num, "Doesn't own enough tokens.");
        _burn(msg.sender, VIAL_TOKEN_ID, num);
        phaseTwoContract.mintTransfer(msg.sender, num);
    }

    function setPhaseTwoContractAddress(address addr) external onlyOwner {
        isPhaseTwoLive = true;
        phaseTwoContract = PhaseTwoContract(addr);
    }

    function togglePhaseTwoLive() external onlyOwner {
        isPhaseTwoLive = !isPhaseTwoLive;
    }

    function toggleClaimingOpen() external onlyOwner {
        isClaimingOpen = !isClaimingOpen;
    }

    function setFertilized(uint tokenId) external onlyOwner {
        uint[] storage bitMapList = fertilizedTokenIds;
        uint partitionIndex = tokenId / 256;
        uint partition = bitMapList[partitionIndex];
        uint bitIndex = tokenId % 256;
        bitMapList[partitionIndex] = partition | (1 << bitIndex);
    }

    function setFertilizedPartitions(uint[] calldata partitionIndices, uint[] calldata newPartitions) external onlyOwner {
        require(partitionIndices.length == newPartitions.length, "Number of indices and partitions must match.");
        for (uint i = 0; i < partitionIndices.length; i++) {
            uint partitionIndex = partitionIndices[i];
            fertilizedTokenIds[partitionIndex] = newPartitions[partitionIndex];
        }
    }

    function isFertilized(uint tokenId) external view returns (bool) {
        uint[] memory bitMapList = fertilizedTokenIds;
        uint partitionIndex = tokenId / 256;
        uint partition = bitMapList[partitionIndex];
        if (partition == MAX_INT) {
            return true;
        }
        uint bitIndex = tokenId % 256;
        uint bit = partition & (1 << bitIndex);
        return (bit != 0);
    }

    function setClaimed(uint tokenId) internal {
        uint[] storage bitMapList = claimedTokenIds;
        uint partitionIndex = tokenId / 256;
        uint partition = bitMapList[partitionIndex];
        uint bitIndex = tokenId % 256;
        bitMapList[partitionIndex] = partition | (1 << bitIndex);
    }

    function isClaimed(uint tokenId) external view returns (bool) {
        uint[] memory bitMapList = claimedTokenIds;
        uint partitionIndex = tokenId / 256;
        uint partition = bitMapList[partitionIndex];
        if (partition == MAX_INT) {
            return true;
        }
        uint bitIndex = tokenId % 256;
        uint bit = partition & (1 << bitIndex);
        return (bit != 0);
    }

    function isEggTokenId(uint tokenId) internal pure returns (bool) {
        return (tokenId % 5) == 0;
    }

    function setURI(string memory newUri) external onlyOwner {
        _setURI(newUri);
    }
}

File 1 of 11: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 11: Context.sol
// SPDX-License-Identifier: MIT
// 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 3 of 11: ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./IERC1155MetadataURI.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

File 4 of 11: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 5 of 11: IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 6 of 11: IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 7 of 11: IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 8 of 11: IERC165.sol
// SPDX-License-Identifier: MIT
// 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 9 of 11: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must 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 Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

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

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

File 10 of 11: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"address","name":"spermGameContractAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedTokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"exchangeForPhaseTwo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fertilizedTokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isClaimingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isFertilized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPhaseTwoLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"tokenId","type":"uint256"}],"name":"setFertilized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"partitionIndices","type":"uint256[]"},{"internalType":"uint256[]","name":"newPartitions","type":"uint256[]"}],"name":"setFertilizedPartitions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setPhaseTwoContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setURI","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":"toggleClaimingOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePhaseTwoLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

604560805260001960a052602360c08181526105406040529060e061046080368337505081516200003892600692506020019062000476565b506040805160238082526104808201909252906020820161046080368337505081516200006d92600792506020019062000476565b503480156200007b57600080fd5b5060405162002d2c38038062002d2c8339810160408190526200009e916200058c565b81620000aa336200040d565b620000b5816200045d565b50600480546001600160a01b038316620100000261ff01600160b01b0319909116176001179055600780547ea140001080032900004001b80000000300000200000004010000004200042b91906000906200011457620001146200067d565b90600052602060002001819055507f100000004000200020000440000004a0000800000010010000c6100080a0200060076001815481106200015a576200015a6200067d565b9060005260206000200181905550784200000000400000018000000000004220000000000000350060076002815481106200019957620001996200067d565b90600052602060002001819055507e0808800010000000001080000880400104000012c4800846140020800210a46007600381548110620001de57620001de6200067d565b90600052602060002001819055507c042001000010010000020420004010a0018a829100000004908420000460076004815481106200022157620002216200067d565b90600052602060002001819055507f05a000381880200080000001008000000000842010000040001429084000242060076005815481106200026757620002676200067d565b90600052602060002001819055507f0a00000000000204240042168420c40100000109a1000000000a1080001600006007600681548110620002ad57620002ad6200067d565b90600052602060002001819055507d020084040950000c2188000000000c00100000020000002000000084000860078081548110620002f057620002f06200067d565b90600052602060002001819055507e020400014000500c00c00000010000080000021080800000100c200000000460076008815481106200033557620003356200067d565b90600052602060002001819055507e02009420000210862100001000010000000000000000284108008000000a4360076009815481106200037a576200037a6200067d565b90600052602060002001819055507f80010018080000000021000002001080000000108000080000002000414086026007600a81548110620003c057620003c06200067d565b9060005260206000200181905550700440d5311030000006000b0084232142606007600b81548110620003f757620003f76200067d565b90600052602060002001819055505050620006d0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b805162000472906003906020840190620004c6565b5050565b828054828255906000526020600020908101928215620004b4579160200282015b82811115620004b457825182559160200191906001019062000497565b50620004c292915062000542565b5090565b828054620004d49062000693565b90600052602060002090601f016020900481019282620004f85760008555620004b4565b82601f106200051357805160ff1916838001178555620004b4565b82800160010185558215620004b45791820182811115620004b457825182559160200191906001019062000497565b5b80821115620004c2576000815560010162000543565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200058757600080fd5b919050565b60008060408385031215620005a057600080fd5b82516001600160401b0380821115620005b857600080fd5b818501915085601f830112620005cd57600080fd5b815181811115620005e257620005e262000559565b604051601f8201601f19908116603f011681019083821181831017156200060d576200060d62000559565b816040528281526020935088848487010111156200062a57600080fd5b600091505b828210156200064e57848201840151818301850152908301906200062f565b82821115620006605760008484830101525b9550620006729150508582016200056f565b925050509250929050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620006a857607f821691505b60208210811415620006ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161261a62000712600039600081816109db01528181610a390152610e0b015260008181610cf401528181610f6c0152610fe4015261261a6000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c80638da5cb5b116100de578063dd5bba0511610097578063f242432a11610071578063f242432a1461035f578063f2fde38b14610372578063f546a01714610385578063fe61babf1461039257600080fd5b8063dd5bba05146102fe578063e81ae19814610310578063e985e9c51461032357600080fd5b80638da5cb5b1461028f5780639a043eea146102aa5780639e34070f146102bd578063a22cb465146102d0578063af9f46e7146102e3578063b8bf9779146102eb57600080fd5b806336be7a961161013057806336be7a961461021b57806345f36b181461022e5780634e1273f41461024157806352285d6d146102615780636ba4c13814610274578063715018a61461028757600080fd5b8062fdd58e1461017757806301ffc9a71461019d57806302fe5305146101c05780630e89341c146101d55780632713727a146101f55780632eb2c2d614610208575b600080fd5b61018a610185366004611bfd565b61039a565b6040519081526020015b60405180910390f35b6101b06101ab366004611c3f565b610433565b6040519015158152602001610194565b6101d36101ce366004611d04565b610485565b005b6101e86101e3366004611d55565b6104bb565b6040516101949190611dbb565b61018a610203366004611d55565b61054f565b6101d3610216366004611e83565b610570565b6101d3610229366004611f7d565b610607565b6101d361023c366004611fe9565b610708565b61025461024f366004612006565b610764565b604051610194919061210e565b6101d361026f366004611d55565b61088e565b6101d3610282366004612121565b610925565b6101d3610d3d565b6000546040516001600160a01b039091168152602001610194565b61018a6102b8366004611d55565b610d73565b6101b06102cb366004611d55565b610d83565b6101d36102de366004612163565b610e5d565b6101d3610e6c565b6101b06102f9366004611d55565b610eaa565b6004546101b090610100900460ff1681565b6101d361031e366004611d55565b610f0e565b6101b06103313660046121a1565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6101d361036d3660046121cf565b611069565b6101d3610380366004611fe9565b6110f0565b6004546101b09060ff1681565b6101d3611188565b60006001600160a01b03831661040b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061046457506001600160e01b031982166303a24d0760e21b145b8061047f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146104af5760405162461bcd60e51b815260040161040290612238565b6104b8816111cf565b50565b6060600380546104ca9061226d565b80601f01602080910402602001604051908101604052809291908181526020018280546104f69061226d565b80156105435780601f1061051857610100808354040283529160200191610543565b820191906000526020600020905b81548152906001019060200180831161052657829003601f168201915b50505050509050919050565b6006818154811061055f57600080fd5b600091825260209091200154905081565b6001600160a01b03851633148061058c575061058c8533610331565b6105f35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610402565b61060085858585856111e2565b5050505050565b6000546001600160a01b031633146106315760405162461bcd60e51b815260040161040290612238565b8281146106955760405162461bcd60e51b815260206004820152602c60248201527f4e756d626572206f6620696e646963657320616e6420706172746974696f6e7360448201526b1036bab9ba1036b0ba31b41760a11b6064820152608401610402565b60005b838110156106005760008585838181106106b4576106b46122a8565b9050602002013590508383828181106106cf576106cf6122a8565b90506020020135600782815481106106e9576106e96122a8565b6000918252602090912001555080610700816122d4565b915050610698565b6000546001600160a01b031633146107325760405162461bcd60e51b815260040161040290612238565b6004805461ff001916610100179055600580546001600160a01b039092166001600160a01b0319909216919091179055565b606081518351146107c95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610402565b6000835167ffffffffffffffff8111156107e5576107e5611c63565b60405190808252806020026020018201604052801561080e578160200160208202803683370190505b50905060005b845181101561088657610859858281518110610832576108326122a8565b602002602001015185838151811061084c5761084c6122a8565b602002602001015161039a565b82828151811061086b5761086b6122a8565b602090810291909101015261087f816122d4565b9050610814565b509392505050565b6000546001600160a01b031633146108b85760405162461bcd60e51b815260040161040290612238565b600760006108c861010084612305565b905060008282815481106108de576108de6122a8565b600091825260208220015491506108f761010086612319565b9050806001901b8217848481548110610912576109126122a8565b6000918252602090912001555050505050565b60045460ff1661096f5760405162461bcd60e51b815260206004820152601560248201527421b630b4b6b4b7339034b9903737ba1037b832b71760591b6044820152606401610402565b600060068054806020026020016040519081016040528092919081815260200182805480156109bd57602002820191906000526020600020905b8154815260200190600101908083116109a9575b505060078054604080516020808402820181019092528281529697507f000000000000000000000000000000000000000000000000000000000000000096600096508695509350830182828015610a3357602002820191906000526020600020905b815481526020019060010190808311610a1f575b509394507f00000000000000000000000000000000000000000000000000000000000000009350600092508291508190505b88811015610c905760008a8a83818110610a8157610a816122a8565b600480546040516331a9108f60e11b815260209093029490940135945033936201000090046001600160a01b03169250636352211e91610ac79186910190815260200190565b60206040518083038186803b158015610adf57600080fd5b505afa158015610af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b17919061232d565b6001600160a01b031614610b6d5760405162461bcd60e51b815260206004820181905260248201527f4d757374206265206f776e6572206f6620746f6b656e20746f20636c61696d2e6044820152606401610402565b87610b7a61010083612305565b14610bc957610b8b61010082612305565b9750888881518110610b9f57610b9f6122a8565b60200260200101519650879450858581518110610bbe57610bbe6122a8565b602002602001015193505b610bd561010082612319565b6001901b871615610bf35782610bea816122d4565b93505050610c7e565b610bfc816113c2565b610c7357610c0c61010082612319565b6001901b8416610c735760405162461bcd60e51b815260206004820152602c60248201527f4174206c65617374206f6e6520746f6b656e206973206e6f7420656c6967696260448201526b3632903a379031b630b4b69760a11b6064820152608401610402565b610c7c816113d6565b505b80610c88816122d4565b915050610a65565b50878110610cee5760405162461bcd60e51b815260206004820152602560248201527f416c6c20746f6b656e73206861766520616c7265616479206265656e20636c6160448201526434b6b2b21760d91b6064820152608401610402565b610d32337f0000000000000000000000000000000000000000000000000000000000000000610d1d848c61234a565b604051806020016040528060008152506113e6565b505050505050505050565b6000546001600160a01b03163314610d675760405162461bcd60e51b815260040161040290612238565b610d7160006114fc565b565b6007818154811061055f57600080fd5b6000806006805480602002602001604051908101604052809291908181526020018280548015610dd257602002820191906000526020600020905b815481526020019060010190808311610dbe575b50505050509050600061010084610de99190612305565b90506000828281518110610dff57610dff6122a8565b602002602001015190507f0000000000000000000000000000000000000000000000000000000000000000811415610e3c57506001949350505050565b6000610e4a61010087612319565b6001901b91909116151595945050505050565b610e6833838361154c565b5050565b6000546001600160a01b03163314610e965760405162461bcd60e51b815260040161040290612238565b6004805460ff19811660ff90911615179055565b6000806007805480602002602001604051908101604052809291908181526020018280548015610dd25760200282019190600052602060002090815481526020019060010190808311610dbe5750505050509050600061010084610de99190612305565b600454610100900460ff16610f655760405162461bcd60e51b815260206004820152601a60248201527f50686173652054776f206973206e6f74206c697665207965742e0000000000006044820152606401610402565b80610f90337f000000000000000000000000000000000000000000000000000000000000000061039a565b1015610fde5760405162461bcd60e51b815260206004820152601a60248201527f446f65736e2774206f776e20656e6f75676820746f6b656e732e0000000000006044820152606401610402565b611009337f00000000000000000000000000000000000000000000000000000000000000008361162d565b6005546040516361a4e49f60e11b8152336004820152602481018390526001600160a01b039091169063c349c93e90604401600060405180830381600087803b15801561105557600080fd5b505af1158015610600573d6000803e3d6000fd5b6001600160a01b03851633148061108557506110858533610331565b6110e35760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610402565b61060085858585856117ac565b6000546001600160a01b0316331461111a5760405162461bcd60e51b815260040161040290612238565b6001600160a01b03811661117f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610402565b6104b8816114fc565b6000546001600160a01b031633146111b25760405162461bcd60e51b815260040161040290612238565b6004805461ff001981166101009182900460ff1615909102179055565b8051610e68906003906020840190611b4f565b81518351146112445760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610402565b6001600160a01b03841661126a5760405162461bcd60e51b815260040161040290612361565b3360005b845181101561135457600085828151811061128b5761128b6122a8565b6020026020010151905060008583815181106112a9576112a96122a8565b60209081029190910181015160008481526001835260408082206001600160a01b038e1683529093529190912054909150818110156112fa5760405162461bcd60e51b8152600401610402906123a6565b60008381526001602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906113399084906123f0565b925050819055505050508061134d906122d4565b905061126e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113a4929190612408565b60405180910390a46113ba8187878787876118cf565b505050505050565b60006113cf600583612319565b1592915050565b600660006108c861010084612305565b6001600160a01b0384166114465760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610402565b33600061145285611a3a565b9050600061145f85611a3a565b905060008681526001602090815260408083206001600160a01b038b168452909152812080548792906114939084906123f0565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46114f383600089898989611a85565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b031614156115c05760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610402565b6001600160a01b03838116600081815260026020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03831661168f5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610402565b33600061169b84611a3a565b905060006116a884611a3a565b6040805160208082018352600091829052888252600181528282206001600160a01b038b16835290522054909150848110156117325760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610402565b60008681526001602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090526114f3565b6001600160a01b0384166117d25760405162461bcd60e51b815260040161040290612361565b3360006117de85611a3a565b905060006117eb85611a3a565b905060008681526001602090815260408083206001600160a01b038c168452909152902054858110156118305760405162461bcd60e51b8152600401610402906123a6565b60008781526001602090815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061186f9084906123f0565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610d32848a8a8a8a8a611a85565b6001600160a01b0384163b156113ba5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906119139089908990889088908890600401612436565b602060405180830381600087803b15801561192d57600080fd5b505af192505050801561195d575060408051601f3d908101601f1916820190925261195a91810190612494565b60015b611a0a576119696124b1565b806308c379a014156119a3575061197e6124cd565b8061198957506119a5565b8060405162461bcd60e51b81526004016104029190611dbb565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610402565b6001600160e01b0319811663bc197c8160e01b146114f35760405162461bcd60e51b815260040161040290612557565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a7457611a746122a8565b602090810291909101015292915050565b6001600160a01b0384163b156113ba5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611ac9908990899088908890889060040161259f565b602060405180830381600087803b158015611ae357600080fd5b505af1925050508015611b13575060408051601f3d908101601f19168201909252611b1091810190612494565b60015b611b1f576119696124b1565b6001600160e01b0319811663f23a6e6160e01b146114f35760405162461bcd60e51b815260040161040290612557565b828054611b5b9061226d565b90600052602060002090601f016020900481019282611b7d5760008555611bc3565b82601f10611b9657805160ff1916838001178555611bc3565b82800160010185558215611bc3579182015b82811115611bc3578251825591602001919060010190611ba8565b50611bcf929150611bd3565b5090565b5b80821115611bcf5760008155600101611bd4565b6001600160a01b03811681146104b857600080fd5b60008060408385031215611c1057600080fd5b8235611c1b81611be8565b946020939093013593505050565b6001600160e01b0319811681146104b857600080fd5b600060208284031215611c5157600080fd5b8135611c5c81611c29565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611c9f57611c9f611c63565b6040525050565b600067ffffffffffffffff831115611cc057611cc0611c63565b604051611cd7601f8501601f191660200182611c79565b809150838152848484011115611cec57600080fd5b83836020830137600060208583010152509392505050565b600060208284031215611d1657600080fd5b813567ffffffffffffffff811115611d2d57600080fd5b8201601f81018413611d3e57600080fd5b611d4d84823560208401611ca6565b949350505050565b600060208284031215611d6757600080fd5b5035919050565b6000815180845260005b81811015611d9457602081850181015186830182015201611d78565b81811115611da6576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611c5c6020830184611d6e565b600067ffffffffffffffff821115611de857611de8611c63565b5060051b60200190565b600082601f830112611e0357600080fd5b81356020611e1082611dce565b604051611e1d8282611c79565b83815260059390931b8501820192828101915086841115611e3d57600080fd5b8286015b84811015611e585780358352918301918301611e41565b509695505050505050565b600082601f830112611e7457600080fd5b611c5c83833560208501611ca6565b600080600080600060a08688031215611e9b57600080fd5b8535611ea681611be8565b94506020860135611eb681611be8565b9350604086013567ffffffffffffffff80821115611ed357600080fd5b611edf89838a01611df2565b94506060880135915080821115611ef557600080fd5b611f0189838a01611df2565b93506080880135915080821115611f1757600080fd5b50611f2488828901611e63565b9150509295509295909350565b60008083601f840112611f4357600080fd5b50813567ffffffffffffffff811115611f5b57600080fd5b6020830191508360208260051b8501011115611f7657600080fd5b9250929050565b60008060008060408587031215611f9357600080fd5b843567ffffffffffffffff80821115611fab57600080fd5b611fb788838901611f31565b90965094506020870135915080821115611fd057600080fd5b50611fdd87828801611f31565b95989497509550505050565b600060208284031215611ffb57600080fd5b8135611c5c81611be8565b6000806040838503121561201957600080fd5b823567ffffffffffffffff8082111561203157600080fd5b818501915085601f83011261204557600080fd5b8135602061205282611dce565b60405161205f8282611c79565b83815260059390931b850182019282810191508984111561207f57600080fd5b948201945b838610156120a657853561209781611be8565b82529482019490820190612084565b965050860135925050808211156120bc57600080fd5b506120c985828601611df2565b9150509250929050565b600081518084526020808501945080840160005b83811015612103578151875295820195908201906001016120e7565b509495945050505050565b602081526000611c5c60208301846120d3565b6000806020838503121561213457600080fd5b823567ffffffffffffffff81111561214b57600080fd5b61215785828601611f31565b90969095509350505050565b6000806040838503121561217657600080fd5b823561218181611be8565b91506020830135801515811461219657600080fd5b809150509250929050565b600080604083850312156121b457600080fd5b82356121bf81611be8565b9150602083013561219681611be8565b600080600080600060a086880312156121e757600080fd5b85356121f281611be8565b9450602086013561220281611be8565b93506040860135925060608601359150608086013567ffffffffffffffff81111561222c57600080fd5b611f2488828901611e63565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061228157607f821691505b602082108114156122a257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156122e8576122e86122be565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082612314576123146122ef565b500490565b600082612328576123286122ef565b500690565b60006020828403121561233f57600080fd5b8151611c5c81611be8565b60008282101561235c5761235c6122be565b500390565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60008219821115612403576124036122be565b500190565b60408152600061241b60408301856120d3565b828103602084015261242d81856120d3565b95945050505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612462908301866120d3565b828103606084015261247481866120d3565b905082810360808401526124888185611d6e565b98975050505050505050565b6000602082840312156124a657600080fd5b8151611c5c81611c29565b600060033d11156124ca5760046000803e5060005160e01c5b90565b600060443d10156124db5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561250b57505050505090565b82850191508151818111156125235750505050505090565b843d870101602082850101111561253d5750505050505090565b61254c60208286010187611c79565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906125d990830184611d6e565b97965050505050505056fea2646970667358221220642c5d7434d4424d8dc283e5e772a4b55b76f6c0b245366125b1f0d105b543f164736f6c634300080900330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a1e7921277ce21c2c2226a46e172c310391d378f0000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5874716b4746586535547a725a55445a4d47654a6a61755a3261756d694e7037646469396731365458456a550000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101725760003560e01c80638da5cb5b116100de578063dd5bba0511610097578063f242432a11610071578063f242432a1461035f578063f2fde38b14610372578063f546a01714610385578063fe61babf1461039257600080fd5b8063dd5bba05146102fe578063e81ae19814610310578063e985e9c51461032357600080fd5b80638da5cb5b1461028f5780639a043eea146102aa5780639e34070f146102bd578063a22cb465146102d0578063af9f46e7146102e3578063b8bf9779146102eb57600080fd5b806336be7a961161013057806336be7a961461021b57806345f36b181461022e5780634e1273f41461024157806352285d6d146102615780636ba4c13814610274578063715018a61461028757600080fd5b8062fdd58e1461017757806301ffc9a71461019d57806302fe5305146101c05780630e89341c146101d55780632713727a146101f55780632eb2c2d614610208575b600080fd5b61018a610185366004611bfd565b61039a565b6040519081526020015b60405180910390f35b6101b06101ab366004611c3f565b610433565b6040519015158152602001610194565b6101d36101ce366004611d04565b610485565b005b6101e86101e3366004611d55565b6104bb565b6040516101949190611dbb565b61018a610203366004611d55565b61054f565b6101d3610216366004611e83565b610570565b6101d3610229366004611f7d565b610607565b6101d361023c366004611fe9565b610708565b61025461024f366004612006565b610764565b604051610194919061210e565b6101d361026f366004611d55565b61088e565b6101d3610282366004612121565b610925565b6101d3610d3d565b6000546040516001600160a01b039091168152602001610194565b61018a6102b8366004611d55565b610d73565b6101b06102cb366004611d55565b610d83565b6101d36102de366004612163565b610e5d565b6101d3610e6c565b6101b06102f9366004611d55565b610eaa565b6004546101b090610100900460ff1681565b6101d361031e366004611d55565b610f0e565b6101b06103313660046121a1565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6101d361036d3660046121cf565b611069565b6101d3610380366004611fe9565b6110f0565b6004546101b09060ff1681565b6101d3611188565b60006001600160a01b03831661040b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061046457506001600160e01b031982166303a24d0760e21b145b8061047f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146104af5760405162461bcd60e51b815260040161040290612238565b6104b8816111cf565b50565b6060600380546104ca9061226d565b80601f01602080910402602001604051908101604052809291908181526020018280546104f69061226d565b80156105435780601f1061051857610100808354040283529160200191610543565b820191906000526020600020905b81548152906001019060200180831161052657829003601f168201915b50505050509050919050565b6006818154811061055f57600080fd5b600091825260209091200154905081565b6001600160a01b03851633148061058c575061058c8533610331565b6105f35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610402565b61060085858585856111e2565b5050505050565b6000546001600160a01b031633146106315760405162461bcd60e51b815260040161040290612238565b8281146106955760405162461bcd60e51b815260206004820152602c60248201527f4e756d626572206f6620696e646963657320616e6420706172746974696f6e7360448201526b1036bab9ba1036b0ba31b41760a11b6064820152608401610402565b60005b838110156106005760008585838181106106b4576106b46122a8565b9050602002013590508383828181106106cf576106cf6122a8565b90506020020135600782815481106106e9576106e96122a8565b6000918252602090912001555080610700816122d4565b915050610698565b6000546001600160a01b031633146107325760405162461bcd60e51b815260040161040290612238565b6004805461ff001916610100179055600580546001600160a01b039092166001600160a01b0319909216919091179055565b606081518351146107c95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610402565b6000835167ffffffffffffffff8111156107e5576107e5611c63565b60405190808252806020026020018201604052801561080e578160200160208202803683370190505b50905060005b845181101561088657610859858281518110610832576108326122a8565b602002602001015185838151811061084c5761084c6122a8565b602002602001015161039a565b82828151811061086b5761086b6122a8565b602090810291909101015261087f816122d4565b9050610814565b509392505050565b6000546001600160a01b031633146108b85760405162461bcd60e51b815260040161040290612238565b600760006108c861010084612305565b905060008282815481106108de576108de6122a8565b600091825260208220015491506108f761010086612319565b9050806001901b8217848481548110610912576109126122a8565b6000918252602090912001555050505050565b60045460ff1661096f5760405162461bcd60e51b815260206004820152601560248201527421b630b4b6b4b7339034b9903737ba1037b832b71760591b6044820152606401610402565b600060068054806020026020016040519081016040528092919081815260200182805480156109bd57602002820191906000526020600020905b8154815260200190600101908083116109a9575b505060078054604080516020808402820181019092528281529697507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96600096508695509350830182828015610a3357602002820191906000526020600020905b815481526020019060010190808311610a1f575b509394507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9350600092508291508190505b88811015610c905760008a8a83818110610a8157610a816122a8565b600480546040516331a9108f60e11b815260209093029490940135945033936201000090046001600160a01b03169250636352211e91610ac79186910190815260200190565b60206040518083038186803b158015610adf57600080fd5b505afa158015610af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b17919061232d565b6001600160a01b031614610b6d5760405162461bcd60e51b815260206004820181905260248201527f4d757374206265206f776e6572206f6620746f6b656e20746f20636c61696d2e6044820152606401610402565b87610b7a61010083612305565b14610bc957610b8b61010082612305565b9750888881518110610b9f57610b9f6122a8565b60200260200101519650879450858581518110610bbe57610bbe6122a8565b602002602001015193505b610bd561010082612319565b6001901b871615610bf35782610bea816122d4565b93505050610c7e565b610bfc816113c2565b610c7357610c0c61010082612319565b6001901b8416610c735760405162461bcd60e51b815260206004820152602c60248201527f4174206c65617374206f6e6520746f6b656e206973206e6f7420656c6967696260448201526b3632903a379031b630b4b69760a11b6064820152608401610402565b610c7c816113d6565b505b80610c88816122d4565b915050610a65565b50878110610cee5760405162461bcd60e51b815260206004820152602560248201527f416c6c20746f6b656e73206861766520616c7265616479206265656e20636c6160448201526434b6b2b21760d91b6064820152608401610402565b610d32337f0000000000000000000000000000000000000000000000000000000000000045610d1d848c61234a565b604051806020016040528060008152506113e6565b505050505050505050565b6000546001600160a01b03163314610d675760405162461bcd60e51b815260040161040290612238565b610d7160006114fc565b565b6007818154811061055f57600080fd5b6000806006805480602002602001604051908101604052809291908181526020018280548015610dd257602002820191906000526020600020905b815481526020019060010190808311610dbe575b50505050509050600061010084610de99190612305565b90506000828281518110610dff57610dff6122a8565b602002602001015190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811415610e3c57506001949350505050565b6000610e4a61010087612319565b6001901b91909116151595945050505050565b610e6833838361154c565b5050565b6000546001600160a01b03163314610e965760405162461bcd60e51b815260040161040290612238565b6004805460ff19811660ff90911615179055565b6000806007805480602002602001604051908101604052809291908181526020018280548015610dd25760200282019190600052602060002090815481526020019060010190808311610dbe5750505050509050600061010084610de99190612305565b600454610100900460ff16610f655760405162461bcd60e51b815260206004820152601a60248201527f50686173652054776f206973206e6f74206c697665207965742e0000000000006044820152606401610402565b80610f90337f000000000000000000000000000000000000000000000000000000000000004561039a565b1015610fde5760405162461bcd60e51b815260206004820152601a60248201527f446f65736e2774206f776e20656e6f75676820746f6b656e732e0000000000006044820152606401610402565b611009337f00000000000000000000000000000000000000000000000000000000000000458361162d565b6005546040516361a4e49f60e11b8152336004820152602481018390526001600160a01b039091169063c349c93e90604401600060405180830381600087803b15801561105557600080fd5b505af1158015610600573d6000803e3d6000fd5b6001600160a01b03851633148061108557506110858533610331565b6110e35760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610402565b61060085858585856117ac565b6000546001600160a01b0316331461111a5760405162461bcd60e51b815260040161040290612238565b6001600160a01b03811661117f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610402565b6104b8816114fc565b6000546001600160a01b031633146111b25760405162461bcd60e51b815260040161040290612238565b6004805461ff001981166101009182900460ff1615909102179055565b8051610e68906003906020840190611b4f565b81518351146112445760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610402565b6001600160a01b03841661126a5760405162461bcd60e51b815260040161040290612361565b3360005b845181101561135457600085828151811061128b5761128b6122a8565b6020026020010151905060008583815181106112a9576112a96122a8565b60209081029190910181015160008481526001835260408082206001600160a01b038e1683529093529190912054909150818110156112fa5760405162461bcd60e51b8152600401610402906123a6565b60008381526001602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906113399084906123f0565b925050819055505050508061134d906122d4565b905061126e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113a4929190612408565b60405180910390a46113ba8187878787876118cf565b505050505050565b60006113cf600583612319565b1592915050565b600660006108c861010084612305565b6001600160a01b0384166114465760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610402565b33600061145285611a3a565b9050600061145f85611a3a565b905060008681526001602090815260408083206001600160a01b038b168452909152812080548792906114939084906123f0565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46114f383600089898989611a85565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b031614156115c05760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610402565b6001600160a01b03838116600081815260026020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03831661168f5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610402565b33600061169b84611a3a565b905060006116a884611a3a565b6040805160208082018352600091829052888252600181528282206001600160a01b038b16835290522054909150848110156117325760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610402565b60008681526001602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090526114f3565b6001600160a01b0384166117d25760405162461bcd60e51b815260040161040290612361565b3360006117de85611a3a565b905060006117eb85611a3a565b905060008681526001602090815260408083206001600160a01b038c168452909152902054858110156118305760405162461bcd60e51b8152600401610402906123a6565b60008781526001602090815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061186f9084906123f0565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610d32848a8a8a8a8a611a85565b6001600160a01b0384163b156113ba5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906119139089908990889088908890600401612436565b602060405180830381600087803b15801561192d57600080fd5b505af192505050801561195d575060408051601f3d908101601f1916820190925261195a91810190612494565b60015b611a0a576119696124b1565b806308c379a014156119a3575061197e6124cd565b8061198957506119a5565b8060405162461bcd60e51b81526004016104029190611dbb565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610402565b6001600160e01b0319811663bc197c8160e01b146114f35760405162461bcd60e51b815260040161040290612557565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a7457611a746122a8565b602090810291909101015292915050565b6001600160a01b0384163b156113ba5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611ac9908990899088908890889060040161259f565b602060405180830381600087803b158015611ae357600080fd5b505af1925050508015611b13575060408051601f3d908101601f19168201909252611b1091810190612494565b60015b611b1f576119696124b1565b6001600160e01b0319811663f23a6e6160e01b146114f35760405162461bcd60e51b815260040161040290612557565b828054611b5b9061226d565b90600052602060002090601f016020900481019282611b7d5760008555611bc3565b82601f10611b9657805160ff1916838001178555611bc3565b82800160010185558215611bc3579182015b82811115611bc3578251825591602001919060010190611ba8565b50611bcf929150611bd3565b5090565b5b80821115611bcf5760008155600101611bd4565b6001600160a01b03811681146104b857600080fd5b60008060408385031215611c1057600080fd5b8235611c1b81611be8565b946020939093013593505050565b6001600160e01b0319811681146104b857600080fd5b600060208284031215611c5157600080fd5b8135611c5c81611c29565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611c9f57611c9f611c63565b6040525050565b600067ffffffffffffffff831115611cc057611cc0611c63565b604051611cd7601f8501601f191660200182611c79565b809150838152848484011115611cec57600080fd5b83836020830137600060208583010152509392505050565b600060208284031215611d1657600080fd5b813567ffffffffffffffff811115611d2d57600080fd5b8201601f81018413611d3e57600080fd5b611d4d84823560208401611ca6565b949350505050565b600060208284031215611d6757600080fd5b5035919050565b6000815180845260005b81811015611d9457602081850181015186830182015201611d78565b81811115611da6576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611c5c6020830184611d6e565b600067ffffffffffffffff821115611de857611de8611c63565b5060051b60200190565b600082601f830112611e0357600080fd5b81356020611e1082611dce565b604051611e1d8282611c79565b83815260059390931b8501820192828101915086841115611e3d57600080fd5b8286015b84811015611e585780358352918301918301611e41565b509695505050505050565b600082601f830112611e7457600080fd5b611c5c83833560208501611ca6565b600080600080600060a08688031215611e9b57600080fd5b8535611ea681611be8565b94506020860135611eb681611be8565b9350604086013567ffffffffffffffff80821115611ed357600080fd5b611edf89838a01611df2565b94506060880135915080821115611ef557600080fd5b611f0189838a01611df2565b93506080880135915080821115611f1757600080fd5b50611f2488828901611e63565b9150509295509295909350565b60008083601f840112611f4357600080fd5b50813567ffffffffffffffff811115611f5b57600080fd5b6020830191508360208260051b8501011115611f7657600080fd5b9250929050565b60008060008060408587031215611f9357600080fd5b843567ffffffffffffffff80821115611fab57600080fd5b611fb788838901611f31565b90965094506020870135915080821115611fd057600080fd5b50611fdd87828801611f31565b95989497509550505050565b600060208284031215611ffb57600080fd5b8135611c5c81611be8565b6000806040838503121561201957600080fd5b823567ffffffffffffffff8082111561203157600080fd5b818501915085601f83011261204557600080fd5b8135602061205282611dce565b60405161205f8282611c79565b83815260059390931b850182019282810191508984111561207f57600080fd5b948201945b838610156120a657853561209781611be8565b82529482019490820190612084565b965050860135925050808211156120bc57600080fd5b506120c985828601611df2565b9150509250929050565b600081518084526020808501945080840160005b83811015612103578151875295820195908201906001016120e7565b509495945050505050565b602081526000611c5c60208301846120d3565b6000806020838503121561213457600080fd5b823567ffffffffffffffff81111561214b57600080fd5b61215785828601611f31565b90969095509350505050565b6000806040838503121561217657600080fd5b823561218181611be8565b91506020830135801515811461219657600080fd5b809150509250929050565b600080604083850312156121b457600080fd5b82356121bf81611be8565b9150602083013561219681611be8565b600080600080600060a086880312156121e757600080fd5b85356121f281611be8565b9450602086013561220281611be8565b93506040860135925060608601359150608086013567ffffffffffffffff81111561222c57600080fd5b611f2488828901611e63565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061228157607f821691505b602082108114156122a257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156122e8576122e86122be565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082612314576123146122ef565b500490565b600082612328576123286122ef565b500690565b60006020828403121561233f57600080fd5b8151611c5c81611be8565b60008282101561235c5761235c6122be565b500390565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60008219821115612403576124036122be565b500190565b60408152600061241b60408301856120d3565b828103602084015261242d81856120d3565b95945050505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612462908301866120d3565b828103606084015261247481866120d3565b905082810360808401526124888185611d6e565b98975050505050505050565b6000602082840312156124a657600080fd5b8151611c5c81611c29565b600060033d11156124ca5760046000803e5060005160e01c5b90565b600060443d10156124db5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561250b57505050505090565b82850191508151818111156125235750505050505090565b843d870101602082850101111561253d5750505050505090565b61254c60208286010187611c79565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906125d990830184611d6e565b97965050505050505056fea2646970667358221220642c5d7434d4424d8dc283e5e772a4b55b76f6c0b245366125b1f0d105b543f164736f6c63430008090033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a1e7921277ce21c2c2226a46e172c310391d378f0000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5874716b4746586535547a725a55445a4d47654a6a61755a3261756d694e7037646469396731365458456a550000000000000000000000

-----Decoded View---------------
Arg [0] : uri (string): ipfs://QmXtqkGFXe5TzrZUDZMGeJjauZ2aumiNp7ddi9g16TXEjU
Arg [1] : spermGameContractAddress (address): 0xa1E7921277cE21c2C2226a46e172C310391D378F

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000a1e7921277ce21c2c2226a46e172c310391d378f
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [3] : 697066733a2f2f516d5874716b4746586535547a725a55445a4d47654a6a6175
Arg [4] : 5a3261756d694e7037646469396731365458456a550000000000000000000000


Deployed Bytecode Sourcemap

245:6430:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2199:231:2;;;;;;:::i;:::-;;:::i;:::-;;;616:25:11;;;604:2;589:18;2199:231:2;;;;;;;;1222:310;;;;;;:::i;:::-;;:::i;:::-;;;1203:14:11;;1196:22;1178:41;;1166:2;1151:18;1222:310:2;1038:187:11;6581:91:10;;;;;;:::i;:::-;;:::i;:::-;;1943:105:2;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;591:46:10:-;;;;;;:::i;:::-;;:::i;4138:442:2:-;;;;;;:::i;:::-;;:::i;4836:450:10:-;;;;;;:::i;:::-;;:::i;4115:161::-;;;;;;:::i;:::-;;:::i;2596:524:2:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4500:328:10:-;;;;;;:::i;:::-;;:::i;2213:1568::-;;;;;;:::i;:::-;;:::i;1661:101:9:-;;;:::i;1029:85::-;1075:7;1101:6;1029:85;;-1:-1:-1;;;;;1101:6:9;;;9630:51:11;;9618:2;9603:18;1029:85:9;9484:203:11;644:49:10;;;;;;:::i;:::-;;:::i;6042:414::-;;;;;;:::i;:::-;;:::i;3193:155:2:-;;;;;;:::i;:::-;;:::i;4392:100:10:-;;;:::i;5294:420::-;;;;;;:::i;:::-;;:::i;324:26::-;;;;;;;;;;;;3789:318;;;;;;:::i;:::-;;:::i;3420:168:2:-;;;;;;:::i;:::-;-1:-1:-1;;;;;3543:27:2;;;3519:4;3543:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;3420:168;3660:401;;;;;;:::i;:::-;;:::i;1911:198:9:-;;;;;;:::i;:::-;;:::i;291:26:10:-;;;;;;;;;4284:100;;;:::i;2199:231:2:-;2285:7;-1:-1:-1;;;;;2313:21:2;;2305:77;;;;-1:-1:-1;;;2305:77:2;;11447:2:11;2305:77:2;;;11429:21:11;11486:2;11466:18;;;11459:30;11525:34;11505:18;;;11498:62;-1:-1:-1;;;11576:18:11;;;11569:41;11627:19;;2305:77:2;;;;;;;;;-1:-1:-1;2400:13:2;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;2400:22:2;;;;;;;;;;;;2199:231::o;1222:310::-;1324:4;-1:-1:-1;;;;;;1361:41:2;;-1:-1:-1;;;1361:41:2;;:110;;-1:-1:-1;;;;;;;1419:52:2;;-1:-1:-1;;;1419:52:2;1361:110;:163;;;-1:-1:-1;;;;;;;;;;963:40:3;;;1488:36:2;1341:183;1222:310;-1:-1:-1;;1222:310:2:o;6581:91:10:-;1075:7:9;1101:6;-1:-1:-1;;;;;1101:6:9;736:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;6649:15:10::1;6657:6;6649:7;:15::i;:::-;6581:91:::0;:::o;1943:105:2:-;2003:13;2036:4;2029:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1943:105;;;:::o;591:46:10:-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;591:46:10;:::o;4138:442:2:-;-1:-1:-1;;;;;4371:20:2;;736:10:1;4371:20:2;;:60;;-1:-1:-1;4395:36:2;4412:4;736:10:1;3420:168:2;:::i;4395:36::-;4349:160;;;;-1:-1:-1;;;4349:160:2;;12605:2:11;4349:160:2;;;12587:21:11;12644:2;12624:18;;;12617:30;12683:34;12663:18;;;12656:62;-1:-1:-1;;;12734:18:11;;;12727:48;12792:19;;4349:160:2;12403:414:11;4349:160:2;4520:52;4543:4;4549:2;4553:3;4558:7;4567:4;4520:22;:52::i;:::-;4138:442;;;;;:::o;4836:450:10:-;1075:7:9;1101:6;-1:-1:-1;;;;;1101:6:9;736:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;4972:47:10;;::::1;4964:104;;;::::0;-1:-1:-1;;;4964:104:10;;13024:2:11;4964:104:10::1;::::0;::::1;13006:21:11::0;13063:2;13043:18;;;13036:30;13102:34;13082:18;;;13075:62;-1:-1:-1;;;13153:18:11;;;13146:42;13205:19;;4964:104:10::1;12822:408:11::0;4964:104:10::1;5084:6;5079:200;5096:27:::0;;::::1;5079:200;;;5145:19;5167:16;;5184:1;5167:19;;;;;;;:::i;:::-;;;;;;;5145:41;;5238:13;;5252:14;5238:29;;;;;;;:::i;:::-;;;;;;;5201:18;5220:14;5201:34;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:66:::0;-1:-1:-1;5125:3:10;::::1;::::0;::::1;:::i;:::-;;;;5079:200;;4115:161:::0;1075:7:9;1101:6;-1:-1:-1;;;;;1101:6:9;736:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;4195:14:10::1;:21:::0;;-1:-1:-1;;4195:21:10::1;;;::::0;;4227:16:::1;:41:::0;;-1:-1:-1;;;;;4227:41:10;;::::1;-1:-1:-1::0;;;;;;4227:41:10;;::::1;::::0;;;::::1;::::0;;4115:161::o;2596:524:2:-;2752:16;2813:3;:10;2794:8;:15;:29;2786:83;;;;-1:-1:-1;;;2786:83:2;;13841:2:11;2786:83:2;;;13823:21:11;13880:2;13860:18;;;13853:30;13919:34;13899:18;;;13892:62;-1:-1:-1;;;13970:18:11;;;13963:39;14019:19;;2786:83:2;13639:405:11;2786:83:2;2882:30;2929:8;:15;2915:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2915:30:2;;2882:63;;2963:9;2958:122;2982:8;:15;2978:1;:19;2958:122;;;3038:30;3048:8;3057:1;3048:11;;;;;;;;:::i;:::-;;;;;;;3061:3;3065:1;3061:6;;;;;;;;:::i;:::-;;;;;;;3038:9;:30::i;:::-;3019:13;3033:1;3019:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;2999:3;;;:::i;:::-;;;2958:122;;;-1:-1:-1;3099:13:2;2596:524;-1:-1:-1;;;2596:524:2:o;4500:328:10:-;1075:7:9;1101:6;-1:-1:-1;;;;;1101:6:9;736:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;4595:18:10::1;4567:25;4646:13;4656:3;4646:7:::0;:13:::1;:::i;:::-;4624:35;;4670:14;4687:10;4698:14;4687:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;4740:13:10::1;4750:3;4740:7:::0;:13:::1;:::i;:::-;4724:29;;4811:8;4806:1;:13;;4793:9;:27;4764:10;4775:14;4764:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:56:::0;-1:-1:-1;;;;;4500:328:10:o;2213:1568::-;2282:14;;;;2274:48;;;;-1:-1:-1;;;2274:48:10;;14625:2:11;2274:48:10;;;14607:21:11;14664:2;14644:18;;;14637:30;-1:-1:-1;;;14683:18:11;;;14676:51;14744:18;;2274:48:10;14423:345:11;2274:48:10;2335:29;2367:15;2335:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2505:18:10;2468:55;;;;;;;;;;;;;;;;;;;2335:47;;-1:-1:-1;2420:7:10;;2393:24;;-1:-1:-1;2393:24:10;;-1:-1:-1;2468:55:10;-1:-1:-1;2468:55:10;;2505:18;2468:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2468:55:10;;-1:-1:-1;2566:7:10;;-1:-1:-1;2534:29:10;;-1:-1:-1;2534:29:10;;-1:-1:-1;2534:29:10;;-1:-1:-1;2660:926:10;2677:19;;;2660:926;;;2718:12;2733:8;;2742:1;2733:11;;;;;;;:::i;:::-;2767:17;;;:34;;-1:-1:-1;;;2767:34:10;;2733:11;;;;;;;;;;-1:-1:-1;2805:10:10;;2767:17;;;-1:-1:-1;;;;;2767:17:10;;-1:-1:-1;2767:25:10;;:34;;2733:11;;2767:34;616:25:11;;;604:2;589:18;;470:177;2767:34:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2767:48:10;;2759:93;;;;-1:-1:-1;;;2759:93:10;;15231:2:11;2759:93:10;;;15213:21:11;;;15250:18;;;15243:30;15309:34;15289:18;;;15282:62;15361:18;;2759:93:10;15029:356:11;2759:93:10;2890:19;2872:13;2882:3;2872:7;:13;:::i;:::-;2871:38;2867:338;;2952:13;2962:3;2952:7;:13;:::i;:::-;2930:35;;3001:15;3017:19;3001:36;;;;;;;;:::i;:::-;;;;;;;2984:53;;3083:19;3056:46;;3143:20;3164:24;3143:46;;;;;;;;:::i;:::-;;;;;;;3121:68;;2867:338;3248:13;3258:3;3248:7;:13;:::i;:::-;3242:1;:20;;3224:39;;3223:46;3219:135;;3290:21;;;;:::i;:::-;;;;3330:8;;;3219:135;3373:21;3386:7;3373:12;:21::i;:::-;3368:171;;3453:13;3463:3;3453:7;:13;:::i;:::-;3447:1;:20;;3424:44;;3415:108;;;;-1:-1:-1;;;3415:108:10;;15592:2:11;3415:108:10;;;15574:21:11;15631:2;15611:18;;;15604:30;15670:34;15650:18;;;15643:62;-1:-1:-1;;;15721:18:11;;;15714:42;15773:19;;3415:108:10;15390:408:11;3415:108:10;3555:19;3566:7;3555:10;:19::i;:::-;2703:883;2660:926;2698:3;;;;:::i;:::-;;;;2660:926;;;-1:-1:-1;3604:37:10;;;3596:87;;;;-1:-1:-1;;;3596:87:10;;16005:2:11;3596:87:10;;;15987:21:11;16044:2;16024:18;;;16017:30;16083:34;16063:18;;;16056:62;-1:-1:-1;;;16134:18:11;;;16127:35;16179:19;;3596:87:10;15803:401:11;3596:87:10;3696:77;3702:10;3714:13;3730:37;3748:19;3730:8;:37;:::i;:::-;3696:77;;;;;;;;;;;;:5;:77::i;:::-;2263:1518;;;;;;;2213:1568;;:::o;1661:101:9:-;1075:7;1101:6;-1:-1:-1;;;;;1101:6:9;736:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;644:49:10:-;;;;;;;;;;;;6042:414;6098:4;6115:24;6142:15;6115:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6168:19;6200:3;6190:7;:13;;;;:::i;:::-;6168:35;;6214:14;6231:10;6242:14;6231:26;;;;;;;;:::i;:::-;;;;;;;6214:43;;6285:7;6272:9;:20;6268:64;;;-1:-1:-1;6316:4:10;;6042:414;-1:-1:-1;;;;6042:414:10:o;6268:64::-;6342:13;6358;6368:3;6358:7;:13;:::i;:::-;6406:1;:13;;6393:27;;;;6439:8;;;6042:414;-1:-1:-1;;;;;6042:414:10:o;3193:155:2:-;3288:52;736:10:1;3321:8:2;3331;3288:18;:52::i;:::-;3193:155;;:::o;4392:100:10:-;1075:7:9;1101:6;-1:-1:-1;;;;;1101:6:9;736:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;4470:14:10::1;::::0;;-1:-1:-1;;4452:32:10;::::1;4470:14;::::0;;::::1;4469:15;4452:32;::::0;;4392:100::o;5294:420::-;5353:4;5370:24;5397:18;5370:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5426:19;5458:3;5448:7;:13;;;;:::i;3789:318::-;3856:14;;;;;;;3848:53;;;;-1:-1:-1;;;3848:53:10;;16541:2:11;3848:53:10;;;16523:21:11;16580:2;16560:18;;;16553:30;16619:28;16599:18;;;16592:56;16665:18;;3848:53:10;16339:350:11;3848:53:10;3960:3;3920:36;3930:10;3942:13;3920:9;:36::i;:::-;:43;;3912:82;;;;-1:-1:-1;;;3912:82:10;;16896:2:11;3912:82:10;;;16878:21:11;16935:2;16915:18;;;16908:30;16974:28;16954:18;;;16947:56;17020:18;;3912:82:10;16694:350:11;3912:82:10;4005:37;4011:10;4023:13;4038:3;4005:5;:37::i;:::-;4053:16;;:46;;-1:-1:-1;;;4053:46:10;;4083:10;4053:46;;;17223:51:11;17290:18;;;17283:34;;;-1:-1:-1;;;;;4053:16:10;;;;:29;;17196:18:11;;4053:46:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3660:401:2;-1:-1:-1;;;;;3868:20:2;;736:10:1;3868:20:2;;:60;;-1:-1:-1;3892:36:2;3909:4;736:10:1;3420:168:2;:::i;3892:36::-;3846:151;;;;-1:-1:-1;;;3846:151:2;;17530:2:11;3846:151:2;;;17512:21:11;17569:2;17549:18;;;17542:30;17608:34;17588:18;;;17581:62;-1:-1:-1;;;17659:18:11;;;17652:39;17708:19;;3846:151:2;17328:405:11;3846:151:2;4008:45;4026:4;4032:2;4036;4040:6;4048:4;4008:17;:45::i;1911:198:9:-;1075:7;1101:6;-1:-1:-1;;;;;1101:6:9;736:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;1999:22:9;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:9;;17940:2:11;1991:73:9::1;::::0;::::1;17922:21:11::0;17979:2;17959:18;;;17952:30;18018:34;17998:18;;;17991:62;-1:-1:-1;;;18069:18:11;;;18062:36;18115:19;;1991:73:9::1;17738:402:11::0;1991:73:9::1;2074:28;2093:8;2074:18;:28::i;4284:100:10:-:0;1075:7:9;1101:6;-1:-1:-1;;;;;1101:6:9;736:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;4362:14:10::1;::::0;;-1:-1:-1;;4344:32:10;::::1;4362:14;::::0;;;::::1;;;4361:15;4344:32:::0;;::::1;;::::0;;4284:100::o;8366:88:2:-;8433:13;;;;:4;;:13;;;;;:::i;6376:1146::-;6603:7;:14;6589:3;:10;:28;6581:81;;;;-1:-1:-1;;;6581:81:2;;18347:2:11;6581:81:2;;;18329:21:11;18386:2;18366:18;;;18359:30;18425:34;18405:18;;;18398:62;-1:-1:-1;;;18476:18:11;;;18469:38;18524:19;;6581:81:2;18145:404:11;6581:81:2;-1:-1:-1;;;;;6681:16:2;;6673:66;;;;-1:-1:-1;;;6673:66:2;;;;;;;:::i;:::-;736:10:1;6752:16:2;6869:421;6893:3;:10;6889:1;:14;6869:421;;;6925:10;6938:3;6942:1;6938:6;;;;;;;;:::i;:::-;;;;;;;6925:19;;6959:14;6976:7;6984:1;6976:10;;;;;;;;:::i;:::-;;;;;;;;;;;;7003:19;7025:13;;;:9;:13;;;;;;-1:-1:-1;;;;;7025:19:2;;;;;;;;;;;;6976:10;;-1:-1:-1;7067:21:2;;;;7059:76;;;;-1:-1:-1;;;7059:76:2;;;;;;;:::i;:::-;7179:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;7179:19:2;;;;;;;;;;7201:20;;;7179:42;;7251:17;;;;;;;:27;;7201:20;;7179:13;7251:27;;7201:20;;7251:27;:::i;:::-;;;;;;;;6910:380;;;6905:3;;;;:::i;:::-;;;6869:421;;;;7337:2;-1:-1:-1;;;;;7307:47:2;7331:4;-1:-1:-1;;;;;7307:47:2;7321:8;-1:-1:-1;;;;;7307:47:2;;7341:3;7346:7;7307:47;;;;;;;:::i;:::-;;;;;;;;7439:75;7475:8;7485:4;7491:2;7495:3;7500:7;7509:4;7439:35;:75::i;:::-;6570:952;6376:1146;;;;;:::o;6464:109:10:-;6523:4;6548:11;6558:1;6548:7;:11;:::i;:::-;6547:18;;6464:109;-1:-1:-1;;6464:109:10:o;5722:312::-;5804:15;5776:25;5852:13;5862:3;5852:7;:13;:::i;8840:729:2:-;-1:-1:-1;;;;;8993:16:2;;8985:62;;;;-1:-1:-1;;;8985:62:2;;20176:2:11;8985:62:2;;;20158:21:11;20215:2;20195:18;;;20188:30;20254:34;20234:18;;;20227:62;-1:-1:-1;;;20305:18:11;;;20298:31;20346:19;;8985:62:2;19974:397:11;8985:62:2;736:10:1;9060:16:2;9125:21;9143:2;9125:17;:21::i;:::-;9102:44;;9157:24;9184:25;9202:6;9184:17;:25::i;:::-;9157:52;;9301:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;9301:17:2;;;;;;;;;:27;;9322:6;;9301:13;:27;;9322:6;;9301:27;:::i;:::-;;;;-1:-1:-1;;9344:52:2;;;20550:25:11;;;20606:2;20591:18;;20584:34;;;-1:-1:-1;;;;;9344:52:2;;;;9377:1;;9344:52;;;;;;20523:18:11;9344:52:2;;;;;;;9487:74;9518:8;9536:1;9540:2;9544;9548:6;9556:4;9487:30;:74::i;:::-;8974:595;;;8840:729;;;;:::o;2263:187:9:-;2336:16;2355:6;;-1:-1:-1;;;;;2371:17:9;;;-1:-1:-1;;;;;;2371:17:9;;;;;;2403:40;;2355:6;;;;;;;2403:40;;2336:16;2403:40;2326:124;2263:187;:::o;13110:331:2:-;13265:8;-1:-1:-1;;;;;13256:17:2;:5;-1:-1:-1;;;;;13256:17:2;;;13248:71;;;;-1:-1:-1;;;13248:71:2;;20831:2:11;13248:71:2;;;20813:21:11;20870:2;20850:18;;;20843:30;20909:34;20889:18;;;20882:62;-1:-1:-1;;;20960:18:11;;;20953:39;21009:19;;13248:71:2;20629:405:11;13248:71:2;-1:-1:-1;;;;;13330:25:2;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;13330:46:2;;;;;;;;;;13392:41;;1178::11;;;13392::2;;1151:18:11;13392:41:2;;;;;;;13110:331;;;:::o;10988:808::-;-1:-1:-1;;;;;11115:18:2;;11107:66;;;;-1:-1:-1;;;11107:66:2;;21241:2:11;11107:66:2;;;21223:21:11;21280:2;21260:18;;;21253:30;21319:34;21299:18;;;21292:62;-1:-1:-1;;;21370:18:11;;;21363:33;21413:19;;11107:66:2;21039:399:11;11107:66:2;736:10:1;11186:16:2;11251:21;11269:2;11251:17;:21::i;:::-;11228:44;;11283:24;11310:25;11328:6;11310:17;:25::i;:::-;11348:66;;;;;;;;;-1:-1:-1;11348:66:2;;;;11449:13;;;:9;:13;;;;;-1:-1:-1;;;;;11449:19:2;;;;;;;;11283:52;;-1:-1:-1;11487:21:2;;;;11479:70;;;;-1:-1:-1;;;11479:70:2;;21645:2:11;11479:70:2;;;21627:21:11;21684:2;21664:18;;;21657:30;21723:34;21703:18;;;21696:62;-1:-1:-1;;;21774:18:11;;;21767:34;21818:19;;11479:70:2;21443:400:11;11479:70:2;11585:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;11585:19:2;;;;;;;;;;;;11607:20;;;11585:42;;11656:54;;20550:25:11;;;20591:18;;;20584:34;;;11585:19:2;;11656:54;;;;;;20523:18:11;11656:54:2;;;;;;;11723:65;;;;;;;;;11767:1;11723:65;;;6376:1146;5044:974;-1:-1:-1;;;;;5232:16:2;;5224:66;;;;-1:-1:-1;;;5224:66:2;;;;;;;:::i;:::-;736:10:1;5303:16:2;5368:21;5386:2;5368:17;:21::i;:::-;5345:44;;5400:24;5427:25;5445:6;5427:17;:25::i;:::-;5400:52;;5538:19;5560:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;5560:19:2;;;;;;;;;;5598:21;;;;5590:76;;;;-1:-1:-1;;;5590:76:2;;;;;;;:::i;:::-;5702:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;5702:19:2;;;;;;;;;;5724:20;;;5702:42;;5766:17;;;;;;;:27;;5724:20;;5702:13;5766:27;;5724:20;;5766:27;:::i;:::-;;;;-1:-1:-1;;5811:46:2;;;20550:25:11;;;20606:2;20591:18;;20584:34;;;-1:-1:-1;;;;;5811:46:2;;;;;;;;;;;;;;20523:18:11;5811:46:2;;;;;;;5942:68;5973:8;5983:4;5989:2;5993;5997:6;6005:4;5942:30;:68::i;16553:813::-;-1:-1:-1;;;;;16793:13:2;;1505:19:0;:23;16789:570:2;;16829:79;;-1:-1:-1;;;16829:79:2;;-1:-1:-1;;;;;16829:43:2;;;;;:79;;16873:8;;16883:4;;16889:3;;16894:7;;16903:4;;16829:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16829:79:2;;;;;;;;-1:-1:-1;;16829:79:2;;;;;;;;;;;;:::i;:::-;;;16825:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;17221:6;17214:14;;-1:-1:-1;;;17214:14:2;;;;;;;;:::i;16825:523::-;;;17270:62;;-1:-1:-1;;;17270:62:2;;23996:2:11;17270:62:2;;;23978:21:11;24035:2;24015:18;;;24008:30;24074:34;24054:18;;;24047:62;-1:-1:-1;;;24125:18:11;;;24118:50;24185:19;;17270:62:2;23794:416:11;16825:523:2;-1:-1:-1;;;;;;16990:60:2;;-1:-1:-1;;;16990:60:2;16986:159;;17075:50;;-1:-1:-1;;;17075:50:2;;;;;;;:::i;17374:198::-;17494:16;;;17508:1;17494:16;;;;;;;;;17440;;17469:22;;17494:16;;;;;;;;;;;;-1:-1:-1;17494:16:2;17469:41;;17532:7;17521:5;17527:1;17521:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;17559:5;17374:198;-1:-1:-1;;17374:198:2:o;15801:744::-;-1:-1:-1;;;;;16016:13:2;;1505:19:0;:23;16012:526:2;;16052:72;;-1:-1:-1;;;16052:72:2;;-1:-1:-1;;;;;16052:38:2;;;;;:72;;16091:8;;16101:4;;16107:2;;16111:6;;16119:4;;16052:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16052:72:2;;;;;;;;-1:-1:-1;;16052:72:2;;;;;;;;;;;;:::i;:::-;;;16048:479;;;;:::i;:::-;-1:-1:-1;;;;;;16174:55:2;;-1:-1:-1;;;16174:55:2;16170:154;;16254:50;;-1:-1:-1;;;16254:50:2;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:11;-1:-1:-1;;;;;89:31:11;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:11:o;652:131::-;-1:-1:-1;;;;;;726:32:11;;716:43;;706:71;;773:1;770;763:12;788:245;846:6;899:2;887:9;878:7;874:23;870:32;867:52;;;915:1;912;905:12;867:52;954:9;941:23;973:30;997:5;973:30;:::i;:::-;1022:5;788:245;-1:-1:-1;;;788:245:11:o;1230:127::-;1291:10;1286:3;1282:20;1279:1;1272:31;1322:4;1319:1;1312:15;1346:4;1343:1;1336:15;1362:249;1472:2;1453:13;;-1:-1:-1;;1449:27:11;1437:40;;1507:18;1492:34;;1528:22;;;1489:62;1486:88;;;1554:18;;:::i;:::-;1590:2;1583:22;-1:-1:-1;;1362:249:11:o;1616:469::-;1681:5;1715:18;1707:6;1704:30;1701:56;;;1737:18;;:::i;:::-;1786:2;1780:9;1798:69;1855:2;1834:15;;-1:-1:-1;;1830:29:11;1861:4;1826:40;1780:9;1798:69;:::i;:::-;1885:6;1876:15;;1915:6;1907;1900:22;1955:3;1946:6;1941:3;1937:16;1934:25;1931:45;;;1972:1;1969;1962:12;1931:45;2022:6;2017:3;2010:4;2002:6;1998:17;1985:44;2077:1;2070:4;2061:6;2053;2049:19;2045:30;2038:41;;1616:469;;;;;:::o;2090:451::-;2159:6;2212:2;2200:9;2191:7;2187:23;2183:32;2180:52;;;2228:1;2225;2218:12;2180:52;2268:9;2255:23;2301:18;2293:6;2290:30;2287:50;;;2333:1;2330;2323:12;2287:50;2356:22;;2409:4;2401:13;;2397:27;-1:-1:-1;2387:55:11;;2438:1;2435;2428:12;2387:55;2461:74;2527:7;2522:2;2509:16;2504:2;2500;2496:11;2461:74;:::i;:::-;2451:84;2090:451;-1:-1:-1;;;;2090:451:11:o;2546:180::-;2605:6;2658:2;2646:9;2637:7;2633:23;2629:32;2626:52;;;2674:1;2671;2664:12;2626:52;-1:-1:-1;2697:23:11;;2546:180;-1:-1:-1;2546:180:11:o;2731:472::-;2773:3;2811:5;2805:12;2838:6;2833:3;2826:19;2863:1;2873:162;2887:6;2884:1;2881:13;2873:162;;;2949:4;3005:13;;;3001:22;;2995:29;2977:11;;;2973:20;;2966:59;2902:12;2873:162;;;3053:6;3050:1;3047:13;3044:87;;;3119:1;3112:4;3103:6;3098:3;3094:16;3090:27;3083:38;3044:87;-1:-1:-1;3185:2:11;3164:15;-1:-1:-1;;3160:29:11;3151:39;;;;3192:4;3147:50;;2731:472;-1:-1:-1;;2731:472:11:o;3208:220::-;3357:2;3346:9;3339:21;3320:4;3377:45;3418:2;3407:9;3403:18;3395:6;3377:45;:::i;3433:183::-;3493:4;3526:18;3518:6;3515:30;3512:56;;;3548:18;;:::i;:::-;-1:-1:-1;3593:1:11;3589:14;3605:4;3585:25;;3433:183::o;3621:724::-;3675:5;3728:3;3721:4;3713:6;3709:17;3705:27;3695:55;;3746:1;3743;3736:12;3695:55;3782:6;3769:20;3808:4;3831:43;3871:2;3831:43;:::i;:::-;3903:2;3897:9;3915:31;3943:2;3935:6;3915:31;:::i;:::-;3981:18;;;4073:1;4069:10;;;;4057:23;;4053:32;;;4015:15;;;;-1:-1:-1;4097:15:11;;;4094:35;;;4125:1;4122;4115:12;4094:35;4161:2;4153:6;4149:15;4173:142;4189:6;4184:3;4181:15;4173:142;;;4255:17;;4243:30;;4293:12;;;;4206;;4173:142;;;-1:-1:-1;4333:6:11;3621:724;-1:-1:-1;;;;;;3621:724:11:o;4350:221::-;4392:5;4445:3;4438:4;4430:6;4426:17;4422:27;4412:55;;4463:1;4460;4453:12;4412:55;4485:80;4561:3;4552:6;4539:20;4532:4;4524:6;4520:17;4485:80;:::i;4576:1071::-;4730:6;4738;4746;4754;4762;4815:3;4803:9;4794:7;4790:23;4786:33;4783:53;;;4832:1;4829;4822:12;4783:53;4871:9;4858:23;4890:31;4915:5;4890:31;:::i;:::-;4940:5;-1:-1:-1;4997:2:11;4982:18;;4969:32;5010:33;4969:32;5010:33;:::i;:::-;5062:7;-1:-1:-1;5120:2:11;5105:18;;5092:32;5143:18;5173:14;;;5170:34;;;5200:1;5197;5190:12;5170:34;5223:61;5276:7;5267:6;5256:9;5252:22;5223:61;:::i;:::-;5213:71;;5337:2;5326:9;5322:18;5309:32;5293:48;;5366:2;5356:8;5353:16;5350:36;;;5382:1;5379;5372:12;5350:36;5405:63;5460:7;5449:8;5438:9;5434:24;5405:63;:::i;:::-;5395:73;;5521:3;5510:9;5506:19;5493:33;5477:49;;5551:2;5541:8;5538:16;5535:36;;;5567:1;5564;5557:12;5535:36;;5590:51;5633:7;5622:8;5611:9;5607:24;5590:51;:::i;:::-;5580:61;;;4576:1071;;;;;;;;:::o;5652:367::-;5715:8;5725:6;5779:3;5772:4;5764:6;5760:17;5756:27;5746:55;;5797:1;5794;5787:12;5746:55;-1:-1:-1;5820:20:11;;5863:18;5852:30;;5849:50;;;5895:1;5892;5885:12;5849:50;5932:4;5924:6;5920:17;5908:29;;5992:3;5985:4;5975:6;5972:1;5968:14;5960:6;5956:27;5952:38;5949:47;5946:67;;;6009:1;6006;5999:12;5946:67;5652:367;;;;;:::o;6024:773::-;6146:6;6154;6162;6170;6223:2;6211:9;6202:7;6198:23;6194:32;6191:52;;;6239:1;6236;6229:12;6191:52;6279:9;6266:23;6308:18;6349:2;6341:6;6338:14;6335:34;;;6365:1;6362;6355:12;6335:34;6404:70;6466:7;6457:6;6446:9;6442:22;6404:70;:::i;:::-;6493:8;;-1:-1:-1;6378:96:11;-1:-1:-1;6581:2:11;6566:18;;6553:32;;-1:-1:-1;6597:16:11;;;6594:36;;;6626:1;6623;6616:12;6594:36;;6665:72;6729:7;6718:8;6707:9;6703:24;6665:72;:::i;:::-;6024:773;;;;-1:-1:-1;6756:8:11;-1:-1:-1;;;;6024:773:11:o;6802:247::-;6861:6;6914:2;6902:9;6893:7;6889:23;6885:32;6882:52;;;6930:1;6927;6920:12;6882:52;6969:9;6956:23;6988:31;7013:5;6988:31;:::i;7054:1277::-;7172:6;7180;7233:2;7221:9;7212:7;7208:23;7204:32;7201:52;;;7249:1;7246;7239:12;7201:52;7289:9;7276:23;7318:18;7359:2;7351:6;7348:14;7345:34;;;7375:1;7372;7365:12;7345:34;7413:6;7402:9;7398:22;7388:32;;7458:7;7451:4;7447:2;7443:13;7439:27;7429:55;;7480:1;7477;7470:12;7429:55;7516:2;7503:16;7538:4;7561:43;7601:2;7561:43;:::i;:::-;7633:2;7627:9;7645:31;7673:2;7665:6;7645:31;:::i;:::-;7711:18;;;7799:1;7795:10;;;;7787:19;;7783:28;;;7745:15;;;;-1:-1:-1;7823:19:11;;;7820:39;;;7855:1;7852;7845:12;7820:39;7879:11;;;;7899:217;7915:6;7910:3;7907:15;7899:217;;;7995:3;7982:17;8012:31;8037:5;8012:31;:::i;:::-;8056:18;;7932:12;;;;8094;;;;7899:217;;;8135:6;-1:-1:-1;;8179:18:11;;8166:32;;-1:-1:-1;;8210:16:11;;;8207:36;;;8239:1;8236;8229:12;8207:36;;8262:63;8317:7;8306:8;8295:9;8291:24;8262:63;:::i;:::-;8252:73;;;7054:1277;;;;;:::o;8336:435::-;8389:3;8427:5;8421:12;8454:6;8449:3;8442:19;8480:4;8509:2;8504:3;8500:12;8493:19;;8546:2;8539:5;8535:14;8567:1;8577:169;8591:6;8588:1;8585:13;8577:169;;;8652:13;;8640:26;;8686:12;;;;8721:15;;;;8613:1;8606:9;8577:169;;;-1:-1:-1;8762:3:11;;8336:435;-1:-1:-1;;;;;8336:435:11:o;8776:261::-;8955:2;8944:9;8937:21;8918:4;8975:56;9027:2;9016:9;9012:18;9004:6;8975:56;:::i;9042:437::-;9128:6;9136;9189:2;9177:9;9168:7;9164:23;9160:32;9157:52;;;9205:1;9202;9195:12;9157:52;9245:9;9232:23;9278:18;9270:6;9267:30;9264:50;;;9310:1;9307;9300:12;9264:50;9349:70;9411:7;9402:6;9391:9;9387:22;9349:70;:::i;:::-;9438:8;;9323:96;;-1:-1:-1;9042:437:11;-1:-1:-1;;;;9042:437:11:o;9692:416::-;9757:6;9765;9818:2;9806:9;9797:7;9793:23;9789:32;9786:52;;;9834:1;9831;9824:12;9786:52;9873:9;9860:23;9892:31;9917:5;9892:31;:::i;:::-;9942:5;-1:-1:-1;9999:2:11;9984:18;;9971:32;10041:15;;10034:23;10022:36;;10012:64;;10072:1;10069;10062:12;10012:64;10095:7;10085:17;;;9692:416;;;;;:::o;10113:388::-;10181:6;10189;10242:2;10230:9;10221:7;10217:23;10213:32;10210:52;;;10258:1;10255;10248:12;10210:52;10297:9;10284:23;10316:31;10341:5;10316:31;:::i;:::-;10366:5;-1:-1:-1;10423:2:11;10408:18;;10395:32;10436:33;10395:32;10436:33;:::i;10506:734::-;10610:6;10618;10626;10634;10642;10695:3;10683:9;10674:7;10670:23;10666:33;10663:53;;;10712:1;10709;10702:12;10663:53;10751:9;10738:23;10770:31;10795:5;10770:31;:::i;:::-;10820:5;-1:-1:-1;10877:2:11;10862:18;;10849:32;10890:33;10849:32;10890:33;:::i;:::-;10942:7;-1:-1:-1;10996:2:11;10981:18;;10968:32;;-1:-1:-1;11047:2:11;11032:18;;11019:32;;-1:-1:-1;11102:3:11;11087:19;;11074:33;11130:18;11119:30;;11116:50;;;11162:1;11159;11152:12;11116:50;11185:49;11226:7;11217:6;11206:9;11202:22;11185:49;:::i;11657:356::-;11859:2;11841:21;;;11878:18;;;11871:30;11937:34;11932:2;11917:18;;11910:62;12004:2;11989:18;;11657:356::o;12018:380::-;12097:1;12093:12;;;;12140;;;12161:61;;12215:4;12207:6;12203:17;12193:27;;12161:61;12268:2;12260:6;12257:14;12237:18;12234:38;12231:161;;;12314:10;12309:3;12305:20;12302:1;12295:31;12349:4;12346:1;12339:15;12377:4;12374:1;12367:15;12231:161;;12018:380;;;:::o;13235:127::-;13296:10;13291:3;13287:20;13284:1;13277:31;13327:4;13324:1;13317:15;13351:4;13348:1;13341:15;13367:127;13428:10;13423:3;13419:20;13416:1;13409:31;13459:4;13456:1;13449:15;13483:4;13480:1;13473:15;13499:135;13538:3;-1:-1:-1;;13559:17:11;;13556:43;;;13579:18;;:::i;:::-;-1:-1:-1;13626:1:11;13615:13;;13499:135::o;14049:127::-;14110:10;14105:3;14101:20;14098:1;14091:31;14141:4;14138:1;14131:15;14165:4;14162:1;14155:15;14181:120;14221:1;14247;14237:35;;14252:18;;:::i;:::-;-1:-1:-1;14286:9:11;;14181:120::o;14306:112::-;14338:1;14364;14354:35;;14369:18;;:::i;:::-;-1:-1:-1;14403:9:11;;14306:112::o;14773:251::-;14843:6;14896:2;14884:9;14875:7;14871:23;14867:32;14864:52;;;14912:1;14909;14902:12;14864:52;14944:9;14938:16;14963:31;14988:5;14963:31;:::i;16209:125::-;16249:4;16277:1;16274;16271:8;16268:34;;;16282:18;;:::i;:::-;-1:-1:-1;16319:9:11;;16209:125::o;18554:401::-;18756:2;18738:21;;;18795:2;18775:18;;;18768:30;18834:34;18829:2;18814:18;;18807:62;-1:-1:-1;;;18900:2:11;18885:18;;18878:35;18945:3;18930:19;;18554:401::o;18960:406::-;19162:2;19144:21;;;19201:2;19181:18;;;19174:30;19240:34;19235:2;19220:18;;19213:62;-1:-1:-1;;;19306:2:11;19291:18;;19284:40;19356:3;19341:19;;18960:406::o;19371:128::-;19411:3;19442:1;19438:6;19435:1;19432:13;19429:39;;;19448:18;;:::i;:::-;-1:-1:-1;19484:9:11;;19371:128::o;19504:465::-;19761:2;19750:9;19743:21;19724:4;19787:56;19839:2;19828:9;19824:18;19816:6;19787:56;:::i;:::-;19891:9;19883:6;19879:22;19874:2;19863:9;19859:18;19852:50;19919:44;19956:6;19948;19919:44;:::i;:::-;19911:52;19504:465;-1:-1:-1;;;;;19504:465:11:o;21848:827::-;-1:-1:-1;;;;;22245:15:11;;;22227:34;;22297:15;;22292:2;22277:18;;22270:43;22207:3;22344:2;22329:18;;22322:31;;;22170:4;;22376:57;;22413:19;;22405:6;22376:57;:::i;:::-;22481:9;22473:6;22469:22;22464:2;22453:9;22449:18;22442:50;22515:44;22552:6;22544;22515:44;:::i;:::-;22501:58;;22608:9;22600:6;22596:22;22590:3;22579:9;22575:19;22568:51;22636:33;22662:6;22654;22636:33;:::i;:::-;22628:41;21848:827;-1:-1:-1;;;;;;;;21848:827:11:o;22680:249::-;22749:6;22802:2;22790:9;22781:7;22777:23;22773:32;22770:52;;;22818:1;22815;22808:12;22770:52;22850:9;22844:16;22869:30;22893:5;22869:30;:::i;22934:179::-;22969:3;23011:1;22993:16;22990:23;22987:120;;;23057:1;23054;23051;23036:23;-1:-1:-1;23094:1:11;23088:8;23083:3;23079:18;22987:120;22934:179;:::o;23118:671::-;23157:3;23199:4;23181:16;23178:26;23175:39;;;23118:671;:::o;23175:39::-;23241:2;23235:9;-1:-1:-1;;23306:16:11;23302:25;;23299:1;23235:9;23278:50;23357:4;23351:11;23381:16;23416:18;23487:2;23480:4;23472:6;23468:17;23465:25;23460:2;23452:6;23449:14;23446:45;23443:58;;;23494:5;;;;;23118:671;:::o;23443:58::-;23531:6;23525:4;23521:17;23510:28;;23567:3;23561:10;23594:2;23586:6;23583:14;23580:27;;;23600:5;;;;;;23118:671;:::o;23580:27::-;23684:2;23665:16;23659:4;23655:27;23651:36;23644:4;23635:6;23630:3;23626:16;23622:27;23619:69;23616:82;;;23691:5;;;;;;23118:671;:::o;23616:82::-;23707:57;23758:4;23749:6;23741;23737:19;23733:30;23727:4;23707:57;:::i;:::-;-1:-1:-1;23780:3:11;;23118:671;-1:-1:-1;;;;;23118:671:11:o;24215:404::-;24417:2;24399:21;;;24456:2;24436:18;;;24429:30;24495:34;24490:2;24475:18;;24468:62;-1:-1:-1;;;24561:2:11;24546:18;;24539:38;24609:3;24594:19;;24215:404::o;24624:561::-;-1:-1:-1;;;;;24921:15:11;;;24903:34;;24973:15;;24968:2;24953:18;;24946:43;25020:2;25005:18;;24998:34;;;25063:2;25048:18;;25041:34;;;24883:3;25106;25091:19;;25084:32;;;24846:4;;25133:46;;25159:19;;25151:6;25133:46;:::i;:::-;25125:54;24624:561;-1:-1:-1;;;;;;;24624:561:11:o

Swarm Source

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