ETH Price: $3,406.86 (+2.86%)

Contract

0x9705a7113363A383c8A96689e20286AbE6612bb3
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...212177392024-11-18 22:57:474 days ago1731970667IN
QuantumKeyRing: QKR Token
0 ETH0.0002851311.80892945
Set Approval For...212056712024-11-17 6:35:236 days ago1731825323IN
QuantumKeyRing: QKR Token
0 ETH0.000330347.17234723
Set Approval For...211775642024-11-13 8:25:5910 days ago1731486359IN
QuantumKeyRing: QKR Token
0 ETH0.0008201617.80718913
Safe Transfer Fr...210598252024-10-27 22:02:1127 days ago1730066531IN
QuantumKeyRing: QKR Token
0 ETH0.000308527.58342459
Set Approval For...210036752024-10-20 2:02:5934 days ago1729389779IN
QuantumKeyRing: QKR Token
0 ETH0.000276616.00570239
Set Approval For...209993512024-10-19 11:35:2335 days ago1729337723IN
QuantumKeyRing: QKR Token
0 ETH0.000426229.2540221
Set Approval For...208619612024-09-30 7:25:5954 days ago1727681159IN
QuantumKeyRing: QKR Token
0 ETH0.000257465.59001938
Set Approval For...208610042024-09-30 4:14:1154 days ago1727669651IN
QuantumKeyRing: QKR Token
0 ETH0.00024575.33460965
Safe Transfer Fr...207664462024-09-16 23:25:4767 days ago1726529147IN
QuantumKeyRing: QKR Token
0 ETH0.000100172.49887449
Safe Transfer Fr...207664362024-09-16 23:23:4767 days ago1726529027IN
QuantumKeyRing: QKR Token
0 ETH0.000107412.67931769
Safe Transfer Fr...207597792024-09-16 1:03:1168 days ago1726448591IN
QuantumKeyRing: QKR Token
0 ETH0.00008312.07308538
Safe Transfer Fr...207597652024-09-16 1:00:2368 days ago1726448423IN
QuantumKeyRing: QKR Token
0 ETH0.00011311.9773578
Set Approval For...207303122024-09-11 22:19:5973 days ago1726093199IN
QuantumKeyRing: QKR Token
0 ETH0.000086171.86766893
Set Approval For...207020822024-09-07 23:41:4776 days ago1725752507IN
QuantumKeyRing: QKR Token
0 ETH0.000036211.5
Set Approval For...206547512024-09-01 9:13:1183 days ago1725181991IN
QuantumKeyRing: QKR Token
0 ETH0.000050811.10319984
Set Approval For...205730272024-08-20 23:11:1194 days ago1724195471IN
QuantumKeyRing: QKR Token
0 ETH0.000045190.97967318
Set Approval For...205373892024-08-15 23:45:2399 days ago1723765523IN
QuantumKeyRing: QKR Token
0 ETH0.000041081.701709
Safe Transfer Fr...200482952024-06-08 16:26:35168 days ago1717863995IN
QuantumKeyRing: QKR Token
0 ETH0.000530529.27657919
Set Approval For...200440592024-06-08 2:14:59168 days ago1717812899IN
QuantumKeyRing: QKR Token
0 ETH0.000289566.2868858
Set Approval For...200399222024-06-07 12:22:11169 days ago1717762931IN
QuantumKeyRing: QKR Token
0 ETH0.0003733915.4641834
Safe Transfer Fr...200399072024-06-07 12:18:59169 days ago1717762739IN
QuantumKeyRing: QKR Token
0 ETH0.0005775314.4060073
Set Approval For...200201302024-06-04 18:04:23172 days ago1717524263IN
QuantumKeyRing: QKR Token
0 ETH0.0006565614.2552335
Set Approval For...199648902024-05-28 0:49:35179 days ago1716857375IN
QuantumKeyRing: QKR Token
0 ETH0.000440569.56537413
Set Approval For...197351232024-04-25 21:39:35212 days ago1714081175IN
QuantumKeyRing: QKR Token
0 ETH0.000411958.94417147
Set Approval For...195688662024-04-02 15:01:35235 days ago1712070095IN
QuantumKeyRing: QKR Token
0 ETH0.0034317774.50982315
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:
QuantumKeyRing

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion
File 1 of 6 : QuantumKeyRing.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";

//                                                   
//                                                   
//                                  XXXXXXX          
//                               X XXXX XXXXXX       
//                             XXSXSXXXXXX XXXXX     
//                             XXXXX XX  XXXXXSXX    
//                           XXXX  XXXS SSXX XXXX    
//                           XXX XXXX     XXXXXX X   
//                          XXXXXXX X      XXX XXX  
//                          XXXXXXXX       XXXXXXX   
//                           SXX XXXXX    XXXSXXSX   
//                           XXXXXXXXX XXXXXXXXXX    
//                          SXXX X XX XXXXXX XXX  
//                       XXXXXX X XXX X X XSXX   
//                      SXXXXX X XXSXXXXS XX     
//                    XSXSX  XXXXXX            
//                   SXXX XXX XXXXX                  
//                 XXXXX SXXXXXX                     
//                SXXS  X XXXXX                      
//              XXXXXX X XSX X                       
//            XSXXX XX XXXXX                         
//          XXSXSSX XXXXXX                        
//        XSXXXSXXXXXXXXX                       
//        XXXXX XXXXXX   

/// @title The Quantum Key Ring. The keys do something.
/// @author exp.table
contract QuantumKeyRing is ERC721S, ERC2981, Auth {
    using Strings for uint256;
    using BitMaps for BitMaps.BitMap;

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

    mapping (uint256 => string) public keyCID;
    mapping (uint256 => uint256) public keySupply;
    mapping (uint256 => uint256) public tokenIdToSkinId;

    uint private constant _SEPARATOR = 10**4;
    string private _baseURI = "ipfs://";
    address private _minter;

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

	/// @notice Deploys QuantumKeyRing
    /// @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("QuantumKeyRing", "QKR") Auth(owner, Authority(authority)) {
        _baseURI = "ipfs://";
    }

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

    /// @notice set address of the minter
    /// @param minter The address of the minter - should be QuantumKeyMaker
    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 IPFS CID
    /// @param keyId The key id
    /// @param cid cid
    function setCID(uint256 keyId, string calldata cid) public requiresAuth {
        keyCID[keyId] = 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%
        ```
        keyRing.setRoyaltyFee(500)
        ```
    */
    function setRoyaltyFee(uint256 fee) public requiresAuth {
        _royaltyFee = fee;
    }

    /// >>>>>>>>>>>>>>>>>>>>>  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) {
        uint256 keyId = tokenId / _SEPARATOR;
        return string(abi.encodePacked(_baseURI, keyCID[keyId], "/" , tokenIdToSkinId[tokenId].toString()));
    }

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

    /// @notice Mints new keys
    /// @dev there is no check regarding limiting supply
    /// @param to recipient of newly minted tokens
    /// @param keyId id of the key
    /// @param amount amount to mint
    function make(address to, uint256 keyId, uint256 amount) public {
        require(msg.sender == owner || msg.sender == _minter, "NOT_AUTHORIZED");
        uint256 currSupply = keySupply[keyId];
        for(uint i; i < amount; i++) {
            _safeMint(to, (keyId * _SEPARATOR) +  currSupply + i);
        }
        keySupply[keyId] += amount;

    }

    /// @notice Burns key
    /// @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);
    }

    /// @notice Applies a skin to a key
    /// @param tokenId id of the key
    /// @param skinId index of the skin
    function applySkin(uint256 tokenId, uint256 skinId) public {
        require(ownerOf[tokenId] == msg.sender, "NOT_OWNER");
        require(skinId > tokenIdToSkinId[tokenId], "CANT_REVERT");
        tokenIdToSkinId[tokenId] = skinId;
    }

    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":"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":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"skinId","type":"uint256"}],"name":"applySkin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"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":"uint256","name":"","type":"uint256"}],"name":"keyCID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"keySupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"keyId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"make","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":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"uint256","name":"keyId","type":"uint256"},{"internalType":"string","name":"cid","type":"string"}],"name":"setCID","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":"","type":"uint256"}],"name":"tokenIdToSkinId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526007608081905266697066733a2f2f60c81b60a09081526200002a91600d919062000195565b503480156200003857600080fd5b50604051620028bb380380620028bb8339810160408190526200005b9162000258565b604080518082018252600e81526d5175616e74756d4b657952696e6760901b60208083019182528351808501909452600384526228a5a960e91b90840152815185938593929091620000b09160009162000195565b508051620000c690600190602084019062000195565b5050600880546001600160a01b038086166001600160a01b03199283168117909355600980549186169190921617905560405190915033907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a3505060408051808201909152600780825266697066733a2f2f60c81b60209092019182526200018c91600d9162000195565b505050620002cd565b828054620001a39062000290565b90600052602060002090601f016020900481019282620001c7576000855562000212565b82601f10620001e257805160ff191683800117855562000212565b8280016001018555821562000212579182015b8281111562000212578251825591602001919060010190620001f5565b506200022092915062000224565b5090565b5b8082111562000220576000815560010162000225565b80516001600160a01b03811681146200025357600080fd5b919050565b600080604083850312156200026c57600080fd5b62000277836200023b565b915062000287602084016200023b565b90509250929050565b600181811c90821680620002a557607f821691505b60208210811415620002c757634e487b7160e01b600052602260045260246000fd5b50919050565b6125de80620002dd6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636352211e116101045780638f17ae32116100a2578063bf7e214f11610071578063bf7e214f14610496578063c87b56dd146104b6578063e985e9c5146104c9578063fca3b5aa146104f757600080fd5b80638f17ae321461044857806395d89b4114610468578063a22cb46514610470578063b88d4fde1461048357600080fd5b806382295a2d116100de57806382295a2d146103ef5780638ad8d1d6146104025780638c73a042146104155780638da5cb5b1461042857600080fd5b80636352211e1461038657806370a08231146103bc5780637a9e5e4b146103dc57600080fd5b806323b872dd1161017157806341e42f301161014b57806341e42f301461033a57806342842e0e1461034d57806342966c681461036057806355f804b31461037357600080fd5b806323b872dd146102d55780632a55205a146102e85780633e4086e51461032757600080fd5b8063095ea7b3116101ad578063095ea7b31461026c57806313af403514610281578063197d3520146102945780631adbdf32146102a757600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611e0c565b61050a565b60405190151581526020015b60405180910390f35b61020461052a565b6040516101f39190611ea6565b61024761021f366004611eb9565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b61027f61027a366004611ef4565b6105b8565b005b61027f61028f366004611f20565b6106ed565b61027f6102a2366004611f3d565b6107d8565b6102c76102b5366004611eb9565b600c6020526000908152604090205481565b6040519081526020016101f3565b61027f6102e3366004611f5f565b6108ba565b6102fb6102f6366004611f3d565b610b33565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101f3565b61027f610335366004611eb9565b610b76565b61027f610348366004611f20565b610bf5565b61027f61035b366004611f5f565b610cb6565b61027f61036e366004611eb9565b610e06565b61027f610381366004611fe9565b610ef0565b610247610394366004611eb9565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102c76103ca366004611f20565b60026020526000908152604090205481565b61027f6103ea366004611f20565b610f76565b61027f6103fd36600461202b565b6110d3565b610204610410366004611eb9565b61116c565b61027f610423366004612077565b611185565b6008546102479073ffffffffffffffffffffffffffffffffffffffff1681565b6102c7610456366004611eb9565b600b6020526000908152604090205481565b61020461128e565b61027f61047e3660046120ba565b61129b565b61027f610491366004612122565b611332565b6009546102479073ffffffffffffffffffffffffffffffffffffffff1681565b6102046104c4366004611eb9565b611469565b6101e76104d7366004612220565b600560209081526000928352604080842090915290825290205460ff1681565b61027f610505366004611f20565b6114ce565b60006105158261158f565b80610524575061052482611670565b92915050565b600080546105379061224e565b80601f01602080910402602001604051908101604052809291908181526020018280546105639061224e565b80156105b05780601f10610585576101008083540402835291602001916105b0565b820191906000526020600020905b81548152906001019060200180831161059357829003601f168201915b505050505081565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff163381148061061b575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b61066c5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b60008281526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61071b336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b6107675760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350565b60008281526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16331461084b5760405162461bcd60e51b815260206004820152600960248201527f4e4f545f4f574e455200000000000000000000000000000000000000000000006044820152606401610663565b6000828152600c602052604090205481116108a85760405162461bcd60e51b815260206004820152600b60248201527f43414e545f5245564552540000000000000000000000000000000000000000006044820152606401610663565b6000918252600c602052604090912055565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116146109305760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610663565b73ffffffffffffffffffffffffffffffffffffffff82166109935760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610663565b3373ffffffffffffffffffffffffffffffffffffffff841614806109da575060008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610a15575073ffffffffffffffffffffffffffffffffffffffff8316600090815260056020908152604080832033845290915290205460ff165b610a615760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610663565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055938616808352848320805460010190558583526003825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60075460065473ffffffffffffffffffffffffffffffffffffffff9091169060009061271090610b6390856122d1565b610b6d919061233d565b90509250929050565b610ba4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b610bf05760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b600655565b610c23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b610c6f5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610cc18383836108ba565b73ffffffffffffffffffffffffffffffffffffffff82163b1580610db557506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d919190612351565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610e015760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610663565b505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610e5c575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610e97575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b610ee35760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610663565b610eec82611816565b5050565b610f1e336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b610f6a5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b610e01600d8383611d24565b60085473ffffffffffffffffffffffffffffffffffffffff1633148061105957506009546040517fb70096130000000000000000000000000000000000000000000000000000000081523360048201523060248201526000357fffffffff0000000000000000000000000000000000000000000000000000000016604482015273ffffffffffffffffffffffffffffffffffffffff9091169063b700961390606401602060405180830381865afa158015611035573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611059919061236e565b61106257600080fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b611101336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b61114d5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b6000838152600a60205260409020611166908383611d24565b50505050565b600a60205260009081526040902080546105379061224e565b60085473ffffffffffffffffffffffffffffffffffffffff163314806111c25750600e5473ffffffffffffffffffffffffffffffffffffffff1633145b61120e5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610663565b6000828152600b6020526040812054905b8281101561126457611252858284611239612710896122d1565b611243919061238b565b61124d919061238b565b611946565b8061125c816123a3565b91505061121f565b506000838152600b60205260408120805484929061128390849061238b565b909155505050505050565b600180546105379061224e565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61133d8484846108ba565b73ffffffffffffffffffffffffffffffffffffffff83163b158061141d57506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906113b69033908990889088906004016123dc565b6020604051808303816000875af11580156113d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f99190612351565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b6111665760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610663565b606060006114796127108461233d565b6000818152600a60209081526040808320878452600c90925290912054919250600d916114a590611a8d565b6040516020016114b7939291906124f6565b604051602081830303815290604052915050919050565b6114fc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b6115485760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061162257507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806105245750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806105245750507fffffffff00000000000000000000000000000000000000000000000000000000167f2a55205a000000000000000000000000000000000000000000000000000000001490565b60095460009073ffffffffffffffffffffffffffffffffffffffff1680158015906117e957506040517fb700961300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527fffffffff000000000000000000000000000000000000000000000000000000008516604483015282169063b700961390606401602060405180830381865afa1580156117c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e9919061236e565b8061180e575060085473ffffffffffffffffffffffffffffffffffffffff8581169116145b949350505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16806118885760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610663565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558583526003825280832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560049092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6119508282611bbf565b73ffffffffffffffffffffffffffffffffffffffff82163b1580611a4157506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252336004830152600060248301819052604483018490526080606484015260848301529073ffffffffffffffffffffffffffffffffffffffff84169063150b7a029060a4016020604051808303816000875af11580156119f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1d9190612351565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610eec5760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610663565b606081611acd57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611af75780611ae1816123a3565b9150611af09050600a8361233d565b9150611ad1565b60008167ffffffffffffffff811115611b1257611b126120f3565b6040519080825280601f01601f191660200182016040528015611b3c576020820181803683370190505b5090505b841561180e57611b5160018361254e565b9150611b5e600a86612565565b611b6990603061238b565b60f81b818381518110611b7e57611b7e612579565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611bb8600a8661233d565b9450611b40565b73ffffffffffffffffffffffffffffffffffffffff8216611c225760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610663565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611c945760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610663565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080546001019055848352600390915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611d309061224e565b90600052602060002090601f016020900481019282611d525760008555611db6565b82601f10611d89578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611db6565b82800160010185558215611db6579182015b82811115611db6578235825591602001919060010190611d9b565b50611dc2929150611dc6565b5090565b5b80821115611dc25760008155600101611dc7565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611e0957600080fd5b50565b600060208284031215611e1e57600080fd5b8135611e2981611ddb565b9392505050565b60005b83811015611e4b578181015183820152602001611e33565b838111156111665750506000910152565b60008151808452611e74816020860160208601611e30565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611e296020830184611e5c565b600060208284031215611ecb57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611e0957600080fd5b60008060408385031215611f0757600080fd5b8235611f1281611ed2565b946020939093013593505050565b600060208284031215611f3257600080fd5b8135611e2981611ed2565b60008060408385031215611f5057600080fd5b50508035926020909101359150565b600080600060608486031215611f7457600080fd5b8335611f7f81611ed2565b92506020840135611f8f81611ed2565b929592945050506040919091013590565b60008083601f840112611fb257600080fd5b50813567ffffffffffffffff811115611fca57600080fd5b602083019150836020828501011115611fe257600080fd5b9250929050565b60008060208385031215611ffc57600080fd5b823567ffffffffffffffff81111561201357600080fd5b61201f85828601611fa0565b90969095509350505050565b60008060006040848603121561204057600080fd5b83359250602084013567ffffffffffffffff81111561205e57600080fd5b61206a86828701611fa0565b9497909650939450505050565b60008060006060848603121561208c57600080fd5b833561209781611ed2565b95602085013595506040909401359392505050565b8015158114611e0957600080fd5b600080604083850312156120cd57600080fd5b82356120d881611ed2565b915060208301356120e8816120ac565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561213857600080fd5b843561214381611ed2565b9350602085013561215381611ed2565b925060408501359150606085013567ffffffffffffffff8082111561217757600080fd5b818701915087601f83011261218b57600080fd5b81358181111561219d5761219d6120f3565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e36120f3565b816040528281528a60208487010111156121fc57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561223357600080fd5b823561223e81611ed2565b915060208301356120e881611ed2565b600181811c9082168061226257607f821691505b6020821081141561229c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612309576123096122a2565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261234c5761234c61230e565b500490565b60006020828403121561236357600080fd5b8151611e2981611ddb565b60006020828403121561238057600080fd5b8151611e29816120ac565b6000821982111561239e5761239e6122a2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156123d5576123d56122a2565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261241b6080830184611e5c565b9695505050505050565b8054600090600181811c908083168061243f57607f831692505b602080841082141561247a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b81801561248e57600181146124bd576124ea565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506124ea565b60008881526020902060005b868110156124e25781548b8201529085019083016124c9565b505084890196505b50505050505092915050565b600061250b6125058387612425565b85612425565b7f2f0000000000000000000000000000000000000000000000000000000000000081528351612541816001840160208801611e30565b0160010195945050505050565b600082821015612560576125606122a2565b500390565b6000826125745761257461230e565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220e7cf72724b9ab7b6720da8bf2c5ecf4d3546f880eb060908fac8bdda6329449f64736f6c634300080b00330000000000000000000000009fef8de6fb60f43079565ece74f235aed225face0000000000000000000000008c1927427eaaca6a64e238544adfb95451cc05a1

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636352211e116101045780638f17ae32116100a2578063bf7e214f11610071578063bf7e214f14610496578063c87b56dd146104b6578063e985e9c5146104c9578063fca3b5aa146104f757600080fd5b80638f17ae321461044857806395d89b4114610468578063a22cb46514610470578063b88d4fde1461048357600080fd5b806382295a2d116100de57806382295a2d146103ef5780638ad8d1d6146104025780638c73a042146104155780638da5cb5b1461042857600080fd5b80636352211e1461038657806370a08231146103bc5780637a9e5e4b146103dc57600080fd5b806323b872dd1161017157806341e42f301161014b57806341e42f301461033a57806342842e0e1461034d57806342966c681461036057806355f804b31461037357600080fd5b806323b872dd146102d55780632a55205a146102e85780633e4086e51461032757600080fd5b8063095ea7b3116101ad578063095ea7b31461026c57806313af403514610281578063197d3520146102945780631adbdf32146102a757600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611e0c565b61050a565b60405190151581526020015b60405180910390f35b61020461052a565b6040516101f39190611ea6565b61024761021f366004611eb9565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b61027f61027a366004611ef4565b6105b8565b005b61027f61028f366004611f20565b6106ed565b61027f6102a2366004611f3d565b6107d8565b6102c76102b5366004611eb9565b600c6020526000908152604090205481565b6040519081526020016101f3565b61027f6102e3366004611f5f565b6108ba565b6102fb6102f6366004611f3d565b610b33565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101f3565b61027f610335366004611eb9565b610b76565b61027f610348366004611f20565b610bf5565b61027f61035b366004611f5f565b610cb6565b61027f61036e366004611eb9565b610e06565b61027f610381366004611fe9565b610ef0565b610247610394366004611eb9565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102c76103ca366004611f20565b60026020526000908152604090205481565b61027f6103ea366004611f20565b610f76565b61027f6103fd36600461202b565b6110d3565b610204610410366004611eb9565b61116c565b61027f610423366004612077565b611185565b6008546102479073ffffffffffffffffffffffffffffffffffffffff1681565b6102c7610456366004611eb9565b600b6020526000908152604090205481565b61020461128e565b61027f61047e3660046120ba565b61129b565b61027f610491366004612122565b611332565b6009546102479073ffffffffffffffffffffffffffffffffffffffff1681565b6102046104c4366004611eb9565b611469565b6101e76104d7366004612220565b600560209081526000928352604080842090915290825290205460ff1681565b61027f610505366004611f20565b6114ce565b60006105158261158f565b80610524575061052482611670565b92915050565b600080546105379061224e565b80601f01602080910402602001604051908101604052809291908181526020018280546105639061224e565b80156105b05780601f10610585576101008083540402835291602001916105b0565b820191906000526020600020905b81548152906001019060200180831161059357829003601f168201915b505050505081565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff163381148061061b575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b61066c5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b60008281526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61071b336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b6107675760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350565b60008281526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16331461084b5760405162461bcd60e51b815260206004820152600960248201527f4e4f545f4f574e455200000000000000000000000000000000000000000000006044820152606401610663565b6000828152600c602052604090205481116108a85760405162461bcd60e51b815260206004820152600b60248201527f43414e545f5245564552540000000000000000000000000000000000000000006044820152606401610663565b6000918252600c602052604090912055565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116146109305760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610663565b73ffffffffffffffffffffffffffffffffffffffff82166109935760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610663565b3373ffffffffffffffffffffffffffffffffffffffff841614806109da575060008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610a15575073ffffffffffffffffffffffffffffffffffffffff8316600090815260056020908152604080832033845290915290205460ff165b610a615760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610663565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055938616808352848320805460010190558583526003825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60075460065473ffffffffffffffffffffffffffffffffffffffff9091169060009061271090610b6390856122d1565b610b6d919061233d565b90509250929050565b610ba4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b610bf05760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b600655565b610c23336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b610c6f5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610cc18383836108ba565b73ffffffffffffffffffffffffffffffffffffffff82163b1580610db557506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d919190612351565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610e015760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610663565b505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610e5c575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610e97575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b610ee35760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610663565b610eec82611816565b5050565b610f1e336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b610f6a5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b610e01600d8383611d24565b60085473ffffffffffffffffffffffffffffffffffffffff1633148061105957506009546040517fb70096130000000000000000000000000000000000000000000000000000000081523360048201523060248201526000357fffffffff0000000000000000000000000000000000000000000000000000000016604482015273ffffffffffffffffffffffffffffffffffffffff9091169063b700961390606401602060405180830381865afa158015611035573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611059919061236e565b61106257600080fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b611101336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b61114d5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b6000838152600a60205260409020611166908383611d24565b50505050565b600a60205260009081526040902080546105379061224e565b60085473ffffffffffffffffffffffffffffffffffffffff163314806111c25750600e5473ffffffffffffffffffffffffffffffffffffffff1633145b61120e5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610663565b6000828152600b6020526040812054905b8281101561126457611252858284611239612710896122d1565b611243919061238b565b61124d919061238b565b611946565b8061125c816123a3565b91505061121f565b506000838152600b60205260408120805484929061128390849061238b565b909155505050505050565b600180546105379061224e565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61133d8484846108ba565b73ffffffffffffffffffffffffffffffffffffffff83163b158061141d57506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906113b69033908990889088906004016123dc565b6020604051808303816000875af11580156113d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f99190612351565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b6111665760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610663565b606060006114796127108461233d565b6000818152600a60209081526040808320878452600c90925290912054919250600d916114a590611a8d565b6040516020016114b7939291906124f6565b604051602081830303815290604052915050919050565b6114fc336000357fffffffff0000000000000000000000000000000000000000000000000000000016611705565b6115485760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610663565b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061162257507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806105245750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806105245750507fffffffff00000000000000000000000000000000000000000000000000000000167f2a55205a000000000000000000000000000000000000000000000000000000001490565b60095460009073ffffffffffffffffffffffffffffffffffffffff1680158015906117e957506040517fb700961300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527fffffffff000000000000000000000000000000000000000000000000000000008516604483015282169063b700961390606401602060405180830381865afa1580156117c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e9919061236e565b8061180e575060085473ffffffffffffffffffffffffffffffffffffffff8581169116145b949350505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16806118885760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610663565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558583526003825280832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560049092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6119508282611bbf565b73ffffffffffffffffffffffffffffffffffffffff82163b1580611a4157506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252336004830152600060248301819052604483018490526080606484015260848301529073ffffffffffffffffffffffffffffffffffffffff84169063150b7a029060a4016020604051808303816000875af11580156119f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1d9190612351565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610eec5760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610663565b606081611acd57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611af75780611ae1816123a3565b9150611af09050600a8361233d565b9150611ad1565b60008167ffffffffffffffff811115611b1257611b126120f3565b6040519080825280601f01601f191660200182016040528015611b3c576020820181803683370190505b5090505b841561180e57611b5160018361254e565b9150611b5e600a86612565565b611b6990603061238b565b60f81b818381518110611b7e57611b7e612579565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611bb8600a8661233d565b9450611b40565b73ffffffffffffffffffffffffffffffffffffffff8216611c225760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610663565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611c945760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610663565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080546001019055848352600390915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611d309061224e565b90600052602060002090601f016020900481019282611d525760008555611db6565b82601f10611d89578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611db6565b82800160010185558215611db6579182015b82811115611db6578235825591602001919060010190611d9b565b50611dc2929150611dc6565b5090565b5b80821115611dc25760008155600101611dc7565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611e0957600080fd5b50565b600060208284031215611e1e57600080fd5b8135611e2981611ddb565b9392505050565b60005b83811015611e4b578181015183820152602001611e33565b838111156111665750506000910152565b60008151808452611e74816020860160208601611e30565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611e296020830184611e5c565b600060208284031215611ecb57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611e0957600080fd5b60008060408385031215611f0757600080fd5b8235611f1281611ed2565b946020939093013593505050565b600060208284031215611f3257600080fd5b8135611e2981611ed2565b60008060408385031215611f5057600080fd5b50508035926020909101359150565b600080600060608486031215611f7457600080fd5b8335611f7f81611ed2565b92506020840135611f8f81611ed2565b929592945050506040919091013590565b60008083601f840112611fb257600080fd5b50813567ffffffffffffffff811115611fca57600080fd5b602083019150836020828501011115611fe257600080fd5b9250929050565b60008060208385031215611ffc57600080fd5b823567ffffffffffffffff81111561201357600080fd5b61201f85828601611fa0565b90969095509350505050565b60008060006040848603121561204057600080fd5b83359250602084013567ffffffffffffffff81111561205e57600080fd5b61206a86828701611fa0565b9497909650939450505050565b60008060006060848603121561208c57600080fd5b833561209781611ed2565b95602085013595506040909401359392505050565b8015158114611e0957600080fd5b600080604083850312156120cd57600080fd5b82356120d881611ed2565b915060208301356120e8816120ac565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561213857600080fd5b843561214381611ed2565b9350602085013561215381611ed2565b925060408501359150606085013567ffffffffffffffff8082111561217757600080fd5b818701915087601f83011261218b57600080fd5b81358181111561219d5761219d6120f3565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e36120f3565b816040528281528a60208487010111156121fc57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561223357600080fd5b823561223e81611ed2565b915060208301356120e881611ed2565b600181811c9082168061226257607f821691505b6020821081141561229c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612309576123096122a2565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261234c5761234c61230e565b500490565b60006020828403121561236357600080fd5b8151611e2981611ddb565b60006020828403121561238057600080fd5b8151611e29816120ac565b6000821982111561239e5761239e6122a2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156123d5576123d56122a2565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261241b6080830184611e5c565b9695505050505050565b8054600090600181811c908083168061243f57607f831692505b602080841082141561247a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b81801561248e57600181146124bd576124ea565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506124ea565b60008881526020902060005b868110156124e25781548b8201529085019083016124c9565b505084890196505b50505050505092915050565b600061250b6125058387612425565b85612425565b7f2f0000000000000000000000000000000000000000000000000000000000000081528351612541816001840160208801611e30565b0160010195945050505050565b600082821015612560576125606122a2565b500390565b6000826125745761257461230e565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220e7cf72724b9ab7b6720da8bf2c5ecf4d3546f880eb060908fac8bdda6329449f64736f6c634300080b0033

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

0000000000000000000000009fef8de6fb60f43079565ece74f235aed225face0000000000000000000000008c1927427eaaca6a64e238544adfb95451cc05a1

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009fef8de6fb60f43079565ece74f235aed225face
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

Quantum Keys are membership tokens that grant access to exclusive IRL events, online mints, and more!

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.