ETH Price: $2,392.03 (+2.86%)

Token

Mars Mining Company (MARS)
 

Overview

Max Total Supply

479 MARS

Holders

257

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 MARS
0x67458c690297155FF423E0Bb041E4903ac281Bb5
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MarsMiners

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : MarsMiners.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "./interfaces/IERC721TokenReceiver.sol";
import "./interfaces/IMarsMetadata.sol";

contract MarsMiners {

    constructor(){
        supportsInterface[0x80ac58cd] = true;
        supportsInterface[0x5b5e139f] = true;
        supportsInterface[0x01ffc9a7] = true;
        owner = msg.sender;
        _mint(1,msg.sender,bytes32(0));
        mintCost = BASE_COSTS[0] + CREATOR_FEE;
    }

    uint256[8]  BASE_COSTS = [
        0.000010 ether,
        0.000020 ether,
        0.000025 ether,
        0.000030 ether,

        0.000040 ether,
        0.000050 ether,
        0.000070 ether,
        0.000100 ether
    ];

    uint constant BASE_DIFFICULTY = type(uint).max/uint(50000 * 300);
    uint constant DIFFICULTY_RAMP = uint(50000 * 0.1);
    uint constant CREATOR_FEE = 0.005 ether;
    bytes32[] tokens;
    uint public closed;
    uint public ownerWithdrawn;
    address public owner;
    uint public mintCost;
    mapping( uint => uint) public supplyAtMint;

    event OpenMine( uint _tokenId, bytes32 _hash, address _miner,   uint _newSupply, uint _newMintCost, uint _blockNumber);
    event CloseMine(uint _tokenId, bytes32 _hash, uint _excavated, uint _supplyAtMint, uint _newSupply, uint _newMintCost,  uint _blockNumber);

    function getMineType(bytes32 hash, uint _supplyAtMint) public pure returns(uint){
        uint mineTypeMax;
        if(_supplyAtMint < 500){
            mineTypeMax = 2;
        }else if(_supplyAtMint < 1000){
            mineTypeMax = 3;
        }else if(_supplyAtMint < 1500){
            mineTypeMax = 4;
        }else if(_supplyAtMint < 2000){
            mineTypeMax = 5;
        }else if(_supplyAtMint < 2500){
            mineTypeMax = 6;
        }else{
            mineTypeMax = 7;
        }

        return (uint(hash)%100)**3 *(mineTypeMax + 1) / 1000000;
    }

    function openMine(uint nonce) public payable {
        uint tokenId = tokens.length + 1;
        uint supply = totalSupply();

        uint difficulty = BASE_DIFFICULTY - (DIFFICULTY_RAMP * supply);

        bytes32 hash = keccak256(abi.encodePacked(
                msg.sender,
                tokens[tokens.length - 1],
                nonce
            ));

        require(uint(hash) < difficulty,"difficulty");
        require(msg.value == mintCost,"cost");

        supplyAtMint[tokenId] = supply;
        hash = keccak256(abi.encodePacked(hash,block.timestamp));
        _mint(tokenId,msg.sender,hash);
        mintCost += BASE_COSTS[getMineType(hash,supply)];

        emit OpenMine(tokenId, hash, msg.sender, totalSupply(), mintCost, block.number);
    }

    function closeMine(uint tokenId) public{
        payable(msg.sender).transfer(_closeMine(tokenId));
    }

    function _closeMine(uint tokenId) private returns(uint){
        require(msg.sender == ownerOf(tokenId),"ownerOf");

        uint excavated = (tokens.length - tokenId);
        uint BASE_COST = BASE_COSTS[getMineType(hashOf(tokenId),supplyAtMint[tokenId])];
        uint earnings = excavated * BASE_COST;
        closed++;
        _burn(tokenId);
        mintCost -= BASE_COST;

        emit CloseMine(tokenId, tokens[tokenId - 1], excavated, supplyAtMint[tokenId], totalSupply(), mintCost, block.number);
        return earnings;
    }

    function closeMultiple(uint[] calldata tokenIds) public{
        require(tokenIds.length > 0,"tokenIds");
        uint total;
        for(uint i = 0; i < tokenIds.length; i++){
            total += _closeMine(tokenIds[i]);
        }
        payable(msg.sender).transfer(total);
    }

    function hashOf(uint _tokenId) public view returns(bytes32){
        require(isValidToken(_tokenId),"invalid");
        return tokens[_tokenId - 1];
    }

    function getEthContained(uint _tokenId) public view returns(uint){
        require(isValidToken(_tokenId),"invalid");
        uint BASE_COST = BASE_COSTS[getMineType(hashOf(_tokenId),supplyAtMint[_tokenId])];
        return (tokens.length - _tokenId) * BASE_COST;
    }

    function getLastHash() public view returns(bytes32){
        return tokens[tokens.length - 1];
    }

    function getMiningState() public view returns(bytes32 _hash, uint _supply, uint _closed, uint blockNumber){
        return (tokens[tokens.length - 1], totalSupply(), closed, block.number);
    }

    function mineData(uint _tokenId) public view returns(bytes32 _hash, uint _supplyAtMint, uint _opened){
        require(isValidToken(_tokenId),"invalid");

        return (tokens[_tokenId - 1],supplyAtMint[_tokenId],tokens.length);
    }

    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);

    mapping(address => uint256) public balanceOf;
    mapping (uint256 => address) internal allowance;
    mapping (address => mapping (address => bool)) public isApprovedForAll;

    mapping(uint256 => address) owners;

    string public name = "Mars Mining Company";
    string public symbol = "MARS";

    address private __metadata;

    address constant VB = 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045;

    function _mint(uint _tokenId,address _to, bytes32 _hash) private{
        owners[_tokenId] = msg.sender;
        balanceOf[_to]++;
        tokens.push(_hash);
        emit Transfer(address(0),VB,_tokenId);
        emit Transfer(VB,_to,_tokenId);
    }

    function _burn(uint _tokenId) private{
        address _owner = owners[_tokenId];
        balanceOf[ _owner ]--;
        delete owners[_tokenId];

        emit Transfer(_owner,address(0),_tokenId);
    }

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

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

    function approve(address _approved, uint256 _tokenId)  external{
        address _owner = ownerOf(_tokenId);
        require( _owner == msg.sender || isApprovedForAll[_owner][msg.sender],"permission");
        emit Approval(_owner, _approved, _tokenId);
        allowance[_tokenId] = _approved;
    }

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

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

    function transferFrom(address _from, address _to, uint256 _tokenId) public {
        address _owner = ownerOf(_tokenId);
        require ( _owner == msg.sender  || allowance[_tokenId] == msg.sender  || isApprovedForAll[_owner][msg.sender],"permission");
        require(_owner == _from,"owner");
        require(_to != address(0),"zero");
        emit Transfer(_from, _to, _tokenId);
        owners[_tokenId] =_to;
        balanceOf[_from]--;
        balanceOf[_to]++;
        if(allowance[_tokenId] != address(0)){
            delete allowance[_tokenId];
        }
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) public {
        transferFrom(_from, _to, _tokenId);
        uint32 size;
        assembly {
            size := extcodesize(_to)
        }
        if(size > 0){
            IERC721TokenReceiver receiver = IERC721TokenReceiver(_to);
            require(receiver.onERC721Received(msg.sender,_from,_tokenId,data) == bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")),"receiver");
        }
    }

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

    function tokenURI(uint256 _tokenId) public view returns (string memory){
        require(isValidToken(_tokenId),'tokenId');

        return IMarsMetadata(__metadata).tokenURI(
            _tokenId,
            tokens[_tokenId-1],
            supplyAtMint[_tokenId],
            tokens.length);
    }

    function totalSupply() public view returns (uint256){
        return tokens.length - closed;
    }

    mapping (bytes4 => bool) public supportsInterface;

    function setOwner(address newOwner) public{
        require(msg.sender == owner,"owner");
        owner = newOwner;
    }

    function setMetadata(address _metadata) public{
        require(msg.sender == owner,"owner");
        __metadata = _metadata;
    }

    function ownerWithdraw() public{
        require(msg.sender == owner,"owner");
        uint toWithdraw = (tokens.length - ownerWithdrawn - 1) * CREATOR_FEE ;
        require(toWithdraw > 0,"withdrawn");
        ownerWithdrawn = tokens.length - 1;
        payable(msg.sender).transfer(toWithdraw);

    }
}

File 2 of 3 : IERC721TokenReceiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.
interface IERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev The ERC721 smart contract calls this function on the recipient
    ///  after a `transfer`. This function MAY throw to revert and reject the
    ///  transfer. Return of other than the magic value MUST result in the
    ///  transaction being reverted.
    ///  Note: the 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)"))`
    ///  unless throwing
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4);
}

File 3 of 3 : IMarsMetadata.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

interface IMarsMetadata {
    function tokenURI(uint _tokenId,bytes32 _hash, uint _supplyAtMint, uint _opened) external view returns (string memory);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_hash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_excavated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_supplyAtMint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newMintCost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"CloseMine","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_hash","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_newSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newMintCost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"OpenMine","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"closeMine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"closeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getEthContained","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint256","name":"_supplyAtMint","type":"uint256"}],"name":"getMineType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMiningState","outputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_closed","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"hashOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"mineData","outputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"uint256","name":"_supplyAtMint","type":"uint256"},{"internalType":"uint256","name":"_opened","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"openMine","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ownerWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_metadata","type":"address"}],"name":"setMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplyAtMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518061010001604052806509184e72a00065ffffffffffff1681526020016512309ce5400065ffffffffffff1681526020016516bcc41e900065ffffffffffff168152602001651b48eb57e00065ffffffffffff16815260200165246139ca800065ffffffffffff168152602001652d79883d200065ffffffffffff168152602001653faa2522600065ffffffffffff168152602001655af3107a400065ffffffffffff168152506000906008620000c0929190620004a8565b506040518060400160405280601381526020017f4d617273204d696e696e6720436f6d70616e7900000000000000000000000000815250601290805190602001906200010e929190620004f7565b506040518060400160405280600481526020017f4d41525300000000000000000000000000000000000000000000000000000000815250601390805190602001906200015c929190620004f7565b503480156200016a57600080fd5b506001601560006380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002b96001336000801b620002f260201b60201c565b6611c37937e0800060008060088110620002d857620002d7620005a7565b5b0154620002e691906200060f565b600c819055506200071f565b336011600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919062000396906200066c565b919050555060088190806001815401808255809150506001900390600052602060002001600090919091909150558273d8da6bf26964af9d7eed9e03e53415d37aa9604573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4828273ffffffffffffffffffffffffffffffffffffffff1673d8da6bf26964af9d7eed9e03e53415d37aa9604573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8260088101928215620004e4579160200282015b82811115620004e3578251829065ffffffffffff16905591602001919060010190620004bc565b5b509050620004f3919062000588565b5090565b8280546200050590620006e9565b90600052602060002090601f01602090048101928262000529576000855562000575565b82601f106200054457805160ff191683800117855562000575565b8280016001018555821562000575579182015b828111156200057457825182559160200191906001019062000557565b5b50905062000584919062000588565b5090565b5b80821115620005a357600081600090555060010162000589565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200061c82620005d6565b91506200062983620005d6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620006615762000660620005e0565b5b828201905092915050565b60006200067982620005d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620006af57620006ae620005e0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200070257607f821691505b60208210811415620007195762000718620006ba565b5b50919050565b61373f806200072f6000396000f3fe6080604052600436106101d85760003560e01c80636352211e11610102578063bdb4b84811610095578063d9f3bc4311610064578063d9f3bc43146106c6578063e3e4702c14610703578063e985e9c514610742578063f3cb83851461077f576101d8565b8063bdb4b84814610605578063c20615ed14610630578063c87b56dd1461065b578063d8c3697314610698576101d8565b80638da5cb5b116100d15780638da5cb5b1461055d57806395d89b4114610588578063a22cb465146105b3578063b88d4fde146105dc576101d8565b80636352211e1461046957806370a08231146104a65780637daa11e3146104e35780637e551b7514610520576101d8565b806320a47b721161017a5780634311de8f116101495780634311de8f146103d35780634a910046146103ea578063567d032814610415578063597e1fb51461043e576101d8565b806320a47b721461031b5780632340c6391461034457806323b872dd1461038157806342842e0e146103aa576101d8565b80630937732c116101b65780630937732c14610282578063095ea7b31461029e57806313af4035146102c757806318160ddd146102f0576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff919061233e565b6107a8565b6040516102119190612386565b60405180910390f35b34801561022657600080fd5b5061022f6107c8565b60405161023c919061243a565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612492565b610856565b6040516102799190612500565b60405180910390f35b61029c60048036038101906102979190612492565b6108db565b005b3480156102aa57600080fd5b506102c560048036038101906102c09190612547565b610b05565b005b3480156102d357600080fd5b506102ee60048036038101906102e99190612587565b610cc3565b005b3480156102fc57600080fd5b50610305610d97565b60405161031291906125c3565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190612643565b610db1565b005b34801561035057600080fd5b5061036b60048036038101906103669190612492565b610e99565b60405161037891906125c3565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190612690565b610eb1565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190612690565b6112ff565b005b3480156103df57600080fd5b506103e861131f565b005b3480156103f657600080fd5b506103ff611489565b60405161040c91906126fc565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190612492565b6114c0565b005b34801561044a57600080fd5b50610453611512565b60405161046091906125c3565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190612492565b611518565b60405161049d9190612500565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190612587565b61159d565b6040516104da91906125c3565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190612492565b6115b5565b60405161051791906125c3565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612492565b611660565b60405161055491906126fc565b60405180910390f35b34801561056957600080fd5b506105726116dc565b60405161057f9190612500565b60405180910390f35b34801561059457600080fd5b5061059d611702565b6040516105aa919061243a565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190612743565b611790565b005b3480156105e857600080fd5b5061060360048036038101906105fe91906128b3565b61188d565b005b34801561061157600080fd5b5061061a6119eb565b60405161062791906125c3565b60405180910390f35b34801561063c57600080fd5b506106456119f1565b60405161065291906125c3565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d9190612492565b6119f7565b60405161068f919061243a565b60405180910390f35b3480156106a457600080fd5b506106ad611b40565b6040516106bd9493929190612936565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e891906129a7565b611b90565b6040516106fa91906125c3565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190612492565b611c45565b604051610739939291906129e7565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190612a1e565b611ce4565b6040516107769190612386565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a19190612587565b611d13565b005b60156020528060005260406000206000915054906101000a900460ff1681565b601280546107d590612a8d565b80601f016020809104026020016040519081016040528092919081815260200182805461080190612a8d565b801561084e5780601f106108235761010080835404028352916020019161084e565b820191906000526020600020905b81548152906001019060200180831161083157829003601f168201915b505050505081565b600061086182611de7565b6108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089790612b0b565b60405180910390fd5b600f600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600060016008805490506108ef9190612b5a565b905060006108fb610d97565b905060008161138861090d9190612bb0565b62e4e1c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61093c9190612c39565b6109469190612c6a565b90506000336008600160088054905061095f9190612c6a565b815481106109705761096f612c9e565b5b90600052602060002001548660405160200161098e93929190612d57565b604051602081830303815290604052805190602001209050818160001c106109eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e290612de0565b60405180910390fd5b600c543414610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690612e4c565b60405180910390fd5b82600d6000868152602001908152602001600020819055508042604051602001610a5a929190612e6c565b604051602081830303815290604052805190602001209050610a7d843383611e53565b6000610a898285611b90565b60088110610a9a57610a99612c9e565b5b0154600c6000828254610aad9190612b5a565b925050819055507f53e77537b3f3c68e60512671adfe8ddbdc4d96ff3f7414bc781b540c041458b3848233610ae0610d97565b600c5443604051610af696959493929190612e98565b60405180910390a15050505050565b6000610b1082611518565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610bd25750601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0890612f45565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a482600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90612fb1565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600954600880549050610dac9190612c6a565b905090565b60008282905011610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee9061301d565b60405180910390fd5b600080600090505b83839050811015610e4c57610e2c848483818110610e2057610e1f612c9e565b5b90506020020135612007565b82610e379190612b5a565b91508080610e449061303d565b915050610dff565b503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e93573d6000803e3d6000fd5b50505050565b600d6020528060005260406000206000915090505481565b6000610ebc82611518565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610f5657503373ffffffffffffffffffffffffffffffffffffffff16600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610fe75750601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90612f45565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90612fb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb906130d2565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4826011600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611201906130f2565b9190505550600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906112569061303d565b9190505550600073ffffffffffffffffffffffffffffffffffffffff16600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112f957600f600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b61131a8383836040518060200160405280600081525061188d565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690612fb1565b60405180910390fd5b60006611c37937e080006001600a546008805490506113ce9190612c6a565b6113d89190612c6a565b6113e29190612bb0565b905060008111611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e90613168565b60405180910390fd5b60016008805490506114399190612c6a565b600a819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611485573d6000803e3d6000fd5b5050565b60006008600160088054905061149f9190612c6a565b815481106114b0576114af612c9e565b5b9060005260206000200154905090565b3373ffffffffffffffffffffffffffffffffffffffff166108fc6114e383612007565b9081150290604051600060405180830381858888f1935050505015801561150e573d6000803e3d6000fd5b5050565b60095481565b600061152382611de7565b611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990612b0b565b60405180910390fd5b6011600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e6020528060005260406000206000915090505481565b60006115c082611de7565b6115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690612b0b565b60405180910390fd5b60008061162761160e85611660565b600d600087815260200190815260200160002054611b90565b6008811061163857611637612c9e565b5b01549050808360088054905061164e9190612c6a565b6116589190612bb0565b915050919050565b600061166b82611de7565b6116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190612b0b565b60405180910390fd5b60086001836116b99190612c6a565b815481106116ca576116c9612c9e565b5b90600052602060002001549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6013805461170f90612a8d565b80601f016020809104026020016040519081016040528092919081815260200182805461173b90612a8d565b80156117885780601f1061175d57610100808354040283529160200191611788565b820191906000526020600020905b81548152906001019060200180831161176b57829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117ed9190612386565b60405180910390a380601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611898848484610eb1565b6000833b905060008163ffffffff1611156119e45760008490507f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b815260040161193194939291906131dd565b602060405180830381600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611983919061323e565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d9906132b7565b60405180910390fd5b505b5050505050565b600c5481565b600a5481565b6060611a0282611de7565b611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890613323565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631600e348836008600186611a8f9190612c6a565b81548110611aa057611a9f612c9e565b5b9060005260206000200154600d6000878152602001908152602001600020546008805490506040518563ffffffff1660e01b8152600401611ae49493929190613343565b60006040518083038186803b158015611afc57600080fd5b505afa158015611b10573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611b399190613429565b9050919050565b60008060008060086001600880549050611b5a9190612c6a565b81548110611b6b57611b6a612c9e565b5b9060005260206000200154611b7e610d97565b60095443935093509350935090919293565b6000806101f4831015611ba65760029050611bfb565b6103e8831015611bb95760039050611bfa565b6105dc831015611bcc5760049050611bf9565b6107d0831015611bdf5760059050611bf8565b6109c4831015611bf25760069050611bf7565b600790505b5b5b5b5b620f4240600182611c0c9190612b5a565b600360648760001c611c1e9190613472565b611c2891906135e3565b611c329190612bb0565b611c3c9190612c39565b91505092915050565b6000806000611c5384611de7565b611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8990612b0b565b60405180910390fd5b6008600185611ca19190612c6a565b81548110611cb257611cb1612c9e565b5b9060005260206000200154600d6000868152602001908152602001600020546008805490509250925092509193909250565b60106020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90612fb1565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff166011600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b336011600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611ef59061303d565b919050555060088190806001815401808255809150506001900390600052602060002001600090919091909150558273d8da6bf26964af9d7eed9e03e53415d37aa9604573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4828273ffffffffffffffffffffffffffffffffffffffff1673d8da6bf26964af9d7eed9e03e53415d37aa9604573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061201282611518565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461207f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120769061367a565b60405180910390fd5b6000826008805490506120929190612c6a565b90506000806120bc6120a386611660565b600d600088815260200190815260200160002054611b90565b600881106120cd576120cc612c9e565b5b01549050600081836120df9190612bb0565b9050600960008154809291906120f49061303d565b9190505550612102856121af565b81600c60008282546121149190612c6a565b925050819055507fa6adaedfc30dee69384c47e3f315a4ca0bdd3e56e42404563ac39003695e119a85600860018861214c9190612c6a565b8154811061215d5761215c612c9e565b5b906000526020600020015485600d60008a815260200190815260200160002054612185610d97565b600c544360405161219c979695949392919061369a565b60405180910390a1809350505050919050565b60006011600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600e60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612237906130f2565b91905055506011600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61231b816122e6565b811461232657600080fd5b50565b60008135905061233881612312565b92915050565b600060208284031215612354576123536122dc565b5b600061236284828501612329565b91505092915050565b60008115159050919050565b6123808161236b565b82525050565b600060208201905061239b6000830184612377565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123db5780820151818401526020810190506123c0565b838111156123ea576000848401525b50505050565b6000601f19601f8301169050919050565b600061240c826123a1565b61241681856123ac565b93506124268185602086016123bd565b61242f816123f0565b840191505092915050565b600060208201905081810360008301526124548184612401565b905092915050565b6000819050919050565b61246f8161245c565b811461247a57600080fd5b50565b60008135905061248c81612466565b92915050565b6000602082840312156124a8576124a76122dc565b5b60006124b68482850161247d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124ea826124bf565b9050919050565b6124fa816124df565b82525050565b600060208201905061251560008301846124f1565b92915050565b612524816124df565b811461252f57600080fd5b50565b6000813590506125418161251b565b92915050565b6000806040838503121561255e5761255d6122dc565b5b600061256c85828601612532565b925050602061257d8582860161247d565b9150509250929050565b60006020828403121561259d5761259c6122dc565b5b60006125ab84828501612532565b91505092915050565b6125bd8161245c565b82525050565b60006020820190506125d860008301846125b4565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612603576126026125de565b5b8235905067ffffffffffffffff8111156126205761261f6125e3565b5b60208301915083602082028301111561263c5761263b6125e8565b5b9250929050565b6000806020838503121561265a576126596122dc565b5b600083013567ffffffffffffffff811115612678576126776122e1565b5b612684858286016125ed565b92509250509250929050565b6000806000606084860312156126a9576126a86122dc565b5b60006126b786828701612532565b93505060206126c886828701612532565b92505060406126d98682870161247d565b9150509250925092565b6000819050919050565b6126f6816126e3565b82525050565b600060208201905061271160008301846126ed565b92915050565b6127208161236b565b811461272b57600080fd5b50565b60008135905061273d81612717565b92915050565b6000806040838503121561275a576127596122dc565b5b600061276885828601612532565b92505060206127798582860161272e565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127c0826123f0565b810181811067ffffffffffffffff821117156127df576127de612788565b5b80604052505050565b60006127f26122d2565b90506127fe82826127b7565b919050565b600067ffffffffffffffff82111561281e5761281d612788565b5b612827826123f0565b9050602081019050919050565b82818337600083830152505050565b600061285661285184612803565b6127e8565b90508281526020810184848401111561287257612871612783565b5b61287d848285612834565b509392505050565b600082601f83011261289a576128996125de565b5b81356128aa848260208601612843565b91505092915050565b600080600080608085870312156128cd576128cc6122dc565b5b60006128db87828801612532565b94505060206128ec87828801612532565b93505060406128fd8782880161247d565b925050606085013567ffffffffffffffff81111561291e5761291d6122e1565b5b61292a87828801612885565b91505092959194509250565b600060808201905061294b60008301876126ed565b61295860208301866125b4565b61296560408301856125b4565b61297260608301846125b4565b95945050505050565b612984816126e3565b811461298f57600080fd5b50565b6000813590506129a18161297b565b92915050565b600080604083850312156129be576129bd6122dc565b5b60006129cc85828601612992565b92505060206129dd8582860161247d565b9150509250929050565b60006060820190506129fc60008301866126ed565b612a0960208301856125b4565b612a1660408301846125b4565b949350505050565b60008060408385031215612a3557612a346122dc565b5b6000612a4385828601612532565b9250506020612a5485828601612532565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612aa557607f821691505b60208210811415612ab957612ab8612a5e565b5b50919050565b7f696e76616c696400000000000000000000000000000000000000000000000000600082015250565b6000612af56007836123ac565b9150612b0082612abf565b602082019050919050565b60006020820190508181036000830152612b2481612ae8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b658261245c565b9150612b708361245c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ba557612ba4612b2b565b5b828201905092915050565b6000612bbb8261245c565b9150612bc68361245c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bff57612bfe612b2b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c448261245c565b9150612c4f8361245c565b925082612c5f57612c5e612c0a565b5b828204905092915050565b6000612c758261245c565b9150612c808361245c565b925082821015612c9357612c92612b2b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160601b9050919050565b6000612ce582612ccd565b9050919050565b6000612cf782612cda565b9050919050565b612d0f612d0a826124df565b612cec565b82525050565b6000819050919050565b612d30612d2b826126e3565b612d15565b82525050565b6000819050919050565b612d51612d4c8261245c565b612d36565b82525050565b6000612d638286612cfe565b601482019150612d738285612d1f565b602082019150612d838284612d40565b602082019150819050949350505050565b7f646966666963756c747900000000000000000000000000000000000000000000600082015250565b6000612dca600a836123ac565b9150612dd582612d94565b602082019050919050565b60006020820190508181036000830152612df981612dbd565b9050919050565b7f636f737400000000000000000000000000000000000000000000000000000000600082015250565b6000612e366004836123ac565b9150612e4182612e00565b602082019050919050565b60006020820190508181036000830152612e6581612e29565b9050919050565b6000612e788285612d1f565b602082019150612e888284612d40565b6020820191508190509392505050565b600060c082019050612ead60008301896125b4565b612eba60208301886126ed565b612ec760408301876124f1565b612ed460608301866125b4565b612ee160808301856125b4565b612eee60a08301846125b4565b979650505050505050565b7f7065726d697373696f6e00000000000000000000000000000000000000000000600082015250565b6000612f2f600a836123ac565b9150612f3a82612ef9565b602082019050919050565b60006020820190508181036000830152612f5e81612f22565b9050919050565b7f6f776e6572000000000000000000000000000000000000000000000000000000600082015250565b6000612f9b6005836123ac565b9150612fa682612f65565b602082019050919050565b60006020820190508181036000830152612fca81612f8e565b9050919050565b7f746f6b656e496473000000000000000000000000000000000000000000000000600082015250565b60006130076008836123ac565b915061301282612fd1565b602082019050919050565b6000602082019050818103600083015261303681612ffa565b9050919050565b60006130488261245c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561307b5761307a612b2b565b5b600182019050919050565b7f7a65726f00000000000000000000000000000000000000000000000000000000600082015250565b60006130bc6004836123ac565b91506130c782613086565b602082019050919050565b600060208201905081810360008301526130eb816130af565b9050919050565b60006130fd8261245c565b9150600082141561311157613110612b2b565b5b600182039050919050565b7f77697468647261776e0000000000000000000000000000000000000000000000600082015250565b60006131526009836123ac565b915061315d8261311c565b602082019050919050565b6000602082019050818103600083015261318181613145565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006131af82613188565b6131b98185613193565b93506131c98185602086016123bd565b6131d2816123f0565b840191505092915050565b60006080820190506131f260008301876124f1565b6131ff60208301866124f1565b61320c60408301856125b4565b818103606083015261321e81846131a4565b905095945050505050565b60008151905061323881612312565b92915050565b600060208284031215613254576132536122dc565b5b600061326284828501613229565b91505092915050565b7f7265636569766572000000000000000000000000000000000000000000000000600082015250565b60006132a16008836123ac565b91506132ac8261326b565b602082019050919050565b600060208201905081810360008301526132d081613294565b9050919050565b7f746f6b656e496400000000000000000000000000000000000000000000000000600082015250565b600061330d6007836123ac565b9150613318826132d7565b602082019050919050565b6000602082019050818103600083015261333c81613300565b9050919050565b600060808201905061335860008301876125b4565b61336560208301866126ed565b61337260408301856125b4565b61337f60608301846125b4565b95945050505050565b600067ffffffffffffffff8211156133a3576133a2612788565b5b6133ac826123f0565b9050602081019050919050565b60006133cc6133c784613388565b6127e8565b9050828152602081018484840111156133e8576133e7612783565b5b6133f38482856123bd565b509392505050565b600082601f8301126134105761340f6125de565b5b81516134208482602086016133b9565b91505092915050565b60006020828403121561343f5761343e6122dc565b5b600082015167ffffffffffffffff81111561345d5761345c6122e1565b5b613469848285016133fb565b91505092915050565b600061347d8261245c565b91506134888361245c565b92508261349857613497612c0a565b5b828206905092915050565b60008160011c9050919050565b6000808291508390505b60018511156134fa578086048111156134d6576134d5612b2b565b5b60018516156134e55780820291505b80810290506134f3856134a3565b94506134ba565b94509492505050565b60008261351357600190506135cf565b8161352157600090506135cf565b8160018114613537576002811461354157613570565b60019150506135cf565b60ff84111561355357613552612b2b565b5b8360020a91508482111561356a57613569612b2b565b5b506135cf565b5060208310610133831016604e8410600b84101617156135a55782820a9050838111156135a05761359f612b2b565b5b6135cf565b6135b284848460016134b0565b925090508184048111156135c9576135c8612b2b565b5b81810290505b9392505050565b600060ff82169050919050565b60006135ee8261245c565b91506135f9836135d6565b92506136267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613503565b905092915050565b7f6f776e65724f6600000000000000000000000000000000000000000000000000600082015250565b60006136646007836123ac565b915061366f8261362e565b602082019050919050565b6000602082019050818103600083015261369381613657565b9050919050565b600060e0820190506136af600083018a6125b4565b6136bc60208301896126ed565b6136c960408301886125b4565b6136d660608301876125b4565b6136e360808301866125b4565b6136f060a08301856125b4565b6136fd60c08301846125b4565b9897505050505050505056fea26469706673582212207311561cd8114d1f584af2a83de2ef2789eed06670e569dc8dfdfdab15e3383364736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101d85760003560e01c80636352211e11610102578063bdb4b84811610095578063d9f3bc4311610064578063d9f3bc43146106c6578063e3e4702c14610703578063e985e9c514610742578063f3cb83851461077f576101d8565b8063bdb4b84814610605578063c20615ed14610630578063c87b56dd1461065b578063d8c3697314610698576101d8565b80638da5cb5b116100d15780638da5cb5b1461055d57806395d89b4114610588578063a22cb465146105b3578063b88d4fde146105dc576101d8565b80636352211e1461046957806370a08231146104a65780637daa11e3146104e35780637e551b7514610520576101d8565b806320a47b721161017a5780634311de8f116101495780634311de8f146103d35780634a910046146103ea578063567d032814610415578063597e1fb51461043e576101d8565b806320a47b721461031b5780632340c6391461034457806323b872dd1461038157806342842e0e146103aa576101d8565b80630937732c116101b65780630937732c14610282578063095ea7b31461029e57806313af4035146102c757806318160ddd146102f0576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff919061233e565b6107a8565b6040516102119190612386565b60405180910390f35b34801561022657600080fd5b5061022f6107c8565b60405161023c919061243a565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612492565b610856565b6040516102799190612500565b60405180910390f35b61029c60048036038101906102979190612492565b6108db565b005b3480156102aa57600080fd5b506102c560048036038101906102c09190612547565b610b05565b005b3480156102d357600080fd5b506102ee60048036038101906102e99190612587565b610cc3565b005b3480156102fc57600080fd5b50610305610d97565b60405161031291906125c3565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190612643565b610db1565b005b34801561035057600080fd5b5061036b60048036038101906103669190612492565b610e99565b60405161037891906125c3565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190612690565b610eb1565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190612690565b6112ff565b005b3480156103df57600080fd5b506103e861131f565b005b3480156103f657600080fd5b506103ff611489565b60405161040c91906126fc565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190612492565b6114c0565b005b34801561044a57600080fd5b50610453611512565b60405161046091906125c3565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190612492565b611518565b60405161049d9190612500565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190612587565b61159d565b6040516104da91906125c3565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190612492565b6115b5565b60405161051791906125c3565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612492565b611660565b60405161055491906126fc565b60405180910390f35b34801561056957600080fd5b506105726116dc565b60405161057f9190612500565b60405180910390f35b34801561059457600080fd5b5061059d611702565b6040516105aa919061243a565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190612743565b611790565b005b3480156105e857600080fd5b5061060360048036038101906105fe91906128b3565b61188d565b005b34801561061157600080fd5b5061061a6119eb565b60405161062791906125c3565b60405180910390f35b34801561063c57600080fd5b506106456119f1565b60405161065291906125c3565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d9190612492565b6119f7565b60405161068f919061243a565b60405180910390f35b3480156106a457600080fd5b506106ad611b40565b6040516106bd9493929190612936565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e891906129a7565b611b90565b6040516106fa91906125c3565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190612492565b611c45565b604051610739939291906129e7565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190612a1e565b611ce4565b6040516107769190612386565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a19190612587565b611d13565b005b60156020528060005260406000206000915054906101000a900460ff1681565b601280546107d590612a8d565b80601f016020809104026020016040519081016040528092919081815260200182805461080190612a8d565b801561084e5780601f106108235761010080835404028352916020019161084e565b820191906000526020600020905b81548152906001019060200180831161083157829003601f168201915b505050505081565b600061086182611de7565b6108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089790612b0b565b60405180910390fd5b600f600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600060016008805490506108ef9190612b5a565b905060006108fb610d97565b905060008161138861090d9190612bb0565b62e4e1c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61093c9190612c39565b6109469190612c6a565b90506000336008600160088054905061095f9190612c6a565b815481106109705761096f612c9e565b5b90600052602060002001548660405160200161098e93929190612d57565b604051602081830303815290604052805190602001209050818160001c106109eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e290612de0565b60405180910390fd5b600c543414610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690612e4c565b60405180910390fd5b82600d6000868152602001908152602001600020819055508042604051602001610a5a929190612e6c565b604051602081830303815290604052805190602001209050610a7d843383611e53565b6000610a898285611b90565b60088110610a9a57610a99612c9e565b5b0154600c6000828254610aad9190612b5a565b925050819055507f53e77537b3f3c68e60512671adfe8ddbdc4d96ff3f7414bc781b540c041458b3848233610ae0610d97565b600c5443604051610af696959493929190612e98565b60405180910390a15050505050565b6000610b1082611518565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610bd25750601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0890612f45565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a482600f600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90612fb1565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600954600880549050610dac9190612c6a565b905090565b60008282905011610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee9061301d565b60405180910390fd5b600080600090505b83839050811015610e4c57610e2c848483818110610e2057610e1f612c9e565b5b90506020020135612007565b82610e379190612b5a565b91508080610e449061303d565b915050610dff565b503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e93573d6000803e3d6000fd5b50505050565b600d6020528060005260406000206000915090505481565b6000610ebc82611518565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610f5657503373ffffffffffffffffffffffffffffffffffffffff16600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610fe75750601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90612f45565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90612fb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb906130d2565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4826011600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611201906130f2565b9190505550600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906112569061303d565b9190505550600073ffffffffffffffffffffffffffffffffffffffff16600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112f957600f600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b61131a8383836040518060200160405280600081525061188d565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690612fb1565b60405180910390fd5b60006611c37937e080006001600a546008805490506113ce9190612c6a565b6113d89190612c6a565b6113e29190612bb0565b905060008111611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e90613168565b60405180910390fd5b60016008805490506114399190612c6a565b600a819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611485573d6000803e3d6000fd5b5050565b60006008600160088054905061149f9190612c6a565b815481106114b0576114af612c9e565b5b9060005260206000200154905090565b3373ffffffffffffffffffffffffffffffffffffffff166108fc6114e383612007565b9081150290604051600060405180830381858888f1935050505015801561150e573d6000803e3d6000fd5b5050565b60095481565b600061152382611de7565b611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990612b0b565b60405180910390fd5b6011600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e6020528060005260406000206000915090505481565b60006115c082611de7565b6115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690612b0b565b60405180910390fd5b60008061162761160e85611660565b600d600087815260200190815260200160002054611b90565b6008811061163857611637612c9e565b5b01549050808360088054905061164e9190612c6a565b6116589190612bb0565b915050919050565b600061166b82611de7565b6116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190612b0b565b60405180910390fd5b60086001836116b99190612c6a565b815481106116ca576116c9612c9e565b5b90600052602060002001549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6013805461170f90612a8d565b80601f016020809104026020016040519081016040528092919081815260200182805461173b90612a8d565b80156117885780601f1061175d57610100808354040283529160200191611788565b820191906000526020600020905b81548152906001019060200180831161176b57829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117ed9190612386565b60405180910390a380601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611898848484610eb1565b6000833b905060008163ffffffff1611156119e45760008490507f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b815260040161193194939291906131dd565b602060405180830381600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611983919061323e565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d9906132b7565b60405180910390fd5b505b5050505050565b600c5481565b600a5481565b6060611a0282611de7565b611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890613323565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631600e348836008600186611a8f9190612c6a565b81548110611aa057611a9f612c9e565b5b9060005260206000200154600d6000878152602001908152602001600020546008805490506040518563ffffffff1660e01b8152600401611ae49493929190613343565b60006040518083038186803b158015611afc57600080fd5b505afa158015611b10573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611b399190613429565b9050919050565b60008060008060086001600880549050611b5a9190612c6a565b81548110611b6b57611b6a612c9e565b5b9060005260206000200154611b7e610d97565b60095443935093509350935090919293565b6000806101f4831015611ba65760029050611bfb565b6103e8831015611bb95760039050611bfa565b6105dc831015611bcc5760049050611bf9565b6107d0831015611bdf5760059050611bf8565b6109c4831015611bf25760069050611bf7565b600790505b5b5b5b5b620f4240600182611c0c9190612b5a565b600360648760001c611c1e9190613472565b611c2891906135e3565b611c329190612bb0565b611c3c9190612c39565b91505092915050565b6000806000611c5384611de7565b611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8990612b0b565b60405180910390fd5b6008600185611ca19190612c6a565b81548110611cb257611cb1612c9e565b5b9060005260206000200154600d6000868152602001908152602001600020546008805490509250925092509193909250565b60106020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90612fb1565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff166011600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b336011600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611ef59061303d565b919050555060088190806001815401808255809150506001900390600052602060002001600090919091909150558273d8da6bf26964af9d7eed9e03e53415d37aa9604573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4828273ffffffffffffffffffffffffffffffffffffffff1673d8da6bf26964af9d7eed9e03e53415d37aa9604573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061201282611518565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461207f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120769061367a565b60405180910390fd5b6000826008805490506120929190612c6a565b90506000806120bc6120a386611660565b600d600088815260200190815260200160002054611b90565b600881106120cd576120cc612c9e565b5b01549050600081836120df9190612bb0565b9050600960008154809291906120f49061303d565b9190505550612102856121af565b81600c60008282546121149190612c6a565b925050819055507fa6adaedfc30dee69384c47e3f315a4ca0bdd3e56e42404563ac39003695e119a85600860018861214c9190612c6a565b8154811061215d5761215c612c9e565b5b906000526020600020015485600d60008a815260200190815260200160002054612185610d97565b600c544360405161219c979695949392919061369a565b60405180910390a1809350505050919050565b60006011600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600e60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612237906130f2565b91905055506011600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61231b816122e6565b811461232657600080fd5b50565b60008135905061233881612312565b92915050565b600060208284031215612354576123536122dc565b5b600061236284828501612329565b91505092915050565b60008115159050919050565b6123808161236b565b82525050565b600060208201905061239b6000830184612377565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123db5780820151818401526020810190506123c0565b838111156123ea576000848401525b50505050565b6000601f19601f8301169050919050565b600061240c826123a1565b61241681856123ac565b93506124268185602086016123bd565b61242f816123f0565b840191505092915050565b600060208201905081810360008301526124548184612401565b905092915050565b6000819050919050565b61246f8161245c565b811461247a57600080fd5b50565b60008135905061248c81612466565b92915050565b6000602082840312156124a8576124a76122dc565b5b60006124b68482850161247d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124ea826124bf565b9050919050565b6124fa816124df565b82525050565b600060208201905061251560008301846124f1565b92915050565b612524816124df565b811461252f57600080fd5b50565b6000813590506125418161251b565b92915050565b6000806040838503121561255e5761255d6122dc565b5b600061256c85828601612532565b925050602061257d8582860161247d565b9150509250929050565b60006020828403121561259d5761259c6122dc565b5b60006125ab84828501612532565b91505092915050565b6125bd8161245c565b82525050565b60006020820190506125d860008301846125b4565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612603576126026125de565b5b8235905067ffffffffffffffff8111156126205761261f6125e3565b5b60208301915083602082028301111561263c5761263b6125e8565b5b9250929050565b6000806020838503121561265a576126596122dc565b5b600083013567ffffffffffffffff811115612678576126776122e1565b5b612684858286016125ed565b92509250509250929050565b6000806000606084860312156126a9576126a86122dc565b5b60006126b786828701612532565b93505060206126c886828701612532565b92505060406126d98682870161247d565b9150509250925092565b6000819050919050565b6126f6816126e3565b82525050565b600060208201905061271160008301846126ed565b92915050565b6127208161236b565b811461272b57600080fd5b50565b60008135905061273d81612717565b92915050565b6000806040838503121561275a576127596122dc565b5b600061276885828601612532565b92505060206127798582860161272e565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127c0826123f0565b810181811067ffffffffffffffff821117156127df576127de612788565b5b80604052505050565b60006127f26122d2565b90506127fe82826127b7565b919050565b600067ffffffffffffffff82111561281e5761281d612788565b5b612827826123f0565b9050602081019050919050565b82818337600083830152505050565b600061285661285184612803565b6127e8565b90508281526020810184848401111561287257612871612783565b5b61287d848285612834565b509392505050565b600082601f83011261289a576128996125de565b5b81356128aa848260208601612843565b91505092915050565b600080600080608085870312156128cd576128cc6122dc565b5b60006128db87828801612532565b94505060206128ec87828801612532565b93505060406128fd8782880161247d565b925050606085013567ffffffffffffffff81111561291e5761291d6122e1565b5b61292a87828801612885565b91505092959194509250565b600060808201905061294b60008301876126ed565b61295860208301866125b4565b61296560408301856125b4565b61297260608301846125b4565b95945050505050565b612984816126e3565b811461298f57600080fd5b50565b6000813590506129a18161297b565b92915050565b600080604083850312156129be576129bd6122dc565b5b60006129cc85828601612992565b92505060206129dd8582860161247d565b9150509250929050565b60006060820190506129fc60008301866126ed565b612a0960208301856125b4565b612a1660408301846125b4565b949350505050565b60008060408385031215612a3557612a346122dc565b5b6000612a4385828601612532565b9250506020612a5485828601612532565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612aa557607f821691505b60208210811415612ab957612ab8612a5e565b5b50919050565b7f696e76616c696400000000000000000000000000000000000000000000000000600082015250565b6000612af56007836123ac565b9150612b0082612abf565b602082019050919050565b60006020820190508181036000830152612b2481612ae8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b658261245c565b9150612b708361245c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ba557612ba4612b2b565b5b828201905092915050565b6000612bbb8261245c565b9150612bc68361245c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bff57612bfe612b2b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c448261245c565b9150612c4f8361245c565b925082612c5f57612c5e612c0a565b5b828204905092915050565b6000612c758261245c565b9150612c808361245c565b925082821015612c9357612c92612b2b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160601b9050919050565b6000612ce582612ccd565b9050919050565b6000612cf782612cda565b9050919050565b612d0f612d0a826124df565b612cec565b82525050565b6000819050919050565b612d30612d2b826126e3565b612d15565b82525050565b6000819050919050565b612d51612d4c8261245c565b612d36565b82525050565b6000612d638286612cfe565b601482019150612d738285612d1f565b602082019150612d838284612d40565b602082019150819050949350505050565b7f646966666963756c747900000000000000000000000000000000000000000000600082015250565b6000612dca600a836123ac565b9150612dd582612d94565b602082019050919050565b60006020820190508181036000830152612df981612dbd565b9050919050565b7f636f737400000000000000000000000000000000000000000000000000000000600082015250565b6000612e366004836123ac565b9150612e4182612e00565b602082019050919050565b60006020820190508181036000830152612e6581612e29565b9050919050565b6000612e788285612d1f565b602082019150612e888284612d40565b6020820191508190509392505050565b600060c082019050612ead60008301896125b4565b612eba60208301886126ed565b612ec760408301876124f1565b612ed460608301866125b4565b612ee160808301856125b4565b612eee60a08301846125b4565b979650505050505050565b7f7065726d697373696f6e00000000000000000000000000000000000000000000600082015250565b6000612f2f600a836123ac565b9150612f3a82612ef9565b602082019050919050565b60006020820190508181036000830152612f5e81612f22565b9050919050565b7f6f776e6572000000000000000000000000000000000000000000000000000000600082015250565b6000612f9b6005836123ac565b9150612fa682612f65565b602082019050919050565b60006020820190508181036000830152612fca81612f8e565b9050919050565b7f746f6b656e496473000000000000000000000000000000000000000000000000600082015250565b60006130076008836123ac565b915061301282612fd1565b602082019050919050565b6000602082019050818103600083015261303681612ffa565b9050919050565b60006130488261245c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561307b5761307a612b2b565b5b600182019050919050565b7f7a65726f00000000000000000000000000000000000000000000000000000000600082015250565b60006130bc6004836123ac565b91506130c782613086565b602082019050919050565b600060208201905081810360008301526130eb816130af565b9050919050565b60006130fd8261245c565b9150600082141561311157613110612b2b565b5b600182039050919050565b7f77697468647261776e0000000000000000000000000000000000000000000000600082015250565b60006131526009836123ac565b915061315d8261311c565b602082019050919050565b6000602082019050818103600083015261318181613145565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006131af82613188565b6131b98185613193565b93506131c98185602086016123bd565b6131d2816123f0565b840191505092915050565b60006080820190506131f260008301876124f1565b6131ff60208301866124f1565b61320c60408301856125b4565b818103606083015261321e81846131a4565b905095945050505050565b60008151905061323881612312565b92915050565b600060208284031215613254576132536122dc565b5b600061326284828501613229565b91505092915050565b7f7265636569766572000000000000000000000000000000000000000000000000600082015250565b60006132a16008836123ac565b91506132ac8261326b565b602082019050919050565b600060208201905081810360008301526132d081613294565b9050919050565b7f746f6b656e496400000000000000000000000000000000000000000000000000600082015250565b600061330d6007836123ac565b9150613318826132d7565b602082019050919050565b6000602082019050818103600083015261333c81613300565b9050919050565b600060808201905061335860008301876125b4565b61336560208301866126ed565b61337260408301856125b4565b61337f60608301846125b4565b95945050505050565b600067ffffffffffffffff8211156133a3576133a2612788565b5b6133ac826123f0565b9050602081019050919050565b60006133cc6133c784613388565b6127e8565b9050828152602081018484840111156133e8576133e7612783565b5b6133f38482856123bd565b509392505050565b600082601f8301126134105761340f6125de565b5b81516134208482602086016133b9565b91505092915050565b60006020828403121561343f5761343e6122dc565b5b600082015167ffffffffffffffff81111561345d5761345c6122e1565b5b613469848285016133fb565b91505092915050565b600061347d8261245c565b91506134888361245c565b92508261349857613497612c0a565b5b828206905092915050565b60008160011c9050919050565b6000808291508390505b60018511156134fa578086048111156134d6576134d5612b2b565b5b60018516156134e55780820291505b80810290506134f3856134a3565b94506134ba565b94509492505050565b60008261351357600190506135cf565b8161352157600090506135cf565b8160018114613537576002811461354157613570565b60019150506135cf565b60ff84111561355357613552612b2b565b5b8360020a91508482111561356a57613569612b2b565b5b506135cf565b5060208310610133831016604e8410600b84101617156135a55782820a9050838111156135a05761359f612b2b565b5b6135cf565b6135b284848460016134b0565b925090508184048111156135c9576135c8612b2b565b5b81810290505b9392505050565b600060ff82169050919050565b60006135ee8261245c565b91506135f9836135d6565b92506136267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613503565b905092915050565b7f6f776e65724f6600000000000000000000000000000000000000000000000000600082015250565b60006136646007836123ac565b915061366f8261362e565b602082019050919050565b6000602082019050818103600083015261369381613657565b9050919050565b600060e0820190506136af600083018a6125b4565b6136bc60208301896126ed565b6136c960408301886125b4565b6136d660608301876125b4565b6136e360808301866125b4565b6136f060a08301856125b4565b6136fd60c08301846125b4565b9897505050505050505056fea26469706673582212207311561cd8114d1f584af2a83de2ef2789eed06670e569dc8dfdfdab15e3383364736f6c63430008090033

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.