ETH Price: $3,346.82 (-0.50%)

Token

Doggies (Dog)
 

Overview

Max Total Supply

500 Dog

Holders

201

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 Dog
0x8049651bF42C07DE9b025A90dfF4d0Ee503C7f4E
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:
Doggies

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-08
*/

/**
 *Submitted for verification at polygonscan.com on 2022-09-28
*/
 
// SPDX-License-Identifier: MIT
 
// File: @openzeppelin/contracts/utils/Counters.sol
 
 
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
 
pragma solidity ^0.8.0;
 
/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }
 
    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }
 
    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }
 
    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }
 
    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}
 
// File: @openzeppelin/contracts/utils/Strings.sol
 
 
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
 
pragma solidity ^0.8.0;
 
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
 
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
 
    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}
 
// File: @openzeppelin/contracts/utils/Context.sol
 
 
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
 
pragma solidity ^0.8.0;
 
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
// File: @openzeppelin/contracts/access/Ownable.sol
 
 
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
 
pragma solidity ^0.8.0;
 
 
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
// File: @openzeppelin/contracts/utils/Address.sol
 
 
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
 
pragma solidity ^0.8.1;
 
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.
 
        return account.code.length > 0;
    }
 
    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
 
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
 
    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
 
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
 
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
 
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
 
 
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
 
pragma solidity ^0.8.0;
 
/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
 
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
 
 
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
 
pragma solidity ^0.8.0;
 
/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
 
 
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
 
pragma solidity ^0.8.0;
 
 
/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
 
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
 
 
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
 
pragma solidity ^0.8.0;
 
 
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
 
    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
 
    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
 
    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);
 
    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);
 
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
 
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
 
    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
 
    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;
 
    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;
 
    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);
 
    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}
 
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
 
 
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
 
pragma solidity ^0.8.0;
 
 
/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
 
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
 
 
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)
 
pragma solidity ^0.8.0;
 
 
 
 
 
 
 
 
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
 
    // Token name
    string private _name;
 
    // Token symbol
    string private _symbol;
 
    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;
 
    // Mapping owner address to token count
    mapping(address => uint256) private _balances;
 
    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;
 
    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
 
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
 
    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner];
    }
 
    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }
 
    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);
 
        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 overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
 
    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");
 
        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not token owner nor approved for all"
        );
 
        _approve(to, tokenId);
    }
 
    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);
 
        return _tokenApprovals[tokenId];
    }
 
    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }
 
    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
 
    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
 
        _transfer(from, to, tokenId);
    }
 
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
 
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _safeTransfer(from, to, tokenId, data);
    }
 
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }
 
    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }
 
    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }
 
    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
 
    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }
 
    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");
 
        _beforeTokenTransfer(address(0), to, tokenId);
 
        _balances[to] += 1;
        _owners[tokenId] = to;
 
        emit Transfer(address(0), to, tokenId);
 
        _afterTokenTransfer(address(0), to, tokenId);
    }
 
    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
 
        _beforeTokenTransfer(owner, address(0), tokenId);
 
        // Clear approvals
        _approve(address(0), tokenId);
 
        _balances[owner] -= 1;
        delete _owners[tokenId];
 
        emit Transfer(owner, address(0), tokenId);
 
        _afterTokenTransfer(owner, address(0), tokenId);
    }
 
    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");
 
        _beforeTokenTransfer(from, to, tokenId);
 
        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
 
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;
 
        emit Transfer(from, to, tokenId);
 
        _afterTokenTransfer(from, to, tokenId);
    }
 
    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
 
    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }
 
    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }
 
    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
 
    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
 
    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}
 
// File: contracts/abe solo.sol
 
 
 
// Edited By jamesonion
/**
 
*/
 
pragma solidity >=0.7.0 <0.9.0;
 
 
 
 
contract Doggies is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;
 
  Counters.Counter private supply;
 
  string public uriPrefix = "https://nftstorage.link/ipfs/bafybeiefttcmhig3c4fac3oarjj62gapntqyetuxgtng6vbepimgewj7vi/";
  string public uriSuffix = ".json";
  string public hiddenMetadataUri;
 
  uint256 public cost = 0.05 ether;
  uint256 public maxSupply = 500;
  uint256 public maxMintAmountPerTx = 1;
 
  bool public paused = false;
  bool public revealed = false;
 
  bool public presale = false; 
  mapping(address => bool) public whitelisted;
  uint256 public maxPresaleMintAmount = 5;
 
  constructor() ERC721("Doggies", "Dog") {
    setHiddenMetadataUri("ipfs://123/1.json");
  }
 
  modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _;
  }
 
  function totalSupply() public view returns (uint256) {
    return supply.current();
  }
 
  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    require(msg.value >= cost * _mintAmount, "Insufficient funds!");
 
     //Don't allow minting if presale is set and buyer is not in whitelisted map
    if (presale) {
        if ( !isInWhiteList(msg.sender))  {
            revert("Buyer is not in Whitelist for Pre-Sale");
        }
        // //Check if already bought 
        if ( balanceOf(msg.sender)+_mintAmount > maxPresaleMintAmount)
            revert("Buyer has already pre-sale minted max tokens");
    } 
 
    _mintLoop(msg.sender, _mintAmount);
  }
 
  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }
 
  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;
 
    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);
 
      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;
 
        ownedTokenIndex++;
      }
 
      currentTokenId++;
    }
 
    return ownedTokenIds;
  }
 
  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
 
    if (revealed == false) {
      return hiddenMetadataUri;
    }
 
    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
        : "";
  }
 
  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }
 
  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }
 
  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }
 
  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }
 
  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }
 
    function setPresale(bool _state) public onlyOwner {
      presale = _state;
  }
 
  function setMaxPresaleMintAmount(uint256 _max) public onlyOwner {
      maxPresaleMintAmount = _max;
  }
 
  function addToWhiteList(address _addr) public onlyOwner {
      whitelisted[_addr] = true;
  }
 
  function addArrayToWhiteList(address[] memory _addrs) public onlyOwner {
      for (uint256 i=0;i< _addrs.length;i++)
          whitelisted[_addrs[i]] = true; 
  }
 
  function removeFromWhiteList(address _addr) public onlyOwner {
      whitelisted[_addr] = false;
  }
 
  function isInWhiteList(address _addr) private view returns (bool) {
      return whitelisted[_addr]  || _addr == owner();
  }
 
  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }
 
  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }
 
  function withdraw() public onlyOwner {
 
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  }
 
  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }
 
  function _baseURI() internal view virtual override returns (string memory) {
    return uriPrefix;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"}],"name":"addArrayToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPresaleMintAmount","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"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeFromWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxPresaleMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61010060405260596080818152906200289060a039600890620000239082620002af565b50604080518082019091526005815264173539b7b760d91b60208201526009906200004f9082620002af565b5066b1a2bc2ec50000600b556101f4600c556001600d55600e805462ffffff1916905560056010553480156200008457600080fd5b5060405180604001604052806007815260200166446f676769657360c81b81525060405180604001604052806003815260200162446f6760e81b8152508160009081620000d29190620002af565b506001620000e18282620002af565b505050620000fe620000f86200013760201b60201c565b6200013b565b60408051808201909152601181527034b833399d17979899199798973539b7b760791b602082015262000131906200018d565b6200037b565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000197620001a9565b600a620001a58282620002af565b5050565b6006546001600160a01b03163314620002085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200023557607f821691505b6020821081036200025657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002aa57600081815260208120601f850160051c81016020861015620002855750805b601f850160051c820191505b81811015620002a65782815560010162000291565b5050505b505050565b81516001600160401b03811115620002cb57620002cb6200020a565b620002e381620002dc845462000220565b846200025c565b602080601f8311600181146200031b5760008415620003025750858301515b600019600386901b1c1916600185901b178555620002a6565b600085815260208120601f198616915b828110156200034c578886015182559484019460019091019084016200032b565b50858210156200036b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612505806200038b6000396000f3fe6080604052600436106102675760003560e01c8063715018a611610144578063c243c6c1116100b6578063d936547e1161007a578063d936547e146106ed578063e0a808531461071d578063e985e9c51461073d578063efbd73f41461075d578063f2fde38b1461077d578063fdea8e0b1461079d57600080fd5b8063c243c6c114610657578063c54e73e314610677578063c87b56dd14610697578063d5abeb01146106b7578063d76fd220146106cd57600080fd5b806395d89b411161010857806395d89b41146105ba578063a0712d68146105cf578063a22cb465146105e2578063a45ba8e714610602578063b071401b14610617578063b88d4fde1461063757600080fd5b8063715018a61461053b5780637ec4a6591461055057806385480756146105705780638da5cb5b1461058657806394354fd0146105a457600080fd5b806342842e0e116101dd57806351830227116101a157806351830227146104985780635503a0e8146104b75780635c975abb146104cc57806362b99ad4146104e65780636352211e146104fb57806370a082311461051b57600080fd5b806342842e0e146103eb578063438b63001461040b57806344a0d68a1461043857806347ee0394146104585780634fdd43cb1461047857600080fd5b806313faede61161022f57806313faede61461033d57806316ba10e01461036157806316c38b3c1461038157806318160ddd146103a157806323b872dd146103b65780633ccfd60b146103d657600080fd5b806301bf66481461026c57806301ffc9a71461028e57806306fdde03146102c3578063081812fc146102e5578063095ea7b31461031d575b600080fd5b34801561027857600080fd5b5061028c610287366004611cfd565b6107bd565b005b34801561029a57600080fd5b506102ae6102a9366004611d2e565b6107e6565b60405190151581526020015b60405180910390f35b3480156102cf57600080fd5b506102d8610838565b6040516102ba9190611d9b565b3480156102f157600080fd5b50610305610300366004611dae565b6108ca565b6040516001600160a01b0390911681526020016102ba565b34801561032957600080fd5b5061028c610338366004611dc7565b6108f1565b34801561034957600080fd5b50610353600b5481565b6040519081526020016102ba565b34801561036d57600080fd5b5061028c61037c366004611e90565b610a0b565b34801561038d57600080fd5b5061028c61039c366004611ee9565b610a23565b3480156103ad57600080fd5b50610353610a3e565b3480156103c257600080fd5b5061028c6103d1366004611f04565b610a4e565b3480156103e257600080fd5b5061028c610a7f565b3480156103f757600080fd5b5061028c610406366004611f04565b610afb565b34801561041757600080fd5b5061042b610426366004611cfd565b610b16565b6040516102ba9190611f40565b34801561044457600080fd5b5061028c610453366004611dae565b610bf6565b34801561046457600080fd5b5061028c610473366004611cfd565b610c03565b34801561048457600080fd5b5061028c610493366004611e90565b610c2f565b3480156104a457600080fd5b50600e546102ae90610100900460ff1681565b3480156104c357600080fd5b506102d8610c43565b3480156104d857600080fd5b50600e546102ae9060ff1681565b3480156104f257600080fd5b506102d8610cd1565b34801561050757600080fd5b50610305610516366004611dae565b610cde565b34801561052757600080fd5b50610353610536366004611cfd565b610d3e565b34801561054757600080fd5b5061028c610dc4565b34801561055c57600080fd5b5061028c61056b366004611e90565b610dd8565b34801561057c57600080fd5b5061035360105481565b34801561059257600080fd5b506006546001600160a01b0316610305565b3480156105b057600080fd5b50610353600d5481565b3480156105c657600080fd5b506102d8610dec565b61028c6105dd366004611dae565b610dfb565b3480156105ee57600080fd5b5061028c6105fd366004611f84565b61104c565b34801561060e57600080fd5b506102d8611057565b34801561062357600080fd5b5061028c610632366004611dae565b611064565b34801561064357600080fd5b5061028c610652366004611fb7565b611071565b34801561066357600080fd5b5061028c610672366004612033565b6110a9565b34801561068357600080fd5b5061028c610692366004611ee9565b611119565b3480156106a357600080fd5b506102d86106b2366004611dae565b61113d565b3480156106c357600080fd5b50610353600c5481565b3480156106d957600080fd5b5061028c6106e8366004611dae565b6112c1565b3480156106f957600080fd5b506102ae610708366004611cfd565b600f6020526000908152604090205460ff1681565b34801561072957600080fd5b5061028c610738366004611ee9565b6112ce565b34801561074957600080fd5b506102ae6107583660046120e0565b6112f0565b34801561076957600080fd5b5061028c61077836600461210a565b61131e565b34801561078957600080fd5b5061028c610798366004611cfd565b6113e2565b3480156107a957600080fd5b50600e546102ae9062010000900460ff1681565b6107c5611458565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b60006001600160e01b031982166380ac58cd60e01b148061081757506001600160e01b03198216635b5e139f60e01b145b8061083257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546108479061212d565b80601f01602080910402602001604051908101604052809291908181526020018280546108739061212d565b80156108c05780601f10610895576101008083540402835291602001916108c0565b820191906000526020600020905b8154815290600101906020018083116108a357829003601f168201915b5050505050905090565b60006108d5826114b2565b506000908152600460205260409020546001600160a01b031690565b60006108fc82610cde565b9050806001600160a01b0316836001600160a01b03160361096e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061098a575061098a81336112f0565b6109fc5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610965565b610a068383611511565b505050565b610a13611458565b6009610a1f82826121b5565b5050565b610a2b611458565b600e805460ff1916911515919091179055565b6000610a4960075490565b905090565b610a58338261157f565b610a745760405162461bcd60e51b815260040161096590612275565b610a068383836115de565b610a87611458565b6000610a9b6006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ae5576040519150601f19603f3d011682016040523d82523d6000602084013e610aea565b606091505b5050905080610af857600080fd5b50565b610a0683838360405180602001604052806000815250611071565b60606000610b2383610d3e565b905060008167ffffffffffffffff811115610b4057610b40611df1565b604051908082528060200260200182016040528015610b69578160200160208202803683370190505b509050600160005b8381108015610b825750600c548211155b15610bec576000610b9283610cde565b9050866001600160a01b0316816001600160a01b031603610bd95782848381518110610bc057610bc06122c3565b602090810291909101015281610bd5816122ef565b9250505b82610be3816122ef565b93505050610b71565b5090949350505050565b610bfe611458565b600b55565b610c0b611458565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b610c37611458565b600a610a1f82826121b5565b60098054610c509061212d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7c9061212d565b8015610cc95780601f10610c9e57610100808354040283529160200191610cc9565b820191906000526020600020905b815481529060010190602001808311610cac57829003601f168201915b505050505081565b60088054610c509061212d565b6000818152600260205260408120546001600160a01b0316806108325760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610965565b60006001600160a01b038216610da85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610965565b506001600160a01b031660009081526003602052604090205490565b610dcc611458565b610dd6600061177a565b565b610de0611458565b6008610a1f82826121b5565b6060600180546108479061212d565b80600081118015610e0e5750600d548111155b610e515760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610965565b600c5481610e5e60075490565b610e689190612308565b1115610ead5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610965565b600e5460ff1615610f005760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610965565b81600b54610f0e919061231b565b341015610f535760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610965565b600e5462010000900460ff161561104257610f6d336117cc565b610fc85760405162461bcd60e51b815260206004820152602660248201527f4275796572206973206e6f7420696e2057686974656c69737420666f72205072604482015265652d53616c6560d01b6064820152608401610965565b60105482610fd533610d3e565b610fdf9190612308565b11156110425760405162461bcd60e51b815260206004820152602c60248201527f42757965722068617320616c7265616479207072652d73616c65206d696e746560448201526b64206d617820746f6b656e7360a01b6064820152608401610965565b610a1f3383611803565b610a1f338383611840565b600a8054610c509061212d565b61106c611458565b600d55565b61107b338361157f565b6110975760405162461bcd60e51b815260040161096590612275565b6110a38484848461190e565b50505050565b6110b1611458565b60005b8151811015610a1f576001600f60008484815181106110d5576110d56122c3565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611111816122ef565b9150506110b4565b611121611458565b600e8054911515620100000262ff000019909216919091179055565b6000818152600260205260409020546060906001600160a01b03166111bc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610965565b600e54610100900460ff16151560000361126257600a80546111dd9061212d565b80601f01602080910402602001604051908101604052809291908181526020018280546112099061212d565b80156112565780601f1061122b57610100808354040283529160200191611256565b820191906000526020600020905b81548152906001019060200180831161123957829003601f168201915b50505050509050919050565b600061126c611941565b9050600081511161128c57604051806020016040528060008152506112ba565b8061129684611950565b60096040516020016112aa93929190612332565b6040516020818303038152906040525b9392505050565b6112c9611458565b601055565b6112d6611458565b600e80549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b816000811180156113315750600d548111155b6113745760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610965565b600c548161138160075490565b61138b9190612308565b11156113d05760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610965565b6113d8611458565b610a068284611803565b6113ea611458565b6001600160a01b03811661144f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610965565b610af88161177a565b6006546001600160a01b03163314610dd65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610965565b6000818152600260205260409020546001600160a01b0316610af85760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610965565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061154682610cde565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061158b83610cde565b9050806001600160a01b0316846001600160a01b031614806115b257506115b281856112f0565b806115d65750836001600160a01b03166115cb846108ca565b6001600160a01b0316145b949350505050565b826001600160a01b03166115f182610cde565b6001600160a01b0316146116555760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610965565b6001600160a01b0382166116b75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610965565b6116c2600082611511565b6001600160a01b03831660009081526003602052604081208054600192906116eb9084906123d2565b90915550506001600160a01b0382166000908152600360205260408120805460019290611719908490612308565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0381166000908152600f602052604081205460ff16806108325750506006546001600160a01b0391821691161490565b60005b81811015610a065761181c600780546001019055565b61182e8361182960075490565b611a51565b80611838816122ef565b915050611806565b816001600160a01b0316836001600160a01b0316036118a15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610965565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6119198484846115de565b61192584848484611a6b565b6110a35760405162461bcd60e51b8152600401610965906123e5565b6060600880546108479061212d565b6060816000036119775750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119a1578061198b816122ef565b915061199a9050600a8361244d565b915061197b565b60008167ffffffffffffffff8111156119bc576119bc611df1565b6040519080825280601f01601f1916602001820160405280156119e6576020820181803683370190505b5090505b84156115d6576119fb6001836123d2565b9150611a08600a86612461565b611a13906030612308565b60f81b818381518110611a2857611a286122c3565b60200101906001600160f81b031916908160001a905350611a4a600a8661244d565b94506119ea565b610a1f828260405180602001604052806000815250611b6c565b60006001600160a01b0384163b15611b6157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611aaf903390899088908890600401612475565b6020604051808303816000875af1925050508015611aea575060408051601f3d908101601f19168201909252611ae7918101906124b2565b60015b611b47573d808015611b18576040519150601f19603f3d011682016040523d82523d6000602084013e611b1d565b606091505b508051600003611b3f5760405162461bcd60e51b8152600401610965906123e5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115d6565b506001949350505050565b611b768383611b9f565b611b836000848484611a6b565b610a065760405162461bcd60e51b8152600401610965906123e5565b6001600160a01b038216611bf55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610965565b6000818152600260205260409020546001600160a01b031615611c5a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610965565b6001600160a01b0382166000908152600360205260408120805460019290611c83908490612308565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80356001600160a01b0381168114611cf857600080fd5b919050565b600060208284031215611d0f57600080fd5b6112ba82611ce1565b6001600160e01b031981168114610af857600080fd5b600060208284031215611d4057600080fd5b81356112ba81611d18565b60005b83811015611d66578181015183820152602001611d4e565b50506000910152565b60008151808452611d87816020860160208601611d4b565b601f01601f19169290920160200192915050565b6020815260006112ba6020830184611d6f565b600060208284031215611dc057600080fd5b5035919050565b60008060408385031215611dda57600080fd5b611de383611ce1565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e3057611e30611df1565b604052919050565b600067ffffffffffffffff831115611e5257611e52611df1565b611e65601f8401601f1916602001611e07565b9050828152838383011115611e7957600080fd5b828260208301376000602084830101529392505050565b600060208284031215611ea257600080fd5b813567ffffffffffffffff811115611eb957600080fd5b8201601f81018413611eca57600080fd5b6115d684823560208401611e38565b80358015158114611cf857600080fd5b600060208284031215611efb57600080fd5b6112ba82611ed9565b600080600060608486031215611f1957600080fd5b611f2284611ce1565b9250611f3060208501611ce1565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b81811015611f7857835183529284019291840191600101611f5c565b50909695505050505050565b60008060408385031215611f9757600080fd5b611fa083611ce1565b9150611fae60208401611ed9565b90509250929050565b60008060008060808587031215611fcd57600080fd5b611fd685611ce1565b9350611fe460208601611ce1565b925060408501359150606085013567ffffffffffffffff81111561200757600080fd5b8501601f8101871361201857600080fd5b61202787823560208401611e38565b91505092959194509250565b6000602080838503121561204657600080fd5b823567ffffffffffffffff8082111561205e57600080fd5b818501915085601f83011261207257600080fd5b81358181111561208457612084611df1565b8060051b9150612095848301611e07565b81815291830184019184810190888411156120af57600080fd5b938501935b838510156120d4576120c585611ce1565b825293850193908501906120b4565b98975050505050505050565b600080604083850312156120f357600080fd5b6120fc83611ce1565b9150611fae60208401611ce1565b6000806040838503121561211d57600080fd5b82359150611fae60208401611ce1565b600181811c9082168061214157607f821691505b60208210810361216157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610a0657600081815260208120601f850160051c8101602086101561218e5750805b601f850160051c820191505b818110156121ad5782815560010161219a565b505050505050565b815167ffffffffffffffff8111156121cf576121cf611df1565b6121e3816121dd845461212d565b84612167565b602080601f83116001811461221857600084156122005750858301515b600019600386901b1c1916600185901b1785556121ad565b600085815260208120601f198616915b8281101561224757888601518255948401946001909101908401612228565b50858210156122655787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612301576123016122d9565b5060010190565b80820180821115610832576108326122d9565b8082028115828204841417610832576108326122d9565b6000845160206123458285838a01611d4b565b8551918401916123588184848a01611d4b565b85549201916000906123698161212d565b600182811680156123815760018114612396576123c2565b60ff19841687528215158302870194506123c2565b896000528560002060005b848110156123ba578154898201529083019087016123a1565b505082870194505b50929a9950505050505050505050565b81810381811115610832576108326122d9565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261245c5761245c612437565b500490565b60008261247057612470612437565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124a890830184611d6f565b9695505050505050565b6000602082840312156124c457600080fd5b81516112ba81611d1856fea264697066735822122013592bad6d4f8e01ea17666a53e9ebebae2aabc60d139381b24b4051bcad5ace64736f6c6343000811003368747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f6261667962656965667474636d686967336334666163336f61726a6a36326761706e7471796574757867746e673676626570696d6765776a3776692f

Deployed Bytecode

0x6080604052600436106102675760003560e01c8063715018a611610144578063c243c6c1116100b6578063d936547e1161007a578063d936547e146106ed578063e0a808531461071d578063e985e9c51461073d578063efbd73f41461075d578063f2fde38b1461077d578063fdea8e0b1461079d57600080fd5b8063c243c6c114610657578063c54e73e314610677578063c87b56dd14610697578063d5abeb01146106b7578063d76fd220146106cd57600080fd5b806395d89b411161010857806395d89b41146105ba578063a0712d68146105cf578063a22cb465146105e2578063a45ba8e714610602578063b071401b14610617578063b88d4fde1461063757600080fd5b8063715018a61461053b5780637ec4a6591461055057806385480756146105705780638da5cb5b1461058657806394354fd0146105a457600080fd5b806342842e0e116101dd57806351830227116101a157806351830227146104985780635503a0e8146104b75780635c975abb146104cc57806362b99ad4146104e65780636352211e146104fb57806370a082311461051b57600080fd5b806342842e0e146103eb578063438b63001461040b57806344a0d68a1461043857806347ee0394146104585780634fdd43cb1461047857600080fd5b806313faede61161022f57806313faede61461033d57806316ba10e01461036157806316c38b3c1461038157806318160ddd146103a157806323b872dd146103b65780633ccfd60b146103d657600080fd5b806301bf66481461026c57806301ffc9a71461028e57806306fdde03146102c3578063081812fc146102e5578063095ea7b31461031d575b600080fd5b34801561027857600080fd5b5061028c610287366004611cfd565b6107bd565b005b34801561029a57600080fd5b506102ae6102a9366004611d2e565b6107e6565b60405190151581526020015b60405180910390f35b3480156102cf57600080fd5b506102d8610838565b6040516102ba9190611d9b565b3480156102f157600080fd5b50610305610300366004611dae565b6108ca565b6040516001600160a01b0390911681526020016102ba565b34801561032957600080fd5b5061028c610338366004611dc7565b6108f1565b34801561034957600080fd5b50610353600b5481565b6040519081526020016102ba565b34801561036d57600080fd5b5061028c61037c366004611e90565b610a0b565b34801561038d57600080fd5b5061028c61039c366004611ee9565b610a23565b3480156103ad57600080fd5b50610353610a3e565b3480156103c257600080fd5b5061028c6103d1366004611f04565b610a4e565b3480156103e257600080fd5b5061028c610a7f565b3480156103f757600080fd5b5061028c610406366004611f04565b610afb565b34801561041757600080fd5b5061042b610426366004611cfd565b610b16565b6040516102ba9190611f40565b34801561044457600080fd5b5061028c610453366004611dae565b610bf6565b34801561046457600080fd5b5061028c610473366004611cfd565b610c03565b34801561048457600080fd5b5061028c610493366004611e90565b610c2f565b3480156104a457600080fd5b50600e546102ae90610100900460ff1681565b3480156104c357600080fd5b506102d8610c43565b3480156104d857600080fd5b50600e546102ae9060ff1681565b3480156104f257600080fd5b506102d8610cd1565b34801561050757600080fd5b50610305610516366004611dae565b610cde565b34801561052757600080fd5b50610353610536366004611cfd565b610d3e565b34801561054757600080fd5b5061028c610dc4565b34801561055c57600080fd5b5061028c61056b366004611e90565b610dd8565b34801561057c57600080fd5b5061035360105481565b34801561059257600080fd5b506006546001600160a01b0316610305565b3480156105b057600080fd5b50610353600d5481565b3480156105c657600080fd5b506102d8610dec565b61028c6105dd366004611dae565b610dfb565b3480156105ee57600080fd5b5061028c6105fd366004611f84565b61104c565b34801561060e57600080fd5b506102d8611057565b34801561062357600080fd5b5061028c610632366004611dae565b611064565b34801561064357600080fd5b5061028c610652366004611fb7565b611071565b34801561066357600080fd5b5061028c610672366004612033565b6110a9565b34801561068357600080fd5b5061028c610692366004611ee9565b611119565b3480156106a357600080fd5b506102d86106b2366004611dae565b61113d565b3480156106c357600080fd5b50610353600c5481565b3480156106d957600080fd5b5061028c6106e8366004611dae565b6112c1565b3480156106f957600080fd5b506102ae610708366004611cfd565b600f6020526000908152604090205460ff1681565b34801561072957600080fd5b5061028c610738366004611ee9565b6112ce565b34801561074957600080fd5b506102ae6107583660046120e0565b6112f0565b34801561076957600080fd5b5061028c61077836600461210a565b61131e565b34801561078957600080fd5b5061028c610798366004611cfd565b6113e2565b3480156107a957600080fd5b50600e546102ae9062010000900460ff1681565b6107c5611458565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b60006001600160e01b031982166380ac58cd60e01b148061081757506001600160e01b03198216635b5e139f60e01b145b8061083257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546108479061212d565b80601f01602080910402602001604051908101604052809291908181526020018280546108739061212d565b80156108c05780601f10610895576101008083540402835291602001916108c0565b820191906000526020600020905b8154815290600101906020018083116108a357829003601f168201915b5050505050905090565b60006108d5826114b2565b506000908152600460205260409020546001600160a01b031690565b60006108fc82610cde565b9050806001600160a01b0316836001600160a01b03160361096e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061098a575061098a81336112f0565b6109fc5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610965565b610a068383611511565b505050565b610a13611458565b6009610a1f82826121b5565b5050565b610a2b611458565b600e805460ff1916911515919091179055565b6000610a4960075490565b905090565b610a58338261157f565b610a745760405162461bcd60e51b815260040161096590612275565b610a068383836115de565b610a87611458565b6000610a9b6006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ae5576040519150601f19603f3d011682016040523d82523d6000602084013e610aea565b606091505b5050905080610af857600080fd5b50565b610a0683838360405180602001604052806000815250611071565b60606000610b2383610d3e565b905060008167ffffffffffffffff811115610b4057610b40611df1565b604051908082528060200260200182016040528015610b69578160200160208202803683370190505b509050600160005b8381108015610b825750600c548211155b15610bec576000610b9283610cde565b9050866001600160a01b0316816001600160a01b031603610bd95782848381518110610bc057610bc06122c3565b602090810291909101015281610bd5816122ef565b9250505b82610be3816122ef565b93505050610b71565b5090949350505050565b610bfe611458565b600b55565b610c0b611458565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b610c37611458565b600a610a1f82826121b5565b60098054610c509061212d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7c9061212d565b8015610cc95780601f10610c9e57610100808354040283529160200191610cc9565b820191906000526020600020905b815481529060010190602001808311610cac57829003601f168201915b505050505081565b60088054610c509061212d565b6000818152600260205260408120546001600160a01b0316806108325760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610965565b60006001600160a01b038216610da85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610965565b506001600160a01b031660009081526003602052604090205490565b610dcc611458565b610dd6600061177a565b565b610de0611458565b6008610a1f82826121b5565b6060600180546108479061212d565b80600081118015610e0e5750600d548111155b610e515760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610965565b600c5481610e5e60075490565b610e689190612308565b1115610ead5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610965565b600e5460ff1615610f005760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610965565b81600b54610f0e919061231b565b341015610f535760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610965565b600e5462010000900460ff161561104257610f6d336117cc565b610fc85760405162461bcd60e51b815260206004820152602660248201527f4275796572206973206e6f7420696e2057686974656c69737420666f72205072604482015265652d53616c6560d01b6064820152608401610965565b60105482610fd533610d3e565b610fdf9190612308565b11156110425760405162461bcd60e51b815260206004820152602c60248201527f42757965722068617320616c7265616479207072652d73616c65206d696e746560448201526b64206d617820746f6b656e7360a01b6064820152608401610965565b610a1f3383611803565b610a1f338383611840565b600a8054610c509061212d565b61106c611458565b600d55565b61107b338361157f565b6110975760405162461bcd60e51b815260040161096590612275565b6110a38484848461190e565b50505050565b6110b1611458565b60005b8151811015610a1f576001600f60008484815181106110d5576110d56122c3565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611111816122ef565b9150506110b4565b611121611458565b600e8054911515620100000262ff000019909216919091179055565b6000818152600260205260409020546060906001600160a01b03166111bc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610965565b600e54610100900460ff16151560000361126257600a80546111dd9061212d565b80601f01602080910402602001604051908101604052809291908181526020018280546112099061212d565b80156112565780601f1061122b57610100808354040283529160200191611256565b820191906000526020600020905b81548152906001019060200180831161123957829003601f168201915b50505050509050919050565b600061126c611941565b9050600081511161128c57604051806020016040528060008152506112ba565b8061129684611950565b60096040516020016112aa93929190612332565b6040516020818303038152906040525b9392505050565b6112c9611458565b601055565b6112d6611458565b600e80549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b816000811180156113315750600d548111155b6113745760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610965565b600c548161138160075490565b61138b9190612308565b11156113d05760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610965565b6113d8611458565b610a068284611803565b6113ea611458565b6001600160a01b03811661144f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610965565b610af88161177a565b6006546001600160a01b03163314610dd65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610965565b6000818152600260205260409020546001600160a01b0316610af85760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610965565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061154682610cde565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061158b83610cde565b9050806001600160a01b0316846001600160a01b031614806115b257506115b281856112f0565b806115d65750836001600160a01b03166115cb846108ca565b6001600160a01b0316145b949350505050565b826001600160a01b03166115f182610cde565b6001600160a01b0316146116555760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610965565b6001600160a01b0382166116b75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610965565b6116c2600082611511565b6001600160a01b03831660009081526003602052604081208054600192906116eb9084906123d2565b90915550506001600160a01b0382166000908152600360205260408120805460019290611719908490612308565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0381166000908152600f602052604081205460ff16806108325750506006546001600160a01b0391821691161490565b60005b81811015610a065761181c600780546001019055565b61182e8361182960075490565b611a51565b80611838816122ef565b915050611806565b816001600160a01b0316836001600160a01b0316036118a15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610965565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6119198484846115de565b61192584848484611a6b565b6110a35760405162461bcd60e51b8152600401610965906123e5565b6060600880546108479061212d565b6060816000036119775750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119a1578061198b816122ef565b915061199a9050600a8361244d565b915061197b565b60008167ffffffffffffffff8111156119bc576119bc611df1565b6040519080825280601f01601f1916602001820160405280156119e6576020820181803683370190505b5090505b84156115d6576119fb6001836123d2565b9150611a08600a86612461565b611a13906030612308565b60f81b818381518110611a2857611a286122c3565b60200101906001600160f81b031916908160001a905350611a4a600a8661244d565b94506119ea565b610a1f828260405180602001604052806000815250611b6c565b60006001600160a01b0384163b15611b6157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611aaf903390899088908890600401612475565b6020604051808303816000875af1925050508015611aea575060408051601f3d908101601f19168201909252611ae7918101906124b2565b60015b611b47573d808015611b18576040519150601f19603f3d011682016040523d82523d6000602084013e611b1d565b606091505b508051600003611b3f5760405162461bcd60e51b8152600401610965906123e5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115d6565b506001949350505050565b611b768383611b9f565b611b836000848484611a6b565b610a065760405162461bcd60e51b8152600401610965906123e5565b6001600160a01b038216611bf55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610965565b6000818152600260205260409020546001600160a01b031615611c5a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610965565b6001600160a01b0382166000908152600360205260408120805460019290611c83908490612308565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80356001600160a01b0381168114611cf857600080fd5b919050565b600060208284031215611d0f57600080fd5b6112ba82611ce1565b6001600160e01b031981168114610af857600080fd5b600060208284031215611d4057600080fd5b81356112ba81611d18565b60005b83811015611d66578181015183820152602001611d4e565b50506000910152565b60008151808452611d87816020860160208601611d4b565b601f01601f19169290920160200192915050565b6020815260006112ba6020830184611d6f565b600060208284031215611dc057600080fd5b5035919050565b60008060408385031215611dda57600080fd5b611de383611ce1565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e3057611e30611df1565b604052919050565b600067ffffffffffffffff831115611e5257611e52611df1565b611e65601f8401601f1916602001611e07565b9050828152838383011115611e7957600080fd5b828260208301376000602084830101529392505050565b600060208284031215611ea257600080fd5b813567ffffffffffffffff811115611eb957600080fd5b8201601f81018413611eca57600080fd5b6115d684823560208401611e38565b80358015158114611cf857600080fd5b600060208284031215611efb57600080fd5b6112ba82611ed9565b600080600060608486031215611f1957600080fd5b611f2284611ce1565b9250611f3060208501611ce1565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b81811015611f7857835183529284019291840191600101611f5c565b50909695505050505050565b60008060408385031215611f9757600080fd5b611fa083611ce1565b9150611fae60208401611ed9565b90509250929050565b60008060008060808587031215611fcd57600080fd5b611fd685611ce1565b9350611fe460208601611ce1565b925060408501359150606085013567ffffffffffffffff81111561200757600080fd5b8501601f8101871361201857600080fd5b61202787823560208401611e38565b91505092959194509250565b6000602080838503121561204657600080fd5b823567ffffffffffffffff8082111561205e57600080fd5b818501915085601f83011261207257600080fd5b81358181111561208457612084611df1565b8060051b9150612095848301611e07565b81815291830184019184810190888411156120af57600080fd5b938501935b838510156120d4576120c585611ce1565b825293850193908501906120b4565b98975050505050505050565b600080604083850312156120f357600080fd5b6120fc83611ce1565b9150611fae60208401611ce1565b6000806040838503121561211d57600080fd5b82359150611fae60208401611ce1565b600181811c9082168061214157607f821691505b60208210810361216157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610a0657600081815260208120601f850160051c8101602086101561218e5750805b601f850160051c820191505b818110156121ad5782815560010161219a565b505050505050565b815167ffffffffffffffff8111156121cf576121cf611df1565b6121e3816121dd845461212d565b84612167565b602080601f83116001811461221857600084156122005750858301515b600019600386901b1c1916600185901b1785556121ad565b600085815260208120601f198616915b8281101561224757888601518255948401946001909101908401612228565b50858210156122655787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612301576123016122d9565b5060010190565b80820180821115610832576108326122d9565b8082028115828204841417610832576108326122d9565b6000845160206123458285838a01611d4b565b8551918401916123588184848a01611d4b565b85549201916000906123698161212d565b600182811680156123815760018114612396576123c2565b60ff19841687528215158302870194506123c2565b896000528560002060005b848110156123ba578154898201529083019087016123a1565b505082870194505b50929a9950505050505050505050565b81810381811115610832576108326122d9565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261245c5761245c612437565b500490565b60008261247057612470612437565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124a890830184611d6f565b9695505050505050565b6000602082840312156124c457600080fd5b81516112ba81611d1856fea264697066735822122013592bad6d4f8e01ea17666a53e9ebebae2aabc60d139381b24b4051bcad5ace64736f6c63430008110033

Deployed Bytecode Sourcemap

39788:5096:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43899:102;;;;;;;;;;-1:-1:-1;43899:102:0;;;;;:::i;:::-;;:::i;:::-;;26432:305;;;;;;;;;;-1:-1:-1;26432:305:0;;;;;:::i;:::-;;:::i;:::-;;;934:14:1;;927:22;909:41;;897:2;882:18;26432:305:0;;;;;;;;27362:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28883:172::-;;;;;;;;;;-1:-1:-1;28883:172:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2066:32:1;;;2048:51;;2036:2;2021:18;28883:172:0;1902:203:1;28397:419:0;;;;;;;;;;-1:-1:-1;28397:419:0;;;;;:::i;:::-;;:::i;40140:32::-;;;;;;;;;;;;;;;;;;;2515:25:1;;;2503:2;2488:18;40140:32:0;2369:177:1;44142:100:0;;;;;;;;;;-1:-1:-1;44142:100:0;;;;;:::i;:::-;;:::i;44249:77::-;;;;;;;;;;-1:-1:-1;44249:77:0;;;;;:::i;:::-;;:::i;40793:89::-;;;;;;;;;;;;;:::i;29587:337::-;;;;;;;;;;-1:-1:-1;29587:337:0;;;;;:::i;:::-;;:::i;44333:226::-;;;;;;;;;;;;;:::i;29996:185::-;;;;;;;;;;-1:-1:-1;29996:185:0;;;;;:::i;:::-;;:::i;41718:640::-;;;;;;;;;;-1:-1:-1;41718:640:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42956:74::-;;;;;;;;;;-1:-1:-1;42956:74:0;;;;;:::i;:::-;;:::i;43623:96::-;;;;;;;;;;-1:-1:-1;43623:96:0;;;;;:::i;:::-;;:::i;43174:132::-;;;;;;;;;;-1:-1:-1;43174:132:0;;;;;:::i;:::-;;:::i;40288:28::-;;;;;;;;;;-1:-1:-1;40288:28:0;;;;;;;;;;;40063:33;;;;;;;;;;;;;:::i;40257:26::-;;;;;;;;;;-1:-1:-1;40257:26:0;;;;;;;;39941:117;;;;;;;;;;;;;:::i;27072:222::-;;;;;;;;;;-1:-1:-1;27072:222:0;;;;;:::i;:::-;;:::i;26802:207::-;;;;;;;;;;-1:-1:-1;26802:207:0;;;;;:::i;:::-;;:::i;6885:103::-;;;;;;;;;;;;;:::i;43313:100::-;;;;;;;;;;-1:-1:-1;43313:100:0;;;;;:::i;:::-;;:::i;40405:39::-;;;;;;;;;;;;;;;;6235:87;;;;;;;;;;-1:-1:-1;6308:6:0;;-1:-1:-1;;;;;6308:6:0;6235:87;;40212:37;;;;;;;;;;;;;;;;27532:104;;;;;;;;;;;;;:::i;40889:660::-;;;;;;:::i;:::-;;:::i;29128:155::-;;;;;;;;;;-1:-1:-1;29128:155:0;;;;;:::i;:::-;;:::i;40101:31::-;;;;;;;;;;;;;:::i;43037:130::-;;;;;;;;;;-1:-1:-1;43037:130:0;;;;;:::i;:::-;;:::i;30253:323::-;;;;;;;;;;-1:-1:-1;30253:323:0;;;;;:::i;:::-;;:::i;43726:166::-;;;;;;;;;;-1:-1:-1;43726:166:0;;;;;:::i;:::-;;:::i;43422:81::-;;;;;;;;;;-1:-1:-1;43422:81:0;;;;;:::i;:::-;;:::i;42365:496::-;;;;;;;;;;-1:-1:-1;42365:496:0;;;;;:::i;:::-;;:::i;40177:30::-;;;;;;;;;;;;;;;;43510:106;;;;;;;;;;-1:-1:-1;43510:106:0;;;;;:::i;:::-;;:::i;40357:43::-;;;;;;;;;;-1:-1:-1;40357:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42868:81;;;;;;;;;;-1:-1:-1;42868:81:0;;;;;:::i;:::-;;:::i;29355:164::-;;;;;;;;;;-1:-1:-1;29355:164:0;;;;;:::i;:::-;;:::i;41556:155::-;;;;;;;;;;-1:-1:-1;41556:155:0;;;;;:::i;:::-;;:::i;7144:201::-;;;;;;;;;;-1:-1:-1;7144:201:0;;;;;:::i;:::-;;:::i;40324:27::-;;;;;;;;;;-1:-1:-1;40324:27:0;;;;;;;;;;;43899:102;6120:13;:11;:13::i;:::-;-1:-1:-1;;;;;43969:18:0::1;43990:5;43969:18:::0;;;:11:::1;:18;::::0;;;;:26;;-1:-1:-1;;43969:26:0::1;::::0;;43899:102::o;26432:305::-;26534:4;-1:-1:-1;;;;;;26571:40:0;;-1:-1:-1;;;26571:40:0;;:105;;-1:-1:-1;;;;;;;26628:48:0;;-1:-1:-1;;;26628:48:0;26571:105;:158;;;-1:-1:-1;;;;;;;;;;19238:40:0;;;26693:36;26551:178;26432:305;-1:-1:-1;;26432:305:0:o;27362:100::-;27416:13;27449:5;27442:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27362:100;:::o;28883:172::-;28959:7;28979:23;28994:7;28979:14;:23::i;:::-;-1:-1:-1;29023:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;29023:24:0;;28883:172::o;28397:419::-;28478:13;28494:23;28509:7;28494:14;:23::i;:::-;28478:39;;28542:5;-1:-1:-1;;;;;28536:11:0;:2;-1:-1:-1;;;;;28536:11:0;;28528:57;;;;-1:-1:-1;;;28528:57:0;;8150:2:1;28528:57:0;;;8132:21:1;8189:2;8169:18;;;8162:30;8228:34;8208:18;;;8201:62;-1:-1:-1;;;8279:18:1;;;8272:31;8320:19;;28528:57:0;;;;;;;;;4855:10;-1:-1:-1;;;;;28621:21:0;;;;:62;;-1:-1:-1;28646:37:0;28663:5;4855:10;29355:164;:::i;28646:37::-;28599:174;;;;-1:-1:-1;;;28599:174:0;;8552:2:1;28599:174:0;;;8534:21:1;8591:2;8571:18;;;8564:30;8630:34;8610:18;;;8603:62;8701:32;8681:18;;;8674:60;8751:19;;28599:174:0;8350:426:1;28599:174:0;28787:21;28796:2;28800:7;28787:8;:21::i;:::-;28467:349;28397:419;;:::o;44142:100::-;6120:13;:11;:13::i;:::-;44214:9:::1;:22;44226:10:::0;44214:9;:22:::1;:::i;:::-;;44142:100:::0;:::o;44249:77::-;6120:13;:11;:13::i;:::-;44305:6:::1;:15:::0;;-1:-1:-1;;44305:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44249:77::o;40793:89::-;40837:7;40860:16;:6;1080:14;;988:114;40860:16;40853:23;;40793:89;:::o;29587:337::-;29782:41;4855:10;29815:7;29782:18;:41::i;:::-;29774:100;;;;-1:-1:-1;;;29774:100:0;;;;;;;:::i;:::-;29888:28;29898:4;29904:2;29908:7;29888:9;:28::i;44333:226::-;6120:13;:11;:13::i;:::-;44381:7:::1;44402;6308:6:::0;;-1:-1:-1;;;;;6308:6:0;;6235:87;44402:7:::1;-1:-1:-1::0;;;;;44394:21:0::1;44423;44394:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44380:69;;;44464:2;44456:11;;;::::0;::::1;;44370:189;44333:226::o:0;29996:185::-;30134:39;30151:4;30157:2;30161:7;30134:39;;;;;;;;;;;;:16;:39::i;41718:640::-;41793:16;41821:23;41847:17;41857:6;41847:9;:17::i;:::-;41821:43;;41871:30;41918:15;41904:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41904:30:0;-1:-1:-1;41871:63:0;-1:-1:-1;41966:1:0;41941:22;42011:312;42036:15;42018;:33;:64;;;;;42073:9;;42055:14;:27;;42018:64;42011:312;;;42093:25;42121:23;42129:14;42121:7;:23::i;:::-;42093:51;;42181:6;-1:-1:-1;;;;;42160:27:0;:17;-1:-1:-1;;;;;42160:27:0;;42156:132;;42233:14;42200:13;42214:15;42200:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;42261:17;;;;:::i;:::-;;;;42156:132;42299:16;;;;:::i;:::-;;;;42084:239;42011:312;;;-1:-1:-1;42339:13:0;;41718:640;-1:-1:-1;;;;41718:640:0:o;42956:74::-;6120:13;:11;:13::i;:::-;43012:4:::1;:12:::0;42956:74::o;43623:96::-;6120:13;:11;:13::i;:::-;-1:-1:-1;;;;;43688:18:0::1;;::::0;;;:11:::1;:18;::::0;;;;:25;;-1:-1:-1;;43688:25:0::1;43709:4;43688:25;::::0;;43623:96::o;43174:132::-;6120:13;:11;:13::i;:::-;43262:17:::1;:38;43282:18:::0;43262:17;:38:::1;:::i;40063:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39941:117::-;;;;;;;:::i;27072:222::-;27144:7;27180:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27180:16:0;;27207:56;;;;-1:-1:-1;;;27207:56:0;;12216:2:1;27207:56:0;;;12198:21:1;12255:2;12235:18;;;12228:30;-1:-1:-1;;;12274:18:1;;;12267:54;12338:18;;27207:56:0;12014:348:1;26802:207:0;26874:7;-1:-1:-1;;;;;26902:19:0;;26894:73;;;;-1:-1:-1;;;26894:73:0;;12569:2:1;26894:73:0;;;12551:21:1;12608:2;12588:18;;;12581:30;12647:34;12627:18;;;12620:62;-1:-1:-1;;;12698:18:1;;;12691:39;12747:19;;26894:73:0;12367:405:1;26894:73:0;-1:-1:-1;;;;;;26985:16:0;;;;;:9;:16;;;;;;;26802:207::o;6885:103::-;6120:13;:11;:13::i;:::-;6950:30:::1;6977:1;6950:18;:30::i;:::-;6885:103::o:0;43313:100::-;6120:13;:11;:13::i;:::-;43385:9:::1;:22;43397:10:::0;43385:9;:22:::1;:::i;27532:104::-:0;27588:13;27621:7;27614:14;;;;;:::i;40889:660::-;40954:11;40626:1;40612:11;:15;:52;;;;;40646:18;;40631:11;:33;;40612:52;40604:85;;;;-1:-1:-1;;;40604:85:0;;12979:2:1;40604:85:0;;;12961:21:1;13018:2;12998:18;;;12991:30;-1:-1:-1;;;13037:18:1;;;13030:50;13097:18;;40604:85:0;12777:344:1;40604:85:0;40738:9;;40723:11;40704:16;:6;1080:14;;988:114;40704:16;:30;;;;:::i;:::-;:43;;40696:76;;;;-1:-1:-1;;;40696:76:0;;13458:2:1;40696:76:0;;;13440:21:1;13497:2;13477:18;;;13470:30;-1:-1:-1;;;13516:18:1;;;13509:50;13576:18;;40696:76:0;13256:344:1;40696:76:0;40983:6:::1;::::0;::::1;;40982:7;40974:43;;;::::0;-1:-1:-1;;;40974:43:0;;13807:2:1;40974:43:0::1;::::0;::::1;13789:21:1::0;13846:2;13826:18;;;13819:30;13885:25;13865:18;;;13858:53;13928:18;;40974:43:0::1;13605:347:1::0;40974:43:0::1;41052:11;41045:4;;:18;;;;:::i;:::-;41032:9;:31;;41024:63;;;::::0;-1:-1:-1;;;41024:63:0;;14332:2:1;41024:63:0::1;::::0;::::1;14314:21:1::0;14371:2;14351:18;;;14344:30;-1:-1:-1;;;14390:18:1;;;14383:49;14449:18;;41024:63:0::1;14130:343:1::0;41024:63:0::1;41183:7;::::0;;;::::1;;;41179:320;;;41209:25;41223:10;41209:13;:25::i;:::-;41203:109;;41252:48;::::0;-1:-1:-1;;;41252:48:0;;14680:2:1;41252:48:0::1;::::0;::::1;14662:21:1::0;14719:2;14699:18;;;14692:30;14758:34;14738:18;;;14731:62;-1:-1:-1;;;14809:18:1;;;14802:36;14855:19;;41252:48:0::1;14478:402:1::0;41203:109:0::1;41402:20;;41388:11;41366:21;41376:10;41366:9;:21::i;:::-;:33;;;;:::i;:::-;:56;41361:130;;;41437:54;::::0;-1:-1:-1;;;41437:54:0;;15087:2:1;41437:54:0::1;::::0;::::1;15069:21:1::0;15126:2;15106:18;;;15099:30;15165:34;15145:18;;;15138:62;-1:-1:-1;;;15216:18:1;;;15209:42;15268:19;;41437:54:0::1;14885:408:1::0;41361:130:0::1;41509:34;41519:10;41531:11;41509:9;:34::i;29128:155::-:0;29223:52;4855:10;29256:8;29266;29223:18;:52::i;40101:31::-;;;;;;;:::i;43037:130::-;6120:13;:11;:13::i;:::-;43121:18:::1;:40:::0;43037:130::o;30253:323::-;30427:41;4855:10;30460:7;30427:18;:41::i;:::-;30419:100;;;;-1:-1:-1;;;30419:100:0;;;;;;;:::i;:::-;30530:38;30544:4;30550:2;30554:7;30563:4;30530:13;:38::i;:::-;30253:323;;;;:::o;43726:166::-;6120:13;:11;:13::i;:::-;43811:9:::1;43806:79;43826:6;:13;43823:1;:16;43806:79;;;43881:4;43856:11;:22;43868:6;43875:1;43868:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43856:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43856:22:0;:29;;-1:-1:-1;;43856:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43840:3;::::1;::::0;::::1;:::i;:::-;;;;43806:79;;43422:81:::0;6120:13;:11;:13::i;:::-;43481:7:::1;:16:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;43481:16:0;;::::1;::::0;;;::::1;::::0;;43422:81::o;42365:496::-;32150:4;32174:16;;;:7;:16;;;;;;42464:13;;-1:-1:-1;;;;;32174:16:0;42489:98;;;;-1:-1:-1;;;42489:98:0;;15500:2:1;42489:98:0;;;15482:21:1;15539:2;15519:18;;;15512:30;15578:34;15558:18;;;15551:62;-1:-1:-1;;;15629:18:1;;;15622:45;15684:19;;42489:98:0;15298:411:1;42489:98:0;42601:8;;;;;;;:17;;42613:5;42601:17;42597:64;;42636:17;42629:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42365:496;;;:::o;42597:64::-;42670:28;42701:10;:8;:10::i;:::-;42670:41;;42756:1;42731:14;42725:28;:32;:130;;;;;;;;;;;;;;;;;42793:14;42809:19;:8;:17;:19::i;:::-;42830:9;42776:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42725:130;42718:137;42365:496;-1:-1:-1;;;42365:496:0:o;43510:106::-;6120:13;:11;:13::i;:::-;43583:20:::1;:27:::0;43510:106::o;42868:81::-;6120:13;:11;:13::i;:::-;42926:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;42926:17:0;;::::1;::::0;;;::::1;::::0;;42868:81::o;29355:164::-;-1:-1:-1;;;;;29476:25:0;;;29452:4;29476:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29355:164::o;41556:155::-;41642:11;40626:1;40612:11;:15;:52;;;;;40646:18;;40631:11;:33;;40612:52;40604:85;;;;-1:-1:-1;;;40604:85:0;;12979:2:1;40604:85:0;;;12961:21:1;13018:2;12998:18;;;12991:30;-1:-1:-1;;;13037:18:1;;;13030:50;13097:18;;40604:85:0;12777:344:1;40604:85:0;40738:9;;40723:11;40704:16;:6;1080:14;;988:114;40704:16;:30;;;;:::i;:::-;:43;;40696:76;;;;-1:-1:-1;;;40696:76:0;;13458:2:1;40696:76:0;;;13440:21:1;13497:2;13477:18;;;13470:30;-1:-1:-1;;;13516:18:1;;;13509:50;13576:18;;40696:76:0;13256:344:1;40696:76:0;6120:13:::1;:11;:13::i;:::-;41672:33:::2;41682:9;41693:11;41672:9;:33::i;7144:201::-:0;6120:13;:11;:13::i;:::-;-1:-1:-1;;;;;7233:22:0;::::1;7225:73;;;::::0;-1:-1:-1;;;7225:73:0;;17177:2:1;7225:73:0::1;::::0;::::1;17159:21:1::0;17216:2;17196:18;;;17189:30;17255:34;17235:18;;;17228:62;-1:-1:-1;;;17306:18:1;;;17299:36;17352:19;;7225:73:0::1;16975:402:1::0;7225:73:0::1;7309:28;7328:8;7309:18;:28::i;6401:132::-:0;6308:6;;-1:-1:-1;;;;;6308:6:0;4855:10;6465:23;6457:68;;;;-1:-1:-1;;;6457:68:0;;17584:2:1;6457:68:0;;;17566:21:1;;;17603:18;;;17596:30;17662:34;17642:18;;;17635:62;17714:18;;6457:68:0;17382:356:1;36890:135:0;32150:4;32174:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32174:16:0;36964:53;;;;-1:-1:-1;;;36964:53:0;;12216:2:1;36964:53:0;;;12198:21:1;12255:2;12235:18;;;12228:30;-1:-1:-1;;;12274:18:1;;;12267:54;12338:18;;36964:53:0;12014:348:1;36167:174:0;36242:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36242:29:0;-1:-1:-1;;;;;36242:29:0;;;;;;;;:24;;36296:23;36242:24;36296:14;:23::i;:::-;-1:-1:-1;;;;;36287:46:0;;;;;;;;;;;36167:174;;:::o;32380:264::-;32473:4;32490:13;32506:23;32521:7;32506:14;:23::i;:::-;32490:39;;32559:5;-1:-1:-1;;;;;32548:16:0;:7;-1:-1:-1;;;;;32548:16:0;;:52;;;;32568:32;32585:5;32592:7;32568:16;:32::i;:::-;32548:87;;;;32628:7;-1:-1:-1;;;;;32604:31:0;:20;32616:7;32604:11;:20::i;:::-;-1:-1:-1;;;;;32604:31:0;;32548:87;32540:96;32380:264;-1:-1:-1;;;;32380:264:0:o;35417:630::-;35576:4;-1:-1:-1;;;;;35549:31:0;:23;35564:7;35549:14;:23::i;:::-;-1:-1:-1;;;;;35549:31:0;;35541:81;;;;-1:-1:-1;;;35541:81:0;;17945:2:1;35541:81:0;;;17927:21:1;17984:2;17964:18;;;17957:30;18023:34;18003:18;;;17996:62;-1:-1:-1;;;18074:18:1;;;18067:35;18119:19;;35541:81:0;17743:401:1;35541:81:0;-1:-1:-1;;;;;35641:16:0;;35633:65;;;;-1:-1:-1;;;35633:65:0;;18351:2:1;35633:65:0;;;18333:21:1;18390:2;18370:18;;;18363:30;18429:34;18409:18;;;18402:62;-1:-1:-1;;;18480:18:1;;;18473:34;18524:19;;35633:65:0;18149:400:1;35633:65:0;35817:29;35834:1;35838:7;35817:8;:29::i;:::-;-1:-1:-1;;;;;35860:15:0;;;;;;:9;:15;;;;;:20;;35879:1;;35860:15;:20;;35879:1;;35860:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35891:13:0;;;;;;:9;:13;;;;;:18;;35908:1;;35891:13;:18;;35908:1;;35891:18;:::i;:::-;;;;-1:-1:-1;;35920:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35920:21:0;-1:-1:-1;;;;;35920:21:0;;;;;;;;;35960:27;;35920:16;;35960:27;;;;;;;28467:349;28397:419;;:::o;7506:191::-;7599:6;;;-1:-1:-1;;;;;7616:17:0;;;-1:-1:-1;;;;;;7616:17:0;;;;;;;7649:40;;7599:6;;;7616:17;7599:6;;7649:40;;7580:16;;7649:40;7569:128;7506:191;:::o;44008:127::-;-1:-1:-1;;;;;44090:18:0;;44068:4;44090:18;;;:11;:18;;;;;;;;;:39;;-1:-1:-1;;6308:6:0;;-1:-1:-1;;;;;44113:16:0;;;6308:6;;44113:16;;44008:127::o;44566:204::-;44646:9;44641:124;44665:11;44661:1;:15;44641:124;;;44692:18;:6;1200:19;;1218:1;1200:19;;;1111:127;44692:18;44719:38;44729:9;44740:16;:6;1080:14;;988:114;44740:16;44719:9;:38::i;:::-;44678:3;;;;:::i;:::-;;;;44641:124;;36485:315;36640:8;-1:-1:-1;;;;;36631:17:0;:5;-1:-1:-1;;;;;36631:17:0;;36623:55;;;;-1:-1:-1;;;36623:55:0;;18889:2:1;36623:55:0;;;18871:21:1;18928:2;18908:18;;;18901:30;18967:27;18947:18;;;18940:55;19012:18;;36623:55:0;18687:349:1;36623:55:0;-1:-1:-1;;;;;36689:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36689:46:0;;;;;;;;;;36751:41;;909::1;;;36751::0;;882:18:1;36751:41:0;;;;;;;36485:315;;;:::o;31458:313::-;31614:28;31624:4;31630:2;31634:7;31614:9;:28::i;:::-;31661:47;31684:4;31690:2;31694:7;31703:4;31661:22;:47::i;:::-;31653:110;;;;-1:-1:-1;;;31653:110:0;;;;;;;:::i;44777:104::-;44837:13;44866:9;44859:16;;;;;:::i;2020:724::-;2076:13;2298:5;2307:1;2298:10;2294:53;;-1:-1:-1;;2325:10:0;;;;;;;;;;;;-1:-1:-1;;;2325:10:0;;;;;2020:724::o;2294:53::-;2372:5;2357:12;2413:78;2420:9;;2413:78;;2446:8;;;;:::i;:::-;;-1:-1:-1;2469:10:0;;-1:-1:-1;2477:2:0;2469:10;;:::i;:::-;;;2413:78;;;2501:19;2533:6;2523:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2523:17:0;;2501:39;;2551:154;2558:10;;2551:154;;2585:11;2595:1;2585:11;;:::i;:::-;;-1:-1:-1;2654:10:0;2662:2;2654:5;:10;:::i;:::-;2641:24;;:2;:24;:::i;:::-;2628:39;;2611:6;2618;2611:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2611:56:0;;;;;;;;-1:-1:-1;2682:11:0;2691:2;2682:11;;:::i;:::-;;;2551:154;;32987:110;33063:26;33073:2;33077:7;33063:26;;;;;;;;;;;;:9;:26::i;37590:853::-;37744:4;-1:-1:-1;;;;;37765:13:0;;9238:19;:23;37761:675;;37801:71;;-1:-1:-1;;;37801:71:0;;-1:-1:-1;;;;;37801:36:0;;;;;:71;;4855:10;;37852:4;;37858:7;;37867:4;;37801:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37801:71:0;;;;;;;;-1:-1:-1;;37801:71:0;;;;;;;;;;;;:::i;:::-;;;37797:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38042:6;:13;38059:1;38042:18;38038:328;;38085:60;;-1:-1:-1;;;38085:60:0;;;;;;;:::i;38038:328::-;38316:6;38310:13;38301:6;38297:2;38293:15;38286:38;37797:584;-1:-1:-1;;;;;;37923:51:0;-1:-1:-1;;;37923:51:0;;-1:-1:-1;37916:58:0;;37761:675;-1:-1:-1;38420:4:0;37590:853;;;;;;:::o;33325:319::-;33454:18;33460:2;33464:7;33454:5;:18::i;:::-;33505:53;33536:1;33540:2;33544:7;33553:4;33505:22;:53::i;:::-;33483:153;;;;-1:-1:-1;;;33483:153:0;;;;;;;:::i;33981:443::-;-1:-1:-1;;;;;34061:16:0;;34053:61;;;;-1:-1:-1;;;34053:61:0;;20784:2:1;34053:61:0;;;20766:21:1;;;20803:18;;;20796:30;20862:34;20842:18;;;20835:62;20914:18;;34053:61:0;20582:356:1;34053:61:0;32150:4;32174:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32174:16:0;:30;34125:58;;;;-1:-1:-1;;;34125:58:0;;21145:2:1;34125:58:0;;;21127:21:1;21184:2;21164:18;;;21157:30;21223;21203:18;;;21196:58;21271:18;;34125:58:0;20943:352:1;34125:58:0;-1:-1:-1;;;;;34256:13:0;;;;;;:9;:13;;;;;:18;;34273:1;;34256:13;:18;;34273:1;;34256:18;:::i;:::-;;;;-1:-1:-1;;34285:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34285:21:0;-1:-1:-1;;;;;34285:21:0;;;;;;;;34325:33;;34285:16;;;34325:33;;34285:16;;34325:33;44214:22:::1;44142:100:::0;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:131::-;-1:-1:-1;;;;;;457:32:1;;447:43;;437:71;;504:1;501;494:12;519:245;577:6;630:2;618:9;609:7;605:23;601:32;598:52;;;646:1;643;636:12;598:52;685:9;672:23;704:30;728:5;704:30;:::i;961:250::-;1046:1;1056:113;1070:6;1067:1;1064:13;1056:113;;;1146:11;;;1140:18;1127:11;;;1120:39;1092:2;1085:10;1056:113;;;-1:-1:-1;;1203:1:1;1185:16;;1178:27;961:250::o;1216:271::-;1258:3;1296:5;1290:12;1323:6;1318:3;1311:19;1339:76;1408:6;1401:4;1396:3;1392:14;1385:4;1378:5;1374:16;1339:76;:::i;:::-;1469:2;1448:15;-1:-1:-1;;1444:29:1;1435:39;;;;1476:4;1431:50;;1216:271;-1:-1:-1;;1216:271:1:o;1492:220::-;1641:2;1630:9;1623:21;1604:4;1661:45;1702:2;1691:9;1687:18;1679:6;1661:45;:::i;1717:180::-;1776:6;1829:2;1817:9;1808:7;1804:23;1800:32;1797:52;;;1845:1;1842;1835:12;1797:52;-1:-1:-1;1868:23:1;;1717:180;-1:-1:-1;1717:180:1:o;2110:254::-;2178:6;2186;2239:2;2227:9;2218:7;2214:23;2210:32;2207:52;;;2255:1;2252;2245:12;2207:52;2278:29;2297:9;2278:29;:::i;:::-;2268:39;2354:2;2339:18;;;;2326:32;;-1:-1:-1;;;2110:254:1:o;2551:127::-;2612:10;2607:3;2603:20;2600:1;2593:31;2643:4;2640:1;2633:15;2667:4;2664:1;2657:15;2683:275;2754:2;2748:9;2819:2;2800:13;;-1:-1:-1;;2796:27:1;2784:40;;2854:18;2839:34;;2875:22;;;2836:62;2833:88;;;2901:18;;:::i;:::-;2937:2;2930:22;2683:275;;-1:-1:-1;2683:275:1:o;2963:407::-;3028:5;3062:18;3054:6;3051:30;3048:56;;;3084:18;;:::i;:::-;3122:57;3167:2;3146:15;;-1:-1:-1;;3142:29:1;3173:4;3138:40;3122:57;:::i;:::-;3113:66;;3202:6;3195:5;3188:21;3242:3;3233:6;3228:3;3224:16;3221:25;3218:45;;;3259:1;3256;3249:12;3218:45;3308:6;3303:3;3296:4;3289:5;3285:16;3272:43;3362:1;3355:4;3346:6;3339:5;3335:18;3331:29;3324:40;2963:407;;;;;:::o;3375:451::-;3444:6;3497:2;3485:9;3476:7;3472:23;3468:32;3465:52;;;3513:1;3510;3503:12;3465:52;3553:9;3540:23;3586:18;3578:6;3575:30;3572:50;;;3618:1;3615;3608:12;3572:50;3641:22;;3694:4;3686:13;;3682:27;-1:-1:-1;3672:55:1;;3723:1;3720;3713:12;3672:55;3746:74;3812:7;3807:2;3794:16;3789:2;3785;3781:11;3746:74;:::i;3831:160::-;3896:20;;3952:13;;3945:21;3935:32;;3925:60;;3981:1;3978;3971:12;3996:180;4052:6;4105:2;4093:9;4084:7;4080:23;4076:32;4073:52;;;4121:1;4118;4111:12;4073:52;4144:26;4160:9;4144:26;:::i;4181:328::-;4258:6;4266;4274;4327:2;4315:9;4306:7;4302:23;4298:32;4295:52;;;4343:1;4340;4333:12;4295:52;4366:29;4385:9;4366:29;:::i;:::-;4356:39;;4414:38;4448:2;4437:9;4433:18;4414:38;:::i;:::-;4404:48;;4499:2;4488:9;4484:18;4471:32;4461:42;;4181:328;;;;;:::o;4514:632::-;4685:2;4737:21;;;4807:13;;4710:18;;;4829:22;;;4656:4;;4685:2;4908:15;;;;4882:2;4867:18;;;4656:4;4951:169;4965:6;4962:1;4959:13;4951:169;;;5026:13;;5014:26;;5095:15;;;;5060:12;;;;4987:1;4980:9;4951:169;;;-1:-1:-1;5137:3:1;;4514:632;-1:-1:-1;;;;;;4514:632:1:o;5151:254::-;5216:6;5224;5277:2;5265:9;5256:7;5252:23;5248:32;5245:52;;;5293:1;5290;5283:12;5245:52;5316:29;5335:9;5316:29;:::i;:::-;5306:39;;5364:35;5395:2;5384:9;5380:18;5364:35;:::i;:::-;5354:45;;5151:254;;;;;:::o;5410:667::-;5505:6;5513;5521;5529;5582:3;5570:9;5561:7;5557:23;5553:33;5550:53;;;5599:1;5596;5589:12;5550:53;5622:29;5641:9;5622:29;:::i;:::-;5612:39;;5670:38;5704:2;5693:9;5689:18;5670:38;:::i;:::-;5660:48;;5755:2;5744:9;5740:18;5727:32;5717:42;;5810:2;5799:9;5795:18;5782:32;5837:18;5829:6;5826:30;5823:50;;;5869:1;5866;5859:12;5823:50;5892:22;;5945:4;5937:13;;5933:27;-1:-1:-1;5923:55:1;;5974:1;5971;5964:12;5923:55;5997:74;6063:7;6058:2;6045:16;6040:2;6036;6032:11;5997:74;:::i;:::-;5987:84;;;5410:667;;;;;;;:::o;6082:952::-;6166:6;6197:2;6240;6228:9;6219:7;6215:23;6211:32;6208:52;;;6256:1;6253;6246:12;6208:52;6296:9;6283:23;6325:18;6366:2;6358:6;6355:14;6352:34;;;6382:1;6379;6372:12;6352:34;6420:6;6409:9;6405:22;6395:32;;6465:7;6458:4;6454:2;6450:13;6446:27;6436:55;;6487:1;6484;6477:12;6436:55;6523:2;6510:16;6545:2;6541;6538:10;6535:36;;;6551:18;;:::i;:::-;6597:2;6594:1;6590:10;6580:20;;6620:28;6644:2;6640;6636:11;6620:28;:::i;:::-;6682:15;;;6752:11;;;6748:20;;;6713:12;;;;6780:19;;;6777:39;;;6812:1;6809;6802:12;6777:39;6836:11;;;;6856:148;6872:6;6867:3;6864:15;6856:148;;;6938:23;6957:3;6938:23;:::i;:::-;6926:36;;6889:12;;;;6982;;;;6856:148;;;7023:5;6082:952;-1:-1:-1;;;;;;;;6082:952:1:o;7039:260::-;7107:6;7115;7168:2;7156:9;7147:7;7143:23;7139:32;7136:52;;;7184:1;7181;7174:12;7136:52;7207:29;7226:9;7207:29;:::i;:::-;7197:39;;7255:38;7289:2;7278:9;7274:18;7255:38;:::i;7304:254::-;7372:6;7380;7433:2;7421:9;7412:7;7408:23;7404:32;7401:52;;;7449:1;7446;7439:12;7401:52;7485:9;7472:23;7462:33;;7514:38;7548:2;7537:9;7533:18;7514:38;:::i;7563:380::-;7642:1;7638:12;;;;7685;;;7706:61;;7760:4;7752:6;7748:17;7738:27;;7706:61;7813:2;7805:6;7802:14;7782:18;7779:38;7776:161;;7859:10;7854:3;7850:20;7847:1;7840:31;7894:4;7891:1;7884:15;7922:4;7919:1;7912:15;7776:161;;7563:380;;;:::o;8907:545::-;9009:2;9004:3;9001:11;8998:448;;;9045:1;9070:5;9066:2;9059:17;9115:4;9111:2;9101:19;9185:2;9173:10;9169:19;9166:1;9162:27;9156:4;9152:38;9221:4;9209:10;9206:20;9203:47;;;-1:-1:-1;9244:4:1;9203:47;9299:2;9294:3;9290:12;9287:1;9283:20;9277:4;9273:31;9263:41;;9354:82;9372:2;9365:5;9362:13;9354:82;;;9417:17;;;9398:1;9387:13;9354:82;;;9358:3;;;8907:545;;;:::o;9628:1352::-;9754:3;9748:10;9781:18;9773:6;9770:30;9767:56;;;9803:18;;:::i;:::-;9832:97;9922:6;9882:38;9914:4;9908:11;9882:38;:::i;:::-;9876:4;9832:97;:::i;:::-;9984:4;;10048:2;10037:14;;10065:1;10060:663;;;;10767:1;10784:6;10781:89;;;-1:-1:-1;10836:19:1;;;10830:26;10781:89;-1:-1:-1;;9585:1:1;9581:11;;;9577:24;9573:29;9563:40;9609:1;9605:11;;;9560:57;10883:81;;10030:944;;10060:663;8854:1;8847:14;;;8891:4;8878:18;;-1:-1:-1;;10096:20:1;;;10214:236;10228:7;10225:1;10222:14;10214:236;;;10317:19;;;10311:26;10296:42;;10409:27;;;;10377:1;10365:14;;;;10244:19;;10214:236;;;10218:3;10478:6;10469:7;10466:19;10463:201;;;10539:19;;;10533:26;-1:-1:-1;;10622:1:1;10618:14;;;10634:3;10614:24;10610:37;10606:42;10591:58;10576:74;;10463:201;-1:-1:-1;;;;;10710:1:1;10694:14;;;10690:22;10677:36;;-1:-1:-1;9628:1352:1:o;10985:410::-;11187:2;11169:21;;;11226:2;11206:18;;;11199:30;11265:34;11260:2;11245:18;;11238:62;-1:-1:-1;;;11331:2:1;11316:18;;11309:44;11385:3;11370:19;;10985:410::o;11610:127::-;11671:10;11666:3;11662:20;11659:1;11652:31;11702:4;11699:1;11692:15;11726:4;11723:1;11716:15;11742:127;11803:10;11798:3;11794:20;11791:1;11784:31;11834:4;11831:1;11824:15;11858:4;11855:1;11848:15;11874:135;11913:3;11934:17;;;11931:43;;11954:18;;:::i;:::-;-1:-1:-1;12001:1:1;11990:13;;11874:135::o;13126:125::-;13191:9;;;13212:10;;;13209:36;;;13225:18;;:::i;13957:168::-;14030:9;;;14061;;14078:15;;;14072:22;;14058:37;14048:71;;14099:18;;:::i;15714:1256::-;15938:3;15976:6;15970:13;16002:4;16015:64;16072:6;16067:3;16062:2;16054:6;16050:15;16015:64;:::i;:::-;16142:13;;16101:16;;;;16164:68;16142:13;16101:16;16199:15;;;16164:68;:::i;:::-;16321:13;;16254:20;;;16294:1;;16359:36;16321:13;16359:36;:::i;:::-;16414:1;16431:18;;;16458:141;;;;16613:1;16608:337;;;;16424:521;;16458:141;-1:-1:-1;;16493:24:1;;16479:39;;16570:16;;16563:24;16549:39;;16538:51;;;-1:-1:-1;16458:141:1;;16608:337;16639:6;16636:1;16629:17;16687:2;16684:1;16674:16;16712:1;16726:169;16740:8;16737:1;16734:15;16726:169;;;16822:14;;16807:13;;;16800:37;16865:16;;;;16757:10;;16726:169;;;16730:3;;16926:8;16919:5;16915:20;16908:27;;16424:521;-1:-1:-1;16961:3:1;;15714:1256;-1:-1:-1;;;;;;;;;;15714:1256:1:o;18554:128::-;18621:9;;;18642:11;;;18639:37;;;18656:18;;:::i;19041:414::-;19243:2;19225:21;;;19282:2;19262:18;;;19255:30;19321:34;19316:2;19301:18;;19294:62;-1:-1:-1;;;19387:2:1;19372:18;;19365:48;19445:3;19430:19;;19041:414::o;19460:127::-;19521:10;19516:3;19512:20;19509:1;19502:31;19552:4;19549:1;19542:15;19576:4;19573:1;19566:15;19592:120;19632:1;19658;19648:35;;19663:18;;:::i;:::-;-1:-1:-1;19697:9:1;;19592:120::o;19717:112::-;19749:1;19775;19765:35;;19780:18;;:::i;:::-;-1:-1:-1;19814:9:1;;19717:112::o;19834:489::-;-1:-1:-1;;;;;20103:15:1;;;20085:34;;20155:15;;20150:2;20135:18;;20128:43;20202:2;20187:18;;20180:34;;;20250:3;20245:2;20230:18;;20223:31;;;20028:4;;20271:46;;20297:19;;20289:6;20271:46;:::i;:::-;20263:54;19834:489;-1:-1:-1;;;;;;19834:489:1:o;20328:249::-;20397:6;20450:2;20438:9;20429:7;20425:23;20421:32;20418:52;;;20466:1;20463;20456:12;20418:52;20498:9;20492:16;20517:30;20541:5;20517:30;:::i

Swarm Source

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