ETH Price: $2,513.03 (+1.63%)

Token

AllOutWar_WarPass (AOW_SP)
 

Overview

Max Total Supply

59 AOW_SP

Holders

21

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 AOW_SP
0xCD53574C6bB590B532c84960619b9df643cf3426
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:
AOW_Warpass

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 400 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: contracts/warpass.sol


//     _  _     _    _ _  ___        _ __        __         
//   _| || |_  / \  | | |/ _ \ _   _| |\ \      / /_ _ _ __ 
//  |_  ..  _|/ _ \ | | | | | | | | | __\ \ /\ / / _` | '__|
//  |_      _/ ___ \| | | |_| | |_| | |_ \ V  V / (_| | |   
//    |_||_|/_/   \_\_|_|\___/ \__,_|\__| \_/\_/ \__,_|_|   
//   ____                               ____                
//  / ___|  ___  __ _ ___  ___  _ __   |  _ \ __ _ ___ ___  
//  \___ \ / _ \/ _` / __|/ _ \| '_ \  | |_) / _` / __/ __| 
//   ___) |  __/ (_| \__ \ (_) | | | | |  __/ (_| \__ \__ \ 
//  |____/ \___|\__,_|___/\___/|_| |_| |_|   \__,_|___/___/ 
                                                         



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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

// File: contracts/ERC721A.sol



pragma solidity ^0.8.0;









/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable
{
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 public currentIndex = 0;

    uint256 internal immutable collectionSize;
    uint256 internal immutable maxBatchSize;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) private _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

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

    /**
     * @dev
     * `maxBatchSize` refers to how much a minter can mint at a time.
     * `collectionSize_` refers to how many tokens are in the collection.
     */
    constructor(
        string memory name_,
        string memory symbol_,
        uint256 maxBatchSize_,
        uint256 collectionSize_
    ) {
        require(
            collectionSize_ > 0,
            "ERC721A: collection must have a nonzero supply"
        );
        require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
        collectionSize = collectionSize_;
    }

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

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert("ERC721A: unable to get token of owner by index");
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: balance query for the zero address"
        );
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: number minted query for the zero address"
        );
        return uint256(_addressData[owner].numberMinted);
    }

    function ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

        uint256 lowestTokenToCheck;
        if (tokenId >= maxBatchSize) {
            lowestTokenToCheck = tokenId - maxBatchSize + 1;
        }

        for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }
        }

        revert("ERC721A: unable to determine the owner of token");
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - there must be `quantity` tokens remaining unminted in the total collection.
     * - `to` cannot be the zero address.
     * - `quantity` cannot be larger than the max batch size.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), "ERC721A: mint to the zero address");
        // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
        require(!_exists(startTokenId), "ERC721A: token already minted");
        require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        AddressData memory addressData = _addressData[to];
        _addressData[to] = AddressData(
            addressData.balance + uint128(quantity),
            addressData.numberMinted + uint128(quantity)
        );
        _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

        uint256 updatedIndex = startTokenId;

        for (uint256 i = 0; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            require(
                _checkOnERC721Received(address(0), to, updatedIndex, _data),
                "ERC721A: transfer to non ERC721Receiver implementer"
            );
            updatedIndex++;
        }

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(
            isApprovedOrOwner,
            "ERC721A: transfer caller is not owner nor approved"
        );

        require(
            prevOwnership.addr == from,
            "ERC721A: transfer from incorrect owner"
        );
        require(to != address(0), "ERC721A: transfer to the zero address");

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        _addressData[from].balance -= 1;
        _addressData[to].balance += 1;
        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

        // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
        // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(
                    prevOwnership.addr,
                    prevOwnership.startTimestamp
                );
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

    uint256 public nextOwnerToExplicitlySet = 0;

    /**
     * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
     */
    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "quantity must be nonzero");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > collectionSize - 1) {
            endIndex = collectionSize - 1;
        }
        // We know if the last one in the group exists, all in the group exist, due to serial ordering.
        require(_exists(endIndex), "not enough minted yet for this cleanup");
        for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
            if (_ownerships[i].addr == address(0)) {
                TokenOwnership memory ownership = ownershipOf(i);
                _ownerships[i] = TokenOwnership(
                    ownership.addr,
                    ownership.startTimestamp
                );
            }
        }
        nextOwnerToExplicitlySet = endIndex + 1;
    }

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}
// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

// File: contracts/WordiesPass.sol


pragma solidity ^0.8.0;

contract AOW_Warpass is ERC721A, Ownable {

    address public constant GAME_WALLET = 0xbb43fcEFF7Cb40F87f88D34F37f9b7b311D3a6fD;
    address public constant OWNER = 0xD3090CF8D7ECD9c1f41ebFb07c915B637BF4F466; //TC
    address public constant MARKETING = 0xb23e3c30CEE40b6F07cee3705E3Ab2198c3b9F2D; //LL
    ERC721A public AOW = ERC721A(0x4477e6D3F9F6bD1509819D51Fe2fFff3D78c57B7); //AOW

    uint256 public PUBLIC_PRICE = 0.02 ether;
    uint256 public MINT_LIMIT = 1;
    uint256 public MAX_SUPPLY  = 3050;
    string private baseURI = "https://data.alloutwar.io";
     constructor() ERC721A("AllOutWar_WarPass", "AOW_SP", 50, 200) { 
         _safeMint(address(GAME_WALLET),50);
     }

    modifier canWithdraw() {
        require(
            msg.sender == owner()  || 
            msg.sender == OWNER ||
            msg.sender == MARKETING,
            "Only specific wallets can withdraw"
        );
        
        _;  
    }

    function mint() external payable  {
        require( 
            totalSupply() <= MAX_SUPPLY,
            "Max supply reached"
        );

        require( numberMinted(msg.sender) < MINT_LIMIT, "Only one per wallet" );

        require(
            AOW.balanceOf(msg.sender) > 0,
            "You must own at least one AllOutWar NFT"
        );

        require(
            msg.value >= PUBLIC_PRICE,"mint price is 0.02 eth");

        _safeMint(msg.sender, 1);
    }

    function setBaseURI(string calldata URI) external onlyOwner {
        baseURI = URI;
    }

    function withdraw() external canWithdraw {
        require(address(this).balance > 0, "No balance to withdraw");

        uint256 balance = address(this).balance;

        payable(OWNER).transfer(balance / 100 * 70); // 70% of balance
        payable(MARKETING).transfer(balance / 100 * 30); // 30% of balance
    }

    function contractURI() public view returns (string memory) {
        return string(abi.encodePacked(baseURI,"/pass/contract.json"));
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_exists(tokenId),"Token not minted yet");
        return string(abi.encodePacked(
          baseURI,"/pass/data.json"));
    }

    function tokensOfOwner(address owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(owner);
        uint256[] memory tokenIds = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(owner, i);
        }
        return tokenIds;
    }

    function setPrice(uint256 _wlPrice) external onlyOwner {
        PUBLIC_PRICE = _wlPrice;
    }

    function isPassOwner(address owner)
        public
        view
        returns (bool)
    {
        uint256 tokenCount = balanceOf(owner);
        return tokenCount > 0;
    }

    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }
 
    function setMintLimit(uint256 _mintLimit) external onlyOwner{
        MINT_LIMIT = _mintLimit;
    }

    function setTotalLimit(uint256 _mintLimit) external onlyOwner{
        MAX_SUPPLY = _mintLimit;
    }

    function setContracts(address _aow) external onlyOwner{
        AOW = ERC721A(_aow);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AOW","outputs":[{"internalType":"contract ERC721A","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAME_WALLET","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MARKETING","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OWNER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"isPassOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_aow","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintLimit","type":"uint256"}],"name":"setMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wlPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintLimit","type":"uint256"}],"name":"setTotalLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6000808055600755600980546001600160a01b031916734477e6d3f9f6bd1509819d51fe2ffff3d78c57b717905566470de4df820000600a556001600b55610bea600c55610100604052601960c09081527f68747470733a2f2f646174612e616c6c6f75747761722e696f0000000000000060e052600d906200008390826200079f565b503480156200009157600080fd5b5060405180604001604052806011815260200170416c6c4f75745761725f5761725061737360781b815250604051806040016040528060068152602001650414f575f53560d41b815250603260c8600081116200014c5760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b60008211620001ae5760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b606482015260840162000143565b6001620001bc85826200079f565b506002620001cb84826200079f565b5060a09190915260805250620001e39050336200020a565b6200020473bb43fceff7cb40f87f88d34f37f9b7b311d3a6fd60326200025c565b6200096d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200027e8282604051806020016040528060008152506200028260201b60201c565b5050565b6000546001600160a01b038416620002e75760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840162000143565b620002f3816000541190565b15620003425760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604482015260640162000143565b60a051831115620003a15760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b606482015260840162000143565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190620003ff90879062000881565b6001600160801b031681526020018583602001516200041f919062000881565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015620005835760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a462000505600088848862000592565b6200055e5760405162461bcd60e51b8152602060048201526033602482015260008051602062002f5783398151915260448201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606482015260840162000143565b816200056a81620008ab565b92505080806200057a90620008ab565b915050620004b5565b5060008190555b505050505050565b6000620005b3846001600160a01b0316620006ef60201b6200133d1760201c565b15620006e357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290620005ed903390899088908890600401620008c7565b6020604051808303816000875af19250505080156200062b575060408051601f3d908101601f1916820190925262000628918101906200093a565b60015b620006c8573d8080156200065c576040519150601f19603f3d011682016040523d82523d6000602084013e62000661565b606091505b508051600003620006c05760405162461bcd60e51b8152602060048201526033602482015260008051602062002f5783398151915260448201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606482015260840162000143565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050620006e7565b5060015b949350505050565b6001600160a01b03163b151590565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200072957607f821691505b6020821081036200074a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200079a57600081815260208120601f850160051c81016020861015620007795750805b601f850160051c820191505b818110156200058a5782815560010162000785565b505050565b81516001600160401b03811115620007bb57620007bb620006fe565b620007d381620007cc845462000714565b8462000750565b602080601f8311600181146200080b5760008415620007f25750858301515b600019600386901b1c1916600185901b1785556200058a565b600085815260208120601f198616915b828110156200083c578886015182559484019460019091019084016200081b565b50858210156200085b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6001600160801b03818116838216019080821115620008a457620008a46200086b565b5092915050565b600060018201620008c057620008c06200086b565b5060010190565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b82811015620009165785810182015185820160a001528101620008f8565b5050600060a0828501015260a0601f19601f83011684010191505095945050505050565b6000602082840312156200094d57600080fd5b81516001600160e01b0319811681146200096657600080fd5b9392505050565b60805160a0516125b96200099e600039600081816118310152818161185b0152611c140152600050506125b96000f3fe6080604052600436106102305760003560e01c80636d10cd9c1161012e578063b88d4fde116100ab578063dc33e6811161006f578063dc33e68114610659578063e530a7d014610679578063e8a3d485146106a1578063e985e9c5146106b6578063f2fde38b146106ff57600080fd5b8063b88d4fde146105bb578063c87b56dd146105db578063c8e39c25146105fb578063cee7d3a51461061b578063d7224ba01461064357600080fd5b806391b7f5ed116100f257806391b7f5ed1461052657806395d89b41146105465780639e6a1d7d1461055b578063a22cb4651461057b578063b45b9ec71461059b57600080fd5b80636d10cd9c1461048657806370a08231146104a6578063715018a6146104c65780638462151c146104db5780638da5cb5b1461050857600080fd5b806326987b60116101bc5780634f6ccce7116101805780634f6ccce7146103f057806355f804b3146104105780635a2e2f4714610430578063611f3f10146104505780636352211e1461046657600080fd5b806326987b601461036f5780632f745c591461038557806332cb6b0c146103a55780633ccfd60b146103bb57806342842e0e146103d057600080fd5b8063095ea7b311610203578063095ea7b3146102e8578063117803e31461030a5780631249c58b1461033257806318160ddd1461033a57806323b872dd1461034f57600080fd5b806301ffc9a714610235578063027752401461026a57806306fdde031461028e578063081812fc146102b0575b600080fd5b34801561024157600080fd5b50610255610250366004611e48565b61071f565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b50610280600b5481565b604051908152602001610261565b34801561029a57600080fd5b506102a361078c565b6040516102619190611eb2565b3480156102bc57600080fd5b506102d06102cb366004611ec5565b61081e565b6040516001600160a01b039091168152602001610261565b3480156102f457600080fd5b50610308610303366004611efa565b6108ae565b005b34801561031657600080fd5b506102d073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46681565b6103086109c5565b34801561034657600080fd5b50600054610280565b34801561035b57600080fd5b5061030861036a366004611f24565b610b9b565b34801561037b57600080fd5b5061028060005481565b34801561039157600080fd5b506102806103a0366004611efa565b610ba6565b3480156103b157600080fd5b50610280600c5481565b3480156103c757600080fd5b50610308610d12565b3480156103dc57600080fd5b506103086103eb366004611f24565b610eb5565b3480156103fc57600080fd5b5061028061040b366004611ec5565b610ed0565b34801561041c57600080fd5b5061030861042b366004611f60565b610f32565b34801561043c57600080fd5b5061030861044b366004611fd2565b610f47565b34801561045c57600080fd5b50610280600a5481565b34801561047257600080fd5b506102d0610481366004611ec5565b610f71565b34801561049257600080fd5b506103086104a1366004611ec5565b610f83565b3480156104b257600080fd5b506102806104c1366004611fd2565b610f90565b3480156104d257600080fd5b50610308611021565b3480156104e757600080fd5b506104fb6104f6366004611fd2565b611033565b6040516102619190611fed565b34801561051457600080fd5b506008546001600160a01b03166102d0565b34801561053257600080fd5b50610308610541366004611ec5565b6110d5565b34801561055257600080fd5b506102a36110e2565b34801561056757600080fd5b50610308610576366004611ec5565b6110f1565b34801561058757600080fd5b50610308610596366004612031565b6110fe565b3480156105a757600080fd5b506102556105b6366004611fd2565b6111c2565b3480156105c757600080fd5b506103086105d6366004612083565b6111d7565b3480156105e757600080fd5b506102a36105f6366004611ec5565b611210565b34801561060757600080fd5b506009546102d0906001600160a01b031681565b34801561062757600080fd5b506102d073bb43fceff7cb40f87f88d34f37f9b7b311d3a6fd81565b34801561064f57600080fd5b5061028060075481565b34801561066557600080fd5b50610280610674366004611fd2565b611291565b34801561068557600080fd5b506102d073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d81565b3480156106ad57600080fd5b506102a361129c565b3480156106c257600080fd5b506102556106d136600461215f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561070b57600080fd5b5061030861071a366004611fd2565b6112c4565b60006001600160e01b031982166380ac58cd60e01b148061075057506001600160e01b03198216635b5e139f60e01b145b8061076b57506001600160e01b0319821663780e9d6360e01b145b8061078657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461079b90612192565b80601f01602080910402602001604051908101604052809291908181526020018280546107c790612192565b80156108145780601f106107e957610100808354040283529160200191610814565b820191906000526020600020905b8154815290600101906020018083116107f757829003601f168201915b5050505050905090565b600061082b826000541190565b6108925760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006108b982610f71565b9050806001600160a01b0316836001600160a01b0316036109275760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610889565b336001600160a01b0382161480610943575061094381336106d1565b6109b55760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610889565b6109c083838361134c565b505050565b600c546000541115610a195760405162461bcd60e51b815260206004820152601260248201527f4d617820737570706c79207265616368656400000000000000000000000000006044820152606401610889565b600b54610a2533611291565b10610a725760405162461bcd60e51b815260206004820152601360248201527f4f6e6c79206f6e65207065722077616c6c6574000000000000000000000000006044820152606401610889565b6009546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906121cc565b11610b3c5760405162461bcd60e51b815260206004820152602760248201527f596f75206d757374206f776e206174206c65617374206f6e6520416c6c4f757460448201526615d85c8813919560ca1b6064820152608401610889565b600a54341015610b8e5760405162461bcd60e51b815260206004820152601660248201527f6d696e7420707269636520697320302e303220657468000000000000000000006044820152606401610889565b610b993360016113a8565b565b6109c08383836113c2565b6000610bb183610f90565b8210610c0a5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610889565b600080549080805b83811015610cb2576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610c6557805192505b876001600160a01b0316836001600160a01b031603610c9f57868403610c915750935061078692505050565b83610c9b816121fb565b9450505b5080610caa816121fb565b915050610c12565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610889565b6008546001600160a01b0316331480610d3e57503373d3090cf8d7ecd9c1f41ebfb07c915b637bf4f466145b80610d5c57503373b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d145b610db35760405162461bcd60e51b815260206004820152602260248201527f4f6e6c792073706563696669632077616c6c6574732063616e20776974686472604482015261617760f01b6064820152608401610889565b60004711610e035760405162461bcd60e51b815260206004820152601660248201527f4e6f2062616c616e636520746f207769746864726177000000000000000000006044820152606401610889565b4773d3090cf8d7ecd9c1f41ebfb07c915b637bf4f4666108fc610e27606484612214565b610e32906046612236565b6040518115909202916000818181858888f19350505050158015610e5a573d6000803e3d6000fd5b5073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d6108fc610e7e606484612214565b610e8990601e612236565b6040518115909202916000818181858888f19350505050158015610eb1573d6000803e3d6000fd5b5050565b6109c0838383604051806020016040528060008152506111d7565b600080548210610f2e5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610889565b5090565b610f3a611755565b600d6109c082848361229b565b610f4f611755565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f7c826117af565b5192915050565b610f8b611755565b600c55565b60006001600160a01b038216610ffc5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610889565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b611029611755565b610b996000611959565b6060600061104083610f90565b905060008167ffffffffffffffff81111561105d5761105d61206d565b604051908082528060200260200182016040528015611086578160200160208202803683370190505b50905060005b828110156110cd5761109e8582610ba6565b8282815181106110b0576110b061235c565b6020908102919091010152806110c5816121fb565b91505061108c565b509392505050565b6110dd611755565b600a55565b60606002805461079b90612192565b6110f9611755565b600b55565b336001600160a01b038316036111565760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610889565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000806111ce83610f90565b15159392505050565b6111e28484846113c2565b6111ee848484846119ab565b61120a5760405162461bcd60e51b815260040161088990612372565b50505050565b606061121d826000541190565b6112695760405162461bcd60e51b815260206004820152601460248201527f546f6b656e206e6f74206d696e746564207965740000000000000000000000006044820152606401610889565b600d60405160200161127b9190612442565b6040516020818303038152906040529050919050565b600061078682611aad565b6060600d6040516020016112b0919061246d565b604051602081830303815290604052905090565b6112cc611755565b6001600160a01b0381166113315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610889565b61133a81611959565b50565b6001600160a01b03163b151590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610eb1828260405180602001604052806000815250611b57565b60006113cd826117af565b80519091506000906001600160a01b0316336001600160a01b031614806114045750336113f98461081e565b6001600160a01b0316145b806114165750815161141690336106d1565b90508061148b5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610889565b846001600160a01b031682600001516001600160a01b0316146114ff5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610889565b6001600160a01b0384166115635760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610889565b611573600084846000015161134c565b6001600160a01b03851660009081526004602052604081208054600192906115a59084906001600160801b03166124a6565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b038616600090815260046020526040812080546001945090926115f1918591166124cd565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff428116602080850191825260008981526003909152948520935184549151909216600160a01b026001600160e01b031990911691909216171790556116798460016124ed565b6000818152600360205260409020549091506001600160a01b031661170b576116a3816000541190565b1561170b5760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6008546001600160a01b03163314610b995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610889565b60408051808201909152600080825260208201526117ce826000541190565b61182d5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610889565b60007f0000000000000000000000000000000000000000000000000000000000000000831061188e576118807f000000000000000000000000000000000000000000000000000000000000000084612500565b61188b9060016124ed565b90505b825b8181106118f8576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff1691830191909152156118e557949350505050565b50806118f081612513565b915050611890565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610889565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b15611aa157604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906119ef90339089908890889060040161252a565b6020604051808303816000875af1925050508015611a2a575060408051601f3d908101601f19168201909252611a2791810190612566565b60015b611a87573d808015611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b508051600003611a7f5760405162461bcd60e51b815260040161088990612372565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611aa5565b5060015b949350505050565b60006001600160a01b038216611b2b5760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527f20746865207a65726f20616464726573730000000000000000000000000000006064820152608401610889565b506001600160a01b0316600090815260046020526040902054600160801b90046001600160801b031690565b6000546001600160a01b038416611bba5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610889565b611bc5816000541190565b15611c125760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610889565b7f0000000000000000000000000000000000000000000000000000000000000000831115611c8d5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610889565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190611ce99087906124cd565b6001600160801b03168152602001858360200151611d0791906124cd565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015611e275760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611deb60008884886119ab565b611e075760405162461bcd60e51b815260040161088990612372565b81611e11816121fb565b9250508080611e1f906121fb565b915050611d9e565b50600081905561174d565b6001600160e01b03198116811461133a57600080fd5b600060208284031215611e5a57600080fd5b8135611e6581611e32565b9392505050565b6000815180845260005b81811015611e9257602081850181015186830182015201611e76565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611e656020830184611e6c565b600060208284031215611ed757600080fd5b5035919050565b80356001600160a01b0381168114611ef557600080fd5b919050565b60008060408385031215611f0d57600080fd5b611f1683611ede565b946020939093013593505050565b600080600060608486031215611f3957600080fd5b611f4284611ede565b9250611f5060208501611ede565b9150604084013590509250925092565b60008060208385031215611f7357600080fd5b823567ffffffffffffffff80821115611f8b57600080fd5b818501915085601f830112611f9f57600080fd5b813581811115611fae57600080fd5b866020828501011115611fc057600080fd5b60209290920196919550909350505050565b600060208284031215611fe457600080fd5b611e6582611ede565b6020808252825182820181905260009190848201906040850190845b8181101561202557835183529284019291840191600101612009565b50909695505050505050565b6000806040838503121561204457600080fd5b61204d83611ede565b91506020830135801515811461206257600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561209957600080fd5b6120a285611ede565b93506120b060208601611ede565b925060408501359150606085013567ffffffffffffffff808211156120d457600080fd5b818701915087601f8301126120e857600080fd5b8135818111156120fa576120fa61206d565b604051601f8201601f19908116603f011681019083821181831017156121225761212261206d565b816040528281528a602084870101111561213b57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561217257600080fd5b61217b83611ede565b915061218960208401611ede565b90509250929050565b600181811c908216806121a657607f821691505b6020821081036121c657634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156121de57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161220d5761220d6121e5565b5060010190565b60008261223157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612250576122506121e5565b500290565b601f8211156109c057600081815260208120601f850160051c8101602086101561227c5750805b601f850160051c820191505b8181101561174d57828155600101612288565b67ffffffffffffffff8311156122b3576122b361206d565b6122c7836122c18354612192565b83612255565b6000601f8411600181146122fb57600085156122e35750838201355b600019600387901b1c1916600186901b178355612355565b600083815260209020601f19861690835b8281101561232c578685013582556020948501946001909201910161230c565b50868210156123495760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b634e487b7160e01b600052603260045260246000fd5b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527f6563656976657220696d706c656d656e74657200000000000000000000000000606082015260800190565b600081546123dc81612192565b600182811680156123f4576001811461240957612438565b60ff1984168752821515830287019450612438565b8560005260208060002060005b8581101561242f5781548a820152908401908201612416565b50505082870194505b5050505092915050565b600061244e82846123cf565b6e17b830b9b997b230ba30973539b7b760891b8152600f019392505050565b600061247982846123cf565b7f2f706173732f636f6e74726163742e6a736f6e0000000000000000000000000081526013019392505050565b6001600160801b038281168282160390808211156124c6576124c66121e5565b5092915050565b6001600160801b038181168382160190808211156124c6576124c66121e5565b80820180821115610786576107866121e5565b81810381811115610786576107866121e5565b600081612522576125226121e5565b506000190190565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261255c6080830184611e6c565b9695505050505050565b60006020828403121561257857600080fd5b8151611e6581611e3256fea2646970667358221220fee6662de88c9c7f4d10d6cb90246e31e52e69fd400c424010c764b2e679f89e64736f6c63430008100033455243373231413a207472616e7366657220746f206e6f6e2045524337323152

Deployed Bytecode

0x6080604052600436106102305760003560e01c80636d10cd9c1161012e578063b88d4fde116100ab578063dc33e6811161006f578063dc33e68114610659578063e530a7d014610679578063e8a3d485146106a1578063e985e9c5146106b6578063f2fde38b146106ff57600080fd5b8063b88d4fde146105bb578063c87b56dd146105db578063c8e39c25146105fb578063cee7d3a51461061b578063d7224ba01461064357600080fd5b806391b7f5ed116100f257806391b7f5ed1461052657806395d89b41146105465780639e6a1d7d1461055b578063a22cb4651461057b578063b45b9ec71461059b57600080fd5b80636d10cd9c1461048657806370a08231146104a6578063715018a6146104c65780638462151c146104db5780638da5cb5b1461050857600080fd5b806326987b60116101bc5780634f6ccce7116101805780634f6ccce7146103f057806355f804b3146104105780635a2e2f4714610430578063611f3f10146104505780636352211e1461046657600080fd5b806326987b601461036f5780632f745c591461038557806332cb6b0c146103a55780633ccfd60b146103bb57806342842e0e146103d057600080fd5b8063095ea7b311610203578063095ea7b3146102e8578063117803e31461030a5780631249c58b1461033257806318160ddd1461033a57806323b872dd1461034f57600080fd5b806301ffc9a714610235578063027752401461026a57806306fdde031461028e578063081812fc146102b0575b600080fd5b34801561024157600080fd5b50610255610250366004611e48565b61071f565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b50610280600b5481565b604051908152602001610261565b34801561029a57600080fd5b506102a361078c565b6040516102619190611eb2565b3480156102bc57600080fd5b506102d06102cb366004611ec5565b61081e565b6040516001600160a01b039091168152602001610261565b3480156102f457600080fd5b50610308610303366004611efa565b6108ae565b005b34801561031657600080fd5b506102d073d3090cf8d7ecd9c1f41ebfb07c915b637bf4f46681565b6103086109c5565b34801561034657600080fd5b50600054610280565b34801561035b57600080fd5b5061030861036a366004611f24565b610b9b565b34801561037b57600080fd5b5061028060005481565b34801561039157600080fd5b506102806103a0366004611efa565b610ba6565b3480156103b157600080fd5b50610280600c5481565b3480156103c757600080fd5b50610308610d12565b3480156103dc57600080fd5b506103086103eb366004611f24565b610eb5565b3480156103fc57600080fd5b5061028061040b366004611ec5565b610ed0565b34801561041c57600080fd5b5061030861042b366004611f60565b610f32565b34801561043c57600080fd5b5061030861044b366004611fd2565b610f47565b34801561045c57600080fd5b50610280600a5481565b34801561047257600080fd5b506102d0610481366004611ec5565b610f71565b34801561049257600080fd5b506103086104a1366004611ec5565b610f83565b3480156104b257600080fd5b506102806104c1366004611fd2565b610f90565b3480156104d257600080fd5b50610308611021565b3480156104e757600080fd5b506104fb6104f6366004611fd2565b611033565b6040516102619190611fed565b34801561051457600080fd5b506008546001600160a01b03166102d0565b34801561053257600080fd5b50610308610541366004611ec5565b6110d5565b34801561055257600080fd5b506102a36110e2565b34801561056757600080fd5b50610308610576366004611ec5565b6110f1565b34801561058757600080fd5b50610308610596366004612031565b6110fe565b3480156105a757600080fd5b506102556105b6366004611fd2565b6111c2565b3480156105c757600080fd5b506103086105d6366004612083565b6111d7565b3480156105e757600080fd5b506102a36105f6366004611ec5565b611210565b34801561060757600080fd5b506009546102d0906001600160a01b031681565b34801561062757600080fd5b506102d073bb43fceff7cb40f87f88d34f37f9b7b311d3a6fd81565b34801561064f57600080fd5b5061028060075481565b34801561066557600080fd5b50610280610674366004611fd2565b611291565b34801561068557600080fd5b506102d073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d81565b3480156106ad57600080fd5b506102a361129c565b3480156106c257600080fd5b506102556106d136600461215f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561070b57600080fd5b5061030861071a366004611fd2565b6112c4565b60006001600160e01b031982166380ac58cd60e01b148061075057506001600160e01b03198216635b5e139f60e01b145b8061076b57506001600160e01b0319821663780e9d6360e01b145b8061078657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461079b90612192565b80601f01602080910402602001604051908101604052809291908181526020018280546107c790612192565b80156108145780601f106107e957610100808354040283529160200191610814565b820191906000526020600020905b8154815290600101906020018083116107f757829003601f168201915b5050505050905090565b600061082b826000541190565b6108925760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006108b982610f71565b9050806001600160a01b0316836001600160a01b0316036109275760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610889565b336001600160a01b0382161480610943575061094381336106d1565b6109b55760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610889565b6109c083838361134c565b505050565b600c546000541115610a195760405162461bcd60e51b815260206004820152601260248201527f4d617820737570706c79207265616368656400000000000000000000000000006044820152606401610889565b600b54610a2533611291565b10610a725760405162461bcd60e51b815260206004820152601360248201527f4f6e6c79206f6e65207065722077616c6c6574000000000000000000000000006044820152606401610889565b6009546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906121cc565b11610b3c5760405162461bcd60e51b815260206004820152602760248201527f596f75206d757374206f776e206174206c65617374206f6e6520416c6c4f757460448201526615d85c8813919560ca1b6064820152608401610889565b600a54341015610b8e5760405162461bcd60e51b815260206004820152601660248201527f6d696e7420707269636520697320302e303220657468000000000000000000006044820152606401610889565b610b993360016113a8565b565b6109c08383836113c2565b6000610bb183610f90565b8210610c0a5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610889565b600080549080805b83811015610cb2576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610c6557805192505b876001600160a01b0316836001600160a01b031603610c9f57868403610c915750935061078692505050565b83610c9b816121fb565b9450505b5080610caa816121fb565b915050610c12565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610889565b6008546001600160a01b0316331480610d3e57503373d3090cf8d7ecd9c1f41ebfb07c915b637bf4f466145b80610d5c57503373b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d145b610db35760405162461bcd60e51b815260206004820152602260248201527f4f6e6c792073706563696669632077616c6c6574732063616e20776974686472604482015261617760f01b6064820152608401610889565b60004711610e035760405162461bcd60e51b815260206004820152601660248201527f4e6f2062616c616e636520746f207769746864726177000000000000000000006044820152606401610889565b4773d3090cf8d7ecd9c1f41ebfb07c915b637bf4f4666108fc610e27606484612214565b610e32906046612236565b6040518115909202916000818181858888f19350505050158015610e5a573d6000803e3d6000fd5b5073b23e3c30cee40b6f07cee3705e3ab2198c3b9f2d6108fc610e7e606484612214565b610e8990601e612236565b6040518115909202916000818181858888f19350505050158015610eb1573d6000803e3d6000fd5b5050565b6109c0838383604051806020016040528060008152506111d7565b600080548210610f2e5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610889565b5090565b610f3a611755565b600d6109c082848361229b565b610f4f611755565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f7c826117af565b5192915050565b610f8b611755565b600c55565b60006001600160a01b038216610ffc5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610889565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b611029611755565b610b996000611959565b6060600061104083610f90565b905060008167ffffffffffffffff81111561105d5761105d61206d565b604051908082528060200260200182016040528015611086578160200160208202803683370190505b50905060005b828110156110cd5761109e8582610ba6565b8282815181106110b0576110b061235c565b6020908102919091010152806110c5816121fb565b91505061108c565b509392505050565b6110dd611755565b600a55565b60606002805461079b90612192565b6110f9611755565b600b55565b336001600160a01b038316036111565760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610889565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000806111ce83610f90565b15159392505050565b6111e28484846113c2565b6111ee848484846119ab565b61120a5760405162461bcd60e51b815260040161088990612372565b50505050565b606061121d826000541190565b6112695760405162461bcd60e51b815260206004820152601460248201527f546f6b656e206e6f74206d696e746564207965740000000000000000000000006044820152606401610889565b600d60405160200161127b9190612442565b6040516020818303038152906040529050919050565b600061078682611aad565b6060600d6040516020016112b0919061246d565b604051602081830303815290604052905090565b6112cc611755565b6001600160a01b0381166113315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610889565b61133a81611959565b50565b6001600160a01b03163b151590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610eb1828260405180602001604052806000815250611b57565b60006113cd826117af565b80519091506000906001600160a01b0316336001600160a01b031614806114045750336113f98461081e565b6001600160a01b0316145b806114165750815161141690336106d1565b90508061148b5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610889565b846001600160a01b031682600001516001600160a01b0316146114ff5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610889565b6001600160a01b0384166115635760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610889565b611573600084846000015161134c565b6001600160a01b03851660009081526004602052604081208054600192906115a59084906001600160801b03166124a6565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b038616600090815260046020526040812080546001945090926115f1918591166124cd565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff428116602080850191825260008981526003909152948520935184549151909216600160a01b026001600160e01b031990911691909216171790556116798460016124ed565b6000818152600360205260409020549091506001600160a01b031661170b576116a3816000541190565b1561170b5760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6008546001600160a01b03163314610b995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610889565b60408051808201909152600080825260208201526117ce826000541190565b61182d5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610889565b60007f0000000000000000000000000000000000000000000000000000000000000032831061188e576118807f000000000000000000000000000000000000000000000000000000000000003284612500565b61188b9060016124ed565b90505b825b8181106118f8576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff1691830191909152156118e557949350505050565b50806118f081612513565b915050611890565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610889565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b15611aa157604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906119ef90339089908890889060040161252a565b6020604051808303816000875af1925050508015611a2a575060408051601f3d908101601f19168201909252611a2791810190612566565b60015b611a87573d808015611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b508051600003611a7f5760405162461bcd60e51b815260040161088990612372565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611aa5565b5060015b949350505050565b60006001600160a01b038216611b2b5760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527f20746865207a65726f20616464726573730000000000000000000000000000006064820152608401610889565b506001600160a01b0316600090815260046020526040902054600160801b90046001600160801b031690565b6000546001600160a01b038416611bba5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610889565b611bc5816000541190565b15611c125760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610889565b7f0000000000000000000000000000000000000000000000000000000000000032831115611c8d5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610889565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190611ce99087906124cd565b6001600160801b03168152602001858360200151611d0791906124cd565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015611e275760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611deb60008884886119ab565b611e075760405162461bcd60e51b815260040161088990612372565b81611e11816121fb565b9250508080611e1f906121fb565b915050611d9e565b50600081905561174d565b6001600160e01b03198116811461133a57600080fd5b600060208284031215611e5a57600080fd5b8135611e6581611e32565b9392505050565b6000815180845260005b81811015611e9257602081850181015186830182015201611e76565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611e656020830184611e6c565b600060208284031215611ed757600080fd5b5035919050565b80356001600160a01b0381168114611ef557600080fd5b919050565b60008060408385031215611f0d57600080fd5b611f1683611ede565b946020939093013593505050565b600080600060608486031215611f3957600080fd5b611f4284611ede565b9250611f5060208501611ede565b9150604084013590509250925092565b60008060208385031215611f7357600080fd5b823567ffffffffffffffff80821115611f8b57600080fd5b818501915085601f830112611f9f57600080fd5b813581811115611fae57600080fd5b866020828501011115611fc057600080fd5b60209290920196919550909350505050565b600060208284031215611fe457600080fd5b611e6582611ede565b6020808252825182820181905260009190848201906040850190845b8181101561202557835183529284019291840191600101612009565b50909695505050505050565b6000806040838503121561204457600080fd5b61204d83611ede565b91506020830135801515811461206257600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561209957600080fd5b6120a285611ede565b93506120b060208601611ede565b925060408501359150606085013567ffffffffffffffff808211156120d457600080fd5b818701915087601f8301126120e857600080fd5b8135818111156120fa576120fa61206d565b604051601f8201601f19908116603f011681019083821181831017156121225761212261206d565b816040528281528a602084870101111561213b57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561217257600080fd5b61217b83611ede565b915061218960208401611ede565b90509250929050565b600181811c908216806121a657607f821691505b6020821081036121c657634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156121de57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161220d5761220d6121e5565b5060010190565b60008261223157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612250576122506121e5565b500290565b601f8211156109c057600081815260208120601f850160051c8101602086101561227c5750805b601f850160051c820191505b8181101561174d57828155600101612288565b67ffffffffffffffff8311156122b3576122b361206d565b6122c7836122c18354612192565b83612255565b6000601f8411600181146122fb57600085156122e35750838201355b600019600387901b1c1916600186901b178355612355565b600083815260209020601f19861690835b8281101561232c578685013582556020948501946001909201910161230c565b50868210156123495760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b634e487b7160e01b600052603260045260246000fd5b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527f6563656976657220696d706c656d656e74657200000000000000000000000000606082015260800190565b600081546123dc81612192565b600182811680156123f4576001811461240957612438565b60ff1984168752821515830287019450612438565b8560005260208060002060005b8581101561242f5781548a820152908401908201612416565b50505082870194505b5050505092915050565b600061244e82846123cf565b6e17b830b9b997b230ba30973539b7b760891b8152600f019392505050565b600061247982846123cf565b7f2f706173732f636f6e74726163742e6a736f6e0000000000000000000000000081526013019392505050565b6001600160801b038281168282160390808211156124c6576124c66121e5565b5092915050565b6001600160801b038181168382160190808211156124c6576124c66121e5565b80820180821115610786576107866121e5565b81810381811115610786576107866121e5565b600081612522576125226121e5565b506000190190565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261255c6080830184611e6c565b9695505050505050565b60006020828403121561257857600080fd5b8151611e6581611e3256fea2646970667358221220fee6662de88c9c7f4d10d6cb90246e31e52e69fd400c424010c764b2e679f89e64736f6c63430008100033

Deployed Bytecode Sourcemap

43230:3451:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26540:422;;;;;;;;;;-1:-1:-1;26540:422:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;26540:422:0;;;;;;;;43677:29;;;;;;;;;;;;;;;;;;;738:25:1;;;726:2;711:18;43677:29:0;592:177:1;28501:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30196:292::-;;;;;;;;;;-1:-1:-1;30196:292:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1776:55:1;;;1758:74;;1746:2;1731:18;30196:292:0;1612:226:1;29717:413:0;;;;;;;;;;-1:-1:-1;29717:413:0;;;;;:::i;:::-;;:::i;:::-;;43367:74;;;;;;;;;;;;43399:42;43367:74;;44196:487;;;:::i;24896:100::-;;;;;;;;;;-1:-1:-1;24949:7:0;24976:12;24896:100;;31223:162;;;;;;;;;;-1:-1:-1;31223:162:0;;;;;:::i;:::-;;:::i;23330:31::-;;;;;;;;;;;;;;;;25604:864;;;;;;;;;;-1:-1:-1;25604:864:0;;;;;:::i;:::-;;:::i;43713:33::-;;;;;;;;;;;;;;;;44791:322;;;;;;;;;;;;;:::i;31456:177::-;;;;;;;;;;-1:-1:-1;31456:177:0;;;;;:::i;:::-;;:::i;25073:228::-;;;;;;;;;;-1:-1:-1;25073:228:0;;;;;:::i;:::-;;:::i;44691:92::-;;;;;;;;;;-1:-1:-1;44691:92:0;;;;;:::i;:::-;;:::i;46586:::-;;;;;;;;;;-1:-1:-1;46586:92:0;;;;;:::i;:::-;;:::i;43630:40::-;;;;;;;;;;;;;;;;28310:124;;;;;;;;;;-1:-1:-1;28310:124:0;;;;;:::i;:::-;;:::i;46475:103::-;;;;;;;;;;-1:-1:-1;46475:103:0;;;;;:::i;:::-;;:::i;27026:258::-;;;;;;;;;;-1:-1:-1;27026:258:0;;;;;:::i;:::-;;:::i;42346:103::-;;;;;;;;;;;;;:::i;45563:376::-;;;;;;;;;;-1:-1:-1;45563:376:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41698:87::-;;;;;;;;;;-1:-1:-1;41771:6:0;;-1:-1:-1;;;;;41771:6:0;41698:87;;45947:97;;;;;;;;;;-1:-1:-1;45947:97:0;;;;;:::i;:::-;;:::i;28670:104::-;;;;;;;;;;;;;:::i;46365:102::-;;;;;;;;;;-1:-1:-1;46365:102:0;;;;;:::i;:::-;;:::i;30560:311::-;;;;;;;;;;-1:-1:-1;30560:311:0;;;;;:::i;:::-;;:::i;46052:183::-;;;;;;;;;;-1:-1:-1;46052:183:0;;;;;:::i;:::-;;:::i;31704:355::-;;;;;;;;;;-1:-1:-1;31704:355:0;;;;;:::i;:::-;;:::i;45269:286::-;;;;;;;;;;-1:-1:-1;45269:286:0;;;;;:::i;:::-;;:::i;43543:72::-;;;;;;;;;;-1:-1:-1;43543:72:0;;;;-1:-1:-1;;;;;43543:72:0;;;43280:80;;;;;;;;;;;;43318:42;43280:80;;36585:43;;;;;;;;;;;;;;;;46243:113;;;;;;;;;;-1:-1:-1;46243:113:0;;;;;:::i;:::-;;:::i;43453:78::-;;;;;;;;;;;;43489:42;43453:78;;45121:140;;;;;;;;;;;;;:::i;30942:214::-;;;;;;;;;;-1:-1:-1;30942:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;31113:25:0;;;31084:4;31113:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;30942:214;42604:201;;;;;;;;;;-1:-1:-1;42604:201:0;;;;;:::i;:::-;;:::i;26540:422::-;26687:4;-1:-1:-1;;;;;;26729:40:0;;-1:-1:-1;;;26729:40:0;;:105;;-1:-1:-1;;;;;;;26786:48:0;;-1:-1:-1;;;26786:48:0;26729:105;:172;;;-1:-1:-1;;;;;;;26851:50:0;;-1:-1:-1;;;26851:50:0;26729:172;:225;;;-1:-1:-1;;;;;;;;;;12219:40:0;;;26918:36;26709:245;26540:422;-1:-1:-1;;26540:422:0:o;28501:100::-;28555:13;28588:5;28581:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28501:100;:::o;30196:292::-;30300:7;30347:16;30355:7;32371:4;32405:12;-1:-1:-1;32395:22:0;32314:111;30347:16;30325:111;;;;-1:-1:-1;;;30325:111:0;;6787:2:1;30325:111:0;;;6769:21:1;6826:2;6806:18;;;6799:30;6865:34;6845:18;;;6838:62;-1:-1:-1;;;6916:18:1;;;6909:43;6969:19;;30325:111:0;;;;;;;;;-1:-1:-1;30456:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;30456:24:0;;30196:292::o;29717:413::-;29790:13;29806:24;29822:7;29806:15;:24::i;:::-;29790:40;;29855:5;-1:-1:-1;;;;;29849:11:0;:2;-1:-1:-1;;;;;29849:11:0;;29841:58;;;;-1:-1:-1;;;29841:58:0;;7201:2:1;29841:58:0;;;7183:21:1;7240:2;7220:18;;;7213:30;7279:34;7259:18;;;7252:62;-1:-1:-1;;;7330:18:1;;;7323:32;7372:19;;29841:58:0;6999:398:1;29841:58:0;22297:10;-1:-1:-1;;;;;29934:21:0;;;;:62;;-1:-1:-1;29959:37:0;29976:5;22297:10;30942:214;:::i;29959:37::-;29912:169;;;;-1:-1:-1;;;29912:169:0;;7604:2:1;29912:169:0;;;7586:21:1;7643:2;7623:18;;;7616:30;7682:34;7662:18;;;7655:62;7753:27;7733:18;;;7726:55;7798:19;;29912:169:0;7402:421:1;29912:169:0;30094:28;30103:2;30107:7;30116:5;30094:8;:28::i;:::-;29779:351;29717:413;;:::o;44196:487::-;44281:10;;24949:7;24976:12;44264:27;;44241:96;;;;-1:-1:-1;;;44241:96:0;;8030:2:1;44241:96:0;;;8012:21:1;8069:2;8049:18;;;8042:30;8108:20;8088:18;;;8081:48;8146:18;;44241:96:0;7828:342:1;44241:96:0;44386:10;;44359:24;44372:10;44359:12;:24::i;:::-;:37;44350:71;;;;-1:-1:-1;;;44350:71:0;;8377:2:1;44350:71:0;;;8359:21:1;8416:2;8396:18;;;8389:30;8455:21;8435:18;;;8428:49;8494:18;;44350:71:0;8175:343:1;44350:71:0;44456:3;;:25;;-1:-1:-1;;;44456:25:0;;44470:10;44456:25;;;1758:74:1;44484:1:0;;-1:-1:-1;;;;;44456:3:0;;:13;;1731:18:1;;44456:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;44434:118;;;;-1:-1:-1;;;44434:118:0;;8914:2:1;44434:118:0;;;8896:21:1;8953:2;8933:18;;;8926:30;8992:34;8972:18;;;8965:62;-1:-1:-1;;;9043:18:1;;;9036:37;9090:19;;44434:118:0;8712:403:1;44434:118:0;44600:12;;44587:9;:25;;44565:73;;;;-1:-1:-1;;;44565:73:0;;9322:2:1;44565:73:0;;;9304:21:1;9361:2;9341:18;;;9334:30;9400:24;9380:18;;;9373:52;9442:18;;44565:73:0;9120:346:1;44565:73:0;44651:24;44661:10;44673:1;44651:9;:24::i;:::-;44196:487::o;31223:162::-;31349:28;31359:4;31365:2;31369:7;31349:9;:28::i;25604:864::-;25729:7;25770:16;25780:5;25770:9;:16::i;:::-;25762:5;:24;25754:71;;;;-1:-1:-1;;;25754:71:0;;9673:2:1;25754:71:0;;;9655:21:1;9712:2;9692:18;;;9685:30;9751:34;9731:18;;;9724:62;-1:-1:-1;;;9802:18:1;;;9795:32;9844:19;;25754:71:0;9471:398:1;25754:71:0;25836:22;24976:12;;;25836:22;;25968:426;25992:14;25988:1;:18;25968:426;;;26028:31;26062:14;;;:11;:14;;;;;;;;;26028:48;;;;;;;;;-1:-1:-1;;;;;26028:48:0;;;;;-1:-1:-1;;;26028:48:0;;;;;;;;;;;;26095:28;26091:103;;26164:14;;;-1:-1:-1;26091:103:0;26233:5;-1:-1:-1;;;;;26212:26:0;:17;-1:-1:-1;;;;;26212:26:0;;26208:175;;26278:5;26263:11;:20;26259:77;;-1:-1:-1;26315:1:0;-1:-1:-1;26308:8:0;;-1:-1:-1;;;26308:8:0;26259:77;26354:13;;;;:::i;:::-;;;;26208:175;-1:-1:-1;26008:3:0;;;;:::i;:::-;;;;25968:426;;;-1:-1:-1;26404:56:0;;-1:-1:-1;;;26404:56:0;;10348:2:1;26404:56:0;;;10330:21:1;10387:2;10367:18;;;10360:30;10426:34;10406:18;;;10399:62;-1:-1:-1;;;10477:18:1;;;10470:44;10531:19;;26404:56:0;10146:410:1;44791:322:0;41771:6;;-1:-1:-1;;;;;41771:6:0;43995:10;:21;;:59;;-1:-1:-1;44035:10:0;43399:42;44035:19;43995:59;:99;;;-1:-1:-1;44071:10:0;43489:42;44071:23;43995:99;43973:183;;;;-1:-1:-1;;;43973:183:0;;10763:2:1;43973:183:0;;;10745:21:1;10802:2;10782:18;;;10775:30;10841:34;10821:18;;;10814:62;-1:-1:-1;;;10892:18:1;;;10885:32;10934:19;;43973:183:0;10561:398:1;43973:183:0;44875:1:::1;44851:21;:25;44843:60;;;::::0;-1:-1:-1;;;44843:60:0;;11166:2:1;44843:60:0::1;::::0;::::1;11148:21:1::0;11205:2;11185:18;;;11178:30;11244:24;11224:18;;;11217:52;11286:18;;44843:60:0::1;10964:346:1::0;44843:60:0::1;44934:21;43399:42;44968:43;44992:13;45002:3;44934:21:::0;44992:13:::1;:::i;:::-;:18;::::0;45008:2:::1;44992:18;:::i;:::-;44968:43;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;43489:42:0::1;45040:47;45068:13;45078:3;45068:7:::0;:13:::1;:::i;:::-;:18;::::0;45084:2:::1;45068:18;:::i;:::-;45040:47;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;44832:281;44791:322::o:0;31456:177::-;31586:39;31603:4;31609:2;31613:7;31586:39;;;;;;;;;;;;:16;:39::i;25073:228::-;25176:7;24976:12;;25209:5;:21;25201:69;;;;-1:-1:-1;;;25201:69:0;;11912:2:1;25201:69:0;;;11894:21:1;11951:2;11931:18;;;11924:30;11990:34;11970:18;;;11963:62;-1:-1:-1;;;12041:18:1;;;12034:33;12084:19;;25201:69:0;11710:399:1;25201:69:0;-1:-1:-1;25288:5:0;25073:228::o;44691:92::-;41584:13;:11;:13::i;:::-;44762:7:::1;:13;44772:3:::0;;44762:7;:13:::1;:::i;46586:92::-:0;41584:13;:11;:13::i;:::-;46651:3:::1;:19:::0;;-1:-1:-1;;;;;;46651:19:0::1;-1:-1:-1::0;;;;;46651:19:0;;;::::1;::::0;;;::::1;::::0;;46586:92::o;28310:124::-;28374:7;28401:20;28413:7;28401:11;:20::i;:::-;:25;;28310:124;-1:-1:-1;;28310:124:0:o;46475:103::-;41584:13;:11;:13::i;:::-;46547:10:::1;:23:::0;46475:103::o;27026:258::-;27090:7;-1:-1:-1;;;;;27132:19:0;;27110:112;;;;-1:-1:-1;;;27110:112:0;;14374:2:1;27110:112:0;;;14356:21:1;14413:2;14393:18;;;14386:30;14452:34;14432:18;;;14425:62;-1:-1:-1;;;14503:18:1;;;14496:41;14554:19;;27110:112:0;14172:407:1;27110:112:0;-1:-1:-1;;;;;;27248:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;27248:27:0;;27026:258::o;42346:103::-;41584:13;:11;:13::i;:::-;42411:30:::1;42438:1;42411:18;:30::i;45563:376::-:0;45649:16;45683:18;45704:16;45714:5;45704:9;:16::i;:::-;45683:37;;45731:25;45773:10;45759:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45759:25:0;;45731:53;;45800:9;45795:111;45819:10;45815:1;:14;45795:111;;;45865:29;45885:5;45892:1;45865:19;:29::i;:::-;45851:8;45860:1;45851:11;;;;;;;;:::i;:::-;;;;;;;;;;:43;45831:3;;;;:::i;:::-;;;;45795:111;;;-1:-1:-1;45923:8:0;45563:376;-1:-1:-1;;;45563:376:0:o;45947:97::-;41584:13;:11;:13::i;:::-;46013:12:::1;:23:::0;45947:97::o;28670:104::-;28726:13;28759:7;28752:14;;;;;:::i;46365:102::-;41584:13;:11;:13::i;:::-;46436:10:::1;:23:::0;46365:102::o;30560:311::-;22297:10;-1:-1:-1;;;;;30678:24:0;;;30670:63;;;;-1:-1:-1;;;30670:63:0;;14918:2:1;30670:63:0;;;14900:21:1;14957:2;14937:18;;;14930:30;14996:28;14976:18;;;14969:56;15042:18;;30670:63:0;14716:350:1;30670:63:0;22297:10;30746:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;30746:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;30746:53:0;;;;;;;;;;30815:48;;540:41:1;;;30746:42:0;;22297:10;30815:48;;513:18:1;30815:48:0;;;;;;;30560:311;;:::o;46052:183::-;46136:4;46158:18;46179:16;46189:5;46179:9;:16::i;:::-;46213:14;;;46052:183;-1:-1:-1;;;46052:183:0:o;31704:355::-;31863:28;31873:4;31879:2;31883:7;31863:9;:28::i;:::-;31924:48;31947:4;31953:2;31957:7;31966:5;31924:22;:48::i;:::-;31902:149;;;;-1:-1:-1;;;31902:149:0;;;;;;;:::i;:::-;31704:355;;;;:::o;45269:286::-;45387:13;45426:16;45434:7;32371:4;32405:12;-1:-1:-1;32395:22:0;32314:111;45426:16;45418:48;;;;-1:-1:-1;;;45418:48:0;;15693:2:1;45418:48:0;;;15675:21:1;15732:2;15712:18;;;15705:30;15771:22;15751:18;;;15744:50;15811:18;;45418:48:0;15491:344:1;45418:48:0;45520:7;45491:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;45477:70;;45269:286;;;:::o;46243:113::-;46301:7;46328:20;46342:5;46328:13;:20::i;45121:140::-;45165:13;45222:7;45205:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;45191:62;;45121:140;:::o;42604:201::-;41584:13;:11;:13::i;:::-;-1:-1:-1;;;;;42693:22:0;::::1;42685:73;;;::::0;-1:-1:-1;;;42685:73:0;;17515:2:1;42685:73:0::1;::::0;::::1;17497:21:1::0;17554:2;17534:18;;;17527:30;17593:34;17573:18;;;17566:62;-1:-1:-1;;;17644:18:1;;;17637:36;17690:19;;42685:73:0::1;17313:402:1::0;42685:73:0::1;42769:28;42788:8;42769:18;:28::i;:::-;42604:201:::0;:::o;1954:326::-;-1:-1:-1;;;;;2249:19:0;;:23;;;1954:326::o;36381:196::-;36496:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;36496:29:0;-1:-1:-1;;;;;36496:29:0;;;;;;;;;36541:28;;36496:24;;36541:28;;;;;;;36381:196;;;:::o;32433:104::-;32502:27;32512:2;32516:8;32502:27;;;;;;;;;;;;:9;:27::i;34554:1709::-;34669:35;34707:20;34719:7;34707:11;:20::i;:::-;34782:18;;34669:58;;-1:-1:-1;34740:22:0;;-1:-1:-1;;;;;34766:34:0;22297:10;-1:-1:-1;;;;;34766:34:0;;:87;;;-1:-1:-1;22297:10:0;34817:20;34829:7;34817:11;:20::i;:::-;-1:-1:-1;;;;;34817:36:0;;34766:87;:154;;;-1:-1:-1;34887:18:0;;34870:50;;22297:10;30942:214;:::i;34870:50::-;34740:181;;34956:17;34934:117;;;;-1:-1:-1;;;34934:117:0;;17922:2:1;34934:117:0;;;17904:21:1;17961:2;17941:18;;;17934:30;18000:34;17980:18;;;17973:62;18071:20;18051:18;;;18044:48;18109:19;;34934:117:0;17720:414:1;34934:117:0;35108:4;-1:-1:-1;;;;;35086:26:0;:13;:18;;;-1:-1:-1;;;;;35086:26:0;;35064:114;;;;-1:-1:-1;;;35064:114:0;;18341:2:1;35064:114:0;;;18323:21:1;18380:2;18360:18;;;18353:30;18419:34;18399:18;;;18392:62;-1:-1:-1;;;18470:18:1;;;18463:36;18516:19;;35064:114:0;18139:402:1;35064:114:0;-1:-1:-1;;;;;35197:16:0;;35189:66;;;;-1:-1:-1;;;35189:66:0;;18748:2:1;35189:66:0;;;18730:21:1;18787:2;18767:18;;;18760:30;18826:34;18806:18;;;18799:62;-1:-1:-1;;;18877:18:1;;;18870:35;18922:19;;35189:66:0;18546:401:1;35189:66:0;35376:49;35393:1;35397:7;35406:13;:18;;;35376:8;:49::i;:::-;-1:-1:-1;;;;;35438:18:0;;;;;;:12;:18;;;;;:31;;35468:1;;35438:18;:31;;35468:1;;-1:-1:-1;;;;;35438:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;35438:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35480:16:0;;-1:-1:-1;35480:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;35480:16:0;;:29;;-1:-1:-1;;35480:29:0;;:::i;:::-;;;-1:-1:-1;;;;;35480:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35543:43:0;;;;;;;;-1:-1:-1;;;;;35543:43:0;;;;;;35569:15;35543:43;;;;;;;;;-1:-1:-1;35520:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;35520:66:0;-1:-1:-1;;;;;;35520:66:0;;;;;;;;;;;35848:11;35532:7;-1:-1:-1;35848:11:0;:::i;:::-;35915:1;35874:24;;;:11;:24;;;;;:29;35826:33;;-1:-1:-1;;;;;;35874:29:0;35870:288;;35938:20;35946:11;32371:4;32405:12;-1:-1:-1;32395:22:0;32314:111;35938:20;35934:213;;;36006:125;;;;;;;;36043:18;;-1:-1:-1;;;;;36006:125:0;;;;;;36084:28;;;;36006:125;;;;;;;;;;-1:-1:-1;35979:24:0;;;:11;:24;;;;;;;:152;;;;;;;;;-1:-1:-1;;;35979:152:0;-1:-1:-1;;;;;;35979:152:0;;;;;;;;;;;;35934:213;36194:7;36190:2;-1:-1:-1;;;;;36175:27:0;36184:4;-1:-1:-1;;;;;36175:27:0;;;;;;;;;;;36213:42;34658:1605;;;34554:1709;;;:::o;41863:132::-;41771:6;;-1:-1:-1;;;;;41771:6:0;22297:10;41927:23;41919:68;;;;-1:-1:-1;;;41919:68:0;;19691:2:1;41919:68:0;;;19673:21:1;;;19710:18;;;19703:30;19769:34;19749:18;;;19742:62;19821:18;;41919:68:0;19489:356:1;27566:682:0;-1:-1:-1;;;;;;;;;;;;;;;;;27701:16:0;27709:7;32371:4;32405:12;-1:-1:-1;32395:22:0;32314:111;27701:16;27693:71;;;;-1:-1:-1;;;27693:71:0;;20052:2:1;27693:71:0;;;20034:21:1;20091:2;20071:18;;;20064:30;20130:34;20110:18;;;20103:62;-1:-1:-1;;;20181:18:1;;;20174:40;20231:19;;27693:71:0;19850:406:1;27693:71:0;27777:26;27829:12;27818:7;:23;27814:103;;27879:22;27889:12;27879:7;:22;:::i;:::-;:26;;27904:1;27879:26;:::i;:::-;27858:47;;27814:103;27949:7;27929:242;27966:18;27958:4;:26;27929:242;;28009:31;28043:17;;;:11;:17;;;;;;;;;28009:51;;;;;;;;;-1:-1:-1;;;;;28009:51:0;;;;;-1:-1:-1;;;28009:51:0;;;;;;;;;;;;28079:28;28075:85;;28135:9;27566:682;-1:-1:-1;;;;27566:682:0:o;28075:85::-;-1:-1:-1;27986:6:0;;;;:::i;:::-;;;;27929:242;;;-1:-1:-1;28183:57:0;;-1:-1:-1;;;28183:57:0;;20737:2:1;28183:57:0;;;20719:21:1;20776:2;20756:18;;;20749:30;20815:34;20795:18;;;20788:62;-1:-1:-1;;;20866:18:1;;;20859:45;20921:19;;28183:57:0;20535:411:1;42965:191:0;43058:6;;;-1:-1:-1;;;;;43075:17:0;;;-1:-1:-1;;;;;;43075:17:0;;;;;;;43108:40;;43058:6;;;43075:17;43058:6;;43108:40;;43039:16;;43108:40;43028:128;42965:191;:::o;38256:985::-;38411:4;-1:-1:-1;;;;;38432:13:0;;2249:19;:23;38428:806;;38485:175;;-1:-1:-1;;;38485:175:0;;-1:-1:-1;;;;;38485:36:0;;;;;:175;;22297:10;;38579:4;;38606:7;;38636:5;;38485:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38485:175:0;;;;;;;;-1:-1:-1;;38485:175:0;;;;;;;;;;;;:::i;:::-;;;38464:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38847:6;:13;38864:1;38847:18;38843:321;;38890:109;;-1:-1:-1;;;38890:109:0;;;;;;;:::i;38843:321::-;39114:6;39108:13;39099:6;39095:2;39091:15;39084:38;38464:715;-1:-1:-1;;;;;;38724:55:0;-1:-1:-1;;;38724:55:0;;-1:-1:-1;38717:62:0;;38428:806;-1:-1:-1;39218:4:0;38428:806;38256:985;;;;;;:::o;27292:266::-;27353:7;-1:-1:-1;;;;;27395:19:0;;27373:118;;;;-1:-1:-1;;;27373:118:0;;21924:2:1;27373:118:0;;;21906:21:1;21963:2;21943:18;;;21936:30;22002:34;21982:18;;;21975:62;22073:19;22053:18;;;22046:47;22110:19;;27373:118:0;21722:413:1;27373:118:0;-1:-1:-1;;;;;;27517:19:0;;;;;:12;:19;;;;;:32;-1:-1:-1;;;27517:32:0;;-1:-1:-1;;;;;27517:32:0;;27292:266::o;32900:1400::-;33023:20;33046:12;-1:-1:-1;;;;;33077:16:0;;33069:62;;;;-1:-1:-1;;;33069:62:0;;22342:2:1;33069:62:0;;;22324:21:1;22381:2;22361:18;;;22354:30;22420:34;22400:18;;;22393:62;-1:-1:-1;;;22471:18:1;;;22464:31;22512:19;;33069:62:0;22140:397:1;33069:62:0;33276:21;33284:12;32371:4;32405:12;-1:-1:-1;32395:22:0;32314:111;33276:21;33275:22;33267:64;;;;-1:-1:-1;;;33267:64:0;;22744:2:1;33267:64:0;;;22726:21:1;22783:2;22763:18;;;22756:30;22822:31;22802:18;;;22795:59;22871:18;;33267:64:0;22542:353:1;33267:64:0;33362:12;33350:8;:24;;33342:71;;;;-1:-1:-1;;;33342:71:0;;23102:2:1;33342:71:0;;;23084:21:1;23141:2;23121:18;;;23114:30;23180:34;23160:18;;;23153:62;-1:-1:-1;;;23231:18:1;;;23224:32;23273:19;;33342:71:0;22900:398:1;33342:71:0;-1:-1:-1;;;;;33533:16:0;;33500:30;33533:16;;;:12;:16;;;;;;;;;33500:49;;;;;;;;;-1:-1:-1;;;;;33500:49:0;;;;;-1:-1:-1;;;33500:49:0;;;;;;;;;;;33579:135;;;;;;;;33605:19;;33500:49;;33579:135;;;33605:39;;33635:8;;33605:39;:::i;:::-;-1:-1:-1;;;;;33579:135:0;;;;;33694:8;33659:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;33579:135:0;;;;;;-1:-1:-1;;;;;33560:16:0;;;;;;;:12;:16;;;;;;;;:154;;;;;;;;-1:-1:-1;;;33560:154:0;;;;;;;;;;;;33753:43;;;;;;;;;;;33779:15;33753:43;;;;;;;;33725:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;33725:71:0;-1:-1:-1;;;;;;33725:71:0;;;;;;;;;;;;;;;;;;33737:12;;33857:325;33881:8;33877:1;:12;33857:325;;;33916:38;;33941:12;;-1:-1:-1;;;;;33916:38:0;;;33933:1;;33916:38;;33933:1;;33916:38;33995:59;34026:1;34030:2;34034:12;34048:5;33995:22;:59::i;:::-;33969:172;;;;-1:-1:-1;;;33969:172:0;;;;;;;:::i;:::-;34156:14;;;;:::i;:::-;;;;33891:3;;;;;:::i;:::-;;;;33857:325;;;-1:-1:-1;34194:12:0;:27;;;34232:60;31704:355;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;774:423::-;816:3;854:5;848:12;881:6;876:3;869:19;906:1;916:162;930:6;927:1;924:13;916:162;;;992:4;1048:13;;;1044:22;;1038:29;1020:11;;;1016:20;;1009:59;945:12;916:162;;;920:3;1123:1;1116:4;1107:6;1102:3;1098:16;1094:27;1087:38;1186:4;1179:2;1175:7;1170:2;1162:6;1158:15;1154:29;1149:3;1145:39;1141:50;1134:57;;;774:423;;;;:::o;1202:220::-;1351:2;1340:9;1333:21;1314:4;1371:45;1412:2;1401:9;1397:18;1389:6;1371:45;:::i;1427:180::-;1486:6;1539:2;1527:9;1518:7;1514:23;1510:32;1507:52;;;1555:1;1552;1545:12;1507:52;-1:-1:-1;1578:23:1;;1427:180;-1:-1:-1;1427:180:1:o;1843:196::-;1911:20;;-1:-1:-1;;;;;1960:54:1;;1950:65;;1940:93;;2029:1;2026;2019:12;1940:93;1843:196;;;:::o;2044:254::-;2112:6;2120;2173:2;2161:9;2152:7;2148:23;2144:32;2141:52;;;2189:1;2186;2179:12;2141:52;2212:29;2231:9;2212:29;:::i;:::-;2202:39;2288:2;2273:18;;;;2260:32;;-1:-1:-1;;;2044:254:1:o;2303:328::-;2380:6;2388;2396;2449:2;2437:9;2428:7;2424:23;2420:32;2417:52;;;2465:1;2462;2455:12;2417:52;2488:29;2507:9;2488:29;:::i;:::-;2478:39;;2536:38;2570:2;2559:9;2555:18;2536:38;:::i;:::-;2526:48;;2621:2;2610:9;2606:18;2593:32;2583:42;;2303:328;;;;;:::o;2636:592::-;2707:6;2715;2768:2;2756:9;2747:7;2743:23;2739:32;2736:52;;;2784:1;2781;2774:12;2736:52;2824:9;2811:23;2853:18;2894:2;2886:6;2883:14;2880:34;;;2910:1;2907;2900:12;2880:34;2948:6;2937:9;2933:22;2923:32;;2993:7;2986:4;2982:2;2978:13;2974:27;2964:55;;3015:1;3012;3005:12;2964:55;3055:2;3042:16;3081:2;3073:6;3070:14;3067:34;;;3097:1;3094;3087:12;3067:34;3142:7;3137:2;3128:6;3124:2;3120:15;3116:24;3113:37;3110:57;;;3163:1;3160;3153:12;3110:57;3194:2;3186:11;;;;;3216:6;;-1:-1:-1;2636:592:1;;-1:-1:-1;;;;2636:592:1:o;3233:186::-;3292:6;3345:2;3333:9;3324:7;3320:23;3316:32;3313:52;;;3361:1;3358;3351:12;3313:52;3384:29;3403:9;3384:29;:::i;3424:632::-;3595:2;3647:21;;;3717:13;;3620:18;;;3739:22;;;3566:4;;3595:2;3818:15;;;;3792:2;3777:18;;;3566:4;3861:169;3875:6;3872:1;3869:13;3861:169;;;3936:13;;3924:26;;4005:15;;;;3970:12;;;;3897:1;3890:9;3861:169;;;-1:-1:-1;4047:3:1;;3424:632;-1:-1:-1;;;;;;3424:632:1:o;4061:347::-;4126:6;4134;4187:2;4175:9;4166:7;4162:23;4158:32;4155:52;;;4203:1;4200;4193:12;4155:52;4226:29;4245:9;4226:29;:::i;:::-;4216:39;;4305:2;4294:9;4290:18;4277:32;4352:5;4345:13;4338:21;4331:5;4328:32;4318:60;;4374:1;4371;4364:12;4318:60;4397:5;4387:15;;;4061:347;;;;;:::o;4413:127::-;4474:10;4469:3;4465:20;4462:1;4455:31;4505:4;4502:1;4495:15;4529:4;4526:1;4519:15;4545:1138;4640:6;4648;4656;4664;4717:3;4705:9;4696:7;4692:23;4688:33;4685:53;;;4734:1;4731;4724:12;4685:53;4757:29;4776:9;4757:29;:::i;:::-;4747:39;;4805:38;4839:2;4828:9;4824:18;4805:38;:::i;:::-;4795:48;;4890:2;4879:9;4875:18;4862:32;4852:42;;4945:2;4934:9;4930:18;4917:32;4968:18;5009:2;5001:6;4998:14;4995:34;;;5025:1;5022;5015:12;4995:34;5063:6;5052:9;5048:22;5038:32;;5108:7;5101:4;5097:2;5093:13;5089:27;5079:55;;5130:1;5127;5120:12;5079:55;5166:2;5153:16;5188:2;5184;5181:10;5178:36;;;5194:18;;:::i;:::-;5269:2;5263:9;5237:2;5323:13;;-1:-1:-1;;5319:22:1;;;5343:2;5315:31;5311:40;5299:53;;;5367:18;;;5387:22;;;5364:46;5361:72;;;5413:18;;:::i;:::-;5453:10;5449:2;5442:22;5488:2;5480:6;5473:18;5528:7;5523:2;5518;5514;5510:11;5506:20;5503:33;5500:53;;;5549:1;5546;5539:12;5500:53;5605:2;5600;5596;5592:11;5587:2;5579:6;5575:15;5562:46;5650:1;5645:2;5640;5632:6;5628:15;5624:24;5617:35;5671:6;5661:16;;;;;;;4545:1138;;;;;;;:::o;5935:260::-;6003:6;6011;6064:2;6052:9;6043:7;6039:23;6035:32;6032:52;;;6080:1;6077;6070:12;6032:52;6103:29;6122:9;6103:29;:::i;:::-;6093:39;;6151:38;6185:2;6174:9;6170:18;6151:38;:::i;:::-;6141:48;;5935:260;;;;;:::o;6200:380::-;6279:1;6275:12;;;;6322;;;6343:61;;6397:4;6389:6;6385:17;6375:27;;6343:61;6450:2;6442:6;6439:14;6419:18;6416:38;6413:161;;6496:10;6491:3;6487:20;6484:1;6477:31;6531:4;6528:1;6521:15;6559:4;6556:1;6549:15;6413:161;;6200:380;;;:::o;8523:184::-;8593:6;8646:2;8634:9;8625:7;8621:23;8617:32;8614:52;;;8662:1;8659;8652:12;8614:52;-1:-1:-1;8685:16:1;;8523:184;-1:-1:-1;8523:184:1:o;9874:127::-;9935:10;9930:3;9926:20;9923:1;9916:31;9966:4;9963:1;9956:15;9990:4;9987:1;9980:15;10006:135;10045:3;10066:17;;;10063:43;;10086:18;;:::i;:::-;-1:-1:-1;10133:1:1;10122:13;;10006:135::o;11315:217::-;11355:1;11381;11371:132;;11425:10;11420:3;11416:20;11413:1;11406:31;11460:4;11457:1;11450:15;11488:4;11485:1;11478:15;11371:132;-1:-1:-1;11517:9:1;;11315:217::o;11537:168::-;11577:7;11643:1;11639;11635:6;11631:14;11628:1;11625:21;11620:1;11613:9;11606:17;11602:45;11599:71;;;11650:18;;:::i;:::-;-1:-1:-1;11690:9:1;;11537:168::o;12240:545::-;12342:2;12337:3;12334:11;12331:448;;;12378:1;12403:5;12399:2;12392:17;12448:4;12444:2;12434:19;12518:2;12506:10;12502:19;12499:1;12495:27;12489:4;12485:38;12554:4;12542:10;12539:20;12536:47;;;-1:-1:-1;12577:4:1;12536:47;12632:2;12627:3;12623:12;12620:1;12616:20;12610:4;12606:31;12596:41;;12687:82;12705:2;12698:5;12695:13;12687:82;;;12750:17;;;12731:1;12720:13;12687:82;;12961:1206;13085:18;13080:3;13077:27;13074:53;;;13107:18;;:::i;:::-;13136:94;13226:3;13186:38;13218:4;13212:11;13186:38;:::i;:::-;13180:4;13136:94;:::i;:::-;13256:1;13281:2;13276:3;13273:11;13298:1;13293:616;;;;13953:1;13970:3;13967:93;;;-1:-1:-1;14026:19:1;;;14013:33;13967:93;-1:-1:-1;;12918:1:1;12914:11;;;12910:24;12906:29;12896:40;12942:1;12938:11;;;12893:57;14073:78;;13266:895;;13293:616;12187:1;12180:14;;;12224:4;12211:18;;-1:-1:-1;;13329:17:1;;;13430:9;13452:229;13466:7;13463:1;13460:14;13452:229;;;13555:19;;;13542:33;13527:49;;13662:4;13647:20;;;;13615:1;13603:14;;;;13482:12;13452:229;;;13456:3;13709;13700:7;13697:16;13694:159;;;13833:1;13829:6;13823:3;13817;13814:1;13810:11;13806:21;13802:34;13798:39;13785:9;13780:3;13776:19;13763:33;13759:79;13751:6;13744:95;13694:159;;;13896:1;13890:3;13887:1;13883:11;13879:19;13873:4;13866:33;13266:895;;;12961:1206;;;:::o;14584:127::-;14645:10;14640:3;14636:20;14633:1;14626:31;14676:4;14673:1;14666:15;14700:4;14697:1;14690:15;15071:415;15273:2;15255:21;;;15312:2;15292:18;;;15285:30;15351:34;15346:2;15331:18;;15324:62;15422:21;15417:2;15402:18;;15395:49;15476:3;15461:19;;15071:415::o;15840:722::-;15890:3;15931:5;15925:12;15960:36;15986:9;15960:36;:::i;:::-;16015:1;16032:18;;;16059:133;;;;16206:1;16201:355;;;;16025:531;;16059:133;-1:-1:-1;;16092:24:1;;16080:37;;16165:14;;16158:22;16146:35;;16137:45;;;-1:-1:-1;16059:133:1;;16201:355;16232:5;16229:1;16222:16;16261:4;16306:2;16303:1;16293:16;16331:1;16345:165;16359:6;16356:1;16353:13;16345:165;;;16437:14;;16424:11;;;16417:35;16480:16;;;;16374:10;;16345:165;;;16349:3;;;16539:6;16534:3;16530:16;16523:23;;16025:531;;;;;15840:722;;;;:::o;16567:366::-;16796:3;16824:38;16858:3;16850:6;16824:38;:::i;:::-;-1:-1:-1;;;16871:29:1;;16924:2;16916:11;;16567:366;-1:-1:-1;;;16567:366:1:o;16938:370::-;17167:3;17195:38;17229:3;17221:6;17195:38;:::i;:::-;17253:21;17242:33;;17299:2;17291:11;;16938:370;-1:-1:-1;;;16938:370:1:o;18952:200::-;-1:-1:-1;;;;;19088:10:1;;;19076;;;19072:27;;19111:12;;;19108:38;;;19126:18;;:::i;:::-;19108:38;18952:200;;;;:::o;19157:197::-;-1:-1:-1;;;;;19279:10:1;;;19291;;;19275:27;;19314:11;;;19311:37;;;19328:18;;:::i;19359:125::-;19424:9;;;19445:10;;;19442:36;;;19458:18;;:::i;20261:128::-;20328:9;;;20349:11;;;20346:37;;;20363:18;;:::i;20394:136::-;20433:3;20461:5;20451:39;;20470:18;;:::i;:::-;-1:-1:-1;;;20506:18:1;;20394:136::o;20951:512::-;21145:4;-1:-1:-1;;;;;21255:2:1;21247:6;21243:15;21232:9;21225:34;21307:2;21299:6;21295:15;21290:2;21279:9;21275:18;21268:43;;21347:6;21342:2;21331:9;21327:18;21320:34;21390:3;21385:2;21374:9;21370:18;21363:31;21411:46;21452:3;21441:9;21437:19;21429:6;21411:46;:::i;:::-;21403:54;20951:512;-1:-1:-1;;;;;;20951:512:1:o;21468:249::-;21537:6;21590:2;21578:9;21569:7;21565:23;21561:32;21558:52;;;21606:1;21603;21596:12;21558:52;21638:9;21632:16;21657:30;21681:5;21657:30;:::i

Swarm Source

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