Contract 0x66Ec7145b52cb088e79306BEb3D26faD0935F8c3

 

Contract Overview

Balance:
0.105 Ether

EtherValue:
$129.07 (@ $1,229.27/ETH)

Token:
 
Txn Hash
Method
Block
From
To
Value
0x28b44568b39bf9f98aa076a111f58f97ff7df6e5cd1857ddd91b3f6b3d394760Buy Basic Cards88225942019-10-27 16:23:301136 days 16 hrs ago0x5963a05d77c54a7d9cc084c845b76e1c1e0f9075 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000945364
0x395e5c4083d8fd6f05ce01f10a6ac0d5e9e938d783d0ff7594412d994b650f9cBuy Basic Cards71312902019-01-26 23:04:191410 days 10 hrs ago0x49086e8a02e8c0404a3ea1641ebe1fd43e4af4c3 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000591584
0x59d3505168bd430a80bbbc6cca30355d248924cf757e94886632cc10d841ceeaBuy Basic Cards65858632018-10-26 8:00:431503 days 1 hr ago0xf3aa4d0d686ee02cd0daa7f6c38c27d66c1d67e0 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.0030724413
0xeedbf263a28b46ae899a560aca6bc60c956cdd9e90c98a454c8b6cdc6f843f3aBuy Basic Cards58891762018-07-01 23:20:021619 days 9 hrs ago0x6fca91cf47fc29c65f1af91439246a4ff9edb007 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.0030724413
0x5405416d4ffea55f1bbac7e0ae18c4c5a58239fc8d54cfed19e45d464cc31cf6Buy Basic Cards58677562018-06-28 7:11:441623 days 1 hr ago0x401678df30b5a77ee5d9c6716da6679a77b4c4d6 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000664475
0x88d31484fa84abc6e87f9a8c693f2df92ee81479b20cce36d621413a23d743ddBuy Upgrade Card58677422018-06-28 7:08:081623 days 1 hr ago0x401678df30b5a77ee5d9c6716da6679a77b4c4d6 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000206315.2
0x9fb53ae0ccaa68074728c2e055d569732de9a66982c77d6756978bc8b6849109Buy Basic Cards58447422018-06-24 7:15:331627 days 1 hr agoENS Name mshahidzafar.eth IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000860329.1
0xeb523f5c377ab67d0fc8103bd01059dedd6d81dbac3083847571b87bef7649ebBuy Basic Cards58447402018-06-24 7:14:441627 days 1 hr agoENS Name mshahidzafar.eth IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000851788
0xcec4869682de813d5b603db45d46f444cb6b4e6fc3aa0b8a2ae8a4e6d558eb52Buy Basic Cards58447382018-06-24 7:13:541627 days 1 hr agoENS Name mshahidzafar.eth IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.001223119.1
0x8e2dcfccdd6438ca9278c9cea9d9ce846df3ec075b231458d2768d0d560a2c53Buy Basic Cards58447362018-06-24 7:13:321627 days 1 hr agoENS Name mshahidzafar.eth IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.0016462510.1
0x9d11c1cb06c5393d301e17f5125930311280a4cf59c1a3a089e434ae83178490Buy Basic Cards58447342018-06-24 7:13:141627 days 1 hr agoENS Name mshahidzafar.eth IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.0010612510
0xd6e0e334682e68b07922ca77a91dee86f868eed45f8c79a5ada2281c62cd0c78Buy Upgrade Card58447322018-06-24 7:12:221627 days 1 hr agoENS Name mshahidzafar.eth IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.0004364311
0x606a46174c750c64134e69b1cd6533a23f487d2cb6b790cb02da64834ccb5181Buy Upgrade Card58447292018-06-24 7:11:581627 days 1 hr agoENS Name mshahidzafar.eth IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.0004761112
0x4cc943f0706a9d456cfbde66a214937a7d58df91be5cfdb0dbce2d542ed89ef0Buy Basic Cards58381792018-06-23 4:58:251628 days 4 hrs ago0xd3f2edc3b6f8b7e988d3a3d01dac2c6c9ad36823 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.0017276313
0xc70a9a896cdd0f060d02320b1f63da2f97c4f3d28e28d7774e3987bf20eb653fBuy Basic Cards58142492018-06-19 2:15:091632 days 6 hrs ago0x401678df30b5a77ee5d9c6716da6679a77b4c4d6 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000813245
0x2173762cba0e4f8605be04e764c8f09ef694bcdbda603562a94aaf48266fa7e3Buy Upgrade Card58142482018-06-19 2:15:011632 days 6 hrs ago0x401678df30b5a77ee5d9c6716da6679a77b4c4d6 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000206315.2
0x4b80ca1ade61fbdd4252f31998e48cead3d36839cc928d4a37fed66f7e3e6469Buy Basic Cards58128352018-06-18 20:38:291632 days 12 hrs ago0xd3f2edc3b6f8b7e988d3a3d01dac2c6c9ad36823 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.0017276313
0x0ad08769c07a15ef70571994f9e6a1cf8d18bb44649c1a6b59dac1a31c577b33Buy Basic Cards57907232018-06-15 2:11:401636 days 6 hrs ago0x0151cc37e580002656bd501d6084e6a2131d8b04 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.0016490712.264
0xb0963e3da20161cb64e4375b98d038f8e3b133b288de5f55389369c58986a833Buy Basic Cards57907212018-06-15 2:11:151636 days 6 hrs ago0x0151cc37e580002656bd501d6084e6a2131d8b04 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.001196059
0x39349983406103a175fc0dafd08a944fe53efca35ce4fd70f087460b6cec4a00Buy Basic Cards57830642018-06-13 18:37:261637 days 14 hrs ago0x8391cf4352ac126876abe14dffbb876f52f4e5d0 IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000739475
0x1b6680d6c583de46c8f5a2fed527165412d7e7b91deb743b5a8937d2731a0034Buy Basic Cards57825062018-06-13 16:16:201637 days 16 hrs ago0x705d6cdaefcca31268070258c0ffd6537a09cc7f IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.0048686420.6
0x92ca20c4a13731c529a12527c73cc6cd617cae76dc3f19ebcfac74b1a9fd9ae0Buy Basic Cards57784572018-06-12 23:02:481638 days 10 hrs ago0xcc8c09ef34b7868de0de0f743c9bf6cc33b69a4b IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000054171
0x12ae3d19c25e8c49147ed3855f679b2d226b4823ec13ed5b910b485a356f0a01Buy Basic Cards57783302018-06-12 22:35:451638 days 10 hrs ago0xa76b59b53ff5cb236e2dd9b909135b797cac79db IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000236341
0x47284c9f8dfab9218cc89947a792d77ce9d72c4c8d7591eea13dcc237e276f89Buy Basic Cards57740642018-06-12 4:43:361639 days 4 hrs ago0xfe54d91d981df517832efeaf4024405d8f680d8b IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000236341
0x6dcbb6cefefd5b17d5e4607b9f95e1f0a315011addac6b7d860d53bf2e38a4b1Buy Basic Cards57734872018-06-12 2:14:041639 days 6 hrs agoENS Name moripy.eth IN  0x66ec7145b52cb088e79306beb3d26fad0935f8c30 Ether0.000472682
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CardsTrade

Compiler Version
v0.4.21+commit.dfe3193c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-05-17
*/

pragma solidity ^0.4.18;

library SafeMath {

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

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

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

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

contract CardsAccess {
  address autoAddress;
  address public owner;
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  function CardsAccess() public {
    owner = msg.sender;
  }

  function setAutoAddress(address _address) external onlyOwner {
    require(_address != address(0));
    autoAddress = _address;
  }

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

  modifier onlyAuto() {
    require(msg.sender == autoAddress);
    _;
  }

  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }
}

interface CardsInterface {
    function getJadeProduction(address player) external constant returns (uint256);
    function getUpgradeValue(address player, uint256 upgradeClass, uint256 unitId, uint256 upgradeValue) external view returns (uint256);
    function getGameStarted() external constant returns (bool);
    function balanceOf(address player) external constant returns(uint256);
    function balanceOfUnclaimed(address player) external constant returns (uint256);
    function coinBalanceOf(address player,uint8 itype) external constant returns(uint256);

    function setCoinBalance(address player, uint256 eth, uint8 itype, bool iflag) external;
    function setJadeCoin(address player, uint256 coin, bool iflag) external;
    function setJadeCoinZero(address player) external;

    function setLastJadeSaveTime(address player) external;
    function setRoughSupply(uint256 iroughSupply) external;

    function updatePlayersCoinByPurchase(address player, uint256 purchaseCost) external;
    function updatePlayersCoinByOut(address player) external;

    function increasePlayersJadeProduction(address player, uint256 increase) external;
    function reducePlayersJadeProduction(address player, uint256 decrease) external;

    function getUintsOwnerCount(address _address) external view returns (uint256);
    function setUintsOwnerCount(address _address, uint256 amount, bool iflag) external;

    function getOwnedCount(address player, uint256 cardId) external view returns (uint256);
    function setOwnedCount(address player, uint256 cardId, uint256 amount, bool iflag) external;

    function getUpgradesOwned(address player, uint256 upgradeId) external view returns (uint256);
    function setUpgradesOwned(address player, uint256 upgradeId) external;
    
    function getTotalEtherPool(uint8 itype) external view returns (uint256);
    function setTotalEtherPool(uint256 inEth, uint8 itype, bool iflag) external;

    function setNextSnapshotTime(uint256 iTime) external;
    function getNextSnapshotTime() external view;

    function AddPlayers(address _address) external;
    function getTotalUsers()  external view returns (uint256);
    function getRanking() external view returns (address[] addr, uint256[] _arr);
    function getAttackRanking() external view returns (address[] addr, uint256[] _arr);

    function getUnitsProduction(address player, uint256 cardId, uint256 amount) external constant returns (uint256);

    function getUnitCoinProductionIncreases(address _address, uint256 cardId) external view returns (uint256);
    function setUnitCoinProductionIncreases(address _address, uint256 cardId, uint256 iValue,bool iflag) external;
    function getUnitCoinProductionMultiplier(address _address, uint256 cardId) external view returns (uint256);
    function setUnitCoinProductionMultiplier(address _address, uint256 cardId, uint256 iValue,bool iflag) external;
    function setUnitAttackIncreases(address _address, uint256 cardId, uint256 iValue,bool iflag) external;
    function setUnitAttackMultiplier(address _address, uint256 cardId, uint256 iValue,bool iflag) external;
    function setUnitDefenseIncreases(address _address, uint256 cardId, uint256 iValue,bool iflag) external;
    function setunitDefenseMultiplier(address _address, uint256 cardId, uint256 iValue,bool iflag) external;
    
    function setUnitJadeStealingIncreases(address _address, uint256 cardId, uint256 iValue,bool iflag) external;
    function setUnitJadeStealingMultiplier(address _address, uint256 cardId, uint256 iValue,bool iflag) external;

    function setUintCoinProduction(address _address, uint256 cardId, uint256 iValue,bool iflag) external;
    function getUintCoinProduction(address _address, uint256 cardId) external returns (uint256);

    function getUnitsInProduction(address player, uint256 unitId, uint256 amount) external constant returns (uint256);
    function getPlayersBattleStats(address player) public constant returns (
    uint256 attackingPower, 
    uint256 defendingPower, 
    uint256 stealingPower,
    uint256 battlePower); 
}


interface GameConfigInterface {
  function getMaxCAP() external returns (uint256);
  function unitCoinProduction(uint256 cardId) external constant returns (uint256);
  function getCostForCards(uint256 cardId, uint256 existing, uint256 amount) external constant returns (uint256);
  function getUpgradeCardsInfo(uint256 upgradecardId,uint256 existing) external constant returns (
    uint256 coinCost, 
    uint256 ethCost, 
    uint256 upgradeClass, 
    uint256 cardId, 
    uint256 upgradeValue,
    uint256 platCost
  );
 function getCardInfo(uint256 cardId, uint256 existing, uint256 amount) external constant returns (uint256, uint256, uint256, uint256, bool);
 function getBattleCardInfo(uint256 cardId, uint256 existing, uint256 amount) external constant returns (uint256, uint256, uint256, bool);
  
}

interface RareInterface {
  function getRareItemsOwner(uint256 rareId) external view returns (address);
  function getRareItemsPrice(uint256 rareId) external view returns (uint256);
    function getRareInfo(uint256 _tokenId) external view returns (
    uint256 sellingPrice,
    address owner,
    uint256 nextPrice,
    uint256 rareClass,
    uint256 cardId,
    uint256 rareValue
  ); 
  function transferToken(address _from, address _to, uint256 _tokenId) external;
  function transferTokenByContract(uint256 _tokenId,address _to) external;
  function setRarePrice(uint256 _rareId, uint256 _price) external;
  function rareStartPrice() external view returns (uint256);
}

contract CardsHelper is CardsAccess {
  //data contract
  CardsInterface public cards ;
  GameConfigInterface public schema;
  RareInterface public rare;

  function setCardsAddress(address _address) external onlyOwner {
    cards = CardsInterface(_address);
  }

   //normal cards
  function setConfigAddress(address _address) external onlyOwner {
    schema = GameConfigInterface(_address);
  }

  //rare cards
  function setRareAddress(address _address) external onlyOwner {
    rare = RareInterface(_address);
  }

  function upgradeUnitMultipliers(address player, uint256 upgradeClass, uint256 unitId, uint256 upgradeValue) internal {
    uint256 productionGain;
    if (upgradeClass == 0) {
      cards.setUnitCoinProductionIncreases(player, unitId, upgradeValue,true);
      productionGain = (cards.getOwnedCount(player,unitId) * upgradeValue * (10 + cards.getUnitCoinProductionMultiplier(player,unitId)));
      cards.setUintCoinProduction(player,unitId,productionGain,true); 
      cards.increasePlayersJadeProduction(player,productionGain);
    } else if (upgradeClass == 1) {
      cards.setUnitCoinProductionMultiplier(player,unitId,upgradeValue,true);
      productionGain = (cards.getOwnedCount(player,unitId) * upgradeValue * (schema.unitCoinProduction(unitId) + cards.getUnitCoinProductionIncreases(player,unitId)));
      cards.setUintCoinProduction(player,unitId,productionGain,true);
      cards.increasePlayersJadeProduction(player,productionGain);
    } else if (upgradeClass == 2) {
      cards.setUnitAttackIncreases(player,unitId,upgradeValue,true);
    } else if (upgradeClass == 3) {
      cards.setUnitAttackMultiplier(player,unitId,upgradeValue,true);
    } else if (upgradeClass == 4) {
      cards.setUnitDefenseIncreases(player,unitId,upgradeValue,true);
    } else if (upgradeClass == 5) {
      cards.setunitDefenseMultiplier(player,unitId,upgradeValue,true);
    } else if (upgradeClass == 6) {
      cards.setUnitJadeStealingIncreases(player,unitId,upgradeValue,true);
    } else if (upgradeClass == 7) {
      cards.setUnitJadeStealingMultiplier(player,unitId,upgradeValue,true);
    }
  }

  function removeUnitMultipliers(address player, uint256 upgradeClass, uint256 unitId, uint256 upgradeValue) internal {
    uint256 productionLoss;
    if (upgradeClass == 0) {
      cards.setUnitCoinProductionIncreases(player, unitId, upgradeValue,false);
      productionLoss = (cards.getOwnedCount(player,unitId) * upgradeValue * (10 + cards.getUnitCoinProductionMultiplier(player,unitId)));
      cards.setUintCoinProduction(player,unitId,productionLoss,false); 
      cards.reducePlayersJadeProduction(player, productionLoss);
    } else if (upgradeClass == 1) {
      cards.setUnitCoinProductionMultiplier(player,unitId,upgradeValue,false);
      productionLoss = (cards.getOwnedCount(player,unitId) * upgradeValue * (schema.unitCoinProduction(unitId) + cards.getUnitCoinProductionIncreases(player,unitId)));
      cards.setUintCoinProduction(player,unitId,productionLoss,false); 
      cards.reducePlayersJadeProduction(player, productionLoss);
    } else if (upgradeClass == 2) {
      cards.setUnitAttackIncreases(player,unitId,upgradeValue,false);
    } else if (upgradeClass == 3) {
      cards.setUnitAttackMultiplier(player,unitId,upgradeValue,false);
    } else if (upgradeClass == 4) {
      cards.setUnitDefenseIncreases(player,unitId,upgradeValue,false);
    } else if (upgradeClass == 5) {
      cards.setunitDefenseMultiplier(player,unitId,upgradeValue,false);
    } else if (upgradeClass == 6) { 
      cards.setUnitJadeStealingIncreases(player,unitId,upgradeValue,false);
    } else if (upgradeClass == 7) {
      cards.setUnitJadeStealingMultiplier(player,unitId,upgradeValue,false);
    }
  }
}

contract CardsTrade is CardsHelper {
   // Minor game events
  event UnitBought(address player, uint256 unitId, uint256 amount);
  event UpgradeCardBought(address player, uint256 upgradeId);
  event BuyRareCard(address player, address previous, uint256 rareId,uint256 iPrice);
  event UnitSold(address player, uint256 unitId, uint256 amount);

  mapping(address => mapping(uint256 => uint256)) unitsOwnedOfEth; //cards bought through ether

  function() external payable {
    cards.setTotalEtherPool(msg.value,0,true);
  }
  
  /// @notice invite 
  function sendGiftCard(address _address) external onlyAuto {
    uint256 existing = cards.getOwnedCount(_address,1);
    require(existing < schema.getMaxCAP());
    require(SafeMath.add(existing,1) <= schema.getMaxCAP());

    // Update players jade
    cards.updatePlayersCoinByPurchase(_address, 0);
        
    if (schema.unitCoinProduction(1) > 0) {
      cards.increasePlayersJadeProduction(_address,cards.getUnitsProduction(_address, 1, 1)); 
      cards.setUintCoinProduction(_address,1,cards.getUnitsProduction(_address, 1, 1),true); 
    }
    //players
    if (cards.getUintsOwnerCount(_address) <= 0) {
      cards.AddPlayers(_address);
    }
    cards.setUintsOwnerCount(_address,1,true);
  
    cards.setOwnedCount(_address,1,1,true);
    UnitBought(_address, 1, 1);
  } 
  
  /// buy normal cards with jade
  function buyBasicCards(uint256 unitId, uint256 amount) external {
    require(cards.getGameStarted());
    require(amount>=1);
    uint256 existing = cards.getOwnedCount(msg.sender,unitId);
    uint256 iAmount;
    require(existing < schema.getMaxCAP());
    if (SafeMath.add(existing, amount) > schema.getMaxCAP()) {
      iAmount = SafeMath.sub(schema.getMaxCAP(),existing);
    } else {
      iAmount = amount;
    }
    uint256 coinProduction;
    uint256 coinCost;
    uint256 ethCost;
    if (unitId>=1 && unitId<=39) {    
      (, coinProduction, coinCost, ethCost,) = schema.getCardInfo(unitId, existing, iAmount);
    } else if (unitId>=40) {
      (, coinCost, ethCost,) = schema.getBattleCardInfo(unitId, existing, iAmount);
    }
    require(cards.balanceOf(msg.sender) >= coinCost);
    require(ethCost == 0); // Free ether unit
        
    // Update players jade 
    cards.updatePlayersCoinByPurchase(msg.sender, coinCost);
    ///****increase production***/
    if (coinProduction > 0) {
      cards.increasePlayersJadeProduction(msg.sender,cards.getUnitsProduction(msg.sender, unitId, iAmount)); 
      cards.setUintCoinProduction(msg.sender,unitId,cards.getUnitsProduction(msg.sender, unitId, iAmount),true); 
    }
    //players
    if (cards.getUintsOwnerCount(msg.sender)<=0) {
      cards.AddPlayers(msg.sender);
    }
    cards.setUintsOwnerCount(msg.sender,iAmount,true);
    cards.setOwnedCount(msg.sender,unitId,iAmount,true);
    
    UnitBought(msg.sender, unitId, iAmount);
  }

  /// buy cards with ether
  function buyEthCards(uint256 unitId, uint256 amount) external payable {
    require(cards.getGameStarted());
    require(amount>=1);
    uint256 existing = cards.getOwnedCount(msg.sender,unitId);
    require(existing < schema.getMaxCAP());    
    
    uint256 iAmount;
    if (SafeMath.add(existing, amount) > schema.getMaxCAP()) {
      iAmount = SafeMath.sub(schema.getMaxCAP(),existing);
    } else {
      iAmount = amount;
    }
    uint256 coinProduction;
    uint256 coinCost;
    uint256 ethCost;
    if (unitId>=1 && unitId<=39) {
      (,coinProduction, coinCost, ethCost,) = schema.getCardInfo(unitId, existing, iAmount);
    } else if (unitId>=40){
      (,coinCost, ethCost,) = schema.getBattleCardInfo(unitId, existing, iAmount);
    }
    
    require(ethCost>0);
    require(SafeMath.add(cards.coinBalanceOf(msg.sender,0),msg.value) >= ethCost);
    require(cards.balanceOf(msg.sender) >= coinCost);  

    // Update players jade  
    cards.updatePlayersCoinByPurchase(msg.sender, coinCost);

    if (ethCost > msg.value) {
      cards.setCoinBalance(msg.sender,SafeMath.sub(ethCost,msg.value),0,false);
    } else if (msg.value > ethCost) {
      // Store overbid in their balance
      cards.setCoinBalance(msg.sender,SafeMath.sub(msg.value,ethCost),0,true);
    } 

    uint256 devFund = uint256(SafeMath.div(ethCost,20)); // 5% defund
    cards.setTotalEtherPool(uint256(SafeMath.div(ethCost,4)),0,true);  // 25% go to pool
    cards.setCoinBalance(owner,devFund,0,true);  
  
    //check procution   
    if (coinProduction > 0) {
      cards.increasePlayersJadeProduction(msg.sender, cards.getUnitsProduction(msg.sender, unitId, iAmount)); // increase procuction
      cards.setUintCoinProduction(msg.sender,unitId,cards.getUnitsProduction(msg.sender, unitId, iAmount),true); 
    }
    //players
    if (cards.getUintsOwnerCount(msg.sender)<=0) {
      cards.AddPlayers(msg.sender);
    }
    cards.setUintsOwnerCount(msg.sender,iAmount,true);
    cards.setOwnedCount(msg.sender,unitId,iAmount,true);
    unitsOwnedOfEth[msg.sender][unitId] = SafeMath.add(unitsOwnedOfEth[msg.sender][unitId],iAmount);
    UnitBought(msg.sender, unitId, iAmount);
  }

   /// buy upgrade cards with ether/Jade
  function buyUpgradeCard(uint256 upgradeId) external payable {
    require(cards.getGameStarted());
    require(upgradeId>=1);
    uint256 existing = cards.getUpgradesOwned(msg.sender,upgradeId);
    require(existing<=5); 
    uint256 coinCost;
    uint256 ethCost;
    uint256 upgradeClass;
    uint256 unitId;
    uint256 upgradeValue;
    (coinCost, ethCost, upgradeClass, unitId, upgradeValue,) = schema.getUpgradeCardsInfo(upgradeId,existing);

    if (ethCost > 0) {
      require(SafeMath.add(cards.coinBalanceOf(msg.sender,0),msg.value) >= ethCost); 
      
      if (ethCost > msg.value) { // They can use their balance instead
        cards.setCoinBalance(msg.sender, SafeMath.sub(ethCost,msg.value),0,false);
      } else if (ethCost < msg.value) {  
        cards.setCoinBalance(msg.sender,SafeMath.sub(msg.value,ethCost),0,true);
      } 

      // defund 5%
      uint256 devFund = uint256(SafeMath.div(ethCost, 20)); // 5% fee on purchases (marketing, gameplay & maintenance)
      cards.setTotalEtherPool(SafeMath.sub(ethCost,devFund),0,true); // go to pool 95%
      cards.setCoinBalance(owner,devFund,0,true);  
    }
    require(cards.balanceOf(msg.sender) >= coinCost);  
    cards.updatePlayersCoinByPurchase(msg.sender, coinCost);

    upgradeUnitMultipliers(msg.sender, upgradeClass, unitId, upgradeValue);  
    cards.setUpgradesOwned(msg.sender,upgradeId); //upgrade cards level

    UpgradeCardBought(msg.sender, upgradeId);
  }

  // Allows someone to send ether and obtain the token
  function buyRareItem(uint256 rareId) external payable {
    require(cards.getGameStarted());        
    address previousOwner = rare.getRareItemsOwner(rareId); 
    require(previousOwner != 0);
    require(msg.sender!=previousOwner);  // can not buy from itself
    
    uint256 ethCost = rare.getRareItemsPrice(rareId);
    uint256 totalCost = SafeMath.add(cards.coinBalanceOf(msg.sender,0),msg.value);
    require(totalCost >= ethCost); 
        
    // We have to claim buyer/sellder's goo before updating their production values 
    cards.updatePlayersCoinByOut(msg.sender);
    cards.updatePlayersCoinByOut(previousOwner);

    uint256 upgradeClass;
    uint256 unitId;
    uint256 upgradeValue;
    (,,,,upgradeClass, unitId, upgradeValue) = rare.getRareInfo(rareId);
    
    upgradeUnitMultipliers(msg.sender, upgradeClass, unitId, upgradeValue); 
    removeUnitMultipliers(previousOwner, upgradeClass, unitId, upgradeValue); 

    // Splitbid/Overbid
    if (ethCost > msg.value) {
      cards.setCoinBalance(msg.sender,SafeMath.sub(ethCost,msg.value),0,false);
    } else if (msg.value > ethCost) {
      // Store overbid in their balance
      cards.setCoinBalance(msg.sender,SafeMath.sub(msg.value,ethCost),0,true);
    }  
    // Distribute ethCost
    uint256 devFund = uint256(SafeMath.div(ethCost, 20)); // 5% fee on purchases (marketing, gameplay & maintenance) 
    uint256 dividends = uint256(SafeMath.div(ethCost,20)); // 5% goes to pool 

    cards.setTotalEtherPool(dividends,0,true);
    cards.setCoinBalance(owner,devFund,0,true); 
        
    // Transfer / update rare item
    rare.transferToken(previousOwner,msg.sender,rareId); 
    rare.setRarePrice(rareId,SafeMath.div(SafeMath.mul(ethCost,5),4));

    cards.setCoinBalance(previousOwner,SafeMath.sub(ethCost,SafeMath.add(dividends,devFund)),0,true);

    //players
    if (cards.getUintsOwnerCount(msg.sender)<=0) {
      cards.AddPlayers(msg.sender);
    }
   
    cards.setUintsOwnerCount(msg.sender,1,true);
    cards.setUintsOwnerCount(previousOwner,1,false);

    //tell the world
    BuyRareCard(msg.sender, previousOwner, rareId, ethCost);
  }
  
  /// sell out cards ,upgrade cards can not be sold
  function sellCards(uint256 unitId, uint256 amount) external {
    require(cards.getGameStarted());
    uint256 existing = cards.getOwnedCount(msg.sender,unitId);
    require(existing >= amount && amount>0); 
    existing = SafeMath.sub(existing,amount);

    uint256 coinChange;
    uint256 decreaseCoin;
    uint256 schemaUnitId;
    uint256 coinProduction;
    uint256 coinCost;
    uint256 ethCost;
    bool sellable;
    if (unitId>=40) {
      (schemaUnitId,coinCost,ethCost, sellable) = schema.getBattleCardInfo(unitId, existing, amount);
    } else {
      (schemaUnitId, coinProduction, coinCost, ethCost, sellable) = schema.getCardInfo(unitId, existing, amount);
    }
    if (ethCost>0) {
      require(unitsOwnedOfEth[msg.sender][unitId]>=amount);
    }
    //cards can be sold
    require(sellable);
    if (coinCost>0) {
      coinChange = SafeMath.add(cards.balanceOfUnclaimed(msg.sender), SafeMath.div(SafeMath.mul(coinCost,70),100)); // Claim unsaved goo whilst here
    } else {
      coinChange = cards.balanceOfUnclaimed(msg.sender); //if 0
    }

    cards.setLastJadeSaveTime(msg.sender); 
    cards.setRoughSupply(coinChange);  
    cards.setJadeCoin(msg.sender, coinChange, true); //  70% to users

    decreaseCoin = cards.getUnitsInProduction(msg.sender, unitId, amount); 
    
    if (coinProduction > 0) { 
      cards.reducePlayersJadeProduction(msg.sender, decreaseCoin);
      //reduct production
      cards.setUintCoinProduction(msg.sender,unitId,decreaseCoin,false); 
    }

    if (ethCost > 0) { // Premium units sell for 70% of buy cost
      cards.setCoinBalance(msg.sender,SafeMath.div(SafeMath.mul(ethCost,70),100),0,true);
    }

    cards.setOwnedCount(msg.sender,unitId,amount,false); //subscriber
    cards.setUintsOwnerCount(msg.sender,amount,false);
    if (ethCost>0) {
      unitsOwnedOfEth[msg.sender][unitId] = SafeMath.sub(unitsOwnedOfEth[msg.sender][unitId],amount);
    }
    //tell the world
    UnitSold(msg.sender, unitId, amount);
  }

  // withraw ether
  function withdrawAmount (uint256 _amount) public onlyOwner {
    require(_amount<= this.balance);
    owner.transfer(_amount);
  }
   /// withdraw ether to wallet
  function withdrawEtherFromTrade(uint256 amount) external {
    require(amount <= cards.coinBalanceOf(msg.sender,0));
    cards.setCoinBalance(msg.sender,amount,0,false);
    msg.sender.transfer(amount);
  }

  function getCanSellUnit(address _address,uint256 unitId) external view returns (uint256) {
    return unitsOwnedOfEth[_address][unitId];
  }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"unitId","type":"uint256"},{"name":"amount","type":"uint256"}],"name":"buyEthCards","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"unitId","type":"uint256"},{"name":"amount","type":"uint256"}],"name":"buyBasicCards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cards","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdrawEtherFromTrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rare","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setAutoAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setCardsAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setRareAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setConfigAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"unitId","type":"uint256"},{"name":"amount","type":"uint256"}],"name":"sellCards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"rareId","type":"uint256"}],"name":"buyRareItem","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"},{"name":"unitId","type":"uint256"}],"name":"getCanSellUnit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"sendGiftCard","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"upgradeId","type":"uint256"}],"name":"buyUpgradeCard","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"schema","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"unitId","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"UnitBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"upgradeId","type":"uint256"}],"name":"UpgradeCardBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"previous","type":"address"},{"indexed":false,"name":"rareId","type":"uint256"},{"indexed":false,"name":"iPrice","type":"uint256"}],"name":"BuyRareCard","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"unitId","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"UnitSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

606060405260018054600160a060020a03191633600160a060020a031617905561450f8061002e6000396000f3006060604052600436106100e25763ffffffff60e060020a6000350416630562b9f781146101515780631c60f3bb146101695780633702ab031461017757806358a4903f1461019057806363c78e87146101bf5780636bb7b7a4146101d55780636c3fb63c146101e85780636cdb1b751461020757806376f2ccb91461022657806383a12de9146102455780638da5cb5b146102645780639a5c0abc146102775780639e30dd5f14610290578063a16e68d61461029b578063bf86cac1146102cf578063c3059c63146102ee578063f2fde38b146102f9578063f8895cc814610318575b600254600160a060020a031663358cfa25346000600160405160e060020a63ffffffff8616028152600481019390935260ff909116602483015215156044820152606401600060405180830381600087803b151561013f57600080fd5b5af1151561014c57600080fd5b505050005b341561015c57600080fd5b61016760043561032b565b005b610167600435602435610393565b341561018257600080fd5b610167600435602435610ebb565b341561019b57600080fd5b6101a36116d5565b604051600160a060020a03909116815260200160405180910390f35b34156101ca57600080fd5b6101676004356116e4565b34156101e057600080fd5b6101a361180e565b34156101f357600080fd5b610167600160a060020a036004351661181d565b341561021257600080fd5b610167600160a060020a036004351661187c565b341561023157600080fd5b610167600160a060020a03600435166118c6565b341561025057600080fd5b610167600160a060020a0360043516611910565b341561026f57600080fd5b6101a361195a565b341561028257600080fd5b610167600435602435611969565b6101676004356121ac565b34156102a657600080fd5b6102bd600160a060020a0360043516602435612aa6565b60405190815260200160405180910390f35b34156102da57600080fd5b610167600160a060020a0360043516612ace565b6101676004356130c9565b341561030457600080fd5b610167600160a060020a036004351661368c565b341561032357600080fd5b6101a3613727565b60015433600160a060020a0390811691161461034657600080fd5b600160a060020a0330163181111561035d57600080fd5b600154600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151561039057600080fd5b50565b60025460009081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156103df57600080fd5b5af115156103ec57600080fd5b50505060405180519050151561040157600080fd5b600187101561040f57600080fd5b600254600160a060020a031663196ecd25338a60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561046557600080fd5b5af1151561047257600080fd5b5050506040518051600354909750600160a060020a0316905063341367ec6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104be57600080fd5b5af115156104cb57600080fd5b5050506040518051871090506104e057600080fd5b600354600160a060020a031663341367ec6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561051f57600080fd5b5af1151561052c57600080fd5b505050604051805190506105408789613736565b11156105ad576003546105a690600160a060020a031663341367ec6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561058957600080fd5b5af1151561059657600080fd5b5050506040518051905087613750565b94506105b1565b8694505b600188101580156105c3575060278811155b1561065d57600354600160a060020a031663ee4827ea89888860405160e060020a63ffffffff861602815260048101939093526024830191909152604482015260640160a060405180830381600087803b151561061f57600080fd5b5af1151561062c57600080fd5b50505060405180519060200180519060200180519060200180519060200180515092975090955093506106ec915050565b602888106106ec57600354600160a060020a031663b2570b1c89888860405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401608060405180830381600087803b15156106bc57600080fd5b5af115156106c957600080fd5b505050604051805190602001805190602001805190602001805150919550935050505b600082116106f957600080fd5b600254829061077690600160a060020a031663e8d320e633600060405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b151561075957600080fd5b5af1151561076657600080fd5b5050506040518051905034613736565b101561078157600080fd5b6002548390600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156107d357600080fd5b5af115156107e057600080fd5b50505060405180519050101515156107f757600080fd5b600254600160a060020a031663a1c90a11338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561084d57600080fd5b5af1151561085a57600080fd5b505050348211156108ee57600254600160a060020a03166354605549336108818534613750565b60008060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b15156108d957600080fd5b5af115156108e657600080fd5b50505061097c565b8134111561097c57600254600160a060020a03166354605549336109123486613750565b6000600160405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b151561096b57600080fd5b5af1151561097857600080fd5b5050505b610987826014613762565b600254909150600160a060020a031663358cfa256109a6846004613762565b6000600160405160e060020a63ffffffff8616028152600481019390935260ff909116602483015215156044820152606401600060405180830381600087803b15156109f157600080fd5b5af115156109fe57600080fd5b505060025460018054600160a060020a0392831693506354605549921690849060009060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515610a7657600080fd5b5af11515610a8357600080fd5b5050506000841115610c4357600254600160a060020a03166379c310a63382632d171243828d8b60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610af557600080fd5b5af11515610b0257600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610b4f57600080fd5b5af11515610b5c57600080fd5b5050600254600160a060020a0316905063ce29555f338a83632d17124383838c60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610bc757600080fd5b5af11515610bd457600080fd5b50505060405180519050600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515610c3257600080fd5b5af11515610c3f57600080fd5b5050505b600254600090600160a060020a031663a436e33b3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c9657600080fd5b5af11515610ca357600080fd5b50505060405180519050111515610d1557600254600160a060020a031663f7fb0a4b3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610d0457600080fd5b5af11515610d1157600080fd5b5050505b600254600160a060020a031663fc4756df3387600160405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515610d7757600080fd5b5af11515610d8457600080fd5b5050600254600160a060020a0316905063e7001b84338a88600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515610df057600080fd5b5af11515610dfd57600080fd5b505050600160a060020a03331660009081526005602090815260408083208b8452909152902054610e2e9086613736565b33600160a060020a03811660009081526005602090815260408083208d845290915290819020929092557fb6d35f558a34938047f09ebf800fa2e15ec407c357a8eab97a5dd67b4d015b5b918a908890518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15050505050505050565b6002546000908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610f0557600080fd5b5af11515610f1257600080fd5b505050604051805190501515610f2757600080fd5b6001861015610f3557600080fd5b600254600160a060020a031663196ecd25338960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610f8b57600080fd5b5af11515610f9857600080fd5b5050506040518051600354909650600160a060020a0316905063341367ec6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fe457600080fd5b5af11515610ff157600080fd5b50505060405180518610905061100657600080fd5b600354600160a060020a031663341367ec6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561104557600080fd5b5af1151561105257600080fd5b505050604051805190506110668688613736565b11156110d3576003546110cc90600160a060020a031663341367ec6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110af57600080fd5b5af115156110bc57600080fd5b5050506040518051905086613750565b93506110d7565b8593505b600187101580156110e9575060278711155b1561118357600354600160a060020a031663ee4827ea88878760405160e060020a63ffffffff861602815260048101939093526024830191909152604482015260640160a060405180830381600087803b151561114557600080fd5b5af1151561115257600080fd5b5050506040518051906020018051906020018051906020018051906020018051509296509094509250611212915050565b6028871061121257600354600160a060020a031663b2570b1c88878760405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401608060405180830381600087803b15156111e257600080fd5b5af115156111ef57600080fd5b505050604051805190602001805190602001805190602001805150919450925050505b6002548290600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561126457600080fd5b5af1151561127157600080fd5b505050604051805190501015151561128857600080fd5b801561129357600080fd5b600254600160a060020a031663a1c90a11338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156112e957600080fd5b5af115156112f657600080fd5b50505060008311156114b657600254600160a060020a03166379c310a63382632d171243828c8a60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561136857600080fd5b5af1151561137557600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156113c257600080fd5b5af115156113cf57600080fd5b5050600254600160a060020a0316905063ce29555f338983632d17124383838b60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561143a57600080fd5b5af1151561144757600080fd5b50505060405180519050600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156114a557600080fd5b5af115156114b257600080fd5b5050505b600254600090600160a060020a031663a436e33b3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561150957600080fd5b5af1151561151657600080fd5b5050506040518051905011151561158857600254600160a060020a031663f7fb0a4b3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561157757600080fd5b5af1151561158457600080fd5b5050505b600254600160a060020a031663fc4756df3386600160405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b15156115ea57600080fd5b5af115156115f757600080fd5b5050600254600160a060020a0316905063e7001b84338987600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b151561166357600080fd5b5af1151561167057600080fd5b5050507fb6d35f558a34938047f09ebf800fa2e15ec407c357a8eab97a5dd67b4d015b5b3388866040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150505050505050565b600254600160a060020a031681565b600254600160a060020a031663e8d320e633600060405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b151561173e57600080fd5b5af1151561174b57600080fd5b5050506040518051821115905061176157600080fd5b600254600160a060020a03166354605549338360008060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b15156117cc57600080fd5b5af115156117d957600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f19350505050151561039057600080fd5b600454600160a060020a031681565b60015433600160a060020a0390811691161461183857600080fd5b600160a060020a038116151561184d57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a0390811691161461189757600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146118e157600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a0390811691161461192b57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a031681565b6002546000908190819081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156119b957600080fd5b5af115156119c657600080fd5b5050506040518051905015156119db57600080fd5b600254600160a060020a031663196ecd25338c60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611a3157600080fd5b5af11515611a3e57600080fd5b5050506040518051985050888810801590611a595750600089115b1515611a6457600080fd5b611a6e888a613750565b975060288a10611b0857600354600160a060020a031663b2570b1c8b8a8c60405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401608060405180830381600087803b1515611acf57600080fd5b5af11515611adc57600080fd5b50505060405180519060200180519060200180519060200180519398509195509350909150611b9c9050565b600354600160a060020a031663ee4827ea8b8a8c60405160e060020a63ffffffff861602815260048101939093526024830191909152604482015260640160a060405180830381600087803b1515611b5f57600080fd5b5af11515611b6c57600080fd5b50505060405180519060200180519060200180519060200180519060200180519499509297509095509350909150505b6000821115611bd657600160a060020a03331660009081526005602090815260408083208d845290915290205489901015611bd657600080fd5b801515611be257600080fd5b6000831115611c7757600254611c7090600160a060020a0316634676b8973360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611c3f57600080fd5b5af11515611c4c57600080fd5b50505060405180519050611c6b611c64866046613779565b6064613762565b613736565b9650611ce0565b600254600160a060020a0316634676b8973360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611cc757600080fd5b5af11515611cd457600080fd5b50505060405180519750505b600254600160a060020a031663176854f63360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515611d3057600080fd5b5af11515611d3d57600080fd5b5050600254600160a060020a0316905063448a0ceb8860405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611d8957600080fd5b5af11515611d9657600080fd5b5050600254600160a060020a0316905063a6678b603389600160405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515611dfc57600080fd5b5af11515611e0957600080fd5b5050600254600160a060020a031690506397ce3a4b338c8c60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611e6c57600080fd5b5af11515611e7957600080fd5b50505060405180519650506000841115611f6d57600254600160a060020a031663396e70e0338860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611ee357600080fd5b5af11515611ef057600080fd5b5050600254600160a060020a0316905063ce29555f338c89600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515611f5c57600080fd5b5af11515611f6957600080fd5b5050505b600082111561200057600254600160a060020a0316635460554933611f96611c64866046613779565b6000600160405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515611fef57600080fd5b5af11515611ffc57600080fd5b5050505b600254600160a060020a031663e7001b84338c8c600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b151561206857600080fd5b5af1151561207557600080fd5b5050600254600160a060020a0316905063fc4756df338b600060405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b15156120db57600080fd5b5af115156120e857600080fd5b505050600082111561214757600160a060020a03331660009081526005602090815260408083208d8452909152902054612122908a613750565b600160a060020a03331660009081526005602090815260408083208e84529091529020555b7f9c8076df639d56f1ef3ca3d4d8dc6ed089f8c4756bc5bf5d574f1cec4ef13c54338b8b6040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150505050505050505050565b6002546000908190819081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156121fc57600080fd5b5af1151561220957600080fd5b50505060405180519050151561221e57600080fd5b600454600160a060020a03166372eefb8a8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561226657600080fd5b5af1151561227357600080fd5b5050506040518051985050600160a060020a038816151561229357600080fd5b87600160a060020a031633600160a060020a0316141515156122b457600080fd5b600454600160a060020a031663103d26ac8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156122fc57600080fd5b5af1151561230957600080fd5b50505060405180516002549098506123739150600160a060020a031663e8d320e633600060405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b151561075957600080fd5b95508686101561238257600080fd5b600254600160a060020a031663e3cbe7443360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156123d257600080fd5b5af115156123df57600080fd5b5050600254600160a060020a0316905063e3cbe7448960405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561243357600080fd5b5af1151561244057600080fd5b5050600454600160a060020a0316905063275babee8a60405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b151561248c57600080fd5b5af1151561249957600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051929a509098509096506124dc9350339250889150879050866137a4565b6124e888868686613e5a565b3487111561257957600254600160a060020a031663546055493361250c8a34613750565b60008060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b151561256457600080fd5b5af1151561257157600080fd5b505050612607565b8634111561260757600254600160a060020a031663546055493361259d348b613750565b6000600160405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b15156125f657600080fd5b5af1151561260357600080fd5b5050505b612612876014613762565b915061261f876014613762565b600254909150600160a060020a031663358cfa25826000600160405160e060020a63ffffffff8616028152600481019390935260ff909116602483015215156044820152606401600060405180830381600087803b151561267f57600080fd5b5af1151561268c57600080fd5b505060025460018054600160a060020a0392831693506354605549921690859060009060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b151561270457600080fd5b5af1151561271157600080fd5b5050600454600160a060020a0316905063f5537ede89338c60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b151561277857600080fd5b5af1151561278557600080fd5b5050600454600160a060020a031690506373a553898a6127b06127a98b6005613779565b6004613762565b60405160e060020a63ffffffff851602815260048101929092526024820152604401600060405180830381600087803b15156127eb57600080fd5b5af115156127f857600080fd5b5050600254600160a060020a031690506354605549896128218a61281c8688613736565b613750565b6000600160405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b151561287a57600080fd5b5af1151561288757600080fd5b505060025460009150600160a060020a031663a436e33b3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156128dd57600080fd5b5af115156128ea57600080fd5b5050506040518051905011151561295c57600254600160a060020a031663f7fb0a4b3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561294b57600080fd5b5af1151561295857600080fd5b5050505b600254600160a060020a031663fc4756df3360018060405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b15156129be57600080fd5b5af115156129cb57600080fd5b5050600254600160a060020a0316905063fc4756df896001600060405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515612a3257600080fd5b5af11515612a3f57600080fd5b5050507f384a5203a72a9d3dc8f2dd0c78e393c368a78a6dfda91fc33f89bb8609a918d333898b8a604051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a1505050505050505050565b600160a060020a03919091166000908152600560209081526040808320938352929052205490565b6000805433600160a060020a03908116911614612aea57600080fd5b600254600160a060020a031663196ecd2583600160405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515612b4157600080fd5b5af11515612b4e57600080fd5b5050506040518051600354909250600160a060020a0316905063341367ec6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612b9a57600080fd5b5af11515612ba757600080fd5b505050604051805182109050612bbc57600080fd5b600354600160a060020a031663341367ec6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612bfb57600080fd5b5af11515612c0857600080fd5b50505060405180519050612c1d826001613736565b1115612c2857600080fd5b600254600160a060020a031663a1c90a1183600060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515612c7f57600080fd5b5af11515612c8c57600080fd5b505060035460009150600160a060020a031663702123ae600160405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612cdb57600080fd5b5af11515612ce857600080fd5b505050604051805190501115612eae57600254600160a060020a03166379c310a68382632d1712438260018060405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612d5f57600080fd5b5af11515612d6c57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515612db957600080fd5b5af11515612dc657600080fd5b5050600254600160a060020a0316905063ce29555f83600183632d17124383838060405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612e3257600080fd5b5af11515612e3f57600080fd5b50505060405180519050600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515612e9d57600080fd5b5af11515612eaa57600080fd5b5050505b600254600090600160a060020a031663a436e33b8460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515612f0157600080fd5b5af11515612f0e57600080fd5b50505060405180519050111515612f8057600254600160a060020a031663f7fb0a4b8360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515612f6f57600080fd5b5af11515612f7c57600080fd5b5050505b600254600160a060020a031663fc4756df8360018060405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515612fe257600080fd5b5af11515612fef57600080fd5b5050600254600160a060020a0316905063e7001b84836001808060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b151561305b57600080fd5b5af1151561306857600080fd5b5050507fb6d35f558a34938047f09ebf800fa2e15ec407c357a8eab97a5dd67b4d015b5b826001806040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15050565b600254600090819081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561311757600080fd5b5af1151561312457600080fd5b50505060405180519050151561313957600080fd5b600188101561314757600080fd5b600254600160a060020a031663e946ad4a338a60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561319d57600080fd5b5af115156131aa57600080fd5b505050604051805197505060058711156131c357600080fd5b600354600160a060020a03166373f9421d898960405160e060020a63ffffffff85160281526004810192909252602482015260440160c060405180830381600087803b151561321157600080fd5b5af1151561321e57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805150949a50929850909650945092505060008511156134f05760025485906132bc90600160a060020a031663e8d320e633600060405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b151561075957600080fd5b10156132c757600080fd5b3485111561335857600254600160a060020a03166354605549336132eb8834613750565b60008060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b151561334357600080fd5b5af1151561335057600080fd5b5050506133e6565b348510156133e657600254600160a060020a031663546055493361337c3489613750565b6000600160405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b15156133d557600080fd5b5af115156133e257600080fd5b5050505b6133f1856014613762565b600254909150600160a060020a031663358cfa2561340f8784613750565b6000600160405160e060020a63ffffffff8616028152600481019390935260ff909116602483015215156044820152606401600060405180830381600087803b151561345a57600080fd5b5af1151561346757600080fd5b505060025460018054600160a060020a0392831693506354605549921690849060009060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b15156134df57600080fd5b5af115156134ec57600080fd5b5050505b6002548690600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561354257600080fd5b5af1151561354f57600080fd5b505050604051805190501015151561356657600080fd5b600254600160a060020a031663a1c90a11338860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156135bc57600080fd5b5af115156135c957600080fd5b5050506135d8338585856137a4565b600254600160a060020a0316632a288272338a60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561362e57600080fd5b5af1151561363b57600080fd5b5050507f5923958ad0a0f9e2754b81ea1c7483dcdd7481e51b34ee4846bdaa6d5403c3453389604051600160a060020a03909216825260208201526040908101905180910390a15050505050505050565b60015433600160a060020a039081169116146136a757600080fd5b600160a060020a03811615156136bc57600080fd5b600154600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600160a060020a031681565b60008282018381101561374557fe5b8091505b5092915050565b60008282111561375c57fe5b50900390565b600080828481151561377057fe5b04949350505050565b60008083151561378c5760009150613749565b5082820282848281151561379c57fe5b041461374557fe5b60008315156139f357600254600160a060020a0316634ab3ff5a868585600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b151561381557600080fd5b5af1151561382257600080fd5b5050600254600160a060020a0316905063b25d4571868560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561387c57600080fd5b5af1151561388957600080fd5b5050506040518051600254600a90910191508390600160a060020a031663196ecd25888760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156138f057600080fd5b5af115156138fd57600080fd5b50505060405180516002549202929092029250600160a060020a0316905063ce29555f868584600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b151561397757600080fd5b5af1151561398457600080fd5b5050600254600160a060020a031690506379c310a6868360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156139de57600080fd5b5af115156139eb57600080fd5b505050613e53565b8360011415613b9c57600254600160a060020a0316639501799d868585600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515613a6457600080fd5b5af11515613a7157600080fd5b5050600254600160a060020a0316905063d4778321868560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515613acb57600080fd5b5af11515613ad857600080fd5b5050506040518051600354909150600160a060020a031663702123ae8560405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515613b2b57600080fd5b5af11515613b3857600080fd5b5050506040518051600254920191849150600160a060020a031663196ecd25888760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156138f057600080fd5b8360021415613c0d57600254600160a060020a0316637d70892d868585600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156139de57600080fd5b8360031415613c7e57600254600160a060020a031663854c23e1868585600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156139de57600080fd5b8360041415613cef57600254600160a060020a031663f4347c85868585600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156139de57600080fd5b8360051415613d6057600254600160a060020a031663dfe55e70868585600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156139de57600080fd5b8360061415613dd157600254600160a060020a03166309c8367c868585600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156139de57600080fd5b8360071415613e5357600254600160a060020a031663482c18e3868585600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515613e4257600080fd5b5af11515613e4f57600080fd5b5050505b5050505050565b600083151561409457600254600160a060020a0316634ab3ff5a868585600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515613ecb57600080fd5b5af11515613ed857600080fd5b5050600254600160a060020a0316905063b25d4571868560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515613f3257600080fd5b5af11515613f3f57600080fd5b5050506040518051600254600a90910191508390600160a060020a031663196ecd25888760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515613fa657600080fd5b5af11515613fb357600080fd5b50505060405180516002549202929092029250600160a060020a0316905063ce29555f868584600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b151561402d57600080fd5b5af1151561403a57600080fd5b5050600254600160a060020a0316905063396e70e0868360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156139de57600080fd5b836001141561423d57600254600160a060020a0316639501799d868585600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b151561410557600080fd5b5af1151561411257600080fd5b5050600254600160a060020a0316905063d4778321868560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561416c57600080fd5b5af1151561417957600080fd5b5050506040518051600354909150600160a060020a031663702123ae8560405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156141cc57600080fd5b5af115156141d957600080fd5b5050506040518051600254920191849150600160a060020a031663196ecd25888760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515613fa657600080fd5b83600214156142ae57600254600160a060020a0316637d70892d868585600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156139de57600080fd5b836003141561431f57600254600160a060020a031663854c23e1868585600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156139de57600080fd5b836004141561439057600254600160a060020a031663f4347c85868585600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156139de57600080fd5b836005141561440157600254600160a060020a031663dfe55e70868585600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156139de57600080fd5b836006141561447257600254600160a060020a03166309c8367c868585600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156139de57600080fd5b8360071415613e5357600254600160a060020a031663482c18e3868585600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515613e4257600080fd00a165627a7a7230582069e828f918961f8023afb023d15c4e0b0ea6bce38aab4a50ab3d97d6f953b45f0029

Swarm Source

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

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.