ETH Price: $3,357.94 (-7.35%)
Gas: 29 Gwei

Contract

0x4bA72F0F8DAd13709EE28a992869E79d0fE47030
 
Transaction Hash
Method
Block
From
To
Value
Place Sell Order127143072021-06-27 5:41:20996 days ago1624772480IN
Etheremon: Trade 1
0 ETH0.000109464
Place Sell Order74968582019-04-03 18:27:361811 days ago1554316056IN
Etheremon: Trade 1
0 ETH0.000097164
Place Sell Order69477202018-12-25 2:19:011911 days ago1545704341IN
Etheremon: Trade 1
0 ETH0.000024291
Withdraw Ether64681922018-10-07 4:17:501990 days ago1538885870IN
Etheremon: Trade 1
0 ETH0.0004210813
Place Sell Order64636182018-10-06 10:31:471990 days ago1538821907IN
Etheremon: Trade 1
0 ETH0.000048582
Place Sell Order64614972018-10-06 2:22:361991 days ago1538792556IN
Etheremon: Trade 1
0 ETH0.000026711.1
Place Sell Order64608612018-10-05 23:58:121991 days ago1538783892IN
Etheremon: Trade 1
0 ETH0.000077723.2
Get Back Lending...64605452018-10-05 22:46:291991 days ago1538779589IN
Etheremon: Trade 1
0 ETH0.000002290.1
Buy Item64603702018-10-05 22:06:101991 days ago1538777170IN
Etheremon: Trade 1
0.006 ETH0.00002391
Place Sell Order64603622018-10-05 22:03:451991 days ago1538777025IN
Etheremon: Trade 1
0 ETH0.000002420.1
Place Sell Order64601062018-10-05 21:01:381991 days ago1538773298IN
Etheremon: Trade 1
0 ETH0.000097164
Place Sell Order64600582018-10-05 20:50:031991 days ago1538772603IN
Etheremon: Trade 1
0 ETH0.00009694
Place Sell Order64600582018-10-05 20:50:031991 days ago1538772603IN
Etheremon: Trade 1
0 ETH0.00009694
Place Sell Order64600582018-10-05 20:50:031991 days ago1538772603IN
Etheremon: Trade 1
0 ETH0.000121135
Place Sell Order64600582018-10-05 20:50:031991 days ago1538772603IN
Etheremon: Trade 1
0 ETH0.00009694
Place Sell Order64600562018-10-05 20:49:531991 days ago1538772593IN
Etheremon: Trade 1
0 ETH0.00009694
Place Sell Order64600512018-10-05 20:48:451991 days ago1538772525IN
Etheremon: Trade 1
0 ETH0.000097164
Place Sell Order64600402018-10-05 20:45:591991 days ago1538772359IN
Etheremon: Trade 1
0 ETH0.000097164
Place Sell Order64595892018-10-05 18:55:351991 days ago1538765735IN
Etheremon: Trade 1
0 ETH0.000024221
Place Sell Order64593602018-10-05 17:57:231991 days ago1538762243IN
Etheremon: Trade 1
0 ETH0.000024291
Borrow Item64586202018-10-05 15:00:421991 days ago1538751642IN
Etheremon: Trade 1
0.0001 ETH0.000023891
Borrow Item64582182018-10-05 13:27:071991 days ago1538746027IN
Etheremon: Trade 1
0.0001 ETH0.000023891
Remove Sell Orde...63822702018-09-23 3:02:012004 days ago1537671721IN
Etheremon: Trade 1
0 ETH0.000071563
Place Sell Order63654452018-09-20 8:15:122006 days ago1537431312IN
Etheremon: Trade 1
0 ETH0.000024221
Offer Borrowing ...63512002018-09-17 23:41:312009 days ago1537227691IN
Etheremon: Trade 1
0 ETH0.000023851
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Txn Hash Block From To Value
64681922018-10-07 4:17:501990 days ago1538885870
Etheremon: Trade 1
0.4926394 ETH
62380392018-08-30 1:56:202028 days ago1535594180
Etheremon: Trade 1
0.08415 ETH
62380192018-08-30 1:52:112028 days ago1535593931
Etheremon: Trade 1
0.07821 ETH
62380152018-08-30 1:50:522028 days ago1535593852
Etheremon: Trade 1
0.04455 ETH
62368142018-08-29 21:04:442028 days ago1535576684
Etheremon: Trade 1
0.07425 ETH
62368142018-08-29 21:04:442028 days ago1535576684
Etheremon: Trade 1
0.07425 ETH
62365952018-08-29 20:07:212028 days ago1535573241
Etheremon: Trade 1
0.06831 ETH
62355782018-08-29 16:12:202028 days ago1535559140
Etheremon: Trade 1
0.06831 ETH
62351202018-08-29 14:23:032028 days ago1535552583
Etheremon: Trade 1
0.07722 ETH
62351152018-08-29 14:21:102028 days ago1535552470
Etheremon: Trade 1
0.03861 ETH
62336272018-08-29 8:08:072028 days ago1535530087
Etheremon: Trade 1
0.061875 ETH
62336112018-08-29 8:02:282028 days ago1535529748
Etheremon: Trade 1
0.060885 ETH
62336032018-08-29 8:00:562029 days ago1535529656
Etheremon: Trade 1
0.068211 ETH
62336022018-08-29 8:00:442029 days ago1535529644
Etheremon: Trade 1
0.07425 ETH
62335992018-08-29 8:00:262029 days ago1535529626
Etheremon: Trade 1
0.07425 ETH
62335992018-08-29 8:00:262029 days ago1535529626
Etheremon: Trade 1
0.06336 ETH
62335922018-08-29 7:57:582029 days ago1535529478
Etheremon: Trade 1
0.0792 ETH
62332352018-08-29 6:35:472029 days ago1535524547
Etheremon: Trade 1
0.04851 ETH
62332312018-08-29 6:34:562029 days ago1535524496
Etheremon: Trade 1
0.05445 ETH
62332272018-08-29 6:33:482029 days ago1535524428
Etheremon: Trade 1
0.04455 ETH
62330032018-08-29 5:35:072029 days ago1535520907
Etheremon: Trade 1
0.06435 ETH
62328632018-08-29 5:00:432029 days ago1535518843
Etheremon: Trade 1
0.06534 ETH
62320572018-08-29 1:40:552029 days ago1535506855
Etheremon: Trade 1
0.00198 ETH
62314292018-08-28 23:12:192029 days ago1535497939
Etheremon: Trade 1
0.06831 ETH
62314142018-08-28 23:09:432029 days ago1535497783
Etheremon: Trade 1
0.08415 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtheremonTrade

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-01-21
*/

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 = true;

    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
    }
}

contract EtheremonDataBase is EtheremonEnum, BasicAccessControl, SafeMath {
    
    uint64 public totalMonster;
    uint32 public totalClass;
    
    // write
    function addElementToArrayType(ArrayType _type, uint64 _id, uint8 _value) onlyModerators public returns(uint);
    function removeElementOfArrayType(ArrayType _type, uint64 _id, uint8 _value) onlyModerators public returns(uint);
    function setMonsterClass(uint32 _classId, uint256 _price, uint256 _returnPrice, bool _catchable) onlyModerators public returns(uint32);
    function addMonsterObj(uint32 _classId, address _trainer, string _name) onlyModerators public returns(uint64);
    function setMonsterObj(uint64 _objId, string _name, uint32 _exp, uint32 _createIndex, uint32 _lastClaimIndex) onlyModerators public;
    function increaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public;
    function decreaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public;
    function removeMonsterIdMapping(address _trainer, uint64 _monsterId) onlyModerators public;
    function addMonsterIdMapping(address _trainer, uint64 _monsterId) onlyModerators public;
    function clearMonsterReturnBalance(uint64 _monsterId) onlyModerators public returns(uint256 amount);
    function collectAllReturnBalance(address _trainer) onlyModerators public returns(uint256 amount);
    function transferMonster(address _from, address _to, uint64 _monsterId) onlyModerators public returns(ResultCode);
    function addExtraBalance(address _trainer, uint256 _amount) onlyModerators public returns(uint256);
    function deductExtraBalance(address _trainer, uint256 _amount) onlyModerators public returns(uint256);
    function setExtraBalance(address _trainer, uint256 _amount) onlyModerators public;
    
    // 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);
}

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

contract EtheremonTrade is EtheremonEnum, BasicAccessControl, SafeMath {
    
    uint8 constant public GEN0_NO = 24;

    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;
    }
    
    // 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)
    }
    
    struct BorrowItem {
        uint index;
        address owner;
        address borrower;
        uint256 price;
        bool lent;
        uint releaseTime;
    }
    
    struct SellingItem {
        uint index;
        uint256 price;
    }
    
    struct SoldItem {
        uint64 objId;
        uint256 price;
        uint time;
    }
    
    // data contract
    address public dataContract;
    address public battleContract;
    mapping(uint32 => Gen0Config) public gen0Config;
    
    // for selling
    mapping(uint64 => SellingItem) public sellingDict;
    uint32 public totalSellingItem;
    uint64[] public sellingList;
    
    // for borrowing
    mapping(uint64 => BorrowItem) public borrowingDict;
    uint32 public totalBorrowingItem;
    uint64[] public borrowingList;
    
    mapping(address => uint64[]) public lendingList;
    mapping(address => SoldItem[]) public soldList;
    
    // trading fee
    uint16 public tradingFeePercentage = 1;
    uint8 public maxLendingItem = 10;
    
    modifier requireDataContract {
        require(dataContract != address(0));
        _;
    }
    
    modifier requireBattleContract {
        require(battleContract != address(0));
        _;
    }
    
    // event
    event EventPlaceSellOrder(address indexed seller, uint64 objId);
    event EventBuyItem(address indexed buyer, uint64 objId);
    event EventOfferBorrowingItem(address indexed lender, uint64 objId);
    event EventAcceptBorrowItem(address indexed borrower, uint64 objId);
    event EventGetBackItem(address indexed owner, uint64 objId);
    event EventFreeTransferItem(address indexed sender, address indexed receiver, uint64 objId);
    event EventRelease(address indexed trainer, uint64 objId);
    
    // constructor
    function EtheremonTrade(address _dataContract, address _battleContract) public {
        dataContract = _dataContract;
        battleContract = _battleContract;
    }
    
     // admin & moderators
    function setOriginalPriceGen0() onlyModerators public {
        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 setContract(address _dataContract, address _battleContract) onlyModerators public {
        dataContract = _dataContract;
        battleContract = _battleContract;
    }
    
    function updateConfig(uint16 _fee, uint8 _maxLendingItem) onlyModerators public {
        tradingFeePercentage = _fee;
        maxLendingItem = _maxLendingItem;
    }
    
    function withdrawEther(address _sendTo, uint _amount) onlyModerators public {
        // no user money is kept in this contract, only trasaction fee
        if (_amount > this.balance) {
            revert();
        }
        _sendTo.transfer(_amount);
    }
    
    
    // helper
    function removeSellingItem(uint64 _itemId) private {
        SellingItem storage item = sellingDict[_itemId];
        if (item.index == 0)
            return;
        
        if (item.index <= sellingList.length) {
            // Move an existing element into the vacated key slot.
            sellingDict[sellingList[sellingList.length-1]].index = item.index;
            sellingList[item.index-1] = sellingList[sellingList.length-1];
            sellingList.length -= 1;
            delete sellingDict[_itemId];
        }
    }
    
    function addSellingItem(uint64 _itemId, uint256 _price) private {
        SellingItem storage item = sellingDict[_itemId];
        item.price = _price;
        
        if (item.index == 0) {
            item.index = ++sellingList.length;
            sellingList[item.index - 1] = _itemId;
        }
    }

    function removeBorrowingItem(uint64 _itemId) private {
        BorrowItem storage item = borrowingDict[_itemId];
        if (item.index == 0)
            return;
        
        if (item.index <= borrowingList.length) {
            // Move an existing element into the vacated key slot.
            borrowingDict[borrowingList[borrowingList.length-1]].index = item.index;
            borrowingList[item.index-1] = borrowingList[borrowingList.length-1];
            borrowingList.length -= 1;
            delete borrowingDict[_itemId];
        }
    }

    function addBorrowingItem(address _owner, uint64 _itemId, uint256 _price, uint _releaseTime) private {
        BorrowItem storage item = borrowingDict[_itemId];
        item.owner = _owner;
        item.borrower = address(0);
        item.price = _price;
        item.lent = false;
        item.releaseTime = _releaseTime;
        
        if (item.index == 0) {
            item.index = ++borrowingList.length;
            borrowingList[item.index - 1] = _itemId;
        }
    }
    
    function transferMonster(address _to, uint64 _objId) private {
        EtheremonDataBase data = EtheremonDataBase(dataContract);

        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);

        // clear balance for gen 0
        if (obj.classId <= GEN0_NO) {
            Gen0Config storage gen0 = gen0Config[obj.classId];
            if (gen0.classId == obj.classId) {
                if (obj.lastClaimIndex < gen0.total) {
                    uint32 gap = uint32(safeSubtract(gen0.total, obj.lastClaimIndex));
                    if (gap > 0) {
                        data.addExtraBalance(obj.trainer, safeMult(gap, gen0.returnPrice));
                        // reset total (accept name is cleared :( )
                        data.setMonsterObj(obj.monsterId, " name me ", obj.exp, obj.createIndex, gen0.total);
                    }
                }
            }
        }
        
        // transfer owner
        data.removeMonsterIdMapping(obj.trainer, _objId);
        data.addMonsterIdMapping(_to, _objId);
    }
    
    function addItemLendingList(address _trainer, uint64 _objId) private {
        if (_trainer != address(0)) {
            uint64[] storage objList = lendingList[_trainer];
            for (uint index = 0; index < objList.length; index++) {
                if (objList[index] == _objId) {
                    return;
                }
            }
            objList.push(_objId);
        }
    }
    
    function removeItemLendingList(address _trainer, uint64 _objId) private {
        uint foundIndex = 0;
        uint64[] storage objList = lendingList[_trainer];
        for (; foundIndex < objList.length; foundIndex++) {
            if (objList[foundIndex] == _objId) {
                break;
            }
        }
        if (foundIndex < objList.length) {
            objList[foundIndex] = objList[objList.length-1];
            delete objList[objList.length-1];
            objList.length--;
        }
    }
    
    // public
    function placeSellOrder(uint64 _objId, uint256 _price) requireDataContract requireBattleContract isActive external {
        if (_price == 0)
            revert();
        // not on borrowing
        BorrowItem storage item = borrowingDict[_objId];
        if (item.index > 0)
            revert();
        // not on battle 
        EtheremonBattleInterface battle = EtheremonBattleInterface(battleContract);
        if (battle.isOnBattle(_objId))
            revert();
        
        // check ownership
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        
        if (obj.monsterId != _objId) {
            revert();
        }
        
        if (obj.trainer != msg.sender) {
            revert();
        }
        
        // on selling, then just update price
        if (sellingDict[_objId].index > 0){
            sellingDict[_objId].price = _price;
        } else {
            addSellingItem(_objId, _price);
        }
        EventPlaceSellOrder(msg.sender, _objId);
    }
    
    function removeSellOrder(uint64 _objId) requireDataContract requireBattleContract isActive external {
        if (sellingDict[_objId].index == 0)
            revert();
        
        // check ownership
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        
        if (obj.monsterId != _objId) {
            revert();
        }
        
        if (obj.trainer != msg.sender) {
            revert();
        }
        
        removeSellingItem(_objId);
    }
    
    function buyItem(uint64 _objId) requireDataContract requireBattleContract isActive external payable {
        // check item is valid to sell 
        uint256 requestPrice = sellingDict[_objId].price;
        if (requestPrice == 0 || msg.value != requestPrice) {
            revert();
        }
        
        // check obj
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        if (obj.monsterId != _objId) {
            revert();
        }
        // can not buy from yourself
        if (obj.trainer == msg.sender) {
            revert();
        }
        
        address oldTrainer = obj.trainer;
        uint256 fee = requestPrice * tradingFeePercentage / 100;
        removeSellingItem(_objId);
        transferMonster(msg.sender, _objId);
        oldTrainer.transfer(safeSubtract(requestPrice, fee));
        
        SoldItem memory soldItem = SoldItem(_objId, requestPrice, block.timestamp);
        soldList[oldTrainer].push(soldItem);
        EventBuyItem(msg.sender, _objId);
    }
    
    function offerBorrowingItem(uint64 _objId, uint256 _price, uint _releaseTime) requireDataContract requireBattleContract isActive external {
        // make sure it is not on sale 
        if (sellingDict[_objId].price > 0 || _price == 0)
            revert();
        // not on lent
        BorrowItem storage item = borrowingDict[_objId];
        if (item.lent == true)
            revert();
        // not on battle 
        EtheremonBattleInterface battle = EtheremonBattleInterface(battleContract);
        if (battle.isOnBattle(_objId))
            revert();
        
        
        // check ownership
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        
        if (obj.monsterId != _objId) {
            revert();
        }
        
        if (obj.trainer != msg.sender) {
            revert();
        }
        
        if (item.index > 0) {
            // update info 
            item.price = _price;
            item.releaseTime = _releaseTime;
        } else {
            addBorrowingItem(msg.sender, _objId, _price, _releaseTime);
        }
        EventOfferBorrowingItem(msg.sender, _objId);
    }
    
    function removeBorrowingOfferItem(uint64 _objId) requireDataContract requireBattleContract isActive external {
        BorrowItem storage item = borrowingDict[_objId];
        if (item.index == 0)
            revert();
        
        if (item.owner != msg.sender)
            revert();
        if (item.lent == true)
            revert();
        
        removeBorrowingItem(_objId);
    }
    
    function borrowItem(uint64 _objId) requireDataContract requireBattleContract isActive external payable {
        BorrowItem storage item = borrowingDict[_objId];
        if (item.index == 0)
            revert();
        if (item.lent == true)
            revert();
        uint256 itemPrice = item.price;
        if (itemPrice != msg.value)
            revert();
        

        // check obj
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        if (obj.monsterId != _objId) {
            revert();
        }
        // can not borrow from yourself
        if (obj.trainer == msg.sender) {
            revert();
        }
        
        uint256 fee = itemPrice * tradingFeePercentage / 100;
        item.borrower = msg.sender;
        item.releaseTime += block.timestamp;
        item.lent = true;
        address oldOwner = obj.trainer;
        transferMonster(msg.sender, _objId);
        oldOwner.transfer(safeSubtract(itemPrice, fee));
        addItemLendingList(oldOwner, _objId);
        EventAcceptBorrowItem(msg.sender, _objId);
    }
    
    function getBackLendingItem(uint64 _objId) requireDataContract requireBattleContract isActive external {
        BorrowItem storage item = borrowingDict[_objId];
        if (item.index == 0)
            revert();
        if (item.lent == false)
            revert();
        if (item.releaseTime > block.timestamp)
            revert();
        
        if (msg.sender != item.owner)
            revert();
        
        removeBorrowingItem(_objId);
        transferMonster(msg.sender, _objId);
        removeItemLendingList(msg.sender, _objId);
        EventGetBackItem(msg.sender, _objId);
    }
    
    function freeTransferItem(uint64 _objId, address _receiver) requireDataContract requireBattleContract external {
        // make sure it is not on sale 
        if (sellingDict[_objId].price > 0)
            revert();
        // not on borrowing
        BorrowItem storage item = borrowingDict[_objId];
        if (item.index > 0)
            revert();
        // not on battle 
        EtheremonBattleInterface battle = EtheremonBattleInterface(battleContract);
        if (battle.isOnBattle(_objId))
            revert();
        
        // check ownership
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        
        if (obj.monsterId != _objId) {
            revert();
        }
        
        if (obj.trainer != msg.sender) {
            revert();
        }
        
        transferMonster(_receiver, _objId);
        EventFreeTransferItem(msg.sender, _receiver, _objId);
    }
    
    function release(uint64 _objId) requireDataContract requireBattleContract external {
        // make sure it is not on sale 
        if (sellingDict[_objId].price > 0)
            revert();
        // not on borrowing
        BorrowItem storage item = borrowingDict[_objId];
        if (item.index > 0)
            revert();
        // not on battle 
        EtheremonBattleInterface battle = EtheremonBattleInterface(battleContract);
        if (battle.isOnBattle(_objId))
            revert();
        
        // check ownership
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        
        // can not release gen 0
        if (obj.classId <= GEN0_NO) {
            revert();
        }
        
        if (obj.monsterId != _objId) {
            revert();
        }
        
        if (obj.trainer != msg.sender) {
            revert();
        }
        
        data.removeMonsterIdMapping(msg.sender, _objId);
        EventRelease(msg.sender, _objId);
    }
    
    // read access
    
    function getBasicObjInfo(uint64 _objId) constant public returns(uint32, address, uint32, 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, obj.createIndex);
    }
    
    function getBasicObjInfoWithBp(uint64 _objId) constant public returns(uint32, uint32, uint32, uint64) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
        EtheremonBattleInterface battle = EtheremonBattleInterface(battleContract);
        uint64 bp = battle.getMonsterCP(_objId);
        return (obj.classId, obj.exp, obj.createIndex, bp);
    }
    
    function getTotalSellingItem() constant external returns(uint) {
        return sellingList.length;
    }

    function getSellingItem(uint _index) constant external returns(uint64 objId, uint32 classId, uint32 exp, uint64 bp, address trainer, uint createIndex, uint256 price) {
        objId = sellingList[_index];
        if (objId > 0) {
            (classId, trainer, exp, createIndex) = getBasicObjInfo(objId);
            EtheremonBattleInterface battle = EtheremonBattleInterface(battleContract);
            bp = battle.getMonsterCP(objId);
            price = sellingDict[objId].price;
        }
    }
    
    function getSellingItemByObjId(uint64 _objId) constant external returns(uint32 classId, uint32 exp, uint64 bp, address trainer, uint createIndex, uint256 price) {
        price = sellingDict[_objId].price;
        if (price > 0) {
            (classId, trainer, exp, createIndex) = getBasicObjInfo(_objId);
            EtheremonBattleInterface battle = EtheremonBattleInterface(battleContract);
            bp = battle.getMonsterCP(_objId);
        }
    }

    function getTotalBorrowingItem() constant external returns(uint) {
        return borrowingList.length;
    }

    function getBorrowingItem(uint _index) constant external returns(uint64 objId, address owner, address borrower, 
        uint256 price, bool lent, uint releaseTime, uint32 classId, uint32 exp, uint32 createIndex, uint64 bp) {
        objId = borrowingList[_index];
        BorrowItem storage item = borrowingDict[objId];
        owner = item.owner;
        borrower = item.borrower;
        price = item.price;
        lent = item.lent;
        releaseTime = item.releaseTime;
        
        (classId, exp, createIndex, bp) = getBasicObjInfoWithBp(objId);
    }
    
    function getBorrowingItemByObjId(uint64 _objId) constant external returns(uint index, address owner, address borrower, 
        uint256 price, bool lent, uint releaseTime, uint32 classId, uint32 exp, uint32 createIndex, uint64 bp) {
        BorrowItem storage item = borrowingDict[_objId];
        index = item.index;
        owner = item.owner;
        borrower = item.borrower;
        price = item.price;
        lent = item.lent;
        releaseTime = item.releaseTime;
        
        (classId, exp, createIndex, bp) = getBasicObjInfoWithBp(_objId);
    }
    
    function getSoldItemLength(address _trainer) constant external returns(uint) {
        return soldList[_trainer].length;
    }
    
    function getSoldItem(address _trainer, uint _index) constant external returns(uint64 objId, uint32 classId, uint32 exp, uint64 bp, address currentOwner, 
        uint createIndex, uint256 price, uint time) {
        if (_index > soldList[_trainer].length)
            return;
        SoldItem memory soldItem = soldList[_trainer][_index];
        objId = soldItem.objId;
        price = soldItem.price;
        time = soldItem.time;
        if (objId > 0) {
            (classId, currentOwner, exp, createIndex) = getBasicObjInfo(objId);
            EtheremonBattleInterface battle = EtheremonBattleInterface(battleContract);
            bp = battle.getMonsterCP(objId);
        }
    }
    
    function getLendingItemLength(address _trainer) constant external returns(uint) {
        return lendingList[_trainer].length;
    }
    
    function getLendingItemInfo(address _trainer, uint _index) constant external returns(uint64 objId, address owner, address borrower, 
        uint256 price, bool lent, uint releaseTime, uint32 classId, uint32 exp, uint32 createIndex, uint64 bp) {
        if (_index > lendingList[_trainer].length)
            return;
        objId = lendingList[_trainer][_index];
        BorrowItem storage item = borrowingDict[objId];
        owner = item.owner;
        borrower = item.borrower;
        price = item.price;
        lent = item.lent;
        releaseTime = item.releaseTime;
        
        (classId, exp, createIndex, bp) = getBasicObjInfoWithBp(objId);
    }
    
    function getTradingInfo(uint64 _objId) constant external returns(uint256 sellingPrice, uint256 lendingPrice, bool lent, uint releaseTime) {
        sellingPrice = sellingDict[_objId].price;
        BorrowItem storage item = borrowingDict[_objId];
        lendingPrice = item.price;
        lent = item.lent;
        releaseTime = item.releaseTime;
    }
    
    function isOnTrading(uint64 _objId) constant external returns(bool) {
        return (sellingDict[_objId].price > 0 || borrowingDict[_objId].owner != address(0));
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"getTotalBorrowingItem","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getTradingInfo","outputs":[{"name":"sellingPrice","type":"uint256"},{"name":"lendingPrice","type":"uint256"},{"name":"lent","type":"bool"},{"name":"releaseTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_receiver","type":"address"}],"name":"freeTransferItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint64"}],"name":"sellingDict","outputs":[{"name":"index","type":"uint256"},{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","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":"getSellingItemByObjId","outputs":[{"name":"classId","type":"uint32"},{"name":"exp","type":"uint32"},{"name":"bp","type":"uint64"},{"name":"trainer","type":"address"},{"name":"createIndex","type":"uint256"},{"name":"price","type":"uint256"}],"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":"maxLendingItem","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dataContract","type":"address"},{"name":"_battleContract","type":"address"}],"name":"setContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_price","type":"uint256"},{"name":"_releaseTime","type":"uint256"}],"name":"offerBorrowingItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_trainer","type":"address"}],"name":"getSoldItemLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"}],"name":"release","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"battleContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_trainer","type":"address"},{"name":"_index","type":"uint256"}],"name":"getSoldItem","outputs":[{"name":"objId","type":"uint64"},{"name":"classId","type":"uint32"},{"name":"exp","type":"uint32"},{"name":"bp","type":"uint64"},{"name":"currentOwner","type":"address"},{"name":"createIndex","type":"uint256"},{"name":"price","type":"uint256"},{"name":"time","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_isMaintaining","type":"bool"}],"name":"UpdateMaintaining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getBackLendingItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalModerators","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getBorrowingItemByObjId","outputs":[{"name":"index","type":"uint256"},{"name":"owner","type":"address"},{"name":"borrower","type":"address"},{"name":"price","type":"uint256"},{"name":"lent","type":"bool"},{"name":"releaseTime","type":"uint256"},{"name":"classId","type":"uint32"},{"name":"exp","type":"uint32"},{"name":"createIndex","type":"uint32"},{"name":"bp","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalBorrowingItem","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint64"}],"name":"borrowingDict","outputs":[{"name":"index","type":"uint256"},{"name":"owner","type":"address"},{"name":"borrower","type":"address"},{"name":"price","type":"uint256"},{"name":"lent","type":"bool"},{"name":"releaseTime","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":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getBasicObjInfo","outputs":[{"name":"","type":"uint32"},{"name":"","type":"address"},{"name":"","type":"uint32"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"}],"name":"removeBorrowingOfferItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalSellingItem","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":false,"inputs":[{"name":"_fee","type":"uint16"},{"name":"_maxLendingItem","type":"uint8"}],"name":"updateConfig","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":"_objId","type":"uint64"}],"name":"getBasicObjInfoWithBp","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getSellingItem","outputs":[{"name":"objId","type":"uint64"},{"name":"classId","type":"uint32"},{"name":"exp","type":"uint32"},{"name":"bp","type":"uint64"},{"name":"trainer","type":"address"},{"name":"createIndex","type":"uint256"},{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"sellingList","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"isOnTrading","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_trainer","type":"address"},{"name":"_index","type":"uint256"}],"name":"getLendingItemInfo","outputs":[{"name":"objId","type":"uint64"},{"name":"owner","type":"address"},{"name":"borrower","type":"address"},{"name":"price","type":"uint256"},{"name":"lent","type":"bool"},{"name":"releaseTime","type":"uint256"},{"name":"classId","type":"uint32"},{"name":"exp","type":"uint32"},{"name":"createIndex","type":"uint32"},{"name":"bp","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tradingFeePercentage","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"borrowingList","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_oldModerator","type":"address"}],"name":"RemoveModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"soldList","outputs":[{"name":"objId","type":"uint64"},{"name":"price","type":"uint256"},{"name":"time","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_price","type":"uint256"}],"name":"placeSellOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_trainer","type":"address"}],"name":"getLendingItemLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"}],"name":"buyItem","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalSellingItem","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"}],"name":"removeSellOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"lendingList","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"}],"name":"borrowItem","outputs":[],"payable":true,"stateMutability":"payable","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":"_index","type":"uint256"}],"name":"getBorrowingItem","outputs":[{"name":"objId","type":"uint64"},{"name":"owner","type":"address"},{"name":"borrower","type":"address"},{"name":"price","type":"uint256"},{"name":"lent","type":"bool"},{"name":"releaseTime","type":"uint256"},{"name":"classId","type":"uint32"},{"name":"exp","type":"uint32"},{"name":"createIndex","type":"uint32"},{"name":"bp","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_dataContract","type":"address"},{"name":"_battleContract","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"objId","type":"uint64"}],"name":"EventPlaceSellOrder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"objId","type":"uint64"}],"name":"EventBuyItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"lender","type":"address"},{"indexed":false,"name":"objId","type":"uint64"}],"name":"EventOfferBorrowingItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"borrower","type":"address"},{"indexed":false,"name":"objId","type":"uint64"}],"name":"EventAcceptBorrowItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"objId","type":"uint64"}],"name":"EventGetBackItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":true,"name":"receiver","type":"address"},{"indexed":false,"name":"objId","type":"uint64"}],"name":"EventFreeTransferItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"trainer","type":"address"},{"indexed":false,"name":"objId","type":"uint64"}],"name":"EventRelease","type":"event"}]

60606040526000805460a060020a61ffff02191690556002805460ff19166001908117909155600d805461ffff191690911762ff00001916620a0000179055341561004957600080fd5b604051604080614bd8833981016040528080519190602001805160008054600160a060020a03338116600160a060020a031992831617909255600280549683166101000261010060a860020a03199097169690961790955560038054919092169416939093179092555050614b15806100c36000396000f3006060604052600436106102365763ffffffff60e060020a600035041662203385811461023b57806304150e8f1461026057806306228e95146102ae5780630796f67c146102db5780630d668818146103125780630daf4151146103415780630e5aaffc1461038e57806314d0f1ba1461040257806326a4c847146104355780632bf6e0a51461045e5780633010f03c146104835780633462001b146104a857806341fbbc31146104c7578063423b1ca3146104e657806347ae73ee146104f957806348ef5aa81461057f5780634eb4fe80146105975780634efb023e146105b65780634f99a96e146105e05780634fdf64ce14610675578063517403f5146106a1578063522f681514610705578063554792fd146107275780635e6df25c14610781578063654470fc146107a057806366ba2670146107b35780636c81fd6d146107c657806370187a19146107e557806373d65c001461080557806376c29bf5146108185780638426a452146108725780638da5cb5b146108e4578063999ec0a0146108f7578063a847a71c14610929578063ad4e39f314610948578063b2356ad4146109e3578063b58c87ba146109f6578063b85d627514610a0c578063baaa73b514610a2b578063c2b303d014610a83578063c734375414610aa5578063d6f551e414610ac4578063d7c39cc614610ad8578063e16e0f8414610aeb578063e88dfc6714610b0a578063e9b6d67114610b2c578063ee4e441614610b40578063f285329214610b53578063faa5369d14610b72575b600080fd5b341561024657600080fd5b61024e610b88565b60405190815260200160405180910390f35b341561026b57600080fd5b61027f6001604060020a0360043516610b8f565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b34156102b957600080fd5b6102d96001604060020a0360043516600160a060020a0360243516610bd0565b005b34156102e657600080fd5b6102fa6001604060020a0360043516610e5c565b60405191825260208201526040908101905180910390f35b341561031d57600080fd5b610325610e75565b604051600160a060020a03909116815260200160405180910390f35b341561034c57600080fd5b61035d63ffffffff60043516610e89565b60405163ffffffff948516815260208101939093526040808401929092529092166060820152608001905180910390f35b341561039957600080fd5b6103ad6001604060020a0360043516610eb8565b60405163ffffffff96871681529490951660208501526001604060020a03909216604080850191909152600160a060020a039091166060840152608083019190915260a082019290925260c001905180910390f35b341561040d57600080fd5b610421600160a060020a0360043516610f82565b604051901515815260200160405180910390f35b341561044057600080fd5b610448610f97565b60405160ff909116815260200160405180910390f35b341561046957600080fd5b6102d9600160a060020a0360043581169060243516610fa6565b341561048e57600080fd5b6102d96001604060020a036004351660243560443561103e565b34156104b357600080fd5b61024e600160a060020a0360043516611304565b34156104d257600080fd5b6102d96001604060020a036004351661131f565b34156104f157600080fd5b610325611625565b341561050457600080fd5b61051b600160a060020a0360043516602435611634565b6040516001604060020a03988916815263ffffffff978816602082015295909616604080870191909152939096166060850152600160a060020a03909116608084015260a083015260c082019390935260e081019190915261010001905180910390f35b341561058a57600080fd5b6102d96004351515611798565b34156105a257600080fd5b6102d96001604060020a03600435166117c6565b34156105c157600080fd5b6105c96118db565b60405161ffff909116815260200160405180910390f35b34156105eb57600080fd5b6105ff6001604060020a03600435166118fd565b604051998a52600160a060020a0398891660208b0152969097166040808a01919091526060890195909552921515608088015260a087019190915263ffffffff90811660c087015290811660e08601529092166101008401526001604060020a0316610120830152610140909101905180910390f35b341561068057600080fd5b610688611976565b60405163ffffffff909116815260200160405180910390f35b34156106ac57600080fd5b6106c06001604060020a0360043516611982565b604051958652600160a060020a039485166020870152929093166040808601919091526060850191909152911515608084015260a083015260c0909101905180910390f35b341561071057600080fd5b6102d9600160a060020a03600435166024356119c8565b341561073257600080fd5b6107466001604060020a0360043516611a5a565b60405163ffffffff9485168152600160a060020a03909316602084015290831660408084019190915292166060820152608001905180910390f35b341561078c57600080fd5b6102d96001604060020a0360043516611b71565b34156107ab57600080fd5b61024e611c1a565b34156107be57600080fd5b6102d9611c20565b34156107d157600080fd5b6102d9600160a060020a0360043516612cea565b34156107f057600080fd5b6102d961ffff6004351660ff60243516612d94565b341561081057600080fd5b610448612e07565b341561082357600080fd5b6108376001604060020a0360043516612e0c565b60405163ffffffff9485168152928416602084015292166040808301919091526001604060020a039092166060820152608001905180910390f35b341561087d57600080fd5b610888600435612f9d565b6040516001604060020a03978816815263ffffffff968716602082015294909516604080860191909152929095166060840152600160a060020a0316608083015260a082019390935260c081019190915260e001905180910390f35b34156108ef57600080fd5b6103256130b3565b341561090257600080fd5b61090d6004356130c2565b6040516001604060020a03909116815260200160405180910390f35b341561093457600080fd5b6104216001604060020a03600435166130fd565b341561095357600080fd5b61096a600160a060020a0360043516602435613150565b6040516001604060020a039a8b168152600160a060020a03998a166020820152979098166040808901919091526060880196909652931515608087015260a086019290925263ffffffff90811660c086015290811660e08501521661010083015291909216610120830152610140909101905180910390f35b34156109ee57600080fd5b6105c9613286565b3415610a0157600080fd5b61090d600435613290565b3415610a1757600080fd5b6102d9600160a060020a036004351661329e565b3415610a3657600080fd5b610a4d600160a060020a0360043516602435613348565b60405180846001604060020a03166001604060020a03168152602001838152602001828152602001935050505060405180910390f35b3415610a8e57600080fd5b6102d96001604060020a0360043516602435613393565b3415610ab057600080fd5b61024e600160a060020a036004351661364c565b6102d96001604060020a0360043516613667565b3415610ae357600080fd5b610688613959565b3415610af657600080fd5b6102d96001604060020a0360043516613965565b3415610b1557600080fd5b61090d600160a060020a0360043516602435613afd565b6102d96001604060020a0360043516613b48565b3415610b4b57600080fd5b610421613e02565b3415610b5e57600080fd5b6102d9600160a060020a0360043516613e0b565b3415610b7d57600080fd5b61096a600435613e62565b600a545b90565b6001604060020a031660009081526005602081815260408084206001015460089092529092206003810154600482015491909201549293919260ff90911691565b6000806000610bdd6149ba565b6002546000906101009004600160a060020a03161515610bfc57600080fd5b600354600160a060020a03161515610c1357600080fd5b6001604060020a0387166000908152600560205260408120600101541115610c3a57600080fd5b6001604060020a038716600090815260086020526040812080549096501115610c6257600080fd5b600354600160a060020a03169350836335f097f38860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515610cbe57600080fd5b6102c65a03f11515610ccf57600080fd5b5050506040518051905015610ce357600080fd5b506002546101009004600160a060020a031691506000826307202460888360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515610d4657600080fd5b6102c65a03f11515610d5757600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501526001604060020a0391821684529150871682516001604060020a031614610dd657600080fd5b33600160a060020a03168260400151600160a060020a031614610df857600080fd5b610e028688613f33565b85600160a060020a031633600160a060020a03167fc1a01a90251d073f6f2b5d848f0e5dc2aca9b0a6743ed79946e599ad6d546528896040516001604060020a03909116815260200160405180910390a350505050505050565b6005602052600090815260409020805460019091015482565b6002546101009004600160a060020a031681565b600460205260009081526040902080546001820154600283015460039093015463ffffffff9283169391921684565b6001604060020a03811660009081526005602052604081206001015481908190819081908180821115610f7857610eee88611a5a565b600354939a5090985090955063ffffffff169350600160a060020a0316905080630672859b8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515610f5b57600080fd5b6102c65a03f11515610f6c57600080fd5b50505060405180519550505b5091939550919395565b60016020526000908152604090205460ff1681565b600d5462010000900460ff1681565b60005433600160a060020a0390811691161480610fe15750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610fec57600080fd5b6002805474ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a03948516021790556003805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b600080600061104b6149ba565b6002546000906101009004600160a060020a0316151561106a57600080fd5b600354600160a060020a0316151561108157600080fd5b60025460ff161561109157600080fd5b6001604060020a03881660009081526005602052604081206001015411806110b7575086155b156110c157600080fd5b6001604060020a0388166000908152600860205260409020600481015490955060ff161515600114156110f357600080fd5b600354600160a060020a03169350836335f097f38960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561114f57600080fd5b6102c65a03f1151561116057600080fd5b505050604051805190501561117457600080fd5b506002546101009004600160a060020a031691506000826307202460898360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b15156111d757600080fd5b6102c65a03f115156111e857600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501526001604060020a0391821684529150881682516001604060020a03161461126757600080fd5b33600160a060020a03168260400151600160a060020a03161461128957600080fd5b845460009011156112a75760038501879055600585018690556112b3565b6112b333898989614300565b33600160a060020a03167fa67dda40b2486d90a85433ceabe8a464671ead8938ef7eb33e11b0fb828f6694896040516001604060020a03909116815260200160405180910390a25050505050505050565b600160a060020a03166000908152600c602052604090205490565b600080600061132c6149ba565b6002546000906101009004600160a060020a0316151561134b57600080fd5b600354600160a060020a0316151561136257600080fd5b6001604060020a038616600090815260056020526040812060010154111561138957600080fd5b6001604060020a0386166000908152600860205260408120805490965011156113b157600080fd5b600354600160a060020a03169350836335f097f38760006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561140d57600080fd5b6102c65a03f1151561141e57600080fd5b505050604051805190501561143257600080fd5b506002546101009004600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561149557600080fd5b6102c65a03f115156114a657600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a03909216604087015291909116602085019081526001604060020a03909216845291506018905163ffffffff161161152457600080fd5b6001604060020a03861682516001604060020a03161461154357600080fd5b33600160a060020a03168260400151600160a060020a03161461156557600080fd5b82600160a060020a03166360c6ccb2338860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526001604060020a03166024820152604401600060405180830381600087803b15156115c257600080fd5b6102c65a03f115156115d357600080fd5b50505033600160a060020a03167fa19af89a96cde439cbd1ad5d955155f57449dd15808b36397d6684e430825e56876040516001604060020a03909116815260200160405180910390a2505050505050565b600354600160a060020a031681565b600080600080600080600080611648614a06565b600160a060020a038b166000908152600c60205260408120548b111561166d57611789565b600160a060020a038c166000908152600c6020526040902080548c90811061169157fe5b90600052602060002090600302016060604051908101604090815282546001604060020a031682526001830154602083015260029092015491810191909152915081519950816020015193508160400151925060008a6001604060020a03161115611789576116ff8a611a5a565b600354939c50909a5090975063ffffffff169550600160a060020a0316905080630672859b8b60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561176c57600080fd5b6102c65a03f1151561177d57600080fd5b50505060405180519750505b50509295985092959890939650565b60005433600160a060020a039081169116146117b357600080fd5b6002805460ff1916911515919091179055565b6002546000906101009004600160a060020a031615156117e557600080fd5b600354600160a060020a031615156117fc57600080fd5b60025460ff161561180c57600080fd5b506001604060020a03811660009081526008602052604090208054151561183257600080fd5b600481015460ff16151561184557600080fd5b428160050154111561185657600080fd5b600181015433600160a060020a0390811691161461187357600080fd5b61187c826143db565b6118863383613f33565b611890338361455e565b33600160a060020a03167fa46e3c6c83db41772890d273b010c0afddf1a1e6abce28b37e5d7eb80964f4bd836040516001604060020a03909116815260200160405180910390a25050565b60005474010000000000000000000000000000000000000000900461ffff1681565b6001604060020a03811660009081526008602052604081208054600182015460028301546003840154600485015460058601549496600160a060020a03948516969390941694919360ff9091169281908190819061195a8c612e0c565b9d9f9c9e509a9c999b989a979991989097965090945092505050565b60095463ffffffff1681565b6008602052600090815260409020805460018201546002830154600384015460048501546005909501549394600160a060020a03938416949390921692909160ff169086565b60005433600160a060020a0390811691161480611a035750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515611a0e57600080fd5b30600160a060020a031631811115611a2557600080fd5b600160a060020a03821681156108fc0282604051600060405180830381858888f193505050501515611a5657600080fd5b5050565b6000806000806000611a6a6149ba565b6002546101009004600160a060020a0316915081630720246088600060405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515611acb57600080fd5b6102c65a03f11515611adc57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a03909116604085015216602083019081526001604060020a03909116825251816040015182608001518360a00151955095509550955050509193509193565b6002546000906101009004600160a060020a03161515611b9057600080fd5b600354600160a060020a03161515611ba757600080fd5b60025460ff1615611bb757600080fd5b506001604060020a038116600090815260086020526040902080541515611bdd57600080fd5b600181015433600160a060020a03908116911614611bfa57600080fd5b600481015460ff16151560011415611c1157600080fd5b611a56826143db565b60075490565b60005433600160a060020a0390811691161480611c5b5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515611c6657600080fd5b608060405190810160409081526001808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101766060840152600052600490527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526002808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101986060840152600052600490527f91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a78151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526003808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101756060840152600052600490527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa08151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260048083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101b56060840152600081905290527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600580835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101f16060840152600052600490527f04cde762ef08b6b6c5ded8e8c4c0b3f4e5c9ad7342c88fcc93681b4588b73f058151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526006808352670429d069189e0000602080850191909152660aa87bee5380009284019290925261017c6060840152600052600490527fc59312466997bb42aaaf719ece141047820e6b34531e1670dc1852a453648f0f8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260078083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101596060840152600052600490527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5518151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600880835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526102066060840152600052600490527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a48151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600980835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101bf6060840152600052600490527f4ad5a04d53b5856f318545bb721f67d3f6d0a5a999f25eec7e20eaeb4c47b9338151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600a8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261017c6060840152600052600490527f5c6b02db8b672415ffad906d7ccee10bd53dbad7d0b29e2bc0e50c93d5f310938151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600b8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101626060840152600052600490527f0c1469ad586d86b6976c45826d7ae56d76ee516e37a2bccffbe904b74dbae7ea8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600c8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015a6060840152600052600490527f140aabff1a85df08546c9a350c79ae18341bde4a2cef5d2fd460885c0128ce268151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600d8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015f6060840152600052600490527fa5022b2bfd144bf9103d80168549b5df7c72ab60bd51bf71a02a08d844853b4a8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600e8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101526060840152600052600490527feb3e677499e881fe1bdbc344a49c412138038a9f40883b6dc68f713aab4835238151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600f8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101556060840152600052600490527f66b61daf77b854ca6ba000a8d4b340eafcdb71b6583753b4af89fceb54988fff8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260108083526704db732547630000602080850191909152660c6f3b40b6c000928401929092526101806060840152600052600490527f4a597304b2df0a7a7b428b3c24c35ba6373aabebf9972387f5610f74a01b21bd8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526011808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101316060840152600052600490527fac375bcb880242328180c23d4a918023a12a7caf7cf12b8c4074e4a3f39900a08151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601280835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101ab6060840152600052600490527f7f6fa3f34639ea1891363ca773619dbd5f652d7ab50411111dde2f57e3ae13ad8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526013808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101306060840152600052600490527f9bbf2ad10217b6212df1939350a047a69b6887b770020d3fa8c328c0653ee9878151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601480835267058d15e17628000060208085019190915266b1a2bc2ec500009284019290925260526060840152600052600490527ff7deed9399d719bf61dcb1322c056a03a885c275ab093673b0cc182b84bea0618151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260158083526001602080850182905292840152607b6060840152600052600490527f1bb30a1647f6f6723cb3a88838ce0319afabe51263fc466f2f669a7a24ad88c68151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260168083526702c68af0bb14000060208085019190915266038d7ea4c68000928401929092526101d46060840152600052600490527f87e655ef16e4075af30c6a90c2b439f7dcd2d83a606dafadaee10cffaf9181328151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260178083526706f05b59d3b200006020808501919091526608e1bc9bf040009284019290925261012e6060840152600052600490527fff624574ceefb6578b3887a7448cf2ca4d120002f646987b0a9b9ad3f6dc2c108151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526018808352670de0b6b3a76400006020808501919091526611c37937e080009284019290925260c36060840152600052600490527f1ac66383b86984a837d32661c9fdda480194de6e2dbd3891e29fadcb763a62da8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550565b60005433600160a060020a03908116911614612d0557600080fd5b600160a060020a03811660009081526001602052604090205460ff161515612d9157600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b60005433600160a060020a0390811691161480612dcf5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612dda57600080fd5b600d805460ff909216620100000262ff00001961ffff90941661ffff199093169290921792909216179055565b601881565b6000806000806000612e1c6149ba565b6002546101009004600160a060020a031691506000808363072024608a8360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515612e7f57600080fd5b6102c65a03f11515612e9057600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08b01525063ffffffff90811660c08a015290811660a08901529081166080880152600160a060020a03918216604080890191909152921660208701526001604060020a03909216855260035490911692508290630672859b908b90600090516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515612f5f57600080fd5b6102c65a03f11515612f7057600080fd5b5050506040518051915050602083015183608001518460a00151919b909a50909850909650945050505050565b600080600080600080600080600789815481101515612fb857fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a031697506000886001604060020a031611156130a757612ffe88611a5a565b600354939a5090985090955063ffffffff169350600160a060020a0316905080630672859b8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561306b57600080fd5b6102c65a03f1151561307c57600080fd5b50505060405180516001604060020a038a166000908152600560205260409020600101549096509250505b50919395979092949650565b600054600160a060020a031681565b60078054829081106130d057fe5b9060005260206000209060049182820401919006600802915054906101000a90046001604060020a031681565b6001604060020a0381166000908152600560205260408120600101548190118061314a57506001604060020a038216600090815260086020526040902060010154600160a060020a031615155b92915050565b6000806000806000806000806000806000600b60008e600160a060020a0316600160a060020a03168152602001908152602001600020805490508c111561319657613276565b600160a060020a038d166000908152600b6020526040902080548d9081106131ba57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03169a50600860008c6001604060020a03166001604060020a0316815260200190815260200160002090508060010160009054906101000a9004600160a060020a031699508060020160009054906101000a9004600160a060020a03169850806003015497508060040160009054906101000a900460ff1696508060050154955061326b8b612e0c565b929750909550935091505b509295989b9194979a5092959850565b600d5461ffff1681565b600a8054829081106130d057fe5b60005433600160a060020a039081169116146132b957600080fd5b600160a060020a03811660009081526001602081905260409091205460ff1615151415612d9157600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b600c6020528160005260406000208181548110151561336357fe5b60009182526020909120600390910201805460018201546002909201546001604060020a03909116935090915083565b60008060006133a06149ba565b6002546000906101009004600160a060020a031615156133bf57600080fd5b600354600160a060020a031615156133d657600080fd5b60025460ff16156133e657600080fd5b8515156133f257600080fd5b6001604060020a03871660009081526008602052604081208054909650111561341a57600080fd5b600354600160a060020a03169350836335f097f38860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561347657600080fd5b6102c65a03f1151561348757600080fd5b505050604051805190501561349b57600080fd5b506002546101009004600160a060020a031691506000826307202460888360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b15156134fe57600080fd5b6102c65a03f1151561350f57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501526001604060020a0391821684529150871682516001604060020a03161461358e57600080fd5b33600160a060020a03168260400151600160a060020a0316146135b057600080fd5b6001604060020a03871660009081526005602052604081205411156135f2576001604060020a03871660009081526005602052604090206001018690556135fc565b6135fc87876146bf565b33600160a060020a03167feb7043a06aaf528eb4562cb77682ccaa8efe8ac7b6759947feaf9f77a16aa10e886040516001604060020a03909116815260200160405180910390a250505050505050565b600160a060020a03166000908152600b602052604090205490565b6000806136726149ba565b600080600061367f614a06565b6002546101009004600160a060020a0316151561369b57600080fd5b600354600160a060020a031615156136b257600080fd5b60025460ff16156136c257600080fd5b6001604060020a03881660009081526005602052604090206001015496508615806136ed5750863414155b156136f757600080fd5b6002546101009004600160a060020a0316955060009350856307202460898660405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561375b57600080fd5b6102c65a03f1151561376c57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08d0152505063ffffffff91821660808b0152600160a060020a0390921660408a01529190911660208801526001604060020a0391821687529450881685516001604060020a0316146137eb57600080fd5b33600160a060020a03168560400151600160a060020a0316141561380e57600080fd5b8460400151600d5490935060649061ffff16880204915061382e8861474d565b6138383389613f33565b82600160a060020a03166108fc61384f8985614890565b9081150290604051600060405180830381858888f19350505050151561387457600080fd5b606060405190810160409081526001604060020a038a16825260208083018a90524282840152600160a060020a0386166000908152600c90915220805491925090600181016138c38382614a26565b600092835260209092208391600302018151815467ffffffffffffffff19166001604060020a0391909116178155602082015181600101556040820151816002015550505033600160a060020a03167fbfa4ed7e68cf0c080716886ff4468113df6b425ef79ac4911a1f264202dce424896040516001604060020a03909116815260200160405180910390a25050505050505050565b60065463ffffffff1681565b600061396f6149ba565b6002546000906101009004600160a060020a0316151561398e57600080fd5b600354600160a060020a031615156139a557600080fd5b60025460ff16156139b557600080fd5b6001604060020a03841660009081526005602052604090205415156139d957600080fd5b506002546101009004600160a060020a031691506000826307202460858360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613a3c57600080fd5b6102c65a03f11515613a4d57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501526001604060020a0391821684529150841682516001604060020a031614613acc57600080fd5b33600160a060020a03168260400151600160a060020a031614613aee57600080fd5b613af78461474d565b50505050565b600b60205281600052604060002081815481101515613b1857fe5b9060005260206000209060049182820401919006600802915091509054906101000a90046001604060020a031681565b6000806000613b556149ba565b600254600090819081906101009004600160a060020a03161515613b7857600080fd5b600354600160a060020a03161515613b8f57600080fd5b60025460ff1615613b9f57600080fd5b6001604060020a038816600090815260086020526040902080549097501515613bc757600080fd5b600487015460ff16151560011415613bde57600080fd5b60038701549550348614613bf157600080fd5b6002546101009004600160a060020a0316945060009250846307202460898560405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613c5557600080fd5b6102c65a03f11515613c6657600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08c0152505063ffffffff91821660808a0152600160a060020a0390921660408901529190911660208701526001604060020a0391821686529350881684516001604060020a031614613ce557600080fd5b33600160a060020a03168460400151600160a060020a03161415613d0857600080fd5b600d5460649061ffff16870260028901805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a03161790556005890180544201905560048901805460ff1916600117905504915060408401519050613d6b3389613f33565b80600160a060020a03166108fc613d828885614890565b9081150290604051600060405180830381858888f193505050501515613da757600080fd5b613db181896148a4565b33600160a060020a03167fec9485c094547f7e3de5ae91993db798d626a05c7561391e1dc7129aec0c0e21896040516001604060020a03909116815260200160405180910390a25050505050505050565b60025460ff1681565b60005433600160a060020a03908116911614613e2657600080fd5b600160a060020a03811615612d915760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b6000806000806000806000806000806000600a8c815481101515613e8257fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03169a50600860008c6001604060020a03166001604060020a0316815260200190815260200160002090508060010160009054906101000a9004600160a060020a031699508060020160009054906101000a9004600160a060020a03169850806003015497508060040160009054906101000a900460ff1696508060050154955061195a8b612e0c565b6000613f3d6149ba565b6002546101009004600160a060020a03169150600080836307202460868360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613fa057600080fd5b6102c65a03f11515613fb157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08b01525063ffffffff90811660c08a015290811660a08901529081166080880152600160a060020a03909116604087015216602085019081526001604060020a0390911684526018905163ffffffff16116142125760046000846020015163ffffffff1663ffffffff16815260200190815260200160002091508260200151825463ffffffff9081169116141561421257600382015463ffffffff1660c084015163ffffffff1610156142125760038201546140ab9063ffffffff1660c085015163ffffffff16614890565b905060008163ffffffff1611156142125783600160a060020a03166389b2050b84604001516140e48463ffffffff16866002015461498f565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561413057600080fd5b6102c65a03f1151561414157600080fd5b50505060405180515050600160a060020a0384166332666a31845185608001518660a00151600387015463ffffffff1660405163ffffffff86811660e060020a0282526001604060020a0395909516600482015292841660448401529083166064830152909116608482015260a06024820152600960a48201527f206e616d65206d6520000000000000000000000000000000000000000000000060c482015260e401600060405180830381600087803b15156141fd57600080fd5b6102c65a03f1151561420e57600080fd5b5050505b83600160a060020a03166360c6ccb284604001518760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526001604060020a03166024820152604401600060405180830381600087803b151561427357600080fd5b6102c65a03f1151561428457600080fd5b50505083600160a060020a0316639248019e878760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526001604060020a03166024820152604401600060405180830381600087803b15156142e457600080fd5b6102c65a03f115156142f557600080fd5b505050505050505050565b6001604060020a0383166000908152600860205260409020600181018054600160a060020a03871673ffffffffffffffffffffffffffffffffffffffff199182161790915560028201805490911690556003810183905560048101805460ff1916905560058101829055805415156143d457600a8054600101906143849082614a52565b808255600a805486926000190190811061439a57fe5b90600052602060002090600491828204019190066008026101000a8154816001604060020a0302191690836001604060020a031602179055505b5050505050565b6001604060020a03811660009081526008602052604090208054151561440057611a56565b600a54815411611a56578054600a8054600891600091600019810190811061442457fe5b6000918252602080832060048084049091015492066008026101000a9091046001604060020a03168352820192909252604001902055600a8054600019810190811061446c57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a0316600a60018360000154038154811015156144ab57fe5b90600052602060002090600491828204019190066008026101000a8154816001604060020a0302191690836001604060020a031602179055506001600a818180549050039150816144fc9190614a52565b50506001604060020a0316600090815260086020526040812081815560018101805473ffffffffffffffffffffffffffffffffffffffff1990811690915560028201805490911690556003810182905560048101805460ff1916905560050155565b600160a060020a0382166000908152600b602052604081205b80548210156145e057826001604060020a0316818381548110151561459857fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03166001604060020a031614156145d5576145e0565b600190910190614577565b8054821015613af7578054819060001981019081106145fb57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a0316818381548110151561463257fe5b90600052602060002090600491828204019190066008026101000a8154816001604060020a0302191690836001604060020a0316021790555080600182805490500381548110151561468057fe5b90600052602060002090600491828204019190066008026101000a8154906001604060020a030219169055808054809190600190036143d49190614a52565b6001604060020a038216600090815260056020526040902060018101829055805415156147485760078054600101906146f89082614a52565b8082556007805485926000190190811061470e57fe5b90600052602060002090600491828204019190066008026101000a8154816001604060020a0302191690836001604060020a031602179055505b505050565b6001604060020a03811660009081526005602052604090208054151561477257611a56565b600754815411611a5657805460078054600591600091600019810190811061479657fe5b6000918252602080832060048084049091015492066008026101000a9091046001604060020a031683528201929092526040019020556007805460001981019081106147de57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03166007600183600001540381548110151561481d57fe5b90600052602060002090600491828204019190066008026101000a8154816001604060020a0302191690836001604060020a03160217905550600160078181805490500391508161486e9190614a52565b50506001604060020a0316600090815260056020526040812081815560010155565b6000808284101561489d57fe5b5050900390565b600080600160a060020a03841615613af7575050600160a060020a0382166000908152600b60205260408120905b815481101561493857826001604060020a031682828154811015156148f357fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03166001604060020a0316141561493057613af7565b6001016148d2565b815482906001810161494a8382614a52565b916000526020600020906004918282040191900660080285909190916101000a8154816001604060020a0302191690836001604060020a031602179055505050505050565b60008282028315806149ab57508284828115156149a857fe5b04145b15156149b357fe5b9392505050565b610100604051908101604090815260008083526020830181905290820152606081016149e4614a86565b8152600060208201819052604082018190526060820181905260809091015290565b606060405190810160409081526000808352602083018190529082015290565b815481835581811511614748576003028160030283600052602060002091820191016147489190614a98565b8154818355818115116147485760030160049004816003016004900483600052602060002091820191016147489190614acf565b60206040519081016040526000815290565b610b8c91905b80821115614acb57805467ffffffffffffffff191681556000600182018190556002820155600301614a9e565b5090565b610b8c91905b80821115614acb5760008155600101614ad55600a165627a7a7230582073bb2bd72813d7046e86d3c077137127791d6f12c219717e2b389720d91d31850029000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6060604052600436106102365763ffffffff60e060020a600035041662203385811461023b57806304150e8f1461026057806306228e95146102ae5780630796f67c146102db5780630d668818146103125780630daf4151146103415780630e5aaffc1461038e57806314d0f1ba1461040257806326a4c847146104355780632bf6e0a51461045e5780633010f03c146104835780633462001b146104a857806341fbbc31146104c7578063423b1ca3146104e657806347ae73ee146104f957806348ef5aa81461057f5780634eb4fe80146105975780634efb023e146105b65780634f99a96e146105e05780634fdf64ce14610675578063517403f5146106a1578063522f681514610705578063554792fd146107275780635e6df25c14610781578063654470fc146107a057806366ba2670146107b35780636c81fd6d146107c657806370187a19146107e557806373d65c001461080557806376c29bf5146108185780638426a452146108725780638da5cb5b146108e4578063999ec0a0146108f7578063a847a71c14610929578063ad4e39f314610948578063b2356ad4146109e3578063b58c87ba146109f6578063b85d627514610a0c578063baaa73b514610a2b578063c2b303d014610a83578063c734375414610aa5578063d6f551e414610ac4578063d7c39cc614610ad8578063e16e0f8414610aeb578063e88dfc6714610b0a578063e9b6d67114610b2c578063ee4e441614610b40578063f285329214610b53578063faa5369d14610b72575b600080fd5b341561024657600080fd5b61024e610b88565b60405190815260200160405180910390f35b341561026b57600080fd5b61027f6001604060020a0360043516610b8f565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b34156102b957600080fd5b6102d96001604060020a0360043516600160a060020a0360243516610bd0565b005b34156102e657600080fd5b6102fa6001604060020a0360043516610e5c565b60405191825260208201526040908101905180910390f35b341561031d57600080fd5b610325610e75565b604051600160a060020a03909116815260200160405180910390f35b341561034c57600080fd5b61035d63ffffffff60043516610e89565b60405163ffffffff948516815260208101939093526040808401929092529092166060820152608001905180910390f35b341561039957600080fd5b6103ad6001604060020a0360043516610eb8565b60405163ffffffff96871681529490951660208501526001604060020a03909216604080850191909152600160a060020a039091166060840152608083019190915260a082019290925260c001905180910390f35b341561040d57600080fd5b610421600160a060020a0360043516610f82565b604051901515815260200160405180910390f35b341561044057600080fd5b610448610f97565b60405160ff909116815260200160405180910390f35b341561046957600080fd5b6102d9600160a060020a0360043581169060243516610fa6565b341561048e57600080fd5b6102d96001604060020a036004351660243560443561103e565b34156104b357600080fd5b61024e600160a060020a0360043516611304565b34156104d257600080fd5b6102d96001604060020a036004351661131f565b34156104f157600080fd5b610325611625565b341561050457600080fd5b61051b600160a060020a0360043516602435611634565b6040516001604060020a03988916815263ffffffff978816602082015295909616604080870191909152939096166060850152600160a060020a03909116608084015260a083015260c082019390935260e081019190915261010001905180910390f35b341561058a57600080fd5b6102d96004351515611798565b34156105a257600080fd5b6102d96001604060020a03600435166117c6565b34156105c157600080fd5b6105c96118db565b60405161ffff909116815260200160405180910390f35b34156105eb57600080fd5b6105ff6001604060020a03600435166118fd565b604051998a52600160a060020a0398891660208b0152969097166040808a01919091526060890195909552921515608088015260a087019190915263ffffffff90811660c087015290811660e08601529092166101008401526001604060020a0316610120830152610140909101905180910390f35b341561068057600080fd5b610688611976565b60405163ffffffff909116815260200160405180910390f35b34156106ac57600080fd5b6106c06001604060020a0360043516611982565b604051958652600160a060020a039485166020870152929093166040808601919091526060850191909152911515608084015260a083015260c0909101905180910390f35b341561071057600080fd5b6102d9600160a060020a03600435166024356119c8565b341561073257600080fd5b6107466001604060020a0360043516611a5a565b60405163ffffffff9485168152600160a060020a03909316602084015290831660408084019190915292166060820152608001905180910390f35b341561078c57600080fd5b6102d96001604060020a0360043516611b71565b34156107ab57600080fd5b61024e611c1a565b34156107be57600080fd5b6102d9611c20565b34156107d157600080fd5b6102d9600160a060020a0360043516612cea565b34156107f057600080fd5b6102d961ffff6004351660ff60243516612d94565b341561081057600080fd5b610448612e07565b341561082357600080fd5b6108376001604060020a0360043516612e0c565b60405163ffffffff9485168152928416602084015292166040808301919091526001604060020a039092166060820152608001905180910390f35b341561087d57600080fd5b610888600435612f9d565b6040516001604060020a03978816815263ffffffff968716602082015294909516604080860191909152929095166060840152600160a060020a0316608083015260a082019390935260c081019190915260e001905180910390f35b34156108ef57600080fd5b6103256130b3565b341561090257600080fd5b61090d6004356130c2565b6040516001604060020a03909116815260200160405180910390f35b341561093457600080fd5b6104216001604060020a03600435166130fd565b341561095357600080fd5b61096a600160a060020a0360043516602435613150565b6040516001604060020a039a8b168152600160a060020a03998a166020820152979098166040808901919091526060880196909652931515608087015260a086019290925263ffffffff90811660c086015290811660e08501521661010083015291909216610120830152610140909101905180910390f35b34156109ee57600080fd5b6105c9613286565b3415610a0157600080fd5b61090d600435613290565b3415610a1757600080fd5b6102d9600160a060020a036004351661329e565b3415610a3657600080fd5b610a4d600160a060020a0360043516602435613348565b60405180846001604060020a03166001604060020a03168152602001838152602001828152602001935050505060405180910390f35b3415610a8e57600080fd5b6102d96001604060020a0360043516602435613393565b3415610ab057600080fd5b61024e600160a060020a036004351661364c565b6102d96001604060020a0360043516613667565b3415610ae357600080fd5b610688613959565b3415610af657600080fd5b6102d96001604060020a0360043516613965565b3415610b1557600080fd5b61090d600160a060020a0360043516602435613afd565b6102d96001604060020a0360043516613b48565b3415610b4b57600080fd5b610421613e02565b3415610b5e57600080fd5b6102d9600160a060020a0360043516613e0b565b3415610b7d57600080fd5b61096a600435613e62565b600a545b90565b6001604060020a031660009081526005602081815260408084206001015460089092529092206003810154600482015491909201549293919260ff90911691565b6000806000610bdd6149ba565b6002546000906101009004600160a060020a03161515610bfc57600080fd5b600354600160a060020a03161515610c1357600080fd5b6001604060020a0387166000908152600560205260408120600101541115610c3a57600080fd5b6001604060020a038716600090815260086020526040812080549096501115610c6257600080fd5b600354600160a060020a03169350836335f097f38860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515610cbe57600080fd5b6102c65a03f11515610ccf57600080fd5b5050506040518051905015610ce357600080fd5b506002546101009004600160a060020a031691506000826307202460888360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515610d4657600080fd5b6102c65a03f11515610d5757600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501526001604060020a0391821684529150871682516001604060020a031614610dd657600080fd5b33600160a060020a03168260400151600160a060020a031614610df857600080fd5b610e028688613f33565b85600160a060020a031633600160a060020a03167fc1a01a90251d073f6f2b5d848f0e5dc2aca9b0a6743ed79946e599ad6d546528896040516001604060020a03909116815260200160405180910390a350505050505050565b6005602052600090815260409020805460019091015482565b6002546101009004600160a060020a031681565b600460205260009081526040902080546001820154600283015460039093015463ffffffff9283169391921684565b6001604060020a03811660009081526005602052604081206001015481908190819081908180821115610f7857610eee88611a5a565b600354939a5090985090955063ffffffff169350600160a060020a0316905080630672859b8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515610f5b57600080fd5b6102c65a03f11515610f6c57600080fd5b50505060405180519550505b5091939550919395565b60016020526000908152604090205460ff1681565b600d5462010000900460ff1681565b60005433600160a060020a0390811691161480610fe15750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610fec57600080fd5b6002805474ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a03948516021790556003805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b600080600061104b6149ba565b6002546000906101009004600160a060020a0316151561106a57600080fd5b600354600160a060020a0316151561108157600080fd5b60025460ff161561109157600080fd5b6001604060020a03881660009081526005602052604081206001015411806110b7575086155b156110c157600080fd5b6001604060020a0388166000908152600860205260409020600481015490955060ff161515600114156110f357600080fd5b600354600160a060020a03169350836335f097f38960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561114f57600080fd5b6102c65a03f1151561116057600080fd5b505050604051805190501561117457600080fd5b506002546101009004600160a060020a031691506000826307202460898360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b15156111d757600080fd5b6102c65a03f115156111e857600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501526001604060020a0391821684529150881682516001604060020a03161461126757600080fd5b33600160a060020a03168260400151600160a060020a03161461128957600080fd5b845460009011156112a75760038501879055600585018690556112b3565b6112b333898989614300565b33600160a060020a03167fa67dda40b2486d90a85433ceabe8a464671ead8938ef7eb33e11b0fb828f6694896040516001604060020a03909116815260200160405180910390a25050505050505050565b600160a060020a03166000908152600c602052604090205490565b600080600061132c6149ba565b6002546000906101009004600160a060020a0316151561134b57600080fd5b600354600160a060020a0316151561136257600080fd5b6001604060020a038616600090815260056020526040812060010154111561138957600080fd5b6001604060020a0386166000908152600860205260408120805490965011156113b157600080fd5b600354600160a060020a03169350836335f097f38760006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561140d57600080fd5b6102c65a03f1151561141e57600080fd5b505050604051805190501561143257600080fd5b506002546101009004600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561149557600080fd5b6102c65a03f115156114a657600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a03909216604087015291909116602085019081526001604060020a03909216845291506018905163ffffffff161161152457600080fd5b6001604060020a03861682516001604060020a03161461154357600080fd5b33600160a060020a03168260400151600160a060020a03161461156557600080fd5b82600160a060020a03166360c6ccb2338860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526001604060020a03166024820152604401600060405180830381600087803b15156115c257600080fd5b6102c65a03f115156115d357600080fd5b50505033600160a060020a03167fa19af89a96cde439cbd1ad5d955155f57449dd15808b36397d6684e430825e56876040516001604060020a03909116815260200160405180910390a2505050505050565b600354600160a060020a031681565b600080600080600080600080611648614a06565b600160a060020a038b166000908152600c60205260408120548b111561166d57611789565b600160a060020a038c166000908152600c6020526040902080548c90811061169157fe5b90600052602060002090600302016060604051908101604090815282546001604060020a031682526001830154602083015260029092015491810191909152915081519950816020015193508160400151925060008a6001604060020a03161115611789576116ff8a611a5a565b600354939c50909a5090975063ffffffff169550600160a060020a0316905080630672859b8b60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561176c57600080fd5b6102c65a03f1151561177d57600080fd5b50505060405180519750505b50509295985092959890939650565b60005433600160a060020a039081169116146117b357600080fd5b6002805460ff1916911515919091179055565b6002546000906101009004600160a060020a031615156117e557600080fd5b600354600160a060020a031615156117fc57600080fd5b60025460ff161561180c57600080fd5b506001604060020a03811660009081526008602052604090208054151561183257600080fd5b600481015460ff16151561184557600080fd5b428160050154111561185657600080fd5b600181015433600160a060020a0390811691161461187357600080fd5b61187c826143db565b6118863383613f33565b611890338361455e565b33600160a060020a03167fa46e3c6c83db41772890d273b010c0afddf1a1e6abce28b37e5d7eb80964f4bd836040516001604060020a03909116815260200160405180910390a25050565b60005474010000000000000000000000000000000000000000900461ffff1681565b6001604060020a03811660009081526008602052604081208054600182015460028301546003840154600485015460058601549496600160a060020a03948516969390941694919360ff9091169281908190819061195a8c612e0c565b9d9f9c9e509a9c999b989a979991989097965090945092505050565b60095463ffffffff1681565b6008602052600090815260409020805460018201546002830154600384015460048501546005909501549394600160a060020a03938416949390921692909160ff169086565b60005433600160a060020a0390811691161480611a035750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515611a0e57600080fd5b30600160a060020a031631811115611a2557600080fd5b600160a060020a03821681156108fc0282604051600060405180830381858888f193505050501515611a5657600080fd5b5050565b6000806000806000611a6a6149ba565b6002546101009004600160a060020a0316915081630720246088600060405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515611acb57600080fd5b6102c65a03f11515611adc57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a03909116604085015216602083019081526001604060020a03909116825251816040015182608001518360a00151955095509550955050509193509193565b6002546000906101009004600160a060020a03161515611b9057600080fd5b600354600160a060020a03161515611ba757600080fd5b60025460ff1615611bb757600080fd5b506001604060020a038116600090815260086020526040902080541515611bdd57600080fd5b600181015433600160a060020a03908116911614611bfa57600080fd5b600481015460ff16151560011415611c1157600080fd5b611a56826143db565b60075490565b60005433600160a060020a0390811691161480611c5b5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515611c6657600080fd5b608060405190810160409081526001808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101766060840152600052600490527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526002808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101986060840152600052600490527f91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a78151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526003808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101756060840152600052600490527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa08151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260048083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101b56060840152600081905290527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600580835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101f16060840152600052600490527f04cde762ef08b6b6c5ded8e8c4c0b3f4e5c9ad7342c88fcc93681b4588b73f058151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526006808352670429d069189e0000602080850191909152660aa87bee5380009284019290925261017c6060840152600052600490527fc59312466997bb42aaaf719ece141047820e6b34531e1670dc1852a453648f0f8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260078083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101596060840152600052600490527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5518151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600880835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526102066060840152600052600490527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a48151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600980835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101bf6060840152600052600490527f4ad5a04d53b5856f318545bb721f67d3f6d0a5a999f25eec7e20eaeb4c47b9338151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600a8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261017c6060840152600052600490527f5c6b02db8b672415ffad906d7ccee10bd53dbad7d0b29e2bc0e50c93d5f310938151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600b8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101626060840152600052600490527f0c1469ad586d86b6976c45826d7ae56d76ee516e37a2bccffbe904b74dbae7ea8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600c8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015a6060840152600052600490527f140aabff1a85df08546c9a350c79ae18341bde4a2cef5d2fd460885c0128ce268151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600d8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015f6060840152600052600490527fa5022b2bfd144bf9103d80168549b5df7c72ab60bd51bf71a02a08d844853b4a8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600e8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101526060840152600052600490527feb3e677499e881fe1bdbc344a49c412138038a9f40883b6dc68f713aab4835238151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600f8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101556060840152600052600490527f66b61daf77b854ca6ba000a8d4b340eafcdb71b6583753b4af89fceb54988fff8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260108083526704db732547630000602080850191909152660c6f3b40b6c000928401929092526101806060840152600052600490527f4a597304b2df0a7a7b428b3c24c35ba6373aabebf9972387f5610f74a01b21bd8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526011808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101316060840152600052600490527fac375bcb880242328180c23d4a918023a12a7caf7cf12b8c4074e4a3f39900a08151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601280835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101ab6060840152600052600490527f7f6fa3f34639ea1891363ca773619dbd5f652d7ab50411111dde2f57e3ae13ad8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526013808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101306060840152600052600490527f9bbf2ad10217b6212df1939350a047a69b6887b770020d3fa8c328c0653ee9878151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601480835267058d15e17628000060208085019190915266b1a2bc2ec500009284019290925260526060840152600052600490527ff7deed9399d719bf61dcb1322c056a03a885c275ab093673b0cc182b84bea0618151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260158083526001602080850182905292840152607b6060840152600052600490527f1bb30a1647f6f6723cb3a88838ce0319afabe51263fc466f2f669a7a24ad88c68151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260168083526702c68af0bb14000060208085019190915266038d7ea4c68000928401929092526101d46060840152600052600490527f87e655ef16e4075af30c6a90c2b439f7dcd2d83a606dafadaee10cffaf9181328151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260178083526706f05b59d3b200006020808501919091526608e1bc9bf040009284019290925261012e6060840152600052600490527fff624574ceefb6578b3887a7448cf2ca4d120002f646987b0a9b9ad3f6dc2c108151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526018808352670de0b6b3a76400006020808501919091526611c37937e080009284019290925260c36060840152600052600490527f1ac66383b86984a837d32661c9fdda480194de6e2dbd3891e29fadcb763a62da8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550565b60005433600160a060020a03908116911614612d0557600080fd5b600160a060020a03811660009081526001602052604090205460ff161515612d9157600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b60005433600160a060020a0390811691161480612dcf5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612dda57600080fd5b600d805460ff909216620100000262ff00001961ffff90941661ffff199093169290921792909216179055565b601881565b6000806000806000612e1c6149ba565b6002546101009004600160a060020a031691506000808363072024608a8360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515612e7f57600080fd5b6102c65a03f11515612e9057600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08b01525063ffffffff90811660c08a015290811660a08901529081166080880152600160a060020a03918216604080890191909152921660208701526001604060020a03909216855260035490911692508290630672859b908b90600090516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b1515612f5f57600080fd5b6102c65a03f11515612f7057600080fd5b5050506040518051915050602083015183608001518460a00151919b909a50909850909650945050505050565b600080600080600080600080600789815481101515612fb857fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a031697506000886001604060020a031611156130a757612ffe88611a5a565b600354939a5090985090955063ffffffff169350600160a060020a0316905080630672859b8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561306b57600080fd5b6102c65a03f1151561307c57600080fd5b50505060405180516001604060020a038a166000908152600560205260409020600101549096509250505b50919395979092949650565b600054600160a060020a031681565b60078054829081106130d057fe5b9060005260206000209060049182820401919006600802915054906101000a90046001604060020a031681565b6001604060020a0381166000908152600560205260408120600101548190118061314a57506001604060020a038216600090815260086020526040902060010154600160a060020a031615155b92915050565b6000806000806000806000806000806000600b60008e600160a060020a0316600160a060020a03168152602001908152602001600020805490508c111561319657613276565b600160a060020a038d166000908152600b6020526040902080548d9081106131ba57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03169a50600860008c6001604060020a03166001604060020a0316815260200190815260200160002090508060010160009054906101000a9004600160a060020a031699508060020160009054906101000a9004600160a060020a03169850806003015497508060040160009054906101000a900460ff1696508060050154955061326b8b612e0c565b929750909550935091505b509295989b9194979a5092959850565b600d5461ffff1681565b600a8054829081106130d057fe5b60005433600160a060020a039081169116146132b957600080fd5b600160a060020a03811660009081526001602081905260409091205460ff1615151415612d9157600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b600c6020528160005260406000208181548110151561336357fe5b60009182526020909120600390910201805460018201546002909201546001604060020a03909116935090915083565b60008060006133a06149ba565b6002546000906101009004600160a060020a031615156133bf57600080fd5b600354600160a060020a031615156133d657600080fd5b60025460ff16156133e657600080fd5b8515156133f257600080fd5b6001604060020a03871660009081526008602052604081208054909650111561341a57600080fd5b600354600160a060020a03169350836335f097f38860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561347657600080fd5b6102c65a03f1151561348757600080fd5b505050604051805190501561349b57600080fd5b506002546101009004600160a060020a031691506000826307202460888360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b15156134fe57600080fd5b6102c65a03f1151561350f57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501526001604060020a0391821684529150871682516001604060020a03161461358e57600080fd5b33600160a060020a03168260400151600160a060020a0316146135b057600080fd5b6001604060020a03871660009081526005602052604081205411156135f2576001604060020a03871660009081526005602052604090206001018690556135fc565b6135fc87876146bf565b33600160a060020a03167feb7043a06aaf528eb4562cb77682ccaa8efe8ac7b6759947feaf9f77a16aa10e886040516001604060020a03909116815260200160405180910390a250505050505050565b600160a060020a03166000908152600b602052604090205490565b6000806136726149ba565b600080600061367f614a06565b6002546101009004600160a060020a0316151561369b57600080fd5b600354600160a060020a031615156136b257600080fd5b60025460ff16156136c257600080fd5b6001604060020a03881660009081526005602052604090206001015496508615806136ed5750863414155b156136f757600080fd5b6002546101009004600160a060020a0316955060009350856307202460898660405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561375b57600080fd5b6102c65a03f1151561376c57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08d0152505063ffffffff91821660808b0152600160a060020a0390921660408a01529190911660208801526001604060020a0391821687529450881685516001604060020a0316146137eb57600080fd5b33600160a060020a03168560400151600160a060020a0316141561380e57600080fd5b8460400151600d5490935060649061ffff16880204915061382e8861474d565b6138383389613f33565b82600160a060020a03166108fc61384f8985614890565b9081150290604051600060405180830381858888f19350505050151561387457600080fd5b606060405190810160409081526001604060020a038a16825260208083018a90524282840152600160a060020a0386166000908152600c90915220805491925090600181016138c38382614a26565b600092835260209092208391600302018151815467ffffffffffffffff19166001604060020a0391909116178155602082015181600101556040820151816002015550505033600160a060020a03167fbfa4ed7e68cf0c080716886ff4468113df6b425ef79ac4911a1f264202dce424896040516001604060020a03909116815260200160405180910390a25050505050505050565b60065463ffffffff1681565b600061396f6149ba565b6002546000906101009004600160a060020a0316151561398e57600080fd5b600354600160a060020a031615156139a557600080fd5b60025460ff16156139b557600080fd5b6001604060020a03841660009081526005602052604090205415156139d957600080fd5b506002546101009004600160a060020a031691506000826307202460858360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613a3c57600080fd5b6102c65a03f11515613a4d57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501526001604060020a0391821684529150841682516001604060020a031614613acc57600080fd5b33600160a060020a03168260400151600160a060020a031614613aee57600080fd5b613af78461474d565b50505050565b600b60205281600052604060002081815481101515613b1857fe5b9060005260206000209060049182820401919006600802915091509054906101000a90046001604060020a031681565b6000806000613b556149ba565b600254600090819081906101009004600160a060020a03161515613b7857600080fd5b600354600160a060020a03161515613b8f57600080fd5b60025460ff1615613b9f57600080fd5b6001604060020a038816600090815260086020526040902080549097501515613bc757600080fd5b600487015460ff16151560011415613bde57600080fd5b60038701549550348614613bf157600080fd5b6002546101009004600160a060020a0316945060009250846307202460898560405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613c5557600080fd5b6102c65a03f11515613c6657600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08c0152505063ffffffff91821660808a0152600160a060020a0390921660408901529190911660208701526001604060020a0391821686529350881684516001604060020a031614613ce557600080fd5b33600160a060020a03168460400151600160a060020a03161415613d0857600080fd5b600d5460649061ffff16870260028901805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a03161790556005890180544201905560048901805460ff1916600117905504915060408401519050613d6b3389613f33565b80600160a060020a03166108fc613d828885614890565b9081150290604051600060405180830381858888f193505050501515613da757600080fd5b613db181896148a4565b33600160a060020a03167fec9485c094547f7e3de5ae91993db798d626a05c7561391e1dc7129aec0c0e21896040516001604060020a03909116815260200160405180910390a25050505050505050565b60025460ff1681565b60005433600160a060020a03908116911614613e2657600080fd5b600160a060020a03811615612d915760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b6000806000806000806000806000806000600a8c815481101515613e8257fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03169a50600860008c6001604060020a03166001604060020a0316815260200190815260200160002090508060010160009054906101000a9004600160a060020a031699508060020160009054906101000a9004600160a060020a03169850806003015497508060040160009054906101000a900460ff1696508060050154955061195a8b612e0c565b6000613f3d6149ba565b6002546101009004600160a060020a03169150600080836307202460868360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613fa057600080fd5b6102c65a03f11515613fb157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08b01525063ffffffff90811660c08a015290811660a08901529081166080880152600160a060020a03909116604087015216602085019081526001604060020a0390911684526018905163ffffffff16116142125760046000846020015163ffffffff1663ffffffff16815260200190815260200160002091508260200151825463ffffffff9081169116141561421257600382015463ffffffff1660c084015163ffffffff1610156142125760038201546140ab9063ffffffff1660c085015163ffffffff16614890565b905060008163ffffffff1611156142125783600160a060020a03166389b2050b84604001516140e48463ffffffff16866002015461498f565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561413057600080fd5b6102c65a03f1151561414157600080fd5b50505060405180515050600160a060020a0384166332666a31845185608001518660a00151600387015463ffffffff1660405163ffffffff86811660e060020a0282526001604060020a0395909516600482015292841660448401529083166064830152909116608482015260a06024820152600960a48201527f206e616d65206d6520000000000000000000000000000000000000000000000060c482015260e401600060405180830381600087803b15156141fd57600080fd5b6102c65a03f1151561420e57600080fd5b5050505b83600160a060020a03166360c6ccb284604001518760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526001604060020a03166024820152604401600060405180830381600087803b151561427357600080fd5b6102c65a03f1151561428457600080fd5b50505083600160a060020a0316639248019e878760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526001604060020a03166024820152604401600060405180830381600087803b15156142e457600080fd5b6102c65a03f115156142f557600080fd5b505050505050505050565b6001604060020a0383166000908152600860205260409020600181018054600160a060020a03871673ffffffffffffffffffffffffffffffffffffffff199182161790915560028201805490911690556003810183905560048101805460ff1916905560058101829055805415156143d457600a8054600101906143849082614a52565b808255600a805486926000190190811061439a57fe5b90600052602060002090600491828204019190066008026101000a8154816001604060020a0302191690836001604060020a031602179055505b5050505050565b6001604060020a03811660009081526008602052604090208054151561440057611a56565b600a54815411611a56578054600a8054600891600091600019810190811061442457fe5b6000918252602080832060048084049091015492066008026101000a9091046001604060020a03168352820192909252604001902055600a8054600019810190811061446c57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a0316600a60018360000154038154811015156144ab57fe5b90600052602060002090600491828204019190066008026101000a8154816001604060020a0302191690836001604060020a031602179055506001600a818180549050039150816144fc9190614a52565b50506001604060020a0316600090815260086020526040812081815560018101805473ffffffffffffffffffffffffffffffffffffffff1990811690915560028201805490911690556003810182905560048101805460ff1916905560050155565b600160a060020a0382166000908152600b602052604081205b80548210156145e057826001604060020a0316818381548110151561459857fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03166001604060020a031614156145d5576145e0565b600190910190614577565b8054821015613af7578054819060001981019081106145fb57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a0316818381548110151561463257fe5b90600052602060002090600491828204019190066008026101000a8154816001604060020a0302191690836001604060020a0316021790555080600182805490500381548110151561468057fe5b90600052602060002090600491828204019190066008026101000a8154906001604060020a030219169055808054809190600190036143d49190614a52565b6001604060020a038216600090815260056020526040902060018101829055805415156147485760078054600101906146f89082614a52565b8082556007805485926000190190811061470e57fe5b90600052602060002090600491828204019190066008026101000a8154816001604060020a0302191690836001604060020a031602179055505b505050565b6001604060020a03811660009081526005602052604090208054151561477257611a56565b600754815411611a5657805460078054600591600091600019810190811061479657fe5b6000918252602080832060048084049091015492066008026101000a9091046001604060020a031683528201929092526040019020556007805460001981019081106147de57fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03166007600183600001540381548110151561481d57fe5b90600052602060002090600491828204019190066008026101000a8154816001604060020a0302191690836001604060020a03160217905550600160078181805490500391508161486e9190614a52565b50506001604060020a0316600090815260056020526040812081815560010155565b6000808284101561489d57fe5b5050900390565b600080600160a060020a03841615613af7575050600160a060020a0382166000908152600b60205260408120905b815481101561493857826001604060020a031682828154811015156148f357fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03166001604060020a0316141561493057613af7565b6001016148d2565b815482906001810161494a8382614a52565b916000526020600020906004918282040191900660080285909190916101000a8154816001604060020a0302191690836001604060020a031602179055505050505050565b60008282028315806149ab57508284828115156149a857fe5b04145b15156149b357fe5b9392505050565b610100604051908101604090815260008083526020830181905290820152606081016149e4614a86565b8152600060208201819052604082018190526060820181905260809091015290565b606060405190810160409081526000808352602083018190529082015290565b815481835581811511614748576003028160030283600052602060002091820191016147489190614a98565b8154818355818115116147485760030160049004816003016004900483600052602060002091820191016147489190614acf565b60206040519081016040526000815290565b610b8c91905b80821115614acb57805467ffffffffffffffff191681556000600182018190556002820155600301614a9e565b5090565b610b8c91905b80821115614acb5760008155600101614ad55600a165627a7a7230582073bb2bd72813d7046e86d3c077137127791d6f12c219717e2b389720d91d31850029

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

000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _dataContract (address): 0xABC1c404424BDF24C19A5cC5EF8F47781D18Eb3E
Arg [1] : _battleContract (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Swarm Source

bzzr://73bb2bd72813d7046e86d3c077137127791d6f12c219717e2b389720d91d3185

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.