Sponsored:   [Largest VC Funded] TEMCO, millions sold out in seconds. Join TEMCO's last presale at CoinBene!
Contract Overview | Etheremon_MonsterToken
Balance: 0 Ether
Ether Value: $0
Transactions: 6638 txns
Token Tracker: EtheremonMonster (EMONA)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xe0a66218c40230967d4240d25f6220a28e52c7ffat txn 0x6d299d9ab67ddf927235deed2e1269d31d6600c5571fa6917e55a989352ffb6a
Token Balance:
 Latest 25 transactions from a total of 6638 transactions
(+2 PendingTxns)

TxHash Age From To Value [TxFee]
0x381843946bbe48b39222f9bea934ef0ab4dfa83e595e0c77e4cccb563a19b382(pending)0x016f8fe2deb26020234f03a0378f45db588e45f9  IN  0x5d00d312e171be5342067c09bae883f9bcb2003b0 Ether(Pending)
0xb1194586f5798bb46ddf1cad1746a86476413495272e70f34f6412a841401d9a(pending)0x35513a94b253f9b629c3d7a5f750d99d7d1ca374  IN  0x5d00d312e171be5342067c09bae883f9bcb2003b0 Ether(Pending)
0xb60d7161c10168ab66d8ab0fa5375ac2bf69234ddcf67fae1561d2a2c9c8c4074 hrs 57 mins ago0x2bf0d6da229112a048e4b757f897c914c4347499  IN   Etheremon_MonsterToken0 Ether0.000299367
0xae9aa544b116ef1190086b26cc76f28034e29b1b28b29d570797355a0c5bd5345 hrs 1 min ago0x8171a380d02fb6a2661edade7e4742d2fcc65ff7  IN   Etheremon_MonsterToken0 Ether0.000351036
0xc7b752c7a0b5f37851a9902f6ab5a1fca5e89574ac4f4e2b3c4ca5ed3391266b5 hrs 38 mins ago0x973fd449c7333f9822756286fee241101e4c0d51  IN   Etheremon_MonsterToken0 Ether0.0002373338
0x69286c7742ac35e645e3356b5c8505d7c02b03ea5c0e3839cf1c24818d361f4b8 hrs 32 mins ago0x0008d343091ef8bd3efa730f6aae5a26a285c7a2  IN   Etheremon_MonsterToken0 Ether0.0003588102
0x3086a3480693189f73bd097c323c74dea01c47164e62046991dc47240c59ad508 hrs 35 mins ago0x0008d343091ef8bd3efa730f6aae5a26a285c7a2  IN   Etheremon_MonsterToken0 Ether0.0003323712
0x65f8ba46cf0dd03d6a0186e1a54b28e72392bdfcd11357b8fdf7d9f3c9ce4e9410 hrs 37 mins ago0x0008d343091ef8bd3efa730f6aae5a26a285c7a2  IN   Etheremon_MonsterToken0 Ether0.000355178
0xaf3de3cfc2b2483a03ec3f1ccb49bc3f8af789993a9238d3e4924bbf6eb2356c11 hrs 11 mins ago0x0008d343091ef8bd3efa730f6aae5a26a285c7a2  IN   Etheremon_MonsterToken0 Ether0.000338184
0xf9568c4f2d48b7072363bb6ae5afd436e669bcc6248cdde2b26e8a004cc0361a11 hrs 11 mins ago0x0008d343091ef8bd3efa730f6aae5a26a285c7a2  IN   Etheremon_MonsterToken0 Ether0.000318364
0x7ba97db9b749fe8d571acba7942ec831c3e7d6b82ea13380e2e87fadcb5161e511 hrs 33 mins ago0xf796b8fb98c7c98fd4b5424ced013820d1f2ee76  IN   Etheremon_MonsterToken0 Ether0.000334107
0x6f6891a48e46979989945eb6d8c0033eebb1abf34accb9414ae5708e54e1283e11 hrs 36 mins ago0x3425d6f843d878ce555a67880c518fc10273a9c2  IN   Etheremon_MonsterToken0 Ether0.000393306
0x2f7c72a802778b483df0b4386b4b9f872d1c78bef0ff0dcc4195c188e1cc358f11 hrs 36 mins ago0x3425d6f843d878ce555a67880c518fc10273a9c2  IN   Etheremon_MonsterToken0 Ether0.000348156
0xcd0066a29835d0f873e401c03247a32bb5a682d0e9addf71faa386156a03439911 hrs 44 mins ago0x3425d6f843d878ce555a67880c518fc10273a9c2  IN   Etheremon_MonsterToken0 Ether0.000441696
0x7177c75eb6c02747f59b2c2a1e56c5138409fe6ddb7a05b268951b629b83640811 hrs 44 mins ago0xf796b8fb98c7c98fd4b5424ced013820d1f2ee76  IN   Etheremon_MonsterToken0 Ether0.000347907
0x1d7267dcd4e09340128085e9602552064a172c13e919fe702f816f68ac98235711 hrs 46 mins ago0xfdd2e489fe128aa6ad21974a475b9fd044f0f973  IN   Etheremon_MonsterToken0 Ether0.000267564
0x4f87d5ecdc9047c2746ec5afffbe966fac914180588f81aed80169199d62a52511 hrs 53 mins ago0x0008d343091ef8bd3efa730f6aae5a26a285c7a2  IN   Etheremon_MonsterToken0 Ether0.000352444
0x84eaeb14624f2a603850ea5304efdd3fd2f0435733f0bda60547c5b5fba8cb8514 hrs 42 mins ago0xd1c4d038334a347a3b536b39a385a9c5aa293652  IN   Etheremon_MonsterToken0 Ether0.000471687
0xba0fbe355e629c3492405aa0536708581547b43d5a179973e674f7bd196501a014 hrs 47 mins ago0xad91bcc5f7865c0945676bacd871d7168679909c  IN   Etheremon_MonsterToken0 Ether0.000544086
0x58a3016ca19d6dab321548073fad29e881db552c138873db3d5c045c95acbbfa15 hrs 27 mins ago0xadd8a6fc9785dedd83d8dcf09c7e6c031856d8a9  IN   Etheremon_MonsterToken0 Ether0.000496506
0x0fedd3174e301d0af5831ef54f8bebfdf10b5a61f1c53aa56904e6de00fda79115 hrs 28 mins ago0xdffb0008cc22f20aeb5f96cb5ba237539cff986c  IN   Etheremon_MonsterToken0 Ether0.000466077
0xa735404fce5854601193bbac9f0e4d7f07ec14009c4585db38261060b149e4e915 hrs 28 mins ago0xd1c4d038334a347a3b536b39a385a9c5aa293652  IN   Etheremon_MonsterToken0 Ether0.000496356
0xc0af73e8aef3077af56ef7dc5369cf9ff92577a82b22e3272a05e7dd01caa11815 hrs 28 mins ago0xad91bcc5f7865c0945676bacd871d7168679909c  IN   Etheremon_MonsterToken0 Ether0.000538626
0x69ccf858889a566b4b4493c7e20a4a326837c9efcb58042803546402ed4eb55915 hrs 31 mins ago0xff1a9252def51ede4489c05998f5e7cf8ad2c1b3  IN   Etheremon_MonsterToken0 Ether0.000484077
0x6ef700619eb46907001efa8c016f0229360eff16102cfaca84b407a2aff3c47c15 hrs 57 mins ago0xfbfa46695a1e46cad60750571f7f0e5e6bbc80fb  IN   Etheremon_MonsterToken0 Ether0.0002994175
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: EtheremonMonsterToken
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.24;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    if (a == 0) {
      return 0;
    }
    c = a * b;
    assert(c / a == b);
    return c;
  }

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

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}

/**
 * Utility library of inline functions on addresses
 */
library AddressUtils {

  /**
   * 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 addr address to check
   * @return whether the target address is a contract
   */
  function isContract(address addr) 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.
    // solium-disable-next-line security/no-inline-assembly
    assembly { size := extcodesize(addr) }
    return size > 0;
  }

}

interface ERC165 {
    function supportsInterface(bytes4 _interfaceID) external view returns (bool);
}

contract SupportsInterface is ERC165 {
    
    mapping(bytes4 => bool) internal supportedInterfaces;

    constructor() public {
        supportedInterfaces[0x01ffc9a7] = true; // ERC165
    }

    function supportsInterface(bytes4 _interfaceID) external view returns (bool) {
        return supportedInterfaces[_interfaceID];
    }
}

interface ERC721 {
    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) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) external;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external;
    
    function transferFrom(address _from, address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function approve(address _approved, uint256 _tokenId) external;
    function setApprovalForAll(address _operator, bool _approved) external;
    
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

interface ERC721Enumerable {
    function totalSupply() external view returns (uint256);
    function tokenByIndex(uint256 _index) external view returns (uint256);
    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
}

interface ERC721Metadata {
    function name() external view returns (string _name);
    function symbol() external view returns (string _symbol);
    function tokenURI(uint256 _tokenId) external view returns (string);
}

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

contract BasicAccessControl {
    address public owner;
    // address[] public moderators;
    uint16 public totalModerators = 0;
    mapping (address => bool) public moderators;
    bool public isMaintaining = false;

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    modifier onlyModerators() {
        require(msg.sender == owner || moderators[msg.sender] == true);
        _;
    }

    modifier isActive {
        require(!isMaintaining);
        _;
    }

    function ChangeOwner(address _newOwner) onlyOwner public {
        if (_newOwner != address(0)) {
            owner = _newOwner;
        }
    }


    function AddModerator(address _newModerator) onlyOwner public {
        if (moderators[_newModerator] == false) {
            moderators[_newModerator] = true;
            totalModerators += 1;
        }
    }
    
    function RemoveModerator(address _oldModerator) onlyOwner public {
        if (moderators[_oldModerator] == true) {
            moderators[_oldModerator] = false;
            totalModerators -= 1;
        }
    }

    function UpdateMaintaining(bool _isMaintaining) onlyOwner public {
        isMaintaining = _isMaintaining;
    }
}

contract EtheremonEnum {

    enum ResultCode {
        SUCCESS,
        ERROR_CLASS_NOT_FOUND,
        ERROR_LOW_BALANCE,
        ERROR_SEND_FAIL,
        ERROR_NOT_TRAINER,
        ERROR_NOT_ENOUGH_MONEY,
        ERROR_INVALID_AMOUNT
    }
    
    enum ArrayType {
        CLASS_TYPE,
        STAT_STEP,
        STAT_START,
        STAT_BASE,
        OBJ_SKILL
    }
    
    enum PropertyType {
        ANCESTOR,
        XFACTOR
    }
}

contract EtheremonDataBase {
    
    uint64 public totalMonster;
    uint32 public totalClass;
    
    // write
    function withdrawEther(address _sendTo, uint _amount) external returns(EtheremonEnum.ResultCode);
    function addElementToArrayType(EtheremonEnum.ArrayType _type, uint64 _id, uint8 _value) external returns(uint);
    function updateIndexOfArrayType(EtheremonEnum.ArrayType _type, uint64 _id, uint _index, uint8 _value) external returns(uint);
    function setMonsterClass(uint32 _classId, uint256 _price, uint256 _returnPrice, bool _catchable) external returns(uint32);
    function addMonsterObj(uint32 _classId, address _trainer, string _name) external returns(uint64);
    function setMonsterObj(uint64 _objId, string _name, uint32 _exp, uint32 _createIndex, uint32 _lastClaimIndex) external;
    function increaseMonsterExp(uint64 _objId, uint32 amount) external;
    function decreaseMonsterExp(uint64 _objId, uint32 amount) external;
    function removeMonsterIdMapping(address _trainer, uint64 _monsterId) external;
    function addMonsterIdMapping(address _trainer, uint64 _monsterId) external;
    function clearMonsterReturnBalance(uint64 _monsterId) external returns(uint256 amount);
    function collectAllReturnBalance(address _trainer) external returns(uint256 amount);
    function transferMonster(address _from, address _to, uint64 _monsterId) external returns(EtheremonEnum.ResultCode);
    function addExtraBalance(address _trainer, uint256 _amount) external returns(uint256);
    function deductExtraBalance(address _trainer, uint256 _amount) external returns(uint256);
    function setExtraBalance(address _trainer, uint256 _amount) external;
    
    // read
    function getSizeArrayType(EtheremonEnum.ArrayType _type, uint64 _id) constant external returns(uint);
    function getElementInArrayType(EtheremonEnum.ArrayType _type, uint64 _id, uint _index) constant external returns(uint8);
    function getMonsterClass(uint32 _classId) constant external returns(uint32 classId, uint256 price, uint256 returnPrice, uint32 total, bool catchable);
    function getMonsterObj(uint64 _objId) constant external returns(uint64 objId, uint32 classId, address trainer, uint32 exp, uint32 createIndex, uint32 lastClaimIndex, uint createTime);
    function getMonsterName(uint64 _objId) constant external returns(string name);
    function getExtraBalance(address _trainer) constant external returns(uint256);
    function getMonsterDexSize(address _trainer) constant external returns(uint);
    function getMonsterObjId(address _trainer, uint index) constant external returns(uint64);
    function getExpectedBalance(address _trainer) constant external returns(uint256);
    function getMonsterReturn(uint64 _objId) constant external returns(uint256 current, uint256 total);
}

interface EtheremonBattle {
    function isOnBattle(uint64 _objId) constant external returns(bool);
}

interface EtheremonTradeInterface {
    function isOnTrading(uint64 _objId) constant external returns(bool);
}


contract EtheremonMonsterTokenBasic is ERC721, SupportsInterface, BasicAccessControl {

    using SafeMath for uint256;
    using AddressUtils for address;
    
    struct MonsterClassAcc {
        uint32 classId;
        uint256 price;
        uint256 returnPrice;
        uint32 total;
        bool catchable;
    }

    struct MonsterObjAcc {
        uint64 monsterId;
        uint32 classId;
        address trainer;
        string name;
        uint32 exp;
        uint32 createIndex;
        uint32 lastClaimIndex;
        uint createTime;
    }

    // data contract
    address public dataContract;
    address public battleContract;
    address public tradeContract;
    
    // Mapping from NFT ID to approved address.
    mapping (uint256 => address) internal idToApprovals;
    
    // Mapping from owner address to mapping of operator addresses.
    mapping (address => mapping (address => bool)) internal ownerToOperators;
    
    /**
    * @dev Magic value of a smart contract that can recieve NFT.
    * Equal to: bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")).
    */
    bytes4 constant MAGIC_ON_ERC721_RECEIVED = 0x150b7a02;

    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);
    
    // internal function
    function _canOperate(address _tokenOwner) constant internal {
        require(_tokenOwner == msg.sender || ownerToOperators[_tokenOwner][msg.sender]);
    }
    
    function _canTransfer(uint256 _tokenId, address _tokenOwner) constant internal {
        EtheremonBattle battle = EtheremonBattle(battleContract);
        EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
        require(!battle.isOnBattle(uint64(_tokenId)) && !trade.isOnTrading(uint64(_tokenId)));
        require(_tokenOwner != address(0));
        require(_tokenOwner == msg.sender || idToApprovals[_tokenId] == msg.sender || ownerToOperators[_tokenOwner][msg.sender]);
    }
    
    function setOperationContracts(address _dataContract, address _battleContract, address _tradeContract) onlyModerators external {
        dataContract = _dataContract;
        battleContract = _battleContract;
        tradeContract = _tradeContract;
    }
    
    // public function

    constructor() public {
        supportedInterfaces[0x80ac58cd] = true; // ERC721
    }

    function isApprovable(address _owner, uint256 _tokenId) public constant returns(bool) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId));
        if (obj.monsterId != uint64(_tokenId))
            return false;
        if (obj.trainer != _owner)
            return false;
        // check battle & trade contract 
        EtheremonBattle battle = EtheremonBattle(battleContract);
        EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
        return (!battle.isOnBattle(obj.monsterId) && !trade.isOnTrading(obj.monsterId));
    }

    function balanceOf(address _owner) external view returns (uint256) {
        require(_owner != address(0));
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        return data.getMonsterDexSize(_owner);
    }

    function ownerOf(uint256 _tokenId) external view returns (address _owner) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, _owner, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId));
        require(_owner != address(0));
    }


    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) external {
        _safeTransferFrom(_from, _to, _tokenId, _data);
    }

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

    function transferFrom(address _from, address _to, uint256 _tokenId) external {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId));
        require(obj.trainer != address(0));
        _canTransfer(_tokenId, obj.trainer);
        
        require(obj.trainer == _from);
        require(_to != address(0));
        _transfer(obj.trainer, _to, _tokenId);
    }

    function transfer(address _to, uint256 _tokenId) external {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId));
        require(obj.trainer != address(0));
        _canTransfer(_tokenId, obj.trainer);
        
        require(obj.trainer == msg.sender);
        require(_to != address(0));
        _transfer(obj.trainer, _to, _tokenId);
    }

    function approve(address _approved, uint256 _tokenId) external {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId));
        require(obj.trainer != address(0));
        _canOperate(obj.trainer);
        EtheremonBattle battle = EtheremonBattle(battleContract);
        EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
        if(battle.isOnBattle(obj.monsterId) || trade.isOnTrading(obj.monsterId))
            revert();
        
        require(_approved != obj.trainer);

        idToApprovals[_tokenId] = _approved;
        emit Approval(obj.trainer, _approved, _tokenId);
    }

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

    function getApproved(uint256 _tokenId) public view returns (address) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId));
        require(obj.trainer != address(0));
        return idToApprovals[_tokenId];
    }

    function isApprovedForAll(address _owner, address _operator) external view returns (bool) {
        require(_owner != address(0));
        require(_operator != address(0));
        return ownerToOperators[_owner][_operator];
    }

    function _safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) internal {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId));
        require(obj.trainer != address(0));
        _canTransfer(_tokenId, obj.trainer);
        
        require(obj.trainer == _from);
        require(_to != address(0));

        _transfer(obj.trainer, _to, _tokenId);

        if (_to.isContract()) {
            bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data);
            require(retval == MAGIC_ON_ERC721_RECEIVED);
        }
    }

    function _transfer(address _from, address _to, uint256 _tokenId) private {
        _clearApproval(_tokenId);
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        data.removeMonsterIdMapping(_from, uint64(_tokenId));
        data.addMonsterIdMapping(_to, uint64(_tokenId));
        emit Transfer(_from, _to, _tokenId);
    }


    function _burn(uint256 _tokenId) internal { 
        _clearApproval(_tokenId);
        
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId));
        require(obj.trainer != address(0));
        
        EtheremonBattle battle = EtheremonBattle(battleContract);
        EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
        if(battle.isOnBattle(obj.monsterId) || trade.isOnTrading(obj.monsterId))
            revert();
        
        data.removeMonsterIdMapping(obj.trainer, uint64(_tokenId));
        
        emit Transfer(obj.trainer, address(0), _tokenId);
    }

    function _clearApproval(uint256 _tokenId) internal {
        if(idToApprovals[_tokenId] != 0) {
            delete idToApprovals[_tokenId];
        }
    }

}


contract EtheremonMonsterEnumerable is EtheremonMonsterTokenBasic, ERC721Enumerable {

    constructor() public {
        supportedInterfaces[0x780e9d63] = true; // ERC721Enumerable
    }

    function totalSupply() external view returns (uint256) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        return data.totalMonster();
    }

    function tokenByIndex(uint256 _index) external view returns (uint256) {
        return _index;
    }

    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256) {
        require(_owner != address(0));
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        return data.getMonsterObjId(_owner, _index);
    }

}


contract EtheremonMonsterStandard is EtheremonMonsterEnumerable, ERC721Metadata {
    string internal nftName;
    string internal nftSymbol;
    
    mapping (uint256 => string) internal idToUri;
    
    constructor(string _name, string _symbol) public {
        nftName = _name;
        nftSymbol = _symbol;
        supportedInterfaces[0x5b5e139f] = true; // ERC721Metadata
    }
    
    function _burn(uint256 _tokenId) internal {
        super._burn(_tokenId);
        if (bytes(idToUri[_tokenId]).length != 0) {
            delete idToUri[_tokenId];
        }
    }
    
    function _setTokenUri(uint256 _tokenId, string _uri) internal {
        idToUri[_tokenId] = _uri;
    }
    
    function name() external view returns (string _name) {
        _name = nftName;
    }
    
    function symbol() external view returns (string _symbol) {
        _symbol = nftSymbol;
    }
    
    function tokenURI(uint256 _tokenId) external view returns (string) {
        return idToUri[_tokenId];
    }
}

contract EtheremonMonsterToken is EtheremonMonsterStandard("EtheremonMonster", "EMONA") {
    uint8 constant public STAT_COUNT = 6;
    uint8 constant public STAT_MAX = 32;

    uint seed = 0;
    
    mapping(uint8 => uint32) public levelExps;
    mapping(uint32 => bool) classWhitelist;
    mapping(address => bool) addressWhitelist;
    
    uint public gapFactor = 0.001 ether;
    uint16 public priceIncreasingRatio = 1000;
    
    function setPriceIncreasingRatio(uint16 _ratio) onlyModerators external {
        priceIncreasingRatio = _ratio;
    }
    
    function setFactor(uint _gapFactor) onlyModerators public {
        gapFactor = _gapFactor;
    }
    
    function genLevelExp() onlyModerators external {
        uint8 level = 1;
        uint32 requirement = 100;
        uint32 sum = requirement;
        while(level <= 100) {
            levelExps[level] = sum;
            level += 1;
            requirement = (requirement * 11) / 10 + 5;
            sum += requirement;
        }
    }
    
    function setClassWhitelist(uint32 _classId, bool _status) onlyModerators external {
        classWhitelist[_classId] = _status;
    }

    function setAddressWhitelist(address _smartcontract, bool _status) onlyModerators external {
        addressWhitelist[_smartcontract] = _status;
    }

    function setTokenURI(uint256 _tokenId, string _uri) onlyModerators external {
        _setTokenUri(_tokenId, _uri);
    }
    
    function withdrawEther(address _sendTo, uint _amount) onlyOwner public {
        if (_amount > address(this).balance) {
            revert();
        }
        _sendTo.transfer(_amount);
    }
    
    function mintMonster(uint32 _classId, address _trainer, string _name) onlyModerators external returns(uint){
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        // add monster
        uint64 objId = data.addMonsterObj(_classId, _trainer, _name);
        uint8 value;
        seed = getRandom(_trainer, block.number-1, seed, objId);
        // generate base stat for the previous one
        for (uint i=0; i < STAT_COUNT; i+= 1) {
            value = uint8(seed % STAT_MAX) + data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_START, uint64(_classId), i);
            data.addElementToArrayType(EtheremonEnum.ArrayType.STAT_BASE, objId, value);
        }
        emit Transfer(address(0), _trainer, objId);
        return objId;
    }
    
    function burnMonster(uint64 _tokenId) onlyModerators external {
        _burn(_tokenId);
    }
    
    function clearApproval(uint _tokenId) onlyModerators external {
        _clearApproval(_tokenId);
    }
    
    function triggerTransferEvent(address _from, address _to, uint _tokenId) onlyModerators external {
        _clearApproval(_tokenId);
        emit Transfer(_from, _to, _tokenId);
    }
    
    // public api 
    function getRandom(address _player, uint _block, uint _seed, uint _count) view public returns(uint) {
        return uint(keccak256(abi.encodePacked(blockhash(_block), _player, _seed, _count)));
    }
    
    function getLevel(uint32 exp) view public returns (uint8) {
        uint8 minIndex = 1;
        uint8 maxIndex = 100;
        uint8 currentIndex;
     
        while (minIndex < maxIndex) {
            currentIndex = (minIndex + maxIndex) / 2;
            if (exp < levelExps[currentIndex])
                maxIndex = currentIndex;
            else
                minIndex = currentIndex + 1;
        }

        return minIndex;
    }
    
    function getMonsterBaseStats(uint64 _monsterId) constant external returns(uint hp, uint pa, uint pd, uint sa, uint sd, uint speed) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        uint[6] memory stats;
        for(uint i=0; i < STAT_COUNT; i+=1) {
            stats[i] = data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_BASE, _monsterId, i);
        }
        return (stats[0], stats[1], stats[2], stats[3], stats[4], stats[5]);
    }
    
    function getMonsterCurrentStats(uint64 _monsterId) constant external returns(uint exp, uint level, uint hp, uint pa, uint pd, uint sa, uint sd, uint speed) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_monsterId);
        
        uint[6] memory stats;
        uint i = 0;
        level = getLevel(obj.exp);
        for(i=0; i < STAT_COUNT; i+=1) {
            stats[i] = data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_BASE, _monsterId, i);
        }
        for(i=0; i < STAT_COUNT; i++) {
            stats[i] += uint(data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_STEP, obj.classId, i)) * level * 3;
        }
        
        return (obj.exp, level, stats[0], stats[1], stats[2], stats[3], stats[4], stats[5]);
    }
    
    function getMonsterCP(uint64 _monsterId) constant external returns(uint cp) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_monsterId);
        
        uint[6] memory stats;
        uint i = 0;
        cp = getLevel(obj.exp);
        for(i=0; i < STAT_COUNT; i+=1) {
            stats[i] = data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_BASE, _monsterId, i);
        }
        for(i=0; i < STAT_COUNT; i++) {
            stats[i] += uint(data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_STEP, obj.classId, i)) * cp * 3;
        }
        
        cp = (stats[0] + stats[1] + stats[2] + stats[3] + stats[4] + stats[5]) / 6;
    }
    
    function getPrice(uint32 _classId) constant external returns(bool catchable, uint price) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterClassAcc memory class;
        (class.classId, class.price, class.returnPrice, class.total, class.catchable) = data.getMonsterClass(_classId);
        
        price = class.price;
        if (class.total > 0)
            price += class.price*(class.total-1)/priceIncreasingRatio;
        
        if (class.catchable == false) {
            if (addressWhitelist[msg.sender] == true && classWhitelist[_classId] == true) {
                return (true, price);
            }
        }
        
        return (class.catchable, price);
    }
    
    function getMonsterClassBasic(uint32 _classId) constant external returns(uint256, uint256, uint256, bool) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterClassAcc memory class;
        (class.classId, class.price, class.returnPrice, class.total, class.catchable) = data.getMonsterClass(_classId);
        return (class.price, class.returnPrice, class.total, class.catchable);
    }
    
    function renameMonster(uint64 _objId, string name) isActive external {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
        if (obj.monsterId != _objId || obj.trainer != msg.sender) {
            revert();
        }
        data.setMonsterObj(_objId, name, obj.exp, obj.createIndex, obj.lastClaimIndex);
    }
    
    function catchMonster(address _player, uint32 _classId, string _name) isActive external payable returns(uint tokenId) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterClassAcc memory class;
        (class.classId, class.price, class.returnPrice, class.total, class.catchable) = data.getMonsterClass(_classId);
        if (class.classId == 0) {
            revert();
        }
        
        if (class.catchable == false) {
            if (addressWhitelist[msg.sender] == false || classWhitelist[_classId] == false) {
                revert();
            }
        }
        
        uint price = class.price;
        if (class.total > 0)
            price += class.price*(class.total-1)/priceIncreasingRatio;
        if (msg.value + gapFactor < price) {
            revert();
        }
        
        // add new monster 
        uint64 objId = data.addMonsterObj(_classId, _player, _name);
        uint8 value;
        seed = getRandom(_player, block.number-1, seed, objId);
        // generate base stat for the previous one
        for (uint i=0; i < STAT_COUNT; i+= 1) {
            value = uint8(seed % STAT_MAX) + data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_START, uint64(_classId), i);
            data.addElementToArrayType(EtheremonEnum.ArrayType.STAT_BASE, objId, value);
        }
        
        emit Transfer(address(0), _player, objId);

        return objId; 
    }
    
    
}

    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":"_monsterId","type":"uint64"}],"name":"getMonsterCP","outputs":[{"name":"cp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"_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":"_approved","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_classId","type":"uint32"},{"name":"_trainer","type":"address"},{"name":"_name","type":"string"}],"name":"mintMonster","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_player","type":"address"},{"name":"_block","type":"uint256"},{"name":"_seed","type":"uint256"},{"name":"_count","type":"uint256"}],"name":"getRandom","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dataContract","type":"address"},{"name":"_battleContract","type":"address"},{"name":"_tradeContract","type":"address"}],"name":"setOperationContracts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"moderators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"genLevelExp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_monsterId","type":"uint64"}],"name":"getMonsterCurrentStats","outputs":[{"name":"exp","type":"uint256"},{"name":"level","type":"uint256"},{"name":"hp","type":"uint256"},{"name":"pa","type":"uint256"},{"name":"pd","type":"uint256"},{"name":"sa","type":"uint256"},{"name":"sd","type":"uint256"},{"name":"speed","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"battleContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":false,"inputs":[{"name":"_classId","type":"uint32"},{"name":"_status","type":"bool"}],"name":"setClassWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_isMaintaining","type":"bool"}],"name":"UpdateMaintaining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"STAT_MAX","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalModerators","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sendTo","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ratio","type":"uint16"}],"name":"setPriceIncreasingRatio","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newModerator","type":"address"}],"name":"AddModerator","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":true,"inputs":[{"name":"","type":"uint8"}],"name":"levelExps","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"clearApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_gapFactor","type":"uint256"}],"name":"setFactor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint64"}],"name":"burnMonster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"isApprovable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"},{"name":"name","type":"string"}],"name":"renameMonster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_classId","type":"uint32"}],"name":"getMonsterClassBasic","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"_symbol","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"},{"name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_smartcontract","type":"address"},{"name":"_status","type":"bool"}],"name":"setAddressWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"exp","type":"uint32"}],"name":"getLevel","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_oldModerator","type":"address"}],"name":"RemoveModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[{"name":"_player","type":"address"},{"name":"_classId","type":"uint32"},{"name":"_name","type":"string"}],"name":"catchMonster","outputs":[{"name":"tokenId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"gapFactor","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":"triggerTransferEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"_monsterId","type":"uint64"}],"name":"getMonsterBaseStats","outputs":[{"name":"hp","type":"uint256"},{"name":"pa","type":"uint256"},{"name":"pd","type":"uint256"},{"name":"sa","type":"uint256"},{"name":"sd","type":"uint256"},{"name":"speed","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STAT_COUNT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_classId","type":"uint32"}],"name":"getPrice","outputs":[{"name":"catchable","type":"bool"},{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"priceIncreasingRatio","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","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"},{"constant":true,"inputs":[],"name":"isMaintaining","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"ChangeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tradeContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"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"}]

  Contract Creation Code Switch To Opcodes View
600180546003805460ff199081169091556000600b81905566038d7ea4c68000600f556010805461ffff19166103e817815560808181527f4574686572656d6f6e4d6f6e737465720000000000000000000000000000000060a0908152610100604052600560c09081527f454d4f4e4100000000000000000000000000000000000000000000000000000060e05260208590527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c58054871689179055600160b060020a0319909616331787557ff7815fccbf112960a73756e185887fedcb9fc64ca0a16cc5923b7960ed78080080548616881790557f780e9d63000000000000000000000000000000000000000000000000000000009093527f77b7bbe0e49b76487c9476b5db3354cf5270619d0037ccb899c2a4c4a75b43188054909416909517909255620001539160089190620001c7565b50805162000169906009906020840190620001c7565b50507f5b5e139f000000000000000000000000000000000000000000000000000000006000908152602052507f9562381dfbc2d8b8b66e765249f330164b73e329e5f01670660643571d1974df805460ff191660011790556200026c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200020a57805160ff19168380011785556200023a565b828001600101855582156200023a579182015b828111156200023a5782518255916020019190600101906200021d565b50620002489291506200024c565b5090565b6200026991905b8082111562000248576000815560010162000253565b90565b614091806200027c6000396000f3006080604052600436106102795763ffffffff60e060020a60003504166301ffc9a7811461027e5780630672859b146102c957806306fdde03146102fd578063081812fc14610387578063095ea7b3146103bb5780630963d4b7146103e15780630a92b264146104185780630afd548d146104425780630d6688181461046f57806314d0f1ba14610484578063162094c4146104a557806318160ddd146104c957806323b872dd146104de5780632f745c591461050857806333ced3211461052c5780633c6e592714610541578063423b1ca3146105a457806342842e0e146105b95780634661bb98146105e357806348ef5aa8146106065780634e3dc2f1146106205780634efb023e1461064b5780634f6ccce714610677578063522f68151461068f57806357918052146106b35780636352211e146106cf5780636c81fd6d146106e757806370a082311461070857806378b475a8146107295780637fdd54031461075d578063817e9d311461077557806381b230421461078d5780638a0520fb146107af5780638d1d22d8146107d35780638da5cb5b1461080157806394f6ba1c1461081657806395d89b411461085c578063a22cb46514610871578063a9059cbb14610897578063af4c14ee146108bb578063b2cad9b7146108e1578063b85d6275146108ff578063b88d4fde14610920578063c0845e8a14610959578063c10be52114610983578063c463b00814610998578063c87b56dd146109c2578063d29cbd60146109da578063d98e14bd14610a2f578063da26663a14610a44578063e19bb96414610a7d578063e985e9c514610a92578063ee4e441614610ab9578063f285329214610ace578063ffa640d814610aef575b600080fd5b34801561028a57600080fd5b506102b57bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1960043516610b04565b604080519115158252519081900360200190f35b3480156102d557600080fd5b506102eb67ffffffffffffffff60043516610b38565b60408051918252519081900360200190f35b34801561030957600080fd5b50610312610dfe565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561034c578181015183820152602001610334565b50505050905090810190601f1680156103795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039357600080fd5b5061039f600435610e94565b60408051600160a060020a039092168252519081900360200190f35b3480156103c757600080fd5b506103df600160a060020a0360043516602435610fbf565b005b3480156103ed57600080fd5b506102eb6004803563ffffffff169060248035600160a060020a0316916044359182019101356112a7565b34801561042457600080fd5b506102eb600160a060020a036004351660243560443560643561157a565b34801561044e57600080fd5b506103df600160a060020a036004358116906024358116906044351661162c565b34801561047b57600080fd5b5061039f6116c6565b34801561049057600080fd5b506102b5600160a060020a03600435166116da565b3480156104b157600080fd5b506103df6004803590602480359081019101356116ef565b3480156104d557600080fd5b506102eb611766565b3480156104ea57600080fd5b506103df600160a060020a03600435811690602435166044356117fc565b34801561051457600080fd5b506102eb600160a060020a0360043516602435611961565b34801561053857600080fd5b506103df611a2e565b34801561054d57600080fd5b5061056367ffffffffffffffff60043516611acb565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b3480156105b057600080fd5b5061039f611de6565b3480156105c557600080fd5b506103df600160a060020a0360043581169060243516604435611df5565b3480156105ef57600080fd5b506103df63ffffffff600435166024351515611e11565b34801561061257600080fd5b506103df6004351515611e71565b34801561062c57600080fd5b50610635611e9b565b6040805160ff9092168252519081900360200190f35b34801561065757600080fd5b50610660611ea0565b6040805161ffff9092168252519081900360200190f35b34801561068357600080fd5b506102eb600435611ec2565b34801561069b57600080fd5b506103df600160a060020a0360043516602435611ec5565b3480156106bf57600080fd5b506103df61ffff60043516611f20565b3480156106db57600080fd5b5061039f600435611f70565b3480156106f357600080fd5b506103df600160a060020a0360043516612075565b34801561071457600080fd5b506102eb600160a060020a036004351661211c565b34801561073557600080fd5b5061074460ff600435166121d7565b6040805163ffffffff9092168252519081900360200190f35b34801561076957600080fd5b506103df6004356121ef565b34801561078157600080fd5b506103df600435612230565b34801561079957600080fd5b506103df67ffffffffffffffff6004351661226d565b3480156107bb57600080fd5b506102b5600160a060020a03600435166024356122b8565b3480156107df57600080fd5b506103df6004803567ffffffffffffffff16906024803590810191013561253e565b34801561080d57600080fd5b5061039f612758565b34801561082257600080fd5b5061083463ffffffff60043516612767565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b34801561086857600080fd5b50610312612866565b34801561087d57600080fd5b506103df600160a060020a036004351660243515156128c7565b3480156108a357600080fd5b506103df600160a060020a036004351660243561294a565b3480156108c757600080fd5b506103df600160a060020a03600435166024351515612aa3565b3480156108ed57600080fd5b5061063563ffffffff60043516612b06565b34801561090b57600080fd5b506103df600160a060020a0360043516612b69565b34801561092c57600080fd5b506103df600160a060020a0360048035821691602480359091169160443591606435908101910135612c10565b6102eb60048035600160a060020a0316906024803563ffffffff1691604435918201910135612c4c565b34801561098f57600080fd5b506102eb61307b565b3480156109a457600080fd5b506103df600160a060020a0360043581169060243516604435613081565b3480156109ce57600080fd5b506103126004356130f6565b3480156109e657600080fd5b506109fc67ffffffffffffffff60043516613197565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b348015610a3b57600080fd5b506106356132a6565b348015610a5057600080fd5b50610a6263ffffffff600435166132ab565b60408051921515835260208301919091528051918290030190f35b348015610a8957600080fd5b50610660613438565b348015610a9e57600080fd5b506102b5600160a060020a0360043581169060243516613442565b348015610ac557600080fd5b506102b561349d565b348015610ada57600080fd5b506103df600160a060020a03600435166134a6565b348015610afb57600080fd5b5061039f6134f9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b600080610b43613ee1565b610b4b613f24565b6003546040805160e560020a6239012302815267ffffffffffffffff881660048201529051610100909204600160a060020a03169450600091859163072024609160248083019260e092919082900301818787803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b505050506040513d60e0811015610bd657600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a01819052600160a060020a039091169189019190915293169086015267ffffffffffffffff16845260009150610c5190612b06565b60ff169450600090505b6006811015610d0f576040805160e060020a6362b21ad70281526003600482015267ffffffffffffffff88166024820152604481018390529051600160a060020a038616916362b21ad79160648083019260209291908290030181600087803b158015610cc757600080fd5b505af1158015610cdb573d6000803e3d6000fd5b505050506040513d6020811015610cf157600080fd5b505160ff16828260068110610d0257fe5b6020020152600101610c5b565b5060005b6006811015610dd1576020838101516040805160e060020a6362b21ad70281526001600482015263ffffffff909216602483015260448201849052518792600160a060020a038816926362b21ad792606480830193928290030181600087803b158015610d7f57600080fd5b505af1158015610d93573d6000803e3d6000fd5b505050506040513d6020811015610da957600080fd5b505160ff1602600302828260068110610dbe57fe5b6020020180519091019052600101610d13565b5060a081015160808201516060830151604084015160208501519451600695010101010104949350505050565b60088054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e8a5780601f10610e5f57610100808354040283529160200191610e8a565b820191906000526020600020905b815481529060010190602001808311610e6d57829003601f168201915b5050505050905090565b600080610e9f613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff871660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b158015610eff57600080fd5b505af1158015610f13573d6000803e3d6000fd5b505050506040513d60e0811015610f2957600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860181905293169084015267ffffffffffffffff1682521515610f9d57600080fd5b600084815260066020526040902054600160a060020a031692505b5050919050565b6000610fc9613ee1565b600080600360019054906101000a9004600160a060020a0316935083600160a060020a03166307202460866040518263ffffffff1660e060020a028152600401808267ffffffffffffffff1667ffffffffffffffff16815260200191505060e060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d60e081101561106b57600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a0152600160a060020a031690880181905293169086015267ffffffffffffffff16845215156110df57600080fd5b6110ec8360400151613508565b50506004805460055483516040805160e060020a6335f097f302815267ffffffffffffffff909216948201949094529251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b15801561115757600080fd5b505af115801561116b573d6000803e3d6000fd5b505050506040513d602081101561118157600080fd5b50518061120d575082516040805160e260020a632a11e9c702815267ffffffffffffffff909216600483015251600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b1580156111e057600080fd5b505af11580156111f4573d6000803e3d6000fd5b505050506040513d602081101561120a57600080fd5b50515b1561121757600080fd5b6040830151600160a060020a038781169116141561123457600080fd5b600085815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038a811691821790925586830151925189949193909216917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050505050565b6001546000908190819081908190600160a060020a03163314806112df57503360009081526002602052604090205460ff1615156001145b15156112ea57600080fd5b6003546040517ffc4d20f500000000000000000000000000000000000000000000000000000000815263ffffffff8b1660048201908152600160a060020a038b81166024840152606060448401908152606484018b9052610100909404169650869263fc4d20f5928d928d928d928d929190608401848480828437820191505095505050505050602060405180830381600087803b15801561138b57600080fd5b505af115801561139f573d6000803e3d6000fd5b505050506040513d60208110156113b557600080fd5b5051600b549093506113d990899060001943019067ffffffffffffffff871661157a565b600b555060005b6006811015611534576040805160e060020a6362b21ad70281526002600482015263ffffffff8b166024820152604481018390529051600160a060020a038616916362b21ad79160648083019260209291908290030181600087803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b505050506040513d602081101561147257600080fd5b5051600b546020900601915083600160a060020a03166326bda739600385856040518463ffffffff1660e060020a028152600401808460048111156114b357fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018260ff1660ff1681526020019350505050602060405180830381600087803b15801561150057600080fd5b505af1158015611514573d6000803e3d6000fd5b505050506040513d602081101561152a57600080fd5b50506001016113e0565b60405167ffffffffffffffff841690600160a060020a038a1690600090600080516020614046833981519152908290a4505067ffffffffffffffff169695505050505050565b6040805184406020808301919091526c01000000000000000000000000600160a060020a0388160282840152605482018590526074808301859052835180840390910181526094909201928390528151600093918291908401908083835b602083106115f75780518252601f1990920191602091820191016115d8565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912098975050505050505050565b600154600160a060020a031633148061165957503360009081526002602052604090205460ff1615156001145b151561166457600080fd5b60038054600160a060020a039485166101000274ffffffffffffffffffffffffffffffffffffffff00199091161790556004805492841673ffffffffffffffffffffffffffffffffffffffff1993841617905560058054919093169116179055565b6003546101009004600160a060020a031681565b60026020526000908152604090205460ff1681565b600154600160a060020a031633148061171c57503360009081526002602052604090205460ff1615156001145b151561172757600080fd5b6117618383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375061354d945050505050565b505050565b600080600360019054906101000a9004600160a060020a0316905080600160a060020a0316637a09defe6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156117bf57600080fd5b505af11580156117d3573d6000803e3d6000fd5b505050506040513d60208110156117e957600080fd5b505167ffffffffffffffff1691505b5090565b6000611806613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff861660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b15801561186657600080fd5b505af115801561187a573d6000803e3d6000fd5b505050506040513d60e081101561189057600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860181905293169084015267ffffffffffffffff168252151561190457600080fd5b61191283826040015161356c565b84600160a060020a03168160400151600160a060020a031614151561193657600080fd5b600160a060020a038416151561194b57600080fd5b61195a8160400151858561370e565b5050505050565b600080600160a060020a038416151561197957600080fd5b50600354604080517f75fe2e33000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820186905291516101009093049091169182916375fe2e339160448083019260209291908290030181600087803b1580156119f057600080fd5b505af1158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b505167ffffffffffffffff16949350505050565b60015460009081908190600160a060020a0316331480611a6257503360009081526002602052604090205460ff1615156001145b1515611a6d57600080fd5b506001915060649050805b606460ff8416116117615760ff83166000908152600c60205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050611a78565b6000806000806000806000806000611ae1613ee1565b611ae9613f24565b6003546040805160e560020a6239012302815267ffffffffffffffff8f1660048201529051610100909204600160a060020a03169450600091859163072024609160248083019260e092919082900301818787803b158015611b4a57600080fd5b505af1158015611b5e573d6000803e3d6000fd5b505050506040513d60e0811015611b7457600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a01819052600160a060020a039091169189019190915293169086015267ffffffffffffffff16845260009150611bef90612b06565b60ff169a50600090505b6006811015611cc65783600160a060020a03166362b21ad760038f846040518463ffffffff1660e060020a02815260040180846004811115611c3757fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c7e57600080fd5b505af1158015611c92573d6000803e3d6000fd5b505050506040513d6020811015611ca857600080fd5b505160ff16828260068110611cb957fe5b6020020152600101611bf9565b5060005b6006811015611d88576020838101516040805160e060020a6362b21ad70281526001600482015263ffffffff909216602483015260448201849052518d92600160a060020a038816926362b21ad792606480830193928290030181600087803b158015611d3657600080fd5b505af1158015611d4a573d6000803e3d6000fd5b505050506040513d6020811015611d6057600080fd5b505160ff1602600302828260068110611d7557fe5b6020020180519091019052600101611cca565b60808301518b8360006020020151846001602002015185600260200201518660036020020151876004602002015188600560200201518763ffffffff1697509b509b509b509b509b509b509b509b5050505050919395975091939597565b600454600160a060020a031681565b6117618383836020604051908101604052806000815250613871565b600154600160a060020a0316331480611e3e57503360009081526002602052604090205460ff1615156001145b1515611e4957600080fd5b63ffffffff919091166000908152600d60205260409020805460ff1916911515919091179055565b600154600160a060020a03163314611e8857600080fd5b6003805460ff1916911515919091179055565b602081565b60015474010000000000000000000000000000000000000000900461ffff1681565b90565b600154600160a060020a03163314611edc57600080fd5b3031811115611eea57600080fd5b604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015611761573d6000803e3d6000fd5b600154600160a060020a0316331480611f4d57503360009081526002602052604090205460ff1615156001145b1515611f5857600080fd5b6010805461ffff191661ffff92909216919091179055565b600080611f7b613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff871660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b158015611fdb57600080fd5b505af1158015611fef573d6000803e3d6000fd5b505050506040513d60e081101561200557600080fd5b5080516020808301516040840151606085015160808087015160a08089015160c0998a015160e08c015263ffffffff908116998b0199909952908816908901529086169087015293169084015267ffffffffffffffff1682529250600160a060020a0383161515610fb857600080fd5b600154600160a060020a0316331461208c57600080fd5b600160a060020a03811660009081526002602052604090205460ff16151561211957600160a060020a0381166000908152600260205260409020805460ff19166001908117909155805461ffff74010000000000000000000000000000000000000000808304821684019091160275ffff0000000000000000000000000000000000000000199091161790555b50565b600080600160a060020a038316151561213457600080fd5b50600354604080517f47c17bac000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015291516101009093049091169182916347c17bac9160248083019260209291908290030181600087803b1580156121a457600080fd5b505af11580156121b8573d6000803e3d6000fd5b505050506040513d60208110156121ce57600080fd5b50519392505050565b600c6020526000908152604090205463ffffffff1681565b600154600160a060020a031633148061221c57503360009081526002602052604090205460ff1615156001145b151561222757600080fd5b61211981613b4b565b600154600160a060020a031633148061225d57503360009081526002602052604090205460ff1615156001145b151561226857600080fd5b600f55565b600154600160a060020a031633148061229a57503360009081526002602052604090205460ff1615156001145b15156122a557600080fd5b6121198167ffffffffffffffff16613b93565b6000806122c3613ee1565b600080600360019054906101000a9004600160a060020a0316935083600160a060020a03166307202460876040518263ffffffff1660e060020a028152600401808267ffffffffffffffff1667ffffffffffffffff16815260200191505060e060405180830381600087803b15801561233b57600080fd5b505af115801561234f573d6000803e3d6000fd5b505050506040513d60e081101561236557600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a0152600160a060020a031690880152929092169185019190915267ffffffffffffffff908116808552908716146123e55760009450612534565b86600160a060020a03168360400151600160a060020a031614151561240d5760009450612534565b50506004805460055483516040805160e060020a6335f097f302815267ffffffffffffffff909216948201949094529251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b15801561247857600080fd5b505af115801561248c573d6000803e3d6000fd5b505050506040513d60208110156124a257600080fd5b5051158015612531575082516040805160e260020a632a11e9c702815267ffffffffffffffff909216600483015251600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b15801561250357600080fd5b505af1158015612517573d6000803e3d6000fd5b505050506040513d602081101561252d57600080fd5b5051155b94505b5050505092915050565b6000612548613ee1565b60035460ff161561255857600080fd5b6003546040805160e560020a6239012302815267ffffffffffffffff881660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b1580156125b857600080fd5b505af11580156125cc573d6000803e3d6000fd5b505050506040513d60e08110156125e257600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860152929092169183019190915267ffffffffffffffff90811680835290861614158061266e57506040810151600160a060020a03163314155b1561267857600080fd5b608081015160a08083015160c08401516040517f32666a3100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8a166004820190815263ffffffff80871660448401528085166064840152831660848301526024820194855260a48201899052600160a060020a038816956332666a31958c958c958c959394919390929060c4018787808284378201915050975050505050505050600060405180830381600087803b15801561273957600080fd5b505af115801561274d573d6000803e3d6000fd5b505050505050505050565b600154600160a060020a031681565b6000806000806000612777613f43565b600354604080517f9d29cac400000000000000000000000000000000000000000000000000000000815263ffffffff8a1660048201529051610100909204600160a060020a031693508391639d29cac49160248082019260a0929091908290030181600087803b1580156127ea57600080fd5b505af11580156127fe573d6000803e3d6000fd5b505050506040513d60a081101561281457600080fd5b508051602080830151604080850151606080870151608097880151151597890188905263ffffffff90811691890182905292880182905293870183905293169094529299909850919650945092505050565b60098054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e8a5780601f10610e5f57610100808354040283529160200191610e8a565b600160a060020a03821615156128dc57600080fd5b336000818152600760209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6000612954613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff861660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b1580156129b457600080fd5b505af11580156129c8573d6000803e3d6000fd5b505050506040513d60e08110156129de57600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860181905293169084015267ffffffffffffffff1682521515612a5257600080fd5b612a6083826040015161356c565b6040810151600160a060020a03163314612a7957600080fd5b600160a060020a0384161515612a8e57600080fd5b612a9d8160400151858561370e565b50505050565b600154600160a060020a0316331480612ad057503360009081526002602052604090205460ff1615156001145b1515612adb57600080fd5b600160a060020a03919091166000908152600e60205260409020805460ff1916911515919091179055565b600060016064825b8160ff168360ff161015612b6057600260ff848401160460ff81166000908152600c602052604090205490915063ffffffff9081169086161015612b5457809150612b5b565b8060010192505b612b0e565b50909392505050565b600154600160a060020a03163314612b8057600080fd5b600160a060020a03811660009081526002602052604090205460ff1615156001141561211957600160a060020a03166000908152600260205260409020805460ff191690556001805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b61195a85858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843750613871945050505050565b600080612c57613f43565b60035460009081908190819060ff1615612c7057600080fd5b600354604080517f9d29cac400000000000000000000000000000000000000000000000000000000815263ffffffff8d1660048201529051610100909204600160a060020a031697508791639d29cac49160248082019260a0929091908290030181600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050506040513d60a0811015612d0d57600080fd5b5080516020808301516040808501516060808701516080978801511515978d019790975263ffffffff968716908c0152908a015290880152168086521515612d5457600080fd5b60808501511515612d9e57336000908152600e602052604090205460ff161580612d94575063ffffffff8a166000908152600d602052604090205460ff16155b15612d9e57600080fd5b846020015193506000856060015163ffffffff161115612de8576010546060860151602087015161ffff9092169160001990910163ffffffff1602811515612de257fe5b04840193505b83600f5434011015612df957600080fd5b85600160a060020a031663fc4d20f58b8d8c8c6040518563ffffffff1660e060020a028152600401808563ffffffff1663ffffffff16815260200184600160a060020a0316600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505095505050505050602060405180830381600087803b158015612e8a57600080fd5b505af1158015612e9e573d6000803e3d6000fd5b505050506040513d6020811015612eb457600080fd5b5051600b54909350612ed8908c9060001943019067ffffffffffffffff871661157a565b600b555060005b6006811015613033576040805160e060020a6362b21ad70281526002600482015263ffffffff8c166024820152604481018390529051600160a060020a038816916362b21ad79160648083019260209291908290030181600087803b158015612f4757600080fd5b505af1158015612f5b573d6000803e3d6000fd5b505050506040513d6020811015612f7157600080fd5b5051600b546020900601915085600160a060020a03166326bda739600385856040518463ffffffff1660e060020a02815260040180846004811115612fb257fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018260ff1660ff1681526020019350505050602060405180830381600087803b158015612fff57600080fd5b505af1158015613013573d6000803e3d6000fd5b505050506040513d602081101561302957600080fd5b5050600101612edf565b60405167ffffffffffffffff841690600160a060020a038d1690600090600080516020614046833981519152908290a4505067ffffffffffffffff1698975050505050505050565b600f5481565b600154600160a060020a03163314806130ae57503360009081526002602052604090205460ff1615156001145b15156130b957600080fd5b6130c281613b4b565b8082600160a060020a031684600160a060020a031660008051602061404683398151915260405160405180910390a4505050565b6000818152600a602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561318b5780601f106131605761010080835404028352916020019161318b565b820191906000526020600020905b81548152906001019060200180831161316e57829003601f168201915b50505050509050919050565b60008060008060008060006131aa613f24565b6003546101009004600160a060020a0316915060005b6006811015613274576040805160e060020a6362b21ad70281526003600482015267ffffffffffffffff8c166024820152604481018390529051600160a060020a038516916362b21ad79160648083019260209291908290030181600087803b15801561322c57600080fd5b505af1158015613240573d6000803e3d6000fd5b505050506040513d602081101561325657600080fd5b505160ff1682826006811061326757fe5b60200201526001016131c0565b508051602082015160408301516060840151608085015160a090950151939d929c50909a509850919650945092505050565b600681565b60008060006132b8613f43565b600354604080517f9d29cac400000000000000000000000000000000000000000000000000000000815263ffffffff881660048201529051610100909204600160a060020a031693508391639d29cac49160248082019260a0929091908290030181600087803b15801561332b57600080fd5b505af115801561333f573d6000803e3d6000fd5b505050506040513d60a081101561335557600080fd5b50805160208083015160408085015160608087015160809788015115159789019790975263ffffffff96871690880181905291870152918501819052929091168352909350600010156133d2576010546060820151602083015161ffff9092169160001990910163ffffffff16028115156133cc57fe5b04830192505b6080810151151561342957336000908152600e602052604090205460ff161515600114801561341b575063ffffffff85166000908152600d602052604090205460ff1615156001145b156134295760019350613431565b608081015193505b5050915091565b60105461ffff1681565b6000600160a060020a038316151561345957600080fd5b600160a060020a038216151561346e57600080fd5b50600160a060020a03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60035460ff1681565b600154600160a060020a031633146134bd57600080fd5b600160a060020a038116156121195760018054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b600554600160a060020a031681565b600160a060020a0381163314806135425750600160a060020a038116600090815260076020908152604080832033845290915290205460ff165b151561211957600080fd5b6000828152600a60209081526040909120825161176192840190613f71565b600480546005546040805160e060020a6335f097f302815267ffffffffffffffff87169481019490945251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050506040513d60208110156135fb57600080fd5b505115801561368857506040805160e260020a632a11e9c702815267ffffffffffffffff861660048201529051600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b15801561365a57600080fd5b505af115801561366e573d6000803e3d6000fd5b505050506040513d602081101561368457600080fd5b5051155b151561369357600080fd5b600160a060020a03831615156136a857600080fd5b600160a060020a0383163314806136d55750600084815260066020526040902054600160a060020a031633145b806137035750600160a060020a038316600090815260076020908152604080832033845290915290205460ff165b1515612a9d57600080fd5b600061371982613b4b565b50600354604080517f60c6ccb2000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015267ffffffffffffffff8516602483015291516101009093049091169182916360c6ccb291604480830192600092919082900301818387803b15801561379857600080fd5b505af11580156137ac573d6000803e3d6000fd5b5050604080517f9248019e000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483015267ffffffffffffffff8716602483015291519185169350639248019e925060448082019260009290919082900301818387803b15801561382457600080fd5b505af1158015613838573d6000803e3d6000fd5b505050508183600160a060020a031685600160a060020a031660008051602061404683398151915260405160405180910390a450505050565b600061387b613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff871660048201529051610100909204600160a060020a03169350600091849163072024609160248083019260e092919082900301818787803b1580156138dc57600080fd5b505af11580156138f0573d6000803e3d6000fd5b505050506040513d60e081101561390657600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08e015263ffffffff9081169a8d019a909a52908916908b015290871690890152600160a060020a031690870181905293169085015267ffffffffffffffff168352151561397a57600080fd5b61398885836040015161356c565b86600160a060020a03168260400151600160a060020a03161415156139ac57600080fd5b600160a060020a03861615156139c157600080fd5b6139d08260400151878761370e565b6139e286600160a060020a0316613bda565b15613b42576040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a038a8116602485015260448401899052608060648501908152885160848601528851918b169463150b7a0294938d938c938c93909160a490910190602085019080838360005b83811015613a7a578181015183820152602001613a62565b50505050905090810190601f168015613aa75780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613ac957600080fd5b505af1158015613add573d6000803e3d6000fd5b505050506040513d6020811015613af357600080fd5b505190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1981167f150b7a020000000000000000000000000000000000000000000000000000000014613b4257600080fd5b50505050505050565b600081815260066020526040902054600160a060020a031615612119576000908152600660205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b613b9c81613be2565b6000818152600a60205260409020546002600019610100600184161502019091160415612119576000818152600a6020526040812061211991613feb565b6000903b1190565b6000613bec613ee1565b600080613bf885613b4b565b6003546040805160e560020a6239012302815267ffffffffffffffff881660048201529051610100909204600160a060020a03169550859163072024609160248082019260e0929091908290030181600087803b158015613c5857600080fd5b505af1158015613c6c573d6000803e3d6000fd5b505050506040513d60e0811015613c8257600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a0152600160a060020a031690880181905293169086015267ffffffffffffffff1684521515613cf657600080fd5b50506004805460055483516040805160e060020a6335f097f302815267ffffffffffffffff909216948201949094529251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b158015613d6157600080fd5b505af1158015613d75573d6000803e3d6000fd5b505050506040513d6020811015613d8b57600080fd5b505180613e17575082516040805160e260020a632a11e9c702815267ffffffffffffffff909216600483015251600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b158015613dea57600080fd5b505af1158015613dfe573d6000803e3d6000fd5b505050506040513d6020811015613e1457600080fd5b50515b15613e2157600080fd5b60408084015181517f60c6ccb2000000000000000000000000000000000000000000000000000000008152600160a060020a03918216600482015267ffffffffffffffff881660248201529151908616916360c6ccb291604480830192600092919082900301818387803b158015613e9857600080fd5b505af1158015613eac573d6000803e3d6000fd5b5050506040808501519051879250600091600160a060020a031690600080516020614046833981519152908390a45050505050565b60408051610100810182526000808252602082018190529181018290526060808201526080810182905260a0810182905260c0810182905260e081019190915290565b60c0604051908101604052806006906020820280388339509192915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613fb257805160ff1916838001178555613fdf565b82800160010185558215613fdf579182015b82811115613fdf578251825591602001919060010190613fc4565b506117f892915061402b565b50805460018160011615610100020316600290046000825580601f106140115750612119565b601f01602090049060005260206000209081019061211991905b611ec291905b808211156117f857600081556001016140315600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582089a567cea9b3bb8422cf1b9a2493b8775bc1007b0c9f0a20c9626c790722f9b60029

   Swarm Source:
bzzr://89a567cea9b3bb8422cf1b9a2493b8775bc1007b0c9f0a20c9626c790722f9b6

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.