ETH Price: $2,603.90 (-4.04%)

Contract

0x0fAED6DDeF3773f3Ee5828383AAeEaCA2a94564a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...217890632025-02-06 17:49:4737 hrs ago1738864187IN
Quantum Unlocked: QKU Token
0 ETH0.000099692.16463162
Set Approval For...217810502025-02-05 15:00:472 days ago1738767647IN
Quantum Unlocked: QKU Token
0 ETH0.000130672.83709808
Set Approval For...217638222025-02-03 5:13:595 days ago1738559639IN
Quantum Unlocked: QKU Token
0 ETH0.0013761429.87855711
Set Approval For...217603972025-02-02 17:44:475 days ago1738518287IN
Quantum Unlocked: QKU Token
0 ETH0.0009060919.67293189
Set Approval For...217452272025-01-31 14:52:357 days ago1738335155IN
Quantum Unlocked: QKU Token
0 ETH0.000454159.86060689
Set Approval For...217377912025-01-30 13:56:478 days ago1738245407IN
Quantum Unlocked: QKU Token
0 ETH0.000313466.80596127
Safe Transfer Fr...217374682025-01-30 12:51:478 days ago1738241507IN
Quantum Unlocked: QKU Token
0 ETH0.000220373.85325418
Safe Transfer Fr...217318792025-01-29 18:08:359 days ago1738174115IN
Quantum Unlocked: QKU Token
0 ETH0.000227075.0583241
Set Approval For...217268882025-01-29 1:25:5910 days ago1738113959IN
Quantum Unlocked: QKU Token
0 ETH0.000142273.08910924
Safe Transfer Fr...217177862025-01-27 18:55:4711 days ago1738004147IN
Quantum Unlocked: QKU Token
0 ETH0.0005674512.64387598
Safe Transfer Fr...217169782025-01-27 16:13:1111 days ago1737994391IN
Quantum Unlocked: QKU Token
0 ETH0.000975521.73007265
Safe Transfer Fr...217168742025-01-27 15:52:1111 days ago1737993131IN
Quantum Unlocked: QKU Token
0 ETH0.000910420.28536824
Set Approval For...217166912025-01-27 15:15:2311 days ago1737990923IN
Quantum Unlocked: QKU Token
0 ETH0.0006202925.68931817
Set Approval For...217103412025-01-26 18:00:2312 days ago1737914423IN
Quantum Unlocked: QKU Token
0 ETH0.000383128.31823245
Safe Transfer Fr...217075412025-01-26 8:36:3512 days ago1737880595IN
Quantum Unlocked: QKU Token
0 ETH0.000136033.39297539
Safe Transfer Fr...217075382025-01-26 8:35:5912 days ago1737880559IN
Quantum Unlocked: QKU Token
0 ETH0.000171263.81510937
Safe Transfer Fr...217075352025-01-26 8:35:2312 days ago1737880523IN
Quantum Unlocked: QKU Token
0 ETH0.000211183.40661249
Set Approval For...216846142025-01-23 3:50:2316 days ago1737604223IN
Quantum Unlocked: QKU Token
0 ETH0.000279436.06702541
Set Approval For...216845942025-01-23 3:46:2316 days ago1737603983IN
Quantum Unlocked: QKU Token
0 ETH0.000283096.14658845
Set Approval For...216830422025-01-22 22:34:1116 days ago1737585251IN
Quantum Unlocked: QKU Token
0 ETH0.000361877.85696851
Set Approval For...216827802025-01-22 21:41:3516 days ago1737582095IN
Quantum Unlocked: QKU Token
0 ETH0.00037138.06170356
Set Approval For...216761702025-01-21 23:32:5917 days ago1737502379IN
Quantum Unlocked: QKU Token
0 ETH0.0002895711.95099329
Set Approval For...216322542025-01-15 20:24:2323 days ago1736972663IN
Quantum Unlocked: QKU Token
0 ETH0.0008332418.09129152
Safe Transfer Fr...216075652025-01-12 9:38:3526 days ago1736674715IN
Quantum Unlocked: QKU Token
0 ETH0.000159582.79157497
Set Approval For...215900492025-01-09 22:57:1129 days ago1736463431IN
Quantum Unlocked: QKU Token
0 ETH0.000283966.1654061
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
QuantumUnlocked

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion
File 1 of 6 : QuantumUnlocked.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

import {ERC721 as ERC721S} from "@rari-capital/solmate/src/tokens/ERC721.sol";
import "@rari-capital/solmate/src/auth/Auth.sol";
import "@openzeppelin/contracts/utils/structs/BitMaps.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "./ERC2981V2.sol";


/// @title The Quantum Unlocked. Speciality drops for the quantum keys are released here
/// @author jcbdev
contract QuantumUnlocked is ERC721S, ERC2981, Auth {
    using Strings for uint256;
    using BitMaps for BitMaps.BitMap;

    /// >>>>>>>>>>>>>>>>>>>>>>>  EVENTS  <<<<<<<<<<<<<<<<<<<<<<<<<< ///

    event DropMint(address indexed to, uint256 indexed dropId, uint256 indexed variant, uint256 id);

    /// >>>>>>>>>>>>>>>>>>>>>>>  STATE  <<<<<<<<<<<<<<<<<<<<<<<<<< ///

    mapping (uint128 => string) public dropCID;
    mapping (uint128 => uint128) public dropSupply;
    mapping (uint256 => uint256) public tokenVariant;

    string private _baseURI = "https://core-api.quantum.art/v1/metadata/unlocked/";
    string private _ipfsURI = "ipfs://";
    address private _minter;

    /// >>>>>>>>>>>>>>>>>>>>>  CONSTRUCTOR  <<<<<<<<<<<<<<<<<<<<<< ///

	/// @notice Deploys QuantumUnlocked
    /// @dev Initiates the Auth module with no authority and the sender as the owner
    /// @param owner The owner of the contract
    /// @param authority address of the deployed authority
    constructor(address owner, address authority) ERC721S("QuantumUnlocked", "QKU") Auth(owner, Authority(authority)) {
        _baseURI = "https://core-api.quantum.art/v1/metadata/unlocked/";
        _ipfsURI = "ipfs://";
    }

    /// >>>>>>>>>>>>>>>>>>>>>  INTERNAL  <<<<<<<<<<<<<<<<<<<<<< ///
    /// @notice get the token id from the drop id and sequence number
    /// @param dropId The drop id
    /// @param sequence the sequence number of the minted token within the drop 
    /// @return tokenId the combined token id 
    function _tokenId(uint128 dropId, uint128 sequence) internal pure returns (uint256 tokenId) {
        tokenId |= uint256(dropId) << 128;
        tokenId |= uint256(sequence);
        return tokenId;
    }

    /// @notice extract the drop id and the sequence number from the token id
    /// @param tokenId The token id to extract the values from
    /// @return uint128 the drop id
    /// @return uint128 the sequence number
    function _splitTokenId(uint256 tokenId) internal pure returns (uint128, uint128) {
        return (uint128(tokenId >> 128), uint128(tokenId));
    }

    /// >>>>>>>>>>>>>>>>>>>>>  RESTRICTED  <<<<<<<<<<<<<<<<<<<<<< ///

    /// @notice set address of the minter
    /// @param minter The address of the minter - should be Sales Platform
    function setMinter(address minter) public requiresAuth {
        _minter = minter;
    }

    /// @notice set the baseURI
    /// @param baseURI new base
    function setBaseURI(string calldata baseURI) public requiresAuth {
        _baseURI = baseURI;
    }

    /// @notice set the base ipfs URI
    /// @param ipfsURI new base
    function setIpfsURI(string calldata ipfsURI) public requiresAuth {
        _ipfsURI = ipfsURI;
    }

    /// @notice set the IPFS CID
    /// @param dropId The drop id
    /// @param cid cid
    function setCID(uint128 dropId, string calldata cid) public requiresAuth {
        dropCID[dropId] = cid;
    }

    /// @notice sets the recipient of the royalties
    /// @param recipient address of the recipient
    function setRoyaltyRecipient(address recipient) public requiresAuth {
        _royaltyRecipient = recipient;
    }

    /// @notice sets the fee of royalties
    /// @dev The fee denominator is 10000 in BPS.
    /// @param fee fee
    /*
        Example

        This would set the fee at 5%
        ```
        KeyUnlocks.setRoyaltyFee(500)
        ```
    */
    function setRoyaltyFee(uint256 fee) public requiresAuth {
        _royaltyFee = fee;
    }

    /// @notice Mints new tokens
    /// @dev there is no check regarding limiting supply
    /// @param to recipient of newly minted tokens
    /// @param dropId id of the key
    function mint(address to, uint128 dropId, uint256 variant) public returns (uint256) {
        require(msg.sender == owner || msg.sender == _minter, "NOT_AUTHORIZED");

        dropSupply[dropId] += 1;
        uint256 tokenId = _tokenId(dropId, uint128(dropSupply[dropId]));
        _safeMint(to, tokenId);
        if (variant > 0) {
            tokenVariant[tokenId] = variant;
        }
        emit DropMint(to, dropId, variant, tokenId);
        return tokenId;
    }

    /// @notice Burns token that has been redeemed for something else
    /// @dev Sales platform only
    /// @param tokenId id of the tokens
    function redeemBurn(uint256 tokenId) public requiresAuth {
        _burn(tokenId);
    }

    /// >>>>>>>>>>>>>>>>>>>>>  VIEW  <<<<<<<<<<<<<<<<<<<<<< ///

    /// @notice Returns the URI of the token
    /// @param tokenId id of the token
    /// @return URI for the token ; expected to be ipfs://<cid>
    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        (uint128 dropId, uint128 sequenceNumber) = _splitTokenId(tokenId);
        uint256 actualSequence = tokenVariant[tokenId] > 0 ? tokenVariant[tokenId] : sequenceNumber;
        if (bytes(dropCID[dropId]).length > 0)
            return string(abi.encodePacked(_ipfsURI, dropCID[dropId], "/" , actualSequence.toString()));
        else
            return string(abi.encodePacked(_baseURI, uint256(dropId).toString(), "/" , actualSequence.toString()));
    }

    /// >>>>>>>>>>>>>>>>>>>>>  EXTERNAL  <<<<<<<<<<<<<<<<<<<<<< ///

    /// @notice Burns token
    /// @dev Can be called by the owner or approved operator
    /// @param tokenId id of the tokens
    function burn(uint256 tokenId) public {
        address owner = ownerOf[tokenId];
        require(
            msg.sender == owner || msg.sender == getApproved[tokenId] || isApprovedForAll[owner][msg.sender],
            "NOT_AUTHORIZED"
        );
        _burn(tokenId);
    }

    function supportsInterface(bytes4 interfaceId) public pure virtual override(ERC721S, ERC2981) returns (bool) {
        return ERC721S.supportsInterface(interfaceId) || ERC2981.supportsInterface(interfaceId);
    }
}

File 2 of 6 : ERC721.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern, minimalist, and gas efficient ERC-721 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
/// @dev Note that balanceOf does not revert if passed the zero address, in defiance of the ERC.
abstract contract ERC721 {
    /*///////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 indexed id);

    event Approval(address indexed owner, address indexed spender, uint256 indexed id);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /*///////////////////////////////////////////////////////////////
                          METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    function tokenURI(uint256 id) public view virtual returns (string memory);

    /*///////////////////////////////////////////////////////////////
                            ERC721 STORAGE                        
    //////////////////////////////////////////////////////////////*/

    mapping(address => uint256) public balanceOf;

    mapping(uint256 => address) public ownerOf;

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*///////////////////////////////////////////////////////////////
                              CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

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

    /*///////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 id) public virtual {
        address owner = ownerOf[id];

        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED");

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        require(from == ownerOf[id], "WRONG_FROM");

        require(to != address(0), "INVALID_RECIPIENT");

        require(
            msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender],
            "NOT_AUTHORIZED"
        );

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            balanceOf[from]--;

            balanceOf[to]++;
        }

        ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes memory data
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    /*///////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 id) internal virtual {
        require(to != address(0), "INVALID_RECIPIENT");

        require(ownerOf[id] == address(0), "ALREADY_MINTED");

        // Counter overflow is incredibly unrealistic.
        unchecked {
            balanceOf[to]++;
        }

        ownerOf[id] = to;

        emit Transfer(address(0), to, id);
    }

    function _burn(uint256 id) internal virtual {
        address owner = ownerOf[id];

        require(ownerOf[id] != address(0), "NOT_MINTED");

        // Ownership check above ensures no underflow.
        unchecked {
            balanceOf[owner]--;
        }

        delete ownerOf[id];

        delete getApproved[id];

        emit Transfer(owner, address(0), id);
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL SAFE MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    function _safeMint(address to, uint256 id) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _safeMint(
        address to,
        uint256 id,
        bytes memory data
    ) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
interface ERC721TokenReceiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 id,
        bytes calldata data
    ) external returns (bytes4);
}

File 3 of 6 : Auth.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Provides a flexible and updatable auth pattern which is completely separate from application logic.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
abstract contract Auth {
    event OwnerUpdated(address indexed user, address indexed newOwner);

    event AuthorityUpdated(address indexed user, Authority indexed newAuthority);

    address public owner;

    Authority public authority;

    constructor(address _owner, Authority _authority) {
        owner = _owner;
        authority = _authority;

        emit OwnerUpdated(msg.sender, _owner);
        emit AuthorityUpdated(msg.sender, _authority);
    }

    modifier requiresAuth() {
        require(isAuthorized(msg.sender, msg.sig), "UNAUTHORIZED");

        _;
    }

    function isAuthorized(address user, bytes4 functionSig) internal view virtual returns (bool) {
        Authority auth = authority; // Memoizing authority saves us a warm SLOAD, around 100 gas.

        // Checking if the caller is the owner only after calling the authority saves gas in most cases, but be
        // aware that this makes protected functions uncallable even to the owner if the authority is out of order.
        return (address(auth) != address(0) && auth.canCall(user, address(this), functionSig)) || user == owner;
    }

    function setAuthority(Authority newAuthority) public virtual {
        // We check if the caller is the owner first because we want to ensure they can
        // always swap out the authority even if it's reverting or using up a lot of gas.
        require(msg.sender == owner || authority.canCall(msg.sender, address(this), msg.sig));

        authority = newAuthority;

        emit AuthorityUpdated(msg.sender, newAuthority);
    }

    function setOwner(address newOwner) public virtual requiresAuth {
        owner = newOwner;

        emit OwnerUpdated(msg.sender, newOwner);
    }
}

/// @notice A generic interface for a contract which provides authorization data to an Auth instance.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
interface Authority {
    function canCall(
        address user,
        address target,
        bytes4 functionSig
    ) external view returns (bool);
}

File 4 of 6 : BitMaps.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/structs/BitMaps.sol)
pragma solidity ^0.8.0;

/**
 * @dev Library for managing uint256 to bool mapping in a compact and efficient way, providing the keys are sequential.
 * Largelly inspired by Uniswap's https://github.com/Uniswap/merkle-distributor/blob/master/contracts/MerkleDistributor.sol[merkle-distributor].
 */
library BitMaps {
    struct BitMap {
        mapping(uint256 => uint256) _data;
    }

    /**
     * @dev Returns whether the bit at `index` is set.
     */
    function get(BitMap storage bitmap, uint256 index) internal view returns (bool) {
        uint256 bucket = index >> 8;
        uint256 mask = 1 << (index & 0xff);
        return bitmap._data[bucket] & mask != 0;
    }

    /**
     * @dev Sets the bit at `index` to the boolean `value`.
     */
    function setTo(
        BitMap storage bitmap,
        uint256 index,
        bool value
    ) internal {
        if (value) {
            set(bitmap, index);
        } else {
            unset(bitmap, index);
        }
    }

    /**
     * @dev Sets the bit at `index`.
     */
    function set(BitMap storage bitmap, uint256 index) internal {
        uint256 bucket = index >> 8;
        uint256 mask = 1 << (index & 0xff);
        bitmap._data[bucket] |= mask;
    }

    /**
     * @dev Unsets the bit at `index`.
     */
    function unset(BitMap storage bitmap, uint256 index) internal {
        uint256 bucket = index >> 8;
        uint256 mask = 1 << (index & 0xff);
        bitmap._data[bucket] &= ~mask;
    }
}

File 5 of 6 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

File 6 of 6 : ERC2981V2.sol
pragma solidity >=0.8.0;

/// @title Minimalist ERC2981 implementation.
/// @notice To be used within Quantum, as it was written for its needs.
/// @author exp.table
abstract contract ERC2981 {

    /// @dev one global fee for all royalties.
    uint256 internal _royaltyFee;
    /// @dev one global recipient for all royalties.
    address internal _royaltyRecipient;

    function royaltyInfo(uint256 tokenId, uint256 salePrice) public view virtual returns (
        address receiver,
        uint256 royaltyAmount
    ) {
        receiver = _royaltyRecipient;
        royaltyAmount = (salePrice * _royaltyFee) / 10000;
    }

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x2a55205a; // ERC165 Interface ID for ERC2981
    }

}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"user","type":"address"},{"indexed":true,"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"dropId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"variant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"DropMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract Authority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"","type":"uint128"}],"name":"dropCID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"","type":"uint128"}],"name":"dropSupply","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint128","name":"dropId","type":"uint128"},{"internalType":"uint256","name":"variant","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"redeemBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","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":"id","type":"uint256"}],"name":"safeTransferFrom","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":"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":"contract Authority","name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"dropId","type":"uint128"},{"internalType":"string","name":"cid","type":"string"}],"name":"setCID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsURI","type":"string"}],"name":"setIpfsURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRoyaltyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"setRoyaltyRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenVariant","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":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052603260808181529062002bdc60a03980516200002991600d91602090910190620001f7565b5060408051808201909152600780825266697066733a2f2f60c81b60209092019182526200005a91600e91620001f7565b503480156200006857600080fd5b5060405162002c0e38038062002c0e8339810160408190526200008b91620002ba565b604080518082018252600f81526e145d585b9d1d5b555b9b1bd8dad959608a1b602080830191825283518085019094526003845262514b5560e81b90840152815185938593929091620000e191600091620001f7565b508051620000f7906001906020840190620001f7565b5050600880546001600160a01b038086166001600160a01b03199283168117909355600980549186169190921617905560405190915033907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a3505060405180606001604052806032815260200162002bdc603291398051620001bd91600d91602090910190620001f7565b5060408051808201909152600780825266697066733a2f2f60c81b6020909201918252620001ee91600e91620001f7565b5050506200032f565b8280546200020590620002f2565b90600052602060002090601f01602090048101928262000229576000855562000274565b82601f106200024457805160ff191683800117855562000274565b8280016001018555821562000274579182015b828111156200027457825182559160200191906001019062000257565b506200028292915062000286565b5090565b5b8082111562000282576000815560010162000287565b80516001600160a01b0381168114620002b557600080fd5b919050565b60008060408385031215620002ce57600080fd5b620002d9836200029d565b9150620002e9602084016200029d565b90509250929050565b600181811c908216806200030757607f821691505b602082108114156200032957634e487b7160e01b600052602260045260246000fd5b50919050565b61289d806200033f6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80636352211e11610104578063bf7e214f116100a2578063e985e9c511610071578063e985e9c5146104f4578063f6e384e414610522578063fc7d864914610535578063fca3b5aa1461054857600080fd5b8063bf7e214f1461048e578063c87b56dd146104ae578063dd46edb8146104c1578063de5ac894146104e157600080fd5b80638da5cb5b116100de5780638da5cb5b1461044057806395d89b4114610460578063a22cb46514610468578063b88d4fde1461047b57600080fd5b80636352211e146103c957806370a08231146103ff5780637a9e5e4b1461042d57600080fd5b80632a55205a1161017c57806342842e0e1161014b57806342842e0e1461037d57806342966c68146103905780635443e82c146103a357806355f804b3146103b657600080fd5b80632a55205a1461030557806331690734146103445780633e4086e51461035757806341e42f301461036a57600080fd5b8063081812fc116101b8578063081812fc1461026f578063095ea7b3146102ca57806313af4035146102df57806323b872dd146102f257600080fd5b806301ffc9a7146101df57806302efee211461020757806306fdde031461025a575b600080fd5b6101f26101ed366004611ff2565b61055b565b60405190151581526020015b60405180910390f35b61023961021536600461203b565b600b602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016101fe565b61026261057b565b6040516101fe91906120cc565b6102a561027d3660046120df565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fe565b6102dd6102d836600461211a565b610609565b005b6102dd6102ed366004612146565b61073e565b6102dd610300366004612163565b610829565b6103186103133660046121a4565b610aa2565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101fe565b6102dd61035236600461220f565b610ae5565b6102dd6103653660046120df565b610b70565b6102dd610378366004612146565b610bef565b6102dd61038b366004612163565b610cb0565b6102dd61039e3660046120df565b610dfb565b6102dd6103b1366004612251565b610ee5565b6102dd6103c436600461220f565b610f91565b6102a56103d73660046120df565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b61041f61040d366004612146565b60026020526000908152604090205481565b6040519081526020016101fe565b6102dd61043b366004612146565b611017565b6008546102a59073ffffffffffffffffffffffffffffffffffffffff1681565b610262611174565b6102dd6104763660046122b2565b611181565b6102dd61048936600461231a565b611218565b6009546102a59073ffffffffffffffffffffffffffffffffffffffff1681565b6102626104bc3660046120df565b61134f565b61041f6104cf3660046120df565b600c6020526000908152604090205481565b6102626104ef36600461203b565b61145f565b6101f2610502366004612418565b600560209081526000928352604080842090915290825290205460ff1681565b61041f610530366004612446565b611478565b6102dd6105433660046120df565b611631565b6102dd610556366004612146565b6116b7565b600061056682611778565b80610575575061057582611859565b92915050565b6000805461058890612484565b80601f01602080910402602001604051908101604052809291908181526020018280546105b490612484565b80156106015780601f106105d657610100808354040283529160200191610601565b820191906000526020600020905b8154815290600101906020018083116105e457829003601f168201915b505050505081565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff163381148061066c575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b6106bd5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b60008281526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61076c336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6107b85760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff84811691161461089f5760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d0000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff82166109025760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016106b4565b3373ffffffffffffffffffffffffffffffffffffffff84161480610949575060008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610984575073ffffffffffffffffffffffffffffffffffffffff8316600090815260056020908152604080832033845290915290205460ff165b6109d05760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055938616808352848320805460010190558583526003825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60075460065473ffffffffffffffffffffffffffffffffffffffff9091169060009061271090610ad29085612507565b610adc9190612573565b90509250929050565b610b13336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610b5f5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b610b6b600e8383611f0d565b505050565b610b9e336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610bea5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600655565b610c1d336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610c695760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610cbb838383610829565b73ffffffffffffffffffffffffffffffffffffffff82163b1580610daf57506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610b6b5760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610e51575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610e8c575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b610ed85760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b610ee1826119ff565b5050565b610f13336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610f5f5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b6fffffffffffffffffffffffffffffffff83166000908152600a60205260409020610f8b908383611f0d565b50505050565b610fbf336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b61100b5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b610b6b600d8383611f0d565b60085473ffffffffffffffffffffffffffffffffffffffff163314806110fa57506009546040517fb70096130000000000000000000000000000000000000000000000000000000081523360048201523060248201526000357fffffffff0000000000000000000000000000000000000000000000000000000016604482015273ffffffffffffffffffffffffffffffffffffffff9091169063b700961390606401602060405180830381865afa1580156110d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fa91906125a4565b61110357600080fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b6001805461058890612484565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611223848484610829565b73ffffffffffffffffffffffffffffffffffffffff83163b158061130357506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061129c9033908990889088906004016125c1565b6020604051808303816000875af11580156112bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112df9190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610f8b5760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b6000818152600c6020526040812054606091608084901c9184919061138657816fffffffffffffffffffffffffffffffff16611396565b6000858152600c60205260409020545b6fffffffffffffffffffffffffffffffff84166000908152600a60205260408120805492935090916113c790612484565b90501115611427576fffffffffffffffffffffffffffffffff83166000908152600a60205260409020600e906113fc83611b2f565b60405160200161140e939291906126db565b6040516020818303038152906040529350505050919050565b600d611444846fffffffffffffffffffffffffffffffff16611b2f565b61144d83611b2f565b60405160200161140e93929190612733565b600a602052600090815260409020805461058890612484565b60085460009073ffffffffffffffffffffffffffffffffffffffff163314806114b85750600f5473ffffffffffffffffffffffffffffffffffffffff1633145b6115045760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b6fffffffffffffffffffffffffffffffff8084166000908152600b60205260408120805460019391929161153a91859116612788565b82546101009290920a6fffffffffffffffffffffffffffffffff8181021990931691831602179091558481166000908152600b6020526040812054909250167fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086901b161790506115ad8582611c61565b82156115c5576000818152600c602052604090208390555b82846fffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6d5335192a1efe736f886245fc1f6dbf882294247353ca1a57cb804607898b898460405161162191815260200190565b60405180910390a4949350505050565b61165f336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6116ab5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b6116b4816119ff565b50565b6116e5336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6117315760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061180b57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806105755750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806105755750507fffffffff00000000000000000000000000000000000000000000000000000000167f2a55205a000000000000000000000000000000000000000000000000000000001490565b60095460009073ffffffffffffffffffffffffffffffffffffffff1680158015906119d257506040517fb700961300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527fffffffff000000000000000000000000000000000000000000000000000000008516604483015282169063b700961390606401602060405180830381865afa1580156119ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d291906125a4565b806119f7575060085473ffffffffffffffffffffffffffffffffffffffff8581169116145b949350505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1680611a715760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e5445440000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558583526003825280832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560049092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606081611b6f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611b995780611b83816127bc565b9150611b929050600a83612573565b9150611b73565b60008167ffffffffffffffff811115611bb457611bb46122eb565b6040519080825280601f01601f191660200182016040528015611bde576020820181803683370190505b5090505b84156119f757611bf36001836127f5565b9150611c00600a8661280c565b611c0b906030612820565b60f81b818381518110611c2057611c20612838565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611c5a600a86612573565b9450611be2565b611c6b8282611da8565b73ffffffffffffffffffffffffffffffffffffffff82163b1580611d5c57506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252336004830152600060248301819052604483018490526080606484015260848301529073ffffffffffffffffffffffffffffffffffffffff84169063150b7a029060a4016020604051808303816000875af1158015611d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d389190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610ee15760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8216611e0b5760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016106b4565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611e7d5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e54454400000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080546001019055848352600390915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f1990612484565b90600052602060002090601f016020900481019282611f3b5760008555611f9f565b82601f10611f72578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611f9f565b82800160010185558215611f9f579182015b82811115611f9f578235825591602001919060010190611f84565b50611fab929150611faf565b5090565b5b80821115611fab5760008155600101611fb0565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146116b457600080fd5b60006020828403121561200457600080fd5b813561200f81611fc4565b9392505050565b80356fffffffffffffffffffffffffffffffff8116811461203657600080fd5b919050565b60006020828403121561204d57600080fd5b61200f82612016565b60005b83811015612071578181015183820152602001612059565b83811115610f8b5750506000910152565b6000815180845261209a816020860160208601612056565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061200f6020830184612082565b6000602082840312156120f157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146116b457600080fd5b6000806040838503121561212d57600080fd5b8235612138816120f8565b946020939093013593505050565b60006020828403121561215857600080fd5b813561200f816120f8565b60008060006060848603121561217857600080fd5b8335612183816120f8565b92506020840135612193816120f8565b929592945050506040919091013590565b600080604083850312156121b757600080fd5b50508035926020909101359150565b60008083601f8401126121d857600080fd5b50813567ffffffffffffffff8111156121f057600080fd5b60208301915083602082850101111561220857600080fd5b9250929050565b6000806020838503121561222257600080fd5b823567ffffffffffffffff81111561223957600080fd5b612245858286016121c6565b90969095509350505050565b60008060006040848603121561226657600080fd5b61226f84612016565b9250602084013567ffffffffffffffff81111561228b57600080fd5b612297868287016121c6565b9497909650939450505050565b80151581146116b457600080fd5b600080604083850312156122c557600080fd5b82356122d0816120f8565b915060208301356122e0816122a4565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561233057600080fd5b843561233b816120f8565b9350602085013561234b816120f8565b925060408501359150606085013567ffffffffffffffff8082111561236f57600080fd5b818701915087601f83011261238357600080fd5b813581811115612395576123956122eb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156123db576123db6122eb565b816040528281528a60208487010111156123f457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561242b57600080fd5b8235612436816120f8565b915060208301356122e0816120f8565b60008060006060848603121561245b57600080fd5b8335612466816120f8565b925061247460208501612016565b9150604084013590509250925092565b600181811c9082168061249857607f821691505b602082108114156124d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561253f5761253f6124d8565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261258257612582612544565b500490565b60006020828403121561259957600080fd5b815161200f81611fc4565b6000602082840312156125b657600080fd5b815161200f816122a4565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526126006080830184612082565b9695505050505050565b8054600090600181811c908083168061262457607f831692505b602080841082141561265f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b81801561267357600181146126a2576126cf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506126cf565b60008881526020902060005b868110156126c75781548b8201529085019083016126ae565b505084890196505b50505050505092915050565b60006126f06126ea838761260a565b8561260a565b7f2f0000000000000000000000000000000000000000000000000000000000000081528351612726816001840160208801612056565b0160010195945050505050565b600061273f828661260a565b845161274f818360208901612056565b7f2f0000000000000000000000000000000000000000000000000000000000000091019081528351612726816001840160208801612056565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156127b3576127b36124d8565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127ee576127ee6124d8565b5060010190565b600082821015612807576128076124d8565b500390565b60008261281b5761281b612544565b500690565b60008219821115612833576128336124d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212209f52495de295bee914760b58cbd34aa3d31885e36004ed564c817e16c1ed9eed64736f6c634300080b003368747470733a2f2f636f72652d6170692e7175616e74756d2e6172742f76312f6d657461646174612f756e6c6f636b65642f000000000000000000000000c5c721caa3cad959818e891b533a34c37946e9bf0000000000000000000000008c1927427eaaca6a64e238544adfb95451cc05a1

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80636352211e11610104578063bf7e214f116100a2578063e985e9c511610071578063e985e9c5146104f4578063f6e384e414610522578063fc7d864914610535578063fca3b5aa1461054857600080fd5b8063bf7e214f1461048e578063c87b56dd146104ae578063dd46edb8146104c1578063de5ac894146104e157600080fd5b80638da5cb5b116100de5780638da5cb5b1461044057806395d89b4114610460578063a22cb46514610468578063b88d4fde1461047b57600080fd5b80636352211e146103c957806370a08231146103ff5780637a9e5e4b1461042d57600080fd5b80632a55205a1161017c57806342842e0e1161014b57806342842e0e1461037d57806342966c68146103905780635443e82c146103a357806355f804b3146103b657600080fd5b80632a55205a1461030557806331690734146103445780633e4086e51461035757806341e42f301461036a57600080fd5b8063081812fc116101b8578063081812fc1461026f578063095ea7b3146102ca57806313af4035146102df57806323b872dd146102f257600080fd5b806301ffc9a7146101df57806302efee211461020757806306fdde031461025a575b600080fd5b6101f26101ed366004611ff2565b61055b565b60405190151581526020015b60405180910390f35b61023961021536600461203b565b600b602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016101fe565b61026261057b565b6040516101fe91906120cc565b6102a561027d3660046120df565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fe565b6102dd6102d836600461211a565b610609565b005b6102dd6102ed366004612146565b61073e565b6102dd610300366004612163565b610829565b6103186103133660046121a4565b610aa2565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101fe565b6102dd61035236600461220f565b610ae5565b6102dd6103653660046120df565b610b70565b6102dd610378366004612146565b610bef565b6102dd61038b366004612163565b610cb0565b6102dd61039e3660046120df565b610dfb565b6102dd6103b1366004612251565b610ee5565b6102dd6103c436600461220f565b610f91565b6102a56103d73660046120df565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b61041f61040d366004612146565b60026020526000908152604090205481565b6040519081526020016101fe565b6102dd61043b366004612146565b611017565b6008546102a59073ffffffffffffffffffffffffffffffffffffffff1681565b610262611174565b6102dd6104763660046122b2565b611181565b6102dd61048936600461231a565b611218565b6009546102a59073ffffffffffffffffffffffffffffffffffffffff1681565b6102626104bc3660046120df565b61134f565b61041f6104cf3660046120df565b600c6020526000908152604090205481565b6102626104ef36600461203b565b61145f565b6101f2610502366004612418565b600560209081526000928352604080842090915290825290205460ff1681565b61041f610530366004612446565b611478565b6102dd6105433660046120df565b611631565b6102dd610556366004612146565b6116b7565b600061056682611778565b80610575575061057582611859565b92915050565b6000805461058890612484565b80601f01602080910402602001604051908101604052809291908181526020018280546105b490612484565b80156106015780601f106105d657610100808354040283529160200191610601565b820191906000526020600020905b8154815290600101906020018083116105e457829003601f168201915b505050505081565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff163381148061066c575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b6106bd5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b60008281526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61076c336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6107b85760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff84811691161461089f5760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d0000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff82166109025760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016106b4565b3373ffffffffffffffffffffffffffffffffffffffff84161480610949575060008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610984575073ffffffffffffffffffffffffffffffffffffffff8316600090815260056020908152604080832033845290915290205460ff165b6109d05760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055938616808352848320805460010190558583526003825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60075460065473ffffffffffffffffffffffffffffffffffffffff9091169060009061271090610ad29085612507565b610adc9190612573565b90509250929050565b610b13336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610b5f5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b610b6b600e8383611f0d565b505050565b610b9e336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610bea5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600655565b610c1d336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610c695760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610cbb838383610829565b73ffffffffffffffffffffffffffffffffffffffff82163b1580610daf57506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610b6b5760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610e51575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610e8c575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b610ed85760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b610ee1826119ff565b5050565b610f13336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610f5f5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b6fffffffffffffffffffffffffffffffff83166000908152600a60205260409020610f8b908383611f0d565b50505050565b610fbf336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b61100b5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b610b6b600d8383611f0d565b60085473ffffffffffffffffffffffffffffffffffffffff163314806110fa57506009546040517fb70096130000000000000000000000000000000000000000000000000000000081523360048201523060248201526000357fffffffff0000000000000000000000000000000000000000000000000000000016604482015273ffffffffffffffffffffffffffffffffffffffff9091169063b700961390606401602060405180830381865afa1580156110d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fa91906125a4565b61110357600080fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b6001805461058890612484565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611223848484610829565b73ffffffffffffffffffffffffffffffffffffffff83163b158061130357506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061129c9033908990889088906004016125c1565b6020604051808303816000875af11580156112bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112df9190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610f8b5760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b6000818152600c6020526040812054606091608084901c9184919061138657816fffffffffffffffffffffffffffffffff16611396565b6000858152600c60205260409020545b6fffffffffffffffffffffffffffffffff84166000908152600a60205260408120805492935090916113c790612484565b90501115611427576fffffffffffffffffffffffffffffffff83166000908152600a60205260409020600e906113fc83611b2f565b60405160200161140e939291906126db565b6040516020818303038152906040529350505050919050565b600d611444846fffffffffffffffffffffffffffffffff16611b2f565b61144d83611b2f565b60405160200161140e93929190612733565b600a602052600090815260409020805461058890612484565b60085460009073ffffffffffffffffffffffffffffffffffffffff163314806114b85750600f5473ffffffffffffffffffffffffffffffffffffffff1633145b6115045760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b6fffffffffffffffffffffffffffffffff8084166000908152600b60205260408120805460019391929161153a91859116612788565b82546101009290920a6fffffffffffffffffffffffffffffffff8181021990931691831602179091558481166000908152600b6020526040812054909250167fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086901b161790506115ad8582611c61565b82156115c5576000818152600c602052604090208390555b82846fffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6d5335192a1efe736f886245fc1f6dbf882294247353ca1a57cb804607898b898460405161162191815260200190565b60405180910390a4949350505050565b61165f336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6116ab5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b6116b4816119ff565b50565b6116e5336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6117315760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061180b57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806105755750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806105755750507fffffffff00000000000000000000000000000000000000000000000000000000167f2a55205a000000000000000000000000000000000000000000000000000000001490565b60095460009073ffffffffffffffffffffffffffffffffffffffff1680158015906119d257506040517fb700961300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527fffffffff000000000000000000000000000000000000000000000000000000008516604483015282169063b700961390606401602060405180830381865afa1580156119ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d291906125a4565b806119f7575060085473ffffffffffffffffffffffffffffffffffffffff8581169116145b949350505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1680611a715760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e5445440000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558583526003825280832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560049092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606081611b6f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611b995780611b83816127bc565b9150611b929050600a83612573565b9150611b73565b60008167ffffffffffffffff811115611bb457611bb46122eb565b6040519080825280601f01601f191660200182016040528015611bde576020820181803683370190505b5090505b84156119f757611bf36001836127f5565b9150611c00600a8661280c565b611c0b906030612820565b60f81b818381518110611c2057611c20612838565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611c5a600a86612573565b9450611be2565b611c6b8282611da8565b73ffffffffffffffffffffffffffffffffffffffff82163b1580611d5c57506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252336004830152600060248301819052604483018490526080606484015260848301529073ffffffffffffffffffffffffffffffffffffffff84169063150b7a029060a4016020604051808303816000875af1158015611d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d389190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610ee15760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8216611e0b5760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016106b4565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611e7d5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e54454400000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080546001019055848352600390915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f1990612484565b90600052602060002090601f016020900481019282611f3b5760008555611f9f565b82601f10611f72578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611f9f565b82800160010185558215611f9f579182015b82811115611f9f578235825591602001919060010190611f84565b50611fab929150611faf565b5090565b5b80821115611fab5760008155600101611fb0565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146116b457600080fd5b60006020828403121561200457600080fd5b813561200f81611fc4565b9392505050565b80356fffffffffffffffffffffffffffffffff8116811461203657600080fd5b919050565b60006020828403121561204d57600080fd5b61200f82612016565b60005b83811015612071578181015183820152602001612059565b83811115610f8b5750506000910152565b6000815180845261209a816020860160208601612056565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061200f6020830184612082565b6000602082840312156120f157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146116b457600080fd5b6000806040838503121561212d57600080fd5b8235612138816120f8565b946020939093013593505050565b60006020828403121561215857600080fd5b813561200f816120f8565b60008060006060848603121561217857600080fd5b8335612183816120f8565b92506020840135612193816120f8565b929592945050506040919091013590565b600080604083850312156121b757600080fd5b50508035926020909101359150565b60008083601f8401126121d857600080fd5b50813567ffffffffffffffff8111156121f057600080fd5b60208301915083602082850101111561220857600080fd5b9250929050565b6000806020838503121561222257600080fd5b823567ffffffffffffffff81111561223957600080fd5b612245858286016121c6565b90969095509350505050565b60008060006040848603121561226657600080fd5b61226f84612016565b9250602084013567ffffffffffffffff81111561228b57600080fd5b612297868287016121c6565b9497909650939450505050565b80151581146116b457600080fd5b600080604083850312156122c557600080fd5b82356122d0816120f8565b915060208301356122e0816122a4565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561233057600080fd5b843561233b816120f8565b9350602085013561234b816120f8565b925060408501359150606085013567ffffffffffffffff8082111561236f57600080fd5b818701915087601f83011261238357600080fd5b813581811115612395576123956122eb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156123db576123db6122eb565b816040528281528a60208487010111156123f457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561242b57600080fd5b8235612436816120f8565b915060208301356122e0816120f8565b60008060006060848603121561245b57600080fd5b8335612466816120f8565b925061247460208501612016565b9150604084013590509250925092565b600181811c9082168061249857607f821691505b602082108114156124d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561253f5761253f6124d8565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261258257612582612544565b500490565b60006020828403121561259957600080fd5b815161200f81611fc4565b6000602082840312156125b657600080fd5b815161200f816122a4565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526126006080830184612082565b9695505050505050565b8054600090600181811c908083168061262457607f831692505b602080841082141561265f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b81801561267357600181146126a2576126cf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506126cf565b60008881526020902060005b868110156126c75781548b8201529085019083016126ae565b505084890196505b50505050505092915050565b60006126f06126ea838761260a565b8561260a565b7f2f0000000000000000000000000000000000000000000000000000000000000081528351612726816001840160208801612056565b0160010195945050505050565b600061273f828661260a565b845161274f818360208901612056565b7f2f0000000000000000000000000000000000000000000000000000000000000091019081528351612726816001840160208801612056565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156127b3576127b36124d8565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127ee576127ee6124d8565b5060010190565b600082821015612807576128076124d8565b500390565b60008261281b5761281b612544565b500690565b60008219821115612833576128336124d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212209f52495de295bee914760b58cbd34aa3d31885e36004ed564c817e16c1ed9eed64736f6c634300080b0033

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

000000000000000000000000c5c721caa3cad959818e891b533a34c37946e9bf0000000000000000000000008c1927427eaaca6a64e238544adfb95451cc05a1

-----Decoded View---------------
Arg [0] : owner (address): 0xC5C721caA3cAd959818e891b533a34c37946e9Bf
Arg [1] : authority (address): 0x8c1927427eaAcA6A64E238544ADfb95451cc05A1

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c5c721caa3cad959818e891b533a34c37946e9bf
Arg [1] : 0000000000000000000000008c1927427eaaca6a64e238544adfb95451cc05a1


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Digital Culture, Curated. Quantum is an NFT platform for artists and collectors to share their work with the world.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.