ETH Price: $3,246.99 (-0.36%)
Gas: 1 Gwei

Token

APES X CLUB (AXC)
 

Overview

Max Total Supply

0 AXC

Holders

76

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 AXC
0x0eb1477ac4fa57567583697d89119c8e32f71d9a
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:
APESX

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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: test/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Token URI
    string private _uri;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_, string memory uri_) {
        _name = name_;
        _symbol = symbol_;
        _uri = uri_;
    }

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

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        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 _uri;
    }

    function _setTokenURI(string memory newTokenURI) internal {
        _uri = newTokenURI;
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: test/@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol


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

pragma solidity ^0.8.0;



/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }
}

// File: test/apesx.sol

pragma solidity ^0.8.2;






contract APESX is ERC721, ERC721Burnable, Ownable {
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;

    mapping(address => uint256) public whiteList;

    uint256 public whiteListPrice = 0.1 ether ;
    uint256 public publicSalePrice = 0.2 ether ;
    uint256 public lastSalePrice = 0.2 ether ;
    uint256 public firstDutchPrice = 1 ether ;
    uint256 public secondDutchPrice = 1 ether ;

    uint256 public maxSupply = 1111 ;
    uint256 public totalSold = 0 ;

    uint256 private numOfWhiteList = 150 ;
    uint256 public countOfWhiteList = 0 ;

    uint256 private numOfFirstMint = 310 ;
    uint256 public countOfFirstMint = 0 ;

    uint256 private numOfSecondMint = 200 ;
    uint256 public countOfSecondMint = 0 ;

    uint256 private numOfFirstAuction = 200 ;
    uint256 public countOfFirstAuction = 0 ;

    uint256 private numOfSecondAuction = 200 ;
    uint256 public countOfSecondAuction = 0 ;

    bool public firstWaveAllow = false ;
    bool public secondWaveAllow = false ;
    bool public whiteListAllow = false ;
    bool public firstAuctionAllow = false ;
    bool public secondAuctionAllow = false ;
    bool public lastMintAllow = false ;

    uint256 private firstAuctionStartDate = 1647064800 ;
    uint256 private secondAuctionStartDate = 1647669600 ;

    constructor() ERC721("APES X CLUB", "AXC", "ipfs://QmWMuYGc9RVj3RAtt4Z2uTPQWhcm4vEkGoGH5BfKpXBDA1/") {}

    function setLastSalePrice(uint256 newPrice) external onlyOwner {
        lastSalePrice = newPrice;
    }

    function flipFirstWaveAllow() external onlyOwner {
        firstWaveAllow = !firstWaveAllow;
    }

    function flipSecondWaveAllow() external onlyOwner {
        secondWaveAllow = !secondWaveAllow;
    }

    function flipWhiteListAllow() external onlyOwner {
        whiteListAllow = !whiteListAllow;
    }

    function flipFirstAuctionAllow() external onlyOwner {
        firstAuctionAllow = !firstAuctionAllow;
    }

    function flipSecondAuctionAllow() external onlyOwner {
        secondAuctionAllow = !secondAuctionAllow;
    }

    function flipLastMintAllow() external onlyOwner {
        lastMintAllow = !lastMintAllow;
    }

    function safeMint(address to) internal {
        totalSold++;
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        _safeMint(to, tokenId);
    }

    function adminMint() external onlyOwner {
        uint256 quantity = 51 ; 
        while( quantity > 0 ) {
            safeMint( msg.sender ) ;
            quantity-- ;
        }
    }

    function setWhiteList(address[] calldata _whiteList) external onlyOwner {
        for(uint i = 0; i < _whiteList.length; i++) {
        whiteList[_whiteList[i]] = 1;
        }
    }

    function whiteListMint() external payable {

        require( whiteListAllow, "APESX: is not allow" );

        require( whiteList[msg.sender] > 0, "APESX: too many whitelist apes" );

        whiteList[msg.sender] = 0;

        require( balanceOf(msg.sender) < 1, "APESX: too many apes" );

        require( countOfWhiteList < numOfWhiteList, "APESX: too many white list mint" );

        require( msg.value >= whiteListPrice, "APESX: not enough ether" );
        safeMint( msg.sender ) ;
        countOfWhiteList++ ;
    }

    function firstWaveMint() external payable {
        require( firstWaveAllow, "APESX: is not allow" );

        require( balanceOf(msg.sender) < 1, "APESX: too many apes" );

        require( countOfFirstMint < numOfFirstMint, "APESX: too many first wave mint" );

        require( msg.value >= publicSalePrice, "MyToken: not enough ether" );
        safeMint( msg.sender ) ;
        countOfFirstMint++ ;
    }

    function secondWaveMint() external payable {
        require( secondWaveAllow, "APESX: is not allow" );

        require( balanceOf(msg.sender) < 1, "APESX: too many apes" );

        require( countOfSecondMint < numOfSecondMint, "APESX: too many second wave mint" );

        require( msg.value >= publicSalePrice, "APESX: not enough ether" );
        safeMint( msg.sender ) ;
        countOfSecondMint++ ;
    }
    
    function getFirstAuctionPrice() public view returns (uint256) {
        uint256 countDown = ( block.timestamp - firstAuctionStartDate ) / 300;
        uint256 currentDutchPrice = firstDutchPrice ;
        
        while ( countDown > 0 && currentDutchPrice > 0.2 ether ) {
            currentDutchPrice = currentDutchPrice - 0.05 ether ;
            countDown-- ;
        }

        if ( currentDutchPrice < 0.2 ether )
            return 0.2 ether ;

        return currentDutchPrice ;
    }

    function firstDutchMint() external payable {
        require( firstAuctionAllow, "APESX: is not allow" );

        require( balanceOf(msg.sender) < 1, "APESX: too many apes" );

        require( countOfFirstAuction < numOfFirstAuction, "APESX: too many dutch mint" );

        require( msg.value >= getFirstAuctionPrice(), "APESX: not enough ether" );
        safeMint( msg.sender ) ;
        countOfFirstAuction++ ;
    }
    

    function getSecondAuctionPrice() public view returns (uint256) {
        uint256 countDown = ( block.timestamp - secondAuctionStartDate ) / 300;
        uint256 currentDutchPrice = secondDutchPrice ;
        
        while ( countDown > 0 && currentDutchPrice > 0.2 ether ) {
            currentDutchPrice = currentDutchPrice - 0.05 ether ;
            countDown-- ;
        }

        if ( currentDutchPrice < 0.2 ether )
            return 0.2 ether ;

        return currentDutchPrice ;
    }

    function secondDutchMint() external payable {
        require( secondAuctionAllow, "APESX: is not allow" );

        require( balanceOf(msg.sender) < 1, "APESX: too many apes" );

        require( countOfSecondAuction < numOfSecondAuction, "APESX: too many dutch mint" );

        require( msg.value >= getSecondAuctionPrice(), "APESX: not enough ether" );
        safeMint( msg.sender ) ;
        countOfSecondAuction++ ;
    }

    function lastMint() external payable {
        require( lastMintAllow, "APESX: is not allow" );

        require( balanceOf(msg.sender) < 1, "APESX: too many apes" );

        require( totalSold < maxSupply, "APESX: out of max supply" );

        require( msg.value >= lastSalePrice, "APESX: not enough ether" );
        safeMint( msg.sender ) ;
    }

    function setFirstDutchPrice(uint256 newDutchPrice) external onlyOwner {
        // 地板價加0.2ETH
        firstDutchPrice = newDutchPrice + 0.2 ether;
    }

    function setSecondDutchPrice(uint256 newDutchPrice) external onlyOwner {
        // 地板價加0.2ETH
        secondDutchPrice = newDutchPrice + 0.2 ether;
    }

    function setURI(string memory newURI) external onlyOwner {
        _setTokenURI(newURI) ;
    }

    function withdraw() external onlyOwner {
        require(address(this).balance > 0, "APESX: balance zero");
        payable(owner()).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"adminMint","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"countOfFirstAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countOfFirstMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countOfSecondAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countOfSecondMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countOfWhiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstAuctionAllow","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstDutchMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"firstDutchPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstWaveAllow","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstWaveMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"flipFirstAuctionAllow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipFirstWaveAllow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipLastMintAllow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSecondAuctionAllow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSecondWaveAllow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWhiteListAllow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFirstAuctionPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSecondAuctionPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"lastMintAllow","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"publicSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"secondAuctionAllow","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondDutchMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"secondDutchPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondWaveAllow","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondWaveMint","outputs":[],"stateMutability":"payable","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":"newDutchPrice","type":"uint256"}],"name":"setFirstDutchPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setLastSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDutchPrice","type":"uint256"}],"name":"setSecondDutchPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whiteList","type":"address[]"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSold","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":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListAllow","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whiteListPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405267016345785d8a0000600a556702c68af0bb140000600b556702c68af0bb140000600c55670de0b6b3a7640000600d55670de0b6b3a7640000600e55610457600f55600060105560966011556000601255610136601355600060145560c8601555600060165560c8601755600060185560c86019556000601a556000601b60006101000a81548160ff0219169083151502179055506000601b60016101000a81548160ff0219169083151502179055506000601b60026101000a81548160ff0219169083151502179055506000601b60036101000a81548160ff0219169083151502179055506000601b60046101000a81548160ff0219169083151502179055506000601b60056101000a81548160ff02191690831515021790555063622c36e0601c556362357160601d553480156200013d57600080fd5b506040518060400160405280600b81526020017f41504553205820434c55420000000000000000000000000000000000000000008152506040518060400160405280600381526020017f415843000000000000000000000000000000000000000000000000000000000081525060405180606001604052806036815260200162005523603691398260009080519060200190620001dc92919062000306565b508160019080519060200190620001f592919062000306565b5080600290805190602001906200020e92919062000306565b5050505062000232620002266200023860201b60201c565b6200024060201b60201c565b6200041b565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200031490620003b6565b90600052602060002090601f01602090048101928262000338576000855562000384565b82601f106200035357805160ff191683800117855562000384565b8280016001018555821562000384579182015b828111156200038357825182559160200191906001019062000366565b5b50905062000393919062000397565b5090565b5b80821115620003b257600081600090555060010162000398565b5090565b60006002820490506001821680620003cf57607f821691505b60208210811415620003e657620003e5620003ec565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6150f8806200042b6000396000f3fe6080604052600436106103765760003560e01c806372199260116101d15780639b6860c811610102578063d093b629116100a0578063dff8c2c61161006f578063dff8c2c614610b40578063e985e9c514610b6b578063f2fde38b14610ba8578063f5bc1a1a14610bd157610376565b8063d093b62914610aa8578063d4cf93d414610ad3578063d5abeb0114610afe578063ddf5084d14610b2957610376565b8063b88d4fde116100dc578063b88d4fde14610a00578063bc824ee314610a29578063c87b56dd14610a40578063ceda92ca14610a7d57610376565b80639b6860c8146109a2578063a22cb465146109cd578063b7cb95ff146109f657610376565b80639106d7ba1161016f57806394bc978f1161014957806394bc978f1461091757806395d89b4114610942578063993aa4161461096d578063993c16bf1461099857610376565b80639106d7ba146108ac578063917bd7dd146108d75780639273dd90146108ee57610376565b806386f5960f116101ab57806386f5960f14610828578063895fc788146108535780638da5cb5b1461086a5780638e3f63c51461089557610376565b806372199260146107ca57806373e118ff146107f5578063775b9c13146107ff57610376565b8063372c12b1116102ab57806354728df5116102495780636352211e116102235780636352211e1461070e578063685756851461074b57806370a0823114610776578063715018a6146107b357610376565b806354728df5146106d1578063586fc5b5146106fa5780635dc89b341461070457610376565b806342842e0e1161028557806342842e0e1461062957806342966c68146106525780634339cbec1461067b5780635066fd9e146106a657610376565b8063372c12b1146105aa5780633787edc2146105e75780633ccfd60b1461061257610376565b8063106b8f5611610318578063205b167e116102f2578063205b167e1461052157806323b872dd1461054c5780632cd39ba914610575578063355b82fe1461057f57610376565b8063106b8f56146104b457806310958311146104df57806315906f93146104f657610376565b806306d0de1a1161035457806306d0de1a1461040c57806306fdde0314610423578063081812fc1461044e578063095ea7b31461048b57610376565b806301ffc9a71461037b5780630230b9c7146103b857806302fe5305146103e3575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d9190613bc9565b610bfa565b6040516103af91906141c8565b60405180910390f35b3480156103c457600080fd5b506103cd610cdc565b6040516103da91906141c8565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613c23565b610cef565b005b34801561041857600080fd5b50610421610d77565b005b34801561042f57600080fd5b50610438610e1f565b60405161044591906141e3565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190613c6c565b610eb1565b6040516104829190614161565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613b3c565b610f36565b005b3480156104c057600080fd5b506104c961104e565b6040516104d69190614585565b60405180910390f35b3480156104eb57600080fd5b506104f4611054565b005b34801561050257600080fd5b5061050b6110fc565b6040516105189190614585565b60405180910390f35b34801561052d57600080fd5b50610536611102565b6040516105439190614585565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613a26565b611108565b005b61057d611168565b005b34801561058b57600080fd5b506105946112b0565b6040516105a191906141c8565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc91906139b9565b6112c3565b6040516105de9190614585565b60405180910390f35b3480156105f357600080fd5b506105fc6112db565b6040516106099190614585565b60405180910390f35b34801561061e57600080fd5b506106276112e1565b005b34801561063557600080fd5b50610650600480360381019061064b9190613a26565b6113f0565b005b34801561065e57600080fd5b5061067960048036038101906106749190613c6c565b611410565b005b34801561068757600080fd5b5061069061146c565b60405161069d9190614585565b60405180910390f35b3480156106b257600080fd5b506106bb611503565b6040516106c89190614585565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f39190613c6c565b611509565b005b6107026115a2565b005b61070c6116d2565b005b34801561071a57600080fd5b5061073560048036038101906107309190613c6c565b6118e1565b6040516107429190614161565b60405180910390f35b34801561075757600080fd5b50610760611993565b60405161076d9190614585565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906139b9565b611999565b6040516107aa9190614585565b60405180910390f35b3480156107bf57600080fd5b506107c8611a51565b005b3480156107d657600080fd5b506107df611ad9565b6040516107ec9190614585565b60405180910390f35b6107fd611b70565b005b34801561080b57600080fd5b5061082660048036038101906108219190613b7c565b611cbd565b005b34801561083457600080fd5b5061083d611dcb565b60405161084a9190614585565b60405180910390f35b34801561085f57600080fd5b50610868611dd1565b005b34801561087657600080fd5b5061087f611e7c565b60405161088c9190614161565b60405180910390f35b3480156108a157600080fd5b506108aa611ea6565b005b3480156108b857600080fd5b506108c1611f4e565b6040516108ce9190614585565b60405180910390f35b3480156108e357600080fd5b506108ec611f54565b005b3480156108fa57600080fd5b5061091560048036038101906109109190613c6c565b611ffc565b005b34801561092357600080fd5b5061092c612095565b60405161093991906141c8565b60405180910390f35b34801561094e57600080fd5b506109576120a8565b60405161096491906141e3565b60405180910390f35b34801561097957600080fd5b5061098261213a565b60405161098f9190614585565b60405180910390f35b6109a0612140565b005b3480156109ae57600080fd5b506109b7612288565b6040516109c49190614585565b60405180910390f35b3480156109d957600080fd5b506109f460048036038101906109ef9190613afc565b61228e565b005b6109fe6122a4565b005b348015610a0c57600080fd5b50610a276004803603810190610a229190613a79565b6123f1565b005b348015610a3557600080fd5b50610a3e612453565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190613c6c565b6124fb565b604051610a7491906141e3565b60405180910390f35b348015610a8957600080fd5b50610a926125a2565b604051610a9f9190614585565b60405180910390f35b348015610ab457600080fd5b50610abd6125a8565b604051610aca91906141c8565b60405180910390f35b348015610adf57600080fd5b50610ae86125bb565b604051610af591906141c8565b60405180910390f35b348015610b0a57600080fd5b50610b136125ce565b604051610b209190614585565b60405180910390f35b348015610b3557600080fd5b50610b3e6125d4565b005b348015610b4c57600080fd5b50610b5561267c565b604051610b6291906141c8565b60405180910390f35b348015610b7757600080fd5b50610b926004803603810190610b8d91906139e6565b61268f565b604051610b9f91906141c8565b60405180910390f35b348015610bb457600080fd5b50610bcf6004803603810190610bca91906139b9565b612723565b005b348015610bdd57600080fd5b50610bf86004803603810190610bf39190613c6c565b61281b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cc557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610cd55750610cd4826128a1565b5b9050919050565b601b60049054906101000a900460ff1681565b610cf761290b565b73ffffffffffffffffffffffffffffffffffffffff16610d15611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290614425565b60405180910390fd5b610d7481612913565b50565b610d7f61290b565b73ffffffffffffffffffffffffffffffffffffffff16610d9d611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90614425565b60405180910390fd5b601b60019054906101000a900460ff1615601b60016101000a81548160ff021916908315150217905550565b606060008054610e2e90614805565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5a90614805565b8015610ea75780601f10610e7c57610100808354040283529160200191610ea7565b820191906000526020600020905b815481529060010190602001808311610e8a57829003601f168201915b5050505050905090565b6000610ebc8261292d565b610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef290614405565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f41826118e1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa9906144a5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fd161290b565b73ffffffffffffffffffffffffffffffffffffffff1614806110005750610fff81610ffa61290b565b61268f565b5b61103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690614325565b60405180910390fd5b6110498383612999565b505050565b600e5481565b61105c61290b565b73ffffffffffffffffffffffffffffffffffffffff1661107a611e7c565b73ffffffffffffffffffffffffffffffffffffffff16146110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790614425565b60405180910390fd5b601b60039054906101000a900460ff1615601b60036101000a81548160ff021916908315150217905550565b600d5481565b60125481565b61111961111361290b565b82612a52565b611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f906144c5565b60405180910390fd5b611163838383612b30565b505050565b601b60009054906101000a900460ff166111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90614565565b60405180910390fd5b60016111c233611999565b10611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990614205565b60405180910390fd5b60135460145410611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f906144e5565b60405180910390fd5b600b5434101561128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490614285565b60405180910390fd5b61129633612d8c565b601460008154809291906112a990614868565b9190505550565b601b60029054906101000a900460ff1681565b60096020528060005260406000206000915090505481565b60165481565b6112e961290b565b73ffffffffffffffffffffffffffffffffffffffff16611307611e7c565b73ffffffffffffffffffffffffffffffffffffffff161461135d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135490614425565b60405180910390fd5b600047116113a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139790614505565b60405180910390fd5b6113a8611e7c565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156113ed573d6000803e3d6000fd5b50565b61140b838383604051806020016040528060008152506123f1565b505050565b61142161141b61290b565b82612a52565b611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614525565b60405180910390fd5b61146981612dca565b50565b60008061012c601c544261148091906146f1565b61148a91906146c0565b90506000600d5490505b6000821180156114ab57506702c68af0bb14000081115b156114d85766b1a2bc2ec50000816114c391906146f1565b905081806114d0906147db565b925050611494565b6702c68af0bb1400008110156114fa576702c68af0bb14000092505050611500565b80925050505b90565b60145481565b61151161290b565b73ffffffffffffffffffffffffffffffffffffffff1661152f611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c90614425565b60405180910390fd5b6702c68af0bb14000081611599919061466a565b600e8190555050565b601b60059054906101000a900460ff166115f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e890614565565b60405180910390fd5b60016115fc33611999565b1061163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163390614205565b60405180910390fd5b600f5460105410611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167990614385565b60405180910390fd5b600c543410156116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be906143c5565b60405180910390fd5b6116d033612d8c565b565b601b60029054906101000a900460ff16611721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171890614565565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90614545565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016117f333611999565b10611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90614205565b60405180910390fd5b60115460125410611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090614485565b60405180910390fd5b600a543410156118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b5906143c5565b60405180910390fd5b6118c733612d8c565b601260008154809291906118da90614868565b9190505550565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190614365565b60405180910390fd5b80915050919050565b600a5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190614345565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a5961290b565b73ffffffffffffffffffffffffffffffffffffffff16611a77611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac490614425565b60405180910390fd5b611ad76000612edb565b565b60008061012c601d5442611aed91906146f1565b611af791906146c0565b90506000600e5490505b600082118015611b1857506702c68af0bb14000081115b15611b455766b1a2bc2ec5000081611b3091906146f1565b90508180611b3d906147db565b925050611b01565b6702c68af0bb140000811015611b67576702c68af0bb14000092505050611b6d565b80925050505b90565b601b60039054906101000a900460ff16611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb690614565565b60405180910390fd5b6001611bca33611999565b10611c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0190614205565b60405180910390fd5b60175460185410611c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c47906143a5565b60405180910390fd5b611c5861146c565b341015611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c91906143c5565b60405180910390fd5b611ca333612d8c565b60186000815480929190611cb690614868565b9190505550565b611cc561290b565b73ffffffffffffffffffffffffffffffffffffffff16611ce3611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090614425565b60405180910390fd5b60005b82829050811015611dc657600160096000858585818110611d6057611d5f61496f565b5b9050602002016020810190611d7591906139b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611dbe90614868565b915050611d3c565b505050565b600c5481565b611dd961290b565b73ffffffffffffffffffffffffffffffffffffffff16611df7611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490614425565b60405180910390fd5b6000603390505b6000811115611e7957611e6633612d8c565b8080611e71906147db565b915050611e54565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611eae61290b565b73ffffffffffffffffffffffffffffffffffffffff16611ecc611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990614425565b60405180910390fd5b601b60049054906101000a900460ff1615601b60046101000a81548160ff021916908315150217905550565b60105481565b611f5c61290b565b73ffffffffffffffffffffffffffffffffffffffff16611f7a611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614425565b60405180910390fd5b601b60059054906101000a900460ff1615601b60056101000a81548160ff021916908315150217905550565b61200461290b565b73ffffffffffffffffffffffffffffffffffffffff16612022611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206f90614425565b60405180910390fd5b6702c68af0bb1400008161208c919061466a565b600d8190555050565b601b60059054906101000a900460ff1681565b6060600180546120b790614805565b80601f01602080910402602001604051908101604052809291908181526020018280546120e390614805565b80156121305780601f1061210557610100808354040283529160200191612130565b820191906000526020600020905b81548152906001019060200180831161211357829003601f168201915b5050505050905090565b60185481565b601b60019054906101000a900460ff1661218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614565565b60405180910390fd5b600161219a33611999565b106121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190614205565b60405180910390fd5b60155460165410612220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612217906142e5565b60405180910390fd5b600b54341015612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225c906143c5565b60405180910390fd5b61226e33612d8c565b6016600081548092919061228190614868565b9190505550565b600b5481565b6122a061229961290b565b8383612fa1565b5050565b601b60049054906101000a900460ff166122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90614565565b60405180910390fd5b60016122fe33611999565b1061233e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233590614205565b60405180910390fd5b601954601a5410612384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237b906143a5565b60405180910390fd5b61238c611ad9565b3410156123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c5906143c5565b60405180910390fd5b6123d733612d8c565b601a60008154809291906123ea90614868565b9190505550565b6124026123fc61290b565b83612a52565b612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906144c5565b60405180910390fd5b61244d8484848461310e565b50505050565b61245b61290b565b73ffffffffffffffffffffffffffffffffffffffff16612479611e7c565b73ffffffffffffffffffffffffffffffffffffffff16146124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614425565b60405180910390fd5b601b60009054906101000a900460ff1615601b60006101000a81548160ff021916908315150217905550565b60606125068261292d565b612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c90614465565b60405180910390fd5b600061254f61316a565b9050600081511161256f576040518060200160405280600081525061259a565b80612579846131fc565b60405160200161258a92919061413d565b6040516020818303038152906040525b915050919050565b601a5481565b601b60019054906101000a900460ff1681565b601b60039054906101000a900460ff1681565b600f5481565b6125dc61290b565b73ffffffffffffffffffffffffffffffffffffffff166125fa611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614425565b60405180910390fd5b601b60029054906101000a900460ff1615601b60026101000a81548160ff021916908315150217905550565b601b60009054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61272b61290b565b73ffffffffffffffffffffffffffffffffffffffff16612749611e7c565b73ffffffffffffffffffffffffffffffffffffffff161461279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614425565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690614245565b60405180910390fd5b61281881612edb565b50565b61282361290b565b73ffffffffffffffffffffffffffffffffffffffff16612841611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e90614425565b60405180910390fd5b80600c8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190612929929190613777565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a0c836118e1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a5d8261292d565b612a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9390614305565b60405180910390fd5b6000612aa7836118e1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b1657508373ffffffffffffffffffffffffffffffffffffffff16612afe84610eb1565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b275750612b26818561268f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b50826118e1565b73ffffffffffffffffffffffffffffffffffffffff1614612ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9d90614445565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0d906142a5565b60405180910390fd5b612c2183838361335d565b612c2c600082612999565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c7c91906146f1565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd3919061466a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60106000815480929190612d9f90614868565b91905055506000612db06008613362565b9050612dbc6008613370565b612dc68282613386565b5050565b6000612dd5826118e1565b9050612de38160008461335d565b612dee600083612999565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e3e91906146f1565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613007906142c5565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161310191906141c8565b60405180910390a3505050565b613119848484612b30565b613125848484846133a4565b613164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315b90614225565b60405180910390fd5b50505050565b60606002805461317990614805565b80601f01602080910402602001604051908101604052809291908181526020018280546131a590614805565b80156131f25780601f106131c7576101008083540402835291602001916131f2565b820191906000526020600020905b8154815290600101906020018083116131d557829003601f168201915b5050505050905090565b60606000821415613244576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613358565b600082905060005b6000821461327657808061325f90614868565b915050600a8261326f91906146c0565b915061324c565b60008167ffffffffffffffff8111156132925761329161499e565b5b6040519080825280601f01601f1916602001820160405280156132c45781602001600182028036833780820191505090505b5090505b60008514613351576001826132dd91906146f1565b9150600a856132ec91906148b1565b60306132f8919061466a565b60f81b81838151811061330e5761330d61496f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561334a91906146c0565b94506132c8565b8093505050505b919050565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6133a082826040518060200160405280600081525061353b565b5050565b60006133c58473ffffffffffffffffffffffffffffffffffffffff16613596565b1561352e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026133ee61290b565b8786866040518563ffffffff1660e01b8152600401613410949392919061417c565b602060405180830381600087803b15801561342a57600080fd5b505af192505050801561345b57506040513d601f19601f820116820180604052508101906134589190613bf6565b60015b6134de573d806000811461348b576040519150601f19603f3d011682016040523d82523d6000602084013e613490565b606091505b506000815114156134d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cd90614225565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613533565b600190505b949350505050565b61354583836135a9565b61355260008484846133a4565b613591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358890614225565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613610906143e5565b60405180910390fd5b6136228161292d565b15613662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365990614265565b60405180910390fd5b61366e6000838361335d565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136be919061466a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461378390614805565b90600052602060002090601f0160209004810192826137a557600085556137ec565b82601f106137be57805160ff19168380011785556137ec565b828001600101855582156137ec579182015b828111156137eb5782518255916020019190600101906137d0565b5b5090506137f991906137fd565b5090565b5b808211156138165760008160009055506001016137fe565b5090565b600061382d613828846145c5565b6145a0565b905082815260208101848484011115613849576138486149dc565b5b613854848285614799565b509392505050565b600061386f61386a846145f6565b6145a0565b90508281526020810184848401111561388b5761388a6149dc565b5b613896848285614799565b509392505050565b6000813590506138ad81615066565b92915050565b60008083601f8401126138c9576138c86149d2565b5b8235905067ffffffffffffffff8111156138e6576138e56149cd565b5b602083019150836020820283011115613902576139016149d7565b5b9250929050565b6000813590506139188161507d565b92915050565b60008135905061392d81615094565b92915050565b60008151905061394281615094565b92915050565b600082601f83011261395d5761395c6149d2565b5b813561396d84826020860161381a565b91505092915050565b600082601f83011261398b5761398a6149d2565b5b813561399b84826020860161385c565b91505092915050565b6000813590506139b3816150ab565b92915050565b6000602082840312156139cf576139ce6149e6565b5b60006139dd8482850161389e565b91505092915050565b600080604083850312156139fd576139fc6149e6565b5b6000613a0b8582860161389e565b9250506020613a1c8582860161389e565b9150509250929050565b600080600060608486031215613a3f57613a3e6149e6565b5b6000613a4d8682870161389e565b9350506020613a5e8682870161389e565b9250506040613a6f868287016139a4565b9150509250925092565b60008060008060808587031215613a9357613a926149e6565b5b6000613aa18782880161389e565b9450506020613ab28782880161389e565b9350506040613ac3878288016139a4565b925050606085013567ffffffffffffffff811115613ae457613ae36149e1565b5b613af087828801613948565b91505092959194509250565b60008060408385031215613b1357613b126149e6565b5b6000613b218582860161389e565b9250506020613b3285828601613909565b9150509250929050565b60008060408385031215613b5357613b526149e6565b5b6000613b618582860161389e565b9250506020613b72858286016139a4565b9150509250929050565b60008060208385031215613b9357613b926149e6565b5b600083013567ffffffffffffffff811115613bb157613bb06149e1565b5b613bbd858286016138b3565b92509250509250929050565b600060208284031215613bdf57613bde6149e6565b5b6000613bed8482850161391e565b91505092915050565b600060208284031215613c0c57613c0b6149e6565b5b6000613c1a84828501613933565b91505092915050565b600060208284031215613c3957613c386149e6565b5b600082013567ffffffffffffffff811115613c5757613c566149e1565b5b613c6384828501613976565b91505092915050565b600060208284031215613c8257613c816149e6565b5b6000613c90848285016139a4565b91505092915050565b613ca281614725565b82525050565b613cb181614737565b82525050565b6000613cc282614627565b613ccc818561463d565b9350613cdc8185602086016147a8565b613ce5816149eb565b840191505092915050565b6000613cfb82614632565b613d05818561464e565b9350613d158185602086016147a8565b613d1e816149eb565b840191505092915050565b6000613d3482614632565b613d3e818561465f565b9350613d4e8185602086016147a8565b80840191505092915050565b6000613d6760148361464e565b9150613d72826149fc565b602082019050919050565b6000613d8a60328361464e565b9150613d9582614a25565b604082019050919050565b6000613dad60268361464e565b9150613db882614a74565b604082019050919050565b6000613dd0601c8361464e565b9150613ddb82614ac3565b602082019050919050565b6000613df360198361464e565b9150613dfe82614aec565b602082019050919050565b6000613e1660248361464e565b9150613e2182614b15565b604082019050919050565b6000613e3960198361464e565b9150613e4482614b64565b602082019050919050565b6000613e5c60208361464e565b9150613e6782614b8d565b602082019050919050565b6000613e7f602c8361464e565b9150613e8a82614bb6565b604082019050919050565b6000613ea260388361464e565b9150613ead82614c05565b604082019050919050565b6000613ec5602a8361464e565b9150613ed082614c54565b604082019050919050565b6000613ee860298361464e565b9150613ef382614ca3565b604082019050919050565b6000613f0b60188361464e565b9150613f1682614cf2565b602082019050919050565b6000613f2e601a8361464e565b9150613f3982614d1b565b602082019050919050565b6000613f5160178361464e565b9150613f5c82614d44565b602082019050919050565b6000613f7460208361464e565b9150613f7f82614d6d565b602082019050919050565b6000613f97602c8361464e565b9150613fa282614d96565b604082019050919050565b6000613fba60208361464e565b9150613fc582614de5565b602082019050919050565b6000613fdd60298361464e565b9150613fe882614e0e565b604082019050919050565b6000614000602f8361464e565b915061400b82614e5d565b604082019050919050565b6000614023601f8361464e565b915061402e82614eac565b602082019050919050565b600061404660218361464e565b915061405182614ed5565b604082019050919050565b600061406960318361464e565b915061407482614f24565b604082019050919050565b600061408c601f8361464e565b915061409782614f73565b602082019050919050565b60006140af60138361464e565b91506140ba82614f9c565b602082019050919050565b60006140d260308361464e565b91506140dd82614fc5565b604082019050919050565b60006140f5601e8361464e565b915061410082615014565b602082019050919050565b600061411860138361464e565b91506141238261503d565b602082019050919050565b6141378161478f565b82525050565b60006141498285613d29565b91506141558284613d29565b91508190509392505050565b60006020820190506141766000830184613c99565b92915050565b60006080820190506141916000830187613c99565b61419e6020830186613c99565b6141ab604083018561412e565b81810360608301526141bd8184613cb7565b905095945050505050565b60006020820190506141dd6000830184613ca8565b92915050565b600060208201905081810360008301526141fd8184613cf0565b905092915050565b6000602082019050818103600083015261421e81613d5a565b9050919050565b6000602082019050818103600083015261423e81613d7d565b9050919050565b6000602082019050818103600083015261425e81613da0565b9050919050565b6000602082019050818103600083015261427e81613dc3565b9050919050565b6000602082019050818103600083015261429e81613de6565b9050919050565b600060208201905081810360008301526142be81613e09565b9050919050565b600060208201905081810360008301526142de81613e2c565b9050919050565b600060208201905081810360008301526142fe81613e4f565b9050919050565b6000602082019050818103600083015261431e81613e72565b9050919050565b6000602082019050818103600083015261433e81613e95565b9050919050565b6000602082019050818103600083015261435e81613eb8565b9050919050565b6000602082019050818103600083015261437e81613edb565b9050919050565b6000602082019050818103600083015261439e81613efe565b9050919050565b600060208201905081810360008301526143be81613f21565b9050919050565b600060208201905081810360008301526143de81613f44565b9050919050565b600060208201905081810360008301526143fe81613f67565b9050919050565b6000602082019050818103600083015261441e81613f8a565b9050919050565b6000602082019050818103600083015261443e81613fad565b9050919050565b6000602082019050818103600083015261445e81613fd0565b9050919050565b6000602082019050818103600083015261447e81613ff3565b9050919050565b6000602082019050818103600083015261449e81614016565b9050919050565b600060208201905081810360008301526144be81614039565b9050919050565b600060208201905081810360008301526144de8161405c565b9050919050565b600060208201905081810360008301526144fe8161407f565b9050919050565b6000602082019050818103600083015261451e816140a2565b9050919050565b6000602082019050818103600083015261453e816140c5565b9050919050565b6000602082019050818103600083015261455e816140e8565b9050919050565b6000602082019050818103600083015261457e8161410b565b9050919050565b600060208201905061459a600083018461412e565b92915050565b60006145aa6145bb565b90506145b68282614837565b919050565b6000604051905090565b600067ffffffffffffffff8211156145e0576145df61499e565b5b6145e9826149eb565b9050602081019050919050565b600067ffffffffffffffff8211156146115761461061499e565b5b61461a826149eb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146758261478f565b91506146808361478f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146b5576146b46148e2565b5b828201905092915050565b60006146cb8261478f565b91506146d68361478f565b9250826146e6576146e5614911565b5b828204905092915050565b60006146fc8261478f565b91506147078361478f565b92508282101561471a576147196148e2565b5b828203905092915050565b60006147308261476f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147c65780820151818401526020810190506147ab565b838111156147d5576000848401525b50505050565b60006147e68261478f565b915060008214156147fa576147f96148e2565b5b600182039050919050565b6000600282049050600182168061481d57607f821691505b6020821081141561483157614830614940565b5b50919050565b614840826149eb565b810181811067ffffffffffffffff8211171561485f5761485e61499e565b5b80604052505050565b60006148738261478f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148a6576148a56148e2565b5b600182019050919050565b60006148bc8261478f565b91506148c78361478f565b9250826148d7576148d6614911565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f41504553583a20746f6f206d616e792061706573000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d79546f6b656e3a206e6f7420656e6f75676820657468657200000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41504553583a20746f6f206d616e79207365636f6e642077617665206d696e74600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f41504553583a206f7574206f66206d617820737570706c790000000000000000600082015250565b7f41504553583a20746f6f206d616e79206475746368206d696e74000000000000600082015250565b7f41504553583a206e6f7420656e6f756768206574686572000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f41504553583a20746f6f206d616e79207768697465206c697374206d696e7400600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f41504553583a20746f6f206d616e792066697273742077617665206d696e7400600082015250565b7f41504553583a2062616c616e6365207a65726f00000000000000000000000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f41504553583a20746f6f206d616e792077686974656c69737420617065730000600082015250565b7f41504553583a206973206e6f7420616c6c6f7700000000000000000000000000600082015250565b61506f81614725565b811461507a57600080fd5b50565b61508681614737565b811461509157600080fd5b50565b61509d81614743565b81146150a857600080fd5b50565b6150b48161478f565b81146150bf57600080fd5b5056fea26469706673582212202de2098153d031802054116bdc503ab1657a01149d694c398554f073b390cd5f64736f6c63430008070033697066733a2f2f516d574d755947633952566a3352417474345a32755450515768636d3476456b476f47483542664b7058424441312f

Deployed Bytecode

0x6080604052600436106103765760003560e01c806372199260116101d15780639b6860c811610102578063d093b629116100a0578063dff8c2c61161006f578063dff8c2c614610b40578063e985e9c514610b6b578063f2fde38b14610ba8578063f5bc1a1a14610bd157610376565b8063d093b62914610aa8578063d4cf93d414610ad3578063d5abeb0114610afe578063ddf5084d14610b2957610376565b8063b88d4fde116100dc578063b88d4fde14610a00578063bc824ee314610a29578063c87b56dd14610a40578063ceda92ca14610a7d57610376565b80639b6860c8146109a2578063a22cb465146109cd578063b7cb95ff146109f657610376565b80639106d7ba1161016f57806394bc978f1161014957806394bc978f1461091757806395d89b4114610942578063993aa4161461096d578063993c16bf1461099857610376565b80639106d7ba146108ac578063917bd7dd146108d75780639273dd90146108ee57610376565b806386f5960f116101ab57806386f5960f14610828578063895fc788146108535780638da5cb5b1461086a5780638e3f63c51461089557610376565b806372199260146107ca57806373e118ff146107f5578063775b9c13146107ff57610376565b8063372c12b1116102ab57806354728df5116102495780636352211e116102235780636352211e1461070e578063685756851461074b57806370a0823114610776578063715018a6146107b357610376565b806354728df5146106d1578063586fc5b5146106fa5780635dc89b341461070457610376565b806342842e0e1161028557806342842e0e1461062957806342966c68146106525780634339cbec1461067b5780635066fd9e146106a657610376565b8063372c12b1146105aa5780633787edc2146105e75780633ccfd60b1461061257610376565b8063106b8f5611610318578063205b167e116102f2578063205b167e1461052157806323b872dd1461054c5780632cd39ba914610575578063355b82fe1461057f57610376565b8063106b8f56146104b457806310958311146104df57806315906f93146104f657610376565b806306d0de1a1161035457806306d0de1a1461040c57806306fdde0314610423578063081812fc1461044e578063095ea7b31461048b57610376565b806301ffc9a71461037b5780630230b9c7146103b857806302fe5305146103e3575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d9190613bc9565b610bfa565b6040516103af91906141c8565b60405180910390f35b3480156103c457600080fd5b506103cd610cdc565b6040516103da91906141c8565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613c23565b610cef565b005b34801561041857600080fd5b50610421610d77565b005b34801561042f57600080fd5b50610438610e1f565b60405161044591906141e3565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190613c6c565b610eb1565b6040516104829190614161565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613b3c565b610f36565b005b3480156104c057600080fd5b506104c961104e565b6040516104d69190614585565b60405180910390f35b3480156104eb57600080fd5b506104f4611054565b005b34801561050257600080fd5b5061050b6110fc565b6040516105189190614585565b60405180910390f35b34801561052d57600080fd5b50610536611102565b6040516105439190614585565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613a26565b611108565b005b61057d611168565b005b34801561058b57600080fd5b506105946112b0565b6040516105a191906141c8565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc91906139b9565b6112c3565b6040516105de9190614585565b60405180910390f35b3480156105f357600080fd5b506105fc6112db565b6040516106099190614585565b60405180910390f35b34801561061e57600080fd5b506106276112e1565b005b34801561063557600080fd5b50610650600480360381019061064b9190613a26565b6113f0565b005b34801561065e57600080fd5b5061067960048036038101906106749190613c6c565b611410565b005b34801561068757600080fd5b5061069061146c565b60405161069d9190614585565b60405180910390f35b3480156106b257600080fd5b506106bb611503565b6040516106c89190614585565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f39190613c6c565b611509565b005b6107026115a2565b005b61070c6116d2565b005b34801561071a57600080fd5b5061073560048036038101906107309190613c6c565b6118e1565b6040516107429190614161565b60405180910390f35b34801561075757600080fd5b50610760611993565b60405161076d9190614585565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906139b9565b611999565b6040516107aa9190614585565b60405180910390f35b3480156107bf57600080fd5b506107c8611a51565b005b3480156107d657600080fd5b506107df611ad9565b6040516107ec9190614585565b60405180910390f35b6107fd611b70565b005b34801561080b57600080fd5b5061082660048036038101906108219190613b7c565b611cbd565b005b34801561083457600080fd5b5061083d611dcb565b60405161084a9190614585565b60405180910390f35b34801561085f57600080fd5b50610868611dd1565b005b34801561087657600080fd5b5061087f611e7c565b60405161088c9190614161565b60405180910390f35b3480156108a157600080fd5b506108aa611ea6565b005b3480156108b857600080fd5b506108c1611f4e565b6040516108ce9190614585565b60405180910390f35b3480156108e357600080fd5b506108ec611f54565b005b3480156108fa57600080fd5b5061091560048036038101906109109190613c6c565b611ffc565b005b34801561092357600080fd5b5061092c612095565b60405161093991906141c8565b60405180910390f35b34801561094e57600080fd5b506109576120a8565b60405161096491906141e3565b60405180910390f35b34801561097957600080fd5b5061098261213a565b60405161098f9190614585565b60405180910390f35b6109a0612140565b005b3480156109ae57600080fd5b506109b7612288565b6040516109c49190614585565b60405180910390f35b3480156109d957600080fd5b506109f460048036038101906109ef9190613afc565b61228e565b005b6109fe6122a4565b005b348015610a0c57600080fd5b50610a276004803603810190610a229190613a79565b6123f1565b005b348015610a3557600080fd5b50610a3e612453565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190613c6c565b6124fb565b604051610a7491906141e3565b60405180910390f35b348015610a8957600080fd5b50610a926125a2565b604051610a9f9190614585565b60405180910390f35b348015610ab457600080fd5b50610abd6125a8565b604051610aca91906141c8565b60405180910390f35b348015610adf57600080fd5b50610ae86125bb565b604051610af591906141c8565b60405180910390f35b348015610b0a57600080fd5b50610b136125ce565b604051610b209190614585565b60405180910390f35b348015610b3557600080fd5b50610b3e6125d4565b005b348015610b4c57600080fd5b50610b5561267c565b604051610b6291906141c8565b60405180910390f35b348015610b7757600080fd5b50610b926004803603810190610b8d91906139e6565b61268f565b604051610b9f91906141c8565b60405180910390f35b348015610bb457600080fd5b50610bcf6004803603810190610bca91906139b9565b612723565b005b348015610bdd57600080fd5b50610bf86004803603810190610bf39190613c6c565b61281b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cc557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610cd55750610cd4826128a1565b5b9050919050565b601b60049054906101000a900460ff1681565b610cf761290b565b73ffffffffffffffffffffffffffffffffffffffff16610d15611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290614425565b60405180910390fd5b610d7481612913565b50565b610d7f61290b565b73ffffffffffffffffffffffffffffffffffffffff16610d9d611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90614425565b60405180910390fd5b601b60019054906101000a900460ff1615601b60016101000a81548160ff021916908315150217905550565b606060008054610e2e90614805565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5a90614805565b8015610ea75780601f10610e7c57610100808354040283529160200191610ea7565b820191906000526020600020905b815481529060010190602001808311610e8a57829003601f168201915b5050505050905090565b6000610ebc8261292d565b610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef290614405565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f41826118e1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa9906144a5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fd161290b565b73ffffffffffffffffffffffffffffffffffffffff1614806110005750610fff81610ffa61290b565b61268f565b5b61103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690614325565b60405180910390fd5b6110498383612999565b505050565b600e5481565b61105c61290b565b73ffffffffffffffffffffffffffffffffffffffff1661107a611e7c565b73ffffffffffffffffffffffffffffffffffffffff16146110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790614425565b60405180910390fd5b601b60039054906101000a900460ff1615601b60036101000a81548160ff021916908315150217905550565b600d5481565b60125481565b61111961111361290b565b82612a52565b611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f906144c5565b60405180910390fd5b611163838383612b30565b505050565b601b60009054906101000a900460ff166111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90614565565b60405180910390fd5b60016111c233611999565b10611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990614205565b60405180910390fd5b60135460145410611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f906144e5565b60405180910390fd5b600b5434101561128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490614285565b60405180910390fd5b61129633612d8c565b601460008154809291906112a990614868565b9190505550565b601b60029054906101000a900460ff1681565b60096020528060005260406000206000915090505481565b60165481565b6112e961290b565b73ffffffffffffffffffffffffffffffffffffffff16611307611e7c565b73ffffffffffffffffffffffffffffffffffffffff161461135d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135490614425565b60405180910390fd5b600047116113a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139790614505565b60405180910390fd5b6113a8611e7c565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156113ed573d6000803e3d6000fd5b50565b61140b838383604051806020016040528060008152506123f1565b505050565b61142161141b61290b565b82612a52565b611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614525565b60405180910390fd5b61146981612dca565b50565b60008061012c601c544261148091906146f1565b61148a91906146c0565b90506000600d5490505b6000821180156114ab57506702c68af0bb14000081115b156114d85766b1a2bc2ec50000816114c391906146f1565b905081806114d0906147db565b925050611494565b6702c68af0bb1400008110156114fa576702c68af0bb14000092505050611500565b80925050505b90565b60145481565b61151161290b565b73ffffffffffffffffffffffffffffffffffffffff1661152f611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c90614425565b60405180910390fd5b6702c68af0bb14000081611599919061466a565b600e8190555050565b601b60059054906101000a900460ff166115f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e890614565565b60405180910390fd5b60016115fc33611999565b1061163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163390614205565b60405180910390fd5b600f5460105410611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167990614385565b60405180910390fd5b600c543410156116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be906143c5565b60405180910390fd5b6116d033612d8c565b565b601b60029054906101000a900460ff16611721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171890614565565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90614545565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016117f333611999565b10611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90614205565b60405180910390fd5b60115460125410611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090614485565b60405180910390fd5b600a543410156118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b5906143c5565b60405180910390fd5b6118c733612d8c565b601260008154809291906118da90614868565b9190505550565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190614365565b60405180910390fd5b80915050919050565b600a5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190614345565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a5961290b565b73ffffffffffffffffffffffffffffffffffffffff16611a77611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac490614425565b60405180910390fd5b611ad76000612edb565b565b60008061012c601d5442611aed91906146f1565b611af791906146c0565b90506000600e5490505b600082118015611b1857506702c68af0bb14000081115b15611b455766b1a2bc2ec5000081611b3091906146f1565b90508180611b3d906147db565b925050611b01565b6702c68af0bb140000811015611b67576702c68af0bb14000092505050611b6d565b80925050505b90565b601b60039054906101000a900460ff16611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb690614565565b60405180910390fd5b6001611bca33611999565b10611c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0190614205565b60405180910390fd5b60175460185410611c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c47906143a5565b60405180910390fd5b611c5861146c565b341015611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c91906143c5565b60405180910390fd5b611ca333612d8c565b60186000815480929190611cb690614868565b9190505550565b611cc561290b565b73ffffffffffffffffffffffffffffffffffffffff16611ce3611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090614425565b60405180910390fd5b60005b82829050811015611dc657600160096000858585818110611d6057611d5f61496f565b5b9050602002016020810190611d7591906139b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611dbe90614868565b915050611d3c565b505050565b600c5481565b611dd961290b565b73ffffffffffffffffffffffffffffffffffffffff16611df7611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490614425565b60405180910390fd5b6000603390505b6000811115611e7957611e6633612d8c565b8080611e71906147db565b915050611e54565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611eae61290b565b73ffffffffffffffffffffffffffffffffffffffff16611ecc611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990614425565b60405180910390fd5b601b60049054906101000a900460ff1615601b60046101000a81548160ff021916908315150217905550565b60105481565b611f5c61290b565b73ffffffffffffffffffffffffffffffffffffffff16611f7a611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614425565b60405180910390fd5b601b60059054906101000a900460ff1615601b60056101000a81548160ff021916908315150217905550565b61200461290b565b73ffffffffffffffffffffffffffffffffffffffff16612022611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206f90614425565b60405180910390fd5b6702c68af0bb1400008161208c919061466a565b600d8190555050565b601b60059054906101000a900460ff1681565b6060600180546120b790614805565b80601f01602080910402602001604051908101604052809291908181526020018280546120e390614805565b80156121305780601f1061210557610100808354040283529160200191612130565b820191906000526020600020905b81548152906001019060200180831161211357829003601f168201915b5050505050905090565b60185481565b601b60019054906101000a900460ff1661218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614565565b60405180910390fd5b600161219a33611999565b106121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190614205565b60405180910390fd5b60155460165410612220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612217906142e5565b60405180910390fd5b600b54341015612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225c906143c5565b60405180910390fd5b61226e33612d8c565b6016600081548092919061228190614868565b9190505550565b600b5481565b6122a061229961290b565b8383612fa1565b5050565b601b60049054906101000a900460ff166122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90614565565b60405180910390fd5b60016122fe33611999565b1061233e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233590614205565b60405180910390fd5b601954601a5410612384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237b906143a5565b60405180910390fd5b61238c611ad9565b3410156123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c5906143c5565b60405180910390fd5b6123d733612d8c565b601a60008154809291906123ea90614868565b9190505550565b6124026123fc61290b565b83612a52565b612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906144c5565b60405180910390fd5b61244d8484848461310e565b50505050565b61245b61290b565b73ffffffffffffffffffffffffffffffffffffffff16612479611e7c565b73ffffffffffffffffffffffffffffffffffffffff16146124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614425565b60405180910390fd5b601b60009054906101000a900460ff1615601b60006101000a81548160ff021916908315150217905550565b60606125068261292d565b612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c90614465565b60405180910390fd5b600061254f61316a565b9050600081511161256f576040518060200160405280600081525061259a565b80612579846131fc565b60405160200161258a92919061413d565b6040516020818303038152906040525b915050919050565b601a5481565b601b60019054906101000a900460ff1681565b601b60039054906101000a900460ff1681565b600f5481565b6125dc61290b565b73ffffffffffffffffffffffffffffffffffffffff166125fa611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614425565b60405180910390fd5b601b60029054906101000a900460ff1615601b60026101000a81548160ff021916908315150217905550565b601b60009054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61272b61290b565b73ffffffffffffffffffffffffffffffffffffffff16612749611e7c565b73ffffffffffffffffffffffffffffffffffffffff161461279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614425565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690614245565b60405180910390fd5b61281881612edb565b50565b61282361290b565b73ffffffffffffffffffffffffffffffffffffffff16612841611e7c565b73ffffffffffffffffffffffffffffffffffffffff1614612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e90614425565b60405180910390fd5b80600c8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190612929929190613777565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a0c836118e1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a5d8261292d565b612a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9390614305565b60405180910390fd5b6000612aa7836118e1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b1657508373ffffffffffffffffffffffffffffffffffffffff16612afe84610eb1565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b275750612b26818561268f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b50826118e1565b73ffffffffffffffffffffffffffffffffffffffff1614612ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9d90614445565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0d906142a5565b60405180910390fd5b612c2183838361335d565b612c2c600082612999565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c7c91906146f1565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd3919061466a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60106000815480929190612d9f90614868565b91905055506000612db06008613362565b9050612dbc6008613370565b612dc68282613386565b5050565b6000612dd5826118e1565b9050612de38160008461335d565b612dee600083612999565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e3e91906146f1565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613007906142c5565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161310191906141c8565b60405180910390a3505050565b613119848484612b30565b613125848484846133a4565b613164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315b90614225565b60405180910390fd5b50505050565b60606002805461317990614805565b80601f01602080910402602001604051908101604052809291908181526020018280546131a590614805565b80156131f25780601f106131c7576101008083540402835291602001916131f2565b820191906000526020600020905b8154815290600101906020018083116131d557829003601f168201915b5050505050905090565b60606000821415613244576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613358565b600082905060005b6000821461327657808061325f90614868565b915050600a8261326f91906146c0565b915061324c565b60008167ffffffffffffffff8111156132925761329161499e565b5b6040519080825280601f01601f1916602001820160405280156132c45781602001600182028036833780820191505090505b5090505b60008514613351576001826132dd91906146f1565b9150600a856132ec91906148b1565b60306132f8919061466a565b60f81b81838151811061330e5761330d61496f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561334a91906146c0565b94506132c8565b8093505050505b919050565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6133a082826040518060200160405280600081525061353b565b5050565b60006133c58473ffffffffffffffffffffffffffffffffffffffff16613596565b1561352e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026133ee61290b565b8786866040518563ffffffff1660e01b8152600401613410949392919061417c565b602060405180830381600087803b15801561342a57600080fd5b505af192505050801561345b57506040513d601f19601f820116820180604052508101906134589190613bf6565b60015b6134de573d806000811461348b576040519150601f19603f3d011682016040523d82523d6000602084013e613490565b606091505b506000815114156134d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cd90614225565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613533565b600190505b949350505050565b61354583836135a9565b61355260008484846133a4565b613591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358890614225565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613610906143e5565b60405180910390fd5b6136228161292d565b15613662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365990614265565b60405180910390fd5b61366e6000838361335d565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136be919061466a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461378390614805565b90600052602060002090601f0160209004810192826137a557600085556137ec565b82601f106137be57805160ff19168380011785556137ec565b828001600101855582156137ec579182015b828111156137eb5782518255916020019190600101906137d0565b5b5090506137f991906137fd565b5090565b5b808211156138165760008160009055506001016137fe565b5090565b600061382d613828846145c5565b6145a0565b905082815260208101848484011115613849576138486149dc565b5b613854848285614799565b509392505050565b600061386f61386a846145f6565b6145a0565b90508281526020810184848401111561388b5761388a6149dc565b5b613896848285614799565b509392505050565b6000813590506138ad81615066565b92915050565b60008083601f8401126138c9576138c86149d2565b5b8235905067ffffffffffffffff8111156138e6576138e56149cd565b5b602083019150836020820283011115613902576139016149d7565b5b9250929050565b6000813590506139188161507d565b92915050565b60008135905061392d81615094565b92915050565b60008151905061394281615094565b92915050565b600082601f83011261395d5761395c6149d2565b5b813561396d84826020860161381a565b91505092915050565b600082601f83011261398b5761398a6149d2565b5b813561399b84826020860161385c565b91505092915050565b6000813590506139b3816150ab565b92915050565b6000602082840312156139cf576139ce6149e6565b5b60006139dd8482850161389e565b91505092915050565b600080604083850312156139fd576139fc6149e6565b5b6000613a0b8582860161389e565b9250506020613a1c8582860161389e565b9150509250929050565b600080600060608486031215613a3f57613a3e6149e6565b5b6000613a4d8682870161389e565b9350506020613a5e8682870161389e565b9250506040613a6f868287016139a4565b9150509250925092565b60008060008060808587031215613a9357613a926149e6565b5b6000613aa18782880161389e565b9450506020613ab28782880161389e565b9350506040613ac3878288016139a4565b925050606085013567ffffffffffffffff811115613ae457613ae36149e1565b5b613af087828801613948565b91505092959194509250565b60008060408385031215613b1357613b126149e6565b5b6000613b218582860161389e565b9250506020613b3285828601613909565b9150509250929050565b60008060408385031215613b5357613b526149e6565b5b6000613b618582860161389e565b9250506020613b72858286016139a4565b9150509250929050565b60008060208385031215613b9357613b926149e6565b5b600083013567ffffffffffffffff811115613bb157613bb06149e1565b5b613bbd858286016138b3565b92509250509250929050565b600060208284031215613bdf57613bde6149e6565b5b6000613bed8482850161391e565b91505092915050565b600060208284031215613c0c57613c0b6149e6565b5b6000613c1a84828501613933565b91505092915050565b600060208284031215613c3957613c386149e6565b5b600082013567ffffffffffffffff811115613c5757613c566149e1565b5b613c6384828501613976565b91505092915050565b600060208284031215613c8257613c816149e6565b5b6000613c90848285016139a4565b91505092915050565b613ca281614725565b82525050565b613cb181614737565b82525050565b6000613cc282614627565b613ccc818561463d565b9350613cdc8185602086016147a8565b613ce5816149eb565b840191505092915050565b6000613cfb82614632565b613d05818561464e565b9350613d158185602086016147a8565b613d1e816149eb565b840191505092915050565b6000613d3482614632565b613d3e818561465f565b9350613d4e8185602086016147a8565b80840191505092915050565b6000613d6760148361464e565b9150613d72826149fc565b602082019050919050565b6000613d8a60328361464e565b9150613d9582614a25565b604082019050919050565b6000613dad60268361464e565b9150613db882614a74565b604082019050919050565b6000613dd0601c8361464e565b9150613ddb82614ac3565b602082019050919050565b6000613df360198361464e565b9150613dfe82614aec565b602082019050919050565b6000613e1660248361464e565b9150613e2182614b15565b604082019050919050565b6000613e3960198361464e565b9150613e4482614b64565b602082019050919050565b6000613e5c60208361464e565b9150613e6782614b8d565b602082019050919050565b6000613e7f602c8361464e565b9150613e8a82614bb6565b604082019050919050565b6000613ea260388361464e565b9150613ead82614c05565b604082019050919050565b6000613ec5602a8361464e565b9150613ed082614c54565b604082019050919050565b6000613ee860298361464e565b9150613ef382614ca3565b604082019050919050565b6000613f0b60188361464e565b9150613f1682614cf2565b602082019050919050565b6000613f2e601a8361464e565b9150613f3982614d1b565b602082019050919050565b6000613f5160178361464e565b9150613f5c82614d44565b602082019050919050565b6000613f7460208361464e565b9150613f7f82614d6d565b602082019050919050565b6000613f97602c8361464e565b9150613fa282614d96565b604082019050919050565b6000613fba60208361464e565b9150613fc582614de5565b602082019050919050565b6000613fdd60298361464e565b9150613fe882614e0e565b604082019050919050565b6000614000602f8361464e565b915061400b82614e5d565b604082019050919050565b6000614023601f8361464e565b915061402e82614eac565b602082019050919050565b600061404660218361464e565b915061405182614ed5565b604082019050919050565b600061406960318361464e565b915061407482614f24565b604082019050919050565b600061408c601f8361464e565b915061409782614f73565b602082019050919050565b60006140af60138361464e565b91506140ba82614f9c565b602082019050919050565b60006140d260308361464e565b91506140dd82614fc5565b604082019050919050565b60006140f5601e8361464e565b915061410082615014565b602082019050919050565b600061411860138361464e565b91506141238261503d565b602082019050919050565b6141378161478f565b82525050565b60006141498285613d29565b91506141558284613d29565b91508190509392505050565b60006020820190506141766000830184613c99565b92915050565b60006080820190506141916000830187613c99565b61419e6020830186613c99565b6141ab604083018561412e565b81810360608301526141bd8184613cb7565b905095945050505050565b60006020820190506141dd6000830184613ca8565b92915050565b600060208201905081810360008301526141fd8184613cf0565b905092915050565b6000602082019050818103600083015261421e81613d5a565b9050919050565b6000602082019050818103600083015261423e81613d7d565b9050919050565b6000602082019050818103600083015261425e81613da0565b9050919050565b6000602082019050818103600083015261427e81613dc3565b9050919050565b6000602082019050818103600083015261429e81613de6565b9050919050565b600060208201905081810360008301526142be81613e09565b9050919050565b600060208201905081810360008301526142de81613e2c565b9050919050565b600060208201905081810360008301526142fe81613e4f565b9050919050565b6000602082019050818103600083015261431e81613e72565b9050919050565b6000602082019050818103600083015261433e81613e95565b9050919050565b6000602082019050818103600083015261435e81613eb8565b9050919050565b6000602082019050818103600083015261437e81613edb565b9050919050565b6000602082019050818103600083015261439e81613efe565b9050919050565b600060208201905081810360008301526143be81613f21565b9050919050565b600060208201905081810360008301526143de81613f44565b9050919050565b600060208201905081810360008301526143fe81613f67565b9050919050565b6000602082019050818103600083015261441e81613f8a565b9050919050565b6000602082019050818103600083015261443e81613fad565b9050919050565b6000602082019050818103600083015261445e81613fd0565b9050919050565b6000602082019050818103600083015261447e81613ff3565b9050919050565b6000602082019050818103600083015261449e81614016565b9050919050565b600060208201905081810360008301526144be81614039565b9050919050565b600060208201905081810360008301526144de8161405c565b9050919050565b600060208201905081810360008301526144fe8161407f565b9050919050565b6000602082019050818103600083015261451e816140a2565b9050919050565b6000602082019050818103600083015261453e816140c5565b9050919050565b6000602082019050818103600083015261455e816140e8565b9050919050565b6000602082019050818103600083015261457e8161410b565b9050919050565b600060208201905061459a600083018461412e565b92915050565b60006145aa6145bb565b90506145b68282614837565b919050565b6000604051905090565b600067ffffffffffffffff8211156145e0576145df61499e565b5b6145e9826149eb565b9050602081019050919050565b600067ffffffffffffffff8211156146115761461061499e565b5b61461a826149eb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146758261478f565b91506146808361478f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146b5576146b46148e2565b5b828201905092915050565b60006146cb8261478f565b91506146d68361478f565b9250826146e6576146e5614911565b5b828204905092915050565b60006146fc8261478f565b91506147078361478f565b92508282101561471a576147196148e2565b5b828203905092915050565b60006147308261476f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147c65780820151818401526020810190506147ab565b838111156147d5576000848401525b50505050565b60006147e68261478f565b915060008214156147fa576147f96148e2565b5b600182039050919050565b6000600282049050600182168061481d57607f821691505b6020821081141561483157614830614940565b5b50919050565b614840826149eb565b810181811067ffffffffffffffff8211171561485f5761485e61499e565b5b80604052505050565b60006148738261478f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148a6576148a56148e2565b5b600182019050919050565b60006148bc8261478f565b91506148c78361478f565b9250826148d7576148d6614911565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f41504553583a20746f6f206d616e792061706573000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d79546f6b656e3a206e6f7420656e6f75676820657468657200000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41504553583a20746f6f206d616e79207365636f6e642077617665206d696e74600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f41504553583a206f7574206f66206d617820737570706c790000000000000000600082015250565b7f41504553583a20746f6f206d616e79206475746368206d696e74000000000000600082015250565b7f41504553583a206e6f7420656e6f756768206574686572000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f41504553583a20746f6f206d616e79207768697465206c697374206d696e7400600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f41504553583a20746f6f206d616e792066697273742077617665206d696e7400600082015250565b7f41504553583a2062616c616e6365207a65726f00000000000000000000000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f41504553583a20746f6f206d616e792077686974656c69737420617065730000600082015250565b7f41504553583a206973206e6f7420616c6c6f7700000000000000000000000000600082015250565b61506f81614725565b811461507a57600080fd5b50565b61508681614737565b811461509157600080fd5b50565b61509d81614743565b81146150a857600080fd5b50565b6150b48161478f565b81146150bf57600080fd5b5056fea26469706673582212202de2098153d031802054116bdc503ab1657a01149d694c398554f073b390cd5f64736f6c63430008070033

Deployed Bytecode Sourcemap

38752:7178:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25350:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39911:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45648:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40452:103;;;;;;;;;;;;;:::i;:::-;;26295:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27959:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27482:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39150:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40671:109;;;;;;;;;;;;;:::i;:::-;;39102:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39322:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28709:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42153:419;;;:::i;:::-;;39824:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38902:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39501:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45753:174;;;;;;;;;;;;;:::i;:::-;;29119:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38436:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43015:505;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39411:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45475:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44936:360;;;:::i;:::-;;41606:539;;;:::i;:::-;;25989:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38955:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25719:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6215:103;;;;;;;;;;;;;:::i;:::-;;43974:508;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43528:432;;;:::i;:::-;;41413:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39054:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41215:190;;;;;;;;;;;;;:::i;:::-;;5564:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40788:112;;;;;;;;;;;;;:::i;:::-;;39240:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40908:97;;;;;;;;;;;;;:::i;:::-;;45304:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39957:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26464:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39594:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42580:423;;;:::i;:::-;;39004:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28252:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44490:438;;;:::i;:::-;;29375:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40344:100;;;;;;;;;;;;;:::i;:::-;;26639:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39690:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39781:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39866:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39201:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40563:100;;;;;;;;;;;;;:::i;:::-;;39739:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28478:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6473:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40230:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25350:305;25452:4;25504:25;25489:40;;;:11;:40;;;;:105;;;;25561:33;25546:48;;;:11;:48;;;;25489:105;:158;;;;25611:36;25635:11;25611:23;:36::i;:::-;25489:158;25469:178;;25350:305;;;:::o;39911:38::-;;;;;;;;;;;;;:::o;45648:97::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45716:20:::1;45729:6;45716:12;:20::i;:::-;45648:97:::0;:::o;40452:103::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40532:15:::1;;;;;;;;;;;40531:16;40513:15;;:34;;;;;;;;;;;;;;;;;;40452:103::o:0;26295:100::-;26349:13;26382:5;26375:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26295:100;:::o;27959:221::-;28035:7;28063:16;28071:7;28063;:16::i;:::-;28055:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28148:15;:24;28164:7;28148:24;;;;;;;;;;;;;;;;;;;;;28141:31;;27959:221;;;:::o;27482:411::-;27563:13;27579:23;27594:7;27579:14;:23::i;:::-;27563:39;;27627:5;27621:11;;:2;:11;;;;27613:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27721:5;27705:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27730:37;27747:5;27754:12;:10;:12::i;:::-;27730:16;:37::i;:::-;27705:62;27683:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27864:21;27873:2;27877:7;27864:8;:21::i;:::-;27552:341;27482:411;;:::o;39150:41::-;;;;:::o;40671:109::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40755:17:::1;;;;;;;;;;;40754:18;40734:17;;:38;;;;;;;;;;;;;;;;;;40671:109::o:0;39102:40::-;;;;:::o;39322:35::-;;;;:::o;28709:339::-;28904:41;28923:12;:10;:12::i;:::-;28937:7;28904:18;:41::i;:::-;28896:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29012:28;29022:4;29028:2;29032:7;29012:9;:28::i;:::-;28709:339;;;:::o;42153:419::-;42215:14;;;;;;;;;;;42206:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;42300:1;42276:21;42286:10;42276:9;:21::i;:::-;:25;42267:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42368:14;;42349:16;;:33;42340:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;42454:15;;42441:9;:28;;42432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42511:22;42521:10;42511:8;:22::i;:::-;42545:16;;:18;;;;;;;;;:::i;:::-;;;;;;42153:419::o;39824:34::-;;;;;;;;;;;;;:::o;38902:44::-;;;;;;;;;;;;;;;;;:::o;39501:36::-;;;;:::o;45753:174::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45835:1:::1;45811:21;:25;45803:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45879:7;:5;:7::i;:::-;45871:25;;:48;45897:21;45871:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45753:174::o:0;29119:185::-;29257:39;29274:4;29280:2;29284:7;29257:39;;;;;;;;;;;;:16;:39::i;:::-;29119:185;;;:::o;38436:245::-;38554:41;38573:12;:10;:12::i;:::-;38587:7;38554:18;:41::i;:::-;38546:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;38659:14;38665:7;38659:5;:14::i;:::-;38436:245;:::o;43015:505::-;43068:7;43088:17;43154:3;43128:21;;43110:15;:39;;;;:::i;:::-;43108:49;;;;:::i;:::-;43088:69;;43168:25;43196:15;;43168:43;;43233:162;43253:1;43241:9;:13;:46;;;;;43278:9;43258:17;:29;43241:46;43233:162;;;43345:10;43325:17;:30;;;;:::i;:::-;43305:50;;43371:11;;;;;:::i;:::-;;;;43233:162;;;43432:9;43412:17;:29;43407:66;;;43464:9;43457:16;;;;;;43407:66;43494:17;43487:24;;;;43015:505;;:::o;39411:35::-;;;;:::o;45475:165::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45623:9:::1;45607:13;:25;;;;:::i;:::-;45588:16;:44;;;;45475:165:::0;:::o;44936:360::-;44993:13;;;;;;;;;;;44984:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;45077:1;45053:21;45063:10;45053:9;:21::i;:::-;:25;45044:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45138:9;;45126;;:21;45117:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45212:13;;45199:9;:26;;45190:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45265:22;45275:10;45265:8;:22::i;:::-;44936:360::o;41606:539::-;41670:14;;;;;;;;;;;41661:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41755:1;41731:9;:21;41741:10;41731:21;;;;;;;;;;;;;;;;:25;41722:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;41829:1;41805:9;:21;41815:10;41805:21;;;;;;;;;;;;;;;:25;;;;41876:1;41852:21;41862:10;41852:9;:21::i;:::-;:25;41843:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;41944:14;;41925:16;;:33;41916:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;42030:14;;42017:9;:27;;42008:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42084:22;42094:10;42084:8;:22::i;:::-;42118:16;;:18;;;;;;;;;:::i;:::-;;;;;;41606:539::o;25989:239::-;26061:7;26081:13;26097:7;:16;26105:7;26097:16;;;;;;;;;;;;;;;;;;;;;26081:32;;26149:1;26132:19;;:5;:19;;;;26124:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26215:5;26208:12;;;25989:239;;;:::o;38955:41::-;;;;:::o;25719:208::-;25791:7;25836:1;25819:19;;:5;:19;;;;25811:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25903:9;:16;25913:5;25903:16;;;;;;;;;;;;;;;;25896:23;;25719:208;;;:::o;6215:103::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6280:30:::1;6307:1;6280:18;:30::i;:::-;6215:103::o:0;43974:508::-;44028:7;44048:17;44115:3;44088:22;;44070:15;:40;;;;:::i;:::-;44068:50;;;;:::i;:::-;44048:70;;44129:25;44157:16;;44129:44;;44195:162;44215:1;44203:9;:13;:46;;;;;44240:9;44220:17;:29;44203:46;44195:162;;;44307:10;44287:17;:30;;;;:::i;:::-;44267:50;;44333:11;;;;;:::i;:::-;;;;44195:162;;;44394:9;44374:17;:29;44369:66;;;44426:9;44419:16;;;;;;44369:66;44456:17;44449:24;;;;43974:508;;:::o;43528:432::-;43591:17;;;;;;;;;;;43582:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;43679:1;43655:21;43665:10;43655:9;:21::i;:::-;:25;43646:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43750:17;;43728:19;;:39;43719:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;43834:22;:20;:22::i;:::-;43821:9;:35;;43812:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43896:22;43906:10;43896:8;:22::i;:::-;43930:19;;:21;;;;;;;;;:::i;:::-;;;;;;43528:432::o;41413:185::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41500:6:::1;41496:95;41516:10;;:17;;41512:1;:21;41496:95;;;41578:1;41551:9;:24;41561:10;;41572:1;41561:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;41551:24;;;;;;;;;;;;;;;:28;;;;41535:3;;;;;:::i;:::-;;;;41496:95;;;;41413:185:::0;;:::o;39054:40::-;;;;:::o;41215:190::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41266:16:::1;41285:2;41266:21;;41300:98;41318:1;41307:8;:12;41300:98;;;41337:22;41347:10;41337:8;:22::i;:::-;41375:10;;;;;:::i;:::-;;;;41300:98;;;41255:150;41215:190::o:0;5564:87::-;5610:7;5637:6;;;;;;;;;;;5630:13;;5564:87;:::o;40788:112::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40874:18:::1;;;;;;;;;;;40873:19;40852:18;;:40;;;;;;;;;;;;;;;;;;40788:112::o:0;39240:28::-;;;;:::o;40908:97::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40984:13:::1;;;;;;;;;;;40983:14;40967:13;;:30;;;;;;;;;;;;;;;;;;40908:97::o:0;45304:163::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45450:9:::1;45434:13;:25;;;;:::i;:::-;45416:15;:43;;;;45304:163:::0;:::o;39957:33::-;;;;;;;;;;;;;:::o;26464:104::-;26520:13;26553:7;26546:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26464:104;:::o;39594:38::-;;;;:::o;42580:423::-;42643:15;;;;;;;;;;;42634:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;42729:1;42705:21;42715:10;42705:9;:21::i;:::-;:25;42696:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42798:15;;42778:17;;:35;42769:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;42886:15;;42873:9;:28;;42864:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42941:22;42951:10;42941:8;:22::i;:::-;42975:17;;:19;;;;;;;;;:::i;:::-;;;;;;42580:423::o;39004:42::-;;;;:::o;28252:155::-;28347:52;28366:12;:10;:12::i;:::-;28380:8;28390;28347:18;:52::i;:::-;28252:155;;:::o;44490:438::-;44554:18;;;;;;;;;;;44545:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;44643:1;44619:21;44629:10;44619:9;:21::i;:::-;:25;44610:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;44715:18;;44692:20;;:41;44683:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44800:23;:21;:23::i;:::-;44787:9;:36;;44778:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;44863:22;44873:10;44863:8;:22::i;:::-;44897:20;;:22;;;;;;;;;:::i;:::-;;;;;;44490:438::o;29375:328::-;29550:41;29569:12;:10;:12::i;:::-;29583:7;29550:18;:41::i;:::-;29542:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29656:39;29670:4;29676:2;29680:7;29689:5;29656:13;:39::i;:::-;29375:328;;;;:::o;40344:100::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40422:14:::1;;;;;;;;;;;40421:15;40404:14;;:32;;;;;;;;;;;;;;;;;;40344:100::o:0;26639:334::-;26712:13;26746:16;26754:7;26746;:16::i;:::-;26738:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26827:21;26851:10;:8;:10::i;:::-;26827:34;;26903:1;26885:7;26879:21;:25;:86;;;;;;;;;;;;;;;;;26931:7;26940:18;:7;:16;:18::i;:::-;26914:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26879:86;26872:93;;;26639:334;;;:::o;39690:39::-;;;;:::o;39781:35::-;;;;;;;;;;;;;:::o;39866:37::-;;;;;;;;;;;;;:::o;39201:31::-;;;;:::o;40563:100::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40641:14:::1;;;;;;;;;;;40640:15;40623:14;;:32;;;;;;;;;;;;;;;;;;40563:100::o:0;39739:34::-;;;;;;;;;;;;;:::o;28478:164::-;28575:4;28599:18;:25;28618:5;28599:25;;;;;;;;;;;;;;;:35;28625:8;28599:35;;;;;;;;;;;;;;;;;;;;;;;;;28592:42;;28478:164;;;;:::o;6473:201::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6582:1:::1;6562:22;;:8;:22;;;;6554:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6638:28;6657:8;6638:18;:28::i;:::-;6473:201:::0;:::o;40230:106::-;5795:12;:10;:12::i;:::-;5784:23;;:7;:5;:7::i;:::-;:23;;;5776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40320:8:::1;40304:13;:24;;;;40230:106:::0;:::o;18016:157::-;18101:4;18140:25;18125:40;;;:11;:40;;;;18118:47;;18016:157;;;:::o;4283:98::-;4336:7;4363:10;4356:17;;4283:98;:::o;27325:95::-;27401:11;27394:4;:18;;;;;;;;;;;;:::i;:::-;;27325:95;:::o;31213:127::-;31278:4;31330:1;31302:30;;:7;:16;31310:7;31302:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31295:37;;31213:127;;;:::o;35195:174::-;35297:2;35270:15;:24;35286:7;35270:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35353:7;35349:2;35315:46;;35324:23;35339:7;35324:14;:23::i;:::-;35315:46;;;;;;;;;;;;35195:174;;:::o;31507:348::-;31600:4;31625:16;31633:7;31625;:16::i;:::-;31617:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31701:13;31717:23;31732:7;31717:14;:23::i;:::-;31701:39;;31770:5;31759:16;;:7;:16;;;:51;;;;31803:7;31779:31;;:20;31791:7;31779:11;:20::i;:::-;:31;;;31759:51;:87;;;;31814:32;31831:5;31838:7;31814:16;:32::i;:::-;31759:87;31751:96;;;31507:348;;;;:::o;34499:578::-;34658:4;34631:31;;:23;34646:7;34631:14;:23::i;:::-;:31;;;34623:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34741:1;34727:16;;:2;:16;;;;34719:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34797:39;34818:4;34824:2;34828:7;34797:20;:39::i;:::-;34901:29;34918:1;34922:7;34901:8;:29::i;:::-;34962:1;34943:9;:15;34953:4;34943:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34991:1;34974:9;:13;34984:2;34974:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35022:2;35003:7;:16;35011:7;35003:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35061:7;35057:2;35042:27;;35051:4;35042:27;;;;;;;;;;;;34499:578;;;:::o;41013:194::-;41063:9;;:11;;;;;;;;;:::i;:::-;;;;;;41085:15;41103:25;:15;:23;:25::i;:::-;41085:43;;41139:27;:15;:25;:27::i;:::-;41177:22;41187:2;41191:7;41177:9;:22::i;:::-;41052:155;41013:194;:::o;33802:360::-;33862:13;33878:23;33893:7;33878:14;:23::i;:::-;33862:39;;33914:48;33935:5;33950:1;33954:7;33914:20;:48::i;:::-;34003:29;34020:1;34024:7;34003:8;:29::i;:::-;34065:1;34045:9;:16;34055:5;34045:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;34084:7;:16;34092:7;34084:16;;;;;;;;;;;;34077:23;;;;;;;;;;;34146:7;34142:1;34118:36;;34127:5;34118:36;;;;;;;;;;;;33851:311;33802:360;:::o;6834:191::-;6908:16;6927:6;;;;;;;;;;;6908:25;;6953:8;6944:6;;:17;;;;;;;;;;;;;;;;;;7008:8;6977:40;;6998:8;6977:40;;;;;;;;;;;;6897:128;6834:191;:::o;35511:315::-;35666:8;35657:17;;:5;:17;;;;35649:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35753:8;35715:18;:25;35734:5;35715:25;;;;;;;;;;;;;;;:35;35741:8;35715:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35799:8;35777:41;;35792:5;35777:41;;;35809:8;35777:41;;;;;;:::i;:::-;;;;;;;;35511:315;;;:::o;30585:::-;30742:28;30752:4;30758:2;30762:7;30742:9;:28::i;:::-;30789:48;30812:4;30818:2;30822:7;30831:5;30789:22;:48::i;:::-;30781:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30585:315;;;;:::o;27221:96::-;27272:13;27305:4;27298:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27221:96;:::o;1840:723::-;1896:13;2126:1;2117:5;:10;2113:53;;;2144:10;;;;;;;;;;;;;;;;;;;;;2113:53;2176:12;2191:5;2176:20;;2207:14;2232:78;2247:1;2239:4;:9;2232:78;;2265:8;;;;;:::i;:::-;;;;2296:2;2288:10;;;;;:::i;:::-;;;2232:78;;;2320:19;2352:6;2342:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2320:39;;2370:154;2386:1;2377:5;:10;2370:154;;2414:1;2404:11;;;;;:::i;:::-;;;2481:2;2473:5;:10;;;;:::i;:::-;2460:2;:24;;;;:::i;:::-;2447:39;;2430:6;2437;2430:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2510:2;2501:11;;;;;:::i;:::-;;;2370:154;;;2548:6;2534:21;;;;;1840:723;;;;:::o;37762:126::-;;;;:::o;877:114::-;942:7;969;:14;;;962:21;;877:114;;;:::o;999:127::-;1106:1;1088:7;:14;;;:19;;;;;;;;;;;999:127;:::o;32197:110::-;32273:26;32283:2;32287:7;32273:26;;;;;;;;;;;;:9;:26::i;:::-;32197:110;;:::o;36391:799::-;36546:4;36567:15;:2;:13;;;:15::i;:::-;36563:620;;;36619:2;36603:36;;;36640:12;:10;:12::i;:::-;36654:4;36660:7;36669:5;36603:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36599:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36862:1;36845:6;:13;:18;36841:272;;;36888:60;;;;;;;;;;:::i;:::-;;;;;;;;36841:272;37063:6;37057:13;37048:6;37044:2;37040:15;37033:38;36599:529;36736:41;;;36726:51;;;:6;:51;;;;36719:58;;;;;36563:620;37167:4;37160:11;;36391:799;;;;;;;:::o;32534:321::-;32664:18;32670:2;32674:7;32664:5;:18::i;:::-;32715:54;32746:1;32750:2;32754:7;32763:5;32715:22;:54::i;:::-;32693:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32534:321;;;:::o;7857:387::-;7917:4;8125:12;8192:7;8180:20;8172:28;;8235:1;8228:4;:8;8221:15;;;7857:387;;;:::o;33191:382::-;33285:1;33271:16;;:2;:16;;;;33263:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33344:16;33352:7;33344;:16::i;:::-;33343:17;33335:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33406:45;33435:1;33439:2;33443:7;33406:20;:45::i;:::-;33481:1;33464:9;:13;33474:2;33464:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33512:2;33493:7;:16;33501:7;33493:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33557:7;33553:2;33532:33;;33549:1;33532:33;;;;;;;;;;;;33191:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:109::-;8519:21;8534:5;8519:21;:::i;:::-;8514:3;8507:34;8438:109;;:::o;8553:360::-;8639:3;8667:38;8699:5;8667:38;:::i;:::-;8721:70;8784:6;8779:3;8721:70;:::i;:::-;8714:77;;8800:52;8845:6;8840:3;8833:4;8826:5;8822:16;8800:52;:::i;:::-;8877:29;8899:6;8877:29;:::i;:::-;8872:3;8868:39;8861:46;;8643:270;8553:360;;;;:::o;8919:364::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:71;9154:6;9149:3;9090:71;:::i;:::-;9083:78;;9170:52;9215:6;9210:3;9203:4;9196:5;9192:16;9170:52;:::i;:::-;9247:29;9269:6;9247:29;:::i;:::-;9242:3;9238:39;9231:46;;9011:272;8919:364;;;;:::o;9289:377::-;9395:3;9423:39;9456:5;9423:39;:::i;:::-;9478:89;9560:6;9555:3;9478:89;:::i;:::-;9471:96;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:6;9648:3;9644:16;9637:23;;9399:267;9289:377;;;;:::o;9672:366::-;9814:3;9835:67;9899:2;9894:3;9835:67;:::i;:::-;9828:74;;9911:93;10000:3;9911:93;:::i;:::-;10029:2;10024:3;10020:12;10013:19;;9672:366;;;:::o;10044:::-;10186:3;10207:67;10271:2;10266:3;10207:67;:::i;:::-;10200:74;;10283:93;10372:3;10283:93;:::i;:::-;10401:2;10396:3;10392:12;10385:19;;10044:366;;;:::o;10416:::-;10558:3;10579:67;10643:2;10638:3;10579:67;:::i;:::-;10572:74;;10655:93;10744:3;10655:93;:::i;:::-;10773:2;10768:3;10764:12;10757:19;;10416:366;;;:::o;10788:::-;10930:3;10951:67;11015:2;11010:3;10951:67;:::i;:::-;10944:74;;11027:93;11116:3;11027:93;:::i;:::-;11145:2;11140:3;11136:12;11129:19;;10788:366;;;:::o;11160:::-;11302:3;11323:67;11387:2;11382:3;11323:67;:::i;:::-;11316:74;;11399:93;11488:3;11399:93;:::i;:::-;11517:2;11512:3;11508:12;11501:19;;11160:366;;;:::o;11532:::-;11674:3;11695:67;11759:2;11754:3;11695:67;:::i;:::-;11688:74;;11771:93;11860:3;11771:93;:::i;:::-;11889:2;11884:3;11880:12;11873:19;;11532:366;;;:::o;11904:::-;12046:3;12067:67;12131:2;12126:3;12067:67;:::i;:::-;12060:74;;12143:93;12232:3;12143:93;:::i;:::-;12261:2;12256:3;12252:12;12245:19;;11904:366;;;:::o;12276:::-;12418:3;12439:67;12503:2;12498:3;12439:67;:::i;:::-;12432:74;;12515:93;12604:3;12515:93;:::i;:::-;12633:2;12628:3;12624:12;12617:19;;12276:366;;;:::o;12648:::-;12790:3;12811:67;12875:2;12870:3;12811:67;:::i;:::-;12804:74;;12887:93;12976:3;12887:93;:::i;:::-;13005:2;13000:3;12996:12;12989:19;;12648:366;;;:::o;13020:::-;13162:3;13183:67;13247:2;13242:3;13183:67;:::i;:::-;13176:74;;13259:93;13348:3;13259:93;:::i;:::-;13377:2;13372:3;13368:12;13361:19;;13020:366;;;:::o;13392:::-;13534:3;13555:67;13619:2;13614:3;13555:67;:::i;:::-;13548:74;;13631:93;13720:3;13631:93;:::i;:::-;13749:2;13744:3;13740:12;13733:19;;13392:366;;;:::o;13764:::-;13906:3;13927:67;13991:2;13986:3;13927:67;:::i;:::-;13920:74;;14003:93;14092:3;14003:93;:::i;:::-;14121:2;14116:3;14112:12;14105:19;;13764:366;;;:::o;14136:::-;14278:3;14299:67;14363:2;14358:3;14299:67;:::i;:::-;14292:74;;14375:93;14464:3;14375:93;:::i;:::-;14493:2;14488:3;14484:12;14477:19;;14136:366;;;:::o;14508:::-;14650:3;14671:67;14735:2;14730:3;14671:67;:::i;:::-;14664:74;;14747:93;14836:3;14747:93;:::i;:::-;14865:2;14860:3;14856:12;14849:19;;14508:366;;;:::o;14880:::-;15022:3;15043:67;15107:2;15102:3;15043:67;:::i;:::-;15036:74;;15119:93;15208:3;15119:93;:::i;:::-;15237:2;15232:3;15228:12;15221:19;;14880:366;;;:::o;15252:::-;15394:3;15415:67;15479:2;15474:3;15415:67;:::i;:::-;15408:74;;15491:93;15580:3;15491:93;:::i;:::-;15609:2;15604:3;15600:12;15593:19;;15252:366;;;:::o;15624:::-;15766:3;15787:67;15851:2;15846:3;15787:67;:::i;:::-;15780:74;;15863:93;15952:3;15863:93;:::i;:::-;15981:2;15976:3;15972:12;15965:19;;15624:366;;;:::o;15996:::-;16138:3;16159:67;16223:2;16218:3;16159:67;:::i;:::-;16152:74;;16235:93;16324:3;16235:93;:::i;:::-;16353:2;16348:3;16344:12;16337:19;;15996:366;;;:::o;16368:::-;16510:3;16531:67;16595:2;16590:3;16531:67;:::i;:::-;16524:74;;16607:93;16696:3;16607:93;:::i;:::-;16725:2;16720:3;16716:12;16709:19;;16368:366;;;:::o;16740:::-;16882:3;16903:67;16967:2;16962:3;16903:67;:::i;:::-;16896:74;;16979:93;17068:3;16979:93;:::i;:::-;17097:2;17092:3;17088:12;17081:19;;16740:366;;;:::o;17112:::-;17254:3;17275:67;17339:2;17334:3;17275:67;:::i;:::-;17268:74;;17351:93;17440:3;17351:93;:::i;:::-;17469:2;17464:3;17460:12;17453:19;;17112:366;;;:::o;17484:::-;17626:3;17647:67;17711:2;17706:3;17647:67;:::i;:::-;17640:74;;17723:93;17812:3;17723:93;:::i;:::-;17841:2;17836:3;17832:12;17825:19;;17484:366;;;:::o;17856:::-;17998:3;18019:67;18083:2;18078:3;18019:67;:::i;:::-;18012:74;;18095:93;18184:3;18095:93;:::i;:::-;18213:2;18208:3;18204:12;18197:19;;17856:366;;;:::o;18228:::-;18370:3;18391:67;18455:2;18450:3;18391:67;:::i;:::-;18384:74;;18467:93;18556:3;18467:93;:::i;:::-;18585:2;18580:3;18576:12;18569:19;;18228:366;;;:::o;18600:::-;18742:3;18763:67;18827:2;18822:3;18763:67;:::i;:::-;18756:74;;18839:93;18928:3;18839:93;:::i;:::-;18957:2;18952:3;18948:12;18941:19;;18600:366;;;:::o;18972:::-;19114:3;19135:67;19199:2;19194:3;19135:67;:::i;:::-;19128:74;;19211:93;19300:3;19211:93;:::i;:::-;19329:2;19324:3;19320:12;19313:19;;18972:366;;;:::o;19344:::-;19486:3;19507:67;19571:2;19566:3;19507:67;:::i;:::-;19500:74;;19583:93;19672:3;19583:93;:::i;:::-;19701:2;19696:3;19692:12;19685:19;;19344:366;;;:::o;19716:::-;19858:3;19879:67;19943:2;19938:3;19879:67;:::i;:::-;19872:74;;19955:93;20044:3;19955:93;:::i;:::-;20073:2;20068:3;20064:12;20057:19;;19716:366;;;:::o;20088:118::-;20175:24;20193:5;20175:24;:::i;:::-;20170:3;20163:37;20088:118;;:::o;20212:435::-;20392:3;20414:95;20505:3;20496:6;20414:95;:::i;:::-;20407:102;;20526:95;20617:3;20608:6;20526:95;:::i;:::-;20519:102;;20638:3;20631:10;;20212:435;;;;;:::o;20653:222::-;20746:4;20784:2;20773:9;20769:18;20761:26;;20797:71;20865:1;20854:9;20850:17;20841:6;20797:71;:::i;:::-;20653:222;;;;:::o;20881:640::-;21076:4;21114:3;21103:9;21099:19;21091:27;;21128:71;21196:1;21185:9;21181:17;21172:6;21128:71;:::i;:::-;21209:72;21277:2;21266:9;21262:18;21253:6;21209:72;:::i;:::-;21291;21359:2;21348:9;21344:18;21335:6;21291:72;:::i;:::-;21410:9;21404:4;21400:20;21395:2;21384:9;21380:18;21373:48;21438:76;21509:4;21500:6;21438:76;:::i;:::-;21430:84;;20881:640;;;;;;;:::o;21527:210::-;21614:4;21652:2;21641:9;21637:18;21629:26;;21665:65;21727:1;21716:9;21712:17;21703:6;21665:65;:::i;:::-;21527:210;;;;:::o;21743:313::-;21856:4;21894:2;21883:9;21879:18;21871:26;;21943:9;21937:4;21933:20;21929:1;21918:9;21914:17;21907:47;21971:78;22044:4;22035:6;21971:78;:::i;:::-;21963:86;;21743:313;;;;:::o;22062:419::-;22228:4;22266:2;22255:9;22251:18;22243:26;;22315:9;22309:4;22305:20;22301:1;22290:9;22286:17;22279:47;22343:131;22469:4;22343:131;:::i;:::-;22335:139;;22062:419;;;:::o;22487:::-;22653:4;22691:2;22680:9;22676:18;22668:26;;22740:9;22734:4;22730:20;22726:1;22715:9;22711:17;22704:47;22768:131;22894:4;22768:131;:::i;:::-;22760:139;;22487:419;;;:::o;22912:::-;23078:4;23116:2;23105:9;23101:18;23093:26;;23165:9;23159:4;23155:20;23151:1;23140:9;23136:17;23129:47;23193:131;23319:4;23193:131;:::i;:::-;23185:139;;22912:419;;;:::o;23337:::-;23503:4;23541:2;23530:9;23526:18;23518:26;;23590:9;23584:4;23580:20;23576:1;23565:9;23561:17;23554:47;23618:131;23744:4;23618:131;:::i;:::-;23610:139;;23337:419;;;:::o;23762:::-;23928:4;23966:2;23955:9;23951:18;23943:26;;24015:9;24009:4;24005:20;24001:1;23990:9;23986:17;23979:47;24043:131;24169:4;24043:131;:::i;:::-;24035:139;;23762:419;;;:::o;24187:::-;24353:4;24391:2;24380:9;24376:18;24368:26;;24440:9;24434:4;24430:20;24426:1;24415:9;24411:17;24404:47;24468:131;24594:4;24468:131;:::i;:::-;24460:139;;24187:419;;;:::o;24612:::-;24778:4;24816:2;24805:9;24801:18;24793:26;;24865:9;24859:4;24855:20;24851:1;24840:9;24836:17;24829:47;24893:131;25019:4;24893:131;:::i;:::-;24885:139;;24612:419;;;:::o;25037:::-;25203:4;25241:2;25230:9;25226:18;25218:26;;25290:9;25284:4;25280:20;25276:1;25265:9;25261:17;25254:47;25318:131;25444:4;25318:131;:::i;:::-;25310:139;;25037:419;;;:::o;25462:::-;25628:4;25666:2;25655:9;25651:18;25643:26;;25715:9;25709:4;25705:20;25701:1;25690:9;25686:17;25679:47;25743:131;25869:4;25743:131;:::i;:::-;25735:139;;25462:419;;;:::o;25887:::-;26053:4;26091:2;26080:9;26076:18;26068:26;;26140:9;26134:4;26130:20;26126:1;26115:9;26111:17;26104:47;26168:131;26294:4;26168:131;:::i;:::-;26160:139;;25887:419;;;:::o;26312:::-;26478:4;26516:2;26505:9;26501:18;26493:26;;26565:9;26559:4;26555:20;26551:1;26540:9;26536:17;26529:47;26593:131;26719:4;26593:131;:::i;:::-;26585:139;;26312:419;;;:::o;26737:::-;26903:4;26941:2;26930:9;26926:18;26918:26;;26990:9;26984:4;26980:20;26976:1;26965:9;26961:17;26954:47;27018:131;27144:4;27018:131;:::i;:::-;27010:139;;26737:419;;;:::o;27162:::-;27328:4;27366:2;27355:9;27351:18;27343:26;;27415:9;27409:4;27405:20;27401:1;27390:9;27386:17;27379:47;27443:131;27569:4;27443:131;:::i;:::-;27435:139;;27162:419;;;:::o;27587:::-;27753:4;27791:2;27780:9;27776:18;27768:26;;27840:9;27834:4;27830:20;27826:1;27815:9;27811:17;27804:47;27868:131;27994:4;27868:131;:::i;:::-;27860:139;;27587:419;;;:::o;28012:::-;28178:4;28216:2;28205:9;28201:18;28193:26;;28265:9;28259:4;28255:20;28251:1;28240:9;28236:17;28229:47;28293:131;28419:4;28293:131;:::i;:::-;28285:139;;28012:419;;;:::o;28437:::-;28603:4;28641:2;28630:9;28626:18;28618:26;;28690:9;28684:4;28680:20;28676:1;28665:9;28661:17;28654:47;28718:131;28844:4;28718:131;:::i;:::-;28710:139;;28437:419;;;:::o;28862:::-;29028:4;29066:2;29055:9;29051:18;29043:26;;29115:9;29109:4;29105:20;29101:1;29090:9;29086:17;29079:47;29143:131;29269:4;29143:131;:::i;:::-;29135:139;;28862:419;;;:::o;29287:::-;29453:4;29491:2;29480:9;29476:18;29468:26;;29540:9;29534:4;29530:20;29526:1;29515:9;29511:17;29504:47;29568:131;29694:4;29568:131;:::i;:::-;29560:139;;29287:419;;;:::o;29712:::-;29878:4;29916:2;29905:9;29901:18;29893:26;;29965:9;29959:4;29955:20;29951:1;29940:9;29936:17;29929:47;29993:131;30119:4;29993:131;:::i;:::-;29985:139;;29712:419;;;:::o;30137:::-;30303:4;30341:2;30330:9;30326:18;30318:26;;30390:9;30384:4;30380:20;30376:1;30365:9;30361:17;30354:47;30418:131;30544:4;30418:131;:::i;:::-;30410:139;;30137:419;;;:::o;30562:::-;30728:4;30766:2;30755:9;30751:18;30743:26;;30815:9;30809:4;30805:20;30801:1;30790:9;30786:17;30779:47;30843:131;30969:4;30843:131;:::i;:::-;30835:139;;30562:419;;;:::o;30987:::-;31153:4;31191:2;31180:9;31176:18;31168:26;;31240:9;31234:4;31230:20;31226:1;31215:9;31211:17;31204:47;31268:131;31394:4;31268:131;:::i;:::-;31260:139;;30987:419;;;:::o;31412:::-;31578:4;31616:2;31605:9;31601:18;31593:26;;31665:9;31659:4;31655:20;31651:1;31640:9;31636:17;31629:47;31693:131;31819:4;31693:131;:::i;:::-;31685:139;;31412:419;;;:::o;31837:::-;32003:4;32041:2;32030:9;32026:18;32018:26;;32090:9;32084:4;32080:20;32076:1;32065:9;32061:17;32054:47;32118:131;32244:4;32118:131;:::i;:::-;32110:139;;31837:419;;;:::o;32262:::-;32428:4;32466:2;32455:9;32451:18;32443:26;;32515:9;32509:4;32505:20;32501:1;32490:9;32486:17;32479:47;32543:131;32669:4;32543:131;:::i;:::-;32535:139;;32262:419;;;:::o;32687:::-;32853:4;32891:2;32880:9;32876:18;32868:26;;32940:9;32934:4;32930:20;32926:1;32915:9;32911:17;32904:47;32968:131;33094:4;32968:131;:::i;:::-;32960:139;;32687:419;;;:::o;33112:::-;33278:4;33316:2;33305:9;33301:18;33293:26;;33365:9;33359:4;33355:20;33351:1;33340:9;33336:17;33329:47;33393:131;33519:4;33393:131;:::i;:::-;33385:139;;33112:419;;;:::o;33537:::-;33703:4;33741:2;33730:9;33726:18;33718:26;;33790:9;33784:4;33780:20;33776:1;33765:9;33761:17;33754:47;33818:131;33944:4;33818:131;:::i;:::-;33810:139;;33537:419;;;:::o;33962:222::-;34055:4;34093:2;34082:9;34078:18;34070:26;;34106:71;34174:1;34163:9;34159:17;34150:6;34106:71;:::i;:::-;33962:222;;;;:::o;34190:129::-;34224:6;34251:20;;:::i;:::-;34241:30;;34280:33;34308:4;34300:6;34280:33;:::i;:::-;34190:129;;;:::o;34325:75::-;34358:6;34391:2;34385:9;34375:19;;34325:75;:::o;34406:307::-;34467:4;34557:18;34549:6;34546:30;34543:56;;;34579:18;;:::i;:::-;34543:56;34617:29;34639:6;34617:29;:::i;:::-;34609:37;;34701:4;34695;34691:15;34683:23;;34406:307;;;:::o;34719:308::-;34781:4;34871:18;34863:6;34860:30;34857:56;;;34893:18;;:::i;:::-;34857:56;34931:29;34953:6;34931:29;:::i;:::-;34923:37;;35015:4;35009;35005:15;34997:23;;34719:308;;;:::o;35033:98::-;35084:6;35118:5;35112:12;35102:22;;35033:98;;;:::o;35137:99::-;35189:6;35223:5;35217:12;35207:22;;35137:99;;;:::o;35242:168::-;35325:11;35359:6;35354:3;35347:19;35399:4;35394:3;35390:14;35375:29;;35242:168;;;;:::o;35416:169::-;35500:11;35534:6;35529:3;35522:19;35574:4;35569:3;35565:14;35550:29;;35416:169;;;;:::o;35591:148::-;35693:11;35730:3;35715:18;;35591:148;;;;:::o;35745:305::-;35785:3;35804:20;35822:1;35804:20;:::i;:::-;35799:25;;35838:20;35856:1;35838:20;:::i;:::-;35833:25;;35992:1;35924:66;35920:74;35917:1;35914:81;35911:107;;;35998:18;;:::i;:::-;35911:107;36042:1;36039;36035:9;36028:16;;35745:305;;;;:::o;36056:185::-;36096:1;36113:20;36131:1;36113:20;:::i;:::-;36108:25;;36147:20;36165:1;36147:20;:::i;:::-;36142:25;;36186:1;36176:35;;36191:18;;:::i;:::-;36176:35;36233:1;36230;36226:9;36221:14;;36056:185;;;;:::o;36247:191::-;36287:4;36307:20;36325:1;36307:20;:::i;:::-;36302:25;;36341:20;36359:1;36341:20;:::i;:::-;36336:25;;36380:1;36377;36374:8;36371:34;;;36385:18;;:::i;:::-;36371:34;36430:1;36427;36423:9;36415:17;;36247:191;;;;:::o;36444:96::-;36481:7;36510:24;36528:5;36510:24;:::i;:::-;36499:35;;36444:96;;;:::o;36546:90::-;36580:7;36623:5;36616:13;36609:21;36598:32;;36546:90;;;:::o;36642:149::-;36678:7;36718:66;36711:5;36707:78;36696:89;;36642:149;;;:::o;36797:126::-;36834:7;36874:42;36867:5;36863:54;36852:65;;36797:126;;;:::o;36929:77::-;36966:7;36995:5;36984:16;;36929:77;;;:::o;37012:154::-;37096:6;37091:3;37086;37073:30;37158:1;37149:6;37144:3;37140:16;37133:27;37012:154;;;:::o;37172:307::-;37240:1;37250:113;37264:6;37261:1;37258:13;37250:113;;;37349:1;37344:3;37340:11;37334:18;37330:1;37325:3;37321:11;37314:39;37286:2;37283:1;37279:10;37274:15;;37250:113;;;37381:6;37378:1;37375:13;37372:101;;;37461:1;37452:6;37447:3;37443:16;37436:27;37372:101;37221:258;37172:307;;;:::o;37485:171::-;37524:3;37547:24;37565:5;37547:24;:::i;:::-;37538:33;;37593:4;37586:5;37583:15;37580:41;;;37601:18;;:::i;:::-;37580:41;37648:1;37641:5;37637:13;37630:20;;37485:171;;;:::o;37662:320::-;37706:6;37743:1;37737:4;37733:12;37723:22;;37790:1;37784:4;37780:12;37811:18;37801:81;;37867:4;37859:6;37855:17;37845:27;;37801:81;37929:2;37921:6;37918:14;37898:18;37895:38;37892:84;;;37948:18;;:::i;:::-;37892:84;37713:269;37662:320;;;:::o;37988:281::-;38071:27;38093:4;38071:27;:::i;:::-;38063:6;38059:40;38201:6;38189:10;38186:22;38165:18;38153:10;38150:34;38147:62;38144:88;;;38212:18;;:::i;:::-;38144:88;38252:10;38248:2;38241:22;38031:238;37988:281;;:::o;38275:233::-;38314:3;38337:24;38355:5;38337:24;:::i;:::-;38328:33;;38383:66;38376:5;38373:77;38370:103;;;38453:18;;:::i;:::-;38370:103;38500:1;38493:5;38489:13;38482:20;;38275:233;;;:::o;38514:176::-;38546:1;38563:20;38581:1;38563:20;:::i;:::-;38558:25;;38597:20;38615:1;38597:20;:::i;:::-;38592:25;;38636:1;38626:35;;38641:18;;:::i;:::-;38626:35;38682:1;38679;38675:9;38670:14;;38514:176;;;;:::o;38696:180::-;38744:77;38741:1;38734:88;38841:4;38838:1;38831:15;38865:4;38862:1;38855:15;38882:180;38930:77;38927:1;38920:88;39027:4;39024:1;39017:15;39051:4;39048:1;39041:15;39068:180;39116:77;39113:1;39106:88;39213:4;39210:1;39203:15;39237:4;39234:1;39227:15;39254:180;39302:77;39299:1;39292:88;39399:4;39396:1;39389:15;39423:4;39420:1;39413:15;39440:180;39488:77;39485:1;39478:88;39585:4;39582:1;39575:15;39609:4;39606:1;39599:15;39626:117;39735:1;39732;39725:12;39749:117;39858:1;39855;39848:12;39872:117;39981:1;39978;39971:12;39995:117;40104:1;40101;40094:12;40118:117;40227:1;40224;40217:12;40241:117;40350:1;40347;40340:12;40364:102;40405:6;40456:2;40452:7;40447:2;40440:5;40436:14;40432:28;40422:38;;40364:102;;;:::o;40472:170::-;40612:22;40608:1;40600:6;40596:14;40589:46;40472:170;:::o;40648:237::-;40788:34;40784:1;40776:6;40772:14;40765:58;40857:20;40852:2;40844:6;40840:15;40833:45;40648:237;:::o;40891:225::-;41031:34;41027:1;41019:6;41015:14;41008:58;41100:8;41095:2;41087:6;41083:15;41076:33;40891:225;:::o;41122:178::-;41262:30;41258:1;41250:6;41246:14;41239:54;41122:178;:::o;41306:175::-;41446:27;41442:1;41434:6;41430:14;41423:51;41306:175;:::o;41487:223::-;41627:34;41623:1;41615:6;41611:14;41604:58;41696:6;41691:2;41683:6;41679:15;41672:31;41487:223;:::o;41716:175::-;41856:27;41852:1;41844:6;41840:14;41833:51;41716:175;:::o;41897:182::-;42037:34;42033:1;42025:6;42021:14;42014:58;41897:182;:::o;42085:231::-;42225:34;42221:1;42213:6;42209:14;42202:58;42294:14;42289:2;42281:6;42277:15;42270:39;42085:231;:::o;42322:243::-;42462:34;42458:1;42450:6;42446:14;42439:58;42531:26;42526:2;42518:6;42514:15;42507:51;42322:243;:::o;42571:229::-;42711:34;42707:1;42699:6;42695:14;42688:58;42780:12;42775:2;42767:6;42763:15;42756:37;42571:229;:::o;42806:228::-;42946:34;42942:1;42934:6;42930:14;42923:58;43015:11;43010:2;43002:6;42998:15;42991:36;42806:228;:::o;43040:174::-;43180:26;43176:1;43168:6;43164:14;43157:50;43040:174;:::o;43220:176::-;43360:28;43356:1;43348:6;43344:14;43337:52;43220:176;:::o;43402:173::-;43542:25;43538:1;43530:6;43526:14;43519:49;43402:173;:::o;43581:182::-;43721:34;43717:1;43709:6;43705:14;43698:58;43581:182;:::o;43769:231::-;43909:34;43905:1;43897:6;43893:14;43886:58;43978:14;43973:2;43965:6;43961:15;43954:39;43769:231;:::o;44006:182::-;44146:34;44142:1;44134:6;44130:14;44123:58;44006:182;:::o;44194:228::-;44334:34;44330:1;44322:6;44318:14;44311:58;44403:11;44398:2;44390:6;44386:15;44379:36;44194:228;:::o;44428:234::-;44568:34;44564:1;44556:6;44552:14;44545:58;44637:17;44632:2;44624:6;44620:15;44613:42;44428:234;:::o;44668:181::-;44808:33;44804:1;44796:6;44792:14;44785:57;44668:181;:::o;44855:220::-;44995:34;44991:1;44983:6;44979:14;44972:58;45064:3;45059:2;45051:6;45047:15;45040:28;44855:220;:::o;45081:236::-;45221:34;45217:1;45209:6;45205:14;45198:58;45290:19;45285:2;45277:6;45273:15;45266:44;45081:236;:::o;45323:181::-;45463:33;45459:1;45451:6;45447:14;45440:57;45323:181;:::o;45510:169::-;45650:21;45646:1;45638:6;45634:14;45627:45;45510:169;:::o;45685:235::-;45825:34;45821:1;45813:6;45809:14;45802:58;45894:18;45889:2;45881:6;45877:15;45870:43;45685:235;:::o;45926:180::-;46066:32;46062:1;46054:6;46050:14;46043:56;45926:180;:::o;46112:169::-;46252:21;46248:1;46240:6;46236:14;46229:45;46112:169;:::o;46287:122::-;46360:24;46378:5;46360:24;:::i;:::-;46353:5;46350:35;46340:63;;46399:1;46396;46389:12;46340:63;46287:122;:::o;46415:116::-;46485:21;46500:5;46485:21;:::i;:::-;46478:5;46475:32;46465:60;;46521:1;46518;46511:12;46465:60;46415:116;:::o;46537:120::-;46609:23;46626:5;46609:23;:::i;:::-;46602:5;46599:34;46589:62;;46647:1;46644;46637:12;46589:62;46537:120;:::o;46663:122::-;46736:24;46754:5;46736:24;:::i;:::-;46729:5;46726:35;46716:63;;46775:1;46772;46765:12;46716:63;46663:122;:::o

Swarm Source

ipfs://2de2098153d031802054116bdc503ab1657a01149d694c398554f073b390cd5f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.