ETH Price: $3,395.62 (+1.42%)
Gas: 3.89 Gwei

Token

WAGMIAMI (WAGMIAMI)
 

Overview

Max Total Supply

201 WAGMIAMI

Holders

88

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 WAGMIAMI
0x0f25809d8e83abc5ff0f4ceb8a8c39c79746d0b6
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:
WAGMIAMI

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-29
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol



pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: 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 "";
    }

    /**
     * @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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public 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 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: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol



pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


pragma solidity >=0.7.0 <0.9.0;


// WAGMIAMI EVENT PASS
// dev by 4mat

contract WAGMIAMI is ERC721Enumerable, ReentrancyGuard, Ownable {
    string baseTokenURI;
    bool public tokenURIFrozen = false;
    address public payoutAddress;
    uint256 public totalTokens;

    uint256 public mintPrice = 0.1 ether;
    // ======== Provenance =========
    string public provenanceHash = "";

    bool public saleIsActive = false;
    bool public preSaleIsActive = false;
    mapping(address => bool) private presaleList;

    constructor(
        string memory name,
        string memory symbol,
        uint256 _totalTokens,
        address _payoutAddress
    ) ERC721(name, symbol) {
        baseTokenURI;
        totalTokens = _totalTokens;
        payoutAddress = _payoutAddress;
        for (uint256 i = 0; i < 100; i++) {
            _safeMint(payoutAddress, nextTokenId());
        }
    }

    function nextTokenId() internal view returns (uint256) {
        return totalSupply() + 1;
    }

    function addToAllowList(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Can't mint to the null address");
            presaleList[addresses[i]] = true;
        }
    }

    function withdraw() external onlyOwner {
        payable(payoutAddress).transfer(address(this).balance);
    }

    function mint() external payable nonReentrant {
        require(saleIsActive, "Sale not active");
        require(msg.value >= mintPrice, "More eth required");
        require(totalSupply() < totalTokens, "Sold out");
        require(balanceOf(_msgSender()) <= 100, "Only 100 per wallet");
        _safeMint(_msgSender(), nextTokenId());
    }

    function mintPresale() external payable nonReentrant {
        require(preSaleIsActive, "Presale not active");
        require(msg.value >= mintPrice, 'More eth required');
        require(totalSupply() < totalTokens, "Sold out");
        require(presaleList[_msgSender()] == true, "Not on presale list");
        require(balanceOf(_msgSender()) <= 100, "Only 100 per wallet");
        presaleList[_msgSender()] = false;
        _safeMint(_msgSender(), nextTokenId());
    }

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

    function freezeBaseURI() public onlyOwner {
        tokenURIFrozen = true;
    }

    function setBaseURI(string memory baseURI) public onlyOwner {
        require(tokenURIFrozen == false, 'Token URIs are Frozen');
        baseTokenURI = baseURI;
    }

    function setPayoutAddress(address _payoutAddress) public onlyOwner {
        payoutAddress = _payoutAddress;
    }


    // ======== Provenance =========
    function setProvenanceHash(string memory _provenanceHash) public onlyOwner {
        provenanceHash = _provenanceHash;
    }

    function flipSaleState() public onlyOwner {
        saleIsActive = !saleIsActive;
    }

    function flipPreSaleState() public onlyOwner {
        preSaleIsActive = !preSaleIsActive;
    }

    function setPrice(uint256 _newPrice) public onlyOwner() {
        mintPrice = _newPrice;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"_totalTokens","type":"uint256"},{"internalType":"address","name":"_payoutAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPreSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeBaseURI","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":[{"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":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","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":"payoutAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenanceHash","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_payoutAddress","type":"address"}],"name":"setPayoutAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURIFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600d60006101000a81548160ff02191690831515021790555067016345785d8a0000600f5560405180602001604052806000815250601090805190602001906200005292919062000cbb565b506000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055503480156200009657600080fd5b5060405162005fba38038062005fba8339818101604052810190620000bc919062000fa8565b83838160009080519060200190620000d692919062000cbb565b508060019080519060200190620000ef92919062000cbb565b5050506001600a819055506200011a6200010e620001d360201b60201c565b620001db60201b60201c565b81600e8190555080600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060005b6064811015620001c857620001b2600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620001a6620002a160201b60201c565b620002c660201b60201c565b8080620001bf9062001087565b91505062000165565b5050505050620015b7565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001620002b5620002ec60201b60201c565b620002c19190620010d5565b905090565b620002e8828260405180602001604052806000815250620002f960201b60201c565b5050565b6000600880549050905090565b6200030b83836200036760201b60201c565b6200032060008484846200054d60201b60201c565b62000362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035990620011b9565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d1906200122b565b60405180910390fd5b620003eb816200070760201b60201c565b156200042e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000425906200129d565b60405180910390fd5b62000442600083836200077360201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620004949190620010d5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200057b8473ffffffffffffffffffffffffffffffffffffffff16620008ba60201b62001fc01760201c565b15620006fa578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620005ad620001d360201b60201c565b8786866040518563ffffffff1660e01b8152600401620005d194939291906200133e565b602060405180830381600087803b158015620005ec57600080fd5b505af19250505080156200062057506040513d601f19601f820116820180604052508101906200061d9190620013ef565b60015b620006a9573d806000811462000653576040519150601f19603f3d011682016040523d82523d6000602084013e62000658565b606091505b50600081511415620006a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069890620011b9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620006ff565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200078b838383620008cd60201b62001fd31760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620007d857620007d281620008d260201b60201c565b62000820565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200081f576200081e83826200091b60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200086d57620008678162000a9860201b60201c565b620008b5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620008b457620008b3828262000b7460201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620009358462000c0060201b620012da1760201c565b62000941919062001421565b905060006007600084815260200190815260200160002054905081811462000a27576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000aae919062001421565b905060006009600084815260200190815260200160002054905060006008838154811062000ae15762000ae06200145c565b5b90600052602060002001549050806008838154811062000b065762000b056200145c565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000b585762000b576200148b565b5b6001900381819060005260206000200160009055905550505050565b600062000b8c8362000c0060201b620012da1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c6b9062001530565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000cc99062001581565b90600052602060002090601f01602090048101928262000ced576000855562000d39565b82601f1062000d0857805160ff191683800117855562000d39565b8280016001018555821562000d39579182015b8281111562000d3857825182559160200191906001019062000d1b565b5b50905062000d48919062000d4c565b5090565b5b8082111562000d6757600081600090555060010162000d4d565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000dd48262000d89565b810181811067ffffffffffffffff8211171562000df65762000df562000d9a565b5b80604052505050565b600062000e0b62000d6b565b905062000e19828262000dc9565b919050565b600067ffffffffffffffff82111562000e3c5762000e3b62000d9a565b5b62000e478262000d89565b9050602081019050919050565b60005b8381101562000e7457808201518184015260208101905062000e57565b8381111562000e84576000848401525b50505050565b600062000ea162000e9b8462000e1e565b62000dff565b90508281526020810184848401111562000ec05762000ebf62000d84565b5b62000ecd84828562000e54565b509392505050565b600082601f83011262000eed5762000eec62000d7f565b5b815162000eff84826020860162000e8a565b91505092915050565b6000819050919050565b62000f1d8162000f08565b811462000f2957600080fd5b50565b60008151905062000f3d8162000f12565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f708262000f43565b9050919050565b62000f828162000f63565b811462000f8e57600080fd5b50565b60008151905062000fa28162000f77565b92915050565b6000806000806080858703121562000fc55762000fc462000d75565b5b600085015167ffffffffffffffff81111562000fe65762000fe562000d7a565b5b62000ff48782880162000ed5565b945050602085015167ffffffffffffffff81111562001018576200101762000d7a565b5b620010268782880162000ed5565b9350506040620010398782880162000f2c565b92505060606200104c8782880162000f91565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010948262000f08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620010ca57620010c962001058565b5b600182019050919050565b6000620010e28262000f08565b9150620010ef8362000f08565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001127576200112662001058565b5b828201905092915050565b600082825260208201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000620011a160328362001132565b9150620011ae8262001143565b604082019050919050565b60006020820190508181036000830152620011d48162001192565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006200121360208362001132565b91506200122082620011db565b602082019050919050565b60006020820190508181036000830152620012468162001204565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600062001285601c8362001132565b915062001292826200124d565b602082019050919050565b60006020820190508181036000830152620012b88162001276565b9050919050565b620012ca8162000f63565b82525050565b620012db8162000f08565b82525050565b600081519050919050565b600082825260208201905092915050565b60006200130a82620012e1565b620013168185620012ec565b93506200132881856020860162000e54565b620013338162000d89565b840191505092915050565b6000608082019050620013556000830187620012bf565b620013646020830186620012bf565b620013736040830185620012d0565b8181036060830152620013878184620012fd565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620013c98162001392565b8114620013d557600080fd5b50565b600081519050620013e981620013be565b92915050565b60006020828403121562001408576200140762000d75565b5b60006200141884828501620013d8565b91505092915050565b60006200142e8262000f08565b91506200143b8362000f08565b92508282101562001451576200145062001058565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600062001518602a8362001132565b91506200152582620014ba565b604082019050919050565b600060208201905081810360008301526200154b8162001509565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200159a57607f821691505b60208210811415620015b157620015b062001552565b5b50919050565b6149f380620015c76000396000f3fe60806040526004361061021a5760003560e01c80636817c76c11610123578063b88d4fde116100ab578063e7bc82081161006f578063e7bc82081461076b578063e985e9c514610782578063eb8d2444146107bf578063f0325549146107ea578063f2fde38b146108015761021a565b8063b88d4fde146106a5578063c29de630146106ce578063c6ab67a3146106f9578063c87b56dd14610724578063db599698146107615761021a565b80637e1c0c09116100f25780637e1c0c09146105d25780638da5cb5b146105fd57806391b7f5ed1461062857806395d89b4114610651578063a22cb4651461067c5761021a565b80636817c76c1461052a57806370a0823114610555578063715018a6146105925780637263cfe2146105a95761021a565b80632f745c59116101a657806342842e0e1161017557806342842e0e146104335780634f6ccce71461045c57806355f804b3146104995780635b8d02d7146104c25780636352211e146104ed5761021a565b80632f745c591461039f57806333ea51a8146103dc57806334918dfd146104055780633ccfd60b1461041c5761021a565b806310969523116101ed57806310969523146102ed5780631249c58b1461031657806318160ddd146103205780631f0234d81461034b57806323b872dd146103765761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906131c2565b61082a565b604051610253919061320a565b60405180910390f35b34801561026857600080fd5b506102716108a4565b60405161027e91906132be565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613316565b610936565b6040516102bb9190613384565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e691906133cb565b6109bb565b005b3480156102f957600080fd5b50610314600480360381019061030f9190613540565b610ad3565b005b61031e610b69565b005b34801561032c57600080fd5b50610335610d0b565b6040516103429190613598565b60405180910390f35b34801561035757600080fd5b50610360610d18565b60405161036d919061320a565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906135b3565b610d2b565b005b3480156103ab57600080fd5b506103c660048036038101906103c191906133cb565b610d8b565b6040516103d39190613598565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190613606565b610e30565b005b34801561041157600080fd5b5061041a610ef0565b005b34801561042857600080fd5b50610431610f98565b005b34801561043f57600080fd5b5061045a600480360381019061045591906135b3565b61107f565b005b34801561046857600080fd5b50610483600480360381019061047e9190613316565b61109f565b6040516104909190613598565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613540565b611110565b005b3480156104ce57600080fd5b506104d76111fc565b6040516104e49190613384565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613316565b611222565b6040516105219190613384565b60405180910390f35b34801561053657600080fd5b5061053f6112d4565b60405161054c9190613598565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613606565b6112da565b6040516105899190613598565b60405180910390f35b34801561059e57600080fd5b506105a7611392565b005b3480156105b557600080fd5b506105d060048036038101906105cb9190613693565b61141a565b005b3480156105de57600080fd5b506105e76115d2565b6040516105f49190613598565b60405180910390f35b34801561060957600080fd5b506106126115d8565b60405161061f9190613384565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613316565b611602565b005b34801561065d57600080fd5b50610666611688565b60405161067391906132be565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e919061370c565b61171a565b005b3480156106b157600080fd5b506106cc60048036038101906106c791906137ed565b61189b565b005b3480156106da57600080fd5b506106e36118fd565b6040516106f0919061320a565b60405180910390f35b34801561070557600080fd5b5061070e611910565b60405161071b91906132be565b60405180910390f35b34801561073057600080fd5b5061074b60048036038101906107469190613316565b61199e565b60405161075891906132be565b60405180910390f35b610769611a45565b005b34801561077757600080fd5b50610780611ce0565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613870565b611d79565b6040516107b6919061320a565b60405180910390f35b3480156107cb57600080fd5b506107d4611e0d565b6040516107e1919061320a565b60405180910390f35b3480156107f657600080fd5b506107ff611e20565b005b34801561080d57600080fd5b5061082860048036038101906108239190613606565b611ec8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089d575061089c82611fd8565b5b9050919050565b6060600080546108b3906138df565b80601f01602080910402602001604051908101604052809291908181526020018280546108df906138df565b801561092c5780601f106109015761010080835404028352916020019161092c565b820191906000526020600020905b81548152906001019060200180831161090f57829003601f168201915b5050505050905090565b6000610941826120ba565b610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097790613983565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c682611222565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90613a15565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a56612126565b73ffffffffffffffffffffffffffffffffffffffff161480610a855750610a8481610a7f612126565b611d79565b5b610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90613aa7565b60405180910390fd5b610ace838361212e565b505050565b610adb612126565b73ffffffffffffffffffffffffffffffffffffffff16610af96115d8565b73ffffffffffffffffffffffffffffffffffffffff1614610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690613b13565b60405180910390fd5b8060109080519060200190610b659291906130b3565b5050565b6002600a541415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690613b7f565b60405180910390fd5b6002600a81905550601160009054906101000a900460ff16610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90613beb565b60405180910390fd5b600f54341015610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4290613c57565b60405180910390fd5b600e54610c56610d0b565b10610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90613cc3565b60405180910390fd5b6064610ca8610ca3612126565b6112da565b1115610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce090613d2f565b60405180910390fd5b610d01610cf4612126565b610cfc6121e7565b612202565b6001600a81905550565b6000600880549050905090565b601160019054906101000a900460ff1681565b610d3c610d36612126565b82612220565b610d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7290613dc1565b60405180910390fd5b610d868383836122fe565b505050565b6000610d96836112da565b8210610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90613e53565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e38612126565b73ffffffffffffffffffffffffffffffffffffffff16610e566115d8565b73ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390613b13565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ef8612126565b73ffffffffffffffffffffffffffffffffffffffff16610f166115d8565b73ffffffffffffffffffffffffffffffffffffffff1614610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390613b13565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b610fa0612126565b73ffffffffffffffffffffffffffffffffffffffff16610fbe6115d8565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613b13565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561107c573d6000803e3d6000fd5b50565b61109a8383836040518060200160405280600081525061189b565b505050565b60006110a9610d0b565b82106110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190613ee5565b60405180910390fd5b600882815481106110fe576110fd613f05565b5b90600052602060002001549050919050565b611118612126565b73ffffffffffffffffffffffffffffffffffffffff166111366115d8565b73ffffffffffffffffffffffffffffffffffffffff161461118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390613b13565b60405180910390fd5b60001515600d60009054906101000a900460ff161515146111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990613f80565b60405180910390fd5b80600c90805190602001906111f89291906130b3565b5050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c290614012565b60405180910390fd5b80915050919050565b600f5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561134b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611342906140a4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61139a612126565b73ffffffffffffffffffffffffffffffffffffffff166113b86115d8565b73ffffffffffffffffffffffffffffffffffffffff161461140e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140590613b13565b60405180910390fd5b611418600061255a565b565b611422612126565b73ffffffffffffffffffffffffffffffffffffffff166114406115d8565b73ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90613b13565b60405180910390fd5b60005b828290508110156115cd57600073ffffffffffffffffffffffffffffffffffffffff168383838181106114cf576114ce613f05565b5b90506020020160208101906114e49190613606565b73ffffffffffffffffffffffffffffffffffffffff16141561153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153290614110565b60405180910390fd5b60016012600085858581811061155457611553613f05565b5b90506020020160208101906115699190613606565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806115c59061415f565b915050611499565b505050565b600e5481565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61160a612126565b73ffffffffffffffffffffffffffffffffffffffff166116286115d8565b73ffffffffffffffffffffffffffffffffffffffff161461167e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167590613b13565b60405180910390fd5b80600f8190555050565b606060018054611697906138df565b80601f01602080910402602001604051908101604052809291908181526020018280546116c3906138df565b80156117105780601f106116e557610100808354040283529160200191611710565b820191906000526020600020905b8154815290600101906020018083116116f357829003601f168201915b5050505050905090565b611722612126565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611790576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611787906141f4565b60405180910390fd5b806005600061179d612126565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661184a612126565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161188f919061320a565b60405180910390a35050565b6118ac6118a6612126565b83612220565b6118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e290613dc1565b60405180910390fd5b6118f784848484612620565b50505050565b600d60009054906101000a900460ff1681565b6010805461191d906138df565b80601f0160208091040260200160405190810160405280929190818152602001828054611949906138df565b80156119965780601f1061196b57610100808354040283529160200191611996565b820191906000526020600020905b81548152906001019060200180831161197957829003601f168201915b505050505081565b60606119a9826120ba565b6119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90614286565b60405180910390fd5b60006119f261267c565b90506000815111611a125760405180602001604052806000815250611a3d565b80611a1c8461270e565b604051602001611a2d9291906142e2565b6040516020818303038152906040525b915050919050565b6002600a541415611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613b7f565b60405180910390fd5b6002600a81905550601160019054906101000a900460ff16611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990614352565b60405180910390fd5b600f54341015611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90613c57565b60405180910390fd5b600e54611b32610d0b565b10611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990613cc3565b60405180910390fd5b6001151560126000611b82612126565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c03906143be565b60405180910390fd5b6064611c1e611c19612126565b6112da565b1115611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690613d2f565b60405180910390fd5b600060126000611c6d612126565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611cd6611cc9612126565b611cd16121e7565b612202565b6001600a81905550565b611ce8612126565b73ffffffffffffffffffffffffffffffffffffffff16611d066115d8565b73ffffffffffffffffffffffffffffffffffffffff1614611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5390613b13565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601160009054906101000a900460ff1681565b611e28612126565b73ffffffffffffffffffffffffffffffffffffffff16611e466115d8565b73ffffffffffffffffffffffffffffffffffffffff1614611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390613b13565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b611ed0612126565b73ffffffffffffffffffffffffffffffffffffffff16611eee6115d8565b73ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613b13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab90614450565b60405180910390fd5b611fbd8161255a565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120a357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120b357506120b28261286f565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121a183611222565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600060016121f3610d0b565b6121fd9190614470565b905090565b61221c8282604051806020016040528060008152506128d9565b5050565b600061222b826120ba565b61226a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226190614538565b60405180910390fd5b600061227583611222565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122e457508373ffffffffffffffffffffffffffffffffffffffff166122cc84610936565b73ffffffffffffffffffffffffffffffffffffffff16145b806122f557506122f48185611d79565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661231e82611222565b73ffffffffffffffffffffffffffffffffffffffff1614612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b906145ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db9061465c565b60405180910390fd5b6123ef838383612934565b6123fa60008261212e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461244a919061467c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124a19190614470565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61262b8484846122fe565b61263784848484612a48565b612676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266d90614722565b60405180910390fd5b50505050565b6060600c805461268b906138df565b80601f01602080910402602001604051908101604052809291908181526020018280546126b7906138df565b80156127045780601f106126d957610100808354040283529160200191612704565b820191906000526020600020905b8154815290600101906020018083116126e757829003601f168201915b5050505050905090565b60606000821415612756576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061286a565b600082905060005b600082146127885780806127719061415f565b915050600a826127819190614771565b915061275e565b60008167ffffffffffffffff8111156127a4576127a3613415565b5b6040519080825280601f01601f1916602001820160405280156127d65781602001600182028036833780820191505090505b5090505b60008514612863576001826127ef919061467c565b9150600a856127fe91906147a2565b603061280a9190614470565b60f81b8183815181106128205761281f613f05565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561285c9190614771565b94506127da565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128e38383612bdf565b6128f06000848484612a48565b61292f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292690614722565b60405180910390fd5b505050565b61293f838383611fd3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129825761297d81612dad565b6129c1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129c0576129bf8382612df6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a04576129ff81612f63565b612a43565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a4257612a418282613034565b5b5b505050565b6000612a698473ffffffffffffffffffffffffffffffffffffffff16611fc0565b15612bd2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a92612126565b8786866040518563ffffffff1660e01b8152600401612ab49493929190614828565b602060405180830381600087803b158015612ace57600080fd5b505af1925050508015612aff57506040513d601f19601f82011682018060405250810190612afc9190614889565b60015b612b82573d8060008114612b2f576040519150601f19603f3d011682016040523d82523d6000602084013e612b34565b606091505b50600081511415612b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7190614722565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bd7565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4690614902565b60405180910390fd5b612c58816120ba565b15612c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8f9061496e565b60405180910390fd5b612ca460008383612934565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cf49190614470565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e03846112da565b612e0d919061467c565b9050600060076000848152602001908152602001600020549050818114612ef2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f77919061467c565b9050600060096000848152602001908152602001600020549050600060088381548110612fa757612fa6613f05565b5b906000526020600020015490508060088381548110612fc957612fc8613f05565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130185761301761498e565b5b6001900381819060005260206000200160009055905550505050565b600061303f836112da565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546130bf906138df565b90600052602060002090601f0160209004810192826130e15760008555613128565b82601f106130fa57805160ff1916838001178555613128565b82800160010185558215613128579182015b8281111561312757825182559160200191906001019061310c565b5b5090506131359190613139565b5090565b5b8082111561315257600081600090555060010161313a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61319f8161316a565b81146131aa57600080fd5b50565b6000813590506131bc81613196565b92915050565b6000602082840312156131d8576131d7613160565b5b60006131e6848285016131ad565b91505092915050565b60008115159050919050565b613204816131ef565b82525050565b600060208201905061321f60008301846131fb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561325f578082015181840152602081019050613244565b8381111561326e576000848401525b50505050565b6000601f19601f8301169050919050565b600061329082613225565b61329a8185613230565b93506132aa818560208601613241565b6132b381613274565b840191505092915050565b600060208201905081810360008301526132d88184613285565b905092915050565b6000819050919050565b6132f3816132e0565b81146132fe57600080fd5b50565b600081359050613310816132ea565b92915050565b60006020828403121561332c5761332b613160565b5b600061333a84828501613301565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061336e82613343565b9050919050565b61337e81613363565b82525050565b60006020820190506133996000830184613375565b92915050565b6133a881613363565b81146133b357600080fd5b50565b6000813590506133c58161339f565b92915050565b600080604083850312156133e2576133e1613160565b5b60006133f0858286016133b6565b925050602061340185828601613301565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61344d82613274565b810181811067ffffffffffffffff8211171561346c5761346b613415565b5b80604052505050565b600061347f613156565b905061348b8282613444565b919050565b600067ffffffffffffffff8211156134ab576134aa613415565b5b6134b482613274565b9050602081019050919050565b82818337600083830152505050565b60006134e36134de84613490565b613475565b9050828152602081018484840111156134ff576134fe613410565b5b61350a8482856134c1565b509392505050565b600082601f8301126135275761352661340b565b5b81356135378482602086016134d0565b91505092915050565b60006020828403121561355657613555613160565b5b600082013567ffffffffffffffff81111561357457613573613165565b5b61358084828501613512565b91505092915050565b613592816132e0565b82525050565b60006020820190506135ad6000830184613589565b92915050565b6000806000606084860312156135cc576135cb613160565b5b60006135da868287016133b6565b93505060206135eb868287016133b6565b92505060406135fc86828701613301565b9150509250925092565b60006020828403121561361c5761361b613160565b5b600061362a848285016133b6565b91505092915050565b600080fd5b600080fd5b60008083601f8401126136535761365261340b565b5b8235905067ffffffffffffffff8111156136705761366f613633565b5b60208301915083602082028301111561368c5761368b613638565b5b9250929050565b600080602083850312156136aa576136a9613160565b5b600083013567ffffffffffffffff8111156136c8576136c7613165565b5b6136d48582860161363d565b92509250509250929050565b6136e9816131ef565b81146136f457600080fd5b50565b600081359050613706816136e0565b92915050565b6000806040838503121561372357613722613160565b5b6000613731858286016133b6565b9250506020613742858286016136f7565b9150509250929050565b600067ffffffffffffffff82111561376757613766613415565b5b61377082613274565b9050602081019050919050565b600061379061378b8461374c565b613475565b9050828152602081018484840111156137ac576137ab613410565b5b6137b78482856134c1565b509392505050565b600082601f8301126137d4576137d361340b565b5b81356137e484826020860161377d565b91505092915050565b6000806000806080858703121561380757613806613160565b5b6000613815878288016133b6565b9450506020613826878288016133b6565b935050604061383787828801613301565b925050606085013567ffffffffffffffff81111561385857613857613165565b5b613864878288016137bf565b91505092959194509250565b6000806040838503121561388757613886613160565b5b6000613895858286016133b6565b92505060206138a6858286016133b6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138f757607f821691505b6020821081141561390b5761390a6138b0565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061396d602c83613230565b915061397882613911565b604082019050919050565b6000602082019050818103600083015261399c81613960565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139ff602183613230565b9150613a0a826139a3565b604082019050919050565b60006020820190508181036000830152613a2e816139f2565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a91603883613230565b9150613a9c82613a35565b604082019050919050565b60006020820190508181036000830152613ac081613a84565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613afd602083613230565b9150613b0882613ac7565b602082019050919050565b60006020820190508181036000830152613b2c81613af0565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613b69601f83613230565b9150613b7482613b33565b602082019050919050565b60006020820190508181036000830152613b9881613b5c565b9050919050565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b6000613bd5600f83613230565b9150613be082613b9f565b602082019050919050565b60006020820190508181036000830152613c0481613bc8565b9050919050565b7f4d6f726520657468207265717569726564000000000000000000000000000000600082015250565b6000613c41601183613230565b9150613c4c82613c0b565b602082019050919050565b60006020820190508181036000830152613c7081613c34565b9050919050565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b6000613cad600883613230565b9150613cb882613c77565b602082019050919050565b60006020820190508181036000830152613cdc81613ca0565b9050919050565b7f4f6e6c7920313030207065722077616c6c657400000000000000000000000000600082015250565b6000613d19601383613230565b9150613d2482613ce3565b602082019050919050565b60006020820190508181036000830152613d4881613d0c565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613dab603183613230565b9150613db682613d4f565b604082019050919050565b60006020820190508181036000830152613dda81613d9e565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e3d602b83613230565b9150613e4882613de1565b604082019050919050565b60006020820190508181036000830152613e6c81613e30565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613ecf602c83613230565b9150613eda82613e73565b604082019050919050565b60006020820190508181036000830152613efe81613ec2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f546f6b656e2055524973206172652046726f7a656e0000000000000000000000600082015250565b6000613f6a601583613230565b9150613f7582613f34565b602082019050919050565b60006020820190508181036000830152613f9981613f5d565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613ffc602983613230565b915061400782613fa0565b604082019050919050565b6000602082019050818103600083015261402b81613fef565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061408e602a83613230565b915061409982614032565b604082019050919050565b600060208201905081810360008301526140bd81614081565b9050919050565b7f43616e2774206d696e7420746f20746865206e756c6c20616464726573730000600082015250565b60006140fa601e83613230565b9150614105826140c4565b602082019050919050565b60006020820190508181036000830152614129816140ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416a826132e0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561419d5761419c614130565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006141de601983613230565b91506141e9826141a8565b602082019050919050565b6000602082019050818103600083015261420d816141d1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614270602f83613230565b915061427b82614214565b604082019050919050565b6000602082019050818103600083015261429f81614263565b9050919050565b600081905092915050565b60006142bc82613225565b6142c681856142a6565b93506142d6818560208601613241565b80840191505092915050565b60006142ee82856142b1565b91506142fa82846142b1565b91508190509392505050565b7f50726573616c65206e6f74206163746976650000000000000000000000000000600082015250565b600061433c601283613230565b915061434782614306565b602082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b7f4e6f74206f6e2070726573616c65206c69737400000000000000000000000000600082015250565b60006143a8601383613230565b91506143b382614372565b602082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061443a602683613230565b9150614445826143de565b604082019050919050565b600060208201905081810360008301526144698161442d565b9050919050565b600061447b826132e0565b9150614486836132e0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144bb576144ba614130565b5b828201905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614522602c83613230565b915061452d826144c6565b604082019050919050565b6000602082019050818103600083015261455181614515565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006145b4602983613230565b91506145bf82614558565b604082019050919050565b600060208201905081810360008301526145e3816145a7565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614646602483613230565b9150614651826145ea565b604082019050919050565b6000602082019050818103600083015261467581614639565b9050919050565b6000614687826132e0565b9150614692836132e0565b9250828210156146a5576146a4614130565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061470c603283613230565b9150614717826146b0565b604082019050919050565b6000602082019050818103600083015261473b816146ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061477c826132e0565b9150614787836132e0565b92508261479757614796614742565b5b828204905092915050565b60006147ad826132e0565b91506147b8836132e0565b9250826147c8576147c7614742565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006147fa826147d3565b61480481856147de565b9350614814818560208601613241565b61481d81613274565b840191505092915050565b600060808201905061483d6000830187613375565b61484a6020830186613375565b6148576040830185613589565b818103606083015261486981846147ef565b905095945050505050565b60008151905061488381613196565b92915050565b60006020828403121561489f5761489e613160565b5b60006148ad84828501614874565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006148ec602083613230565b91506148f7826148b6565b602082019050919050565b6000602082019050818103600083015261491b816148df565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614958601c83613230565b915061496382614922565b602082019050919050565b600060208201905081810360008301526149878161494b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122074f3bdb9f29ef19b56082838b290cb07646b5debaf0af4cde345c453c7060c6864736f6c63430008090033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000013880000000000000000000000004126ca4080fb0441876ccac8ff8b86f8d382bb6d00000000000000000000000000000000000000000000000000000000000000085741474d49414d4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085741474d49414d49000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061021a5760003560e01c80636817c76c11610123578063b88d4fde116100ab578063e7bc82081161006f578063e7bc82081461076b578063e985e9c514610782578063eb8d2444146107bf578063f0325549146107ea578063f2fde38b146108015761021a565b8063b88d4fde146106a5578063c29de630146106ce578063c6ab67a3146106f9578063c87b56dd14610724578063db599698146107615761021a565b80637e1c0c09116100f25780637e1c0c09146105d25780638da5cb5b146105fd57806391b7f5ed1461062857806395d89b4114610651578063a22cb4651461067c5761021a565b80636817c76c1461052a57806370a0823114610555578063715018a6146105925780637263cfe2146105a95761021a565b80632f745c59116101a657806342842e0e1161017557806342842e0e146104335780634f6ccce71461045c57806355f804b3146104995780635b8d02d7146104c25780636352211e146104ed5761021a565b80632f745c591461039f57806333ea51a8146103dc57806334918dfd146104055780633ccfd60b1461041c5761021a565b806310969523116101ed57806310969523146102ed5780631249c58b1461031657806318160ddd146103205780631f0234d81461034b57806323b872dd146103765761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906131c2565b61082a565b604051610253919061320a565b60405180910390f35b34801561026857600080fd5b506102716108a4565b60405161027e91906132be565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613316565b610936565b6040516102bb9190613384565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e691906133cb565b6109bb565b005b3480156102f957600080fd5b50610314600480360381019061030f9190613540565b610ad3565b005b61031e610b69565b005b34801561032c57600080fd5b50610335610d0b565b6040516103429190613598565b60405180910390f35b34801561035757600080fd5b50610360610d18565b60405161036d919061320a565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906135b3565b610d2b565b005b3480156103ab57600080fd5b506103c660048036038101906103c191906133cb565b610d8b565b6040516103d39190613598565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190613606565b610e30565b005b34801561041157600080fd5b5061041a610ef0565b005b34801561042857600080fd5b50610431610f98565b005b34801561043f57600080fd5b5061045a600480360381019061045591906135b3565b61107f565b005b34801561046857600080fd5b50610483600480360381019061047e9190613316565b61109f565b6040516104909190613598565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613540565b611110565b005b3480156104ce57600080fd5b506104d76111fc565b6040516104e49190613384565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613316565b611222565b6040516105219190613384565b60405180910390f35b34801561053657600080fd5b5061053f6112d4565b60405161054c9190613598565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613606565b6112da565b6040516105899190613598565b60405180910390f35b34801561059e57600080fd5b506105a7611392565b005b3480156105b557600080fd5b506105d060048036038101906105cb9190613693565b61141a565b005b3480156105de57600080fd5b506105e76115d2565b6040516105f49190613598565b60405180910390f35b34801561060957600080fd5b506106126115d8565b60405161061f9190613384565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613316565b611602565b005b34801561065d57600080fd5b50610666611688565b60405161067391906132be565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e919061370c565b61171a565b005b3480156106b157600080fd5b506106cc60048036038101906106c791906137ed565b61189b565b005b3480156106da57600080fd5b506106e36118fd565b6040516106f0919061320a565b60405180910390f35b34801561070557600080fd5b5061070e611910565b60405161071b91906132be565b60405180910390f35b34801561073057600080fd5b5061074b60048036038101906107469190613316565b61199e565b60405161075891906132be565b60405180910390f35b610769611a45565b005b34801561077757600080fd5b50610780611ce0565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613870565b611d79565b6040516107b6919061320a565b60405180910390f35b3480156107cb57600080fd5b506107d4611e0d565b6040516107e1919061320a565b60405180910390f35b3480156107f657600080fd5b506107ff611e20565b005b34801561080d57600080fd5b5061082860048036038101906108239190613606565b611ec8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089d575061089c82611fd8565b5b9050919050565b6060600080546108b3906138df565b80601f01602080910402602001604051908101604052809291908181526020018280546108df906138df565b801561092c5780601f106109015761010080835404028352916020019161092c565b820191906000526020600020905b81548152906001019060200180831161090f57829003601f168201915b5050505050905090565b6000610941826120ba565b610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097790613983565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c682611222565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90613a15565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a56612126565b73ffffffffffffffffffffffffffffffffffffffff161480610a855750610a8481610a7f612126565b611d79565b5b610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90613aa7565b60405180910390fd5b610ace838361212e565b505050565b610adb612126565b73ffffffffffffffffffffffffffffffffffffffff16610af96115d8565b73ffffffffffffffffffffffffffffffffffffffff1614610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690613b13565b60405180910390fd5b8060109080519060200190610b659291906130b3565b5050565b6002600a541415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690613b7f565b60405180910390fd5b6002600a81905550601160009054906101000a900460ff16610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90613beb565b60405180910390fd5b600f54341015610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4290613c57565b60405180910390fd5b600e54610c56610d0b565b10610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90613cc3565b60405180910390fd5b6064610ca8610ca3612126565b6112da565b1115610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce090613d2f565b60405180910390fd5b610d01610cf4612126565b610cfc6121e7565b612202565b6001600a81905550565b6000600880549050905090565b601160019054906101000a900460ff1681565b610d3c610d36612126565b82612220565b610d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7290613dc1565b60405180910390fd5b610d868383836122fe565b505050565b6000610d96836112da565b8210610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90613e53565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e38612126565b73ffffffffffffffffffffffffffffffffffffffff16610e566115d8565b73ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390613b13565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ef8612126565b73ffffffffffffffffffffffffffffffffffffffff16610f166115d8565b73ffffffffffffffffffffffffffffffffffffffff1614610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390613b13565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b610fa0612126565b73ffffffffffffffffffffffffffffffffffffffff16610fbe6115d8565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613b13565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561107c573d6000803e3d6000fd5b50565b61109a8383836040518060200160405280600081525061189b565b505050565b60006110a9610d0b565b82106110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190613ee5565b60405180910390fd5b600882815481106110fe576110fd613f05565b5b90600052602060002001549050919050565b611118612126565b73ffffffffffffffffffffffffffffffffffffffff166111366115d8565b73ffffffffffffffffffffffffffffffffffffffff161461118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390613b13565b60405180910390fd5b60001515600d60009054906101000a900460ff161515146111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990613f80565b60405180910390fd5b80600c90805190602001906111f89291906130b3565b5050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c290614012565b60405180910390fd5b80915050919050565b600f5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561134b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611342906140a4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61139a612126565b73ffffffffffffffffffffffffffffffffffffffff166113b86115d8565b73ffffffffffffffffffffffffffffffffffffffff161461140e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140590613b13565b60405180910390fd5b611418600061255a565b565b611422612126565b73ffffffffffffffffffffffffffffffffffffffff166114406115d8565b73ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90613b13565b60405180910390fd5b60005b828290508110156115cd57600073ffffffffffffffffffffffffffffffffffffffff168383838181106114cf576114ce613f05565b5b90506020020160208101906114e49190613606565b73ffffffffffffffffffffffffffffffffffffffff16141561153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153290614110565b60405180910390fd5b60016012600085858581811061155457611553613f05565b5b90506020020160208101906115699190613606565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806115c59061415f565b915050611499565b505050565b600e5481565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61160a612126565b73ffffffffffffffffffffffffffffffffffffffff166116286115d8565b73ffffffffffffffffffffffffffffffffffffffff161461167e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167590613b13565b60405180910390fd5b80600f8190555050565b606060018054611697906138df565b80601f01602080910402602001604051908101604052809291908181526020018280546116c3906138df565b80156117105780601f106116e557610100808354040283529160200191611710565b820191906000526020600020905b8154815290600101906020018083116116f357829003601f168201915b5050505050905090565b611722612126565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611790576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611787906141f4565b60405180910390fd5b806005600061179d612126565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661184a612126565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161188f919061320a565b60405180910390a35050565b6118ac6118a6612126565b83612220565b6118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e290613dc1565b60405180910390fd5b6118f784848484612620565b50505050565b600d60009054906101000a900460ff1681565b6010805461191d906138df565b80601f0160208091040260200160405190810160405280929190818152602001828054611949906138df565b80156119965780601f1061196b57610100808354040283529160200191611996565b820191906000526020600020905b81548152906001019060200180831161197957829003601f168201915b505050505081565b60606119a9826120ba565b6119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90614286565b60405180910390fd5b60006119f261267c565b90506000815111611a125760405180602001604052806000815250611a3d565b80611a1c8461270e565b604051602001611a2d9291906142e2565b6040516020818303038152906040525b915050919050565b6002600a541415611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613b7f565b60405180910390fd5b6002600a81905550601160019054906101000a900460ff16611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990614352565b60405180910390fd5b600f54341015611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90613c57565b60405180910390fd5b600e54611b32610d0b565b10611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990613cc3565b60405180910390fd5b6001151560126000611b82612126565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c03906143be565b60405180910390fd5b6064611c1e611c19612126565b6112da565b1115611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690613d2f565b60405180910390fd5b600060126000611c6d612126565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611cd6611cc9612126565b611cd16121e7565b612202565b6001600a81905550565b611ce8612126565b73ffffffffffffffffffffffffffffffffffffffff16611d066115d8565b73ffffffffffffffffffffffffffffffffffffffff1614611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5390613b13565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601160009054906101000a900460ff1681565b611e28612126565b73ffffffffffffffffffffffffffffffffffffffff16611e466115d8565b73ffffffffffffffffffffffffffffffffffffffff1614611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390613b13565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b611ed0612126565b73ffffffffffffffffffffffffffffffffffffffff16611eee6115d8565b73ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613b13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab90614450565b60405180910390fd5b611fbd8161255a565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120a357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120b357506120b28261286f565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121a183611222565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600060016121f3610d0b565b6121fd9190614470565b905090565b61221c8282604051806020016040528060008152506128d9565b5050565b600061222b826120ba565b61226a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226190614538565b60405180910390fd5b600061227583611222565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122e457508373ffffffffffffffffffffffffffffffffffffffff166122cc84610936565b73ffffffffffffffffffffffffffffffffffffffff16145b806122f557506122f48185611d79565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661231e82611222565b73ffffffffffffffffffffffffffffffffffffffff1614612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b906145ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db9061465c565b60405180910390fd5b6123ef838383612934565b6123fa60008261212e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461244a919061467c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124a19190614470565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61262b8484846122fe565b61263784848484612a48565b612676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266d90614722565b60405180910390fd5b50505050565b6060600c805461268b906138df565b80601f01602080910402602001604051908101604052809291908181526020018280546126b7906138df565b80156127045780601f106126d957610100808354040283529160200191612704565b820191906000526020600020905b8154815290600101906020018083116126e757829003601f168201915b5050505050905090565b60606000821415612756576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061286a565b600082905060005b600082146127885780806127719061415f565b915050600a826127819190614771565b915061275e565b60008167ffffffffffffffff8111156127a4576127a3613415565b5b6040519080825280601f01601f1916602001820160405280156127d65781602001600182028036833780820191505090505b5090505b60008514612863576001826127ef919061467c565b9150600a856127fe91906147a2565b603061280a9190614470565b60f81b8183815181106128205761281f613f05565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561285c9190614771565b94506127da565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128e38383612bdf565b6128f06000848484612a48565b61292f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292690614722565b60405180910390fd5b505050565b61293f838383611fd3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129825761297d81612dad565b6129c1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129c0576129bf8382612df6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a04576129ff81612f63565b612a43565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a4257612a418282613034565b5b5b505050565b6000612a698473ffffffffffffffffffffffffffffffffffffffff16611fc0565b15612bd2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a92612126565b8786866040518563ffffffff1660e01b8152600401612ab49493929190614828565b602060405180830381600087803b158015612ace57600080fd5b505af1925050508015612aff57506040513d601f19601f82011682018060405250810190612afc9190614889565b60015b612b82573d8060008114612b2f576040519150601f19603f3d011682016040523d82523d6000602084013e612b34565b606091505b50600081511415612b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7190614722565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bd7565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4690614902565b60405180910390fd5b612c58816120ba565b15612c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8f9061496e565b60405180910390fd5b612ca460008383612934565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cf49190614470565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e03846112da565b612e0d919061467c565b9050600060076000848152602001908152602001600020549050818114612ef2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f77919061467c565b9050600060096000848152602001908152602001600020549050600060088381548110612fa757612fa6613f05565b5b906000526020600020015490508060088381548110612fc957612fc8613f05565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130185761301761498e565b5b6001900381819060005260206000200160009055905550505050565b600061303f836112da565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546130bf906138df565b90600052602060002090601f0160209004810192826130e15760008555613128565b82601f106130fa57805160ff1916838001178555613128565b82800160010185558215613128579182015b8281111561312757825182559160200191906001019061310c565b5b5090506131359190613139565b5090565b5b8082111561315257600081600090555060010161313a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61319f8161316a565b81146131aa57600080fd5b50565b6000813590506131bc81613196565b92915050565b6000602082840312156131d8576131d7613160565b5b60006131e6848285016131ad565b91505092915050565b60008115159050919050565b613204816131ef565b82525050565b600060208201905061321f60008301846131fb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561325f578082015181840152602081019050613244565b8381111561326e576000848401525b50505050565b6000601f19601f8301169050919050565b600061329082613225565b61329a8185613230565b93506132aa818560208601613241565b6132b381613274565b840191505092915050565b600060208201905081810360008301526132d88184613285565b905092915050565b6000819050919050565b6132f3816132e0565b81146132fe57600080fd5b50565b600081359050613310816132ea565b92915050565b60006020828403121561332c5761332b613160565b5b600061333a84828501613301565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061336e82613343565b9050919050565b61337e81613363565b82525050565b60006020820190506133996000830184613375565b92915050565b6133a881613363565b81146133b357600080fd5b50565b6000813590506133c58161339f565b92915050565b600080604083850312156133e2576133e1613160565b5b60006133f0858286016133b6565b925050602061340185828601613301565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61344d82613274565b810181811067ffffffffffffffff8211171561346c5761346b613415565b5b80604052505050565b600061347f613156565b905061348b8282613444565b919050565b600067ffffffffffffffff8211156134ab576134aa613415565b5b6134b482613274565b9050602081019050919050565b82818337600083830152505050565b60006134e36134de84613490565b613475565b9050828152602081018484840111156134ff576134fe613410565b5b61350a8482856134c1565b509392505050565b600082601f8301126135275761352661340b565b5b81356135378482602086016134d0565b91505092915050565b60006020828403121561355657613555613160565b5b600082013567ffffffffffffffff81111561357457613573613165565b5b61358084828501613512565b91505092915050565b613592816132e0565b82525050565b60006020820190506135ad6000830184613589565b92915050565b6000806000606084860312156135cc576135cb613160565b5b60006135da868287016133b6565b93505060206135eb868287016133b6565b92505060406135fc86828701613301565b9150509250925092565b60006020828403121561361c5761361b613160565b5b600061362a848285016133b6565b91505092915050565b600080fd5b600080fd5b60008083601f8401126136535761365261340b565b5b8235905067ffffffffffffffff8111156136705761366f613633565b5b60208301915083602082028301111561368c5761368b613638565b5b9250929050565b600080602083850312156136aa576136a9613160565b5b600083013567ffffffffffffffff8111156136c8576136c7613165565b5b6136d48582860161363d565b92509250509250929050565b6136e9816131ef565b81146136f457600080fd5b50565b600081359050613706816136e0565b92915050565b6000806040838503121561372357613722613160565b5b6000613731858286016133b6565b9250506020613742858286016136f7565b9150509250929050565b600067ffffffffffffffff82111561376757613766613415565b5b61377082613274565b9050602081019050919050565b600061379061378b8461374c565b613475565b9050828152602081018484840111156137ac576137ab613410565b5b6137b78482856134c1565b509392505050565b600082601f8301126137d4576137d361340b565b5b81356137e484826020860161377d565b91505092915050565b6000806000806080858703121561380757613806613160565b5b6000613815878288016133b6565b9450506020613826878288016133b6565b935050604061383787828801613301565b925050606085013567ffffffffffffffff81111561385857613857613165565b5b613864878288016137bf565b91505092959194509250565b6000806040838503121561388757613886613160565b5b6000613895858286016133b6565b92505060206138a6858286016133b6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138f757607f821691505b6020821081141561390b5761390a6138b0565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061396d602c83613230565b915061397882613911565b604082019050919050565b6000602082019050818103600083015261399c81613960565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139ff602183613230565b9150613a0a826139a3565b604082019050919050565b60006020820190508181036000830152613a2e816139f2565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a91603883613230565b9150613a9c82613a35565b604082019050919050565b60006020820190508181036000830152613ac081613a84565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613afd602083613230565b9150613b0882613ac7565b602082019050919050565b60006020820190508181036000830152613b2c81613af0565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613b69601f83613230565b9150613b7482613b33565b602082019050919050565b60006020820190508181036000830152613b9881613b5c565b9050919050565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b6000613bd5600f83613230565b9150613be082613b9f565b602082019050919050565b60006020820190508181036000830152613c0481613bc8565b9050919050565b7f4d6f726520657468207265717569726564000000000000000000000000000000600082015250565b6000613c41601183613230565b9150613c4c82613c0b565b602082019050919050565b60006020820190508181036000830152613c7081613c34565b9050919050565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b6000613cad600883613230565b9150613cb882613c77565b602082019050919050565b60006020820190508181036000830152613cdc81613ca0565b9050919050565b7f4f6e6c7920313030207065722077616c6c657400000000000000000000000000600082015250565b6000613d19601383613230565b9150613d2482613ce3565b602082019050919050565b60006020820190508181036000830152613d4881613d0c565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613dab603183613230565b9150613db682613d4f565b604082019050919050565b60006020820190508181036000830152613dda81613d9e565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e3d602b83613230565b9150613e4882613de1565b604082019050919050565b60006020820190508181036000830152613e6c81613e30565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613ecf602c83613230565b9150613eda82613e73565b604082019050919050565b60006020820190508181036000830152613efe81613ec2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f546f6b656e2055524973206172652046726f7a656e0000000000000000000000600082015250565b6000613f6a601583613230565b9150613f7582613f34565b602082019050919050565b60006020820190508181036000830152613f9981613f5d565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613ffc602983613230565b915061400782613fa0565b604082019050919050565b6000602082019050818103600083015261402b81613fef565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061408e602a83613230565b915061409982614032565b604082019050919050565b600060208201905081810360008301526140bd81614081565b9050919050565b7f43616e2774206d696e7420746f20746865206e756c6c20616464726573730000600082015250565b60006140fa601e83613230565b9150614105826140c4565b602082019050919050565b60006020820190508181036000830152614129816140ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416a826132e0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561419d5761419c614130565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006141de601983613230565b91506141e9826141a8565b602082019050919050565b6000602082019050818103600083015261420d816141d1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614270602f83613230565b915061427b82614214565b604082019050919050565b6000602082019050818103600083015261429f81614263565b9050919050565b600081905092915050565b60006142bc82613225565b6142c681856142a6565b93506142d6818560208601613241565b80840191505092915050565b60006142ee82856142b1565b91506142fa82846142b1565b91508190509392505050565b7f50726573616c65206e6f74206163746976650000000000000000000000000000600082015250565b600061433c601283613230565b915061434782614306565b602082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b7f4e6f74206f6e2070726573616c65206c69737400000000000000000000000000600082015250565b60006143a8601383613230565b91506143b382614372565b602082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061443a602683613230565b9150614445826143de565b604082019050919050565b600060208201905081810360008301526144698161442d565b9050919050565b600061447b826132e0565b9150614486836132e0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144bb576144ba614130565b5b828201905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614522602c83613230565b915061452d826144c6565b604082019050919050565b6000602082019050818103600083015261455181614515565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006145b4602983613230565b91506145bf82614558565b604082019050919050565b600060208201905081810360008301526145e3816145a7565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614646602483613230565b9150614651826145ea565b604082019050919050565b6000602082019050818103600083015261467581614639565b9050919050565b6000614687826132e0565b9150614692836132e0565b9250828210156146a5576146a4614130565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061470c603283613230565b9150614717826146b0565b604082019050919050565b6000602082019050818103600083015261473b816146ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061477c826132e0565b9150614787836132e0565b92508261479757614796614742565b5b828204905092915050565b60006147ad826132e0565b91506147b8836132e0565b9250826147c8576147c7614742565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006147fa826147d3565b61480481856147de565b9350614814818560208601613241565b61481d81613274565b840191505092915050565b600060808201905061483d6000830187613375565b61484a6020830186613375565b6148576040830185613589565b818103606083015261486981846147ef565b905095945050505050565b60008151905061488381613196565b92915050565b60006020828403121561489f5761489e613160565b5b60006148ad84828501614874565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006148ec602083613230565b91506148f7826148b6565b602082019050919050565b6000602082019050818103600083015261491b816148df565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614958601c83613230565b915061496382614922565b602082019050919050565b600060208201905081810360008301526149878161494b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122074f3bdb9f29ef19b56082838b290cb07646b5debaf0af4cde345c453c7060c6864736f6c63430008090033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000013880000000000000000000000004126ca4080fb0441876ccac8ff8b86f8d382bb6d00000000000000000000000000000000000000000000000000000000000000085741474d49414d4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085741474d49414d49000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): WAGMIAMI
Arg [1] : symbol (string): WAGMIAMI
Arg [2] : _totalTokens (uint256): 5000
Arg [3] : _payoutAddress (address): 0x4126Ca4080fB0441876CCac8FF8b86f8D382bb6D

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [3] : 0000000000000000000000004126ca4080fb0441876ccac8ff8b86f8d382bb6d
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 5741474d49414d49000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 5741474d49414d49000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

45909:3206:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39680:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27572:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29131:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28654:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48679:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47280:349;;;:::i;:::-;;40320:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46279:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30021:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39988:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48515:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48813:89;;;;;;;;;;;;;:::i;:::-;;47160:112;;;;;;;;;;;;;:::i;:::-;;30431:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40510:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48338:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46047:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27266:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46117:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26996:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7283:94;;;;;;;;;;;;;:::i;:::-;;46871:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46082:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6632:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49016:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27741:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29424:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30687:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46006:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46198:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27916:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47637:482;;;:::i;:::-;;48248:82;;;;;;;;;;;;;:::i;:::-;;29790:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46240:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48910:98;;;;;;;;;;;;;:::i;:::-;;7532:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39680:224;39782:4;39821:35;39806:50;;;:11;:50;;;;:90;;;;39860:36;39884:11;39860:23;:36::i;:::-;39806:90;39799:97;;39680:224;;;:::o;27572:100::-;27626:13;27659:5;27652:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27572:100;:::o;29131:221::-;29207:7;29235:16;29243:7;29235;:16::i;:::-;29227:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29320:15;:24;29336:7;29320:24;;;;;;;;;;;;;;;;;;;;;29313:31;;29131:221;;;:::o;28654:411::-;28735:13;28751:23;28766:7;28751:14;:23::i;:::-;28735:39;;28799:5;28793:11;;:2;:11;;;;28785:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28893:5;28877:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28902:37;28919:5;28926:12;:10;:12::i;:::-;28902:16;:37::i;:::-;28877:62;28855:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29036:21;29045:2;29049:7;29036:8;:21::i;:::-;28724:341;28654:411;;:::o;48679:126::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48782:15:::1;48765:14;:32;;;;;;;;;;;;:::i;:::-;;48679:126:::0;:::o;47280:349::-;1780:1;2376:7;;:19;;2368:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1780:1;2509:7;:18;;;;47345:12:::1;;;;;;;;;;;47337:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;47409:9;;47396;:22;;47388:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;47475:11;;47459:13;:11;:13::i;:::-;:27;47451:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;47545:3;47518:23;47528:12;:10;:12::i;:::-;47518:9;:23::i;:::-;:30;;47510:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47583:38;47593:12;:10;:12::i;:::-;47607:13;:11;:13::i;:::-;47583:9;:38::i;:::-;1736:1:::0;2688:7;:22;;;;47280:349::o;40320:113::-;40381:7;40408:10;:17;;;;40401:24;;40320:113;:::o;46279:35::-;;;;;;;;;;;;;:::o;30021:339::-;30216:41;30235:12;:10;:12::i;:::-;30249:7;30216:18;:41::i;:::-;30208:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30324:28;30334:4;30340:2;30344:7;30324:9;:28::i;:::-;30021:339;;;:::o;39988:256::-;40085:7;40121:23;40138:5;40121:16;:23::i;:::-;40113:5;:31;40105:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40210:12;:19;40223:5;40210:19;;;;;;;;;;;;;;;:26;40230:5;40210:26;;;;;;;;;;;;40203:33;;39988:256;;;;:::o;48515:116::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48609:14:::1;48593:13;;:30;;;;;;;;;;;;;;;;;;48515:116:::0;:::o;48813:89::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48882:12:::1;;;;;;;;;;;48881:13;48866:12;;:28;;;;;;;;;;;;;;;;;;48813:89::o:0;47160:112::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47218:13:::1;;;;;;;;;;;47210:31;;:54;47242:21;47210:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47160:112::o:0;30431:185::-;30569:39;30586:4;30592:2;30596:7;30569:39;;;;;;;;;;;;:16;:39::i;:::-;30431:185;;;:::o;40510:233::-;40585:7;40621:30;:28;:30::i;:::-;40613:5;:38;40605:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40718:10;40729:5;40718:17;;;;;;;;:::i;:::-;;;;;;;;;;40711:24;;40510:233;;;:::o;48338:169::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48435:5:::1;48417:23;;:14;;;;;;;;;;;:23;;;48409:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;48492:7;48477:12;:22;;;;;;;;;;;;:::i;:::-;;48338:169:::0;:::o;46047:28::-;;;;;;;;;;;;;:::o;27266:239::-;27338:7;27358:13;27374:7;:16;27382:7;27374:16;;;;;;;;;;;;;;;;;;;;;27358:32;;27426:1;27409:19;;:5;:19;;;;27401:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27492:5;27485:12;;;27266:239;;;:::o;46117:36::-;;;;:::o;26996:208::-;27068:7;27113:1;27096:19;;:5;:19;;;;27088:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27180:9;:16;27190:5;27180:16;;;;;;;;;;;;;;;;27173:23;;26996:208;;;:::o;7283:94::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7348:21:::1;7366:1;7348:9;:21::i;:::-;7283:94::o:0;46871:281::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46960:9:::1;46955:190;46979:9;;:16;;46975:1;:20;46955:190;;;47049:1;47025:26;;:9;;47035:1;47025:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;47017:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;47129:4;47101:11;:25;47113:9;;47123:1;47113:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47101:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;46997:3;;;;;:::i;:::-;;;;46955:190;;;;46871:281:::0;;:::o;46082:26::-;;;;:::o;6632:87::-;6678:7;6705:6;;;;;;;;;;;6698:13;;6632:87;:::o;49016:96::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49095:9:::1;49083;:21;;;;49016:96:::0;:::o;27741:104::-;27797:13;27830:7;27823:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27741:104;:::o;29424:295::-;29539:12;:10;:12::i;:::-;29527:24;;:8;:24;;;;29519:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29639:8;29594:18;:32;29613:12;:10;:12::i;:::-;29594:32;;;;;;;;;;;;;;;:42;29627:8;29594:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29692:8;29663:48;;29678:12;:10;:12::i;:::-;29663:48;;;29702:8;29663:48;;;;;;:::i;:::-;;;;;;;;29424:295;;:::o;30687:328::-;30862:41;30881:12;:10;:12::i;:::-;30895:7;30862:18;:41::i;:::-;30854:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30968:39;30982:4;30988:2;30992:7;31001:5;30968:13;:39::i;:::-;30687:328;;;;:::o;46006:34::-;;;;;;;;;;;;;:::o;46198:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27916:334::-;27989:13;28023:16;28031:7;28023;:16::i;:::-;28015:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28104:21;28128:10;:8;:10::i;:::-;28104:34;;28180:1;28162:7;28156:21;:25;:86;;;;;;;;;;;;;;;;;28208:7;28217:18;:7;:16;:18::i;:::-;28191:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28156:86;28149:93;;;27916:334;;;:::o;47637:482::-;1780:1;2376:7;;:19;;2368:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1780:1;2509:7;:18;;;;47709:15:::1;;;;;;;;;;;47701:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;47779:9;;47766;:22;;47758:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;47845:11;;47829:13;:11;:13::i;:::-;:27;47821:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;47917:4;47888:33;;:11;:25;47900:12;:10;:12::i;:::-;47888:25;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;47880:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;47991:3;47964:23;47974:12;:10;:12::i;:::-;47964:9;:23::i;:::-;:30;;47956:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48057:5;48029:11;:25;48041:12;:10;:12::i;:::-;48029:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;48073:38;48083:12;:10;:12::i;:::-;48097:13;:11;:13::i;:::-;48073:9;:38::i;:::-;1736:1:::0;2688:7;:22;;;;47637:482::o;48248:82::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48318:4:::1;48301:14;;:21;;;;;;;;;;;;;;;;;;48248:82::o:0;29790:164::-;29887:4;29911:18;:25;29930:5;29911:25;;;;;;;;;;;;;;;:35;29937:8;29911:35;;;;;;;;;;;;;;;;;;;;;;;;;29904:42;;29790:164;;;;:::o;46240:32::-;;;;;;;;;;;;;:::o;48910:98::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48985:15:::1;;;;;;;;;;;48984:16;48966:15;;:34;;;;;;;;;;;;;;;;;;48910:98::o:0;7532:192::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7641:1:::1;7621:22;;:8;:22;;;;7613:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7697:19;7707:8;7697:9;:19::i;:::-;7532:192:::0;:::o;8678:387::-;8738:4;8946:12;9013:7;9001:20;8993:28;;9056:1;9049:4;:8;9042:15;;;8678:387;;;:::o;38617:126::-;;;;:::o;26639:293::-;26741:4;26789:25;26774:40;;;:11;:40;;;;:101;;;;26842:33;26827:48;;;:11;:48;;;;26774:101;:150;;;;26888:36;26912:11;26888:23;:36::i;:::-;26774:150;26758:166;;26639:293;;;:::o;32525:127::-;32590:4;32642:1;32614:30;;:7;:16;32622:7;32614:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32607:37;;32525:127;;;:::o;5420:98::-;5473:7;5500:10;5493:17;;5420:98;:::o;36507:174::-;36609:2;36582:15;:24;36598:7;36582:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36665:7;36661:2;36627:46;;36636:23;36651:7;36636:14;:23::i;:::-;36627:46;;;;;;;;;;;;36507:174;;:::o;46765:98::-;46811:7;46854:1;46838:13;:11;:13::i;:::-;:17;;;;:::i;:::-;46831:24;;46765:98;:::o;33509:110::-;33585:26;33595:2;33599:7;33585:26;;;;;;;;;;;;:9;:26::i;:::-;33509:110;;:::o;32819:348::-;32912:4;32937:16;32945:7;32937;:16::i;:::-;32929:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33013:13;33029:23;33044:7;33029:14;:23::i;:::-;33013:39;;33082:5;33071:16;;:7;:16;;;:51;;;;33115:7;33091:31;;:20;33103:7;33091:11;:20::i;:::-;:31;;;33071:51;:87;;;;33126:32;33143:5;33150:7;33126:16;:32::i;:::-;33071:87;33063:96;;;32819:348;;;;:::o;35811:578::-;35970:4;35943:31;;:23;35958:7;35943:14;:23::i;:::-;:31;;;35935:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36053:1;36039:16;;:2;:16;;;;36031:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36109:39;36130:4;36136:2;36140:7;36109:20;:39::i;:::-;36213:29;36230:1;36234:7;36213:8;:29::i;:::-;36274:1;36255:9;:15;36265:4;36255:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36303:1;36286:9;:13;36296:2;36286:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36334:2;36315:7;:16;36323:7;36315:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36373:7;36369:2;36354:27;;36363:4;36354:27;;;;;;;;;;;;35811:578;;;:::o;7732:173::-;7788:16;7807:6;;;;;;;;;;;7788:25;;7833:8;7824:6;;:17;;;;;;;;;;;;;;;;;;7888:8;7857:40;;7878:8;7857:40;;;;;;;;;;;;7777:128;7732:173;:::o;31897:315::-;32054:28;32064:4;32070:2;32074:7;32054:9;:28::i;:::-;32101:48;32124:4;32130:2;32134:7;32143:5;32101:22;:48::i;:::-;32093:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31897:315;;;;:::o;48127:113::-;48187:13;48220:12;48213:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48127:113;:::o;3036:723::-;3092:13;3322:1;3313:5;:10;3309:53;;;3340:10;;;;;;;;;;;;;;;;;;;;;3309:53;3372:12;3387:5;3372:20;;3403:14;3428:78;3443:1;3435:4;:9;3428:78;;3461:8;;;;;:::i;:::-;;;;3492:2;3484:10;;;;;:::i;:::-;;;3428:78;;;3516:19;3548:6;3538:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3516:39;;3566:154;3582:1;3573:5;:10;3566:154;;3610:1;3600:11;;;;;:::i;:::-;;;3677:2;3669:5;:10;;;;:::i;:::-;3656:2;:24;;;;:::i;:::-;3643:39;;3626:6;3633;3626:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3706:2;3697:11;;;;;:::i;:::-;;;3566:154;;;3744:6;3730:21;;;;;3036:723;;;;:::o;18618:157::-;18703:4;18742:25;18727:40;;;:11;:40;;;;18720:47;;18618:157;;;:::o;33846:321::-;33976:18;33982:2;33986:7;33976:5;:18::i;:::-;34027:54;34058:1;34062:2;34066:7;34075:5;34027:22;:54::i;:::-;34005:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33846:321;;;:::o;41356:589::-;41500:45;41527:4;41533:2;41537:7;41500:26;:45::i;:::-;41578:1;41562:18;;:4;:18;;;41558:187;;;41597:40;41629:7;41597:31;:40::i;:::-;41558:187;;;41667:2;41659:10;;:4;:10;;;41655:90;;41686:47;41719:4;41725:7;41686:32;:47::i;:::-;41655:90;41558:187;41773:1;41759:16;;:2;:16;;;41755:183;;;41792:45;41829:7;41792:36;:45::i;:::-;41755:183;;;41865:4;41859:10;;:2;:10;;;41855:83;;41886:40;41914:2;41918:7;41886:27;:40::i;:::-;41855:83;41755:183;41356:589;;;:::o;37246:799::-;37401:4;37422:15;:2;:13;;;:15::i;:::-;37418:620;;;37474:2;37458:36;;;37495:12;:10;:12::i;:::-;37509:4;37515:7;37524:5;37458:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37454:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37717:1;37700:6;:13;:18;37696:272;;;37743:60;;;;;;;;;;:::i;:::-;;;;;;;;37696:272;37918:6;37912:13;37903:6;37899:2;37895:15;37888:38;37454:529;37591:41;;;37581:51;;;:6;:51;;;;37574:58;;;;;37418:620;38022:4;38015:11;;37246:799;;;;;;;:::o;34503:382::-;34597:1;34583:16;;:2;:16;;;;34575:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34656:16;34664:7;34656;:16::i;:::-;34655:17;34647:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34718:45;34747:1;34751:2;34755:7;34718:20;:45::i;:::-;34793:1;34776:9;:13;34786:2;34776:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34824:2;34805:7;:16;34813:7;34805:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34869:7;34865:2;34844:33;;34861:1;34844:33;;;;;;;;;;;;34503:382;;:::o;42668:164::-;42772:10;:17;;;;42745:15;:24;42761:7;42745:24;;;;;;;;;;;:44;;;;42800:10;42816:7;42800:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42668:164;:::o;43459:988::-;43725:22;43775:1;43750:22;43767:4;43750:16;:22::i;:::-;:26;;;;:::i;:::-;43725:51;;43787:18;43808:17;:26;43826:7;43808:26;;;;;;;;;;;;43787:47;;43955:14;43941:10;:28;43937:328;;43986:19;44008:12;:18;44021:4;44008:18;;;;;;;;;;;;;;;:34;44027:14;44008:34;;;;;;;;;;;;43986:56;;44092:11;44059:12;:18;44072:4;44059:18;;;;;;;;;;;;;;;:30;44078:10;44059:30;;;;;;;;;;;:44;;;;44209:10;44176:17;:30;44194:11;44176:30;;;;;;;;;;;:43;;;;43971:294;43937:328;44361:17;:26;44379:7;44361:26;;;;;;;;;;;44354:33;;;44405:12;:18;44418:4;44405:18;;;;;;;;;;;;;;;:34;44424:14;44405:34;;;;;;;;;;;44398:41;;;43540:907;;43459:988;;:::o;44742:1079::-;44995:22;45040:1;45020:10;:17;;;;:21;;;;:::i;:::-;44995:46;;45052:18;45073:15;:24;45089:7;45073:24;;;;;;;;;;;;45052:45;;45424:19;45446:10;45457:14;45446:26;;;;;;;;:::i;:::-;;;;;;;;;;45424:48;;45510:11;45485:10;45496;45485:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45621:10;45590:15;:28;45606:11;45590:28;;;;;;;;;;;:41;;;;45762:15;:24;45778:7;45762:24;;;;;;;;;;;45755:31;;;45797:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44813:1008;;;44742:1079;:::o;42246:221::-;42331:14;42348:20;42365:2;42348:16;:20::i;:::-;42331:37;;42406:7;42379:12;:16;42392:2;42379:16;;;;;;;;;;;;;;;:24;42396:6;42379:24;;;;;;;;;;;:34;;;;42453:6;42424:17;:26;42442:7;42424:26;;;;;;;;;;;:35;;;;42320:147;42246:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:117;5170:1;5167;5160:12;5184:180;5232:77;5229:1;5222:88;5329:4;5326:1;5319:15;5353:4;5350:1;5343:15;5370:281;5453:27;5475:4;5453:27;:::i;:::-;5445:6;5441:40;5583:6;5571:10;5568:22;5547:18;5535:10;5532:34;5529:62;5526:88;;;5594:18;;:::i;:::-;5526:88;5634:10;5630:2;5623:22;5413:238;5370:281;;:::o;5657:129::-;5691:6;5718:20;;:::i;:::-;5708:30;;5747:33;5775:4;5767:6;5747:33;:::i;:::-;5657:129;;;:::o;5792:308::-;5854:4;5944:18;5936:6;5933:30;5930:56;;;5966:18;;:::i;:::-;5930:56;6004:29;6026:6;6004:29;:::i;:::-;5996:37;;6088:4;6082;6078:15;6070:23;;5792:308;;;:::o;6106:154::-;6190:6;6185:3;6180;6167:30;6252:1;6243:6;6238:3;6234:16;6227:27;6106:154;;;:::o;6266:412::-;6344:5;6369:66;6385:49;6427:6;6385:49;:::i;:::-;6369:66;:::i;:::-;6360:75;;6458:6;6451:5;6444:21;6496:4;6489:5;6485:16;6534:3;6525:6;6520:3;6516:16;6513:25;6510:112;;;6541:79;;:::i;:::-;6510:112;6631:41;6665:6;6660:3;6655;6631:41;:::i;:::-;6350:328;6266:412;;;;;:::o;6698:340::-;6754:5;6803:3;6796:4;6788:6;6784:17;6780:27;6770:122;;6811:79;;:::i;:::-;6770:122;6928:6;6915:20;6953:79;7028:3;7020:6;7013:4;7005:6;7001:17;6953:79;:::i;:::-;6944:88;;6760:278;6698:340;;;;:::o;7044:509::-;7113:6;7162:2;7150:9;7141:7;7137:23;7133:32;7130:119;;;7168:79;;:::i;:::-;7130:119;7316:1;7305:9;7301:17;7288:31;7346:18;7338:6;7335:30;7332:117;;;7368:79;;:::i;:::-;7332:117;7473:63;7528:7;7519:6;7508:9;7504:22;7473:63;:::i;:::-;7463:73;;7259:287;7044:509;;;;:::o;7559:118::-;7646:24;7664:5;7646:24;:::i;:::-;7641:3;7634:37;7559:118;;:::o;7683:222::-;7776:4;7814:2;7803:9;7799:18;7791:26;;7827:71;7895:1;7884:9;7880:17;7871:6;7827:71;:::i;:::-;7683:222;;;;:::o;7911:619::-;7988:6;7996;8004;8053:2;8041:9;8032:7;8028:23;8024:32;8021:119;;;8059:79;;:::i;:::-;8021:119;8179:1;8204:53;8249:7;8240:6;8229:9;8225:22;8204:53;:::i;:::-;8194:63;;8150:117;8306:2;8332:53;8377:7;8368:6;8357:9;8353:22;8332:53;:::i;:::-;8322:63;;8277:118;8434:2;8460:53;8505:7;8496:6;8485:9;8481:22;8460:53;:::i;:::-;8450:63;;8405:118;7911:619;;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:117::-;8980:1;8977;8970:12;8994:117;9103:1;9100;9093:12;9134:568;9207:8;9217:6;9267:3;9260:4;9252:6;9248:17;9244:27;9234:122;;9275:79;;:::i;:::-;9234:122;9388:6;9375:20;9365:30;;9418:18;9410:6;9407:30;9404:117;;;9440:79;;:::i;:::-;9404:117;9554:4;9546:6;9542:17;9530:29;;9608:3;9600:4;9592:6;9588:17;9578:8;9574:32;9571:41;9568:128;;;9615:79;;:::i;:::-;9568:128;9134:568;;;;;:::o;9708:559::-;9794:6;9802;9851:2;9839:9;9830:7;9826:23;9822:32;9819:119;;;9857:79;;:::i;:::-;9819:119;10005:1;9994:9;9990:17;9977:31;10035:18;10027:6;10024:30;10021:117;;;10057:79;;:::i;:::-;10021:117;10170:80;10242:7;10233:6;10222:9;10218:22;10170:80;:::i;:::-;10152:98;;;;9948:312;9708:559;;;;;:::o;10273:116::-;10343:21;10358:5;10343:21;:::i;:::-;10336:5;10333:32;10323:60;;10379:1;10376;10369:12;10323:60;10273:116;:::o;10395:133::-;10438:5;10476:6;10463:20;10454:29;;10492:30;10516:5;10492:30;:::i;:::-;10395:133;;;;:::o;10534:468::-;10599:6;10607;10656:2;10644:9;10635:7;10631:23;10627:32;10624:119;;;10662:79;;:::i;:::-;10624:119;10782:1;10807:53;10852:7;10843:6;10832:9;10828:22;10807:53;:::i;:::-;10797:63;;10753:117;10909:2;10935:50;10977:7;10968:6;10957:9;10953:22;10935:50;:::i;:::-;10925:60;;10880:115;10534:468;;;;;:::o;11008:307::-;11069:4;11159:18;11151:6;11148:30;11145:56;;;11181:18;;:::i;:::-;11145:56;11219:29;11241:6;11219:29;:::i;:::-;11211:37;;11303:4;11297;11293:15;11285:23;;11008:307;;;:::o;11321:410::-;11398:5;11423:65;11439:48;11480:6;11439:48;:::i;:::-;11423:65;:::i;:::-;11414:74;;11511:6;11504:5;11497:21;11549:4;11542:5;11538:16;11587:3;11578:6;11573:3;11569:16;11566:25;11563:112;;;11594:79;;:::i;:::-;11563:112;11684:41;11718:6;11713:3;11708;11684:41;:::i;:::-;11404:327;11321:410;;;;;:::o;11750:338::-;11805:5;11854:3;11847:4;11839:6;11835:17;11831:27;11821:122;;11862:79;;:::i;:::-;11821:122;11979:6;11966:20;12004:78;12078:3;12070:6;12063:4;12055:6;12051:17;12004:78;:::i;:::-;11995:87;;11811:277;11750:338;;;;:::o;12094:943::-;12189:6;12197;12205;12213;12262:3;12250:9;12241:7;12237:23;12233:33;12230:120;;;12269:79;;:::i;:::-;12230:120;12389:1;12414:53;12459:7;12450:6;12439:9;12435:22;12414:53;:::i;:::-;12404:63;;12360:117;12516:2;12542:53;12587:7;12578:6;12567:9;12563:22;12542:53;:::i;:::-;12532:63;;12487:118;12644:2;12670:53;12715:7;12706:6;12695:9;12691:22;12670:53;:::i;:::-;12660:63;;12615:118;12800:2;12789:9;12785:18;12772:32;12831:18;12823:6;12820:30;12817:117;;;12853:79;;:::i;:::-;12817:117;12958:62;13012:7;13003:6;12992:9;12988:22;12958:62;:::i;:::-;12948:72;;12743:287;12094:943;;;;;;;:::o;13043:474::-;13111:6;13119;13168:2;13156:9;13147:7;13143:23;13139:32;13136:119;;;13174:79;;:::i;:::-;13136:119;13294:1;13319:53;13364:7;13355:6;13344:9;13340:22;13319:53;:::i;:::-;13309:63;;13265:117;13421:2;13447:53;13492:7;13483:6;13472:9;13468:22;13447:53;:::i;:::-;13437:63;;13392:118;13043:474;;;;;:::o;13523:180::-;13571:77;13568:1;13561:88;13668:4;13665:1;13658:15;13692:4;13689:1;13682:15;13709:320;13753:6;13790:1;13784:4;13780:12;13770:22;;13837:1;13831:4;13827:12;13858:18;13848:81;;13914:4;13906:6;13902:17;13892:27;;13848:81;13976:2;13968:6;13965:14;13945:18;13942:38;13939:84;;;13995:18;;:::i;:::-;13939:84;13760:269;13709:320;;;:::o;14035:231::-;14175:34;14171:1;14163:6;14159:14;14152:58;14244:14;14239:2;14231:6;14227:15;14220:39;14035:231;:::o;14272:366::-;14414:3;14435:67;14499:2;14494:3;14435:67;:::i;:::-;14428:74;;14511:93;14600:3;14511:93;:::i;:::-;14629:2;14624:3;14620:12;14613:19;;14272:366;;;:::o;14644:419::-;14810:4;14848:2;14837:9;14833:18;14825:26;;14897:9;14891:4;14887:20;14883:1;14872:9;14868:17;14861:47;14925:131;15051:4;14925:131;:::i;:::-;14917:139;;14644:419;;;:::o;15069:220::-;15209:34;15205:1;15197:6;15193:14;15186:58;15278:3;15273:2;15265:6;15261:15;15254:28;15069:220;:::o;15295:366::-;15437:3;15458:67;15522:2;15517:3;15458:67;:::i;:::-;15451:74;;15534:93;15623:3;15534:93;:::i;:::-;15652:2;15647:3;15643:12;15636:19;;15295:366;;;:::o;15667:419::-;15833:4;15871:2;15860:9;15856:18;15848:26;;15920:9;15914:4;15910:20;15906:1;15895:9;15891:17;15884:47;15948:131;16074:4;15948:131;:::i;:::-;15940:139;;15667:419;;;:::o;16092:243::-;16232:34;16228:1;16220:6;16216:14;16209:58;16301:26;16296:2;16288:6;16284:15;16277:51;16092:243;:::o;16341:366::-;16483:3;16504:67;16568:2;16563:3;16504:67;:::i;:::-;16497:74;;16580:93;16669:3;16580:93;:::i;:::-;16698:2;16693:3;16689:12;16682:19;;16341:366;;;:::o;16713:419::-;16879:4;16917:2;16906:9;16902:18;16894:26;;16966:9;16960:4;16956:20;16952:1;16941:9;16937:17;16930:47;16994:131;17120:4;16994:131;:::i;:::-;16986:139;;16713:419;;;:::o;17138:182::-;17278:34;17274:1;17266:6;17262:14;17255:58;17138:182;:::o;17326:366::-;17468:3;17489:67;17553:2;17548:3;17489:67;:::i;:::-;17482:74;;17565:93;17654:3;17565:93;:::i;:::-;17683:2;17678:3;17674:12;17667:19;;17326:366;;;:::o;17698:419::-;17864:4;17902:2;17891:9;17887:18;17879:26;;17951:9;17945:4;17941:20;17937:1;17926:9;17922:17;17915:47;17979:131;18105:4;17979:131;:::i;:::-;17971:139;;17698:419;;;:::o;18123:181::-;18263:33;18259:1;18251:6;18247:14;18240:57;18123:181;:::o;18310:366::-;18452:3;18473:67;18537:2;18532:3;18473:67;:::i;:::-;18466:74;;18549:93;18638:3;18549:93;:::i;:::-;18667:2;18662:3;18658:12;18651:19;;18310:366;;;:::o;18682:419::-;18848:4;18886:2;18875:9;18871:18;18863:26;;18935:9;18929:4;18925:20;18921:1;18910:9;18906:17;18899:47;18963:131;19089:4;18963:131;:::i;:::-;18955:139;;18682:419;;;:::o;19107:165::-;19247:17;19243:1;19235:6;19231:14;19224:41;19107:165;:::o;19278:366::-;19420:3;19441:67;19505:2;19500:3;19441:67;:::i;:::-;19434:74;;19517:93;19606:3;19517:93;:::i;:::-;19635:2;19630:3;19626:12;19619:19;;19278:366;;;:::o;19650:419::-;19816:4;19854:2;19843:9;19839:18;19831:26;;19903:9;19897:4;19893:20;19889:1;19878:9;19874:17;19867:47;19931:131;20057:4;19931:131;:::i;:::-;19923:139;;19650:419;;;:::o;20075:167::-;20215:19;20211:1;20203:6;20199:14;20192:43;20075:167;:::o;20248:366::-;20390:3;20411:67;20475:2;20470:3;20411:67;:::i;:::-;20404:74;;20487:93;20576:3;20487:93;:::i;:::-;20605:2;20600:3;20596:12;20589:19;;20248:366;;;:::o;20620:419::-;20786:4;20824:2;20813:9;20809:18;20801:26;;20873:9;20867:4;20863:20;20859:1;20848:9;20844:17;20837:47;20901:131;21027:4;20901:131;:::i;:::-;20893:139;;20620:419;;;:::o;21045:158::-;21185:10;21181:1;21173:6;21169:14;21162:34;21045:158;:::o;21209:365::-;21351:3;21372:66;21436:1;21431:3;21372:66;:::i;:::-;21365:73;;21447:93;21536:3;21447:93;:::i;:::-;21565:2;21560:3;21556:12;21549:19;;21209:365;;;:::o;21580:419::-;21746:4;21784:2;21773:9;21769:18;21761:26;;21833:9;21827:4;21823:20;21819:1;21808:9;21804:17;21797:47;21861:131;21987:4;21861:131;:::i;:::-;21853:139;;21580:419;;;:::o;22005:169::-;22145:21;22141:1;22133:6;22129:14;22122:45;22005:169;:::o;22180:366::-;22322:3;22343:67;22407:2;22402:3;22343:67;:::i;:::-;22336:74;;22419:93;22508:3;22419:93;:::i;:::-;22537:2;22532:3;22528:12;22521:19;;22180:366;;;:::o;22552:419::-;22718:4;22756:2;22745:9;22741:18;22733:26;;22805:9;22799:4;22795:20;22791:1;22780:9;22776:17;22769:47;22833:131;22959:4;22833:131;:::i;:::-;22825:139;;22552:419;;;:::o;22977:236::-;23117:34;23113:1;23105:6;23101:14;23094:58;23186:19;23181:2;23173:6;23169:15;23162:44;22977:236;:::o;23219:366::-;23361:3;23382:67;23446:2;23441:3;23382:67;:::i;:::-;23375:74;;23458:93;23547:3;23458:93;:::i;:::-;23576:2;23571:3;23567:12;23560:19;;23219:366;;;:::o;23591:419::-;23757:4;23795:2;23784:9;23780:18;23772:26;;23844:9;23838:4;23834:20;23830:1;23819:9;23815:17;23808:47;23872:131;23998:4;23872:131;:::i;:::-;23864:139;;23591:419;;;:::o;24016:230::-;24156:34;24152:1;24144:6;24140:14;24133:58;24225:13;24220:2;24212:6;24208:15;24201:38;24016:230;:::o;24252:366::-;24394:3;24415:67;24479:2;24474:3;24415:67;:::i;:::-;24408:74;;24491:93;24580:3;24491:93;:::i;:::-;24609:2;24604:3;24600:12;24593:19;;24252:366;;;:::o;24624:419::-;24790:4;24828:2;24817:9;24813:18;24805:26;;24877:9;24871:4;24867:20;24863:1;24852:9;24848:17;24841:47;24905:131;25031:4;24905:131;:::i;:::-;24897:139;;24624:419;;;:::o;25049:231::-;25189:34;25185:1;25177:6;25173:14;25166:58;25258:14;25253:2;25245:6;25241:15;25234:39;25049:231;:::o;25286:366::-;25428:3;25449:67;25513:2;25508:3;25449:67;:::i;:::-;25442:74;;25525:93;25614:3;25525:93;:::i;:::-;25643:2;25638:3;25634:12;25627:19;;25286:366;;;:::o;25658:419::-;25824:4;25862:2;25851:9;25847:18;25839:26;;25911:9;25905:4;25901:20;25897:1;25886:9;25882:17;25875:47;25939:131;26065:4;25939:131;:::i;:::-;25931:139;;25658:419;;;:::o;26083:180::-;26131:77;26128:1;26121:88;26228:4;26225:1;26218:15;26252:4;26249:1;26242:15;26269:171;26409:23;26405:1;26397:6;26393:14;26386:47;26269:171;:::o;26446:366::-;26588:3;26609:67;26673:2;26668:3;26609:67;:::i;:::-;26602:74;;26685:93;26774:3;26685:93;:::i;:::-;26803:2;26798:3;26794:12;26787:19;;26446:366;;;:::o;26818:419::-;26984:4;27022:2;27011:9;27007:18;26999:26;;27071:9;27065:4;27061:20;27057:1;27046:9;27042:17;27035:47;27099:131;27225:4;27099:131;:::i;:::-;27091:139;;26818:419;;;:::o;27243:228::-;27383:34;27379:1;27371:6;27367:14;27360:58;27452:11;27447:2;27439:6;27435:15;27428:36;27243:228;:::o;27477:366::-;27619:3;27640:67;27704:2;27699:3;27640:67;:::i;:::-;27633:74;;27716:93;27805:3;27716:93;:::i;:::-;27834:2;27829:3;27825:12;27818:19;;27477:366;;;:::o;27849:419::-;28015:4;28053:2;28042:9;28038:18;28030:26;;28102:9;28096:4;28092:20;28088:1;28077:9;28073:17;28066:47;28130:131;28256:4;28130:131;:::i;:::-;28122:139;;27849:419;;;:::o;28274:229::-;28414:34;28410:1;28402:6;28398:14;28391:58;28483:12;28478:2;28470:6;28466:15;28459:37;28274:229;:::o;28509:366::-;28651:3;28672:67;28736:2;28731:3;28672:67;:::i;:::-;28665:74;;28748:93;28837:3;28748:93;:::i;:::-;28866:2;28861:3;28857:12;28850:19;;28509:366;;;:::o;28881:419::-;29047:4;29085:2;29074:9;29070:18;29062:26;;29134:9;29128:4;29124:20;29120:1;29109:9;29105:17;29098:47;29162:131;29288:4;29162:131;:::i;:::-;29154:139;;28881:419;;;:::o;29306:180::-;29446:32;29442:1;29434:6;29430:14;29423:56;29306:180;:::o;29492:366::-;29634:3;29655:67;29719:2;29714:3;29655:67;:::i;:::-;29648:74;;29731:93;29820:3;29731:93;:::i;:::-;29849:2;29844:3;29840:12;29833:19;;29492:366;;;:::o;29864:419::-;30030:4;30068:2;30057:9;30053:18;30045:26;;30117:9;30111:4;30107:20;30103:1;30092:9;30088:17;30081:47;30145:131;30271:4;30145:131;:::i;:::-;30137:139;;29864:419;;;:::o;30289:180::-;30337:77;30334:1;30327:88;30434:4;30431:1;30424:15;30458:4;30455:1;30448:15;30475:233;30514:3;30537:24;30555:5;30537:24;:::i;:::-;30528:33;;30583:66;30576:5;30573:77;30570:103;;;30653:18;;:::i;:::-;30570:103;30700:1;30693:5;30689:13;30682:20;;30475:233;;;:::o;30714:175::-;30854:27;30850:1;30842:6;30838:14;30831:51;30714:175;:::o;30895:366::-;31037:3;31058:67;31122:2;31117:3;31058:67;:::i;:::-;31051:74;;31134:93;31223:3;31134:93;:::i;:::-;31252:2;31247:3;31243:12;31236:19;;30895:366;;;:::o;31267:419::-;31433:4;31471:2;31460:9;31456:18;31448:26;;31520:9;31514:4;31510:20;31506:1;31495:9;31491:17;31484:47;31548:131;31674:4;31548:131;:::i;:::-;31540:139;;31267:419;;;:::o;31692:234::-;31832:34;31828:1;31820:6;31816:14;31809:58;31901:17;31896:2;31888:6;31884:15;31877:42;31692:234;:::o;31932:366::-;32074:3;32095:67;32159:2;32154:3;32095:67;:::i;:::-;32088:74;;32171:93;32260:3;32171:93;:::i;:::-;32289:2;32284:3;32280:12;32273:19;;31932:366;;;:::o;32304:419::-;32470:4;32508:2;32497:9;32493:18;32485:26;;32557:9;32551:4;32547:20;32543:1;32532:9;32528:17;32521:47;32585:131;32711:4;32585:131;:::i;:::-;32577:139;;32304:419;;;:::o;32729:148::-;32831:11;32868:3;32853:18;;32729:148;;;;:::o;32883:377::-;32989:3;33017:39;33050:5;33017:39;:::i;:::-;33072:89;33154:6;33149:3;33072:89;:::i;:::-;33065:96;;33170:52;33215:6;33210:3;33203:4;33196:5;33192:16;33170:52;:::i;:::-;33247:6;33242:3;33238:16;33231:23;;32993:267;32883:377;;;;:::o;33266:435::-;33446:3;33468:95;33559:3;33550:6;33468:95;:::i;:::-;33461:102;;33580:95;33671:3;33662:6;33580:95;:::i;:::-;33573:102;;33692:3;33685:10;;33266:435;;;;;:::o;33707:168::-;33847:20;33843:1;33835:6;33831:14;33824:44;33707:168;:::o;33881:366::-;34023:3;34044:67;34108:2;34103:3;34044:67;:::i;:::-;34037:74;;34120:93;34209:3;34120:93;:::i;:::-;34238:2;34233:3;34229:12;34222:19;;33881:366;;;:::o;34253:419::-;34419:4;34457:2;34446:9;34442:18;34434:26;;34506:9;34500:4;34496:20;34492:1;34481:9;34477:17;34470:47;34534:131;34660:4;34534:131;:::i;:::-;34526:139;;34253:419;;;:::o;34678:169::-;34818:21;34814:1;34806:6;34802:14;34795:45;34678:169;:::o;34853:366::-;34995:3;35016:67;35080:2;35075:3;35016:67;:::i;:::-;35009:74;;35092:93;35181:3;35092:93;:::i;:::-;35210:2;35205:3;35201:12;35194:19;;34853:366;;;:::o;35225:419::-;35391:4;35429:2;35418:9;35414:18;35406:26;;35478:9;35472:4;35468:20;35464:1;35453:9;35449:17;35442:47;35506:131;35632:4;35506:131;:::i;:::-;35498:139;;35225:419;;;:::o;35650:225::-;35790:34;35786:1;35778:6;35774:14;35767:58;35859:8;35854:2;35846:6;35842:15;35835:33;35650:225;:::o;35881:366::-;36023:3;36044:67;36108:2;36103:3;36044:67;:::i;:::-;36037:74;;36120:93;36209:3;36120:93;:::i;:::-;36238:2;36233:3;36229:12;36222:19;;35881:366;;;:::o;36253:419::-;36419:4;36457:2;36446:9;36442:18;36434:26;;36506:9;36500:4;36496:20;36492:1;36481:9;36477:17;36470:47;36534:131;36660:4;36534:131;:::i;:::-;36526:139;;36253:419;;;:::o;36678:305::-;36718:3;36737:20;36755:1;36737:20;:::i;:::-;36732:25;;36771:20;36789:1;36771:20;:::i;:::-;36766:25;;36925:1;36857:66;36853:74;36850:1;36847:81;36844:107;;;36931:18;;:::i;:::-;36844:107;36975:1;36972;36968:9;36961:16;;36678:305;;;;:::o;36989:231::-;37129:34;37125:1;37117:6;37113:14;37106:58;37198:14;37193:2;37185:6;37181:15;37174:39;36989:231;:::o;37226:366::-;37368:3;37389:67;37453:2;37448:3;37389:67;:::i;:::-;37382:74;;37465:93;37554:3;37465:93;:::i;:::-;37583:2;37578:3;37574:12;37567:19;;37226:366;;;:::o;37598:419::-;37764:4;37802:2;37791:9;37787:18;37779:26;;37851:9;37845:4;37841:20;37837:1;37826:9;37822:17;37815:47;37879:131;38005:4;37879:131;:::i;:::-;37871:139;;37598:419;;;:::o;38023:228::-;38163:34;38159:1;38151:6;38147:14;38140:58;38232:11;38227:2;38219:6;38215:15;38208:36;38023:228;:::o;38257:366::-;38399:3;38420:67;38484:2;38479:3;38420:67;:::i;:::-;38413:74;;38496:93;38585:3;38496:93;:::i;:::-;38614:2;38609:3;38605:12;38598:19;;38257:366;;;:::o;38629:419::-;38795:4;38833:2;38822:9;38818:18;38810:26;;38882:9;38876:4;38872:20;38868:1;38857:9;38853:17;38846:47;38910:131;39036:4;38910:131;:::i;:::-;38902:139;;38629:419;;;:::o;39054:223::-;39194:34;39190:1;39182:6;39178:14;39171:58;39263:6;39258:2;39250:6;39246:15;39239:31;39054:223;:::o;39283:366::-;39425:3;39446:67;39510:2;39505:3;39446:67;:::i;:::-;39439:74;;39522:93;39611:3;39522:93;:::i;:::-;39640:2;39635:3;39631:12;39624:19;;39283:366;;;:::o;39655:419::-;39821:4;39859:2;39848:9;39844:18;39836:26;;39908:9;39902:4;39898:20;39894:1;39883:9;39879:17;39872:47;39936:131;40062:4;39936:131;:::i;:::-;39928:139;;39655:419;;;:::o;40080:191::-;40120:4;40140:20;40158:1;40140:20;:::i;:::-;40135:25;;40174:20;40192:1;40174:20;:::i;:::-;40169:25;;40213:1;40210;40207:8;40204:34;;;40218:18;;:::i;:::-;40204:34;40263:1;40260;40256:9;40248:17;;40080:191;;;;:::o;40277:237::-;40417:34;40413:1;40405:6;40401:14;40394:58;40486:20;40481:2;40473:6;40469:15;40462:45;40277:237;:::o;40520:366::-;40662:3;40683:67;40747:2;40742:3;40683:67;:::i;:::-;40676:74;;40759:93;40848:3;40759:93;:::i;:::-;40877:2;40872:3;40868:12;40861:19;;40520:366;;;:::o;40892:419::-;41058:4;41096:2;41085:9;41081:18;41073:26;;41145:9;41139:4;41135:20;41131:1;41120:9;41116:17;41109:47;41173:131;41299:4;41173:131;:::i;:::-;41165:139;;40892:419;;;:::o;41317:180::-;41365:77;41362:1;41355:88;41462:4;41459:1;41452:15;41486:4;41483:1;41476:15;41503:185;41543:1;41560:20;41578:1;41560:20;:::i;:::-;41555:25;;41594:20;41612:1;41594:20;:::i;:::-;41589:25;;41633:1;41623:35;;41638:18;;:::i;:::-;41623:35;41680:1;41677;41673:9;41668:14;;41503:185;;;;:::o;41694:176::-;41726:1;41743:20;41761:1;41743:20;:::i;:::-;41738:25;;41777:20;41795:1;41777:20;:::i;:::-;41772:25;;41816:1;41806:35;;41821:18;;:::i;:::-;41806:35;41862:1;41859;41855:9;41850:14;;41694:176;;;;:::o;41876:98::-;41927:6;41961:5;41955:12;41945:22;;41876:98;;;:::o;41980:168::-;42063:11;42097:6;42092:3;42085:19;42137:4;42132:3;42128:14;42113:29;;41980:168;;;;:::o;42154:360::-;42240:3;42268:38;42300:5;42268:38;:::i;:::-;42322:70;42385:6;42380:3;42322:70;:::i;:::-;42315:77;;42401:52;42446:6;42441:3;42434:4;42427:5;42423:16;42401:52;:::i;:::-;42478:29;42500:6;42478:29;:::i;:::-;42473:3;42469:39;42462:46;;42244:270;42154:360;;;;:::o;42520:640::-;42715:4;42753:3;42742:9;42738:19;42730:27;;42767:71;42835:1;42824:9;42820:17;42811:6;42767:71;:::i;:::-;42848:72;42916:2;42905:9;42901:18;42892:6;42848:72;:::i;:::-;42930;42998:2;42987:9;42983:18;42974:6;42930:72;:::i;:::-;43049:9;43043:4;43039:20;43034:2;43023:9;43019:18;43012:48;43077:76;43148:4;43139:6;43077:76;:::i;:::-;43069:84;;42520:640;;;;;;;:::o;43166:141::-;43222:5;43253:6;43247:13;43238:22;;43269:32;43295:5;43269:32;:::i;:::-;43166:141;;;;:::o;43313:349::-;43382:6;43431:2;43419:9;43410:7;43406:23;43402:32;43399:119;;;43437:79;;:::i;:::-;43399:119;43557:1;43582:63;43637:7;43628:6;43617:9;43613:22;43582:63;:::i;:::-;43572:73;;43528:127;43313:349;;;;:::o;43668:182::-;43808:34;43804:1;43796:6;43792:14;43785:58;43668:182;:::o;43856:366::-;43998:3;44019:67;44083:2;44078:3;44019:67;:::i;:::-;44012:74;;44095:93;44184:3;44095:93;:::i;:::-;44213:2;44208:3;44204:12;44197:19;;43856:366;;;:::o;44228:419::-;44394:4;44432:2;44421:9;44417:18;44409:26;;44481:9;44475:4;44471:20;44467:1;44456:9;44452:17;44445:47;44509:131;44635:4;44509:131;:::i;:::-;44501:139;;44228:419;;;:::o;44653:178::-;44793:30;44789:1;44781:6;44777:14;44770:54;44653:178;:::o;44837:366::-;44979:3;45000:67;45064:2;45059:3;45000:67;:::i;:::-;44993:74;;45076:93;45165:3;45076:93;:::i;:::-;45194:2;45189:3;45185:12;45178:19;;44837:366;;;:::o;45209:419::-;45375:4;45413:2;45402:9;45398:18;45390:26;;45462:9;45456:4;45452:20;45448:1;45437:9;45433:17;45426:47;45490:131;45616:4;45490:131;:::i;:::-;45482:139;;45209:419;;;:::o;45634:180::-;45682:77;45679:1;45672:88;45779:4;45776:1;45769:15;45803:4;45800:1;45793:15

Swarm Source

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