Token

 

Overview ERC-1155

Total Supply:
0 N/A

Holders:
164 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:
IngredientsERC11155

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 14 : IngredientsERC11155.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.9 <0.9.0;

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/security/Pausable.sol";

contract IngredientsERC11155 is ERC1155, ERC1155Burnable, ReentrancyGuard, Ownable, Pausable {
    uint public tokensCount = 25;
    string private _uri;
    mapping(uint256 => string) private _uris;
    mapping(address =>  bool) private _mintApprovals;

    constructor(string memory _baseUri) ERC1155(string(
            abi.encodePacked(
                _baseUri,
                "{id}.json"
            )
        )) {
        _uri = _baseUri;
    }
    modifier existId(uint _tokenid) {
        require(_tokenid <= tokensCount, "Invalid token id");
        _;
    }

    modifier existIds(uint[] memory _tokenIds) {
        for(uint i=0; i < _tokenIds.length; i++){
            require(_tokenIds[i] <= tokensCount, "Invalid token id");
        }
        _;
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function setURI(string memory newuri) external onlyOwner {
        _uri = newuri;
    }

    function setMintApprovalForAll(address operator, bool approved) external onlyOwner{
        _mintApprovals[operator] = approved;
    }

    function isMintApprovedForAll(address operator) public view returns (bool) {
        return _mintApprovals[operator];
    }

    // contract or owner mint function
    function mint(address to, uint tokenId, uint amount) external existId(tokenId){
        require(
            isMintApprovedForAll(msg.sender) || owner() == msg.sender,
            "ERC1155: caller is not owner nor approved"
        );
        _mint(to, tokenId, amount, "");
    }

    function mintBatch(address to, uint[] memory tokenIds, uint[] memory amounts) external existIds(tokenIds) {
        require(
            isMintApprovedForAll(msg.sender) || owner() == msg.sender,
            "ERC1155: caller is not owner nor approved"
        );
        _mintBatch(to, tokenIds, amounts, "");
    }

    function getWalletToken() external view returns(uint[] memory){
        uint256[] memory tokens = new uint256[](tokensCount);
        for(uint256 i = 0; i < tokensCount; i++ ){
            tokens[i] =  balanceOf(msg.sender, i+1);
        }
        return(tokens);
    }

    function setTokenSize(uint _tokensCount) external onlyOwner{
        tokensCount = _tokensCount;
    }

    function setTokenUri(uint tokenId_, string memory uri_) external onlyOwner {
        _uris[tokenId_] = uri_;
        tokensCount++;
    }

    function uri(uint256 _tokenId) override public view existId(_tokenId) returns (string memory) {
        if(bytes(_uris[_tokenId]).length > 0){
            return _uris[_tokenId];
        }
        return string(
            abi.encodePacked(
                _uri,
                Strings.toString(_tokenId),".json"
            )
        );
    }

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        whenNotPaused
        override
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

File 2 of 14 : ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./extensions/IERC1155MetadataURI.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/introspection/ERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token 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: caller is not token owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

        return array;
    }
}

File 3 of 14 : ERC1155Burnable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/extensions/ERC1155Burnable.sol)

pragma solidity ^0.8.0;

import "../ERC1155.sol";

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

        _burn(account, id, value);
    }

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

        _burnBatch(account, ids, values);
    }
}

File 4 of 14 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 5 of 14 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

File 6 of 14 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

File 7 of 14 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 8 of 14 : IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

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

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

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

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

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

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

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

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

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

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

File 9 of 14 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

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

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

File 10 of 14 : IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "../IERC1155.sol";

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

File 11 of 14 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 12 of 14 : Context.sol
// SPDX-License-Identifier: MIT
// 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 13 of 14 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

pragma solidity ^0.8.0;

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getWalletToken","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":[{"internalType":"address","name":"operator","type":"address"}],"name":"isMintApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setMintApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokensCount","type":"uint256"}],"name":"setTokenSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"string","name":"uri_","type":"string"}],"name":"setTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","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":"tokensCount","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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405260196005553480156200001657600080fd5b5060405162004b3038038062004b3083398181016040528101906200003c91906200040a565b806040516020016200004f9190620004f8565b6040516020818303038152906040526200006f81620000d360201b60201c565b506001600381905550620000986200008c620000ef60201b60201c565b620000f760201b60201c565b6000600460146101000a81548160ff0219169083151502179055508060069080519060200190620000cb929190620001bd565b505062000583565b8060029080519060200190620000eb929190620001bd565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001cb906200054d565b90600052602060002090601f016020900481019282620001ef57600085556200023b565b82601f106200020a57805160ff19168380011785556200023b565b828001600101855582156200023b579182015b828111156200023a5782518255916020019190600101906200021d565b5b5090506200024a91906200024e565b5090565b5b80821115620002695760008160009055506001016200024f565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002d6826200028b565b810181811067ffffffffffffffff82111715620002f857620002f76200029c565b5b80604052505050565b60006200030d6200026d565b90506200031b8282620002cb565b919050565b600067ffffffffffffffff8211156200033e576200033d6200029c565b5b62000349826200028b565b9050602081019050919050565b60005b838110156200037657808201518184015260208101905062000359565b8381111562000386576000848401525b50505050565b6000620003a36200039d8462000320565b62000301565b905082815260208101848484011115620003c257620003c162000286565b5b620003cf84828562000356565b509392505050565b600082601f830112620003ef57620003ee62000281565b5b8151620004018482602086016200038c565b91505092915050565b60006020828403121562000423576200042262000277565b5b600082015167ffffffffffffffff8111156200044457620004436200027c565b5b6200045284828501620003d7565b91505092915050565b600081519050919050565b600081905092915050565b60006200047e826200045b565b6200048a818562000466565b93506200049c81856020860162000356565b80840191505092915050565b7f7b69647d2e6a736f6e0000000000000000000000000000000000000000000000600082015250565b6000620004e060098362000466565b9150620004ed82620004a8565b600982019050919050565b600062000506828462000471565b91506200051382620004d1565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200056657607f821691505b602082108114156200057d576200057c6200051e565b5b50919050565b61459d80620005936000396000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c8063715018a6116100de578063a9c7b71211610097578063e985e9c511610071578063e985e9c5146103f9578063f242432a14610429578063f2fde38b14610445578063f5298aca1461046157610172565b8063a9c7b712146103a5578063c5393436146103c1578063d81d0a15146103dd57610172565b8063715018a61461031b5780638456cb59146103255780638a4784771461032f5780638da5cb5b1461034d578063a22cb4651461036b578063a64ed8ba1461038757610172565b80633a4a67ab116101305780633a4a67ab1461025b5780633f4ba83a1461028b5780634e1273f41461029557806357f7789e146102c55780635c975abb146102e15780636b20c454146102ff57610172565b8062fdd58e1461017757806301ffc9a7146101a757806302fe5305146101d75780630e89341c146101f3578063156e29f6146102235780632eb2c2d61461023f575b600080fd5b610191600480360381019061018c9190612b1d565b61047d565b60405161019e9190612b6c565b60405180910390f35b6101c160048036038101906101bc9190612bdf565b610546565b6040516101ce9190612c27565b60405180910390f35b6101f160048036038101906101ec9190612d88565b610628565b005b61020d60048036038101906102089190612dd1565b61064a565b60405161021a9190612e86565b60405180910390f35b61023d60048036038101906102389190612ea8565b610791565b005b61025960048036038101906102549190613064565b61087d565b005b61027560048036038101906102709190613133565b61091e565b6040516102829190612c27565b60405180910390f35b610293610974565b005b6102af60048036038101906102aa9190613223565b610986565b6040516102bc9190613359565b60405180910390f35b6102df60048036038101906102da919061337b565b610a9f565b005b6102e9610aeb565b6040516102f69190612c27565b60405180910390f35b610319600480360381019061031491906133d7565b610b02565b005b610323610b9f565b005b61032d610bb3565b005b610337610bc5565b6040516103449190613359565b60405180910390f35b610355610c73565b6040516103629190613471565b60405180910390f35b610385600480360381019061038091906134b8565b610c9d565b005b61038f610cb3565b60405161039c9190612b6c565b60405180910390f35b6103bf60048036038101906103ba91906134b8565b610cb9565b005b6103db60048036038101906103d69190612dd1565b610d1c565b005b6103f760048036038101906103f291906133d7565b610d2e565b005b610413600480360381019061040e91906134f8565b610e54565b6040516104209190612c27565b60405180910390f35b610443600480360381019061043e9190613538565b610ee8565b005b61045f600480360381019061045a9190613133565b610f89565b005b61047b60048036038101906104769190612ea8565b61100d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e590613641565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061061157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106215750610620826110aa565b5b9050919050565b610630611114565b80600690805190602001906106469291906129d2565b5050565b606081600554811115610692576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610689906136ad565b60405180910390fd5b60006007600085815260200190815260200160002080546106b2906136fc565b9050111561075d576007600084815260200190815260200160002080546106d8906136fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610704906136fc565b80156107515780601f1061072657610100808354040283529160200191610751565b820191906000526020600020905b81548152906001019060200180831161073457829003601f168201915b5050505050915061078b565b600661076884611192565b60405160200161077992919061384a565b60405160208183030381529060405291505b50919050565b816005548111156107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce906136ad565b60405180910390fd5b6107e03361091e565b8061081d57503373ffffffffffffffffffffffffffffffffffffffff16610805610c73565b73ffffffffffffffffffffffffffffffffffffffff16145b61085c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610853906138eb565b60405180910390fd5b610877848484604051806020016040528060008152506112f3565b50505050565b6108856114a4565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108cb57506108ca856108c56114a4565b610e54565b5b61090a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109019061397d565b60405180910390fd5b61091785858585856114ac565b5050505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61097c611114565b6109846117ce565b565b606081518351146109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c390613a0f565b60405180910390fd5b6000835167ffffffffffffffff8111156109e9576109e8612c5d565b5b604051908082528060200260200182016040528015610a175781602001602082028036833780820191505090505b50905060005b8451811015610a9457610a64858281518110610a3c57610a3b613a2f565b5b6020026020010151858381518110610a5757610a56613a2f565b5b602002602001015161047d565b828281518110610a7757610a76613a2f565b5b60200260200101818152505080610a8d90613a8d565b9050610a1d565b508091505092915050565b610aa7611114565b80600760008481526020019081526020016000209080519060200190610ace9291906129d2565b5060056000815480929190610ae290613a8d565b91905055505050565b6000600460149054906101000a900460ff16905090565b610b0a6114a4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b505750610b4f83610b4a6114a4565b610e54565b5b610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b869061397d565b60405180910390fd5b610b9a838383611831565b505050565b610ba7611114565b610bb16000611b00565b565b610bbb611114565b610bc3611bc6565b565b6060600060055467ffffffffffffffff811115610be557610be4612c5d565b5b604051908082528060200260200182016040528015610c135781602001602082028036833780820191505090505b50905060005b600554811015610c6b57610c3933600183610c349190613ad6565b61047d565b828281518110610c4c57610c4b613a2f565b5b6020026020010181815250508080610c6390613a8d565b915050610c19565b508091505090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610caf610ca86114a4565b8383611c29565b5050565b60055481565b610cc1611114565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610d24611114565b8060058190555050565b8160005b8151811015610dad57600554828281518110610d5157610d50613a2f565b5b60200260200101511115610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906136ad565b60405180910390fd5b8080610da590613a8d565b915050610d32565b50610db73361091e565b80610df457503373ffffffffffffffffffffffffffffffffffffffff16610ddc610c73565b73ffffffffffffffffffffffffffffffffffffffff16145b610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a906138eb565b60405180910390fd5b610e4e84848460405180602001604052806000815250611d96565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ef06114a4565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f365750610f3585610f306114a4565b610e54565b5b610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c9061397d565b60405180910390fd5b610f828585858585611fc3565b5050505050565b610f91611114565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff890613b9e565b60405180910390fd5b61100a81611b00565b50565b6110156114a4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061105b575061105a836110556114a4565b610e54565b5b61109a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110919061397d565b60405180910390fd5b6110a583838361225f565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61111c6114a4565b73ffffffffffffffffffffffffffffffffffffffff1661113a610c73565b73ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790613c0a565b60405180910390fd5b565b606060008214156111da576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506112ee565b600082905060005b6000821461120c5780806111f590613a8d565b915050600a826112059190613c59565b91506111e2565b60008167ffffffffffffffff81111561122857611227612c5d565b5b6040519080825280601f01601f19166020018201604052801561125a5781602001600182028036833780820191505090505b5090505b600085146112e7576001826112739190613c8a565b9150600a856112829190613cbe565b603061128e9190613ad6565b60f81b8183815181106112a4576112a3613a2f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856112e09190613c59565b945061125e565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135a90613d61565b60405180910390fd5b600061136d6114a4565b9050600061137a856124a6565b90506000611387856124a6565b905061139883600089858589612520565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113f79190613ad6565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611475929190613d81565b60405180910390a461148c8360008985858961253e565b61149b83600089898989612546565b50505050505050565b600033905090565b81518351146114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790613e1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790613eae565b60405180910390fd5b600061156a6114a4565b905061157a818787878787612520565b60005b845181101561172b57600085828151811061159b5761159a613a2f565b5b6020026020010151905060008583815181106115ba576115b9613a2f565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290613f40565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117109190613ad6565b925050819055505050508061172490613a8d565b905061157d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516117a2929190613f60565b60405180910390a46117b881878787878761253e565b6117c681878787878761272d565b505050505050565b6117d6612914565b6000600460146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61181a6114a4565b6040516118279190613471565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189890614009565b60405180910390fd5b80518251146118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc90613e1c565b60405180910390fd5b60006118ef6114a4565b905061190f81856000868660405180602001604052806000815250612520565b60005b8351811015611a5c5760008482815181106119305761192f613a2f565b5b60200260200101519050600084838151811061194f5761194e613a2f565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e79061409b565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611a5490613a8d565b915050611912565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611ad4929190613f60565b60405180910390a4611afa8185600086866040518060200160405280600081525061253e565b50505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611bce61295d565b6001600460146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c126114a4565b604051611c1f9190613471565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f9061412d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d899190612c27565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd90613d61565b60405180910390fd5b8151835114611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4190613e1c565b60405180910390fd5b6000611e546114a4565b9050611e6581600087878787612520565b60005b8451811015611f1e57838181518110611e8457611e83613a2f565b5b6020026020010151600080878481518110611ea257611ea1613a2f565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f049190613ad6565b925050819055508080611f1690613a8d565b915050611e68565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611f96929190613f60565b60405180910390a4611fad8160008787878761253e565b611fbc8160008787878761272d565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a90613eae565b60405180910390fd5b600061203d6114a4565b9050600061204a856124a6565b90506000612057856124a6565b9050612067838989858589612520565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f590613f40565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b39190613ad6565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612230929190613d81565b60405180910390a4612246848a8a86868a61253e565b612254848a8a8a8a8a612546565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614009565b60405180910390fd5b60006122d96114a4565b905060006122e6846124a6565b905060006122f3846124a6565b905061231383876000858560405180602001604052806000815250612520565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a19061409b565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612477929190613d81565b60405180910390a461249d8488600086866040518060200160405280600081525061253e565b50505050505050565b60606000600167ffffffffffffffff8111156124c5576124c4612c5d565b5b6040519080825280602002602001820160405280156124f35781602001602082028036833780820191505090505b509050828160008151811061250b5761250a613a2f565b5b60200260200101818152505080915050919050565b61252861295d565b6125368686868686866129a7565b505050505050565b505050505050565b6125658473ffffffffffffffffffffffffffffffffffffffff166129af565b15612725578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016125ab9594939291906141a2565b602060405180830381600087803b1580156125c557600080fd5b505af19250505080156125f657506040513d601f19601f820116820180604052508101906125f39190614211565b60015b61269c5761260261424b565b806308c379a0141561265f575061261761426d565b806126225750612661565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126569190612e86565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269390614375565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271a90614407565b60405180910390fd5b505b505050505050565b61274c8473ffffffffffffffffffffffffffffffffffffffff166129af565b1561290c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612792959493929190614427565b602060405180830381600087803b1580156127ac57600080fd5b505af19250505080156127dd57506040513d601f19601f820116820180604052508101906127da9190614211565b60015b612883576127e961424b565b806308c379a0141561284657506127fe61426d565b806128095750612848565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d9190612e86565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287a90614375565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290190614407565b60405180910390fd5b505b505050505050565b61291c610aeb565b61295b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612952906144db565b60405180910390fd5b565b612965610aeb565b156129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c90614547565b60405180910390fd5b565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546129de906136fc565b90600052602060002090601f016020900481019282612a005760008555612a47565b82601f10612a1957805160ff1916838001178555612a47565b82800160010185558215612a47579182015b82811115612a46578251825591602001919060010190612a2b565b5b509050612a549190612a58565b5090565b5b80821115612a71576000816000905550600101612a59565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ab482612a89565b9050919050565b612ac481612aa9565b8114612acf57600080fd5b50565b600081359050612ae181612abb565b92915050565b6000819050919050565b612afa81612ae7565b8114612b0557600080fd5b50565b600081359050612b1781612af1565b92915050565b60008060408385031215612b3457612b33612a7f565b5b6000612b4285828601612ad2565b9250506020612b5385828601612b08565b9150509250929050565b612b6681612ae7565b82525050565b6000602082019050612b816000830184612b5d565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612bbc81612b87565b8114612bc757600080fd5b50565b600081359050612bd981612bb3565b92915050565b600060208284031215612bf557612bf4612a7f565b5b6000612c0384828501612bca565b91505092915050565b60008115159050919050565b612c2181612c0c565b82525050565b6000602082019050612c3c6000830184612c18565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c9582612c4c565b810181811067ffffffffffffffff82111715612cb457612cb3612c5d565b5b80604052505050565b6000612cc7612a75565b9050612cd38282612c8c565b919050565b600067ffffffffffffffff821115612cf357612cf2612c5d565b5b612cfc82612c4c565b9050602081019050919050565b82818337600083830152505050565b6000612d2b612d2684612cd8565b612cbd565b905082815260208101848484011115612d4757612d46612c47565b5b612d52848285612d09565b509392505050565b600082601f830112612d6f57612d6e612c42565b5b8135612d7f848260208601612d18565b91505092915050565b600060208284031215612d9e57612d9d612a7f565b5b600082013567ffffffffffffffff811115612dbc57612dbb612a84565b5b612dc884828501612d5a565b91505092915050565b600060208284031215612de757612de6612a7f565b5b6000612df584828501612b08565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e38578082015181840152602081019050612e1d565b83811115612e47576000848401525b50505050565b6000612e5882612dfe565b612e628185612e09565b9350612e72818560208601612e1a565b612e7b81612c4c565b840191505092915050565b60006020820190508181036000830152612ea08184612e4d565b905092915050565b600080600060608486031215612ec157612ec0612a7f565b5b6000612ecf86828701612ad2565b9350506020612ee086828701612b08565b9250506040612ef186828701612b08565b9150509250925092565b600067ffffffffffffffff821115612f1657612f15612c5d565b5b602082029050602081019050919050565b600080fd5b6000612f3f612f3a84612efb565b612cbd565b90508083825260208201905060208402830185811115612f6257612f61612f27565b5b835b81811015612f8b5780612f778882612b08565b845260208401935050602081019050612f64565b5050509392505050565b600082601f830112612faa57612fa9612c42565b5b8135612fba848260208601612f2c565b91505092915050565b600067ffffffffffffffff821115612fde57612fdd612c5d565b5b612fe782612c4c565b9050602081019050919050565b600061300761300284612fc3565b612cbd565b90508281526020810184848401111561302357613022612c47565b5b61302e848285612d09565b509392505050565b600082601f83011261304b5761304a612c42565b5b813561305b848260208601612ff4565b91505092915050565b600080600080600060a086880312156130805761307f612a7f565b5b600061308e88828901612ad2565b955050602061309f88828901612ad2565b945050604086013567ffffffffffffffff8111156130c0576130bf612a84565b5b6130cc88828901612f95565b935050606086013567ffffffffffffffff8111156130ed576130ec612a84565b5b6130f988828901612f95565b925050608086013567ffffffffffffffff81111561311a57613119612a84565b5b61312688828901613036565b9150509295509295909350565b60006020828403121561314957613148612a7f565b5b600061315784828501612ad2565b91505092915050565b600067ffffffffffffffff82111561317b5761317a612c5d565b5b602082029050602081019050919050565b600061319f61319a84613160565b612cbd565b905080838252602082019050602084028301858111156131c2576131c1612f27565b5b835b818110156131eb57806131d78882612ad2565b8452602084019350506020810190506131c4565b5050509392505050565b600082601f83011261320a57613209612c42565b5b813561321a84826020860161318c565b91505092915050565b6000806040838503121561323a57613239612a7f565b5b600083013567ffffffffffffffff81111561325857613257612a84565b5b613264858286016131f5565b925050602083013567ffffffffffffffff81111561328557613284612a84565b5b61329185828601612f95565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132d081612ae7565b82525050565b60006132e283836132c7565b60208301905092915050565b6000602082019050919050565b60006133068261329b565b61331081856132a6565b935061331b836132b7565b8060005b8381101561334c57815161333388826132d6565b975061333e836132ee565b92505060018101905061331f565b5085935050505092915050565b6000602082019050818103600083015261337381846132fb565b905092915050565b6000806040838503121561339257613391612a7f565b5b60006133a085828601612b08565b925050602083013567ffffffffffffffff8111156133c1576133c0612a84565b5b6133cd85828601612d5a565b9150509250929050565b6000806000606084860312156133f0576133ef612a7f565b5b60006133fe86828701612ad2565b935050602084013567ffffffffffffffff81111561341f5761341e612a84565b5b61342b86828701612f95565b925050604084013567ffffffffffffffff81111561344c5761344b612a84565b5b61345886828701612f95565b9150509250925092565b61346b81612aa9565b82525050565b60006020820190506134866000830184613462565b92915050565b61349581612c0c565b81146134a057600080fd5b50565b6000813590506134b28161348c565b92915050565b600080604083850312156134cf576134ce612a7f565b5b60006134dd85828601612ad2565b92505060206134ee858286016134a3565b9150509250929050565b6000806040838503121561350f5761350e612a7f565b5b600061351d85828601612ad2565b925050602061352e85828601612ad2565b9150509250929050565b600080600080600060a0868803121561355457613553612a7f565b5b600061356288828901612ad2565b955050602061357388828901612ad2565b945050604061358488828901612b08565b935050606061359588828901612b08565b925050608086013567ffffffffffffffff8111156135b6576135b5612a84565b5b6135c288828901613036565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061362b602a83612e09565b9150613636826135cf565b604082019050919050565b6000602082019050818103600083015261365a8161361e565b9050919050565b7f496e76616c696420746f6b656e20696400000000000000000000000000000000600082015250565b6000613697601083612e09565b91506136a282613661565b602082019050919050565b600060208201905081810360008301526136c68161368a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061371457607f821691505b60208210811415613728576137276136cd565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461375b816136fc565b613765818661372e565b945060018216600081146137805760018114613791576137c4565b60ff198316865281860193506137c4565b61379a85613739565b60005b838110156137bc5781548189015260018201915060208101905061379d565b838801955050505b50505092915050565b60006137d882612dfe565b6137e2818561372e565b93506137f2818560208601612e1a565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061383460058361372e565b915061383f826137fe565b600582019050919050565b6000613856828561374e565b915061386282846137cd565b915061386d82613827565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006138d5602983612e09565b91506138e082613879565b604082019050919050565b60006020820190508181036000830152613904816138c8565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000613967602f83612e09565b91506139728261390b565b604082019050919050565b600060208201905081810360008301526139968161395a565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006139f9602983612e09565b9150613a048261399d565b604082019050919050565b60006020820190508181036000830152613a28816139ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a9882612ae7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613acb57613aca613a5e565b5b600182019050919050565b6000613ae182612ae7565b9150613aec83612ae7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b2157613b20613a5e565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b88602683612e09565b9150613b9382613b2c565b604082019050919050565b60006020820190508181036000830152613bb781613b7b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bf4602083612e09565b9150613bff82613bbe565b602082019050919050565b60006020820190508181036000830152613c2381613be7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c6482612ae7565b9150613c6f83612ae7565b925082613c7f57613c7e613c2a565b5b828204905092915050565b6000613c9582612ae7565b9150613ca083612ae7565b925082821015613cb357613cb2613a5e565b5b828203905092915050565b6000613cc982612ae7565b9150613cd483612ae7565b925082613ce457613ce3613c2a565b5b828206905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d4b602183612e09565b9150613d5682613cef565b604082019050919050565b60006020820190508181036000830152613d7a81613d3e565b9050919050565b6000604082019050613d966000830185612b5d565b613da36020830184612b5d565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613e06602883612e09565b9150613e1182613daa565b604082019050919050565b60006020820190508181036000830152613e3581613df9565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e98602583612e09565b9150613ea382613e3c565b604082019050919050565b60006020820190508181036000830152613ec781613e8b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613f2a602a83612e09565b9150613f3582613ece565b604082019050919050565b60006020820190508181036000830152613f5981613f1d565b9050919050565b60006040820190508181036000830152613f7a81856132fb565b90508181036020830152613f8e81846132fb565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ff3602383612e09565b9150613ffe82613f97565b604082019050919050565b6000602082019050818103600083015261402281613fe6565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614085602483612e09565b915061409082614029565b604082019050919050565b600060208201905081810360008301526140b481614078565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614117602983612e09565b9150614122826140bb565b604082019050919050565b600060208201905081810360008301526141468161410a565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006141748261414d565b61417e8185614158565b935061418e818560208601612e1a565b61419781612c4c565b840191505092915050565b600060a0820190506141b76000830188613462565b6141c46020830187613462565b6141d16040830186612b5d565b6141de6060830185612b5d565b81810360808301526141f08184614169565b90509695505050505050565b60008151905061420b81612bb3565b92915050565b60006020828403121561422757614226612a7f565b5b6000614235848285016141fc565b91505092915050565b60008160e01c9050919050565b600060033d111561426a5760046000803e61426760005161423e565b90505b90565b600060443d101561427d57614300565b614285612a75565b60043d036004823e80513d602482011167ffffffffffffffff821117156142ad575050614300565b808201805167ffffffffffffffff8111156142cb5750505050614300565b80602083010160043d0385018111156142e8575050505050614300565b6142f782602001850186612c8c565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061435f603483612e09565b915061436a82614303565b604082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006143f1602883612e09565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b600060a08201905061443c6000830188613462565b6144496020830187613462565b818103604083015261445b81866132fb565b9050818103606083015261446f81856132fb565b905081810360808301526144838184614169565b90509695505050505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006144c5601483612e09565b91506144d08261448f565b602082019050919050565b600060208201905081810360008301526144f4816144b8565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614531601083612e09565b915061453c826144fb565b602082019050919050565b6000602082019050818103600083015261456081614524565b905091905056fea26469706673582212208aac426823aeb49cdaf0220bbb2512bcc0424bd594b954349bcd1bb2afe5d69364736f6c634300080900330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f706f776572706c696e732e6d7970696e6174612e636c6f75642f697066732f516d5973396e4175776355466f5655436231714554773358315168516a69677367743555534545763367397244442f00000000000000000000

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f706f776572706c696e732e6d7970696e6174612e636c6f75642f697066732f516d5973396e4175776355466f5655436231714554773358315168516a69677367743555534545763367397244442f00000000000000000000

-----Decoded View---------------
Arg [0] : _baseUri (string): https://powerplins.mypinata.cloud/ipfs/QmYs9nAuwcUFoVUCb1qETw3X1QhQjigsgt5USEEv3g9rDD/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000056
Arg [2] : 68747470733a2f2f706f776572706c696e732e6d7970696e6174612e636c6f75
Arg [3] : 642f697066732f516d5973396e4175776355466f565543623171455477335831
Arg [4] : 5168516a69677367743555534545763367397244442f00000000000000000000


Deployed ByteCode Sourcemap

429:3077:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2185:227:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1236:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1335:87:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2869:345;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1736:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4065:427:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1568:123:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1266:63;;;:::i;:::-;;2569:508:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2726:137:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1615:84:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;730:348:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1831:101:0;;;:::i;:::-;;1201:59:13;;;:::i;:::-;;2343:269;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1201:85:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3145:153:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;528:28:13;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1428:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2618:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2022:315;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3365:166:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3598:395;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2081:198:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;408:316:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2185:227:3;2271:7;2317:1;2298:21;;:7;:21;;;;2290:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2383:9;:13;2393:2;2383:13;;;;;;;;;;;:22;2397:7;2383:22;;;;;;;;;;;;;;;;2376:29;;2185:227;;;;:::o;1236:305::-;1338:4;1388:26;1373:41;;;:11;:41;;;;:109;;;;1445:37;1430:52;;;:11;:52;;;;1373:109;:161;;;;1498:36;1522:11;1498:23;:36::i;:::-;1373:161;1354:180;;1236:305;;;:::o;1335:87:13:-;1094:13:0;:11;:13::i;:::-;1409:6:13::1;1402:4;:13;;;;;;;;;;;;:::i;:::-;;1335:87:::0;:::o;2869:345::-;2948:13;2929:8;948:11;;936:8;:23;;928:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;3008:1:::1;2982:5;:15;2988:8;2982:15;;;;;;;;;;;2976:29;;;;;:::i;:::-;;;:33;2973:84;;;3031:5;:15;3037:8;3031:15;;;;;;;;;;;3024:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2973:84;3127:4;3149:26;3166:8;3149:16;:26::i;:::-;3093:104;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3066:141;;990:1;2869:345:::0;;;;:::o;1736:280::-;1806:7;948:11;;936:8;:23;;928:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:32:::1;1866:10;1845:20;:32::i;:::-;:57;;;;1892:10;1881:21;;:7;:5;:7::i;:::-;:21;;;1845:57;1824:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;1979:30;1985:2;1989:7;1998:6;1979:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;1736:280:::0;;;;:::o;4065:427:3:-;4298:12;:10;:12::i;:::-;4290:20;;:4;:20;;;:60;;;;4314:36;4331:4;4337:12;:10;:12::i;:::-;4314:16;:36::i;:::-;4290:60;4269:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;4433:52;4456:4;4462:2;4466:3;4471:7;4480:4;4433:22;:52::i;:::-;4065:427;;;;;:::o;1568:123:13:-;1637:4;1660:14;:24;1675:8;1660:24;;;;;;;;;;;;;;;;;;;;;;;;;1653:31;;1568:123;;;:::o;1266:63::-;1094:13:0;:11;:13::i;:::-;1312:10:13::1;:8;:10::i;:::-;1266:63::o:0;2569:508:3:-;2720:16;2779:3;:10;2760:8;:15;:29;2752:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2846:30;2893:8;:15;2879:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2846:63;;2925:9;2920:120;2944:8;:15;2940:1;:19;2920:120;;;2999:30;3009:8;3018:1;3009:11;;;;;;;;:::i;:::-;;;;;;;;3022:3;3026:1;3022:6;;;;;;;;:::i;:::-;;;;;;;;2999:9;:30::i;:::-;2980:13;2994:1;2980:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2961:3;;;;:::i;:::-;;;2920:120;;;;3057:13;3050:20;;;2569:508;;;;:::o;2726:137:13:-;1094:13:0;:11;:13::i;:::-;2829:4:13::1;2811:5;:15;2817:8;2811:15;;;;;;;;;;;:22;;;;;;;;;;;;:::i;:::-;;2843:11;;:13;;;;;;;;;:::i;:::-;;;;;;2726:137:::0;;:::o;1615:84:1:-;1662:4;1685:7;;;;;;;;;;;1678:14;;1615:84;:::o;730:348:6:-;900:12;:10;:12::i;:::-;889:23;;:7;:23;;;:66;;;;916:39;933:7;942:12;:10;:12::i;:::-;916:16;:39::i;:::-;889:66;868:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;1039:32;1050:7;1059:3;1064:6;1039:10;:32::i;:::-;730:348;;;:::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1201:59:13:-;1094:13:0;:11;:13::i;:::-;1245:8:13::1;:6;:8::i;:::-;1201:59::o:0;2343:269::-;2391:13;2415:23;2455:11;;2441:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2415:52;;2481:9;2477:105;2500:11;;2496:1;:15;2477:105;;;2545:26;2555:10;2569:1;2567;:3;;;;:::i;:::-;2545:9;:26::i;:::-;2532:6;2539:1;2532:9;;;;;;;;:::i;:::-;;;;;;;:39;;;;;2513:3;;;;;:::i;:::-;;;;2477:105;;;;2598:6;2591:14;;;2343:269;:::o;1201:85:0:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;3145:153:3:-;3239:52;3258:12;:10;:12::i;:::-;3272:8;3282;3239:18;:52::i;:::-;3145:153;;:::o;528:28:13:-;;;;:::o;1428:134::-;1094:13:0;:11;:13::i;:::-;1547:8:13::1;1520:14;:24;1535:8;1520:24;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;1428:134:::0;;:::o;2618:102::-;1094:13:0;:11;:13::i;:::-;2701:12:13::1;2687:11;:26;;;;2618:102:::0;:::o;2022:315::-;2118:8;1061:6;1057:121;1075:9;:16;1071:1;:20;1057:121;;;1135:11;;1119:9;1129:1;1119:12;;;;;;;;:::i;:::-;;;;;;;;:27;;1111:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1093:3;;;;;:::i;:::-;;;;1057:121;;;;2159:32:::1;2180:10;2159:20;:32::i;:::-;:57;;;;2206:10;2195:21;;:7;:5;:7::i;:::-;:21;;;2159:57;2138:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:37;2304:2;2308:8;2318:7;2293:37;;;;;;;;;;;::::0;:10:::1;:37::i;:::-;2022:315:::0;;;;:::o;3365:166:3:-;3464:4;3487:18;:27;3506:7;3487:27;;;;;;;;;;;;;;;:37;3515:8;3487:37;;;;;;;;;;;;;;;;;;;;;;;;;3480:44;;3365:166;;;;:::o;3598:395::-;3806:12;:10;:12::i;:::-;3798:20;;:4;:20;;;:60;;;;3822:36;3839:4;3845:12;:10;:12::i;:::-;3822:16;:36::i;:::-;3798:60;3777:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;3941:45;3959:4;3965:2;3969;3973:6;3981:4;3941:17;:45::i;:::-;3598:395;;;;;:::o;2081:198:0:-;1094:13;:11;:13::i;:::-;2189:1:::1;2169:22;;:8;:22;;;;2161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;408:316:6:-;553:12;:10;:12::i;:::-;542:23;;:7;:23;;;:66;;;;569:39;586:7;595:12;:10;:12::i;:::-;569:16;:39::i;:::-;542:66;521:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;692:25;698:7;707:2;711:5;692;:25::i;:::-;408:316;;;:::o;829:155:11:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;1359:130:0:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;392:703:10:-;448:13;674:1;665:5;:10;661:51;;;691:10;;;;;;;;;;;;;;;;;;;;;661:51;721:12;736:5;721:20;;751:14;775:75;790:1;782:4;:9;775:75;;807:8;;;;;:::i;:::-;;;;837:2;829:10;;;;;:::i;:::-;;;775:75;;;859:19;891:6;881:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;859:39;;908:150;924:1;915:5;:10;908:150;;951:1;941:11;;;;;:::i;:::-;;;1017:2;1009:5;:10;;;;:::i;:::-;996:2;:24;;;;:::i;:::-;983:39;;966:6;973;966:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1045:2;1036:11;;;;;:::i;:::-;;;908:150;;;1081:6;1067:21;;;;;392:703;;;;:::o;8632:709:3:-;8793:1;8779:16;;:2;:16;;;;8771:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8844:16;8863:12;:10;:12::i;:::-;8844:31;;8885:20;8908:21;8926:2;8908:17;:21::i;:::-;8885:44;;8939:24;8966:25;8984:6;8966:17;:25::i;:::-;8939:52;;9002:66;9023:8;9041:1;9045:2;9049:3;9054:7;9063:4;9002:20;:66::i;:::-;9100:6;9079:9;:13;9089:2;9079:13;;;;;;;;;;;:17;9093:2;9079:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;9158:2;9121:52;;9154:1;9121:52;;9136:8;9121:52;;;9162:2;9166:6;9121:52;;;;;;;:::i;:::-;;;;;;;;9184:65;9204:8;9222:1;9226:2;9230:3;9235:7;9244:4;9184:19;:65::i;:::-;9260:74;9291:8;9309:1;9313:2;9317;9321:6;9329:4;9260:30;:74::i;:::-;8761:580;;;8632:709;;;;:::o;640:96:9:-;693:7;719:10;712:17;;640:96;:::o;6235:1115:3:-;6455:7;:14;6441:3;:10;:28;6433:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6546:1;6532:16;;:2;:16;;;;6524:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6601:16;6620:12;:10;:12::i;:::-;6601:31;;6643:60;6664:8;6674:4;6680:2;6684:3;6689:7;6698:4;6643:20;:60::i;:::-;6719:9;6714:411;6738:3;:10;6734:1;:14;6714:411;;;6769:10;6782:3;6786:1;6782:6;;;;;;;;:::i;:::-;;;;;;;;6769:19;;6802:14;6819:7;6827:1;6819:10;;;;;;;;:::i;:::-;;;;;;;;6802:27;;6844:19;6866:9;:13;6876:2;6866:13;;;;;;;;;;;:19;6880:4;6866:19;;;;;;;;;;;;;;;;6844:41;;6922:6;6907:11;:21;;6899:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7053:6;7039:11;:20;7017:9;:13;7027:2;7017:13;;;;;;;;;;;:19;7031:4;7017:19;;;;;;;;;;;;;;;:42;;;;7108:6;7087:9;:13;7097:2;7087:13;;;;;;;;;;;:17;7101:2;7087:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6755:370;;;6750:3;;;;:::i;:::-;;;6714:411;;;;7170:2;7140:47;;7164:4;7140:47;;7154:8;7140:47;;;7174:3;7179:7;7140:47;;;;;;;:::i;:::-;;;;;;;;7198:59;7218:8;7228:4;7234:2;7238:3;7243:7;7252:4;7198:19;:59::i;:::-;7268:75;7304:8;7314:4;7320:2;7324:3;7329:7;7338:4;7268:35;:75::i;:::-;6423:927;6235:1115;;;;;:::o;2433:117:1:-;1486:16;:14;:16::i;:::-;2501:5:::1;2491:7;;:15;;;;;;;;;;;;;;;;;;2521:22;2530:12;:10;:12::i;:::-;2521:22;;;;;;:::i;:::-;;;;;;;;2433:117::o:0;11833:943:3:-;11996:1;11980:18;;:4;:18;;;;11972:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;12070:7;:14;12056:3;:10;:28;12048:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;12140:16;12159:12;:10;:12::i;:::-;12140:31;;12182:66;12203:8;12213:4;12227:1;12231:3;12236:7;12182:66;;;;;;;;;;;;:20;:66::i;:::-;12264:9;12259:364;12283:3;:10;12279:1;:14;12259:364;;;12314:10;12327:3;12331:1;12327:6;;;;;;;;:::i;:::-;;;;;;;;12314:19;;12347:14;12364:7;12372:1;12364:10;;;;;;;;:::i;:::-;;;;;;;;12347:27;;12389:19;12411:9;:13;12421:2;12411:13;;;;;;;;;;;:19;12425:4;12411:19;;;;;;;;;;;;;;;;12389:41;;12467:6;12452:11;:21;;12444:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12592:6;12578:11;:20;12556:9;:13;12566:2;12556:13;;;;;;;;;;;:19;12570:4;12556:19;;;;;;;;;;;;;;;:42;;;;12300:323;;;12295:3;;;;;:::i;:::-;;;;12259:364;;;;12676:1;12638:55;;12662:4;12638:55;;12652:8;12638:55;;;12680:3;12685:7;12638:55;;;;;;;:::i;:::-;;;;;;;;12704:65;12724:8;12734:4;12748:1;12752:3;12757:7;12704:65;;;;;;;;;;;;:19;:65::i;:::-;11962:814;11833:943;;;:::o;2433:187:0:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2496:124;2433:187;:::o;2186:115:1:-;1239:19;:17;:19::i;:::-;2255:4:::1;2245:7;;:14;;;;;;;;;;;;;;;;;;2274:20;2281:12;:10;:12::i;:::-;2274:20;;;;;;:::i;:::-;;;;;;;;2186:115::o:0;12912:323:3:-;13062:8;13053:17;;:5;:17;;;;13045:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13164:8;13126:18;:25;13145:5;13126:25;;;;;;;;;;;;;;;:35;13152:8;13126:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;13209:8;13187:41;;13202:5;13187:41;;;13219:8;13187:41;;;;;;:::i;:::-;;;;;;;;12912:323;;;:::o;9731:791::-;9917:1;9903:16;;:2;:16;;;;9895:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9989:7;:14;9975:3;:10;:28;9967:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10059:16;10078:12;:10;:12::i;:::-;10059:31;;10101:66;10122:8;10140:1;10144:2;10148:3;10153:7;10162:4;10101:20;:66::i;:::-;10183:9;10178:101;10202:3;:10;10198:1;:14;10178:101;;;10258:7;10266:1;10258:10;;;;;;;;:::i;:::-;;;;;;;;10233:9;:17;10243:3;10247:1;10243:6;;;;;;;;:::i;:::-;;;;;;;;10233:17;;;;;;;;;;;:21;10251:2;10233:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;10214:3;;;;;:::i;:::-;;;;10178:101;;;;10330:2;10294:53;;10326:1;10294:53;;10308:8;10294:53;;;10334:3;10339:7;10294:53;;;;;;;:::i;:::-;;;;;;;;10358:65;10378:8;10396:1;10400:2;10404:3;10409:7;10418:4;10358:19;:65::i;:::-;10434:81;10470:8;10488:1;10492:2;10496:3;10501:7;10510:4;10434:35;:81::i;:::-;9885:637;9731:791;;;;:::o;4942:947::-;5137:1;5123:16;;:2;:16;;;;5115:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5192:16;5211:12;:10;:12::i;:::-;5192:31;;5233:20;5256:21;5274:2;5256:17;:21::i;:::-;5233:44;;5287:24;5314:25;5332:6;5314:17;:25::i;:::-;5287:52;;5350:60;5371:8;5381:4;5387:2;5391:3;5396:7;5405:4;5350:20;:60::i;:::-;5421:19;5443:9;:13;5453:2;5443:13;;;;;;;;;;;:19;5457:4;5443:19;;;;;;;;;;;;;;;;5421:41;;5495:6;5480:11;:21;;5472:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5618:6;5604:11;:20;5582:9;:13;5592:2;5582:13;;;;;;;;;;;:19;5596:4;5582:19;;;;;;;;;;;;;;;:42;;;;5665:6;5644:9;:13;5654:2;5644:13;;;;;;;;;;;:17;5658:2;5644:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5718:2;5687:46;;5712:4;5687:46;;5702:8;5687:46;;;5722:2;5726:6;5687:46;;;;;;;:::i;:::-;;;;;;;;5744:59;5764:8;5774:4;5780:2;5784:3;5789:7;5798:4;5744:19;:59::i;:::-;5814:68;5845:8;5855:4;5861:2;5865;5869:6;5877:4;5814:30;:68::i;:::-;5105:784;;;;4942:947;;;;;:::o;10808:786::-;10946:1;10930:18;;:4;:18;;;;10922:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;10999:16;11018:12;:10;:12::i;:::-;10999:31;;11040:20;11063:21;11081:2;11063:17;:21::i;:::-;11040:44;;11094:24;11121:25;11139:6;11121:17;:25::i;:::-;11094:52;;11157:66;11178:8;11188:4;11202:1;11206:3;11211:7;11157:66;;;;;;;;;;;;:20;:66::i;:::-;11234:19;11256:9;:13;11266:2;11256:13;;;;;;;;;;;:19;11270:4;11256:19;;;;;;;;;;;;;;;;11234:41;;11308:6;11293:11;:21;;11285:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11425:6;11411:11;:20;11389:9;:13;11399:2;11389:13;;;;;;;;;;;:19;11403:4;11389:19;;;;;;;;;;;;;;;:42;;;;11496:1;11457:54;;11482:4;11457:54;;11472:8;11457:54;;;11500:2;11504:6;11457:54;;;;;;;:::i;:::-;;;;;;;;11522:65;11542:8;11552:4;11566:1;11570:3;11575:7;11522:65;;;;;;;;;;;;:19;:65::i;:::-;10912:682;;;;10808:786;;;:::o;17066:193::-;17132:16;17160:22;17199:1;17185:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17160:41;;17222:7;17211:5;17217:1;17211:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;17247:5;17240:12;;;17066:193;;;:::o;3220:284:13:-;1239:19:1;:17;:19::i;:::-;3431:66:13::1;3458:8;3468:4;3474:2;3478:3;3483:7;3492:4;3431:26;:66::i;:::-;3220:284:::0;;;;;;:::o;15318:213:3:-;;;;;;;:::o;15537:725::-;15744:15;:2;:13;;;:15::i;:::-;15740:516;;;15796:2;15779:38;;;15818:8;15828:4;15834:2;15838:6;15846:4;15779:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15775:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;16122:6;16115:14;;;;;;;;;;;:::i;:::-;;;;;;;;15775:471;;;16169:62;;;;;;;;;;:::i;:::-;;;;;;;;15775:471;15912:43;;;15900:55;;;:8;:55;;;;15896:152;;15979:50;;;;;;;;;;:::i;:::-;;;;;;;;15896:152;15852:210;15740:516;15537:725;;;;;;:::o;16268:792::-;16500:15;:2;:13;;;:15::i;:::-;16496:558;;;16552:2;16535:43;;;16579:8;16589:4;16595:3;16600:7;16609:4;16535:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16531:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;16920:6;16913:14;;;;;;;;;;;:::i;:::-;;;;;;;;16531:513;;;16967:62;;;;;;;;;;:::i;:::-;;;;;;;;16531:513;16705:48;;;16693:60;;;:8;:60;;;;16689:157;;16777:50;;;;;;;;;;:::i;:::-;;;;;;;;16689:157;16615:245;16496:558;16268:792;;;;;;:::o;1945:106:1:-;2011:8;:6;:8::i;:::-;2003:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;1945:106::o;1767:::-;1837:8;:6;:8::i;:::-;1836:9;1828:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1767:106::o;14171:214:3:-;;;;;;;:::o;1175:320:8:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:14:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:329::-;6001:6;6050:2;6038:9;6029:7;6025:23;6021:32;6018:119;;;6056:79;;:::i;:::-;6018:119;6176:1;6201:53;6246:7;6237:6;6226:9;6222:22;6201:53;:::i;:::-;6191:63;;6147:117;5942:329;;;;:::o;6277:99::-;6329:6;6363:5;6357:12;6347:22;;6277:99;;;:::o;6382:169::-;6466:11;6500:6;6495:3;6488:19;6540:4;6535:3;6531:14;6516:29;;6382:169;;;;:::o;6557:307::-;6625:1;6635:113;6649:6;6646:1;6643:13;6635:113;;;6734:1;6729:3;6725:11;6719:18;6715:1;6710:3;6706:11;6699:39;6671:2;6668:1;6664:10;6659:15;;6635:113;;;6766:6;6763:1;6760:13;6757:101;;;6846:1;6837:6;6832:3;6828:16;6821:27;6757:101;6606:258;6557:307;;;:::o;6870:364::-;6958:3;6986:39;7019:5;6986:39;:::i;:::-;7041:71;7105:6;7100:3;7041:71;:::i;:::-;7034:78;;7121:52;7166:6;7161:3;7154:4;7147:5;7143:16;7121:52;:::i;:::-;7198:29;7220:6;7198:29;:::i;:::-;7193:3;7189:39;7182:46;;6962:272;6870:364;;;;:::o;7240:313::-;7353:4;7391:2;7380:9;7376:18;7368:26;;7440:9;7434:4;7430:20;7426:1;7415:9;7411:17;7404:47;7468:78;7541:4;7532:6;7468:78;:::i;:::-;7460:86;;7240:313;;;;:::o;7559:619::-;7636:6;7644;7652;7701:2;7689:9;7680:7;7676:23;7672:32;7669:119;;;7707:79;;:::i;:::-;7669:119;7827:1;7852:53;7897:7;7888:6;7877:9;7873:22;7852:53;:::i;:::-;7842:63;;7798:117;7954:2;7980:53;8025:7;8016:6;8005:9;8001:22;7980:53;:::i;:::-;7970:63;;7925:118;8082:2;8108:53;8153:7;8144:6;8133:9;8129:22;8108:53;:::i;:::-;8098:63;;8053:118;7559:619;;;;;:::o;8184:311::-;8261:4;8351:18;8343:6;8340:30;8337:56;;;8373:18;;:::i;:::-;8337:56;8423:4;8415:6;8411:17;8403:25;;8483:4;8477;8473:15;8465:23;;8184:311;;;:::o;8501:117::-;8610:1;8607;8600:12;8641:710;8737:5;8762:81;8778:64;8835:6;8778:64;:::i;:::-;8762:81;:::i;:::-;8753:90;;8863:5;8892:6;8885:5;8878:21;8926:4;8919:5;8915:16;8908:23;;8979:4;8971:6;8967:17;8959:6;8955:30;9008:3;9000:6;8997:15;8994:122;;;9027:79;;:::i;:::-;8994:122;9142:6;9125:220;9159:6;9154:3;9151:15;9125:220;;;9234:3;9263:37;9296:3;9284:10;9263:37;:::i;:::-;9258:3;9251:50;9330:4;9325:3;9321:14;9314:21;;9201:144;9185:4;9180:3;9176:14;9169:21;;9125:220;;;9129:21;8743:608;;8641:710;;;;;:::o;9374:370::-;9445:5;9494:3;9487:4;9479:6;9475:17;9471:27;9461:122;;9502:79;;:::i;:::-;9461:122;9619:6;9606:20;9644:94;9734:3;9726:6;9719:4;9711:6;9707:17;9644:94;:::i;:::-;9635:103;;9451:293;9374:370;;;;:::o;9750:307::-;9811:4;9901:18;9893:6;9890:30;9887:56;;;9923:18;;:::i;:::-;9887:56;9961:29;9983:6;9961:29;:::i;:::-;9953:37;;10045:4;10039;10035:15;10027:23;;9750:307;;;:::o;10063:410::-;10140:5;10165:65;10181:48;10222:6;10181:48;:::i;:::-;10165:65;:::i;:::-;10156:74;;10253:6;10246:5;10239:21;10291:4;10284:5;10280:16;10329:3;10320:6;10315:3;10311:16;10308:25;10305:112;;;10336:79;;:::i;:::-;10305:112;10426:41;10460:6;10455:3;10450;10426:41;:::i;:::-;10146:327;10063:410;;;;;:::o;10492:338::-;10547:5;10596:3;10589:4;10581:6;10577:17;10573:27;10563:122;;10604:79;;:::i;:::-;10563:122;10721:6;10708:20;10746:78;10820:3;10812:6;10805:4;10797:6;10793:17;10746:78;:::i;:::-;10737:87;;10553:277;10492:338;;;;:::o;10836:1509::-;10990:6;10998;11006;11014;11022;11071:3;11059:9;11050:7;11046:23;11042:33;11039:120;;;11078:79;;:::i;:::-;11039:120;11198:1;11223:53;11268:7;11259:6;11248:9;11244:22;11223:53;:::i;:::-;11213:63;;11169:117;11325:2;11351:53;11396:7;11387:6;11376:9;11372:22;11351:53;:::i;:::-;11341:63;;11296:118;11481:2;11470:9;11466:18;11453:32;11512:18;11504:6;11501:30;11498:117;;;11534:79;;:::i;:::-;11498:117;11639:78;11709:7;11700:6;11689:9;11685:22;11639:78;:::i;:::-;11629:88;;11424:303;11794:2;11783:9;11779:18;11766:32;11825:18;11817:6;11814:30;11811:117;;;11847:79;;:::i;:::-;11811:117;11952:78;12022:7;12013:6;12002:9;11998:22;11952:78;:::i;:::-;11942:88;;11737:303;12107:3;12096:9;12092:19;12079:33;12139:18;12131:6;12128:30;12125:117;;;12161:79;;:::i;:::-;12125:117;12266:62;12320:7;12311:6;12300:9;12296:22;12266:62;:::i;:::-;12256:72;;12050:288;10836:1509;;;;;;;;:::o;12351:329::-;12410:6;12459:2;12447:9;12438:7;12434:23;12430:32;12427:119;;;12465:79;;:::i;:::-;12427:119;12585:1;12610:53;12655:7;12646:6;12635:9;12631:22;12610:53;:::i;:::-;12600:63;;12556:117;12351:329;;;;:::o;12686:311::-;12763:4;12853:18;12845:6;12842:30;12839:56;;;12875:18;;:::i;:::-;12839:56;12925:4;12917:6;12913:17;12905:25;;12985:4;12979;12975:15;12967:23;;12686:311;;;:::o;13020:710::-;13116:5;13141:81;13157:64;13214:6;13157:64;:::i;:::-;13141:81;:::i;:::-;13132:90;;13242:5;13271:6;13264:5;13257:21;13305:4;13298:5;13294:16;13287:23;;13358:4;13350:6;13346:17;13338:6;13334:30;13387:3;13379:6;13376:15;13373:122;;;13406:79;;:::i;:::-;13373:122;13521:6;13504:220;13538:6;13533:3;13530:15;13504:220;;;13613:3;13642:37;13675:3;13663:10;13642:37;:::i;:::-;13637:3;13630:50;13709:4;13704:3;13700:14;13693:21;;13580:144;13564:4;13559:3;13555:14;13548:21;;13504:220;;;13508:21;13122:608;;13020:710;;;;;:::o;13753:370::-;13824:5;13873:3;13866:4;13858:6;13854:17;13850:27;13840:122;;13881:79;;:::i;:::-;13840:122;13998:6;13985:20;14023:94;14113:3;14105:6;14098:4;14090:6;14086:17;14023:94;:::i;:::-;14014:103;;13830:293;13753:370;;;;:::o;14129:894::-;14247:6;14255;14304:2;14292:9;14283:7;14279:23;14275:32;14272:119;;;14310:79;;:::i;:::-;14272:119;14458:1;14447:9;14443:17;14430:31;14488:18;14480:6;14477:30;14474:117;;;14510:79;;:::i;:::-;14474:117;14615:78;14685:7;14676:6;14665:9;14661:22;14615:78;:::i;:::-;14605:88;;14401:302;14770:2;14759:9;14755:18;14742:32;14801:18;14793:6;14790:30;14787:117;;;14823:79;;:::i;:::-;14787:117;14928:78;14998:7;14989:6;14978:9;14974:22;14928:78;:::i;:::-;14918:88;;14713:303;14129:894;;;;;:::o;15029:114::-;15096:6;15130:5;15124:12;15114:22;;15029:114;;;:::o;15149:184::-;15248:11;15282:6;15277:3;15270:19;15322:4;15317:3;15313:14;15298:29;;15149:184;;;;:::o;15339:132::-;15406:4;15429:3;15421:11;;15459:4;15454:3;15450:14;15442:22;;15339:132;;;:::o;15477:108::-;15554:24;15572:5;15554:24;:::i;:::-;15549:3;15542:37;15477:108;;:::o;15591:179::-;15660:10;15681:46;15723:3;15715:6;15681:46;:::i;:::-;15759:4;15754:3;15750:14;15736:28;;15591:179;;;;:::o;15776:113::-;15846:4;15878;15873:3;15869:14;15861:22;;15776:113;;;:::o;15925:732::-;16044:3;16073:54;16121:5;16073:54;:::i;:::-;16143:86;16222:6;16217:3;16143:86;:::i;:::-;16136:93;;16253:56;16303:5;16253:56;:::i;:::-;16332:7;16363:1;16348:284;16373:6;16370:1;16367:13;16348:284;;;16449:6;16443:13;16476:63;16535:3;16520:13;16476:63;:::i;:::-;16469:70;;16562:60;16615:6;16562:60;:::i;:::-;16552:70;;16408:224;16395:1;16392;16388:9;16383:14;;16348:284;;;16352:14;16648:3;16641:10;;16049:608;;;15925:732;;;;:::o;16663:373::-;16806:4;16844:2;16833:9;16829:18;16821:26;;16893:9;16887:4;16883:20;16879:1;16868:9;16864:17;16857:47;16921:108;17024:4;17015:6;16921:108;:::i;:::-;16913:116;;16663:373;;;;:::o;17042:654::-;17120:6;17128;17177:2;17165:9;17156:7;17152:23;17148:32;17145:119;;;17183:79;;:::i;:::-;17145:119;17303:1;17328:53;17373:7;17364:6;17353:9;17349:22;17328:53;:::i;:::-;17318:63;;17274:117;17458:2;17447:9;17443:18;17430:32;17489:18;17481:6;17478:30;17475:117;;;17511:79;;:::i;:::-;17475:117;17616:63;17671:7;17662:6;17651:9;17647:22;17616:63;:::i;:::-;17606:73;;17401:288;17042:654;;;;;:::o;17702:1039::-;17829:6;17837;17845;17894:2;17882:9;17873:7;17869:23;17865:32;17862:119;;;17900:79;;:::i;:::-;17862:119;18020:1;18045:53;18090:7;18081:6;18070:9;18066:22;18045:53;:::i;:::-;18035:63;;17991:117;18175:2;18164:9;18160:18;18147:32;18206:18;18198:6;18195:30;18192:117;;;18228:79;;:::i;:::-;18192:117;18333:78;18403:7;18394:6;18383:9;18379:22;18333:78;:::i;:::-;18323:88;;18118:303;18488:2;18477:9;18473:18;18460:32;18519:18;18511:6;18508:30;18505:117;;;18541:79;;:::i;:::-;18505:117;18646:78;18716:7;18707:6;18696:9;18692:22;18646:78;:::i;:::-;18636:88;;18431:303;17702:1039;;;;;:::o;18747:118::-;18834:24;18852:5;18834:24;:::i;:::-;18829:3;18822:37;18747:118;;:::o;18871:222::-;18964:4;19002:2;18991:9;18987:18;18979:26;;19015:71;19083:1;19072:9;19068:17;19059:6;19015:71;:::i;:::-;18871:222;;;;:::o;19099:116::-;19169:21;19184:5;19169:21;:::i;:::-;19162:5;19159:32;19149:60;;19205:1;19202;19195:12;19149:60;19099:116;:::o;19221:133::-;19264:5;19302:6;19289:20;19280:29;;19318:30;19342:5;19318:30;:::i;:::-;19221:133;;;;:::o;19360:468::-;19425:6;19433;19482:2;19470:9;19461:7;19457:23;19453:32;19450:119;;;19488:79;;:::i;:::-;19450:119;19608:1;19633:53;19678:7;19669:6;19658:9;19654:22;19633:53;:::i;:::-;19623:63;;19579:117;19735:2;19761:50;19803:7;19794:6;19783:9;19779:22;19761:50;:::i;:::-;19751:60;;19706:115;19360:468;;;;;:::o;19834:474::-;19902:6;19910;19959:2;19947:9;19938:7;19934:23;19930:32;19927:119;;;19965:79;;:::i;:::-;19927:119;20085:1;20110:53;20155:7;20146:6;20135:9;20131:22;20110:53;:::i;:::-;20100:63;;20056:117;20212:2;20238:53;20283:7;20274:6;20263:9;20259:22;20238:53;:::i;:::-;20228:63;;20183:118;19834:474;;;;;:::o;20314:1089::-;20418:6;20426;20434;20442;20450;20499:3;20487:9;20478:7;20474:23;20470:33;20467:120;;;20506:79;;:::i;:::-;20467:120;20626:1;20651:53;20696:7;20687:6;20676:9;20672:22;20651:53;:::i;:::-;20641:63;;20597:117;20753:2;20779:53;20824:7;20815:6;20804:9;20800:22;20779:53;:::i;:::-;20769:63;;20724:118;20881:2;20907:53;20952:7;20943:6;20932:9;20928:22;20907:53;:::i;:::-;20897:63;;20852:118;21009:2;21035:53;21080:7;21071:6;21060:9;21056:22;21035:53;:::i;:::-;21025:63;;20980:118;21165:3;21154:9;21150:19;21137:33;21197:18;21189:6;21186:30;21183:117;;;21219:79;;:::i;:::-;21183:117;21324:62;21378:7;21369:6;21358:9;21354:22;21324:62;:::i;:::-;21314:72;;21108:288;20314:1089;;;;;;;;:::o;21409:229::-;21549:34;21545:1;21537:6;21533:14;21526:58;21618:12;21613:2;21605:6;21601:15;21594:37;21409:229;:::o;21644:366::-;21786:3;21807:67;21871:2;21866:3;21807:67;:::i;:::-;21800:74;;21883:93;21972:3;21883:93;:::i;:::-;22001:2;21996:3;21992:12;21985:19;;21644:366;;;:::o;22016:419::-;22182:4;22220:2;22209:9;22205:18;22197:26;;22269:9;22263:4;22259:20;22255:1;22244:9;22240:17;22233:47;22297:131;22423:4;22297:131;:::i;:::-;22289:139;;22016:419;;;:::o;22441:166::-;22581:18;22577:1;22569:6;22565:14;22558:42;22441:166;:::o;22613:366::-;22755:3;22776:67;22840:2;22835:3;22776:67;:::i;:::-;22769:74;;22852:93;22941:3;22852:93;:::i;:::-;22970:2;22965:3;22961:12;22954:19;;22613:366;;;:::o;22985:419::-;23151:4;23189:2;23178:9;23174:18;23166:26;;23238:9;23232:4;23228:20;23224:1;23213:9;23209:17;23202:47;23266:131;23392:4;23266:131;:::i;:::-;23258:139;;22985:419;;;:::o;23410:180::-;23458:77;23455:1;23448:88;23555:4;23552:1;23545:15;23579:4;23576:1;23569:15;23596:320;23640:6;23677:1;23671:4;23667:12;23657:22;;23724:1;23718:4;23714:12;23745:18;23735:81;;23801:4;23793:6;23789:17;23779:27;;23735:81;23863:2;23855:6;23852:14;23832:18;23829:38;23826:84;;;23882:18;;:::i;:::-;23826:84;23647:269;23596:320;;;:::o;23922:148::-;24024:11;24061:3;24046:18;;23922:148;;;;:::o;24076:141::-;24125:4;24148:3;24140:11;;24171:3;24168:1;24161:14;24205:4;24202:1;24192:18;24184:26;;24076:141;;;:::o;24247:845::-;24350:3;24387:5;24381:12;24416:36;24442:9;24416:36;:::i;:::-;24468:89;24550:6;24545:3;24468:89;:::i;:::-;24461:96;;24588:1;24577:9;24573:17;24604:1;24599:137;;;;24750:1;24745:341;;;;24566:520;;24599:137;24683:4;24679:9;24668;24664:25;24659:3;24652:38;24719:6;24714:3;24710:16;24703:23;;24599:137;;24745:341;24812:38;24844:5;24812:38;:::i;:::-;24872:1;24886:154;24900:6;24897:1;24894:13;24886:154;;;24974:7;24968:14;24964:1;24959:3;24955:11;24948:35;25024:1;25015:7;25011:15;25000:26;;24922:4;24919:1;24915:12;24910:17;;24886:154;;;25069:6;25064:3;25060:16;25053:23;;24752:334;;24566:520;;24354:738;;24247:845;;;;:::o;25098:377::-;25204:3;25232:39;25265:5;25232:39;:::i;:::-;25287:89;25369:6;25364:3;25287:89;:::i;:::-;25280:96;;25385:52;25430:6;25425:3;25418:4;25411:5;25407:16;25385:52;:::i;:::-;25462:6;25457:3;25453:16;25446:23;;25208:267;25098:377;;;;:::o;25481:155::-;25621:7;25617:1;25609:6;25605:14;25598:31;25481:155;:::o;25642:400::-;25802:3;25823:84;25905:1;25900:3;25823:84;:::i;:::-;25816:91;;25916:93;26005:3;25916:93;:::i;:::-;26034:1;26029:3;26025:11;26018:18;;25642:400;;;:::o;26048:695::-;26326:3;26348:92;26436:3;26427:6;26348:92;:::i;:::-;26341:99;;26457:95;26548:3;26539:6;26457:95;:::i;:::-;26450:102;;26569:148;26713:3;26569:148;:::i;:::-;26562:155;;26734:3;26727:10;;26048:695;;;;;:::o;26749:228::-;26889:34;26885:1;26877:6;26873:14;26866:58;26958:11;26953:2;26945:6;26941:15;26934:36;26749:228;:::o;26983:366::-;27125:3;27146:67;27210:2;27205:3;27146:67;:::i;:::-;27139:74;;27222:93;27311:3;27222:93;:::i;:::-;27340:2;27335:3;27331:12;27324:19;;26983:366;;;:::o;27355:419::-;27521:4;27559:2;27548:9;27544:18;27536:26;;27608:9;27602:4;27598:20;27594:1;27583:9;27579:17;27572:47;27636:131;27762:4;27636:131;:::i;:::-;27628:139;;27355:419;;;:::o;27780:234::-;27920:34;27916:1;27908:6;27904:14;27897:58;27989:17;27984:2;27976:6;27972:15;27965:42;27780:234;:::o;28020:366::-;28162:3;28183:67;28247:2;28242:3;28183:67;:::i;:::-;28176:74;;28259:93;28348:3;28259:93;:::i;:::-;28377:2;28372:3;28368:12;28361:19;;28020:366;;;:::o;28392:419::-;28558:4;28596:2;28585:9;28581:18;28573:26;;28645:9;28639:4;28635:20;28631:1;28620:9;28616:17;28609:47;28673:131;28799:4;28673:131;:::i;:::-;28665:139;;28392:419;;;:::o;28817:228::-;28957:34;28953:1;28945:6;28941:14;28934:58;29026:11;29021:2;29013:6;29009:15;29002:36;28817:228;:::o;29051:366::-;29193:3;29214:67;29278:2;29273:3;29214:67;:::i;:::-;29207:74;;29290:93;29379:3;29290:93;:::i;:::-;29408:2;29403:3;29399:12;29392:19;;29051:366;;;:::o;29423:419::-;29589:4;29627:2;29616:9;29612:18;29604:26;;29676:9;29670:4;29666:20;29662:1;29651:9;29647:17;29640:47;29704:131;29830:4;29704:131;:::i;:::-;29696:139;;29423:419;;;:::o;29848:180::-;29896:77;29893:1;29886:88;29993:4;29990:1;29983:15;30017:4;30014:1;30007:15;30034:180;30082:77;30079:1;30072:88;30179:4;30176:1;30169:15;30203:4;30200:1;30193:15;30220:233;30259:3;30282:24;30300:5;30282:24;:::i;:::-;30273:33;;30328:66;30321:5;30318:77;30315:103;;;30398:18;;:::i;:::-;30315:103;30445:1;30438:5;30434:13;30427:20;;30220:233;;;:::o;30459:305::-;30499:3;30518:20;30536:1;30518:20;:::i;:::-;30513:25;;30552:20;30570:1;30552:20;:::i;:::-;30547:25;;30706:1;30638:66;30634:74;30631:1;30628:81;30625:107;;;30712:18;;:::i;:::-;30625:107;30756:1;30753;30749:9;30742:16;;30459:305;;;;:::o;30770:225::-;30910:34;30906:1;30898:6;30894:14;30887:58;30979:8;30974:2;30966:6;30962:15;30955:33;30770:225;:::o;31001:366::-;31143:3;31164:67;31228:2;31223:3;31164:67;:::i;:::-;31157:74;;31240:93;31329:3;31240:93;:::i;:::-;31358:2;31353:3;31349:12;31342:19;;31001:366;;;:::o;31373:419::-;31539:4;31577:2;31566:9;31562:18;31554:26;;31626:9;31620:4;31616:20;31612:1;31601:9;31597:17;31590:47;31654:131;31780:4;31654:131;:::i;:::-;31646:139;;31373:419;;;:::o;31798:182::-;31938:34;31934:1;31926:6;31922:14;31915:58;31798:182;:::o;31986:366::-;32128:3;32149:67;32213:2;32208:3;32149:67;:::i;:::-;32142:74;;32225:93;32314:3;32225:93;:::i;:::-;32343:2;32338:3;32334:12;32327:19;;31986:366;;;:::o;32358:419::-;32524:4;32562:2;32551:9;32547:18;32539:26;;32611:9;32605:4;32601:20;32597:1;32586:9;32582:17;32575:47;32639:131;32765:4;32639:131;:::i;:::-;32631:139;;32358:419;;;:::o;32783:180::-;32831:77;32828:1;32821:88;32928:4;32925:1;32918:15;32952:4;32949:1;32942:15;32969:185;33009:1;33026:20;33044:1;33026:20;:::i;:::-;33021:25;;33060:20;33078:1;33060:20;:::i;:::-;33055:25;;33099:1;33089:35;;33104:18;;:::i;:::-;33089:35;33146:1;33143;33139:9;33134:14;;32969:185;;;;:::o;33160:191::-;33200:4;33220:20;33238:1;33220:20;:::i;:::-;33215:25;;33254:20;33272:1;33254:20;:::i;:::-;33249:25;;33293:1;33290;33287:8;33284:34;;;33298:18;;:::i;:::-;33284:34;33343:1;33340;33336:9;33328:17;;33160:191;;;;:::o;33357:176::-;33389:1;33406:20;33424:1;33406:20;:::i;:::-;33401:25;;33440:20;33458:1;33440:20;:::i;:::-;33435:25;;33479:1;33469:35;;33484:18;;:::i;:::-;33469:35;33525:1;33522;33518:9;33513:14;;33357:176;;;;:::o;33539:220::-;33679:34;33675:1;33667:6;33663:14;33656:58;33748:3;33743:2;33735:6;33731:15;33724:28;33539:220;:::o;33765:366::-;33907:3;33928:67;33992:2;33987:3;33928:67;:::i;:::-;33921:74;;34004:93;34093:3;34004:93;:::i;:::-;34122:2;34117:3;34113:12;34106:19;;33765:366;;;:::o;34137:419::-;34303:4;34341:2;34330:9;34326:18;34318:26;;34390:9;34384:4;34380:20;34376:1;34365:9;34361:17;34354:47;34418:131;34544:4;34418:131;:::i;:::-;34410:139;;34137:419;;;:::o;34562:332::-;34683:4;34721:2;34710:9;34706:18;34698:26;;34734:71;34802:1;34791:9;34787:17;34778:6;34734:71;:::i;:::-;34815:72;34883:2;34872:9;34868:18;34859:6;34815:72;:::i;:::-;34562:332;;;;;:::o;34900:227::-;35040:34;35036:1;35028:6;35024:14;35017:58;35109:10;35104:2;35096:6;35092:15;35085:35;34900:227;:::o;35133:366::-;35275:3;35296:67;35360:2;35355:3;35296:67;:::i;:::-;35289:74;;35372:93;35461:3;35372:93;:::i;:::-;35490:2;35485:3;35481:12;35474:19;;35133:366;;;:::o;35505:419::-;35671:4;35709:2;35698:9;35694:18;35686:26;;35758:9;35752:4;35748:20;35744:1;35733:9;35729:17;35722:47;35786:131;35912:4;35786:131;:::i;:::-;35778:139;;35505:419;;;:::o;35930:224::-;36070:34;36066:1;36058:6;36054:14;36047:58;36139:7;36134:2;36126:6;36122:15;36115:32;35930:224;:::o;36160:366::-;36302:3;36323:67;36387:2;36382:3;36323:67;:::i;:::-;36316:74;;36399:93;36488:3;36399:93;:::i;:::-;36517:2;36512:3;36508:12;36501:19;;36160:366;;;:::o;36532:419::-;36698:4;36736:2;36725:9;36721:18;36713:26;;36785:9;36779:4;36775:20;36771:1;36760:9;36756:17;36749:47;36813:131;36939:4;36813:131;:::i;:::-;36805:139;;36532:419;;;:::o;36957:229::-;37097:34;37093:1;37085:6;37081:14;37074:58;37166:12;37161:2;37153:6;37149:15;37142:37;36957:229;:::o;37192:366::-;37334:3;37355:67;37419:2;37414:3;37355:67;:::i;:::-;37348:74;;37431:93;37520:3;37431:93;:::i;:::-;37549:2;37544:3;37540:12;37533:19;;37192:366;;;:::o;37564:419::-;37730:4;37768:2;37757:9;37753:18;37745:26;;37817:9;37811:4;37807:20;37803:1;37792:9;37788:17;37781:47;37845:131;37971:4;37845:131;:::i;:::-;37837:139;;37564:419;;;:::o;37989:634::-;38210:4;38248:2;38237:9;38233:18;38225:26;;38297:9;38291:4;38287:20;38283:1;38272:9;38268:17;38261:47;38325:108;38428:4;38419:6;38325:108;:::i;:::-;38317:116;;38480:9;38474:4;38470:20;38465:2;38454:9;38450:18;38443:48;38508:108;38611:4;38602:6;38508:108;:::i;:::-;38500:116;;37989:634;;;;;:::o;38629:222::-;38769:34;38765:1;38757:6;38753:14;38746:58;38838:5;38833:2;38825:6;38821:15;38814:30;38629:222;:::o;38857:366::-;38999:3;39020:67;39084:2;39079:3;39020:67;:::i;:::-;39013:74;;39096:93;39185:3;39096:93;:::i;:::-;39214:2;39209:3;39205:12;39198:19;;38857:366;;;:::o;39229:419::-;39395:4;39433:2;39422:9;39418:18;39410:26;;39482:9;39476:4;39472:20;39468:1;39457:9;39453:17;39446:47;39510:131;39636:4;39510:131;:::i;:::-;39502:139;;39229:419;;;:::o;39654:223::-;39794:34;39790:1;39782:6;39778:14;39771:58;39863:6;39858:2;39850:6;39846:15;39839:31;39654:223;:::o;39883:366::-;40025:3;40046:67;40110:2;40105:3;40046:67;:::i;:::-;40039:74;;40122:93;40211:3;40122:93;:::i;:::-;40240:2;40235:3;40231:12;40224:19;;39883:366;;;:::o;40255:419::-;40421:4;40459:2;40448:9;40444:18;40436:26;;40508:9;40502:4;40498:20;40494:1;40483:9;40479:17;40472:47;40536:131;40662:4;40536:131;:::i;:::-;40528:139;;40255:419;;;:::o;40680:228::-;40820:34;40816:1;40808:6;40804:14;40797:58;40889:11;40884:2;40876:6;40872:15;40865:36;40680:228;:::o;40914:366::-;41056:3;41077:67;41141:2;41136:3;41077:67;:::i;:::-;41070:74;;41153:93;41242:3;41153:93;:::i;:::-;41271:2;41266:3;41262:12;41255:19;;40914:366;;;:::o;41286:419::-;41452:4;41490:2;41479:9;41475:18;41467:26;;41539:9;41533:4;41529:20;41525:1;41514:9;41510:17;41503:47;41567:131;41693:4;41567:131;:::i;:::-;41559:139;;41286:419;;;:::o;41711:98::-;41762:6;41796:5;41790:12;41780:22;;41711:98;;;:::o;41815:168::-;41898:11;41932:6;41927:3;41920:19;41972:4;41967:3;41963:14;41948:29;;41815:168;;;;:::o;41989:360::-;42075:3;42103:38;42135:5;42103:38;:::i;:::-;42157:70;42220:6;42215:3;42157:70;:::i;:::-;42150:77;;42236:52;42281:6;42276:3;42269:4;42262:5;42258:16;42236:52;:::i;:::-;42313:29;42335:6;42313:29;:::i;:::-;42308:3;42304:39;42297:46;;42079:270;41989:360;;;;:::o;42355:751::-;42578:4;42616:3;42605:9;42601:19;42593:27;;42630:71;42698:1;42687:9;42683:17;42674:6;42630:71;:::i;:::-;42711:72;42779:2;42768:9;42764:18;42755:6;42711:72;:::i;:::-;42793;42861:2;42850:9;42846:18;42837:6;42793:72;:::i;:::-;42875;42943:2;42932:9;42928:18;42919:6;42875:72;:::i;:::-;42995:9;42989:4;42985:20;42979:3;42968:9;42964:19;42957:49;43023:76;43094:4;43085:6;43023:76;:::i;:::-;43015:84;;42355:751;;;;;;;;:::o;43112:141::-;43168:5;43199:6;43193:13;43184:22;;43215:32;43241:5;43215:32;:::i;:::-;43112:141;;;;:::o;43259:349::-;43328:6;43377:2;43365:9;43356:7;43352:23;43348:32;43345:119;;;43383:79;;:::i;:::-;43345:119;43503:1;43528:63;43583:7;43574:6;43563:9;43559:22;43528:63;:::i;:::-;43518:73;;43474:127;43259:349;;;;:::o;43614:106::-;43658:8;43707:5;43702:3;43698:15;43677:36;;43614:106;;;:::o;43726:183::-;43761:3;43799:1;43781:16;43778:23;43775:128;;;43837:1;43834;43831;43816:23;43859:34;43890:1;43884:8;43859:34;:::i;:::-;43852:41;;43775:128;43726:183;:::o;43915:711::-;43954:3;43992:4;43974:16;43971:26;43968:39;;;44000:5;;43968:39;44029:20;;:::i;:::-;44104:1;44086:16;44082:24;44079:1;44073:4;44058:49;44137:4;44131:11;44236:16;44229:4;44221:6;44217:17;44214:39;44181:18;44173:6;44170:30;44154:113;44151:146;;;44282:5;;;;44151:146;44328:6;44322:4;44318:17;44364:3;44358:10;44391:18;44383:6;44380:30;44377:43;;;44413:5;;;;;;44377:43;44461:6;44454:4;44449:3;44445:14;44441:27;44520:1;44502:16;44498:24;44492:4;44488:35;44483:3;44480:44;44477:57;;;44527:5;;;;;;;44477:57;44544;44592:6;44586:4;44582:17;44574:6;44570:30;44564:4;44544:57;:::i;:::-;44617:3;44610:10;;43958:668;;;;;43915:711;;:::o;44632:239::-;44772:34;44768:1;44760:6;44756:14;44749:58;44841:22;44836:2;44828:6;44824:15;44817:47;44632:239;:::o;44877:366::-;45019:3;45040:67;45104:2;45099:3;45040:67;:::i;:::-;45033:74;;45116:93;45205:3;45116:93;:::i;:::-;45234:2;45229:3;45225:12;45218:19;;44877:366;;;:::o;45249:419::-;45415:4;45453:2;45442:9;45438:18;45430:26;;45502:9;45496:4;45492:20;45488:1;45477:9;45473:17;45466:47;45530:131;45656:4;45530:131;:::i;:::-;45522:139;;45249:419;;;:::o;45674:227::-;45814:34;45810:1;45802:6;45798:14;45791:58;45883:10;45878:2;45870:6;45866:15;45859:35;45674:227;:::o;45907:366::-;46049:3;46070:67;46134:2;46129:3;46070:67;:::i;:::-;46063:74;;46146:93;46235:3;46146:93;:::i;:::-;46264:2;46259:3;46255:12;46248:19;;45907:366;;;:::o;46279:419::-;46445:4;46483:2;46472:9;46468:18;46460:26;;46532:9;46526:4;46522:20;46518:1;46507:9;46503:17;46496:47;46560:131;46686:4;46560:131;:::i;:::-;46552:139;;46279:419;;;:::o;46704:1053::-;47027:4;47065:3;47054:9;47050:19;47042:27;;47079:71;47147:1;47136:9;47132:17;47123:6;47079:71;:::i;:::-;47160:72;47228:2;47217:9;47213:18;47204:6;47160:72;:::i;:::-;47279:9;47273:4;47269:20;47264:2;47253:9;47249:18;47242:48;47307:108;47410:4;47401:6;47307:108;:::i;:::-;47299:116;;47462:9;47456:4;47452:20;47447:2;47436:9;47432:18;47425:48;47490:108;47593:4;47584:6;47490:108;:::i;:::-;47482:116;;47646:9;47640:4;47636:20;47630:3;47619:9;47615:19;47608:49;47674:76;47745:4;47736:6;47674:76;:::i;:::-;47666:84;;46704:1053;;;;;;;;:::o;47763:170::-;47903:22;47899:1;47891:6;47887:14;47880:46;47763:170;:::o;47939:366::-;48081:3;48102:67;48166:2;48161:3;48102:67;:::i;:::-;48095:74;;48178:93;48267:3;48178:93;:::i;:::-;48296:2;48291:3;48287:12;48280:19;;47939:366;;;:::o;48311:419::-;48477:4;48515:2;48504:9;48500:18;48492:26;;48564:9;48558:4;48554:20;48550:1;48539:9;48535:17;48528:47;48592:131;48718:4;48592:131;:::i;:::-;48584:139;;48311:419;;;:::o;48736:166::-;48876:18;48872:1;48864:6;48860:14;48853:42;48736:166;:::o;48908:366::-;49050:3;49071:67;49135:2;49130:3;49071:67;:::i;:::-;49064:74;;49147:93;49236:3;49147:93;:::i;:::-;49265:2;49260:3;49256:12;49249:19;;48908:366;;;:::o;49280:419::-;49446:4;49484:2;49473:9;49469:18;49461:26;;49533:9;49527:4;49523:20;49519:1;49508:9;49504:17;49497:47;49561:131;49687:4;49561:131;:::i;:::-;49553:139;;49280:419;;;:::o

Metadata Hash

ipfs://8aac426823aeb49cdaf0220bbb2512bcc0424bd594b954349bcd1bb2afe5d693
Loading