ETH Price: $3,479.23 (-0.34%)

Token

etherstar (eth*1)
 

Overview

Max Total Supply

1,000 eth*1

Holders

413

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 eth*1
0x64abc5b10c77d93be5038e7b4965d2f0d8279127
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

etherstar is a disruptive artwork of max. 1,000 collectible ERC-721 Non-Fungible Tokens (NFT) stored on Ethereum blockchain. Each etherstar and its composition is unique art piece by rabanheidr.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
etherstar

Compiler Version
v0.5.1+commit.c8a2cb62

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-08-06
*/

pragma solidity ^0.5.0;

/**
 * @title IERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface IERC165 {
    /**
     * @notice Query if a contract implements an interface
     * @param interfaceId The interface identifier, as specified in ERC-165
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @title ERC165
 * @author Matt Condon (@shrugs)
 * @dev Implements ERC165 using a lookup table.
 */
contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    /**
     * 0x01ffc9a7 ===
     *     bytes4(keccak256('supportsInterface(bytes4)'))
     */

    /**
     * @dev a mapping of interface id to whether or not it's supported
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    /**
     * @dev A contract implementing SupportsInterfaceWithLookup
     * implement ERC165 itself
     */
    constructor () internal {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    /**
     * @dev implement supportsInterface(bytes4) using a lookup table
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev internal method for registering an interface
     */
    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff);
        _supportedInterfaces[interfaceId] = true;
    }
}

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
contract IERC721Receiver {
    /**
     * @notice Handle the receipt of an NFT
     * @dev The ERC721 smart contract calls this function on the recipient
     * after a `safeTransfer`. This function MUST return the function selector,
     * otherwise the caller will revert the transaction. The selector to be
     * returned can be obtained as `this.onERC721Received.selector`. This
     * function MAY throw to revert and reject the transfer.
     * Note: the ERC721 contract address is always the message sender.
     * @param operator The address which called `safeTransferFrom` function
     * @param from The address which previously owned the token
     * @param tokenId The NFT identifier which is being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
    public returns (bytes4);
}

/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721 is IERC165 {
    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);

    function balanceOf(address owner) public view returns (uint256 balance);
    function ownerOf(uint256 tokenId) public view returns (address owner);

    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);

    function transferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId) public;

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        require(!has(role, account));

        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        require(has(role, account));

        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0));
        return role.bearer[account];
    }
}

contract PauserRole {
    using Roles for Roles.Role;

    event PauserAdded(address indexed account);
    event PauserRemoved(address indexed account);

    Roles.Role private _pausers;

    constructor () internal {
        _addPauser(msg.sender);
    }

    modifier onlyPauser() {
        require(isPauser(msg.sender));
        _;
    }

    function isPauser(address account) public view returns (bool) {
        return _pausers.has(account);
    }

    function addPauser(address account) public onlyPauser {
        _addPauser(account);
    }

    function renouncePauser() public {
        _removePauser(msg.sender);
    }

    function _addPauser(address account) internal {
        _pausers.add(account);
        emit PauserAdded(account);
    }

    function _removePauser(address account) internal {
        _pausers.remove(account);
        emit PauserRemoved(account);
    }
}

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is PauserRole {
    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;

    constructor () internal {
        _paused = false;
    }

    /**
     * @return true if the contract is paused, false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!_paused);
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(_paused);
        _;
    }

    /**
     * @dev called by the owner to pause, triggers stopped state
     */
    function pause() public onlyPauser whenNotPaused {
        _paused = true;
        emit Paused(msg.sender);
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() public onlyPauser whenPaused {
        _paused = false;
        emit Unpaused(msg.sender);
    }
}

contract MinterRole {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private _minters;

    constructor () internal {
        _addMinter(msg.sender);
    }

    modifier onlyMinter() {
        require(isMinter(msg.sender));
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(msg.sender);
    }

    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(account);
    }
}

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

/**
 * Utility library of inline functions on addresses
 */
library Address {
    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     * as the code is not actually created until after the constructor finishes.
     * @param account address of the account to check
     * @return whether the target address is a contract
     */
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

library Strings {
    function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory _concatenatedString) {
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory _bc = bytes(_c);
        bytes memory _bd = bytes(_d);
        bytes memory _be = bytes(_e);
        bytes memory babcde = new bytes(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
        uint k = 0;
        uint i = 0;
        for (i = 0; i < _ba.length; i++) {
            babcde[k++] = _ba[i];
        }
        for (i = 0; i < _bb.length; i++) {
            babcde[k++] = _bb[i];
        }
        for (i = 0; i < _bc.length; i++) {
            babcde[k++] = _bc[i];
        }
        for (i = 0; i < _bd.length; i++) {
            babcde[k++] = _bd[i];
        }
        for (i = 0; i < _be.length; i++) {
            babcde[k++] = _be[i];
        }
        return string(babcde);
    }

    function strConcat(string  memory _a, string  memory _b, string  memory _c, string  memory _d) internal pure returns (string  memory) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string  memory _a, string  memory _b, string  memory _c) internal pure returns (string  memory) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string  memory _a, string  memory _b) internal pure returns (string  memory) {
        return strConcat(_a, _b, "", "", "");
    }

    function uint2str(uint _i) internal pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (_i != 0) {
            bstr[k--] = byte(uint8(48 + _i % 10));
            _i /= 10;
        }
        return string(bstr);
    }

    function split(bytes memory _base, uint8[] memory _lengths) internal pure returns (bytes[] memory arr) {
        uint _offset = 0;
        bytes[] memory splitArr = new bytes[](_lengths.length);

        for(uint i = 0; i < _lengths.length; i++) {
            bytes memory _tmpBytes = new bytes(_lengths[i]);

            for(uint j = 0; j < _lengths[i]; j++)
                _tmpBytes[j] = _base[_offset+j];

            splitArr[i] = _tmpBytes;
            _offset += _lengths[i];
        }

        return splitArr;
    }
}









/**
 * @title Non-Fungible Token
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract etherstar is ERC165, IERC721, IERC721Metadata, Pausable, MinterRole {

    using SafeMath for uint256;
    using Address for address;
    using Strings for string;

    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;
    /*
     * 0x80ac58cd ===
     *     bytes4(keccak256('balanceOf(address)')) ^
     *     bytes4(keccak256('ownerOf(uint256)')) ^
     *     bytes4(keccak256('approve(address,uint256)')) ^
     *     bytes4(keccak256('getApproved(uint256)')) ^
     *     bytes4(keccak256('setApprovalForAll(address,bool)')) ^
     *     bytes4(keccak256('isApprovedForAll(address,address)')) ^
     *     bytes4(keccak256('transferFrom(address,address,uint256)')) ^
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
     */

    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
    /**
     * 0x5b5e139f ===
     *     bytes4(keccak256('name()')) ^
     *     bytes4(keccak256('symbol()')) ^
     *     bytes4(keccak256('tokenURI(uint256)'))
     */

    // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Token URI prefix
    string private _baseTokenURI;

    // Flag representing if metadata migrated to IPFS
    bool private _ipfsMigrated;

    // Token total Supply
    uint256 private _totalSupply;

    // Mapping from token ID to owner
    mapping (uint256 => address) private _tokenOwner;

    // Mapping from token ID to approved address
    mapping (uint256 => address) private _tokenApprovals;

    // Mapping Mapping from token ID to token URI
    mapping(uint256 => string) private _tokenURIs;

    // Mapping Mapping from token ID to token DNAs
    mapping (uint256 => uint256) private _dnas;

    // Mapping Mapping from token ID to token Name
    mapping (uint256 => string) private _tokenNames;

    // Mapping from owner to number of owned token
    mapping (address => uint256) private _ownedTokensCount;

    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) private _operatorApprovals;


    event TokenURI(uint256 indexed tokenId, string uri);


    /**
     * @dev Constructor function
     */
    constructor (string memory name, string memory symbol, string memory baseTokenURI) public {
        _name = name;
        _symbol = symbol;
        _totalSupply = 0;
        _baseTokenURI = baseTokenURI;
        _ipfsMigrated = false;

        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721);
        _registerInterface(_INTERFACE_ID_ERC721_METADATA);
    }

    /**
     * @dev Gets the token name
     * @return string representing the token name
     */
    function name() external view returns (string memory) {
        return _name;
    }

    /**
     * @dev Gets the token symbol
     * @return string representing the token symbol
     */
    function symbol() external view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Gets the total amount of tokens stored by the contract
     * @return uint256 representing the total amount of tokens
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev Returns whether the specified token exists
     * @param tokenId uint256 ID of the token to query the existence of
     * @return whether the token exists
     */
    function exists(uint256 tokenId) external view returns (bool) {
        return _exists(tokenId);
    }

    /**
     * @dev Sets IPFS migration flag true
     */
    function ipfsMigrationDone() public onlyMinter {
        _ipfsMigrated = true;
    }

    /**
     * @dev public function to set the token URI for a given token
     * Reverts if the token ID does not exist or metadata has migrated to IPFS
     * @param tokenId uint256 ID of the token to set its URI
     * @param uri string URI to assign
     */
    function setTokenURI(uint256 tokenId, string memory uri) public onlyMinter {
        require(!_ipfsMigrated);
        _setTokenURI(tokenId, uri);
    }

    /**
     * @dev Returns the URI for a given token ID
     * Throws if the token ID does not exist. May return an empty string.
     * @param tokenId uint256 ID of the token to query
     */
    function tokenURI(uint256 tokenId) external view returns (string memory) {
        require(_exists(tokenId));

        if (bytes(_tokenURIs[tokenId]).length > 0)
            return _tokenURIs[tokenId];

        return Strings.strConcat(baseTokenURI(),Strings.uint2str(tokenId));
    }

    /**
     * @dev Sets the prefix of token URI
     * @param baseTokenURI token URI prefix to be set
     */
    function setBaseTokenURI(string memory baseTokenURI) public onlyMinter {
        _baseTokenURI = baseTokenURI;
    }

    /**
     * @dev Returns prefix of token URI
     * @return string representing the token URI prefix
     */
    function baseTokenURI() public view returns (string memory) {
        return _baseTokenURI;
    }

    /**
     * @dev Returns the DNA for a given token ID
     * Throws if the token ID does not exist.
     * @param tokenId uint256 ID of the token to query
     */
    function tokenDNA(uint256 tokenId) public view returns (uint256) {
        require(_exists(tokenId));
        return _dnas[tokenId];
    }

    /**
     * @dev Returns the tokenName for a given token ID
     * Throws if the token ID does not exist.
     * @param tokenId uint256 ID of the token to query
     */
    function tokenName(uint256 tokenId) public view returns (string memory) {
        require(_exists(tokenId));
        return _tokenNames[tokenId];
    }

    /**
     * @dev Gets the balance of the specified address
     * @param owner address to query the balance of
     * @return uint256 representing the amount owned by the passed address
     */
    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0));
        return _ownedTokensCount[owner];
    }

    /**
     * @dev Gets the owner of the specified token ID
     * @param tokenId uint256 ID of the token to query the owner of
     * @return owner address currently marked as the owner of the given token ID
     */
    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0));
        return owner;
    }

    /**
     * @dev Approves another address to transfer the given token ID
     * The zero address indicates there is no approved address.
     * There can only be one approved address per token at a given time.
     * Can only be called by the token owner or an approved operator.
     * @param to address to be approved for the given token ID
     * @param tokenId uint256 ID of the token to be approved
     */
    function approve(address to, uint256 tokenId) public whenNotPaused {
        address owner = ownerOf(tokenId);
        require(to != owner);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Gets the approved address for a token ID, or zero if no address set
     * Reverts if the token ID does not exist.
     * @param tokenId uint256 ID of the token to query the approval of
     * @return address currently approved for the given token ID
     */
    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId));
        return _tokenApprovals[tokenId];
    }

    /**
     * @dev Sets or unsets the approval of a given operator
     * An operator is allowed to transfer all tokens of the sender on their behalf
     * @param to operator address to set the approval
     * @param approved representing the status of the approval to be set
     */
    function setApprovalForAll(address to, bool approved) public whenNotPaused {
        require(to != msg.sender);
        _operatorApprovals[msg.sender][to] = approved;
        emit ApprovalForAll(msg.sender, to, approved);
    }

    /**
     * @dev Tells whether an operator is approved by a given owner
     * @param owner owner address which you want to query the approval of
     * @param operator operator address which you want to query the approval of
     * @return bool whether the given operator is approved by the given owner
     */
    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev Transfers the ownership of a given token ID to another address
     * Usage of this method is discouraged, use `safeTransferFrom` whenever possible
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function transferFrom(address from, address to, uint256 tokenId) public whenNotPaused {
        require(_isApprovedOrOwner(msg.sender, tokenId));

        _transferFrom(from, to, tokenId);
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     *
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes data to send along with a safe transfer check
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
        transferFrom(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data));
    }

    /**
     * @dev Public function to mint a new token
     * Reverts if the given token ID already exists
     * @param to address The address that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     * @param uri string Metadata URI of the token to be minted
     * @param dna  uint256 DNAs of the token to be minted
     */
    function mint(address to, uint256 tokenId, string memory uri, uint256 dna , string memory tokenNms)
        public onlyMinter
    {
        require(tokenId >= 0 && tokenId <= 9999);
        _mint(to, tokenId, uri, dna, tokenNms);
        _totalSupply += 1;
    }

    /**
     * @dev Returns whether the specified token exists
     * @param tokenId uint256 ID of the token to query the existence of
     * @return whether the token exists
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        address owner = _tokenOwner[tokenId];
        return owner != address(0);
    }

    /**
     * @dev Returns whether the given spender can transfer a given token ID
     * @param spender address of the spender to query
     * @param tokenId uint256 ID of the token to be transferred
     * @return bool whether the msg.sender is approved for the given token ID,
     *    is an operator of the owner, or is the owner of the token
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Internal function to mint a new token
     * Reverts if the given token ID already exists
     * @param to The address that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     * @param uri string URI of the token to be minted metadata
     * @param dna  uint256 DNAs of the token to be minted
     */
    function _mint(address to, uint256 tokenId, string memory uri, uint256 dna , string memory tokenNms) internal {
        require(to != address(0));
        require(!_exists(tokenId));

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);
        _setTokenURI(tokenId, uri);
        _dnas[tokenId] = dna ;
        _tokenNames[tokenId] = tokenNms;

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

    /**
     * @dev Internal function to set the token URI for a given token
     * Reverts if the token ID does not exist
     * @param tokenId uint256 ID of the token to set its URI
     * @param uri string URI to assign
     */
    function _setTokenURI(uint256 tokenId, string memory uri) internal {
        require(_exists(tokenId));
        _tokenURIs[tokenId] = uri;
        emit TokenURI(tokenId, uri);
    }

    /**
     * @dev Internal function to transfer ownership of a given token ID to another address.
     * As opposed to transferFrom, this imposes no restrictions on msg.sender.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from);
        require(to != address(0));

        _clearApproval(tokenId);

        _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);

        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Internal function to invoke `onERC721Received` on a target address
     * The call is not executed if the target address is not a contract
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        internal returns (bool)
    {
        if (!to.isContract()) {
            return true;
        }

        bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    /**
     * @dev Private function to clear current approval of a given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"uri","type":"string"}],"name":"setTokenURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"ipfsMigrationDone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPauser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenDNA","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseTokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"uri","type":"string"},{"name":"dna","type":"uint256"},{"name":"tokenNms","type":"string"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"baseTokenURI","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"uri","type":"string"}],"name":"TokenURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

60806040523480156200001157600080fd5b506040516200360938038062003609833981018060405260608110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b50509291906020018051640100000000811115620000a257600080fd5b82810190506020810184811115620000b957600080fd5b8151856001820283011164010000000082111715620000d757600080fd5b50509291906020018051640100000000811115620000f457600080fd5b828101905060208101848111156200010b57600080fd5b81518560018202830111640100000000821117156200012957600080fd5b50509291905050506200016e6301ffc9a77c010000000000000000000000000000000000000000000000000000000002620002ae640100000000026401000000009004565b62000188336200036c640100000000026401000000009004565b6000600260006101000a81548160ff021916908315150217905550620001bd33620003d6640100000000026401000000009004565b8260049080519060200190620001d592919062000598565b508160059080519060200190620001ee92919062000598565b50600060088190555080600690805190602001906200020f92919062000598565b506000600760006101000a81548160ff021916908315150217905550620002686380ac58cd7c010000000000000000000000000000000000000000000000000000000002620002ae640100000000026401000000009004565b620002a5635b5e139f7c010000000000000000000000000000000000000000000000000000000002620002ae640100000000026401000000009004565b50505062000647565b63ffffffff7c010000000000000000000000000000000000000000000000000000000002817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515156200030057600080fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b62000390816001620004406401000000000262002a09179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b620003fa816003620004406401000000000262002a09179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200047d57600080fd5b62000498828262000503640100000000026401000000009004565b151515620004a557600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200054157600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005db57805160ff19168380011785556200060c565b828001600101855582156200060c579182015b828111156200060b578251825591602001919060010190620005ee565b5b5090506200061b91906200061f565b5090565b6200064491905b808211156200064057600081600090555060010162000626565b5090565b90565b612fb280620006576000396000f3fe608060405260043610610185576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a71461018a57806306fdde03146101fc578063081812fc1461028c578063095ea7b314610307578063162094c41461036257806318160ddd1461043457806323b872dd1461045f57806324af9942146104da57806330176e13146104f15780633f4ba83a146105b957806342842e0e146105d057806346fbf68e1461064b5780634f558e79146106b45780635c975abb146107075780636352211e146107365780636ef8d66d146107b157806370a08231146107c857806382dc1ec41461082d5780638456cb591461087e57806395d89b4114610895578063983b2d56146109255780639865027514610976578063a22cb4651461098d578063aa271e1a146109ea578063b88d4fde14610a53578063be65d75114610b65578063c87b56dd14610bb4578063d547cfb714610c68578063e725f87714610cf8578063e86f636714610dac578063e985e9c514610f3f575b600080fd5b34801561019657600080fd5b506101e2600480360360208110156101ad57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610fc8565b604051808215151515815260200191505060405180910390f35b34801561020857600080fd5b5061021161102f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610251578082015181840152602081019050610236565b50505050905090810190601f16801561027e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029857600080fd5b506102c5600480360360208110156102af57600080fd5b81019080803590602001909291905050506110d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561031357600080fd5b506103606004803603604081101561032a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611122565b005b34801561036e57600080fd5b506104326004803603604081101561038557600080fd5b8101908080359060200190929190803590602001906401000000008111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460018302840111640100000000831117156103e057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611283565b005b34801561044057600080fd5b506104496112c1565b6040518082815260200191505060405180910390f35b34801561046b57600080fd5b506104d86004803603606081101561048257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112cb565b005b3480156104e657600080fd5b506104ef61130c565b005b3480156104fd57600080fd5b506105b76004803603602081101561051457600080fd5b810190808035906020019064010000000081111561053157600080fd5b82018360208201111561054357600080fd5b8035906020019184600183028401116401000000008311171561056557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061133d565b005b3480156105c557600080fd5b506105ce61136b565b005b3480156105dc57600080fd5b50610649600480360360608110156105f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061141a565b005b34801561065757600080fd5b5061069a6004803603602081101561066e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061143b565b604051808215151515815260200191505060405180910390f35b3480156106c057600080fd5b506106ed600480360360208110156106d757600080fd5b8101908080359060200190929190505050611458565b604051808215151515815260200191505060405180910390f35b34801561071357600080fd5b5061071c61146a565b604051808215151515815260200191505060405180910390f35b34801561074257600080fd5b5061076f6004803603602081101561075957600080fd5b8101908080359060200190929190505050611481565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107bd57600080fd5b506107c66114ff565b005b3480156107d457600080fd5b50610817600480360360208110156107eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061150a565b6040518082815260200191505060405180910390f35b34801561083957600080fd5b5061087c6004803603602081101561085057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061158e565b005b34801561088a57600080fd5b506108936115ae565b005b3480156108a157600080fd5b506108aa61165e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108ea5780820151818401526020810190506108cf565b50505050905090810190601f1680156109175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561093157600080fd5b506109746004803603602081101561094857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611700565b005b34801561098257600080fd5b5061098b611720565b005b34801561099957600080fd5b506109e8600480360360408110156109b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061172b565b005b3480156109f657600080fd5b50610a3960048036036020811015610a0d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611883565b604051808215151515815260200191505060405180910390f35b348015610a5f57600080fd5b50610b6360048036036080811015610a7657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610add57600080fd5b820183602082011115610aef57600080fd5b80359060200191846001830284011164010000000083111715610b1157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506118a0565b005b348015610b7157600080fd5b50610b9e60048036036020811015610b8857600080fd5b81019080803590602001909291905050506118c8565b6040518082815260200191505060405180910390f35b348015610bc057600080fd5b50610bed60048036036020811015610bd757600080fd5b81019080803590602001909291905050506118f9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c2d578082015181840152602081019050610c12565b50505050905090810190601f168015610c5a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c7457600080fd5b50610c7d611a13565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cbd578082015181840152602081019050610ca2565b50505050905090810190601f168015610cea5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d0457600080fd5b50610d3160048036036020811015610d1b57600080fd5b8101908080359060200190929190505050611ab5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d71578082015181840152602081019050610d56565b50505050905090810190601f168015610d9e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610db857600080fd5b50610f3d600480360360a0811015610dcf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610e1657600080fd5b820183602082011115610e2857600080fd5b80359060200191846001830284011164010000000083111715610e4a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190640100000000811115610eb757600080fd5b820183602082011115610ec957600080fd5b80359060200191846001830284011164010000000083111715610eeb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b7e565b005b348015610f4b57600080fd5b50610fae60048036036040811015610f6257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd5565b604051808215151515815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110c75780601f1061109c576101008083540402835291602001916110c7565b820191906000526020600020905b8154815290600101906020018083116110aa57829003601f168201915b5050505050905090565b60006110dc82611c69565b15156110e757600080fd5b600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600260009054906101000a900460ff1615151561113e57600080fd5b600061114982611481565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561118657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111c657506111c58133611bd5565b5b15156111d157600080fd5b82600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61128c33611883565b151561129757600080fd5b600760009054906101000a900460ff161515156112b357600080fd5b6112bd8282611cdb565b5050565b6000600854905090565b600260009054906101000a900460ff161515156112e757600080fd5b6112f13382611db8565b15156112fc57600080fd5b611307838383611e4d565b505050565b61131533611883565b151561132057600080fd5b6001600760006101000a81548160ff021916908315150217905550565b61134633611883565b151561135157600080fd5b8060069080519060200190611367929190612ee1565b5050565b6113743361143b565b151561137f57600080fd5b600260009054906101000a900460ff16151561139a57600080fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b61143683838360206040519081016040528060008152506118a0565b505050565b60006114518260016120b290919063ffffffff16565b9050919050565b600061146382611c69565b9050919050565b6000600260009054906101000a900460ff16905090565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156114f657600080fd5b80915050919050565b61150833612146565b565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561154757600080fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115973361143b565b15156115a257600080fd5b6115ab816121a0565b50565b6115b73361143b565b15156115c257600080fd5b600260009054906101000a900460ff161515156115de57600080fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116f65780601f106116cb576101008083540402835291602001916116f6565b820191906000526020600020905b8154815290600101906020018083116116d957829003601f168201915b5050505050905090565b61170933611883565b151561171457600080fd5b61171d816121fa565b50565b61172933612254565b565b600260009054906101000a900460ff1615151561174757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561178257600080fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b60006118998260036120b290919063ffffffff16565b9050919050565b6118ab8484846112cb565b6118b7848484846122ae565b15156118c257600080fd5b50505050565b60006118d382611c69565b15156118de57600080fd5b600c6000838152602001908152602001600020549050919050565b606061190482611c69565b151561190f57600080fd5b6000600b600084815260200190815260200160002080546001816001161561010002031660029004905011156119f257600b60008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119e65780601f106119bb576101008083540402835291602001916119e6565b820191906000526020600020905b8154815290600101906020018083116119c957829003601f168201915b50505050509050611a0e565b611a0b6119fd611a13565b611a06846124d1565b61262a565b90505b919050565b606060068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aab5780601f10611a8057610100808354040283529160200191611aab565b820191906000526020600020905b815481529060010190602001808311611a8e57829003601f168201915b5050505050905090565b6060611ac082611c69565b1515611acb57600080fd5b600d60008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b725780601f10611b4757610100808354040283529160200191611b72565b820191906000526020600020905b815481529060010190602001808311611b5557829003601f168201915b50505050509050919050565b611b8733611883565b1515611b9257600080fd5b60008410158015611ba5575061270f8411155b1515611bb057600080fd5b611bbd8585858585612671565b60016008600082825401925050819055505050505050565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b611ce482611c69565b1515611cef57600080fd5b80600b60008481526020019081526020016000209080519060200190611d16929190612ee1565b50817fe9dd2c01379f6033709e315d41f1a58fcbd937ae2512da16462852d1082e7b73826040518080602001828103825283818151815260200191508051906020019080838360005b83811015611d7a578082015181840152602081019050611d5f565b50505050905090810190601f168015611da75780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600080611dc483611481565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e3357508373ffffffffffffffffffffffffffffffffffffffff16611e1b846110d1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e445750611e438185611bd5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e6d82611481565b73ffffffffffffffffffffffffffffffffffffffff16141515611e8f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611ecb57600080fd5b611ed481612857565b611f276001600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291790919063ffffffff16565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fbd6001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293990919063ffffffff16565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120ef57600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61215a81600161295a90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b6121b4816001612a0990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b61220e816003612a0990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b61226881600361295a90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b60006122cf8473ffffffffffffffffffffffffffffffffffffffff16612ab9565b15156122de57600190506124c9565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156123d55780820151818401526020810190506123ba565b50505050905090810190601f1680156124025780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561242457600080fd5b505af1158015612438573d6000803e3d6000fd5b505050506040513d602081101561244e57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60606000821415612519576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612625565b600082905060005b600082141515612547578080600101915050600a8281151561253f57fe5b049150612521565b6060816040519080825280601f01601f19166020018201604052801561257c5781602001600182028038833980820191505090505b50905060006001830390505b60008614151561261d57600a8681151561259e57fe5b066030017f0100000000000000000000000000000000000000000000000000000000000000028282806001900393508151811015156125d957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681151561261557fe5b049550612588565b819450505050505b919050565b60606126698383602060405190810160405280600081525060206040519081016040528060008152506020604051908101604052806000815250612acc565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156126ad57600080fd5b6126b684611c69565b1515156126c257600080fd5b846009600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127676001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293990919063ffffffff16565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127b48484611cdb565b81600c60008681526020019081526020016000208190555080600d600086815260200190815260200160002090805190602001906127f3929190612ee1565b50838573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612914576000600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600082821115151561292857600080fd5b600082840390508091505092915050565b600080828401905083811015151561295057600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561299657600080fd5b6129a082826120b2565b15156129ab57600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612a4557600080fd5b612a4f82826120b2565b151515612a5b57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f191660200182016040528015612b285781602001600182028038833980820191505090505b50905060008090506000809050600090505b8751811015612bed578781815181101515612b5157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515612bb057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612b3a565b600090505b8651811015612ca5578681815181101515612c0957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515612c6857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf2565b600090505b8551811015612d5d578581815181101515612cc157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515612d2057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612caa565b600090505b8451811015612e15578481815181101515612d7957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515612dd857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612d62565b600090505b8351811015612ecd578381815181101515612e3157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515612e9057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612e1a565b829850505050505050505095945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f2257805160ff1916838001178555612f50565b82800160010185558215612f50579182015b82811115612f4f578251825591602001919060010190612f34565b5b509050612f5d9190612f61565b5090565b612f8391905b80821115612f7f576000816000905550600101612f67565b5090565b9056fea165627a7a723058205f5c05bb5479cc79b54a291332ccd8e9a69e4cd62d71beebcdee3507a0ecb3d80029000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000009657468657273746172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056574682a31000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f726162616e68656964722e6f72672f6574686572737461722f6170692f000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610185576000357c01000000000000000000000000000000000000000000000000000000009004806301ffc9a71461018a57806306fdde03146101fc578063081812fc1461028c578063095ea7b314610307578063162094c41461036257806318160ddd1461043457806323b872dd1461045f57806324af9942146104da57806330176e13146104f15780633f4ba83a146105b957806342842e0e146105d057806346fbf68e1461064b5780634f558e79146106b45780635c975abb146107075780636352211e146107365780636ef8d66d146107b157806370a08231146107c857806382dc1ec41461082d5780638456cb591461087e57806395d89b4114610895578063983b2d56146109255780639865027514610976578063a22cb4651461098d578063aa271e1a146109ea578063b88d4fde14610a53578063be65d75114610b65578063c87b56dd14610bb4578063d547cfb714610c68578063e725f87714610cf8578063e86f636714610dac578063e985e9c514610f3f575b600080fd5b34801561019657600080fd5b506101e2600480360360208110156101ad57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610fc8565b604051808215151515815260200191505060405180910390f35b34801561020857600080fd5b5061021161102f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610251578082015181840152602081019050610236565b50505050905090810190601f16801561027e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029857600080fd5b506102c5600480360360208110156102af57600080fd5b81019080803590602001909291905050506110d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561031357600080fd5b506103606004803603604081101561032a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611122565b005b34801561036e57600080fd5b506104326004803603604081101561038557600080fd5b8101908080359060200190929190803590602001906401000000008111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460018302840111640100000000831117156103e057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611283565b005b34801561044057600080fd5b506104496112c1565b6040518082815260200191505060405180910390f35b34801561046b57600080fd5b506104d86004803603606081101561048257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112cb565b005b3480156104e657600080fd5b506104ef61130c565b005b3480156104fd57600080fd5b506105b76004803603602081101561051457600080fd5b810190808035906020019064010000000081111561053157600080fd5b82018360208201111561054357600080fd5b8035906020019184600183028401116401000000008311171561056557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061133d565b005b3480156105c557600080fd5b506105ce61136b565b005b3480156105dc57600080fd5b50610649600480360360608110156105f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061141a565b005b34801561065757600080fd5b5061069a6004803603602081101561066e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061143b565b604051808215151515815260200191505060405180910390f35b3480156106c057600080fd5b506106ed600480360360208110156106d757600080fd5b8101908080359060200190929190505050611458565b604051808215151515815260200191505060405180910390f35b34801561071357600080fd5b5061071c61146a565b604051808215151515815260200191505060405180910390f35b34801561074257600080fd5b5061076f6004803603602081101561075957600080fd5b8101908080359060200190929190505050611481565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107bd57600080fd5b506107c66114ff565b005b3480156107d457600080fd5b50610817600480360360208110156107eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061150a565b6040518082815260200191505060405180910390f35b34801561083957600080fd5b5061087c6004803603602081101561085057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061158e565b005b34801561088a57600080fd5b506108936115ae565b005b3480156108a157600080fd5b506108aa61165e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108ea5780820151818401526020810190506108cf565b50505050905090810190601f1680156109175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561093157600080fd5b506109746004803603602081101561094857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611700565b005b34801561098257600080fd5b5061098b611720565b005b34801561099957600080fd5b506109e8600480360360408110156109b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061172b565b005b3480156109f657600080fd5b50610a3960048036036020811015610a0d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611883565b604051808215151515815260200191505060405180910390f35b348015610a5f57600080fd5b50610b6360048036036080811015610a7657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610add57600080fd5b820183602082011115610aef57600080fd5b80359060200191846001830284011164010000000083111715610b1157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506118a0565b005b348015610b7157600080fd5b50610b9e60048036036020811015610b8857600080fd5b81019080803590602001909291905050506118c8565b6040518082815260200191505060405180910390f35b348015610bc057600080fd5b50610bed60048036036020811015610bd757600080fd5b81019080803590602001909291905050506118f9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c2d578082015181840152602081019050610c12565b50505050905090810190601f168015610c5a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c7457600080fd5b50610c7d611a13565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cbd578082015181840152602081019050610ca2565b50505050905090810190601f168015610cea5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d0457600080fd5b50610d3160048036036020811015610d1b57600080fd5b8101908080359060200190929190505050611ab5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d71578082015181840152602081019050610d56565b50505050905090810190601f168015610d9e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610db857600080fd5b50610f3d600480360360a0811015610dcf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610e1657600080fd5b820183602082011115610e2857600080fd5b80359060200191846001830284011164010000000083111715610e4a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190640100000000811115610eb757600080fd5b820183602082011115610ec957600080fd5b80359060200191846001830284011164010000000083111715610eeb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b7e565b005b348015610f4b57600080fd5b50610fae60048036036040811015610f6257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd5565b604051808215151515815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110c75780601f1061109c576101008083540402835291602001916110c7565b820191906000526020600020905b8154815290600101906020018083116110aa57829003601f168201915b5050505050905090565b60006110dc82611c69565b15156110e757600080fd5b600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600260009054906101000a900460ff1615151561113e57600080fd5b600061114982611481565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561118657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111c657506111c58133611bd5565b5b15156111d157600080fd5b82600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61128c33611883565b151561129757600080fd5b600760009054906101000a900460ff161515156112b357600080fd5b6112bd8282611cdb565b5050565b6000600854905090565b600260009054906101000a900460ff161515156112e757600080fd5b6112f13382611db8565b15156112fc57600080fd5b611307838383611e4d565b505050565b61131533611883565b151561132057600080fd5b6001600760006101000a81548160ff021916908315150217905550565b61134633611883565b151561135157600080fd5b8060069080519060200190611367929190612ee1565b5050565b6113743361143b565b151561137f57600080fd5b600260009054906101000a900460ff16151561139a57600080fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b61143683838360206040519081016040528060008152506118a0565b505050565b60006114518260016120b290919063ffffffff16565b9050919050565b600061146382611c69565b9050919050565b6000600260009054906101000a900460ff16905090565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156114f657600080fd5b80915050919050565b61150833612146565b565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561154757600080fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115973361143b565b15156115a257600080fd5b6115ab816121a0565b50565b6115b73361143b565b15156115c257600080fd5b600260009054906101000a900460ff161515156115de57600080fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116f65780601f106116cb576101008083540402835291602001916116f6565b820191906000526020600020905b8154815290600101906020018083116116d957829003601f168201915b5050505050905090565b61170933611883565b151561171457600080fd5b61171d816121fa565b50565b61172933612254565b565b600260009054906101000a900460ff1615151561174757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561178257600080fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b60006118998260036120b290919063ffffffff16565b9050919050565b6118ab8484846112cb565b6118b7848484846122ae565b15156118c257600080fd5b50505050565b60006118d382611c69565b15156118de57600080fd5b600c6000838152602001908152602001600020549050919050565b606061190482611c69565b151561190f57600080fd5b6000600b600084815260200190815260200160002080546001816001161561010002031660029004905011156119f257600b60008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119e65780601f106119bb576101008083540402835291602001916119e6565b820191906000526020600020905b8154815290600101906020018083116119c957829003601f168201915b50505050509050611a0e565b611a0b6119fd611a13565b611a06846124d1565b61262a565b90505b919050565b606060068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aab5780601f10611a8057610100808354040283529160200191611aab565b820191906000526020600020905b815481529060010190602001808311611a8e57829003601f168201915b5050505050905090565b6060611ac082611c69565b1515611acb57600080fd5b600d60008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b725780601f10611b4757610100808354040283529160200191611b72565b820191906000526020600020905b815481529060010190602001808311611b5557829003601f168201915b50505050509050919050565b611b8733611883565b1515611b9257600080fd5b60008410158015611ba5575061270f8411155b1515611bb057600080fd5b611bbd8585858585612671565b60016008600082825401925050819055505050505050565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b611ce482611c69565b1515611cef57600080fd5b80600b60008481526020019081526020016000209080519060200190611d16929190612ee1565b50817fe9dd2c01379f6033709e315d41f1a58fcbd937ae2512da16462852d1082e7b73826040518080602001828103825283818151815260200191508051906020019080838360005b83811015611d7a578082015181840152602081019050611d5f565b50505050905090810190601f168015611da75780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600080611dc483611481565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e3357508373ffffffffffffffffffffffffffffffffffffffff16611e1b846110d1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e445750611e438185611bd5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e6d82611481565b73ffffffffffffffffffffffffffffffffffffffff16141515611e8f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611ecb57600080fd5b611ed481612857565b611f276001600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291790919063ffffffff16565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fbd6001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293990919063ffffffff16565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120ef57600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61215a81600161295a90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b6121b4816001612a0990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b61220e816003612a0990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b61226881600361295a90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b60006122cf8473ffffffffffffffffffffffffffffffffffffffff16612ab9565b15156122de57600190506124c9565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156123d55780820151818401526020810190506123ba565b50505050905090810190601f1680156124025780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561242457600080fd5b505af1158015612438573d6000803e3d6000fd5b505050506040513d602081101561244e57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60606000821415612519576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612625565b600082905060005b600082141515612547578080600101915050600a8281151561253f57fe5b049150612521565b6060816040519080825280601f01601f19166020018201604052801561257c5781602001600182028038833980820191505090505b50905060006001830390505b60008614151561261d57600a8681151561259e57fe5b066030017f0100000000000000000000000000000000000000000000000000000000000000028282806001900393508151811015156125d957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681151561261557fe5b049550612588565b819450505050505b919050565b60606126698383602060405190810160405280600081525060206040519081016040528060008152506020604051908101604052806000815250612acc565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156126ad57600080fd5b6126b684611c69565b1515156126c257600080fd5b846009600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127676001600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293990919063ffffffff16565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127b48484611cdb565b81600c60008681526020019081526020016000208190555080600d600086815260200190815260200160002090805190602001906127f3929190612ee1565b50838573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612914576000600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600082821115151561292857600080fd5b600082840390508091505092915050565b600080828401905083811015151561295057600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561299657600080fd5b6129a082826120b2565b15156129ab57600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612a4557600080fd5b612a4f82826120b2565b151515612a5b57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f191660200182016040528015612b285781602001600182028038833980820191505090505b50905060008090506000809050600090505b8751811015612bed578781815181101515612b5157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515612bb057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612b3a565b600090505b8651811015612ca5578681815181101515612c0957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515612c6857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf2565b600090505b8551811015612d5d578581815181101515612cc157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515612d2057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612caa565b600090505b8451811015612e15578481815181101515612d7957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515612dd857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612d62565b600090505b8351811015612ecd578381815181101515612e3157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515612e9057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612e1a565b829850505050505050505095945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f2257805160ff1916838001178555612f50565b82800160010185558215612f50579182015b82811115612f4f578251825591602001919060010190612f34565b5b509050612f5d9190612f61565b5090565b612f8391905b80821115612f7f576000816000905550600101612f67565b5090565b9056fea165627a7a723058205f5c05bb5479cc79b54a291332ccd8e9a69e4cd62d71beebcdee3507a0ecb3d80029

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000009657468657273746172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056574682a31000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f726162616e68656964722e6f72672f6574686572737461722f6170692f000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): etherstar
Arg [1] : symbol (string): eth*1
Arg [2] : baseTokenURI (string): https://rabanheidr.org/etherstar/api/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 6574686572737461720000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 6574682a31000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [8] : 68747470733a2f2f726162616e68656964722e6f72672f657468657273746172
Arg [9] : 2f6170692f000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

14241:16405:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1257:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1257:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1257:135:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17357:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17357:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17357:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22212:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22212:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22212:154:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21606:313;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21606:313:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21606:313:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18625:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18625:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18625:154:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;18625:154:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18625:154:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18625:154:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;18625:154:0;;;;;;;;;;;;;;;:::i;:::-;;17803:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17803:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23816:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23816:198:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23816:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18263:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18263:86:0;;;:::i;:::-;;19400:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19400:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19400:118:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;19400:118:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19400:118:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;19400:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;19400:118:0;;;;;;;;;;;;;;;:::i;:::-;;7478;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7478:118:0;;;:::i;:::-;;24667:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24667:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24667:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5752:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5752:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5752:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18090:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18090:104:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18090:104:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6731:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6731:78:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20994:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20994:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20994:181:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5969:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5969:77:0;;;:::i;:::-;;20610:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20610:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20610:153:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5869:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5869:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5869:92:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;7267:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7267:116:0;;;:::i;:::-;;17556:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17556:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17556:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8083:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8083:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8083:92:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;8183:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8183:77:0;;;:::i;:::-;;22666:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22666:231:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22666:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7966:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7966:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7966:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25520:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25520:214:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;25520:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;25520:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25520:214:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;25520:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;25520:214:0;;;;;;;;;;;;;;;:::i;:::-;;19920:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19920:141:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19920:141:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18986:291;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18986:291:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18986:291:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;18986:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19642:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19642:99:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19642:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20246:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20246:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20246:154:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20246:154:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26115:268;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26115:268:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;26115:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;26115:268:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26115:268:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;26115:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;26115:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;26115:268:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26115:268:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;26115:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;26115:268:0;;;;;;;;;;;;;;;:::i;:::-;;23226:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23226:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23226:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1257:135;1327:4;1351:20;:33;1372:11;1351:33;;;;;;;;;;;;;;;;;;;;;;;;;;;1344:40;;1257:135;;;:::o;17357:85::-;17396:13;17429:5;17422:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17357:85;:::o;22212:154::-;22271:7;22299:16;22307:7;22299;:16::i;:::-;22291:25;;;;;;;;22334:15;:24;22350:7;22334:24;;;;;;;;;;;;;;;;;;;;;22327:31;;22212:154;;;:::o;21606:313::-;6968:7;;;;;;;;;;;6967:8;6959:17;;;;;;;;21684:13;21700:16;21708:7;21700;:16::i;:::-;21684:32;;21741:5;21735:11;;:2;:11;;;;21727:20;;;;;;;;21780:5;21766:19;;:10;:19;;;:58;;;;21789:35;21806:5;21813:10;21789:16;:35::i;:::-;21766:58;21758:67;;;;;;;;21865:2;21838:15;:24;21854:7;21838:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;21903:7;21899:2;21883:28;;21892:5;21883:28;;;;;;;;;;;;6987:1;21606:313;;:::o;18625:154::-;7917:20;7926:10;7917:8;:20::i;:::-;7909:29;;;;;;;;18720:13;;;;;;;;;;;18719:14;18711:23;;;;;;;;18745:26;18758:7;18767:3;18745:12;:26::i;:::-;18625:154;;:::o;17803:91::-;17847:7;17874:12;;17867:19;;17803:91;:::o;23816:198::-;6968:7;;;;;;;;;;;6967:8;6959:17;;;;;;;;23921:39;23940:10;23952:7;23921:18;:39::i;:::-;23913:48;;;;;;;;23974:32;23988:4;23994:2;23998:7;23974:13;:32::i;:::-;23816:198;;;:::o;18263:86::-;7917:20;7926:10;7917:8;:20::i;:::-;7909:29;;;;;;;;18337:4;18321:13;;:20;;;;;;;;;;;;;;;;;;18263:86::o;19400:118::-;7917:20;7926:10;7917:8;:20::i;:::-;7909:29;;;;;;;;19498:12;19482:13;:28;;;;;;;;;;;;:::i;:::-;;19400:118;:::o;7478:::-;5703:20;5712:10;5703:8;:20::i;:::-;5695:29;;;;;;;;7147:7;;;;;;;;;;;7139:16;;;;;;;;7547:5;7537:7;;:15;;;;;;;;;;;;;;;;;;7568:20;7577:10;7568:20;;;;;;;;;;;;;;;;;;;;;;7478:118::o;24667:134::-;24754:39;24771:4;24777:2;24781:7;24754:39;;;;;;;;;;;;;:16;:39::i;:::-;24667:134;;;:::o;5752:109::-;5808:4;5832:21;5845:7;5832:8;:12;;:21;;;;:::i;:::-;5825:28;;5752:109;;;:::o;18090:104::-;18146:4;18170:16;18178:7;18170;:16::i;:::-;18163:23;;18090:104;;;:::o;6731:78::-;6770:4;6794:7;;;;;;;;;;;6787:14;;6731:78;:::o;20994:181::-;21049:7;21069:13;21085:11;:20;21097:7;21085:20;;;;;;;;;;;;;;;;;;;;;21069:36;;21141:1;21124:19;;:5;:19;;;;21116:28;;;;;;;;21162:5;21155:12;;;20994:181;;;:::o;5969:77::-;6013:25;6027:10;6013:13;:25::i;:::-;5969:77::o;20610:153::-;20665:7;20710:1;20693:19;;:5;:19;;;;20685:28;;;;;;;;20731:17;:24;20749:5;20731:24;;;;;;;;;;;;;;;;20724:31;;20610:153;;;:::o;5869:92::-;5703:20;5712:10;5703:8;:20::i;:::-;5695:29;;;;;;;;5934:19;5945:7;5934:10;:19::i;:::-;5869:92;:::o;7267:116::-;5703:20;5712:10;5703:8;:20::i;:::-;5695:29;;;;;;;;6968:7;;;;;;;;;;;6967:8;6959:17;;;;;;;;7337:4;7327:7;;:14;;;;;;;;;;;;;;;;;;7357:18;7364:10;7357:18;;;;;;;;;;;;;;;;;;;;;;7267:116::o;17556:89::-;17597:13;17630:7;17623:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17556:89;:::o;8083:92::-;7917:20;7926:10;7917:8;:20::i;:::-;7909:29;;;;;;;;8148:19;8159:7;8148:10;:19::i;:::-;8083:92;:::o;8183:77::-;8227:25;8241:10;8227:13;:25::i;:::-;8183:77::o;22666:231::-;6968:7;;;;;;;;;;;6967:8;6959:17;;;;;;;;22766:10;22760:16;;:2;:16;;;;22752:25;;;;;;;;22825:8;22788:18;:30;22807:10;22788:30;;;;;;;;;;;;;;;:34;22819:2;22788:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;22876:2;22849:40;;22864:10;22849:40;;;22880:8;22849:40;;;;;;;;;;;;;;;;;;;;;;22666:231;;:::o;7966:109::-;8022:4;8046:21;8059:7;8046:8;:12;;:21;;;;:::i;:::-;8039:28;;7966:109;;;:::o;25520:214::-;25627:31;25640:4;25646:2;25650:7;25627:12;:31::i;:::-;25677:48;25700:4;25706:2;25710:7;25719:5;25677:22;:48::i;:::-;25669:57;;;;;;;;25520:214;;;;:::o;19920:141::-;19976:7;20004:16;20012:7;20004;:16::i;:::-;19996:25;;;;;;;;20039:5;:14;20045:7;20039:14;;;;;;;;;;;;20032:21;;19920:141;;;:::o;18986:291::-;19044:13;19078:16;19086:7;19078;:16::i;:::-;19070:25;;;;;;;;19148:1;19118:10;:19;19129:7;19118:19;;;;;;;;;;;19112:33;;;;;;;;;;;;;;;;:37;19108:82;;;19171:10;:19;19182:7;19171:19;;;;;;;;;;;19164:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19108:82;19210:59;19228:14;:12;:14::i;:::-;19243:25;19260:7;19243:16;:25::i;:::-;19210:17;:59::i;:::-;19203:66;;18986:291;;;;:::o;19642:99::-;19687:13;19720;19713:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19642:99;:::o;20246:154::-;20303:13;20337:16;20345:7;20337;:16::i;:::-;20329:25;;;;;;;;20372:11;:20;20384:7;20372:20;;;;;;;;;;;20365:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20246:154;;;:::o;26115:268::-;7917:20;7926:10;7917:8;:20::i;:::-;7909:29;;;;;;;;26277:1;26266:7;:12;;:31;;;;;26293:4;26282:7;:15;;26266:31;26258:40;;;;;;;;26309:38;26315:2;26319:7;26328:3;26333;26338:8;26309:5;:38::i;:::-;26374:1;26358:12;;:17;;;;;;;;;;;26115:268;;;;;:::o;23226:147::-;23306:4;23330:18;:25;23349:5;23330:25;;;;;;;;;;;;;;;:35;23356:8;23330:35;;;;;;;;;;;;;;;;;;;;;;;;;23323:42;;23226:147;;;;:::o;26579:155::-;26636:4;26653:13;26669:11;:20;26681:7;26669:20;;;;;;;;;;;;;;;;;;;;;26653:36;;26724:1;26707:19;;:5;:19;;;;26700:26;;;26579:155;;;:::o;28429:185::-;28515:16;28523:7;28515;:16::i;:::-;28507:25;;;;;;;;28565:3;28543:10;:19;28554:7;28543:19;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;28593:7;28584:22;28602:3;28584:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;28584:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28429:185;;:::o;27106:249::-;27191:4;27208:13;27224:16;27232:7;27224;:16::i;:::-;27208:32;;27270:5;27259:16;;:7;:16;;;:51;;;;27303:7;27279:31;;:20;27291:7;27279:11;:20::i;:::-;:31;;;27259:51;:87;;;;27314:32;27331:5;27338:7;27314:16;:32::i;:::-;27259:87;27251:96;;;27106:249;;;;:::o;28997:414::-;29111:4;29091:24;;:16;29099:7;29091;:16::i;:::-;:24;;;29083:33;;;;;;;;29149:1;29135:16;;:2;:16;;;;29127:25;;;;;;;;29165:23;29180:7;29165:14;:23::i;:::-;29227:30;29255:1;29227:17;:23;29245:4;29227:23;;;;;;;;;;;;;;;;:27;;:30;;;;:::i;:::-;29201:17;:23;29219:4;29201:23;;;;;;;;;;;;;;;:56;;;;29292:28;29318:1;29292:17;:21;29310:2;29292:21;;;;;;;;;;;;;;;;:25;;:28;;;;:::i;:::-;29268:17;:21;29286:2;29268:21;;;;;;;;;;;;;;;:52;;;;29356:2;29333:11;:20;29345:7;29333:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;29395:7;29391:2;29376:27;;29385:4;29376:27;;;;;;;;;;;;28997:414;;;:::o;5217:165::-;5289:4;5333:1;5314:21;;:7;:21;;;;5306:30;;;;;;;;5354:4;:11;;:20;5366:7;5354:20;;;;;;;;;;;;;;;;;;;;;;;;;5347:27;;5217:165;;;;:::o;6184:130::-;6244:24;6260:7;6244:8;:15;;:24;;;;:::i;:::-;6298:7;6284:22;;;;;;;;;;;;6184:130;:::o;6054:122::-;6111:21;6124:7;6111:8;:12;;:21;;;;:::i;:::-;6160:7;6148:20;;;;;;;;;;;;6054:122;:::o;8268:::-;8325:21;8338:7;8325:8;:12;;:21;;;;:::i;:::-;8374:7;8362:20;;;;;;;;;;;;8268:122;:::o;8398:130::-;8458:24;8474:7;8458:8;:15;;:24;;;;:::i;:::-;8512:7;8498:22;;;;;;;;;;;;8398:130;:::o;29945:356::-;30067:4;30094:15;:2;:13;;;:15::i;:::-;30093:16;30089:60;;;30133:4;30126:11;;;;30089:60;30161:13;30193:2;30177:36;;;30214:10;30226:4;30232:7;30241:5;30177:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;30177:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30177:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30177:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30177:70:0;;;;;;;;;;;;;;;;30161:86;;15590:10;30276:16;;30266:26;;;:6;:26;;;;30258:35;;;29945:356;;;;;;;:::o;13075:482::-;13125:27;13175:1;13169:2;:7;13165:50;;;13193:10;;;;;;;;;;;;;;;;;;;;;;13165:50;13225:6;13234:2;13225:11;;13247:8;13266:69;13278:1;13273;:6;;13266:69;;;13296:5;;;;;;;13321:2;13316:7;;;;;;;;;;;13266:69;;;13345:17;13375:3;13365:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;13365:14:0;;;;13345:34;;13390:6;13405:1;13399:3;:7;13390:16;;13417:103;13430:1;13424:2;:7;;13417:103;;;13481:2;13476;:7;;;;;;;;13471:2;:12;13460:25;;13448:4;13453:3;;;;;;;13448:9;;;;;;;;;;;;;;:37;;;;;;;;;;;13506:2;13500:8;;;;;;;;;;;13417:103;;;13544:4;13530:19;;;;;;13075:482;;;;:::o;12916:151::-;12996:14;13030:29;13040:2;13044;13030:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;13023:36;;12916:151;;;;:::o;27730:454::-;27873:1;27859:16;;:2;:16;;;;27851:25;;;;;;;;27896:16;27904:7;27896;:16::i;:::-;27895:17;27887:26;;;;;;;;27949:2;27926:11;:20;27938:7;27926:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;27986:28;28012:1;27986:17;:21;28004:2;27986:21;;;;;;;;;;;;;;;;:25;;:28;;;;:::i;:::-;27962:17;:21;27980:2;27962:21;;;;;;;;;;;;;;;:52;;;;28025:26;28038:7;28047:3;28025:12;:26::i;:::-;28079:3;28062:5;:14;28068:7;28062:14;;;;;;;;;;;:20;;;;28117:8;28094:11;:20;28106:7;28094:20;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;28168:7;28164:2;28143:33;;28160:1;28143:33;;;;;;;;;;;;27730:454;;;;;:::o;30468:175::-;30568:1;30532:38;;:15;:24;30548:7;30532:24;;;;;;;;;;;;;;;;;;;;;:38;;;;30528:108;;;30622:1;30587:15;:24;30603:7;30587:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30528:108;30468:175;:::o;9752:150::-;9810:7;9843:1;9838;:6;;9830:15;;;;;;;;9856:9;9872:1;9868;:5;9856:17;;9893:1;9886:8;;;9752:150;;;;:::o;9988:::-;10046:7;10066:9;10082:1;10078;:5;10066:17;;10107:1;10102;:6;;10094:15;;;;;;;;10129:1;10122:8;;;9988:150;;;;:::o;4934:189::-;5033:1;5014:21;;:7;:21;;;;5006:30;;;;;;;;5055:18;5059:4;5065:7;5055:3;:18::i;:::-;5047:27;;;;;;;;5110:5;5087:4;:11;;:20;5099:7;5087:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;4934:189;;:::o;4669:186::-;4765:1;4746:21;;:7;:21;;;;4738:30;;;;;;;;4788:18;4792:4;4798:7;4788:3;:18::i;:::-;4787:19;4779:28;;;;;;;;4843:4;4820;:11;;:20;4832:7;4820:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;4669:186;;:::o;10876:627::-;10936:4;10953:12;11460:7;11448:20;11440:28;;11494:1;11487:4;:8;11480:15;;;10876:627;;;:::o;11533:1000::-;11665:33;11711:16;11736:2;11711:28;;11750:16;11775:2;11750:28;;11789:16;11814:2;11789:28;;11828:16;11853:2;11828:28;;11867:16;11892:2;11867:28;;11906:19;11990:3;:10;11977:3;:10;11964:3;:10;11951:3;:10;11938:3;:10;:23;:36;:49;:62;11928:73;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;11928:73:0;;;;11906:95;;12012:6;12021:1;12012:10;;12033:6;12042:1;12033:10;;12063:1;12059:5;;12054:80;12070:3;:10;12066:1;:14;12054:80;;;12116:3;12120:1;12116:6;;;;;;;;;;;;;;;;;;;;12102;12109:3;;;;;;12102:11;;;;;;;;;;;;;;:20;;;;;;;;;;;12082:3;;;;;;;12054:80;;;12153:1;12149:5;;12144:80;12160:3;:10;12156:1;:14;12144:80;;;12206:3;12210:1;12206:6;;;;;;;;;;;;;;;;;;;;12192;12199:3;;;;;;12192:11;;;;;;;;;;;;;;:20;;;;;;;;;;;12172:3;;;;;;;12144:80;;;12243:1;12239:5;;12234:80;12250:3;:10;12246:1;:14;12234:80;;;12296:3;12300:1;12296:6;;;;;;;;;;;;;;;;;;;;12282;12289:3;;;;;;12282:11;;;;;;;;;;;;;;:20;;;;;;;;;;;12262:3;;;;;;;12234:80;;;12333:1;12329:5;;12324:80;12340:3;:10;12336:1;:14;12324:80;;;12386:3;12390:1;12386:6;;;;;;;;;;;;;;;;;;;;12372;12379:3;;;;;;12372:11;;;;;;;;;;;;;;:20;;;;;;;;;;;12352:3;;;;;;;12324:80;;;12423:1;12419:5;;12414:80;12430:3;:10;12426:1;:14;12414:80;;;12476:3;12480:1;12476:6;;;;;;;;;;;;;;;;;;;;12462;12469:3;;;;;;12462:11;;;;;;;;;;;;;;:20;;;;;;;;;;;12442:3;;;;;;;12414:80;;;12518:6;12504:21;;;;;;;;;;11533:1000;;;;;;;:::o;14241:16405::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://5f5c05bb5479cc79b54a291332ccd8e9a69e4cd62d71beebcdee3507a0ecb3d8
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.