ETH Price: $3,492.69 (+3.61%)
Gas: 4 Gwei

Token

Not Not Okay Bears (NNOBEARS)
 

Overview

Max Total Supply

1,521 NNOBEARS

Holders

195

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
8 NNOBEARS
0x612093ac1a182533b0998c8636d6405b61693531
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:
NotNotOkayBears

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-17
*/

/**
 *Submitted for verification at Etherscan.io on 2022-04-24
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: erc721a/contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;



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

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

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

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

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        // Implented on top of OpenZeppelin's ERC721
        string memory suffixURI = _suffixURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), suffixURI)) : '';
    }

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

    /**
     * @dev Suffix URI for computing {tokenURI}.
     * Added to OpenZeppelin's ERC721
     */
    function _suffixURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

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

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

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

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

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

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

        address from = prevOwnership.addr;

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

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

// notnotokaybears.sol

pragma solidity ^0.8.4;



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

    uint256 public PRICE;
    uint256 public MAX_SUPPLY;
    string private BASE_URI;
    string private SUFFIX_URI;
    uint256 public FREE_MINT_LIMIT_PER_WALLET;
    uint256 public MAX_MINT_PER_TX;
    bool public IS_SALE_ACTIVE;
    uint256 public FREE_MINT_SUPPLY; 

    mapping(address => uint256) private freeMintAdressData;

    constructor(uint256 price, uint256 maxSupply, string memory baseUri, uint256 freeMintLimitPerWallet, uint256 maxMintPerTX, bool isSaleActive, uint256 freeMintSupply) ERC721A("Not Not Okay Bears", "NNOBEARS"){
        PRICE = price;
        MAX_SUPPLY = maxSupply;
        BASE_URI = baseUri;
        SUFFIX_URI = ".json";
        FREE_MINT_LIMIT_PER_WALLET = freeMintLimitPerWallet;
        MAX_MINT_PER_TX = maxMintPerTX;
        IS_SALE_ACTIVE = isSaleActive;
        FREE_MINT_SUPPLY = freeMintSupply;

        mintOwner(msg.sender, 10);
    }

    function updateFreeMintsAdresses(address minter, uint256 count) private{
        freeMintAdressData[minter] += count;
    }

    function returnCurrentMinterFreeMint(address minter) public view returns (uint256){
        return freeMintAdressData[minter];
    }


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

    function _suffixURI() internal view virtual override returns (string memory){
        return SUFFIX_URI;
    } 

    function setPrice(uint256 price) external onlyOwner(){
        PRICE = price;
    }

    function lowerMaxSupply(uint256 newMaxSupply) external onlyOwner{
        require (newMaxSupply < MAX_SUPPLY, "MAX SUPPLY MORE THAN NEW MAX SUPPLY");
        require (newMaxSupply >= _currentIndex, "NEW MAX SUPPLY IS BIGGER OR EQUAL TO CURRENT INDEX");
        MAX_SUPPLY = newMaxSupply;
    }

    function setBaseURI(string memory baseUri) external onlyOwner {
        BASE_URI = baseUri;
    }

    function setSuffixURI(string memory suffixUri) external onlyOwner {
        SUFFIX_URI = suffixUri;
    }

    function setFreeMintLimitPerWallet(uint256 freeMintLimitPerWallet) external onlyOwner{
        FREE_MINT_LIMIT_PER_WALLET = freeMintLimitPerWallet;
    }

    function setSalesActive(bool isSaleActive) external onlyOwner{
        IS_SALE_ACTIVE = isSaleActive;
    }

    function setFreeMintSupply(uint256 freeMintSupply) external onlyOwner{
        FREE_MINT_SUPPLY = freeMintSupply;
    }

    // MINT
    modifier mintRegulation(uint256 _mintAmount){
        require(_mintAmount > 0 && _mintAmount <= MAX_MINT_PER_TX, "AMOUNT < 1 OR EXCEEDS MAX");
        require(_currentIndex + _mintAmount <= MAX_SUPPLY, "SOLD OUT");
        _;
    }

    function mint(uint256 _mintAmount) public payable mintRegulation(_mintAmount) {
        require(IS_SALE_ACTIVE, "Sale not active!");

        uint256 totalPayable = _mintAmount * PRICE ;

        if (_currentIndex < FREE_MINT_SUPPLY) {
            uint256 remainingFreeMint = FREE_MINT_LIMIT_PER_WALLET - freeMintAdressData[msg.sender];
            if (remainingFreeMint > 0) {

                if (_mintAmount >= remainingFreeMint) {
                    totalPayable -= remainingFreeMint * PRICE;
                    updateFreeMintsAdresses(msg.sender, remainingFreeMint);
                } else {
                    totalPayable -= _mintAmount * PRICE;
                    updateFreeMintsAdresses(msg.sender, _mintAmount);
                }
            } 
        }

        require(msg.value >= totalPayable, "Insufficient funds!");

        _safeMint(msg.sender, _mintAmount);
    }

        function mintOwner(address _to, uint256 _mintAmount) public mintRegulation(_mintAmount) onlyOwner {
        _safeMint(_to, _mintAmount);
    }

        function withdraw() public onlyOwner{
        require(address(this).balance > 0, "You have zero balance");
        payable(owner()).transfer(address(this).balance);
    }
        
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"uint256","name":"freeMintLimitPerWallet","type":"uint256"},{"internalType":"uint256","name":"maxMintPerTX","type":"uint256"},{"internalType":"bool","name":"isSaleActive","type":"bool"},{"internalType":"uint256","name":"freeMintSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FREE_MINT_LIMIT_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_MINT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IS_SALE_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"lowerMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintOwner","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"returnCurrentMinterFreeMint","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"freeMintLimitPerWallet","type":"uint256"}],"name":"setFreeMintLimitPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"freeMintSupply","type":"uint256"}],"name":"setFreeMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isSaleActive","type":"bool"}],"name":"setSalesActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"suffixUri","type":"string"}],"name":"setSuffixURI","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162004e3038038062004e30833981810160405281019062000037919062000ba3565b6040518060400160405280601281526020017f4e6f74204e6f74204f6b617920426561727300000000000000000000000000008152506040518060400160405280600881526020017f4e4e4f42454152530000000000000000000000000000000000000000000000008152508160029080519060200190620000bb929190620009fe565b508060039080519060200190620000d4929190620009fe565b50620000e5620001d160201b60201c565b60008190555050506200010d62000101620001d660201b60201c565b620001de60201b60201c565b8660098190555085600a8190555084600b908051906020019062000133929190620009fe565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000181929190620009fe565b5083600d8190555082600e8190555081600f60006101000a81548160ff02191690831515021790555080601081905550620001c433600a620002a460201b60201c565b5050505050505062001183565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600081118015620002b85750600e548111155b620002fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f19062000de5565b60405180910390fd5b600a54816000546200030d919062000e93565b111562000351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003489062000da1565b60405180910390fd5b62000361620001d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000387620003f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d79062000dc3565b60405180910390fd5b620003f283836200042160201b60201c565b505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004438282604051806020016040528060008152506200044760201b60201c565b5050565b6200045c83838360016200046160201b60201c565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415620004cf576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156200050b576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200052060008683876200085d60201b60201c565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015620006f85750620006f78773ffffffffffffffffffffffffffffffffffffffff166200086360201b62001aae1760201c565b5b15620007cb575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200077660008884806001019550886200088660201b60201c565b620007ad576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415620006ff578260005414620007c557600080fd5b62000838565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415620007cc575b816000819055505050620008566000868387620009f860201b60201c565b5050505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620008b4620001d660201b60201c565b8786866040518563ffffffff1660e01b8152600401620008d8949392919062000d4d565b602060405180830381600087803b158015620008f357600080fd5b505af19250505080156200092757506040513d601f19601f8201168201806040525081019062000924919062000b71565b60015b620009a5573d80600081146200095a576040519150601f19603f3d011682016040523d82523d6000602084013e6200095f565b606091505b506000815114156200099d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b82805462000a0c9062000f9c565b90600052602060002090601f01602090048101928262000a30576000855562000a7c565b82601f1062000a4b57805160ff191683800117855562000a7c565b8280016001018555821562000a7c579182015b8281111562000a7b57825182559160200191906001019062000a5e565b5b50905062000a8b919062000a8f565b5090565b5b8082111562000aaa57600081600090555060010162000a90565b5090565b600062000ac562000abf8462000e30565b62000e07565b90508281526020810184848401111562000ae45762000ae36200109a565b5b62000af184828562000f66565b509392505050565b60008151905062000b0a8162001135565b92915050565b60008151905062000b21816200114f565b92915050565b600082601f83011262000b3f5762000b3e62001095565b5b815162000b5184826020860162000aae565b91505092915050565b60008151905062000b6b8162001169565b92915050565b60006020828403121562000b8a5762000b89620010a4565b5b600062000b9a8482850162000b10565b91505092915050565b600080600080600080600060e0888a03121562000bc55762000bc4620010a4565b5b600062000bd58a828b0162000b5a565b975050602062000be88a828b0162000b5a565b965050604088015167ffffffffffffffff81111562000c0c5762000c0b6200109f565b5b62000c1a8a828b0162000b27565b955050606062000c2d8a828b0162000b5a565b945050608062000c408a828b0162000b5a565b93505060a062000c538a828b0162000af9565b92505060c062000c668a828b0162000b5a565b91505092959891949750929550565b62000c808162000ef0565b82525050565b600062000c938262000e66565b62000c9f818562000e71565b935062000cb181856020860162000f66565b62000cbc81620010a9565b840191505092915050565b600062000cd660088362000e82565b915062000ce382620010ba565b602082019050919050565b600062000cfd60208362000e82565b915062000d0a82620010e3565b602082019050919050565b600062000d2460198362000e82565b915062000d31826200110c565b602082019050919050565b62000d478162000f5c565b82525050565b600060808201905062000d64600083018762000c75565b62000d73602083018662000c75565b62000d82604083018562000d3c565b818103606083015262000d96818462000c86565b905095945050505050565b6000602082019050818103600083015262000dbc8162000cc7565b9050919050565b6000602082019050818103600083015262000dde8162000cee565b9050919050565b6000602082019050818103600083015262000e008162000d15565b9050919050565b600062000e1362000e26565b905062000e21828262000fd2565b919050565b6000604051905090565b600067ffffffffffffffff82111562000e4e5762000e4d62001066565b5b62000e5982620010a9565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000ea08262000f5c565b915062000ead8362000f5c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ee55762000ee462001008565b5b828201905092915050565b600062000efd8262000f3c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000f8657808201518184015260208101905062000f69565b8381111562000f96576000848401525b50505050565b6000600282049050600182168062000fb557607f821691505b6020821081141562000fcc5762000fcb62001037565b5b50919050565b62000fdd82620010a9565b810181811067ffffffffffffffff8211171562000fff5762000ffe62001066565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f534f4c44204f5554000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f414d4f554e54203c2031204f522045584345454453204d415800000000000000600082015250565b620011408162000f04565b81146200114c57600080fd5b50565b6200115a8162000f10565b81146200116657600080fd5b50565b620011748162000f5c565b81146200118057600080fd5b50565b613c9d80620011936000396000f3fe6080604052600436106101f95760003560e01c806376d02b711161010d578063a0712d68116100a0578063c4c39ed51161006f578063c4c39ed5146106ea578063c4e9374d14610713578063c87b56dd1461073c578063e985e9c514610779578063f2fde38b146107b6576101f9565b8063a0712d6814610653578063a22cb4651461066f578063a82fe0ac14610698578063b88d4fde146106c1576101f9565b80638ecad721116100dc5780638ecad721146105ab5780638f7a715f146105d657806391b7f5ed146105ff57806395d89b4114610628576101f9565b806376d02b71146105015780638be18e571461052c5780638d859f3e146105555780638da5cb5b14610580576101f9565b8063343b7b8a1161019057806355f804b31161015f57806355f804b31461041c5780636352211e1461044557806363eb8bb61461048257806370a08231146104ad578063715018a6146104ea576101f9565b8063343b7b8a146103765780633ccfd60b146103b3578063408cbf94146103ca57806342842e0e146103f3576101f9565b806310b0c052116101cc57806310b0c052146102cc57806318160ddd146102f757806323b872dd1461032257806332cb6b0c1461034b576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906130bb565b6107df565b604051610232919061342e565b60405180910390f35b34801561024757600080fd5b506102506108c1565b60405161025d9190613449565b60405180910390f35b34801561027257600080fd5b5061028d6004803603810190610288919061315e565b610953565b60405161029a91906133c7565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c5919061304e565b6109cf565b005b3480156102d857600080fd5b506102e1610ada565b6040516102ee919061358b565b60405180910390f35b34801561030357600080fd5b5061030c610ae0565b604051610319919061358b565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190612f38565b610af7565b005b34801561035757600080fd5b50610360610b07565b60405161036d919061358b565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190612ecb565b610b0d565b6040516103aa919061358b565b60405180910390f35b3480156103bf57600080fd5b506103c8610b56565b005b3480156103d657600080fd5b506103f160048036038101906103ec919061304e565b610c65565b005b3480156103ff57600080fd5b5061041a60048036038101906104159190612f38565b610d94565b005b34801561042857600080fd5b50610443600480360381019061043e9190613115565b610db4565b005b34801561045157600080fd5b5061046c6004803603810190610467919061315e565b610e4a565b60405161047991906133c7565b60405180910390f35b34801561048e57600080fd5b50610497610e60565b6040516104a4919061358b565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190612ecb565b610e66565b6040516104e1919061358b565b60405180910390f35b3480156104f657600080fd5b506104ff610f36565b005b34801561050d57600080fd5b50610516610fbe565b604051610523919061342e565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e9190613115565b610fd1565b005b34801561056157600080fd5b5061056a611067565b604051610577919061358b565b60405180910390f35b34801561058c57600080fd5b5061059561106d565b6040516105a291906133c7565b60405180910390f35b3480156105b757600080fd5b506105c0611097565b6040516105cd919061358b565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f8919061315e565b61109d565b005b34801561060b57600080fd5b506106266004803603810190610621919061315e565b611123565b005b34801561063457600080fd5b5061063d6111a9565b60405161064a9190613449565b60405180910390f35b61066d6004803603810190610668919061315e565b61123b565b005b34801561067b57600080fd5b506106966004803603810190610691919061300e565b611452565b005b3480156106a457600080fd5b506106bf60048036038101906106ba919061308e565b6115ca565b005b3480156106cd57600080fd5b506106e860048036038101906106e39190612f8b565b611663565b005b3480156106f657600080fd5b50610711600480360381019061070c919061315e565b6116df565b005b34801561071f57600080fd5b5061073a6004803603810190610735919061315e565b611765565b005b34801561074857600080fd5b50610763600480360381019061075e919061315e565b611874565b6040516107709190613449565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b9190612ef8565b611922565b6040516107ad919061342e565b60405180910390f35b3480156107c257600080fd5b506107dd60048036038101906107d89190612ecb565b6119b6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108aa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ba57506108b982611ad1565b5b9050919050565b6060600280546108d09061383b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc9061383b565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600061095e82611b3b565b610994576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109da82610e4a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a42576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a61611b89565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a935750610a9181610a8c611b89565b611922565b155b15610aca576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad5838383611b91565b505050565b600d5481565b6000610aea611c43565b6001546000540303905090565b610b02838383611c48565b505050565b600a5481565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b5e611b89565b73ffffffffffffffffffffffffffffffffffffffff16610b7c61106d565b73ffffffffffffffffffffffffffffffffffffffff1614610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc99061350b565b60405180910390fd5b60004711610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c906134eb565b60405180910390fd5b610c1d61106d565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610c62573d6000803e3d6000fd5b50565b80600081118015610c785750600e548111155b610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9061352b565b60405180910390fd5b600a5481600054610cc89190613670565b1115610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d009061346b565b60405180910390fd5b610d11611b89565b73ffffffffffffffffffffffffffffffffffffffff16610d2f61106d565b73ffffffffffffffffffffffffffffffffffffffff1614610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c9061350b565b60405180910390fd5b610d8f83836120fe565b505050565b610daf83838360405180602001604052806000815250611663565b505050565b610dbc611b89565b73ffffffffffffffffffffffffffffffffffffffff16610dda61106d565b73ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e279061350b565b60405180910390fd5b80600b9080519060200190610e46929190612c9c565b5050565b6000610e558261211c565b600001519050919050565b60105481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ece576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610f3e611b89565b73ffffffffffffffffffffffffffffffffffffffff16610f5c61106d565b73ffffffffffffffffffffffffffffffffffffffff1614610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa99061350b565b60405180910390fd5b610fbc60006123ab565b565b600f60009054906101000a900460ff1681565b610fd9611b89565b73ffffffffffffffffffffffffffffffffffffffff16610ff761106d565b73ffffffffffffffffffffffffffffffffffffffff161461104d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110449061350b565b60405180910390fd5b80600c9080519060200190611063929190612c9c565b5050565b60095481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b6110a5611b89565b73ffffffffffffffffffffffffffffffffffffffff166110c361106d565b73ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111109061350b565b60405180910390fd5b80600d8190555050565b61112b611b89565b73ffffffffffffffffffffffffffffffffffffffff1661114961106d565b73ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111969061350b565b60405180910390fd5b8060098190555050565b6060600380546111b89061383b565b80601f01602080910402602001604051908101604052809291908181526020018280546111e49061383b565b80156112315780601f1061120657610100808354040283529160200191611231565b820191906000526020600020905b81548152906001019060200180831161121457829003601f168201915b5050505050905090565b8060008111801561124e5750600e548111155b61128d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112849061352b565b60405180910390fd5b600a548160005461129e9190613670565b11156112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d69061346b565b60405180910390fd5b600f60009054906101000a900460ff1661132e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611325906134ab565b60405180910390fd5b60006009548361133e91906136f7565b90506010546000541015611400576000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d5461139b9190613751565b905060008111156113fe578084106113d757600954816113bb91906136f7565b826113c69190613751565b91506113d23382612471565b6113fd565b600954846113e591906136f7565b826113f09190613751565b91506113fc3385612471565b5b5b505b80341015611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a9061356b565b60405180910390fd5b61144d33846120fe565b505050565b61145a611b89565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114bf576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114cc611b89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611579611b89565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115be919061342e565b60405180910390a35050565b6115d2611b89565b73ffffffffffffffffffffffffffffffffffffffff166115f061106d565b73ffffffffffffffffffffffffffffffffffffffff1614611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d9061350b565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b61166e848484611c48565b61168d8373ffffffffffffffffffffffffffffffffffffffff16611aae565b80156116a257506116a0848484846124cb565b155b156116d9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6116e7611b89565b73ffffffffffffffffffffffffffffffffffffffff1661170561106d565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117529061350b565b60405180910390fd5b8060108190555050565b61176d611b89565b73ffffffffffffffffffffffffffffffffffffffff1661178b61106d565b73ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d89061350b565b60405180910390fd5b600a548110611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c906134cb565b60405180910390fd5b60005481101561186a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118619061354b565b60405180910390fd5b80600a8190555050565b606061187f82611b3b565b6118b5576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006118bf61262b565b905060006118cb6126bd565b90506000825114156118ec5760405180602001604052806000815250611919565b816118f68561274f565b8260405160200161190993929190613396565b6040516020818303038152906040525b92505050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119be611b89565b73ffffffffffffffffffffffffffffffffffffffff166119dc61106d565b73ffffffffffffffffffffffffffffffffffffffff1614611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a299061350b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a999061348b565b60405180910390fd5b611aab816123ab565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611b46611c43565b11158015611b55575060005482105b8015611b82575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611c538261211c565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611cdf611b89565b73ffffffffffffffffffffffffffffffffffffffff161480611d0e5750611d0d85611d08611b89565b611922565b5b80611d535750611d1c611b89565b73ffffffffffffffffffffffffffffffffffffffff16611d3b84610953565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611d8c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611df3576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e0085858560016128b0565b611e0c60008487611b91565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561208c57600054821461208b57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120f785858560016128b6565b5050505050565b6121188282604051806020016040528060008152506128bc565b5050565b612124612d22565b600082905080612132611c43565b11158015612141575060005481105b15612374576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161237257600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122565780925050506123a6565b5b60011561237157818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461236c5780925050506123a6565b612257565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124c09190613670565b925050819055505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124f1611b89565b8786866040518563ffffffff1660e01b815260040161251394939291906133e2565b602060405180830381600087803b15801561252d57600080fd5b505af192505050801561255e57506040513d601f19601f8201168201806040525081019061255b91906130e8565b60015b6125d8573d806000811461258e576040519150601f19603f3d011682016040523d82523d6000602084013e612593565b606091505b506000815114156125d0576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b805461263a9061383b565b80601f01602080910402602001604051908101604052809291908181526020018280546126669061383b565b80156126b35780601f10612688576101008083540402835291602001916126b3565b820191906000526020600020905b81548152906001019060200180831161269657829003601f168201915b5050505050905090565b6060600c80546126cc9061383b565b80601f01602080910402602001604051908101604052809291908181526020018280546126f89061383b565b80156127455780601f1061271a57610100808354040283529160200191612745565b820191906000526020600020905b81548152906001019060200180831161272857829003601f168201915b5050505050905090565b60606000821415612797576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128ab565b600082905060005b600082146127c95780806127b29061389e565b915050600a826127c291906136c6565b915061279f565b60008167ffffffffffffffff8111156127e5576127e46139d4565b5b6040519080825280601f01601f1916602001820160405280156128175781602001600182028036833780820191505090505b5090505b600085146128a4576001826128309190613751565b9150600a8561283f91906138e7565b603061284b9190613670565b60f81b818381518110612861576128606139a5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561289d91906136c6565b945061281b565b8093505050505b919050565b50505050565b50505050565b6128c983838360016128ce565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561293b576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612976576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61298360008683876128b0565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612b4d5750612b4c8773ffffffffffffffffffffffffffffffffffffffff16611aae565b5b15612c13575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bc260008884806001019550886124cb565b612bf8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612b53578260005414612c0e57600080fd5b612c7f565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612c14575b816000819055505050612c9560008683876128b6565b5050505050565b828054612ca89061383b565b90600052602060002090601f016020900481019282612cca5760008555612d11565b82601f10612ce357805160ff1916838001178555612d11565b82800160010185558215612d11579182015b82811115612d10578251825591602001919060010190612cf5565b5b509050612d1e9190612d65565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612d7e576000816000905550600101612d66565b5090565b6000612d95612d90846135cb565b6135a6565b905082815260208101848484011115612db157612db0613a08565b5b612dbc8482856137f9565b509392505050565b6000612dd7612dd2846135fc565b6135a6565b905082815260208101848484011115612df357612df2613a08565b5b612dfe8482856137f9565b509392505050565b600081359050612e1581613c0b565b92915050565b600081359050612e2a81613c22565b92915050565b600081359050612e3f81613c39565b92915050565b600081519050612e5481613c39565b92915050565b600082601f830112612e6f57612e6e613a03565b5b8135612e7f848260208601612d82565b91505092915050565b600082601f830112612e9d57612e9c613a03565b5b8135612ead848260208601612dc4565b91505092915050565b600081359050612ec581613c50565b92915050565b600060208284031215612ee157612ee0613a12565b5b6000612eef84828501612e06565b91505092915050565b60008060408385031215612f0f57612f0e613a12565b5b6000612f1d85828601612e06565b9250506020612f2e85828601612e06565b9150509250929050565b600080600060608486031215612f5157612f50613a12565b5b6000612f5f86828701612e06565b9350506020612f7086828701612e06565b9250506040612f8186828701612eb6565b9150509250925092565b60008060008060808587031215612fa557612fa4613a12565b5b6000612fb387828801612e06565b9450506020612fc487828801612e06565b9350506040612fd587828801612eb6565b925050606085013567ffffffffffffffff811115612ff657612ff5613a0d565b5b61300287828801612e5a565b91505092959194509250565b6000806040838503121561302557613024613a12565b5b600061303385828601612e06565b925050602061304485828601612e1b565b9150509250929050565b6000806040838503121561306557613064613a12565b5b600061307385828601612e06565b925050602061308485828601612eb6565b9150509250929050565b6000602082840312156130a4576130a3613a12565b5b60006130b284828501612e1b565b91505092915050565b6000602082840312156130d1576130d0613a12565b5b60006130df84828501612e30565b91505092915050565b6000602082840312156130fe576130fd613a12565b5b600061310c84828501612e45565b91505092915050565b60006020828403121561312b5761312a613a12565b5b600082013567ffffffffffffffff81111561314957613148613a0d565b5b61315584828501612e88565b91505092915050565b60006020828403121561317457613173613a12565b5b600061318284828501612eb6565b91505092915050565b61319481613785565b82525050565b6131a381613797565b82525050565b60006131b48261362d565b6131be8185613643565b93506131ce818560208601613808565b6131d781613a17565b840191505092915050565b60006131ed82613638565b6131f78185613654565b9350613207818560208601613808565b61321081613a17565b840191505092915050565b600061322682613638565b6132308185613665565b9350613240818560208601613808565b80840191505092915050565b6000613259600883613654565b915061326482613a28565b602082019050919050565b600061327c602683613654565b915061328782613a51565b604082019050919050565b600061329f601083613654565b91506132aa82613aa0565b602082019050919050565b60006132c2602383613654565b91506132cd82613ac9565b604082019050919050565b60006132e5601583613654565b91506132f082613b18565b602082019050919050565b6000613308602083613654565b915061331382613b41565b602082019050919050565b600061332b601983613654565b915061333682613b6a565b602082019050919050565b600061334e603283613654565b915061335982613b93565b604082019050919050565b6000613371601383613654565b915061337c82613be2565b602082019050919050565b613390816137ef565b82525050565b60006133a2828661321b565b91506133ae828561321b565b91506133ba828461321b565b9150819050949350505050565b60006020820190506133dc600083018461318b565b92915050565b60006080820190506133f7600083018761318b565b613404602083018661318b565b6134116040830185613387565b818103606083015261342381846131a9565b905095945050505050565b6000602082019050613443600083018461319a565b92915050565b6000602082019050818103600083015261346381846131e2565b905092915050565b600060208201905081810360008301526134848161324c565b9050919050565b600060208201905081810360008301526134a48161326f565b9050919050565b600060208201905081810360008301526134c481613292565b9050919050565b600060208201905081810360008301526134e4816132b5565b9050919050565b60006020820190508181036000830152613504816132d8565b9050919050565b60006020820190508181036000830152613524816132fb565b9050919050565b600060208201905081810360008301526135448161331e565b9050919050565b6000602082019050818103600083015261356481613341565b9050919050565b6000602082019050818103600083015261358481613364565b9050919050565b60006020820190506135a06000830184613387565b92915050565b60006135b06135c1565b90506135bc828261386d565b919050565b6000604051905090565b600067ffffffffffffffff8211156135e6576135e56139d4565b5b6135ef82613a17565b9050602081019050919050565b600067ffffffffffffffff821115613617576136166139d4565b5b61362082613a17565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061367b826137ef565b9150613686836137ef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136bb576136ba613918565b5b828201905092915050565b60006136d1826137ef565b91506136dc836137ef565b9250826136ec576136eb613947565b5b828204905092915050565b6000613702826137ef565b915061370d836137ef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561374657613745613918565b5b828202905092915050565b600061375c826137ef565b9150613767836137ef565b92508282101561377a57613779613918565b5b828203905092915050565b6000613790826137cf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561382657808201518184015260208101905061380b565b83811115613835576000848401525b50505050565b6000600282049050600182168061385357607f821691505b6020821081141561386757613866613976565b5b50919050565b61387682613a17565b810181811067ffffffffffffffff82111715613895576138946139d4565b5b80604052505050565b60006138a9826137ef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138dc576138db613918565b5b600182019050919050565b60006138f2826137ef565b91506138fd836137ef565b92508261390d5761390c613947565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f534f4c44204f5554000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74206163746976652100000000000000000000000000000000600082015250565b7f4d415820535550504c59204d4f5245205448414e204e4557204d41582053555060008201527f504c590000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752068617665207a65726f2062616c616e63650000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f414d4f554e54203c2031204f522045584345454453204d415800000000000000600082015250565b7f4e4557204d415820535550504c5920495320424947474552204f52204551554160008201527f4c20544f2043555252454e5420494e4445580000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613c1481613785565b8114613c1f57600080fd5b50565b613c2b81613797565b8114613c3657600080fd5b50565b613c42816137a3565b8114613c4d57600080fd5b50565b613c59816137ef565b8114613c6457600080fd5b5056fea26469706673582212206e19e55baffd00ec53915b88cff4721cb124d210d76a69f399fb0255d551bf1364736f6c63430008070033000000000000000000000000000000000000000000000000001ff973cafa8000000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6261667962656967746f7565627078686c6170733766336d6c766f376c776f7274666337756d67376470327136757574336d7569776172736c65652e697066732e6e667473746f726167652e6c696e6b2f00000000000000

Deployed Bytecode

0x6080604052600436106101f95760003560e01c806376d02b711161010d578063a0712d68116100a0578063c4c39ed51161006f578063c4c39ed5146106ea578063c4e9374d14610713578063c87b56dd1461073c578063e985e9c514610779578063f2fde38b146107b6576101f9565b8063a0712d6814610653578063a22cb4651461066f578063a82fe0ac14610698578063b88d4fde146106c1576101f9565b80638ecad721116100dc5780638ecad721146105ab5780638f7a715f146105d657806391b7f5ed146105ff57806395d89b4114610628576101f9565b806376d02b71146105015780638be18e571461052c5780638d859f3e146105555780638da5cb5b14610580576101f9565b8063343b7b8a1161019057806355f804b31161015f57806355f804b31461041c5780636352211e1461044557806363eb8bb61461048257806370a08231146104ad578063715018a6146104ea576101f9565b8063343b7b8a146103765780633ccfd60b146103b3578063408cbf94146103ca57806342842e0e146103f3576101f9565b806310b0c052116101cc57806310b0c052146102cc57806318160ddd146102f757806323b872dd1461032257806332cb6b0c1461034b576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906130bb565b6107df565b604051610232919061342e565b60405180910390f35b34801561024757600080fd5b506102506108c1565b60405161025d9190613449565b60405180910390f35b34801561027257600080fd5b5061028d6004803603810190610288919061315e565b610953565b60405161029a91906133c7565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c5919061304e565b6109cf565b005b3480156102d857600080fd5b506102e1610ada565b6040516102ee919061358b565b60405180910390f35b34801561030357600080fd5b5061030c610ae0565b604051610319919061358b565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190612f38565b610af7565b005b34801561035757600080fd5b50610360610b07565b60405161036d919061358b565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190612ecb565b610b0d565b6040516103aa919061358b565b60405180910390f35b3480156103bf57600080fd5b506103c8610b56565b005b3480156103d657600080fd5b506103f160048036038101906103ec919061304e565b610c65565b005b3480156103ff57600080fd5b5061041a60048036038101906104159190612f38565b610d94565b005b34801561042857600080fd5b50610443600480360381019061043e9190613115565b610db4565b005b34801561045157600080fd5b5061046c6004803603810190610467919061315e565b610e4a565b60405161047991906133c7565b60405180910390f35b34801561048e57600080fd5b50610497610e60565b6040516104a4919061358b565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190612ecb565b610e66565b6040516104e1919061358b565b60405180910390f35b3480156104f657600080fd5b506104ff610f36565b005b34801561050d57600080fd5b50610516610fbe565b604051610523919061342e565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e9190613115565b610fd1565b005b34801561056157600080fd5b5061056a611067565b604051610577919061358b565b60405180910390f35b34801561058c57600080fd5b5061059561106d565b6040516105a291906133c7565b60405180910390f35b3480156105b757600080fd5b506105c0611097565b6040516105cd919061358b565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f8919061315e565b61109d565b005b34801561060b57600080fd5b506106266004803603810190610621919061315e565b611123565b005b34801561063457600080fd5b5061063d6111a9565b60405161064a9190613449565b60405180910390f35b61066d6004803603810190610668919061315e565b61123b565b005b34801561067b57600080fd5b506106966004803603810190610691919061300e565b611452565b005b3480156106a457600080fd5b506106bf60048036038101906106ba919061308e565b6115ca565b005b3480156106cd57600080fd5b506106e860048036038101906106e39190612f8b565b611663565b005b3480156106f657600080fd5b50610711600480360381019061070c919061315e565b6116df565b005b34801561071f57600080fd5b5061073a6004803603810190610735919061315e565b611765565b005b34801561074857600080fd5b50610763600480360381019061075e919061315e565b611874565b6040516107709190613449565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b9190612ef8565b611922565b6040516107ad919061342e565b60405180910390f35b3480156107c257600080fd5b506107dd60048036038101906107d89190612ecb565b6119b6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108aa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ba57506108b982611ad1565b5b9050919050565b6060600280546108d09061383b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc9061383b565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600061095e82611b3b565b610994576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109da82610e4a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a42576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a61611b89565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a935750610a9181610a8c611b89565b611922565b155b15610aca576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad5838383611b91565b505050565b600d5481565b6000610aea611c43565b6001546000540303905090565b610b02838383611c48565b505050565b600a5481565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b5e611b89565b73ffffffffffffffffffffffffffffffffffffffff16610b7c61106d565b73ffffffffffffffffffffffffffffffffffffffff1614610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc99061350b565b60405180910390fd5b60004711610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c906134eb565b60405180910390fd5b610c1d61106d565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610c62573d6000803e3d6000fd5b50565b80600081118015610c785750600e548111155b610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9061352b565b60405180910390fd5b600a5481600054610cc89190613670565b1115610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d009061346b565b60405180910390fd5b610d11611b89565b73ffffffffffffffffffffffffffffffffffffffff16610d2f61106d565b73ffffffffffffffffffffffffffffffffffffffff1614610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c9061350b565b60405180910390fd5b610d8f83836120fe565b505050565b610daf83838360405180602001604052806000815250611663565b505050565b610dbc611b89565b73ffffffffffffffffffffffffffffffffffffffff16610dda61106d565b73ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e279061350b565b60405180910390fd5b80600b9080519060200190610e46929190612c9c565b5050565b6000610e558261211c565b600001519050919050565b60105481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ece576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610f3e611b89565b73ffffffffffffffffffffffffffffffffffffffff16610f5c61106d565b73ffffffffffffffffffffffffffffffffffffffff1614610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa99061350b565b60405180910390fd5b610fbc60006123ab565b565b600f60009054906101000a900460ff1681565b610fd9611b89565b73ffffffffffffffffffffffffffffffffffffffff16610ff761106d565b73ffffffffffffffffffffffffffffffffffffffff161461104d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110449061350b565b60405180910390fd5b80600c9080519060200190611063929190612c9c565b5050565b60095481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b6110a5611b89565b73ffffffffffffffffffffffffffffffffffffffff166110c361106d565b73ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111109061350b565b60405180910390fd5b80600d8190555050565b61112b611b89565b73ffffffffffffffffffffffffffffffffffffffff1661114961106d565b73ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111969061350b565b60405180910390fd5b8060098190555050565b6060600380546111b89061383b565b80601f01602080910402602001604051908101604052809291908181526020018280546111e49061383b565b80156112315780601f1061120657610100808354040283529160200191611231565b820191906000526020600020905b81548152906001019060200180831161121457829003601f168201915b5050505050905090565b8060008111801561124e5750600e548111155b61128d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112849061352b565b60405180910390fd5b600a548160005461129e9190613670565b11156112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d69061346b565b60405180910390fd5b600f60009054906101000a900460ff1661132e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611325906134ab565b60405180910390fd5b60006009548361133e91906136f7565b90506010546000541015611400576000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d5461139b9190613751565b905060008111156113fe578084106113d757600954816113bb91906136f7565b826113c69190613751565b91506113d23382612471565b6113fd565b600954846113e591906136f7565b826113f09190613751565b91506113fc3385612471565b5b5b505b80341015611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a9061356b565b60405180910390fd5b61144d33846120fe565b505050565b61145a611b89565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114bf576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114cc611b89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611579611b89565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115be919061342e565b60405180910390a35050565b6115d2611b89565b73ffffffffffffffffffffffffffffffffffffffff166115f061106d565b73ffffffffffffffffffffffffffffffffffffffff1614611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d9061350b565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b61166e848484611c48565b61168d8373ffffffffffffffffffffffffffffffffffffffff16611aae565b80156116a257506116a0848484846124cb565b155b156116d9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6116e7611b89565b73ffffffffffffffffffffffffffffffffffffffff1661170561106d565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117529061350b565b60405180910390fd5b8060108190555050565b61176d611b89565b73ffffffffffffffffffffffffffffffffffffffff1661178b61106d565b73ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d89061350b565b60405180910390fd5b600a548110611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c906134cb565b60405180910390fd5b60005481101561186a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118619061354b565b60405180910390fd5b80600a8190555050565b606061187f82611b3b565b6118b5576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006118bf61262b565b905060006118cb6126bd565b90506000825114156118ec5760405180602001604052806000815250611919565b816118f68561274f565b8260405160200161190993929190613396565b6040516020818303038152906040525b92505050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119be611b89565b73ffffffffffffffffffffffffffffffffffffffff166119dc61106d565b73ffffffffffffffffffffffffffffffffffffffff1614611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a299061350b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a999061348b565b60405180910390fd5b611aab816123ab565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611b46611c43565b11158015611b55575060005482105b8015611b82575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611c538261211c565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611cdf611b89565b73ffffffffffffffffffffffffffffffffffffffff161480611d0e5750611d0d85611d08611b89565b611922565b5b80611d535750611d1c611b89565b73ffffffffffffffffffffffffffffffffffffffff16611d3b84610953565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611d8c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611df3576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e0085858560016128b0565b611e0c60008487611b91565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561208c57600054821461208b57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120f785858560016128b6565b5050505050565b6121188282604051806020016040528060008152506128bc565b5050565b612124612d22565b600082905080612132611c43565b11158015612141575060005481105b15612374576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161237257600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122565780925050506123a6565b5b60011561237157818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461236c5780925050506123a6565b612257565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124c09190613670565b925050819055505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124f1611b89565b8786866040518563ffffffff1660e01b815260040161251394939291906133e2565b602060405180830381600087803b15801561252d57600080fd5b505af192505050801561255e57506040513d601f19601f8201168201806040525081019061255b91906130e8565b60015b6125d8573d806000811461258e576040519150601f19603f3d011682016040523d82523d6000602084013e612593565b606091505b506000815114156125d0576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b805461263a9061383b565b80601f01602080910402602001604051908101604052809291908181526020018280546126669061383b565b80156126b35780601f10612688576101008083540402835291602001916126b3565b820191906000526020600020905b81548152906001019060200180831161269657829003601f168201915b5050505050905090565b6060600c80546126cc9061383b565b80601f01602080910402602001604051908101604052809291908181526020018280546126f89061383b565b80156127455780601f1061271a57610100808354040283529160200191612745565b820191906000526020600020905b81548152906001019060200180831161272857829003601f168201915b5050505050905090565b60606000821415612797576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128ab565b600082905060005b600082146127c95780806127b29061389e565b915050600a826127c291906136c6565b915061279f565b60008167ffffffffffffffff8111156127e5576127e46139d4565b5b6040519080825280601f01601f1916602001820160405280156128175781602001600182028036833780820191505090505b5090505b600085146128a4576001826128309190613751565b9150600a8561283f91906138e7565b603061284b9190613670565b60f81b818381518110612861576128606139a5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561289d91906136c6565b945061281b565b8093505050505b919050565b50505050565b50505050565b6128c983838360016128ce565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561293b576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612976576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61298360008683876128b0565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612b4d5750612b4c8773ffffffffffffffffffffffffffffffffffffffff16611aae565b5b15612c13575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bc260008884806001019550886124cb565b612bf8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612b53578260005414612c0e57600080fd5b612c7f565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612c14575b816000819055505050612c9560008683876128b6565b5050505050565b828054612ca89061383b565b90600052602060002090601f016020900481019282612cca5760008555612d11565b82601f10612ce357805160ff1916838001178555612d11565b82800160010185558215612d11579182015b82811115612d10578251825591602001919060010190612cf5565b5b509050612d1e9190612d65565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612d7e576000816000905550600101612d66565b5090565b6000612d95612d90846135cb565b6135a6565b905082815260208101848484011115612db157612db0613a08565b5b612dbc8482856137f9565b509392505050565b6000612dd7612dd2846135fc565b6135a6565b905082815260208101848484011115612df357612df2613a08565b5b612dfe8482856137f9565b509392505050565b600081359050612e1581613c0b565b92915050565b600081359050612e2a81613c22565b92915050565b600081359050612e3f81613c39565b92915050565b600081519050612e5481613c39565b92915050565b600082601f830112612e6f57612e6e613a03565b5b8135612e7f848260208601612d82565b91505092915050565b600082601f830112612e9d57612e9c613a03565b5b8135612ead848260208601612dc4565b91505092915050565b600081359050612ec581613c50565b92915050565b600060208284031215612ee157612ee0613a12565b5b6000612eef84828501612e06565b91505092915050565b60008060408385031215612f0f57612f0e613a12565b5b6000612f1d85828601612e06565b9250506020612f2e85828601612e06565b9150509250929050565b600080600060608486031215612f5157612f50613a12565b5b6000612f5f86828701612e06565b9350506020612f7086828701612e06565b9250506040612f8186828701612eb6565b9150509250925092565b60008060008060808587031215612fa557612fa4613a12565b5b6000612fb387828801612e06565b9450506020612fc487828801612e06565b9350506040612fd587828801612eb6565b925050606085013567ffffffffffffffff811115612ff657612ff5613a0d565b5b61300287828801612e5a565b91505092959194509250565b6000806040838503121561302557613024613a12565b5b600061303385828601612e06565b925050602061304485828601612e1b565b9150509250929050565b6000806040838503121561306557613064613a12565b5b600061307385828601612e06565b925050602061308485828601612eb6565b9150509250929050565b6000602082840312156130a4576130a3613a12565b5b60006130b284828501612e1b565b91505092915050565b6000602082840312156130d1576130d0613a12565b5b60006130df84828501612e30565b91505092915050565b6000602082840312156130fe576130fd613a12565b5b600061310c84828501612e45565b91505092915050565b60006020828403121561312b5761312a613a12565b5b600082013567ffffffffffffffff81111561314957613148613a0d565b5b61315584828501612e88565b91505092915050565b60006020828403121561317457613173613a12565b5b600061318284828501612eb6565b91505092915050565b61319481613785565b82525050565b6131a381613797565b82525050565b60006131b48261362d565b6131be8185613643565b93506131ce818560208601613808565b6131d781613a17565b840191505092915050565b60006131ed82613638565b6131f78185613654565b9350613207818560208601613808565b61321081613a17565b840191505092915050565b600061322682613638565b6132308185613665565b9350613240818560208601613808565b80840191505092915050565b6000613259600883613654565b915061326482613a28565b602082019050919050565b600061327c602683613654565b915061328782613a51565b604082019050919050565b600061329f601083613654565b91506132aa82613aa0565b602082019050919050565b60006132c2602383613654565b91506132cd82613ac9565b604082019050919050565b60006132e5601583613654565b91506132f082613b18565b602082019050919050565b6000613308602083613654565b915061331382613b41565b602082019050919050565b600061332b601983613654565b915061333682613b6a565b602082019050919050565b600061334e603283613654565b915061335982613b93565b604082019050919050565b6000613371601383613654565b915061337c82613be2565b602082019050919050565b613390816137ef565b82525050565b60006133a2828661321b565b91506133ae828561321b565b91506133ba828461321b565b9150819050949350505050565b60006020820190506133dc600083018461318b565b92915050565b60006080820190506133f7600083018761318b565b613404602083018661318b565b6134116040830185613387565b818103606083015261342381846131a9565b905095945050505050565b6000602082019050613443600083018461319a565b92915050565b6000602082019050818103600083015261346381846131e2565b905092915050565b600060208201905081810360008301526134848161324c565b9050919050565b600060208201905081810360008301526134a48161326f565b9050919050565b600060208201905081810360008301526134c481613292565b9050919050565b600060208201905081810360008301526134e4816132b5565b9050919050565b60006020820190508181036000830152613504816132d8565b9050919050565b60006020820190508181036000830152613524816132fb565b9050919050565b600060208201905081810360008301526135448161331e565b9050919050565b6000602082019050818103600083015261356481613341565b9050919050565b6000602082019050818103600083015261358481613364565b9050919050565b60006020820190506135a06000830184613387565b92915050565b60006135b06135c1565b90506135bc828261386d565b919050565b6000604051905090565b600067ffffffffffffffff8211156135e6576135e56139d4565b5b6135ef82613a17565b9050602081019050919050565b600067ffffffffffffffff821115613617576136166139d4565b5b61362082613a17565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061367b826137ef565b9150613686836137ef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136bb576136ba613918565b5b828201905092915050565b60006136d1826137ef565b91506136dc836137ef565b9250826136ec576136eb613947565b5b828204905092915050565b6000613702826137ef565b915061370d836137ef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561374657613745613918565b5b828202905092915050565b600061375c826137ef565b9150613767836137ef565b92508282101561377a57613779613918565b5b828203905092915050565b6000613790826137cf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561382657808201518184015260208101905061380b565b83811115613835576000848401525b50505050565b6000600282049050600182168061385357607f821691505b6020821081141561386757613866613976565b5b50919050565b61387682613a17565b810181811067ffffffffffffffff82111715613895576138946139d4565b5b80604052505050565b60006138a9826137ef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138dc576138db613918565b5b600182019050919050565b60006138f2826137ef565b91506138fd836137ef565b92508261390d5761390c613947565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f534f4c44204f5554000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74206163746976652100000000000000000000000000000000600082015250565b7f4d415820535550504c59204d4f5245205448414e204e4557204d41582053555060008201527f504c590000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752068617665207a65726f2062616c616e63650000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f414d4f554e54203c2031204f522045584345454453204d415800000000000000600082015250565b7f4e4557204d415820535550504c5920495320424947474552204f52204551554160008201527f4c20544f2043555252454e5420494e4445580000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613c1481613785565b8114613c1f57600080fd5b50565b613c2b81613797565b8114613c3657600080fd5b50565b613c42816137a3565b8114613c4d57600080fd5b50565b613c59816137ef565b8114613c6457600080fd5b5056fea26469706673582212206e19e55baffd00ec53915b88cff4721cb124d210d76a69f399fb0255d551bf1364736f6c63430008070033

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

000000000000000000000000000000000000000000000000001ff973cafa8000000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6261667962656967746f7565627078686c6170733766336d6c766f376c776f7274666337756d67376470327136757574336d7569776172736c65652e697066732e6e667473746f726167652e6c696e6b2f00000000000000

-----Decoded View---------------
Arg [0] : price (uint256): 9000000000000000
Arg [1] : maxSupply (uint256): 10000
Arg [2] : baseUri (string): https://bafybeigtouebpxhlaps7f3mlvo7lwortfc7umg7dp2q6uut3muiwarslee.ipfs.nftstorage.link/
Arg [3] : freeMintLimitPerWallet (uint256): 10
Arg [4] : maxMintPerTX (uint256): 20
Arg [5] : isSaleActive (bool): True
Arg [6] : freeMintSupply (uint256): 1500

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000001ff973cafa8000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [8] : 68747470733a2f2f6261667962656967746f7565627078686c6170733766336d
Arg [9] : 6c766f376c776f7274666337756d67376470327136757574336d756977617273
Arg [10] : 6c65652e697066732e6e667473746f726167652e6c696e6b2f00000000000000


Deployed Bytecode Sourcemap

45193:4056:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27066:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30179:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32007:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31570:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45400:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26315:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32872:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45306:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46320:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49063:173;;;;;;;;;;;;;:::i;:::-;;48907:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33113:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47099:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29987:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45518:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27435:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4834:103;;;;;;;;;;;;;:::i;:::-;;45485:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47206:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45279:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4183:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45448:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47321:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46701:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30348:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47986:909;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32283:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47484:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33369:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47601:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46794:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30523:432;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32641:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5092:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27066:305;27168:4;27220:25;27205:40;;;:11;:40;;;;:105;;;;27277:33;27262:48;;;:11;:48;;;;27205:105;:158;;;;27327:36;27351:11;27327:23;:36::i;:::-;27205:158;27185:178;;27066:305;;;:::o;30179:100::-;30233:13;30266:5;30259:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30179:100;:::o;32007:204::-;32075:7;32100:16;32108:7;32100;:16::i;:::-;32095:64;;32125:34;;;;;;;;;;;;;;32095:64;32179:15;:24;32195:7;32179:24;;;;;;;;;;;;;;;;;;;;;32172:31;;32007:204;;;:::o;31570:371::-;31643:13;31659:24;31675:7;31659:15;:24::i;:::-;31643:40;;31704:5;31698:11;;:2;:11;;;31694:48;;;31718:24;;;;;;;;;;;;;;31694:48;31775:5;31759:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;31785:37;31802:5;31809:12;:10;:12::i;:::-;31785:16;:37::i;:::-;31784:38;31759:63;31755:138;;;31846:35;;;;;;;;;;;;;;31755:138;31905:28;31914:2;31918:7;31927:5;31905:8;:28::i;:::-;31632:309;31570:371;;:::o;45400:41::-;;;;:::o;26315:303::-;26359:7;26584:15;:13;:15::i;:::-;26569:12;;26553:13;;:28;:46;26546:53;;26315:303;:::o;32872:170::-;33006:28;33016:4;33022:2;33026:7;33006:9;:28::i;:::-;32872:170;;;:::o;45306:25::-;;;;:::o;46320:134::-;46394:7;46420:18;:26;46439:6;46420:26;;;;;;;;;;;;;;;;46413:33;;46320:134;;;:::o;49063:173::-;4414:12;:10;:12::i;:::-;4403:23;;:7;:5;:7::i;:::-;:23;;;4395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49142:1:::1;49118:21;:25;49110:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49188:7;:5;:7::i;:::-;49180:25;;:48;49206:21;49180:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49063:173::o:0;48907:144::-;48982:11;47820:1;47806:11;:15;:49;;;;;47840:15;;47825:11;:30;;47806:49;47798:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47935:10;;47920:11;47904:13;;:27;;;;:::i;:::-;:41;;47896:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4414:12:::1;:10;:12::i;:::-;4403:23;;:7;:5;:7::i;:::-;:23;;;4395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49016:27:::2;49026:3;49031:11;49016:9;:27::i;:::-;48907:144:::0;;;:::o;33113:185::-;33251:39;33268:4;33274:2;33278:7;33251:39;;;;;;;;;;;;:16;:39::i;:::-;33113:185;;;:::o;47099:99::-;4414:12;:10;:12::i;:::-;4403:23;;:7;:5;:7::i;:::-;:23;;;4395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47183:7:::1;47172:8;:18;;;;;;;;;;;;:::i;:::-;;47099:99:::0;:::o;29987:125::-;30051:7;30078:21;30091:7;30078:12;:21::i;:::-;:26;;;30071:33;;29987:125;;;:::o;45518:31::-;;;;:::o;27435:206::-;27499:7;27540:1;27523:19;;:5;:19;;;27519:60;;;27551:28;;;;;;;;;;;;;;27519:60;27605:12;:19;27618:5;27605:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27597:36;;27590:43;;27435:206;;;:::o;4834:103::-;4414:12;:10;:12::i;:::-;4403:23;;:7;:5;:7::i;:::-;:23;;;4395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4899:30:::1;4926:1;4899:18;:30::i;:::-;4834:103::o:0;45485:26::-;;;;;;;;;;;;;:::o;47206:107::-;4414:12;:10;:12::i;:::-;4403:23;;:7;:5;:7::i;:::-;:23;;;4395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47296:9:::1;47283:10;:22;;;;;;;;;;;;:::i;:::-;;47206:107:::0;:::o;45279:20::-;;;;:::o;4183:87::-;4229:7;4256:6;;;;;;;;;;;4249:13;;4183:87;:::o;45448:30::-;;;;:::o;47321:155::-;4414:12;:10;:12::i;:::-;4403:23;;:7;:5;:7::i;:::-;:23;;;4395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47446:22:::1;47417:26;:51;;;;47321:155:::0;:::o;46701:85::-;4414:12;:10;:12::i;:::-;4403:23;;:7;:5;:7::i;:::-;:23;;;4395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46773:5:::1;46765;:13;;;;46701:85:::0;:::o;30348:104::-;30404:13;30437:7;30430:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30348:104;:::o;47986:909::-;48051:11;47820:1;47806:11;:15;:49;;;;;47840:15;;47825:11;:30;;47806:49;47798:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47935:10;;47920:11;47904:13;;:27;;;;:::i;:::-;:41;;47896:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48083:14:::1;;;;;;;;;;;48075:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;48131:20;48168:5;;48154:11;:19;;;;:::i;:::-;48131:42;;48207:16;;48191:13;;:32;48187:584;;;48240:25;48297:18;:30;48316:10;48297:30;;;;;;;;;;;;;;;;48268:26;;:59;;;;:::i;:::-;48240:87;;48366:1;48346:17;:21;48342:417;;;48409:17;48394:11;:32;48390:354;;48487:5;;48467:17;:25;;;;:::i;:::-;48451:41;;;;;:::i;:::-;;;48515:54;48539:10;48551:17;48515:23;:54::i;:::-;48390:354;;;48648:5;;48634:11;:19;;;;:::i;:::-;48618:35;;;;;:::i;:::-;;;48676:48;48700:10;48712:11;48676:23;:48::i;:::-;48390:354;48342:417;48225:546;48187:584;48804:12;48791:9;:25;;48783:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;48853:34;48863:10;48875:11;48853:9;:34::i;:::-;48064:831;47986:909:::0;;:::o;32283:287::-;32394:12;:10;:12::i;:::-;32382:24;;:8;:24;;;32378:54;;;32415:17;;;;;;;;;;;;;;32378:54;32490:8;32445:18;:32;32464:12;:10;:12::i;:::-;32445:32;;;;;;;;;;;;;;;:42;32478:8;32445:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32543:8;32514:48;;32529:12;:10;:12::i;:::-;32514:48;;;32553:8;32514:48;;;;;;:::i;:::-;;;;;;;;32283:287;;:::o;47484:109::-;4414:12;:10;:12::i;:::-;4403:23;;:7;:5;:7::i;:::-;:23;;;4395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47573:12:::1;47556:14;;:29;;;;;;;;;;;;;;;;;;47484:109:::0;:::o;33369:369::-;33536:28;33546:4;33552:2;33556:7;33536:9;:28::i;:::-;33579:15;:2;:13;;;:15::i;:::-;:76;;;;;33599:56;33630:4;33636:2;33640:7;33649:5;33599:30;:56::i;:::-;33598:57;33579:76;33575:156;;;33679:40;;;;;;;;;;;;;;33575:156;33369:369;;;;:::o;47601:121::-;4414:12;:10;:12::i;:::-;4403:23;;:7;:5;:7::i;:::-;:23;;;4395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47700:14:::1;47681:16;:33;;;;47601:121:::0;:::o;46794:297::-;4414:12;:10;:12::i;:::-;4403:23;;:7;:5;:7::i;:::-;:23;;;4395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46893:10:::1;;46878:12;:25;46869:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46979:13;;46963:12;:29;;46954:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;47071:12;47058:10;:25;;;;46794:297:::0;:::o;30523:432::-;30596:13;30627:16;30635:7;30627;:16::i;:::-;30622:59;;30652:29;;;;;;;;;;;;;;30622:59;30694:21;30718:10;:8;:10::i;:::-;30694:34;;30793:23;30819:12;:10;:12::i;:::-;30793:38;;30874:1;30855:7;30849:21;:26;;:98;;;;;;;;;;;;;;;;;30902:7;30911:18;:7;:16;:18::i;:::-;30931:9;30885:56;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30849:98;30842:105;;;;30523:432;;;:::o;32641:164::-;32738:4;32762:18;:25;32781:5;32762:25;;;;;;;;;;;;;;;:35;32788:8;32762:35;;;;;;;;;;;;;;;;;;;;;;;;;32755:42;;32641:164;;;;:::o;5092:201::-;4414:12;:10;:12::i;:::-;4403:23;;:7;:5;:7::i;:::-;:23;;;4395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5201:1:::1;5181:22;;:8;:22;;;;5173:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5257:28;5276:8;5257:18;:28::i;:::-;5092:201:::0;:::o;6884:326::-;6944:4;7201:1;7179:7;:19;;;:23;7172:30;;6884:326;;;:::o;16967:157::-;17052:4;17091:25;17076:40;;;:11;:40;;;;17069:47;;16967:157;;;:::o;33993:174::-;34050:4;34093:7;34074:15;:13;:15::i;:::-;:26;;:53;;;;;34114:13;;34104:7;:23;34074:53;:85;;;;;34132:11;:20;34144:7;34132:20;;;;;;;;;;;:27;;;;;;;;;;;;34131:28;34074:85;34067:92;;33993:174;;;:::o;2907:98::-;2960:7;2987:10;2980:17;;2907:98;:::o;42150:196::-;42292:2;42265:15;:24;42281:7;42265:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42330:7;42326:2;42310:28;;42319:5;42310:28;;;;;;;;;;;;42150:196;;;:::o;26089:92::-;26145:7;26089:92;:::o;37093:2130::-;37208:35;37246:21;37259:7;37246:12;:21::i;:::-;37208:59;;37306:4;37284:26;;:13;:18;;;:26;;;37280:67;;37319:28;;;;;;;;;;;;;;37280:67;37360:22;37402:4;37386:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;37423:36;37440:4;37446:12;:10;:12::i;:::-;37423:16;:36::i;:::-;37386:73;:126;;;;37500:12;:10;:12::i;:::-;37476:36;;:20;37488:7;37476:11;:20::i;:::-;:36;;;37386:126;37360:153;;37531:17;37526:66;;37557:35;;;;;;;;;;;;;;37526:66;37621:1;37607:16;;:2;:16;;;37603:52;;;37632:23;;;;;;;;;;;;;;37603:52;37668:43;37690:4;37696:2;37700:7;37709:1;37668:21;:43::i;:::-;37776:35;37793:1;37797:7;37806:4;37776:8;:35::i;:::-;38137:1;38107:12;:18;38120:4;38107:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38181:1;38153:12;:16;38166:2;38153:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38199:31;38233:11;:20;38245:7;38233:20;;;;;;;;;;;38199:54;;38284:2;38268:8;:13;;;:18;;;;;;;;;;;;;;;;;;38334:15;38301:8;:23;;;:49;;;;;;;;;;;;;;;;;;38602:19;38634:1;38624:7;:11;38602:33;;38650:31;38684:11;:24;38696:11;38684:24;;;;;;;;;;;38650:58;;38752:1;38727:27;;:8;:13;;;;;;;;;;;;:27;;;38723:384;;;38937:13;;38922:11;:28;38918:174;;38991:4;38975:8;:13;;;:20;;;;;;;;;;;;;;;;;;39044:13;:28;;;39018:8;:23;;;:54;;;;;;;;;;;;;;;;;;38918:174;38723:384;38082:1036;;;39154:7;39150:2;39135:27;;39144:4;39135:27;;;;;;;;;;;;39173:42;39194:4;39200:2;39204:7;39213:1;39173:20;:42::i;:::-;37197:2026;;37093:2130;;;:::o;34175:104::-;34244:27;34254:2;34258:8;34244:27;;;;;;;;;;;;:9;:27::i;:::-;34175:104;;:::o;28816:1109::-;28878:21;;:::i;:::-;28912:12;28927:7;28912:22;;28995:4;28976:15;:13;:15::i;:::-;:23;;:47;;;;;29010:13;;29003:4;:20;28976:47;28972:886;;;29044:31;29078:11;:17;29090:4;29078:17;;;;;;;;;;;29044:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29119:9;:16;;;29114:729;;29190:1;29164:28;;:9;:14;;;:28;;;29160:101;;29228:9;29221:16;;;;;;29160:101;29563:261;29570:4;29563:261;;;29603:6;;;;;;;;29648:11;:17;29660:4;29648:17;;;;;;;;;;;29636:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29722:1;29696:28;;:9;:14;;;:28;;;29692:109;;29764:9;29757:16;;;;;;29692:109;29563:261;;;29114:729;29025:833;28972:886;29886:31;;;;;;;;;;;;;;28816:1109;;;;:::o;5453:191::-;5527:16;5546:6;;;;;;;;;;;5527:25;;5572:8;5563:6;;:17;;;;;;;;;;;;;;;;;;5627:8;5596:40;;5617:8;5596:40;;;;;;;;;;;;5516:128;5453:191;:::o;46187:125::-;46299:5;46269:18;:26;46288:6;46269:26;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;46187:125;;:::o;42838:667::-;43001:4;43038:2;43022:36;;;43059:12;:10;:12::i;:::-;43073:4;43079:7;43088:5;43022:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43018:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43273:1;43256:6;:13;:18;43252:235;;;43302:40;;;;;;;;;;;;;;43252:235;43445:6;43439:13;43430:6;43426:2;43422:15;43415:38;43018:480;43151:45;;;43141:55;;;:6;:55;;;;43134:62;;;42838:667;;;;;;:::o;46464:108::-;46524:13;46556:8;46549:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46464:108;:::o;46580:112::-;46642:13;46674:10;46667:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46580:112;:::o;469:723::-;525:13;755:1;746:5;:10;742:53;;;773:10;;;;;;;;;;;;;;;;;;;;;742:53;805:12;820:5;805:20;;836:14;861:78;876:1;868:4;:9;861:78;;894:8;;;;;:::i;:::-;;;;925:2;917:10;;;;;:::i;:::-;;;861:78;;;949:19;981:6;971:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;949:39;;999:154;1015:1;1006:5;:10;999:154;;1043:1;1033:11;;;;;:::i;:::-;;;1110:2;1102:5;:10;;;;:::i;:::-;1089:2;:24;;;;:::i;:::-;1076:39;;1059:6;1066;1059:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1139:2;1130:11;;;;;:::i;:::-;;;999:154;;;1177:6;1163:21;;;;;469:723;;;;:::o;44153:159::-;;;;;:::o;44971:158::-;;;;;:::o;34642:163::-;34765:32;34771:2;34775:8;34785:5;34792:4;34765:5;:32::i;:::-;34642:163;;;:::o;35064:1775::-;35203:20;35226:13;;35203:36;;35268:1;35254:16;;:2;:16;;;35250:48;;;35279:19;;;;;;;;;;;;;;35250:48;35325:1;35313:8;:13;35309:44;;;35335:18;;;;;;;;;;;;;;35309:44;35366:61;35396:1;35400:2;35404:12;35418:8;35366:21;:61::i;:::-;35739:8;35704:12;:16;35717:2;35704:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35803:8;35763:12;:16;35776:2;35763:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35862:2;35829:11;:25;35841:12;35829:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;35929:15;35879:11;:25;35891:12;35879:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;35962:20;35985:12;35962:35;;36012:11;36041:8;36026:12;:23;36012:37;;36070:4;:23;;;;;36078:15;:2;:13;;;:15::i;:::-;36070:23;36066:641;;;36114:314;36170:12;36166:2;36145:38;;36162:1;36145:38;;;;;;;;;;;;36211:69;36250:1;36254:2;36258:14;;;;;;36274:5;36211:30;:69::i;:::-;36206:174;;36316:40;;;;;;;;;;;;;;36206:174;36423:3;36407:12;:19;;36114:314;;36509:12;36492:13;;:29;36488:43;;36523:8;;;36488:43;36066:641;;;36572:120;36628:14;;;;;;36624:2;36603:40;;36620:1;36603:40;;;;;;;;;;;;36687:3;36671:12;:19;;36572:120;;36066:641;36737:12;36721:13;:28;;;;35679:1082;;36771:60;36800:1;36804:2;36808:12;36822:8;36771:20;:60::i;:::-;35192:1647;35064:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8845:365::-;8987:3;9008:66;9072:1;9067:3;9008:66;:::i;:::-;9001:73;;9083:93;9172:3;9083:93;:::i;:::-;9201:2;9196:3;9192:12;9185:19;;8845:365;;;:::o;9216:366::-;9358:3;9379:67;9443:2;9438:3;9379:67;:::i;:::-;9372:74;;9455:93;9544:3;9455:93;:::i;:::-;9573:2;9568:3;9564:12;9557:19;;9216:366;;;:::o;9588:::-;9730:3;9751:67;9815:2;9810:3;9751:67;:::i;:::-;9744:74;;9827:93;9916:3;9827:93;:::i;:::-;9945:2;9940:3;9936:12;9929:19;;9588:366;;;:::o;9960:::-;10102:3;10123:67;10187:2;10182:3;10123:67;:::i;:::-;10116:74;;10199:93;10288:3;10199:93;:::i;:::-;10317:2;10312:3;10308:12;10301:19;;9960:366;;;:::o;10332:::-;10474:3;10495:67;10559:2;10554:3;10495:67;:::i;:::-;10488:74;;10571:93;10660:3;10571:93;:::i;:::-;10689:2;10684:3;10680:12;10673:19;;10332:366;;;:::o;10704:::-;10846:3;10867:67;10931:2;10926:3;10867:67;:::i;:::-;10860:74;;10943:93;11032:3;10943:93;:::i;:::-;11061:2;11056:3;11052:12;11045:19;;10704:366;;;:::o;11076:::-;11218:3;11239:67;11303:2;11298:3;11239:67;:::i;:::-;11232:74;;11315:93;11404:3;11315:93;:::i;:::-;11433:2;11428:3;11424:12;11417:19;;11076:366;;;:::o;11448:::-;11590:3;11611:67;11675:2;11670:3;11611:67;:::i;:::-;11604:74;;11687:93;11776:3;11687:93;:::i;:::-;11805:2;11800:3;11796:12;11789:19;;11448:366;;;:::o;11820:::-;11962:3;11983:67;12047:2;12042:3;11983:67;:::i;:::-;11976:74;;12059:93;12148:3;12059:93;:::i;:::-;12177:2;12172:3;12168:12;12161:19;;11820:366;;;:::o;12192:118::-;12279:24;12297:5;12279:24;:::i;:::-;12274:3;12267:37;12192:118;;:::o;12316:595::-;12544:3;12566:95;12657:3;12648:6;12566:95;:::i;:::-;12559:102;;12678:95;12769:3;12760:6;12678:95;:::i;:::-;12671:102;;12790:95;12881:3;12872:6;12790:95;:::i;:::-;12783:102;;12902:3;12895:10;;12316:595;;;;;;:::o;12917:222::-;13010:4;13048:2;13037:9;13033:18;13025:26;;13061:71;13129:1;13118:9;13114:17;13105:6;13061:71;:::i;:::-;12917:222;;;;:::o;13145:640::-;13340:4;13378:3;13367:9;13363:19;13355:27;;13392:71;13460:1;13449:9;13445:17;13436:6;13392:71;:::i;:::-;13473:72;13541:2;13530:9;13526:18;13517:6;13473:72;:::i;:::-;13555;13623:2;13612:9;13608:18;13599:6;13555:72;:::i;:::-;13674:9;13668:4;13664:20;13659:2;13648:9;13644:18;13637:48;13702:76;13773:4;13764:6;13702:76;:::i;:::-;13694:84;;13145:640;;;;;;;:::o;13791:210::-;13878:4;13916:2;13905:9;13901:18;13893:26;;13929:65;13991:1;13980:9;13976:17;13967:6;13929:65;:::i;:::-;13791:210;;;;:::o;14007:313::-;14120:4;14158:2;14147:9;14143:18;14135:26;;14207:9;14201:4;14197:20;14193:1;14182:9;14178:17;14171:47;14235:78;14308:4;14299:6;14235:78;:::i;:::-;14227:86;;14007:313;;;;:::o;14326:419::-;14492:4;14530:2;14519:9;14515:18;14507:26;;14579:9;14573:4;14569:20;14565:1;14554:9;14550:17;14543:47;14607:131;14733:4;14607:131;:::i;:::-;14599:139;;14326:419;;;:::o;14751:::-;14917:4;14955:2;14944:9;14940:18;14932:26;;15004:9;14998:4;14994:20;14990:1;14979:9;14975:17;14968:47;15032:131;15158:4;15032:131;:::i;:::-;15024:139;;14751:419;;;:::o;15176:::-;15342:4;15380:2;15369:9;15365:18;15357:26;;15429:9;15423:4;15419:20;15415:1;15404:9;15400:17;15393:47;15457:131;15583:4;15457:131;:::i;:::-;15449:139;;15176:419;;;:::o;15601:::-;15767:4;15805:2;15794:9;15790:18;15782:26;;15854:9;15848:4;15844:20;15840:1;15829:9;15825:17;15818:47;15882:131;16008:4;15882:131;:::i;:::-;15874:139;;15601:419;;;:::o;16026:::-;16192:4;16230:2;16219:9;16215:18;16207:26;;16279:9;16273:4;16269:20;16265:1;16254:9;16250:17;16243:47;16307:131;16433:4;16307:131;:::i;:::-;16299:139;;16026:419;;;:::o;16451:::-;16617:4;16655:2;16644:9;16640:18;16632:26;;16704:9;16698:4;16694:20;16690:1;16679:9;16675:17;16668:47;16732:131;16858:4;16732:131;:::i;:::-;16724:139;;16451:419;;;:::o;16876:::-;17042:4;17080:2;17069:9;17065:18;17057:26;;17129:9;17123:4;17119:20;17115:1;17104:9;17100:17;17093:47;17157:131;17283:4;17157:131;:::i;:::-;17149:139;;16876:419;;;:::o;17301:::-;17467:4;17505:2;17494:9;17490:18;17482:26;;17554:9;17548:4;17544:20;17540:1;17529:9;17525:17;17518:47;17582:131;17708:4;17582:131;:::i;:::-;17574:139;;17301:419;;;:::o;17726:::-;17892:4;17930:2;17919:9;17915:18;17907:26;;17979:9;17973:4;17969:20;17965:1;17954:9;17950:17;17943:47;18007:131;18133:4;18007:131;:::i;:::-;17999:139;;17726:419;;;:::o;18151:222::-;18244:4;18282:2;18271:9;18267:18;18259:26;;18295:71;18363:1;18352:9;18348:17;18339:6;18295:71;:::i;:::-;18151:222;;;;:::o;18379:129::-;18413:6;18440:20;;:::i;:::-;18430:30;;18469:33;18497:4;18489:6;18469:33;:::i;:::-;18379:129;;;:::o;18514:75::-;18547:6;18580:2;18574:9;18564:19;;18514:75;:::o;18595:307::-;18656:4;18746:18;18738:6;18735:30;18732:56;;;18768:18;;:::i;:::-;18732:56;18806:29;18828:6;18806:29;:::i;:::-;18798:37;;18890:4;18884;18880:15;18872:23;;18595:307;;;:::o;18908:308::-;18970:4;19060:18;19052:6;19049:30;19046:56;;;19082:18;;:::i;:::-;19046:56;19120:29;19142:6;19120:29;:::i;:::-;19112:37;;19204:4;19198;19194:15;19186:23;;18908:308;;;:::o;19222:98::-;19273:6;19307:5;19301:12;19291:22;;19222:98;;;:::o;19326:99::-;19378:6;19412:5;19406:12;19396:22;;19326:99;;;:::o;19431:168::-;19514:11;19548:6;19543:3;19536:19;19588:4;19583:3;19579:14;19564:29;;19431:168;;;;:::o;19605:169::-;19689:11;19723:6;19718:3;19711:19;19763:4;19758:3;19754:14;19739:29;;19605:169;;;;:::o;19780:148::-;19882:11;19919:3;19904:18;;19780:148;;;;:::o;19934:305::-;19974:3;19993:20;20011:1;19993:20;:::i;:::-;19988:25;;20027:20;20045:1;20027:20;:::i;:::-;20022:25;;20181:1;20113:66;20109:74;20106:1;20103:81;20100:107;;;20187:18;;:::i;:::-;20100:107;20231:1;20228;20224:9;20217:16;;19934:305;;;;:::o;20245:185::-;20285:1;20302:20;20320:1;20302:20;:::i;:::-;20297:25;;20336:20;20354:1;20336:20;:::i;:::-;20331:25;;20375:1;20365:35;;20380:18;;:::i;:::-;20365:35;20422:1;20419;20415:9;20410:14;;20245:185;;;;:::o;20436:348::-;20476:7;20499:20;20517:1;20499:20;:::i;:::-;20494:25;;20533:20;20551:1;20533:20;:::i;:::-;20528:25;;20721:1;20653:66;20649:74;20646:1;20643:81;20638:1;20631:9;20624:17;20620:105;20617:131;;;20728:18;;:::i;:::-;20617:131;20776:1;20773;20769:9;20758:20;;20436:348;;;;:::o;20790:191::-;20830:4;20850:20;20868:1;20850:20;:::i;:::-;20845:25;;20884:20;20902:1;20884:20;:::i;:::-;20879:25;;20923:1;20920;20917:8;20914:34;;;20928:18;;:::i;:::-;20914:34;20973:1;20970;20966:9;20958:17;;20790:191;;;;:::o;20987:96::-;21024:7;21053:24;21071:5;21053:24;:::i;:::-;21042:35;;20987:96;;;:::o;21089:90::-;21123:7;21166:5;21159:13;21152:21;21141:32;;21089:90;;;:::o;21185:149::-;21221:7;21261:66;21254:5;21250:78;21239:89;;21185:149;;;:::o;21340:126::-;21377:7;21417:42;21410:5;21406:54;21395:65;;21340:126;;;:::o;21472:77::-;21509:7;21538:5;21527:16;;21472:77;;;:::o;21555:154::-;21639:6;21634:3;21629;21616:30;21701:1;21692:6;21687:3;21683:16;21676:27;21555:154;;;:::o;21715:307::-;21783:1;21793:113;21807:6;21804:1;21801:13;21793:113;;;21892:1;21887:3;21883:11;21877:18;21873:1;21868:3;21864:11;21857:39;21829:2;21826:1;21822:10;21817:15;;21793:113;;;21924:6;21921:1;21918:13;21915:101;;;22004:1;21995:6;21990:3;21986:16;21979:27;21915:101;21764:258;21715:307;;;:::o;22028:320::-;22072:6;22109:1;22103:4;22099:12;22089:22;;22156:1;22150:4;22146:12;22177:18;22167:81;;22233:4;22225:6;22221:17;22211:27;;22167:81;22295:2;22287:6;22284:14;22264:18;22261:38;22258:84;;;22314:18;;:::i;:::-;22258:84;22079:269;22028:320;;;:::o;22354:281::-;22437:27;22459:4;22437:27;:::i;:::-;22429:6;22425:40;22567:6;22555:10;22552:22;22531:18;22519:10;22516:34;22513:62;22510:88;;;22578:18;;:::i;:::-;22510:88;22618:10;22614:2;22607:22;22397:238;22354:281;;:::o;22641:233::-;22680:3;22703:24;22721:5;22703:24;:::i;:::-;22694:33;;22749:66;22742:5;22739:77;22736:103;;;22819:18;;:::i;:::-;22736:103;22866:1;22859:5;22855:13;22848:20;;22641:233;;;:::o;22880:176::-;22912:1;22929:20;22947:1;22929:20;:::i;:::-;22924:25;;22963:20;22981:1;22963:20;:::i;:::-;22958:25;;23002:1;22992:35;;23007:18;;:::i;:::-;22992:35;23048:1;23045;23041:9;23036:14;;22880:176;;;;:::o;23062:180::-;23110:77;23107:1;23100:88;23207:4;23204:1;23197:15;23231:4;23228:1;23221:15;23248:180;23296:77;23293:1;23286:88;23393:4;23390:1;23383:15;23417:4;23414:1;23407:15;23434:180;23482:77;23479:1;23472:88;23579:4;23576:1;23569:15;23603:4;23600:1;23593:15;23620:180;23668:77;23665:1;23658:88;23765:4;23762:1;23755:15;23789:4;23786:1;23779:15;23806:180;23854:77;23851:1;23844:88;23951:4;23948:1;23941:15;23975:4;23972:1;23965:15;23992:117;24101:1;24098;24091:12;24115:117;24224:1;24221;24214:12;24238:117;24347:1;24344;24337:12;24361:117;24470:1;24467;24460:12;24484:102;24525:6;24576:2;24572:7;24567:2;24560:5;24556:14;24552:28;24542:38;;24484:102;;;:::o;24592:158::-;24732:10;24728:1;24720:6;24716:14;24709:34;24592:158;:::o;24756:225::-;24896:34;24892:1;24884:6;24880:14;24873:58;24965:8;24960:2;24952:6;24948:15;24941:33;24756:225;:::o;24987:166::-;25127:18;25123:1;25115:6;25111:14;25104:42;24987:166;:::o;25159:222::-;25299:34;25295:1;25287:6;25283:14;25276:58;25368:5;25363:2;25355:6;25351:15;25344:30;25159:222;:::o;25387:171::-;25527:23;25523:1;25515:6;25511:14;25504:47;25387:171;:::o;25564:182::-;25704:34;25700:1;25692:6;25688:14;25681:58;25564:182;:::o;25752:175::-;25892:27;25888:1;25880:6;25876:14;25869:51;25752:175;:::o;25933:237::-;26073:34;26069:1;26061:6;26057:14;26050:58;26142:20;26137:2;26129:6;26125:15;26118:45;25933:237;:::o;26176:169::-;26316:21;26312:1;26304:6;26300:14;26293:45;26176:169;:::o;26351:122::-;26424:24;26442:5;26424:24;:::i;:::-;26417:5;26414:35;26404:63;;26463:1;26460;26453:12;26404:63;26351:122;:::o;26479:116::-;26549:21;26564:5;26549:21;:::i;:::-;26542:5;26539:32;26529:60;;26585:1;26582;26575:12;26529:60;26479:116;:::o;26601:120::-;26673:23;26690:5;26673:23;:::i;:::-;26666:5;26663:34;26653:62;;26711:1;26708;26701:12;26653:62;26601:120;:::o;26727:122::-;26800:24;26818:5;26800:24;:::i;:::-;26793:5;26790:35;26780:63;;26839:1;26836;26829:12;26780:63;26727:122;:::o

Swarm Source

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