ETH Price: $2,904.88 (+2.88%)
 

Overview

TokenID

2908

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

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:
NFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-03
*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol



pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol



pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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



pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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



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



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



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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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



pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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



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



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



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



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/IERC721Enumerable.sol


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

pragma solidity ^0.8.0;


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

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

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

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



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.sol


// Creator: Chiru Labs

pragma solidity ^0.8.0;









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

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex = 0;

    // 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_;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

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

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

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

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

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

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

        uint256 updatedIndex = startTokenId;

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

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

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

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;
        }

        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

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

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

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

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

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

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


pragma solidity ^0.8.7;






contract NFT is ERC721A, Ownable, ReentrancyGuard {
  using Counters for Counters.Counter;
  using SafeMath for uint256;
  uint256 private _mintCost;
  uint256 private _maxSupply;
  bool private _isPublicMintEnabled;
  uint256 private _freeSupply;
  uint256 private _freeMintLimit;
  
  /**
  * @dev Initializes the contract setting the `tokenName` and `symbol` of the nft, `cost` of each mint call, and maximum `supply` of the nft.
  * Note: `cost` is in wei. 
  */
  constructor(string memory tokenName, string memory symbol, uint256 cost, uint256 supply) ERC721A(tokenName, symbol) Ownable() {
    _mintCost = cost;
    _maxSupply = supply;
    _isPublicMintEnabled = false;
    _freeSupply = 0;
    _freeMintLimit = 1;
  }

  /**
  * @dev Changes contract state to enable public access to `mintTokens` function
  * Can only be called by the current owner.
  */
  function allowPublicMint()
  public
  onlyOwner{
    _isPublicMintEnabled = true;
  }

  /**
  * @dev Changes contract state to disable public access to `mintTokens` function
  * Can only be called by the current owner.
  */
  function denyPublicMint()
  public
  onlyOwner{
    _isPublicMintEnabled = false;
  }

  /**
  * @dev Mint `count` tokens if requirements are satisfied.
  * 
  */
  function mintTokens(uint256 count)
  public
  payable
  nonReentrant{
    require(_isPublicMintEnabled, "Mint disabled");
    require(count > 0 && count <= 100, "You can drop minimum 1, maximum 100 NFTs");
    require(count.add(totalSupply()) <= _maxSupply, "Exceeds max supply");
    require(owner() == msg.sender || msg.value >= _mintCost.mul(count),
           "Ether value sent is below the price");
    
    _mint(msg.sender, count);
  }

  /**
  * @dev Mint a token to each Address of `recipients`.
  * Can only be called if requirements are satisfied.
  */
  function mintTokens(address[] calldata recipients)
  public
  payable
  nonReentrant{
    require(recipients.length>0,"Missing recipient addresses");
    require(owner() == msg.sender || _isPublicMintEnabled, "Mint disabled");
    require(recipients.length > 0 && recipients.length <= 100, "You can drop minimum 1, maximum 100 NFTs");
    require(recipients.length.add(totalSupply()) <= _maxSupply, "Exceeds max supply");
    require(owner() == msg.sender || msg.value >= _mintCost.mul(recipients.length),
           "Ether value sent is below the price");
    for(uint i=0; i<recipients.length; i++){
        _mint(recipients[i], 1);
     }
  }

  /**
  * @dev Mint `count` tokens if requirements are satisfied.
  */
  function freeMint(uint256 count) 
  public 
  payable 
  nonReentrant{
    require(owner() == msg.sender || _isPublicMintEnabled, "Mint disabled");
    require(totalSupply() + count <= _freeSupply, "Exceed max free supply");
    require(count <= _freeMintLimit, "Cant mint more than mint limit");
    require(count > 0, "Must mint at least 1 token");

    _safeMint(msg.sender, count);
  }

  /**
  * @dev Update the cost to mint a token.
  * Can only be called by the current owner.
  */
  function setCost(uint256 cost) public onlyOwner{
    _mintCost = cost;
  }

  /**
  * @dev Update the max supply.
  * Can only be called by the current owner.
  */
  function setMaxSupply(uint256 max) public onlyOwner{
    _maxSupply = max;
  }

  /**
  * @dev Update the max free supply.
  * Can only be called by the current owner.
  */
  function setFreeSupply(uint256 max) public onlyOwner{
    _freeSupply = max;
  }
  /**
  * @dev Update the free mint transaction limit.
  * Can only be called by the current owner.
  */
  function setFreeMintLimit(uint256 max) public onlyOwner{
    _freeMintLimit = max;
  }

  /**
  * @dev Transfers contract balance to contract owner.
  * Can only be called by the current owner.
  */
  function withdraw() public onlyOwner{
    payable(owner()).transfer(address(this).balance);
  }

  /**
  * @dev Used by public mint functions and by owner functions.
  * Can only be called internally by other functions.
  */
  function _mint(address to, uint256 count) internal virtual returns (uint256){
    _safeMint(to, count);

    return count;
  }

  function getState() public view returns (bool, uint256, uint256, uint256, uint256, uint256){
    return (_isPublicMintEnabled, _mintCost, _maxSupply, totalSupply(), _freeSupply, _freeMintLimit);
  }
  function getCost() public view returns (uint256){
    return _mintCost;
  }
  function getMaxSupply() public view returns (uint256){
    return _maxSupply;
  }
  function getCurrentSupply() public view returns (uint256){
    return totalSupply();
  }
  function getMintStatus() public view returns (bool) {
    return _isPublicMintEnabled;
  }
  function getFreeSupply() public view returns (uint256) {
    return _freeSupply;
  }
  function getFreeMintLimit() public view returns (uint256) {
    return _freeMintLimit;
  }
  function _baseURI() override internal pure returns (string memory) {
    return "https://mw9spidhbc.execute-api.us-east-1.amazonaws.com/dev/token/magic-treasure/";
  }
  function contractURI() public pure returns (string memory) {
    return "https://mw9spidhbc.execute-api.us-east-1.amazonaws.com/dev/contract/magic-treasure";
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"allowPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"denyPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFreeMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFreeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getState","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"mintTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mintTokens","outputs":[],"stateMutability":"payable","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setFreeMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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"}]

6080604052600080553480156200001557600080fd5b50604051620051583803806200515883398181016040528101906200003b9190620002ef565b8383816001908051906020019062000055929190620001aa565b5080600290805190602001906200006e929190620001aa565b5050506200009162000085620000dc60201b60201c565b620000e460201b60201c565b60016008819055508160098190555080600a819055506000600b60006101000a81548160ff0219169083151502179055506000600c819055506001600d819055505050505062000547565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b8906200043e565b90600052602060002090601f016020900481019282620001dc576000855562000228565b82601f10620001f757805160ff191683800117855562000228565b8280016001018555821562000228579182015b82811115620002275782518255916020019190600101906200020a565b5b5090506200023791906200023b565b5090565b5b80821115620002565760008160009055506001016200023c565b5090565b6000620002716200026b84620003c8565b6200039f565b90508281526020810184848401111562000290576200028f6200050d565b5b6200029d84828562000408565b509392505050565b600082601f830112620002bd57620002bc62000508565b5b8151620002cf8482602086016200025a565b91505092915050565b600081519050620002e9816200052d565b92915050565b600080600080608085870312156200030c576200030b62000517565b5b600085015167ffffffffffffffff8111156200032d576200032c62000512565b5b6200033b87828801620002a5565b945050602085015167ffffffffffffffff8111156200035f576200035e62000512565b5b6200036d87828801620002a5565b93505060406200038087828801620002d8565b92505060606200039387828801620002d8565b91505092959194509250565b6000620003ab620003be565b9050620003b9828262000474565b919050565b6000604051905090565b600067ffffffffffffffff821115620003e657620003e5620004d9565b5b620003f1826200051c565b9050602081019050919050565b6000819050919050565b60005b83811015620004285780820151818401526020810190506200040b565b8381111562000438576000848401525b50505050565b600060028204905060018216806200045757607f821691505b602082108114156200046e576200046d620004aa565b5b50919050565b6200047f826200051c565b810181811067ffffffffffffffff82111715620004a157620004a0620004d9565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200053881620003fe565b81146200054457600080fd5b50565b614c0180620005576000396000f3fe60806040526004361061021a5760003560e01c80636f8b44b011610123578063a22cb465116100ab578063c87b56dd1161006f578063c87b56dd14610763578063e8a3d485146107a0578063e985e9c5146107cb578063f2fde38b14610808578063f676308a146108315761021a565b8063a22cb46514610692578063b0505132146106bb578063b88d4fde146106e6578063bd2f6eb81461070f578063bd3e19d4146107385761021a565b80638da5cb5b116100f25780638da5cb5b146105de578063941ada0e1461060957806395d89b411461063457806397304ced1461065f5780639edcc3101461067b5761021a565b80636f8b44b01461054557806370a082311461056e578063715018a6146105ab5780637c928fe9146105c25761021a565b80633ccfd60b116101a657806344a0d68a1161017557806344a0d68a1461044c5780634c0f38c2146104755780634f3e1efc146104a05780634f6ccce7146104cb5780636352211e146105085761021a565b80633ccfd60b146103c55780633fa40f94146103dc5780634282b335146103f857806342842e0e146104235761021a565b806318160ddd116101ed57806318160ddd146102ed5780631865c57d1461031857806323b872dd146103485780632f745c591461037157806335133b40146103ae5761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906134cf565b61085a565b6040516102539190613a85565b60405180910390f35b34801561026857600080fd5b506102716109a4565b60405161027e9190613b01565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613529565b610a36565b6040516102bb9190613a1e565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613442565b610abb565b005b3480156102f957600080fd5b50610302610bd4565b60405161030f9190613ea3565b60405180910390f35b34801561032457600080fd5b5061032d610bdd565b60405161033f96959493929190613aa0565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a919061332c565b610c1e565b005b34801561037d57600080fd5b5061039860048036038101906103939190613442565b610c2e565b6040516103a59190613ea3565b60405180910390f35b3480156103ba57600080fd5b506103c3610e2c565b005b3480156103d157600080fd5b506103da610ec5565b005b6103f660048036038101906103f19190613482565b610f91565b005b34801561040457600080fd5b5061040d611260565b60405161041a9190613ea3565b60405180910390f35b34801561042f57600080fd5b5061044a6004803603810190610445919061332c565b61126a565b005b34801561045857600080fd5b50610473600480360381019061046e9190613529565b61128a565b005b34801561048157600080fd5b5061048a611310565b6040516104979190613ea3565b60405180910390f35b3480156104ac57600080fd5b506104b561131a565b6040516104c29190613ea3565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed9190613529565b611329565b6040516104ff9190613ea3565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a9190613529565b61137c565b60405161053c9190613a1e565b60405180910390f35b34801561055157600080fd5b5061056c60048036038101906105679190613529565b611392565b005b34801561057a57600080fd5b50610595600480360381019061059091906132bf565b611418565b6040516105a29190613ea3565b60405180910390f35b3480156105b757600080fd5b506105c0611501565b005b6105dc60048036038101906105d79190613529565b611589565b005b3480156105ea57600080fd5b506105f3611757565b6040516106009190613a1e565b60405180910390f35b34801561061557600080fd5b5061061e611781565b60405161062b9190613a85565b60405180910390f35b34801561064057600080fd5b50610649611798565b6040516106569190613b01565b60405180910390f35b61067960048036038101906106749190613529565b61182a565b005b34801561068757600080fd5b50610690611a1f565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613402565b611ab8565b005b3480156106c757600080fd5b506106d0611c39565b6040516106dd9190613ea3565b60405180910390f35b3480156106f257600080fd5b5061070d6004803603810190610708919061337f565b611c43565b005b34801561071b57600080fd5b5061073660048036038101906107319190613529565b611c9f565b005b34801561074457600080fd5b5061074d611d25565b60405161075a9190613ea3565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613529565b611d2f565b6040516107979190613b01565b60405180910390f35b3480156107ac57600080fd5b506107b5611dd6565b6040516107c29190613b01565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906132ec565b611df6565b6040516107ff9190613a85565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a91906132bf565b611e8a565b005b34801561083d57600080fd5b5061085860048036038101906108539190613529565b611f82565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098d57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061099d575061099c82612008565b5b9050919050565b6060600180546109b3906141ae565b80601f01602080910402602001604051908101604052809291908181526020018280546109df906141ae565b8015610a2c5780601f10610a0157610100808354040283529160200191610a2c565b820191906000526020600020905b815481529060010190602001808311610a0f57829003601f168201915b5050505050905090565b6000610a4182612072565b610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7790613e83565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac68261137c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90613d63565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b5661207f565b73ffffffffffffffffffffffffffffffffffffffff161480610b855750610b8481610b7f61207f565b611df6565b5b610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613c23565b60405180910390fd5b610bcf838383612087565b505050565b60008054905090565b600080600080600080600b60009054906101000a900460ff16600954600a54610c04610bd4565b600c54600d54955095509550955095509550909192939495565b610c29838383612139565b505050565b6000610c3983611418565b8210610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190613b23565b60405180910390fd5b6000610c84610bd4565b905060008060005b83811015610dea576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d7e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd65786841415610dc7578195505050505050610e26565b8380610dd290614211565b9450505b508080610de290614211565b915050610c8c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613e43565b60405180910390fd5b92915050565b610e3461207f565b73ffffffffffffffffffffffffffffffffffffffff16610e52611757565b73ffffffffffffffffffffffffffffffffffffffff1614610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90613cc3565b60405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550565b610ecd61207f565b73ffffffffffffffffffffffffffffffffffffffff16610eeb611757565b73ffffffffffffffffffffffffffffffffffffffff1614610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890613cc3565b60405180910390fd5b610f49611757565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f8e573d6000803e3d6000fd5b50565b60026008541415610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90613e63565b60405180910390fd5b600260088190555060008282905011611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c90613d43565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611044611757565b73ffffffffffffffffffffffffffffffffffffffff1614806110725750600b60009054906101000a900460ff165b6110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a890613e23565b60405180910390fd5b6000828290501180156110c8575060648282905011155b611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90613c03565b60405180910390fd5b600a54611127611115610bd4565b848490506126e090919063ffffffff16565b1115611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90613c43565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611187611757565b73ffffffffffffffffffffffffffffffffffffffff1614806111c057506111bc828290506009546126f690919063ffffffff16565b3410155b6111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690613c63565b60405180910390fd5b60005b828290508110156112535761123f83838381811061122357611222614318565b5b905060200201602081019061123891906132bf565b600161270c565b50808061124b90614211565b915050611202565b5060016008819055505050565b6000600d54905090565b61128583838360405180602001604052806000815250611c43565b505050565b61129261207f565b73ffffffffffffffffffffffffffffffffffffffff166112b0611757565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90613cc3565b60405180910390fd5b8060098190555050565b6000600a54905090565b6000611324610bd4565b905090565b6000611333610bd4565b8210611374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136b90613bc3565b60405180910390fd5b819050919050565b600061138782612721565b600001519050919050565b61139a61207f565b73ffffffffffffffffffffffffffffffffffffffff166113b8611757565b73ffffffffffffffffffffffffffffffffffffffff161461140e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140590613cc3565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148090613c83565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61150961207f565b73ffffffffffffffffffffffffffffffffffffffff16611527611757565b73ffffffffffffffffffffffffffffffffffffffff161461157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490613cc3565b60405180910390fd5b611587600061287c565b565b600260085414156115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690613e63565b60405180910390fd5b60026008819055503373ffffffffffffffffffffffffffffffffffffffff166115f6611757565b73ffffffffffffffffffffffffffffffffffffffff1614806116245750600b60009054906101000a900460ff165b611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90613e23565b60405180910390fd5b600c548161166f610bd4565b6116799190613f9d565b11156116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b190613de3565b60405180910390fd5b600d548111156116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690613b43565b60405180910390fd5b60008111611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990613ba3565b60405180910390fd5b61174c3382612942565b600160088190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600b60009054906101000a900460ff16905090565b6060600280546117a7906141ae565b80601f01602080910402602001604051908101604052809291908181526020018280546117d3906141ae565b80156118205780601f106117f557610100808354040283529160200191611820565b820191906000526020600020905b81548152906001019060200180831161180357829003601f168201915b5050505050905090565b60026008541415611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790613e63565b60405180910390fd5b6002600881905550600b60009054906101000a900460ff166118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90613e23565b60405180910390fd5b6000811180156118d8575060648111155b611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90613c03565b60405180910390fd5b600a54611934611925610bd4565b836126e090919063ffffffff16565b1115611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90613c43565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611994611757565b73ffffffffffffffffffffffffffffffffffffffff1614806119ca57506119c6816009546126f690919063ffffffff16565b3410155b611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090613c63565b60405180910390fd5b611a13338261270c565b50600160088190555050565b611a2761207f565b73ffffffffffffffffffffffffffffffffffffffff16611a45611757565b73ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290613cc3565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b611ac061207f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2590613d03565b60405180910390fd5b8060066000611b3b61207f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611be861207f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c2d9190613a85565b60405180910390a35050565b6000600c54905090565b611c4e848484612139565b611c5a84848484612960565b611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9090613da3565b60405180910390fd5b50505050565b611ca761207f565b73ffffffffffffffffffffffffffffffffffffffff16611cc5611757565b73ffffffffffffffffffffffffffffffffffffffff1614611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1290613cc3565b60405180910390fd5b80600d8190555050565b6000600954905090565b6060611d3a82612072565b611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7090613ce3565b60405180910390fd5b6000611d83612af7565b90506000815111611da35760405180602001604052806000815250611dce565b80611dad84612b17565b604051602001611dbe9291906139fa565b6040516020818303038152906040525b915050919050565b6060604051806080016040528060528152602001614b2a60529139905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e9261207f565b73ffffffffffffffffffffffffffffffffffffffff16611eb0611757565b73ffffffffffffffffffffffffffffffffffffffff1614611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90613cc3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90613b63565b60405180910390fd5b611f7f8161287c565b50565b611f8a61207f565b73ffffffffffffffffffffffffffffffffffffffff16611fa8611757565b73ffffffffffffffffffffffffffffffffffffffff1614611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590613cc3565b60405180910390fd5b80600c8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061214482612721565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661216b61207f565b73ffffffffffffffffffffffffffffffffffffffff1614806121c7575061219061207f565b73ffffffffffffffffffffffffffffffffffffffff166121af84610a36565b73ffffffffffffffffffffffffffffffffffffffff16145b806121e357506121e282600001516121dd61207f565b611df6565b5b905080612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c90613d23565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e90613ca3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe90613be3565b60405180910390fd5b6123148585856001612c78565b6123246000848460000151612087565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461252a9190613f9d565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612670576125a081612072565b1561266f576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126d88686866001612c7e565b505050505050565b600081836126ee9190613f9d565b905092915050565b600081836127049190614024565b905092915050565b60006127188383612942565b81905092915050565b612729613156565b61273282612072565b612771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276890613b83565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612863578092505050612877565b50808061286f90614184565b915050612777565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61295c828260405180602001604052806000815250612c84565b5050565b60006129818473ffffffffffffffffffffffffffffffffffffffff16613143565b15612aea578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129aa61207f565b8786866040518563ffffffff1660e01b81526004016129cc9493929190613a39565b602060405180830381600087803b1580156129e657600080fd5b505af1925050508015612a1757506040513d601f19601f82011682018060405250810190612a1491906134fc565b60015b612a9a573d8060008114612a47576040519150601f19603f3d011682016040523d82523d6000602084013e612a4c565b606091505b50600081511415612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8990613da3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612aef565b600190505b949350505050565b6060604051806080016040528060508152602001614b7c60509139905090565b60606000821415612b5f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c73565b600082905060005b60008214612b91578080612b7a90614211565b915050600a82612b8a9190613ff3565b9150612b67565b60008167ffffffffffffffff811115612bad57612bac614347565b5b6040519080825280601f01601f191660200182016040528015612bdf5781602001600182028036833780820191505090505b5090505b60008514612c6c57600182612bf8919061407e565b9150600a85612c07919061425a565b6030612c139190613f9d565b60f81b818381518110612c2957612c28614318565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c659190613ff3565b9450612be3565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf190613e03565b60405180910390fd5b612d0381612072565b15612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a90613dc3565b60405180910390fd5b60008311612d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7d90613d83565b60405180910390fd5b612d936000858386612c78565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612e909190613f57565b6fffffffffffffffffffffffffffffffff168152602001858360200151612eb79190613f57565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561312657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130c66000888488612960565b613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc90613da3565b60405180910390fd5b818061311090614211565b925050808061311e90614211565b915050613055565b508060008190555061313b6000878588612c7e565b505050505050565b600080823b905060008111915050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b60006131a361319e84613ee3565b613ebe565b9050828152602081018484840111156131bf576131be614385565b5b6131ca848285614142565b509392505050565b6000813590506131e181614acd565b92915050565b60008083601f8401126131fd576131fc61437b565b5b8235905067ffffffffffffffff81111561321a57613219614376565b5b60208301915083602082028301111561323657613235614380565b5b9250929050565b60008135905061324c81614ae4565b92915050565b60008135905061326181614afb565b92915050565b60008151905061327681614afb565b92915050565b600082601f8301126132915761329061437b565b5b81356132a1848260208601613190565b91505092915050565b6000813590506132b981614b12565b92915050565b6000602082840312156132d5576132d461438f565b5b60006132e3848285016131d2565b91505092915050565b600080604083850312156133035761330261438f565b5b6000613311858286016131d2565b9250506020613322858286016131d2565b9150509250929050565b6000806000606084860312156133455761334461438f565b5b6000613353868287016131d2565b9350506020613364868287016131d2565b9250506040613375868287016132aa565b9150509250925092565b600080600080608085870312156133995761339861438f565b5b60006133a7878288016131d2565b94505060206133b8878288016131d2565b93505060406133c9878288016132aa565b925050606085013567ffffffffffffffff8111156133ea576133e961438a565b5b6133f68782880161327c565b91505092959194509250565b600080604083850312156134195761341861438f565b5b6000613427858286016131d2565b92505060206134388582860161323d565b9150509250929050565b600080604083850312156134595761345861438f565b5b6000613467858286016131d2565b9250506020613478858286016132aa565b9150509250929050565b600080602083850312156134995761349861438f565b5b600083013567ffffffffffffffff8111156134b7576134b661438a565b5b6134c3858286016131e7565b92509250509250929050565b6000602082840312156134e5576134e461438f565b5b60006134f384828501613252565b91505092915050565b6000602082840312156135125761351161438f565b5b600061352084828501613267565b91505092915050565b60006020828403121561353f5761353e61438f565b5b600061354d848285016132aa565b91505092915050565b61355f816140b2565b82525050565b61356e816140c4565b82525050565b600061357f82613f14565b6135898185613f2a565b9350613599818560208601614151565b6135a281614394565b840191505092915050565b60006135b882613f1f565b6135c28185613f3b565b93506135d2818560208601614151565b6135db81614394565b840191505092915050565b60006135f182613f1f565b6135fb8185613f4c565b935061360b818560208601614151565b80840191505092915050565b6000613624602283613f3b565b915061362f826143a5565b604082019050919050565b6000613647601e83613f3b565b9150613652826143f4565b602082019050919050565b600061366a602683613f3b565b91506136758261441d565b604082019050919050565b600061368d602a83613f3b565b91506136988261446c565b604082019050919050565b60006136b0601a83613f3b565b91506136bb826144bb565b602082019050919050565b60006136d3602383613f3b565b91506136de826144e4565b604082019050919050565b60006136f6602583613f3b565b915061370182614533565b604082019050919050565b6000613719602883613f3b565b915061372482614582565b604082019050919050565b600061373c603983613f3b565b9150613747826145d1565b604082019050919050565b600061375f601283613f3b565b915061376a82614620565b602082019050919050565b6000613782602383613f3b565b915061378d82614649565b604082019050919050565b60006137a5602b83613f3b565b91506137b082614698565b604082019050919050565b60006137c8602683613f3b565b91506137d3826146e7565b604082019050919050565b60006137eb602083613f3b565b91506137f682614736565b602082019050919050565b600061380e602f83613f3b565b91506138198261475f565b604082019050919050565b6000613831601a83613f3b565b915061383c826147ae565b602082019050919050565b6000613854603283613f3b565b915061385f826147d7565b604082019050919050565b6000613877601b83613f3b565b915061388282614826565b602082019050919050565b600061389a602283613f3b565b91506138a58261484f565b604082019050919050565b60006138bd602383613f3b565b91506138c88261489e565b604082019050919050565b60006138e0603383613f3b565b91506138eb826148ed565b604082019050919050565b6000613903601d83613f3b565b915061390e8261493c565b602082019050919050565b6000613926601683613f3b565b915061393182614965565b602082019050919050565b6000613949602183613f3b565b91506139548261498e565b604082019050919050565b600061396c600d83613f3b565b9150613977826149dd565b602082019050919050565b600061398f602e83613f3b565b915061399a82614a06565b604082019050919050565b60006139b2601f83613f3b565b91506139bd82614a55565b602082019050919050565b60006139d5602d83613f3b565b91506139e082614a7e565b604082019050919050565b6139f481614138565b82525050565b6000613a0682856135e6565b9150613a1282846135e6565b91508190509392505050565b6000602082019050613a336000830184613556565b92915050565b6000608082019050613a4e6000830187613556565b613a5b6020830186613556565b613a6860408301856139eb565b8181036060830152613a7a8184613574565b905095945050505050565b6000602082019050613a9a6000830184613565565b92915050565b600060c082019050613ab56000830189613565565b613ac260208301886139eb565b613acf60408301876139eb565b613adc60608301866139eb565b613ae960808301856139eb565b613af660a08301846139eb565b979650505050505050565b60006020820190508181036000830152613b1b81846135ad565b905092915050565b60006020820190508181036000830152613b3c81613617565b9050919050565b60006020820190508181036000830152613b5c8161363a565b9050919050565b60006020820190508181036000830152613b7c8161365d565b9050919050565b60006020820190508181036000830152613b9c81613680565b9050919050565b60006020820190508181036000830152613bbc816136a3565b9050919050565b60006020820190508181036000830152613bdc816136c6565b9050919050565b60006020820190508181036000830152613bfc816136e9565b9050919050565b60006020820190508181036000830152613c1c8161370c565b9050919050565b60006020820190508181036000830152613c3c8161372f565b9050919050565b60006020820190508181036000830152613c5c81613752565b9050919050565b60006020820190508181036000830152613c7c81613775565b9050919050565b60006020820190508181036000830152613c9c81613798565b9050919050565b60006020820190508181036000830152613cbc816137bb565b9050919050565b60006020820190508181036000830152613cdc816137de565b9050919050565b60006020820190508181036000830152613cfc81613801565b9050919050565b60006020820190508181036000830152613d1c81613824565b9050919050565b60006020820190508181036000830152613d3c81613847565b9050919050565b60006020820190508181036000830152613d5c8161386a565b9050919050565b60006020820190508181036000830152613d7c8161388d565b9050919050565b60006020820190508181036000830152613d9c816138b0565b9050919050565b60006020820190508181036000830152613dbc816138d3565b9050919050565b60006020820190508181036000830152613ddc816138f6565b9050919050565b60006020820190508181036000830152613dfc81613919565b9050919050565b60006020820190508181036000830152613e1c8161393c565b9050919050565b60006020820190508181036000830152613e3c8161395f565b9050919050565b60006020820190508181036000830152613e5c81613982565b9050919050565b60006020820190508181036000830152613e7c816139a5565b9050919050565b60006020820190508181036000830152613e9c816139c8565b9050919050565b6000602082019050613eb860008301846139eb565b92915050565b6000613ec8613ed9565b9050613ed482826141e0565b919050565b6000604051905090565b600067ffffffffffffffff821115613efe57613efd614347565b5b613f0782614394565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f62826140fc565b9150613f6d836140fc565b9250826fffffffffffffffffffffffffffffffff03821115613f9257613f9161428b565b5b828201905092915050565b6000613fa882614138565b9150613fb383614138565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fe857613fe761428b565b5b828201905092915050565b6000613ffe82614138565b915061400983614138565b925082614019576140186142ba565b5b828204905092915050565b600061402f82614138565b915061403a83614138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140735761407261428b565b5b828202905092915050565b600061408982614138565b915061409483614138565b9250828210156140a7576140a661428b565b5b828203905092915050565b60006140bd82614118565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561416f578082015181840152602081019050614154565b8381111561417e576000848401525b50505050565b600061418f82614138565b915060008214156141a3576141a261428b565b5b600182039050919050565b600060028204905060018216806141c657607f821691505b602082108114156141da576141d96142e9565b5b50919050565b6141e982614394565b810181811067ffffffffffffffff8211171561420857614207614347565b5b80604052505050565b600061421c82614138565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561424f5761424e61428b565b5b600182019050919050565b600061426582614138565b915061427083614138565b9250826142805761427f6142ba565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468616e206d696e74206c696d69740000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374203120746f6b656e000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e2064726f70206d696e696d756d20312c206d6178696d756d2060008201527f313030204e465473000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f45746865722076616c75652073656e742069732062656c6f772074686520707260008201527f6963650000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d697373696e6720726563697069656e74206164647265737365730000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f7220300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f457863656564206d6178206672656520737570706c7900000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e742064697361626c656400000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614ad6816140b2565b8114614ae157600080fd5b50565b614aed816140c4565b8114614af857600080fd5b50565b614b04816140d0565b8114614b0f57600080fd5b50565b614b1b81614138565b8114614b2657600080fd5b5056fe68747470733a2f2f6d7739737069646862632e657865637574652d6170692e75732d656173742d312e616d617a6f6e6177732e636f6d2f6465762f636f6e74726163742f6d616769632d747265617375726568747470733a2f2f6d7739737069646862632e657865637574652d6170692e75732d656173742d312e616d617a6f6e6177732e636f6d2f6465762f746f6b656e2f6d616769632d74726561737572652fa2646970667358221220d91340bfa710613e22c6c927c5d4fd75e931f585511853e5efb70504a3c5ec0b64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000e4d4147494320545245415355524500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d54000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061021a5760003560e01c80636f8b44b011610123578063a22cb465116100ab578063c87b56dd1161006f578063c87b56dd14610763578063e8a3d485146107a0578063e985e9c5146107cb578063f2fde38b14610808578063f676308a146108315761021a565b8063a22cb46514610692578063b0505132146106bb578063b88d4fde146106e6578063bd2f6eb81461070f578063bd3e19d4146107385761021a565b80638da5cb5b116100f25780638da5cb5b146105de578063941ada0e1461060957806395d89b411461063457806397304ced1461065f5780639edcc3101461067b5761021a565b80636f8b44b01461054557806370a082311461056e578063715018a6146105ab5780637c928fe9146105c25761021a565b80633ccfd60b116101a657806344a0d68a1161017557806344a0d68a1461044c5780634c0f38c2146104755780634f3e1efc146104a05780634f6ccce7146104cb5780636352211e146105085761021a565b80633ccfd60b146103c55780633fa40f94146103dc5780634282b335146103f857806342842e0e146104235761021a565b806318160ddd116101ed57806318160ddd146102ed5780631865c57d1461031857806323b872dd146103485780632f745c591461037157806335133b40146103ae5761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906134cf565b61085a565b6040516102539190613a85565b60405180910390f35b34801561026857600080fd5b506102716109a4565b60405161027e9190613b01565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613529565b610a36565b6040516102bb9190613a1e565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613442565b610abb565b005b3480156102f957600080fd5b50610302610bd4565b60405161030f9190613ea3565b60405180910390f35b34801561032457600080fd5b5061032d610bdd565b60405161033f96959493929190613aa0565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a919061332c565b610c1e565b005b34801561037d57600080fd5b5061039860048036038101906103939190613442565b610c2e565b6040516103a59190613ea3565b60405180910390f35b3480156103ba57600080fd5b506103c3610e2c565b005b3480156103d157600080fd5b506103da610ec5565b005b6103f660048036038101906103f19190613482565b610f91565b005b34801561040457600080fd5b5061040d611260565b60405161041a9190613ea3565b60405180910390f35b34801561042f57600080fd5b5061044a6004803603810190610445919061332c565b61126a565b005b34801561045857600080fd5b50610473600480360381019061046e9190613529565b61128a565b005b34801561048157600080fd5b5061048a611310565b6040516104979190613ea3565b60405180910390f35b3480156104ac57600080fd5b506104b561131a565b6040516104c29190613ea3565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed9190613529565b611329565b6040516104ff9190613ea3565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a9190613529565b61137c565b60405161053c9190613a1e565b60405180910390f35b34801561055157600080fd5b5061056c60048036038101906105679190613529565b611392565b005b34801561057a57600080fd5b50610595600480360381019061059091906132bf565b611418565b6040516105a29190613ea3565b60405180910390f35b3480156105b757600080fd5b506105c0611501565b005b6105dc60048036038101906105d79190613529565b611589565b005b3480156105ea57600080fd5b506105f3611757565b6040516106009190613a1e565b60405180910390f35b34801561061557600080fd5b5061061e611781565b60405161062b9190613a85565b60405180910390f35b34801561064057600080fd5b50610649611798565b6040516106569190613b01565b60405180910390f35b61067960048036038101906106749190613529565b61182a565b005b34801561068757600080fd5b50610690611a1f565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613402565b611ab8565b005b3480156106c757600080fd5b506106d0611c39565b6040516106dd9190613ea3565b60405180910390f35b3480156106f257600080fd5b5061070d6004803603810190610708919061337f565b611c43565b005b34801561071b57600080fd5b5061073660048036038101906107319190613529565b611c9f565b005b34801561074457600080fd5b5061074d611d25565b60405161075a9190613ea3565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613529565b611d2f565b6040516107979190613b01565b60405180910390f35b3480156107ac57600080fd5b506107b5611dd6565b6040516107c29190613b01565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906132ec565b611df6565b6040516107ff9190613a85565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a91906132bf565b611e8a565b005b34801561083d57600080fd5b5061085860048036038101906108539190613529565b611f82565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098d57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061099d575061099c82612008565b5b9050919050565b6060600180546109b3906141ae565b80601f01602080910402602001604051908101604052809291908181526020018280546109df906141ae565b8015610a2c5780601f10610a0157610100808354040283529160200191610a2c565b820191906000526020600020905b815481529060010190602001808311610a0f57829003601f168201915b5050505050905090565b6000610a4182612072565b610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7790613e83565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac68261137c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90613d63565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b5661207f565b73ffffffffffffffffffffffffffffffffffffffff161480610b855750610b8481610b7f61207f565b611df6565b5b610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613c23565b60405180910390fd5b610bcf838383612087565b505050565b60008054905090565b600080600080600080600b60009054906101000a900460ff16600954600a54610c04610bd4565b600c54600d54955095509550955095509550909192939495565b610c29838383612139565b505050565b6000610c3983611418565b8210610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190613b23565b60405180910390fd5b6000610c84610bd4565b905060008060005b83811015610dea576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d7e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd65786841415610dc7578195505050505050610e26565b8380610dd290614211565b9450505b508080610de290614211565b915050610c8c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613e43565b60405180910390fd5b92915050565b610e3461207f565b73ffffffffffffffffffffffffffffffffffffffff16610e52611757565b73ffffffffffffffffffffffffffffffffffffffff1614610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90613cc3565b60405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550565b610ecd61207f565b73ffffffffffffffffffffffffffffffffffffffff16610eeb611757565b73ffffffffffffffffffffffffffffffffffffffff1614610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890613cc3565b60405180910390fd5b610f49611757565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f8e573d6000803e3d6000fd5b50565b60026008541415610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90613e63565b60405180910390fd5b600260088190555060008282905011611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c90613d43565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611044611757565b73ffffffffffffffffffffffffffffffffffffffff1614806110725750600b60009054906101000a900460ff165b6110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a890613e23565b60405180910390fd5b6000828290501180156110c8575060648282905011155b611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90613c03565b60405180910390fd5b600a54611127611115610bd4565b848490506126e090919063ffffffff16565b1115611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90613c43565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611187611757565b73ffffffffffffffffffffffffffffffffffffffff1614806111c057506111bc828290506009546126f690919063ffffffff16565b3410155b6111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690613c63565b60405180910390fd5b60005b828290508110156112535761123f83838381811061122357611222614318565b5b905060200201602081019061123891906132bf565b600161270c565b50808061124b90614211565b915050611202565b5060016008819055505050565b6000600d54905090565b61128583838360405180602001604052806000815250611c43565b505050565b61129261207f565b73ffffffffffffffffffffffffffffffffffffffff166112b0611757565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90613cc3565b60405180910390fd5b8060098190555050565b6000600a54905090565b6000611324610bd4565b905090565b6000611333610bd4565b8210611374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136b90613bc3565b60405180910390fd5b819050919050565b600061138782612721565b600001519050919050565b61139a61207f565b73ffffffffffffffffffffffffffffffffffffffff166113b8611757565b73ffffffffffffffffffffffffffffffffffffffff161461140e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140590613cc3565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148090613c83565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61150961207f565b73ffffffffffffffffffffffffffffffffffffffff16611527611757565b73ffffffffffffffffffffffffffffffffffffffff161461157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490613cc3565b60405180910390fd5b611587600061287c565b565b600260085414156115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690613e63565b60405180910390fd5b60026008819055503373ffffffffffffffffffffffffffffffffffffffff166115f6611757565b73ffffffffffffffffffffffffffffffffffffffff1614806116245750600b60009054906101000a900460ff165b611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90613e23565b60405180910390fd5b600c548161166f610bd4565b6116799190613f9d565b11156116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b190613de3565b60405180910390fd5b600d548111156116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690613b43565b60405180910390fd5b60008111611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990613ba3565b60405180910390fd5b61174c3382612942565b600160088190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600b60009054906101000a900460ff16905090565b6060600280546117a7906141ae565b80601f01602080910402602001604051908101604052809291908181526020018280546117d3906141ae565b80156118205780601f106117f557610100808354040283529160200191611820565b820191906000526020600020905b81548152906001019060200180831161180357829003601f168201915b5050505050905090565b60026008541415611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790613e63565b60405180910390fd5b6002600881905550600b60009054906101000a900460ff166118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90613e23565b60405180910390fd5b6000811180156118d8575060648111155b611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90613c03565b60405180910390fd5b600a54611934611925610bd4565b836126e090919063ffffffff16565b1115611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90613c43565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611994611757565b73ffffffffffffffffffffffffffffffffffffffff1614806119ca57506119c6816009546126f690919063ffffffff16565b3410155b611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090613c63565b60405180910390fd5b611a13338261270c565b50600160088190555050565b611a2761207f565b73ffffffffffffffffffffffffffffffffffffffff16611a45611757565b73ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290613cc3565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b611ac061207f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2590613d03565b60405180910390fd5b8060066000611b3b61207f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611be861207f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c2d9190613a85565b60405180910390a35050565b6000600c54905090565b611c4e848484612139565b611c5a84848484612960565b611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9090613da3565b60405180910390fd5b50505050565b611ca761207f565b73ffffffffffffffffffffffffffffffffffffffff16611cc5611757565b73ffffffffffffffffffffffffffffffffffffffff1614611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1290613cc3565b60405180910390fd5b80600d8190555050565b6000600954905090565b6060611d3a82612072565b611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7090613ce3565b60405180910390fd5b6000611d83612af7565b90506000815111611da35760405180602001604052806000815250611dce565b80611dad84612b17565b604051602001611dbe9291906139fa565b6040516020818303038152906040525b915050919050565b6060604051806080016040528060528152602001614b2a60529139905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e9261207f565b73ffffffffffffffffffffffffffffffffffffffff16611eb0611757565b73ffffffffffffffffffffffffffffffffffffffff1614611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90613cc3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90613b63565b60405180910390fd5b611f7f8161287c565b50565b611f8a61207f565b73ffffffffffffffffffffffffffffffffffffffff16611fa8611757565b73ffffffffffffffffffffffffffffffffffffffff1614611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590613cc3565b60405180910390fd5b80600c8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061214482612721565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661216b61207f565b73ffffffffffffffffffffffffffffffffffffffff1614806121c7575061219061207f565b73ffffffffffffffffffffffffffffffffffffffff166121af84610a36565b73ffffffffffffffffffffffffffffffffffffffff16145b806121e357506121e282600001516121dd61207f565b611df6565b5b905080612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c90613d23565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e90613ca3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe90613be3565b60405180910390fd5b6123148585856001612c78565b6123246000848460000151612087565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461252a9190613f9d565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612670576125a081612072565b1561266f576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126d88686866001612c7e565b505050505050565b600081836126ee9190613f9d565b905092915050565b600081836127049190614024565b905092915050565b60006127188383612942565b81905092915050565b612729613156565b61273282612072565b612771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276890613b83565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612863578092505050612877565b50808061286f90614184565b915050612777565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61295c828260405180602001604052806000815250612c84565b5050565b60006129818473ffffffffffffffffffffffffffffffffffffffff16613143565b15612aea578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129aa61207f565b8786866040518563ffffffff1660e01b81526004016129cc9493929190613a39565b602060405180830381600087803b1580156129e657600080fd5b505af1925050508015612a1757506040513d601f19601f82011682018060405250810190612a1491906134fc565b60015b612a9a573d8060008114612a47576040519150601f19603f3d011682016040523d82523d6000602084013e612a4c565b606091505b50600081511415612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8990613da3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612aef565b600190505b949350505050565b6060604051806080016040528060508152602001614b7c60509139905090565b60606000821415612b5f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c73565b600082905060005b60008214612b91578080612b7a90614211565b915050600a82612b8a9190613ff3565b9150612b67565b60008167ffffffffffffffff811115612bad57612bac614347565b5b6040519080825280601f01601f191660200182016040528015612bdf5781602001600182028036833780820191505090505b5090505b60008514612c6c57600182612bf8919061407e565b9150600a85612c07919061425a565b6030612c139190613f9d565b60f81b818381518110612c2957612c28614318565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c659190613ff3565b9450612be3565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf190613e03565b60405180910390fd5b612d0381612072565b15612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a90613dc3565b60405180910390fd5b60008311612d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7d90613d83565b60405180910390fd5b612d936000858386612c78565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612e909190613f57565b6fffffffffffffffffffffffffffffffff168152602001858360200151612eb79190613f57565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561312657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130c66000888488612960565b613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc90613da3565b60405180910390fd5b818061311090614211565b925050808061311e90614211565b915050613055565b508060008190555061313b6000878588612c7e565b505050505050565b600080823b905060008111915050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b60006131a361319e84613ee3565b613ebe565b9050828152602081018484840111156131bf576131be614385565b5b6131ca848285614142565b509392505050565b6000813590506131e181614acd565b92915050565b60008083601f8401126131fd576131fc61437b565b5b8235905067ffffffffffffffff81111561321a57613219614376565b5b60208301915083602082028301111561323657613235614380565b5b9250929050565b60008135905061324c81614ae4565b92915050565b60008135905061326181614afb565b92915050565b60008151905061327681614afb565b92915050565b600082601f8301126132915761329061437b565b5b81356132a1848260208601613190565b91505092915050565b6000813590506132b981614b12565b92915050565b6000602082840312156132d5576132d461438f565b5b60006132e3848285016131d2565b91505092915050565b600080604083850312156133035761330261438f565b5b6000613311858286016131d2565b9250506020613322858286016131d2565b9150509250929050565b6000806000606084860312156133455761334461438f565b5b6000613353868287016131d2565b9350506020613364868287016131d2565b9250506040613375868287016132aa565b9150509250925092565b600080600080608085870312156133995761339861438f565b5b60006133a7878288016131d2565b94505060206133b8878288016131d2565b93505060406133c9878288016132aa565b925050606085013567ffffffffffffffff8111156133ea576133e961438a565b5b6133f68782880161327c565b91505092959194509250565b600080604083850312156134195761341861438f565b5b6000613427858286016131d2565b92505060206134388582860161323d565b9150509250929050565b600080604083850312156134595761345861438f565b5b6000613467858286016131d2565b9250506020613478858286016132aa565b9150509250929050565b600080602083850312156134995761349861438f565b5b600083013567ffffffffffffffff8111156134b7576134b661438a565b5b6134c3858286016131e7565b92509250509250929050565b6000602082840312156134e5576134e461438f565b5b60006134f384828501613252565b91505092915050565b6000602082840312156135125761351161438f565b5b600061352084828501613267565b91505092915050565b60006020828403121561353f5761353e61438f565b5b600061354d848285016132aa565b91505092915050565b61355f816140b2565b82525050565b61356e816140c4565b82525050565b600061357f82613f14565b6135898185613f2a565b9350613599818560208601614151565b6135a281614394565b840191505092915050565b60006135b882613f1f565b6135c28185613f3b565b93506135d2818560208601614151565b6135db81614394565b840191505092915050565b60006135f182613f1f565b6135fb8185613f4c565b935061360b818560208601614151565b80840191505092915050565b6000613624602283613f3b565b915061362f826143a5565b604082019050919050565b6000613647601e83613f3b565b9150613652826143f4565b602082019050919050565b600061366a602683613f3b565b91506136758261441d565b604082019050919050565b600061368d602a83613f3b565b91506136988261446c565b604082019050919050565b60006136b0601a83613f3b565b91506136bb826144bb565b602082019050919050565b60006136d3602383613f3b565b91506136de826144e4565b604082019050919050565b60006136f6602583613f3b565b915061370182614533565b604082019050919050565b6000613719602883613f3b565b915061372482614582565b604082019050919050565b600061373c603983613f3b565b9150613747826145d1565b604082019050919050565b600061375f601283613f3b565b915061376a82614620565b602082019050919050565b6000613782602383613f3b565b915061378d82614649565b604082019050919050565b60006137a5602b83613f3b565b91506137b082614698565b604082019050919050565b60006137c8602683613f3b565b91506137d3826146e7565b604082019050919050565b60006137eb602083613f3b565b91506137f682614736565b602082019050919050565b600061380e602f83613f3b565b91506138198261475f565b604082019050919050565b6000613831601a83613f3b565b915061383c826147ae565b602082019050919050565b6000613854603283613f3b565b915061385f826147d7565b604082019050919050565b6000613877601b83613f3b565b915061388282614826565b602082019050919050565b600061389a602283613f3b565b91506138a58261484f565b604082019050919050565b60006138bd602383613f3b565b91506138c88261489e565b604082019050919050565b60006138e0603383613f3b565b91506138eb826148ed565b604082019050919050565b6000613903601d83613f3b565b915061390e8261493c565b602082019050919050565b6000613926601683613f3b565b915061393182614965565b602082019050919050565b6000613949602183613f3b565b91506139548261498e565b604082019050919050565b600061396c600d83613f3b565b9150613977826149dd565b602082019050919050565b600061398f602e83613f3b565b915061399a82614a06565b604082019050919050565b60006139b2601f83613f3b565b91506139bd82614a55565b602082019050919050565b60006139d5602d83613f3b565b91506139e082614a7e565b604082019050919050565b6139f481614138565b82525050565b6000613a0682856135e6565b9150613a1282846135e6565b91508190509392505050565b6000602082019050613a336000830184613556565b92915050565b6000608082019050613a4e6000830187613556565b613a5b6020830186613556565b613a6860408301856139eb565b8181036060830152613a7a8184613574565b905095945050505050565b6000602082019050613a9a6000830184613565565b92915050565b600060c082019050613ab56000830189613565565b613ac260208301886139eb565b613acf60408301876139eb565b613adc60608301866139eb565b613ae960808301856139eb565b613af660a08301846139eb565b979650505050505050565b60006020820190508181036000830152613b1b81846135ad565b905092915050565b60006020820190508181036000830152613b3c81613617565b9050919050565b60006020820190508181036000830152613b5c8161363a565b9050919050565b60006020820190508181036000830152613b7c8161365d565b9050919050565b60006020820190508181036000830152613b9c81613680565b9050919050565b60006020820190508181036000830152613bbc816136a3565b9050919050565b60006020820190508181036000830152613bdc816136c6565b9050919050565b60006020820190508181036000830152613bfc816136e9565b9050919050565b60006020820190508181036000830152613c1c8161370c565b9050919050565b60006020820190508181036000830152613c3c8161372f565b9050919050565b60006020820190508181036000830152613c5c81613752565b9050919050565b60006020820190508181036000830152613c7c81613775565b9050919050565b60006020820190508181036000830152613c9c81613798565b9050919050565b60006020820190508181036000830152613cbc816137bb565b9050919050565b60006020820190508181036000830152613cdc816137de565b9050919050565b60006020820190508181036000830152613cfc81613801565b9050919050565b60006020820190508181036000830152613d1c81613824565b9050919050565b60006020820190508181036000830152613d3c81613847565b9050919050565b60006020820190508181036000830152613d5c8161386a565b9050919050565b60006020820190508181036000830152613d7c8161388d565b9050919050565b60006020820190508181036000830152613d9c816138b0565b9050919050565b60006020820190508181036000830152613dbc816138d3565b9050919050565b60006020820190508181036000830152613ddc816138f6565b9050919050565b60006020820190508181036000830152613dfc81613919565b9050919050565b60006020820190508181036000830152613e1c8161393c565b9050919050565b60006020820190508181036000830152613e3c8161395f565b9050919050565b60006020820190508181036000830152613e5c81613982565b9050919050565b60006020820190508181036000830152613e7c816139a5565b9050919050565b60006020820190508181036000830152613e9c816139c8565b9050919050565b6000602082019050613eb860008301846139eb565b92915050565b6000613ec8613ed9565b9050613ed482826141e0565b919050565b6000604051905090565b600067ffffffffffffffff821115613efe57613efd614347565b5b613f0782614394565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f62826140fc565b9150613f6d836140fc565b9250826fffffffffffffffffffffffffffffffff03821115613f9257613f9161428b565b5b828201905092915050565b6000613fa882614138565b9150613fb383614138565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fe857613fe761428b565b5b828201905092915050565b6000613ffe82614138565b915061400983614138565b925082614019576140186142ba565b5b828204905092915050565b600061402f82614138565b915061403a83614138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140735761407261428b565b5b828202905092915050565b600061408982614138565b915061409483614138565b9250828210156140a7576140a661428b565b5b828203905092915050565b60006140bd82614118565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561416f578082015181840152602081019050614154565b8381111561417e576000848401525b50505050565b600061418f82614138565b915060008214156141a3576141a261428b565b5b600182039050919050565b600060028204905060018216806141c657607f821691505b602082108114156141da576141d96142e9565b5b50919050565b6141e982614394565b810181811067ffffffffffffffff8211171561420857614207614347565b5b80604052505050565b600061421c82614138565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561424f5761424e61428b565b5b600182019050919050565b600061426582614138565b915061427083614138565b9250826142805761427f6142ba565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468616e206d696e74206c696d69740000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374203120746f6b656e000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e2064726f70206d696e696d756d20312c206d6178696d756d2060008201527f313030204e465473000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f45746865722076616c75652073656e742069732062656c6f772074686520707260008201527f6963650000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d697373696e6720726563697069656e74206164647265737365730000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f7220300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f457863656564206d6178206672656520737570706c7900000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e742064697361626c656400000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614ad6816140b2565b8114614ae157600080fd5b50565b614aed816140c4565b8114614af857600080fd5b50565b614b04816140d0565b8114614b0f57600080fd5b50565b614b1b81614138565b8114614b2657600080fd5b5056fe68747470733a2f2f6d7739737069646862632e657865637574652d6170692e75732d656173742d312e616d617a6f6e6177732e636f6d2f6465762f636f6e74726163742f6d616769632d747265617375726568747470733a2f2f6d7739737069646862632e657865637574652d6170692e75732d656173742d312e616d617a6f6e6177732e636f6d2f6465762f746f6b656e2f6d616769632d74726561737572652fa2646970667358221220d91340bfa710613e22c6c927c5d4fd75e931f585511853e5efb70504a3c5ec0b64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000e4d4147494320545245415355524500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d54000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : tokenName (string): MAGIC TREASURE
Arg [1] : symbol (string): MT
Arg [2] : cost (uint256): 10000000000000000
Arg [3] : supply (uint256): 10000

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 4d41474943205452454153555245000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4d54000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

49130:5351:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37085:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38712:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40273:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39794:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35526:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53394:200;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;41149:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36190:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50259:89;;;;;;;;;;;;;:::i;:::-;;53023:97;;;;;;;;;;;;;:::i;:::-;;51017:658;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54046:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41382:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52262:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53679:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53766:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35703:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38521:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52436:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37521:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15617:94;;;;;;;;;;;;;:::i;:::-;;51755:399;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14966:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53860:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38881:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50434:453;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50022:89;;;;;;;;;;;;;:::i;:::-;;40559:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53956:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41630:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52814:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53598:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39056:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54315:163;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40918:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15866:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52619:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37085:372;37187:4;37239:25;37224:40;;;:11;:40;;;;:105;;;;37296:33;37281:48;;;:11;:48;;;;37224:105;:172;;;;37361:35;37346:50;;;:11;:50;;;;37224:172;:225;;;;37413:36;37437:11;37413:23;:36::i;:::-;37224:225;37204:245;;37085:372;;;:::o;38712:100::-;38766:13;38799:5;38792:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38712:100;:::o;40273:214::-;40341:7;40369:16;40377:7;40369;:16::i;:::-;40361:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;40455:15;:24;40471:7;40455:24;;;;;;;;;;;;;;;;;;;;;40448:31;;40273:214;;;:::o;39794:413::-;39867:13;39883:24;39899:7;39883:15;:24::i;:::-;39867:40;;39932:5;39926:11;;:2;:11;;;;39918:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40027:5;40011:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;40036:37;40053:5;40060:12;:10;:12::i;:::-;40036:16;:37::i;:::-;40011:62;39989:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;40171:28;40180:2;40184:7;40193:5;40171:8;:28::i;:::-;39856:351;39794:413;;:::o;35526:100::-;35579:7;35606:12;;35599:19;;35526:100;:::o;53394:200::-;53435:4;53441:7;53450;53459;53468;53477;53500:20;;;;;;;;;;;53522:9;;53533:10;;53545:13;:11;:13::i;:::-;53560:11;;53573:14;;53492:96;;;;;;;;;;;;53394:200;;;;;;:::o;41149:162::-;41275:28;41285:4;41291:2;41295:7;41275:9;:28::i;:::-;41149:162;;;:::o;36190:823::-;36279:7;36315:16;36325:5;36315:9;:16::i;:::-;36307:5;:24;36299:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36381:22;36406:13;:11;:13::i;:::-;36381:38;;36430:19;36464:25;36518:9;36513:426;36537:14;36533:1;:18;36513:426;;;36573:31;36607:11;:14;36619:1;36607:14;;;;;;;;;;;36573:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36666:1;36640:28;;:9;:14;;;:28;;;36636:103;;36709:9;:14;;;36689:34;;36636:103;36778:5;36757:26;;:17;:26;;;36753:175;;;36823:5;36808:11;:20;36804:77;;;36860:1;36853:8;;;;;;;;;36804:77;36899:13;;;;;:::i;:::-;;;;36753:175;36558:381;36553:3;;;;;:::i;:::-;;;;36513:426;;;;36949:56;;;;;;;;;;:::i;:::-;;;;;;;;36190:823;;;;;:::o;50259:89::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50337:5:::1;50314:20;;:28;;;;;;;;;;;;;;;;;;50259:89::o:0;53023:97::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53074:7:::1;:5;:7::i;:::-;53066:25;;:48;53092:21;53066:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53023:97::o:0;51017:658::-;1747:1;2343:7;;:19;;2335:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1747:1;2476:7;:18;;;;51137:1:::1;51119:10;;:17;;:19;51111:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;51195:10;51184:21;;:7;:5;:7::i;:::-;:21;;;:45;;;;51209:20;;;;;;;;;;;51184:45;51176:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51282:1;51262:10;;:17;;:21;:49;;;;;51308:3;51287:10;;:17;;:24;;51262:49;51254:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;51411:10;;51371:36;51393:13;:11;:13::i;:::-;51371:10;;:17;;:21;;:36;;;;:::i;:::-;:50;;51363:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;51470:10;51459:21;;:7;:5;:7::i;:::-;:21;;;:70;;;;51497:32;51511:10;;:17;;51497:9;;:13;;:32;;;;:::i;:::-;51484:9;:45;;51459:70;51451:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;51592:6;51588:82;51604:10;;:17;;51602:1;:19;51588:82;;;51638:23;51644:10;;51655:1;51644:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;51659:1;51638:5;:23::i;:::-;;51623:3;;;;;:::i;:::-;;;;51588:82;;;;1703:1:::0;2655:7;:22;;;;51017:658;;:::o;54046:92::-;54095:7;54118:14;;54111:21;;54046:92;:::o;41382:177::-;41512:39;41529:4;41535:2;41539:7;41512:39;;;;;;;;;;;;:16;:39::i;:::-;41382:177;;;:::o;52262:76::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52328:4:::1;52316:9;:16;;;;52262:76:::0;:::o;53679:83::-;53724:7;53746:10;;53739:17;;53679:83;:::o;53766:90::-;53815:7;53837:13;:11;:13::i;:::-;53830:20;;53766:90;:::o;35703:187::-;35770:7;35806:13;:11;:13::i;:::-;35798:5;:21;35790:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35877:5;35870:12;;35703:187;;;:::o;38521:124::-;38585:7;38612:20;38624:7;38612:11;:20::i;:::-;:25;;;38605:32;;38521:124;;;:::o;52436:80::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52507:3:::1;52494:10;:16;;;;52436:80:::0;:::o;37521:221::-;37585:7;37630:1;37613:19;;:5;:19;;;;37605:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37706:12;:19;37719:5;37706:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;37698:36;;37691:43;;37521:221;;;:::o;15617:94::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15682:21:::1;15700:1;15682:9;:21::i;:::-;15617:94::o:0;51755:399::-;1747:1;2343:7;;:19;;2335:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1747:1;2476:7;:18;;;;51853:10:::1;51842:21;;:7;:5;:7::i;:::-;:21;;;:45;;;;51867:20;;;;;;;;;;;51842:45;51834:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51945:11;;51936:5;51920:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:36;;51912:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;52007:14;;51998:5;:23;;51990:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;52079:1;52071:5;:9;52063:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;52120:28;52130:10;52142:5;52120:9;:28::i;:::-;1703:1:::0;2655:7;:22;;;;51755:399;:::o;14966:87::-;15012:7;15039:6;;;;;;;;;;;15032:13;;14966:87;:::o;53860:92::-;53906:4;53926:20;;;;;;;;;;;53919:27;;53860:92;:::o;38881:104::-;38937:13;38970:7;38963:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38881:104;:::o;50434:453::-;1747:1;2343:7;;:19;;2335:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1747:1;2476:7;:18;;;;50520:20:::1;;;;;;;;;;;50512:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;50581:1;50573:5;:9;:25;;;;;50595:3;50586:5;:12;;50573:25;50565:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;50686:10;;50658:24;50668:13;:11;:13::i;:::-;50658:5;:9;;:24;;;;:::i;:::-;:38;;50650:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;50745:10;50734:21;;:7;:5;:7::i;:::-;:21;;;:58;;;;50772:20;50786:5;50772:9;;:13;;:20;;;;:::i;:::-;50759:9;:33;;50734:58;50726:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;50857:24;50863:10;50875:5;50857;:24::i;:::-;;1703:1:::0;2655:7;:22;;;;50434:453;:::o;50022:89::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50101:4:::1;50078:20;;:27;;;;;;;;;;;;;;;;;;50022:89::o:0;40559:288::-;40666:12;:10;:12::i;:::-;40654:24;;:8;:24;;;;40646:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40767:8;40722:18;:32;40741:12;:10;:12::i;:::-;40722:32;;;;;;;;;;;;;;;:42;40755:8;40722:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;40820:8;40791:48;;40806:12;:10;:12::i;:::-;40791:48;;;40830:8;40791:48;;;;;;:::i;:::-;;;;;;;;40559:288;;:::o;53956:86::-;54002:7;54025:11;;54018:18;;53956:86;:::o;41630:355::-;41789:28;41799:4;41805:2;41809:7;41789:9;:28::i;:::-;41850:48;41873:4;41879:2;41883:7;41892:5;41850:22;:48::i;:::-;41828:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;41630:355;;;;:::o;52814:88::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52893:3:::1;52876:14;:20;;;;52814:88:::0;:::o;53598:77::-;53638:7;53660:9;;53653:16;;53598:77;:::o;39056:334::-;39129:13;39163:16;39171:7;39163;:16::i;:::-;39155:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39244:21;39268:10;:8;:10::i;:::-;39244:34;;39320:1;39302:7;39296:21;:25;:86;;;;;;;;;;;;;;;;;39348:7;39357:18;:7;:16;:18::i;:::-;39331:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39296:86;39289:93;;;39056:334;;;:::o;54315:163::-;54359:13;54381:91;;;;;;;;;;;;;;;;;;;54315:163;:::o;40918:164::-;41015:4;41039:18;:25;41058:5;41039:25;;;;;;;;;;;;;;;:35;41065:8;41039:35;;;;;;;;;;;;;;;;;;;;;;;;;41032:42;;40918:164;;;;:::o;15866:192::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15975:1:::1;15955:22;;:8;:22;;;;15947:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16031:19;16041:8;16031:9;:19::i;:::-;15866:192:::0;:::o;52619:82::-;15197:12;:10;:12::i;:::-;15186:23;;:7;:5;:7::i;:::-;:23;;;15178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52692:3:::1;52678:11;:17;;;;52619:82:::0;:::o;26952:157::-;27037:4;27076:25;27061:40;;;:11;:40;;;;27054:47;;26952:157;;;:::o;42240:111::-;42297:4;42331:12;;42321:7;:22;42314:29;;42240:111;;;:::o;13754:98::-;13807:7;13834:10;13827:17;;13754:98;:::o;46284:196::-;46426:2;46399:15;:24;46415:7;46399:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46464:7;46460:2;46444:28;;46453:5;46444:28;;;;;;;;;;;;46284:196;;;:::o;44383:1783::-;44498:35;44536:20;44548:7;44536:11;:20::i;:::-;44498:58;;44569:22;44611:13;:18;;;44595:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;44670:12;:10;:12::i;:::-;44646:36;;:20;44658:7;44646:11;:20::i;:::-;:36;;;44595:87;:154;;;;44699:50;44716:13;:18;;;44736:12;:10;:12::i;:::-;44699:16;:50::i;:::-;44595:154;44569:181;;44771:17;44763:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;44886:4;44864:26;;:13;:18;;;:26;;;44856:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44966:1;44952:16;;:2;:16;;;;44944:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45023:43;45045:4;45051:2;45055:7;45064:1;45023:21;:43::i;:::-;45131:49;45148:1;45152:7;45161:13;:18;;;45131:8;:49::i;:::-;45415:1;45385:12;:18;45398:4;45385:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45459:1;45431:12;:16;45444:2;45431:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45507:43;;;;;;;;45522:2;45507:43;;;;;;45533:15;45507:43;;;;;45484:11;:20;45496:7;45484:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45790:19;45822:1;45812:7;:11;;;;:::i;:::-;45790:33;;45879:1;45838:43;;:11;:24;45850:11;45838:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;45834:227;;;45902:20;45910:11;45902:7;:20::i;:::-;45898:152;;;45970:64;;;;;;;;45985:13;:18;;;45970:64;;;;;;46005:13;:28;;;45970:64;;;;;45943:11;:24;45955:11;45943:24;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45898:152;45834:227;46097:7;46093:2;46078:27;;46087:4;46078:27;;;;;;;;;;;;46116:42;46137:4;46143:2;46147:7;46156:1;46116:20;:42::i;:::-;44487:1679;;;44383:1783;;;:::o;5484:98::-;5542:7;5573:1;5569;:5;;;;:::i;:::-;5562:12;;5484:98;;;;:::o;6222:::-;6280:7;6311:1;6307;:5;;;;:::i;:::-;6300:12;;6222:98;;;;:::o;53258:130::-;53326:7;53341:20;53351:2;53355:5;53341:9;:20::i;:::-;53377:5;53370:12;;53258:130;;;;:::o;37987:472::-;38048:21;;:::i;:::-;38090:16;38098:7;38090;:16::i;:::-;38082:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38171:12;38186:7;38171:22;;38166:216;38220:31;38254:11;:17;38266:4;38254:17;;;;;;;;;;;38220:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38316:1;38290:28;;:9;:14;;;:28;;;38286:85;;38346:9;38339:16;;;;;;38286:85;38205:177;38197:6;;;;;:::i;:::-;;;;38166:216;;37987:472;;;;:::o;16066:173::-;16122:16;16141:6;;;;;;;;;;;16122:25;;16167:8;16158:6;;:17;;;;;;;;;;;;;;;;;;16222:8;16191:40;;16212:8;16191:40;;;;;;;;;;;;16111:128;16066:173;:::o;42359:104::-;42428:27;42438:2;42442:8;42428:27;;;;;;;;;;;;:9;:27::i;:::-;42359:104;;:::o;47045:804::-;47200:4;47221:15;:2;:13;;;:15::i;:::-;47217:625;;;47273:2;47257:36;;;47294:12;:10;:12::i;:::-;47308:4;47314:7;47323:5;47257:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47253:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47520:1;47503:6;:13;:18;47499:273;;;47546:61;;;;;;;;;;:::i;:::-;;;;;;;;47499:273;47722:6;47716:13;47707:6;47703:2;47699:15;47692:38;47253:534;47390:45;;;47380:55;;;:6;:55;;;;47373:62;;;;;47217:625;47826:4;47819:11;;47045:804;;;;;;;:::o;54142:169::-;54194:13;54216:89;;;;;;;;;;;;;;;;;;;54142:169;:::o;11370:723::-;11426:13;11656:1;11647:5;:10;11643:53;;;11674:10;;;;;;;;;;;;;;;;;;;;;11643:53;11706:12;11721:5;11706:20;;11737:14;11762:78;11777:1;11769:4;:9;11762:78;;11795:8;;;;;:::i;:::-;;;;11826:2;11818:10;;;;;:::i;:::-;;;11762:78;;;11850:19;11882:6;11872:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11850:39;;11900:154;11916:1;11907:5;:10;11900:154;;11944:1;11934:11;;;;;:::i;:::-;;;12011:2;12003:5;:10;;;;:::i;:::-;11990:2;:24;;;;:::i;:::-;11977:39;;11960:6;11967;11960:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;12040:2;12031:11;;;;;:::i;:::-;;;11900:154;;;12078:6;12064:21;;;;;11370:723;;;;:::o;48337:159::-;;;;;:::o;48908:158::-;;;;;:::o;42740:1389::-;42863:20;42886:12;;42863:35;;42931:1;42917:16;;:2;:16;;;;42909:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43116:21;43124:12;43116:7;:21::i;:::-;43115:22;43107:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43201:1;43190:8;:12;43182:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43255:61;43285:1;43289:2;43293:12;43307:8;43255:21;:61::i;:::-;43329:30;43362:12;:16;43375:2;43362:16;;;;;;;;;;;;;;;43329:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43408:135;;;;;;;;43464:8;43434:11;:19;;;:39;;;;:::i;:::-;43408:135;;;;;;43523:8;43488:11;:24;;;:44;;;;:::i;:::-;43408:135;;;;;43389:12;:16;43402:2;43389:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43582:43;;;;;;;;43597:2;43582:43;;;;;;43608:15;43582:43;;;;;43554:11;:25;43566:12;43554:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43638:20;43661:12;43638:35;;43691:9;43686:325;43710:8;43706:1;:12;43686:325;;;43770:12;43766:2;43745:38;;43762:1;43745:38;;;;;;;;;;;;43824:59;43855:1;43859:2;43863:12;43877:5;43824:22;:59::i;:::-;43798:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;43985:14;;;;;:::i;:::-;;;;43720:3;;;;;:::i;:::-;;;;43686:325;;;;44038:12;44023;:27;;;;44061:60;44090:1;44094:2;44098:12;44112:8;44061:20;:60::i;:::-;42852:1277;;;42740:1389;;;:::o;17012:387::-;17072:4;17280:12;17347:7;17335:20;17327:28;;17390:1;17383:4;:8;17376:15;;;17012:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:137::-;1343:5;1381:6;1368:20;1359:29;;1397:32;1423:5;1397:32;:::i;:::-;1298:137;;;;:::o;1441:141::-;1497:5;1528:6;1522:13;1513:22;;1544:32;1570:5;1544:32;:::i;:::-;1441:141;;;;:::o;1601:338::-;1656:5;1705:3;1698:4;1690:6;1686:17;1682:27;1672:122;;1713:79;;:::i;:::-;1672:122;1830:6;1817:20;1855:78;1929:3;1921:6;1914:4;1906:6;1902:17;1855:78;:::i;:::-;1846:87;;1662:277;1601:338;;;;:::o;1945:139::-;1991:5;2029:6;2016:20;2007:29;;2045:33;2072:5;2045:33;:::i;:::-;1945:139;;;;:::o;2090:329::-;2149:6;2198:2;2186:9;2177:7;2173:23;2169:32;2166:119;;;2204:79;;:::i;:::-;2166:119;2324:1;2349:53;2394:7;2385:6;2374:9;2370:22;2349:53;:::i;:::-;2339:63;;2295:117;2090:329;;;;:::o;2425:474::-;2493:6;2501;2550:2;2538:9;2529:7;2525:23;2521:32;2518:119;;;2556:79;;:::i;:::-;2518:119;2676:1;2701:53;2746:7;2737:6;2726:9;2722:22;2701:53;:::i;:::-;2691:63;;2647:117;2803:2;2829:53;2874:7;2865:6;2854:9;2850:22;2829:53;:::i;:::-;2819:63;;2774:118;2425:474;;;;;:::o;2905:619::-;2982:6;2990;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;3428:2;3454:53;3499:7;3490:6;3479:9;3475:22;3454:53;:::i;:::-;3444:63;;3399:118;2905:619;;;;;:::o;3530:943::-;3625:6;3633;3641;3649;3698:3;3686:9;3677:7;3673:23;3669:33;3666:120;;;3705:79;;:::i;:::-;3666:120;3825:1;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3796:117;3952:2;3978:53;4023:7;4014:6;4003:9;3999:22;3978:53;:::i;:::-;3968:63;;3923:118;4080:2;4106:53;4151:7;4142:6;4131:9;4127:22;4106:53;:::i;:::-;4096:63;;4051:118;4236:2;4225:9;4221:18;4208:32;4267:18;4259:6;4256:30;4253:117;;;4289:79;;:::i;:::-;4253:117;4394:62;4448:7;4439:6;4428:9;4424:22;4394:62;:::i;:::-;4384:72;;4179:287;3530:943;;;;;;;:::o;4479:468::-;4544:6;4552;4601:2;4589:9;4580:7;4576:23;4572:32;4569:119;;;4607:79;;:::i;:::-;4569:119;4727:1;4752:53;4797:7;4788:6;4777:9;4773:22;4752:53;:::i;:::-;4742:63;;4698:117;4854:2;4880:50;4922:7;4913:6;4902:9;4898:22;4880:50;:::i;:::-;4870:60;;4825:115;4479:468;;;;;:::o;4953:474::-;5021:6;5029;5078:2;5066:9;5057:7;5053:23;5049:32;5046:119;;;5084:79;;:::i;:::-;5046:119;5204:1;5229:53;5274:7;5265:6;5254:9;5250:22;5229:53;:::i;:::-;5219:63;;5175:117;5331:2;5357:53;5402:7;5393:6;5382:9;5378:22;5357:53;:::i;:::-;5347:63;;5302:118;4953:474;;;;;:::o;5433:559::-;5519:6;5527;5576:2;5564:9;5555:7;5551:23;5547:32;5544:119;;;5582:79;;:::i;:::-;5544:119;5730:1;5719:9;5715:17;5702:31;5760:18;5752:6;5749:30;5746:117;;;5782:79;;:::i;:::-;5746:117;5895:80;5967:7;5958:6;5947:9;5943:22;5895:80;:::i;:::-;5877:98;;;;5673:312;5433:559;;;;;:::o;5998:327::-;6056:6;6105:2;6093:9;6084:7;6080:23;6076:32;6073:119;;;6111:79;;:::i;:::-;6073:119;6231:1;6256:52;6300:7;6291:6;6280:9;6276:22;6256:52;:::i;:::-;6246:62;;6202:116;5998:327;;;;:::o;6331:349::-;6400:6;6449:2;6437:9;6428:7;6424:23;6420:32;6417:119;;;6455:79;;:::i;:::-;6417:119;6575:1;6600:63;6655:7;6646:6;6635:9;6631:22;6600:63;:::i;:::-;6590:73;;6546:127;6331:349;;;;:::o;6686:329::-;6745:6;6794:2;6782:9;6773:7;6769:23;6765:32;6762:119;;;6800:79;;:::i;:::-;6762:119;6920:1;6945:53;6990:7;6981:6;6970:9;6966:22;6945:53;:::i;:::-;6935:63;;6891:117;6686:329;;;;:::o;7021:118::-;7108:24;7126:5;7108:24;:::i;:::-;7103:3;7096:37;7021:118;;:::o;7145:109::-;7226:21;7241:5;7226:21;:::i;:::-;7221:3;7214:34;7145:109;;:::o;7260:360::-;7346:3;7374:38;7406:5;7374:38;:::i;:::-;7428:70;7491:6;7486:3;7428:70;:::i;:::-;7421:77;;7507:52;7552:6;7547:3;7540:4;7533:5;7529:16;7507:52;:::i;:::-;7584:29;7606:6;7584:29;:::i;:::-;7579:3;7575:39;7568:46;;7350:270;7260:360;;;;:::o;7626:364::-;7714:3;7742:39;7775:5;7742:39;:::i;:::-;7797:71;7861:6;7856:3;7797:71;:::i;:::-;7790:78;;7877:52;7922:6;7917:3;7910:4;7903:5;7899:16;7877:52;:::i;:::-;7954:29;7976:6;7954:29;:::i;:::-;7949:3;7945:39;7938:46;;7718:272;7626:364;;;;:::o;7996:377::-;8102:3;8130:39;8163:5;8130:39;:::i;:::-;8185:89;8267:6;8262:3;8185:89;:::i;:::-;8178:96;;8283:52;8328:6;8323:3;8316:4;8309:5;8305:16;8283:52;:::i;:::-;8360:6;8355:3;8351:16;8344:23;;8106:267;7996:377;;;;:::o;8379:366::-;8521:3;8542:67;8606:2;8601:3;8542:67;:::i;:::-;8535:74;;8618:93;8707:3;8618:93;:::i;:::-;8736:2;8731:3;8727:12;8720:19;;8379:366;;;:::o;8751:::-;8893:3;8914:67;8978:2;8973:3;8914:67;:::i;:::-;8907:74;;8990:93;9079:3;8990:93;:::i;:::-;9108:2;9103:3;9099:12;9092:19;;8751:366;;;:::o;9123:::-;9265:3;9286:67;9350:2;9345:3;9286:67;:::i;:::-;9279:74;;9362:93;9451:3;9362:93;:::i;:::-;9480:2;9475:3;9471:12;9464:19;;9123:366;;;:::o;9495:::-;9637:3;9658:67;9722:2;9717:3;9658:67;:::i;:::-;9651:74;;9734:93;9823:3;9734:93;:::i;:::-;9852:2;9847:3;9843:12;9836:19;;9495:366;;;:::o;9867:::-;10009:3;10030:67;10094:2;10089:3;10030:67;:::i;:::-;10023:74;;10106:93;10195:3;10106:93;:::i;:::-;10224:2;10219:3;10215:12;10208:19;;9867:366;;;:::o;10239:::-;10381:3;10402:67;10466:2;10461:3;10402:67;:::i;:::-;10395:74;;10478:93;10567:3;10478:93;:::i;:::-;10596:2;10591:3;10587:12;10580:19;;10239:366;;;:::o;10611:::-;10753:3;10774:67;10838:2;10833:3;10774:67;:::i;:::-;10767:74;;10850:93;10939:3;10850:93;:::i;:::-;10968:2;10963:3;10959:12;10952:19;;10611:366;;;:::o;10983:::-;11125:3;11146:67;11210:2;11205:3;11146:67;:::i;:::-;11139:74;;11222:93;11311:3;11222:93;:::i;:::-;11340:2;11335:3;11331:12;11324:19;;10983:366;;;:::o;11355:::-;11497:3;11518:67;11582:2;11577:3;11518:67;:::i;:::-;11511:74;;11594:93;11683:3;11594:93;:::i;:::-;11712:2;11707:3;11703:12;11696:19;;11355:366;;;:::o;11727:::-;11869:3;11890:67;11954:2;11949:3;11890:67;:::i;:::-;11883:74;;11966:93;12055:3;11966:93;:::i;:::-;12084:2;12079:3;12075:12;12068:19;;11727:366;;;:::o;12099:::-;12241:3;12262:67;12326:2;12321:3;12262:67;:::i;:::-;12255:74;;12338:93;12427:3;12338:93;:::i;:::-;12456:2;12451:3;12447:12;12440:19;;12099:366;;;:::o;12471:::-;12613:3;12634:67;12698:2;12693:3;12634:67;:::i;:::-;12627:74;;12710:93;12799:3;12710:93;:::i;:::-;12828:2;12823:3;12819:12;12812:19;;12471:366;;;:::o;12843:::-;12985:3;13006:67;13070:2;13065:3;13006:67;:::i;:::-;12999:74;;13082:93;13171:3;13082:93;:::i;:::-;13200:2;13195:3;13191:12;13184:19;;12843:366;;;:::o;13215:::-;13357:3;13378:67;13442:2;13437:3;13378:67;:::i;:::-;13371:74;;13454:93;13543:3;13454:93;:::i;:::-;13572:2;13567:3;13563:12;13556:19;;13215:366;;;:::o;13587:::-;13729:3;13750:67;13814:2;13809:3;13750:67;:::i;:::-;13743:74;;13826:93;13915:3;13826:93;:::i;:::-;13944:2;13939:3;13935:12;13928:19;;13587:366;;;:::o;13959:::-;14101:3;14122:67;14186:2;14181:3;14122:67;:::i;:::-;14115:74;;14198:93;14287:3;14198:93;:::i;:::-;14316:2;14311:3;14307:12;14300:19;;13959:366;;;:::o;14331:::-;14473:3;14494:67;14558:2;14553:3;14494:67;:::i;:::-;14487:74;;14570:93;14659:3;14570:93;:::i;:::-;14688:2;14683:3;14679:12;14672:19;;14331:366;;;:::o;14703:::-;14845:3;14866:67;14930:2;14925:3;14866:67;:::i;:::-;14859:74;;14942:93;15031:3;14942:93;:::i;:::-;15060:2;15055:3;15051:12;15044:19;;14703:366;;;:::o;15075:::-;15217:3;15238:67;15302:2;15297:3;15238:67;:::i;:::-;15231:74;;15314:93;15403:3;15314:93;:::i;:::-;15432:2;15427:3;15423:12;15416:19;;15075:366;;;:::o;15447:::-;15589:3;15610:67;15674:2;15669:3;15610:67;:::i;:::-;15603:74;;15686:93;15775:3;15686:93;:::i;:::-;15804:2;15799:3;15795:12;15788:19;;15447:366;;;:::o;15819:::-;15961:3;15982:67;16046:2;16041:3;15982:67;:::i;:::-;15975:74;;16058:93;16147:3;16058:93;:::i;:::-;16176:2;16171:3;16167:12;16160:19;;15819:366;;;:::o;16191:::-;16333:3;16354:67;16418:2;16413:3;16354:67;:::i;:::-;16347:74;;16430:93;16519:3;16430:93;:::i;:::-;16548:2;16543:3;16539:12;16532:19;;16191:366;;;:::o;16563:::-;16705:3;16726:67;16790:2;16785:3;16726:67;:::i;:::-;16719:74;;16802:93;16891:3;16802:93;:::i;:::-;16920:2;16915:3;16911:12;16904:19;;16563:366;;;:::o;16935:::-;17077:3;17098:67;17162:2;17157:3;17098:67;:::i;:::-;17091:74;;17174:93;17263:3;17174:93;:::i;:::-;17292:2;17287:3;17283:12;17276:19;;16935:366;;;:::o;17307:::-;17449:3;17470:67;17534:2;17529:3;17470:67;:::i;:::-;17463:74;;17546:93;17635:3;17546:93;:::i;:::-;17664:2;17659:3;17655:12;17648:19;;17307:366;;;:::o;17679:::-;17821:3;17842:67;17906:2;17901:3;17842:67;:::i;:::-;17835:74;;17918:93;18007:3;17918:93;:::i;:::-;18036:2;18031:3;18027:12;18020:19;;17679:366;;;:::o;18051:::-;18193:3;18214:67;18278:2;18273:3;18214:67;:::i;:::-;18207:74;;18290:93;18379:3;18290:93;:::i;:::-;18408:2;18403:3;18399:12;18392:19;;18051:366;;;:::o;18795:::-;18937:3;18958:67;19022:2;19017:3;18958:67;:::i;:::-;18951:74;;19034:93;19123:3;19034:93;:::i;:::-;19152:2;19147:3;19143:12;19136:19;;18795:366;;;:::o;19167:118::-;19254:24;19272:5;19254:24;:::i;:::-;19249:3;19242:37;19167:118;;:::o;19291:435::-;19471:3;19493:95;19584:3;19575:6;19493:95;:::i;:::-;19486:102;;19605:95;19696:3;19687:6;19605:95;:::i;:::-;19598:102;;19717:3;19710:10;;19291:435;;;;;:::o;19732:222::-;19825:4;19863:2;19852:9;19848:18;19840:26;;19876:71;19944:1;19933:9;19929:17;19920:6;19876:71;:::i;:::-;19732:222;;;;:::o;19960:640::-;20155:4;20193:3;20182:9;20178:19;20170:27;;20207:71;20275:1;20264:9;20260:17;20251:6;20207:71;:::i;:::-;20288:72;20356:2;20345:9;20341:18;20332:6;20288:72;:::i;:::-;20370;20438:2;20427:9;20423:18;20414:6;20370:72;:::i;:::-;20489:9;20483:4;20479:20;20474:2;20463:9;20459:18;20452:48;20517:76;20588:4;20579:6;20517:76;:::i;:::-;20509:84;;19960:640;;;;;;;:::o;20606:210::-;20693:4;20731:2;20720:9;20716:18;20708:26;;20744:65;20806:1;20795:9;20791:17;20782:6;20744:65;:::i;:::-;20606:210;;;;:::o;20822:763::-;21049:4;21087:3;21076:9;21072:19;21064:27;;21101:65;21163:1;21152:9;21148:17;21139:6;21101:65;:::i;:::-;21176:72;21244:2;21233:9;21229:18;21220:6;21176:72;:::i;:::-;21258;21326:2;21315:9;21311:18;21302:6;21258:72;:::i;:::-;21340;21408:2;21397:9;21393:18;21384:6;21340:72;:::i;:::-;21422:73;21490:3;21479:9;21475:19;21466:6;21422:73;:::i;:::-;21505;21573:3;21562:9;21558:19;21549:6;21505:73;:::i;:::-;20822:763;;;;;;;;;:::o;21591:313::-;21704:4;21742:2;21731:9;21727:18;21719:26;;21791:9;21785:4;21781:20;21777:1;21766:9;21762:17;21755:47;21819:78;21892:4;21883:6;21819:78;:::i;:::-;21811:86;;21591:313;;;;:::o;21910:419::-;22076:4;22114:2;22103:9;22099:18;22091:26;;22163:9;22157:4;22153:20;22149:1;22138:9;22134:17;22127:47;22191:131;22317:4;22191:131;:::i;:::-;22183:139;;21910:419;;;:::o;22335:::-;22501:4;22539:2;22528:9;22524:18;22516:26;;22588:9;22582:4;22578:20;22574:1;22563:9;22559:17;22552:47;22616:131;22742:4;22616:131;:::i;:::-;22608:139;;22335:419;;;:::o;22760:::-;22926:4;22964:2;22953:9;22949:18;22941:26;;23013:9;23007:4;23003:20;22999:1;22988:9;22984:17;22977:47;23041:131;23167:4;23041:131;:::i;:::-;23033:139;;22760:419;;;:::o;23185:::-;23351:4;23389:2;23378:9;23374:18;23366:26;;23438:9;23432:4;23428:20;23424:1;23413:9;23409:17;23402:47;23466:131;23592:4;23466:131;:::i;:::-;23458:139;;23185:419;;;:::o;23610:::-;23776:4;23814:2;23803:9;23799:18;23791:26;;23863:9;23857:4;23853:20;23849:1;23838:9;23834:17;23827:47;23891:131;24017:4;23891:131;:::i;:::-;23883:139;;23610:419;;;:::o;24035:::-;24201:4;24239:2;24228:9;24224:18;24216:26;;24288:9;24282:4;24278:20;24274:1;24263:9;24259:17;24252:47;24316:131;24442:4;24316:131;:::i;:::-;24308:139;;24035:419;;;:::o;24460:::-;24626:4;24664:2;24653:9;24649:18;24641:26;;24713:9;24707:4;24703:20;24699:1;24688:9;24684:17;24677:47;24741:131;24867:4;24741:131;:::i;:::-;24733:139;;24460:419;;;:::o;24885:::-;25051:4;25089:2;25078:9;25074:18;25066:26;;25138:9;25132:4;25128:20;25124:1;25113:9;25109:17;25102:47;25166:131;25292:4;25166:131;:::i;:::-;25158:139;;24885:419;;;:::o;25310:::-;25476:4;25514:2;25503:9;25499:18;25491:26;;25563:9;25557:4;25553:20;25549:1;25538:9;25534:17;25527:47;25591:131;25717:4;25591:131;:::i;:::-;25583:139;;25310:419;;;:::o;25735:::-;25901:4;25939:2;25928:9;25924:18;25916:26;;25988:9;25982:4;25978:20;25974:1;25963:9;25959:17;25952:47;26016:131;26142:4;26016:131;:::i;:::-;26008:139;;25735:419;;;:::o;26160:::-;26326:4;26364:2;26353:9;26349:18;26341:26;;26413:9;26407:4;26403:20;26399:1;26388:9;26384:17;26377:47;26441:131;26567:4;26441:131;:::i;:::-;26433:139;;26160:419;;;:::o;26585:::-;26751:4;26789:2;26778:9;26774:18;26766:26;;26838:9;26832:4;26828:20;26824:1;26813:9;26809:17;26802:47;26866:131;26992:4;26866:131;:::i;:::-;26858:139;;26585:419;;;:::o;27010:::-;27176:4;27214:2;27203:9;27199:18;27191:26;;27263:9;27257:4;27253:20;27249:1;27238:9;27234:17;27227:47;27291:131;27417:4;27291:131;:::i;:::-;27283:139;;27010:419;;;:::o;27435:::-;27601:4;27639:2;27628:9;27624:18;27616:26;;27688:9;27682:4;27678:20;27674:1;27663:9;27659:17;27652:47;27716:131;27842:4;27716:131;:::i;:::-;27708:139;;27435:419;;;:::o;27860:::-;28026:4;28064:2;28053:9;28049:18;28041:26;;28113:9;28107:4;28103:20;28099:1;28088:9;28084:17;28077:47;28141:131;28267:4;28141:131;:::i;:::-;28133:139;;27860:419;;;:::o;28285:::-;28451:4;28489:2;28478:9;28474:18;28466:26;;28538:9;28532:4;28528:20;28524:1;28513:9;28509:17;28502:47;28566:131;28692:4;28566:131;:::i;:::-;28558:139;;28285:419;;;:::o;28710:::-;28876:4;28914:2;28903:9;28899:18;28891:26;;28963:9;28957:4;28953:20;28949:1;28938:9;28934:17;28927:47;28991:131;29117:4;28991:131;:::i;:::-;28983:139;;28710:419;;;:::o;29135:::-;29301:4;29339:2;29328:9;29324:18;29316:26;;29388:9;29382:4;29378:20;29374:1;29363:9;29359:17;29352:47;29416:131;29542:4;29416:131;:::i;:::-;29408:139;;29135:419;;;:::o;29560:::-;29726:4;29764:2;29753:9;29749:18;29741:26;;29813:9;29807:4;29803:20;29799:1;29788:9;29784:17;29777:47;29841:131;29967:4;29841:131;:::i;:::-;29833:139;;29560:419;;;:::o;29985:::-;30151:4;30189:2;30178:9;30174:18;30166:26;;30238:9;30232:4;30228:20;30224:1;30213:9;30209:17;30202:47;30266:131;30392:4;30266:131;:::i;:::-;30258:139;;29985:419;;;:::o;30410:::-;30576:4;30614:2;30603:9;30599:18;30591:26;;30663:9;30657:4;30653:20;30649:1;30638:9;30634:17;30627:47;30691:131;30817:4;30691:131;:::i;:::-;30683:139;;30410:419;;;:::o;30835:::-;31001:4;31039:2;31028:9;31024:18;31016:26;;31088:9;31082:4;31078:20;31074:1;31063:9;31059:17;31052:47;31116:131;31242:4;31116:131;:::i;:::-;31108:139;;30835:419;;;:::o;31260:::-;31426:4;31464:2;31453:9;31449:18;31441:26;;31513:9;31507:4;31503:20;31499:1;31488:9;31484:17;31477:47;31541:131;31667:4;31541:131;:::i;:::-;31533:139;;31260:419;;;:::o;31685:::-;31851:4;31889:2;31878:9;31874:18;31866:26;;31938:9;31932:4;31928:20;31924:1;31913:9;31909:17;31902:47;31966:131;32092:4;31966:131;:::i;:::-;31958:139;;31685:419;;;:::o;32110:::-;32276:4;32314:2;32303:9;32299:18;32291:26;;32363:9;32357:4;32353:20;32349:1;32338:9;32334:17;32327:47;32391:131;32517:4;32391:131;:::i;:::-;32383:139;;32110:419;;;:::o;32535:::-;32701:4;32739:2;32728:9;32724:18;32716:26;;32788:9;32782:4;32778:20;32774:1;32763:9;32759:17;32752:47;32816:131;32942:4;32816:131;:::i;:::-;32808:139;;32535:419;;;:::o;32960:::-;33126:4;33164:2;33153:9;33149:18;33141:26;;33213:9;33207:4;33203:20;33199:1;33188:9;33184:17;33177:47;33241:131;33367:4;33241:131;:::i;:::-;33233:139;;32960:419;;;:::o;33810:::-;33976:4;34014:2;34003:9;33999:18;33991:26;;34063:9;34057:4;34053:20;34049:1;34038:9;34034:17;34027:47;34091:131;34217:4;34091:131;:::i;:::-;34083:139;;33810:419;;;:::o;34235:222::-;34328:4;34366:2;34355:9;34351:18;34343:26;;34379:71;34447:1;34436:9;34432:17;34423:6;34379:71;:::i;:::-;34235:222;;;;:::o;34463:129::-;34497:6;34524:20;;:::i;:::-;34514:30;;34553:33;34581:4;34573:6;34553:33;:::i;:::-;34463:129;;;:::o;34598:75::-;34631:6;34664:2;34658:9;34648:19;;34598:75;:::o;34679:307::-;34740:4;34830:18;34822:6;34819:30;34816:56;;;34852:18;;:::i;:::-;34816:56;34890:29;34912:6;34890:29;:::i;:::-;34882:37;;34974:4;34968;34964:15;34956:23;;34679:307;;;:::o;34992:98::-;35043:6;35077:5;35071:12;35061:22;;34992:98;;;:::o;35096:99::-;35148:6;35182:5;35176:12;35166:22;;35096:99;;;:::o;35201:168::-;35284:11;35318:6;35313:3;35306:19;35358:4;35353:3;35349:14;35334:29;;35201:168;;;;:::o;35375:169::-;35459:11;35493:6;35488:3;35481:19;35533:4;35528:3;35524:14;35509:29;;35375:169;;;;:::o;35550:148::-;35652:11;35689:3;35674:18;;35550:148;;;;:::o;35704:273::-;35744:3;35763:20;35781:1;35763:20;:::i;:::-;35758:25;;35797:20;35815:1;35797:20;:::i;:::-;35792:25;;35919:1;35883:34;35879:42;35876:1;35873:49;35870:75;;;35925:18;;:::i;:::-;35870:75;35969:1;35966;35962:9;35955:16;;35704:273;;;;:::o;35983:305::-;36023:3;36042:20;36060:1;36042:20;:::i;:::-;36037:25;;36076:20;36094:1;36076:20;:::i;:::-;36071:25;;36230:1;36162:66;36158:74;36155:1;36152:81;36149:107;;;36236:18;;:::i;:::-;36149:107;36280:1;36277;36273:9;36266:16;;35983:305;;;;:::o;36294:185::-;36334:1;36351:20;36369:1;36351:20;:::i;:::-;36346:25;;36385:20;36403:1;36385:20;:::i;:::-;36380:25;;36424:1;36414:35;;36429:18;;:::i;:::-;36414:35;36471:1;36468;36464:9;36459:14;;36294:185;;;;:::o;36485:348::-;36525:7;36548:20;36566:1;36548:20;:::i;:::-;36543:25;;36582:20;36600:1;36582:20;:::i;:::-;36577:25;;36770:1;36702:66;36698:74;36695:1;36692:81;36687:1;36680:9;36673:17;36669:105;36666:131;;;36777:18;;:::i;:::-;36666:131;36825:1;36822;36818:9;36807:20;;36485:348;;;;:::o;36839:191::-;36879:4;36899:20;36917:1;36899:20;:::i;:::-;36894:25;;36933:20;36951:1;36933:20;:::i;:::-;36928:25;;36972:1;36969;36966:8;36963:34;;;36977:18;;:::i;:::-;36963:34;37022:1;37019;37015:9;37007:17;;36839:191;;;;:::o;37036:96::-;37073:7;37102:24;37120:5;37102:24;:::i;:::-;37091:35;;37036:96;;;:::o;37138:90::-;37172:7;37215:5;37208:13;37201:21;37190:32;;37138:90;;;:::o;37234:149::-;37270:7;37310:66;37303:5;37299:78;37288:89;;37234:149;;;:::o;37389:118::-;37426:7;37466:34;37459:5;37455:46;37444:57;;37389:118;;;:::o;37513:126::-;37550:7;37590:42;37583:5;37579:54;37568:65;;37513:126;;;:::o;37645:77::-;37682:7;37711:5;37700:16;;37645:77;;;:::o;37728:154::-;37812:6;37807:3;37802;37789:30;37874:1;37865:6;37860:3;37856:16;37849:27;37728:154;;;:::o;37888:307::-;37956:1;37966:113;37980:6;37977:1;37974:13;37966:113;;;38065:1;38060:3;38056:11;38050:18;38046:1;38041:3;38037:11;38030:39;38002:2;37999:1;37995:10;37990:15;;37966:113;;;38097:6;38094:1;38091:13;38088:101;;;38177:1;38168:6;38163:3;38159:16;38152:27;38088:101;37937:258;37888:307;;;:::o;38201:171::-;38240:3;38263:24;38281:5;38263:24;:::i;:::-;38254:33;;38309:4;38302:5;38299:15;38296:41;;;38317:18;;:::i;:::-;38296:41;38364:1;38357:5;38353:13;38346:20;;38201:171;;;:::o;38378:320::-;38422:6;38459:1;38453:4;38449:12;38439:22;;38506:1;38500:4;38496:12;38527:18;38517:81;;38583:4;38575:6;38571:17;38561:27;;38517:81;38645:2;38637:6;38634:14;38614:18;38611:38;38608:84;;;38664:18;;:::i;:::-;38608:84;38429:269;38378:320;;;:::o;38704:281::-;38787:27;38809:4;38787:27;:::i;:::-;38779:6;38775:40;38917:6;38905:10;38902:22;38881:18;38869:10;38866:34;38863:62;38860:88;;;38928:18;;:::i;:::-;38860:88;38968:10;38964:2;38957:22;38747:238;38704:281;;:::o;38991:233::-;39030:3;39053:24;39071:5;39053:24;:::i;:::-;39044:33;;39099:66;39092:5;39089:77;39086:103;;;39169:18;;:::i;:::-;39086:103;39216:1;39209:5;39205:13;39198:20;;38991:233;;;:::o;39230:176::-;39262:1;39279:20;39297:1;39279:20;:::i;:::-;39274:25;;39313:20;39331:1;39313:20;:::i;:::-;39308:25;;39352:1;39342:35;;39357:18;;:::i;:::-;39342:35;39398:1;39395;39391:9;39386:14;;39230:176;;;;:::o;39412:180::-;39460:77;39457:1;39450:88;39557:4;39554:1;39547:15;39581:4;39578:1;39571:15;39598:180;39646:77;39643:1;39636:88;39743:4;39740:1;39733:15;39767:4;39764:1;39757:15;39784:180;39832:77;39829:1;39822:88;39929:4;39926:1;39919:15;39953:4;39950:1;39943:15;39970:180;40018:77;40015:1;40008:88;40115:4;40112:1;40105:15;40139:4;40136:1;40129:15;40156:180;40204:77;40201:1;40194:88;40301:4;40298:1;40291:15;40325:4;40322:1;40315:15;40342:117;40451:1;40448;40441:12;40465:117;40574:1;40571;40564:12;40588:117;40697:1;40694;40687:12;40711:117;40820:1;40817;40810:12;40834:117;40943:1;40940;40933:12;40957:117;41066:1;41063;41056:12;41080:102;41121:6;41172:2;41168:7;41163:2;41156:5;41152:14;41148:28;41138:38;;41080:102;;;:::o;41188:221::-;41328:34;41324:1;41316:6;41312:14;41305:58;41397:4;41392:2;41384:6;41380:15;41373:29;41188:221;:::o;41415:180::-;41555:32;41551:1;41543:6;41539:14;41532:56;41415:180;:::o;41601:225::-;41741:34;41737:1;41729:6;41725:14;41718:58;41810:8;41805:2;41797:6;41793:15;41786:33;41601:225;:::o;41832:229::-;41972:34;41968:1;41960:6;41956:14;41949:58;42041:12;42036:2;42028:6;42024:15;42017:37;41832:229;:::o;42067:176::-;42207:28;42203:1;42195:6;42191:14;42184:52;42067:176;:::o;42249:222::-;42389:34;42385:1;42377:6;42373:14;42366:58;42458:5;42453:2;42445:6;42441:15;42434:30;42249:222;:::o;42477:224::-;42617:34;42613:1;42605:6;42601:14;42594:58;42686:7;42681:2;42673:6;42669:15;42662:32;42477:224;:::o;42707:227::-;42847:34;42843:1;42835:6;42831:14;42824:58;42916:10;42911:2;42903:6;42899:15;42892:35;42707:227;:::o;42940:244::-;43080:34;43076:1;43068:6;43064:14;43057:58;43149:27;43144:2;43136:6;43132:15;43125:52;42940:244;:::o;43190:168::-;43330:20;43326:1;43318:6;43314:14;43307:44;43190:168;:::o;43364:222::-;43504:34;43500:1;43492:6;43488:14;43481:58;43573:5;43568:2;43560:6;43556:15;43549:30;43364:222;:::o;43592:230::-;43732:34;43728:1;43720:6;43716:14;43709:58;43801:13;43796:2;43788:6;43784:15;43777:38;43592:230;:::o;43828:225::-;43968:34;43964:1;43956:6;43952:14;43945:58;44037:8;44032:2;44024:6;44020:15;44013:33;43828:225;:::o;44059:182::-;44199:34;44195:1;44187:6;44183:14;44176:58;44059:182;:::o;44247:234::-;44387:34;44383:1;44375:6;44371:14;44364:58;44456:17;44451:2;44443:6;44439:15;44432:42;44247:234;:::o;44487:176::-;44627:28;44623:1;44615:6;44611:14;44604:52;44487:176;:::o;44669:237::-;44809:34;44805:1;44797:6;44793:14;44786:58;44878:20;44873:2;44865:6;44861:15;44854:45;44669:237;:::o;44912:177::-;45052:29;45048:1;45040:6;45036:14;45029:53;44912:177;:::o;45095:221::-;45235:34;45231:1;45223:6;45219:14;45212:58;45304:4;45299:2;45291:6;45287:15;45280:29;45095:221;:::o;45322:222::-;45462:34;45458:1;45450:6;45446:14;45439:58;45531:5;45526:2;45518:6;45514:15;45507:30;45322:222;:::o;45550:238::-;45690:34;45686:1;45678:6;45674:14;45667:58;45759:21;45754:2;45746:6;45742:15;45735:46;45550:238;:::o;45794:179::-;45934:31;45930:1;45922:6;45918:14;45911:55;45794:179;:::o;45979:172::-;46119:24;46115:1;46107:6;46103:14;46096:48;45979:172;:::o;46157:220::-;46297:34;46293:1;46285:6;46281:14;46274:58;46366:3;46361:2;46353:6;46349:15;46342:28;46157:220;:::o;46383:163::-;46523:15;46519:1;46511:6;46507:14;46500:39;46383:163;:::o;46552:233::-;46692:34;46688:1;46680:6;46676:14;46669:58;46761:16;46756:2;46748:6;46744:15;46737:41;46552:233;:::o;46791:181::-;46931:33;46927:1;46919:6;46915:14;46908:57;46791:181;:::o;47218:232::-;47358:34;47354:1;47346:6;47342:14;47335:58;47427:15;47422:2;47414:6;47410:15;47403:40;47218:232;:::o;47456:122::-;47529:24;47547:5;47529:24;:::i;:::-;47522:5;47519:35;47509:63;;47568:1;47565;47558:12;47509:63;47456:122;:::o;47584:116::-;47654:21;47669:5;47654:21;:::i;:::-;47647:5;47644:32;47634:60;;47690:1;47687;47680:12;47634:60;47584:116;:::o;47706:120::-;47778:23;47795:5;47778:23;:::i;:::-;47771:5;47768:34;47758:62;;47816:1;47813;47806:12;47758:62;47706:120;:::o;47832:122::-;47905:24;47923:5;47905:24;:::i;:::-;47898:5;47895:35;47885:63;;47944:1;47941;47934:12;47885:63;47832:122;:::o

Swarm Source

ipfs://d91340bfa710613e22c6c927c5d4fd75e931f585511853e5efb70504a3c5ec0b
Loading...
Loading
Loading...
Loading
[ 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.