ETH Price: $2,354.39 (+0.27%)

Token

Formless by RAREBANDY (FORMLESS)
 

Overview

Max Total Supply

75 FORMLESS

Holders

36

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xb9c8d94b413a03bbb858b6020170769e792ade6a
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:
NFT1155

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-06
*/

// SPDX-License-Identifier: MIT

// Amended by FullStackHustle
/**
$$$$$$$$\        $$\ $$\  $$$$$$\    $$\                         $$\       $$\   $$\                       $$\     $$\           
$$  _____|       $$ |$$ |$$  __$$\   $$ |                        $$ |      $$ |  $$ |                      $$ |    $$ |          
$$ |   $$\   $$\ $$ |$$ |$$ /  \__|$$$$$$\    $$$$$$\   $$$$$$$\ $$ |  $$\ $$ |  $$ |$$\   $$\  $$$$$$$\ $$$$$$\   $$ | $$$$$$\  
$$$$$\ $$ |  $$ |$$ |$$ |\$$$$$$\  \_$$  _|   \____$$\ $$  _____|$$ | $$  |$$$$$$$$ |$$ |  $$ |$$  _____|\_$$  _|  $$ |$$  __$$\ 
$$  __|$$ |  $$ |$$ |$$ | \____$$\   $$ |     $$$$$$$ |$$ /      $$$$$$  / $$  __$$ |$$ |  $$ |\$$$$$$\    $$ |    $$ |$$$$$$$$ |
$$ |   $$ |  $$ |$$ |$$ |$$\   $$ |  $$ |$$\ $$  __$$ |$$ |      $$  _$$<  $$ |  $$ |$$ |  $$ | \____$$\   $$ |$$\ $$ |$$   ____|
$$ |   \$$$$$$  |$$ |$$ |\$$$$$$  |  \$$$$  |\$$$$$$$ |\$$$$$$$\ $$ | \$$\ $$ |  $$ |\$$$$$$  |$$$$$$$  |  \$$$$  |$$ |\$$$$$$$\ 
\__|    \______/ \__|\__| \______/    \____/  \_______| \_______|\__|  \__|\__|  \__| \______/ \_______/    \____/ \__| \_______|
*/

// File: default_workspace/contracts/rarible/royalties/contracts/LibPart.sol



pragma solidity ^0.8.0;

library LibPart {
    bytes32 public constant TYPE_HASH = keccak256("Part(address account,uint96 value)");

    struct Part {
        address payable account;
        uint96 value;
    }

    function hash(Part memory part) internal pure returns (bytes32) {
        return keccak256(abi.encode(TYPE_HASH, part.account, part.value));
    }
}
// File: default_workspace/contracts/rarible/royalties/contracts/LibRoyalties2981.sol



pragma solidity ^0.8.0;


library LibRoyalties2981 {
    /*
     * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;
     */
    bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;
    uint96 constant _WEIGHT_VALUE = 1000000;

    /*Method for converting amount to percent and forming LibPart*/
    function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {
        LibPart.Part[] memory result;
        if (amount == 0) {
            return result;
        }
        uint256 percent = (amount * 100 / _WEIGHT_VALUE) * 100;
        require(percent < 10000, "Royalties 2981, than 100%");
        result = new LibPart.Part[](1);
        result[0].account = payable(to);
        result[0].value = uint96(percent);
        return result;
    }
}
// File: default_workspace/contracts/rarible/royalties/contracts/IERC2981.sol



pragma solidity ^0.8.0;

///
/// @dev Interface for the NFT Royalty Standard
///
//interface IERC2981 is IERC165 {
interface IERC2981 {
    /// ERC165 bytes to add to interface array - set in parent contract
    /// implementing this standard
    ///
    /// bytes4(keccak256("royaltyInfo(uint256,uint256)")) == 0x2a55205a
    /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;
    /// _registerInterface(_INTERFACE_ID_ERC2981);

    /// @notice Called with the sale price to determine how much royalty
    //          is owed and to whom.
    /// @param _tokenId - the NFT asset queried for royalty information
    /// @param _salePrice - the sale price of the NFT asset specified by _tokenId
    /// @return receiver - address of who should be sent the royalty payment
    /// @return royaltyAmount - the royalty payment amount for _salePrice
    function royaltyInfo(
        uint256 _tokenId,
        uint256 _salePrice
    ) external view returns (
        address receiver,
        uint256 royaltyAmount
    );
}
// File: default_workspace/contracts/rarible/royalties/contracts/RoyaltiesV2.sol


pragma solidity ^0.8.0;

pragma abicoder v2;


interface RoyaltiesV2 {
    event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);

    function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);
}
// File: default_workspace/contracts/rarible/royalties/contracts/impl/AbstractRoyalties.sol



pragma solidity ^0.8.0;


abstract contract AbstractRoyalties {
    mapping (uint256 => LibPart.Part[]) internal royalties;

    function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {
        uint256 totalValue;
        for (uint i = 0; i < _royalties.length; i++) {
            require(_royalties[i].account != address(0x0), "Recipient should be present");
            require(_royalties[i].value != 0, "Royalty value should be positive");
            totalValue += _royalties[i].value;
            royalties[id].push(_royalties[i]);
        }
        require(totalValue < 10000, "Royalty total value should be < 10000");
        _onRoyaltiesSet(id, _royalties);
    }

    function _updateAccount(uint256 _id, address _from, address _to) internal {
        uint length = royalties[_id].length;
        for(uint i = 0; i < length; i++) {
            if (royalties[_id][i].account == _from) {
                royalties[_id][i].account = payable(address(uint160(_to)));
            }
        }
    }

    function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;
}
// File: default_workspace/contracts/rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol



pragma solidity ^0.8.0;




contract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {

    function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {
        return royalties[id];
    }

    function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {
        emit RoyaltiesSet(id, _royalties);
    }

    /*
    *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries
    *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981
    */
    function royaltyInfo(uint256 id, uint256 _salePrice) virtual override external view returns (address receiver, uint256 royaltyAmount) {
        if (royalties[id].length == 0) {
            receiver = address(0);
            royaltyAmount = 0;
            return(receiver, royaltyAmount);
        }
        LibPart.Part[] memory _royalties = royalties[id];
        receiver = _royalties[0].account;
        uint percent;
        for (uint i = 0; i < _royalties.length; i++) {
            percent += _royalties[i].value;
        }
        //don`t need require(percent < 10000, "Token royalty > 100%"); here, because check later in calculateRoyalties
        royaltyAmount = percent * _salePrice / 10000;
    }
}
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol


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

pragma solidity ^0.8.0;


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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


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

pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: default_workspace/contracts/formless.sol





pragma solidity ^0.8.0;








contract NFT1155 is ERC1155, RoyaltiesV2Impl, Ownable {
    
  string public name;
  string public symbol;
  bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;

  mapping(uint => string) public tokenURI;

  constructor() ERC1155("") {
    name = "Formless by RAREBANDY";
    symbol = "FORMLESS";
  }

  function mint(address _to, uint _id, uint _amount) external onlyOwner {
    _mint(_to, _id, _amount, "");
  }

  function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyOwner {
    _mintBatch(_to, _ids, _amounts, "");
  }

  function setURI(uint _id, string memory _uri) external onlyOwner {
    tokenURI[_id] = _uri;
    emit URI(_uri, _id);
  }

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

  function setRoyalties(uint _id, address payable _royaltiesReceipientAddress, uint96 _percentageBasisPoints) public onlyOwner {
        LibPart.Part[] memory _royalties = new LibPart.Part[](1);
        _royalties[0].value = _percentageBasisPoints;
        _royalties[0].account = _royaltiesReceipientAddress;
        _saveRoyalties(_id, _royalties);
    }

  function royaltyInfo(uint256 _id, uint256 _salePrice) virtual override external view returns (address receiver, uint256 royaltyAmount) {
        LibPart.Part[] memory _royalties = royalties[_id];
        if(_royalties.length > 0) {
            return (_royalties[0].account, (_salePrice * _royalties[0].value)/10000);
        }
        return (address(0), 0);

    } 

  function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155) returns (bool) {
        if(interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES) {
            return true;
        }
        if(interfaceId == _INTERFACE_ID_ERC2981) {
          return true;
        }
        return super.supportsInterface(interfaceId);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint96","name":"value","type":"uint96"}],"indexed":false,"internalType":"struct LibPart.Part[]","name":"royalties","type":"tuple[]"}],"name":"RoyaltiesSet","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getRaribleV2Royalties","outputs":[{"components":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint96","name":"value","type":"uint96"}],"internalType":"struct LibPart.Part[]","name":"","type":"tuple[]"}],"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":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","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":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address payable","name":"_royaltiesReceipientAddress","type":"address"},{"internalType":"uint96","name":"_percentageBasisPoints","type":"uint96"}],"name":"setRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"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":"uint256","name":"","type":"uint256"}],"name":"tokenURI","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":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040805160208101909152600081526200002c81620000b7565b506200003833620000d0565b6040805180820190915260158082527f466f726d6c657373206279205241524542414e4459000000000000000000000060209092019182526200007e9160059162000122565b5060408051808201909152600880825267464f524d4c45535360c01b6020909201918252620000b09160069162000122565b5062000205565b8051620000cc90600290602084019062000122565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200013090620001c8565b90600052602060002090601f0160209004810192826200015457600085556200019f565b82601f106200016f57805160ff19168380011785556200019f565b828001600101855582156200019f579182015b828111156200019f57825182559160200191906001019062000182565b50620001ad929150620001b1565b5090565b5b80821115620001ad5760008155600101620001b2565b600181811c90821680620001dd57607f821691505b60208210811415620001ff57634e487b7160e01b600052602260045260246000fd5b50919050565b61232d80620002156000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c8063862440e2116100ad578063cad96cca11610071578063cad96cca14610292578063d81d0a15146102b2578063e985e9c5146102c5578063f242432a14610301578063f2fde38b1461031457600080fd5b8063862440e2146102365780638da5cb5b1461024957806395d89b4114610264578063a22cb4651461026c578063c87b56dd1461027f57600080fd5b8063156e29f6116100f4578063156e29f6146101b65780632a55205a146101c95780632eb2c2d6146101fb5780634e1273f41461020e578063715018a61461022e57600080fd5b8062fdd58e1461013057806301ffc9a71461015657806306fdde03146101795780630e89341c1461018e578063143094db146101a1575b600080fd5b61014361013e366004611b07565b610327565b6040519081526020015b60405180910390f35b610169610164366004611c3b565b6103bd565b604051901515815260200161014d565b610181610410565b60405161014d9190611f1b565b61018161019c366004611c75565b61049e565b6101b46101af366004611c8e565b610540565b005b6101b46101c4366004611b33565b61061e565b6101dc6101d7366004611d2d565b610668565b604080516001600160a01b03909316835260208301919091520161014d565b6101b4610209366004611947565b61076e565b61022161021c366004611b68565b610805565b60405161014d9190611eda565b6101b461092f565b6101b4610244366004611cdc565b610965565b6004546040516001600160a01b03909116815260200161014d565b6101816109eb565b6101b461027a366004611ad4565b6109f8565b61018161028d366004611c75565b610a07565b6102a56102a0366004611c75565b610a20565b60405161014d9190611ec7565b6101b46102c0366004611a5e565b610aaf565b6101696102d336600461190e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101b461030f3660046119f5565b610af4565b6101b46103223660046118f1565b610b7b565b60006001600160a01b0383166103975760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b0319821663152a902d60e11b14156103e057506001919050565b6001600160e01b0319821663152a902d60e11b141561040157506001919050565b61040a82610c16565b92915050565b6005805461041d90612161565b80601f016020809104026020016040519081016040528092919081815260200182805461044990612161565b80156104965780601f1061046b57610100808354040283529160200191610496565b820191906000526020600020905b81548152906001019060200180831161047957829003601f168201915b505050505081565b60008181526007602052604090208054606091906104bb90612161565b80601f01602080910402602001604051908101604052809291908181526020018280546104e790612161565b80156105345780601f1061050957610100808354040283529160200191610534565b820191906000526020600020905b81548152906001019060200180831161051757829003601f168201915b50505050509050919050565b6004546001600160a01b0316331461056a5760405162461bcd60e51b815260040161038e90612005565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161058157905050905081816000815181106105be576105be6121fa565b6020026020010151602001906001600160601b031690816001600160601b03168152505082816000815181106105f6576105f66121fa565b60209081029190910101516001600160a01b0390911690526106188482610c66565b50505050565b6004546001600160a01b031633146106485760405162461bcd60e51b815260040161038e90612005565b61066383838360405180602001604052806000815250610e81565b505050565b6000828152600360209081526040808320805482518185028101850190935280835284938493929190849084015b828210156106e557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610696565b50505050905060008151111561075e5780600081518110610708576107086121fa565b6020026020010151600001516127108260008151811061072a5761072a6121fa565b6020026020010151602001516001600160601b03168661074a9190612142565b6107549190612120565b9250925050610767565b60008092509250505b9250929050565b6001600160a01b03851633148061078a575061078a85336102d3565b6107f15760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161038e565b6107fe8585858585610f5b565b5050505050565b6060815183511461086a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161038e565b6000835167ffffffffffffffff81111561088657610886612210565b6040519080825280602002602001820160405280156108af578160200160208202803683370190505b50905060005b8451811015610927576108fa8582815181106108d3576108d36121fa565b60200260200101518583815181106108ed576108ed6121fa565b6020026020010151610327565b82828151811061090c5761090c6121fa565b6020908102919091010152610920816121c9565b90506108b5565b509392505050565b6004546001600160a01b031633146109595760405162461bcd60e51b815260040161038e90612005565b61096360006110f7565b565b6004546001600160a01b0316331461098f5760405162461bcd60e51b815260040161038e90612005565b600082815260076020908152604090912082516109ae9284019061175c565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516109df9190611f1b565b60405180910390a25050565b6006805461041d90612161565b610a03338383611149565b5050565b6007602052600090815260409020805461041d90612161565b606060036000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610aa457600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610a55565b505050509050919050565b6004546001600160a01b03163314610ad95760405162461bcd60e51b815260040161038e90612005565b6106638383836040518060200160405280600081525061122a565b6001600160a01b038516331480610b105750610b1085336102d3565b610b6e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161038e565b6107fe8585858585611375565b6004546001600160a01b03163314610ba55760405162461bcd60e51b815260040161038e90612005565b6001600160a01b038116610c0a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161038e565b610c13816110f7565b50565b60006001600160e01b03198216636cdb3d1360e11b1480610c4757506001600160e01b031982166303a24d0760e21b145b8061040a57506301ffc9a760e01b6001600160e01b031983161461040a565b6000805b8251811015610e175760006001600160a01b0316838281518110610c9057610c906121fa565b6020026020010151600001516001600160a01b03161415610cf35760405162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015260640161038e565b828181518110610d0557610d056121fa565b6020026020010151602001516001600160601b031660001415610d6a5760405162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015260640161038e565b828181518110610d7c57610d7c6121fa565b6020026020010151602001516001600160601b031682610d9c9190612108565b915060036000858152602001908152602001600020838281518110610dc357610dc36121fa565b6020908102919091018101518254600181018455600093845292829020815191909201516001600160601b0316600160a01b026001600160a01b039091161791015580610e0f816121c9565b915050610c6a565b506127108110610e775760405162461bcd60e51b815260206004820152602560248201527f526f79616c747920746f74616c2076616c75652073686f756c64206265203c20604482015264031303030360dc1b606482015260840161038e565b610663838361149f565b6001600160a01b038416610ea75760405162461bcd60e51b815260040161038e90612082565b336000610eb3856114dc565b90506000610ec0856114dc565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290610ef2908490612108565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610f5283600089898989611527565b50505050505050565b8151835114610f7c5760405162461bcd60e51b815260040161038e9061203a565b6001600160a01b038416610fa25760405162461bcd60e51b815260040161038e90611f76565b3360005b8451811015611089576000858281518110610fc357610fc36121fa565b602002602001015190506000858381518110610fe157610fe16121fa565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156110315760405162461bcd60e51b815260040161038e90611fbb565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061106e908490612108565b9250508190555050505080611082906121c9565b9050610fa6565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110d9929190611eed565b60405180910390a46110ef818787878787611692565b505050505050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156111bd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161038e565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166112505760405162461bcd60e51b815260040161038e90612082565b81518351146112715760405162461bcd60e51b815260040161038e9061203a565b3360005b845181101561130d57838181518110611290576112906121fa565b60200260200101516000808784815181106112ad576112ad6121fa565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546112f59190612108565b90915550819050611305816121c9565b915050611275565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161135e929190611eed565b60405180910390a46107fe81600087878787611692565b6001600160a01b03841661139b5760405162461bcd60e51b815260040161038e90611f76565b3360006113a7856114dc565b905060006113b4856114dc565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156113f75760405162461bcd60e51b815260040161038e90611fbb565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611434908490612108565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611494848a8a8a8a8a611527565b505050505050505050565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df82826040516114d09291906120c3565b60405180910390a15050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611516576115166121fa565b602090810291909101015292915050565b6001600160a01b0384163b156110ef5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061156b9089908990889088908890600401611e82565b602060405180830381600087803b15801561158557600080fd5b505af19250505080156115b5575060408051601f3d908101601f191682019092526115b291810190611c58565b60015b611662576115c1612226565b806308c379a014156115fb57506115d6612242565b806115e157506115fd565b8060405162461bcd60e51b815260040161038e9190611f1b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161038e565b6001600160e01b0319811663f23a6e6160e01b14610f525760405162461bcd60e51b815260040161038e90611f2e565b6001600160a01b0384163b156110ef5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906116d69089908990889088908890600401611e24565b602060405180830381600087803b1580156116f057600080fd5b505af1925050508015611720575060408051601f3d908101601f1916820190925261171d91810190611c58565b60015b61172c576115c1612226565b6001600160e01b0319811663bc197c8160e01b14610f525760405162461bcd60e51b815260040161038e90611f2e565b82805461176890612161565b90600052602060002090601f01602090048101928261178a57600085556117d0565b82601f106117a357805160ff19168380011785556117d0565b828001600101855582156117d0579182015b828111156117d05782518255916020019190600101906117b5565b506117dc9291506117e0565b5090565b5b808211156117dc57600081556001016117e1565b600067ffffffffffffffff83111561180f5761180f612210565b604051611826601f8501601f19166020018261219c565b80915083815284848401111561183b57600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261186457600080fd5b81356020611871826120e4565b60405161187e828261219c565b8381528281019150858301600585901b8701840188101561189e57600080fd5b60005b858110156118bd578135845292840192908401906001016118a1565b5090979650505050505050565b600082601f8301126118db57600080fd5b6118ea838335602085016117f5565b9392505050565b60006020828403121561190357600080fd5b81356118ea816122cc565b6000806040838503121561192157600080fd5b823561192c816122cc565b9150602083013561193c816122cc565b809150509250929050565b600080600080600060a0868803121561195f57600080fd5b853561196a816122cc565b9450602086013561197a816122cc565b9350604086013567ffffffffffffffff8082111561199757600080fd5b6119a389838a01611853565b945060608801359150808211156119b957600080fd5b6119c589838a01611853565b935060808801359150808211156119db57600080fd5b506119e8888289016118ca565b9150509295509295909350565b600080600080600060a08688031215611a0d57600080fd5b8535611a18816122cc565b94506020860135611a28816122cc565b93506040860135925060608601359150608086013567ffffffffffffffff811115611a5257600080fd5b6119e8888289016118ca565b600080600060608486031215611a7357600080fd5b8335611a7e816122cc565b9250602084013567ffffffffffffffff80821115611a9b57600080fd5b611aa787838801611853565b93506040860135915080821115611abd57600080fd5b50611aca86828701611853565b9150509250925092565b60008060408385031215611ae757600080fd5b8235611af2816122cc565b91506020830135801515811461193c57600080fd5b60008060408385031215611b1a57600080fd5b8235611b25816122cc565b946020939093013593505050565b600080600060608486031215611b4857600080fd5b8335611b53816122cc565b95602085013595506040909401359392505050565b60008060408385031215611b7b57600080fd5b823567ffffffffffffffff80821115611b9357600080fd5b818501915085601f830112611ba757600080fd5b81356020611bb4826120e4565b604051611bc1828261219c565b8381528281019150858301600585901b870184018b1015611be157600080fd5b600096505b84871015611c0d578035611bf9816122cc565b835260019690960195918301918301611be6565b5096505086013592505080821115611c2457600080fd5b50611c3185828601611853565b9150509250929050565b600060208284031215611c4d57600080fd5b81356118ea816122e1565b600060208284031215611c6a57600080fd5b81516118ea816122e1565b600060208284031215611c8757600080fd5b5035919050565b600080600060608486031215611ca357600080fd5b833592506020840135611cb5816122cc565b915060408401356001600160601b0381168114611cd157600080fd5b809150509250925092565b60008060408385031215611cef57600080fd5b82359150602083013567ffffffffffffffff811115611d0d57600080fd5b8301601f81018513611d1e57600080fd5b611c31858235602084016117f5565b60008060408385031215611d4057600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015611d9c57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101611d63565b509495945050505050565b600081518084526020808501945080840160005b83811015611d9c57815187529582019590820190600101611dbb565b6000815180845260005b81811015611dfd57602081850181015186830182015201611de1565b81811115611e0f576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611e5090830186611da7565b8281036060840152611e628186611da7565b90508281036080840152611e768185611dd7565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611ebc90830184611dd7565b979650505050505050565b6020815260006118ea6020830184611d4f565b6020815260006118ea6020830184611da7565b604081526000611f006040830185611da7565b8281036020840152611f128185611da7565b95945050505050565b6020815260006118ea6020830184611dd7565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b8281526040602082015260006120dc6040830184611d4f565b949350505050565b600067ffffffffffffffff8211156120fe576120fe612210565b5060051b60200190565b6000821982111561211b5761211b6121e4565b500190565b60008261213d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561215c5761215c6121e4565b500290565b600181811c9082168061217557607f821691505b6020821081141561219657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156121c2576121c2612210565b6040525050565b60006000198214156121dd576121dd6121e4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561223f5760046000803e5060005160e01c5b90565b600060443d10156122505790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561228057505050505090565b82850191508151818111156122985750505050505090565b843d87010160208285010111156122b25750505050505090565b6122c16020828601018761219c565b509095945050505050565b6001600160a01b0381168114610c1357600080fd5b6001600160e01b031981168114610c1357600080fdfea26469706673582212207d650c194af4ec3c0244f4700ed5a01b6b4da2f9f8dffb046f31999cde21268d64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012b5760003560e01c8063862440e2116100ad578063cad96cca11610071578063cad96cca14610292578063d81d0a15146102b2578063e985e9c5146102c5578063f242432a14610301578063f2fde38b1461031457600080fd5b8063862440e2146102365780638da5cb5b1461024957806395d89b4114610264578063a22cb4651461026c578063c87b56dd1461027f57600080fd5b8063156e29f6116100f4578063156e29f6146101b65780632a55205a146101c95780632eb2c2d6146101fb5780634e1273f41461020e578063715018a61461022e57600080fd5b8062fdd58e1461013057806301ffc9a71461015657806306fdde03146101795780630e89341c1461018e578063143094db146101a1575b600080fd5b61014361013e366004611b07565b610327565b6040519081526020015b60405180910390f35b610169610164366004611c3b565b6103bd565b604051901515815260200161014d565b610181610410565b60405161014d9190611f1b565b61018161019c366004611c75565b61049e565b6101b46101af366004611c8e565b610540565b005b6101b46101c4366004611b33565b61061e565b6101dc6101d7366004611d2d565b610668565b604080516001600160a01b03909316835260208301919091520161014d565b6101b4610209366004611947565b61076e565b61022161021c366004611b68565b610805565b60405161014d9190611eda565b6101b461092f565b6101b4610244366004611cdc565b610965565b6004546040516001600160a01b03909116815260200161014d565b6101816109eb565b6101b461027a366004611ad4565b6109f8565b61018161028d366004611c75565b610a07565b6102a56102a0366004611c75565b610a20565b60405161014d9190611ec7565b6101b46102c0366004611a5e565b610aaf565b6101696102d336600461190e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101b461030f3660046119f5565b610af4565b6101b46103223660046118f1565b610b7b565b60006001600160a01b0383166103975760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b0319821663152a902d60e11b14156103e057506001919050565b6001600160e01b0319821663152a902d60e11b141561040157506001919050565b61040a82610c16565b92915050565b6005805461041d90612161565b80601f016020809104026020016040519081016040528092919081815260200182805461044990612161565b80156104965780601f1061046b57610100808354040283529160200191610496565b820191906000526020600020905b81548152906001019060200180831161047957829003601f168201915b505050505081565b60008181526007602052604090208054606091906104bb90612161565b80601f01602080910402602001604051908101604052809291908181526020018280546104e790612161565b80156105345780601f1061050957610100808354040283529160200191610534565b820191906000526020600020905b81548152906001019060200180831161051757829003601f168201915b50505050509050919050565b6004546001600160a01b0316331461056a5760405162461bcd60e51b815260040161038e90612005565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161058157905050905081816000815181106105be576105be6121fa565b6020026020010151602001906001600160601b031690816001600160601b03168152505082816000815181106105f6576105f66121fa565b60209081029190910101516001600160a01b0390911690526106188482610c66565b50505050565b6004546001600160a01b031633146106485760405162461bcd60e51b815260040161038e90612005565b61066383838360405180602001604052806000815250610e81565b505050565b6000828152600360209081526040808320805482518185028101850190935280835284938493929190849084015b828210156106e557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610696565b50505050905060008151111561075e5780600081518110610708576107086121fa565b6020026020010151600001516127108260008151811061072a5761072a6121fa565b6020026020010151602001516001600160601b03168661074a9190612142565b6107549190612120565b9250925050610767565b60008092509250505b9250929050565b6001600160a01b03851633148061078a575061078a85336102d3565b6107f15760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161038e565b6107fe8585858585610f5b565b5050505050565b6060815183511461086a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161038e565b6000835167ffffffffffffffff81111561088657610886612210565b6040519080825280602002602001820160405280156108af578160200160208202803683370190505b50905060005b8451811015610927576108fa8582815181106108d3576108d36121fa565b60200260200101518583815181106108ed576108ed6121fa565b6020026020010151610327565b82828151811061090c5761090c6121fa565b6020908102919091010152610920816121c9565b90506108b5565b509392505050565b6004546001600160a01b031633146109595760405162461bcd60e51b815260040161038e90612005565b61096360006110f7565b565b6004546001600160a01b0316331461098f5760405162461bcd60e51b815260040161038e90612005565b600082815260076020908152604090912082516109ae9284019061175c565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516109df9190611f1b565b60405180910390a25050565b6006805461041d90612161565b610a03338383611149565b5050565b6007602052600090815260409020805461041d90612161565b606060036000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610aa457600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610a55565b505050509050919050565b6004546001600160a01b03163314610ad95760405162461bcd60e51b815260040161038e90612005565b6106638383836040518060200160405280600081525061122a565b6001600160a01b038516331480610b105750610b1085336102d3565b610b6e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161038e565b6107fe8585858585611375565b6004546001600160a01b03163314610ba55760405162461bcd60e51b815260040161038e90612005565b6001600160a01b038116610c0a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161038e565b610c13816110f7565b50565b60006001600160e01b03198216636cdb3d1360e11b1480610c4757506001600160e01b031982166303a24d0760e21b145b8061040a57506301ffc9a760e01b6001600160e01b031983161461040a565b6000805b8251811015610e175760006001600160a01b0316838281518110610c9057610c906121fa565b6020026020010151600001516001600160a01b03161415610cf35760405162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015260640161038e565b828181518110610d0557610d056121fa565b6020026020010151602001516001600160601b031660001415610d6a5760405162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015260640161038e565b828181518110610d7c57610d7c6121fa565b6020026020010151602001516001600160601b031682610d9c9190612108565b915060036000858152602001908152602001600020838281518110610dc357610dc36121fa565b6020908102919091018101518254600181018455600093845292829020815191909201516001600160601b0316600160a01b026001600160a01b039091161791015580610e0f816121c9565b915050610c6a565b506127108110610e775760405162461bcd60e51b815260206004820152602560248201527f526f79616c747920746f74616c2076616c75652073686f756c64206265203c20604482015264031303030360dc1b606482015260840161038e565b610663838361149f565b6001600160a01b038416610ea75760405162461bcd60e51b815260040161038e90612082565b336000610eb3856114dc565b90506000610ec0856114dc565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290610ef2908490612108565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610f5283600089898989611527565b50505050505050565b8151835114610f7c5760405162461bcd60e51b815260040161038e9061203a565b6001600160a01b038416610fa25760405162461bcd60e51b815260040161038e90611f76565b3360005b8451811015611089576000858281518110610fc357610fc36121fa565b602002602001015190506000858381518110610fe157610fe16121fa565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156110315760405162461bcd60e51b815260040161038e90611fbb565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061106e908490612108565b9250508190555050505080611082906121c9565b9050610fa6565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110d9929190611eed565b60405180910390a46110ef818787878787611692565b505050505050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156111bd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161038e565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166112505760405162461bcd60e51b815260040161038e90612082565b81518351146112715760405162461bcd60e51b815260040161038e9061203a565b3360005b845181101561130d57838181518110611290576112906121fa565b60200260200101516000808784815181106112ad576112ad6121fa565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546112f59190612108565b90915550819050611305816121c9565b915050611275565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161135e929190611eed565b60405180910390a46107fe81600087878787611692565b6001600160a01b03841661139b5760405162461bcd60e51b815260040161038e90611f76565b3360006113a7856114dc565b905060006113b4856114dc565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156113f75760405162461bcd60e51b815260040161038e90611fbb565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611434908490612108565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611494848a8a8a8a8a611527565b505050505050505050565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df82826040516114d09291906120c3565b60405180910390a15050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611516576115166121fa565b602090810291909101015292915050565b6001600160a01b0384163b156110ef5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061156b9089908990889088908890600401611e82565b602060405180830381600087803b15801561158557600080fd5b505af19250505080156115b5575060408051601f3d908101601f191682019092526115b291810190611c58565b60015b611662576115c1612226565b806308c379a014156115fb57506115d6612242565b806115e157506115fd565b8060405162461bcd60e51b815260040161038e9190611f1b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161038e565b6001600160e01b0319811663f23a6e6160e01b14610f525760405162461bcd60e51b815260040161038e90611f2e565b6001600160a01b0384163b156110ef5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906116d69089908990889088908890600401611e24565b602060405180830381600087803b1580156116f057600080fd5b505af1925050508015611720575060408051601f3d908101601f1916820190925261171d91810190611c58565b60015b61172c576115c1612226565b6001600160e01b0319811663bc197c8160e01b14610f525760405162461bcd60e51b815260040161038e90611f2e565b82805461176890612161565b90600052602060002090601f01602090048101928261178a57600085556117d0565b82601f106117a357805160ff19168380011785556117d0565b828001600101855582156117d0579182015b828111156117d05782518255916020019190600101906117b5565b506117dc9291506117e0565b5090565b5b808211156117dc57600081556001016117e1565b600067ffffffffffffffff83111561180f5761180f612210565b604051611826601f8501601f19166020018261219c565b80915083815284848401111561183b57600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261186457600080fd5b81356020611871826120e4565b60405161187e828261219c565b8381528281019150858301600585901b8701840188101561189e57600080fd5b60005b858110156118bd578135845292840192908401906001016118a1565b5090979650505050505050565b600082601f8301126118db57600080fd5b6118ea838335602085016117f5565b9392505050565b60006020828403121561190357600080fd5b81356118ea816122cc565b6000806040838503121561192157600080fd5b823561192c816122cc565b9150602083013561193c816122cc565b809150509250929050565b600080600080600060a0868803121561195f57600080fd5b853561196a816122cc565b9450602086013561197a816122cc565b9350604086013567ffffffffffffffff8082111561199757600080fd5b6119a389838a01611853565b945060608801359150808211156119b957600080fd5b6119c589838a01611853565b935060808801359150808211156119db57600080fd5b506119e8888289016118ca565b9150509295509295909350565b600080600080600060a08688031215611a0d57600080fd5b8535611a18816122cc565b94506020860135611a28816122cc565b93506040860135925060608601359150608086013567ffffffffffffffff811115611a5257600080fd5b6119e8888289016118ca565b600080600060608486031215611a7357600080fd5b8335611a7e816122cc565b9250602084013567ffffffffffffffff80821115611a9b57600080fd5b611aa787838801611853565b93506040860135915080821115611abd57600080fd5b50611aca86828701611853565b9150509250925092565b60008060408385031215611ae757600080fd5b8235611af2816122cc565b91506020830135801515811461193c57600080fd5b60008060408385031215611b1a57600080fd5b8235611b25816122cc565b946020939093013593505050565b600080600060608486031215611b4857600080fd5b8335611b53816122cc565b95602085013595506040909401359392505050565b60008060408385031215611b7b57600080fd5b823567ffffffffffffffff80821115611b9357600080fd5b818501915085601f830112611ba757600080fd5b81356020611bb4826120e4565b604051611bc1828261219c565b8381528281019150858301600585901b870184018b1015611be157600080fd5b600096505b84871015611c0d578035611bf9816122cc565b835260019690960195918301918301611be6565b5096505086013592505080821115611c2457600080fd5b50611c3185828601611853565b9150509250929050565b600060208284031215611c4d57600080fd5b81356118ea816122e1565b600060208284031215611c6a57600080fd5b81516118ea816122e1565b600060208284031215611c8757600080fd5b5035919050565b600080600060608486031215611ca357600080fd5b833592506020840135611cb5816122cc565b915060408401356001600160601b0381168114611cd157600080fd5b809150509250925092565b60008060408385031215611cef57600080fd5b82359150602083013567ffffffffffffffff811115611d0d57600080fd5b8301601f81018513611d1e57600080fd5b611c31858235602084016117f5565b60008060408385031215611d4057600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015611d9c57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101611d63565b509495945050505050565b600081518084526020808501945080840160005b83811015611d9c57815187529582019590820190600101611dbb565b6000815180845260005b81811015611dfd57602081850181015186830182015201611de1565b81811115611e0f576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611e5090830186611da7565b8281036060840152611e628186611da7565b90508281036080840152611e768185611dd7565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611ebc90830184611dd7565b979650505050505050565b6020815260006118ea6020830184611d4f565b6020815260006118ea6020830184611da7565b604081526000611f006040830185611da7565b8281036020840152611f128185611da7565b95945050505050565b6020815260006118ea6020830184611dd7565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b8281526040602082015260006120dc6040830184611d4f565b949350505050565b600067ffffffffffffffff8211156120fe576120fe612210565b5060051b60200190565b6000821982111561211b5761211b6121e4565b500190565b60008261213d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561215c5761215c6121e4565b500290565b600181811c9082168061217557607f821691505b6020821081141561219657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156121c2576121c2612210565b6040525050565b60006000198214156121dd576121dd6121e4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561223f5760046000803e5060005160e01c5b90565b600060443d10156122505790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561228057505050505090565b82850191508151818111156122985750505050505090565b843d87010160208285010111156122b25750505050505090565b6122c16020828601018761219c565b509095945050505050565b6001600160a01b0381168114610c1357600080fd5b6001600160e01b031981168114610c1357600080fdfea26469706673582212207d650c194af4ec3c0244f4700ed5a01b6b4da2f9f8dffb046f31999cde21268d64736f6c63430008070033

Deployed Bytecode Sourcemap

46260:1935:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30635:230;;;;;;:::i;:::-;;:::i;:::-;;;20456:25:1;;;20444:2;20429:18;30635:230:0;;;;;;;;47833:357;;;;;;:::i;:::-;;:::i;:::-;;;13650:14:1;;13643:22;13625:41;;13613:2;13598:18;47833:357:0;13485:187:1;46325:18:0;;;:::i;:::-;;;;;;;:::i;46981:101::-;;;;;;:::i;:::-;;:::i;47088:359::-;;;;;;:::i;:::-;;:::i;:::-;;46585:111;;;;;;:::i;:::-;;:::i;47453:373::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;12352:32:1;;;12334:51;;12416:2;12401:18;;12394:34;;;;12307:18;47453:373:0;12160:274:1;32573:442:0;;;;;;:::i;:::-;;:::i;31031:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9478:103::-;;;:::i;46851:124::-;;;;;;:::i;:::-;;:::i;8827:87::-;8900:6;;8827:87;;-1:-1:-1;;;;;8900:6:0;;;10702:51:1;;10690:2;10675:18;8827:87:0;10556:203:1;46348:20:0;;;:::i;31628:155::-;;;;;;:::i;:::-;;:::i;46438:39::-;;;;;;:::i;:::-;;:::i;5479:137::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46702:143::-;;;;;;:::i;:::-;;:::i;31855:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;31978:27:0;;;31954:4;31978:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;31855:168;32095:401;;;;;;:::i;:::-;;:::i;9736:201::-;;;;;;:::i;:::-;;:::i;30635:230::-;30721:7;-1:-1:-1;;;;;30749:21:0;;30741:76;;;;-1:-1:-1;;;30741:76:0;;15750:2:1;30741:76:0;;;15732:21:1;15789:2;15769:18;;;15762:30;15828:34;15808:18;;;15801:62;-1:-1:-1;;;15879:18:1;;;15872:40;15929:19;;30741:76:0;;;;;;;;;-1:-1:-1;30835:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;30835:22:0;;;;;;;;;;;;30635:230::o;47833:357::-;47927:4;-1:-1:-1;;;;;;47947:55:0;;-1:-1:-1;;;47947:55:0;47944:98;;;-1:-1:-1;48026:4:0;;47833:357;-1:-1:-1;47833:357:0:o;47944:98::-;-1:-1:-1;;;;;;48055:36:0;;-1:-1:-1;;;48055:36:0;48052:77;;;-1:-1:-1;48113:4:0;;47833:357;-1:-1:-1;47833:357:0:o;48052:77::-;48146:36;48170:11;48146:23;:36::i;:::-;48139:43;47833:357;-1:-1:-1;;47833:357:0:o;46325:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46981:101::-;47063:13;;;;:8;:13;;;;;47056:20;;47034:13;;47063;47056:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46981:101;;;:::o;47088:359::-;8900:6;;-1:-1:-1;;;;;8900:6:0;7578:10;9047:23;9039:68;;;;-1:-1:-1;;;9039:68:0;;;;;;;:::i;:::-;47259:21:::1;::::0;;47278:1:::1;47259:21:::0;;;;;::::1;::::0;;;47224:32:::1;::::0;47259:21:::1;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;47259:21:0::1;;;;;;;;;;;;;;;47224:56;;47313:22;47291:10;47302:1;47291:13;;;;;;;;:::i;:::-;;;;;;;:19;;:44;-1:-1:-1::0;;;;;47291:44:0::1;;;-1:-1:-1::0;;;;;47291:44:0::1;;;::::0;::::1;47370:27;47346:10;47357:1;47346:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;47346:51:0;;::::1;::::0;;47408:31:::1;47423:3:::0;47428:10;47408:14:::1;:31::i;:::-;47213:234;47088:359:::0;;;:::o;46585:111::-;8900:6;;-1:-1:-1;;;;;8900:6:0;7578:10;9047:23;9039:68;;;;-1:-1:-1;;;9039:68:0;;;;;;;:::i;:::-;46662:28:::1;46668:3;46673;46678:7;46662:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;46585:111:::0;;;:::o;47453:373::-;47547:16;47634:14;;;:9;:14;;;;;;;;47599:49;;;;;;;;;;;;;;;;;47547:16;;;;47599:49;47634:14;47599:49;47547:16;;47599:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47599:49:0;;;;-1:-1:-1;;;47599:49:0;;-1:-1:-1;;;;;47599:49:0;;;;;;;;;;;;;;;;;;;;;;47682:1;47662:10;:17;:21;47659:125;;;47708:10;47719:1;47708:13;;;;;;;;:::i;:::-;;;;;;;:21;;;47766:5;47745:10;47756:1;47745:13;;;;;;;;:::i;:::-;;;;;;;:19;;;-1:-1:-1;;;;;47732:32:0;:10;:32;;;;:::i;:::-;47731:40;;;;:::i;:::-;47700:72;;;;;;;47659:125;47810:1;47814;47794:22;;;;;47453:373;;;;;;:::o;32573:442::-;-1:-1:-1;;;;;32806:20:0;;7578:10;32806:20;;:60;;-1:-1:-1;32830:36:0;32847:4;7578:10;31855:168;:::i;32830:36::-;32784:160;;;;-1:-1:-1;;;32784:160:0;;16928:2:1;32784:160:0;;;16910:21:1;16967:2;16947:18;;;16940:30;17006:34;16986:18;;;16979:62;-1:-1:-1;;;17057:18:1;;;17050:48;17115:19;;32784:160:0;16726:414:1;32784:160:0;32955:52;32978:4;32984:2;32988:3;32993:7;33002:4;32955:22;:52::i;:::-;32573:442;;;;;:::o;31031:524::-;31187:16;31248:3;:10;31229:8;:15;:29;31221:83;;;;-1:-1:-1;;;31221:83:0;;18935:2:1;31221:83:0;;;18917:21:1;18974:2;18954:18;;;18947:30;19013:34;18993:18;;;18986:62;-1:-1:-1;;;19064:18:1;;;19057:39;19113:19;;31221:83:0;18733:405:1;31221:83:0;31317:30;31364:8;:15;31350:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31350:30:0;;31317:63;;31398:9;31393:122;31417:8;:15;31413:1;:19;31393:122;;;31473:30;31483:8;31492:1;31483:11;;;;;;;;:::i;:::-;;;;;;;31496:3;31500:1;31496:6;;;;;;;;:::i;:::-;;;;;;;31473:9;:30::i;:::-;31454:13;31468:1;31454:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;31434:3;;;:::i;:::-;;;31393:122;;;-1:-1:-1;31534:13:0;31031:524;-1:-1:-1;;;31031:524:0:o;9478:103::-;8900:6;;-1:-1:-1;;;;;8900:6:0;7578:10;9047:23;9039:68;;;;-1:-1:-1;;;9039:68:0;;;;;;;:::i;:::-;9543:30:::1;9570:1;9543:18;:30::i;:::-;9478:103::o:0;46851:124::-;8900:6;;-1:-1:-1;;;;;8900:6:0;7578:10;9047:23;9039:68;;;;-1:-1:-1;;;9039:68:0;;;;;;;:::i;:::-;46923:13:::1;::::0;;;:8:::1;:13;::::0;;;;;;;:20;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;46965:3;46955:14;46959:4;46955:14;;;;;;:::i;:::-;;;;;;;;46851:124:::0;;:::o;46348:20::-;;;;;;;:::i;31628:155::-;31723:52;7578:10;31756:8;31766;31723:18;:52::i;:::-;31628:155;;:::o;46438:39::-;;;;;;;;;;;;;;;;:::i;5479:137::-;5554:21;5595:9;:13;5605:2;5595:13;;;;;;;;;;;5588:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5588:20:0;;;;-1:-1:-1;;;5588:20:0;;-1:-1:-1;;;;;5588:20:0;;;;;;;;;;;;;;;;;;;;;;5479:137;;;:::o;46702:143::-;8900:6;;-1:-1:-1;;;;;8900:6:0;7578:10;9047:23;9039:68;;;;-1:-1:-1;;;9039:68:0;;;;;;;:::i;:::-;46804:35:::1;46815:3;46820:4;46826:8;46804:35;;;;;;;;;;;::::0;:10:::1;:35::i;32095:401::-:0;-1:-1:-1;;;;;32303:20:0;;7578:10;32303:20;;:60;;-1:-1:-1;32327:36:0;32344:4;7578:10;31855:168;:::i;32327:36::-;32281:151;;;;-1:-1:-1;;;32281:151:0;;15340:2:1;32281:151:0;;;15322:21:1;15379:2;15359:18;;;15352:30;15418:34;15398:18;;;15391:62;-1:-1:-1;;;15469:18:1;;;15462:39;15518:19;;32281:151:0;15138:405:1;32281:151:0;32443:45;32461:4;32467:2;32471;32475:6;32483:4;32443:17;:45::i;9736:201::-;8900:6;;-1:-1:-1;;;;;8900:6:0;7578:10;9047:23;9039:68;;;;-1:-1:-1;;;9039:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9825:22:0;::::1;9817:73;;;::::0;-1:-1:-1;;;9817:73:0;;14933:2:1;9817:73:0::1;::::0;::::1;14915:21:1::0;14972:2;14952:18;;;14945:30;15011:34;14991:18;;;14984:62;-1:-1:-1;;;15062:18:1;;;15055:36;15108:19;;9817:73:0::1;14731:402:1::0;9817:73:0::1;9901:28;9920:8;9901:18;:28::i;:::-;9736:201:::0;:::o;29658:310::-;29760:4;-1:-1:-1;;;;;;29797:41:0;;-1:-1:-1;;;29797:41:0;;:110;;-1:-1:-1;;;;;;;29855:52:0;;-1:-1:-1;;;29855:52:0;29797:110;:163;;;-1:-1:-1;;;;;;;;;;20848:40:0;;;29924:36;20739:157;4256:576;4346:18;;4375:329;4396:10;:17;4392:1;:21;4375:329;;;4476:3;-1:-1:-1;;;;;4443:37:0;:10;4454:1;4443:13;;;;;;;;:::i;:::-;;;;;;;:21;;;-1:-1:-1;;;;;4443:37:0;;;4435:77;;;;-1:-1:-1;;;4435:77:0;;20156:2:1;4435:77:0;;;20138:21:1;20195:2;20175:18;;;20168:30;20234:29;20214:18;;;20207:57;20281:18;;4435:77:0;19954:351:1;4435:77:0;4535:10;4546:1;4535:13;;;;;;;;:::i;:::-;;;;;;;:19;;;-1:-1:-1;;;;;4535:24:0;4558:1;4535:24;;4527:69;;;;-1:-1:-1;;;4527:69:0;;16161:2:1;4527:69:0;;;16143:21:1;;;16180:18;;;16173:30;16239:34;16219:18;;;16212:62;16291:18;;4527:69:0;15959:356:1;4527:69:0;4625:10;4636:1;4625:13;;;;;;;;:::i;:::-;;;;;;;:19;;;-1:-1:-1;;;;;4611:33:0;;;;;;:::i;:::-;;;4659:9;:13;4669:2;4659:13;;;;;;;;;;;4678:10;4689:1;4678:13;;;;;;;;:::i;:::-;;;;;;;;;;;;4659:33;;;;;;;-1:-1:-1;4659:33:0;;;;;;;;;;;;;;-1:-1:-1;;;;;4659:33:0;-1:-1:-1;;;4659:33:0;-1:-1:-1;;;;;4659:33:0;;;;;;;4415:3;;;;:::i;:::-;;;;4375:329;;;;4735:5;4722:10;:18;4714:68;;;;-1:-1:-1;;;4714:68:0;;18119:2:1;4714:68:0;;;18101:21:1;18158:2;18138:18;;;18131:30;18197:34;18177:18;;;18170:62;-1:-1:-1;;;18248:18:1;;;18241:35;18293:19;;4714:68:0;17917:401:1;4714:68:0;4793:31;4809:2;4813:10;4793:15;:31::i;37275:729::-;-1:-1:-1;;;;;37428:16:0;;37420:62;;;;-1:-1:-1;;;37420:62:0;;;;;;;:::i;:::-;7578:10;37495:16;37560:21;37578:2;37560:17;:21::i;:::-;37537:44;;37592:24;37619:25;37637:6;37619:17;:25::i;:::-;37592:52;;37736:9;:13;;;;;;;;;;;-1:-1:-1;;;;;37736:17:0;;;;;;;;;:27;;37757:6;;37736:9;:27;;37757:6;;37736:27;:::i;:::-;;;;-1:-1:-1;;37779:52:0;;;21047:25:1;;;21103:2;21088:18;;21081:34;;;-1:-1:-1;;;;;37779:52:0;;;;37812:1;;37779:52;;;;;;21020:18:1;37779:52:0;;;;;;;37922:74;37953:8;37971:1;37975:2;37979;37983:6;37991:4;37922:30;:74::i;:::-;37409:595;;;37275:729;;;;:::o;34811:1146::-;35038:7;:14;35024:3;:10;:28;35016:81;;;;-1:-1:-1;;;35016:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35116:16:0;;35108:66;;;;-1:-1:-1;;;35108:66:0;;;;;;;:::i;:::-;7578:10;35187:16;35304:421;35328:3;:10;35324:1;:14;35304:421;;;35360:10;35373:3;35377:1;35373:6;;;;;;;;:::i;:::-;;;;;;;35360:19;;35394:14;35411:7;35419:1;35411:10;;;;;;;;:::i;:::-;;;;;;;;;;;;35438:19;35460:13;;;;;;;;;;-1:-1:-1;;;;;35460:19:0;;;;;;;;;;;;35411:10;;-1:-1:-1;35502:21:0;;;;35494:76;;;;-1:-1:-1;;;35494:76:0;;;;;;;:::i;:::-;35614:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35614:19:0;;;;;;;;;;35636:20;;;35614:42;;35686:17;;;;;;;:27;;35636:20;;35614:9;35686:27;;35636:20;;35686:27;:::i;:::-;;;;;;;;35345:380;;;35340:3;;;;:::i;:::-;;;35304:421;;;;35772:2;-1:-1:-1;;;;;35742:47:0;35766:4;-1:-1:-1;;;;;35742:47:0;35756:8;-1:-1:-1;;;;;35742:47:0;;35776:3;35781:7;35742:47;;;;;;;:::i;:::-;;;;;;;;35874:75;35910:8;35920:4;35926:2;35930:3;35935:7;35944:4;35874:35;:75::i;:::-;35005:952;34811:1146;;;;;:::o;10097:191::-;10190:6;;;-1:-1:-1;;;;;10207:17:0;;;-1:-1:-1;;;;;;10207:17:0;;;;;;;10240:40;;10190:6;;;10207:17;10190:6;;10240:40;;10171:16;;10240:40;10160:128;10097:191;:::o;41687:331::-;41842:8;-1:-1:-1;;;;;41833:17:0;:5;-1:-1:-1;;;;;41833:17:0;;;41825:71;;;;-1:-1:-1;;;41825:71:0;;18525:2:1;41825:71:0;;;18507:21:1;18564:2;18544:18;;;18537:30;18603:34;18583:18;;;18576:62;-1:-1:-1;;;18654:18:1;;;18647:39;18703:19;;41825:71:0;18323:405:1;41825:71:0;-1:-1:-1;;;;;41907:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;41907:46:0;;;;;;;;;;41969:41;;13625::1;;;41969::0;;13598:18:1;41969:41:0;;;;;;;41687:331;;;:::o;38407:813::-;-1:-1:-1;;;;;38585:16:0;;38577:62;;;;-1:-1:-1;;;38577:62:0;;;;;;;:::i;:::-;38672:7;:14;38658:3;:10;:28;38650:81;;;;-1:-1:-1;;;38650:81:0;;;;;;;:::i;:::-;7578:10;38744:16;38867:103;38891:3;:10;38887:1;:14;38867:103;;;38948:7;38956:1;38948:10;;;;;;;;:::i;:::-;;;;;;;38923:9;:17;38933:3;38937:1;38933:6;;;;;;;;:::i;:::-;;;;;;;38923:17;;;;;;;;;;;:21;38941:2;-1:-1:-1;;;;;38923:21:0;-1:-1:-1;;;;;38923:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;38903:3:0;;-1:-1:-1;38903:3:0;;;:::i;:::-;;;;38867:103;;;;39023:2;-1:-1:-1;;;;;38987:53:0;39019:1;-1:-1:-1;;;;;38987:53:0;39001:8;-1:-1:-1;;;;;38987:53:0;;39027:3;39032:7;38987:53;;;;;;;:::i;:::-;;;;;;;;39131:81;39167:8;39185:1;39189:2;39193:3;39198:7;39207:4;39131:35;:81::i;33479:974::-;-1:-1:-1;;;;;33667:16:0;;33659:66;;;;-1:-1:-1;;;33659:66:0;;;;;;;:::i;:::-;7578:10;33738:16;33803:21;33821:2;33803:17;:21::i;:::-;33780:44;;33835:24;33862:25;33880:6;33862:17;:25::i;:::-;33835:52;;33973:19;33995:13;;;;;;;;;;;-1:-1:-1;;;;;33995:19:0;;;;;;;;;;34033:21;;;;34025:76;;;;-1:-1:-1;;;34025:76:0;;;;;;;:::i;:::-;34137:9;:13;;;;;;;;;;;-1:-1:-1;;;;;34137:19:0;;;;;;;;;;34159:20;;;34137:42;;34201:17;;;;;;;:27;;34159:20;;34137:9;34201:27;;34159:20;;34201:27;:::i;:::-;;;;-1:-1:-1;;34246:46:0;;;21047:25:1;;;21103:2;21088:18;;21081:34;;;-1:-1:-1;;;;;34246:46:0;;;;;;;;;;;;;;21020:18:1;34246:46:0;;;;;;;34377:68;34408:8;34418:4;34424:2;34428;34432:6;34440:4;34377:30;:68::i;:::-;33648:805;;;;33479:974;;;;;:::o;5624:141::-;5729:28;5742:2;5746:10;5729:28;;;;;;;:::i;:::-;;;;;;;;5624:141;;:::o;45953:198::-;46073:16;;;46087:1;46073:16;;;;;;;;;46019;;46048:22;;46073:16;;;;;;;;;;;;-1:-1:-1;46073:16:0;46048:41;;46111:7;46100:5;46106:1;46100:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;46138:5;45953:198;-1:-1:-1;;45953:198:0:o;44380:744::-;-1:-1:-1;;;;;44595:13:0;;11876:19;:23;44591:526;;44631:72;;-1:-1:-1;;;44631:72:0;;-1:-1:-1;;;;;44631:38:0;;;;;:72;;44670:8;;44680:4;;44686:2;;44690:6;;44698:4;;44631:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44631:72:0;;;;;;;;-1:-1:-1;;44631:72:0;;;;;;;;;;;;:::i;:::-;;;44627:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;44979:6;44972:14;;-1:-1:-1;;;44972:14:0;;;;;;;;:::i;44627:479::-;;;45028:62;;-1:-1:-1;;;45028:62:0;;14103:2:1;45028:62:0;;;14085:21:1;14142:2;14122:18;;;14115:30;14181:34;14161:18;;;14154:62;-1:-1:-1;;;14232:18:1;;;14225:50;14292:19;;45028:62:0;13901:416:1;44627:479:0;-1:-1:-1;;;;;;44753:55:0;;-1:-1:-1;;;44753:55:0;44749:154;;44833:50;;-1:-1:-1;;;44833:50:0;;;;;;;:::i;45132:813::-;-1:-1:-1;;;;;45372:13:0;;11876:19;:23;45368:570;;45408:79;;-1:-1:-1;;;45408:79:0;;-1:-1:-1;;;;;45408:43:0;;;;;:79;;45452:8;;45462:4;;45468:3;;45473:7;;45482:4;;45408:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45408:79:0;;;;;;;;-1:-1:-1;;45408:79:0;;;;;;;;;;;;:::i;:::-;;;45404:523;;;;:::i;:::-;-1:-1:-1;;;;;;45569:60:0;;-1:-1:-1;;;45569:60:0;45565:159;;45654:50;;-1:-1:-1;;;45654:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:735::-;541:5;594:3;587:4;579:6;575:17;571:27;561:55;;612:1;609;602:12;561:55;648:6;635:20;674:4;697:43;737:2;697:43;:::i;:::-;769:2;763:9;781:31;809:2;801:6;781:31;:::i;:::-;847:18;;;881:15;;;;-1:-1:-1;916:15:1;;;966:1;962:10;;;950:23;;946:32;;943:41;-1:-1:-1;940:61:1;;;997:1;994;987:12;940:61;1019:1;1029:163;1043:2;1040:1;1037:9;1029:163;;;1100:17;;1088:30;;1138:12;;;;1170;;;;1061:1;1054:9;1029:163;;;-1:-1:-1;1210:6:1;;487:735;-1:-1:-1;;;;;;;487:735:1:o;1227:220::-;1269:5;1322:3;1315:4;1307:6;1303:17;1299:27;1289:55;;1340:1;1337;1330:12;1289:55;1362:79;1437:3;1428:6;1415:20;1408:4;1400:6;1396:17;1362:79;:::i;:::-;1353:88;1227:220;-1:-1:-1;;;1227:220:1:o;1452:247::-;1511:6;1564:2;1552:9;1543:7;1539:23;1535:32;1532:52;;;1580:1;1577;1570:12;1532:52;1619:9;1606:23;1638:31;1663:5;1638:31;:::i;1704:388::-;1772:6;1780;1833:2;1821:9;1812:7;1808:23;1804:32;1801:52;;;1849:1;1846;1839:12;1801:52;1888:9;1875:23;1907:31;1932:5;1907:31;:::i;:::-;1957:5;-1:-1:-1;2014:2:1;1999:18;;1986:32;2027:33;1986:32;2027:33;:::i;:::-;2079:7;2069:17;;;1704:388;;;;;:::o;2097:1071::-;2251:6;2259;2267;2275;2283;2336:3;2324:9;2315:7;2311:23;2307:33;2304:53;;;2353:1;2350;2343:12;2304:53;2392:9;2379:23;2411:31;2436:5;2411:31;:::i;:::-;2461:5;-1:-1:-1;2518:2:1;2503:18;;2490:32;2531:33;2490:32;2531:33;:::i;:::-;2583:7;-1:-1:-1;2641:2:1;2626:18;;2613:32;2664:18;2694:14;;;2691:34;;;2721:1;2718;2711:12;2691:34;2744:61;2797:7;2788:6;2777:9;2773:22;2744:61;:::i;:::-;2734:71;;2858:2;2847:9;2843:18;2830:32;2814:48;;2887:2;2877:8;2874:16;2871:36;;;2903:1;2900;2893:12;2871:36;2926:63;2981:7;2970:8;2959:9;2955:24;2926:63;:::i;:::-;2916:73;;3042:3;3031:9;3027:19;3014:33;2998:49;;3072:2;3062:8;3059:16;3056:36;;;3088:1;3085;3078:12;3056:36;;3111:51;3154:7;3143:8;3132:9;3128:24;3111:51;:::i;:::-;3101:61;;;2097:1071;;;;;;;;:::o;3173:734::-;3277:6;3285;3293;3301;3309;3362:3;3350:9;3341:7;3337:23;3333:33;3330:53;;;3379:1;3376;3369:12;3330:53;3418:9;3405:23;3437:31;3462:5;3437:31;:::i;:::-;3487:5;-1:-1:-1;3544:2:1;3529:18;;3516:32;3557:33;3516:32;3557:33;:::i;:::-;3609:7;-1:-1:-1;3663:2:1;3648:18;;3635:32;;-1:-1:-1;3714:2:1;3699:18;;3686:32;;-1:-1:-1;3769:3:1;3754:19;;3741:33;3797:18;3786:30;;3783:50;;;3829:1;3826;3819:12;3783:50;3852:49;3893:7;3884:6;3873:9;3869:22;3852:49;:::i;3912:730::-;4039:6;4047;4055;4108:2;4096:9;4087:7;4083:23;4079:32;4076:52;;;4124:1;4121;4114:12;4076:52;4163:9;4150:23;4182:31;4207:5;4182:31;:::i;:::-;4232:5;-1:-1:-1;4288:2:1;4273:18;;4260:32;4311:18;4341:14;;;4338:34;;;4368:1;4365;4358:12;4338:34;4391:61;4444:7;4435:6;4424:9;4420:22;4391:61;:::i;:::-;4381:71;;4505:2;4494:9;4490:18;4477:32;4461:48;;4534:2;4524:8;4521:16;4518:36;;;4550:1;4547;4540:12;4518:36;;4573:63;4628:7;4617:8;4606:9;4602:24;4573:63;:::i;:::-;4563:73;;;3912:730;;;;;:::o;4647:416::-;4712:6;4720;4773:2;4761:9;4752:7;4748:23;4744:32;4741:52;;;4789:1;4786;4779:12;4741:52;4828:9;4815:23;4847:31;4872:5;4847:31;:::i;:::-;4897:5;-1:-1:-1;4954:2:1;4939:18;;4926:32;4996:15;;4989:23;4977:36;;4967:64;;5027:1;5024;5017:12;5068:315;5136:6;5144;5197:2;5185:9;5176:7;5172:23;5168:32;5165:52;;;5213:1;5210;5203:12;5165:52;5252:9;5239:23;5271:31;5296:5;5271:31;:::i;:::-;5321:5;5373:2;5358:18;;;;5345:32;;-1:-1:-1;;;5068:315:1:o;5388:383::-;5465:6;5473;5481;5534:2;5522:9;5513:7;5509:23;5505:32;5502:52;;;5550:1;5547;5540:12;5502:52;5589:9;5576:23;5608:31;5633:5;5608:31;:::i;:::-;5658:5;5710:2;5695:18;;5682:32;;-1:-1:-1;5761:2:1;5746:18;;;5733:32;;5388:383;-1:-1:-1;;;5388:383:1:o;5776:1288::-;5894:6;5902;5955:2;5943:9;5934:7;5930:23;5926:32;5923:52;;;5971:1;5968;5961:12;5923:52;6011:9;5998:23;6040:18;6081:2;6073:6;6070:14;6067:34;;;6097:1;6094;6087:12;6067:34;6135:6;6124:9;6120:22;6110:32;;6180:7;6173:4;6169:2;6165:13;6161:27;6151:55;;6202:1;6199;6192:12;6151:55;6238:2;6225:16;6260:4;6283:43;6323:2;6283:43;:::i;:::-;6355:2;6349:9;6367:31;6395:2;6387:6;6367:31;:::i;:::-;6433:18;;;6467:15;;;;-1:-1:-1;6502:11:1;;;6544:1;6540:10;;;6532:19;;6528:28;;6525:41;-1:-1:-1;6522:61:1;;;6579:1;6576;6569:12;6522:61;6601:1;6592:10;;6611:238;6625:2;6622:1;6619:9;6611:238;;;6696:3;6683:17;6713:31;6738:5;6713:31;:::i;:::-;6757:18;;6643:1;6636:9;;;;;6795:12;;;;6827;;6611:238;;;-1:-1:-1;6868:6:1;-1:-1:-1;;6912:18:1;;6899:32;;-1:-1:-1;;6943:16:1;;;6940:36;;;6972:1;6969;6962:12;6940:36;;6995:63;7050:7;7039:8;7028:9;7024:24;6995:63;:::i;:::-;6985:73;;;5776:1288;;;;;:::o;7069:245::-;7127:6;7180:2;7168:9;7159:7;7155:23;7151:32;7148:52;;;7196:1;7193;7186:12;7148:52;7235:9;7222:23;7254:30;7278:5;7254:30;:::i;7319:249::-;7388:6;7441:2;7429:9;7420:7;7416:23;7412:32;7409:52;;;7457:1;7454;7447:12;7409:52;7489:9;7483:16;7508:30;7532:5;7508:30;:::i;7573:180::-;7632:6;7685:2;7673:9;7664:7;7660:23;7656:32;7653:52;;;7701:1;7698;7691:12;7653:52;-1:-1:-1;7724:23:1;;7573:180;-1:-1:-1;7573:180:1:o;7758:511::-;7842:6;7850;7858;7911:2;7899:9;7890:7;7886:23;7882:32;7879:52;;;7927:1;7924;7917:12;7879:52;7963:9;7950:23;7940:33;;8023:2;8012:9;8008:18;7995:32;8036:31;8061:5;8036:31;:::i;:::-;8086:5;-1:-1:-1;8143:2:1;8128:18;;8115:32;-1:-1:-1;;;;;8178:40:1;;8166:53;;8156:81;;8233:1;8230;8223:12;8156:81;8256:7;8246:17;;;7758:511;;;;;:::o;8274:518::-;8352:6;8360;8413:2;8401:9;8392:7;8388:23;8384:32;8381:52;;;8429:1;8426;8419:12;8381:52;8465:9;8452:23;8442:33;;8526:2;8515:9;8511:18;8498:32;8553:18;8545:6;8542:30;8539:50;;;8585:1;8582;8575:12;8539:50;8608:22;;8661:4;8653:13;;8649:27;-1:-1:-1;8639:55:1;;8690:1;8687;8680:12;8639:55;8713:73;8778:7;8773:2;8760:16;8755:2;8751;8747:11;8713:73;:::i;8797:248::-;8865:6;8873;8926:2;8914:9;8905:7;8901:23;8897:32;8894:52;;;8942:1;8939;8932:12;8894:52;-1:-1:-1;;8965:23:1;;;9035:2;9020:18;;;9007:32;;-1:-1:-1;8797:248:1:o;9050:585::-;9107:3;9145:5;9139:12;9172:6;9167:3;9160:19;9198:4;9227:2;9222:3;9218:12;9211:19;;9264:2;9257:5;9253:14;9285:1;9295:315;9309:6;9306:1;9303:13;9295:315;;;9368:13;;9410:9;;-1:-1:-1;;;;;9406:35:1;9394:48;;9486:11;;9480:18;-1:-1:-1;;;;;9476:51:1;9462:12;;;9455:73;9557:4;9548:14;;;;9585:15;;;;9438:1;9324:9;9295:315;;;-1:-1:-1;9626:3:1;;9050:585;-1:-1:-1;;;;;9050:585:1:o;9640:435::-;9693:3;9731:5;9725:12;9758:6;9753:3;9746:19;9784:4;9813:2;9808:3;9804:12;9797:19;;9850:2;9843:5;9839:14;9871:1;9881:169;9895:6;9892:1;9889:13;9881:169;;;9956:13;;9944:26;;9990:12;;;;10025:15;;;;9917:1;9910:9;9881:169;;10080:471;10121:3;10159:5;10153:12;10186:6;10181:3;10174:19;10211:1;10221:162;10235:6;10232:1;10229:13;10221:162;;;10297:4;10353:13;;;10349:22;;10343:29;10325:11;;;10321:20;;10314:59;10250:12;10221:162;;;10401:6;10398:1;10395:13;10392:87;;;10467:1;10460:4;10451:6;10446:3;10442:16;10438:27;10431:38;10392:87;-1:-1:-1;10533:2:1;10512:15;-1:-1:-1;;10508:29:1;10499:39;;;;10540:4;10495:50;;10080:471;-1:-1:-1;;10080:471:1:o;10764:826::-;-1:-1:-1;;;;;11161:15:1;;;11143:34;;11213:15;;11208:2;11193:18;;11186:43;11123:3;11260:2;11245:18;;11238:31;;;11086:4;;11292:57;;11329:19;;11321:6;11292:57;:::i;:::-;11397:9;11389:6;11385:22;11380:2;11369:9;11365:18;11358:50;11431:44;11468:6;11460;11431:44;:::i;:::-;11417:58;;11524:9;11516:6;11512:22;11506:3;11495:9;11491:19;11484:51;11552:32;11577:6;11569;11552:32;:::i;:::-;11544:40;10764:826;-1:-1:-1;;;;;;;;10764:826:1:o;11595:560::-;-1:-1:-1;;;;;11892:15:1;;;11874:34;;11944:15;;11939:2;11924:18;;11917:43;11991:2;11976:18;;11969:34;;;12034:2;12019:18;;12012:34;;;11854:3;12077;12062:19;;12055:32;;;11817:4;;12104:45;;12129:19;;12121:6;12104:45;:::i;:::-;12096:53;11595:560;-1:-1:-1;;;;;;;11595:560:1:o;12439:305::-;12658:2;12647:9;12640:21;12621:4;12678:60;12734:2;12723:9;12719:18;12711:6;12678:60;:::i;12749:261::-;12928:2;12917:9;12910:21;12891:4;12948:56;13000:2;12989:9;12985:18;12977:6;12948:56;:::i;13015:465::-;13272:2;13261:9;13254:21;13235:4;13298:56;13350:2;13339:9;13335:18;13327:6;13298:56;:::i;:::-;13402:9;13394:6;13390:22;13385:2;13374:9;13370:18;13363:50;13430:44;13467:6;13459;13430:44;:::i;:::-;13422:52;13015:465;-1:-1:-1;;;;;13015:465:1:o;13677:219::-;13826:2;13815:9;13808:21;13789:4;13846:44;13886:2;13875:9;13871:18;13863:6;13846:44;:::i;14322:404::-;14524:2;14506:21;;;14563:2;14543:18;;;14536:30;14602:34;14597:2;14582:18;;14575:62;-1:-1:-1;;;14668:2:1;14653:18;;14646:38;14716:3;14701:19;;14322:404::o;16320:401::-;16522:2;16504:21;;;16561:2;16541:18;;;16534:30;16600:34;16595:2;16580:18;;16573:62;-1:-1:-1;;;16666:2:1;16651:18;;16644:35;16711:3;16696:19;;16320:401::o;17145:406::-;17347:2;17329:21;;;17386:2;17366:18;;;17359:30;17425:34;17420:2;17405:18;;17398:62;-1:-1:-1;;;17491:2:1;17476:18;;17469:40;17541:3;17526:19;;17145:406::o;17556:356::-;17758:2;17740:21;;;17777:18;;;17770:30;17836:34;17831:2;17816:18;;17809:62;17903:2;17888:18;;17556:356::o;19143:404::-;19345:2;19327:21;;;19384:2;19364:18;;;19357:30;19423:34;19418:2;19403:18;;19396:62;-1:-1:-1;;;19489:2:1;19474:18;;19467:38;19537:3;19522:19;;19143:404::o;19552:397::-;19754:2;19736:21;;;19793:2;19773:18;;;19766:30;19832:34;19827:2;19812:18;;19805:62;-1:-1:-1;;;19898:2:1;19883:18;;19876:31;19939:3;19924:19;;19552:397::o;20492:376::-;20739:6;20728:9;20721:25;20782:2;20777;20766:9;20762:18;20755:30;20702:4;20802:60;20858:2;20847:9;20843:18;20835:6;20802:60;:::i;:::-;20794:68;20492:376;-1:-1:-1;;;;20492:376:1:o;21126:183::-;21186:4;21219:18;21211:6;21208:30;21205:56;;;21241:18;;:::i;:::-;-1:-1:-1;21286:1:1;21282:14;21298:4;21278:25;;21126:183::o;21314:128::-;21354:3;21385:1;21381:6;21378:1;21375:13;21372:39;;;21391:18;;:::i;:::-;-1:-1:-1;21427:9:1;;21314:128::o;21447:217::-;21487:1;21513;21503:132;;21557:10;21552:3;21548:20;21545:1;21538:31;21592:4;21589:1;21582:15;21620:4;21617:1;21610:15;21503:132;-1:-1:-1;21649:9:1;;21447:217::o;21669:168::-;21709:7;21775:1;21771;21767:6;21763:14;21760:1;21757:21;21752:1;21745:9;21738:17;21734:45;21731:71;;;21782:18;;:::i;:::-;-1:-1:-1;21822:9:1;;21669:168::o;21842:380::-;21921:1;21917:12;;;;21964;;;21985:61;;22039:4;22031:6;22027:17;22017:27;;21985:61;22092:2;22084:6;22081:14;22061:18;22058:38;22055:161;;;22138:10;22133:3;22129:20;22126:1;22119:31;22173:4;22170:1;22163:15;22201:4;22198:1;22191:15;22055:161;;21842:380;;;:::o;22227:249::-;22337:2;22318:13;;-1:-1:-1;;22314:27:1;22302:40;;22372:18;22357:34;;22393:22;;;22354:62;22351:88;;;22419:18;;:::i;:::-;22455:2;22448:22;-1:-1:-1;;22227:249:1:o;22481:135::-;22520:3;-1:-1:-1;;22541:17:1;;22538:43;;;22561:18;;:::i;:::-;-1:-1:-1;22608:1:1;22597:13;;22481:135::o;22621:127::-;22682:10;22677:3;22673:20;22670:1;22663:31;22713:4;22710:1;22703:15;22737:4;22734:1;22727:15;22753:127;22814:10;22809:3;22805:20;22802:1;22795:31;22845:4;22842:1;22835:15;22869:4;22866:1;22859:15;22885:127;22946:10;22941:3;22937:20;22934:1;22927:31;22977:4;22974:1;22967:15;23001:4;22998:1;22991:15;23017:179;23052:3;23094:1;23076:16;23073:23;23070:120;;;23140:1;23137;23134;23119:23;-1:-1:-1;23177:1:1;23171:8;23166:3;23162:18;23070:120;23017:179;:::o;23201:671::-;23240:3;23282:4;23264:16;23261:26;23258:39;;;23201:671;:::o;23258:39::-;23324:2;23318:9;-1:-1:-1;;23389:16:1;23385:25;;23382:1;23318:9;23361:50;23440:4;23434:11;23464:16;23499:18;23570:2;23563:4;23555:6;23551:17;23548:25;23543:2;23535:6;23532:14;23529:45;23526:58;;;23577:5;;;;;23201:671;:::o;23526:58::-;23614:6;23608:4;23604:17;23593:28;;23650:3;23644:10;23677:2;23669:6;23666:14;23663:27;;;23683:5;;;;;;23201:671;:::o;23663:27::-;23767:2;23748:16;23742:4;23738:27;23734:36;23727:4;23718:6;23713:3;23709:16;23705:27;23702:69;23699:82;;;23774:5;;;;;;23201:671;:::o;23699:82::-;23790:57;23841:4;23832:6;23824;23820:19;23816:30;23810:4;23790:57;:::i;:::-;-1:-1:-1;23863:3:1;;23201:671;-1:-1:-1;;;;;23201:671:1:o;23877:131::-;-1:-1:-1;;;;;23952:31:1;;23942:42;;23932:70;;23998:1;23995;23988:12;24013:131;-1:-1:-1;;;;;;24087:32:1;;24077:43;;24067:71;;24134:1;24131;24124:12

Swarm Source

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