ETH Price: $2,487.34 (-1.39%)
Gas: 0.58 Gwei

Token

Anniversary by Metaani ()
 

Overview

Max Total Supply

1,000

Holders

781

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
mwrote.eth
0x624ac37dc2627454024b00f12d2538d6b837eef6
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:
AnniversaryOnEth1ByMetaani

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: AnniversaryOnEth1ByMetaani.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;

import "./OpenzeppelinERC1155.sol"; 

contract AnniversaryOnEth1ByMetaani is ERC1155{
    string public name = "Anniversary by Metaani";
    address public owner;
    uint private tokenId = 1;
    mapping(address => bool) private mintedAddressMap;
    uint public limited = 1000;
    uint public minted = 0;
    uint public endSaleDate = 1662994800;
    bool public isStartingSale = false;
    event freeMinted(address minter);

    modifier isOwner(){
        require( _msgSender() == owner, "Must be owner.");
        _;
    }

    function isOnSale() internal view returns(bool){
        return block.timestamp < endSaleDate ? true : false;
    }

    constructor(string memory _ipfsURL) ERC1155(_ipfsURL){
        owner = _msgSender();
        _setURI(_ipfsURL);
    }

    function freeMint() public {
        require(isStartingSale == true, "Coming soon.");
        require(isOnSale() == true, "Not Available.");
        require(mintedAddressMap[_msgSender()] == false, "Already minted.");
        require(minted < limited, "Reached limited.");
        _mint(_msgSender(), tokenId, 1, "");
        minted++;
        mintedAddressMap[_msgSender()] = true;
        emit freeMinted(_msgSender());
    }

    function toggleIsStartingSale() isOwner() public  {
        isStartingSale = !isStartingSale;
    }

    function afterThat(string memory _newuri) isOwner() public{
        _setURI(_newuri);
    }

}

File 2 of 2: OpenzeppelinERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol)




// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol)




// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)





/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)





/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)





/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}


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



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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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



/**
 * @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;
    }
}


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





/**
 * @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;
    }
}


/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: address zero is not a valid owner");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `ids` and `amounts` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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


Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_ipfsURL","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"freeMinted","type":"event"},{"inputs":[{"internalType":"string","name":"_newuri","type":"string"}],"name":"afterThat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endSaleDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStartingSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","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":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleIsStartingSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526040518060400160405280601681526020017f416e6e6976657273617279206279204d657461616e6900000000000000000000815250600390805190602001906200005192919062000157565b5060016005556103e8600755600060085563631f49706009556000600a60006101000a81548160ff0219169083151502179055503480156200009257600080fd5b506040516200366d3803806200366d8339818101604052810190620000b89190620003a4565b80620000ca816200013360201b60201c565b50620000db6200014f60201b60201c565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200012c816200013360201b60201c565b506200045a565b80600290805190602001906200014b92919062000157565b5050565b600033905090565b828054620001659062000424565b90600052602060002090601f016020900481019282620001895760008555620001d5565b82601f10620001a457805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d4578251825591602001919060010190620001b7565b5b509050620001e49190620001e8565b5090565b5b8082111562000203576000816000905550600101620001e9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002708262000225565b810181811067ffffffffffffffff8211171562000292576200029162000236565b5b80604052505050565b6000620002a762000207565b9050620002b5828262000265565b919050565b600067ffffffffffffffff821115620002d857620002d762000236565b5b620002e38262000225565b9050602081019050919050565b60005b8381101562000310578082015181840152602081019050620002f3565b8381111562000320576000848401525b50505050565b60006200033d6200033784620002ba565b6200029b565b9050828152602081018484840111156200035c576200035b62000220565b5b62000369848285620002f0565b509392505050565b600082601f8301126200038957620003886200021b565b5b81516200039b84826020860162000326565b91505092915050565b600060208284031215620003bd57620003bc62000211565b5b600082015167ffffffffffffffff811115620003de57620003dd62000216565b5b620003ec8482850162000371565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200043d57607f821691505b60208210811415620004545762000453620003f5565b5b50919050565b613203806200046a6000396000f3fe608060405234801561001057600080fd5b506004361061010a5760003560e01c80634f02c420116100a25780638da5cb5b116100715780638da5cb5b14610293578063a22cb465146102b1578063d7d88043146102cd578063e985e9c5146102eb578063f242432a1461031b5761010a565b80634f02c420146102435780635417b7b3146102615780635b70ea9f1461026b578063860a32ec146102755761010a565b80630e89341c116100de5780630e89341c146101ab5780632e81b89e146101db5780632eb2c2d6146101f75780634e1273f4146102135761010a565b8062fdd58e1461010f57806301ffc9a71461013f578063044d63f51461016f57806306fdde031461018d575b600080fd5b61012960048036038101906101249190611c44565b610337565b6040516101369190611c93565b60405180910390f35b61015960048036038101906101549190611d06565b610400565b6040516101669190611d4e565b60405180910390f35b6101776104e2565b6040516101849190611d4e565b60405180910390f35b6101956104f5565b6040516101a29190611e02565b60405180910390f35b6101c560048036038101906101c09190611e24565b610583565b6040516101d29190611e02565b60405180910390f35b6101f560048036038101906101f09190611f86565b610617565b005b610211600480360381019061020c9190612138565b6106ba565b005b61022d600480360381019061022891906122ca565b61075b565b60405161023a9190612400565b60405180910390f35b61024b610874565b6040516102589190611c93565b60405180910390f35b61026961087a565b005b61027361093d565b005b61027d610b9d565b60405161028a9190611c93565b60405180910390f35b61029b610ba3565b6040516102a89190612431565b60405180910390f35b6102cb60048036038101906102c69190612478565b610bc9565b005b6102d5610bdf565b6040516102e29190611c93565b60405180910390f35b610305600480360381019061030091906124b8565b610be5565b6040516103129190611d4e565b60405180910390f35b610335600480360381019061033091906124f8565b610c79565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039f90612601565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104cb57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104db57506104da82610d1a565b5b9050919050565b600a60009054906101000a900460ff1681565b6003805461050290612650565b80601f016020809104026020016040519081016040528092919081815260200182805461052e90612650565b801561057b5780601f106105505761010080835404028352916020019161057b565b820191906000526020600020905b81548152906001019060200180831161055e57829003601f168201915b505050505081565b60606002805461059290612650565b80601f01602080910402602001604051908101604052809291908181526020018280546105be90612650565b801561060b5780601f106105e05761010080835404028352916020019161060b565b820191906000526020600020905b8154815290600101906020018083116105ee57829003601f168201915b50505050509050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610658610d84565b73ffffffffffffffffffffffffffffffffffffffff16146106ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a5906126ce565b60405180910390fd5b6106b781610d8c565b50565b6106c2610d84565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610708575061070785610702610d84565b610be5565b5b610747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073e90612760565b60405180910390fd5b6107548585858585610da6565b5050505050565b606081518351146107a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610798906127f2565b60405180910390fd5b6000835167ffffffffffffffff8111156107be576107bd611e5b565b5b6040519080825280602002602001820160405280156107ec5781602001602082028036833780820191505090505b50905060005b84518110156108695761083985828151811061081157610810612812565b5b602002602001015185838151811061082c5761082b612812565b5b6020026020010151610337565b82828151811061084c5761084b612812565b5b6020026020010181815250508061086290612870565b90506107f2565b508091505092915050565b60085481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108bb610d84565b73ffffffffffffffffffffffffffffffffffffffff1614610911576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610908906126ce565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b60011515600a60009054906101000a900460ff16151514610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098a90612905565b60405180910390fd5b6001151561099f6110c8565b1515146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890612971565b60405180910390fd5b60001515600660006109f1610d84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a72906129dd565b60405180910390fd5b60075460085410610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890612a49565b60405180910390fd5b610ae6610acc610d84565b6005546001604051806020016040528060008152506110e2565b60086000815480929190610af990612870565b9190505550600160066000610b0c610d84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f389fcf062241ddc61b281a1ff2af99684a354c53c5dbd3b7e14f46cb9704af12610b86610d84565b604051610b939190612431565b60405180910390a1565b60075481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bdb610bd4610d84565b8383611293565b5050565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c81610d84565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610cc75750610cc685610cc1610d84565b610be5565b5b610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90612adb565b60405180910390fd5b610d138585858585611400565b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190610da2929190611af9565b5050565b8151835114610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190612b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190612bff565b60405180910390fd5b6000610e64610d84565b9050610e7481878787878761169c565b60005b8451811015611025576000858281518110610e9557610e94612812565b5b602002602001015190506000858381518110610eb457610eb3612812565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90612c91565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461100a9190612cb1565b925050819055505050508061101e90612870565b9050610e77565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161109c929190612d07565b60405180910390a46110b28187878787876116a4565b6110c08187878787876116ac565b505050505050565b600060095442106110da5760006110dd565b60015b905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990612db0565b60405180910390fd5b600061115c610d84565b9050600061116985611884565b9050600061117685611884565b90506111878360008985858961169c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111e69190612cb1565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611264929190612dd0565b60405180910390a461127b836000898585896116a4565b61128a836000898989896118fe565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f990612e6b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113f39190611d4e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790612bff565b60405180910390fd5b600061147a610d84565b9050600061148785611884565b9050600061149485611884565b90506114a483898985858961169c565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153290612c91565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115f09190612cb1565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161166d929190612dd0565b60405180910390a4611683848a8a86868a6116a4565b611691848a8a8a8a8a6118fe565b505050505050505050565b505050505050565b505050505050565b6116cb8473ffffffffffffffffffffffffffffffffffffffff16611ad6565b1561187c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611711959493929190612ee0565b6020604051808303816000875af192505050801561174d57506040513d601f19601f8201168201806040525081019061174a9190612f5d565b60015b6117f357611759612f97565b806308c379a014156117b6575061176e612fb9565b8061177957506117b8565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad9190611e02565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea906130c1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613153565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156118a3576118a2611e5b565b5b6040519080825280602002602001820160405280156118d15781602001602082028036833780820191505090505b50905082816000815181106118e9576118e8612812565b5b60200260200101818152505080915050919050565b61191d8473ffffffffffffffffffffffffffffffffffffffff16611ad6565b15611ace578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611963959493929190613173565b6020604051808303816000875af192505050801561199f57506040513d601f19601f8201168201806040525081019061199c9190612f5d565b60015b611a45576119ab612f97565b806308c379a01415611a0857506119c0612fb9565b806119cb5750611a0a565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff9190611e02565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3c906130c1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390613153565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611b0590612650565b90600052602060002090601f016020900481019282611b275760008555611b6e565b82601f10611b4057805160ff1916838001178555611b6e565b82800160010185558215611b6e579182015b82811115611b6d578251825591602001919060010190611b52565b5b509050611b7b9190611b7f565b5090565b5b80821115611b98576000816000905550600101611b80565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bdb82611bb0565b9050919050565b611beb81611bd0565b8114611bf657600080fd5b50565b600081359050611c0881611be2565b92915050565b6000819050919050565b611c2181611c0e565b8114611c2c57600080fd5b50565b600081359050611c3e81611c18565b92915050565b60008060408385031215611c5b57611c5a611ba6565b5b6000611c6985828601611bf9565b9250506020611c7a85828601611c2f565b9150509250929050565b611c8d81611c0e565b82525050565b6000602082019050611ca86000830184611c84565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ce381611cae565b8114611cee57600080fd5b50565b600081359050611d0081611cda565b92915050565b600060208284031215611d1c57611d1b611ba6565b5b6000611d2a84828501611cf1565b91505092915050565b60008115159050919050565b611d4881611d33565b82525050565b6000602082019050611d636000830184611d3f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611da3578082015181840152602081019050611d88565b83811115611db2576000848401525b50505050565b6000601f19601f8301169050919050565b6000611dd482611d69565b611dde8185611d74565b9350611dee818560208601611d85565b611df781611db8565b840191505092915050565b60006020820190508181036000830152611e1c8184611dc9565b905092915050565b600060208284031215611e3a57611e39611ba6565b5b6000611e4884828501611c2f565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e9382611db8565b810181811067ffffffffffffffff82111715611eb257611eb1611e5b565b5b80604052505050565b6000611ec5611b9c565b9050611ed18282611e8a565b919050565b600067ffffffffffffffff821115611ef157611ef0611e5b565b5b611efa82611db8565b9050602081019050919050565b82818337600083830152505050565b6000611f29611f2484611ed6565b611ebb565b905082815260208101848484011115611f4557611f44611e56565b5b611f50848285611f07565b509392505050565b600082601f830112611f6d57611f6c611e51565b5b8135611f7d848260208601611f16565b91505092915050565b600060208284031215611f9c57611f9b611ba6565b5b600082013567ffffffffffffffff811115611fba57611fb9611bab565b5b611fc684828501611f58565b91505092915050565b600067ffffffffffffffff821115611fea57611fe9611e5b565b5b602082029050602081019050919050565b600080fd5b600061201361200e84611fcf565b611ebb565b9050808382526020820190506020840283018581111561203657612035611ffb565b5b835b8181101561205f578061204b8882611c2f565b845260208401935050602081019050612038565b5050509392505050565b600082601f83011261207e5761207d611e51565b5b813561208e848260208601612000565b91505092915050565b600067ffffffffffffffff8211156120b2576120b1611e5b565b5b6120bb82611db8565b9050602081019050919050565b60006120db6120d684612097565b611ebb565b9050828152602081018484840111156120f7576120f6611e56565b5b612102848285611f07565b509392505050565b600082601f83011261211f5761211e611e51565b5b813561212f8482602086016120c8565b91505092915050565b600080600080600060a0868803121561215457612153611ba6565b5b600061216288828901611bf9565b955050602061217388828901611bf9565b945050604086013567ffffffffffffffff81111561219457612193611bab565b5b6121a088828901612069565b935050606086013567ffffffffffffffff8111156121c1576121c0611bab565b5b6121cd88828901612069565b925050608086013567ffffffffffffffff8111156121ee576121ed611bab565b5b6121fa8882890161210a565b9150509295509295909350565b600067ffffffffffffffff82111561222257612221611e5b565b5b602082029050602081019050919050565b600061224661224184612207565b611ebb565b9050808382526020820190506020840283018581111561226957612268611ffb565b5b835b81811015612292578061227e8882611bf9565b84526020840193505060208101905061226b565b5050509392505050565b600082601f8301126122b1576122b0611e51565b5b81356122c1848260208601612233565b91505092915050565b600080604083850312156122e1576122e0611ba6565b5b600083013567ffffffffffffffff8111156122ff576122fe611bab565b5b61230b8582860161229c565b925050602083013567ffffffffffffffff81111561232c5761232b611bab565b5b61233885828601612069565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61237781611c0e565b82525050565b6000612389838361236e565b60208301905092915050565b6000602082019050919050565b60006123ad82612342565b6123b7818561234d565b93506123c28361235e565b8060005b838110156123f35781516123da888261237d565b97506123e583612395565b9250506001810190506123c6565b5085935050505092915050565b6000602082019050818103600083015261241a81846123a2565b905092915050565b61242b81611bd0565b82525050565b60006020820190506124466000830184612422565b92915050565b61245581611d33565b811461246057600080fd5b50565b6000813590506124728161244c565b92915050565b6000806040838503121561248f5761248e611ba6565b5b600061249d85828601611bf9565b92505060206124ae85828601612463565b9150509250929050565b600080604083850312156124cf576124ce611ba6565b5b60006124dd85828601611bf9565b92505060206124ee85828601611bf9565b9150509250929050565b600080600080600060a0868803121561251457612513611ba6565b5b600061252288828901611bf9565b955050602061253388828901611bf9565b945050604061254488828901611c2f565b935050606061255588828901611c2f565b925050608086013567ffffffffffffffff81111561257657612575611bab565b5b6125828882890161210a565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006125eb602a83611d74565b91506125f68261258f565b604082019050919050565b6000602082019050818103600083015261261a816125de565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061266857607f821691505b6020821081141561267c5761267b612621565b5b50919050565b7f4d757374206265206f776e65722e000000000000000000000000000000000000600082015250565b60006126b8600e83611d74565b91506126c382612682565b602082019050919050565b600060208201905081810360008301526126e7816126ab565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061274a603283611d74565b9150612755826126ee565b604082019050919050565b600060208201905081810360008301526127798161273d565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006127dc602983611d74565b91506127e782612780565b604082019050919050565b6000602082019050818103600083015261280b816127cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061287b82611c0e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156128ae576128ad612841565b5b600182019050919050565b7f436f6d696e6720736f6f6e2e0000000000000000000000000000000000000000600082015250565b60006128ef600c83611d74565b91506128fa826128b9565b602082019050919050565b6000602082019050818103600083015261291e816128e2565b9050919050565b7f4e6f7420417661696c61626c652e000000000000000000000000000000000000600082015250565b600061295b600e83611d74565b915061296682612925565b602082019050919050565b6000602082019050818103600083015261298a8161294e565b9050919050565b7f416c7265616479206d696e7465642e0000000000000000000000000000000000600082015250565b60006129c7600f83611d74565b91506129d282612991565b602082019050919050565b600060208201905081810360008301526129f6816129ba565b9050919050565b7f52656163686564206c696d697465642e00000000000000000000000000000000600082015250565b6000612a33601083611d74565b9150612a3e826129fd565b602082019050919050565b60006020820190508181036000830152612a6281612a26565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000612ac5602983611d74565b9150612ad082612a69565b604082019050919050565b60006020820190508181036000830152612af481612ab8565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612b57602883611d74565b9150612b6282612afb565b604082019050919050565b60006020820190508181036000830152612b8681612b4a565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612be9602583611d74565b9150612bf482612b8d565b604082019050919050565b60006020820190508181036000830152612c1881612bdc565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c7b602a83611d74565b9150612c8682612c1f565b604082019050919050565b60006020820190508181036000830152612caa81612c6e565b9050919050565b6000612cbc82611c0e565b9150612cc783611c0e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612cfc57612cfb612841565b5b828201905092915050565b60006040820190508181036000830152612d2181856123a2565b90508181036020830152612d3581846123a2565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d9a602183611d74565b9150612da582612d3e565b604082019050919050565b60006020820190508181036000830152612dc981612d8d565b9050919050565b6000604082019050612de56000830185611c84565b612df26020830184611c84565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612e55602983611d74565b9150612e6082612df9565b604082019050919050565b60006020820190508181036000830152612e8481612e48565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612eb282612e8b565b612ebc8185612e96565b9350612ecc818560208601611d85565b612ed581611db8565b840191505092915050565b600060a082019050612ef56000830188612422565b612f026020830187612422565b8181036040830152612f1481866123a2565b90508181036060830152612f2881856123a2565b90508181036080830152612f3c8184612ea7565b90509695505050505050565b600081519050612f5781611cda565b92915050565b600060208284031215612f7357612f72611ba6565b5b6000612f8184828501612f48565b91505092915050565b60008160e01c9050919050565b600060033d1115612fb65760046000803e612fb3600051612f8a565b90505b90565b600060443d1015612fc95761304c565b612fd1611b9c565b60043d036004823e80513d602482011167ffffffffffffffff82111715612ff957505061304c565b808201805167ffffffffffffffff811115613017575050505061304c565b80602083010160043d03850181111561303457505050505061304c565b61304382602001850186611e8a565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006130ab603483611d74565b91506130b68261304f565b604082019050919050565b600060208201905081810360008301526130da8161309e565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061313d602883611d74565b9150613148826130e1565b604082019050919050565b6000602082019050818103600083015261316c81613130565b9050919050565b600060a0820190506131886000830188612422565b6131956020830187612422565b6131a26040830186611c84565b6131af6060830185611c84565b81810360808301526131c18184612ea7565b9050969550505050505056fea2646970667358221220a0d4fcd5bd2fd7df0b449d19afcbbdcf74408338762c9df63e793786128fc5e164736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000037697066733a2f2f516d58363241396f793458504d4e593876537a534c4e7a4c6e326d5132474431776875695a4b53704547664172782f31000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010a5760003560e01c80634f02c420116100a25780638da5cb5b116100715780638da5cb5b14610293578063a22cb465146102b1578063d7d88043146102cd578063e985e9c5146102eb578063f242432a1461031b5761010a565b80634f02c420146102435780635417b7b3146102615780635b70ea9f1461026b578063860a32ec146102755761010a565b80630e89341c116100de5780630e89341c146101ab5780632e81b89e146101db5780632eb2c2d6146101f75780634e1273f4146102135761010a565b8062fdd58e1461010f57806301ffc9a71461013f578063044d63f51461016f57806306fdde031461018d575b600080fd5b61012960048036038101906101249190611c44565b610337565b6040516101369190611c93565b60405180910390f35b61015960048036038101906101549190611d06565b610400565b6040516101669190611d4e565b60405180910390f35b6101776104e2565b6040516101849190611d4e565b60405180910390f35b6101956104f5565b6040516101a29190611e02565b60405180910390f35b6101c560048036038101906101c09190611e24565b610583565b6040516101d29190611e02565b60405180910390f35b6101f560048036038101906101f09190611f86565b610617565b005b610211600480360381019061020c9190612138565b6106ba565b005b61022d600480360381019061022891906122ca565b61075b565b60405161023a9190612400565b60405180910390f35b61024b610874565b6040516102589190611c93565b60405180910390f35b61026961087a565b005b61027361093d565b005b61027d610b9d565b60405161028a9190611c93565b60405180910390f35b61029b610ba3565b6040516102a89190612431565b60405180910390f35b6102cb60048036038101906102c69190612478565b610bc9565b005b6102d5610bdf565b6040516102e29190611c93565b60405180910390f35b610305600480360381019061030091906124b8565b610be5565b6040516103129190611d4e565b60405180910390f35b610335600480360381019061033091906124f8565b610c79565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039f90612601565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104cb57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104db57506104da82610d1a565b5b9050919050565b600a60009054906101000a900460ff1681565b6003805461050290612650565b80601f016020809104026020016040519081016040528092919081815260200182805461052e90612650565b801561057b5780601f106105505761010080835404028352916020019161057b565b820191906000526020600020905b81548152906001019060200180831161055e57829003601f168201915b505050505081565b60606002805461059290612650565b80601f01602080910402602001604051908101604052809291908181526020018280546105be90612650565b801561060b5780601f106105e05761010080835404028352916020019161060b565b820191906000526020600020905b8154815290600101906020018083116105ee57829003601f168201915b50505050509050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610658610d84565b73ffffffffffffffffffffffffffffffffffffffff16146106ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a5906126ce565b60405180910390fd5b6106b781610d8c565b50565b6106c2610d84565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610708575061070785610702610d84565b610be5565b5b610747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073e90612760565b60405180910390fd5b6107548585858585610da6565b5050505050565b606081518351146107a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610798906127f2565b60405180910390fd5b6000835167ffffffffffffffff8111156107be576107bd611e5b565b5b6040519080825280602002602001820160405280156107ec5781602001602082028036833780820191505090505b50905060005b84518110156108695761083985828151811061081157610810612812565b5b602002602001015185838151811061082c5761082b612812565b5b6020026020010151610337565b82828151811061084c5761084b612812565b5b6020026020010181815250508061086290612870565b90506107f2565b508091505092915050565b60085481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108bb610d84565b73ffffffffffffffffffffffffffffffffffffffff1614610911576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610908906126ce565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b60011515600a60009054906101000a900460ff16151514610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098a90612905565b60405180910390fd5b6001151561099f6110c8565b1515146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890612971565b60405180910390fd5b60001515600660006109f1610d84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a72906129dd565b60405180910390fd5b60075460085410610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890612a49565b60405180910390fd5b610ae6610acc610d84565b6005546001604051806020016040528060008152506110e2565b60086000815480929190610af990612870565b9190505550600160066000610b0c610d84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f389fcf062241ddc61b281a1ff2af99684a354c53c5dbd3b7e14f46cb9704af12610b86610d84565b604051610b939190612431565b60405180910390a1565b60075481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bdb610bd4610d84565b8383611293565b5050565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c81610d84565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610cc75750610cc685610cc1610d84565b610be5565b5b610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90612adb565b60405180910390fd5b610d138585858585611400565b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190610da2929190611af9565b5050565b8151835114610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190612b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190612bff565b60405180910390fd5b6000610e64610d84565b9050610e7481878787878761169c565b60005b8451811015611025576000858281518110610e9557610e94612812565b5b602002602001015190506000858381518110610eb457610eb3612812565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90612c91565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461100a9190612cb1565b925050819055505050508061101e90612870565b9050610e77565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161109c929190612d07565b60405180910390a46110b28187878787876116a4565b6110c08187878787876116ac565b505050505050565b600060095442106110da5760006110dd565b60015b905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990612db0565b60405180910390fd5b600061115c610d84565b9050600061116985611884565b9050600061117685611884565b90506111878360008985858961169c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111e69190612cb1565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611264929190612dd0565b60405180910390a461127b836000898585896116a4565b61128a836000898989896118fe565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f990612e6b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113f39190611d4e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790612bff565b60405180910390fd5b600061147a610d84565b9050600061148785611884565b9050600061149485611884565b90506114a483898985858961169c565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153290612c91565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115f09190612cb1565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161166d929190612dd0565b60405180910390a4611683848a8a86868a6116a4565b611691848a8a8a8a8a6118fe565b505050505050505050565b505050505050565b505050505050565b6116cb8473ffffffffffffffffffffffffffffffffffffffff16611ad6565b1561187c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611711959493929190612ee0565b6020604051808303816000875af192505050801561174d57506040513d601f19601f8201168201806040525081019061174a9190612f5d565b60015b6117f357611759612f97565b806308c379a014156117b6575061176e612fb9565b8061177957506117b8565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad9190611e02565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea906130c1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613153565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156118a3576118a2611e5b565b5b6040519080825280602002602001820160405280156118d15781602001602082028036833780820191505090505b50905082816000815181106118e9576118e8612812565b5b60200260200101818152505080915050919050565b61191d8473ffffffffffffffffffffffffffffffffffffffff16611ad6565b15611ace578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611963959493929190613173565b6020604051808303816000875af192505050801561199f57506040513d601f19601f8201168201806040525081019061199c9190612f5d565b60015b611a45576119ab612f97565b806308c379a01415611a0857506119c0612fb9565b806119cb5750611a0a565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff9190611e02565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3c906130c1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390613153565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611b0590612650565b90600052602060002090601f016020900481019282611b275760008555611b6e565b82601f10611b4057805160ff1916838001178555611b6e565b82800160010185558215611b6e579182015b82811115611b6d578251825591602001919060010190611b52565b5b509050611b7b9190611b7f565b5090565b5b80821115611b98576000816000905550600101611b80565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bdb82611bb0565b9050919050565b611beb81611bd0565b8114611bf657600080fd5b50565b600081359050611c0881611be2565b92915050565b6000819050919050565b611c2181611c0e565b8114611c2c57600080fd5b50565b600081359050611c3e81611c18565b92915050565b60008060408385031215611c5b57611c5a611ba6565b5b6000611c6985828601611bf9565b9250506020611c7a85828601611c2f565b9150509250929050565b611c8d81611c0e565b82525050565b6000602082019050611ca86000830184611c84565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ce381611cae565b8114611cee57600080fd5b50565b600081359050611d0081611cda565b92915050565b600060208284031215611d1c57611d1b611ba6565b5b6000611d2a84828501611cf1565b91505092915050565b60008115159050919050565b611d4881611d33565b82525050565b6000602082019050611d636000830184611d3f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611da3578082015181840152602081019050611d88565b83811115611db2576000848401525b50505050565b6000601f19601f8301169050919050565b6000611dd482611d69565b611dde8185611d74565b9350611dee818560208601611d85565b611df781611db8565b840191505092915050565b60006020820190508181036000830152611e1c8184611dc9565b905092915050565b600060208284031215611e3a57611e39611ba6565b5b6000611e4884828501611c2f565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e9382611db8565b810181811067ffffffffffffffff82111715611eb257611eb1611e5b565b5b80604052505050565b6000611ec5611b9c565b9050611ed18282611e8a565b919050565b600067ffffffffffffffff821115611ef157611ef0611e5b565b5b611efa82611db8565b9050602081019050919050565b82818337600083830152505050565b6000611f29611f2484611ed6565b611ebb565b905082815260208101848484011115611f4557611f44611e56565b5b611f50848285611f07565b509392505050565b600082601f830112611f6d57611f6c611e51565b5b8135611f7d848260208601611f16565b91505092915050565b600060208284031215611f9c57611f9b611ba6565b5b600082013567ffffffffffffffff811115611fba57611fb9611bab565b5b611fc684828501611f58565b91505092915050565b600067ffffffffffffffff821115611fea57611fe9611e5b565b5b602082029050602081019050919050565b600080fd5b600061201361200e84611fcf565b611ebb565b9050808382526020820190506020840283018581111561203657612035611ffb565b5b835b8181101561205f578061204b8882611c2f565b845260208401935050602081019050612038565b5050509392505050565b600082601f83011261207e5761207d611e51565b5b813561208e848260208601612000565b91505092915050565b600067ffffffffffffffff8211156120b2576120b1611e5b565b5b6120bb82611db8565b9050602081019050919050565b60006120db6120d684612097565b611ebb565b9050828152602081018484840111156120f7576120f6611e56565b5b612102848285611f07565b509392505050565b600082601f83011261211f5761211e611e51565b5b813561212f8482602086016120c8565b91505092915050565b600080600080600060a0868803121561215457612153611ba6565b5b600061216288828901611bf9565b955050602061217388828901611bf9565b945050604086013567ffffffffffffffff81111561219457612193611bab565b5b6121a088828901612069565b935050606086013567ffffffffffffffff8111156121c1576121c0611bab565b5b6121cd88828901612069565b925050608086013567ffffffffffffffff8111156121ee576121ed611bab565b5b6121fa8882890161210a565b9150509295509295909350565b600067ffffffffffffffff82111561222257612221611e5b565b5b602082029050602081019050919050565b600061224661224184612207565b611ebb565b9050808382526020820190506020840283018581111561226957612268611ffb565b5b835b81811015612292578061227e8882611bf9565b84526020840193505060208101905061226b565b5050509392505050565b600082601f8301126122b1576122b0611e51565b5b81356122c1848260208601612233565b91505092915050565b600080604083850312156122e1576122e0611ba6565b5b600083013567ffffffffffffffff8111156122ff576122fe611bab565b5b61230b8582860161229c565b925050602083013567ffffffffffffffff81111561232c5761232b611bab565b5b61233885828601612069565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61237781611c0e565b82525050565b6000612389838361236e565b60208301905092915050565b6000602082019050919050565b60006123ad82612342565b6123b7818561234d565b93506123c28361235e565b8060005b838110156123f35781516123da888261237d565b97506123e583612395565b9250506001810190506123c6565b5085935050505092915050565b6000602082019050818103600083015261241a81846123a2565b905092915050565b61242b81611bd0565b82525050565b60006020820190506124466000830184612422565b92915050565b61245581611d33565b811461246057600080fd5b50565b6000813590506124728161244c565b92915050565b6000806040838503121561248f5761248e611ba6565b5b600061249d85828601611bf9565b92505060206124ae85828601612463565b9150509250929050565b600080604083850312156124cf576124ce611ba6565b5b60006124dd85828601611bf9565b92505060206124ee85828601611bf9565b9150509250929050565b600080600080600060a0868803121561251457612513611ba6565b5b600061252288828901611bf9565b955050602061253388828901611bf9565b945050604061254488828901611c2f565b935050606061255588828901611c2f565b925050608086013567ffffffffffffffff81111561257657612575611bab565b5b6125828882890161210a565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006125eb602a83611d74565b91506125f68261258f565b604082019050919050565b6000602082019050818103600083015261261a816125de565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061266857607f821691505b6020821081141561267c5761267b612621565b5b50919050565b7f4d757374206265206f776e65722e000000000000000000000000000000000000600082015250565b60006126b8600e83611d74565b91506126c382612682565b602082019050919050565b600060208201905081810360008301526126e7816126ab565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061274a603283611d74565b9150612755826126ee565b604082019050919050565b600060208201905081810360008301526127798161273d565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006127dc602983611d74565b91506127e782612780565b604082019050919050565b6000602082019050818103600083015261280b816127cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061287b82611c0e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156128ae576128ad612841565b5b600182019050919050565b7f436f6d696e6720736f6f6e2e0000000000000000000000000000000000000000600082015250565b60006128ef600c83611d74565b91506128fa826128b9565b602082019050919050565b6000602082019050818103600083015261291e816128e2565b9050919050565b7f4e6f7420417661696c61626c652e000000000000000000000000000000000000600082015250565b600061295b600e83611d74565b915061296682612925565b602082019050919050565b6000602082019050818103600083015261298a8161294e565b9050919050565b7f416c7265616479206d696e7465642e0000000000000000000000000000000000600082015250565b60006129c7600f83611d74565b91506129d282612991565b602082019050919050565b600060208201905081810360008301526129f6816129ba565b9050919050565b7f52656163686564206c696d697465642e00000000000000000000000000000000600082015250565b6000612a33601083611d74565b9150612a3e826129fd565b602082019050919050565b60006020820190508181036000830152612a6281612a26565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000612ac5602983611d74565b9150612ad082612a69565b604082019050919050565b60006020820190508181036000830152612af481612ab8565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612b57602883611d74565b9150612b6282612afb565b604082019050919050565b60006020820190508181036000830152612b8681612b4a565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612be9602583611d74565b9150612bf482612b8d565b604082019050919050565b60006020820190508181036000830152612c1881612bdc565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c7b602a83611d74565b9150612c8682612c1f565b604082019050919050565b60006020820190508181036000830152612caa81612c6e565b9050919050565b6000612cbc82611c0e565b9150612cc783611c0e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612cfc57612cfb612841565b5b828201905092915050565b60006040820190508181036000830152612d2181856123a2565b90508181036020830152612d3581846123a2565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d9a602183611d74565b9150612da582612d3e565b604082019050919050565b60006020820190508181036000830152612dc981612d8d565b9050919050565b6000604082019050612de56000830185611c84565b612df26020830184611c84565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612e55602983611d74565b9150612e6082612df9565b604082019050919050565b60006020820190508181036000830152612e8481612e48565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612eb282612e8b565b612ebc8185612e96565b9350612ecc818560208601611d85565b612ed581611db8565b840191505092915050565b600060a082019050612ef56000830188612422565b612f026020830187612422565b8181036040830152612f1481866123a2565b90508181036060830152612f2881856123a2565b90508181036080830152612f3c8184612ea7565b90509695505050505050565b600081519050612f5781611cda565b92915050565b600060208284031215612f7357612f72611ba6565b5b6000612f8184828501612f48565b91505092915050565b60008160e01c9050919050565b600060033d1115612fb65760046000803e612fb3600051612f8a565b90505b90565b600060443d1015612fc95761304c565b612fd1611b9c565b60043d036004823e80513d602482011167ffffffffffffffff82111715612ff957505061304c565b808201805167ffffffffffffffff811115613017575050505061304c565b80602083010160043d03850181111561303457505050505061304c565b61304382602001850186611e8a565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006130ab603483611d74565b91506130b68261304f565b604082019050919050565b600060208201905081810360008301526130da8161309e565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061313d602883611d74565b9150613148826130e1565b604082019050919050565b6000602082019050818103600083015261316c81613130565b9050919050565b600060a0820190506131886000830188612422565b6131956020830187612422565b6131a26040830186611c84565b6131af6060830185611c84565b81810360808301526131c18184612ea7565b9050969550505050505056fea2646970667358221220a0d4fcd5bd2fd7df0b449d19afcbbdcf74408338762c9df63e793786128fc5e164736f6c634300080a0033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000037697066733a2f2f516d58363241396f793458504d4e593876537a534c4e7a4c6e326d5132474431776875695a4b53704547664172782f31000000000000000000

-----Decoded View---------------
Arg [0] : _ipfsURL (string): ipfs://QmX62A9oy4XPMNY8vSzSLNzLn2mQ2GD1whuiZKSpEGfArx/1

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000037
Arg [2] : 697066733a2f2f516d58363241396f793458504d4e593876537a534c4e7a4c6e
Arg [3] : 326d5132474431776875695a4b53704547664172782f31000000000000000000


Deployed Bytecode Sourcemap

101:1416:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20340:230:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19363:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;425:34:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;154:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20084:105:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1419:93:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22278:442:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20736:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;353:22:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1310:101;;;:::i;:::-;;866:436;;;:::i;:::-;;320:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;206:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21333:155:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;382:36:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21560:168:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21800:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20340:230;20426:7;20473:1;20454:21;;:7;:21;;;;20446:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;20540:9;:13;20550:2;20540:13;;;;;;;;;;;:22;20554:7;20540:22;;;;;;;;;;;;;;;;20533:29;;20340:230;;;;:::o;19363:310::-;19465:4;19517:26;19502:41;;;:11;:41;;;;:110;;;;19575:37;19560:52;;;:11;:52;;;;19502:110;:163;;;;19629:36;19653:11;19629:23;:36::i;:::-;19502:163;19482:183;;19363:310;;;:::o;425:34:0:-;;;;;;;;;;;;;:::o;154:45::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20084:105:1:-;20144:13;20177:4;20170:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20084:105;;;:::o;1419:93:0:-;561:5;;;;;;;;;;;545:21;;:12;:10;:12::i;:::-;:21;;;536:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1488:16:::1;1496:7;1488;:16::i;:::-;1419:93:::0;:::o;22278:442:1:-;22519:12;:10;:12::i;:::-;22511:20;;:4;:20;;;:60;;;;22535:36;22552:4;22558:12;:10;:12::i;:::-;22535:16;:36::i;:::-;22511:60;22489:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22660:52;22683:4;22689:2;22693:3;22698:7;22707:4;22660:22;:52::i;:::-;22278:442;;;;;:::o;20736:524::-;20892:16;20953:3;:10;20934:8;:15;:29;20926:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21022:30;21069:8;:15;21055:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21022:63;;21103:9;21098:122;21122:8;:15;21118:1;:19;21098:122;;;21178:30;21188:8;21197:1;21188:11;;;;;;;;:::i;:::-;;;;;;;;21201:3;21205:1;21201:6;;;;;;;;:::i;:::-;;;;;;;;21178:9;:30::i;:::-;21159:13;21173:1;21159:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;21139:3;;;;:::i;:::-;;;21098:122;;;;21239:13;21232:20;;;20736:524;;;;:::o;353:22:0:-;;;;:::o;1310:101::-;561:5;;;;;;;;;;;545:21;;:12;:10;:12::i;:::-;:21;;;536:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1389:14:::1;;;;;;;;;;;1388:15;1371:14;;:32;;;;;;;;;;;;;;;;;;1310:101::o:0;866:436::-;930:4;912:22;;:14;;;;;;;;;;;:22;;;904:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;984:4;970:18;;:10;:8;:10::i;:::-;:18;;;962:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;1060:5;1026:39;;:16;:30;1043:12;:10;:12::i;:::-;1026:30;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;1018:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1113:7;;1104:6;;:16;1096:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;1152:35;1158:12;:10;:12::i;:::-;1172:7;;1181:1;1152:35;;;;;;;;;;;;:5;:35::i;:::-;1198:6;;:8;;;;;;;;;:::i;:::-;;;;;;1250:4;1217:16;:30;1234:12;:10;:12::i;:::-;1217:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;1270:24;1281:12;:10;:12::i;:::-;1270:24;;;;;;:::i;:::-;;;;;;;;866:436::o;320:26::-;;;;:::o;206:20::-;;;;;;;;;;;;;:::o;21333:155:1:-;21428:52;21447:12;:10;:12::i;:::-;21461:8;21471;21428:18;:52::i;:::-;21333:155;;:::o;382:36:0:-;;;;:::o;21560:168:1:-;21659:4;21683:18;:27;21702:7;21683:27;;;;;;;;;;;;;;;:37;21711:8;21683:37;;;;;;;;;;;;;;;;;;;;;;;;;21676:44;;21560:168;;;;:::o;21800:401::-;22016:12;:10;:12::i;:::-;22008:20;;:4;:20;;;:60;;;;22032:36;22049:4;22055:12;:10;:12::i;:::-;22032:16;:36::i;:::-;22008:60;21986:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22148:45;22166:4;22172:2;22176;22180:6;22188:4;22148:17;:45::i;:::-;21800:401;;;;;:::o;18287:157::-;18372:4;18411:25;18396:40;;;:11;:40;;;;18389:47;;18287:157;;;:::o;17296:98::-;17349:7;17376:10;17369:17;;17296:98;:::o;26506:88::-;26580:6;26573:4;:13;;;;;;;;;;;;:::i;:::-;;26506:88;:::o;24516:1146::-;24743:7;:14;24729:3;:10;:28;24721:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24835:1;24821:16;;:2;:16;;;;24813:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24892:16;24911:12;:10;:12::i;:::-;24892:31;;24936:60;24957:8;24967:4;24973:2;24977:3;24982:7;24991:4;24936:20;:60::i;:::-;25014:9;25009:421;25033:3;:10;25029:1;:14;25009:421;;;25065:10;25078:3;25082:1;25078:6;;;;;;;;:::i;:::-;;;;;;;;25065:19;;25099:14;25116:7;25124:1;25116:10;;;;;;;;:::i;:::-;;;;;;;;25099:27;;25143:19;25165:9;:13;25175:2;25165:13;;;;;;;;;;;:19;25179:4;25165:19;;;;;;;;;;;;;;;;25143:41;;25222:6;25207:11;:21;;25199:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25355:6;25341:11;:20;25319:9;:13;25329:2;25319:13;;;;;;;;;;;:19;25333:4;25319:19;;;;;;;;;;;;;;;:42;;;;25412:6;25391:9;:13;25401:2;25391:13;;;;;;;;;;;:17;25405:2;25391:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25050:380;;;25045:3;;;;:::i;:::-;;;25009:421;;;;25477:2;25447:47;;25471:4;25447:47;;25461:8;25447:47;;;25481:3;25486:7;25447:47;;;;;;;:::i;:::-;;;;;;;;25507:59;25527:8;25537:4;25543:2;25547:3;25552:7;25561:4;25507:19;:59::i;:::-;25579:75;25615:8;25625:4;25631:2;25635:3;25640:7;25649:4;25579:35;:75::i;:::-;24710:952;24516:1146;;;;;:::o;613:117:0:-;655:4;696:11;;678:15;:29;:44;;717:5;678:44;;;710:4;678:44;671:51;;613:117;:::o;26980:729:1:-;27147:1;27133:16;;:2;:16;;;;27125:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27200:16;27219:12;:10;:12::i;:::-;27200:31;;27242:20;27265:21;27283:2;27265:17;:21::i;:::-;27242:44;;27297:24;27324:25;27342:6;27324:17;:25::i;:::-;27297:52;;27362:66;27383:8;27401:1;27405:2;27409:3;27414:7;27423:4;27362:20;:66::i;:::-;27462:6;27441:9;:13;27451:2;27441:13;;;;;;;;;;;:17;27455:2;27441:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27521:2;27484:52;;27517:1;27484:52;;27499:8;27484:52;;;27525:2;27529:6;27484:52;;;;;;;:::i;:::-;;;;;;;;27549:65;27569:8;27587:1;27591:2;27595:3;27600:7;27609:4;27549:19;:65::i;:::-;27627:74;27658:8;27676:1;27680:2;27684;27688:6;27696:4;27627:30;:74::i;:::-;27114:595;;;26980:729;;;;:::o;31393:331::-;31548:8;31539:17;;:5;:17;;;;31531:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31651:8;31613:18;:25;31632:5;31613:25;;;;;;;;;;;;;;;:35;31639:8;31613:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31697:8;31675:41;;31690:5;31675:41;;;31707:8;31675:41;;;;;;:::i;:::-;;;;;;;;31393:331;;;:::o;23184:974::-;23386:1;23372:16;;:2;:16;;;;23364:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23443:16;23462:12;:10;:12::i;:::-;23443:31;;23485:20;23508:21;23526:2;23508:17;:21::i;:::-;23485:44;;23540:24;23567:25;23585:6;23567:17;:25::i;:::-;23540:52;;23605:60;23626:8;23636:4;23642:2;23646:3;23651:7;23660:4;23605:20;:60::i;:::-;23678:19;23700:9;:13;23710:2;23700:13;;;;;;;;;;;:19;23714:4;23700:19;;;;;;;;;;;;;;;;23678:41;;23753:6;23738:11;:21;;23730:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23878:6;23864:11;:20;23842:9;:13;23852:2;23842:13;;;;;;;;;;;:19;23856:4;23842:19;;;;;;;;;;;;;;;:42;;;;23927:6;23906:9;:13;23916:2;23906:13;;;;;;;;;;;:17;23920:2;23906:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23982:2;23951:46;;23976:4;23951:46;;23966:8;23951:46;;;23986:2;23990:6;23951:46;;;;;;;:::i;:::-;;;;;;;;24010:59;24030:8;24040:4;24046:2;24050:3;24055:7;24064:4;24010:19;:59::i;:::-;24082:68;24113:8;24123:4;24129:2;24133;24137:6;24145:4;24082:30;:68::i;:::-;23353:805;;;;23184:974;;;;;:::o;32682:221::-;;;;;;;:::o;33858:220::-;;;;;;;:::o;34838:813::-;35078:15;:2;:13;;;:15::i;:::-;35074:570;;;35131:2;35114:43;;;35158:8;35168:4;35174:3;35179:7;35188:4;35114:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35110:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35506:6;35499:14;;;;;;;;;;;:::i;:::-;;;;;;;;35110:523;;;35555:62;;;;;;;;;;:::i;:::-;;;;;;;;35110:523;35287:48;;;35275:60;;;:8;:60;;;;35271:159;;35360:50;;;;;;;;;;:::i;:::-;;;;;;;;35271:159;35194:251;35074:570;34838:813;;;;;;:::o;35659:198::-;35725:16;35754:22;35793:1;35779:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35754:41;;35817:7;35806:5;35812:1;35806:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;35844:5;35837:12;;;35659:198;;;:::o;34086:744::-;34301:15;:2;:13;;;:15::i;:::-;34297:526;;;34354:2;34337:38;;;34376:8;34386:4;34392:2;34396:6;34404:4;34337:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34333:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34685:6;34678:14;;;;;;;;;;;:::i;:::-;;;;;;;;34333:479;;;34734:62;;;;;;;;;;:::i;:::-;;;;;;;;34333:479;34471:43;;;34459:55;;;:8;:55;;;;34455:154;;34539:50;;;;;;;;;;:::i;:::-;;;;;;;;34455:154;34410:214;34297:526;34086:744;;;;;;:::o;9374:326::-;9434:4;9691:1;9669:7;:19;;;:23;9662:30;;9374:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:2:-;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:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::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:311::-;7636:4;7726:18;7718:6;7715:30;7712:56;;;7748:18;;:::i;:::-;7712:56;7798:4;7790:6;7786:17;7778:25;;7858:4;7852;7848:15;7840:23;;7559:311;;;:::o;7876:117::-;7985:1;7982;7975:12;8016:710;8112:5;8137:81;8153:64;8210:6;8153:64;:::i;:::-;8137:81;:::i;:::-;8128:90;;8238:5;8267:6;8260:5;8253:21;8301:4;8294:5;8290:16;8283:23;;8354:4;8346:6;8342:17;8334:6;8330:30;8383:3;8375:6;8372:15;8369:122;;;8402:79;;:::i;:::-;8369:122;8517:6;8500:220;8534:6;8529:3;8526:15;8500:220;;;8609:3;8638:37;8671:3;8659:10;8638:37;:::i;:::-;8633:3;8626:50;8705:4;8700:3;8696:14;8689:21;;8576:144;8560:4;8555:3;8551:14;8544:21;;8500:220;;;8504:21;8118:608;;8016:710;;;;;:::o;8749:370::-;8820:5;8869:3;8862:4;8854:6;8850:17;8846:27;8836:122;;8877:79;;:::i;:::-;8836:122;8994:6;8981:20;9019:94;9109:3;9101:6;9094:4;9086:6;9082:17;9019:94;:::i;:::-;9010:103;;8826:293;8749:370;;;;:::o;9125:307::-;9186:4;9276:18;9268:6;9265:30;9262:56;;;9298:18;;:::i;:::-;9262:56;9336:29;9358:6;9336:29;:::i;:::-;9328:37;;9420:4;9414;9410:15;9402:23;;9125:307;;;:::o;9438:410::-;9515:5;9540:65;9556:48;9597:6;9556:48;:::i;:::-;9540:65;:::i;:::-;9531:74;;9628:6;9621:5;9614:21;9666:4;9659:5;9655:16;9704:3;9695:6;9690:3;9686:16;9683:25;9680:112;;;9711:79;;:::i;:::-;9680:112;9801:41;9835:6;9830:3;9825;9801:41;:::i;:::-;9521:327;9438:410;;;;;:::o;9867:338::-;9922:5;9971:3;9964:4;9956:6;9952:17;9948:27;9938:122;;9979:79;;:::i;:::-;9938:122;10096:6;10083:20;10121:78;10195:3;10187:6;10180:4;10172:6;10168:17;10121:78;:::i;:::-;10112:87;;9928:277;9867:338;;;;:::o;10211:1509::-;10365:6;10373;10381;10389;10397;10446:3;10434:9;10425:7;10421:23;10417:33;10414:120;;;10453:79;;:::i;:::-;10414:120;10573:1;10598:53;10643:7;10634:6;10623:9;10619:22;10598:53;:::i;:::-;10588:63;;10544:117;10700:2;10726:53;10771:7;10762:6;10751:9;10747:22;10726:53;:::i;:::-;10716:63;;10671:118;10856:2;10845:9;10841:18;10828:32;10887:18;10879:6;10876:30;10873:117;;;10909:79;;:::i;:::-;10873:117;11014:78;11084:7;11075:6;11064:9;11060:22;11014:78;:::i;:::-;11004:88;;10799:303;11169:2;11158:9;11154:18;11141:32;11200:18;11192:6;11189:30;11186:117;;;11222:79;;:::i;:::-;11186:117;11327:78;11397:7;11388:6;11377:9;11373:22;11327:78;:::i;:::-;11317:88;;11112:303;11482:3;11471:9;11467:19;11454:33;11514:18;11506:6;11503:30;11500:117;;;11536:79;;:::i;:::-;11500:117;11641:62;11695:7;11686:6;11675:9;11671:22;11641:62;:::i;:::-;11631:72;;11425:288;10211:1509;;;;;;;;:::o;11726:311::-;11803:4;11893:18;11885:6;11882:30;11879:56;;;11915:18;;:::i;:::-;11879:56;11965:4;11957:6;11953:17;11945:25;;12025:4;12019;12015:15;12007:23;;11726:311;;;:::o;12060:710::-;12156:5;12181:81;12197:64;12254:6;12197:64;:::i;:::-;12181:81;:::i;:::-;12172:90;;12282:5;12311:6;12304:5;12297:21;12345:4;12338:5;12334:16;12327:23;;12398:4;12390:6;12386:17;12378:6;12374:30;12427:3;12419:6;12416:15;12413:122;;;12446:79;;:::i;:::-;12413:122;12561:6;12544:220;12578:6;12573:3;12570:15;12544:220;;;12653:3;12682:37;12715:3;12703:10;12682:37;:::i;:::-;12677:3;12670:50;12749:4;12744:3;12740:14;12733:21;;12620:144;12604:4;12599:3;12595:14;12588:21;;12544:220;;;12548:21;12162:608;;12060:710;;;;;:::o;12793:370::-;12864:5;12913:3;12906:4;12898:6;12894:17;12890:27;12880:122;;12921:79;;:::i;:::-;12880:122;13038:6;13025:20;13063:94;13153:3;13145:6;13138:4;13130:6;13126:17;13063:94;:::i;:::-;13054:103;;12870:293;12793:370;;;;:::o;13169:894::-;13287:6;13295;13344:2;13332:9;13323:7;13319:23;13315:32;13312:119;;;13350:79;;:::i;:::-;13312:119;13498:1;13487:9;13483:17;13470:31;13528:18;13520:6;13517:30;13514:117;;;13550:79;;:::i;:::-;13514:117;13655:78;13725:7;13716:6;13705:9;13701:22;13655:78;:::i;:::-;13645:88;;13441:302;13810:2;13799:9;13795:18;13782:32;13841:18;13833:6;13830:30;13827:117;;;13863:79;;:::i;:::-;13827:117;13968:78;14038:7;14029:6;14018:9;14014:22;13968:78;:::i;:::-;13958:88;;13753:303;13169:894;;;;;:::o;14069:114::-;14136:6;14170:5;14164:12;14154:22;;14069:114;;;:::o;14189:184::-;14288:11;14322:6;14317:3;14310:19;14362:4;14357:3;14353:14;14338:29;;14189:184;;;;:::o;14379:132::-;14446:4;14469:3;14461:11;;14499:4;14494:3;14490:14;14482:22;;14379:132;;;:::o;14517:108::-;14594:24;14612:5;14594:24;:::i;:::-;14589:3;14582:37;14517:108;;:::o;14631:179::-;14700:10;14721:46;14763:3;14755:6;14721:46;:::i;:::-;14799:4;14794:3;14790:14;14776:28;;14631:179;;;;:::o;14816:113::-;14886:4;14918;14913:3;14909:14;14901:22;;14816:113;;;:::o;14965:732::-;15084:3;15113:54;15161:5;15113:54;:::i;:::-;15183:86;15262:6;15257:3;15183:86;:::i;:::-;15176:93;;15293:56;15343:5;15293:56;:::i;:::-;15372:7;15403:1;15388:284;15413:6;15410:1;15407:13;15388:284;;;15489:6;15483:13;15516:63;15575:3;15560:13;15516:63;:::i;:::-;15509:70;;15602:60;15655:6;15602:60;:::i;:::-;15592:70;;15448:224;15435:1;15432;15428:9;15423:14;;15388:284;;;15392:14;15688:3;15681:10;;15089:608;;;14965:732;;;;:::o;15703:373::-;15846:4;15884:2;15873:9;15869:18;15861:26;;15933:9;15927:4;15923:20;15919:1;15908:9;15904:17;15897:47;15961:108;16064:4;16055:6;15961:108;:::i;:::-;15953:116;;15703:373;;;;:::o;16082:118::-;16169:24;16187:5;16169:24;:::i;:::-;16164:3;16157:37;16082:118;;:::o;16206:222::-;16299:4;16337:2;16326:9;16322:18;16314:26;;16350:71;16418:1;16407:9;16403:17;16394:6;16350:71;:::i;:::-;16206:222;;;;:::o;16434:116::-;16504:21;16519:5;16504:21;:::i;:::-;16497:5;16494:32;16484:60;;16540:1;16537;16530:12;16484:60;16434:116;:::o;16556:133::-;16599:5;16637:6;16624:20;16615:29;;16653:30;16677:5;16653:30;:::i;:::-;16556:133;;;;:::o;16695:468::-;16760:6;16768;16817:2;16805:9;16796:7;16792:23;16788:32;16785:119;;;16823:79;;:::i;:::-;16785:119;16943:1;16968:53;17013:7;17004:6;16993:9;16989:22;16968:53;:::i;:::-;16958:63;;16914:117;17070:2;17096:50;17138:7;17129:6;17118:9;17114:22;17096:50;:::i;:::-;17086:60;;17041:115;16695:468;;;;;:::o;17169:474::-;17237:6;17245;17294:2;17282:9;17273:7;17269:23;17265:32;17262:119;;;17300:79;;:::i;:::-;17262:119;17420:1;17445:53;17490:7;17481:6;17470:9;17466:22;17445:53;:::i;:::-;17435:63;;17391:117;17547:2;17573:53;17618:7;17609:6;17598:9;17594:22;17573:53;:::i;:::-;17563:63;;17518:118;17169:474;;;;;:::o;17649:1089::-;17753:6;17761;17769;17777;17785;17834:3;17822:9;17813:7;17809:23;17805:33;17802:120;;;17841:79;;:::i;:::-;17802:120;17961:1;17986:53;18031:7;18022:6;18011:9;18007:22;17986:53;:::i;:::-;17976:63;;17932:117;18088:2;18114:53;18159:7;18150:6;18139:9;18135:22;18114:53;:::i;:::-;18104:63;;18059:118;18216:2;18242:53;18287:7;18278:6;18267:9;18263:22;18242:53;:::i;:::-;18232:63;;18187:118;18344:2;18370:53;18415:7;18406:6;18395:9;18391:22;18370:53;:::i;:::-;18360:63;;18315:118;18500:3;18489:9;18485:19;18472:33;18532:18;18524:6;18521:30;18518:117;;;18554:79;;:::i;:::-;18518:117;18659:62;18713:7;18704:6;18693:9;18689:22;18659:62;:::i;:::-;18649:72;;18443:288;17649:1089;;;;;;;;:::o;18744:229::-;18884:34;18880:1;18872:6;18868:14;18861:58;18953:12;18948:2;18940:6;18936:15;18929:37;18744:229;:::o;18979:366::-;19121:3;19142:67;19206:2;19201:3;19142:67;:::i;:::-;19135:74;;19218:93;19307:3;19218:93;:::i;:::-;19336:2;19331:3;19327:12;19320:19;;18979:366;;;:::o;19351:419::-;19517:4;19555:2;19544:9;19540:18;19532:26;;19604:9;19598:4;19594:20;19590:1;19579:9;19575:17;19568:47;19632:131;19758:4;19632:131;:::i;:::-;19624:139;;19351:419;;;:::o;19776:180::-;19824:77;19821:1;19814:88;19921:4;19918:1;19911:15;19945:4;19942:1;19935:15;19962:320;20006:6;20043:1;20037:4;20033:12;20023:22;;20090:1;20084:4;20080:12;20111:18;20101:81;;20167:4;20159:6;20155:17;20145:27;;20101:81;20229:2;20221:6;20218:14;20198:18;20195:38;20192:84;;;20248:18;;:::i;:::-;20192:84;20013:269;19962:320;;;:::o;20288:164::-;20428:16;20424:1;20416:6;20412:14;20405:40;20288:164;:::o;20458:366::-;20600:3;20621:67;20685:2;20680:3;20621:67;:::i;:::-;20614:74;;20697:93;20786:3;20697:93;:::i;:::-;20815:2;20810:3;20806:12;20799:19;;20458:366;;;:::o;20830:419::-;20996:4;21034:2;21023:9;21019:18;21011:26;;21083:9;21077:4;21073:20;21069:1;21058:9;21054:17;21047:47;21111:131;21237:4;21111:131;:::i;:::-;21103:139;;20830:419;;;:::o;21255:237::-;21395:34;21391:1;21383:6;21379:14;21372:58;21464:20;21459:2;21451:6;21447:15;21440:45;21255:237;:::o;21498:366::-;21640:3;21661:67;21725:2;21720:3;21661:67;:::i;:::-;21654:74;;21737:93;21826:3;21737:93;:::i;:::-;21855:2;21850:3;21846:12;21839:19;;21498:366;;;:::o;21870:419::-;22036:4;22074:2;22063:9;22059:18;22051:26;;22123:9;22117:4;22113:20;22109:1;22098:9;22094:17;22087:47;22151:131;22277:4;22151:131;:::i;:::-;22143:139;;21870:419;;;:::o;22295:228::-;22435:34;22431:1;22423:6;22419:14;22412:58;22504:11;22499:2;22491:6;22487:15;22480:36;22295:228;:::o;22529:366::-;22671:3;22692:67;22756:2;22751:3;22692:67;:::i;:::-;22685:74;;22768:93;22857:3;22768:93;:::i;:::-;22886:2;22881:3;22877:12;22870:19;;22529:366;;;:::o;22901:419::-;23067:4;23105:2;23094:9;23090:18;23082:26;;23154:9;23148:4;23144:20;23140:1;23129:9;23125:17;23118:47;23182:131;23308:4;23182:131;:::i;:::-;23174:139;;22901:419;;;:::o;23326:180::-;23374:77;23371:1;23364:88;23471:4;23468:1;23461:15;23495:4;23492:1;23485:15;23512:180;23560:77;23557:1;23550:88;23657:4;23654:1;23647:15;23681:4;23678:1;23671:15;23698:233;23737:3;23760:24;23778:5;23760:24;:::i;:::-;23751:33;;23806:66;23799:5;23796:77;23793:103;;;23876:18;;:::i;:::-;23793:103;23923:1;23916:5;23912:13;23905:20;;23698:233;;;:::o;23937:162::-;24077:14;24073:1;24065:6;24061:14;24054:38;23937:162;:::o;24105:366::-;24247:3;24268:67;24332:2;24327:3;24268:67;:::i;:::-;24261:74;;24344:93;24433:3;24344:93;:::i;:::-;24462:2;24457:3;24453:12;24446:19;;24105:366;;;:::o;24477:419::-;24643:4;24681:2;24670:9;24666:18;24658:26;;24730:9;24724:4;24720:20;24716:1;24705:9;24701:17;24694:47;24758:131;24884:4;24758:131;:::i;:::-;24750:139;;24477:419;;;:::o;24902:164::-;25042:16;25038:1;25030:6;25026:14;25019:40;24902:164;:::o;25072:366::-;25214:3;25235:67;25299:2;25294:3;25235:67;:::i;:::-;25228:74;;25311:93;25400:3;25311:93;:::i;:::-;25429:2;25424:3;25420:12;25413:19;;25072:366;;;:::o;25444:419::-;25610:4;25648:2;25637:9;25633:18;25625:26;;25697:9;25691:4;25687:20;25683:1;25672:9;25668:17;25661:47;25725:131;25851:4;25725:131;:::i;:::-;25717:139;;25444:419;;;:::o;25869:165::-;26009:17;26005:1;25997:6;25993:14;25986:41;25869:165;:::o;26040:366::-;26182:3;26203:67;26267:2;26262:3;26203:67;:::i;:::-;26196:74;;26279:93;26368:3;26279:93;:::i;:::-;26397:2;26392:3;26388:12;26381:19;;26040:366;;;:::o;26412:419::-;26578:4;26616:2;26605:9;26601:18;26593:26;;26665:9;26659:4;26655:20;26651:1;26640:9;26636:17;26629:47;26693:131;26819:4;26693:131;:::i;:::-;26685:139;;26412:419;;;:::o;26837:166::-;26977:18;26973:1;26965:6;26961:14;26954:42;26837:166;:::o;27009:366::-;27151:3;27172:67;27236:2;27231:3;27172:67;:::i;:::-;27165:74;;27248:93;27337:3;27248:93;:::i;:::-;27366:2;27361:3;27357:12;27350:19;;27009:366;;;:::o;27381:419::-;27547:4;27585:2;27574:9;27570:18;27562:26;;27634:9;27628:4;27624:20;27620:1;27609:9;27605:17;27598:47;27662:131;27788:4;27662:131;:::i;:::-;27654:139;;27381:419;;;:::o;27806:228::-;27946:34;27942:1;27934:6;27930:14;27923:58;28015:11;28010:2;28002:6;27998:15;27991:36;27806:228;:::o;28040:366::-;28182:3;28203:67;28267:2;28262:3;28203:67;:::i;:::-;28196:74;;28279:93;28368:3;28279:93;:::i;:::-;28397:2;28392:3;28388:12;28381:19;;28040:366;;;:::o;28412:419::-;28578:4;28616:2;28605:9;28601:18;28593:26;;28665:9;28659:4;28655:20;28651:1;28640:9;28636:17;28629:47;28693:131;28819:4;28693:131;:::i;:::-;28685:139;;28412:419;;;:::o;28837:227::-;28977:34;28973:1;28965:6;28961:14;28954:58;29046:10;29041:2;29033:6;29029:15;29022:35;28837:227;:::o;29070:366::-;29212:3;29233:67;29297:2;29292:3;29233:67;:::i;:::-;29226:74;;29309:93;29398:3;29309:93;:::i;:::-;29427:2;29422:3;29418:12;29411:19;;29070:366;;;:::o;29442:419::-;29608:4;29646:2;29635:9;29631:18;29623:26;;29695:9;29689:4;29685:20;29681:1;29670:9;29666:17;29659:47;29723:131;29849:4;29723:131;:::i;:::-;29715:139;;29442:419;;;:::o;29867:224::-;30007:34;30003:1;29995:6;29991:14;29984:58;30076:7;30071:2;30063:6;30059:15;30052:32;29867:224;:::o;30097:366::-;30239:3;30260:67;30324:2;30319:3;30260:67;:::i;:::-;30253:74;;30336:93;30425:3;30336:93;:::i;:::-;30454:2;30449:3;30445:12;30438:19;;30097:366;;;:::o;30469:419::-;30635:4;30673:2;30662:9;30658:18;30650:26;;30722:9;30716:4;30712:20;30708:1;30697:9;30693:17;30686:47;30750:131;30876:4;30750:131;:::i;:::-;30742:139;;30469:419;;;:::o;30894:229::-;31034:34;31030:1;31022:6;31018:14;31011:58;31103:12;31098:2;31090:6;31086:15;31079:37;30894:229;:::o;31129:366::-;31271:3;31292:67;31356:2;31351:3;31292:67;:::i;:::-;31285:74;;31368:93;31457:3;31368:93;:::i;:::-;31486:2;31481:3;31477:12;31470:19;;31129:366;;;:::o;31501:419::-;31667:4;31705:2;31694:9;31690:18;31682:26;;31754:9;31748:4;31744:20;31740:1;31729:9;31725:17;31718:47;31782:131;31908:4;31782:131;:::i;:::-;31774:139;;31501:419;;;:::o;31926:305::-;31966:3;31985:20;32003:1;31985:20;:::i;:::-;31980:25;;32019:20;32037:1;32019:20;:::i;:::-;32014:25;;32173:1;32105:66;32101:74;32098:1;32095:81;32092:107;;;32179:18;;:::i;:::-;32092:107;32223:1;32220;32216:9;32209:16;;31926:305;;;;:::o;32237:634::-;32458:4;32496:2;32485:9;32481:18;32473:26;;32545:9;32539:4;32535:20;32531:1;32520:9;32516:17;32509:47;32573:108;32676:4;32667:6;32573:108;:::i;:::-;32565:116;;32728:9;32722:4;32718:20;32713:2;32702:9;32698:18;32691:48;32756:108;32859:4;32850:6;32756:108;:::i;:::-;32748:116;;32237:634;;;;;:::o;32877:220::-;33017:34;33013:1;33005:6;33001:14;32994:58;33086:3;33081:2;33073:6;33069:15;33062:28;32877:220;:::o;33103:366::-;33245:3;33266:67;33330:2;33325:3;33266:67;:::i;:::-;33259:74;;33342:93;33431:3;33342:93;:::i;:::-;33460:2;33455:3;33451:12;33444:19;;33103:366;;;:::o;33475:419::-;33641:4;33679:2;33668:9;33664:18;33656:26;;33728:9;33722:4;33718:20;33714:1;33703:9;33699:17;33692:47;33756:131;33882:4;33756:131;:::i;:::-;33748:139;;33475:419;;;:::o;33900:332::-;34021:4;34059:2;34048:9;34044:18;34036:26;;34072:71;34140:1;34129:9;34125:17;34116:6;34072:71;:::i;:::-;34153:72;34221:2;34210:9;34206:18;34197:6;34153:72;:::i;:::-;33900:332;;;;;:::o;34238:228::-;34378:34;34374:1;34366:6;34362:14;34355:58;34447:11;34442:2;34434:6;34430:15;34423:36;34238:228;:::o;34472:366::-;34614:3;34635:67;34699:2;34694:3;34635:67;:::i;:::-;34628:74;;34711:93;34800:3;34711:93;:::i;:::-;34829:2;34824:3;34820:12;34813:19;;34472:366;;;:::o;34844:419::-;35010:4;35048:2;35037:9;35033:18;35025:26;;35097:9;35091:4;35087:20;35083:1;35072:9;35068:17;35061:47;35125:131;35251:4;35125:131;:::i;:::-;35117:139;;34844:419;;;:::o;35269:98::-;35320:6;35354:5;35348:12;35338:22;;35269:98;;;:::o;35373:168::-;35456:11;35490:6;35485:3;35478:19;35530:4;35525:3;35521:14;35506:29;;35373:168;;;;:::o;35547:360::-;35633:3;35661:38;35693:5;35661:38;:::i;:::-;35715:70;35778:6;35773:3;35715:70;:::i;:::-;35708:77;;35794:52;35839:6;35834:3;35827:4;35820:5;35816:16;35794:52;:::i;:::-;35871:29;35893:6;35871:29;:::i;:::-;35866:3;35862:39;35855:46;;35637:270;35547:360;;;;:::o;35913:1053::-;36236:4;36274:3;36263:9;36259:19;36251:27;;36288:71;36356:1;36345:9;36341:17;36332:6;36288:71;:::i;:::-;36369:72;36437:2;36426:9;36422:18;36413:6;36369:72;:::i;:::-;36488:9;36482:4;36478:20;36473:2;36462:9;36458:18;36451:48;36516:108;36619:4;36610:6;36516:108;:::i;:::-;36508:116;;36671:9;36665:4;36661:20;36656:2;36645:9;36641:18;36634:48;36699:108;36802:4;36793:6;36699:108;:::i;:::-;36691:116;;36855:9;36849:4;36845:20;36839:3;36828:9;36824:19;36817:49;36883:76;36954:4;36945:6;36883:76;:::i;:::-;36875:84;;35913:1053;;;;;;;;:::o;36972:141::-;37028:5;37059:6;37053:13;37044:22;;37075:32;37101:5;37075:32;:::i;:::-;36972:141;;;;:::o;37119:349::-;37188:6;37237:2;37225:9;37216:7;37212:23;37208:32;37205:119;;;37243:79;;:::i;:::-;37205:119;37363:1;37388:63;37443:7;37434:6;37423:9;37419:22;37388:63;:::i;:::-;37378:73;;37334:127;37119:349;;;;:::o;37474:106::-;37518:8;37567:5;37562:3;37558:15;37537:36;;37474:106;;;:::o;37586:183::-;37621:3;37659:1;37641:16;37638:23;37635:128;;;37697:1;37694;37691;37676:23;37719:34;37750:1;37744:8;37719:34;:::i;:::-;37712:41;;37635:128;37586:183;:::o;37775:711::-;37814:3;37852:4;37834:16;37831:26;37828:39;;;37860:5;;37828:39;37889:20;;:::i;:::-;37964:1;37946:16;37942:24;37939:1;37933:4;37918:49;37997:4;37991:11;38096:16;38089:4;38081:6;38077:17;38074:39;38041:18;38033:6;38030:30;38014:113;38011:146;;;38142:5;;;;38011:146;38188:6;38182:4;38178:17;38224:3;38218:10;38251:18;38243:6;38240:30;38237:43;;;38273:5;;;;;;38237:43;38321:6;38314:4;38309:3;38305:14;38301:27;38380:1;38362:16;38358:24;38352:4;38348:35;38343:3;38340:44;38337:57;;;38387:5;;;;;;;38337:57;38404;38452:6;38446:4;38442:17;38434:6;38430:30;38424:4;38404:57;:::i;:::-;38477:3;38470:10;;37818:668;;;;;37775:711;;:::o;38492:239::-;38632:34;38628:1;38620:6;38616:14;38609:58;38701:22;38696:2;38688:6;38684:15;38677:47;38492:239;:::o;38737:366::-;38879:3;38900:67;38964:2;38959:3;38900:67;:::i;:::-;38893:74;;38976:93;39065:3;38976:93;:::i;:::-;39094:2;39089:3;39085:12;39078:19;;38737:366;;;:::o;39109:419::-;39275:4;39313:2;39302:9;39298:18;39290:26;;39362:9;39356:4;39352:20;39348:1;39337:9;39333:17;39326:47;39390:131;39516:4;39390:131;:::i;:::-;39382:139;;39109:419;;;:::o;39534:227::-;39674:34;39670:1;39662:6;39658:14;39651:58;39743:10;39738:2;39730:6;39726:15;39719:35;39534:227;:::o;39767:366::-;39909:3;39930:67;39994:2;39989:3;39930:67;:::i;:::-;39923:74;;40006:93;40095:3;40006:93;:::i;:::-;40124:2;40119:3;40115:12;40108:19;;39767:366;;;:::o;40139:419::-;40305:4;40343:2;40332:9;40328:18;40320:26;;40392:9;40386:4;40382:20;40378:1;40367:9;40363:17;40356:47;40420:131;40546:4;40420:131;:::i;:::-;40412:139;;40139:419;;;:::o;40564:751::-;40787:4;40825:3;40814:9;40810:19;40802:27;;40839:71;40907:1;40896:9;40892:17;40883:6;40839:71;:::i;:::-;40920:72;40988:2;40977:9;40973:18;40964:6;40920:72;:::i;:::-;41002;41070:2;41059:9;41055:18;41046:6;41002:72;:::i;:::-;41084;41152:2;41141:9;41137:18;41128:6;41084:72;:::i;:::-;41204:9;41198:4;41194:20;41188:3;41177:9;41173:19;41166:49;41232:76;41303:4;41294:6;41232:76;:::i;:::-;41224:84;;40564:751;;;;;;;;:::o

Swarm Source

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