ETH Price: $3,954.48 (+1.14%)

Token

Ape Rides (AR)
 

Overview

Max Total Supply

1,001 AR

Holders

319

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
renshawdev.eth
Balance
1 AR
0xf70e17b5afdf83899f9f4cb7c7f9d56867d138c7
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:
ApeRides

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/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: contracts/new.sol




pragma solidity ^0.8.4;








error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // 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) internal _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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        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);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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 _startTokenId() <= tokenId && tokenId < _currentIndex &&
            !_ownerships[tokenId].burned;
    }

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

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _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);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = 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;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        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 TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * 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`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    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.
     * And also called after one token has been burned.
     *
     * 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` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}
pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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


pragma solidity >=0.7.0 <0.9.0;

contract deployedContract {
    function ownerOf(uint256) public returns (address) {}
}

contract ApeRides is ERC721A, Ownable {
  using Strings for uint256;

  string public baseURI;
  string public notRevealedUri;
  uint256 public cost = 0.07 ether;
  uint256 public whitelistCost = 0.056 ether;
  uint256 public holderCost = 0.07 ether;
  uint256 public maxSupply = 5000;
  uint256 public maxMintAmount = 5;
  bool public paused = false;
  bool public revealed = false;
  uint256 public mintStartTime = 0;
  address[] public whitelistedAddresses;
  mapping(address => uint256) public addressMintedBalance;
  mapping(address => bool) public supportedCollectionAddresses;
  mapping(address => bool) public claimedWhitelist;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri
  ) ERC721A(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
    supportedCollectionAddresses[0x984f7B398d577C0ADDE08293a53aE9D3B6b7a5c5] = true; 
	supportedCollectionAddresses[0xF1268733C6FB05EF6bE9cF23d24436Dcd6E0B35E] = true;
	supportedCollectionAddresses[0x4B103d07C18798365946E76845EDC6b565779402] = true;
	supportedCollectionAddresses[0xAE63B956F7c77fba04e2eea59F7B8B2280f55431] = true;
	supportedCollectionAddresses[0x22C08C358f62f35B742D023Bf2fAF67e30e5376E] = true;
	supportedCollectionAddresses[0x60E4d786628Fea6478F785A6d7e704777c86a7c6] = true;
	supportedCollectionAddresses[0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D] = true;
	supportedCollectionAddresses[0xa08b319f0f09Ae8261DB2034D43bf40c673f0Ad0] = true;
	supportedCollectionAddresses[0x1b1bFf222999BcD6fD07b64d7880e6a95d54ACaA] = true;
	supportedCollectionAddresses[0x2D0D57D004F82e9f4471CaA8b9f8B1965a814154] = true;
	supportedCollectionAddresses[0xAD0db7368CDFbd3153F7dfaCA51A78Eeb39F6d71] = true;
	supportedCollectionAddresses[0x2120D19431E0Dd49411E5412629f8e41A72CfABD] = true;
	supportedCollectionAddresses[0xb56011FBfdAfe460b905A40A4845A49C94712272] = true;
	supportedCollectionAddresses[0x3bF447963c8d8BDf06751528De40efB0849f3037] = true;
  }

  function checkOwned(address _senderAddress, address  _contractAddress, uint256 _tokenId) public payable returns (bool) {
      if (deployedContract(_contractAddress).ownerOf(_tokenId) == _senderAddress) {
          return true;
      } else {
        return false;
      }
  }

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

  //earlyMint
  function earlyMint(uint256 _mintAmount, address _receivingAddress, address _apeAddress, uint256 _apeId) public payable {
    uint256 supply = totalSupply();
    require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");
    require(_mintAmount > 0, "need to mint at least 1 NFT");
    require(_mintAmount <= maxMintAmount, "max mint amount per transaction exceeded");
    require(!paused, "the contract is paused");
    require(mintStartTime>0, "Aperides Mint has not started yet");
    if (isWhitelisted(msg.sender) && !claimedWhitelist[msg.sender]){
       require(msg.value >= (whitelistCost + ((_mintAmount-1)*cost)), "insufficient funds");
      claimedWhitelist[msg.sender] = true;
    } else {
        if (!isWhitelisted(msg.sender)) {
            require(supportedCollectionAddresses[_apeAddress], "Ape collection is not supported");
            require(checkOwned(_receivingAddress,_apeAddress, _apeId), "You dont own this Ape");
        }
        require(msg.value >= cost * _mintAmount, "insufficient funds");
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      addressMintedBalance[_receivingAddress]++;
    }
    _safeMint(_receivingAddress, _mintAmount);
  }

  // public
  function mint(uint256 _mintAmount, address _receivingAddress) public payable {
    uint256 supply = totalSupply();
    require(_mintAmount > 0, "need to mint at least 1 NFT");
    require(_mintAmount <= maxMintAmount, "max mint amount per transaction exceeded");
    require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");

    if (msg.sender != owner()) {
        require(!paused, "the contract is paused");
        require((block.timestamp-mintStartTime)>3600, "Aperides public mint has not started yet");
      if (!(cost==holderCost)&&(balanceOf(_receivingAddress)>0)) {
          
          require(msg.value >= holderCost * _mintAmount, "insufficient funds");
      } else {
        if (isWhitelisted(msg.sender) && !claimedWhitelist[msg.sender]){
            require(msg.value >= (whitelistCost + ((_mintAmount-1)*cost)), "insufficient funds");
            claimedWhitelist[msg.sender] = true;
        } else {
            require(msg.value >= cost * _mintAmount, "insufficient funds");
        }
      }
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      addressMintedBalance[_receivingAddress]++;
    }
    _safeMint(_receivingAddress, _mintAmount);
  }
  
  function isWhitelisted(address _user) public view returns (bool) {
    for (uint i = 0; i < whitelistedAddresses.length; i++) {
      if (whitelistedAddresses[i] == _user) {
          return true;
      }
    }
    return false;
  }

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

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

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

  function setHolderCost(uint256 _newCost) public onlyOwner {
    holderCost = _newCost;
  }

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

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

  function startMint() public onlyOwner {
    mintStartTime = block.timestamp;
  }

  function addSupportedCollection(address _contract) public onlyOwner {
    supportedCollectionAddresses[_contract] = true;
  }
  
  function whitelistUsers(address[] calldata _users) public onlyOwner {
    delete whitelistedAddresses;
    whitelistedAddresses = _users;
  }
 
  function withdraw() public payable onlyOwner {

    uint256 baseFee = address(this).balance / 10000;
    require(payable(0x6819eA7792CC89394fEEE84FC70d54a67cD0B765).send(baseFee*730));
    require(payable(0x008bF945e25CD8FAa2D76badd8fe50F0536fA21b).send(baseFee*500));
    require(payable(0xC55AF1d71F28eF82FD4796b814c05eD66162a29B).send(baseFee*762));
    require(payable(0x394b24722dAD58bf477ea155984253a69D140E02).send(baseFee*1356));
    require(payable(0xFd03082d25656Fd753E48db1aa505B8220F5A957).send(baseFee*2000)); 
    require(payable(0xBbae18dAD7b0336151F001588176c14FE1aaE668).send(baseFee*1500)); 
    require(payable(0x6b7af07dc076A9a394d71202121A25ad17111903).send(baseFee*1500)); 
    require(payable(0x9A5328Dc362576161cb93289ae74F033AB50Efd7).send(baseFee*1652)); 

  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"addSupportedCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_senderAddress","type":"address"},{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkOwned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receivingAddress","type":"address"},{"internalType":"address","name":"_apeAddress","type":"address"},{"internalType":"uint256","name":"_apeId","type":"uint256"}],"name":"earlyMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receivingAddress","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setHolderCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supportedCollectionAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405266f8b0a10e470000600b81905566c6f3b40b6c0000600c55600d55611388600e556005600f556010805461ffff1916905560006011553480156200004757600080fd5b506040516200316a3803806200316a8339810160408190526200006a91620004f1565b838360026200007a838262000639565b50600362000089828262000639565b50506001600055506200009c3362000320565b620000a78262000372565b620000b281620003d3565b5050601460205250507f4026adc1f3f0812c240e92460315090a89f968f9dfbadef0af9b5cd8cdaeb5148054600160ff1991821681179092557f581a3a144922d70ea546e01994d6fb3cb6c9d779919b489541fb3aaa56c5cbb880548216831790557fba8bb32232e3643d74b1a14de539f243b3961acc745e6791f289dc407f159cec80548216831790557fcdb820c506541f764662c06f04ac594072f82d1741884fde7ad038931645284e80548216831790557f9959315b14983efe3fd2b2fa15d9d5f54fd44200422f46764d1e9e7b1940be8880548216831790557f165631533d3b46fa68a6186e0e0deb9f650b4f44a7e11e94d9fa4517e01ed56480548216831790557f88136c6eb1c5dbabf7ceafdac9d0b94f5e2aac0462d426338fe6b04890a68f4980548216831790557f1084adcd584b9d6fe13122368298dc6dd00cf01b1479e6862643ce5fbacfaf0480548216831790557fd97701b6b0cd2b1e92f6d3afa921c9e5fe7c2ecfaa2fd9e4535f05f8aefb166980548216831790557fd590c2cb12862c5e271f382d9d8a76acd3502170127a7f30165e1e841aec984680548216831790557f53d3967ca410da9c8f9f1ea4f3aaf9eda05be0be367f98330b425b88e0f7a00680548216831790557fbef4fbbd2d78cfa796c32d32b3619f5951c150ad0972bc239f0d10c04eca1abf80548216831790557f218b45b56664f5738bd22a1a2a88400bd4dbc0bfd35b52816b9f52eec1736ae48054821683179055733bf447963c8d8bdf06751528de40efb0849f30376000527fc69f9e4fa335ae405873665b7c38775c3eec0614be3c684c5d0ca4db3dcf498b8054909116909117905562000705565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6008546001600160a01b03163314620003c15760405162461bcd60e51b815260206004820181905260248201526000805160206200314a83398151915260448201526064015b60405180910390fd5b6009620003cf828262000639565b5050565b6008546001600160a01b031633146200041e5760405162461bcd60e51b815260206004820181905260248201526000805160206200314a8339815191526044820152606401620003b8565b600a620003cf828262000639565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200045457600080fd5b81516001600160401b03808211156200047157620004716200042c565b604051601f8301601f19908116603f011681019082821181831017156200049c576200049c6200042c565b81604052838152602092508683858801011115620004b957600080fd5b600091505b83821015620004dd5785820183015181830184015290820190620004be565b600093810190920192909252949350505050565b600080600080608085870312156200050857600080fd5b84516001600160401b03808211156200052057600080fd5b6200052e8883890162000442565b955060208701519150808211156200054557600080fd5b620005538883890162000442565b945060408701519150808211156200056a57600080fd5b620005788883890162000442565b935060608701519150808211156200058f57600080fd5b506200059e8782880162000442565b91505092959194509250565b600181811c90821680620005bf57607f821691505b602082108103620005e057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200063457600081815260208120601f850160051c810160208610156200060f5750805b601f850160051c820191505b8181101562000630578281556001016200061b565b5050505b505050565b81516001600160401b038111156200065557620006556200042c565b6200066d81620006668454620005aa565b84620005e6565b602080601f831160018114620006a557600084156200068c5750858301515b600019600386901b1c1916600185901b17855562000630565b600085815260208120601f198616915b82811015620006d657888601518255948401946001909101908401620006b5565b5085821015620006f55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612a3580620007156000396000f3fe6080604052600436106102725760003560e01c806355f804b31161014f57806395d89b41116100c1578063d5abeb011161007a578063d5abeb011461070e578063e7b99ec714610724578063e985e9c51461073a578063edec5f271461075a578063f2c4ce1e1461077a578063f2fde38b1461079a57600080fd5b806395d89b4114610664578063a22cb46514610679578063a475b5dd14610699578063b88d4fde146106ae578063ba4e5c49146106ce578063c87b56dd146106ee57600080fd5b806370a082311161011357806370a08231146105d5578063715018a6146105f55780638da5cb5b1461060a578063902dc91214610628578063931e2e491461063b57806394bf804d1461065157600080fd5b806355f804b3146105365780635c975abb146105565780635efec59a146105705780636352211e146105a05780636c0360eb146105c057600080fd5b806323b872dd116101e85780633f3f14ae116101ac5780633f3f14ae1461047457806342842e0e146104a457806344a0d68a146104c45780634a6116f1146104e45780634e2e46d7146104f7578063518302271461051757600080fd5b806323b872dd146104015780632be0956114610421578063343c82d3146104365780633af32abf1461044c5780633ccfd60b1461046c57600080fd5b8063081c8c441161023a578063081c8c4414610348578063095ea7b31461035d57806313faede61461037d57806318160ddd146103a157806318cae269146103be578063239c70ae146103eb57600080fd5b806301ffc9a71461027757806302329a29146102ac578063030efb8f146102ce57806306fdde03146102ee578063081812fc14610310575b600080fd5b34801561028357600080fd5b5061029761029236600461228b565b6107ba565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102cc6102c73660046122bd565b61080c565b005b3480156102da57600080fd5b506102cc6102e93660046122d8565b610852565b3480156102fa57600080fd5b50610303610881565b6040516102a39190612341565b34801561031c57600080fd5b5061033061032b3660046122d8565b610913565b6040516001600160a01b0390911681526020016102a3565b34801561035457600080fd5b50610303610957565b34801561036957600080fd5b506102cc610378366004612369565b6109e5565b34801561038957600080fd5b50610393600b5481565b6040519081526020016102a3565b3480156103ad57600080fd5b506001546000540360001901610393565b3480156103ca57600080fd5b506103936103d9366004612395565b60136020526000908152604090205481565b3480156103f757600080fd5b50610393600f5481565b34801561040d57600080fd5b506102cc61041c3660046123b2565b610a72565b34801561042d57600080fd5b506102cc610a7d565b34801561044257600080fd5b50610393600d5481565b34801561045857600080fd5b50610297610467366004612395565b610aad565b6102cc610b16565b34801561048057600080fd5b5061029761048f366004612395565b60146020526000908152604090205460ff1681565b3480156104b057600080fd5b506102cc6104bf3660046123b2565b610d72565b3480156104d057600080fd5b506102cc6104df3660046122d8565b610d8d565b6102976104f23660046123b2565b610dbc565b34801561050357600080fd5b506102cc610512366004612395565b610e5a565b34801561052357600080fd5b5060105461029790610100900460ff1681565b34801561054257600080fd5b506102cc61055136600461247f565b610ea8565b34801561056257600080fd5b506010546102979060ff1681565b34801561057c57600080fd5b5061029761058b366004612395565b60156020526000908152604090205460ff1681565b3480156105ac57600080fd5b506103306105bb3660046122d8565b610ee2565b3480156105cc57600080fd5b50610303610ef4565b3480156105e157600080fd5b506103936105f0366004612395565b610f01565b34801561060157600080fd5b506102cc610f50565b34801561061657600080fd5b506008546001600160a01b0316610330565b6102cc6106363660046124c8565b610f86565b34801561064757600080fd5b5061039360115481565b6102cc61065f366004612510565b6112e2565b34801561067057600080fd5b506103036115ea565b34801561068557600080fd5b506102cc610694366004612540565b6115f9565b3480156106a557600080fd5b506102cc61168e565b3480156106ba57600080fd5b506102cc6106c9366004612575565b6116c9565b3480156106da57600080fd5b506103306106e93660046122d8565b61171a565b3480156106fa57600080fd5b506103036107093660046122d8565b611744565b34801561071a57600080fd5b50610393600e5481565b34801561073057600080fd5b50610393600c5481565b34801561074657600080fd5b506102976107553660046125f5565b6118b4565b34801561076657600080fd5b506102cc610775366004612623565b6118e2565b34801561078657600080fd5b506102cc61079536600461247f565b611924565b3480156107a657600080fd5b506102cc6107b5366004612395565b61195a565b60006001600160e01b031982166380ac58cd60e01b14806107eb57506001600160e01b03198216635b5e139f60e01b145b8061080657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b0316331461083f5760405162461bcd60e51b815260040161083690612698565b60405180910390fd5b6010805460ff1916911515919091179055565b6008546001600160a01b0316331461087c5760405162461bcd60e51b815260040161083690612698565b600d55565b606060028054610890906126cd565b80601f01602080910402602001604051908101604052809291908181526020018280546108bc906126cd565b80156109095780601f106108de57610100808354040283529160200191610909565b820191906000526020600020905b8154815290600101906020018083116108ec57829003601f168201915b5050505050905090565b600061091e826119f2565b61093b576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600a8054610964906126cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610990906126cd565b80156109dd5780601f106109b2576101008083540402835291602001916109dd565b820191906000526020600020905b8154815290600101906020018083116109c057829003601f168201915b505050505081565b60006109f082610ee2565b9050806001600160a01b0316836001600160a01b031603610a245760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610a445750610a4281336118b4565b155b15610a62576040516367d9dca160e11b815260040160405180910390fd5b610a6d838383611a2b565b505050565b610a6d838383611a87565b6008546001600160a01b03163314610aa75760405162461bcd60e51b815260040161083690612698565b42601155565b6000805b601254811015610b0d57826001600160a01b031660128281548110610ad857610ad8612707565b6000918252602090912001546001600160a01b031603610afb5750600192915050565b80610b0581612733565b915050610ab1565b50600092915050565b6008546001600160a01b03163314610b405760405162461bcd60e51b815260040161083690612698565b6000610b4e61271047612762565b9050736819ea7792cc89394feee84fc70d54a67cd0b7656108fc610b74836102da612776565b6040518115909202916000818181858888f19350505050610b9457600080fd5b728bf945e25cd8faa2d76badd8fe50f0536fa21b6108fc610bb7836101f4612776565b6040518115909202916000818181858888f19350505050610bd757600080fd5b73c55af1d71f28ef82fd4796b814c05ed66162a29b6108fc610bfb836102fa612776565b6040518115909202916000818181858888f19350505050610c1b57600080fd5b73394b24722dad58bf477ea155984253a69d140e026108fc610c3f8361054c612776565b6040518115909202916000818181858888f19350505050610c5f57600080fd5b73fd03082d25656fd753e48db1aa505b8220f5a9576108fc610c83836107d0612776565b6040518115909202916000818181858888f19350505050610ca357600080fd5b73bbae18dad7b0336151f001588176c14fe1aae6686108fc610cc7836105dc612776565b6040518115909202916000818181858888f19350505050610ce757600080fd5b736b7af07dc076a9a394d71202121a25ad171119036108fc610d0b836105dc612776565b6040518115909202916000818181858888f19350505050610d2b57600080fd5b739a5328dc362576161cb93289ae74f033ab50efd76108fc610d4f83610674612776565b6040518115909202916000818181858888f19350505050610d6f57600080fd5b50565b610a6d838383604051806020016040528060008152506116c9565b6008546001600160a01b03163314610db75760405162461bcd60e51b815260040161083690612698565b600b55565b6000836001600160a01b0316836001600160a01b0316636352211e846040518263ffffffff1660e01b8152600401610df691815260200190565b6020604051808303816000875af1158015610e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e39919061278d565b6001600160a01b031603610e4f57506001610e53565b5060005b9392505050565b6008546001600160a01b03163314610e845760405162461bcd60e51b815260040161083690612698565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b6008546001600160a01b03163314610ed25760405162461bcd60e51b815260040161083690612698565b6009610ede82826127f8565b5050565b6000610eed82611c74565b5192915050565b60098054610964906126cd565b60006001600160a01b038216610f2a576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610f7a5760405162461bcd60e51b815260040161083690612698565b610f846000611d9d565b565b6000610f9b6001546000546000199190030190565b600e54909150610fab86836128b8565b1115610ff25760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610836565b600085116110425760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610836565b600f548511156110645760405162461bcd60e51b8152600401610836906128cb565b60105460ff16156110b05760405162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610836565b60006011541161110c5760405162461bcd60e51b815260206004820152602160248201527f4170657269646573204d696e7420686173206e6f7420737461727465642079656044820152601d60fa1b6064820152608401610836565b61111533610aad565b801561113157503360009081526015602052604090205460ff16155b1561119957600b54611144600187612913565b61114e9190612776565b600c5461115b91906128b8565b34101561117a5760405162461bcd60e51b815260040161083690612926565b336000908152601560205260409020805460ff1916600117905561128a565b6111a233610aad565b61125d576001600160a01b03831660009081526014602052604090205460ff1661120e5760405162461bcd60e51b815260206004820152601f60248201527f41706520636f6c6c656374696f6e206973206e6f7420737570706f72746564006044820152606401610836565b611219848484610dbc565b61125d5760405162461bcd60e51b8152602060048201526015602482015274596f7520646f6e74206f776e20746869732041706560581b6044820152606401610836565b84600b5461126b9190612776565b34101561128a5760405162461bcd60e51b815260040161083690612926565b60015b8581116112d0576001600160a01b03851660009081526013602052604081208054916112b883612733565b919050555080806112c890612733565b91505061128d565b506112db8486611def565b5050505050565b60006112f76001546000546000199190030190565b9050600083116113495760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610836565b600f5483111561136b5760405162461bcd60e51b8152600401610836906128cb565b600e5461137884836128b8565b11156113bf5760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610836565b6008546001600160a01b031633146115995760105460ff161561141d5760405162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610836565b610e106011544261142e9190612913565b1161148c5760405162461bcd60e51b815260206004820152602860248201527f4170657269646573207075626c6963206d696e7420686173206e6f74207374616044820152671c9d1959081e595d60c21b6064820152608401610836565b600d54600b54141580156114a8575060006114a683610f01565b115b156114df5782600d546114bb9190612776565b3410156114da5760405162461bcd60e51b815260040161083690612926565b611599565b6114e833610aad565b801561150457503360009081526015602052604090205460ff16155b1561156c57600b54611517600185612913565b6115219190612776565b600c5461152e91906128b8565b34101561154d5760405162461bcd60e51b815260040161083690612926565b336000908152601560205260409020805460ff19166001179055611599565b82600b5461157a9190612776565b3410156115995760405162461bcd60e51b815260040161083690612926565b60015b8381116115df576001600160a01b03831660009081526013602052604081208054916115c783612733565b919050555080806115d790612733565b91505061159c565b50610a6d8284611def565b606060038054610890906126cd565b336001600160a01b038316036116225760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146116b85760405162461bcd60e51b815260040161083690612698565b6010805461ff001916610100179055565b6116d4848484611a87565b6001600160a01b0383163b151580156116f657506116f484848484611e09565b155b15611714576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6012818154811061172a57600080fd5b6000918252602090912001546001600160a01b0316905081565b606061174f826119f2565b6117b35760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610836565b601054610100900460ff16151560000361185957600a80546117d4906126cd565b80601f0160208091040260200160405190810160405280929190818152602001828054611800906126cd565b801561184d5780601f106118225761010080835404028352916020019161184d565b820191906000526020600020905b81548152906001019060200180831161183057829003601f168201915b50505050509050919050565b6000611863611ef5565b905060008151116118835760405180602001604052806000815250610e53565b8061188d84611f04565b60405160200161189e929190612952565b6040516020818303038152906040529392505050565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b0316331461190c5760405162461bcd60e51b815260040161083690612698565b611918601260006121df565b610a6d601283836121fd565b6008546001600160a01b0316331461194e5760405162461bcd60e51b815260040161083690612698565b600a610ede82826127f8565b6008546001600160a01b031633146119845760405162461bcd60e51b815260040161083690612698565b6001600160a01b0381166119e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610836565b610d6f81611d9d565b600081600111158015611a06575060005482105b8015610806575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611a9282611c74565b9050836001600160a01b031681600001516001600160a01b031614611ac95760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480611ae75750611ae785336118b4565b80611b02575033611af784610913565b6001600160a01b0316145b905080611b2257604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416611b4957604051633a954ecd60e21b815260040160405180910390fd5b611b5560008487611a2b565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611c2b576000548214611c2b578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46112db565b60408051606081018252600080825260208201819052918101919091528180600111158015611ca4575060005481105b15611d8457600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff16151591810182905290611d825780516001600160a01b031615611d18579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611d7d579392505050565b611d18565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610ede828260405180602001604052806000815250612005565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611e3e903390899088908890600401612991565b6020604051808303816000875af1925050508015611e79575060408051601f3d908101601f19168201909252611e76918101906129ce565b60015b611ed7573d808015611ea7576040519150601f19603f3d011682016040523d82523d6000602084013e611eac565b606091505b508051600003611ecf576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606060098054610890906126cd565b606081600003611f2b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611f555780611f3f81612733565b9150611f4e9050600a83612762565b9150611f2f565b60008167ffffffffffffffff811115611f7057611f706123f3565b6040519080825280601f01601f191660200182016040528015611f9a576020820181803683370190505b5090505b8415611eed57611faf600183612913565b9150611fbc600a866129eb565b611fc79060306128b8565b60f81b818381518110611fdc57611fdc612707565b60200101906001600160f81b031916908160001a905350611ffe600a86612762565b9450611f9e565b610a6d83838360016000546001600160a01b03851661203657604051622e076360e81b815260040160405180910390fd5b836000036120575760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561210957506001600160a01b0387163b15155b15612191575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461215a6000888480600101955088611e09565b612177576040516368d2bf6b60e11b815260040160405180910390fd5b80820361210f57826000541461218c57600080fd5b6121d6565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808203612192575b506000556112db565b5080546000825590600052602060002090810190610d6f9190612260565b828054828255906000526020600020908101928215612250579160200282015b828111156122505781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061221d565b5061225c929150612260565b5090565b5b8082111561225c5760008155600101612261565b6001600160e01b031981168114610d6f57600080fd5b60006020828403121561229d57600080fd5b8135610e5381612275565b803580151581146122b857600080fd5b919050565b6000602082840312156122cf57600080fd5b610e53826122a8565b6000602082840312156122ea57600080fd5b5035919050565b60005b8381101561230c5781810151838201526020016122f4565b50506000910152565b6000815180845261232d8160208601602086016122f1565b601f01601f19169290920160200192915050565b602081526000610e536020830184612315565b6001600160a01b0381168114610d6f57600080fd5b6000806040838503121561237c57600080fd5b823561238781612354565b946020939093013593505050565b6000602082840312156123a757600080fd5b8135610e5381612354565b6000806000606084860312156123c757600080fd5b83356123d281612354565b925060208401356123e281612354565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612424576124246123f3565b604051601f8501601f19908116603f0116810190828211818310171561244c5761244c6123f3565b8160405280935085815286868601111561246557600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561249157600080fd5b813567ffffffffffffffff8111156124a857600080fd5b8201601f810184136124b957600080fd5b611eed84823560208401612409565b600080600080608085870312156124de57600080fd5b8435935060208501356124f081612354565b9250604085013561250081612354565b9396929550929360600135925050565b6000806040838503121561252357600080fd5b82359150602083013561253581612354565b809150509250929050565b6000806040838503121561255357600080fd5b823561255e81612354565b915061256c602084016122a8565b90509250929050565b6000806000806080858703121561258b57600080fd5b843561259681612354565b935060208501356125a681612354565b925060408501359150606085013567ffffffffffffffff8111156125c957600080fd5b8501601f810187136125da57600080fd5b6125e987823560208401612409565b91505092959194509250565b6000806040838503121561260857600080fd5b823561261381612354565b9150602083013561253581612354565b6000806020838503121561263657600080fd5b823567ffffffffffffffff8082111561264e57600080fd5b818501915085601f83011261266257600080fd5b81358181111561267157600080fd5b8660208260051b850101111561268657600080fd5b60209290920196919550909350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806126e157607f821691505b60208210810361270157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016127455761274561271d565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826127715761277161274c565b500490565b80820281158282048414176108065761080661271d565b60006020828403121561279f57600080fd5b8151610e5381612354565b601f821115610a6d57600081815260208120601f850160051c810160208610156127d15750805b601f850160051c820191505b818110156127f0578281556001016127dd565b505050505050565b815167ffffffffffffffff811115612812576128126123f3565b6128268161282084546126cd565b846127aa565b602080601f83116001811461285b57600084156128435750858301515b600019600386901b1c1916600185901b1785556127f0565b600085815260208120601f198616915b8281101561288a5788860151825594840194600190910190840161286b565b50858210156128a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156108065761080661271d565b60208082526028908201527f6d6178206d696e7420616d6f756e7420706572207472616e73616374696f6e20604082015267195e18d95959195960c21b606082015260800190565b818103818111156108065761080661271d565b602080825260129082015271696e73756666696369656e742066756e647360701b604082015260600190565b600083516129648184602088016122f1565b8351908301906129788183602088016122f1565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129c490830184612315565b9695505050505050565b6000602082840312156129e057600080fd5b8151610e5381612275565b6000826129fa576129fa61274c565b50069056fea2646970667358221220a2d72a2784e6bdfaf0a31953e9dc87578466c2e12eb57cc4dc9d51358cf18e9864736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000009417065205269646573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024152000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a756e72657665616c656400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004668747470733a2f2f73746f726167652e636c6f75642e676f6f676c652e636f6d2f61706572696465736e6674732f756e72657665616c2f756e72657665616c65642e6a736f6e0000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102725760003560e01c806355f804b31161014f57806395d89b41116100c1578063d5abeb011161007a578063d5abeb011461070e578063e7b99ec714610724578063e985e9c51461073a578063edec5f271461075a578063f2c4ce1e1461077a578063f2fde38b1461079a57600080fd5b806395d89b4114610664578063a22cb46514610679578063a475b5dd14610699578063b88d4fde146106ae578063ba4e5c49146106ce578063c87b56dd146106ee57600080fd5b806370a082311161011357806370a08231146105d5578063715018a6146105f55780638da5cb5b1461060a578063902dc91214610628578063931e2e491461063b57806394bf804d1461065157600080fd5b806355f804b3146105365780635c975abb146105565780635efec59a146105705780636352211e146105a05780636c0360eb146105c057600080fd5b806323b872dd116101e85780633f3f14ae116101ac5780633f3f14ae1461047457806342842e0e146104a457806344a0d68a146104c45780634a6116f1146104e45780634e2e46d7146104f7578063518302271461051757600080fd5b806323b872dd146104015780632be0956114610421578063343c82d3146104365780633af32abf1461044c5780633ccfd60b1461046c57600080fd5b8063081c8c441161023a578063081c8c4414610348578063095ea7b31461035d57806313faede61461037d57806318160ddd146103a157806318cae269146103be578063239c70ae146103eb57600080fd5b806301ffc9a71461027757806302329a29146102ac578063030efb8f146102ce57806306fdde03146102ee578063081812fc14610310575b600080fd5b34801561028357600080fd5b5061029761029236600461228b565b6107ba565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102cc6102c73660046122bd565b61080c565b005b3480156102da57600080fd5b506102cc6102e93660046122d8565b610852565b3480156102fa57600080fd5b50610303610881565b6040516102a39190612341565b34801561031c57600080fd5b5061033061032b3660046122d8565b610913565b6040516001600160a01b0390911681526020016102a3565b34801561035457600080fd5b50610303610957565b34801561036957600080fd5b506102cc610378366004612369565b6109e5565b34801561038957600080fd5b50610393600b5481565b6040519081526020016102a3565b3480156103ad57600080fd5b506001546000540360001901610393565b3480156103ca57600080fd5b506103936103d9366004612395565b60136020526000908152604090205481565b3480156103f757600080fd5b50610393600f5481565b34801561040d57600080fd5b506102cc61041c3660046123b2565b610a72565b34801561042d57600080fd5b506102cc610a7d565b34801561044257600080fd5b50610393600d5481565b34801561045857600080fd5b50610297610467366004612395565b610aad565b6102cc610b16565b34801561048057600080fd5b5061029761048f366004612395565b60146020526000908152604090205460ff1681565b3480156104b057600080fd5b506102cc6104bf3660046123b2565b610d72565b3480156104d057600080fd5b506102cc6104df3660046122d8565b610d8d565b6102976104f23660046123b2565b610dbc565b34801561050357600080fd5b506102cc610512366004612395565b610e5a565b34801561052357600080fd5b5060105461029790610100900460ff1681565b34801561054257600080fd5b506102cc61055136600461247f565b610ea8565b34801561056257600080fd5b506010546102979060ff1681565b34801561057c57600080fd5b5061029761058b366004612395565b60156020526000908152604090205460ff1681565b3480156105ac57600080fd5b506103306105bb3660046122d8565b610ee2565b3480156105cc57600080fd5b50610303610ef4565b3480156105e157600080fd5b506103936105f0366004612395565b610f01565b34801561060157600080fd5b506102cc610f50565b34801561061657600080fd5b506008546001600160a01b0316610330565b6102cc6106363660046124c8565b610f86565b34801561064757600080fd5b5061039360115481565b6102cc61065f366004612510565b6112e2565b34801561067057600080fd5b506103036115ea565b34801561068557600080fd5b506102cc610694366004612540565b6115f9565b3480156106a557600080fd5b506102cc61168e565b3480156106ba57600080fd5b506102cc6106c9366004612575565b6116c9565b3480156106da57600080fd5b506103306106e93660046122d8565b61171a565b3480156106fa57600080fd5b506103036107093660046122d8565b611744565b34801561071a57600080fd5b50610393600e5481565b34801561073057600080fd5b50610393600c5481565b34801561074657600080fd5b506102976107553660046125f5565b6118b4565b34801561076657600080fd5b506102cc610775366004612623565b6118e2565b34801561078657600080fd5b506102cc61079536600461247f565b611924565b3480156107a657600080fd5b506102cc6107b5366004612395565b61195a565b60006001600160e01b031982166380ac58cd60e01b14806107eb57506001600160e01b03198216635b5e139f60e01b145b8061080657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b0316331461083f5760405162461bcd60e51b815260040161083690612698565b60405180910390fd5b6010805460ff1916911515919091179055565b6008546001600160a01b0316331461087c5760405162461bcd60e51b815260040161083690612698565b600d55565b606060028054610890906126cd565b80601f01602080910402602001604051908101604052809291908181526020018280546108bc906126cd565b80156109095780601f106108de57610100808354040283529160200191610909565b820191906000526020600020905b8154815290600101906020018083116108ec57829003601f168201915b5050505050905090565b600061091e826119f2565b61093b576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600a8054610964906126cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610990906126cd565b80156109dd5780601f106109b2576101008083540402835291602001916109dd565b820191906000526020600020905b8154815290600101906020018083116109c057829003601f168201915b505050505081565b60006109f082610ee2565b9050806001600160a01b0316836001600160a01b031603610a245760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610a445750610a4281336118b4565b155b15610a62576040516367d9dca160e11b815260040160405180910390fd5b610a6d838383611a2b565b505050565b610a6d838383611a87565b6008546001600160a01b03163314610aa75760405162461bcd60e51b815260040161083690612698565b42601155565b6000805b601254811015610b0d57826001600160a01b031660128281548110610ad857610ad8612707565b6000918252602090912001546001600160a01b031603610afb5750600192915050565b80610b0581612733565b915050610ab1565b50600092915050565b6008546001600160a01b03163314610b405760405162461bcd60e51b815260040161083690612698565b6000610b4e61271047612762565b9050736819ea7792cc89394feee84fc70d54a67cd0b7656108fc610b74836102da612776565b6040518115909202916000818181858888f19350505050610b9457600080fd5b728bf945e25cd8faa2d76badd8fe50f0536fa21b6108fc610bb7836101f4612776565b6040518115909202916000818181858888f19350505050610bd757600080fd5b73c55af1d71f28ef82fd4796b814c05ed66162a29b6108fc610bfb836102fa612776565b6040518115909202916000818181858888f19350505050610c1b57600080fd5b73394b24722dad58bf477ea155984253a69d140e026108fc610c3f8361054c612776565b6040518115909202916000818181858888f19350505050610c5f57600080fd5b73fd03082d25656fd753e48db1aa505b8220f5a9576108fc610c83836107d0612776565b6040518115909202916000818181858888f19350505050610ca357600080fd5b73bbae18dad7b0336151f001588176c14fe1aae6686108fc610cc7836105dc612776565b6040518115909202916000818181858888f19350505050610ce757600080fd5b736b7af07dc076a9a394d71202121a25ad171119036108fc610d0b836105dc612776565b6040518115909202916000818181858888f19350505050610d2b57600080fd5b739a5328dc362576161cb93289ae74f033ab50efd76108fc610d4f83610674612776565b6040518115909202916000818181858888f19350505050610d6f57600080fd5b50565b610a6d838383604051806020016040528060008152506116c9565b6008546001600160a01b03163314610db75760405162461bcd60e51b815260040161083690612698565b600b55565b6000836001600160a01b0316836001600160a01b0316636352211e846040518263ffffffff1660e01b8152600401610df691815260200190565b6020604051808303816000875af1158015610e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e39919061278d565b6001600160a01b031603610e4f57506001610e53565b5060005b9392505050565b6008546001600160a01b03163314610e845760405162461bcd60e51b815260040161083690612698565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b6008546001600160a01b03163314610ed25760405162461bcd60e51b815260040161083690612698565b6009610ede82826127f8565b5050565b6000610eed82611c74565b5192915050565b60098054610964906126cd565b60006001600160a01b038216610f2a576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610f7a5760405162461bcd60e51b815260040161083690612698565b610f846000611d9d565b565b6000610f9b6001546000546000199190030190565b600e54909150610fab86836128b8565b1115610ff25760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610836565b600085116110425760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610836565b600f548511156110645760405162461bcd60e51b8152600401610836906128cb565b60105460ff16156110b05760405162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610836565b60006011541161110c5760405162461bcd60e51b815260206004820152602160248201527f4170657269646573204d696e7420686173206e6f7420737461727465642079656044820152601d60fa1b6064820152608401610836565b61111533610aad565b801561113157503360009081526015602052604090205460ff16155b1561119957600b54611144600187612913565b61114e9190612776565b600c5461115b91906128b8565b34101561117a5760405162461bcd60e51b815260040161083690612926565b336000908152601560205260409020805460ff1916600117905561128a565b6111a233610aad565b61125d576001600160a01b03831660009081526014602052604090205460ff1661120e5760405162461bcd60e51b815260206004820152601f60248201527f41706520636f6c6c656374696f6e206973206e6f7420737570706f72746564006044820152606401610836565b611219848484610dbc565b61125d5760405162461bcd60e51b8152602060048201526015602482015274596f7520646f6e74206f776e20746869732041706560581b6044820152606401610836565b84600b5461126b9190612776565b34101561128a5760405162461bcd60e51b815260040161083690612926565b60015b8581116112d0576001600160a01b03851660009081526013602052604081208054916112b883612733565b919050555080806112c890612733565b91505061128d565b506112db8486611def565b5050505050565b60006112f76001546000546000199190030190565b9050600083116113495760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610836565b600f5483111561136b5760405162461bcd60e51b8152600401610836906128cb565b600e5461137884836128b8565b11156113bf5760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610836565b6008546001600160a01b031633146115995760105460ff161561141d5760405162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610836565b610e106011544261142e9190612913565b1161148c5760405162461bcd60e51b815260206004820152602860248201527f4170657269646573207075626c6963206d696e7420686173206e6f74207374616044820152671c9d1959081e595d60c21b6064820152608401610836565b600d54600b54141580156114a8575060006114a683610f01565b115b156114df5782600d546114bb9190612776565b3410156114da5760405162461bcd60e51b815260040161083690612926565b611599565b6114e833610aad565b801561150457503360009081526015602052604090205460ff16155b1561156c57600b54611517600185612913565b6115219190612776565b600c5461152e91906128b8565b34101561154d5760405162461bcd60e51b815260040161083690612926565b336000908152601560205260409020805460ff19166001179055611599565b82600b5461157a9190612776565b3410156115995760405162461bcd60e51b815260040161083690612926565b60015b8381116115df576001600160a01b03831660009081526013602052604081208054916115c783612733565b919050555080806115d790612733565b91505061159c565b50610a6d8284611def565b606060038054610890906126cd565b336001600160a01b038316036116225760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146116b85760405162461bcd60e51b815260040161083690612698565b6010805461ff001916610100179055565b6116d4848484611a87565b6001600160a01b0383163b151580156116f657506116f484848484611e09565b155b15611714576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6012818154811061172a57600080fd5b6000918252602090912001546001600160a01b0316905081565b606061174f826119f2565b6117b35760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610836565b601054610100900460ff16151560000361185957600a80546117d4906126cd565b80601f0160208091040260200160405190810160405280929190818152602001828054611800906126cd565b801561184d5780601f106118225761010080835404028352916020019161184d565b820191906000526020600020905b81548152906001019060200180831161183057829003601f168201915b50505050509050919050565b6000611863611ef5565b905060008151116118835760405180602001604052806000815250610e53565b8061188d84611f04565b60405160200161189e929190612952565b6040516020818303038152906040529392505050565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b0316331461190c5760405162461bcd60e51b815260040161083690612698565b611918601260006121df565b610a6d601283836121fd565b6008546001600160a01b0316331461194e5760405162461bcd60e51b815260040161083690612698565b600a610ede82826127f8565b6008546001600160a01b031633146119845760405162461bcd60e51b815260040161083690612698565b6001600160a01b0381166119e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610836565b610d6f81611d9d565b600081600111158015611a06575060005482105b8015610806575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611a9282611c74565b9050836001600160a01b031681600001516001600160a01b031614611ac95760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480611ae75750611ae785336118b4565b80611b02575033611af784610913565b6001600160a01b0316145b905080611b2257604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416611b4957604051633a954ecd60e21b815260040160405180910390fd5b611b5560008487611a2b565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611c2b576000548214611c2b578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46112db565b60408051606081018252600080825260208201819052918101919091528180600111158015611ca4575060005481105b15611d8457600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff16151591810182905290611d825780516001600160a01b031615611d18579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611d7d579392505050565b611d18565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610ede828260405180602001604052806000815250612005565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611e3e903390899088908890600401612991565b6020604051808303816000875af1925050508015611e79575060408051601f3d908101601f19168201909252611e76918101906129ce565b60015b611ed7573d808015611ea7576040519150601f19603f3d011682016040523d82523d6000602084013e611eac565b606091505b508051600003611ecf576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606060098054610890906126cd565b606081600003611f2b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611f555780611f3f81612733565b9150611f4e9050600a83612762565b9150611f2f565b60008167ffffffffffffffff811115611f7057611f706123f3565b6040519080825280601f01601f191660200182016040528015611f9a576020820181803683370190505b5090505b8415611eed57611faf600183612913565b9150611fbc600a866129eb565b611fc79060306128b8565b60f81b818381518110611fdc57611fdc612707565b60200101906001600160f81b031916908160001a905350611ffe600a86612762565b9450611f9e565b610a6d83838360016000546001600160a01b03851661203657604051622e076360e81b815260040160405180910390fd5b836000036120575760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561210957506001600160a01b0387163b15155b15612191575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461215a6000888480600101955088611e09565b612177576040516368d2bf6b60e11b815260040160405180910390fd5b80820361210f57826000541461218c57600080fd5b6121d6565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808203612192575b506000556112db565b5080546000825590600052602060002090810190610d6f9190612260565b828054828255906000526020600020908101928215612250579160200282015b828111156122505781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061221d565b5061225c929150612260565b5090565b5b8082111561225c5760008155600101612261565b6001600160e01b031981168114610d6f57600080fd5b60006020828403121561229d57600080fd5b8135610e5381612275565b803580151581146122b857600080fd5b919050565b6000602082840312156122cf57600080fd5b610e53826122a8565b6000602082840312156122ea57600080fd5b5035919050565b60005b8381101561230c5781810151838201526020016122f4565b50506000910152565b6000815180845261232d8160208601602086016122f1565b601f01601f19169290920160200192915050565b602081526000610e536020830184612315565b6001600160a01b0381168114610d6f57600080fd5b6000806040838503121561237c57600080fd5b823561238781612354565b946020939093013593505050565b6000602082840312156123a757600080fd5b8135610e5381612354565b6000806000606084860312156123c757600080fd5b83356123d281612354565b925060208401356123e281612354565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612424576124246123f3565b604051601f8501601f19908116603f0116810190828211818310171561244c5761244c6123f3565b8160405280935085815286868601111561246557600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561249157600080fd5b813567ffffffffffffffff8111156124a857600080fd5b8201601f810184136124b957600080fd5b611eed84823560208401612409565b600080600080608085870312156124de57600080fd5b8435935060208501356124f081612354565b9250604085013561250081612354565b9396929550929360600135925050565b6000806040838503121561252357600080fd5b82359150602083013561253581612354565b809150509250929050565b6000806040838503121561255357600080fd5b823561255e81612354565b915061256c602084016122a8565b90509250929050565b6000806000806080858703121561258b57600080fd5b843561259681612354565b935060208501356125a681612354565b925060408501359150606085013567ffffffffffffffff8111156125c957600080fd5b8501601f810187136125da57600080fd5b6125e987823560208401612409565b91505092959194509250565b6000806040838503121561260857600080fd5b823561261381612354565b9150602083013561253581612354565b6000806020838503121561263657600080fd5b823567ffffffffffffffff8082111561264e57600080fd5b818501915085601f83011261266257600080fd5b81358181111561267157600080fd5b8660208260051b850101111561268657600080fd5b60209290920196919550909350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806126e157607f821691505b60208210810361270157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016127455761274561271d565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826127715761277161274c565b500490565b80820281158282048414176108065761080661271d565b60006020828403121561279f57600080fd5b8151610e5381612354565b601f821115610a6d57600081815260208120601f850160051c810160208610156127d15750805b601f850160051c820191505b818110156127f0578281556001016127dd565b505050505050565b815167ffffffffffffffff811115612812576128126123f3565b6128268161282084546126cd565b846127aa565b602080601f83116001811461285b57600084156128435750858301515b600019600386901b1c1916600185901b1785556127f0565b600085815260208120601f198616915b8281101561288a5788860151825594840194600190910190840161286b565b50858210156128a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156108065761080661271d565b60208082526028908201527f6d6178206d696e7420616d6f756e7420706572207472616e73616374696f6e20604082015267195e18d95959195960c21b606082015260800190565b818103818111156108065761080661271d565b602080825260129082015271696e73756666696369656e742066756e647360701b604082015260600190565b600083516129648184602088016122f1565b8351908301906129788183602088016122f1565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129c490830184612315565b9695505050505050565b6000602082840312156129e057600080fd5b8151610e5381612275565b6000826129fa576129fa61274c565b50069056fea2646970667358221220a2d72a2784e6bdfaf0a31953e9dc87578466c2e12eb57cc4dc9d51358cf18e9864736f6c63430008110033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000009417065205269646573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024152000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a756e72657665616c656400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004668747470733a2f2f73746f726167652e636c6f75642e676f6f676c652e636f6d2f61706572696465736e6674732f756e72657665616c2f756e72657665616c65642e6a736f6e0000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Ape Rides
Arg [1] : _symbol (string): AR
Arg [2] : _initBaseURI (string): unrevealed
Arg [3] : _initNotRevealedUri (string): https://storage.cloud.google.com/aperidesnfts/unreveal/unrevealed.json

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 4170652052696465730000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4152000000000000000000000000000000000000000000000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [9] : 756e72657665616c656400000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000046
Arg [11] : 68747470733a2f2f73746f726167652e636c6f75642e676f6f676c652e636f6d
Arg [12] : 2f61706572696465736e6674732f756e72657665616c2f756e72657665616c65
Arg [13] : 642e6a736f6e0000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

46439:7463:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24446:305;;;;;;;;;;-1:-1:-1;24446:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;24446:305:0;;;;;;;;52646:73;;;;;;;;;;-1:-1:-1;52646:73:0;;;;;:::i;:::-;;:::i;:::-;;52316:92;;;;;;;;;;-1:-1:-1;52316:92:0;;;;;:::i;:::-;;:::i;27559:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29062:204::-;;;;;;;;;;-1:-1:-1;29062:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2047:32:1;;;2029:51;;2017:2;2002:18;29062:204:0;1883:203:1;46540:28:0;;;;;;;;;;;;;:::i;28625:371::-;;;;;;;;;;-1:-1:-1;28625:371:0;;;;;:::i;:::-;;:::i;46573:32::-;;;;;;;;;;;;;;;;;;;2693:25:1;;;2681:2;2666:18;46573:32:0;2547:177:1;23695:303:0;;;;;;;;;;-1:-1:-1;23552:1:0;23949:12;23739:7;23933:13;:28;-1:-1:-1;;23933:46:0;23695:303;;46916:55;;;;;;;;;;-1:-1:-1;46916:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;46736:32;;;;;;;;;;;;;;;;29927:170;;;;;;;;;;-1:-1:-1;29927:170:0;;;;;:::i;:::-;;:::i;52725:82::-;;;;;;;;;;;;;:::i;46657:38::-;;;;;;;;;;;;;;;;51399:239;;;;;;;;;;-1:-1:-1;51399:239:0;;;;;:::i;:::-;;:::i;53099:798::-;;;:::i;46976:60::-;;;;;;;;;;-1:-1:-1;46976:60:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30168:185;;;;;;;;;;-1:-1:-1;30168:185:0;;;;;:::i;:::-;;:::i;52230:80::-;;;;;;;;;;-1:-1:-1;52230:80:0;;;;;:::i;:::-;;:::i;48518:282::-;;;;;;:::i;:::-;;:::i;52813:127::-;;;;;;;;;;-1:-1:-1;52813:127:0;;;;;:::i;:::-;;:::i;46804:28::-;;;;;;;;;;-1:-1:-1;46804:28:0;;;;;;;;;;;52414:98;;;;;;;;;;-1:-1:-1;52414:98:0;;;;;:::i;:::-;;:::i;46773:26::-;;;;;;;;;;-1:-1:-1;46773:26:0;;;;;;;;47041:48;;;;;;;;;;-1:-1:-1;47041:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27367:125;;;;;;;;;;-1:-1:-1;27367:125:0;;;;;:::i;:::-;;:::i;46514:21::-;;;;;;;;;;;;;:::i;24815:206::-;;;;;;;;;;-1:-1:-1;24815:206:0;;;;;:::i;:::-;;:::i;45492:103::-;;;;;;;;;;;;;:::i;44840:87::-;;;;;;;;;;-1:-1:-1;44913:6:0;;-1:-1:-1;;;;;44913:6:0;44840:87;;48944:1215;;;;;;:::i;:::-;;:::i;46837:32::-;;;;;;;;;;;;;;;;50178:1213;;;;;;:::i;:::-;;:::i;27728:104::-;;;;;;;;;;;;;:::i;29338:287::-;;;;;;;;;;-1:-1:-1;29338:287:0;;;;;:::i;:::-;;:::i;52157:65::-;;;;;;;;;;;;;:::i;30424:369::-;;;;;;;;;;-1:-1:-1;30424:369:0;;;;;:::i;:::-;;:::i;46874:37::-;;;;;;;;;;-1:-1:-1;46874:37:0;;;;;:::i;:::-;;:::i;51644:491::-;;;;;;;;;;-1:-1:-1;51644:491:0;;;;;:::i;:::-;;:::i;46700:31::-;;;;;;;;;;;;;;;;46610:42;;;;;;;;;;;;;;;;29696:164;;;;;;;;;;-1:-1:-1;29696:164:0;;;;;:::i;:::-;;:::i;52948:144::-;;;;;;;;;;-1:-1:-1;52948:144:0;;;;;:::i;:::-;;:::i;52520:120::-;;;;;;;;;;-1:-1:-1;52520:120:0;;;;;:::i;:::-;;:::i;45750:201::-;;;;;;;;;;-1:-1:-1;45750:201:0;;;;;:::i;:::-;;:::i;24446:305::-;24548:4;-1:-1:-1;;;;;;24585:40:0;;-1:-1:-1;;;24585:40:0;;:105;;-1:-1:-1;;;;;;;24642:48:0;;-1:-1:-1;;;24642:48:0;24585:105;:158;;;-1:-1:-1;;;;;;;;;;14480:40:0;;;24707:36;24565:178;24446:305;-1:-1:-1;;24446:305:0:o;52646:73::-;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;;;;;;;;;52698:6:::1;:15:::0;;-1:-1:-1;;52698:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52646:73::o;52316:92::-;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;52381:10:::1;:21:::0;52316:92::o;27559:100::-;27613:13;27646:5;27639:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27559:100;:::o;29062:204::-;29130:7;29155:16;29163:7;29155;:16::i;:::-;29150:64;;29180:34;;-1:-1:-1;;;29180:34:0;;;;;;;;;;;29150:64;-1:-1:-1;29234:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;29234:24:0;;29062:204::o;46540:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28625:371::-;28698:13;28714:24;28730:7;28714:15;:24::i;:::-;28698:40;;28759:5;-1:-1:-1;;;;;28753:11:0;:2;-1:-1:-1;;;;;28753:11:0;;28749:48;;28773:24;;-1:-1:-1;;;28773:24:0;;;;;;;;;;;28749:48;2921:10;-1:-1:-1;;;;;28814:21:0;;;;;;:63;;-1:-1:-1;28840:37:0;28857:5;2921:10;29696:164;:::i;28840:37::-;28839:38;28814:63;28810:138;;;28901:35;;-1:-1:-1;;;28901:35:0;;;;;;;;;;;28810:138;28960:28;28969:2;28973:7;28982:5;28960:8;:28::i;:::-;28687:309;28625:371;;:::o;29927:170::-;30061:28;30071:4;30077:2;30081:7;30061:9;:28::i;52725:82::-;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;52786:15:::1;52770:13;:31:::0;52725:82::o;51399:239::-;51458:4;;51471:143;51492:20;:27;51488:31;;51471:143;;;51566:5;-1:-1:-1;;;;;51539:32:0;:20;51560:1;51539:23;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;51539:23:0;:32;51535:72;;-1:-1:-1;51593:4:0;;51399:239;-1:-1:-1;;51399:239:0:o;51535:72::-;51521:3;;;;:::i;:::-;;;;51471:143;;;-1:-1:-1;51627:5:0;;51399:239;-1:-1:-1;;51399:239:0:o;53099:798::-;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;53153:15:::1;53171:29;53195:5;53171:21;:29;:::i;:::-;53153:47:::0;-1:-1:-1;53223:42:0::1;53215:69;53272:11;53153:47:::0;53280:3:::1;53272:11;:::i;:::-;53215:69;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;53207:78;;;::::0;::::1;;53308:42;53300:69;53357:11;:7:::0;53365:3:::1;53357:11;:::i;:::-;53300:69;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;53292:78;;;::::0;::::1;;53393:42;53385:69;53442:11;:7:::0;53450:3:::1;53442:11;:::i;:::-;53385:69;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;53377:78;;;::::0;::::1;;53478:42;53470:70;53527:12;:7:::0;53535:4:::1;53527:12;:::i;:::-;53470:70;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;53462:79;;;::::0;::::1;;53564:42;53556:70;53613:12;:7:::0;53621:4:::1;53613:12;:::i;:::-;53556:70;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;53548:79;;;::::0;::::1;;53651:42;53643:70;53700:12;:7:::0;53708:4:::1;53700:12;:::i;:::-;53643:70;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;53635:79;;;::::0;::::1;;53738:42;53730:70;53787:12;:7:::0;53795:4:::1;53787:12;:::i;:::-;53730:70;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;53722:79;;;::::0;::::1;;53825:42;53817:70;53874:12;:7:::0;53882:4:::1;53874:12;:::i;:::-;53817:70;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;53809:79;;;::::0;::::1;;53144:753;53099:798::o:0;30168:185::-;30306:39;30323:4;30329:2;30333:7;30306:39;;;;;;;;;;;;:16;:39::i;52230:80::-;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;52289:4:::1;:15:::0;52230:80::o;48518:282::-;48631:4;48706:14;-1:-1:-1;;;;;48650:70:0;48667:16;-1:-1:-1;;;;;48650:42:0;;48693:8;48650:52;;;;;;;;;;;;;2693:25:1;;2681:2;2666:18;;2547:177;48650:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48650:70:0;;48646:149;;-1:-1:-1;48742:4:0;48735:11;;48646:149;-1:-1:-1;48780:5:0;48646:149;48518:282;;;;;:::o;52813:127::-;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52888:39:0::1;;::::0;;;:28:::1;:39;::::0;;;;:46;;-1:-1:-1;;52888:46:0::1;52930:4;52888:46;::::0;;52813:127::o;52414:98::-;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;52485:7:::1;:21;52495:11:::0;52485:7;:21:::1;:::i;:::-;;52414:98:::0;:::o;27367:125::-;27431:7;27458:21;27471:7;27458:12;:21::i;:::-;:26;;27367:125;-1:-1:-1;;27367:125:0:o;46514:21::-;;;;;;;:::i;24815:206::-;24879:7;-1:-1:-1;;;;;24903:19:0;;24899:60;;24931:28;;-1:-1:-1;;;24931:28:0;;;;;;;;;;;24899:60;-1:-1:-1;;;;;;24985:19:0;;;;;:12;:19;;;;;:27;;;;24815:206::o;45492:103::-;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;45557:30:::1;45584:1;45557:18;:30::i;:::-;45492:103::o:0;48944:1215::-;49070:14;49087:13;23552:1;23949:12;23739:7;23933:13;-1:-1:-1;;23933:28:0;;;:46;;23695:303;49087:13;49139:9;;49070:30;;-1:-1:-1;49115:20:0;49124:11;49070:30;49115:20;:::i;:::-;:33;;49107:68;;;;-1:-1:-1;;;49107:68:0;;12022:2:1;49107:68:0;;;12004:21:1;12061:2;12041:18;;;12034:30;-1:-1:-1;;;12080:18:1;;;12073:52;12142:18;;49107:68:0;11820:346:1;49107:68:0;49204:1;49190:11;:15;49182:55;;;;-1:-1:-1;;;49182:55:0;;12373:2:1;49182:55:0;;;12355:21:1;12412:2;12392:18;;;12385:30;12451:29;12431:18;;;12424:57;12498:18;;49182:55:0;12171:351:1;49182:55:0;49267:13;;49252:11;:28;;49244:81;;;;-1:-1:-1;;;49244:81:0;;;;;;;:::i;:::-;49341:6;;;;49340:7;49332:42;;;;-1:-1:-1;;;49332:42:0;;13138:2:1;49332:42:0;;;13120:21:1;13177:2;13157:18;;;13150:30;-1:-1:-1;;;13196:18:1;;;13189:52;13258:18;;49332:42:0;12936:346:1;49332:42:0;49403:1;49389:13;;:15;49381:61;;;;-1:-1:-1;;;49381:61:0;;13489:2:1;49381:61:0;;;13471:21:1;13528:2;13508:18;;;13501:30;13567:34;13547:18;;;13540:62;-1:-1:-1;;;13618:18:1;;;13611:31;13659:19;;49381:61:0;13287:397:1;49381:61:0;49453:25;49467:10;49453:13;:25::i;:::-;:58;;;;-1:-1:-1;49500:10:0;49483:28;;;;:16;:28;;;;;;;;49482:29;49453:58;49449:548;;;49577:4;;49562:13;49574:1;49562:11;:13;:::i;:::-;49561:20;;;;:::i;:::-;49544:13;;:38;;;;:::i;:::-;49530:9;:53;;49522:84;;;;-1:-1:-1;;;49522:84:0;;;;;;;:::i;:::-;49632:10;49615:28;;;;:16;:28;;;;;:35;;-1:-1:-1;;49615:35:0;49646:4;49615:35;;;49449:548;;;49680:25;49694:10;49680:13;:25::i;:::-;49675:242;;-1:-1:-1;;;;;49730:41:0;;;;;;:28;:41;;;;;;;;49722:85;;;;-1:-1:-1;;;49722:85:0;;14371:2:1;49722:85:0;;;14353:21:1;14410:2;14390:18;;;14383:30;14449:33;14429:18;;;14422:61;14500:18;;49722:85:0;14169:355:1;49722:85:0;49830:49;49841:17;49859:11;49872:6;49830:10;:49::i;:::-;49822:83;;;;-1:-1:-1;;;49822:83:0;;14731:2:1;49822:83:0;;;14713:21:1;14770:2;14750:18;;;14743:30;-1:-1:-1;;;14789:18:1;;;14782:51;14850:18;;49822:83:0;14529:345:1;49822:83:0;49955:11;49948:4;;:18;;;;:::i;:::-;49935:9;:31;;49927:62;;;;-1:-1:-1;;;49927:62:0;;;;;;;:::i;:::-;50022:1;50005:101;50030:11;50025:1;:16;50005:101;;-1:-1:-1;;;;;50057:39:0;;;;;;:20;:39;;;;;:41;;;;;;:::i;:::-;;;;;;50043:3;;;;;:::i;:::-;;;;50005:101;;;;50112:41;50122:17;50141:11;50112:9;:41::i;:::-;49063:1096;48944:1215;;;;:::o;50178:1213::-;50262:14;50279:13;23552:1;23949:12;23739:7;23933:13;-1:-1:-1;;23933:28:0;;;:46;;23695:303;50279:13;50262:30;;50321:1;50307:11;:15;50299:55;;;;-1:-1:-1;;;50299:55:0;;12373:2:1;50299:55:0;;;12355:21:1;12412:2;12392:18;;;12385:30;12451:29;12431:18;;;12424:57;12498:18;;50299:55:0;12171:351:1;50299:55:0;50384:13;;50369:11;:28;;50361:81;;;;-1:-1:-1;;;50361:81:0;;;;;;;:::i;:::-;50481:9;;50457:20;50466:11;50457:6;:20;:::i;:::-;:33;;50449:68;;;;-1:-1:-1;;;50449:68:0;;12022:2:1;50449:68:0;;;12004:21:1;12061:2;12041:18;;;12034:30;-1:-1:-1;;;12080:18:1;;;12073:52;12142:18;;50449:68:0;11820:346:1;50449:68:0;44913:6;;-1:-1:-1;;;;;44913:6:0;50530:10;:21;50526:703;;50573:6;;;;50572:7;50564:42;;;;-1:-1:-1;;;50564:42:0;;13138:2:1;50564:42:0;;;13120:21:1;13177:2;13157:18;;;13150:30;-1:-1:-1;;;13196:18:1;;;13189:52;13258:18;;50564:42:0;12936:346:1;50564:42:0;50657:4;50642:13;;50626:15;:29;;;;:::i;:::-;50625:36;50617:89;;;;-1:-1:-1;;;50617:89:0;;15081:2:1;50617:89:0;;;15063:21:1;15120:2;15100:18;;;15093:30;15159:34;15139:18;;;15132:62;-1:-1:-1;;;15210:18:1;;;15203:38;15258:19;;50617:89:0;14879:404:1;50617:89:0;50727:10;;50721:4;;:16;50719:19;:53;;;;;50770:1;50741:28;50751:17;50741:9;:28::i;:::-;:30;50719:53;50715:507;;;50833:11;50820:10;;:24;;;;:::i;:::-;50807:9;:37;;50799:68;;;;-1:-1:-1;;;50799:68:0;;;;;;;:::i;:::-;50715:507;;;50898:25;50912:10;50898:13;:25::i;:::-;:58;;;;-1:-1:-1;50945:10:0;50928:28;;;;:16;:28;;;;;;;;50927:29;50898:58;50894:319;;;51027:4;;51012:13;51024:1;51012:11;:13;:::i;:::-;51011:20;;;;:::i;:::-;50994:13;;:38;;;;:::i;:::-;50980:9;:53;;50972:84;;;;-1:-1:-1;;;50972:84:0;;;;;;;:::i;:::-;51088:10;51071:28;;;;:16;:28;;;;;:35;;-1:-1:-1;;51071:35:0;51102:4;51071:35;;;50894:319;;;51167:11;51160:4;;:18;;;;:::i;:::-;51147:9;:31;;51139:62;;;;-1:-1:-1;;;51139:62:0;;;;;;;:::i;:::-;51254:1;51237:101;51262:11;51257:1;:16;51237:101;;-1:-1:-1;;;;;51289:39:0;;;;;;:20;:39;;;;;:41;;;;;;:::i;:::-;;;;;;51275:3;;;;;:::i;:::-;;;;51237:101;;;;51344:41;51354:17;51373:11;51344:9;:41::i;27728:104::-;27784:13;27817:7;27810:14;;;;;:::i;29338:287::-;2921:10;-1:-1:-1;;;;;29437:24:0;;;29433:54;;29470:17;;-1:-1:-1;;;29470:17:0;;;;;;;;;;;29433:54;2921:10;29500:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;29500:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;29500:53:0;;;;;;;;;;29569:48;;540:41:1;;;29500:42:0;;2921:10;29569:48;;513:18:1;29569:48:0;;;;;;;29338:287;;:::o;52157:65::-;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;52201:8:::1;:15:::0;;-1:-1:-1;;52201:15:0::1;;;::::0;;52157:65::o;30424:369::-;30591:28;30601:4;30607:2;30611:7;30591:9;:28::i;:::-;-1:-1:-1;;;;;30634:13:0;;4583:19;:23;;30634:76;;;;;30654:56;30685:4;30691:2;30695:7;30704:5;30654:30;:56::i;:::-;30653:57;30634:76;30630:156;;;30734:40;;-1:-1:-1;;;30734:40:0;;;;;;;;;;;30630:156;30424:369;;;;:::o;46874:37::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46874:37:0;;-1:-1:-1;46874:37:0;:::o;51644:491::-;51742:13;51783:16;51791:7;51783;:16::i;:::-;51767:97;;;;-1:-1:-1;;;51767:97:0;;15490:2:1;51767:97:0;;;15472:21:1;15529:2;15509:18;;;15502:30;15568:34;15548:18;;;15541:62;-1:-1:-1;;;15619:18:1;;;15612:45;15674:19;;51767:97:0;15288:411:1;51767:97:0;51880:8;;;;;;;:17;;51892:5;51880:17;51877:62;;51917:14;51910:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51644:491;;;:::o;51877:62::-;51947:28;51978:10;:8;:10::i;:::-;51947:41;;52033:1;52008:14;52002:28;:32;:127;;;;;;;;;;;;;;;;;52070:14;52086:18;:7;:16;:18::i;:::-;52053:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51995:134;51644:491;-1:-1:-1;;;51644:491:0:o;29696:164::-;-1:-1:-1;;;;;29817:25:0;;;29793:4;29817:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29696:164::o;52948:144::-;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;53023:27:::1;53030:20;;53023:27;:::i;:::-;53057:29;:20;53080:6:::0;;53057:29:::1;:::i;52520:120::-:0;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;52602:14:::1;:32;52619:15:::0;52602:14;:32:::1;:::i;45750:201::-:0;44913:6;;-1:-1:-1;;;;;44913:6:0;2921:10;45060:23;45052:69;;;;-1:-1:-1;;;45052:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45839:22:0;::::1;45831:73;;;::::0;-1:-1:-1;;;45831:73:0;;16574:2:1;45831:73:0::1;::::0;::::1;16556:21:1::0;16613:2;16593:18;;;16586:30;16652:34;16632:18;;;16625:62;-1:-1:-1;;;16703:18:1;;;16696:36;16749:19;;45831:73:0::1;16372:402:1::0;45831:73:0::1;45915:28;45934:8;45915:18;:28::i;31048:187::-:0;31105:4;31148:7;23552:1;31129:26;;:53;;;;;31169:13;;31159:7;:23;31129:53;:98;;;;-1:-1:-1;;31200:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;31200:27:0;;;;31199:28;;31048:187::o;39218:196::-;39333:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;39333:29:0;-1:-1:-1;;;;;39333:29:0;;;;;;;;;39378:28;;39333:24;;39378:28;;;;;;;39218:196;;;:::o;34161:2130::-;34276:35;34314:21;34327:7;34314:12;:21::i;:::-;34276:59;;34374:4;-1:-1:-1;;;;;34352:26:0;:13;:18;;;-1:-1:-1;;;;;34352:26:0;;34348:67;;34387:28;;-1:-1:-1;;;34387:28:0;;;;;;;;;;;34348:67;34428:22;2921:10;-1:-1:-1;;;;;34454:20:0;;;;:73;;-1:-1:-1;34491:36:0;34508:4;2921:10;29696:164;:::i;34491:36::-;34454:126;;;-1:-1:-1;2921:10:0;34544:20;34556:7;34544:11;:20::i;:::-;-1:-1:-1;;;;;34544:36:0;;34454:126;34428:153;;34599:17;34594:66;;34625:35;;-1:-1:-1;;;34625:35:0;;;;;;;;;;;34594:66;-1:-1:-1;;;;;34675:16:0;;34671:52;;34700:23;;-1:-1:-1;;;34700:23:0;;;;;;;;;;;34671:52;34844:35;34861:1;34865:7;34874:4;34844:8;:35::i;:::-;-1:-1:-1;;;;;35175:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;35175:31:0;;;;;;;-1:-1:-1;;35175:31:0;;;;;;;35221:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;35221:29:0;;;;;;;;;;;35301:20;;;:11;:20;;;;;;35336:18;;-1:-1:-1;;;;;;35369:49:0;;;;-1:-1:-1;;;35402:15:0;35369:49;;;;;;;;;;35692:11;;35752:24;;;;;35795:13;;35301:20;;35752:24;;35795:13;35791:384;;36005:13;;35990:11;:28;35986:174;;36043:20;;36112:28;;;;36086:54;;-1:-1:-1;;;36086:54:0;-1:-1:-1;;;;;;36086:54:0;;;-1:-1:-1;;;;;36043:20:0;;36086:54;;;;35986:174;35150:1036;;;36222:7;36218:2;-1:-1:-1;;;;;36203:27:0;36212:4;-1:-1:-1;;;;;36203:27:0;;;;;;;;;;;36241:42;30424:369;26196:1109;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;26307:7:0;;23552:1;26356:23;;:47;;;;;26390:13;;26383:4;:20;26356:47;26352:886;;;26424:31;26458:17;;;:11;:17;;;;;;;;;26424:51;;;;;;;;;-1:-1:-1;;;;;26424:51:0;;;;-1:-1:-1;;;26424:51:0;;;;;;;;;;;-1:-1:-1;;;26424:51:0;;;;;;;;;;;;;;26494:729;;26544:14;;-1:-1:-1;;;;;26544:28:0;;26540:101;;26608:9;26196:1109;-1:-1:-1;;;26196:1109:0:o;26540:101::-;-1:-1:-1;;;26983:6:0;27028:17;;;;:11;:17;;;;;;;;;27016:29;;;;;;;;;-1:-1:-1;;;;;27016:29:0;;;;;-1:-1:-1;;;27016:29:0;;;;;;;;;;;-1:-1:-1;;;27016:29:0;;;;;;;;;;;;;27076:28;27072:109;;27144:9;26196:1109;-1:-1:-1;;;26196:1109:0:o;27072:109::-;26943:261;;;26405:833;26352:886;27266:31;;-1:-1:-1;;;27266:31:0;;;;;;;;;;;46111:191;46204:6;;;-1:-1:-1;;;;;46221:17:0;;;-1:-1:-1;;;;;;46221:17:0;;;;;;;46254:40;;46204:6;;;46221:17;46204:6;;46254:40;;46185:16;;46254:40;46174:128;46111:191;:::o;31243:104::-;31312:27;31322:2;31326:8;31312:27;;;;;;;;;;;;:9;:27::i;39906:667::-;40090:72;;-1:-1:-1;;;40090:72:0;;40069:4;;-1:-1:-1;;;;;40090:36:0;;;;;:72;;2921:10;;40141:4;;40147:7;;40156:5;;40090:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40090:72:0;;;;;;;;-1:-1:-1;;40090:72:0;;;;;;;;;;;;:::i;:::-;;;40086:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40324:6;:13;40341:1;40324:18;40320:235;;40370:40;;-1:-1:-1;;;40370:40:0;;;;;;;;;;;40320:235;40513:6;40507:13;40498:6;40494:2;40490:15;40483:38;40086:480;-1:-1:-1;;;;;;40209:55:0;-1:-1:-1;;;40209:55:0;;-1:-1:-1;40086:480:0;39906:667;;;;;;:::o;48821:102::-;48881:13;48910:7;48903:14;;;;;:::i;403:723::-;459:13;680:5;689:1;680:10;676:53;;-1:-1:-1;;707:10:0;;;;;;;;;;;;-1:-1:-1;;;707:10:0;;;;;403:723::o;676:53::-;754:5;739:12;795:78;802:9;;795:78;;828:8;;;;:::i;:::-;;-1:-1:-1;851:10:0;;-1:-1:-1;859:2:0;851:10;;:::i;:::-;;;795:78;;;883:19;915:6;905:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;905:17:0;;883:39;;933:154;940:10;;933:154;;967:11;977:1;967:11;;:::i;:::-;;-1:-1:-1;1036:10:0;1044:2;1036:5;:10;:::i;:::-;1023:24;;:2;:24;:::i;:::-;1010:39;;993:6;1000;993:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;993:56:0;;;;;;;;-1:-1:-1;1064:11:0;1073:2;1064:11;;:::i;:::-;;;933:154;;31710:163;31833:32;31839:2;31843:8;31853:5;31860:4;32271:20;32294:13;-1:-1:-1;;;;;32322:16:0;;32318:48;;32347:19;;-1:-1:-1;;;32347:19:0;;;;;;;;;;;32318:48;32381:8;32393:1;32381:13;32377:44;;32403:18;;-1:-1:-1;;;32403:18:0;;;;;;;;;;;32377:44;-1:-1:-1;;;;;32772:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;32831:49:0;;32772:44;;;;;;;;32831:49;;;;-1:-1:-1;;32772:44:0;;;;;;32831:49;;;;;;;;;;;;;;;;32897:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;32947:66:0;;;;-1:-1:-1;;;32997:15:0;32947:66;;;;;;;;;;32897:25;33094:23;;;33138:4;:23;;;;-1:-1:-1;;;;;;33146:13:0;;4583:19;:23;;33146:15;33134:641;;;33182:314;33213:38;;33238:12;;-1:-1:-1;;;;;33213:38:0;;;33230:1;;33213:38;;33230:1;;33213:38;33279:69;33318:1;33322:2;33326:14;;;;;;33342:5;33279:30;:69::i;:::-;33274:174;;33384:40;;-1:-1:-1;;;33384:40:0;;;;;;;;;;;33274:174;33491:3;33475:12;:19;33182:314;;33577:12;33560:13;;:29;33556:43;;33591:8;;;33556:43;33134:641;;;33640:120;33671:40;;33696:14;;;;;-1:-1:-1;;;;;33671:40:0;;;33688:1;;33671:40;;33688:1;;33671:40;33755:3;33739:12;:19;33640:120;;33134:641;-1:-1:-1;33789:13:0;:28;33839:60;30424:369;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;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;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;686:60;592:160;;;:::o;757:180::-;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:180::-;1001:6;1054:2;1042:9;1033:7;1029:23;1025:32;1022:52;;;1070:1;1067;1060:12;1022:52;-1:-1:-1;1093:23:1;;942:180;-1:-1:-1;942:180:1:o;1127:250::-;1212:1;1222:113;1236:6;1233:1;1230:13;1222:113;;;1312:11;;;1306:18;1293:11;;;1286:39;1258:2;1251:10;1222:113;;;-1:-1:-1;;1369:1:1;1351:16;;1344:27;1127:250::o;1382:271::-;1424:3;1462:5;1456:12;1489:6;1484:3;1477:19;1505:76;1574:6;1567:4;1562:3;1558:14;1551:4;1544:5;1540:16;1505:76;:::i;:::-;1635:2;1614:15;-1:-1:-1;;1610:29:1;1601:39;;;;1642:4;1597:50;;1382:271;-1:-1:-1;;1382:271:1:o;1658:220::-;1807:2;1796:9;1789:21;1770:4;1827:45;1868:2;1857:9;1853:18;1845:6;1827:45;:::i;2091:131::-;-1:-1:-1;;;;;2166:31:1;;2156:42;;2146:70;;2212:1;2209;2202:12;2227:315;2295:6;2303;2356:2;2344:9;2335:7;2331:23;2327:32;2324:52;;;2372:1;2369;2362:12;2324:52;2411:9;2398:23;2430:31;2455:5;2430:31;:::i;:::-;2480:5;2532:2;2517:18;;;;2504:32;;-1:-1:-1;;;2227:315:1:o;2729:247::-;2788:6;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2896:9;2883:23;2915:31;2940:5;2915:31;:::i;2981:456::-;3058:6;3066;3074;3127:2;3115:9;3106:7;3102:23;3098:32;3095:52;;;3143:1;3140;3133:12;3095:52;3182:9;3169:23;3201:31;3226:5;3201:31;:::i;:::-;3251:5;-1:-1:-1;3308:2:1;3293:18;;3280:32;3321:33;3280:32;3321:33;:::i;:::-;2981:456;;3373:7;;-1:-1:-1;;;3427:2:1;3412:18;;;;3399:32;;2981:456::o;3442:127::-;3503:10;3498:3;3494:20;3491:1;3484:31;3534:4;3531:1;3524:15;3558:4;3555:1;3548:15;3574:632;3639:5;3669:18;3710:2;3702:6;3699:14;3696:40;;;3716:18;;:::i;:::-;3791:2;3785:9;3759:2;3845:15;;-1:-1:-1;;3841:24:1;;;3867:2;3837:33;3833:42;3821:55;;;3891:18;;;3911:22;;;3888:46;3885:72;;;3937:18;;:::i;:::-;3977:10;3973:2;3966:22;4006:6;3997:15;;4036:6;4028;4021:22;4076:3;4067:6;4062:3;4058:16;4055:25;4052:45;;;4093:1;4090;4083:12;4052:45;4143:6;4138:3;4131:4;4123:6;4119:17;4106:44;4198:1;4191:4;4182:6;4174;4170:19;4166:30;4159:41;;;;3574:632;;;;;:::o;4211:451::-;4280:6;4333:2;4321:9;4312:7;4308:23;4304:32;4301:52;;;4349:1;4346;4339:12;4301:52;4389:9;4376:23;4422:18;4414:6;4411:30;4408:50;;;4454:1;4451;4444:12;4408:50;4477:22;;4530:4;4522:13;;4518:27;-1:-1:-1;4508:55:1;;4559:1;4556;4549:12;4508:55;4582:74;4648:7;4643:2;4630:16;4625:2;4621;4617:11;4582:74;:::i;4667:525::-;4753:6;4761;4769;4777;4830:3;4818:9;4809:7;4805:23;4801:33;4798:53;;;4847:1;4844;4837:12;4798:53;4883:9;4870:23;4860:33;;4943:2;4932:9;4928:18;4915:32;4956:31;4981:5;4956:31;:::i;:::-;5006:5;-1:-1:-1;5063:2:1;5048:18;;5035:32;5076:33;5035:32;5076:33;:::i;:::-;4667:525;;;;-1:-1:-1;5128:7:1;;5182:2;5167:18;5154:32;;-1:-1:-1;;4667:525:1:o;5197:315::-;5265:6;5273;5326:2;5314:9;5305:7;5301:23;5297:32;5294:52;;;5342:1;5339;5332:12;5294:52;5378:9;5365:23;5355:33;;5438:2;5427:9;5423:18;5410:32;5451:31;5476:5;5451:31;:::i;:::-;5501:5;5491:15;;;5197:315;;;;;:::o;5517:::-;5582:6;5590;5643:2;5631:9;5622:7;5618:23;5614:32;5611:52;;;5659:1;5656;5649:12;5611:52;5698:9;5685:23;5717:31;5742:5;5717:31;:::i;:::-;5767:5;-1:-1:-1;5791:35:1;5822:2;5807:18;;5791:35;:::i;:::-;5781:45;;5517:315;;;;;:::o;5837:795::-;5932:6;5940;5948;5956;6009:3;5997:9;5988:7;5984:23;5980:33;5977:53;;;6026:1;6023;6016:12;5977:53;6065:9;6052:23;6084:31;6109:5;6084:31;:::i;:::-;6134:5;-1:-1:-1;6191:2:1;6176:18;;6163:32;6204:33;6163:32;6204:33;:::i;:::-;6256:7;-1:-1:-1;6310:2:1;6295:18;;6282:32;;-1:-1:-1;6365:2:1;6350:18;;6337:32;6392:18;6381:30;;6378:50;;;6424:1;6421;6414:12;6378:50;6447:22;;6500:4;6492:13;;6488:27;-1:-1:-1;6478:55:1;;6529:1;6526;6519:12;6478:55;6552:74;6618:7;6613:2;6600:16;6595:2;6591;6587:11;6552:74;:::i;:::-;6542:84;;;5837:795;;;;;;;:::o;6637:388::-;6705:6;6713;6766:2;6754:9;6745:7;6741:23;6737:32;6734:52;;;6782:1;6779;6772:12;6734:52;6821:9;6808:23;6840:31;6865:5;6840:31;:::i;:::-;6890:5;-1:-1:-1;6947:2:1;6932:18;;6919:32;6960:33;6919:32;6960:33;:::i;7030:615::-;7116:6;7124;7177:2;7165:9;7156:7;7152:23;7148:32;7145:52;;;7193:1;7190;7183:12;7145:52;7233:9;7220:23;7262:18;7303:2;7295:6;7292:14;7289:34;;;7319:1;7316;7309:12;7289:34;7357:6;7346:9;7342:22;7332:32;;7402:7;7395:4;7391:2;7387:13;7383:27;7373:55;;7424:1;7421;7414:12;7373:55;7464:2;7451:16;7490:2;7482:6;7479:14;7476:34;;;7506:1;7503;7496:12;7476:34;7559:7;7554:2;7544:6;7541:1;7537:14;7533:2;7529:23;7525:32;7522:45;7519:65;;;7580:1;7577;7570:12;7519:65;7611:2;7603:11;;;;;7633:6;;-1:-1:-1;7030:615:1;;-1:-1:-1;;;;7030:615:1:o;7650:356::-;7852:2;7834:21;;;7871:18;;;7864:30;7930:34;7925:2;7910:18;;7903:62;7997:2;7982:18;;7650:356::o;8011:380::-;8090:1;8086:12;;;;8133;;;8154:61;;8208:4;8200:6;8196:17;8186:27;;8154:61;8261:2;8253:6;8250:14;8230:18;8227:38;8224:161;;8307:10;8302:3;8298:20;8295:1;8288:31;8342:4;8339:1;8332:15;8370:4;8367:1;8360:15;8224:161;;8011:380;;;:::o;8396:127::-;8457:10;8452:3;8448:20;8445:1;8438:31;8488:4;8485:1;8478:15;8512:4;8509:1;8502:15;8528:127;8589:10;8584:3;8580:20;8577:1;8570:31;8620:4;8617:1;8610:15;8644:4;8641:1;8634:15;8660:135;8699:3;8720:17;;;8717:43;;8740:18;;:::i;:::-;-1:-1:-1;8787:1:1;8776:13;;8660:135::o;8800:127::-;8861:10;8856:3;8852:20;8849:1;8842:31;8892:4;8889:1;8882:15;8916:4;8913:1;8906:15;8932:120;8972:1;8998;8988:35;;9003:18;;:::i;:::-;-1:-1:-1;9037:9:1;;8932:120::o;9057:168::-;9130:9;;;9161;;9178:15;;;9172:22;;9158:37;9148:71;;9199:18;;:::i;9230:251::-;9300:6;9353:2;9341:9;9332:7;9328:23;9324:32;9321:52;;;9369:1;9366;9359:12;9321:52;9401:9;9395:16;9420:31;9445:5;9420:31;:::i;9612:545::-;9714:2;9709:3;9706:11;9703:448;;;9750:1;9775:5;9771:2;9764:17;9820:4;9816:2;9806:19;9890:2;9878:10;9874:19;9871:1;9867:27;9861:4;9857:38;9926:4;9914:10;9911:20;9908:47;;;-1:-1:-1;9949:4:1;9908:47;10004:2;9999:3;9995:12;9992:1;9988:20;9982:4;9978:31;9968:41;;10059:82;10077:2;10070:5;10067:13;10059:82;;;10122:17;;;10103:1;10092:13;10059:82;;;10063:3;;;9612:545;;;:::o;10333:1352::-;10459:3;10453:10;10486:18;10478:6;10475:30;10472:56;;;10508:18;;:::i;:::-;10537:97;10627:6;10587:38;10619:4;10613:11;10587:38;:::i;:::-;10581:4;10537:97;:::i;:::-;10689:4;;10753:2;10742:14;;10770:1;10765:663;;;;11472:1;11489:6;11486:89;;;-1:-1:-1;11541:19:1;;;11535:26;11486:89;-1:-1:-1;;10290:1:1;10286:11;;;10282:24;10278:29;10268:40;10314:1;10310:11;;;10265:57;11588:81;;10735:944;;10765:663;9559:1;9552:14;;;9596:4;9583:18;;-1:-1:-1;;10801:20:1;;;10919:236;10933:7;10930:1;10927:14;10919:236;;;11022:19;;;11016:26;11001:42;;11114:27;;;;11082:1;11070:14;;;;10949:19;;10919:236;;;10923:3;11183:6;11174:7;11171:19;11168:201;;;11244:19;;;11238:26;-1:-1:-1;;11327:1:1;11323:14;;;11339:3;11319:24;11315:37;11311:42;11296:58;11281:74;;11168:201;-1:-1:-1;;;;;11415:1:1;11399:14;;;11395:22;11382:36;;-1:-1:-1;10333:1352:1:o;11690:125::-;11755:9;;;11776:10;;;11773:36;;;11789:18;;:::i;12527:404::-;12729:2;12711:21;;;12768:2;12748:18;;;12741:30;12807:34;12802:2;12787:18;;12780:62;-1:-1:-1;;;12873:2:1;12858:18;;12851:38;12921:3;12906:19;;12527:404::o;13689:128::-;13756:9;;;13777:11;;;13774:37;;;13791:18;;:::i;13822:342::-;14024:2;14006:21;;;14063:2;14043:18;;;14036:30;-1:-1:-1;;;14097:2:1;14082:18;;14075:48;14155:2;14140:18;;13822:342::o;15704:663::-;15984:3;16022:6;16016:13;16038:66;16097:6;16092:3;16085:4;16077:6;16073:17;16038:66;:::i;:::-;16167:13;;16126:16;;;;16189:70;16167:13;16126:16;16236:4;16224:17;;16189:70;:::i;:::-;-1:-1:-1;;;16281:20:1;;16310:22;;;16359:1;16348:13;;15704:663;-1:-1:-1;;;;15704:663:1:o;16779:489::-;-1:-1:-1;;;;;17048:15:1;;;17030:34;;17100:15;;17095:2;17080:18;;17073:43;17147:2;17132:18;;17125:34;;;17195:3;17190:2;17175:18;;17168:31;;;16973:4;;17216:46;;17242:19;;17234:6;17216:46;:::i;:::-;17208:54;16779:489;-1:-1:-1;;;;;;16779:489:1:o;17273:249::-;17342:6;17395:2;17383:9;17374:7;17370:23;17366:32;17363:52;;;17411:1;17408;17401:12;17363:52;17443:9;17437:16;17462:30;17486:5;17462:30;:::i;17527:112::-;17559:1;17585;17575:35;;17590:18;;:::i;:::-;-1:-1:-1;17624:9:1;;17527:112::o

Swarm Source

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