MATIC Price: $0.361789 (-20.03%)
 

Overview

Max Total Supply

0 NFT

Holders

149,842

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
Polygonscan: Donate
0x71c7656ec7ab88b098defb751b7401b5f6d8976f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
MaticArt1155

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : MaticArt1155.sol
/**
 *Submitted for verification at polygonscan.com on 2022-01-06
*/

// SPDX-License-Identifier:UNLICENSED
pragma solidity ^0.8.4;

library Strings {

    function toString(uint256 value) internal pure returns (string memory) {

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

library EnumerableMap {

    struct MapEntry {
        bytes32 _key;
        bytes32 _value;
    }

    struct Map {
        MapEntry[] _entries;

        mapping (bytes32 => uint256) _indexes;
    }

    function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex == 0) { // Equivalent to !contains(map, key)
            map._entries.push(MapEntry({ _key: key, _value: value }));
            map._indexes[key] = map._entries.length;
            return true;
        } else {
            map._entries[keyIndex - 1]._value = value;
            return false;
        }
    }

    function _remove(Map storage map, bytes32 key) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex != 0) { // Equivalent to contains(map, key)
            uint256 toDeleteIndex = keyIndex - 1;
            uint256 lastIndex = map._entries.length - 1;
            MapEntry storage lastEntry = map._entries[lastIndex];

            map._entries[toDeleteIndex] = lastEntry;
            map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based

            map._entries.pop();

            delete map._indexes[key];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Map storage map, bytes32 key) private view returns (bool) {
        return map._indexes[key] != 0;
    }

    function _length(Map storage map) private view returns (uint256) {
        return map._entries.length;
    }

    function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {
        require(map._entries.length > index, "EnumerableMap: index out of bounds");

        MapEntry storage entry = map._entries[index];
        return (entry._key, entry._value);
    }

    function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)
        return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    struct UintToAddressMap {
        Map _inner;
    }

    function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {
        return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
    }

    function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {
        return _remove(map._inner, bytes32(key));
    }

    function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {
        return _contains(map._inner, bytes32(key));
    }

    function length(UintToAddressMap storage map) internal view returns (uint256) {
        return _length(map._inner);
    }

    function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {
        (bytes32 key, bytes32 value) = _at(map._inner, index);
        return (uint256(key), address(uint160(uint256(value))));
    }

    function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {
        (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
        return (success, address(uint160(uint256(value))));
    }

    function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key)))));
    }

    function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));
    }
}

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

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

interface IERC1155 is IERC165 {

    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    event tokenBaseURI(string value);


    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function royaltyFee(uint256 tokenId) external view returns(uint256);
    function getCreator(uint256 tokenId) external view returns(address);
    function tokenURI(uint256 tokenId) external view returns (string memory);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

interface IERC1155MetadataURI is IERC1155 {
}

interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external
        returns(bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external
        returns(bytes4);
}

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

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

contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
*/

library SafeMath {

    /**
    * @dev Adds two numbers, throws on overflow.
    */

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    /**
    * @dev Integer modulo of two numbers, truncating the remainder.
    */

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    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");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    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");
    }

    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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

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

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using SafeMath for uint256;
    using Address for address;
    using Strings for uint256;
    using EnumerableMap for EnumerableMap.UintToAddressMap;

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

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

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    EnumerableMap.UintToAddressMap private _tokenOwners;

    string private _name;

    string private _symbol;

    bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;

    bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;

        _registerInterface(_INTERFACE_ID_ERC1155);
        _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
        * @dev Internal function to set the token URI for a given token.
        * Reverts if the token ID does not exist.
        * @param tokenId uint256 ID of the token to set its URI
        * @param uri string URI to assign
    */    

    function _setTokenURI(uint256 tokenId, string memory uri) internal {
        _tokenURIs[tokenId] = uri;
    }

    /**
        @notice Get the royalty associated with tokenID.
        @param tokenId     ID of the Token.
        @return        royaltyFee of given ID.
     */

    function royaltyFee(uint256 tokenId) public view override returns(uint256) {
        return _royaltyFee[tokenId];
    }

    /**
        @notice Get the creator of given tokenID.
        @param tokenId     ID of the Token.
        @return        creator of given ID.
     */    

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

    /**
        * @dev Internal function to set the token URI for all the tokens.
        * @param _tokenURIPrefix string memory _tokenURIPrefix of the tokens.
    */   

    function _setTokenURIPrefix(string memory _tokenURIPrefix) internal {
        tokenURIPrefix = _tokenURIPrefix;
        emit tokenBaseURI(_tokenURIPrefix);
    }

    /**
        * @dev Returns an URI for a given token ID.
        * Throws if the token ID does not exist. May return an empty string.
        * @param tokenId uint256 ID of the token to query
    */    

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC1155Metadata: URI query for nonexistent token");
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = tokenURIPrefix;

        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        return string(abi.encodePacked(base, tokenId.toString()));
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _tokenOwners.contains(tokenId);
    }

    /**
        @notice Get the balance of an account's Tokens.
        @param account  The address of the token holder
        @param tokenId     ID of the Token
        @return        The owner's balance of the Token type requested
     */

    function balanceOf(address account, uint256 tokenId) public view override returns (uint256) {
        require(_exists(tokenId), "ERC1155Metadata: balance query for nonexistent token");
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[tokenId][account];
    }


    /**
        @notice Get the balance of multiple account/token pairs
        @param accounts The addresses of the token holders
        @param ids    ID of the Tokens
        @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
     */

    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory ids
    )
        public
        view
        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) {
            require(accounts[i] != address(0), "ERC1155: batch balance query for the zero address");
            batchBalances[i] = _balances[ids[i]][accounts[i]];
        }

        return batchBalances;
    }

    /**
        @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
        @dev MUST emit the ApprovalForAll event on success.
        @param operator  Address to add to the set of authorized operators
        @param approved  True if the operator is approved, false to revoke approval
    */

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

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

    /**
        @notice Queries the approval status of an operator for a given owner.
        @param account     The owner of the Tokens
        @param operator  Address of authorized operator
        @return           True if the operator is approved, false if not
    */

    function isApprovedForAll(address account, address operator) public view override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
        @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
        MUST revert on any other error.
        MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
        After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenId      ID of the token type
        @param amount   Transfer amount
        @param data    Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
    */    

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        uint256 amount,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        address operator = _msgSender();

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

        _balances[tokenId][from] = _balances[tokenId][from].sub(amount, "ERC1155: insufficient balance for transfer");
        _balances[tokenId][to] = _balances[tokenId][to].add(amount);

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

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

    /**
        @notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if length of `_ids` is not the same as length of `_values`.
        MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient.
        MUST revert on any other error.
        MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard).
        Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
        After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenIds     IDs of each token type (order and length must match _values array)
        @param amounts  Transfer amounts per token type (order and length must match _ids array)
        @param data    Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to`
    */

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

        address operator = _msgSender();

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

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

            _balances[tokenId][from] = _balances[tokenId][from].sub(
                amount,
                "ERC1155: insufficient balance for transfer"
            );
            _balances[tokenId][to] = _balances[tokenId][to].add(amount);
        }

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

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



    /**
        * @dev Internal function to mint a new token.
        * Reverts if the given token ID already exists.
        * @param tokenId uint256 ID of the token to be minted
        * @param _supply uint256 supply of the token to be minted
        * @param _uri string memory URI of the token to be minted
        * @param _fee uint256 royalty of the token to be minted
    */

    function _mint(uint256 tokenId, uint256 _supply, string memory _uri, uint256 _fee) internal {
        require(!_exists(tokenId), "ERC1155: token already minted");
        require(_supply != 0, "Supply should be positive");
        require(bytes(_uri).length > 0, "uri should be set");

        creators[tokenId] = msg.sender;
        _tokenOwners.set(tokenId, msg.sender);
        _royaltyFee[tokenId] = _fee;
        _balances[tokenId][msg.sender] = _supply;
        _setTokenURI(tokenId, _uri);

        emit TransferSingle(msg.sender, address(0x0), msg.sender, tokenId, _supply);
        emit URI(_uri, tokenId);
    }

    /**
        * @dev version of {_mint}.
        *
        * Requirements:
        *
        * - `tokenIds` and `amounts` must have the same length.
    */

    function _mintBatch(address to, uint256[] memory tokenIds, uint256[] memory amounts, bytes memory data) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

        for (uint i = 0; i < tokenIds.length; i++) {
            _balances[tokenIds[i]][to] = amounts[i].add(_balances[tokenIds[i]][to]);
        }

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

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

    /**
        * @dev Internal function to burn a specific token.
        * Reverts if the token does not exist.
        * Deprecated, use {ERC721-_burn} instead.
        * @param account owner of the token to burn
        * @param tokenId uint256 ID of the token being burned
        * @param amount uint256 amount of supply being burned
    */    

    function _burn(address account, uint256 tokenId, uint256 amount) internal virtual {
        require(_exists(tokenId), "ERC1155Metadata: burn query for nonexistent token");
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

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

        _balances[tokenId][account] = _balances[tokenId][account].sub(
            amount,
            "ERC_holderTokens1155: burn amount exceeds balance"
        );


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


    /**
        * @dev version of {_burn}.
        * Requirements:
        * - `ids` and `amounts` must have the same length.
    */

    function _burnBatch(address account, uint256[] memory tokenIds, uint256[] memory amounts) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

        for (uint i = 0; i < tokenIds.length; i++) {
            _balances[tokenIds[i]][account] = _balances[tokenIds[i]][account].sub(
                amounts[i],
                "ERC1155: burn amount exceeds balance"
            );
        }

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


    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        internal virtual
    { }

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

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

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

        return array;
    }
}

contract MaticArt1155 is ERC1155 {

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

    uint256 newItemId = 1;
    address public owner;

    struct Sign {
        uint8 v;
        bytes32 r;
        bytes32 s;
    }

    constructor (string memory name, string memory symbol, string memory tokenURIPrefix) ERC1155 (name, symbol) {
        owner = msg.sender;
        _setTokenURIPrefix(tokenURIPrefix);

    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    /** @dev change the Ownership from current owner to newOwner address
        @param newOwner : newOwner address */    

    function transferOwnership(address newOwner) public onlyOwner returns(bool){
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(newOwner, owner);
        owner = newOwner;
        return true;
    }

    /** @dev verify the tokenURI that should be verified by owner of the contract.
        *requirements: signer must be owner of the contract
        @param tokenURI string memory URI of token to be minted.
        @param sign struct combination of uint8, bytes32, bytes 32 are v, r, s.
        note : sign value must be in the order of v, r, s.

    */

    function verifySign(string memory tokenURI, address caller, Sign memory sign) internal view {
        bytes32 hash = keccak256(abi.encodePacked(this, caller, tokenURI));
        require(owner == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), sign.v, sign.r, sign.s), "Owner sign verification failed");
    }

    function mint(string memory uri, uint256 supply, uint256 fee, Sign memory sign)  public {
        verifySign(uri, msg.sender, sign);
        _mint(newItemId, supply, uri,fee);
        newItemId = newItemId+1;
    }

    function setBaseURI(string memory _baseURI) public onlyOwner{
         _setTokenURIPrefix(_baseURI);
    }

    function burn(uint256 tokenId, uint256 supply) public {
        _burn(msg.sender, tokenId, supply);
    }

    function burnBatch(uint256[] memory tokenIds, uint256[] memory amounts) public {
        _burnBatch(msg.sender, tokenIds, amounts);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"tokenURIPrefix","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"tokenBaseURI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct MaticArt1155.Sign","name":"sign","type":"tuple"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"royaltyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","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":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURIPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526001600b553480156200001657600080fd5b5060405162002c4538038062002c458339810160408190526200003991620002d0565b82826200004d6301ffc9a760e01b620000c5565b8151620000629060099060208501906200019b565b5080516200007890600a9060208401906200019b565b506200008b636cdb3d1360e11b620000c5565b6200009d6303a24d0760e21b620000c5565b5050600c80546001600160a01b03191633179055620000bc8162000149565b50505062000418565b6001600160e01b03198082161415620001245760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b80516200015e9060059060208401906200019b565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc306816040516200019091906200035d565b60405180910390a150565b828054620001a990620003c5565b90600052602060002090601f016020900481019282620001cd576000855562000218565b82601f10620001e857805160ff191683800117855562000218565b8280016001018555821562000218579182015b8281111562000218578251825591602001919060010190620001fb565b50620002269291506200022a565b5090565b5b808211156200022657600081556001016200022b565b600082601f83011262000252578081fd5b81516001600160401b03808211156200026f576200026f62000402565b604051601f8301601f19908116603f011681019082821181831017156200029a576200029a62000402565b81604052838152866020858801011115620002b3578485fd5b620002c684602083016020890162000392565b9695505050505050565b600080600060608486031215620002e5578283fd5b83516001600160401b0380821115620002fc578485fd5b6200030a8783880162000241565b9450602086015191508082111562000320578384fd5b6200032e8783880162000241565b9350604086015191508082111562000344578283fd5b50620003538682870162000241565b9150509250925092565b60208152600082518060208401526200037e81604085016020870162000392565b601f01601f19169190910160400192915050565b60005b83811015620003af57818101518382015260200162000395565b83811115620003bf576000848401525b50505050565b600181811c90821680620003da57607f821691505b60208210811415620003fc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61281d80620004286000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c8063a22cb465116100ad578063ca1daf8811610071578063ca1daf881461028c578063d48e638a1461029f578063e985e9c5146102c8578063f242432a14610304578063f2fde38b1461031757600080fd5b8063a22cb4651461022b578063b390c0ab1461023e578063c0ac998314610251578063c57dc23514610259578063c87b56dd1461027957600080fd5b80634e1273f4116100f45780634e1273f4146101b257806355f804b3146101d257806383ca4b6f146101e55780638da5cb5b146101f857806395d89b411461022357600080fd5b8062fdd58e1461012557806301ffc9a71461014b57806306fdde03146101885780632eb2c2d61461019d575b600080fd5b610138610133366004611fa7565b61032a565b6040519081526020015b60405180910390f35b6101786101593660046120e3565b6001600160e01b03191660009081526020819052604090205460ff1690565b6040519015158152602001610142565b610190610435565b60405161014291906123e0565b6101b06101ab366004611e66565b6104c7565b005b6101c56101c0366004611fd0565b610736565b604051610142919061239f565b6101b06101e036600461211b565b610968565b6101b06101f336600461209a565b6109ce565b600c5461020b906001600160a01b031681565b6040516001600160a01b039091168152602001610142565b6101906109dd565b6101b0610239366004611f6d565b6109ec565b6101b061024c366004612200565b610ac3565b610190610ace565b6101386102673660046121e8565b60009081526002602052604090205490565b6101906102873660046121e8565b610b5c565b6101b061029a36600461214d565b610d52565b61020b6102ad3660046121e8565b6000908152600160205260409020546001600160a01b031690565b6101786102d6366004611e34565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6101b0610312366004611f0b565b610d82565b610178610325366004611e1a565b610f35565b600061033582611056565b6103a35760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661040d5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161039a565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b606060098054610444906125b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610470906125b4565b80156104bd5780601f10610492576101008083540402835291602001916104bd565b820191906000526020600020905b8154815290600101906020018083116104a057829003601f168201915b5050505050905090565b81518351146104e85760405162461bcd60e51b815260040161039a906124c3565b6001600160a01b03841661050e5760405162461bcd60e51b815260040161039a9061243b565b6001600160a01b03851633148061052a575061052a85336102d6565b6105915760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161039a565b3360005b84518110156106c85760008582815181106105c057634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106105ec57634e487b7160e01b600052603260045260246000fd5b60200260200101519050610659816040518060600160405280602a815260200161278d602a91396003600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546110699092919063ffffffff16565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a168152205461069090826110a5565b60009283526003602090815260408085206001600160a01b038c16865290915290922091909155506106c181612640565b9050610595565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516107189291906123b2565b60405180910390a461072e818787878787611104565b505050505050565b6060815183511461079b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161039a565b600083516001600160401b038111156107c457634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107ed578160200160208202803683370190505b50905060005b84518110156109605760006001600160a01b031685828151811061082757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108a05760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161039a565b600360008583815181106108c457634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060008683815181106108fc57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061094557634e487b7160e01b600052603260045260246000fd5b602090810291909101015261095981612640565b90506107f3565b509392505050565b600c546001600160a01b031633146109c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6109cb81611278565b50565b6109d93383836112c6565b5050565b6060600a8054610444906125b4565b336001600160a01b0383161415610a575760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161039a565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109d93383836114ae565b60058054610adb906125b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610b07906125b4565b8015610b545780601f10610b2957610100808354040283529160200191610b54565b820191906000526020600020905b815481529060010190602001808311610b3757829003601f168201915b505050505081565b6060610b6782611056565b610bcc5760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b606482015260840161039a565b60008281526006602052604081208054610be5906125b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c11906125b4565b8015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b820191906000526020600020905b815481529060010190602001808311610c4157829003601f168201915b50505050509050600060058054610c74906125b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca0906125b4565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b50505050509050805160001415610d05575092915050565b815115610d37578082604051602001610d1f9291906122cd565b60405160208183030381529060405292505050919050565b80610d418561161b565b604051602001610d1f9291906122cd565b610d5d84338361174d565b610d6b600b54848685611896565b600b54610d7990600161252e565b600b5550505050565b6001600160a01b038416610da85760405162461bcd60e51b815260040161039a9061243b565b6001600160a01b038516331480610dc45750610dc485336102d6565b610e225760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161039a565b33610e42818787610e3288611a5c565b610e3b88611a5c565b5050505050565b610e89836040518060600160405280602a815260200161278d602a913960008781526003602090815260408083206001600160a01b038d1684529091529020549190611069565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610ec090846110a5565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461072e818787878787611ab5565b600c546000906001600160a01b03163314610f925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6001600160a01b038216610ff75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039a565b600c546040516001600160a01b03918216918416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600c80546001600160a01b0319166001600160a01b03831617905560015b919050565b6000611063600783611b7f565b92915050565b6000818484111561108d5760405162461bcd60e51b815260040161039a91906123e0565b50600061109a848661255a565b9150505b9392505050565b6000806110b2838561252e565b90508381101561109e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161039a565b6001600160a01b0384163b1561072e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061114890899089908890889088906004016122fc565b602060405180830381600087803b15801561116257600080fd5b505af1925050508015611192575060408051601f3d908101601f1916820190925261118f918101906120ff565b60015b61123f5761119e6126b1565b806308c379a014156111d857506111b36126c9565b806111be57506111da565b8060405162461bcd60e51b815260040161039a91906123e0565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039a565b6001600160e01b0319811663bc197c8160e01b1461126f5760405162461bcd60e51b815260040161039a906123f3565b50505050505050565b805161128b906005906020840190611c88565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc306816040516112bb91906123e0565b60405180910390a150565b6001600160a01b0383166112ec5760405162461bcd60e51b815260040161039a90612480565b805182511461130d5760405162461bcd60e51b815260040161039a906124c3565b604080516020810190915260009081905233905b835181101561144f576113db83828151811061134d57634e487b7160e01b600052603260045260246000fd5b6020026020010151604051806060016040528060248152602001612769602491396003600088868151811061139257634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546110699092919063ffffffff16565b600360008684815181106113ff57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061144790612640565b915050611321565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516114a09291906123b2565b60405180910390a450505050565b6114b782611056565b61151d5760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b606482015260840161039a565b6001600160a01b0383166115435760405162461bcd60e51b815260040161039a90612480565b336115738185600061155487611a5c565b61155d87611a5c565b5050604080516020810190915260009052505050565b6115ba826040518060600160405280603181526020016127b76031913960008681526003602090815260408083206001600160a01b038b1684529091529020549190611069565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291016114a0565b60608161163f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611669578061165381612640565b91506116629050600a83612546565b9150611643565b6000816001600160401b0381111561169157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156116bb576020820181803683370190505b50905060006116cb60018461255a565b90508593505b8315611744576116e2600a8561265b565b6116ed90603061252e565b60f81b82826116fb8161259d565b93508151811061171b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061173d600a85612546565b93506116d1565b50949350505050565b600030838560405160200161176493929190612287565b6040516020818303038152906040528051906020012090506001816040516020016117bb91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa158015611827573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506118905760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c65640000604482015260640161039a565b50505050565b61189f84611056565b156118ec5760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e746564000000604482015260640161039a565b826119395760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f73697469766500000000000000604482015260640161039a565b600082511161197e5760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b604482015260640161039a565b600084815260016020526040902080546001600160a01b031916339081179091556119ad906007908690611b97565b5060008481526002602090815260408083208490556003825280832033845290915290208390556119de8483611bb5565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b83604051611a4e91906123e0565b60405180910390a250505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611aa457634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b1561072e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611af9908990899088908890889060040161235a565b602060405180830381600087803b158015611b1357600080fd5b505af1925050508015611b43575060408051601f3d908101601f19168201909252611b40918101906120ff565b60015b611b4f5761119e6126b1565b6001600160e01b0319811663f23a6e6160e01b1461126f5760405162461bcd60e51b815260040161039a906123f3565b6000818152600183016020526040812054151561109e565b6000611bad84846001600160a01b038516611bd9565b949350505050565b60008281526006602090815260409091208251611bd492840190611c88565b505050565b600082815260018401602052604081205480611c3e57505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205561109e565b8285611c4b60018461255a565b81548110611c6957634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010181905550600091505061109e565b828054611c94906125b4565b90600052602060002090601f016020900481019282611cb65760008555611cfc565b82601f10611ccf57805160ff1916838001178555611cfc565b82800160010185558215611cfc579182015b82811115611cfc578251825591602001919060010190611ce1565b50611d08929150611d0c565b5090565b5b80821115611d085760008155600101611d0d565b80356001600160a01b038116811461105157600080fd5b600082601f830112611d48578081fd5b81356020611d558261250b565b604051611d628282612614565b8381528281019150858301600585901b87018401881015611d81578586fd5b855b85811015611d9f57813584529284019290840190600101611d83565b5090979650505050505050565b600082601f830112611dbc578081fd5b81356001600160401b03811115611dd557611dd561269b565b604051611dec601f8301601f191660200182612614565b818152846020838601011115611e00578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611e2b578081fd5b61109e82611d21565b60008060408385031215611e46578081fd5b611e4f83611d21565b9150611e5d60208401611d21565b90509250929050565b600080600080600060a08688031215611e7d578081fd5b611e8686611d21565b9450611e9460208701611d21565b935060408601356001600160401b0380821115611eaf578283fd5b611ebb89838a01611d38565b94506060880135915080821115611ed0578283fd5b611edc89838a01611d38565b93506080880135915080821115611ef1578283fd5b50611efe88828901611dac565b9150509295509295909350565b600080600080600060a08688031215611f22578081fd5b611f2b86611d21565b9450611f3960208701611d21565b9350604086013592506060860135915060808601356001600160401b03811115611f61578182fd5b611efe88828901611dac565b60008060408385031215611f7f578182fd5b611f8883611d21565b915060208301358015158114611f9c578182fd5b809150509250929050565b60008060408385031215611fb9578182fd5b611fc283611d21565b946020939093013593505050565b60008060408385031215611fe2578182fd5b82356001600160401b0380821115611ff8578384fd5b818501915085601f83011261200b578384fd5b813560206120188261250b565b6040516120258282612614565b8381528281019150858301600585901b870184018b1015612044578889fd5b8896505b8487101561206d5761205981611d21565b835260019690960195918301918301612048565b5096505086013592505080821115612083578283fd5b5061209085828601611d38565b9150509250929050565b600080604083850312156120ac578182fd5b82356001600160401b03808211156120c2578384fd5b6120ce86838701611d38565b93506020850135915080821115612083578283fd5b6000602082840312156120f4578081fd5b813561109e81612752565b600060208284031215612110578081fd5b815161109e81612752565b60006020828403121561212c578081fd5b81356001600160401b03811115612141578182fd5b611bad84828501611dac565b60008060008084860360c0811215612163578283fd5b85356001600160401b03811115612178578384fd5b61218488828901611dac565b95505060208601359350604086013592506060605f19820112156121a6578182fd5b506040516121b3816125ef565b606086013560ff811681146121c6578283fd5b81526080860135602082015260a0909501356040860152509194909350909190565b6000602082840312156121f9578081fd5b5035919050565b60008060408385031215612212578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561225057815187529582019590820190600101612234565b509495945050505050565b60008151808452612273816020860160208601612571565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff19808660601b168352808560601b1660148401525082516122be816028850160208701612571565b91909101602801949350505050565b600083516122df818460208801612571565b8351908301906122f3818360208801612571565b01949350505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061232890830186612221565b828103606084015261233a8186612221565b9050828103608084015261234e818561225b565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906123949083018461225b565b979650505050505050565b60208152600061109e6020830184612221565b6040815260006123c56040830185612221565b82810360208401526123d78185612221565b95945050505050565b60208152600061109e602083018461225b565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b038211156125245761252461269b565b5060051b60200190565b600082198211156125415761254161266f565b500190565b60008261255557612555612685565b500490565b60008282101561256c5761256c61266f565b500390565b60005b8381101561258c578181015183820152602001612574565b838111156118905750506000910152565b6000816125ac576125ac61266f565b506000190190565b600181811c908216806125c857607f821691505b602082108114156125e957634e487b7160e01b600052602260045260246000fd5b50919050565b606081018181106001600160401b038211171561260e5761260e61269b565b60405250565b601f8201601f191681016001600160401b03811182821017156126395761263961269b565b6040525050565b60006000198214156126545761265461266f565b5060010190565b60008261266a5761266a612685565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156126c657600481823e5160e01c5b90565b600060443d10156126d75790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561270657505050505090565b828501915081518181111561271e5750505050505090565b843d87010160208285010111156127385750505050505090565b61274760208286010187612614565b509095945050505050565b6001600160e01b0319811681146109cb57600080fdfe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724552435f686f6c646572546f6b656e73313135353a206275726e20616d6f756e7420657863656564732062616c616e6365a26469706673582212207529e3b1ba1b7b2631e5033214d75a87f56e742ac8c5f5b5866b682b507f832864736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000214d415449432e4152542020204e46542046524545204d41524b455420504c4143450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101205760003560e01c8063a22cb465116100ad578063ca1daf8811610071578063ca1daf881461028c578063d48e638a1461029f578063e985e9c5146102c8578063f242432a14610304578063f2fde38b1461031757600080fd5b8063a22cb4651461022b578063b390c0ab1461023e578063c0ac998314610251578063c57dc23514610259578063c87b56dd1461027957600080fd5b80634e1273f4116100f45780634e1273f4146101b257806355f804b3146101d257806383ca4b6f146101e55780638da5cb5b146101f857806395d89b411461022357600080fd5b8062fdd58e1461012557806301ffc9a71461014b57806306fdde03146101885780632eb2c2d61461019d575b600080fd5b610138610133366004611fa7565b61032a565b6040519081526020015b60405180910390f35b6101786101593660046120e3565b6001600160e01b03191660009081526020819052604090205460ff1690565b6040519015158152602001610142565b610190610435565b60405161014291906123e0565b6101b06101ab366004611e66565b6104c7565b005b6101c56101c0366004611fd0565b610736565b604051610142919061239f565b6101b06101e036600461211b565b610968565b6101b06101f336600461209a565b6109ce565b600c5461020b906001600160a01b031681565b6040516001600160a01b039091168152602001610142565b6101906109dd565b6101b0610239366004611f6d565b6109ec565b6101b061024c366004612200565b610ac3565b610190610ace565b6101386102673660046121e8565b60009081526002602052604090205490565b6101906102873660046121e8565b610b5c565b6101b061029a36600461214d565b610d52565b61020b6102ad3660046121e8565b6000908152600160205260409020546001600160a01b031690565b6101786102d6366004611e34565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6101b0610312366004611f0b565b610d82565b610178610325366004611e1a565b610f35565b600061033582611056565b6103a35760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661040d5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161039a565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b606060098054610444906125b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610470906125b4565b80156104bd5780601f10610492576101008083540402835291602001916104bd565b820191906000526020600020905b8154815290600101906020018083116104a057829003601f168201915b5050505050905090565b81518351146104e85760405162461bcd60e51b815260040161039a906124c3565b6001600160a01b03841661050e5760405162461bcd60e51b815260040161039a9061243b565b6001600160a01b03851633148061052a575061052a85336102d6565b6105915760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161039a565b3360005b84518110156106c85760008582815181106105c057634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106105ec57634e487b7160e01b600052603260045260246000fd5b60200260200101519050610659816040518060600160405280602a815260200161278d602a91396003600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546110699092919063ffffffff16565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a168152205461069090826110a5565b60009283526003602090815260408085206001600160a01b038c16865290915290922091909155506106c181612640565b9050610595565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516107189291906123b2565b60405180910390a461072e818787878787611104565b505050505050565b6060815183511461079b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161039a565b600083516001600160401b038111156107c457634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107ed578160200160208202803683370190505b50905060005b84518110156109605760006001600160a01b031685828151811061082757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108a05760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161039a565b600360008583815181106108c457634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060008683815181106108fc57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061094557634e487b7160e01b600052603260045260246000fd5b602090810291909101015261095981612640565b90506107f3565b509392505050565b600c546001600160a01b031633146109c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6109cb81611278565b50565b6109d93383836112c6565b5050565b6060600a8054610444906125b4565b336001600160a01b0383161415610a575760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161039a565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109d93383836114ae565b60058054610adb906125b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610b07906125b4565b8015610b545780601f10610b2957610100808354040283529160200191610b54565b820191906000526020600020905b815481529060010190602001808311610b3757829003601f168201915b505050505081565b6060610b6782611056565b610bcc5760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b606482015260840161039a565b60008281526006602052604081208054610be5906125b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c11906125b4565b8015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b820191906000526020600020905b815481529060010190602001808311610c4157829003601f168201915b50505050509050600060058054610c74906125b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca0906125b4565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b50505050509050805160001415610d05575092915050565b815115610d37578082604051602001610d1f9291906122cd565b60405160208183030381529060405292505050919050565b80610d418561161b565b604051602001610d1f9291906122cd565b610d5d84338361174d565b610d6b600b54848685611896565b600b54610d7990600161252e565b600b5550505050565b6001600160a01b038416610da85760405162461bcd60e51b815260040161039a9061243b565b6001600160a01b038516331480610dc45750610dc485336102d6565b610e225760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161039a565b33610e42818787610e3288611a5c565b610e3b88611a5c565b5050505050565b610e89836040518060600160405280602a815260200161278d602a913960008781526003602090815260408083206001600160a01b038d1684529091529020549190611069565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610ec090846110a5565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461072e818787878787611ab5565b600c546000906001600160a01b03163314610f925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6001600160a01b038216610ff75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039a565b600c546040516001600160a01b03918216918416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600c80546001600160a01b0319166001600160a01b03831617905560015b919050565b6000611063600783611b7f565b92915050565b6000818484111561108d5760405162461bcd60e51b815260040161039a91906123e0565b50600061109a848661255a565b9150505b9392505050565b6000806110b2838561252e565b90508381101561109e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161039a565b6001600160a01b0384163b1561072e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061114890899089908890889088906004016122fc565b602060405180830381600087803b15801561116257600080fd5b505af1925050508015611192575060408051601f3d908101601f1916820190925261118f918101906120ff565b60015b61123f5761119e6126b1565b806308c379a014156111d857506111b36126c9565b806111be57506111da565b8060405162461bcd60e51b815260040161039a91906123e0565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039a565b6001600160e01b0319811663bc197c8160e01b1461126f5760405162461bcd60e51b815260040161039a906123f3565b50505050505050565b805161128b906005906020840190611c88565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc306816040516112bb91906123e0565b60405180910390a150565b6001600160a01b0383166112ec5760405162461bcd60e51b815260040161039a90612480565b805182511461130d5760405162461bcd60e51b815260040161039a906124c3565b604080516020810190915260009081905233905b835181101561144f576113db83828151811061134d57634e487b7160e01b600052603260045260246000fd5b6020026020010151604051806060016040528060248152602001612769602491396003600088868151811061139257634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546110699092919063ffffffff16565b600360008684815181106113ff57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061144790612640565b915050611321565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516114a09291906123b2565b60405180910390a450505050565b6114b782611056565b61151d5760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b606482015260840161039a565b6001600160a01b0383166115435760405162461bcd60e51b815260040161039a90612480565b336115738185600061155487611a5c565b61155d87611a5c565b5050604080516020810190915260009052505050565b6115ba826040518060600160405280603181526020016127b76031913960008681526003602090815260408083206001600160a01b038b1684529091529020549190611069565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291016114a0565b60608161163f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611669578061165381612640565b91506116629050600a83612546565b9150611643565b6000816001600160401b0381111561169157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156116bb576020820181803683370190505b50905060006116cb60018461255a565b90508593505b8315611744576116e2600a8561265b565b6116ed90603061252e565b60f81b82826116fb8161259d565b93508151811061171b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061173d600a85612546565b93506116d1565b50949350505050565b600030838560405160200161176493929190612287565b6040516020818303038152906040528051906020012090506001816040516020016117bb91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa158015611827573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506118905760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c65640000604482015260640161039a565b50505050565b61189f84611056565b156118ec5760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e746564000000604482015260640161039a565b826119395760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f73697469766500000000000000604482015260640161039a565b600082511161197e5760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b604482015260640161039a565b600084815260016020526040902080546001600160a01b031916339081179091556119ad906007908690611b97565b5060008481526002602090815260408083208490556003825280832033845290915290208390556119de8483611bb5565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b83604051611a4e91906123e0565b60405180910390a250505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611aa457634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b1561072e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611af9908990899088908890889060040161235a565b602060405180830381600087803b158015611b1357600080fd5b505af1925050508015611b43575060408051601f3d908101601f19168201909252611b40918101906120ff565b60015b611b4f5761119e6126b1565b6001600160e01b0319811663f23a6e6160e01b1461126f5760405162461bcd60e51b815260040161039a906123f3565b6000818152600183016020526040812054151561109e565b6000611bad84846001600160a01b038516611bd9565b949350505050565b60008281526006602090815260409091208251611bd492840190611c88565b505050565b600082815260018401602052604081205480611c3e57505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205561109e565b8285611c4b60018461255a565b81548110611c6957634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010181905550600091505061109e565b828054611c94906125b4565b90600052602060002090601f016020900481019282611cb65760008555611cfc565b82601f10611ccf57805160ff1916838001178555611cfc565b82800160010185558215611cfc579182015b82811115611cfc578251825591602001919060010190611ce1565b50611d08929150611d0c565b5090565b5b80821115611d085760008155600101611d0d565b80356001600160a01b038116811461105157600080fd5b600082601f830112611d48578081fd5b81356020611d558261250b565b604051611d628282612614565b8381528281019150858301600585901b87018401881015611d81578586fd5b855b85811015611d9f57813584529284019290840190600101611d83565b5090979650505050505050565b600082601f830112611dbc578081fd5b81356001600160401b03811115611dd557611dd561269b565b604051611dec601f8301601f191660200182612614565b818152846020838601011115611e00578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611e2b578081fd5b61109e82611d21565b60008060408385031215611e46578081fd5b611e4f83611d21565b9150611e5d60208401611d21565b90509250929050565b600080600080600060a08688031215611e7d578081fd5b611e8686611d21565b9450611e9460208701611d21565b935060408601356001600160401b0380821115611eaf578283fd5b611ebb89838a01611d38565b94506060880135915080821115611ed0578283fd5b611edc89838a01611d38565b93506080880135915080821115611ef1578283fd5b50611efe88828901611dac565b9150509295509295909350565b600080600080600060a08688031215611f22578081fd5b611f2b86611d21565b9450611f3960208701611d21565b9350604086013592506060860135915060808601356001600160401b03811115611f61578182fd5b611efe88828901611dac565b60008060408385031215611f7f578182fd5b611f8883611d21565b915060208301358015158114611f9c578182fd5b809150509250929050565b60008060408385031215611fb9578182fd5b611fc283611d21565b946020939093013593505050565b60008060408385031215611fe2578182fd5b82356001600160401b0380821115611ff8578384fd5b818501915085601f83011261200b578384fd5b813560206120188261250b565b6040516120258282612614565b8381528281019150858301600585901b870184018b1015612044578889fd5b8896505b8487101561206d5761205981611d21565b835260019690960195918301918301612048565b5096505086013592505080821115612083578283fd5b5061209085828601611d38565b9150509250929050565b600080604083850312156120ac578182fd5b82356001600160401b03808211156120c2578384fd5b6120ce86838701611d38565b93506020850135915080821115612083578283fd5b6000602082840312156120f4578081fd5b813561109e81612752565b600060208284031215612110578081fd5b815161109e81612752565b60006020828403121561212c578081fd5b81356001600160401b03811115612141578182fd5b611bad84828501611dac565b60008060008084860360c0811215612163578283fd5b85356001600160401b03811115612178578384fd5b61218488828901611dac565b95505060208601359350604086013592506060605f19820112156121a6578182fd5b506040516121b3816125ef565b606086013560ff811681146121c6578283fd5b81526080860135602082015260a0909501356040860152509194909350909190565b6000602082840312156121f9578081fd5b5035919050565b60008060408385031215612212578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561225057815187529582019590820190600101612234565b509495945050505050565b60008151808452612273816020860160208601612571565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff19808660601b168352808560601b1660148401525082516122be816028850160208701612571565b91909101602801949350505050565b600083516122df818460208801612571565b8351908301906122f3818360208801612571565b01949350505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061232890830186612221565b828103606084015261233a8186612221565b9050828103608084015261234e818561225b565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906123949083018461225b565b979650505050505050565b60208152600061109e6020830184612221565b6040815260006123c56040830185612221565b82810360208401526123d78185612221565b95945050505050565b60208152600061109e602083018461225b565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b038211156125245761252461269b565b5060051b60200190565b600082198211156125415761254161266f565b500190565b60008261255557612555612685565b500490565b60008282101561256c5761256c61266f565b500390565b60005b8381101561258c578181015183820152602001612574565b838111156118905750506000910152565b6000816125ac576125ac61266f565b506000190190565b600181811c908216806125c857607f821691505b602082108114156125e957634e487b7160e01b600052602260045260246000fd5b50919050565b606081018181106001600160401b038211171561260e5761260e61269b565b60405250565b601f8201601f191681016001600160401b03811182821017156126395761263961269b565b6040525050565b60006000198214156126545761265461266f565b5060010190565b60008261266a5761266a612685565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156126c657600481823e5160e01c5b90565b600060443d10156126d75790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561270657505050505090565b828501915081518181111561271e5750505050505090565b843d87010160208285010111156127385750505050505090565b61274760208286010187612614565b509095945050505050565b6001600160e01b0319811681146109cb57600080fdfe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724552435f686f6c646572546f6b656e73313135353a206275726e20616d6f756e7420657863656564732062616c616e6365a26469706673582212207529e3b1ba1b7b2631e5033214d75a87f56e742ac8c5f5b5866b682b507f832864736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000214d415449432e4152542020204e46542046524545204d41524b455420504c4143450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): MATIC.ART NFT FREE MARKET PLACE
Arg [1] : symbol (string): NFT
Arg [2] : tokenURIPrefix (string): https://gateway.pinata.cloud/ipfs/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [4] : 4d415449432e4152542020204e46542046524545204d41524b455420504c4143
Arg [5] : 4500000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4e46540000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [9] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [10] : 732f000000000000000000000000000000000000000000000000000000000000


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.