ETH Price: $3,354.94 (+0.91%)

Token

 

Overview

Max Total Supply

184

Holders

51

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x5b9dDcEb15eE855fC54640b3179278EAa5a7A9C9
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:
EvilGeniusPlots

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-19
*/

// Sources flattened with hardhat v2.6.1 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC1155/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC1155/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC1155/extensions/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC1155/[email protected]



pragma solidity ^0.8.0;






/**
 * @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: balance query for the zero address");
        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 {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), 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);

        _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);

        _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 `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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);

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

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

        emit TransferSingle(operator, account, address(0), id, amount);
    }

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

        address operator = _msgSender();

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

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

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

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/access/[email protected]



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File contracts/EvilGeniusPlots.sol



pragma solidity ^0.8.0;



interface IReferenceContract {
    function tokensOfOwner(address owner) external view returns (uint256[] memory);
}

contract EvilGeniusPlots is ERC1155, Ownable {
    using Strings for uint256;

    string public _baseURI;

    mapping(uint256 => bool) public _tokensActive;
    mapping(uint256 => mapping(uint256 => bool)) public _tokensTracked;

    address _referenceContract = 0x5f7Ed81ee49a3D85ff9F2120156b4Cd38383B9cb;

    constructor(string memory baseURI) ERC1155(baseURI) {
        _baseURI = baseURI;
    }

    function mint(uint256 tokenId, uint256 mintCount) external {
        require(_tokensActive[tokenId],  "token_not_active");

        uint256[] memory tokensOfSender = IReferenceContract(_referenceContract).tokensOfOwner(msg.sender);
        require(mintCount <= tokensOfSender.length,  "possible_mint_count_exceeded");

        uint256 mintCountdown = mintCount;

        for (uint256 i; i < tokensOfSender.length; i++) {
            if (!_tokensTracked[tokenId][tokensOfSender[i]]) {
                _tokensTracked[tokenId][tokensOfSender[i]] = true;
                mintCountdown = mintCountdown - 1;
                if (mintCountdown == 0) {
                    break;
                }
            }
        }
        require(mintCountdown == 0,  "mint_count_exceeded");

        _mint(msg.sender, tokenId, mintCount, "");
    }

    function activateToken(uint256 tokenId) external onlyOwner {
        _tokensActive[tokenId] = true;
    }

    function deactivateToken(uint256 tokenId) external onlyOwner {
        _tokensActive[tokenId] = false;
    }

    function setBaseURI(string memory baseURI) external onlyOwner {
        _baseURI = baseURI;
    }

    function uri(uint256 tokenId) public view override returns (string memory) {
        return bytes(_baseURI).length > 0
            ? string(abi.encodePacked(_baseURI, tokenId.toString()))
            : _baseURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[],"name":"_baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_tokensActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_tokensTracked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"activateToken","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"deactivateToken","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"mintCount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"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":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

6080604052735f7ed81ee49a3d85ff9f2120156b4cd38383b9cb600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b5060405162003fdb38038062003fdb83398181016040528101906200008c9190620002eb565b806200009e81620000df60201b60201c565b50620000bf620000b3620000fb60201b60201c565b6200010360201b60201c565b8060049080519060200190620000d7929190620001c9565b5050620004a0565b8060029080519060200190620000f7929190620001c9565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001d790620003c5565b90600052602060002090601f016020900481019282620001fb576000855562000247565b82601f106200021657805160ff191683800117855562000247565b8280016001018555821562000247579182015b828111156200024657825182559160200191906001019062000229565b5b5090506200025691906200025a565b5090565b5b80821115620002755760008160009055506001016200025b565b5090565b6000620002906200028a8462000359565b62000330565b905082815260208101848484011115620002a957600080fd5b620002b68482856200038f565b509392505050565b600082601f830112620002d057600080fd5b8151620002e284826020860162000279565b91505092915050565b600060208284031215620002fe57600080fd5b600082015167ffffffffffffffff8111156200031957600080fd5b6200032784828501620002be565b91505092915050565b60006200033c6200034f565b90506200034a8282620003fb565b919050565b6000604051905090565b600067ffffffffffffffff82111562000377576200037662000460565b5b62000382826200048f565b9050602081019050919050565b60005b83811015620003af57808201518184015260208101905062000392565b83811115620003bf576000848401525b50505050565b60006002820490506001821680620003de57607f821691505b60208210811415620003f557620003f462000431565b5b50919050565b62000406826200048f565b810181811067ffffffffffffffff8211171562000428576200042762000460565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613b2b80620004b06000396000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c8063743976a0116100a2578063e985e9c511610071578063e985e9c5146102dc578063ec991da91461030c578063f242432a14610328578063f2fde38b14610344578063fc43f2f31461036057610115565b8063743976a0146102545780638da5cb5b14610272578063a22cb46514610290578063db4ebfb8146102ac57610115565b80632c68b45e116100e95780632c68b45e146101c65780632eb2c2d6146101e25780634e1273f4146101fe57806355f804b31461022e578063715018a61461024a57610115565b8062fdd58e1461011a57806301ffc9a71461014a5780630e89341c1461017a5780631b2ef1ca146101aa575b600080fd5b610134600480360381019061012f9190612731565b610390565b60405161014191906130ad565b60405180910390f35b610164600480360381019061015f919061281a565b610459565b6040516101719190612e70565b60405180910390f35b610194600480360381019061018f91906128ad565b61053b565b6040516101a19190612e8b565b60405180910390f35b6101c460048036038101906101bf91906128d6565b610616565b005b6101e060048036038101906101db91906128ad565b610908565b005b6101fc60048036038101906101f791906125a7565b6109b3565b005b6102186004803603810190610213919061276d565b610a54565b6040516102259190612e17565b60405180910390f35b6102486004803603810190610243919061286c565b610c05565b005b610252610c9b565b005b61025c610d23565b6040516102699190612e8b565b60405180910390f35b61027a610db1565b6040516102879190612d3a565b60405180910390f35b6102aa60048036038101906102a591906126f5565b610ddb565b005b6102c660048036038101906102c191906128d6565b610f5c565b6040516102d39190612e70565b60405180910390f35b6102f660048036038101906102f1919061256b565b610f8b565b6040516103039190612e70565b60405180910390f35b610326600480360381019061032191906128ad565b61101f565b005b610342600480360381019061033d9190612666565b6110ca565b005b61035e60048036038101906103599190612542565b61116b565b005b61037a600480360381019061037591906128ad565b611263565b6040516103879190612e70565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f890612eed565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610534575061053382611283565b5b9050919050565b606060006004805461054c906133d2565b9050116105e35760048054610560906133d2565b80601f016020809104026020016040519081016040528092919081815260200182805461058c906133d2565b80156105d95780601f106105ae576101008083540402835291602001916105d9565b820191906000526020600020905b8154815290600101906020018083116105bc57829003601f168201915b505050505061060f565b60046105ee836112ed565b6040516020016105ff929190612d16565b6040516020818303038152906040525b9050919050565b6005600083815260200190815260200160002060009054906101000a900460ff16610676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066d9061308d565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c336040518263ffffffff1660e01b81526004016106d39190612d3a565b60006040518083038186803b1580156106eb57600080fd5b505afa1580156106ff573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061072891906127d9565b9050805182111561076e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076590612fcd565b60405180910390fd5b600082905060005b82518110156108a3576006600086815260200190815260200160002060008483815181106107cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060009054906101000a900460ff16610890576001600660008781526020019081526020016000206000858481518110610845577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555060018261087f91906132e8565b9150600082141561088f576108a3565b5b808061089b90613435565b915050610776565b50600081146108e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108de90612fed565b60405180910390fd5b6109023385856040518060200160405280600081525061149a565b50505050565b610910611630565b73ffffffffffffffffffffffffffffffffffffffff1661092e610db1565b73ffffffffffffffffffffffffffffffffffffffff1614610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b90612fad565b60405180910390fd5b60016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6109bb611630565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a015750610a00856109fb611630565b610f8b565b5b610a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3790612f6d565b60405180910390fd5b610a4d8585858585611638565b5050505050565b60608151835114610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a919061302d565b60405180910390fd5b6000835167ffffffffffffffff811115610add577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b0b5781602001602082028036833780820191505090505b50905060005b8451811015610bfa57610ba4858281518110610b56577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610b97577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610390565b828281518110610bdd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610bf390613435565b9050610b11565b508091505092915050565b610c0d611630565b73ffffffffffffffffffffffffffffffffffffffff16610c2b610db1565b73ffffffffffffffffffffffffffffffffffffffff1614610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890612fad565b60405180910390fd5b8060049080519060200190610c9792919061218f565b5050565b610ca3611630565b73ffffffffffffffffffffffffffffffffffffffff16610cc1610db1565b73ffffffffffffffffffffffffffffffffffffffff1614610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90612fad565b60405180910390fd5b610d216000611998565b565b60048054610d30906133d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5c906133d2565b8015610da95780601f10610d7e57610100808354040283529160200191610da9565b820191906000526020600020905b815481529060010190602001808311610d8c57829003601f168201915b505050505081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff16610dfa611630565b73ffffffffffffffffffffffffffffffffffffffff161415610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e489061300d565b60405180910390fd5b8060016000610e5e611630565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f0b611630565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f509190612e70565b60405180910390a35050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611027611630565b73ffffffffffffffffffffffffffffffffffffffff16611045610db1565b73ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612fad565b60405180910390fd5b60006005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110d2611630565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611118575061111785611112611630565b610f8b565b5b611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e90612f2d565b60405180910390fd5b6111648585858585611a5e565b5050505050565b611173611630565b73ffffffffffffffffffffffffffffffffffffffff16611191610db1565b73ffffffffffffffffffffffffffffffffffffffff16146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90612fad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90612f0d565b60405180910390fd5b61126081611998565b50565b60056020528060005260406000206000915054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415611335576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611495565b600082905060005b6000821461136757808061135090613435565b915050600a8261136091906132b7565b915061133d565b60008167ffffffffffffffff8111156113a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156113db5781602001600182028036833780820191505090505b5090505b6000851461148e576001826113f491906132e8565b9150600a85611403919061347e565b603061140f9190613261565b60f81b81838151811061144b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561148791906132b7565b94506113df565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561150a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115019061306d565b60405180910390fd5b6000611514611630565b90506115358160008761152688611ce0565b61152f88611ce0565b87611da6565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115949190613261565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516116129291906130c8565b60405180910390a461162981600087878787611dae565b5050505050565b600033905090565b815183511461167c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116739061304d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390612f4d565b60405180910390fd5b60006116f6611630565b9050611706818787878787611da6565b60005b845181101561190357600085828151811061174d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611792577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90612f8d565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e89190613261565b92505081905550505050806118fc90613435565b9050611709565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161197a929190612e39565b60405180910390a4611990818787878787611f95565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590612f4d565b60405180910390fd5b6000611ad8611630565b9050611af8818787611ae988611ce0565b611af288611ce0565b87611da6565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690612f8d565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c449190613261565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611cc19291906130c8565b60405180910390a4611cd7828888888888611dae565b50505050505050565b60606000600167ffffffffffffffff811115611d25577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d535781602001602082028036833780820191505090505b5090508281600081518110611d91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b611dcd8473ffffffffffffffffffffffffffffffffffffffff1661217c565b15611f8d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611e13959493929190612dbd565b602060405180830381600087803b158015611e2d57600080fd5b505af1925050508015611e5e57506040513d601f19601f82011682018060405250810190611e5b9190612843565b60015b611f0457611e6a61356b565b806308c379a01415611ec75750611e7f613a03565b80611e8a5750611ec9565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe9190612e8b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90612ead565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290612ecd565b60405180910390fd5b505b505050505050565b611fb48473ffffffffffffffffffffffffffffffffffffffff1661217c565b15612174578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611ffa959493929190612d55565b602060405180830381600087803b15801561201457600080fd5b505af192505050801561204557506040513d601f19601f820116820180604052508101906120429190612843565b60015b6120eb5761205161356b565b806308c379a014156120ae5750612066613a03565b8061207157506120b0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a59190612e8b565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290612ead565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216990612ecd565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461219b906133d2565b90600052602060002090601f0160209004810192826121bd5760008555612204565b82601f106121d657805160ff1916838001178555612204565b82800160010185558215612204579182015b828111156122035782518255916020019190600101906121e8565b5b5090506122119190612215565b5090565b5b8082111561222e576000816000905550600101612216565b5090565b600061224561224084613116565b6130f1565b9050808382526020820190508285602086028201111561226457600080fd5b60005b85811015612294578161227a88826123f2565b845260208401935060208301925050600181019050612267565b5050509392505050565b60006122b16122ac84613142565b6130f1565b905080838252602082019050828560208602820111156122d057600080fd5b60005b8581101561230057816122e68882612518565b8452602084019350602083019250506001810190506122d3565b5050509392505050565b600061231d61231884613142565b6130f1565b9050808382526020820190508285602086028201111561233c57600080fd5b60005b8581101561236c5781612352888261252d565b84526020840193506020830192505060018101905061233f565b5050509392505050565b60006123896123848461316e565b6130f1565b9050828152602081018484840111156123a157600080fd5b6123ac848285613390565b509392505050565b60006123c76123c28461319f565b6130f1565b9050828152602081018484840111156123df57600080fd5b6123ea848285613390565b509392505050565b60008135905061240181613a99565b92915050565b600082601f83011261241857600080fd5b8135612428848260208601612232565b91505092915050565b600082601f83011261244257600080fd5b813561245284826020860161229e565b91505092915050565b600082601f83011261246c57600080fd5b815161247c84826020860161230a565b91505092915050565b60008135905061249481613ab0565b92915050565b6000813590506124a981613ac7565b92915050565b6000815190506124be81613ac7565b92915050565b600082601f8301126124d557600080fd5b81356124e5848260208601612376565b91505092915050565b600082601f8301126124ff57600080fd5b813561250f8482602086016123b4565b91505092915050565b60008135905061252781613ade565b92915050565b60008151905061253c81613ade565b92915050565b60006020828403121561255457600080fd5b6000612562848285016123f2565b91505092915050565b6000806040838503121561257e57600080fd5b600061258c858286016123f2565b925050602061259d858286016123f2565b9150509250929050565b600080600080600060a086880312156125bf57600080fd5b60006125cd888289016123f2565b95505060206125de888289016123f2565b945050604086013567ffffffffffffffff8111156125fb57600080fd5b61260788828901612431565b935050606086013567ffffffffffffffff81111561262457600080fd5b61263088828901612431565b925050608086013567ffffffffffffffff81111561264d57600080fd5b612659888289016124c4565b9150509295509295909350565b600080600080600060a0868803121561267e57600080fd5b600061268c888289016123f2565b955050602061269d888289016123f2565b94505060406126ae88828901612518565b93505060606126bf88828901612518565b925050608086013567ffffffffffffffff8111156126dc57600080fd5b6126e8888289016124c4565b9150509295509295909350565b6000806040838503121561270857600080fd5b6000612716858286016123f2565b925050602061272785828601612485565b9150509250929050565b6000806040838503121561274457600080fd5b6000612752858286016123f2565b925050602061276385828601612518565b9150509250929050565b6000806040838503121561278057600080fd5b600083013567ffffffffffffffff81111561279a57600080fd5b6127a685828601612407565b925050602083013567ffffffffffffffff8111156127c357600080fd5b6127cf85828601612431565b9150509250929050565b6000602082840312156127eb57600080fd5b600082015167ffffffffffffffff81111561280557600080fd5b6128118482850161245b565b91505092915050565b60006020828403121561282c57600080fd5b600061283a8482850161249a565b91505092915050565b60006020828403121561285557600080fd5b6000612863848285016124af565b91505092915050565b60006020828403121561287e57600080fd5b600082013567ffffffffffffffff81111561289857600080fd5b6128a4848285016124ee565b91505092915050565b6000602082840312156128bf57600080fd5b60006128cd84828501612518565b91505092915050565b600080604083850312156128e957600080fd5b60006128f785828601612518565b925050602061290885828601612518565b9150509250929050565b600061291e8383612cf8565b60208301905092915050565b6129338161331c565b82525050565b6000612944826131f5565b61294e8185613223565b9350612959836131d0565b8060005b8381101561298a5781516129718882612912565b975061297c83613216565b92505060018101905061295d565b5085935050505092915050565b6129a08161332e565b82525050565b60006129b182613200565b6129bb8185613234565b93506129cb81856020860161339f565b6129d48161358d565b840191505092915050565b60006129ea8261320b565b6129f48185613245565b9350612a0481856020860161339f565b612a0d8161358d565b840191505092915050565b6000612a238261320b565b612a2d8185613256565b9350612a3d81856020860161339f565b80840191505092915050565b60008154612a56816133d2565b612a608186613256565b94506001821660008114612a7b5760018114612a8c57612abf565b60ff19831686528186019350612abf565b612a95856131e0565b60005b83811015612ab757815481890152600182019150602081019050612a98565b838801955050505b50505092915050565b6000612ad5603483613245565b9150612ae0826135ab565b604082019050919050565b6000612af8602883613245565b9150612b03826135fa565b604082019050919050565b6000612b1b602b83613245565b9150612b2682613649565b604082019050919050565b6000612b3e602683613245565b9150612b4982613698565b604082019050919050565b6000612b61602983613245565b9150612b6c826136e7565b604082019050919050565b6000612b84602583613245565b9150612b8f82613736565b604082019050919050565b6000612ba7603283613245565b9150612bb282613785565b604082019050919050565b6000612bca602a83613245565b9150612bd5826137d4565b604082019050919050565b6000612bed602083613245565b9150612bf882613823565b602082019050919050565b6000612c10601c83613245565b9150612c1b8261384c565b602082019050919050565b6000612c33601383613245565b9150612c3e82613875565b602082019050919050565b6000612c56602983613245565b9150612c618261389e565b604082019050919050565b6000612c79602983613245565b9150612c84826138ed565b604082019050919050565b6000612c9c602883613245565b9150612ca78261393c565b604082019050919050565b6000612cbf602183613245565b9150612cca8261398b565b604082019050919050565b6000612ce2601083613245565b9150612ced826139da565b602082019050919050565b612d0181613386565b82525050565b612d1081613386565b82525050565b6000612d228285612a49565b9150612d2e8284612a18565b91508190509392505050565b6000602082019050612d4f600083018461292a565b92915050565b600060a082019050612d6a600083018861292a565b612d77602083018761292a565b8181036040830152612d898186612939565b90508181036060830152612d9d8185612939565b90508181036080830152612db181846129a6565b90509695505050505050565b600060a082019050612dd2600083018861292a565b612ddf602083018761292a565b612dec6040830186612d07565b612df96060830185612d07565b8181036080830152612e0b81846129a6565b90509695505050505050565b60006020820190508181036000830152612e318184612939565b905092915050565b60006040820190508181036000830152612e538185612939565b90508181036020830152612e678184612939565b90509392505050565b6000602082019050612e856000830184612997565b92915050565b60006020820190508181036000830152612ea581846129df565b905092915050565b60006020820190508181036000830152612ec681612ac8565b9050919050565b60006020820190508181036000830152612ee681612aeb565b9050919050565b60006020820190508181036000830152612f0681612b0e565b9050919050565b60006020820190508181036000830152612f2681612b31565b9050919050565b60006020820190508181036000830152612f4681612b54565b9050919050565b60006020820190508181036000830152612f6681612b77565b9050919050565b60006020820190508181036000830152612f8681612b9a565b9050919050565b60006020820190508181036000830152612fa681612bbd565b9050919050565b60006020820190508181036000830152612fc681612be0565b9050919050565b60006020820190508181036000830152612fe681612c03565b9050919050565b6000602082019050818103600083015261300681612c26565b9050919050565b6000602082019050818103600083015261302681612c49565b9050919050565b6000602082019050818103600083015261304681612c6c565b9050919050565b6000602082019050818103600083015261306681612c8f565b9050919050565b6000602082019050818103600083015261308681612cb2565b9050919050565b600060208201905081810360008301526130a681612cd5565b9050919050565b60006020820190506130c26000830184612d07565b92915050565b60006040820190506130dd6000830185612d07565b6130ea6020830184612d07565b9392505050565b60006130fb61310c565b90506131078282613404565b919050565b6000604051905090565b600067ffffffffffffffff8211156131315761313061353c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561315d5761315c61353c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156131895761318861353c565b5b6131928261358d565b9050602081019050919050565b600067ffffffffffffffff8211156131ba576131b961353c565b5b6131c38261358d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061326c82613386565b915061327783613386565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132ac576132ab6134af565b5b828201905092915050565b60006132c282613386565b91506132cd83613386565b9250826132dd576132dc6134de565b5b828204905092915050565b60006132f382613386565b91506132fe83613386565b925082821015613311576133106134af565b5b828203905092915050565b600061332782613366565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156133bd5780820151818401526020810190506133a2565b838111156133cc576000848401525b50505050565b600060028204905060018216806133ea57607f821691505b602082108114156133fe576133fd61350d565b5b50919050565b61340d8261358d565b810181811067ffffffffffffffff8211171561342c5761342b61353c565b5b80604052505050565b600061344082613386565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613473576134726134af565b5b600182019050919050565b600061348982613386565b915061349483613386565b9250826134a4576134a36134de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561358a5760046000803e61358760005161359e565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f706f737369626c655f6d696e745f636f756e745f657863656564656400000000600082015250565b7f6d696e745f636f756e745f657863656564656400000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f746f6b656e5f6e6f745f61637469766500000000000000000000000000000000600082015250565b600060443d1015613a1357613a96565b613a1b61310c565b60043d036004823e80513d602482011167ffffffffffffffff82111715613a43575050613a96565b808201805167ffffffffffffffff811115613a615750505050613a96565b80602083010160043d038501811115613a7e575050505050613a96565b613a8d82602001850186613404565b82955050505050505b90565b613aa28161331c565b8114613aad57600080fd5b50565b613ab98161332e565b8114613ac457600080fd5b50565b613ad08161333a565b8114613adb57600080fd5b50565b613ae781613386565b8114613af257600080fd5b5056fea264697066735822122080b5a3184fae80ac30ee51651fc7c8c0fe3b1bd1dd329ca2f96f6e03ac35310e64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5566767877345a4e784e6b4235547342684671487036337669394364636f637a466650346b4c3937467876522f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101155760003560e01c8063743976a0116100a2578063e985e9c511610071578063e985e9c5146102dc578063ec991da91461030c578063f242432a14610328578063f2fde38b14610344578063fc43f2f31461036057610115565b8063743976a0146102545780638da5cb5b14610272578063a22cb46514610290578063db4ebfb8146102ac57610115565b80632c68b45e116100e95780632c68b45e146101c65780632eb2c2d6146101e25780634e1273f4146101fe57806355f804b31461022e578063715018a61461024a57610115565b8062fdd58e1461011a57806301ffc9a71461014a5780630e89341c1461017a5780631b2ef1ca146101aa575b600080fd5b610134600480360381019061012f9190612731565b610390565b60405161014191906130ad565b60405180910390f35b610164600480360381019061015f919061281a565b610459565b6040516101719190612e70565b60405180910390f35b610194600480360381019061018f91906128ad565b61053b565b6040516101a19190612e8b565b60405180910390f35b6101c460048036038101906101bf91906128d6565b610616565b005b6101e060048036038101906101db91906128ad565b610908565b005b6101fc60048036038101906101f791906125a7565b6109b3565b005b6102186004803603810190610213919061276d565b610a54565b6040516102259190612e17565b60405180910390f35b6102486004803603810190610243919061286c565b610c05565b005b610252610c9b565b005b61025c610d23565b6040516102699190612e8b565b60405180910390f35b61027a610db1565b6040516102879190612d3a565b60405180910390f35b6102aa60048036038101906102a591906126f5565b610ddb565b005b6102c660048036038101906102c191906128d6565b610f5c565b6040516102d39190612e70565b60405180910390f35b6102f660048036038101906102f1919061256b565b610f8b565b6040516103039190612e70565b60405180910390f35b610326600480360381019061032191906128ad565b61101f565b005b610342600480360381019061033d9190612666565b6110ca565b005b61035e60048036038101906103599190612542565b61116b565b005b61037a600480360381019061037591906128ad565b611263565b6040516103879190612e70565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f890612eed565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610534575061053382611283565b5b9050919050565b606060006004805461054c906133d2565b9050116105e35760048054610560906133d2565b80601f016020809104026020016040519081016040528092919081815260200182805461058c906133d2565b80156105d95780601f106105ae576101008083540402835291602001916105d9565b820191906000526020600020905b8154815290600101906020018083116105bc57829003601f168201915b505050505061060f565b60046105ee836112ed565b6040516020016105ff929190612d16565b6040516020818303038152906040525b9050919050565b6005600083815260200190815260200160002060009054906101000a900460ff16610676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066d9061308d565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c336040518263ffffffff1660e01b81526004016106d39190612d3a565b60006040518083038186803b1580156106eb57600080fd5b505afa1580156106ff573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061072891906127d9565b9050805182111561076e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076590612fcd565b60405180910390fd5b600082905060005b82518110156108a3576006600086815260200190815260200160002060008483815181106107cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060009054906101000a900460ff16610890576001600660008781526020019081526020016000206000858481518110610845577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555060018261087f91906132e8565b9150600082141561088f576108a3565b5b808061089b90613435565b915050610776565b50600081146108e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108de90612fed565b60405180910390fd5b6109023385856040518060200160405280600081525061149a565b50505050565b610910611630565b73ffffffffffffffffffffffffffffffffffffffff1661092e610db1565b73ffffffffffffffffffffffffffffffffffffffff1614610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b90612fad565b60405180910390fd5b60016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6109bb611630565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a015750610a00856109fb611630565b610f8b565b5b610a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3790612f6d565b60405180910390fd5b610a4d8585858585611638565b5050505050565b60608151835114610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a919061302d565b60405180910390fd5b6000835167ffffffffffffffff811115610add577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b0b5781602001602082028036833780820191505090505b50905060005b8451811015610bfa57610ba4858281518110610b56577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610b97577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610390565b828281518110610bdd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610bf390613435565b9050610b11565b508091505092915050565b610c0d611630565b73ffffffffffffffffffffffffffffffffffffffff16610c2b610db1565b73ffffffffffffffffffffffffffffffffffffffff1614610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890612fad565b60405180910390fd5b8060049080519060200190610c9792919061218f565b5050565b610ca3611630565b73ffffffffffffffffffffffffffffffffffffffff16610cc1610db1565b73ffffffffffffffffffffffffffffffffffffffff1614610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90612fad565b60405180910390fd5b610d216000611998565b565b60048054610d30906133d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5c906133d2565b8015610da95780601f10610d7e57610100808354040283529160200191610da9565b820191906000526020600020905b815481529060010190602001808311610d8c57829003601f168201915b505050505081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff16610dfa611630565b73ffffffffffffffffffffffffffffffffffffffff161415610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e489061300d565b60405180910390fd5b8060016000610e5e611630565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f0b611630565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f509190612e70565b60405180910390a35050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611027611630565b73ffffffffffffffffffffffffffffffffffffffff16611045610db1565b73ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612fad565b60405180910390fd5b60006005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110d2611630565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611118575061111785611112611630565b610f8b565b5b611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e90612f2d565b60405180910390fd5b6111648585858585611a5e565b5050505050565b611173611630565b73ffffffffffffffffffffffffffffffffffffffff16611191610db1565b73ffffffffffffffffffffffffffffffffffffffff16146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90612fad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90612f0d565b60405180910390fd5b61126081611998565b50565b60056020528060005260406000206000915054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415611335576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611495565b600082905060005b6000821461136757808061135090613435565b915050600a8261136091906132b7565b915061133d565b60008167ffffffffffffffff8111156113a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156113db5781602001600182028036833780820191505090505b5090505b6000851461148e576001826113f491906132e8565b9150600a85611403919061347e565b603061140f9190613261565b60f81b81838151811061144b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561148791906132b7565b94506113df565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561150a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115019061306d565b60405180910390fd5b6000611514611630565b90506115358160008761152688611ce0565b61152f88611ce0565b87611da6565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115949190613261565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516116129291906130c8565b60405180910390a461162981600087878787611dae565b5050505050565b600033905090565b815183511461167c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116739061304d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390612f4d565b60405180910390fd5b60006116f6611630565b9050611706818787878787611da6565b60005b845181101561190357600085828151811061174d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611792577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90612f8d565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e89190613261565b92505081905550505050806118fc90613435565b9050611709565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161197a929190612e39565b60405180910390a4611990818787878787611f95565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590612f4d565b60405180910390fd5b6000611ad8611630565b9050611af8818787611ae988611ce0565b611af288611ce0565b87611da6565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690612f8d565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c449190613261565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611cc19291906130c8565b60405180910390a4611cd7828888888888611dae565b50505050505050565b60606000600167ffffffffffffffff811115611d25577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d535781602001602082028036833780820191505090505b5090508281600081518110611d91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b611dcd8473ffffffffffffffffffffffffffffffffffffffff1661217c565b15611f8d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611e13959493929190612dbd565b602060405180830381600087803b158015611e2d57600080fd5b505af1925050508015611e5e57506040513d601f19601f82011682018060405250810190611e5b9190612843565b60015b611f0457611e6a61356b565b806308c379a01415611ec75750611e7f613a03565b80611e8a5750611ec9565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe9190612e8b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90612ead565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290612ecd565b60405180910390fd5b505b505050505050565b611fb48473ffffffffffffffffffffffffffffffffffffffff1661217c565b15612174578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611ffa959493929190612d55565b602060405180830381600087803b15801561201457600080fd5b505af192505050801561204557506040513d601f19601f820116820180604052508101906120429190612843565b60015b6120eb5761205161356b565b806308c379a014156120ae5750612066613a03565b8061207157506120b0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a59190612e8b565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290612ead565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216990612ecd565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461219b906133d2565b90600052602060002090601f0160209004810192826121bd5760008555612204565b82601f106121d657805160ff1916838001178555612204565b82800160010185558215612204579182015b828111156122035782518255916020019190600101906121e8565b5b5090506122119190612215565b5090565b5b8082111561222e576000816000905550600101612216565b5090565b600061224561224084613116565b6130f1565b9050808382526020820190508285602086028201111561226457600080fd5b60005b85811015612294578161227a88826123f2565b845260208401935060208301925050600181019050612267565b5050509392505050565b60006122b16122ac84613142565b6130f1565b905080838252602082019050828560208602820111156122d057600080fd5b60005b8581101561230057816122e68882612518565b8452602084019350602083019250506001810190506122d3565b5050509392505050565b600061231d61231884613142565b6130f1565b9050808382526020820190508285602086028201111561233c57600080fd5b60005b8581101561236c5781612352888261252d565b84526020840193506020830192505060018101905061233f565b5050509392505050565b60006123896123848461316e565b6130f1565b9050828152602081018484840111156123a157600080fd5b6123ac848285613390565b509392505050565b60006123c76123c28461319f565b6130f1565b9050828152602081018484840111156123df57600080fd5b6123ea848285613390565b509392505050565b60008135905061240181613a99565b92915050565b600082601f83011261241857600080fd5b8135612428848260208601612232565b91505092915050565b600082601f83011261244257600080fd5b813561245284826020860161229e565b91505092915050565b600082601f83011261246c57600080fd5b815161247c84826020860161230a565b91505092915050565b60008135905061249481613ab0565b92915050565b6000813590506124a981613ac7565b92915050565b6000815190506124be81613ac7565b92915050565b600082601f8301126124d557600080fd5b81356124e5848260208601612376565b91505092915050565b600082601f8301126124ff57600080fd5b813561250f8482602086016123b4565b91505092915050565b60008135905061252781613ade565b92915050565b60008151905061253c81613ade565b92915050565b60006020828403121561255457600080fd5b6000612562848285016123f2565b91505092915050565b6000806040838503121561257e57600080fd5b600061258c858286016123f2565b925050602061259d858286016123f2565b9150509250929050565b600080600080600060a086880312156125bf57600080fd5b60006125cd888289016123f2565b95505060206125de888289016123f2565b945050604086013567ffffffffffffffff8111156125fb57600080fd5b61260788828901612431565b935050606086013567ffffffffffffffff81111561262457600080fd5b61263088828901612431565b925050608086013567ffffffffffffffff81111561264d57600080fd5b612659888289016124c4565b9150509295509295909350565b600080600080600060a0868803121561267e57600080fd5b600061268c888289016123f2565b955050602061269d888289016123f2565b94505060406126ae88828901612518565b93505060606126bf88828901612518565b925050608086013567ffffffffffffffff8111156126dc57600080fd5b6126e8888289016124c4565b9150509295509295909350565b6000806040838503121561270857600080fd5b6000612716858286016123f2565b925050602061272785828601612485565b9150509250929050565b6000806040838503121561274457600080fd5b6000612752858286016123f2565b925050602061276385828601612518565b9150509250929050565b6000806040838503121561278057600080fd5b600083013567ffffffffffffffff81111561279a57600080fd5b6127a685828601612407565b925050602083013567ffffffffffffffff8111156127c357600080fd5b6127cf85828601612431565b9150509250929050565b6000602082840312156127eb57600080fd5b600082015167ffffffffffffffff81111561280557600080fd5b6128118482850161245b565b91505092915050565b60006020828403121561282c57600080fd5b600061283a8482850161249a565b91505092915050565b60006020828403121561285557600080fd5b6000612863848285016124af565b91505092915050565b60006020828403121561287e57600080fd5b600082013567ffffffffffffffff81111561289857600080fd5b6128a4848285016124ee565b91505092915050565b6000602082840312156128bf57600080fd5b60006128cd84828501612518565b91505092915050565b600080604083850312156128e957600080fd5b60006128f785828601612518565b925050602061290885828601612518565b9150509250929050565b600061291e8383612cf8565b60208301905092915050565b6129338161331c565b82525050565b6000612944826131f5565b61294e8185613223565b9350612959836131d0565b8060005b8381101561298a5781516129718882612912565b975061297c83613216565b92505060018101905061295d565b5085935050505092915050565b6129a08161332e565b82525050565b60006129b182613200565b6129bb8185613234565b93506129cb81856020860161339f565b6129d48161358d565b840191505092915050565b60006129ea8261320b565b6129f48185613245565b9350612a0481856020860161339f565b612a0d8161358d565b840191505092915050565b6000612a238261320b565b612a2d8185613256565b9350612a3d81856020860161339f565b80840191505092915050565b60008154612a56816133d2565b612a608186613256565b94506001821660008114612a7b5760018114612a8c57612abf565b60ff19831686528186019350612abf565b612a95856131e0565b60005b83811015612ab757815481890152600182019150602081019050612a98565b838801955050505b50505092915050565b6000612ad5603483613245565b9150612ae0826135ab565b604082019050919050565b6000612af8602883613245565b9150612b03826135fa565b604082019050919050565b6000612b1b602b83613245565b9150612b2682613649565b604082019050919050565b6000612b3e602683613245565b9150612b4982613698565b604082019050919050565b6000612b61602983613245565b9150612b6c826136e7565b604082019050919050565b6000612b84602583613245565b9150612b8f82613736565b604082019050919050565b6000612ba7603283613245565b9150612bb282613785565b604082019050919050565b6000612bca602a83613245565b9150612bd5826137d4565b604082019050919050565b6000612bed602083613245565b9150612bf882613823565b602082019050919050565b6000612c10601c83613245565b9150612c1b8261384c565b602082019050919050565b6000612c33601383613245565b9150612c3e82613875565b602082019050919050565b6000612c56602983613245565b9150612c618261389e565b604082019050919050565b6000612c79602983613245565b9150612c84826138ed565b604082019050919050565b6000612c9c602883613245565b9150612ca78261393c565b604082019050919050565b6000612cbf602183613245565b9150612cca8261398b565b604082019050919050565b6000612ce2601083613245565b9150612ced826139da565b602082019050919050565b612d0181613386565b82525050565b612d1081613386565b82525050565b6000612d228285612a49565b9150612d2e8284612a18565b91508190509392505050565b6000602082019050612d4f600083018461292a565b92915050565b600060a082019050612d6a600083018861292a565b612d77602083018761292a565b8181036040830152612d898186612939565b90508181036060830152612d9d8185612939565b90508181036080830152612db181846129a6565b90509695505050505050565b600060a082019050612dd2600083018861292a565b612ddf602083018761292a565b612dec6040830186612d07565b612df96060830185612d07565b8181036080830152612e0b81846129a6565b90509695505050505050565b60006020820190508181036000830152612e318184612939565b905092915050565b60006040820190508181036000830152612e538185612939565b90508181036020830152612e678184612939565b90509392505050565b6000602082019050612e856000830184612997565b92915050565b60006020820190508181036000830152612ea581846129df565b905092915050565b60006020820190508181036000830152612ec681612ac8565b9050919050565b60006020820190508181036000830152612ee681612aeb565b9050919050565b60006020820190508181036000830152612f0681612b0e565b9050919050565b60006020820190508181036000830152612f2681612b31565b9050919050565b60006020820190508181036000830152612f4681612b54565b9050919050565b60006020820190508181036000830152612f6681612b77565b9050919050565b60006020820190508181036000830152612f8681612b9a565b9050919050565b60006020820190508181036000830152612fa681612bbd565b9050919050565b60006020820190508181036000830152612fc681612be0565b9050919050565b60006020820190508181036000830152612fe681612c03565b9050919050565b6000602082019050818103600083015261300681612c26565b9050919050565b6000602082019050818103600083015261302681612c49565b9050919050565b6000602082019050818103600083015261304681612c6c565b9050919050565b6000602082019050818103600083015261306681612c8f565b9050919050565b6000602082019050818103600083015261308681612cb2565b9050919050565b600060208201905081810360008301526130a681612cd5565b9050919050565b60006020820190506130c26000830184612d07565b92915050565b60006040820190506130dd6000830185612d07565b6130ea6020830184612d07565b9392505050565b60006130fb61310c565b90506131078282613404565b919050565b6000604051905090565b600067ffffffffffffffff8211156131315761313061353c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561315d5761315c61353c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156131895761318861353c565b5b6131928261358d565b9050602081019050919050565b600067ffffffffffffffff8211156131ba576131b961353c565b5b6131c38261358d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061326c82613386565b915061327783613386565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132ac576132ab6134af565b5b828201905092915050565b60006132c282613386565b91506132cd83613386565b9250826132dd576132dc6134de565b5b828204905092915050565b60006132f382613386565b91506132fe83613386565b925082821015613311576133106134af565b5b828203905092915050565b600061332782613366565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156133bd5780820151818401526020810190506133a2565b838111156133cc576000848401525b50505050565b600060028204905060018216806133ea57607f821691505b602082108114156133fe576133fd61350d565b5b50919050565b61340d8261358d565b810181811067ffffffffffffffff8211171561342c5761342b61353c565b5b80604052505050565b600061344082613386565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613473576134726134af565b5b600182019050919050565b600061348982613386565b915061349483613386565b9250826134a4576134a36134de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561358a5760046000803e61358760005161359e565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f706f737369626c655f6d696e745f636f756e745f657863656564656400000000600082015250565b7f6d696e745f636f756e745f657863656564656400000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f746f6b656e5f6e6f745f61637469766500000000000000000000000000000000600082015250565b600060443d1015613a1357613a96565b613a1b61310c565b60043d036004823e80513d602482011167ffffffffffffffff82111715613a43575050613a96565b808201805167ffffffffffffffff811115613a615750505050613a96565b80602083010160043d038501811115613a7e575050505050613a96565b613a8d82602001850186613404565b82955050505050505b90565b613aa28161331c565b8114613aad57600080fd5b50565b613ab98161332e565b8114613ac457600080fd5b50565b613ad08161333a565b8114613adb57600080fd5b50565b613ae781613386565b8114613af257600080fd5b5056fea264697066735822122080b5a3184fae80ac30ee51651fc7c8c0fe3b1bd1dd329ca2f96f6e03ac35310e64736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5566767877345a4e784e6b4235547342684671487036337669394364636f637a466650346b4c3937467876522f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmUfvxw4ZNxNkB5TsBhFqHp63vi9CdcoczFfP4kL97FxvR/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d5566767877345a4e784e6b423554734268467148703633
Arg [3] : 7669394364636f637a466650346b4c3937467876522f00000000000000000000


Deployed Bytecode Sourcemap

37927:1844:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20071:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19094:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39547:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38348:851;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39207:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22166:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20468:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39440:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37098:94;;;:::i;:::-;;38013:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36447:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21065:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38096:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21448:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39322:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21688:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37347:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38044:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20071:231;20157:7;20204:1;20185:21;;:7;:21;;;;20177:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20272:9;:13;20282:2;20272:13;;;;;;;;;;;:22;20286:7;20272:22;;;;;;;;;;;;;;;;20265:29;;20071:231;;;;:::o;19094:310::-;19196:4;19248:26;19233:41;;;:11;:41;;;;:110;;;;19306:37;19291:52;;;:11;:52;;;;19233:110;:163;;;;19360:36;19384:11;19360:23;:36::i;:::-;19233:163;19213:183;;19094:310;;;:::o;39547:221::-;39607:13;39665:1;39646:8;39640:22;;;;;:::i;:::-;;;:26;:120;;39752:8;39640:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39706:8;39716:18;:7;:16;:18::i;:::-;39689:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39640:120;39633:127;;39547:221;;;:::o;38348:851::-;38426:13;:22;38440:7;38426:22;;;;;;;;;;;;;;;;;;;;;38418:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;38483:31;38536:18;;;;;;;;;;;38517:52;;;38570:10;38517:64;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38483:98;;38613:14;:21;38600:9;:34;;38592:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38681:21;38705:9;38681:33;;38732:9;38727:349;38747:14;:21;38743:1;:25;38727:349;;;38795:14;:23;38810:7;38795:23;;;;;;;;;;;:42;38819:14;38834:1;38819:17;;;;;;;;;;;;;;;;;;;;;;38795:42;;;;;;;;;;;;;;;;;;;;;38790:275;;38903:4;38858:14;:23;38873:7;38858:23;;;;;;;;;;;:42;38882:14;38897:1;38882:17;;;;;;;;;;;;;;;;;;;;;;38858:42;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;38958:1;38942:13;:17;;;;:::i;:::-;38926:33;;38999:1;38982:13;:18;38978:72;;;39025:5;;38978:72;38790:275;38770:3;;;;;:::i;:::-;;;;38727:349;;;;39111:1;39094:13;:18;39086:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39150:41;39156:10;39168:7;39177:9;39150:41;;;;;;;;;;;;:5;:41::i;:::-;38348:851;;;;:::o;39207:107::-;36678:12;:10;:12::i;:::-;36667:23;;:7;:5;:7::i;:::-;:23;;;36659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39302:4:::1;39277:13;:22;39291:7;39277:22;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39207:107:::0;:::o;22166:442::-;22407:12;:10;:12::i;:::-;22399:20;;:4;:20;;;:60;;;;22423:36;22440:4;22446:12;:10;:12::i;:::-;22423:16;:36::i;:::-;22399:60;22377:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22548:52;22571:4;22577:2;22581:3;22586:7;22595:4;22548:22;:52::i;:::-;22166:442;;;;;:::o;20468:524::-;20624:16;20685:3;:10;20666:8;:15;:29;20658:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20754:30;20801:8;:15;20787:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20754:63;;20835:9;20830:122;20854:8;:15;20850:1;:19;20830:122;;;20910:30;20920:8;20929:1;20920:11;;;;;;;;;;;;;;;;;;;;;;20933:3;20937:1;20933:6;;;;;;;;;;;;;;;;;;;;;;20910:9;:30::i;:::-;20891:13;20905:1;20891:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;20871:3;;;;:::i;:::-;;;20830:122;;;;20971:13;20964:20;;;20468:524;;;;:::o;39440:99::-;36678:12;:10;:12::i;:::-;36667:23;;:7;:5;:7::i;:::-;:23;;;36659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39524:7:::1;39513:8;:18;;;;;;;;;;;;:::i;:::-;;39440:99:::0;:::o;37098:94::-;36678:12;:10;:12::i;:::-;36667:23;;:7;:5;:7::i;:::-;:23;;;36659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37163:21:::1;37181:1;37163:9;:21::i;:::-;37098:94::o:0;38013:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36447:87::-;36493:7;36520:6;;;;;;;;;;;36513:13;;36447:87;:::o;21065:311::-;21184:8;21168:24;;:12;:10;:12::i;:::-;:24;;;;21160:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;21296:8;21251:18;:32;21270:12;:10;:12::i;:::-;21251:32;;;;;;;;;;;;;;;:42;21284:8;21251:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;21349:8;21320:48;;21335:12;:10;:12::i;:::-;21320:48;;;21359:8;21320:48;;;;;;:::i;:::-;;;;;;;;21065:311;;:::o;38096:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21448:168::-;21547:4;21571:18;:27;21590:7;21571:27;;;;;;;;;;;;;;;:37;21599:8;21571:37;;;;;;;;;;;;;;;;;;;;;;;;;21564:44;;21448:168;;;;:::o;39322:110::-;36678:12;:10;:12::i;:::-;36667:23;;:7;:5;:7::i;:::-;:23;;;36659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39419:5:::1;39394:13;:22;39408:7;39394:22;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;39322:110:::0;:::o;21688:401::-;21904:12;:10;:12::i;:::-;21896:20;;:4;:20;;;:60;;;;21920:36;21937:4;21943:12;:10;:12::i;:::-;21920:16;:36::i;:::-;21896:60;21874:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22036:45;22054:4;22060:2;22064;22068:6;22076:4;22036:17;:45::i;:::-;21688:401;;;;;:::o;37347:192::-;36678:12;:10;:12::i;:::-;36667:23;;:7;:5;:7::i;:::-;:23;;;36659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37456:1:::1;37436:22;;:8;:22;;;;37428:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37512:19;37522:8;37512:9;:19::i;:::-;37347:192:::0;:::o;38044:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;17909:157::-;17994:4;18033:25;18018:40;;;:11;:40;;;;18011:47;;17909:157;;;:::o;33684:723::-;33740:13;33970:1;33961:5;:10;33957:53;;;33988:10;;;;;;;;;;;;;;;;;;;;;33957:53;34020:12;34035:5;34020:20;;34051:14;34076:78;34091:1;34083:4;:9;34076:78;;34109:8;;;;;:::i;:::-;;;;34140:2;34132:10;;;;;:::i;:::-;;;34076:78;;;34164:19;34196:6;34186:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34164:39;;34214:154;34230:1;34221:5;:10;34214:154;;34258:1;34248:11;;;;;:::i;:::-;;;34325:2;34317:5;:10;;;;:::i;:::-;34304:2;:24;;;;:::i;:::-;34291:39;;34274:6;34281;34274:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;34354:2;34345:11;;;;;:::i;:::-;;;34214:154;;;34392:6;34378:21;;;;;33684:723;;;;:::o;26657:599::-;26834:1;26815:21;;:7;:21;;;;26807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26887:16;26906:12;:10;:12::i;:::-;26887:31;;26931:107;26952:8;26970:1;26974:7;26983:21;27001:2;26983:17;:21::i;:::-;27006:25;27024:6;27006:17;:25::i;:::-;27033:4;26931:20;:107::i;:::-;27077:6;27051:9;:13;27061:2;27051:13;;;;;;;;;;;:22;27065:7;27051:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;27136:7;27099:57;;27132:1;27099:57;;27114:8;27099:57;;;27145:2;27149:6;27099:57;;;;;;;:::i;:::-;;;;;;;;27169:79;27200:8;27218:1;27222:7;27231:2;27235:6;27243:4;27169:30;:79::i;:::-;26657:599;;;;;:::o;16891:98::-;16944:7;16971:10;16964:17;;16891:98;:::o;24250:1074::-;24477:7;:14;24463:3;:10;:28;24455:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24569:1;24555:16;;:2;:16;;;;24547:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24626:16;24645:12;:10;:12::i;:::-;24626:31;;24670:60;24691:8;24701:4;24707:2;24711:3;24716:7;24725:4;24670:20;:60::i;:::-;24748:9;24743:421;24767:3;:10;24763:1;:14;24743:421;;;24799:10;24812:3;24816:1;24812:6;;;;;;;;;;;;;;;;;;;;;;24799:19;;24833:14;24850:7;24858:1;24850:10;;;;;;;;;;;;;;;;;;;;;;24833:27;;24877:19;24899:9;:13;24909:2;24899:13;;;;;;;;;;;:19;24913:4;24899:19;;;;;;;;;;;;;;;;24877:41;;24956:6;24941:11;:21;;24933:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25089:6;25075:11;:20;25053:9;:13;25063:2;25053:13;;;;;;;;;;;:19;25067:4;25053:19;;;;;;;;;;;;;;;:42;;;;25146:6;25125:9;:13;25135:2;25125:13;;;;;;;;;;;:17;25139:2;25125:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24743:421;;;24779:3;;;;:::i;:::-;;;24743:421;;;;25211:2;25181:47;;25205:4;25181:47;;25195:8;25181:47;;;25215:3;25220:7;25181:47;;;;;;;:::i;:::-;;;;;;;;25241:75;25277:8;25287:4;25293:2;25297:3;25302:7;25311:4;25241:35;:75::i;:::-;24250:1074;;;;;;:::o;37547:173::-;37603:16;37622:6;;;;;;;;;;;37603:25;;37648:8;37639:6;;:17;;;;;;;;;;;;;;;;;;37703:8;37672:40;;37693:8;37672:40;;;;;;;;;;;;37547:173;;:::o;23072:820::-;23274:1;23260:16;;:2;:16;;;;23252:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23331:16;23350:12;:10;:12::i;:::-;23331:31;;23375:96;23396:8;23406:4;23412:2;23416:21;23434:2;23416:17;:21::i;:::-;23439:25;23457:6;23439:17;:25::i;:::-;23466:4;23375:20;:96::i;:::-;23484:19;23506:9;:13;23516:2;23506:13;;;;;;;;;;;:19;23520:4;23506:19;;;;;;;;;;;;;;;;23484:41;;23559:6;23544:11;:21;;23536:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23684:6;23670:11;:20;23648:9;:13;23658:2;23648:13;;;;;;;;;;;:19;23662:4;23648:19;;;;;;;;;;;;;;;:42;;;;23733:6;23712:9;:13;23722:2;23712:13;;;;;;;;;;;:17;23726:2;23712:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23788:2;23757:46;;23782:4;23757:46;;23772:8;23757:46;;;23792:2;23796:6;23757:46;;;;;;;:::i;:::-;;;;;;;;23816:68;23847:8;23857:4;23863:2;23867;23871:6;23879:4;23816:30;:68::i;:::-;23072:820;;;;;;;:::o;33160:198::-;33226:16;33255:22;33294:1;33280:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33255:41;;33318:7;33307:5;33313:1;33307:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;33345:5;33338:12;;;33160:198;;;:::o;31358:221::-;;;;;;;:::o;31587:744::-;31802:15;:2;:13;;;:15::i;:::-;31798:526;;;31855:2;31838:38;;;31877:8;31887:4;31893:2;31897:6;31905:4;31838:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31834:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32186:6;32179:14;;;;;;;;;;;:::i;:::-;;;;;;;;31834:479;;;32235:62;;;;;;;;;;:::i;:::-;;;;;;;;31834:479;31972:43;;;31960:55;;;:8;:55;;;;31956:154;;32040:50;;;;;;;;;;:::i;:::-;;;;;;;;31956:154;31911:214;31798:526;31587:744;;;;;;:::o;32339:813::-;32579:15;:2;:13;;;:15::i;:::-;32575:570;;;32632:2;32615:43;;;32659:8;32669:4;32675:3;32680:7;32689:4;32615:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32611:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33007:6;33000:14;;;;;;;;;;;:::i;:::-;;;;;;;;32611:523;;;33056:62;;;;;;;;;;:::i;:::-;;;;;;;;32611:523;32788:48;;;32776:60;;;:8;:60;;;;32772:159;;32861:50;;;;;;;;;;:::i;:::-;;;;;;;;32772:159;32695:251;32575:570;32339:813;;;;;;:::o;8927:387::-;8987:4;9195:12;9262:7;9250:20;9242:28;;9305:1;9298:4;:8;9291:15;;;8927:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1380:677::-;1487:5;1512:81;1528:64;1585:6;1528:64;:::i;:::-;1512:81;:::i;:::-;1503:90;;1613:5;1642:6;1635:5;1628:21;1676:4;1669:5;1665:16;1658:23;;1702:6;1752:3;1744:4;1736:6;1732:17;1727:3;1723:27;1720:36;1717:2;;;1781:1;1778;1771:12;1717:2;1817:1;1802:249;1827:6;1824:1;1821:13;1802:249;;;1895:3;1924:48;1968:3;1956:10;1924:48;:::i;:::-;1919:3;1912:61;2002:4;1997:3;1993:14;1986:21;;2036:4;2031:3;2027:14;2020:21;;1862:189;1849:1;1846;1842:9;1837:14;;1802:249;;;1806:14;1493:564;;;;;;;:::o;2063:343::-;2140:5;2165:65;2181:48;2222:6;2181:48;:::i;:::-;2165:65;:::i;:::-;2156:74;;2253:6;2246:5;2239:21;2291:4;2284:5;2280:16;2329:3;2320:6;2315:3;2311:16;2308:25;2305:2;;;2346:1;2343;2336:12;2305:2;2359:41;2393:6;2388:3;2383;2359:41;:::i;:::-;2146:260;;;;;;:::o;2412:345::-;2490:5;2515:66;2531:49;2573:6;2531:49;:::i;:::-;2515:66;:::i;:::-;2506:75;;2604:6;2597:5;2590:21;2642:4;2635:5;2631:16;2680:3;2671:6;2666:3;2662:16;2659:25;2656:2;;;2697:1;2694;2687:12;2656:2;2710:41;2744:6;2739:3;2734;2710:41;:::i;:::-;2496:261;;;;;;:::o;2763:139::-;2809:5;2847:6;2834:20;2825:29;;2863:33;2890:5;2863:33;:::i;:::-;2815:87;;;;:::o;2925:303::-;2996:5;3045:3;3038:4;3030:6;3026:17;3022:27;3012:2;;3063:1;3060;3053:12;3012:2;3103:6;3090:20;3128:94;3218:3;3210:6;3203:4;3195:6;3191:17;3128:94;:::i;:::-;3119:103;;3002:226;;;;;:::o;3251:303::-;3322:5;3371:3;3364:4;3356:6;3352:17;3348:27;3338:2;;3389:1;3386;3379:12;3338:2;3429:6;3416:20;3454:94;3544:3;3536:6;3529:4;3521:6;3517:17;3454:94;:::i;:::-;3445:103;;3328:226;;;;;:::o;3577:318::-;3659:5;3708:3;3701:4;3693:6;3689:17;3685:27;3675:2;;3726:1;3723;3716:12;3675:2;3759:6;3753:13;3784:105;3885:3;3877:6;3870:4;3862:6;3858:17;3784:105;:::i;:::-;3775:114;;3665:230;;;;;:::o;3901:133::-;3944:5;3982:6;3969:20;3960:29;;3998:30;4022:5;3998:30;:::i;:::-;3950:84;;;;:::o;4040:137::-;4085:5;4123:6;4110:20;4101:29;;4139:32;4165:5;4139:32;:::i;:::-;4091:86;;;;:::o;4183:141::-;4239:5;4270:6;4264:13;4255:22;;4286:32;4312:5;4286:32;:::i;:::-;4245:79;;;;:::o;4343:271::-;4398:5;4447:3;4440:4;4432:6;4428:17;4424:27;4414:2;;4465:1;4462;4455:12;4414:2;4505:6;4492:20;4530:78;4604:3;4596:6;4589:4;4581:6;4577:17;4530:78;:::i;:::-;4521:87;;4404:210;;;;;:::o;4634:273::-;4690:5;4739:3;4732:4;4724:6;4720:17;4716:27;4706:2;;4757:1;4754;4747:12;4706:2;4797:6;4784:20;4822:79;4897:3;4889:6;4882:4;4874:6;4870:17;4822:79;:::i;:::-;4813:88;;4696:211;;;;;:::o;4913:139::-;4959:5;4997:6;4984:20;4975:29;;5013:33;5040:5;5013:33;:::i;:::-;4965:87;;;;:::o;5058:143::-;5115:5;5146:6;5140:13;5131:22;;5162:33;5189:5;5162:33;:::i;:::-;5121:80;;;;:::o;5207:262::-;5266:6;5315:2;5303:9;5294:7;5290:23;5286:32;5283:2;;;5331:1;5328;5321:12;5283:2;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5273:196;;;;:::o;5475:407::-;5543:6;5551;5600:2;5588:9;5579:7;5575:23;5571:32;5568:2;;;5616:1;5613;5606:12;5568:2;5659:1;5684:53;5729:7;5720:6;5709:9;5705:22;5684:53;:::i;:::-;5674:63;;5630:117;5786:2;5812:53;5857:7;5848:6;5837:9;5833:22;5812:53;:::i;:::-;5802:63;;5757:118;5558:324;;;;;:::o;5888:1241::-;6042:6;6050;6058;6066;6074;6123:3;6111:9;6102:7;6098:23;6094:33;6091:2;;;6140:1;6137;6130:12;6091:2;6183:1;6208:53;6253:7;6244:6;6233:9;6229:22;6208:53;:::i;:::-;6198:63;;6154:117;6310:2;6336:53;6381:7;6372:6;6361:9;6357:22;6336:53;:::i;:::-;6326:63;;6281:118;6466:2;6455:9;6451:18;6438:32;6497:18;6489:6;6486:30;6483:2;;;6529:1;6526;6519:12;6483:2;6557:78;6627:7;6618:6;6607:9;6603:22;6557:78;:::i;:::-;6547:88;;6409:236;6712:2;6701:9;6697:18;6684:32;6743:18;6735:6;6732:30;6729:2;;;6775:1;6772;6765:12;6729:2;6803:78;6873:7;6864:6;6853:9;6849:22;6803:78;:::i;:::-;6793:88;;6655:236;6958:3;6947:9;6943:19;6930:33;6990:18;6982:6;6979:30;6976:2;;;7022:1;7019;7012:12;6976:2;7050:62;7104:7;7095:6;7084:9;7080:22;7050:62;:::i;:::-;7040:72;;6901:221;6081:1048;;;;;;;;:::o;7135:955::-;7239:6;7247;7255;7263;7271;7320:3;7308:9;7299:7;7295:23;7291:33;7288:2;;;7337:1;7334;7327:12;7288:2;7380:1;7405:53;7450:7;7441:6;7430:9;7426:22;7405:53;:::i;:::-;7395:63;;7351:117;7507:2;7533:53;7578:7;7569:6;7558:9;7554:22;7533:53;:::i;:::-;7523:63;;7478:118;7635:2;7661:53;7706:7;7697:6;7686:9;7682:22;7661:53;:::i;:::-;7651:63;;7606:118;7763:2;7789:53;7834:7;7825:6;7814:9;7810:22;7789:53;:::i;:::-;7779:63;;7734:118;7919:3;7908:9;7904:19;7891:33;7951:18;7943:6;7940:30;7937:2;;;7983:1;7980;7973:12;7937:2;8011:62;8065:7;8056:6;8045:9;8041:22;8011:62;:::i;:::-;8001:72;;7862:221;7278:812;;;;;;;;:::o;8096:401::-;8161:6;8169;8218:2;8206:9;8197:7;8193:23;8189:32;8186:2;;;8234:1;8231;8224:12;8186:2;8277:1;8302:53;8347:7;8338:6;8327:9;8323:22;8302:53;:::i;:::-;8292:63;;8248:117;8404:2;8430:50;8472:7;8463:6;8452:9;8448:22;8430:50;:::i;:::-;8420:60;;8375:115;8176:321;;;;;:::o;8503:407::-;8571:6;8579;8628:2;8616:9;8607:7;8603:23;8599:32;8596:2;;;8644:1;8641;8634:12;8596:2;8687:1;8712:53;8757:7;8748:6;8737:9;8733:22;8712:53;:::i;:::-;8702:63;;8658:117;8814:2;8840:53;8885:7;8876:6;8865:9;8861:22;8840:53;:::i;:::-;8830:63;;8785:118;8586:324;;;;;:::o;8916:693::-;9034:6;9042;9091:2;9079:9;9070:7;9066:23;9062:32;9059:2;;;9107:1;9104;9097:12;9059:2;9178:1;9167:9;9163:17;9150:31;9208:18;9200:6;9197:30;9194:2;;;9240:1;9237;9230:12;9194:2;9268:78;9338:7;9329:6;9318:9;9314:22;9268:78;:::i;:::-;9258:88;;9121:235;9423:2;9412:9;9408:18;9395:32;9454:18;9446:6;9443:30;9440:2;;;9486:1;9483;9476:12;9440:2;9514:78;9584:7;9575:6;9564:9;9560:22;9514:78;:::i;:::-;9504:88;;9366:236;9049:560;;;;;:::o;9615:420::-;9710:6;9759:2;9747:9;9738:7;9734:23;9730:32;9727:2;;;9775:1;9772;9765:12;9727:2;9839:1;9828:9;9824:17;9818:24;9869:18;9861:6;9858:30;9855:2;;;9901:1;9898;9891:12;9855:2;9929:89;10010:7;10001:6;9990:9;9986:22;9929:89;:::i;:::-;9919:99;;9789:239;9717:318;;;;:::o;10041:260::-;10099:6;10148:2;10136:9;10127:7;10123:23;10119:32;10116:2;;;10164:1;10161;10154:12;10116:2;10207:1;10232:52;10276:7;10267:6;10256:9;10252:22;10232:52;:::i;:::-;10222:62;;10178:116;10106:195;;;;:::o;10307:282::-;10376:6;10425:2;10413:9;10404:7;10400:23;10396:32;10393:2;;;10441:1;10438;10431:12;10393:2;10484:1;10509:63;10564:7;10555:6;10544:9;10540:22;10509:63;:::i;:::-;10499:73;;10455:127;10383:206;;;;:::o;10595:375::-;10664:6;10713:2;10701:9;10692:7;10688:23;10684:32;10681:2;;;10729:1;10726;10719:12;10681:2;10800:1;10789:9;10785:17;10772:31;10830:18;10822:6;10819:30;10816:2;;;10862:1;10859;10852:12;10816:2;10890:63;10945:7;10936:6;10925:9;10921:22;10890:63;:::i;:::-;10880:73;;10743:220;10671:299;;;;:::o;10976:262::-;11035:6;11084:2;11072:9;11063:7;11059:23;11055:32;11052:2;;;11100:1;11097;11090:12;11052:2;11143:1;11168:53;11213:7;11204:6;11193:9;11189:22;11168:53;:::i;:::-;11158:63;;11114:117;11042:196;;;;:::o;11244:407::-;11312:6;11320;11369:2;11357:9;11348:7;11344:23;11340:32;11337:2;;;11385:1;11382;11375:12;11337:2;11428:1;11453:53;11498:7;11489:6;11478:9;11474:22;11453:53;:::i;:::-;11443:63;;11399:117;11555:2;11581:53;11626:7;11617:6;11606:9;11602:22;11581:53;:::i;:::-;11571:63;;11526:118;11327:324;;;;;:::o;11657:179::-;11726:10;11747:46;11789:3;11781:6;11747:46;:::i;:::-;11825:4;11820:3;11816:14;11802:28;;11737:99;;;;:::o;11842:118::-;11929:24;11947:5;11929:24;:::i;:::-;11924:3;11917:37;11907:53;;:::o;11996:732::-;12115:3;12144:54;12192:5;12144:54;:::i;:::-;12214:86;12293:6;12288:3;12214:86;:::i;:::-;12207:93;;12324:56;12374:5;12324:56;:::i;:::-;12403:7;12434:1;12419:284;12444:6;12441:1;12438:13;12419:284;;;12520:6;12514:13;12547:63;12606:3;12591:13;12547:63;:::i;:::-;12540:70;;12633:60;12686:6;12633:60;:::i;:::-;12623:70;;12479:224;12466:1;12463;12459:9;12454:14;;12419:284;;;12423:14;12719:3;12712:10;;12120:608;;;;;;;:::o;12734:109::-;12815:21;12830:5;12815:21;:::i;:::-;12810:3;12803:34;12793:50;;:::o;12849:360::-;12935:3;12963:38;12995:5;12963:38;:::i;:::-;13017:70;13080:6;13075:3;13017:70;:::i;:::-;13010:77;;13096:52;13141:6;13136:3;13129:4;13122:5;13118:16;13096:52;:::i;:::-;13173:29;13195:6;13173:29;:::i;:::-;13168:3;13164:39;13157:46;;12939:270;;;;;:::o;13215:364::-;13303:3;13331:39;13364:5;13331:39;:::i;:::-;13386:71;13450:6;13445:3;13386:71;:::i;:::-;13379:78;;13466:52;13511:6;13506:3;13499:4;13492:5;13488:16;13466:52;:::i;:::-;13543:29;13565:6;13543:29;:::i;:::-;13538:3;13534:39;13527:46;;13307:272;;;;;:::o;13585:377::-;13691:3;13719:39;13752:5;13719:39;:::i;:::-;13774:89;13856:6;13851:3;13774:89;:::i;:::-;13767:96;;13872:52;13917:6;13912:3;13905:4;13898:5;13894:16;13872:52;:::i;:::-;13949:6;13944:3;13940:16;13933:23;;13695:267;;;;;:::o;13992:845::-;14095:3;14132:5;14126:12;14161:36;14187:9;14161:36;:::i;:::-;14213:89;14295:6;14290:3;14213:89;:::i;:::-;14206:96;;14333:1;14322:9;14318:17;14349:1;14344:137;;;;14495:1;14490:341;;;;14311:520;;14344:137;14428:4;14424:9;14413;14409:25;14404:3;14397:38;14464:6;14459:3;14455:16;14448:23;;14344:137;;14490:341;14557:38;14589:5;14557:38;:::i;:::-;14617:1;14631:154;14645:6;14642:1;14639:13;14631:154;;;14719:7;14713:14;14709:1;14704:3;14700:11;14693:35;14769:1;14760:7;14756:15;14745:26;;14667:4;14664:1;14660:12;14655:17;;14631:154;;;14814:6;14809:3;14805:16;14798:23;;14497:334;;14311:520;;14099:738;;;;;;:::o;14843:366::-;14985:3;15006:67;15070:2;15065:3;15006:67;:::i;:::-;14999:74;;15082:93;15171:3;15082:93;:::i;:::-;15200:2;15195:3;15191:12;15184:19;;14989:220;;;:::o;15215:366::-;15357:3;15378:67;15442:2;15437:3;15378:67;:::i;:::-;15371:74;;15454:93;15543:3;15454:93;:::i;:::-;15572:2;15567:3;15563:12;15556:19;;15361:220;;;:::o;15587:366::-;15729:3;15750:67;15814:2;15809:3;15750:67;:::i;:::-;15743:74;;15826:93;15915:3;15826:93;:::i;:::-;15944:2;15939:3;15935:12;15928:19;;15733:220;;;:::o;15959:366::-;16101:3;16122:67;16186:2;16181:3;16122:67;:::i;:::-;16115:74;;16198:93;16287:3;16198:93;:::i;:::-;16316:2;16311:3;16307:12;16300:19;;16105:220;;;:::o;16331:366::-;16473:3;16494:67;16558:2;16553:3;16494:67;:::i;:::-;16487:74;;16570:93;16659:3;16570:93;:::i;:::-;16688:2;16683:3;16679:12;16672:19;;16477:220;;;:::o;16703:366::-;16845:3;16866:67;16930:2;16925:3;16866:67;:::i;:::-;16859:74;;16942:93;17031:3;16942:93;:::i;:::-;17060:2;17055:3;17051:12;17044:19;;16849:220;;;:::o;17075:366::-;17217:3;17238:67;17302:2;17297:3;17238:67;:::i;:::-;17231:74;;17314:93;17403:3;17314:93;:::i;:::-;17432:2;17427:3;17423:12;17416:19;;17221:220;;;:::o;17447:366::-;17589:3;17610:67;17674:2;17669:3;17610:67;:::i;:::-;17603:74;;17686:93;17775:3;17686:93;:::i;:::-;17804:2;17799:3;17795:12;17788:19;;17593:220;;;:::o;17819:366::-;17961:3;17982:67;18046:2;18041:3;17982:67;:::i;:::-;17975:74;;18058:93;18147:3;18058:93;:::i;:::-;18176:2;18171:3;18167:12;18160:19;;17965:220;;;:::o;18191:366::-;18333:3;18354:67;18418:2;18413:3;18354:67;:::i;:::-;18347:74;;18430:93;18519:3;18430:93;:::i;:::-;18548:2;18543:3;18539:12;18532:19;;18337:220;;;:::o;18563:366::-;18705:3;18726:67;18790:2;18785:3;18726:67;:::i;:::-;18719:74;;18802:93;18891:3;18802:93;:::i;:::-;18920:2;18915:3;18911:12;18904:19;;18709:220;;;:::o;18935:366::-;19077:3;19098:67;19162:2;19157:3;19098:67;:::i;:::-;19091:74;;19174:93;19263:3;19174:93;:::i;:::-;19292:2;19287:3;19283:12;19276:19;;19081:220;;;:::o;19307:366::-;19449:3;19470:67;19534:2;19529:3;19470:67;:::i;:::-;19463:74;;19546:93;19635:3;19546:93;:::i;:::-;19664:2;19659:3;19655:12;19648:19;;19453:220;;;:::o;19679:366::-;19821:3;19842:67;19906:2;19901:3;19842:67;:::i;:::-;19835:74;;19918:93;20007:3;19918:93;:::i;:::-;20036:2;20031:3;20027:12;20020:19;;19825:220;;;:::o;20051:366::-;20193:3;20214:67;20278:2;20273:3;20214:67;:::i;:::-;20207:74;;20290:93;20379:3;20290:93;:::i;:::-;20408:2;20403:3;20399:12;20392:19;;20197:220;;;:::o;20423:366::-;20565:3;20586:67;20650:2;20645:3;20586:67;:::i;:::-;20579:74;;20662:93;20751:3;20662:93;:::i;:::-;20780:2;20775:3;20771:12;20764:19;;20569:220;;;:::o;20795:108::-;20872:24;20890:5;20872:24;:::i;:::-;20867:3;20860:37;20850:53;;:::o;20909:118::-;20996:24;21014:5;20996:24;:::i;:::-;20991:3;20984:37;20974:53;;:::o;21033:429::-;21210:3;21232:92;21320:3;21311:6;21232:92;:::i;:::-;21225:99;;21341:95;21432:3;21423:6;21341:95;:::i;:::-;21334:102;;21453:3;21446:10;;21214:248;;;;;:::o;21468:222::-;21561:4;21599:2;21588:9;21584:18;21576:26;;21612:71;21680:1;21669:9;21665:17;21656:6;21612:71;:::i;:::-;21566:124;;;;:::o;21696:1053::-;22019:4;22057:3;22046:9;22042:19;22034:27;;22071:71;22139:1;22128:9;22124:17;22115:6;22071:71;:::i;:::-;22152:72;22220:2;22209:9;22205:18;22196:6;22152:72;:::i;:::-;22271:9;22265:4;22261:20;22256:2;22245:9;22241:18;22234:48;22299:108;22402:4;22393:6;22299:108;:::i;:::-;22291:116;;22454:9;22448:4;22444:20;22439:2;22428:9;22424:18;22417:48;22482:108;22585:4;22576:6;22482:108;:::i;:::-;22474:116;;22638:9;22632:4;22628:20;22622:3;22611:9;22607:19;22600:49;22666:76;22737:4;22728:6;22666:76;:::i;:::-;22658:84;;22024:725;;;;;;;;:::o;22755:751::-;22978:4;23016:3;23005:9;23001:19;22993:27;;23030:71;23098:1;23087:9;23083:17;23074:6;23030:71;:::i;:::-;23111:72;23179:2;23168:9;23164:18;23155:6;23111:72;:::i;:::-;23193;23261:2;23250:9;23246:18;23237:6;23193:72;:::i;:::-;23275;23343:2;23332:9;23328:18;23319:6;23275:72;:::i;:::-;23395:9;23389:4;23385:20;23379:3;23368:9;23364:19;23357:49;23423:76;23494:4;23485:6;23423:76;:::i;:::-;23415:84;;22983:523;;;;;;;;:::o;23512:373::-;23655:4;23693:2;23682:9;23678:18;23670:26;;23742:9;23736:4;23732:20;23728:1;23717:9;23713:17;23706:47;23770:108;23873:4;23864:6;23770:108;:::i;:::-;23762:116;;23660:225;;;;:::o;23891:634::-;24112:4;24150:2;24139:9;24135:18;24127:26;;24199:9;24193:4;24189:20;24185:1;24174:9;24170:17;24163:47;24227:108;24330:4;24321:6;24227:108;:::i;:::-;24219:116;;24382:9;24376:4;24372:20;24367:2;24356:9;24352:18;24345:48;24410:108;24513:4;24504:6;24410:108;:::i;:::-;24402:116;;24117:408;;;;;:::o;24531:210::-;24618:4;24656:2;24645:9;24641:18;24633:26;;24669:65;24731:1;24720:9;24716:17;24707:6;24669:65;:::i;:::-;24623:118;;;;:::o;24747:313::-;24860:4;24898:2;24887:9;24883:18;24875:26;;24947:9;24941:4;24937:20;24933:1;24922:9;24918:17;24911:47;24975:78;25048:4;25039:6;24975:78;:::i;:::-;24967:86;;24865:195;;;;:::o;25066:419::-;25232:4;25270:2;25259:9;25255:18;25247:26;;25319:9;25313:4;25309:20;25305:1;25294:9;25290:17;25283:47;25347:131;25473:4;25347:131;:::i;:::-;25339:139;;25237:248;;;:::o;25491:419::-;25657:4;25695:2;25684:9;25680:18;25672:26;;25744:9;25738:4;25734:20;25730:1;25719:9;25715:17;25708:47;25772:131;25898:4;25772:131;:::i;:::-;25764:139;;25662:248;;;:::o;25916:419::-;26082:4;26120:2;26109:9;26105:18;26097:26;;26169:9;26163:4;26159:20;26155:1;26144:9;26140:17;26133:47;26197:131;26323:4;26197:131;:::i;:::-;26189:139;;26087:248;;;:::o;26341:419::-;26507:4;26545:2;26534:9;26530:18;26522:26;;26594:9;26588:4;26584:20;26580:1;26569:9;26565:17;26558:47;26622:131;26748:4;26622:131;:::i;:::-;26614:139;;26512:248;;;:::o;26766:419::-;26932:4;26970:2;26959:9;26955:18;26947:26;;27019:9;27013:4;27009:20;27005:1;26994:9;26990:17;26983:47;27047:131;27173:4;27047:131;:::i;:::-;27039:139;;26937:248;;;:::o;27191:419::-;27357:4;27395:2;27384:9;27380:18;27372:26;;27444:9;27438:4;27434:20;27430:1;27419:9;27415:17;27408:47;27472:131;27598:4;27472:131;:::i;:::-;27464:139;;27362:248;;;:::o;27616:419::-;27782:4;27820:2;27809:9;27805:18;27797:26;;27869:9;27863:4;27859:20;27855:1;27844:9;27840:17;27833:47;27897:131;28023:4;27897:131;:::i;:::-;27889:139;;27787:248;;;:::o;28041:419::-;28207:4;28245:2;28234:9;28230:18;28222:26;;28294:9;28288:4;28284:20;28280:1;28269:9;28265:17;28258:47;28322:131;28448:4;28322:131;:::i;:::-;28314:139;;28212:248;;;:::o;28466:419::-;28632:4;28670:2;28659:9;28655:18;28647:26;;28719:9;28713:4;28709:20;28705:1;28694:9;28690:17;28683:47;28747:131;28873:4;28747:131;:::i;:::-;28739:139;;28637:248;;;:::o;28891:419::-;29057:4;29095:2;29084:9;29080:18;29072:26;;29144:9;29138:4;29134:20;29130:1;29119:9;29115:17;29108:47;29172:131;29298:4;29172:131;:::i;:::-;29164:139;;29062:248;;;:::o;29316:419::-;29482:4;29520:2;29509:9;29505:18;29497:26;;29569:9;29563:4;29559:20;29555:1;29544:9;29540:17;29533:47;29597:131;29723:4;29597:131;:::i;:::-;29589:139;;29487:248;;;:::o;29741:419::-;29907:4;29945:2;29934:9;29930:18;29922:26;;29994:9;29988:4;29984:20;29980:1;29969:9;29965:17;29958:47;30022:131;30148:4;30022:131;:::i;:::-;30014:139;;29912:248;;;:::o;30166:419::-;30332:4;30370:2;30359:9;30355:18;30347:26;;30419:9;30413:4;30409:20;30405:1;30394:9;30390:17;30383:47;30447:131;30573:4;30447:131;:::i;:::-;30439:139;;30337:248;;;:::o;30591:419::-;30757:4;30795:2;30784:9;30780:18;30772:26;;30844:9;30838:4;30834:20;30830:1;30819:9;30815:17;30808:47;30872:131;30998:4;30872:131;:::i;:::-;30864:139;;30762:248;;;:::o;31016:419::-;31182:4;31220:2;31209:9;31205:18;31197:26;;31269:9;31263:4;31259:20;31255:1;31244:9;31240:17;31233:47;31297:131;31423:4;31297:131;:::i;:::-;31289:139;;31187:248;;;:::o;31441:419::-;31607:4;31645:2;31634:9;31630:18;31622:26;;31694:9;31688:4;31684:20;31680:1;31669:9;31665:17;31658:47;31722:131;31848:4;31722:131;:::i;:::-;31714:139;;31612:248;;;:::o;31866:222::-;31959:4;31997:2;31986:9;31982:18;31974:26;;32010:71;32078:1;32067:9;32063:17;32054:6;32010:71;:::i;:::-;31964:124;;;;:::o;32094:332::-;32215:4;32253:2;32242:9;32238:18;32230:26;;32266:71;32334:1;32323:9;32319:17;32310:6;32266:71;:::i;:::-;32347:72;32415:2;32404:9;32400:18;32391:6;32347:72;:::i;:::-;32220:206;;;;;:::o;32432:129::-;32466:6;32493:20;;:::i;:::-;32483:30;;32522:33;32550:4;32542:6;32522:33;:::i;:::-;32473:88;;;:::o;32567:75::-;32600:6;32633:2;32627:9;32617:19;;32607:35;:::o;32648:311::-;32725:4;32815:18;32807:6;32804:30;32801:2;;;32837:18;;:::i;:::-;32801:2;32887:4;32879:6;32875:17;32867:25;;32947:4;32941;32937:15;32929:23;;32730:229;;;:::o;32965:311::-;33042:4;33132:18;33124:6;33121:30;33118:2;;;33154:18;;:::i;:::-;33118:2;33204:4;33196:6;33192:17;33184:25;;33264:4;33258;33254:15;33246:23;;33047:229;;;:::o;33282:307::-;33343:4;33433:18;33425:6;33422:30;33419:2;;;33455:18;;:::i;:::-;33419:2;33493:29;33515:6;33493:29;:::i;:::-;33485:37;;33577:4;33571;33567:15;33559:23;;33348:241;;;:::o;33595:308::-;33657:4;33747:18;33739:6;33736:30;33733:2;;;33769:18;;:::i;:::-;33733:2;33807:29;33829:6;33807:29;:::i;:::-;33799:37;;33891:4;33885;33881:15;33873:23;;33662:241;;;:::o;33909:132::-;33976:4;33999:3;33991:11;;34029:4;34024:3;34020:14;34012:22;;33981:60;;;:::o;34047:141::-;34096:4;34119:3;34111:11;;34142:3;34139:1;34132:14;34176:4;34173:1;34163:18;34155:26;;34101:87;;;:::o;34194:114::-;34261:6;34295:5;34289:12;34279:22;;34268:40;;;:::o;34314:98::-;34365:6;34399:5;34393:12;34383:22;;34372:40;;;:::o;34418:99::-;34470:6;34504:5;34498:12;34488:22;;34477:40;;;:::o;34523:113::-;34593:4;34625;34620:3;34616:14;34608:22;;34598:38;;;:::o;34642:184::-;34741:11;34775:6;34770:3;34763:19;34815:4;34810:3;34806:14;34791:29;;34753:73;;;;:::o;34832:168::-;34915:11;34949:6;34944:3;34937:19;34989:4;34984:3;34980:14;34965:29;;34927:73;;;;:::o;35006:169::-;35090:11;35124:6;35119:3;35112:19;35164:4;35159:3;35155:14;35140:29;;35102:73;;;;:::o;35181:148::-;35283:11;35320:3;35305:18;;35295:34;;;;:::o;35335:305::-;35375:3;35394:20;35412:1;35394:20;:::i;:::-;35389:25;;35428:20;35446:1;35428:20;:::i;:::-;35423:25;;35582:1;35514:66;35510:74;35507:1;35504:81;35501:2;;;35588:18;;:::i;:::-;35501:2;35632:1;35629;35625:9;35618:16;;35379:261;;;;:::o;35646:185::-;35686:1;35703:20;35721:1;35703:20;:::i;:::-;35698:25;;35737:20;35755:1;35737:20;:::i;:::-;35732:25;;35776:1;35766:2;;35781:18;;:::i;:::-;35766:2;35823:1;35820;35816:9;35811:14;;35688:143;;;;:::o;35837:191::-;35877:4;35897:20;35915:1;35897:20;:::i;:::-;35892:25;;35931:20;35949:1;35931:20;:::i;:::-;35926:25;;35970:1;35967;35964:8;35961:2;;;35975:18;;:::i;:::-;35961:2;36020:1;36017;36013:9;36005:17;;35882:146;;;;:::o;36034:96::-;36071:7;36100:24;36118:5;36100:24;:::i;:::-;36089:35;;36079:51;;;:::o;36136:90::-;36170:7;36213:5;36206:13;36199:21;36188:32;;36178:48;;;:::o;36232:149::-;36268:7;36308:66;36301:5;36297:78;36286:89;;36276:105;;;:::o;36387:126::-;36424:7;36464:42;36457:5;36453:54;36442:65;;36432:81;;;:::o;36519:77::-;36556:7;36585:5;36574:16;;36564:32;;;:::o;36602:154::-;36686:6;36681:3;36676;36663:30;36748:1;36739:6;36734:3;36730:16;36723:27;36653:103;;;:::o;36762:307::-;36830:1;36840:113;36854:6;36851:1;36848:13;36840:113;;;36939:1;36934:3;36930:11;36924:18;36920:1;36915:3;36911:11;36904:39;36876:2;36873:1;36869:10;36864:15;;36840:113;;;36971:6;36968:1;36965:13;36962:2;;;37051:1;37042:6;37037:3;37033:16;37026:27;36962:2;36811:258;;;;:::o;37075:320::-;37119:6;37156:1;37150:4;37146:12;37136:22;;37203:1;37197:4;37193:12;37224:18;37214:2;;37280:4;37272:6;37268:17;37258:27;;37214:2;37342;37334:6;37331:14;37311:18;37308:38;37305:2;;;37361:18;;:::i;:::-;37305:2;37126:269;;;;:::o;37401:281::-;37484:27;37506:4;37484:27;:::i;:::-;37476:6;37472:40;37614:6;37602:10;37599:22;37578:18;37566:10;37563:34;37560:62;37557:2;;;37625:18;;:::i;:::-;37557:2;37665:10;37661:2;37654:22;37444:238;;;:::o;37688:233::-;37727:3;37750:24;37768:5;37750:24;:::i;:::-;37741:33;;37796:66;37789:5;37786:77;37783:2;;;37866:18;;:::i;:::-;37783:2;37913:1;37906:5;37902:13;37895:20;;37731:190;;;:::o;37927:176::-;37959:1;37976:20;37994:1;37976:20;:::i;:::-;37971:25;;38010:20;38028:1;38010:20;:::i;:::-;38005:25;;38049:1;38039:2;;38054:18;;:::i;:::-;38039:2;38095:1;38092;38088:9;38083:14;;37961:142;;;;:::o;38109:180::-;38157:77;38154:1;38147:88;38254:4;38251:1;38244:15;38278:4;38275:1;38268:15;38295:180;38343:77;38340:1;38333:88;38440:4;38437:1;38430:15;38464:4;38461:1;38454:15;38481:180;38529:77;38526:1;38519:88;38626:4;38623:1;38616:15;38650:4;38647:1;38640:15;38667:180;38715:77;38712:1;38705:88;38812:4;38809:1;38802:15;38836:4;38833:1;38826:15;38853:183;38888:3;38926:1;38908:16;38905:23;38902:2;;;38964:1;38961;38958;38943:23;38986:34;39017:1;39011:8;38986:34;:::i;:::-;38979:41;;38902:2;38892:144;:::o;39042:102::-;39083:6;39134:2;39130:7;39125:2;39118:5;39114:14;39110:28;39100:38;;39090:54;;;:::o;39150:106::-;39194:8;39243:5;39238:3;39234:15;39213:36;;39203:53;;;:::o;39262:239::-;39402:34;39398:1;39390:6;39386:14;39379:58;39471:22;39466:2;39458:6;39454:15;39447:47;39368:133;:::o;39507:227::-;39647:34;39643:1;39635:6;39631:14;39624:58;39716:10;39711:2;39703:6;39699:15;39692:35;39613:121;:::o;39740:230::-;39880:34;39876:1;39868:6;39864:14;39857:58;39949:13;39944:2;39936:6;39932:15;39925:38;39846:124;:::o;39976:225::-;40116:34;40112:1;40104:6;40100:14;40093:58;40185:8;40180:2;40172:6;40168:15;40161:33;40082:119;:::o;40207:228::-;40347:34;40343:1;40335:6;40331:14;40324:58;40416:11;40411:2;40403:6;40399:15;40392:36;40313:122;:::o;40441:224::-;40581:34;40577:1;40569:6;40565:14;40558:58;40650:7;40645:2;40637:6;40633:15;40626:32;40547:118;:::o;40671:237::-;40811:34;40807:1;40799:6;40795:14;40788:58;40880:20;40875:2;40867:6;40863:15;40856:45;40777:131;:::o;40914:229::-;41054:34;41050:1;41042:6;41038:14;41031:58;41123:12;41118:2;41110:6;41106:15;41099:37;41020:123;:::o;41149:182::-;41289:34;41285:1;41277:6;41273:14;41266:58;41255:76;:::o;41337:178::-;41477:30;41473:1;41465:6;41461:14;41454:54;41443:72;:::o;41521:169::-;41661:21;41657:1;41649:6;41645:14;41638:45;41627:63;:::o;41696:228::-;41836:34;41832:1;41824:6;41820:14;41813:58;41905:11;41900:2;41892:6;41888:15;41881:36;41802:122;:::o;41930:228::-;42070:34;42066:1;42058:6;42054:14;42047:58;42139:11;42134:2;42126:6;42122:15;42115:36;42036:122;:::o;42164:227::-;42304:34;42300:1;42292:6;42288:14;42281:58;42373:10;42368:2;42360:6;42356:15;42349:35;42270:121;:::o;42397:220::-;42537:34;42533:1;42525:6;42521:14;42514:58;42606:3;42601:2;42593:6;42589:15;42582:28;42503:114;:::o;42623:166::-;42763:18;42759:1;42751:6;42747:14;42740:42;42729:60;:::o;42795:711::-;42834:3;42872:4;42854:16;42851:26;42848:2;;;42880:5;;42848:2;42909:20;;:::i;:::-;42984:1;42966:16;42962:24;42959:1;42953:4;42938:49;43017:4;43011:11;43116:16;43109:4;43101:6;43097:17;43094:39;43061:18;43053:6;43050:30;43034:113;43031:2;;;43162:5;;;;43031:2;43208:6;43202:4;43198:17;43244:3;43238:10;43271:18;43263:6;43260:30;43257:2;;;43293:5;;;;;;43257:2;43341:6;43334:4;43329:3;43325:14;43321:27;43400:1;43382:16;43378:24;43372:4;43368:35;43363:3;43360:44;43357:2;;;43407:5;;;;;;;43357:2;43424:57;43472:6;43466:4;43462:17;43454:6;43450:30;43444:4;43424:57;:::i;:::-;43497:3;43490:10;;42838:668;;;;;;;:::o;43512:122::-;43585:24;43603:5;43585:24;:::i;:::-;43578:5;43575:35;43565:2;;43624:1;43621;43614:12;43565:2;43555:79;:::o;43640:116::-;43710:21;43725:5;43710:21;:::i;:::-;43703:5;43700:32;43690:2;;43746:1;43743;43736:12;43690:2;43680:76;:::o;43762:120::-;43834:23;43851:5;43834:23;:::i;:::-;43827:5;43824:34;43814:2;;43872:1;43869;43862:12;43814:2;43804:78;:::o;43888:122::-;43961:24;43979:5;43961:24;:::i;:::-;43954:5;43951:35;43941:2;;44000:1;43997;43990:12;43941:2;43931:79;:::o

Swarm Source

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