ETH Price: $3,376.33 (-1.16%)
Gas: 11 Gwei

Token

EtherSouls (SOUL)
 

Overview

Max Total Supply

163 SOUL

Holders

163

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
525960.eth
Balance
1 SOUL
0x97013995b4866f7279e2bf6dbd7677529b21a762
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

EtherSouls is an NFT collectible project where users can collect souls. Each address can mint a SOUL token for free, which is unique to that address. It represents the soul of the person who owns that Ethereum address.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Souls

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2021-01-10
*/

//SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.7.1;

contract Souls{


    constructor(){
        supportedInterfaces[0x80ac58cd] = true;
        supportedInterfaces[0x5b5e139f] = true;
        supportedInterfaces[0x01ffc9a7] = true;

    }


    //////===721 Standard
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    //////===721 Implementation
    mapping(address => uint256) internal BALANCES;
    mapping (uint256 => address) internal ALLOWANCE;
    mapping (address => mapping (address => bool)) internal AUTHORISED;

    uint[] SOULS;  //Array of all souls [tokenId,tokenId,...]
    mapping(uint256 => address) OWNERS;  //Mapping of soul owners

    //    METADATA VARS
    string private __name = "EtherSouls";
    string private __symbol = "SOUL";
    bytes private __uriBase = bytes("https://www.ethersouls.xyz/tokenData/metadata?id=");


    //    ENUMERABLE VARS
    mapping(address => uint[]) internal OWNER_INDEX_TO_ID;
    mapping(uint => uint) internal OWNER_ID_TO_INDEX;
    mapping(uint => uint) internal ID_TO_INDEX;

    address constant VITALIK = 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B;

    function isValidToken(uint256 _tokenId) internal view returns(bool){
        return OWNERS[_tokenId] != address(0);
    }


    function balanceOf(address _owner) external view returns (uint256){
        return BALANCES[_owner];
    }

    function ownerOf(uint256 _tokenId) public view returns(address){
        require(isValidToken(_tokenId),"invalid");
        return OWNERS[_tokenId];
    }


    //Separate your immortal soul from your physical body and store it on the blockchain
    function separate() external {
        uint tokenId = uint(msg.sender);

        require(OWNERS[tokenId] == address(0),"exists");


        OWNERS[tokenId] = msg.sender;
        BALANCES[msg.sender]++;

        OWNER_ID_TO_INDEX[tokenId] = OWNER_INDEX_TO_ID[msg.sender].length;
        OWNER_INDEX_TO_ID[msg.sender].push(tokenId);

        ID_TO_INDEX[tokenId] = SOULS.length;
        SOULS.push(tokenId);

        emit Transfer(address(0),VITALIK,tokenId);
        emit Transfer(VITALIK,msg.sender,tokenId);
    }


    function approve(address _approved, uint256 _tokenId)  external{
        address owner = ownerOf(_tokenId);
        require( owner == msg.sender                    //Require Sender Owns Token
            || AUTHORISED[owner][msg.sender]                //  or is approved for all.
        ,"permission");
        emit Approval(owner, _approved, _tokenId);
        ALLOWANCE[_tokenId] = _approved;
    }

    function getApproved(uint256 _tokenId) external view returns (address) {
        require(isValidToken(_tokenId),"invalid");
        return ALLOWANCE[_tokenId];
    }

    function isApprovedForAll(address _owner, address _operator) external view returns (bool) {
        return AUTHORISED[_owner][_operator];
    }


    function setApprovalForAll(address _operator, bool _approved) external {
        emit ApprovalForAll(msg.sender,_operator, _approved);
        AUTHORISED[msg.sender][_operator] = _approved;
    }


    function transferFrom(address _from, address _to, uint256 _tokenId) public {

        //Check Transferable
        //There is a token validity check in ownerOf
        address owner = ownerOf(_tokenId);

        require ( owner == msg.sender             //Require sender owns token
        //Doing the two below manually instead of referring to the external methods saves gas
        || ALLOWANCE[_tokenId] == msg.sender      //or is approved for this token
            || AUTHORISED[owner][msg.sender]          //or is approved for all
        ,"permission");
        require(owner == _from,"owner");
        require(_to != address(0),"zero");
        //require(isValidToken(_tokenId)); <-- done by ownerOf

        emit Transfer(_from, _to, _tokenId);


        OWNERS[_tokenId] =_to;

        BALANCES[_from]--;
        BALANCES[_to]++;

        //Reset approved if there is one
        if(ALLOWANCE[_tokenId] != address(0)){
            delete ALLOWANCE[_tokenId];
        }

        //Enumerable Additions
        uint oldIndex = OWNER_ID_TO_INDEX[_tokenId];
        //If the token isn't the last one in the owner's index
        if(oldIndex != OWNER_INDEX_TO_ID[_from].length - 1){
            //Move the old one in the index list
            OWNER_INDEX_TO_ID[_from][oldIndex] = OWNER_INDEX_TO_ID[_from][OWNER_INDEX_TO_ID[_from].length - 1];
            //Update the token's reference to its place in the index list
            OWNER_ID_TO_INDEX[OWNER_INDEX_TO_ID[_from][oldIndex]] = oldIndex;
        }
        //OWNER_INDEX_TO_ID[_from].length--;
        OWNER_INDEX_TO_ID[_from].pop();

        OWNER_ID_TO_INDEX[_tokenId] = OWNER_INDEX_TO_ID[_to].length;
        OWNER_INDEX_TO_ID[_to].push(_tokenId);

    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) public {
        transferFrom(_from, _to, _tokenId);

        //Get size of "_to" address, if 0 it's a wallet
        uint32 size;
        assembly {
            size := extcodesize(_to)
        }
        if(size > 0){
            ERC721TokenReceiver receiver = ERC721TokenReceiver(_to);
            require(receiver.onERC721Received(msg.sender,_from,_tokenId,data) == bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")),"receiver");
        }

    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external {
        safeTransferFrom(_from,_to,_tokenId,"");
    }




    // METADATA FUNCTIONS
    function tokenURI(uint256 _tokenId) public view returns (string memory){
        //Note: changed visibility to public
        require(isValidToken(_tokenId));

//        uint maxLength = 50;
        uint[50] memory reversed;
//        uint i = 0;

        string memory uri = string(__uriBase);


        string[10] memory lib;
        lib[0] = "0";
        lib[1] = "1";
        lib[2] = "2";
        lib[3] = "3";
        lib[4] = "4";
        lib[5] = "5";
        lib[6] = "6";
        lib[7] = "7";
        lib[8] = "8";
        lib[9] = "9";

        uint len = 0;
        while (_tokenId != 0) {
            uint remainder = _tokenId % 10;
            _tokenId /= 10;
            reversed[len] = remainder;
            len++;
        }

        for(uint j = len; j > 0; j--){
            uri = string(abi.encodePacked(uri,lib[reversed[j-1]]));
        }

        return uri;

    }









function name() external view returns (string memory _name){
        //_name = "Name must be hard coded";
        return __name;
    }

    function symbol() external view returns (string memory _symbol){
        //_symbol = "Symbol must be hard coded";
        return __symbol;
    }


    // ENUMERABLE FUNCTIONS

    function totalSupply() external view returns (uint256){
        return SOULS.length;
    }

    function tokenByIndex(uint256 _index) external view returns(uint256){
        require(_index < SOULS.length,"index");
        return SOULS[_index];


    }

    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256){
        require(_index < BALANCES[_owner],"index");
        return OWNER_INDEX_TO_ID[_owner][_index];
    }

    // End 721 Implementation

    ///////===165 Implementation
    mapping (bytes4 => bool) internal supportedInterfaces;
    function supportsInterface(bytes4 interfaceID) external view returns (bool){
        return supportedInterfaces[interfaceID];
    }
    ///==End 165
}




interface ERC721TokenReceiver {
    //TODO: this
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","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":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","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":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"separate","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":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600a81526020017f4574686572536f756c73000000000000000000000000000000000000000000008152506005908051906020019062000051929190620001dc565b506040518060400160405280600481526020017f534f554c00000000000000000000000000000000000000000000000000000000815250600690805190602001906200009f929190620001dc565b50604051806060016040528060318152602001620027496031913960079080519060200190620000d192919062000273565b50348015620000df57600080fd5b506001600b60006380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555062000329565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000214576000855562000260565b82601f106200022f57805160ff191683800117855562000260565b8280016001018555821562000260579182015b828111156200025f57825182559160200191906001019062000242565b5b5090506200026f91906200030a565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002ab5760008555620002f7565b82601f10620002c657805160ff1916838001178555620002f7565b82800160010185558215620002f7579182015b82811115620002f6578251825591602001919060010190620002d9565b5b5090506200030691906200030a565b5090565b5b80821115620003255760008160009055506001016200030b565b5090565b61241080620003396000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80634f6ccce7116100a257806395d89b411161007157806395d89b41146104f4578063a22cb46514610577578063b88d4fde146105c7578063c87b56dd146106cc578063e985e9c5146107735761010b565b80634f6ccce7146103f85780635463a88e1461043a5780636352211e1461044457806370a082311461049c5761010b565b806318160ddd116100de57806318160ddd1461029c57806323b872dd146102ba5780632f745c591461032857806342842e0e1461038a5761010b565b806301ffc9a71461011057806306fdde0314610173578063081812fc146101f6578063095ea7b31461024e575b600080fd5b61015b6004803603602081101561012657600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506107ed565b60405180821515815260200191505060405180910390f35b61017b610855565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101bb5780820151818401526020810190506101a0565b50505050905090810190601f1680156101e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102226004803603602081101561020c57600080fd5b81019080803590602001909291905050506108f7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61029a6004803603604081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109af565b005b6102a4610ba0565b6040518082815260200191505060405180910390f35b610326600480360360608110156102d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bad565b005b6103746004803603604081101561033e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611369565b6040518082815260200191505060405180910390f35b6103f6600480360360608110156103a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061147b565b005b6104246004803603602081101561040e57600080fd5b810190808035906020019092919050505061149b565b6040518082815260200191505060405180910390f35b610442611536565b005b6104706004803603602081101561045a57600080fd5b81019080803590602001909291905050506118ae565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104de600480360360208110156104b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611966565b6040518082815260200191505060405180910390f35b6104fc6119ae565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561053c578082015181840152602081019050610521565b50505050905090810190601f1680156105695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105c56004803603604081101561058d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a50565b005b6106ca600480360360808110156105dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561064457600080fd5b82018360208201111561065657600080fd5b8035906020019184600183028401116401000000008311171561067857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b4f565b005b6106f8600480360360208110156106e257600080fd5b8101908080359060200190929190505050611d86565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561073857808201518184015260208101905061071d565b50505050905090810190601f1680156107655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107d56004803603604081101561078957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061228f565b60405180821515815260200191505060405180910390f35b6000600b6000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108ed5780601f106108c2576101008083540402835291602001916108ed565b820191906000526020600020905b8154815290600101906020018083116108d057829003601f168201915b5050505050905090565b600061090282612323565b610974576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ba826118ae565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a7c5750600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7065726d697373696f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4826001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000600380549050905090565b6000610bb8826118ae565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610c5257503373ffffffffffffffffffffffffffffffffffffffff166001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610ce35750600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7065726d697373696f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f6f776e657200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e99576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f7a65726f0000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001900391905055506000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550600073ffffffffffffffffffffffffffffffffffffffff166001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611081576001600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b6000600960008481526020019081526020016000205490506001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003811461124457600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050038154811061117457fe5b9060005260206000200154600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106111c957fe5b90600052602060002001819055508060096000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811061122657fe5b90600052602060002001548152602001908152602001600020819055505b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061128c57fe5b60019003818190600052602060002001600090559055600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506009600085815260200190815260200160002081905550600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208390806001815401808255809150506001900390600052602060002001600090919091909150555050505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821061141e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f696e64657800000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061146857fe5b9060005260206000200154905092915050565b61149683838360405180602001604052806000815250611b4f565b505050565b60006003805490508210611517576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f696e64657800000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6003828154811061152457fe5b90600052602060002001549050919050565b60003373ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611626576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f657869737473000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b336004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506009600083815260200190815260200160002081905550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600380549050600a60008381526020019081526020016000208190555060038190806001815401808255809150506001900390600052602060002001600090919091909150558073ab5801a7d398351b8be11c439e05c5b3259aec9b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4803373ffffffffffffffffffffffffffffffffffffffff1673ab5801a7d398351b8be11c439e05c5b3259aec9b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450565b60006118b982612323565b61192b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a465780601f10611a1b57610100808354040283529160200191611a46565b820191906000526020600020905b815481529060010190602001808311611a2957829003601f168201915b5050505050905090565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a380600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b5a848484610bad565b6000833b905060008163ffffffff161115611d7f5760008490507f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611c61578082015181840152602081019050611c46565b50505050905090810190601f168015611c8e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b505050506040513d6020811015611cda57600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f726563656976657200000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b505b5050505050565b6060611d9182612323565b611d9a57600080fd5b611da261238f565b606060078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e3a5780601f10611e0f57610100808354040283529160200191611e3a565b820191906000526020600020905b815481529060010190602001808311611e1d57829003601f168201915b50505050509050611e496123b2565b6040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250816000600a8110611e8c57fe5b60200201819052506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250816001600a8110611ed757fe5b60200201819052506040518060400160405280600181526020017f3200000000000000000000000000000000000000000000000000000000000000815250816002600a8110611f2257fe5b60200201819052506040518060400160405280600181526020017f3300000000000000000000000000000000000000000000000000000000000000815250816003600a8110611f6d57fe5b60200201819052506040518060400160405280600181526020017f3400000000000000000000000000000000000000000000000000000000000000815250816004600a8110611fb857fe5b60200201819052506040518060400160405280600181526020017f3500000000000000000000000000000000000000000000000000000000000000815250816005600a811061200357fe5b60200201819052506040518060400160405280600181526020017f3600000000000000000000000000000000000000000000000000000000000000815250816006600a811061204e57fe5b60200201819052506040518060400160405280600181526020017f3700000000000000000000000000000000000000000000000000000000000000815250816007600a811061209957fe5b60200201819052506040518060400160405280600181526020017f3800000000000000000000000000000000000000000000000000000000000000815250816008600a81106120e457fe5b60200201819052506040518060400160405280600181526020017f3900000000000000000000000000000000000000000000000000000000000000815250816009600a811061212f57fe5b602002018190525060005b60008614612182576000600a878161214e57fe5b069050600a878161215b57fe5b0496508085836032811061216b57fe5b60200201818152505081806001019250505061213a565b60008190505b60008111156122825783838660018403603281106121a257fe5b6020020151600a81106121b157fe5b60200201516040516020018083805190602001908083835b602083106121ec57805182526020820191506020810190506020830392506121c9565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831061223d578051825260208201915060208101905060208303925061221a565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350808060019003915050612188565b5082945050505050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b604051806106400160405280603290602082028036833780820191505090505090565b604051806101400160405280600a905b60608152602001906001900390816123c2579050509056fea2646970667358221220a183fbbcbc8b1ba27356371262ed56ccd91940c6afa0b9a8b9eb8c35beb37b3a64736f6c6343000704003368747470733a2f2f7777772e6574686572736f756c732e78797a2f746f6b656e446174612f6d657461646174613f69643d

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80634f6ccce7116100a257806395d89b411161007157806395d89b41146104f4578063a22cb46514610577578063b88d4fde146105c7578063c87b56dd146106cc578063e985e9c5146107735761010b565b80634f6ccce7146103f85780635463a88e1461043a5780636352211e1461044457806370a082311461049c5761010b565b806318160ddd116100de57806318160ddd1461029c57806323b872dd146102ba5780632f745c591461032857806342842e0e1461038a5761010b565b806301ffc9a71461011057806306fdde0314610173578063081812fc146101f6578063095ea7b31461024e575b600080fd5b61015b6004803603602081101561012657600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506107ed565b60405180821515815260200191505060405180910390f35b61017b610855565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101bb5780820151818401526020810190506101a0565b50505050905090810190601f1680156101e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102226004803603602081101561020c57600080fd5b81019080803590602001909291905050506108f7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61029a6004803603604081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109af565b005b6102a4610ba0565b6040518082815260200191505060405180910390f35b610326600480360360608110156102d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bad565b005b6103746004803603604081101561033e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611369565b6040518082815260200191505060405180910390f35b6103f6600480360360608110156103a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061147b565b005b6104246004803603602081101561040e57600080fd5b810190808035906020019092919050505061149b565b6040518082815260200191505060405180910390f35b610442611536565b005b6104706004803603602081101561045a57600080fd5b81019080803590602001909291905050506118ae565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104de600480360360208110156104b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611966565b6040518082815260200191505060405180910390f35b6104fc6119ae565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561053c578082015181840152602081019050610521565b50505050905090810190601f1680156105695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105c56004803603604081101561058d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a50565b005b6106ca600480360360808110156105dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561064457600080fd5b82018360208201111561065657600080fd5b8035906020019184600183028401116401000000008311171561067857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b4f565b005b6106f8600480360360208110156106e257600080fd5b8101908080359060200190929190505050611d86565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561073857808201518184015260208101905061071d565b50505050905090810190601f1680156107655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107d56004803603604081101561078957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061228f565b60405180821515815260200191505060405180910390f35b6000600b6000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108ed5780601f106108c2576101008083540402835291602001916108ed565b820191906000526020600020905b8154815290600101906020018083116108d057829003601f168201915b5050505050905090565b600061090282612323565b610974576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ba826118ae565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a7c5750600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7065726d697373696f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4826001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000600380549050905090565b6000610bb8826118ae565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610c5257503373ffffffffffffffffffffffffffffffffffffffff166001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610ce35750600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f7065726d697373696f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f6f776e657200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e99576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f7a65726f0000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001900391905055506000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550600073ffffffffffffffffffffffffffffffffffffffff166001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611081576001600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b6000600960008481526020019081526020016000205490506001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003811461124457600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050038154811061117457fe5b9060005260206000200154600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106111c957fe5b90600052602060002001819055508060096000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811061122657fe5b90600052602060002001548152602001908152602001600020819055505b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061128c57fe5b60019003818190600052602060002001600090559055600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506009600085815260200190815260200160002081905550600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208390806001815401808255809150506001900390600052602060002001600090919091909150555050505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821061141e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f696e64657800000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061146857fe5b9060005260206000200154905092915050565b61149683838360405180602001604052806000815250611b4f565b505050565b60006003805490508210611517576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f696e64657800000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6003828154811061152457fe5b90600052602060002001549050919050565b60003373ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611626576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f657869737473000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b336004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506009600083815260200190815260200160002081905550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600380549050600a60008381526020019081526020016000208190555060038190806001815401808255809150506001900390600052602060002001600090919091909150558073ab5801a7d398351b8be11c439e05c5b3259aec9b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4803373ffffffffffffffffffffffffffffffffffffffff1673ab5801a7d398351b8be11c439e05c5b3259aec9b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450565b60006118b982612323565b61192b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f696e76616c69640000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a465780601f10611a1b57610100808354040283529160200191611a46565b820191906000526020600020905b815481529060010190602001808311611a2957829003601f168201915b5050505050905090565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a380600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b5a848484610bad565b6000833b905060008163ffffffff161115611d7f5760008490507f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611c61578082015181840152602081019050611c46565b50505050905090810190601f168015611c8e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b505050506040513d6020811015611cda57600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f726563656976657200000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b505b5050505050565b6060611d9182612323565b611d9a57600080fd5b611da261238f565b606060078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e3a5780601f10611e0f57610100808354040283529160200191611e3a565b820191906000526020600020905b815481529060010190602001808311611e1d57829003601f168201915b50505050509050611e496123b2565b6040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250816000600a8110611e8c57fe5b60200201819052506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250816001600a8110611ed757fe5b60200201819052506040518060400160405280600181526020017f3200000000000000000000000000000000000000000000000000000000000000815250816002600a8110611f2257fe5b60200201819052506040518060400160405280600181526020017f3300000000000000000000000000000000000000000000000000000000000000815250816003600a8110611f6d57fe5b60200201819052506040518060400160405280600181526020017f3400000000000000000000000000000000000000000000000000000000000000815250816004600a8110611fb857fe5b60200201819052506040518060400160405280600181526020017f3500000000000000000000000000000000000000000000000000000000000000815250816005600a811061200357fe5b60200201819052506040518060400160405280600181526020017f3600000000000000000000000000000000000000000000000000000000000000815250816006600a811061204e57fe5b60200201819052506040518060400160405280600181526020017f3700000000000000000000000000000000000000000000000000000000000000815250816007600a811061209957fe5b60200201819052506040518060400160405280600181526020017f3800000000000000000000000000000000000000000000000000000000000000815250816008600a81106120e457fe5b60200201819052506040518060400160405280600181526020017f3900000000000000000000000000000000000000000000000000000000000000815250816009600a811061212f57fe5b602002018190525060005b60008614612182576000600a878161214e57fe5b069050600a878161215b57fe5b0496508085836032811061216b57fe5b60200201818152505081806001019250505061213a565b60008190505b60008111156122825783838660018403603281106121a257fe5b6020020151600a81106121b157fe5b60200201516040516020018083805190602001908083835b602083106121ec57805182526020820191506020810190506020830392506121c9565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831061223d578051825260208201915060208101905060208303925061221a565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350808060019003915050612188565b5082945050505050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b604051806106400160405280603290602082028036833780820191505090505090565b604051806101400160405280600a905b60608152602001906001900390816123c2579050509056fea2646970667358221220a183fbbcbc8b1ba27356371262ed56ccd91940c6afa0b9a8b9eb8c35beb37b3a64736f6c63430007040033

Deployed Bytecode Sourcemap

68:7906:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7820:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6880:137;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2867:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2451:408;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7213:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3406:1762;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7481:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5755:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7313:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1910:531;;;:::i;:::-;;1653:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1537:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7025:147;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3198:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5176:571;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5935:925;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3043:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7820:133;7890:4;7913:19;:32;7933:11;7913:32;;;;;;;;;;;;;;;;;;;;;;;;;;;7906:39;;7820:133;;;:::o;6880:137::-;6919:19;7003:6;6996:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6880:137;:::o;2867:168::-;2929:7;2957:22;2970:8;2957:12;:22::i;:::-;2949:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3008:9;:19;3018:8;3008:19;;;;;;;;;;;;;;;;;;;;;3001:26;;2867:168;;;:::o;2451:408::-;2525:13;2541:17;2549:8;2541:7;:17::i;:::-;2525:33;;2587:10;2578:19;;:5;:19;;;:112;;;;2661:10;:17;2672:5;2661:17;;;;;;;;;;;;;;;:29;2679:10;2661:29;;;;;;;;;;;;;;;;;;;;;;;;;2578:112;2569:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2800:8;2789:9;2773:36;;2782:5;2773:36;;;;;;;;;;;;2842:9;2820;:19;2830:8;2820:19;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;2451:408;;;:::o;7213:92::-;7259:7;7285:5;:12;;;;7278:19;;7213:92;:::o;3406:1762::-;3578:13;3594:17;3602:8;3594:7;:17::i;:::-;3578:33;;3643:10;3634:19;;:5;:19;;;:200;;;;3824:10;3801:33;;:9;:19;3811:8;3801:19;;;;;;;;;;;;;;;;;;;;;:33;;;3634:200;:283;;;;3888:10;:17;3899:5;3888:17;;;;;;;;;;;;;;;:29;3906:10;3888:29;;;;;;;;;;;;;;;;;;;;;;;;;3634:283;3624:351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4003:5;3994:14;;:5;:14;;;3986:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4051:1;4036:17;;:3;:17;;;;4028:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:8;4159:3;4143:30;;4152:5;4143:30;;;;;;;;;;;;4206:3;4188:6;:16;4195:8;4188:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;4222:8;:15;4231:5;4222:15;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;;;4250:8;:13;4259:3;4250:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;4354:1;4323:33;;:9;:19;4333:8;4323:19;;;;;;;;;;;;;;;;;;;;;:33;;;4320:90;;4379:9;:19;4389:8;4379:19;;;;;;;;;;;;4372:26;;;;;;;;;;;4320:90;4454:13;4470:17;:27;4488:8;4470:27;;;;;;;;;;;;4454:43;;4621:1;4587:17;:24;4605:5;4587:24;;;;;;;;;;;;;;;:31;;;;:35;4575:8;:47;4572:380;;4725:17;:24;4743:5;4725:24;;;;;;;;;;;;;;;4784:1;4750:17;:24;4768:5;4750:24;;;;;;;;;;;;;;;:31;;;;:35;4725:61;;;;;;;;;;;;;;;;4688:17;:24;4706:5;4688:24;;;;;;;;;;;;;;;4713:8;4688:34;;;;;;;;;;;;;;;:98;;;;4932:8;4876:17;:53;4894:17;:24;4912:5;4894:24;;;;;;;;;;;;;;;4919:8;4894:34;;;;;;;;;;;;;;;;4876:53;;;;;;;;;;;:64;;;;4572:380;5008:17;:24;5026:5;5008:24;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;5081:17;:22;5099:3;5081:22;;;;;;;;;;;;;;;:29;;;;5051:17;:27;5069:8;5051:27;;;;;;;;;;;:59;;;;5121:17;:22;5139:3;5121:22;;;;;;;;;;;;;;;5149:8;5121:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3406:1762;;;;;:::o;7481:204::-;7565:7;7601:8;:16;7610:6;7601:16;;;;;;;;;;;;;;;;7592:6;:25;7584:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7644:17;:25;7662:6;7644:25;;;;;;;;;;;;;;;7670:6;7644:33;;;;;;;;;;;;;;;;7637:40;;7481:204;;;;:::o;5755:139::-;5847:39;5864:5;5870:3;5874:8;5847:39;;;;;;;;;;;;:16;:39::i;:::-;5755:139;;;:::o;7313:160::-;7373:7;7409:5;:12;;;;7400:6;:21;7392:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7448:5;7454:6;7448:13;;;;;;;;;;;;;;;;7441:20;;7313:160;;;:::o;1910:531::-;1950:12;1970:10;1965:16;;1950:31;;2029:1;2002:29;;:6;:15;2009:7;2002:15;;;;;;;;;;;;;;;;;;;;;:29;;;1994:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:10;2056:6;:15;2063:7;2056:15;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;2095:8;:20;2104:10;2095:20;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;2159:17;:29;2177:10;2159:29;;;;;;;;;;;;;;;:36;;;;2130:17;:26;2148:7;2130:26;;;;;;;;;;;:65;;;;2206:17;:29;2224:10;2206:29;;;;;;;;;;;;;;;2241:7;2206:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2285:5;:12;;;;2262:11;:20;2274:7;2262:20;;;;;;;;;;;:35;;;;2308:5;2319:7;2308:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2373:7;1353:42;2345:36;;2362:1;2345:36;;;;;;;;;;;;2425:7;2414:10;2397:36;;1353:42;2397:36;;;;;;;;;;;;1910:531;:::o;1653:157::-;1708:7;1735:22;1748:8;1735:12;:22::i;:::-;1727:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1786:6;:16;1793:8;1786:16;;;;;;;;;;;;;;;;;;;;;1779:23;;1653:157;;;:::o;1537:108::-;1595:7;1621:8;:16;1630:6;1621:16;;;;;;;;;;;;;;;;1614:23;;1537:108;;;:::o;7025:147::-;7066:21;7156:8;7149:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7025:147;:::o;3198:198::-;3311:9;3285:47;;3300:10;3285:47;;;3322:9;3285:47;;;;;;;;;;;;;;;;;;;;3379:9;3343:10;:22;3354:10;3343:22;;;;;;;;;;;;;;;:33;3366:9;3343:33;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;3198:198;;:::o;5176:571::-;5285:34;5298:5;5305:3;5310:8;5285:12;:34::i;:::-;5389:11;5455:3;5443:16;5435:24;;5490:1;5483:4;:8;;;5480:258;;;5507:28;5558:3;5507:55;;5653:60;5585:129;;;:8;:25;;;5611:10;5622:5;5628:8;5637:4;5585:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:129;;;;5577:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5480:258;;5176:571;;;;;:::o;5935:925::-;5992:13;6071:22;6084:8;6071:12;:22::i;:::-;6063:31;;;;;;6139:24;;:::i;:::-;6199:17;6226:9;6199:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6251:21;;:::i;:::-;6283:12;;;;;;;;;;;;;;;;;:3;6287:1;6283:6;;;;;;;;;;:12;;;;6306;;;;;;;;;;;;;;;;;:3;6310:1;6306:6;;;;;;;;;;:12;;;;6329;;;;;;;;;;;;;;;;;:3;6333:1;6329:6;;;;;;;;;;:12;;;;6352;;;;;;;;;;;;;;;;;:3;6356:1;6352:6;;;;;;;;;;:12;;;;6375;;;;;;;;;;;;;;;;;:3;6379:1;6375:6;;;;;;;;;;:12;;;;6398;;;;;;;;;;;;;;;;;:3;6402:1;6398:6;;;;;;;;;;:12;;;;6421;;;;;;;;;;;;;;;;;:3;6425:1;6421:6;;;;;;;;;;:12;;;;6444;;;;;;;;;;;;;;;;;:3;6448:1;6444:6;;;;;;;;;;:12;;;;6467;;;;;;;;;;;;;;;;;:3;6471:1;6467:6;;;;;;;;;;:12;;;;6490;;;;;;;;;;;;;;;;;:3;6494:1;6490:6;;;;;;;;;;:12;;;;6515:8;6538:168;6557:1;6545:8;:13;6538:168;;6575:14;6603:2;6592:8;:13;;;;;;6575:30;;6632:2;6620:14;;;;;;;;;6665:9;6649:8;6658:3;6649:13;;;;;;;;;;:25;;;;;6689:5;;;;;;;6538:168;;;;6722:6;6731:3;6722:12;;6718:110;6740:1;6736;:5;6718:110;;;6792:3;6796;6800:8;6811:1;6809;:3;6800:13;;;;;;;;;;;6796:18;;;;;;;;;;;6775:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6762:54;;6743:3;;;;;;;;6718:110;;;;6847:3;6840:10;;;;;;5935:925;;;:::o;3043:145::-;3127:4;3151:10;:18;3162:6;3151:18;;;;;;;;;;;;;;;:29;3170:9;3151:29;;;;;;;;;;;;;;;;;;;;;;;;;3144:36;;3043:145;;;;:::o;1404:123::-;1466:4;1517:1;1489:30;;:6;:16;1496:8;1489:16;;;;;;;;;;;;;;;;;;;;;:30;;;;1482:37;;1404:123;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://a183fbbcbc8b1ba27356371262ed56ccd91940c6afa0b9a8b9eb8c35beb37b3a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.