ETH Price: $3,302.23 (-3.61%)
Gas: 7 Gwei

Contract

0xEDa159A0339826C96c30D39A1be8588d82212395
 

Overview

ETH Balance

2.361268024187177038 ETH

Eth Value

$7,797.44 (@ $3,302.23/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Withdraw Rewards194950372024-03-23 4:51:59102 days ago1711169519IN
0xEDa159A0...d82212395
0 ETH0.0009361716.10292973
Withdraw Rewards191373672024-02-02 1:10:47152 days ago1706836247IN
0xEDa159A0...d82212395
0 ETH0.0009301916
Withdraw Rewards191048012024-01-28 11:40:47157 days ago1706442047IN
0xEDa159A0...d82212395
0 ETH0.0013296314.67541367
Register NFT189206282024-01-02 15:36:59183 days ago1704209819IN
0xEDa159A0...d82212395
0 ETH0.0061842539.37358029
Withdraw Rewards189131132024-01-01 14:16:47184 days ago1704118607IN
0xEDa159A0...d82212395
0 ETH0.001316313.30261804
Withdraw Rewards189130342024-01-01 14:00:23184 days ago1704117623IN
0xEDa159A0...d82212395
0 ETH0.0011916112.90508608
Withdraw Rewards188970562023-12-30 8:09:11186 days ago1703923751IN
0xEDa159A0...d82212395
0 ETH0.0010810313.25838778
Withdraw Rewards188948782023-12-30 0:46:59186 days ago1703897219IN
0xEDa159A0...d82212395
0 ETH0.0013131717.45377953
Withdraw Rewards188547592023-12-24 9:33:11192 days ago1703410391IN
0xEDa159A0...d82212395
0 ETH0.0011589620
Withdraw Rewards188482302023-12-23 11:30:59193 days ago1703331059IN
0xEDa159A0...d82212395
0 ETH0.0017931419.41957668
Withdraw Rewards187946922023-12-15 23:10:11200 days ago1702681811IN
0xEDa159A0...d82212395
0 ETH0.0024097441.62980006
Withdraw Rewards187552072023-12-10 10:26:59206 days ago1702204019IN
0xEDa159A0...d82212395
0 ETH0.0014357824.69659184
Withdraw Rewards187531462023-12-10 3:31:35206 days ago1702179095IN
0xEDa159A0...d82212395
0 ETH0.0019081225.36148488
Withdraw Rewards187257232023-12-06 7:13:59210 days ago1701846839IN
0xEDa159A0...d82212395
0 ETH0.0041126354.66242298
Register NFT187225822023-12-05 20:39:59210 days ago1701808799IN
0xEDa159A0...d82212395
0 ETH0.0018130856.41574974
Register NFT187225762023-12-05 20:38:47210 days ago1701808727IN
0xEDa159A0...d82212395
0 ETH0.0099674655.75640821
Withdraw Rewards187133042023-12-04 13:29:23212 days ago1701696563IN
0xEDa159A0...d82212395
0 ETH0.0028643444.23629094
Withdraw Rewards186964692023-12-02 4:56:11214 days ago1701492971IN
0xEDa159A0...d82212395
0 ETH0.0015928927.51831248
Withdraw Rewards186744942023-11-29 3:08:59217 days ago1701227339IN
0xEDa159A0...d82212395
0 ETH0.0027053236.04794474
Withdraw Rewards186708862023-11-28 15:02:23218 days ago1701183743IN
0xEDa159A0...d82212395
0 ETH0.0109167460.02434705
Withdraw Rewards186535742023-11-26 4:50:23220 days ago1700974223IN
0xEDa159A0...d82212395
0 ETH0.001052418.12170895
Withdraw Rewards186394762023-11-24 5:26:47222 days ago1700803607IN
0xEDa159A0...d82212395
0 ETH0.0011519119.90001784
Withdraw Rewards186272012023-11-22 12:13:11224 days ago1700655191IN
0xEDa159A0...d82212395
0 ETH0.0017836927.5469693
Withdraw Rewards186246602023-11-22 3:39:47224 days ago1700624387IN
0xEDa159A0...d82212395
0 ETH0.0020645335.58866159
Withdraw Rewards186201812023-11-21 12:37:47225 days ago1700570267IN
0xEDa159A0...d82212395
0 ETH0.0019334325.69791571
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
201449492024-06-22 4:45:4711 days ago1719031547
0xEDa159A0...d82212395
0.00042369 ETH
194950372024-03-23 4:51:59102 days ago1711169519
0xEDa159A0...d82212395
0.00454009 ETH
191373672024-02-02 1:10:47152 days ago1706836247
0xEDa159A0...d82212395
0.00454099 ETH
191048012024-01-28 11:40:47157 days ago1706442047
0xEDa159A0...d82212395
0.12334892 ETH
189206282024-01-02 15:36:59183 days ago1704209819
0xEDa159A0...d82212395
0.01760079 ETH
189131132024-01-01 14:16:47184 days ago1704118607
0xEDa159A0...d82212395
0.04961279 ETH
189130342024-01-01 14:00:23184 days ago1704117623
0xEDa159A0...d82212395
0.02480639 ETH
188970562023-12-30 8:09:11186 days ago1703923751
0xEDa159A0...d82212395
0.05277941 ETH
188948782023-12-30 0:46:59186 days ago1703897219
0xEDa159A0...d82212395
0.02227221 ETH
188827222023-12-28 7:47:35188 days ago1703749655
0xEDa159A0...d82212395
0.0000475 ETH
188547592023-12-24 9:33:11192 days ago1703410391
0xEDa159A0...d82212395
0.04540935 ETH
188482302023-12-23 11:30:59193 days ago1703331059
0xEDa159A0...d82212395
0.02480633 ETH
187946922023-12-15 23:10:11200 days ago1702681811
0xEDa159A0...d82212395
0.04540935 ETH
187552072023-12-10 10:26:59206 days ago1702204019
0xEDa159A0...d82212395
0.00454093 ETH
187531462023-12-10 3:31:35206 days ago1702179095
0xEDa159A0...d82212395
0.02299091 ETH
187257232023-12-06 7:13:59210 days ago1701846839
0xEDa159A0...d82212395
0.02289872 ETH
187133042023-12-04 13:29:23212 days ago1701696563
0xEDa159A0...d82212395
0.04702292 ETH
186964692023-12-02 4:56:11214 days ago1701492971
0xEDa159A0...d82212395
0.0441696 ETH
186744942023-11-29 3:08:59217 days ago1701227339
0xEDa159A0...d82212395
0.22522491 ETH
186708862023-11-28 15:02:23218 days ago1701183743
0xEDa159A0...d82212395
0.03626799 ETH
186535742023-11-26 4:50:23220 days ago1700974223
0xEDa159A0...d82212395
0.00882104 ETH
186394762023-11-24 5:26:47222 days ago1700803607
0xEDa159A0...d82212395
0.04436284 ETH
186272012023-11-22 12:13:11224 days ago1700655191
0xEDa159A0...d82212395
0.00908006 ETH
186246602023-11-22 3:39:47224 days ago1700624387
0xEDa159A0...d82212395
0.02206733 ETH
186201812023-11-21 12:37:47225 days ago1700570267
0xEDa159A0...d82212395
0.02256976 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NFTRegistry

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : NFTregistry.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

interface IXENNFTContract {
    function ownerOf(uint256) external view returns (address);
}

contract NFTRegistry {
    struct NFT {
        uint256 tokenId;
        string category;
    }

    struct User {
        NFT[] userNFTs;
        uint256 userRewards; // Tracks total rewards sebt to user.
        uint256 userPoints;
        uint256 lastRewardRatio;
    }

    mapping(address => User) public users;
    mapping(uint256 => string) private categoryMap;
    mapping(uint256 => address) public currentHolder;
    mapping(string => uint256) public globalCounters;

    uint256 private constant XUNICORN_MIN_ID = 1;
    uint256 private constant XUNICORN_MAX_ID = 100;
    uint256 private constant EXOTIC_MIN_ID = 101;
    uint256 private constant EXOTIC_MAX_ID = 1000;
    uint256 private constant LEGENDARY_MIN_ID = 1001;
    uint256 private constant LEGENDARY_MAX_ID = 3000;
    uint256 private constant EPIC_MIN_ID = 3001;
    uint256 private constant EPIC_MAX_ID = 6000;
    uint256 private constant RARE_MIN_ID = 6001;
    uint256 private constant RARE_MAX_ID = 10000;

    mapping(uint256 => uint256) private rewardsMap;
    address public nftContractAddress;
    uint256 public totalRewards;
    uint256 public totalPoints;
    uint256 public rewardRatio;

    uint256 private constant XUNICORN_WEIGHT = 50;
    uint256 private constant EXOTIC_WEIGHT = 50;
    uint256 private constant LEGENDARY_WEIGHT = 25;
    uint256 private constant EPIC_WEIGHT = 10;
    uint256 private constant RARE_WEIGHT = 5;
    uint256 private constant COLLECTOR_WEIGHT = 0;

    constructor(address _nftContractAddress) {
        nftContractAddress = _nftContractAddress;

        rewardsMap[XUNICORN_WEIGHT] = 50;
        rewardsMap[EXOTIC_WEIGHT] = 50;
        rewardsMap[LEGENDARY_WEIGHT] = 25;
        rewardsMap[EPIC_WEIGHT] = 10;
        rewardsMap[RARE_WEIGHT] = 5;
        rewardsMap[COLLECTOR_WEIGHT] = 0;

        // Initialize totalRewards and totalPoints with small non-zero values
        totalRewards = 1 wei; // 1 wei
        totalPoints = 1;
    }

    event NFTRegistered(address indexed user, uint256 tokenId, uint256 rewards);
    event RewardsWithdrawn(address indexed user, uint256 amount);
    
    receive() external payable {
        totalRewards += msg.value;
        rewardRatio += msg.value / totalPoints;
    }

    function addToPool() external payable {
        totalRewards += msg.value;
        rewardRatio += msg.value / totalPoints;
    }

    function registerNFT(uint256 tokenId) public {
        address player = msg.sender;
        require(IXENNFTContract(nftContractAddress).ownerOf(tokenId) == player, "You don't own this NFT.");

        // Calculate the reward points for the NFT
        uint256 rewardPoints = getTokenWeight(tokenId);

        // Check if the NFT was previously registered to a different user
        address  previousOwner = getNFTOwner(tokenId);
        require(previousOwner != player, "You already have this NFT regestered");
        if (previousOwner != address(0) && previousOwner != player) {
            User storage previousOwnerData = users[previousOwner];
            
            uint256 previousRewardAmount = calculateReward(previousOwner);
            address payable previousOwnerpay = payable(previousOwner);
            
            // Remove the previous owner's points            
            previousOwnerData.userPoints -= rewardPoints;
            totalPoints -= rewardPoints;
            previousOwnerData.userRewards += previousRewardAmount;
            previousOwnerData.lastRewardRatio = rewardRatio;
            
            // Remove the NFT from the previous owner's list
            for (uint256 i = 0; i < previousOwnerData.userNFTs.length; i++) {
                if (previousOwnerData.userNFTs[i].tokenId == tokenId) {
                    // Shift all elements to the left
                    for (uint256 j = i; j < previousOwnerData.userNFTs.length - 1; j++) {
                        previousOwnerData.userNFTs[j] = previousOwnerData.userNFTs[j + 1];
                    }
                    // Remove the last element
                    previousOwnerData.userNFTs.pop();
                    break;
                }
            }
            
            // Pay the previous owner their rewards
            previousOwnerpay.transfer(previousRewardAmount);

        }
        User storage currentUserData = users[player];

        if (currentUserData.lastRewardRatio != rewardRatio && currentUserData.lastRewardRatio != 0) {
            withdrawRewards();
        }

        // Update the user's rewards, points, and last rewarded timestamp

        currentUserData.userPoints += rewardPoints;
        totalPoints += rewardPoints;
        currentUserData.lastRewardRatio = rewardRatio;

        // Update the NFT ownership
        setNFTOwner(tokenId, player);
        emit NFTRegistered(player, tokenId, rewardPoints);
    }

    function registerNFTs(uint256[] memory tokenIds) external {
        uint len = tokenIds.length;
            for (uint256 i = 0; i < len; i++) {
                registerNFT(tokenIds[i]);
            }
    }
    

    function isNFTRegistered(uint256 tokenId) public view returns (bool) {
        address player = msg.sender;
        NFT[] storage userNFTs = users[player].userNFTs;
        uint len = userNFTs.length;
        for (uint256 j = 0; j < len; j++) {
            if (userNFTs[j].tokenId == tokenId) {
                return true;
            }
        }
        return false;
    }

    function setNFTOwner(uint256 tokenId, address owner) private {
        require(currentHolder[tokenId] != owner, "NFT already registered by the caller.");

        string memory category = getCategory(tokenId);
        currentHolder[tokenId] = owner;

        // Increment the global counter for the NFT class
        globalCounters[category]++;

        // Add the token ID to the user's NFTs
        users[owner].userNFTs.push(NFT(tokenId, category));
    }

    function getNFTOwner(uint256 tokenId) public view returns (address) {
        return currentHolder[tokenId];
    }

    function getCategory(uint256 tokenId) public pure returns (string memory) {
        if (tokenId >= XUNICORN_MIN_ID && tokenId <= XUNICORN_MAX_ID) {
            return "Xunicorn";
        } else if (tokenId >= EXOTIC_MIN_ID && tokenId <= EXOTIC_MAX_ID) {
            return "Exotic";
        } else if (tokenId >= LEGENDARY_MIN_ID && tokenId <= LEGENDARY_MAX_ID) {
            return "Legendary";
        } else if (tokenId >= EPIC_MIN_ID && tokenId <= EPIC_MAX_ID) {
            return "Epic";
        } else if (tokenId >= RARE_MIN_ID && tokenId <= RARE_MAX_ID) {
            return "Rare";
        } else if (tokenId > RARE_MAX_ID) {
            return "Collector";
        } else {
            revert("Invalid token ID.");
        }
    }

    function calculateReward(address user) public view returns (uint256) {
        User storage userData = users[user];
        uint256 lastRewardRatio = userData.lastRewardRatio;
        uint256 newRewards = rewardRatio - lastRewardRatio;

        return newRewards * userData.userPoints;
    }

    function withdrawRewards() public payable {
        address player = msg.sender;
        User storage userData = users[player];
        require(userData.userPoints > 0, "No XenFT's registered for this user");

        
        if (!_hasValidOwnership(player)) {
    for (uint256 i = 0; i < userData.userNFTs.length; i++) {
        if(!_isNFTOwner(userData.userNFTs[i].tokenId, player)) {
                    // remove points for this NFT
                    userData.userPoints -= getTokenWeight(userData.userNFTs[i].tokenId);
                    // remove NFT from user's list
                    for (uint256 j = i; j < userData.userNFTs.length - 1; j++) {
                        userData.userNFTs[j] = userData.userNFTs[j + 1];
                    }
                    userData.userNFTs.pop();
                    // decrease i to rerun the check for the NFT that was shifted from the right
                    i--;
                }
            }
        }

        uint256 rewardAmount = calculateReward(player);
        require(rewardAmount > 0, "No new rewards available for withdrawal.");

        // Effects
        userData.userRewards += rewardAmount;
        userData.lastRewardRatio = rewardRatio;

        // Interactions
        payable(player).transfer(rewardAmount);
        emit RewardsWithdrawn(player, rewardAmount);
    }

    function _isNFTOwner(uint256 tokenId, address owner) public view returns (bool) {
        IXENNFTContract nftContract = IXENNFTContract(nftContractAddress);
        address nftOwner = nftContract.ownerOf(tokenId);

        return nftOwner == owner;
    }

    
    function getTokenWeight(uint256 tokenId) public pure returns (uint256) {
        if (tokenId >= XUNICORN_MIN_ID && tokenId <= XUNICORN_MAX_ID) {
            return XUNICORN_WEIGHT;
        } else if (tokenId >= EXOTIC_MIN_ID && tokenId <= EXOTIC_MAX_ID) {
            return EXOTIC_WEIGHT;
        } else if (tokenId >= LEGENDARY_MIN_ID && tokenId <= LEGENDARY_MAX_ID) {
            return LEGENDARY_WEIGHT;
        } else if (tokenId >= EPIC_MIN_ID && tokenId <= EPIC_MAX_ID) {
            return EPIC_WEIGHT;
        } else if (tokenId >= RARE_MIN_ID && tokenId <= RARE_MAX_ID) {
            return RARE_WEIGHT;
        } else if (tokenId > EPIC_MAX_ID) {
            return COLLECTOR_WEIGHT;
        } else {
            revert("Invalid token ID.");
        }
    }

    function getUserNFTCounts(address user) external view returns (uint256[] memory) {
        uint256[] memory nftCounts = new uint256[](6); // Array to store NFT counts for each category

        User storage userData = users[user];
        NFT[] storage userNFTs = userData.userNFTs;

        // Iterate over the user's registered NFTs and count them for each category
        uint len = userNFTs.length;
        for (uint256 i = 0; i < len; i++) {
            NFT storage nft = userNFTs[i];
            string memory category = nft.category;

            if (keccak256(bytes(category)) == keccak256(bytes("Xunicorn"))) {
                nftCounts[0]++;
            } else if (keccak256(bytes(category)) == keccak256(bytes("Exotic"))) {
                nftCounts[1]++;
            } else if (keccak256(bytes(category)) == keccak256(bytes("Legendary"))) {
                nftCounts[2]++;
            } else if (keccak256(bytes(category)) == keccak256(bytes("Epic"))) {
                nftCounts[3]++;
            } else if (keccak256(bytes(category)) == keccak256(bytes("Rare"))) {
                nftCounts[4]++;
            } else if (keccak256(bytes(category)) == keccak256(bytes("Collector"))) {
                nftCounts[5]++;
            }
        }

        return nftCounts;
    }

    function _hasValidOwnership(address user) public view returns (bool) {
        User storage userData = users[user];
        uint256 totalPointsOwned = 0;
        uint len = userData.userNFTs.length;
        for (uint256 i = 0; i < len; i++) {
            NFT storage nft = userData.userNFTs[i];
            if (_isNFTOwner(nft.tokenId, user)) {
                totalPointsOwned += getTokenWeight(nft.tokenId);
            } else {
                return false;
            }
        }

        return totalPointsOwned == userData.userPoints;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_nftContractAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"NFTRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsWithdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"_hasValidOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"_isNFTOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addToPool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"calculateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"currentHolder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCategory","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getNFTOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserNFTCounts","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"globalCounters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isNFTRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"registerNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"registerNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"userRewards","type":"uint256"},{"internalType":"uint256","name":"userPoints","type":"uint256"},{"internalType":"uint256","name":"lastRewardRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawRewards","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f91610118565b600580546001600160a01b0319166001600160a01b0392909216919091178155600460205260327feaa72e3626d79eea854e214b64a34b95d0c9348f5b8df0b074d774f7dba83c655560197feb5726be0cc40daa58a5f8f81528465ddb0c35e1e56e157eca916d69d6c3432455600a7f5c6b02db8b672415ffad906d7ccee10bd53dbad7d0b29e2bc0e50c93d5f31093557f04cde762ef08b6b6c5ded8e8c4c0b3f4e5c9ad7342c88fcc93681b4588b73f055560008080527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5560016006819055600755610148565b60006020828403121561012a57600080fd5b81516001600160a01b038116811461014157600080fd5b9392505050565b611b28806101576000396000f3fe6080604052600436106101185760003560e01c8063c07401f0116100a0578063d96c98e911610064578063d96c98e914610383578063ddc9904e146103a3578063deaea2e3146103c3578063f3052d26146103f9578063fb71070d1461042657600080fd5b8063c07401f0146102fd578063c70d588d14610305578063c7b8981c1461033b578063d6ec26ef14610343578063d82e39621461036357600080fd5b806378de4e16116100e757806378de4e16146101e15780639b9d9b5614610219578063a87430ba14610249578063aae282e1146102a3578063b4c2c7fa146102db57600080fd5b80630e15561a1461015f578063155bb24a14610188578063567142be146101b5578063646033bc146101cb57600080fd5b3661015a57346006600082825461012f9190611544565b90915550506007546101419034611557565b600860008282546101529190611544565b925050819055005b600080fd5b34801561016b57600080fd5b5061017560065481565b6040519081526020015b60405180910390f35b34801561019457600080fd5b506101a86101a336600461158e565b610446565b60405161017f91906115b2565b3480156101c157600080fd5b5061017560075481565b3480156101d757600080fd5b5061017560085481565b3480156101ed57600080fd5b506101756101fc36600461163d565b805160208183018101805160038252928201919093012091525481565b34801561022557600080fd5b506102396102343660046116d2565b6107b9565b604051901515815260200161017f565b34801561025557600080fd5b5061028861026436600461158e565b60006020819052908152604090206001810154600282015460039092015490919083565b6040805193845260208401929092529082015260600161017f565b3480156102af57600080fd5b506005546102c3906001600160a01b031681565b6040516001600160a01b03909116815260200161017f565b3480156102e757600080fd5b506102fb6102f6366004611702565b610844565b005b6102fb610c6b565b34801561031157600080fd5b506102c3610320366004611702565b6002602052600090815260409020546001600160a01b031681565b6102fb610ca7565b34801561034f57600080fd5b5061023961035e366004611702565b610fa8565b34801561036f57600080fd5b5061017561037e36600461158e565b61101a565b34801561038f57600080fd5b5061023961039e36600461158e565b611062565b3480156103af57600080fd5b506102fb6103be36600461171b565b61110d565b3480156103cf57600080fd5b506102c36103de366004611702565b6000908152600260205260409020546001600160a01b031690565b34801561040557600080fd5b50610419610414366004611702565b611153565b60405161017f91906117e5565b34801561043257600080fd5b50610175610441366004611702565b6112e5565b60408051600680825260e08201909252606091600091906020820160c0803683375050506001600160a01b038416600090815260208190526040812080549293509182915b818110156107ae5760008382815481106104a7576104a7611818565b9060005260206000209060020201905060008160010180546104c89061182e565b80601f01602080910402602001604051908101604052809291908181526020018280546104f49061182e565b80156105415780601f1061051657610100808354040283529160200191610541565b820191906000526020600020905b81548152906001019060200180831161052457829003601f168201915b50505050509050604051806040016040528060088152602001672c3ab734b1b7b93760c11b815250805190602001208180519060200120036105ad578660008151811061059057610590611818565b6020026020010180518091906105a590611868565b905250610799565b60408051808201909152600681526545786f74696360d01b6020918201528151908201207f93b0ca3fd1c3bd20b6987f90e3f1c7ef956d919cc33073e92d0088399baec7120161060a578660018151811061059057610590611818565b6040805180820190915260098152684c6567656e6461727960b81b6020918201528151908201207fe7e141c5705ecfdb92b6402edc53ab7b64fa4232fd394ecdd38721d5c6775cf00161066a578660028151811061059057610590611818565b6040805180820190915260048152634570696360e01b6020918201528151908201207f989b27fb2a8d7a5162b3bd33c7fc882c2f11646f006113355cd2c4d1c17280e9016106c5578660038151811061059057610590611818565b6040805180820190915260048152635261726560e01b6020918201528151908201207f2fd1cebe571f50f6d32c331c60e06e19e17e57e917c1a75b78067093c4dc720601610720578660048151811061059057610590611818565b60408051808201909152600981526821b7b63632b1ba37b960b91b6020918201528151908201207fc23ed5ba4c4fbe22cebb9a8c63e79efed3160dbaa51afdfe9aa3d6c1cb3ff13501610799578660058151811061078057610780611818565b60200260200101805180919061079590611868565b9052505b505080806107a690611868565b91505061048b565b509295945050505050565b6005546040516331a9108f60e11b8152600481018490526000916001600160a01b03169082908290636352211e90602401602060405180830381865afa158015610807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082b9190611881565b6001600160a01b03858116911614925050505b92915050565b6005546040516331a9108f60e11b815260048101839052339182916001600160a01b0390911690636352211e90602401602060405180830381865afa158015610891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b59190611881565b6001600160a01b0316146109105760405162461bcd60e51b815260206004820152601760248201527f596f7520646f6e2774206f776e2074686973204e46542e00000000000000000060448201526064015b60405180910390fd5b600061091b836112e5565b6000848152600260205260409020549091506001600160a01b0390811690831681036109955760405162461bcd60e51b8152602060048201526024808201527f596f7520616c726561647920686176652074686973204e465420726567657374604482015263195c995960e21b6064820152608401610907565b6001600160a01b038116158015906109bf5750826001600160a01b0316816001600160a01b031614155b15610b9e576001600160a01b0381166000908152602081905260408120906109e68361101a565b9050600083905084836002016000828254610a01919061189e565b925050819055508460076000828254610a1a919061189e565b9250508190555081836001016000828254610a359190611544565b9091555050600854600384015560005b8354811015610b625787846000018281548110610a6457610a64611818565b90600052602060002090600202016000015403610b5057805b8454610a8b9060019061189e565b811015610b0f5784610a9e826001611544565b81548110610aae57610aae611818565b9060005260206000209060020201856000018281548110610ad157610ad1611818565b600091825260209091208254600290920201908155600180820190610af8908401826118f7565b509050508080610b0790611868565b915050610a7d565b508354849080610b2157610b216119d8565b60008281526020812060026000199093019283020181815590610b4760018301826114d8565b50509055610b62565b80610b5a81611868565b915050610a45565b506040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610b99573d6000803e3d6000fd5b505050505b6001600160a01b0383166000908152602081905260409020600854600382015414801590610bcf5750600381015415155b15610bdc57610bdc610ca7565b82816002016000828254610bf09190611544565b925050819055508260076000828254610c099190611544565b90915550506008546003820155610c20858561139b565b60408051868152602081018590526001600160a01b038616917f3da6b273ca5aedb9aeade54d2494bfb1fb3cb2088595921bcbf8ee9f3ba49ef5910160405180910390a25050505050565b3460066000828254610c7d9190611544565b9091555050600754610c8f9034611557565b60086000828254610ca09190611544565b9091555050565b3360008181526020819052604090206002810154610d135760405162461bcd60e51b815260206004820152602360248201527f4e6f2058656e46542773207265676973746572656420666f722074686973207560448201526239b2b960e91b6064820152608401610907565b610d1c82611062565b610e9a5760005b8154811015610e9857610d5c826000018281548110610d4457610d44611818565b906000526020600020906002020160000154846107b9565b610e8657610d8f826000018281548110610d7857610d78611818565b9060005260206000209060020201600001546112e5565b826002016000828254610da2919061189e565b909155508190505b8254610db89060019061189e565b811015610e3c5782610dcb826001611544565b81548110610ddb57610ddb611818565b9060005260206000209060020201836000018281548110610dfe57610dfe611818565b600091825260209091208254600290920201908155600180820190610e25908401826118f7565b509050508080610e3490611868565b915050610daa565b508154829080610e4e57610e4e6119d8565b60008281526020812060026000199093019283020181815590610e7460018301826114d8565b5050905580610e82816119ee565b9150505b80610e9081611868565b915050610d23565b505b6000610ea58361101a565b905060008111610f085760405162461bcd60e51b815260206004820152602860248201527f4e6f206e6577207265776172647320617661696c61626c6520666f722077697460448201526734323930bbb0b61760c11b6064820152608401610907565b80826001016000828254610f1c9190611544565b909155505060085460038301556040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015610f5f573d6000803e3d6000fd5b50826001600160a01b03167f8a43c4352486ec339f487f64af78ca5cbf06cd47833f073d3baf3a193e50316182604051610f9b91815260200190565b60405180910390a2505050565b3360008181526020819052604081208054919291835b8181101561100e5785838281548110610fd957610fd9611818565b90600052602060002090600202016000015403610ffc5750600195945050505050565b8061100681611868565b915050610fbe565b50600095945050505050565b6001600160a01b03811660009081526020819052604081206003810154600854839061104790839061189e565b90508260020154816110599190611a05565b95945050505050565b6001600160a01b038116600090815260208190526040812080548290815b818110156110fe57600084600001828154811061109f5761109f611818565b906000526020600020906002020190506110bd8160000154886107b9565b156110de5780546110cd906112e5565b6110d79085611544565b93506110eb565b5060009695505050505050565b50806110f681611868565b915050611080565b50506002909101541492915050565b805160005b8181101561114e5761113c83828151811061112f5761112f611818565b6020026020010151610844565b8061114681611868565b915050611112565b505050565b606060018210158015611167575060648211155b156111905750506040805180820190915260088152672c3ab734b1b7b93760c11b602082015290565b606582101580156111a357506103e88211155b156111ca57505060408051808201909152600681526545786f74696360d01b602082015290565b6103e982101580156111de5750610bb88211155b156112085750506040805180820190915260098152684c6567656e6461727960b81b602082015290565b610bb9821015801561121c57506117708211155b156112415750506040805180820190915260048152634570696360e01b602082015290565b611771821015801561125557506127108211155b1561127a5750506040805180820190915260048152635261726560e01b602082015290565b6127108211156112a957505060408051808201909152600981526821b7b63632b1ba37b960b91b602082015290565b60405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103a37b5b2b71024a21760791b6044820152606401610907565b6000600182101580156112f9575060648211155b1561130657506032919050565b6065821015801561131957506103e88211155b1561132657506032919050565b6103e9821015801561133a5750610bb88211155b1561134757506019919050565b610bb9821015801561135b57506117708211155b156113685750600a919050565b611771821015801561137c57506127108211155b1561138957506005919050565b6117708211156112a957506000919050565b6000828152600260205260409020546001600160a01b038083169116036114125760405162461bcd60e51b815260206004820152602560248201527f4e465420616c7265616479207265676973746572656420627920746865206361604482015264363632b91760d91b6064820152608401610907565b600061141d83611153565b6000848152600260205260409081902080546001600160a01b0319166001600160a01b03861617905551909150600390611458908390611a1c565b908152604051908190036020019020805490600061147583611868565b90915550506001600160a01b0382166000908152602081815260408083208151808301909252868252818301858152815460018181018455928652939094208251600290940201928355925190928201906114d09082611a38565b505050505050565b5080546114e49061182e565b6000825580601f106114f4575050565b601f0160209004906000526020600020908101906115129190611515565b50565b5b8082111561152a5760008155600101611516565b5090565b634e487b7160e01b600052601160045260246000fd5b8082018082111561083e5761083e61152e565b60008261157457634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b038116811461151257600080fd5b6000602082840312156115a057600080fd5b81356115ab81611579565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156115ea578351835292840192918401916001016115ce565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611635576116356115f6565b604052919050565b6000602080838503121561165057600080fd5b823567ffffffffffffffff8082111561166857600080fd5b818501915085601f83011261167c57600080fd5b81358181111561168e5761168e6115f6565b6116a0601f8201601f1916850161160c565b915080825286848285010111156116b657600080fd5b8084840185840137600090820190930192909252509392505050565b600080604083850312156116e557600080fd5b8235915060208301356116f781611579565b809150509250929050565b60006020828403121561171457600080fd5b5035919050565b6000602080838503121561172e57600080fd5b823567ffffffffffffffff8082111561174657600080fd5b818501915085601f83011261175a57600080fd5b81358181111561176c5761176c6115f6565b8060051b915061177d84830161160c565b818152918301840191848101908884111561179757600080fd5b938501935b838510156117b55784358252938501939085019061179c565b98975050505050505050565b60005b838110156117dc5781810151838201526020016117c4565b50506000910152565b60208152600082518060208401526118048160408501602087016117c1565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061184257607f821691505b60208210810361186257634e487b7160e01b600052602260045260246000fd5b50919050565b60006001820161187a5761187a61152e565b5060010190565b60006020828403121561189357600080fd5b81516115ab81611579565b8181038181111561083e5761083e61152e565b601f82111561114e57600081815260208120601f850160051c810160208610156118d85750805b601f850160051c820191505b818110156114d0578281556001016118e4565b818103611902575050565b61190c825461182e565b67ffffffffffffffff811115611924576119246115f6565b61193881611932845461182e565b846118b1565b6000601f82116001811461196c57600083156119545750848201545b600019600385901b1c1916600184901b1784556119d1565b600085815260209020601f19841690600086815260209020845b838110156119a65782860154825560019586019590910190602001611986565b50858310156119c45781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b634e487b7160e01b600052603160045260246000fd5b6000816119fd576119fd61152e565b506000190190565b808202811582820484141761083e5761083e61152e565b60008251611a2e8184602087016117c1565b9190910192915050565b815167ffffffffffffffff811115611a5257611a526115f6565b611a6081611932845461182e565b602080601f831160018114611a955760008415611a7d5750858301515b600019600386901b1c1916600185901b1785556114d0565b600085815260208120601f198616915b82811015611ac457888601518255948401946001909101908401611aa5565b5085821015611ae25787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220738d987c5f0b64263a69956f6b9b4e7b44dc7409dffa679f123660d7c85d924a64736f6c634300081100330000000000000000000000000a252663dbcc0b073063d6420a40319e438cfa59

Deployed Bytecode

0x6080604052600436106101185760003560e01c8063c07401f0116100a0578063d96c98e911610064578063d96c98e914610383578063ddc9904e146103a3578063deaea2e3146103c3578063f3052d26146103f9578063fb71070d1461042657600080fd5b8063c07401f0146102fd578063c70d588d14610305578063c7b8981c1461033b578063d6ec26ef14610343578063d82e39621461036357600080fd5b806378de4e16116100e757806378de4e16146101e15780639b9d9b5614610219578063a87430ba14610249578063aae282e1146102a3578063b4c2c7fa146102db57600080fd5b80630e15561a1461015f578063155bb24a14610188578063567142be146101b5578063646033bc146101cb57600080fd5b3661015a57346006600082825461012f9190611544565b90915550506007546101419034611557565b600860008282546101529190611544565b925050819055005b600080fd5b34801561016b57600080fd5b5061017560065481565b6040519081526020015b60405180910390f35b34801561019457600080fd5b506101a86101a336600461158e565b610446565b60405161017f91906115b2565b3480156101c157600080fd5b5061017560075481565b3480156101d757600080fd5b5061017560085481565b3480156101ed57600080fd5b506101756101fc36600461163d565b805160208183018101805160038252928201919093012091525481565b34801561022557600080fd5b506102396102343660046116d2565b6107b9565b604051901515815260200161017f565b34801561025557600080fd5b5061028861026436600461158e565b60006020819052908152604090206001810154600282015460039092015490919083565b6040805193845260208401929092529082015260600161017f565b3480156102af57600080fd5b506005546102c3906001600160a01b031681565b6040516001600160a01b03909116815260200161017f565b3480156102e757600080fd5b506102fb6102f6366004611702565b610844565b005b6102fb610c6b565b34801561031157600080fd5b506102c3610320366004611702565b6002602052600090815260409020546001600160a01b031681565b6102fb610ca7565b34801561034f57600080fd5b5061023961035e366004611702565b610fa8565b34801561036f57600080fd5b5061017561037e36600461158e565b61101a565b34801561038f57600080fd5b5061023961039e36600461158e565b611062565b3480156103af57600080fd5b506102fb6103be36600461171b565b61110d565b3480156103cf57600080fd5b506102c36103de366004611702565b6000908152600260205260409020546001600160a01b031690565b34801561040557600080fd5b50610419610414366004611702565b611153565b60405161017f91906117e5565b34801561043257600080fd5b50610175610441366004611702565b6112e5565b60408051600680825260e08201909252606091600091906020820160c0803683375050506001600160a01b038416600090815260208190526040812080549293509182915b818110156107ae5760008382815481106104a7576104a7611818565b9060005260206000209060020201905060008160010180546104c89061182e565b80601f01602080910402602001604051908101604052809291908181526020018280546104f49061182e565b80156105415780601f1061051657610100808354040283529160200191610541565b820191906000526020600020905b81548152906001019060200180831161052457829003601f168201915b50505050509050604051806040016040528060088152602001672c3ab734b1b7b93760c11b815250805190602001208180519060200120036105ad578660008151811061059057610590611818565b6020026020010180518091906105a590611868565b905250610799565b60408051808201909152600681526545786f74696360d01b6020918201528151908201207f93b0ca3fd1c3bd20b6987f90e3f1c7ef956d919cc33073e92d0088399baec7120161060a578660018151811061059057610590611818565b6040805180820190915260098152684c6567656e6461727960b81b6020918201528151908201207fe7e141c5705ecfdb92b6402edc53ab7b64fa4232fd394ecdd38721d5c6775cf00161066a578660028151811061059057610590611818565b6040805180820190915260048152634570696360e01b6020918201528151908201207f989b27fb2a8d7a5162b3bd33c7fc882c2f11646f006113355cd2c4d1c17280e9016106c5578660038151811061059057610590611818565b6040805180820190915260048152635261726560e01b6020918201528151908201207f2fd1cebe571f50f6d32c331c60e06e19e17e57e917c1a75b78067093c4dc720601610720578660048151811061059057610590611818565b60408051808201909152600981526821b7b63632b1ba37b960b91b6020918201528151908201207fc23ed5ba4c4fbe22cebb9a8c63e79efed3160dbaa51afdfe9aa3d6c1cb3ff13501610799578660058151811061078057610780611818565b60200260200101805180919061079590611868565b9052505b505080806107a690611868565b91505061048b565b509295945050505050565b6005546040516331a9108f60e11b8152600481018490526000916001600160a01b03169082908290636352211e90602401602060405180830381865afa158015610807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082b9190611881565b6001600160a01b03858116911614925050505b92915050565b6005546040516331a9108f60e11b815260048101839052339182916001600160a01b0390911690636352211e90602401602060405180830381865afa158015610891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b59190611881565b6001600160a01b0316146109105760405162461bcd60e51b815260206004820152601760248201527f596f7520646f6e2774206f776e2074686973204e46542e00000000000000000060448201526064015b60405180910390fd5b600061091b836112e5565b6000848152600260205260409020549091506001600160a01b0390811690831681036109955760405162461bcd60e51b8152602060048201526024808201527f596f7520616c726561647920686176652074686973204e465420726567657374604482015263195c995960e21b6064820152608401610907565b6001600160a01b038116158015906109bf5750826001600160a01b0316816001600160a01b031614155b15610b9e576001600160a01b0381166000908152602081905260408120906109e68361101a565b9050600083905084836002016000828254610a01919061189e565b925050819055508460076000828254610a1a919061189e565b9250508190555081836001016000828254610a359190611544565b9091555050600854600384015560005b8354811015610b625787846000018281548110610a6457610a64611818565b90600052602060002090600202016000015403610b5057805b8454610a8b9060019061189e565b811015610b0f5784610a9e826001611544565b81548110610aae57610aae611818565b9060005260206000209060020201856000018281548110610ad157610ad1611818565b600091825260209091208254600290920201908155600180820190610af8908401826118f7565b509050508080610b0790611868565b915050610a7d565b508354849080610b2157610b216119d8565b60008281526020812060026000199093019283020181815590610b4760018301826114d8565b50509055610b62565b80610b5a81611868565b915050610a45565b506040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610b99573d6000803e3d6000fd5b505050505b6001600160a01b0383166000908152602081905260409020600854600382015414801590610bcf5750600381015415155b15610bdc57610bdc610ca7565b82816002016000828254610bf09190611544565b925050819055508260076000828254610c099190611544565b90915550506008546003820155610c20858561139b565b60408051868152602081018590526001600160a01b038616917f3da6b273ca5aedb9aeade54d2494bfb1fb3cb2088595921bcbf8ee9f3ba49ef5910160405180910390a25050505050565b3460066000828254610c7d9190611544565b9091555050600754610c8f9034611557565b60086000828254610ca09190611544565b9091555050565b3360008181526020819052604090206002810154610d135760405162461bcd60e51b815260206004820152602360248201527f4e6f2058656e46542773207265676973746572656420666f722074686973207560448201526239b2b960e91b6064820152608401610907565b610d1c82611062565b610e9a5760005b8154811015610e9857610d5c826000018281548110610d4457610d44611818565b906000526020600020906002020160000154846107b9565b610e8657610d8f826000018281548110610d7857610d78611818565b9060005260206000209060020201600001546112e5565b826002016000828254610da2919061189e565b909155508190505b8254610db89060019061189e565b811015610e3c5782610dcb826001611544565b81548110610ddb57610ddb611818565b9060005260206000209060020201836000018281548110610dfe57610dfe611818565b600091825260209091208254600290920201908155600180820190610e25908401826118f7565b509050508080610e3490611868565b915050610daa565b508154829080610e4e57610e4e6119d8565b60008281526020812060026000199093019283020181815590610e7460018301826114d8565b5050905580610e82816119ee565b9150505b80610e9081611868565b915050610d23565b505b6000610ea58361101a565b905060008111610f085760405162461bcd60e51b815260206004820152602860248201527f4e6f206e6577207265776172647320617661696c61626c6520666f722077697460448201526734323930bbb0b61760c11b6064820152608401610907565b80826001016000828254610f1c9190611544565b909155505060085460038301556040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015610f5f573d6000803e3d6000fd5b50826001600160a01b03167f8a43c4352486ec339f487f64af78ca5cbf06cd47833f073d3baf3a193e50316182604051610f9b91815260200190565b60405180910390a2505050565b3360008181526020819052604081208054919291835b8181101561100e5785838281548110610fd957610fd9611818565b90600052602060002090600202016000015403610ffc5750600195945050505050565b8061100681611868565b915050610fbe565b50600095945050505050565b6001600160a01b03811660009081526020819052604081206003810154600854839061104790839061189e565b90508260020154816110599190611a05565b95945050505050565b6001600160a01b038116600090815260208190526040812080548290815b818110156110fe57600084600001828154811061109f5761109f611818565b906000526020600020906002020190506110bd8160000154886107b9565b156110de5780546110cd906112e5565b6110d79085611544565b93506110eb565b5060009695505050505050565b50806110f681611868565b915050611080565b50506002909101541492915050565b805160005b8181101561114e5761113c83828151811061112f5761112f611818565b6020026020010151610844565b8061114681611868565b915050611112565b505050565b606060018210158015611167575060648211155b156111905750506040805180820190915260088152672c3ab734b1b7b93760c11b602082015290565b606582101580156111a357506103e88211155b156111ca57505060408051808201909152600681526545786f74696360d01b602082015290565b6103e982101580156111de5750610bb88211155b156112085750506040805180820190915260098152684c6567656e6461727960b81b602082015290565b610bb9821015801561121c57506117708211155b156112415750506040805180820190915260048152634570696360e01b602082015290565b611771821015801561125557506127108211155b1561127a5750506040805180820190915260048152635261726560e01b602082015290565b6127108211156112a957505060408051808201909152600981526821b7b63632b1ba37b960b91b602082015290565b60405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103a37b5b2b71024a21760791b6044820152606401610907565b6000600182101580156112f9575060648211155b1561130657506032919050565b6065821015801561131957506103e88211155b1561132657506032919050565b6103e9821015801561133a5750610bb88211155b1561134757506019919050565b610bb9821015801561135b57506117708211155b156113685750600a919050565b611771821015801561137c57506127108211155b1561138957506005919050565b6117708211156112a957506000919050565b6000828152600260205260409020546001600160a01b038083169116036114125760405162461bcd60e51b815260206004820152602560248201527f4e465420616c7265616479207265676973746572656420627920746865206361604482015264363632b91760d91b6064820152608401610907565b600061141d83611153565b6000848152600260205260409081902080546001600160a01b0319166001600160a01b03861617905551909150600390611458908390611a1c565b908152604051908190036020019020805490600061147583611868565b90915550506001600160a01b0382166000908152602081815260408083208151808301909252868252818301858152815460018181018455928652939094208251600290940201928355925190928201906114d09082611a38565b505050505050565b5080546114e49061182e565b6000825580601f106114f4575050565b601f0160209004906000526020600020908101906115129190611515565b50565b5b8082111561152a5760008155600101611516565b5090565b634e487b7160e01b600052601160045260246000fd5b8082018082111561083e5761083e61152e565b60008261157457634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b038116811461151257600080fd5b6000602082840312156115a057600080fd5b81356115ab81611579565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156115ea578351835292840192918401916001016115ce565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611635576116356115f6565b604052919050565b6000602080838503121561165057600080fd5b823567ffffffffffffffff8082111561166857600080fd5b818501915085601f83011261167c57600080fd5b81358181111561168e5761168e6115f6565b6116a0601f8201601f1916850161160c565b915080825286848285010111156116b657600080fd5b8084840185840137600090820190930192909252509392505050565b600080604083850312156116e557600080fd5b8235915060208301356116f781611579565b809150509250929050565b60006020828403121561171457600080fd5b5035919050565b6000602080838503121561172e57600080fd5b823567ffffffffffffffff8082111561174657600080fd5b818501915085601f83011261175a57600080fd5b81358181111561176c5761176c6115f6565b8060051b915061177d84830161160c565b818152918301840191848101908884111561179757600080fd5b938501935b838510156117b55784358252938501939085019061179c565b98975050505050505050565b60005b838110156117dc5781810151838201526020016117c4565b50506000910152565b60208152600082518060208401526118048160408501602087016117c1565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061184257607f821691505b60208210810361186257634e487b7160e01b600052602260045260246000fd5b50919050565b60006001820161187a5761187a61152e565b5060010190565b60006020828403121561189357600080fd5b81516115ab81611579565b8181038181111561083e5761083e61152e565b601f82111561114e57600081815260208120601f850160051c810160208610156118d85750805b601f850160051c820191505b818110156114d0578281556001016118e4565b818103611902575050565b61190c825461182e565b67ffffffffffffffff811115611924576119246115f6565b61193881611932845461182e565b846118b1565b6000601f82116001811461196c57600083156119545750848201545b600019600385901b1c1916600184901b1784556119d1565b600085815260209020601f19841690600086815260209020845b838110156119a65782860154825560019586019590910190602001611986565b50858310156119c45781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b634e487b7160e01b600052603160045260246000fd5b6000816119fd576119fd61152e565b506000190190565b808202811582820484141761083e5761083e61152e565b60008251611a2e8184602087016117c1565b9190910192915050565b815167ffffffffffffffff811115611a5257611a526115f6565b611a6081611932845461182e565b602080601f831160018114611a955760008415611a7d5750858301515b600019600386901b1c1916600185901b1785556114d0565b600085815260208120601f198616915b82811015611ac457888601518255948401946001909101908401611aa5565b5085821015611ae25787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220738d987c5f0b64263a69956f6b9b4e7b44dc7409dffa679f123660d7c85d924a64736f6c63430008110033

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

0000000000000000000000000a252663dbcc0b073063d6420a40319e438cfa59

-----Decoded View---------------
Arg [0] : _nftContractAddress (address): 0x0a252663DBCc0b073063D6420a40319e438Cfa59

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000a252663dbcc0b073063d6420a40319e438cfa59


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.