Contract 0x16ecc82b4E3e5Ff5A4dB8510ED191282A37639B0

 

Contract Overview

Etheremon: Transform 3
Balance:
0 Ether

EtherValue:
$0.00

Token:
Ad
Crypto.com
Txn Hash Method
Block
From
To
Value
0x1255bb3fb9545f361130243d67cc1a31c940f979ffdd2484cea7339d0e0b8449Lay Egg126698222021-06-20 7:11:143 days 4 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.0021567410
0xd6dbc5895e301c77d4b371bc56a8328c490695461f0c8bcb2872c7fb5d2c5642Hatch Egg126655312021-06-19 15:08:553 days 20 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.00615435613
0xabc8bbff68b1456f1b64b429b0465d0d84f613585a67a4d9b995deacc762f829Lay Egg126506932021-06-17 7:44:566 days 3 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.0024982810
0x6da2cf4798114e2422c39627b2a334879d26d860cec8d41a45c206d312333e83Hatch Egg126287022021-06-13 22:03:309 days 13 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.00638282713.5
0xa9f96cb37f86511443bd7d67918d7afddd18ceddc3a95376875622c7a2f9609dTransform126264342021-06-13 13:35:129 days 21 hrs ago0xe3b35e018c8270e335009fb05adc56cccdf453ce IN  Etheremon: Transform 30 Ether0.0036662787
0xf00282c15c789e9401a9c9850930e9ce3da1411ddb1061329697cb3269f1a2bbLay Egg126091512021-06-10 21:14:0112 days 14 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.00298692814
0x87aa5bbd7c21a2a044da5f7253c8219e080af8c13d4e1bff57f929ec9512b07aHatch Egg126091082021-06-10 21:02:0012 days 14 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.00613849613
0xb9375d49636aeede9519ba616cdee2beae97df8dd0ba40a9876c37d4101ecf42Hatch Egg126020002021-06-09 18:45:4013 days 16 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.00071600617
0xbf1544af5991d1d09c57d6a9615fc269b63857c77525e02d93e00ff0b765f637Lay Egg125819912021-06-06 16:22:2616 days 19 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.00346502814
0x2274818ad46be145788ab430085cf3e971bfb468b77fdcb38138ca26a58f6a95Hatch Egg125819782021-06-06 16:19:5116 days 19 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.0073302315
0xdd8724cf924fb33a31168d4ee2d4429e2cd2bddc3e309d042111d585a45b3f36Lay Egg125532122021-06-02 5:44:2921 days 5 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.00524638821
0xa69fb14ffa1b4b02d375bbbc5db5e1e83eca08d7915bb91c5b4f74e03172a649Hatch Egg125302452021-05-29 16:08:4324 days 19 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.01645798280735.090001764
0xa3a656d2110908a81604c04fc4864a3ec68a934969e3f3903726af6c4325cd59Lay Egg125245542021-05-28 19:01:4925 days 16 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.00110778834
0x0663653a0c6a03b5f36233da0058755e271343236bb4c30dfc358f68c167c114Lay Egg125205652021-05-28 4:08:1626 days 7 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.00101004231
0xd5be046dacd77a87ee0a35ea2ab49c501115fa028d09bfcad969749febc547c2Lay Egg125149972021-05-27 7:11:0327 days 4 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.000824324625.3
0x26174a9e2279fd530afe37dc6d5267eb8a98d939b9dc543a2ae54e4d65dcf673Lay Egg125148742021-05-27 6:41:2527 days 4 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.000752644223.100000001
0x0eb174fd651754e2181ef36421812e8aa3554c491d303f1696ccbc49906defdbLay Egg125148532021-05-27 6:37:4927 days 4 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.000767306123.55
0x042009ec132d58ca47fece6e6c13e993f701c9463a49319893c431d3ffb272e6Hatch Egg125147502021-05-27 6:12:1827 days 5 hrs ago0x4451752cf1cccb75f660b6e93e027333fbeb88e4 IN  Etheremon: Transform 30 Ether0.00878198753923.57947691
0xd2759a55556d1041494bda1df9a97b32ea1f02ea2132c5953a81af11f4efabc8Lay Egg125147302021-05-27 6:07:1827 days 5 hrs ago0x4451752cf1cccb75f660b6e93e027333fbeb88e4 IN  Etheremon: Transform 30 Ether0.0007706403923.652335347
0x8ec8ecd52ca3a9f141ccc2ef17328eb401013b715e38ad43cedd40a29c5ab947Lay Egg124559902021-05-18 3:34:0336 days 7 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.01121525652
0xff767bbd91df3cdef2dffa0e5ea4d09ee19929555194aedc4f3f5d299e6bbaa2Hatch Egg124448742021-05-16 10:14:5538 days 1 hr ago0xa363e7b75817c7adac54903eba9c0c1819553bdc IN  Etheremon: Transform 30 Ether0.0183128445
0x1c628caa7080bcacd4d82cb7b673fc9fd4f9ecc17c9c1abc70a9668411c55901Remove Hatching ...124426532021-05-16 1:46:3138 days 9 hrs ago0x7bae63c4dbd39ec66669a1ef6e1cf6f747b71bdd IN  Etheremon: Transform 30 Ether0.022596675355.1
0x3a58e334f17fac619088cc2f78a4c22adbe17cc5fe109863057c4b07910c9068Lay Egg124426052021-05-16 1:36:1038 days 9 hrs ago0x7bae63c4dbd39ec66669a1ef6e1cf6f747b71bdd IN  Etheremon: Transform 30 Ether0.012962247860.1
0x6c92613dddf83183d62c90ba6a5810f712da84e8a399cc8a3f034f055f490fbbLay Egg124241902021-05-13 5:36:1541 days 5 hrs ago0x1b2cc339ba159aee644045b83b1cfe5511b27a5a IN  Etheremon: Transform 30 Ether0.012180636102
0x014ef94925d3657774628f0073a1620f2b37b82b85a128e5a3c138585e629688Lay Egg123841882021-05-07 1:21:1047 days 10 hrs ago0x4451752cf1cccb75f660b6e93e027333fbeb88e4 IN  Etheremon: Transform 30 Ether0.00143360804744.000001459
[ Download CSV Export 
Latest 6 internal transactions
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtheremonTransform

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-08-28
*/

pragma solidity ^0.4.16;

// copyright [email protected]

contract SafeMath {

    /* function assert(bool assertion) internal { */
    /*   if (!assertion) { */
    /*     throw; */
    /*   } */
    /* }      // assert no longer needed once solidity is on 0.4.10 */

    function safeAdd(uint256 x, uint256 y) pure internal returns(uint256) {
      uint256 z = x + y;
      assert((z >= x) && (z >= y));
      return z;
    }

    function safeSubtract(uint256 x, uint256 y) pure internal returns(uint256) {
      assert(x >= y);
      uint256 z = x - y;
      return z;
    }

    function safeMult(uint256 x, uint256 y) pure internal returns(uint256) {
      uint256 z = x * y;
      assert((x == 0)||(z/x == y));
      return z;
    }

}

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

    function BasicAccessControl() 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,
        ERROR_OBJ_NOT_FOUND,
        ERROR_OBJ_INVALID_OWNERSHIP
    }
    
    enum ArrayType {
        CLASS_TYPE,
        STAT_STEP,
        STAT_START,
        STAT_BASE,
        OBJ_SKILL
    }
    
    enum PropertyType {
        ANCESTOR,
        XFACTOR
    }
}

contract EtheremonDataBase is EtheremonEnum, BasicAccessControl {
    
    uint64 public totalMonster;
    uint32 public totalClass;
    
    // write
    function decreaseMonsterExp(uint64 _objId, uint32 amount) external;
    
    // read
    function getSizeArrayType(ArrayType _type, uint64 _id) constant public returns(uint);
    function getElementInArrayType(ArrayType _type, uint64 _id, uint _index) constant public returns(uint8);
    function getMonsterClass(uint32 _classId) constant public returns(uint32 classId, uint256 price, uint256 returnPrice, uint32 total, bool catchable);
    function getMonsterObj(uint64 _objId) constant public returns(uint64 objId, uint32 classId, address trainer, uint32 exp, uint32 createIndex, uint32 lastClaimIndex, uint createTime);
    function getMonsterName(uint64 _objId) constant public returns(string name);
    function getExtraBalance(address _trainer) constant public returns(uint256);
    function getMonsterDexSize(address _trainer) constant public returns(uint);
    function getMonsterObjId(address _trainer, uint index) constant public returns(uint64);
    function getExpectedBalance(address _trainer) constant public returns(uint256);
    function getMonsterReturn(uint64 _objId) constant public returns(uint256 current, uint256 total);
}

contract EtheremonTransformData {
    uint64 public totalEgg = 0;
    function getHatchingEggId(address _trainer) constant external returns(uint64);
    function getHatchingEggData(address _trainer) constant external returns(uint64, uint64, uint32, address, uint, uint64);
    function getTranformedId(uint64 _objId) constant external returns(uint64);
    function countEgg(uint64 _objId) constant external returns(uint);
    
    function setHatchTime(uint64 _eggId, uint _hatchTime) external;
    function setHatchedEgg(uint64 _eggId, uint64 _newObjId) external;
    function addEgg(uint64 _objId, uint32 _classId, address _trainer, uint _hatchTime) external returns(uint64);
    function setTranformed(uint64 _objId, uint64 _newObjId) external;
}

contract EtheremonWorld {
    function getGen0COnfig(uint32 _classId) constant public returns(uint32, uint256, uint32);
    function getTrainerEarn(address _trainer) constant public returns(uint256);
    function getReturnFromMonster(uint64 _objId) constant public returns(uint256 current, uint256 total);
    function getClassPropertyValue(uint32 _classId, EtheremonEnum.PropertyType _type, uint index) constant external returns(uint32);
    function getClassPropertySize(uint32 _classId, EtheremonEnum.PropertyType _type) constant external returns(uint);
}

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

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

interface EtheremonMonsterNFTInterface {
    function mintMonster(uint32 _classId, address _trainer, string _name) external returns(uint);
    function burnMonster(uint64 _tokenId) external;
}

interface EtheremonTransformSettingInterface {
    function getRandomClassId(uint _seed) constant external returns(uint32);
    function getLayEggInfo(uint32 _classId) constant external returns(uint8 layingLevel, uint8 layingCost);
    function getTransformInfo(uint32 _classId) constant external returns(uint32 transformClassId, uint8 level);
    function getClassTransformInfo(uint32 _classId) constant external returns(uint8 layingLevel, uint8 layingCost, uint8 transformLevel, uint32 transformCLassId);
}

contract EtheremonTransform is EtheremonEnum, BasicAccessControl, SafeMath {
    uint8 constant public STAT_COUNT = 6;
    uint8 constant public STAT_MAX = 32;
    uint8 constant public GEN0_NO = 24;

    struct MonsterObjAcc {
        uint64 monsterId;
        uint32 classId;
        address trainer;
        string name;
        uint32 exp;
        uint32 createIndex;
        uint32 lastClaimIndex;
        uint createTime;
    }
    
    struct MonsterEgg {
        uint64 eggId;
        uint64 objId;
        uint32 classId;
        address trainer;
        uint hatchTime;
        uint64 newObjId;
    }
    
    struct BasicObjInfo {
        uint32 classId;
        address owner;
        uint8 level;
        uint32 exp;
    }
    
    // Gen0 has return price & no longer can be caught when this contract is deployed
    struct Gen0Config {
        uint32 classId;
        uint256 originalPrice;
        uint256 returnPrice;
        uint32 total; // total caught (not count those from eggs)
    }
    
    // hatching range
    uint public hatchStartTime = 2; // hour
    uint public hatchMaxTime = 46; // hour
    uint public removeHatchingTimeFee = 0.05 ether; // ETH
    uint public buyEggFee = 0.09 ether; // ETH

    mapping(uint8 => uint32) public levelExps;
    mapping(uint32 => Gen0Config) public gen0Config;
    
    // linked smart contract
    address public dataContract;
    address public worldContract;
    address public transformDataContract;
    address public transformSettingContract;
    address public battleContract;
    address public tradeContract;
    address public monsterNFTContract;
    
    // events
    event EventLayEgg(address indexed trainer, uint objId, uint eggId);
    event EventHatchEgg(address indexed trainer, uint eggId, uint objId);
    event EventTransform(address indexed trainer, uint oldObjId, uint newObjId);
    
    // constructor
    function EtheremonTransform(address _dataContract, address _worldContract, address _transformDataContract, address _transformSettingContract,
        address _battleContract, address _tradeContract, address _monsterNFTContract) public {
        dataContract = _dataContract;
        worldContract = _worldContract;
        transformDataContract = _transformDataContract;
        transformSettingContract = _transformSettingContract;
        battleContract = _battleContract;
        tradeContract = _tradeContract;
        monsterNFTContract = _monsterNFTContract;
    }
    
    // helper
    function getRandom(address _player, uint _block, uint64 _count) constant public returns(uint) {
        return uint(keccak256(block.blockhash(_block), _player, _count));
    }
    
    // admin & moderators
    function setContract(address _dataContract, address _worldContract, address _transformDataContract, address _transformSettingContract,
        address _battleContract, address _tradeContract, address _monsterNFTContract) onlyModerators external {
        dataContract = _dataContract;
        worldContract = _worldContract;
        transformDataContract = _transformDataContract;
        transformSettingContract = _transformSettingContract;
        battleContract = _battleContract;
        tradeContract = _tradeContract;
        monsterNFTContract = _monsterNFTContract;
    }

    function setOriginalPriceGen0() onlyModerators external {
        gen0Config[1] = Gen0Config(1, 0.3 ether, 0.003 ether, 374);
        gen0Config[2] = Gen0Config(2, 0.3 ether, 0.003 ether, 408);
        gen0Config[3] = Gen0Config(3, 0.3 ether, 0.003 ether, 373);
        gen0Config[4] = Gen0Config(4, 0.2 ether, 0.002 ether, 437);
        gen0Config[5] = Gen0Config(5, 0.1 ether, 0.001 ether, 497);
        gen0Config[6] = Gen0Config(6, 0.3 ether, 0.003 ether, 380); 
        gen0Config[7] = Gen0Config(7, 0.2 ether, 0.002 ether, 345);
        gen0Config[8] = Gen0Config(8, 0.1 ether, 0.001 ether, 518); 
        gen0Config[9] = Gen0Config(9, 0.1 ether, 0.001 ether, 447);
        gen0Config[10] = Gen0Config(10, 0.2 ether, 0.002 ether, 380); 
        gen0Config[11] = Gen0Config(11, 0.2 ether, 0.002 ether, 354);
        gen0Config[12] = Gen0Config(12, 0.2 ether, 0.002 ether, 346);
        gen0Config[13] = Gen0Config(13, 0.2 ether, 0.002 ether, 351); 
        gen0Config[14] = Gen0Config(14, 0.2 ether, 0.002 ether, 338);
        gen0Config[15] = Gen0Config(15, 0.2 ether, 0.002 ether, 341);
        gen0Config[16] = Gen0Config(16, 0.35 ether, 0.0035 ether, 384);
        gen0Config[17] = Gen0Config(17, 1 ether, 0.01 ether, 305); 
        gen0Config[18] = Gen0Config(18, 0.1 ether, 0.001 ether, 427);
        gen0Config[19] = Gen0Config(19, 1 ether, 0.01 ether, 304);
        gen0Config[20] = Gen0Config(20, 0.4 ether, 0.05 ether, 82);
        gen0Config[21] = Gen0Config(21, 1, 1, 123);
        gen0Config[22] = Gen0Config(22, 0.2 ether, 0.001 ether, 468);
        gen0Config[23] = Gen0Config(23, 0.5 ether, 0.0025 ether, 302);
        gen0Config[24] = Gen0Config(24, 1 ether, 0.005 ether, 195);
    } 

    function withdrawEther(address _sendTo, uint _amount) onlyModerators external {
        // no user money is kept in this contract, only trasaction fee
        if (_amount > this.balance) {
            revert();
        }
        _sendTo.transfer(_amount);
    }
    
    function setConfig(uint _removeHatchingTimeFee, uint _buyEggFee, uint _hatchStartTime, uint _hatchMaxTime) onlyModerators external {
        removeHatchingTimeFee = _removeHatchingTimeFee;
        buyEggFee = _buyEggFee;
        hatchStartTime = _hatchStartTime;
        hatchMaxTime = _hatchMaxTime;
    }

    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 removeHatchingTimeWithToken(address _trainer) isActive onlyModerators external {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        MonsterEgg memory egg;
        (egg.eggId, egg.objId, egg.classId, egg.trainer, egg.hatchTime, egg.newObjId) = transformData.getHatchingEggData(_trainer);
        // not hatching any egg
        if (egg.eggId == 0 || egg.trainer != _trainer || egg.newObjId > 0)
            revert();
        
        EtheremonMonsterNFTInterface monsterNFT = EtheremonMonsterNFTInterface(monsterNFTContract);
        uint objId = monsterNFT.mintMonster(egg.classId, egg.trainer, "..name me...");
        transformData.setHatchedEgg(egg.eggId, uint64(objId));
        EventHatchEgg(egg.trainer, egg.eggId, objId);
    }    
    
    function buyEggWithToken(address _trainer) isActive onlyModerators external {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        // make sure no hatching egg at the same time
        if (transformData.getHatchingEggId(_trainer) > 0) {
            revert();
        }

        // add random egg
        uint seed = getRandom(_trainer, block.number - 1, transformData.totalEgg());
        uint32 classId = EtheremonTransformSettingInterface(transformSettingContract).getRandomClassId(seed);
        if (classId == 0) revert();
        uint64 eggId = transformData.addEgg(0, classId, _trainer, block.timestamp + (hatchStartTime + seed % hatchMaxTime) * 3600);
        // deduct exp
        EventLayEgg(_trainer, 0, eggId);
    }
    
    // public

    function ceil(uint a, uint m) pure public returns (uint) {
        return ((a + m - 1) / m) * m;
    }

    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 getGen0ObjInfo(uint64 _objId) constant public returns(uint32, uint32, uint256) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
        
        Gen0Config memory gen0 = gen0Config[obj.classId];
        if (gen0.classId != obj.classId) {
            return (gen0.classId, obj.createIndex, 0);
        }
        
        uint32 totalGap = 0;
        if (obj.createIndex < gen0.total)
            totalGap = gen0.total - obj.createIndex;
        
        return (obj.classId, obj.createIndex, safeMult(totalGap, gen0.returnPrice));
    }
    
    function getObjClassExp(uint64 _objId) constant public returns(uint32, address, uint32) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
        return (obj.classId, obj.trainer, obj.exp);
    }
    
    function getClassCheckOwner(uint64 _objId, address _trainer) constant public returns(uint32) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        if (_trainer != obj.trainer)
            return 0;
        return obj.classId;
    }

    function calculateMaxEggG0(uint64 _objId) constant public returns(uint) {
        uint32 classId;
        uint32 createIndex; 
        uint256 totalEarn;
        (classId, createIndex, totalEarn) = getGen0ObjInfo(_objId);
        if (classId > GEN0_NO || classId == 20 || classId == 21)
            return 0;
        
        Gen0Config memory config = gen0Config[classId];
        // the one from egg can not lay
        if (createIndex > config.total)
            return 0;

        // calculate agv price
        uint256 avgPrice = config.originalPrice;
        uint rate = config.originalPrice/config.returnPrice;
        if (config.total > rate) {
            uint k = config.total - rate;
            avgPrice = (config.total * config.originalPrice + config.returnPrice * k * (k+1) / 2) / config.total;
        }
        uint256 catchPrice = config.originalPrice;            
        if (createIndex > rate) {
            catchPrice += config.returnPrice * safeSubtract(createIndex, rate);
        }
        if (totalEarn >= catchPrice) {
            return 0;
        }
        return ceil((catchPrice - totalEarn)*15*1000/avgPrice, 10000)/10000;
    }
    
    function layEgg(uint64 _objId) isActive external {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        // make sure no hatching egg at the same time
        if (transformData.getHatchingEggId(msg.sender) > 0) {
            revert();
        }
        
        // can not lay egg when trading
        if (EtheremonTradeInterface(tradeContract).isOnTrading(_objId))
            revert();
        
        // check obj 
        uint32 classId;
        address owner;
        uint32 exp;
        uint8 currentLevel;
        (classId, owner, exp) = getObjClassExp(_objId);
        currentLevel = getLevel(exp);
        if (classId == 0 || owner != msg.sender) {
            revert();
        }
        
        // check lay egg condition
        uint8 temp = 0;
        
        if (classId <= GEN0_NO) {
            // legends
            if (transformData.countEgg(_objId) >= calculateMaxEggG0(_objId))
                revert();
            temp = currentLevel;
        } else {
            uint8 layingLevel;
            (layingLevel, temp) = EtheremonTransformSettingInterface(transformSettingContract).getLayEggInfo(classId);
            if (layingLevel == 0 || currentLevel < layingLevel || currentLevel < temp)
                revert();
            temp = currentLevel - temp;
        }
        
        // add egg 
        uint seed = getRandom(msg.sender, block.number - 1, transformData.totalEgg());
        uint64 eggId = transformData.addEgg(_objId, classId, msg.sender, block.timestamp + (hatchStartTime + seed % hatchMaxTime) * 3600);
        
        // deduct exp 
        if (temp < currentLevel) {
            EtheremonDataBase data = EtheremonDataBase(dataContract);
            data.decreaseMonsterExp(_objId, exp - levelExps[temp-1]);
        }
        EventLayEgg(msg.sender, _objId, eggId);
    }
    
    function hatchEgg() isActive external {
        // use as a seed for random
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        MonsterEgg memory egg;
        (egg.eggId, egg.objId, egg.classId, egg.trainer, egg.hatchTime, egg.newObjId) = transformData.getHatchingEggData(msg.sender);
        // not hatching any egg
        if (egg.eggId == 0 || egg.trainer != msg.sender)
            revert();
        // need more time
        if (egg.newObjId > 0 || egg.hatchTime > block.timestamp) {
            revert();
        }
        
        EtheremonMonsterNFTInterface monsterNFT = EtheremonMonsterNFTInterface(monsterNFTContract);
        uint objId = monsterNFT.mintMonster(egg.classId, egg.trainer, "..name me...");
        transformData.setHatchedEgg(egg.eggId, uint64(objId));
        EventHatchEgg(egg.trainer, egg.eggId, objId);
    }
    
    function removeHatchingTime() isActive external payable  {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        MonsterEgg memory egg;
        (egg.eggId, egg.objId, egg.classId, egg.trainer, egg.hatchTime, egg.newObjId) = transformData.getHatchingEggData(msg.sender);
        // not hatching any egg
        if (egg.eggId == 0 || egg.trainer != msg.sender || egg.newObjId > 0)
            revert();
        
        if (msg.value != removeHatchingTimeFee) {
            revert();
        }
        
        EtheremonMonsterNFTInterface monsterNFT = EtheremonMonsterNFTInterface(monsterNFTContract);
        uint objId = monsterNFT.mintMonster(egg.classId, egg.trainer, "..name me...");
        transformData.setHatchedEgg(egg.eggId, uint64(objId));
        EventHatchEgg(egg.trainer, egg.eggId, objId);
    }

    
    function checkAncestors(uint32 _classId, address _trainer, uint64 _a1, uint64 _a2, uint64 _a3) constant public returns(bool) {
        EtheremonWorld world = EtheremonWorld(worldContract);
        uint index = 0;
        uint32 temp = 0;
        // check ancestor
        uint32[3] memory ancestors;
        uint32[3] memory requestAncestors;
        index = world.getClassPropertySize(_classId, PropertyType.ANCESTOR);
        while (index > 0) {
            index -= 1;
            ancestors[index] = world.getClassPropertyValue(_classId, PropertyType.ANCESTOR, index);
        }
            
        if (_a1 > 0) {
            temp = getClassCheckOwner(_a1, _trainer);
            if (temp == 0)
                return false;
            requestAncestors[0] = temp;
        }
        if (_a2 > 0) {
            temp = getClassCheckOwner(_a2, _trainer);
            if (temp == 0)
                return false;
            requestAncestors[1] = temp;
        }
        if (_a3 > 0) {
            temp = getClassCheckOwner(_a3, _trainer);
            if (temp == 0)
                return false;
            requestAncestors[2] = temp;
        }
            
        if (requestAncestors[0] > 0 && (requestAncestors[0] == requestAncestors[1] || requestAncestors[0] == requestAncestors[2]))
            return false;
        if (requestAncestors[1] > 0 && (requestAncestors[1] == requestAncestors[2]))
            return false;
                
        for (index = 0; index < ancestors.length; index++) {
            temp = ancestors[index];
            if (temp > 0 && temp != requestAncestors[0]  && temp != requestAncestors[1] && temp != requestAncestors[2])
                return false;
        }
        
        return true;
    }
    
    function transform(uint64 _objId, uint64 _a1, uint64 _a2, uint64 _a3) isActive external payable {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        if (transformData.getTranformedId(_objId) > 0)
            revert();
        
        EtheremonBattle battle = EtheremonBattle(battleContract);
        EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
        if (battle.isOnBattle(_objId) || trade.isOnTrading(_objId))
            revert();
        
        BasicObjInfo memory objInfo;
        (objInfo.classId, objInfo.owner, objInfo.exp) = getObjClassExp(_objId);
        objInfo.level = getLevel(objInfo.exp);
        if (objInfo.classId == 0 || objInfo.owner != msg.sender)
            revert();
        
        uint32 transformClass;
        uint8 transformLevel;
        (transformClass, transformLevel) = EtheremonTransformSettingInterface(transformSettingContract).getTransformInfo(objInfo.classId);
        if (transformClass == 0 || transformLevel == 0) revert();
        if (objInfo.level < transformLevel) revert();
        
        // gen0 - can not transform if it has bonus egg 
        if (objInfo.classId <= GEN0_NO) {
            // legends
            if (getBonusEgg(_objId) > 0)
                revert();
        } else {
            if (!checkAncestors(objInfo.classId, msg.sender, _a1, _a2, _a3))
                revert();
        }
        
        
        EtheremonMonsterNFTInterface monsterNFT = EtheremonMonsterNFTInterface(monsterNFTContract);
        uint newObjId = monsterNFT.mintMonster(transformClass, msg.sender, "..name me...");
        monsterNFT.burnMonster(_objId);

        transformData.setTranformed(_objId, uint64(newObjId));
        EventTransform(msg.sender, _objId, newObjId);
    }
    
    function buyEgg() isActive external payable {
        if (msg.value != buyEggFee) {
            revert();
        }
        
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        // make sure no hatching egg at the same time
        if (transformData.getHatchingEggId(msg.sender) > 0) {
            revert();
        }
        
        // add random egg
        uint seed = getRandom(msg.sender, block.number - 1, transformData.totalEgg());
        uint32 classId = EtheremonTransformSettingInterface(transformSettingContract).getRandomClassId(seed);
        if (classId == 0) revert();
        uint64 eggId = transformData.addEgg(0, classId, msg.sender, block.timestamp + (hatchStartTime + seed % hatchMaxTime) * 3600);
        // deduct exp
        EventLayEgg(msg.sender, 0, eggId);
    }
    
    // read
    function getBonusEgg(uint64 _objId) constant public returns(uint) {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        uint totalBonusEgg = calculateMaxEggG0(_objId);
        if (totalBonusEgg > 0) {
            return (totalBonusEgg - transformData.countEgg(_objId));
        }
        return 0;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"}],"name":"transform","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"dataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"gen0Config","outputs":[{"name":"classId","type":"uint32"},{"name":"originalPrice","type":"uint256"},{"name":"returnPrice","type":"uint256"},{"name":"total","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getObjClassExp","outputs":[{"name":"","type":"uint32"},{"name":"","type":"address"},{"name":"","type":"uint32"}],"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":true,"inputs":[],"name":"worldContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyEggFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hatchMaxTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"calculateMaxEggG0","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":"monsterNFTContract","outputs":[{"name":"","type":"address"}],"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":"_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":false,"inputs":[{"name":"_sendTo","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transformSettingContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_trainer","type":"address"}],"name":"buyEggWithToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setOriginalPriceGen0","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newModerator","type":"address"}],"name":"AddModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_NO","outputs":[{"name":"","type":"uint8"}],"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":"buyEgg","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"m","type":"uint256"}],"name":"ceil","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_transformDataContract","type":"address"},{"name":"_transformSettingContract","type":"address"},{"name":"_battleContract","type":"address"},{"name":"_tradeContract","type":"address"},{"name":"_monsterNFTContract","type":"address"}],"name":"setContract","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":"hatchStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transformDataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_player","type":"address"},{"name":"_block","type":"uint256"},{"name":"_count","type":"uint64"}],"name":"getRandom","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_classId","type":"uint32"},{"name":"_trainer","type":"address"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"}],"name":"checkAncestors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"removeHatchingTime","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_trainer","type":"address"}],"name":"removeHatchingTimeWithToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"removeHatchingTimeFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getBonusEgg","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"hatchEgg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getGen0ObjInfo","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","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":false,"inputs":[{"name":"_removeHatchingTimeFee","type":"uint256"},{"name":"_buyEggFee","type":"uint256"},{"name":"_hatchStartTime","type":"uint256"},{"name":"_hatchMaxTime","type":"uint256"}],"name":"setConfig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_trainer","type":"address"}],"name":"getClassCheckOwner","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"}],"name":"layEgg","outputs":[],"payable":false,"stateMutability":"nonpayable","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"},{"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_transformDataContract","type":"address"},{"name":"_transformSettingContract","type":"address"},{"name":"_battleContract","type":"address"},{"name":"_tradeContract","type":"address"},{"name":"_monsterNFTContract","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"trainer","type":"address"},{"indexed":false,"name":"objId","type":"uint256"},{"indexed":false,"name":"eggId","type":"uint256"}],"name":"EventLayEgg","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"trainer","type":"address"},{"indexed":false,"name":"eggId","type":"uint256"},{"indexed":false,"name":"objId","type":"uint256"}],"name":"EventHatchEgg","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"trainer","type":"address"},{"indexed":false,"name":"oldObjId","type":"uint256"},{"indexed":false,"name":"newObjId","type":"uint256"}],"name":"EventTransform","type":"event"}]

60606040526000805460a060020a61ffff02191690556002805460ff19168155600355602e60045566b1a2bc2ec5000060055567013fbe85edc90000600655341561004957600080fd5b60405160e0806141c98339810160405280805191906020018051919060200180519190602001805191906020018051919060200180519190602001805160008054600160a060020a03338116600160a060020a031992831617909255600980549b83169b82169b909b17909a55600a8054998216998b1699909917909855600b8054978916978a16979097179096555050600c805493861693871693909317909255600d8054918516918616919091179055600e8054918416918516919091179055600f805492909116919092161790556140a0806101296000396000f30060606040526004361061020b5763ffffffff60e060020a600035041663085f8ebb81146102105780630d668818146102395780630daf4151146102685780630f75c82e146102b557806314d0f1ba1461030b578063187584801461033e5780631dbb986714610351578063217b97e4146103765780632f6a6e201461038957806333ced321146103a95780633dd287d4146103bc578063423b1ca3146103cf57806348ef5aa8146103e25780634e3dc2f1146103fa5780634efb023e14610423578063522f68151461044d57806354f47be71461046f5780635b86ce971461048257806366ba2670146104a15780636c81fd6d146104b457806373d65c00146104d357806378b475a8146104e65780637d635502146105185780638587be6e146105205780638a9ba931146105395780638da5cb5b1461057c57806392c537e91461058f57806393cc6d85146105a25780639b945097146105b55780639bd7d688146105e4578063a3c07c6a14610625578063a3cb3e971461062d578063a4d5e30e1461064c578063afd61d2c1461065f578063b2cad9b71461067f578063b85d62751461069b578063ca9c4b33146106ba578063d2fb32c2146106cd578063d98e14bd14610717578063e5c389cd1461072a578063e98f402c14610749578063eb14367d14610775578063ee4e441614610795578063f2853292146107a8578063ffa640d8146107c7575b600080fd5b61023767ffffffffffffffff600435811690602435811690604435811690606435166107da565b005b341561024457600080fd5b61024c610cd7565b604051600160a060020a03909116815260200160405180910390f35b341561027357600080fd5b61028463ffffffff60043516610ce6565b60405163ffffffff948516815260208101939093526040808401929092529092166060820152608001905180910390f35b34156102c057600080fd5b6102d567ffffffffffffffff60043516610d15565b60405163ffffffff9384168152600160a060020a0390921660208301529091166040808301919091526060909101905180910390f35b341561031657600080fd5b61032a600160a060020a0360043516610e20565b604051901515815260200160405180910390f35b341561034957600080fd5b61024c610e35565b341561035c57600080fd5b610364610e44565b60405190815260200160405180910390f35b341561038157600080fd5b610364610e4a565b341561039457600080fd5b61036467ffffffffffffffff60043516610e50565b34156103b457600080fd5b61023761101b565b34156103c757600080fd5b61024c6110c9565b34156103da57600080fd5b61024c6110d8565b34156103ed57600080fd5b61023760043515156110e7565b341561040557600080fd5b61040d611115565b60405160ff909116815260200160405180910390f35b341561042e57600080fd5b61043661111a565b60405161ffff909116815260200160405180910390f35b341561045857600080fd5b610237600160a060020a036004351660243561113c565b341561047a57600080fd5b61024c6111ce565b341561048d57600080fd5b610237600160a060020a03600435166111dd565b34156104ac57600080fd5b6102376114bf565b34156104bf57600080fd5b610237600160a060020a0360043516612589565b34156104de57600080fd5b61040d612633565b34156104f157600080fd5b6104ff60ff60043516612638565b60405163ffffffff909116815260200160405180910390f35b610237612650565b341561052b57600080fd5b6103646004356024356128d9565b341561054457600080fd5b610237600160a060020a0360043581169060243581169060443581169060643581169060843581169060a43581169060c435166128f5565b341561058757600080fd5b61024c6129c6565b341561059a57600080fd5b6103646129d5565b34156105ad57600080fd5b61024c6129db565b34156105c057600080fd5b610364600160a060020a036004351660243567ffffffffffffffff604435166129ea565b34156105ef57600080fd5b61032a63ffffffff60043516600160a060020a036024351667ffffffffffffffff60443581169060643581169060843516612a54565b610237612dc1565b341561063857600080fd5b610237600160a060020a0360043516613097565b341561065757600080fd5b6103646133a6565b341561066a57600080fd5b61036467ffffffffffffffff600435166133ac565b341561068a57600080fd5b61040d63ffffffff60043516613458565b34156106a657600080fd5b610237600160a060020a03600435166134bb565b34156106c557600080fd5b610237613565565b34156106d857600080fd5b6106ed67ffffffffffffffff600435166136bb565b60405163ffffffff9384168152919092166020820152604080820192909252606001905180910390f35b341561072257600080fd5b61040d6138a1565b341561073557600080fd5b6102376004356024356044356064356138a6565b341561075457600080fd5b6104ff67ffffffffffffffff60043516600160a060020a0360243516613900565b341561078057600080fd5b61023767ffffffffffffffff60043516613a11565b34156107a057600080fd5b61032a613ee4565b34156107b357600080fd5b610237600160a060020a0360043516613eed565b34156107d257600080fd5b61024c613f44565b60008060006107e7613f92565b60025460009081908190819060ff161561080057600080fd5b600b54600160a060020a0316975060008863fd7d79488e836040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b151561085e57600080fd5b6102c65a03f1151561086f57600080fd5b5050506040518051905067ffffffffffffffff16111561088e57600080fd5b600d54600e54600160a060020a039182169850169550866335f097f38d60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b15156108f357600080fd5b6102c65a03f1151561090457600080fd5b5050506040518051905080610988575085600160a060020a031663a847a71c8d60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b151561096c57600080fd5b6102c65a03f1151561097d57600080fd5b505050604051805190505b1561099257600080fd5b61099b8c610d15565b63ffffffff90811660608901908152600160a060020a0390921660208901529190911686526109ca9051613458565b60ff166040860152845163ffffffff1615806109fc575033600160a060020a03168560200151600160a060020a031614155b15610a0657600080fd5b600c54600160a060020a031663e8679512865160006040516040015260405163ffffffff83811660e060020a0282529190911660048201526024016040805180830381600087803b1515610a5957600080fd5b6102c65a03f11515610a6a57600080fd5b50505060405180519060200180519195509093505063ffffffff84161580610a93575060ff8316155b15610a9d57600080fd5b8260ff16856040015160ff161015610ab457600080fd5b6018855163ffffffff1611610ade576000610ace8d6133ac565b1115610ad957600080fd5b610af7565b610aec8551338d8d8d612a54565b1515610af757600080fd5b600f54600160a060020a0316915081630963d4b7853360006040516020015260405163ffffffff84811660e060020a028252929092166004830152600160a060020a0316602482015260606044820152600c60648201527f2e2e6e616d65206d652e2e2e0000000000000000000000000000000000000000608482015260a401602060405180830381600087803b1515610b9057600080fd5b6102c65a03f11515610ba157600080fd5b5050506040518051915050600160a060020a0382166381b230428d60405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1515610bfb57600080fd5b6102c65a03f11515610c0c57600080fd5b50505087600160a060020a03166354b670578d8360405160e060020a63ffffffff851602815267ffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1515610c6657600080fd5b6102c65a03f11515610c7757600080fd5b50505033600160a060020a03167f5b37de5d4b6cf3f52fe00ba7b9a2ca6bffc9501f341f008ef3cb0e4a3aa7eaad8d8360405167ffffffffffffffff909216825260208201526040908101905180910390a2505050505050505050505050565b600954600160a060020a031681565b600860205260009081526040902080546001820154600283015460039093015463ffffffff9283169391921684565b600080600080610d23613fb9565b600954600160a060020a0316915081630720246087600060405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b1515610d8057600080fd5b6102c65a03f11515610d9157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a039091166040850152166020830190815267ffffffffffffffff9091168252518160400151826080015194509450945050509193909250565b60016020526000908152604090205460ff1681565b600a54600160a060020a031681565b60065481565b60045481565b600080600080610e5e613f92565b600080600080610e6d8a6136bb565b91995097509550601863ffffffff89161180610e8f57508763ffffffff166014145b80610ea057508763ffffffff166015145b15610eae576000985061100e565b63ffffffff88166000908152600860205260409081902090608090519081016040908152825463ffffffff908116835260018401546020840152600284015491830191909152600390920154909116606082019081529095505163ffffffff168763ffffffff161115610f24576000985061100e565b8460200151935084604001518560200151811515610f3e57fe5b04925082856060015163ffffffff161115610fa45782856060015163ffffffff16039150846060015163ffffffff166002836001018488604001510202811515610f8457fe5b048660200151876060015163ffffffff160201811515610fa057fe5b0493505b84602001519050828763ffffffff161115610fd157610fc98763ffffffff1684613f53565b856040015102015b808610610fe1576000985061100e565b61271061100185613a9889850302811515610ff857fe5b046127106128d9565b81151561100a57fe5b0498505b5050505050505050919050565b600080548190819033600160a060020a039081169116148061105b5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561106657600080fd5b506001915060649050805b606460ff8416116110c45760ff83166000908152600760205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050611071565b505050565b600f54600160a060020a031681565b600d54600160a060020a031681565b60005433600160a060020a0390811691161461110257600080fd5b6002805460ff1916911515919091179055565b602081565b60005474010000000000000000000000000000000000000000900461ffff1681565b60005433600160a060020a03908116911614806111775750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561118257600080fd5b30600160a060020a03163181111561119957600080fd5b600160a060020a03821681156108fc0282604051600060405180830381858888f1935050505015156111ca57600080fd5b5050565b600c54600160a060020a031681565b60025460009081908190819060ff16156111f657600080fd5b60005433600160a060020a03908116911614806112315750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561123c57600080fd5b600b54600160a060020a0316935060008463aeb669eb87836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561129957600080fd5b6102c65a03f115156112aa57600080fd5b5050506040518051905067ffffffffffffffff1611156112c957600080fd5b611337856001430386600160a060020a031663fdb4dbe06000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561131757600080fd5b6102c65a03f1151561132857600080fd5b505050604051805190506129ea565b600c54909350600160a060020a0316634cd3745d8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561138b57600080fd5b6102c65a03f1151561139c57600080fd5b505050604051805192505063ffffffff821615156113b957600080fd5b83600160a060020a0316630bc954dc60008488600454888115156113d957fe5b0660035401610e1002420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b151561144d57600080fd5b6102c65a03f1151561145e57600080fd5b5050506040518051915050600160a060020a0385167f3c3333d9f85107cb0696d2fe51b5060309ca58fa67419084a4159f1f0c76056c60008360405191825267ffffffffffffffff1660208201526040908101905180910390a25050505050565b60005433600160a060020a03908116911614806114fa5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561150557600080fd5b608060405190810160409081526001808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101766060840152600052600890527fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526002808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101986060840152600052600890527f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea90418151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526003808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101756060840152600052600890527f625b35f5e76f098dd7c3a05b10e2e5e78a4a01228d60c3b143426cdf36d264558151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260048083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101b56060840152600052600890527f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624b88151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600580835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101f16060840152600052600890527f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdb8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526006808352670429d069189e0000602080850191909152660aa87bee5380009284019290925261017c6060840152600052600890527f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc58151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260078083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101596060840152600052600890527f24cd397636bedc6cf9b490d0edd57c769c19b367fb7d5c2344ae1ddc7d21c1448151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600880835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526102066060840152600081905290527fe4c2e8be66af8dd2d277000f4f830a10546f8b14e45cd850b875c98ba0f0d2cd8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600980835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101bf6060840152600052600890527f82c9e868e45873bb5a4f47c09e14a12f6a6314e13aabd611e4374762bb4e8b368151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600a8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261017c6060840152600052600890527f586689db7536874b78a6eac0f58556a56a106985743f7c16a699b27bb02f88bd8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600b8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101626060840152600052600890527fcb250a1a60f48f70f08c912424f39071fd9a8b7099a72dffd251fce0294f37498151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600c8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015a6060840152600052600890527faba08fc86a199da17c4b45fa0fb586714474d27e5e1f0220658b6275561b2e188151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600d8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015f6060840152600052600890527f9006e1a1959cda25aa0dba7b7a958efb843c4c8cb81a2c2fb8637a074e0818f28151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600e8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101526060840152600052600890527fb6457486547dfd0925a66a479476c3a3e54935ea6192a908abe6bd58ec247b418151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600f8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101556060840152600052600890527f8fab3b3b6d3bf24f9b00213fe8dda2fb1e188fcd88f523fcb711ff1f6aed59e38151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260108083526704db732547630000602080850191909152660c6f3b40b6c000928401929092526101806060840152600052600890527fdf6cae10d416b4d6f459eba806bebc4b85f190dfac647ab7cb4cd2638815444c8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526011808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101316060840152600052600890527fbb47c685b7a6169f9415fd073108f8b7da3e741b7dde8513850bca404684fa978151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601280835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101ab6060840152600052600890527f24c3f2390203786f976c5d43dee94e7a42ec7bdf845f67695ebd67f3c39c18148151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526013808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101306060840152600052600890527f1dfebf40b0462aa6ee8060c248d0caec9e679d370b76490bfe8441dbbab052168151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601480835267058d15e17628000060208085019190915266b1a2bc2ec500009284019290925260526060840152600052600890527fbb1110247bce6eaaf3cb168d5660645ab99866afefe1e7c6fa4388014157e5ba8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260158083526001602080850182905292840152607b6060840152600052600890527fb29f796e1978e2043677a1f0396c8f9106e30db6bae4734a9de4f7fffa6f3fb88151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260168083526702c68af0bb14000060208085019190915266038d7ea4c68000928401929092526101d46060840152600052600890527fe34c1268cf989e507da6d357c2274f08fc653db420491bb916dfda9e5c93bd558151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260178083526706f05b59d3b200006020808501919091526608e1bc9bf040009284019290925261012e6060840152600052600890527f69dd648f27f59b1ee254e03cc0e7f3101ebd5768b9ab5a13693b554f528fc0c58151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526018808352670de0b6b3a76400006020808501919091526611c37937e080009284019290925260c36060840152600052600890527f83ba890607818823e46eb1e5ed8f7282277ac60de8c863727688b48d92a8da6d8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550565b60005433600160a060020a039081169116146125a457600080fd5b600160a060020a03811660009081526001602052604090205460ff16151561263057600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b601881565b60076020526000908152604090205463ffffffff1681565b60025460009081908190819060ff161561266957600080fd5b600654341461267757600080fd5b600b54600160a060020a0316935060008463aeb669eb33836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156126d457600080fd5b6102c65a03f115156126e557600080fd5b5050506040518051905067ffffffffffffffff16111561270457600080fd5b612752336001430386600160a060020a031663fdb4dbe06000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561131757600080fd5b600c54909350600160a060020a0316634cd3745d8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156127a657600080fd5b6102c65a03f115156127b757600080fd5b505050604051805192505063ffffffff821615156127d457600080fd5b83600160a060020a0316630bc954dc60008433600454888115156127f457fe5b0660035401610e1002420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b151561286857600080fd5b6102c65a03f1151561287957600080fd5b5050506040518051915050600160a060020a0333167f3c3333d9f85107cb0696d2fe51b5060309ca58fa67419084a4159f1f0c76056c60008360405191825267ffffffffffffffff1660208201526040908101905180910390a250505050565b600081826001848601038115156128ec57fe5b04029392505050565b60005433600160a060020a03908116911614806129305750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561293b57600080fd5b6009805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03998a1617909155600a8054821697891697909717909655600b8054871695881695909517909455600c8054861693871693909317909255600d80548516918616919091179055600e80548416918516919091179055600f80549092169216919091179055565b600054600160a060020a031681565b60035481565b600b54600160a060020a031681565b600082408483604051928352600160a060020a03919091166c0100000000000000000000000002602083015267ffffffffffffffff167801000000000000000000000000000000000000000000000000026034820152603c01604051908190039020949350505050565b600080600080612a62614005565b612a6a614005565b600a54600160a060020a0316945060009350839250846388e9abb68c8580604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff168152602001826001811115612ac357fe5b60ff16815260200192505050602060405180830381600087803b1515612ae857600080fd5b6102c65a03f11515612af957600080fd5b50505060405180519450505b6000841115612bcc5760018403935084600160a060020a0316635b6263398c6000876000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff168152602001836001811115612b6457fe5b60ff1681526020018281526020019350505050602060405180830381600087803b1515612b9057600080fd5b6102c65a03f11515612ba157600080fd5b50505060405180519050828560038110612bb757fe5b63ffffffff9092166020929092020152612b05565b60008967ffffffffffffffff161115612c0b57612be9898b613900565b925063ffffffff83161515612c015760009550612db3565b63ffffffff831681525b60008867ffffffffffffffff161115612c4d57612c28888b613900565b925063ffffffff83161515612c405760009550612db3565b63ffffffff831660208201525b60008767ffffffffffffffff161115612c8f57612c6a878b613900565b925063ffffffff83161515612c825760009550612db3565b63ffffffff831660408201525b6000815163ffffffff16118015612cd05750602081015163ffffffff16815163ffffffff161480612cd05750604081015163ffffffff16815163ffffffff16145b15612cde5760009550612db3565b6000602082015163ffffffff16118015612d0b5750604081015163ffffffff16602082015163ffffffff16145b15612d195760009550612db3565b600093505b6003841015612dae57818460038110612d3357fe5b6020020151925060008363ffffffff16118015612d5d5750805163ffffffff168363ffffffff1614155b8015612d795750602081015163ffffffff168363ffffffff1614155b8015612d955750604081015163ffffffff168363ffffffff1614155b15612da35760009550612db3565b600190930192612d1e565b600195505b505050505095945050505050565b6000612dcb61402d565b600254600090819060ff1615612de057600080fd5b600b54600160a060020a031693508363710ad12833600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b1515612e3c57600080fd5b6102c65a03f11515612e4d57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a08b015260808a019290925250600160a060020a03909116606088015263ffffffff90911660408701529081166020860152168352825167ffffffffffffffff161580612ee3575033600160a060020a03168360600151600160a060020a031614155b80612efc575060008360a0015167ffffffffffffffff16115b15612f0657600080fd5b6005543414612f1457600080fd5b600f54600160a060020a0316915081630963d4b76040850151856060015160006040516020015260405163ffffffff84811660e060020a028252929092166004830152600160a060020a0316602482015260606044820152600c60648201527f2e2e6e616d65206d652e2e2e0000000000000000000000000000000000000000608482015260a401602060405180830381600087803b1515612fb557600080fd5b6102c65a03f11515612fc657600080fd5b5050506040518051915050600160a060020a0384166337bd186884518360405160e060020a63ffffffff851602815267ffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b151561302957600080fd5b6102c65a03f1151561303a57600080fd5b5050508260600151600160a060020a03167f484eebcfa9cf8e34a4eefdfeaeced0cb795d3fcc1fa8ae1c8380dc3553a1e22e84518360405167ffffffffffffffff909216825260208201526040908101905180910390a250505050565b60006130a161402d565b600254600090819060ff16156130b657600080fd5b60005433600160a060020a03908116911614806130f15750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156130fc57600080fd5b600b54600160a060020a031693508363710ad12886600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b151561315857600080fd5b6102c65a03f1151561316957600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a08b015260808a019290925250600160a060020a03909116606088015263ffffffff90911660408701529081166020860152168352825167ffffffffffffffff1615806131ff575084600160a060020a03168360600151600160a060020a031614155b80613218575060008360a0015167ffffffffffffffff16115b1561322257600080fd5b600f54600160a060020a0316915081630963d4b76040850151856060015160006040516020015260405163ffffffff84811660e060020a028252929092166004830152600160a060020a0316602482015260606044820152600c60648201527f2e2e6e616d65206d652e2e2e0000000000000000000000000000000000000000608482015260a401602060405180830381600087803b15156132c357600080fd5b6102c65a03f115156132d457600080fd5b5050506040518051915050600160a060020a0384166337bd186884518360405160e060020a63ffffffff851602815267ffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b151561333757600080fd5b6102c65a03f1151561334857600080fd5b5050508260600151600160a060020a03167f484eebcfa9cf8e34a4eefdfeaeced0cb795d3fcc1fa8ae1c8380dc3553a1e22e84518360405167ffffffffffffffff909216825260208201526040908101905180910390a25050505050565b60055481565b600b54600090600160a060020a0316816133c584610e50565b9050600081111561344c5781600160a060020a031663ec0ba0068560006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b151561342857600080fd5b6102c65a03f1151561343957600080fd5b5050506040518051905081039250613451565b600092505b5050919050565b600060016064825b8160ff168360ff1610156134b257600260ff848401160460ff811660009081526007602052604090205490915063ffffffff90811690861610156134a6578091506134ad565b8060010192505b613460565b50909392505050565b60005433600160a060020a039081169116146134d657600080fd5b600160a060020a03811660009081526001602081905260409091205460ff161515141561263057600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b600061356f61402d565b600254600090819060ff161561358457600080fd5b600b54600160a060020a031693508363710ad12833600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b15156135e057600080fd5b6102c65a03f115156135f157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a08b015260808a019290925250600160a060020a03909116606088015263ffffffff90911660408701529081166020860152168352825167ffffffffffffffff161580613687575033600160a060020a03168360600151600160a060020a031614155b1561369157600080fd5b60008360a0015167ffffffffffffffff1611806136b15750428360800151115b15612f1457600080fd5b6000806000806136c9613fb9565b6136d1613f92565b600954600160a060020a031692506000836307202460898360405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b151561372f57600080fd5b6102c65a03f1151561374057600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08b01525063ffffffff90811660c08a015290811660a08901529081166080880152600160a060020a039091166040870152166020850190815267ffffffffffffffff90911684526008906000905163ffffffff1663ffffffff16815260200190815260200160002060806040519081016040908152825463ffffffff908116835260018401546020808501919091526002850154928401929092526003909301549092166060820152925083015163ffffffff16825163ffffffff16146138445781518360a00151909750955060009450613896565b506000606082015163ffffffff168360a0015163ffffffff161015613871578260a0015182606001510390505b82602001518360a0015161388f8363ffffffff168560400151613f67565b9650965096505b505050509193909250565b600681565b60005433600160a060020a03908116911614806138e15750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156138ec57600080fd5b600593909355600691909155600355600455565b60008061390b613fb9565b600954600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b151561396957600080fd5b6102c65a03f1151561397a57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a03909216604087019081529216602086015267ffffffffffffffff909216845290915051600160a060020a03868116911614613a005760009350613a08565b816020015193505b50505092915050565b600080600080600080600080600080600260009054906101000a900460ff16151515613a3c57600080fd5b600b54600160a060020a0316995060008a63aeb669eb33836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515613a9957600080fd5b6102c65a03f11515613aaa57600080fd5b5050506040518051905067ffffffffffffffff161115613ac957600080fd5b600e54600160a060020a031663a847a71c8c60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b1515613b2357600080fd5b6102c65a03f11515613b3457600080fd5b5050506040518051905015613b4857600080fd5b613b518b610d15565b919a5098509650613b6187613458565b955063ffffffff89161580613b88575033600160a060020a031688600160a060020a031614155b15613b9257600080fd5b60009450601863ffffffff8a1611613c3457613bad8b610e50565b8a600160a060020a031663ec0ba0068d60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b1515613c0557600080fd5b6102c65a03f11515613c1657600080fd5b50505060405180519050101515613c2c57600080fd5b859450613cdf565b600c54600160a060020a031663e94b6aef8a60006040516040015260405163ffffffff83811660e060020a0282529190911660048201526024016040805180830381600087803b1515613c8657600080fd5b6102c65a03f11515613c9757600080fd5b505050604051805190602001805196509094505060ff84161580613cc057508360ff168660ff16105b80613cd057508460ff168660ff16105b15613cda57600080fd5b938503935b613d2d33600143038c600160a060020a031663fdb4dbe06000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561131757600080fd5b925089600160a060020a0316630bc954dc8c8b3360045488811515613d4e57fe5b0660035401610e1002420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b1515613dc257600080fd5b6102c65a03f11515613dd357600080fd5b5050506040518051905091508560ff168560ff161015613e86575060095460ff6000198601166000908152600760205260409081902054600160a060020a039092169182916331afa55f918e9163ffffffff9091168b03905163ffffffff84811660e060020a02825267ffffffffffffffff93909316600482015291166024820152604401600060405180830381600087803b1515613e7157600080fd5b6102c65a03f11515613e8257600080fd5b5050505b33600160a060020a03167f3c3333d9f85107cb0696d2fe51b5060309ca58fa67419084a4159f1f0c76056c8c8460405167ffffffffffffffff9283168152911660208201526040908101905180910390a25050505050505050505050565b60025460ff1681565b60005433600160a060020a03908116911614613f0857600080fd5b600160a060020a038116156126305760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b600e54600160a060020a031681565b60008082841015613f6057fe5b5050900390565b6000828202831580613f835750828482811515613f8057fe5b04145b1515613f8b57fe5b9392505050565b60806040519081016040908152600080835260208301819052908201819052606082015290565b61010060405190810160409081526000808352602083018190529082015260608101613fe3614062565b8152600060208201819052604082018190526060820181905260809091015290565b60606040519081016040526003815b6000815260001990910190602001816140145790505090565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b602060405190810160405260008152905600a165627a7a723058200df28e24a3b4d6911d0a59e949dbca661dbfba03cb13c02724709ddedc9e37470029000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6000000000000000000000000fdf4411669fc6e8951a6ae987307d7582fda7a050000000000000000000000000c3865a8f6678cae495a60240700840204a4e604000000000000000000000000022c635044ba01ced1e098bc32e62a954147f2de0000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe470300000000000000000000000005d00d312e171be5342067c09bae883f9bcb2003b

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

000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6000000000000000000000000fdf4411669fc6e8951a6ae987307d7582fda7a050000000000000000000000000c3865a8f6678cae495a60240700840204a4e604000000000000000000000000022c635044ba01ced1e098bc32e62a954147f2de0000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe470300000000000000000000000005d00d312e171be5342067c09bae883f9bcb2003b

-----Decoded View---------------
Arg [0] : _dataContract (address): 0xabc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : _worldContract (address): 0x1fc7bd85293f3982f40d52698df8d26be89360d6
Arg [2] : _transformDataContract (address): 0xfdf4411669fc6e8951a6ae987307d7582fda7a05
Arg [3] : _transformSettingContract (address): 0x0c3865a8f6678cae495a60240700840204a4e604
Arg [4] : _battleContract (address): 0x022c635044ba01ced1e098bc32e62a954147f2de
Arg [5] : _tradeContract (address): 0x4ba72f0f8dad13709ee28a992869e79d0fe47030
Arg [6] : _monsterNFTContract (address): 0x5d00d312e171be5342067c09bae883f9bcb2003b

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : 0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6
Arg [2] : 000000000000000000000000fdf4411669fc6e8951a6ae987307d7582fda7a05
Arg [3] : 0000000000000000000000000c3865a8f6678cae495a60240700840204a4e604
Arg [4] : 000000000000000000000000022c635044ba01ced1e098bc32e62a954147f2de
Arg [5] : 0000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe47030
Arg [6] : 0000000000000000000000005d00d312e171be5342067c09bae883f9bcb2003b


Swarm Source

bzzr://0df28e24a3b4d6911d0a59e949dbca661dbfba03cb13c02724709ddedc9e3747
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.