Token Corgiclub

Overview CRC1155

Total Supply:
0 Corgiclub

Holders:
1 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HaveFeeCollection

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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


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

pragma solidity ^0.8.0;
// SPDX-License-Identifier: MIT


/**
 * @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]


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

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]


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

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.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

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


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


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

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]


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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

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


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


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

pragma solidity ^0.8.0;

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


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


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

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 {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

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

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

        address operator = _msgSender();

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

        address operator = _msgSender();

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

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

        _doSafeTransferAcceptanceCheck(operator, address(0), to, 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 `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `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/access/[email protected]


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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

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

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

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

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


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


// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File contracts/interfaces/ERC1155Tradable.sol

pragma solidity ^0.8.0;





abstract contract ERC1155Tradable is ERC1155, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _counter;
    using SafeMath for uint256;

    mapping (uint256 => address) public creators;
    mapping (uint256 => uint256) public tokenSupply;
    mapping (uint256 => string) public uris;

    string public name;
    string public symbol;

    modifier creatorOnly(uint256 _id) {
        require(creators[_id] == msg.sender, "ERC1155Tradable#creatorOnly: ONLY_CREATOR_ALLOWED");
        _;
    }

    modifier ownersOnly(uint256 _id) {
        require(balanceOf(msg.sender, _id) > 0, "ERC1155Tradable#ownersOnly: ONLY_OWNERS_ALLOWED");
        _;
    }

    constructor(
        string memory _name,
        string memory _symbol
    ) ERC1155("") {
        name = _name;
        symbol = _symbol;
    }

    function create(
        address _initialOwner,
        uint256 _initialSupply,
        string calldata _uri
    ) public virtual payable returns (uint256) {
        uint256 _id = _counter.current();
        _counter.increment();

        _mint(_initialOwner, _id, _initialSupply, "");
        tokenSupply[_id] = _initialSupply;
        creators[_id] = msg.sender;
        uris[_id] = _uri;

        return _id;
    }

}


// File contracts/interfaces/ICollectionRoyalty.sol

pragma solidity ^0.8.0;


interface ICollectionRoyalty {
    function setRoyalty(uint256 _id, uint256 royalty) external;
    
    function getRoyalty(uint256 _id) external view returns(uint256);

    function getCreator(uint256 _id) external view returns(address);

    function getDecimal() external view returns(uint256);
}


// File contracts/ERC1155Collection.sol

pragma solidity ^0.8.0;



contract ERC1155Collection is ERC1155Tradable, ICollectionRoyalty {
    string public contractURI;
    mapping (uint256 => uint256) public royalties;
    uint256 decimal = 2;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _uri
    ) ERC1155Tradable(_name, _symbol) {
        contractURI = _uri;
    }

    function uri(uint256 _id) public view override returns (string memory) {
        return uris[_id];
    }

    function setRoyalty(uint256 _id, uint256 royalty) public override creatorOnly(_id) {
        royalties[_id] = royalty;
    }
    
    function getRoyalty(uint256 _id) public override view returns(uint256) {
        return royalties[_id];
    }

    function getCreator(uint256 _id) public override view returns(address) {
        return creators[_id];
    }

    function getDecimal() public override view returns(uint256) {
        return decimal;
    }

}


// File contracts/HaveFeeCollection.sol

pragma solidity ^0.8.0;


contract HaveFeeCollection is ERC1155Collection {
    using Counters for Counters.Counter;
    Counters.Counter private _counter;

    uint256 public publicFee;
    uint256 public earlyFee;
    uint256 public earlyLimit;
    address public payee;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _uri,
        uint256 _publicFee,
        uint256 _earlyFee,
        uint32 _earlyLimit,
        address _payee
    ) ERC1155Collection(_name, _symbol, _uri) {
        publicFee = _publicFee;
        earlyFee = _earlyFee;
        earlyLimit = _earlyLimit;
        payee = _payee;
    }

    modifier enoughFee(uint256 value, address minter) {
        uint256 fee = publicFee;
        if (_counter.current() < earlyLimit) {
            fee = earlyFee;
        }
        if (minter == payee) {
            fee = 0;
        }
        require(value == fee, "Not enough fee");
        _;
    }

    function create(
        address _initialOwner,
        uint256 _initialSupply,
        string calldata _uri
    ) public enoughFee(msg.value, msg.sender) payable override returns (uint256) {
        uint256 _id = super.create(_initialOwner, _initialSupply, _uri);
        _counter.increment();
        return _id;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"uint256","name":"_publicFee","type":"uint256"},{"internalType":"uint256","name":"_earlyFee","type":"uint256"},{"internalType":"uint32","name":"_earlyLimit","type":"uint32"},{"internalType":"address","name":"_payee","type":"address"}],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"create","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDecimal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getRoyalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"royalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"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":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"royalty","type":"uint256"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uris","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526002600c553480156200001657600080fd5b506040516200401f3803806200401f83398181016040528101906200003c919062000399565b86868682826040518060200160405280600081525062000062816200013c60201b60201c565b5062000083620000776200015860201b60201c565b6200016060201b60201c565b81600890805190602001906200009b92919062000226565b508060099080519060200190620000b492919062000226565b50505080600a9080519060200190620000cf92919062000226565b5050505083600e8190555082600f819055508163ffffffff1660108190555080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050620006c9565b80600290805190602001906200015492919062000226565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000234906200058c565b90600052602060002090601f016020900481019282620002585760008555620002a4565b82601f106200027357805160ff1916838001178555620002a4565b82800160010185558215620002a4579182015b82811115620002a357825182559160200191906001019062000286565b5b509050620002b39190620002b7565b5090565b5b80821115620002d2576000816000905550600101620002b8565b5090565b6000620002ed620002e784620004d2565b620004a9565b9050828152602081018484840111156200030c576200030b6200065b565b5b6200031984828562000556565b509392505050565b60008151905062000332816200067b565b92915050565b600082601f83011262000350576200034f62000656565b5b815162000362848260208601620002d6565b91505092915050565b6000815190506200037c8162000695565b92915050565b6000815190506200039381620006af565b92915050565b600080600080600080600060e0888a031215620003bb57620003ba62000665565b5b600088015167ffffffffffffffff811115620003dc57620003db62000660565b5b620003ea8a828b0162000338565b975050602088015167ffffffffffffffff8111156200040e576200040d62000660565b5b6200041c8a828b0162000338565b965050604088015167ffffffffffffffff81111562000440576200043f62000660565b5b6200044e8a828b0162000338565b9550506060620004618a828b016200036b565b9450506080620004748a828b016200036b565b93505060a0620004878a828b0162000382565b92505060c06200049a8a828b0162000321565b91505092959891949750929550565b6000620004b5620004c8565b9050620004c38282620005c2565b919050565b6000604051905090565b600067ffffffffffffffff821115620004f057620004ef62000627565b5b620004fb826200066a565b9050602081019050919050565b600062000515826200051c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60005b838110156200057657808201518184015260208101905062000559565b8381111562000586576000848401525b50505050565b60006002820490506001821680620005a557607f821691505b60208210811415620005bc57620005bb620005f8565b5b50919050565b620005cd826200066a565b810181811067ffffffffffffffff82111715620005ef57620005ee62000627565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006868162000508565b81146200069257600080fd5b50565b620006a0816200053c565b8114620006ac57600080fd5b50565b620006ba8162000546565b8114620006c657600080fd5b50565b61394680620006d96000396000f3fe60806040526004361061019b5760003560e01c806369fc551a116100ec578063ae90b2131161008a578063e8a3d48511610064578063e8a3d4851461061c578063e985e9c514610647578063f242432a14610684578063f2fde38b146106ad5761019b565b8063ae90b21314610577578063cd53d08e146105a2578063d48e638a146105df5761019b565b80638da5cb5b116100c65780638da5cb5b146104cf578063933a6f0d146104fa57806395d89b4114610523578063a22cb4651461054e5761019b565b806369fc551a1461044b578063715018a61461047b5780637f77f574146104925761019b565b80631af9cf491161015957806334ce10c41161013357806334ce10c41461038d5780634e1273f4146103b857806359646463146103f55780635fe212ef146104205761019b565b80631af9cf49146102ea5780632693ebf2146103275780632eb2c2d6146103645761019b565b8062fdd58e146101a057806301ffc9a7146101dd57806306fdde031461021a5780630e89341c146102455780631253c5461461028257806315bbd78f146102bf575b600080fd5b3480156101ac57600080fd5b506101c760048036038101906101c2919061271d565b6106d6565b6040516101d49190612f94565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190612849565b61079f565b6040516102119190612d77565b60405180910390f35b34801561022657600080fd5b5061022f610881565b60405161023c9190612d92565b60405180910390f35b34801561025157600080fd5b5061026c600480360381019061026791906128a3565b61090f565b6040516102799190612d92565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a491906128a3565b6109b4565b6040516102b69190612d92565b60405180910390f35b3480156102cb57600080fd5b506102d4610a54565b6040516102e19190612f94565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c91906128a3565b610a5a565b60405161031e9190612f94565b60405180910390f35b34801561033357600080fd5b5061034e600480360381019061034991906128a3565b610a77565b60405161035b9190612f94565b60405180910390f35b34801561037057600080fd5b5061038b60048036038101906103869190612577565b610a8f565b005b34801561039957600080fd5b506103a2610b30565b6040516103af9190612f94565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da91906127d1565b610b3a565b6040516103ec9190612d1e565b60405180910390f35b34801561040157600080fd5b5061040a610c53565b6040516104179190612f94565b60405180910390f35b34801561042c57600080fd5b50610435610c59565b6040516104429190612f94565b60405180910390f35b6104656004803603810190610460919061275d565b610c5f565b6040516104729190612f94565b60405180910390f35b34801561048757600080fd5b50610490610d49565b005b34801561049e57600080fd5b506104b960048036038101906104b491906128a3565b610dd1565b6040516104c69190612f94565b60405180910390f35b3480156104db57600080fd5b506104e4610de9565b6040516104f19190612c41565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c91906128d0565b610e13565b005b34801561052f57600080fd5b50610538610ed2565b6040516105459190612d92565b60405180910390f35b34801561055a57600080fd5b50610575600480360381019061057091906126dd565b610f60565b005b34801561058357600080fd5b5061058c610f76565b6040516105999190612c41565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c491906128a3565b610f9c565b6040516105d69190612c41565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906128a3565b610fcf565b6040516106139190612c41565b60405180910390f35b34801561062857600080fd5b5061063161100c565b60405161063e9190612d92565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190612537565b61109a565b60405161067b9190612d77565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612646565b61112e565b005b3480156106b957600080fd5b506106d460048036038101906106cf919061250a565b6111cf565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073e90612e14565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087a5750610879826112c7565b5b9050919050565b6008805461088e90613203565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90613203565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b505050505081565b606060076000838152602001908152602001600020805461092f90613203565b80601f016020809104026020016040519081016040528092919081815260200182805461095b90613203565b80156109a85780601f1061097d576101008083540402835291602001916109a8565b820191906000526020600020905b81548152906001019060200180831161098b57829003601f168201915b50505050509050919050565b600760205280600052604060002060009150905080546109d390613203565b80601f01602080910402602001604051908101604052809291908181526020018280546109ff90613203565b8015610a4c5780601f10610a2157610100808354040283529160200191610a4c565b820191906000526020600020905b815481529060010190602001808311610a2f57829003601f168201915b505050505081565b600f5481565b6000600b6000838152602001908152602001600020549050919050565b60066020528060005260406000206000915090505481565b610a97611331565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610add5750610adc85610ad7611331565b61109a565b5b610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390612e94565b60405180910390fd5b610b298585858585611339565b5050505050565b6000600c54905090565b60608151835114610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790612f14565b60405180910390fd5b6000835167ffffffffffffffff811115610b9d57610b9c61333c565b5b604051908082528060200260200182016040528015610bcb5781602001602082028036833780820191505090505b50905060005b8451811015610c4857610c18858281518110610bf057610bef61330d565b5b6020026020010151858381518110610c0b57610c0a61330d565b5b60200260200101516106d6565b828281518110610c2b57610c2a61330d565b5b60200260200101818152505080610c4190613266565b9050610bd1565b508091505092915050565b600e5481565b60105481565b600034336000600e549050601054610c77600d61164d565b1015610c8357600f5490505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cde57600090505b808314610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790612df4565b60405180910390fd5b6000610d2e8989898961165b565b9050610d3a600d611728565b80945050505050949350505050565b610d51611331565b73ffffffffffffffffffffffffffffffffffffffff16610d6f610de9565b73ffffffffffffffffffffffffffffffffffffffff1614610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90612ed4565b60405180910390fd5b610dcf600061173e565b565b600b6020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b813373ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90612f74565b60405180910390fd5b81600b600085815260200190815260200160002081905550505050565b60098054610edf90613203565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0b90613203565b8015610f585780601f10610f2d57610100808354040283529160200191610f58565b820191906000526020600020905b815481529060010190602001808311610f3b57829003601f168201915b505050505081565b610f72610f6b611331565b8383611804565b5050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a805461101990613203565b80601f016020809104026020016040519081016040528092919081815260200182805461104590613203565b80156110925780601f1061106757610100808354040283529160200191611092565b820191906000526020600020905b81548152906001019060200180831161107557829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611136611331565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061117c575061117b85611176611331565b61109a565b5b6111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b290612e54565b60405180910390fd5b6111c88585858585611971565b5050505050565b6111d7611331565b73ffffffffffffffffffffffffffffffffffffffff166111f5610de9565b73ffffffffffffffffffffffffffffffffffffffff161461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290612ed4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b290612e34565b60405180910390fd5b6112c48161173e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b815183511461137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490612f34565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e490612e74565b60405180910390fd5b60006113f7611331565b9050611407818787878787611bf3565b60005b84518110156115b85760008582815181106114285761142761330d565b5b6020026020010151905060008583815181106114475761144661330d565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90612eb4565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461159d91906130f7565b92505081905550505050806115b190613266565b905061140a565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161162f929190612d40565b60405180910390a4611645818787878787611bfb565b505050505050565b600081600001549050919050565b600080611668600461164d565b90506116746004611728565b61168f86828760405180602001604052806000815250611de2565b846006600083815260200190815260200160002081905550336005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838360076000848152602001908152602001600020919061171b9291906121fc565b5080915050949350505050565b6001816000016000828254019250508190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186a90612ef4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119649190612d77565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890612e74565b60405180910390fd5b60006119eb611331565b9050611a0b8187876119fc88611f78565b611a0588611f78565b87611bf3565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990612eb4565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b5791906130f7565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611bd4929190612faf565b60405180910390a4611bea828888888888611ff2565b50505050505050565b505050505050565b611c1a8473ffffffffffffffffffffffffffffffffffffffff166121d9565b15611dda578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611c60959493929190612c5c565b602060405180830381600087803b158015611c7a57600080fd5b505af1925050508015611cab57506040513d601f19601f82011682018060405250810190611ca89190612876565b60015b611d5157611cb761336b565b806308c379a01415611d145750611ccc61381e565b80611cd75750611d16565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b9190612d92565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890612db4565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf90612dd4565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990612f54565b60405180910390fd5b6000611e5c611331565b9050611e7d81600087611e6e88611f78565b611e7788611f78565b87611bf3565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611edc91906130f7565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611f5a929190612faf565b60405180910390a4611f7181600087878787611ff2565b5050505050565b60606000600167ffffffffffffffff811115611f9757611f9661333c565b5b604051908082528060200260200182016040528015611fc55781602001602082028036833780820191505090505b5090508281600081518110611fdd57611fdc61330d565b5b60200260200101818152505080915050919050565b6120118473ffffffffffffffffffffffffffffffffffffffff166121d9565b156121d1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612057959493929190612cc4565b602060405180830381600087803b15801561207157600080fd5b505af19250505080156120a257506040513d601f19601f8201168201806040525081019061209f9190612876565b60015b612148576120ae61336b565b806308c379a0141561210b57506120c361381e565b806120ce575061210d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121029190612d92565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213f90612db4565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c690612dd4565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461220890613203565b90600052602060002090601f01602090048101928261222a5760008555612271565b82601f1061224357803560ff1916838001178555612271565b82800160010185558215612271579182015b82811115612270578235825591602001919060010190612255565b5b50905061227e9190612282565b5090565b5b8082111561229b576000816000905550600101612283565b5090565b60006122b26122ad84612ffd565b612fd8565b905080838252602082019050828560208602820111156122d5576122d4613397565b5b60005b8581101561230557816122eb88826123c1565b8452602084019350602083019250506001810190506122d8565b5050509392505050565b600061232261231d84613029565b612fd8565b9050808382526020820190508285602086028201111561234557612344613397565b5b60005b85811015612375578161235b88826124f5565b845260208401935060208301925050600181019050612348565b5050509392505050565b600061239261238d84613055565b612fd8565b9050828152602081018484840111156123ae576123ad61339c565b5b6123b98482856131c1565b509392505050565b6000813590506123d0816138b4565b92915050565b600082601f8301126123eb576123ea613392565b5b81356123fb84826020860161229f565b91505092915050565b600082601f83011261241957612418613392565b5b813561242984826020860161230f565b91505092915050565b600081359050612441816138cb565b92915050565b600081359050612456816138e2565b92915050565b60008151905061246b816138e2565b92915050565b600082601f83011261248657612485613392565b5b813561249684826020860161237f565b91505092915050565b60008083601f8401126124b5576124b4613392565b5b8235905067ffffffffffffffff8111156124d2576124d161338d565b5b6020830191508360018202830111156124ee576124ed613397565b5b9250929050565b600081359050612504816138f9565b92915050565b6000602082840312156125205761251f6133a6565b5b600061252e848285016123c1565b91505092915050565b6000806040838503121561254e5761254d6133a6565b5b600061255c858286016123c1565b925050602061256d858286016123c1565b9150509250929050565b600080600080600060a08688031215612593576125926133a6565b5b60006125a1888289016123c1565b95505060206125b2888289016123c1565b945050604086013567ffffffffffffffff8111156125d3576125d26133a1565b5b6125df88828901612404565b935050606086013567ffffffffffffffff811115612600576125ff6133a1565b5b61260c88828901612404565b925050608086013567ffffffffffffffff81111561262d5761262c6133a1565b5b61263988828901612471565b9150509295509295909350565b600080600080600060a08688031215612662576126616133a6565b5b6000612670888289016123c1565b9550506020612681888289016123c1565b9450506040612692888289016124f5565b93505060606126a3888289016124f5565b925050608086013567ffffffffffffffff8111156126c4576126c36133a1565b5b6126d088828901612471565b9150509295509295909350565b600080604083850312156126f4576126f36133a6565b5b6000612702858286016123c1565b925050602061271385828601612432565b9150509250929050565b60008060408385031215612734576127336133a6565b5b6000612742858286016123c1565b9250506020612753858286016124f5565b9150509250929050565b60008060008060608587031215612777576127766133a6565b5b6000612785878288016123c1565b9450506020612796878288016124f5565b935050604085013567ffffffffffffffff8111156127b7576127b66133a1565b5b6127c38782880161249f565b925092505092959194509250565b600080604083850312156127e8576127e76133a6565b5b600083013567ffffffffffffffff811115612806576128056133a1565b5b612812858286016123d6565b925050602083013567ffffffffffffffff811115612833576128326133a1565b5b61283f85828601612404565b9150509250929050565b60006020828403121561285f5761285e6133a6565b5b600061286d84828501612447565b91505092915050565b60006020828403121561288c5761288b6133a6565b5b600061289a8482850161245c565b91505092915050565b6000602082840312156128b9576128b86133a6565b5b60006128c7848285016124f5565b91505092915050565b600080604083850312156128e7576128e66133a6565b5b60006128f5858286016124f5565b9250506020612906858286016124f5565b9150509250929050565b600061291c8383612c23565b60208301905092915050565b6129318161314d565b82525050565b600061294282613096565b61294c81856130c4565b935061295783613086565b8060005b8381101561298857815161296f8882612910565b975061297a836130b7565b92505060018101905061295b565b5085935050505092915050565b61299e8161315f565b82525050565b60006129af826130a1565b6129b981856130d5565b93506129c98185602086016131d0565b6129d2816133ab565b840191505092915050565b60006129e8826130ac565b6129f281856130e6565b9350612a028185602086016131d0565b612a0b816133ab565b840191505092915050565b6000612a236034836130e6565b9150612a2e826133c9565b604082019050919050565b6000612a466028836130e6565b9150612a5182613418565b604082019050919050565b6000612a69600e836130e6565b9150612a7482613467565b602082019050919050565b6000612a8c602b836130e6565b9150612a9782613490565b604082019050919050565b6000612aaf6026836130e6565b9150612aba826134df565b604082019050919050565b6000612ad26029836130e6565b9150612add8261352e565b604082019050919050565b6000612af56025836130e6565b9150612b008261357d565b604082019050919050565b6000612b186032836130e6565b9150612b23826135cc565b604082019050919050565b6000612b3b602a836130e6565b9150612b468261361b565b604082019050919050565b6000612b5e6020836130e6565b9150612b698261366a565b602082019050919050565b6000612b816029836130e6565b9150612b8c82613693565b604082019050919050565b6000612ba46029836130e6565b9150612baf826136e2565b604082019050919050565b6000612bc76028836130e6565b9150612bd282613731565b604082019050919050565b6000612bea6021836130e6565b9150612bf582613780565b604082019050919050565b6000612c0d6031836130e6565b9150612c18826137cf565b604082019050919050565b612c2c816131b7565b82525050565b612c3b816131b7565b82525050565b6000602082019050612c566000830184612928565b92915050565b600060a082019050612c716000830188612928565b612c7e6020830187612928565b8181036040830152612c908186612937565b90508181036060830152612ca48185612937565b90508181036080830152612cb881846129a4565b90509695505050505050565b600060a082019050612cd96000830188612928565b612ce66020830187612928565b612cf36040830186612c32565b612d006060830185612c32565b8181036080830152612d1281846129a4565b90509695505050505050565b60006020820190508181036000830152612d388184612937565b905092915050565b60006040820190508181036000830152612d5a8185612937565b90508181036020830152612d6e8184612937565b90509392505050565b6000602082019050612d8c6000830184612995565b92915050565b60006020820190508181036000830152612dac81846129dd565b905092915050565b60006020820190508181036000830152612dcd81612a16565b9050919050565b60006020820190508181036000830152612ded81612a39565b9050919050565b60006020820190508181036000830152612e0d81612a5c565b9050919050565b60006020820190508181036000830152612e2d81612a7f565b9050919050565b60006020820190508181036000830152612e4d81612aa2565b9050919050565b60006020820190508181036000830152612e6d81612ac5565b9050919050565b60006020820190508181036000830152612e8d81612ae8565b9050919050565b60006020820190508181036000830152612ead81612b0b565b9050919050565b60006020820190508181036000830152612ecd81612b2e565b9050919050565b60006020820190508181036000830152612eed81612b51565b9050919050565b60006020820190508181036000830152612f0d81612b74565b9050919050565b60006020820190508181036000830152612f2d81612b97565b9050919050565b60006020820190508181036000830152612f4d81612bba565b9050919050565b60006020820190508181036000830152612f6d81612bdd565b9050919050565b60006020820190508181036000830152612f8d81612c00565b9050919050565b6000602082019050612fa96000830184612c32565b92915050565b6000604082019050612fc46000830185612c32565b612fd16020830184612c32565b9392505050565b6000612fe2612ff3565b9050612fee8282613235565b919050565b6000604051905090565b600067ffffffffffffffff8211156130185761301761333c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156130445761304361333c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156130705761306f61333c565b5b613079826133ab565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613102826131b7565b915061310d836131b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613142576131416132af565b5b828201905092915050565b600061315882613197565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156131ee5780820151818401526020810190506131d3565b838111156131fd576000848401525b50505050565b6000600282049050600182168061321b57607f821691505b6020821081141561322f5761322e6132de565b5b50919050565b61323e826133ab565b810181811067ffffffffffffffff8211171561325d5761325c61333c565b5b80604052505050565b6000613271826131b7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132a4576132a36132af565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561338a5760046000803e6133876000516133bc565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820666565000000000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c60008201527f595f43524541544f525f414c4c4f574544000000000000000000000000000000602082015250565b600060443d101561382e576138b1565b613836612ff3565b60043d036004823e80513d602482011167ffffffffffffffff8211171561385e5750506138b1565b808201805167ffffffffffffffff81111561387c57505050506138b1565b80602083010160043d0385018111156138995750505050506138b1565b6138a882602001850186613235565b82955050505050505b90565b6138bd8161314d565b81146138c857600080fd5b50565b6138d48161315f565b81146138df57600080fd5b50565b6138eb8161316b565b81146138f657600080fd5b50565b613902816131b7565b811461390d57600080fd5b5056fea26469706673582212200ce6460c7ae301e2e7b453ae3aa2c68748d067fa30407a0f148525503215a6c064736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000ad78ebc5ac620000000000000000000000000000000000000000000000000000821ab0d441498000000000000000000000000000000000000000000000000000000000000000005dc0000000000000000000000008a04c9a13473fbded852e9650bd095c20b1385870000000000000000000000000000000000000000000000000000000000000009436f726769636c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009436f726769636c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d62775a4c7a5956364e66784e6638313170374a4a74756748336264706e473874626a4e673847665831536b350000000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000ad78ebc5ac620000000000000000000000000000000000000000000000000000821ab0d441498000000000000000000000000000000000000000000000000000000000000000005dc0000000000000000000000008a04c9a13473fbded852e9650bd095c20b1385870000000000000000000000000000000000000000000000000000000000000009436f726769636c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009436f726769636c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d62775a4c7a5956364e66784e6638313170374a4a74756748336264706e473874626a4e673847665831536b350000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Corgiclub
Arg [1] : _symbol (string): Corgiclub
Arg [2] : _uri (string): https://ipfs.io/ipfs/QmbwZLzYV6NfxNf811p7JJtugH3bdpnG8tbjNg8GfX1Sk5
Arg [3] : _publicFee (uint256): 200000000000000000000
Arg [4] : _earlyFee (uint256): 150000000000000000000
Arg [5] : _earlyLimit (uint32): 1500
Arg [6] : _payee (address): 0x8a04c9a13473fbded852e9650bd095c20b138587

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 00000000000000000000000000000000000000000000000ad78ebc5ac6200000
Arg [4] : 00000000000000000000000000000000000000000000000821ab0d4414980000
Arg [5] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [6] : 0000000000000000000000008a04c9a13473fbded852e9650bd095c20b138587
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [8] : 436f726769636c75620000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [10] : 436f726769636c75620000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [12] : 68747470733a2f2f697066732e696f2f697066732f516d62775a4c7a5956364e
Arg [13] : 66784e6638313170374a4a74756748336264706e473874626a4e673847665831
Arg [14] : 536b350000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

48452:1308:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20998:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20021:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45965:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47787:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45917:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48622:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48039:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45863:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22937:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48276:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21395:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48591:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48652:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49429:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36220:103;;;;;;;;;;;;;:::i;:::-;;47520:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35569:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47901:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45990:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21992:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48684:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45812:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48158:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47488:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22219:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22459:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36478:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20998:231;21084:7;21131:1;21112:21;;:7;:21;;;;21104:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21199:9;:13;21209:2;21199:13;;;;;;;;;;;:22;21213:7;21199:22;;;;;;;;;;;;;;;;21192:29;;20998:231;;;;:::o;20021:310::-;20123:4;20175:26;20160:41;;;:11;:41;;;;:110;;;;20233:37;20218:52;;;:11;:52;;;;20160:110;:163;;;;20287:36;20311:11;20287:23;:36::i;:::-;20160:163;20140:183;;20021:310;;;:::o;45965:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47787:106::-;47843:13;47876:4;:9;47881:3;47876:9;;;;;;;;;;;47869:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47787:106;;;:::o;45917:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48622:23::-;;;;:::o;48039:111::-;48101:7;48128:9;:14;48138:3;48128:14;;;;;;;;;;;;48121:21;;48039:111;;;:::o;45863:47::-;;;;;;;;;;;;;;;;;:::o;22937:442::-;23178:12;:10;:12::i;:::-;23170:20;;:4;:20;;;:60;;;;23194:36;23211:4;23217:12;:10;:12::i;:::-;23194:16;:36::i;:::-;23170:60;23148:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23319:52;23342:4;23348:2;23352:3;23357:7;23366:4;23319:22;:52::i;:::-;22937:442;;;;;:::o;48276:93::-;48327:7;48354;;48347:14;;48276:93;:::o;21395:524::-;21551:16;21612:3;:10;21593:8;:15;:29;21585:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21681:30;21728:8;:15;21714:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21681:63;;21762:9;21757:122;21781:8;:15;21777:1;:19;21757:122;;;21837:30;21847:8;21856:1;21847:11;;;;;;;;:::i;:::-;;;;;;;;21860:3;21864:1;21860:6;;;;;;;;:::i;:::-;;;;;;;;21837:9;:30::i;:::-;21818:13;21832:1;21818:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;21798:3;;;;:::i;:::-;;;21757:122;;;;21898:13;21891:20;;;21395:524;;;;:::o;48591:24::-;;;;:::o;48652:25::-;;;;:::o;49429:328::-;49614:7;49565:9;49576:10;49175:11;49189:9;;49175:23;;49234:10;;49213:18;:8;:16;:18::i;:::-;:31;49209:78;;;49267:8;;49261:14;;49209:78;49311:5;;;;;;;;;;;49301:15;;:6;:15;;;49297:55;;;49339:1;49333:7;;49297:55;49379:3;49370:5;:12;49362:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;49634:11:::1;49648:49;49661:13;49676:14;49692:4;;49648:12;:49::i;:::-;49634:63;;49708:20;:8;:18;:20::i;:::-;49746:3;49739:10;;;49164:257:::0;49429:328;;;;;;;;:::o;36220:103::-;35800:12;:10;:12::i;:::-;35789:23;;:7;:5;:7::i;:::-;:23;;;35781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36285:30:::1;36312:1;36285:18;:30::i;:::-;36220:103::o:0;47520:45::-;;;;;;;;;;;;;;;;;:::o;35569:87::-;35615:7;35642:6;;;;;;;;;;;35635:13;;35569:87;:::o;47901:126::-;47979:3;46089:10;46072:27;;:8;:13;46081:3;46072:13;;;;;;;;;;;;;;;;;;;;;:27;;;46064:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;48012:7:::1;47995:9;:14;48005:3;47995:14;;;;;;;;;;;:24;;;;47901:126:::0;;;:::o;45990:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21992:155::-;22087:52;22106:12;:10;:12::i;:::-;22120:8;22130;22087:18;:52::i;:::-;21992:155;;:::o;48684:20::-;;;;;;;;;;;;;:::o;45812:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;48158:110::-;48220:7;48247:8;:13;48256:3;48247:13;;;;;;;;;;;;;;;;;;;;;48240:20;;48158:110;;;:::o;47488:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22219:168::-;22318:4;22342:18;:27;22361:7;22342:27;;;;;;;;;;;;;;;:37;22370:8;22342:37;;;;;;;;;;;;;;;;;;;;;;;;;22335:44;;22219:168;;;;:::o;22459:401::-;22675:12;:10;:12::i;:::-;22667:20;;:4;:20;;;:60;;;;22691:36;22708:4;22714:12;:10;:12::i;:::-;22691:16;:36::i;:::-;22667:60;22645:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22807:45;22825:4;22831:2;22835;22839:6;22847:4;22807:17;:45::i;:::-;22459:401;;;;;:::o;36478:201::-;35800:12;:10;:12::i;:::-;35789:23;;:7;:5;:7::i;:::-;:23;;;35781:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36587:1:::1;36567:22;;:8;:22;;;;36559:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36643:28;36662:8;36643:18;:28::i;:::-;36478:201:::0;:::o;18774:157::-;18859:4;18898:25;18883:40;;;:11;:40;;;;18876:47;;18774:157;;;:::o;17689:98::-;17742:7;17769:10;17762:17;;17689:98;:::o;25021:1074::-;25248:7;:14;25234:3;:10;:28;25226:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25340:1;25326:16;;:2;:16;;;;25318:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25397:16;25416:12;:10;:12::i;:::-;25397:31;;25441:60;25462:8;25472:4;25478:2;25482:3;25487:7;25496:4;25441:20;:60::i;:::-;25519:9;25514:421;25538:3;:10;25534:1;:14;25514:421;;;25570:10;25583:3;25587:1;25583:6;;;;;;;;:::i;:::-;;;;;;;;25570:19;;25604:14;25621:7;25629:1;25621:10;;;;;;;;:::i;:::-;;;;;;;;25604:27;;25648:19;25670:9;:13;25680:2;25670:13;;;;;;;;;;;:19;25684:4;25670:19;;;;;;;;;;;;;;;;25648:41;;25727:6;25712:11;:21;;25704:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25860:6;25846:11;:20;25824:9;:13;25834:2;25824:13;;;;;;;;;;;:19;25838:4;25824:19;;;;;;;;;;;;;;;:42;;;;25917:6;25896:9;:13;25906:2;25896:13;;;;;;;;;;;:17;25910:2;25896:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25555:380;;;25550:3;;;;:::i;:::-;;;25514:421;;;;25982:2;25952:47;;25976:4;25952:47;;25966:8;25952:47;;;25986:3;25991:7;25952:47;;;;;;;:::i;:::-;;;;;;;;26012:75;26048:8;26058:4;26064:2;26068:3;26073:7;26082:4;26012:35;:75::i;:::-;25215:880;25021:1074;;;;;:::o;37917:114::-;37982:7;38009;:14;;;38002:21;;37917:114;;;:::o;46502:431::-;46653:7;46673:11;46687:18;:8;:16;:18::i;:::-;46673:32;;46716:20;:8;:18;:20::i;:::-;46749:45;46755:13;46770:3;46775:14;46749:45;;;;;;;;;;;;:5;:45::i;:::-;46824:14;46805:11;:16;46817:3;46805:16;;;;;;;;;;;:33;;;;46865:10;46849:8;:13;46858:3;46849:13;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;46898:4;;46886;:9;46891:3;46886:9;;;;;;;;;;;:16;;;;;;;:::i;:::-;;46922:3;46915:10;;;46502:431;;;;;;:::o;38039:127::-;38146:1;38128:7;:14;;;:19;;;;;;;;;;;38039:127;:::o;36839:191::-;36913:16;36932:6;;;;;;;;;;;36913:25;;36958:8;36949:6;;:17;;;;;;;;;;;;;;;;;;37013:8;36982:40;;37003:8;36982:40;;;;;;;;;;;;36902:128;36839:191;:::o;31207:331::-;31362:8;31353:17;;:5;:17;;;;31345:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31465:8;31427:18;:25;31446:5;31427:25;;;;;;;;;;;;;;;:35;31453:8;31427:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31511:8;31489:41;;31504:5;31489:41;;;31521:8;31489:41;;;;;;:::i;:::-;;;;;;;;31207:331;;;:::o;23843:820::-;24045:1;24031:16;;:2;:16;;;;24023:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24102:16;24121:12;:10;:12::i;:::-;24102:31;;24146:96;24167:8;24177:4;24183:2;24187:21;24205:2;24187:17;:21::i;:::-;24210:25;24228:6;24210:17;:25::i;:::-;24237:4;24146:20;:96::i;:::-;24255:19;24277:9;:13;24287:2;24277:13;;;;;;;;;;;:19;24291:4;24277:19;;;;;;;;;;;;;;;;24255:41;;24330:6;24315:11;:21;;24307:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24455:6;24441:11;:20;24419:9;:13;24429:2;24419:13;;;;;;;;;;;:19;24433:4;24419:19;;;;;;;;;;;;;;;:42;;;;24504:6;24483:9;:13;24493:2;24483:13;;;;;;;;;;;:17;24497:2;24483:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24559:2;24528:46;;24553:4;24528:46;;24543:8;24528:46;;;24563:2;24567:6;24528:46;;;;;;;:::i;:::-;;;;;;;;24587:68;24618:8;24628:4;24634:2;24638;24642:6;24650:4;24587:30;:68::i;:::-;24012:651;;23843:820;;;;;:::o;32494:221::-;;;;;;;:::o;33475:813::-;33715:15;:2;:13;;;:15::i;:::-;33711:570;;;33768:2;33751:43;;;33795:8;33805:4;33811:3;33816:7;33825:4;33751:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33747:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34143:6;34136:14;;;;;;;;;;;:::i;:::-;;;;;;;;33747:523;;;34192:62;;;;;;;;;;:::i;:::-;;;;;;;;33747:523;33924:48;;;33912:60;;;:8;:60;;;;33908:159;;33997:50;;;;;;;;;;:::i;:::-;;;;;;;;33908:159;33831:251;33711:570;33475:813;;;;;;:::o;27413:569::-;27580:1;27566:16;;:2;:16;;;;27558:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27633:16;27652:12;:10;:12::i;:::-;27633:31;;27677:102;27698:8;27716:1;27720:2;27724:21;27742:2;27724:17;:21::i;:::-;27747:25;27765:6;27747:17;:25::i;:::-;27774:4;27677:20;:102::i;:::-;27813:6;27792:9;:13;27802:2;27792:13;;;;;;;;;;;:17;27806:2;27792:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27872:2;27835:52;;27868:1;27835:52;;27850:8;27835:52;;;27876:2;27880:6;27835:52;;;;;;;:::i;:::-;;;;;;;;27900:74;27931:8;27949:1;27953:2;27957;27961:6;27969:4;27900:30;:74::i;:::-;27547:435;27413:569;;;;:::o;34296:198::-;34362:16;34391:22;34430:1;34416:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34391:41;;34454:7;34443:5;34449:1;34443:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;34481:5;34474:12;;;34296:198;;;:::o;32723:744::-;32938:15;:2;:13;;;:15::i;:::-;32934:526;;;32991:2;32974:38;;;33013:8;33023:4;33029:2;33033:6;33041:4;32974:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32970:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33322:6;33315:14;;;;;;;;;;;:::i;:::-;;;;;;;;32970:479;;;33371:62;;;;;;;;;;:::i;:::-;;;;;;;;32970:479;33108:43;;;33096:55;;;:8;:55;;;;33092:154;;33176:50;;;;;;;;;;:::i;:::-;;;;;;;;33092:154;33047:214;32934:526;32723:744;;;;;;:::o;9732:326::-;9792:4;10049:1;10027:7;:19;;;:23;10020:30;;9732:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722: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:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:137::-;3028:5;3066:6;3053:20;3044:29;;3082:32;3108:5;3082:32;:::i;:::-;2983:137;;;;:::o;3126:141::-;3182:5;3213:6;3207:13;3198:22;;3229:32;3255:5;3229:32;:::i;:::-;3126:141;;;;:::o;3286:338::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:122;;3398:79;;:::i;:::-;3357:122;3515:6;3502:20;3540:78;3614:3;3606:6;3599:4;3591:6;3587:17;3540:78;:::i;:::-;3531:87;;3347:277;3286:338;;;;:::o;3644:553::-;3702:8;3712:6;3762:3;3755:4;3747:6;3743:17;3739:27;3729:122;;3770:79;;:::i;:::-;3729:122;3883:6;3870:20;3860:30;;3913:18;3905:6;3902:30;3899:117;;;3935:79;;:::i;:::-;3899:117;4049:4;4041:6;4037:17;4025:29;;4103:3;4095:4;4087:6;4083:17;4073:8;4069:32;4066:41;4063:128;;;4110:79;;:::i;:::-;4063:128;3644:553;;;;;:::o;4203:139::-;4249:5;4287:6;4274:20;4265:29;;4303:33;4330:5;4303:33;:::i;:::-;4203:139;;;;:::o;4348:329::-;4407:6;4456:2;4444:9;4435:7;4431:23;4427:32;4424:119;;;4462:79;;:::i;:::-;4424:119;4582:1;4607:53;4652:7;4643:6;4632:9;4628:22;4607:53;:::i;:::-;4597:63;;4553:117;4348:329;;;;:::o;4683:474::-;4751:6;4759;4808:2;4796:9;4787:7;4783:23;4779:32;4776:119;;;4814:79;;:::i;:::-;4776:119;4934:1;4959:53;5004:7;4995:6;4984:9;4980:22;4959:53;:::i;:::-;4949:63;;4905:117;5061:2;5087:53;5132:7;5123:6;5112:9;5108:22;5087:53;:::i;:::-;5077:63;;5032:118;4683:474;;;;;:::o;5163:1509::-;5317:6;5325;5333;5341;5349;5398:3;5386:9;5377:7;5373:23;5369:33;5366:120;;;5405:79;;:::i;:::-;5366:120;5525:1;5550:53;5595:7;5586:6;5575:9;5571:22;5550:53;:::i;:::-;5540:63;;5496:117;5652:2;5678:53;5723:7;5714:6;5703:9;5699:22;5678:53;:::i;:::-;5668:63;;5623:118;5808:2;5797:9;5793:18;5780:32;5839:18;5831:6;5828:30;5825:117;;;5861:79;;:::i;:::-;5825:117;5966:78;6036:7;6027:6;6016:9;6012:22;5966:78;:::i;:::-;5956:88;;5751:303;6121:2;6110:9;6106:18;6093:32;6152:18;6144:6;6141:30;6138:117;;;6174:79;;:::i;:::-;6138:117;6279:78;6349:7;6340:6;6329:9;6325:22;6279:78;:::i;:::-;6269:88;;6064:303;6434:3;6423:9;6419:19;6406:33;6466:18;6458:6;6455:30;6452:117;;;6488:79;;:::i;:::-;6452:117;6593:62;6647:7;6638:6;6627:9;6623:22;6593:62;:::i;:::-;6583:72;;6377:288;5163:1509;;;;;;;;:::o;6678:1089::-;6782:6;6790;6798;6806;6814;6863:3;6851:9;6842:7;6838:23;6834:33;6831:120;;;6870:79;;:::i;:::-;6831:120;6990:1;7015:53;7060:7;7051:6;7040:9;7036:22;7015:53;:::i;:::-;7005:63;;6961:117;7117:2;7143:53;7188:7;7179:6;7168:9;7164:22;7143:53;:::i;:::-;7133:63;;7088:118;7245:2;7271:53;7316:7;7307:6;7296:9;7292:22;7271:53;:::i;:::-;7261:63;;7216:118;7373:2;7399:53;7444:7;7435:6;7424:9;7420:22;7399:53;:::i;:::-;7389:63;;7344:118;7529:3;7518:9;7514:19;7501:33;7561:18;7553:6;7550:30;7547:117;;;7583:79;;:::i;:::-;7547:117;7688:62;7742:7;7733:6;7722:9;7718:22;7688:62;:::i;:::-;7678:72;;7472:288;6678:1089;;;;;;;;:::o;7773:468::-;7838:6;7846;7895:2;7883:9;7874:7;7870:23;7866:32;7863:119;;;7901:79;;:::i;:::-;7863:119;8021:1;8046:53;8091:7;8082:6;8071:9;8067:22;8046:53;:::i;:::-;8036:63;;7992:117;8148:2;8174:50;8216:7;8207:6;8196:9;8192:22;8174:50;:::i;:::-;8164:60;;8119:115;7773:468;;;;;:::o;8247:474::-;8315:6;8323;8372:2;8360:9;8351:7;8347:23;8343:32;8340:119;;;8378:79;;:::i;:::-;8340:119;8498:1;8523:53;8568:7;8559:6;8548:9;8544:22;8523:53;:::i;:::-;8513:63;;8469:117;8625:2;8651:53;8696:7;8687:6;8676:9;8672:22;8651:53;:::i;:::-;8641:63;;8596:118;8247:474;;;;;:::o;8727:819::-;8816:6;8824;8832;8840;8889:2;8877:9;8868:7;8864:23;8860:32;8857:119;;;8895:79;;:::i;:::-;8857:119;9015:1;9040:53;9085:7;9076:6;9065:9;9061:22;9040:53;:::i;:::-;9030:63;;8986:117;9142:2;9168:53;9213:7;9204:6;9193:9;9189:22;9168:53;:::i;:::-;9158:63;;9113:118;9298:2;9287:9;9283:18;9270:32;9329:18;9321:6;9318:30;9315:117;;;9351:79;;:::i;:::-;9315:117;9464:65;9521:7;9512:6;9501:9;9497:22;9464:65;:::i;:::-;9446:83;;;;9241:298;8727:819;;;;;;;:::o;9552:894::-;9670:6;9678;9727:2;9715:9;9706:7;9702:23;9698:32;9695:119;;;9733:79;;:::i;:::-;9695:119;9881:1;9870:9;9866:17;9853:31;9911:18;9903:6;9900:30;9897:117;;;9933:79;;:::i;:::-;9897:117;10038:78;10108:7;10099:6;10088:9;10084:22;10038:78;:::i;:::-;10028:88;;9824:302;10193:2;10182:9;10178:18;10165:32;10224:18;10216:6;10213:30;10210:117;;;10246:79;;:::i;:::-;10210:117;10351:78;10421:7;10412:6;10401:9;10397:22;10351:78;:::i;:::-;10341:88;;10136:303;9552:894;;;;;:::o;10452:327::-;10510:6;10559:2;10547:9;10538:7;10534:23;10530:32;10527:119;;;10565:79;;:::i;:::-;10527:119;10685:1;10710:52;10754:7;10745:6;10734:9;10730:22;10710:52;:::i;:::-;10700:62;;10656:116;10452:327;;;;:::o;10785:349::-;10854:6;10903:2;10891:9;10882:7;10878:23;10874:32;10871:119;;;10909:79;;:::i;:::-;10871:119;11029:1;11054:63;11109:7;11100:6;11089:9;11085:22;11054:63;:::i;:::-;11044:73;;11000:127;10785:349;;;;:::o;11140:329::-;11199:6;11248:2;11236:9;11227:7;11223:23;11219:32;11216:119;;;11254:79;;:::i;:::-;11216:119;11374:1;11399:53;11444:7;11435:6;11424:9;11420:22;11399:53;:::i;:::-;11389:63;;11345:117;11140:329;;;;:::o;11475:474::-;11543:6;11551;11600:2;11588:9;11579:7;11575:23;11571:32;11568:119;;;11606:79;;:::i;:::-;11568:119;11726:1;11751:53;11796:7;11787:6;11776:9;11772:22;11751:53;:::i;:::-;11741:63;;11697:117;11853:2;11879:53;11924:7;11915:6;11904:9;11900:22;11879:53;:::i;:::-;11869:63;;11824:118;11475:474;;;;;:::o;11955:179::-;12024:10;12045:46;12087:3;12079:6;12045:46;:::i;:::-;12123:4;12118:3;12114:14;12100:28;;11955:179;;;;:::o;12140:118::-;12227:24;12245:5;12227:24;:::i;:::-;12222:3;12215:37;12140:118;;:::o;12294:732::-;12413:3;12442:54;12490:5;12442:54;:::i;:::-;12512:86;12591:6;12586:3;12512:86;:::i;:::-;12505:93;;12622:56;12672:5;12622:56;:::i;:::-;12701:7;12732:1;12717:284;12742:6;12739:1;12736:13;12717:284;;;12818:6;12812:13;12845:63;12904:3;12889:13;12845:63;:::i;:::-;12838:70;;12931:60;12984:6;12931:60;:::i;:::-;12921:70;;12777:224;12764:1;12761;12757:9;12752:14;;12717:284;;;12721:14;13017:3;13010:10;;12418:608;;;12294:732;;;;:::o;13032:109::-;13113:21;13128:5;13113:21;:::i;:::-;13108:3;13101:34;13032:109;;:::o;13147:360::-;13233:3;13261:38;13293:5;13261:38;:::i;:::-;13315:70;13378:6;13373:3;13315:70;:::i;:::-;13308:77;;13394:52;13439:6;13434:3;13427:4;13420:5;13416:16;13394:52;:::i;:::-;13471:29;13493:6;13471:29;:::i;:::-;13466:3;13462:39;13455:46;;13237:270;13147:360;;;;:::o;13513:364::-;13601:3;13629:39;13662:5;13629:39;:::i;:::-;13684:71;13748:6;13743:3;13684:71;:::i;:::-;13677:78;;13764:52;13809:6;13804:3;13797:4;13790:5;13786:16;13764:52;:::i;:::-;13841:29;13863:6;13841:29;:::i;:::-;13836:3;13832:39;13825:46;;13605:272;13513:364;;;;:::o;13883:366::-;14025:3;14046:67;14110:2;14105:3;14046:67;:::i;:::-;14039:74;;14122:93;14211:3;14122:93;:::i;:::-;14240:2;14235:3;14231:12;14224:19;;13883:366;;;:::o;14255:::-;14397:3;14418:67;14482:2;14477:3;14418:67;:::i;:::-;14411:74;;14494:93;14583:3;14494:93;:::i;:::-;14612:2;14607:3;14603:12;14596:19;;14255:366;;;:::o;14627:::-;14769:3;14790:67;14854:2;14849:3;14790:67;:::i;:::-;14783:74;;14866:93;14955:3;14866:93;:::i;:::-;14984:2;14979:3;14975:12;14968:19;;14627:366;;;:::o;14999:::-;15141:3;15162:67;15226:2;15221:3;15162:67;:::i;:::-;15155:74;;15238:93;15327:3;15238:93;:::i;:::-;15356:2;15351:3;15347:12;15340:19;;14999:366;;;:::o;15371:::-;15513:3;15534:67;15598:2;15593:3;15534:67;:::i;:::-;15527:74;;15610:93;15699:3;15610:93;:::i;:::-;15728:2;15723:3;15719:12;15712:19;;15371:366;;;:::o;15743:::-;15885:3;15906:67;15970:2;15965:3;15906:67;:::i;:::-;15899:74;;15982:93;16071:3;15982:93;:::i;:::-;16100:2;16095:3;16091:12;16084:19;;15743:366;;;:::o;16115:::-;16257:3;16278:67;16342:2;16337:3;16278:67;:::i;:::-;16271:74;;16354:93;16443:3;16354:93;:::i;:::-;16472:2;16467:3;16463:12;16456:19;;16115:366;;;:::o;16487:::-;16629:3;16650:67;16714:2;16709:3;16650:67;:::i;:::-;16643:74;;16726:93;16815:3;16726:93;:::i;:::-;16844:2;16839:3;16835:12;16828:19;;16487:366;;;:::o;16859:::-;17001:3;17022:67;17086:2;17081:3;17022:67;:::i;:::-;17015:74;;17098:93;17187:3;17098:93;:::i;:::-;17216:2;17211:3;17207:12;17200:19;;16859:366;;;:::o;17231:::-;17373:3;17394:67;17458:2;17453:3;17394:67;:::i;:::-;17387:74;;17470:93;17559:3;17470:93;:::i;:::-;17588:2;17583:3;17579:12;17572:19;;17231:366;;;:::o;17603:::-;17745:3;17766:67;17830:2;17825:3;17766:67;:::i;:::-;17759:74;;17842:93;17931:3;17842:93;:::i;:::-;17960:2;17955:3;17951:12;17944:19;;17603:366;;;:::o;17975:::-;18117:3;18138:67;18202:2;18197:3;18138:67;:::i;:::-;18131:74;;18214:93;18303:3;18214:93;:::i;:::-;18332:2;18327:3;18323:12;18316:19;;17975:366;;;:::o;18347:::-;18489:3;18510:67;18574:2;18569:3;18510:67;:::i;:::-;18503:74;;18586:93;18675:3;18586:93;:::i;:::-;18704:2;18699:3;18695:12;18688:19;;18347:366;;;:::o;18719:::-;18861:3;18882:67;18946:2;18941:3;18882:67;:::i;:::-;18875:74;;18958:93;19047:3;18958:93;:::i;:::-;19076:2;19071:3;19067:12;19060:19;;18719:366;;;:::o;19091:::-;19233:3;19254:67;19318:2;19313:3;19254:67;:::i;:::-;19247:74;;19330:93;19419:3;19330:93;:::i;:::-;19448:2;19443:3;19439:12;19432:19;;19091:366;;;:::o;19463:108::-;19540:24;19558:5;19540:24;:::i;:::-;19535:3;19528:37;19463:108;;:::o;19577:118::-;19664:24;19682:5;19664:24;:::i;:::-;19659:3;19652:37;19577:118;;:::o;19701:222::-;19794:4;19832:2;19821:9;19817:18;19809:26;;19845:71;19913:1;19902:9;19898:17;19889:6;19845:71;:::i;:::-;19701:222;;;;:::o;19929:1053::-;20252:4;20290:3;20279:9;20275:19;20267:27;;20304:71;20372:1;20361:9;20357:17;20348:6;20304:71;:::i;:::-;20385:72;20453:2;20442:9;20438:18;20429:6;20385:72;:::i;:::-;20504:9;20498:4;20494:20;20489:2;20478:9;20474:18;20467:48;20532:108;20635:4;20626:6;20532:108;:::i;:::-;20524:116;;20687:9;20681:4;20677:20;20672:2;20661:9;20657:18;20650:48;20715:108;20818:4;20809:6;20715:108;:::i;:::-;20707:116;;20871:9;20865:4;20861:20;20855:3;20844:9;20840:19;20833:49;20899:76;20970:4;20961:6;20899:76;:::i;:::-;20891:84;;19929:1053;;;;;;;;:::o;20988:751::-;21211:4;21249:3;21238:9;21234:19;21226:27;;21263:71;21331:1;21320:9;21316:17;21307:6;21263:71;:::i;:::-;21344:72;21412:2;21401:9;21397:18;21388:6;21344:72;:::i;:::-;21426;21494:2;21483:9;21479:18;21470:6;21426:72;:::i;:::-;21508;21576:2;21565:9;21561:18;21552:6;21508:72;:::i;:::-;21628:9;21622:4;21618:20;21612:3;21601:9;21597:19;21590:49;21656:76;21727:4;21718:6;21656:76;:::i;:::-;21648:84;;20988:751;;;;;;;;:::o;21745:373::-;21888:4;21926:2;21915:9;21911:18;21903:26;;21975:9;21969:4;21965:20;21961:1;21950:9;21946:17;21939:47;22003:108;22106:4;22097:6;22003:108;:::i;:::-;21995:116;;21745:373;;;;:::o;22124:634::-;22345:4;22383:2;22372:9;22368:18;22360:26;;22432:9;22426:4;22422:20;22418:1;22407:9;22403:17;22396:47;22460:108;22563:4;22554:6;22460:108;:::i;:::-;22452:116;;22615:9;22609:4;22605:20;22600:2;22589:9;22585:18;22578:48;22643:108;22746:4;22737:6;22643:108;:::i;:::-;22635:116;;22124:634;;;;;:::o;22764:210::-;22851:4;22889:2;22878:9;22874:18;22866:26;;22902:65;22964:1;22953:9;22949:17;22940:6;22902:65;:::i;:::-;22764:210;;;;:::o;22980:313::-;23093:4;23131:2;23120:9;23116:18;23108:26;;23180:9;23174:4;23170:20;23166:1;23155:9;23151:17;23144:47;23208:78;23281:4;23272:6;23208:78;:::i;:::-;23200:86;;22980:313;;;;:::o;23299:419::-;23465:4;23503:2;23492:9;23488:18;23480:26;;23552:9;23546:4;23542:20;23538:1;23527:9;23523:17;23516:47;23580:131;23706:4;23580:131;:::i;:::-;23572:139;;23299:419;;;:::o;23724:::-;23890:4;23928:2;23917:9;23913:18;23905:26;;23977:9;23971:4;23967:20;23963:1;23952:9;23948:17;23941:47;24005:131;24131:4;24005:131;:::i;:::-;23997:139;;23724:419;;;:::o;24149:::-;24315:4;24353:2;24342:9;24338:18;24330:26;;24402:9;24396:4;24392:20;24388:1;24377:9;24373:17;24366:47;24430:131;24556:4;24430:131;:::i;:::-;24422:139;;24149:419;;;:::o;24574:::-;24740:4;24778:2;24767:9;24763:18;24755:26;;24827:9;24821:4;24817:20;24813:1;24802:9;24798:17;24791:47;24855:131;24981:4;24855:131;:::i;:::-;24847:139;;24574:419;;;:::o;24999:::-;25165:4;25203:2;25192:9;25188:18;25180:26;;25252:9;25246:4;25242:20;25238:1;25227:9;25223:17;25216:47;25280:131;25406:4;25280:131;:::i;:::-;25272:139;;24999:419;;;:::o;25424:::-;25590:4;25628:2;25617:9;25613:18;25605:26;;25677:9;25671:4;25667:20;25663:1;25652:9;25648:17;25641:47;25705:131;25831:4;25705:131;:::i;:::-;25697:139;;25424:419;;;:::o;25849:::-;26015:4;26053:2;26042:9;26038:18;26030:26;;26102:9;26096:4;26092:20;26088:1;26077:9;26073:17;26066:47;26130:131;26256:4;26130:131;:::i;:::-;26122:139;;25849:419;;;:::o;26274:::-;26440:4;26478:2;26467:9;26463:18;26455:26;;26527:9;26521:4;26517:20;26513:1;26502:9;26498:17;26491:47;26555:131;26681:4;26555:131;:::i;:::-;26547:139;;26274:419;;;:::o;26699:::-;26865:4;26903:2;26892:9;26888:18;26880:26;;26952:9;26946:4;26942:20;26938:1;26927:9;26923:17;26916:47;26980:131;27106:4;26980:131;:::i;:::-;26972:139;;26699:419;;;:::o;27124:::-;27290:4;27328:2;27317:9;27313:18;27305:26;;27377:9;27371:4;27367:20;27363:1;27352:9;27348:17;27341:47;27405:131;27531:4;27405:131;:::i;:::-;27397:139;;27124:419;;;:::o;27549:::-;27715:4;27753:2;27742:9;27738:18;27730:26;;27802:9;27796:4;27792:20;27788:1;27777:9;27773:17;27766:47;27830:131;27956:4;27830:131;:::i;:::-;27822:139;;27549:419;;;:::o;27974:::-;28140:4;28178:2;28167:9;28163:18;28155:26;;28227:9;28221:4;28217:20;28213:1;28202:9;28198:17;28191:47;28255:131;28381:4;28255:131;:::i;:::-;28247:139;;27974:419;;;:::o;28399:::-;28565:4;28603:2;28592:9;28588:18;28580:26;;28652:9;28646:4;28642:20;28638:1;28627:9;28623:17;28616:47;28680:131;28806:4;28680:131;:::i;:::-;28672:139;;28399:419;;;:::o;28824:::-;28990:4;29028:2;29017:9;29013:18;29005:26;;29077:9;29071:4;29067:20;29063:1;29052:9;29048:17;29041:47;29105:131;29231:4;29105:131;:::i;:::-;29097:139;;28824:419;;;:::o;29249:::-;29415:4;29453:2;29442:9;29438:18;29430:26;;29502:9;29496:4;29492:20;29488:1;29477:9;29473:17;29466:47;29530:131;29656:4;29530:131;:::i;:::-;29522:139;;29249:419;;;:::o;29674:222::-;29767:4;29805:2;29794:9;29790:18;29782:26;;29818:71;29886:1;29875:9;29871:17;29862:6;29818:71;:::i;:::-;29674:222;;;;:::o;29902:332::-;30023:4;30061:2;30050:9;30046:18;30038:26;;30074:71;30142:1;30131:9;30127:17;30118:6;30074:71;:::i;:::-;30155:72;30223:2;30212:9;30208:18;30199:6;30155:72;:::i;:::-;29902:332;;;;;:::o;30240:129::-;30274:6;30301:20;;:::i;:::-;30291:30;;30330:33;30358:4;30350:6;30330:33;:::i;:::-;30240:129;;;:::o;30375:75::-;30408:6;30441:2;30435:9;30425:19;;30375:75;:::o;30456:311::-;30533:4;30623:18;30615:6;30612:30;30609:56;;;30645:18;;:::i;:::-;30609:56;30695:4;30687:6;30683:17;30675:25;;30755:4;30749;30745:15;30737:23;;30456:311;;;:::o;30773:::-;30850:4;30940:18;30932:6;30929:30;30926:56;;;30962:18;;:::i;:::-;30926:56;31012:4;31004:6;31000:17;30992:25;;31072:4;31066;31062:15;31054:23;;30773:311;;;:::o;31090:307::-;31151:4;31241:18;31233:6;31230:30;31227:56;;;31263:18;;:::i;:::-;31227:56;31301:29;31323:6;31301:29;:::i;:::-;31293:37;;31385:4;31379;31375:15;31367:23;;31090:307;;;:::o;31403:132::-;31470:4;31493:3;31485:11;;31523:4;31518:3;31514:14;31506:22;;31403:132;;;:::o;31541:114::-;31608:6;31642:5;31636:12;31626:22;;31541:114;;;:::o;31661:98::-;31712:6;31746:5;31740:12;31730:22;;31661:98;;;:::o;31765:99::-;31817:6;31851:5;31845:12;31835:22;;31765:99;;;:::o;31870:113::-;31940:4;31972;31967:3;31963:14;31955:22;;31870:113;;;:::o;31989:184::-;32088:11;32122:6;32117:3;32110:19;32162:4;32157:3;32153:14;32138:29;;31989:184;;;;:::o;32179:168::-;32262:11;32296:6;32291:3;32284:19;32336:4;32331:3;32327:14;32312:29;;32179:168;;;;:::o;32353:169::-;32437:11;32471:6;32466:3;32459:19;32511:4;32506:3;32502:14;32487:29;;32353:169;;;;:::o;32528:305::-;32568:3;32587:20;32605:1;32587:20;:::i;:::-;32582:25;;32621:20;32639:1;32621:20;:::i;:::-;32616:25;;32775:1;32707:66;32703:74;32700:1;32697:81;32694:107;;;32781:18;;:::i;:::-;32694:107;32825:1;32822;32818:9;32811:16;;32528:305;;;;:::o;32839:96::-;32876:7;32905:24;32923:5;32905:24;:::i;:::-;32894:35;;32839:96;;;:::o;32941:90::-;32975:7;33018:5;33011:13;33004:21;32993:32;;32941:90;;;:::o;33037:149::-;33073:7;33113:66;33106:5;33102:78;33091:89;;33037:149;;;:::o;33192:126::-;33229:7;33269:42;33262:5;33258:54;33247:65;;33192:126;;;:::o;33324:77::-;33361:7;33390:5;33379:16;;33324:77;;;:::o;33407:154::-;33491:6;33486:3;33481;33468:30;33553:1;33544:6;33539:3;33535:16;33528:27;33407:154;;;:::o;33567:307::-;33635:1;33645:113;33659:6;33656:1;33653:13;33645:113;;;33744:1;33739:3;33735:11;33729:18;33725:1;33720:3;33716:11;33709:39;33681:2;33678:1;33674:10;33669:15;;33645:113;;;33776:6;33773:1;33770:13;33767:101;;;33856:1;33847:6;33842:3;33838:16;33831:27;33767:101;33616:258;33567:307;;;:::o;33880:320::-;33924:6;33961:1;33955:4;33951:12;33941:22;;34008:1;34002:4;33998:12;34029:18;34019:81;;34085:4;34077:6;34073:17;34063:27;;34019:81;34147:2;34139:6;34136:14;34116:18;34113:38;34110:84;;;34166:18;;:::i;:::-;34110:84;33931:269;33880:320;;;:::o;34206:281::-;34289:27;34311:4;34289:27;:::i;:::-;34281:6;34277:40;34419:6;34407:10;34404:22;34383:18;34371:10;34368:34;34365:62;34362:88;;;34430:18;;:::i;:::-;34362:88;34470:10;34466:2;34459:22;34249:238;34206:281;;:::o;34493:233::-;34532:3;34555:24;34573:5;34555:24;:::i;:::-;34546:33;;34601:66;34594:5;34591:77;34588:103;;;34671:18;;:::i;:::-;34588:103;34718:1;34711:5;34707:13;34700:20;;34493:233;;;:::o;34732:180::-;34780:77;34777:1;34770:88;34877:4;34874:1;34867:15;34901:4;34898:1;34891:15;34918:180;34966:77;34963:1;34956:88;35063:4;35060:1;35053:15;35087:4;35084:1;35077:15;35104:180;35152:77;35149:1;35142:88;35249:4;35246:1;35239:15;35273:4;35270:1;35263:15;35290:180;35338:77;35335:1;35328:88;35435:4;35432:1;35425:15;35459:4;35456:1;35449:15;35476:183;35511:3;35549:1;35531:16;35528:23;35525:128;;;35587:1;35584;35581;35566:23;35609:34;35640:1;35634:8;35609:34;:::i;:::-;35602:41;;35525:128;35476:183;:::o;35665:117::-;35774:1;35771;35764:12;35788:117;35897:1;35894;35887:12;35911:117;36020:1;36017;36010:12;36034:117;36143:1;36140;36133:12;36157:117;36266:1;36263;36256:12;36280:117;36389:1;36386;36379:12;36403:102;36444:6;36495:2;36491:7;36486:2;36479:5;36475:14;36471:28;36461:38;;36403:102;;;:::o;36511:106::-;36555:8;36604:5;36599:3;36595:15;36574:36;;36511:106;;;:::o;36623:239::-;36763:34;36759:1;36751:6;36747:14;36740:58;36832:22;36827:2;36819:6;36815:15;36808:47;36623:239;:::o;36868:227::-;37008:34;37004:1;36996:6;36992:14;36985:58;37077:10;37072:2;37064:6;37060:15;37053:35;36868:227;:::o;37101:164::-;37241:16;37237:1;37229:6;37225:14;37218:40;37101:164;:::o;37271:230::-;37411:34;37407:1;37399:6;37395:14;37388:58;37480:13;37475:2;37467:6;37463:15;37456:38;37271:230;:::o;37507:225::-;37647:34;37643:1;37635:6;37631:14;37624:58;37716:8;37711:2;37703:6;37699:15;37692:33;37507:225;:::o;37738:228::-;37878:34;37874:1;37866:6;37862:14;37855:58;37947:11;37942:2;37934:6;37930:15;37923:36;37738:228;:::o;37972:224::-;38112:34;38108:1;38100:6;38096:14;38089:58;38181:7;38176:2;38168:6;38164:15;38157:32;37972:224;:::o;38202:237::-;38342:34;38338:1;38330:6;38326:14;38319:58;38411:20;38406:2;38398:6;38394:15;38387:45;38202:237;:::o;38445:229::-;38585:34;38581:1;38573:6;38569:14;38562:58;38654:12;38649:2;38641:6;38637:15;38630:37;38445:229;:::o;38680:182::-;38820:34;38816:1;38808:6;38804:14;38797:58;38680:182;:::o;38868:228::-;39008:34;39004:1;38996:6;38992:14;38985:58;39077:11;39072:2;39064:6;39060:15;39053:36;38868:228;:::o;39102:::-;39242:34;39238:1;39230:6;39226:14;39219:58;39311:11;39306:2;39298:6;39294:15;39287:36;39102:228;:::o;39336:227::-;39476:34;39472:1;39464:6;39460:14;39453:58;39545:10;39540:2;39532:6;39528:15;39521:35;39336:227;:::o;39569:220::-;39709:34;39705:1;39697:6;39693:14;39686:58;39778:3;39773:2;39765:6;39761:15;39754:28;39569:220;:::o;39795:236::-;39935:34;39931:1;39923:6;39919:14;39912:58;40004:19;39999:2;39991:6;39987:15;39980:44;39795:236;:::o;40037:711::-;40076:3;40114:4;40096:16;40093:26;40090:39;;;40122:5;;40090:39;40151:20;;:::i;:::-;40226:1;40208:16;40204:24;40201:1;40195:4;40180:49;40259:4;40253:11;40358:16;40351:4;40343:6;40339:17;40336:39;40303:18;40295:6;40292:30;40276:113;40273:146;;;40404:5;;;;40273:146;40450:6;40444:4;40440:17;40486:3;40480:10;40513:18;40505:6;40502:30;40499:43;;;40535:5;;;;;;40499:43;40583:6;40576:4;40571:3;40567:14;40563:27;40642:1;40624:16;40620:24;40614:4;40610:35;40605:3;40602:44;40599:57;;;40649:5;;;;;;;40599:57;40666;40714:6;40708:4;40704:17;40696:6;40692:30;40686:4;40666:57;:::i;:::-;40739:3;40732:10;;40080:668;;;;;40037:711;;:::o;40754:122::-;40827:24;40845:5;40827:24;:::i;:::-;40820:5;40817:35;40807:63;;40866:1;40863;40856:12;40807:63;40754:122;:::o;40882:116::-;40952:21;40967:5;40952:21;:::i;:::-;40945:5;40942:32;40932:60;;40988:1;40985;40978:12;40932:60;40882:116;:::o;41004:120::-;41076:23;41093:5;41076:23;:::i;:::-;41069:5;41066:34;41056:62;;41114:1;41111;41104:12;41056:62;41004:120;:::o;41130:122::-;41203:24;41221:5;41203:24;:::i;:::-;41196:5;41193:35;41183:63;;41242:1;41239;41232:12;41183:63;41130:122;:::o

Swarm Source

ipfs://0ce6460c7ae301e2e7b453ae3aa2c68748d067fa30407a0f148525503215a6c0
Loading