ETH Price: $3,025.03 (+2.22%)
Gas: 1 Gwei

Token

NFTify1155 (N1155)
 

Overview

Max Total Supply

2,361 N1155

Holders

626

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
plutoniume.eth
0x43c08a13bE7032b52977f7761A05966f3082C1B8
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
NFTify1155

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-28
*/

// SPDX-License-Identifier: MIT
// File: contracts/ERC1155.sol

// File: openzeppelin-solidity/contracts/utils/introspection/IERC165.sol

pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

// File: openzeppelin-solidity/contracts/token/ERC1155/IERC1155.sol

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

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

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

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

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

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

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

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

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

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

// File: openzeppelin-solidity/contracts/token/ERC1155/IERC1155Receiver.sol

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

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

// File: openzeppelin-solidity/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol

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

// File: openzeppelin-solidity/contracts/utils/Address.sol

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

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: openzeppelin-solidity/contracts/utils/introspection/ERC165.sol

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

// File: openzeppelin-solidity/contracts/token/ERC1155/ERC1155.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: balance query for the zero address"
        );
        return _balances[id][account];
    }

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

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

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

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(
            _msgSender() != operator,
            "ERC1155: setting approval status for self"
        );

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

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(
            operator,
            from,
            to,
            _asSingletonArray(id),
            _asSingletonArray(amount),
            data
        );

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

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

        _doSafeTransferAcceptanceCheck(operator, 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(
            ids.length == amounts.length,
            "ERC1155: ids and amounts length mismatch"
        );
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

        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"
            );
            _balances[id][from] = fromBalance - amount;
            _balances[id][to] += amount;
        }

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/NFTify1155.sol

pragma solidity ^0.8.0;

contract NFTify1155 is Ownable, ERC1155 {
    address controller;
    string public name;
    string public symbol;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _uri,
        address _controller
    ) ERC1155(_uri) {
        name = _name;
        symbol = _symbol;
        setController(_controller);
    }

    modifier onlyControllers() {
        require(
            controller == msg.sender || owner() == msg.sender,
            "ERC721: Only controllers"
        );
        _;
    }

    function setController(address _controller) public onlyOwner {
        controller = _controller;
    }

    function getController() public view returns (address) {
        return controller;
    }

    function setURI(string memory _uri) public onlyControllers {
        _setURI(_uri);
    }

    function mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public onlyControllers {
        _mint(account, id, amount, data);
    }

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

    function toString(uint256 value) internal pure returns (string memory) {
        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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"address","name":"_controller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getController","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162003dc838038062003dc88339818101604052810190620000379190620003d4565b81620000586200004c620000b760201b60201c565b620000bf60201b60201c565b62000069816200018360201b60201c565b508360059080519060200190620000829291906200029b565b5082600690805190602001906200009b9291906200029b565b50620000ad816200019f60201b60201c565b50505050620006cc565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600390805190602001906200019b9291906200029b565b5050565b620001af620000b760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620001d56200027260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200022e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022590620004b2565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002a990620005ae565b90600052602060002090601f016020900481019282620002cd576000855562000319565b82601f10620002e857805160ff191683800117855562000319565b8280016001018555821562000319579182015b8281111562000318578251825591602001919060010190620002fb565b5b5090506200032891906200032c565b5090565b5b80821115620003475760008160009055506001016200032d565b5090565b6000620003626200035c84620004fd565b620004d4565b9050828152602081018484840111156200037b57600080fd5b6200038884828562000578565b509392505050565b600081519050620003a181620006b2565b92915050565b600082601f830112620003b957600080fd5b8151620003cb8482602086016200034b565b91505092915050565b60008060008060808587031215620003eb57600080fd5b600085015167ffffffffffffffff8111156200040657600080fd5b6200041487828801620003a7565b945050602085015167ffffffffffffffff8111156200043257600080fd5b6200044087828801620003a7565b935050604085015167ffffffffffffffff8111156200045e57600080fd5b6200046c87828801620003a7565b92505060606200047f8782880162000390565b91505092959194509250565b60006200049a60208362000533565b9150620004a78262000689565b602082019050919050565b60006020820190508181036000830152620004cd816200048b565b9050919050565b6000620004e0620004f3565b9050620004ee8282620005e4565b919050565b6000604051905090565b600067ffffffffffffffff8211156200051b576200051a62000649565b5b620005268262000678565b9050602081019050919050565b600082825260208201905092915050565b6000620005518262000558565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620005985780820151818401526020810190506200057b565b83811115620005a8576000848401525b50505050565b60006002820490506001821680620005c757607f821691505b60208210811415620005de57620005dd6200061a565b5b50919050565b620005ef8262000678565b810181811067ffffffffffffffff8211171562000611576200061062000649565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620006bd8162000544565b8114620006c957600080fd5b50565b6136ec80620006dc6000396000f3fe608060405234801561001057600080fd5b506004361061010a5760003560e01c8063715018a6116100a257806395d89b411161007157806395d89b41146102a3578063a22cb465146102c1578063e985e9c5146102dd578063f242432a1461030d578063f2fde38b146103295761010a565b8063715018a614610243578063731133e91461024d5780638da5cb5b1461026957806392eefe9b146102875761010a565b80630e89341c116100de5780630e89341c146101a95780632eb2c2d6146101d95780633018205f146101f55780634e1273f4146102135761010a565b8062fdd58e1461010f57806301ffc9a71461013f57806302fe53051461016f57806306fdde031461018b575b600080fd5b61012960048036038101906101249190612460565b610345565b6040516101369190612cd5565b60405180910390f35b61015960048036038101906101549190612583565b61040f565b6040516101669190612ad8565b60405180910390f35b610189600480360381019061018491906125d5565b6104f1565b005b6101936105ca565b6040516101a09190612af3565b60405180910390f35b6101c360048036038101906101be9190612616565b610658565b6040516101d09190612af3565b60405180910390f35b6101f360048036038101906101ee91906122d6565b6106b8565b005b6101fd610ab1565b60405161020a91906129a2565b60405180910390f35b61022d60048036038101906102289190612517565b610adb565b60405161023a9190612a7f565b60405180910390f35b61024b610c8c565b005b6102676004803603810190610262919061249c565b610d14565b005b610271610df3565b60405161027e91906129a2565b60405180910390f35b6102a1600480360381019061029c9190612271565b610e1c565b005b6102ab610edc565b6040516102b89190612af3565b60405180910390f35b6102db60048036038101906102d69190612424565b610f6a565b005b6102f760048036038101906102f2919061229a565b6110eb565b6040516103049190612ad8565b60405180910390f35b61032760048036038101906103229190612395565b61117f565b005b610343600480360381019061033e9190612271565b61149a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ad90612b55565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104da57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104ea57506104e982611592565b5b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061057f57503373ffffffffffffffffffffffffffffffffffffffff16610567610df3565b73ffffffffffffffffffffffffffffffffffffffff16145b6105be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b590612b95565b60405180910390fd5b6105c7816115fc565b50565b600580546105d790612fe5565b80601f016020809104026020016040519081016040528092919081815260200182805461060390612fe5565b80156106505780601f1061062557610100808354040283529160200191610650565b820191906000526020600020905b81548152906001019060200180831161063357829003601f168201915b505050505081565b6060600061066583611616565b9050600081511161068557604051806020016040528060008152506106b0565b8061068f846116aa565b6040516020016106a092919061297e565b6040516020818303038152906040525b915050919050565b81518351146106fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f390612c95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076390612bd5565b60405180910390fd5b610774611857565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107ba57506107b9856107b4611857565b6110eb565b5b6107f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f090612bf5565b60405180910390fd5b6000610803611857565b905061081381878787878761185f565b60005b8451811015610a1c57600085828151811061085a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600085838151811061089f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093890612c15565b60405180910390fd5b818161094d9190612efb565b6001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a019190612e74565b9250508190555050505080610a1590613048565b9050610816565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610a93929190612aa1565b60405180910390a4610aa9818787878787611867565b505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1890612c75565b60405180910390fd5b6000835167ffffffffffffffff811115610b64577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b925781602001602082028036833780820191505090505b50905060005b8451811015610c8157610c2b858281518110610bdd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610c1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610345565b828281518110610c64577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610c7a90613048565b9050610b98565b508091505092915050565b610c94611857565b73ffffffffffffffffffffffffffffffffffffffff16610cb2610df3565b73ffffffffffffffffffffffffffffffffffffffff1614610d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cff90612c35565b60405180910390fd5b610d126000611a4e565b565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610da257503373ffffffffffffffffffffffffffffffffffffffff16610d8a610df3565b73ffffffffffffffffffffffffffffffffffffffff16145b610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd890612b95565b60405180910390fd5b610ded84848484611b12565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e24611857565b73ffffffffffffffffffffffffffffffffffffffff16610e42610df3565b73ffffffffffffffffffffffffffffffffffffffff1614610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90612c35565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60068054610ee990612fe5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1590612fe5565b8015610f625780601f10610f3757610100808354040283529160200191610f62565b820191906000526020600020905b815481529060010190602001808311610f4557829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff16610f89611857565b73ffffffffffffffffffffffffffffffffffffffff161415610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790612c55565b60405180910390fd5b8060026000610fed611857565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661109a611857565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110df9190612ad8565b60405180910390a35050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e690612bd5565b60405180910390fd5b6111f7611857565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061123d575061123c85611237611857565b6110eb565b5b61127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390612bb5565b60405180910390fd5b6000611286611857565b90506112a681878761129788611ca9565b6112a088611ca9565b8761185f565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561133e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133590612c15565b60405180910390fd5b838161134a9190612efb565b6001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113fe9190612e74565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161147b929190612cf0565b60405180910390a4611491828888888888611d6f565b50505050505050565b6114a2611857565b73ffffffffffffffffffffffffffffffffffffffff166114c0610df3565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90612c35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d90612b75565b60405180910390fd5b61158f81611a4e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b8060039080519060200190611612929190611f69565b5050565b60606003805461162590612fe5565b80601f016020809104026020016040519081016040528092919081815260200182805461165190612fe5565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b50505050509050919050565b606060008214156116f2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611852565b600082905060005b6000821461172457808061170d90613048565b915050600a8261171d9190612eca565b91506116fa565b60008167ffffffffffffffff811115611766577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117985781602001600182028036833780820191505090505b5090505b6000851461184b576001826117b19190612efb565b9150600a856117c09190613091565b60306117cc9190612e74565b60f81b818381518110611808577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856118449190612eca565b945061179c565b8093505050505b919050565b600033905090565b505050505050565b6118868473ffffffffffffffffffffffffffffffffffffffff16611f56565b15611a46578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016118cc9594939291906129bd565b602060405180830381600087803b1580156118e657600080fd5b505af192505050801561191757506040513d601f19601f8201168201806040525081019061191491906125ac565b60015b6119bd5761192361317e565b806308c379a0141561198057506119386135c4565b806119435750611982565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119779190612af3565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b490612b15565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90612b35565b60405180910390fd5b505b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990612cb5565b60405180910390fd5b6000611b8c611857565b9050611bad81600087611b9e88611ca9565b611ba788611ca9565b8761185f565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c0d9190612e74565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611c8b929190612cf0565b60405180910390a4611ca281600087878787611d6f565b5050505050565b60606000600167ffffffffffffffff811115611cee577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d1c5781602001602082028036833780820191505090505b5090508281600081518110611d5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b611d8e8473ffffffffffffffffffffffffffffffffffffffff16611f56565b15611f4e578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611dd4959493929190612a25565b602060405180830381600087803b158015611dee57600080fd5b505af1925050508015611e1f57506040513d601f19601f82011682018060405250810190611e1c91906125ac565b60015b611ec557611e2b61317e565b806308c379a01415611e885750611e406135c4565b80611e4b5750611e8a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f9190612af3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc90612b15565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390612b35565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054611f7590612fe5565b90600052602060002090601f016020900481019282611f975760008555611fde565b82601f10611fb057805160ff1916838001178555611fde565b82800160010185558215611fde579182015b82811115611fdd578251825591602001919060010190611fc2565b5b509050611feb9190611fef565b5090565b5b80821115612008576000816000905550600101611ff0565b5090565b600061201f61201a84612d3e565b612d19565b9050808382526020820190508285602086028201111561203e57600080fd5b60005b8581101561206e57816120548882612160565b845260208401935060208301925050600181019050612041565b5050509392505050565b600061208b61208684612d6a565b612d19565b905080838252602082019050828560208602820111156120aa57600080fd5b60005b858110156120da57816120c0888261225c565b8452602084019350602083019250506001810190506120ad565b5050509392505050565b60006120f76120f284612d96565b612d19565b90508281526020810184848401111561210f57600080fd5b61211a848285612fa3565b509392505050565b600061213561213084612dc7565b612d19565b90508281526020810184848401111561214d57600080fd5b612158848285612fa3565b509392505050565b60008135905061216f8161365a565b92915050565b600082601f83011261218657600080fd5b813561219684826020860161200c565b91505092915050565b600082601f8301126121b057600080fd5b81356121c0848260208601612078565b91505092915050565b6000813590506121d881613671565b92915050565b6000813590506121ed81613688565b92915050565b60008151905061220281613688565b92915050565b600082601f83011261221957600080fd5b81356122298482602086016120e4565b91505092915050565b600082601f83011261224357600080fd5b8135612253848260208601612122565b91505092915050565b60008135905061226b8161369f565b92915050565b60006020828403121561228357600080fd5b600061229184828501612160565b91505092915050565b600080604083850312156122ad57600080fd5b60006122bb85828601612160565b92505060206122cc85828601612160565b9150509250929050565b600080600080600060a086880312156122ee57600080fd5b60006122fc88828901612160565b955050602061230d88828901612160565b945050604086013567ffffffffffffffff81111561232a57600080fd5b6123368882890161219f565b935050606086013567ffffffffffffffff81111561235357600080fd5b61235f8882890161219f565b925050608086013567ffffffffffffffff81111561237c57600080fd5b61238888828901612208565b9150509295509295909350565b600080600080600060a086880312156123ad57600080fd5b60006123bb88828901612160565b95505060206123cc88828901612160565b94505060406123dd8882890161225c565b93505060606123ee8882890161225c565b925050608086013567ffffffffffffffff81111561240b57600080fd5b61241788828901612208565b9150509295509295909350565b6000806040838503121561243757600080fd5b600061244585828601612160565b9250506020612456858286016121c9565b9150509250929050565b6000806040838503121561247357600080fd5b600061248185828601612160565b92505060206124928582860161225c565b9150509250929050565b600080600080608085870312156124b257600080fd5b60006124c087828801612160565b94505060206124d18782880161225c565b93505060406124e28782880161225c565b925050606085013567ffffffffffffffff8111156124ff57600080fd5b61250b87828801612208565b91505092959194509250565b6000806040838503121561252a57600080fd5b600083013567ffffffffffffffff81111561254457600080fd5b61255085828601612175565b925050602083013567ffffffffffffffff81111561256d57600080fd5b6125798582860161219f565b9150509250929050565b60006020828403121561259557600080fd5b60006125a3848285016121de565b91505092915050565b6000602082840312156125be57600080fd5b60006125cc848285016121f3565b91505092915050565b6000602082840312156125e757600080fd5b600082013567ffffffffffffffff81111561260157600080fd5b61260d84828501612232565b91505092915050565b60006020828403121561262857600080fd5b60006126368482850161225c565b91505092915050565b600061264b8383612960565b60208301905092915050565b61266081612f2f565b82525050565b600061267182612e08565b61267b8185612e36565b935061268683612df8565b8060005b838110156126b757815161269e888261263f565b97506126a983612e29565b92505060018101905061268a565b5085935050505092915050565b6126cd81612f41565b82525050565b60006126de82612e13565b6126e88185612e47565b93506126f8818560208601612fb2565b612701816131a0565b840191505092915050565b600061271782612e1e565b6127218185612e58565b9350612731818560208601612fb2565b61273a816131a0565b840191505092915050565b600061275082612e1e565b61275a8185612e69565b935061276a818560208601612fb2565b80840191505092915050565b6000612783603483612e58565b915061278e826131be565b604082019050919050565b60006127a6602883612e58565b91506127b18261320d565b604082019050919050565b60006127c9602b83612e58565b91506127d48261325c565b604082019050919050565b60006127ec602683612e58565b91506127f7826132ab565b604082019050919050565b600061280f601883612e58565b915061281a826132fa565b602082019050919050565b6000612832602983612e58565b915061283d82613323565b604082019050919050565b6000612855602583612e58565b915061286082613372565b604082019050919050565b6000612878603283612e58565b9150612883826133c1565b604082019050919050565b600061289b602a83612e58565b91506128a682613410565b604082019050919050565b60006128be602083612e58565b91506128c98261345f565b602082019050919050565b60006128e1602983612e58565b91506128ec82613488565b604082019050919050565b6000612904602983612e58565b915061290f826134d7565b604082019050919050565b6000612927602883612e58565b915061293282613526565b604082019050919050565b600061294a602183612e58565b915061295582613575565b604082019050919050565b61296981612f99565b82525050565b61297881612f99565b82525050565b600061298a8285612745565b91506129968284612745565b91508190509392505050565b60006020820190506129b76000830184612657565b92915050565b600060a0820190506129d26000830188612657565b6129df6020830187612657565b81810360408301526129f18186612666565b90508181036060830152612a058185612666565b90508181036080830152612a1981846126d3565b90509695505050505050565b600060a082019050612a3a6000830188612657565b612a476020830187612657565b612a54604083018661296f565b612a61606083018561296f565b8181036080830152612a7381846126d3565b90509695505050505050565b60006020820190508181036000830152612a998184612666565b905092915050565b60006040820190508181036000830152612abb8185612666565b90508181036020830152612acf8184612666565b90509392505050565b6000602082019050612aed60008301846126c4565b92915050565b60006020820190508181036000830152612b0d818461270c565b905092915050565b60006020820190508181036000830152612b2e81612776565b9050919050565b60006020820190508181036000830152612b4e81612799565b9050919050565b60006020820190508181036000830152612b6e816127bc565b9050919050565b60006020820190508181036000830152612b8e816127df565b9050919050565b60006020820190508181036000830152612bae81612802565b9050919050565b60006020820190508181036000830152612bce81612825565b9050919050565b60006020820190508181036000830152612bee81612848565b9050919050565b60006020820190508181036000830152612c0e8161286b565b9050919050565b60006020820190508181036000830152612c2e8161288e565b9050919050565b60006020820190508181036000830152612c4e816128b1565b9050919050565b60006020820190508181036000830152612c6e816128d4565b9050919050565b60006020820190508181036000830152612c8e816128f7565b9050919050565b60006020820190508181036000830152612cae8161291a565b9050919050565b60006020820190508181036000830152612cce8161293d565b9050919050565b6000602082019050612cea600083018461296f565b92915050565b6000604082019050612d05600083018561296f565b612d12602083018461296f565b9392505050565b6000612d23612d34565b9050612d2f8282613017565b919050565b6000604051905090565b600067ffffffffffffffff821115612d5957612d5861314f565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d8557612d8461314f565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612db157612db061314f565b5b612dba826131a0565b9050602081019050919050565b600067ffffffffffffffff821115612de257612de161314f565b5b612deb826131a0565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612e7f82612f99565b9150612e8a83612f99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ebf57612ebe6130c2565b5b828201905092915050565b6000612ed582612f99565b9150612ee083612f99565b925082612ef057612eef6130f1565b5b828204905092915050565b6000612f0682612f99565b9150612f1183612f99565b925082821015612f2457612f236130c2565b5b828203905092915050565b6000612f3a82612f79565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612fd0578082015181840152602081019050612fb5565b83811115612fdf576000848401525b50505050565b60006002820490506001821680612ffd57607f821691505b6020821081141561301157613010613120565b5b50919050565b613020826131a0565b810181811067ffffffffffffffff8211171561303f5761303e61314f565b5b80604052505050565b600061305382612f99565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613086576130856130c2565b5b600182019050919050565b600061309c82612f99565b91506130a783612f99565b9250826130b7576130b66130f1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561319d5760046000803e61319a6000516131b1565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a204f6e6c7920636f6e74726f6c6c6572730000000000000000600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156135d457613657565b6135dc612d34565b60043d036004823e80513d602482011167ffffffffffffffff82111715613604575050613657565b808201805167ffffffffffffffff8111156136225750505050613657565b80602083010160043d03850181111561363f575050505050613657565b61364e82602001850186613017565b82955050505050505b90565b61366381612f2f565b811461366e57600080fd5b50565b61367a81612f41565b811461368557600080fd5b50565b61369181612f4d565b811461369c57600080fd5b50565b6136a881612f99565b81146136b357600080fd5b5056fea264697066735822122003bae7e5ee53589bf4fc9fe8b07de40a7e7a19bbd8fb825be38e253290636ad464736f6c63430008040033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000025f2f80d9a45b641bef25342a1b2a0ae48f78539000000000000000000000000000000000000000000000000000000000000000a4e4654696679313135350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054e31313535000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6d657461646174612e6e66746966792e6e6574776f726b2f697066732f000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010a5760003560e01c8063715018a6116100a257806395d89b411161007157806395d89b41146102a3578063a22cb465146102c1578063e985e9c5146102dd578063f242432a1461030d578063f2fde38b146103295761010a565b8063715018a614610243578063731133e91461024d5780638da5cb5b1461026957806392eefe9b146102875761010a565b80630e89341c116100de5780630e89341c146101a95780632eb2c2d6146101d95780633018205f146101f55780634e1273f4146102135761010a565b8062fdd58e1461010f57806301ffc9a71461013f57806302fe53051461016f57806306fdde031461018b575b600080fd5b61012960048036038101906101249190612460565b610345565b6040516101369190612cd5565b60405180910390f35b61015960048036038101906101549190612583565b61040f565b6040516101669190612ad8565b60405180910390f35b610189600480360381019061018491906125d5565b6104f1565b005b6101936105ca565b6040516101a09190612af3565b60405180910390f35b6101c360048036038101906101be9190612616565b610658565b6040516101d09190612af3565b60405180910390f35b6101f360048036038101906101ee91906122d6565b6106b8565b005b6101fd610ab1565b60405161020a91906129a2565b60405180910390f35b61022d60048036038101906102289190612517565b610adb565b60405161023a9190612a7f565b60405180910390f35b61024b610c8c565b005b6102676004803603810190610262919061249c565b610d14565b005b610271610df3565b60405161027e91906129a2565b60405180910390f35b6102a1600480360381019061029c9190612271565b610e1c565b005b6102ab610edc565b6040516102b89190612af3565b60405180910390f35b6102db60048036038101906102d69190612424565b610f6a565b005b6102f760048036038101906102f2919061229a565b6110eb565b6040516103049190612ad8565b60405180910390f35b61032760048036038101906103229190612395565b61117f565b005b610343600480360381019061033e9190612271565b61149a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ad90612b55565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104da57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104ea57506104e982611592565b5b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061057f57503373ffffffffffffffffffffffffffffffffffffffff16610567610df3565b73ffffffffffffffffffffffffffffffffffffffff16145b6105be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b590612b95565b60405180910390fd5b6105c7816115fc565b50565b600580546105d790612fe5565b80601f016020809104026020016040519081016040528092919081815260200182805461060390612fe5565b80156106505780601f1061062557610100808354040283529160200191610650565b820191906000526020600020905b81548152906001019060200180831161063357829003601f168201915b505050505081565b6060600061066583611616565b9050600081511161068557604051806020016040528060008152506106b0565b8061068f846116aa565b6040516020016106a092919061297e565b6040516020818303038152906040525b915050919050565b81518351146106fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f390612c95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076390612bd5565b60405180910390fd5b610774611857565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107ba57506107b9856107b4611857565b6110eb565b5b6107f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f090612bf5565b60405180910390fd5b6000610803611857565b905061081381878787878761185f565b60005b8451811015610a1c57600085828151811061085a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600085838151811061089f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093890612c15565b60405180910390fd5b818161094d9190612efb565b6001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a019190612e74565b9250508190555050505080610a1590613048565b9050610816565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610a93929190612aa1565b60405180910390a4610aa9818787878787611867565b505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1890612c75565b60405180910390fd5b6000835167ffffffffffffffff811115610b64577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b925781602001602082028036833780820191505090505b50905060005b8451811015610c8157610c2b858281518110610bdd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610c1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610345565b828281518110610c64577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610c7a90613048565b9050610b98565b508091505092915050565b610c94611857565b73ffffffffffffffffffffffffffffffffffffffff16610cb2610df3565b73ffffffffffffffffffffffffffffffffffffffff1614610d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cff90612c35565b60405180910390fd5b610d126000611a4e565b565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610da257503373ffffffffffffffffffffffffffffffffffffffff16610d8a610df3565b73ffffffffffffffffffffffffffffffffffffffff16145b610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd890612b95565b60405180910390fd5b610ded84848484611b12565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e24611857565b73ffffffffffffffffffffffffffffffffffffffff16610e42610df3565b73ffffffffffffffffffffffffffffffffffffffff1614610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90612c35565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60068054610ee990612fe5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1590612fe5565b8015610f625780601f10610f3757610100808354040283529160200191610f62565b820191906000526020600020905b815481529060010190602001808311610f4557829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff16610f89611857565b73ffffffffffffffffffffffffffffffffffffffff161415610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790612c55565b60405180910390fd5b8060026000610fed611857565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661109a611857565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110df9190612ad8565b60405180910390a35050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e690612bd5565b60405180910390fd5b6111f7611857565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061123d575061123c85611237611857565b6110eb565b5b61127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390612bb5565b60405180910390fd5b6000611286611857565b90506112a681878761129788611ca9565b6112a088611ca9565b8761185f565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561133e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133590612c15565b60405180910390fd5b838161134a9190612efb565b6001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113fe9190612e74565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161147b929190612cf0565b60405180910390a4611491828888888888611d6f565b50505050505050565b6114a2611857565b73ffffffffffffffffffffffffffffffffffffffff166114c0610df3565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90612c35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d90612b75565b60405180910390fd5b61158f81611a4e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b8060039080519060200190611612929190611f69565b5050565b60606003805461162590612fe5565b80601f016020809104026020016040519081016040528092919081815260200182805461165190612fe5565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b50505050509050919050565b606060008214156116f2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611852565b600082905060005b6000821461172457808061170d90613048565b915050600a8261171d9190612eca565b91506116fa565b60008167ffffffffffffffff811115611766577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117985781602001600182028036833780820191505090505b5090505b6000851461184b576001826117b19190612efb565b9150600a856117c09190613091565b60306117cc9190612e74565b60f81b818381518110611808577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856118449190612eca565b945061179c565b8093505050505b919050565b600033905090565b505050505050565b6118868473ffffffffffffffffffffffffffffffffffffffff16611f56565b15611a46578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016118cc9594939291906129bd565b602060405180830381600087803b1580156118e657600080fd5b505af192505050801561191757506040513d601f19601f8201168201806040525081019061191491906125ac565b60015b6119bd5761192361317e565b806308c379a0141561198057506119386135c4565b806119435750611982565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119779190612af3565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b490612b15565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90612b35565b60405180910390fd5b505b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990612cb5565b60405180910390fd5b6000611b8c611857565b9050611bad81600087611b9e88611ca9565b611ba788611ca9565b8761185f565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c0d9190612e74565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611c8b929190612cf0565b60405180910390a4611ca281600087878787611d6f565b5050505050565b60606000600167ffffffffffffffff811115611cee577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d1c5781602001602082028036833780820191505090505b5090508281600081518110611d5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b611d8e8473ffffffffffffffffffffffffffffffffffffffff16611f56565b15611f4e578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611dd4959493929190612a25565b602060405180830381600087803b158015611dee57600080fd5b505af1925050508015611e1f57506040513d601f19601f82011682018060405250810190611e1c91906125ac565b60015b611ec557611e2b61317e565b806308c379a01415611e885750611e406135c4565b80611e4b5750611e8a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f9190612af3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc90612b15565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390612b35565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054611f7590612fe5565b90600052602060002090601f016020900481019282611f975760008555611fde565b82601f10611fb057805160ff1916838001178555611fde565b82800160010185558215611fde579182015b82811115611fdd578251825591602001919060010190611fc2565b5b509050611feb9190611fef565b5090565b5b80821115612008576000816000905550600101611ff0565b5090565b600061201f61201a84612d3e565b612d19565b9050808382526020820190508285602086028201111561203e57600080fd5b60005b8581101561206e57816120548882612160565b845260208401935060208301925050600181019050612041565b5050509392505050565b600061208b61208684612d6a565b612d19565b905080838252602082019050828560208602820111156120aa57600080fd5b60005b858110156120da57816120c0888261225c565b8452602084019350602083019250506001810190506120ad565b5050509392505050565b60006120f76120f284612d96565b612d19565b90508281526020810184848401111561210f57600080fd5b61211a848285612fa3565b509392505050565b600061213561213084612dc7565b612d19565b90508281526020810184848401111561214d57600080fd5b612158848285612fa3565b509392505050565b60008135905061216f8161365a565b92915050565b600082601f83011261218657600080fd5b813561219684826020860161200c565b91505092915050565b600082601f8301126121b057600080fd5b81356121c0848260208601612078565b91505092915050565b6000813590506121d881613671565b92915050565b6000813590506121ed81613688565b92915050565b60008151905061220281613688565b92915050565b600082601f83011261221957600080fd5b81356122298482602086016120e4565b91505092915050565b600082601f83011261224357600080fd5b8135612253848260208601612122565b91505092915050565b60008135905061226b8161369f565b92915050565b60006020828403121561228357600080fd5b600061229184828501612160565b91505092915050565b600080604083850312156122ad57600080fd5b60006122bb85828601612160565b92505060206122cc85828601612160565b9150509250929050565b600080600080600060a086880312156122ee57600080fd5b60006122fc88828901612160565b955050602061230d88828901612160565b945050604086013567ffffffffffffffff81111561232a57600080fd5b6123368882890161219f565b935050606086013567ffffffffffffffff81111561235357600080fd5b61235f8882890161219f565b925050608086013567ffffffffffffffff81111561237c57600080fd5b61238888828901612208565b9150509295509295909350565b600080600080600060a086880312156123ad57600080fd5b60006123bb88828901612160565b95505060206123cc88828901612160565b94505060406123dd8882890161225c565b93505060606123ee8882890161225c565b925050608086013567ffffffffffffffff81111561240b57600080fd5b61241788828901612208565b9150509295509295909350565b6000806040838503121561243757600080fd5b600061244585828601612160565b9250506020612456858286016121c9565b9150509250929050565b6000806040838503121561247357600080fd5b600061248185828601612160565b92505060206124928582860161225c565b9150509250929050565b600080600080608085870312156124b257600080fd5b60006124c087828801612160565b94505060206124d18782880161225c565b93505060406124e28782880161225c565b925050606085013567ffffffffffffffff8111156124ff57600080fd5b61250b87828801612208565b91505092959194509250565b6000806040838503121561252a57600080fd5b600083013567ffffffffffffffff81111561254457600080fd5b61255085828601612175565b925050602083013567ffffffffffffffff81111561256d57600080fd5b6125798582860161219f565b9150509250929050565b60006020828403121561259557600080fd5b60006125a3848285016121de565b91505092915050565b6000602082840312156125be57600080fd5b60006125cc848285016121f3565b91505092915050565b6000602082840312156125e757600080fd5b600082013567ffffffffffffffff81111561260157600080fd5b61260d84828501612232565b91505092915050565b60006020828403121561262857600080fd5b60006126368482850161225c565b91505092915050565b600061264b8383612960565b60208301905092915050565b61266081612f2f565b82525050565b600061267182612e08565b61267b8185612e36565b935061268683612df8565b8060005b838110156126b757815161269e888261263f565b97506126a983612e29565b92505060018101905061268a565b5085935050505092915050565b6126cd81612f41565b82525050565b60006126de82612e13565b6126e88185612e47565b93506126f8818560208601612fb2565b612701816131a0565b840191505092915050565b600061271782612e1e565b6127218185612e58565b9350612731818560208601612fb2565b61273a816131a0565b840191505092915050565b600061275082612e1e565b61275a8185612e69565b935061276a818560208601612fb2565b80840191505092915050565b6000612783603483612e58565b915061278e826131be565b604082019050919050565b60006127a6602883612e58565b91506127b18261320d565b604082019050919050565b60006127c9602b83612e58565b91506127d48261325c565b604082019050919050565b60006127ec602683612e58565b91506127f7826132ab565b604082019050919050565b600061280f601883612e58565b915061281a826132fa565b602082019050919050565b6000612832602983612e58565b915061283d82613323565b604082019050919050565b6000612855602583612e58565b915061286082613372565b604082019050919050565b6000612878603283612e58565b9150612883826133c1565b604082019050919050565b600061289b602a83612e58565b91506128a682613410565b604082019050919050565b60006128be602083612e58565b91506128c98261345f565b602082019050919050565b60006128e1602983612e58565b91506128ec82613488565b604082019050919050565b6000612904602983612e58565b915061290f826134d7565b604082019050919050565b6000612927602883612e58565b915061293282613526565b604082019050919050565b600061294a602183612e58565b915061295582613575565b604082019050919050565b61296981612f99565b82525050565b61297881612f99565b82525050565b600061298a8285612745565b91506129968284612745565b91508190509392505050565b60006020820190506129b76000830184612657565b92915050565b600060a0820190506129d26000830188612657565b6129df6020830187612657565b81810360408301526129f18186612666565b90508181036060830152612a058185612666565b90508181036080830152612a1981846126d3565b90509695505050505050565b600060a082019050612a3a6000830188612657565b612a476020830187612657565b612a54604083018661296f565b612a61606083018561296f565b8181036080830152612a7381846126d3565b90509695505050505050565b60006020820190508181036000830152612a998184612666565b905092915050565b60006040820190508181036000830152612abb8185612666565b90508181036020830152612acf8184612666565b90509392505050565b6000602082019050612aed60008301846126c4565b92915050565b60006020820190508181036000830152612b0d818461270c565b905092915050565b60006020820190508181036000830152612b2e81612776565b9050919050565b60006020820190508181036000830152612b4e81612799565b9050919050565b60006020820190508181036000830152612b6e816127bc565b9050919050565b60006020820190508181036000830152612b8e816127df565b9050919050565b60006020820190508181036000830152612bae81612802565b9050919050565b60006020820190508181036000830152612bce81612825565b9050919050565b60006020820190508181036000830152612bee81612848565b9050919050565b60006020820190508181036000830152612c0e8161286b565b9050919050565b60006020820190508181036000830152612c2e8161288e565b9050919050565b60006020820190508181036000830152612c4e816128b1565b9050919050565b60006020820190508181036000830152612c6e816128d4565b9050919050565b60006020820190508181036000830152612c8e816128f7565b9050919050565b60006020820190508181036000830152612cae8161291a565b9050919050565b60006020820190508181036000830152612cce8161293d565b9050919050565b6000602082019050612cea600083018461296f565b92915050565b6000604082019050612d05600083018561296f565b612d12602083018461296f565b9392505050565b6000612d23612d34565b9050612d2f8282613017565b919050565b6000604051905090565b600067ffffffffffffffff821115612d5957612d5861314f565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d8557612d8461314f565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612db157612db061314f565b5b612dba826131a0565b9050602081019050919050565b600067ffffffffffffffff821115612de257612de161314f565b5b612deb826131a0565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612e7f82612f99565b9150612e8a83612f99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ebf57612ebe6130c2565b5b828201905092915050565b6000612ed582612f99565b9150612ee083612f99565b925082612ef057612eef6130f1565b5b828204905092915050565b6000612f0682612f99565b9150612f1183612f99565b925082821015612f2457612f236130c2565b5b828203905092915050565b6000612f3a82612f79565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612fd0578082015181840152602081019050612fb5565b83811115612fdf576000848401525b50505050565b60006002820490506001821680612ffd57607f821691505b6020821081141561301157613010613120565b5b50919050565b613020826131a0565b810181811067ffffffffffffffff8211171561303f5761303e61314f565b5b80604052505050565b600061305382612f99565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613086576130856130c2565b5b600182019050919050565b600061309c82612f99565b91506130a783612f99565b9250826130b7576130b66130f1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561319d5760046000803e61319a6000516131b1565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a204f6e6c7920636f6e74726f6c6c6572730000000000000000600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156135d457613657565b6135dc612d34565b60043d036004823e80513d602482011167ffffffffffffffff82111715613604575050613657565b808201805167ffffffffffffffff8111156136225750505050613657565b80602083010160043d03850181111561363f575050505050613657565b61364e82602001850186613017565b82955050505050505b90565b61366381612f2f565b811461366e57600080fd5b50565b61367a81612f41565b811461368557600080fd5b50565b61369181612f4d565b811461369c57600080fd5b50565b6136a881612f99565b81146136b357600080fd5b5056fea264697066735822122003bae7e5ee53589bf4fc9fe8b07de40a7e7a19bbd8fb825be38e253290636ad464736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000025f2f80d9a45b641bef25342a1b2a0ae48f78539000000000000000000000000000000000000000000000000000000000000000a4e4654696679313135350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054e31313535000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6d657461646174612e6e66746966792e6e6574776f726b2f697066732f000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): NFTify1155
Arg [1] : _symbol (string): N1155
Arg [2] : _uri (string): https://metadata.nftify.network/ipfs/
Arg [3] : _controller (address): 0x25f2F80D9a45B641bEf25342A1B2a0Ae48F78539

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 00000000000000000000000025f2f80d9a45b641bef25342a1b2a0ae48f78539
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [5] : 4e46546966793131353500000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 4e31313535000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [9] : 68747470733a2f2f6d657461646174612e6e66746966792e6e6574776f726b2f
Arg [10] : 697066732f000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

35848:1972:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20245:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19218:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36631:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35920:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36933:344;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23258:1382;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36532:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20729:559;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35118:94;;;:::i;:::-;;36730:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34467:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36420:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35945:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21361:380;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21813:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22103:1078;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35367:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20245:318;20376:7;20442:1;20423:21;;:7;:21;;;;20401:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;20533:9;:13;20543:2;20533:13;;;;;;;;;;;:22;20547:7;20533:22;;;;;;;;;;;;;;;;20526:29;;20245:318;;;;:::o;19218:360::-;19365:4;19422:26;19407:41;;;:11;:41;;;;:110;;;;19480:37;19465:52;;;:11;:52;;;;19407:110;:163;;;;19534:36;19558:11;19534:23;:36::i;:::-;19407:163;19387:183;;19218:360;;;:::o;36631:91::-;36305:10;36291:24;;:10;;;;;;;;;;;:24;;;:49;;;;36330:10;36319:21;;:7;:5;:7::i;:::-;:21;;;36291:49;36269:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;36701:13:::1;36709:4;36701:7;:13::i;:::-;36631:91:::0;:::o;35920:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36933:344::-;37046:13;37077:21;37101:18;37111:7;37101:9;:18::i;:::-;37077:42;;37174:1;37156:7;37150:21;:25;:119;;;;;;;;;;;;;;;;;37219:7;37228:17;37237:7;37228:8;:17::i;:::-;37202:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37150:119;37130:139;;;36933:344;;;:::o;23258:1382::-;23505:7;:14;23491:3;:10;:28;23469:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;23620:1;23606:16;;:2;:16;;;;23598:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23705:12;:10;:12::i;:::-;23697:20;;:4;:20;;;:60;;;;23721:36;23738:4;23744:12;:10;:12::i;:::-;23721:16;:36::i;:::-;23697:60;23675:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23848:16;23867:12;:10;:12::i;:::-;23848:31;;23892:60;23913:8;23923:4;23929:2;23933:3;23938:7;23947:4;23892:20;:60::i;:::-;23970:9;23965:426;23989:3;:10;23985:1;:14;23965:426;;;24021:10;24034:3;24038:1;24034:6;;;;;;;;;;;;;;;;;;;;;;24021:19;;24055:14;24072:7;24080:1;24072:10;;;;;;;;;;;;;;;;;;;;;;24055:27;;24099:19;24121:9;:13;24131:2;24121:13;;;;;;;;;;;:19;24135:4;24121:19;;;;;;;;;;;;;;;;24099:41;;24196:6;24181:11;:21;;24155:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;24331:6;24317:11;:20;;;;:::i;:::-;24295:9;:13;24305:2;24295:13;;;;;;;;;;;:19;24309:4;24295:19;;;;;;;;;;;;;;;:42;;;;24373:6;24352:9;:13;24362:2;24352:13;;;;;;;;;;;:17;24366:2;24352:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23965:426;;;24001:3;;;;:::i;:::-;;;23965:426;;;;24438:2;24408:47;;24432:4;24408:47;;24422:8;24408:47;;;24442:3;24447:7;24408:47;;;;;;;:::i;:::-;;;;;;;;24468:164;24518:8;24541:4;24560:2;24577:3;24595:7;24617:4;24468:35;:164::i;:::-;23258:1382;;;;;;:::o;36532:91::-;36578:7;36605:10;;;;;;;;;;;36598:17;;36532:91;:::o;20729:559::-;20885:16;20960:3;:10;20941:8;:15;:29;20919:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;21052:30;21099:8;:15;21085:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21052:63;;21133:9;21128:122;21152:8;:15;21148:1;:19;21128:122;;;21208:30;21218:8;21227:1;21218:11;;;;;;;;;;;;;;;;;;;;;;21231:3;21235:1;21231:6;;;;;;;;;;;;;;;;;;;;;;21208:9;:30::i;:::-;21189:13;21203:1;21189:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;21169:3;;;;:::i;:::-;;;21128:122;;;;21267:13;21260:20;;;20729:559;;;;:::o;35118:94::-;34698:12;:10;:12::i;:::-;34687:23;;:7;:5;:7::i;:::-;:23;;;34679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35183:21:::1;35201:1;35183:9;:21::i;:::-;35118:94::o:0;36730:195::-;36305:10;36291:24;;:10;;;;;;;;;;;:24;;;:49;;;;36330:10;36319:21;;:7;:5;:7::i;:::-;:21;;;36291:49;36269:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;36885:32:::1;36891:7;36900:2;36904:6;36912:4;36885:5;:32::i;:::-;36730:195:::0;;;;:::o;34467:87::-;34513:7;34540:6;;;;;;;;;;;34533:13;;34467:87;:::o;36420:104::-;34698:12;:10;:12::i;:::-;34687:23;;:7;:5;:7::i;:::-;:23;;;34679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36505:11:::1;36492:10;;:24;;;;;;;;;;;;;;;;;;36420:104:::0;:::o;35945:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21361:380::-;21526:8;21510:24;;:12;:10;:12::i;:::-;:24;;;;21488:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;21661:8;21616:18;:32;21635:12;:10;:12::i;:::-;21616:32;;;;;;;;;;;;;;;:42;21649:8;21616:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;21714:8;21685:48;;21700:12;:10;:12::i;:::-;21685:48;;;21724:8;21685:48;;;;;;:::i;:::-;;;;;;;;21361:380;;:::o;21813:218::-;21957:4;21986:18;:27;22005:7;21986:27;;;;;;;;;;;;;;;:37;22014:8;21986:37;;;;;;;;;;;;;;;;;;;;;;;;;21979:44;;21813:218;;;;:::o;22103:1078::-;22311:1;22297:16;;:2;:16;;;;22289:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22396:12;:10;:12::i;:::-;22388:20;;:4;:20;;;:60;;;;22412:36;22429:4;22435:12;:10;:12::i;:::-;22412:16;:36::i;:::-;22388:60;22366:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22530:16;22549:12;:10;:12::i;:::-;22530:31;;22574:185;22609:8;22632:4;22651:2;22668:21;22686:2;22668:17;:21::i;:::-;22704:25;22722:6;22704:17;:25::i;:::-;22744:4;22574:20;:185::i;:::-;22772:19;22794:9;:13;22804:2;22794:13;;;;;;;;;;;:19;22808:4;22794:19;;;;;;;;;;;;;;;;22772:41;;22861:6;22846:11;:21;;22824:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;22984:6;22970:11;:20;;;;:::i;:::-;22948:9;:13;22958:2;22948:13;;;;;;;;;;;:19;22962:4;22948:19;;;;;;;;;;;;;;;:42;;;;23022:6;23001:9;:13;23011:2;23001:13;;;;;;;;;;;:17;23015:2;23001:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23077:2;23046:46;;23071:4;23046:46;;23061:8;23046:46;;;23081:2;23085:6;23046:46;;;;;;;:::i;:::-;;;;;;;;23105:68;23136:8;23146:4;23152:2;23156;23160:6;23168:4;23105:30;:68::i;:::-;22103:1078;;;;;;;:::o;35367:229::-;34698:12;:10;:12::i;:::-;34687:23;;:7;:5;:7::i;:::-;:23;;;34679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35490:1:::1;35470:22;;:8;:22;;;;35448:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;35569:19;35579:8;35569:9;:19::i;:::-;35367:229:::0;:::o;18020:207::-;18150:4;18194:25;18179:40;;;:11;:40;;;;18172:47;;18020:207;;;:::o;25484:88::-;25558:6;25551:4;:13;;;;;;;;;;;;:::i;:::-;;25484:88;:::o;19989:105::-;20049:13;20082:4;20075:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19989:105;;;:::o;37285:532::-;37341:13;37380:1;37371:5;:10;37367:53;;;37398:10;;;;;;;;;;;;;;;;;;;;;37367:53;37430:12;37445:5;37430:20;;37461:14;37486:78;37501:1;37493:4;:9;37486:78;;37519:8;;;;;:::i;:::-;;;;37550:2;37542:10;;;;;:::i;:::-;;;37486:78;;;37574:19;37606:6;37596:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37574:39;;37624:154;37640:1;37631:5;:10;37624:154;;37668:1;37658:11;;;;;:::i;:::-;;;37735:2;37727:5;:10;;;;:::i;:::-;37714:2;:24;;;;:::i;:::-;37701:39;;37684:6;37691;37684:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;37764:2;37755:11;;;;;:::i;:::-;;;37624:154;;;37802:6;37788:21;;;;;37285:532;;;;:::o;203:98::-;256:7;283:10;276:17;;203:98;:::o;31110:221::-;;;;;;;:::o;32289:1000::-;32529:15;:2;:13;;;:15::i;:::-;32525:757;;;32599:2;32582:43;;;32648:8;32679:4;32706:3;32732:7;32762:4;32582:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32561:710;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33144:6;33137:14;;;;;;;;;;;:::i;:::-;;;;;;;;32561:710;;;33193:62;;;;;;;;;;:::i;:::-;;;;;;;;32561:710;32903:52;;;32870:85;;;:8;:85;;;;32844:224;;32998:50;;;;;;;;;;:::i;:::-;;;;;;;;32844:224;32799:284;32525:757;32289:1000;;;;;;:::o;35604:173::-;35660:16;35679:6;;;;;;;;;;;35660:25;;35705:8;35696:6;;:17;;;;;;;;;;;;;;;;;;35760:8;35729:40;;35750:8;35729:40;;;;;;;;;;;;35604:173;;:::o;25973:777::-;26150:1;26131:21;;:7;:21;;;;26123:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26203:16;26222:12;:10;:12::i;:::-;26203:31;;26247:196;26282:8;26313:1;26330:7;26352:21;26370:2;26352:17;:21::i;:::-;26388:25;26406:6;26388:17;:25::i;:::-;26428:4;26247:20;:196::i;:::-;26482:6;26456:9;:13;26466:2;26456:13;;;;;;;;;;;:22;26470:7;26456:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;26541:7;26504:57;;26537:1;26504:57;;26519:8;26504:57;;;26550:2;26554:6;26504:57;;;;;;;:::i;:::-;;;;;;;;26574:168;26619:8;26650:1;26667:7;26689:2;26706:6;26727:4;26574:30;:168::i;:::-;25973:777;;;;;:::o;33297:228::-;33390:16;33424:22;33463:1;33449:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33424:41;;33487:7;33476:5;33482:1;33476:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;33512:5;33505:12;;;33297:228;;;:::o;31339:942::-;31554:15;:2;:13;;;:15::i;:::-;31550:724;;;31624:2;31607:38;;;31668:8;31699:4;31726:2;31751:6;31780:4;31607:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31586:677;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32136:6;32129:14;;;;;;;;;;;:::i;:::-;;;;;;;;31586:677;;;32185:62;;;;;;;;;;:::i;:::-;;;;;;;;31586:677;31900:47;;;31888:59;;;:8;:59;;;;31862:198;;31990:50;;;;;;;;;;:::i;:::-;;;;;;;;31862:198;31817:258;31550:724;31339:942;;;;;;:::o;9289:444::-;9349:4;9557:12;9681:7;9669:20;9661:28;;9724:1;9717:4;:8;9710:15;;;9289:444;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:303::-;2296:5;2345:3;2338:4;2330:6;2326:17;2322:27;2312:2;;2363:1;2360;2353:12;2312:2;2403:6;2390:20;2428:94;2518:3;2510:6;2503:4;2495:6;2491:17;2428:94;:::i;:::-;2419:103;;2302:226;;;;;:::o;2551:303::-;2622:5;2671:3;2664:4;2656:6;2652:17;2648:27;2638:2;;2689:1;2686;2679:12;2638:2;2729:6;2716:20;2754:94;2844:3;2836:6;2829:4;2821:6;2817:17;2754:94;:::i;:::-;2745:103;;2628:226;;;;;:::o;2860:133::-;2903:5;2941:6;2928:20;2919:29;;2957:30;2981:5;2957:30;:::i;:::-;2909:84;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;3050:86;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3204:79;;;;:::o;3302:271::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:2;;3424:1;3421;3414:12;3373:2;3464:6;3451:20;3489:78;3563:3;3555:6;3548:4;3540:6;3536:17;3489:78;:::i;:::-;3480:87;;3363:210;;;;;:::o;3593:273::-;3649:5;3698:3;3691:4;3683:6;3679:17;3675:27;3665:2;;3716:1;3713;3706:12;3665:2;3756:6;3743:20;3781:79;3856:3;3848:6;3841:4;3833:6;3829:17;3781:79;:::i;:::-;3772:88;;3655:211;;;;;:::o;3872:139::-;3918:5;3956:6;3943:20;3934:29;;3972:33;3999:5;3972:33;:::i;:::-;3924:87;;;;:::o;4017:262::-;4076:6;4125:2;4113:9;4104:7;4100:23;4096:32;4093:2;;;4141:1;4138;4131:12;4093:2;4184:1;4209:53;4254:7;4245:6;4234:9;4230:22;4209:53;:::i;:::-;4199:63;;4155:117;4083:196;;;;:::o;4285:407::-;4353:6;4361;4410:2;4398:9;4389:7;4385:23;4381:32;4378:2;;;4426:1;4423;4416:12;4378:2;4469:1;4494:53;4539:7;4530:6;4519:9;4515:22;4494:53;:::i;:::-;4484:63;;4440:117;4596:2;4622:53;4667:7;4658:6;4647:9;4643:22;4622:53;:::i;:::-;4612:63;;4567:118;4368:324;;;;;:::o;4698:1241::-;4852:6;4860;4868;4876;4884;4933:3;4921:9;4912:7;4908:23;4904:33;4901:2;;;4950:1;4947;4940:12;4901:2;4993:1;5018:53;5063:7;5054:6;5043:9;5039:22;5018:53;:::i;:::-;5008:63;;4964:117;5120:2;5146:53;5191:7;5182:6;5171:9;5167:22;5146:53;:::i;:::-;5136:63;;5091:118;5276:2;5265:9;5261:18;5248:32;5307:18;5299:6;5296:30;5293:2;;;5339:1;5336;5329:12;5293:2;5367:78;5437:7;5428:6;5417:9;5413:22;5367:78;:::i;:::-;5357:88;;5219:236;5522:2;5511:9;5507:18;5494:32;5553:18;5545:6;5542:30;5539:2;;;5585:1;5582;5575:12;5539:2;5613:78;5683:7;5674:6;5663:9;5659:22;5613:78;:::i;:::-;5603:88;;5465:236;5768:3;5757:9;5753:19;5740:33;5800:18;5792:6;5789:30;5786:2;;;5832:1;5829;5822:12;5786:2;5860:62;5914:7;5905:6;5894:9;5890:22;5860:62;:::i;:::-;5850:72;;5711:221;4891:1048;;;;;;;;:::o;5945:955::-;6049:6;6057;6065;6073;6081;6130:3;6118:9;6109:7;6105:23;6101:33;6098:2;;;6147:1;6144;6137:12;6098:2;6190:1;6215:53;6260:7;6251:6;6240:9;6236:22;6215:53;:::i;:::-;6205:63;;6161:117;6317:2;6343:53;6388:7;6379:6;6368:9;6364:22;6343:53;:::i;:::-;6333:63;;6288:118;6445:2;6471:53;6516:7;6507:6;6496:9;6492:22;6471:53;:::i;:::-;6461:63;;6416:118;6573:2;6599:53;6644:7;6635:6;6624:9;6620:22;6599:53;:::i;:::-;6589:63;;6544:118;6729:3;6718:9;6714:19;6701:33;6761:18;6753:6;6750:30;6747:2;;;6793:1;6790;6783:12;6747:2;6821:62;6875:7;6866:6;6855:9;6851:22;6821:62;:::i;:::-;6811:72;;6672:221;6088:812;;;;;;;;:::o;6906:401::-;6971:6;6979;7028:2;7016:9;7007:7;7003:23;6999:32;6996:2;;;7044:1;7041;7034:12;6996:2;7087:1;7112:53;7157:7;7148:6;7137:9;7133:22;7112:53;:::i;:::-;7102:63;;7058:117;7214:2;7240:50;7282:7;7273:6;7262:9;7258:22;7240:50;:::i;:::-;7230:60;;7185:115;6986:321;;;;;:::o;7313:407::-;7381:6;7389;7438:2;7426:9;7417:7;7413:23;7409:32;7406:2;;;7454:1;7451;7444:12;7406:2;7497:1;7522:53;7567:7;7558:6;7547:9;7543:22;7522:53;:::i;:::-;7512:63;;7468:117;7624:2;7650:53;7695:7;7686:6;7675:9;7671:22;7650:53;:::i;:::-;7640:63;;7595:118;7396:324;;;;;:::o;7726:809::-;7821:6;7829;7837;7845;7894:3;7882:9;7873:7;7869:23;7865:33;7862:2;;;7911:1;7908;7901:12;7862:2;7954:1;7979:53;8024:7;8015:6;8004:9;8000:22;7979:53;:::i;:::-;7969:63;;7925:117;8081:2;8107:53;8152:7;8143:6;8132:9;8128:22;8107:53;:::i;:::-;8097:63;;8052:118;8209:2;8235:53;8280:7;8271:6;8260:9;8256:22;8235:53;:::i;:::-;8225:63;;8180:118;8365:2;8354:9;8350:18;8337:32;8396:18;8388:6;8385:30;8382:2;;;8428:1;8425;8418:12;8382:2;8456:62;8510:7;8501:6;8490:9;8486:22;8456:62;:::i;:::-;8446:72;;8308:220;7852:683;;;;;;;:::o;8541:693::-;8659:6;8667;8716:2;8704:9;8695:7;8691:23;8687:32;8684:2;;;8732:1;8729;8722:12;8684:2;8803:1;8792:9;8788:17;8775:31;8833:18;8825:6;8822:30;8819:2;;;8865:1;8862;8855:12;8819:2;8893:78;8963:7;8954:6;8943:9;8939:22;8893:78;:::i;:::-;8883:88;;8746:235;9048:2;9037:9;9033:18;9020:32;9079:18;9071:6;9068:30;9065:2;;;9111:1;9108;9101:12;9065:2;9139:78;9209:7;9200:6;9189:9;9185:22;9139:78;:::i;:::-;9129:88;;8991:236;8674:560;;;;;:::o;9240:260::-;9298:6;9347:2;9335:9;9326:7;9322:23;9318:32;9315:2;;;9363:1;9360;9353:12;9315:2;9406:1;9431:52;9475:7;9466:6;9455:9;9451:22;9431:52;:::i;:::-;9421:62;;9377:116;9305:195;;;;:::o;9506:282::-;9575:6;9624:2;9612:9;9603:7;9599:23;9595:32;9592:2;;;9640:1;9637;9630:12;9592:2;9683:1;9708:63;9763:7;9754:6;9743:9;9739:22;9708:63;:::i;:::-;9698:73;;9654:127;9582:206;;;;:::o;9794:375::-;9863:6;9912:2;9900:9;9891:7;9887:23;9883:32;9880:2;;;9928:1;9925;9918:12;9880:2;9999:1;9988:9;9984:17;9971:31;10029:18;10021:6;10018:30;10015:2;;;10061:1;10058;10051:12;10015:2;10089:63;10144:7;10135:6;10124:9;10120:22;10089:63;:::i;:::-;10079:73;;9942:220;9870:299;;;;:::o;10175:262::-;10234:6;10283:2;10271:9;10262:7;10258:23;10254:32;10251:2;;;10299:1;10296;10289:12;10251:2;10342:1;10367:53;10412:7;10403:6;10392:9;10388:22;10367:53;:::i;:::-;10357:63;;10313:117;10241:196;;;;:::o;10443:179::-;10512:10;10533:46;10575:3;10567:6;10533:46;:::i;:::-;10611:4;10606:3;10602:14;10588:28;;10523:99;;;;:::o;10628:118::-;10715:24;10733:5;10715:24;:::i;:::-;10710:3;10703:37;10693:53;;:::o;10782:732::-;10901:3;10930:54;10978:5;10930:54;:::i;:::-;11000:86;11079:6;11074:3;11000:86;:::i;:::-;10993:93;;11110:56;11160:5;11110:56;:::i;:::-;11189:7;11220:1;11205:284;11230:6;11227:1;11224:13;11205:284;;;11306:6;11300:13;11333:63;11392:3;11377:13;11333:63;:::i;:::-;11326:70;;11419:60;11472:6;11419:60;:::i;:::-;11409:70;;11265:224;11252:1;11249;11245:9;11240:14;;11205:284;;;11209:14;11505:3;11498:10;;10906:608;;;;;;;:::o;11520:109::-;11601:21;11616:5;11601:21;:::i;:::-;11596:3;11589:34;11579:50;;:::o;11635:360::-;11721:3;11749:38;11781:5;11749:38;:::i;:::-;11803:70;11866:6;11861:3;11803:70;:::i;:::-;11796:77;;11882:52;11927:6;11922:3;11915:4;11908:5;11904:16;11882:52;:::i;:::-;11959:29;11981:6;11959:29;:::i;:::-;11954:3;11950:39;11943:46;;11725:270;;;;;:::o;12001:364::-;12089:3;12117:39;12150:5;12117:39;:::i;:::-;12172:71;12236:6;12231:3;12172:71;:::i;:::-;12165:78;;12252:52;12297:6;12292:3;12285:4;12278:5;12274:16;12252:52;:::i;:::-;12329:29;12351:6;12329:29;:::i;:::-;12324:3;12320:39;12313:46;;12093:272;;;;;:::o;12371:377::-;12477:3;12505:39;12538:5;12505:39;:::i;:::-;12560:89;12642:6;12637:3;12560:89;:::i;:::-;12553:96;;12658:52;12703:6;12698:3;12691:4;12684:5;12680:16;12658:52;:::i;:::-;12735:6;12730:3;12726:16;12719:23;;12481:267;;;;;:::o;12754:366::-;12896:3;12917:67;12981:2;12976:3;12917:67;:::i;:::-;12910:74;;12993:93;13082:3;12993:93;:::i;:::-;13111:2;13106:3;13102:12;13095:19;;12900:220;;;:::o;13126:366::-;13268:3;13289:67;13353:2;13348:3;13289:67;:::i;:::-;13282:74;;13365:93;13454:3;13365:93;:::i;:::-;13483:2;13478:3;13474:12;13467:19;;13272:220;;;:::o;13498:366::-;13640:3;13661:67;13725:2;13720:3;13661:67;:::i;:::-;13654:74;;13737:93;13826:3;13737:93;:::i;:::-;13855:2;13850:3;13846:12;13839:19;;13644:220;;;:::o;13870:366::-;14012:3;14033:67;14097:2;14092:3;14033:67;:::i;:::-;14026:74;;14109:93;14198:3;14109:93;:::i;:::-;14227:2;14222:3;14218:12;14211:19;;14016:220;;;:::o;14242:366::-;14384:3;14405:67;14469:2;14464:3;14405:67;:::i;:::-;14398:74;;14481:93;14570:3;14481:93;:::i;:::-;14599:2;14594:3;14590:12;14583:19;;14388:220;;;:::o;14614:366::-;14756:3;14777:67;14841:2;14836:3;14777:67;:::i;:::-;14770:74;;14853:93;14942:3;14853:93;:::i;:::-;14971:2;14966:3;14962:12;14955:19;;14760:220;;;:::o;14986:366::-;15128:3;15149:67;15213:2;15208:3;15149:67;:::i;:::-;15142:74;;15225:93;15314:3;15225:93;:::i;:::-;15343:2;15338:3;15334:12;15327:19;;15132:220;;;:::o;15358:366::-;15500:3;15521:67;15585:2;15580:3;15521:67;:::i;:::-;15514:74;;15597:93;15686:3;15597:93;:::i;:::-;15715:2;15710:3;15706:12;15699:19;;15504:220;;;:::o;15730:366::-;15872:3;15893:67;15957:2;15952:3;15893:67;:::i;:::-;15886:74;;15969:93;16058:3;15969:93;:::i;:::-;16087:2;16082:3;16078:12;16071:19;;15876:220;;;:::o;16102:366::-;16244:3;16265:67;16329:2;16324:3;16265:67;:::i;:::-;16258:74;;16341:93;16430:3;16341:93;:::i;:::-;16459:2;16454:3;16450:12;16443:19;;16248:220;;;:::o;16474:366::-;16616:3;16637:67;16701:2;16696:3;16637:67;:::i;:::-;16630:74;;16713:93;16802:3;16713:93;:::i;:::-;16831:2;16826:3;16822:12;16815:19;;16620:220;;;:::o;16846:366::-;16988:3;17009:67;17073:2;17068:3;17009:67;:::i;:::-;17002:74;;17085:93;17174:3;17085:93;:::i;:::-;17203:2;17198:3;17194:12;17187:19;;16992:220;;;:::o;17218:366::-;17360:3;17381:67;17445:2;17440:3;17381:67;:::i;:::-;17374:74;;17457:93;17546:3;17457:93;:::i;:::-;17575:2;17570:3;17566:12;17559:19;;17364:220;;;:::o;17590:366::-;17732:3;17753:67;17817:2;17812:3;17753:67;:::i;:::-;17746:74;;17829:93;17918:3;17829:93;:::i;:::-;17947:2;17942:3;17938:12;17931:19;;17736:220;;;:::o;17962:108::-;18039:24;18057:5;18039:24;:::i;:::-;18034:3;18027:37;18017:53;;:::o;18076:118::-;18163:24;18181:5;18163:24;:::i;:::-;18158:3;18151:37;18141:53;;:::o;18200:435::-;18380:3;18402:95;18493:3;18484:6;18402:95;:::i;:::-;18395:102;;18514:95;18605:3;18596:6;18514:95;:::i;:::-;18507:102;;18626:3;18619:10;;18384:251;;;;;:::o;18641:222::-;18734:4;18772:2;18761:9;18757:18;18749:26;;18785:71;18853:1;18842:9;18838:17;18829:6;18785:71;:::i;:::-;18739:124;;;;:::o;18869:1053::-;19192:4;19230:3;19219:9;19215:19;19207:27;;19244:71;19312:1;19301:9;19297:17;19288:6;19244:71;:::i;:::-;19325:72;19393:2;19382:9;19378:18;19369:6;19325:72;:::i;:::-;19444:9;19438:4;19434:20;19429:2;19418:9;19414:18;19407:48;19472:108;19575:4;19566:6;19472:108;:::i;:::-;19464:116;;19627:9;19621:4;19617:20;19612:2;19601:9;19597:18;19590:48;19655:108;19758:4;19749:6;19655:108;:::i;:::-;19647:116;;19811:9;19805:4;19801:20;19795:3;19784:9;19780:19;19773:49;19839:76;19910:4;19901:6;19839:76;:::i;:::-;19831:84;;19197:725;;;;;;;;:::o;19928:751::-;20151:4;20189:3;20178:9;20174:19;20166:27;;20203:71;20271:1;20260:9;20256:17;20247:6;20203:71;:::i;:::-;20284:72;20352:2;20341:9;20337:18;20328:6;20284:72;:::i;:::-;20366;20434:2;20423:9;20419:18;20410:6;20366:72;:::i;:::-;20448;20516:2;20505:9;20501:18;20492:6;20448:72;:::i;:::-;20568:9;20562:4;20558:20;20552:3;20541:9;20537:19;20530:49;20596:76;20667:4;20658:6;20596:76;:::i;:::-;20588:84;;20156:523;;;;;;;;:::o;20685:373::-;20828:4;20866:2;20855:9;20851:18;20843:26;;20915:9;20909:4;20905:20;20901:1;20890:9;20886:17;20879:47;20943:108;21046:4;21037:6;20943:108;:::i;:::-;20935:116;;20833:225;;;;:::o;21064:634::-;21285:4;21323:2;21312:9;21308:18;21300:26;;21372:9;21366:4;21362:20;21358:1;21347:9;21343:17;21336:47;21400:108;21503:4;21494:6;21400:108;:::i;:::-;21392:116;;21555:9;21549:4;21545:20;21540:2;21529:9;21525:18;21518:48;21583:108;21686:4;21677:6;21583:108;:::i;:::-;21575:116;;21290:408;;;;;:::o;21704:210::-;21791:4;21829:2;21818:9;21814:18;21806:26;;21842:65;21904:1;21893:9;21889:17;21880:6;21842:65;:::i;:::-;21796:118;;;;:::o;21920:313::-;22033:4;22071:2;22060:9;22056:18;22048:26;;22120:9;22114:4;22110:20;22106:1;22095:9;22091:17;22084:47;22148:78;22221:4;22212:6;22148:78;:::i;:::-;22140:86;;22038:195;;;;:::o;22239:419::-;22405:4;22443:2;22432:9;22428:18;22420:26;;22492:9;22486:4;22482:20;22478:1;22467:9;22463:17;22456:47;22520:131;22646:4;22520:131;:::i;:::-;22512:139;;22410:248;;;:::o;22664:419::-;22830:4;22868:2;22857:9;22853:18;22845:26;;22917:9;22911:4;22907:20;22903:1;22892:9;22888:17;22881:47;22945:131;23071:4;22945:131;:::i;:::-;22937:139;;22835:248;;;:::o;23089:419::-;23255:4;23293:2;23282:9;23278:18;23270:26;;23342:9;23336:4;23332:20;23328:1;23317:9;23313:17;23306:47;23370:131;23496:4;23370:131;:::i;:::-;23362:139;;23260:248;;;:::o;23514:419::-;23680:4;23718:2;23707:9;23703:18;23695:26;;23767:9;23761:4;23757:20;23753:1;23742:9;23738:17;23731:47;23795:131;23921:4;23795:131;:::i;:::-;23787:139;;23685:248;;;:::o;23939:419::-;24105:4;24143:2;24132:9;24128:18;24120:26;;24192:9;24186:4;24182:20;24178:1;24167:9;24163:17;24156:47;24220:131;24346:4;24220:131;:::i;:::-;24212:139;;24110:248;;;:::o;24364:419::-;24530:4;24568:2;24557:9;24553:18;24545:26;;24617:9;24611:4;24607:20;24603:1;24592:9;24588:17;24581:47;24645:131;24771:4;24645:131;:::i;:::-;24637:139;;24535:248;;;:::o;24789:419::-;24955:4;24993:2;24982:9;24978:18;24970:26;;25042:9;25036:4;25032:20;25028:1;25017:9;25013:17;25006:47;25070:131;25196:4;25070:131;:::i;:::-;25062:139;;24960:248;;;:::o;25214:419::-;25380:4;25418:2;25407:9;25403:18;25395:26;;25467:9;25461:4;25457:20;25453:1;25442:9;25438:17;25431:47;25495:131;25621:4;25495:131;:::i;:::-;25487:139;;25385:248;;;:::o;25639:419::-;25805:4;25843:2;25832:9;25828:18;25820:26;;25892:9;25886:4;25882:20;25878:1;25867:9;25863:17;25856:47;25920:131;26046:4;25920:131;:::i;:::-;25912:139;;25810:248;;;:::o;26064:419::-;26230:4;26268:2;26257:9;26253:18;26245:26;;26317:9;26311:4;26307:20;26303:1;26292:9;26288:17;26281:47;26345:131;26471:4;26345:131;:::i;:::-;26337:139;;26235:248;;;:::o;26489:419::-;26655:4;26693:2;26682:9;26678:18;26670:26;;26742:9;26736:4;26732:20;26728:1;26717:9;26713:17;26706:47;26770:131;26896:4;26770:131;:::i;:::-;26762:139;;26660:248;;;:::o;26914:419::-;27080:4;27118:2;27107:9;27103:18;27095:26;;27167:9;27161:4;27157:20;27153:1;27142:9;27138:17;27131:47;27195:131;27321:4;27195:131;:::i;:::-;27187:139;;27085:248;;;:::o;27339:419::-;27505:4;27543:2;27532:9;27528:18;27520:26;;27592:9;27586:4;27582:20;27578:1;27567:9;27563:17;27556:47;27620:131;27746:4;27620:131;:::i;:::-;27612:139;;27510:248;;;:::o;27764:419::-;27930:4;27968:2;27957:9;27953:18;27945:26;;28017:9;28011:4;28007:20;28003:1;27992:9;27988:17;27981:47;28045:131;28171:4;28045:131;:::i;:::-;28037:139;;27935:248;;;:::o;28189:222::-;28282:4;28320:2;28309:9;28305:18;28297:26;;28333:71;28401:1;28390:9;28386:17;28377:6;28333:71;:::i;:::-;28287:124;;;;:::o;28417:332::-;28538:4;28576:2;28565:9;28561:18;28553:26;;28589:71;28657:1;28646:9;28642:17;28633:6;28589:71;:::i;:::-;28670:72;28738:2;28727:9;28723:18;28714:6;28670:72;:::i;:::-;28543:206;;;;;:::o;28755:129::-;28789:6;28816:20;;:::i;:::-;28806:30;;28845:33;28873:4;28865:6;28845:33;:::i;:::-;28796:88;;;:::o;28890:75::-;28923:6;28956:2;28950:9;28940:19;;28930:35;:::o;28971:311::-;29048:4;29138:18;29130:6;29127:30;29124:2;;;29160:18;;:::i;:::-;29124:2;29210:4;29202:6;29198:17;29190:25;;29270:4;29264;29260:15;29252:23;;29053:229;;;:::o;29288:311::-;29365:4;29455:18;29447:6;29444:30;29441:2;;;29477:18;;:::i;:::-;29441:2;29527:4;29519:6;29515:17;29507:25;;29587:4;29581;29577:15;29569:23;;29370:229;;;:::o;29605:307::-;29666:4;29756:18;29748:6;29745:30;29742:2;;;29778:18;;:::i;:::-;29742:2;29816:29;29838:6;29816:29;:::i;:::-;29808:37;;29900:4;29894;29890:15;29882:23;;29671:241;;;:::o;29918:308::-;29980:4;30070:18;30062:6;30059:30;30056:2;;;30092:18;;:::i;:::-;30056:2;30130:29;30152:6;30130:29;:::i;:::-;30122:37;;30214:4;30208;30204:15;30196:23;;29985:241;;;:::o;30232:132::-;30299:4;30322:3;30314:11;;30352:4;30347:3;30343:14;30335:22;;30304:60;;;:::o;30370:114::-;30437:6;30471:5;30465:12;30455:22;;30444:40;;;:::o;30490:98::-;30541:6;30575:5;30569:12;30559:22;;30548:40;;;:::o;30594:99::-;30646:6;30680:5;30674:12;30664:22;;30653:40;;;:::o;30699:113::-;30769:4;30801;30796:3;30792:14;30784:22;;30774:38;;;:::o;30818:184::-;30917:11;30951:6;30946:3;30939:19;30991:4;30986:3;30982:14;30967:29;;30929:73;;;;:::o;31008:168::-;31091:11;31125:6;31120:3;31113:19;31165:4;31160:3;31156:14;31141:29;;31103:73;;;;:::o;31182:169::-;31266:11;31300:6;31295:3;31288:19;31340:4;31335:3;31331:14;31316:29;;31278:73;;;;:::o;31357:148::-;31459:11;31496:3;31481:18;;31471:34;;;;:::o;31511:305::-;31551:3;31570:20;31588:1;31570:20;:::i;:::-;31565:25;;31604:20;31622:1;31604:20;:::i;:::-;31599:25;;31758:1;31690:66;31686:74;31683:1;31680:81;31677:2;;;31764:18;;:::i;:::-;31677:2;31808:1;31805;31801:9;31794:16;;31555:261;;;;:::o;31822:185::-;31862:1;31879:20;31897:1;31879:20;:::i;:::-;31874:25;;31913:20;31931:1;31913:20;:::i;:::-;31908:25;;31952:1;31942:2;;31957:18;;:::i;:::-;31942:2;31999:1;31996;31992:9;31987:14;;31864:143;;;;:::o;32013:191::-;32053:4;32073:20;32091:1;32073:20;:::i;:::-;32068:25;;32107:20;32125:1;32107:20;:::i;:::-;32102:25;;32146:1;32143;32140:8;32137:2;;;32151:18;;:::i;:::-;32137:2;32196:1;32193;32189:9;32181:17;;32058:146;;;;:::o;32210:96::-;32247:7;32276:24;32294:5;32276:24;:::i;:::-;32265:35;;32255:51;;;:::o;32312:90::-;32346:7;32389:5;32382:13;32375:21;32364:32;;32354:48;;;:::o;32408:149::-;32444:7;32484:66;32477:5;32473:78;32462:89;;32452:105;;;:::o;32563:126::-;32600:7;32640:42;32633:5;32629:54;32618:65;;32608:81;;;:::o;32695:77::-;32732:7;32761:5;32750:16;;32740:32;;;:::o;32778:154::-;32862:6;32857:3;32852;32839:30;32924:1;32915:6;32910:3;32906:16;32899:27;32829:103;;;:::o;32938:307::-;33006:1;33016:113;33030:6;33027:1;33024:13;33016:113;;;33115:1;33110:3;33106:11;33100:18;33096:1;33091:3;33087:11;33080:39;33052:2;33049:1;33045:10;33040:15;;33016:113;;;33147:6;33144:1;33141:13;33138:2;;;33227:1;33218:6;33213:3;33209:16;33202:27;33138:2;32987:258;;;;:::o;33251:320::-;33295:6;33332:1;33326:4;33322:12;33312:22;;33379:1;33373:4;33369:12;33400:18;33390:2;;33456:4;33448:6;33444:17;33434:27;;33390:2;33518;33510:6;33507:14;33487:18;33484:38;33481:2;;;33537:18;;:::i;:::-;33481:2;33302:269;;;;:::o;33577:281::-;33660:27;33682:4;33660:27;:::i;:::-;33652:6;33648:40;33790:6;33778:10;33775:22;33754:18;33742:10;33739:34;33736:62;33733:2;;;33801:18;;:::i;:::-;33733:2;33841:10;33837:2;33830:22;33620:238;;;:::o;33864:233::-;33903:3;33926:24;33944:5;33926:24;:::i;:::-;33917:33;;33972:66;33965:5;33962:77;33959:2;;;34042:18;;:::i;:::-;33959:2;34089:1;34082:5;34078:13;34071:20;;33907:190;;;:::o;34103:176::-;34135:1;34152:20;34170:1;34152:20;:::i;:::-;34147:25;;34186:20;34204:1;34186:20;:::i;:::-;34181:25;;34225:1;34215:2;;34230:18;;:::i;:::-;34215:2;34271:1;34268;34264:9;34259:14;;34137:142;;;;:::o;34285:180::-;34333:77;34330:1;34323:88;34430:4;34427:1;34420:15;34454:4;34451:1;34444:15;34471:180;34519:77;34516:1;34509:88;34616:4;34613:1;34606:15;34640:4;34637:1;34630:15;34657:180;34705:77;34702:1;34695:88;34802:4;34799:1;34792:15;34826:4;34823:1;34816:15;34843:180;34891:77;34888:1;34881:88;34988:4;34985:1;34978:15;35012:4;35009:1;35002:15;35029:183;35064:3;35102:1;35084:16;35081:23;35078:2;;;35140:1;35137;35134;35119:23;35162:34;35193:1;35187:8;35162:34;:::i;:::-;35155:41;;35078:2;35068:144;:::o;35218:102::-;35259:6;35310:2;35306:7;35301:2;35294:5;35290:14;35286:28;35276:38;;35266:54;;;:::o;35326:106::-;35370:8;35419:5;35414:3;35410:15;35389:36;;35379:53;;;:::o;35438:239::-;35578:34;35574:1;35566:6;35562:14;35555:58;35647:22;35642:2;35634:6;35630:15;35623:47;35544:133;:::o;35683:227::-;35823:34;35819:1;35811:6;35807:14;35800:58;35892:10;35887:2;35879:6;35875:15;35868:35;35789:121;:::o;35916:230::-;36056:34;36052:1;36044:6;36040:14;36033:58;36125:13;36120:2;36112:6;36108:15;36101:38;36022:124;:::o;36152:225::-;36292:34;36288:1;36280:6;36276:14;36269:58;36361:8;36356:2;36348:6;36344:15;36337:33;36258:119;:::o;36383:174::-;36523:26;36519:1;36511:6;36507:14;36500:50;36489:68;:::o;36563:228::-;36703:34;36699:1;36691:6;36687:14;36680:58;36772:11;36767:2;36759:6;36755:15;36748:36;36669:122;:::o;36797:224::-;36937:34;36933:1;36925:6;36921:14;36914:58;37006:7;37001:2;36993:6;36989:15;36982:32;36903:118;:::o;37027:237::-;37167:34;37163:1;37155:6;37151:14;37144:58;37236:20;37231:2;37223:6;37219:15;37212:45;37133:131;:::o;37270:229::-;37410:34;37406:1;37398:6;37394:14;37387:58;37479:12;37474:2;37466:6;37462:15;37455:37;37376:123;:::o;37505:182::-;37645:34;37641:1;37633:6;37629:14;37622:58;37611:76;:::o;37693:228::-;37833:34;37829:1;37821:6;37817:14;37810:58;37902:11;37897:2;37889:6;37885:15;37878:36;37799:122;:::o;37927:228::-;38067:34;38063:1;38055:6;38051:14;38044:58;38136:11;38131:2;38123:6;38119:15;38112:36;38033:122;:::o;38161:227::-;38301:34;38297:1;38289:6;38285:14;38278:58;38370:10;38365:2;38357:6;38353:15;38346:35;38267:121;:::o;38394:220::-;38534:34;38530:1;38522:6;38518:14;38511:58;38603:3;38598:2;38590:6;38586:15;38579:28;38500:114;:::o;38620:711::-;38659:3;38697:4;38679:16;38676:26;38673:2;;;38705:5;;38673:2;38734:20;;:::i;:::-;38809:1;38791:16;38787:24;38784:1;38778:4;38763:49;38842:4;38836:11;38941:16;38934:4;38926:6;38922:17;38919:39;38886:18;38878:6;38875:30;38859:113;38856:2;;;38987:5;;;;38856:2;39033:6;39027:4;39023:17;39069:3;39063:10;39096:18;39088:6;39085:30;39082:2;;;39118:5;;;;;;39082:2;39166:6;39159:4;39154:3;39150:14;39146:27;39225:1;39207:16;39203:24;39197:4;39193:35;39188:3;39185:44;39182:2;;;39232:5;;;;;;;39182:2;39249:57;39297:6;39291:4;39287:17;39279:6;39275:30;39269:4;39249:57;:::i;:::-;39322:3;39315:10;;38663:668;;;;;;;:::o;39337:122::-;39410:24;39428:5;39410:24;:::i;:::-;39403:5;39400:35;39390:2;;39449:1;39446;39439:12;39390:2;39380:79;:::o;39465:116::-;39535:21;39550:5;39535:21;:::i;:::-;39528:5;39525:32;39515:2;;39571:1;39568;39561:12;39515:2;39505:76;:::o;39587:120::-;39659:23;39676:5;39659:23;:::i;:::-;39652:5;39649:34;39639:2;;39697:1;39694;39687:12;39639:2;39629:78;:::o;39713:122::-;39786:24;39804:5;39786:24;:::i;:::-;39779:5;39776:35;39766:2;;39825:1;39822;39815:12;39766:2;39756:79;:::o

Swarm Source

ipfs://03bae7e5ee53589bf4fc9fe8b07de40a7e7a19bbd8fb825be38e253290636ad4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.