Sponsored:   VC, TLDR and CoinBene Funded "TEMCO: Bitcoin Network (RSK) Suppy Chain! Whitelist KYC Starts Now!!"
 Latest 25 transactions from a total of 110684 transactions

TxHash Age From To Value [TxFee]
0x2d17a0d1c7c92ec02608286aa6cf40851683ba759d85244027c2d9870e24ba765 mins agoLiqui.io_2  IN   AdEx0 Ether0.00053526
0x4d58abcde54a9c1fd685372678334aeaf383e40c6d2294fd7344f72a11e617ef14 mins ago0xba826fec90cefdf6706858e5fbafcb27a290fbe0  IN   AdEx0 Ether0.0032154
0x96fdd4229ca249a79ec5f92bea1a1ec8bbcc54946fcdaea726e5ef2b60a1244e26 mins agoBinance_3  IN   AdEx0 Ether0.0015436
0xa5c4a1e1ed820853a87a906e1aed33b2b2d8451a380c9973ff2e679f6f13d94531 mins ago0x74b7c06eed22142e361d06a45e163ad87b235bce  IN   AdEx0 Ether0.0004718
0x22a0684fad77084d3665f33f9d0055c59cb90af625a8e18aa3f98783fd7a607a1 hr ago0xba826fec90cefdf6706858e5fbafcb27a290fbe0  IN   AdEx0 Ether0.0032154
0x347a4e997420a607a1db57984171a928e98c58704aa0cc426b268b4ba7e60ba91 hr 45 mins ago0x40120b5a5994f7e3afe3c0a3dc56d1ccb0b75262  IN   AdEx0 Ether0.0004718
0xc3d2d382556e00e66ab1da05a6021608c1989a330e9e42e79c47f0dfcc6ce8df1 hr 45 mins ago0xc10ded4923e1f1e0adfee276578deb105a60ca55  IN   AdEx0 Ether0.00047052
0x80267c22a06063ad2fcc920803e8ebdbe245427fb0b8f7a5b024b8bd928b3f1a1 hr 54 mins ago0xba826fec90cefdf6706858e5fbafcb27a290fbe0  IN   AdEx0 Ether0.00321156
0x7dd7e35b19a592260d3c6e151bdd410975cec813b35e49c558964150a22440251 hr 55 mins agoBittrex_1  IN   AdEx0 Ether0.0026795
0x868305a4f0a37b60f9289765c725b4650157237c0db2a8ad2d6654cf0d9dcb751 hr 55 mins ago0xc10ded4923e1f1e0adfee276578deb105a60ca55  IN   AdEx0 Ether0.00047052
0xa97514938dca8eb827eafd62eb24668b12dbdd6c7205120eddaeeff8161f04601 hr 55 mins ago0x40120b5a5994f7e3afe3c0a3dc56d1ccb0b75262  IN   AdEx0 Ether0.0004718
0x8906ce60c4ff312b7a323911e56314cc069bed71fa4e0ac70978a4bdd324440d2 hrs 1 min ago0xba826fec90cefdf6706858e5fbafcb27a290fbe0  IN   AdEx0 Ether0.00321156
0xc4ec22056aa06bffce6ea1fec107f442fb28ba091311c53af4e597a217e8dc8c2 hrs 6 mins ago0xc10ded4923e1f1e0adfee276578deb105a60ca55  IN   AdEx0 Ether0.00047052
0xc9bdbc65983c2081683133ed2e66a78b198ad5c19ef9a26f632017e25ac1044a2 hrs 10 mins agoBittrex_1  IN   AdEx0 Ether0.0026795
0xff3350d5fe97542d8781dafa2b4bf742c9165a0197eb408d57e2668ca7ef42782 hrs 20 mins ago0xba826fec90cefdf6706858e5fbafcb27a290fbe0  IN   AdEx0 Ether0.003158034
0x2fd37ad61a4d68fbc697928fed968e327b103de1e7496a68c4b9f51b0d9a4c3a2 hrs 45 mins ago0xc10ded4923e1f1e0adfee276578deb105a60ca55  IN   AdEx0 Ether0.0004718
0x1da981deb13e65a78fe44ab622eb952b1f3c176f01ae84f1cd1aa905823566023 hrs 9 mins ago0xba826fec90cefdf6706858e5fbafcb27a290fbe0  IN   AdEx0 Ether0.00312118878
0xef748d6e3efbeab882e6ea4fd5f389b47fdbaedfdc7f72f36d8ed0528486a16b5 hrs ago0x32e567e8b527d3194c60ea3c6a5c009d58a0b36d  IN   AdEx0 Ether0.001194306
0xbc9dd3e7a38d1d2a2dd12f069b34108b429d69cc44218a50085a0040b40608895 hrs 5 mins ago0x968121147b23d8b050d8ac57f0c1f502e9f30460  IN   AdEx0 Ether0.00073129
0x801f4f4258358822c80254af4f39e7a2668007fbbc9351f5e2350fd36cba2a625 hrs 9 mins agoBittrex_1  IN   AdEx0 Ether0.0019295
0x2e64962f03c9c7026035fb00516ab10eb9be5176761f6e590fad3a33ccdc06625 hrs 15 mins ago0x557bbdec33b93006f990d09a2450754b0070fb4b  IN   AdEx0 Ether0.000187696
0xd4371d6fc2fb8118513e2cba743ced26bcbb1a53a85b01e363d1c1eca8aa195f5 hrs 19 mins ago0x0ec9d4153fcb2361f7c304b1d91f0096b4e3cc79  IN   AdEx0 Ether0.00231156
0x300404d33f1508bc5db71a4ac4227ba870e94e2713695bf0076b71615db841895 hrs 27 mins agoBinance_2  IN   AdEx0 Ether0.0026795
0xaa80871702baaf1a72dc865002addfa61a9e02acdb8a37b86adddf349f8f748f6 hrs 15 mins ago0x57f13b9a0bde30efbf0a809b568221f28fa9e757  IN   AdEx0 Ether0.00047052
0x3ad1114dd5576daaf2929ae5f2338458e2de44315c3de248311757f431464f656 hrs 25 mins ago0xc5ed1637578c5ebc2ec4764c51d273ca11c2e0e5  IN   AdEx0 Ether0.000847572
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x20cef361ff34460a83e2a9602085f997eca21893d26a7fcf030a5ea6eaed6dc23954087535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a70 Ether
0xf877c2b9fd4eeaf2ecf172bce753981783d0cf61a95481e73f010f6b65c9f7f63954086535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0x8b7163738298563c5c4cc9c90b5471d7a6274eb6899544ab9cacdab52af6c2463954086535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0x4a811e32f3295940119bd0a824d7786c738b0fea31987f21a2edde58bcf705743954086535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0xc92bc87f01ef9755ec3b5a16d8ed94bcef746393a66654bb1d6987e0469475a63954085535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a5 Ether
0x34ef3591e96c744de8a18ba9c5aaf08092137710517b98fe7602d22b83d58d4e3954084535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a5 Ether
0xd0f0597ff65cf200155976a67628aad46e58c7091b2c4d5af33f3c0337f6494b3954082535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0xed0cf8aa40bb3113c4b597543d102ee5205cf0a0c7a013cf169b497cefffafd03954082535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a40 Ether
0x2cf718014f6c56e9450194454a5955855056cd03d10dd598b0ff308e94134e223954082535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a2 Ether
0x9b71ef70d62d8782a15d7476216f6a41b9b7ff10590f088d5c0c00db2625b9343954079535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a2 Ether
0xd97856ea4e552e40868cb2de00d22598adcc3443c11f8b2d1884dabd439dfef73954074535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0xbff165147b7cb8c7dbb6b94c79c38689f0083033162f6fd3dc2cb38de954ec133954074535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a0.4 Ether
0x9a2a67d8670d25a86acf2b42e842f1976d8795d1e4903e210384ec50259ff2483954072535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a2 Ether
0x8865594a8f87c0436e96bac1f3c3a765f593b7ce6bbc9235523b58f7ca410b143954072535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0x8de6662bbcd27d14653f775f0bfcf8e9f6f2967bd3dee3515cdb571cb841785b3954068535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a0.2 Ether
0xc3ea9ae9577737da1f59caf58a77d4bd697bdc96d01b13134cecb6b2dac498913954068535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0x218144c0237b08d351b8fd71c01990e81b09cd7d8d94d9820f9727905f78511c3954066535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a3 Ether
0xf70aa8ea73c4882c502615444579de4950635abe97f2559f2bdba1ef977b3e353954066535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a0.99475 Ether
0xa75a74ed83aa1ad128c4f4e0d99722d6d17d9ce9b0330d41a8e82796756c49ea3954066535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a2 Ether
0x8134c9700199840059b2cbb1eb943495c42aa79fdadc22e196583a17a1c1e6493954066535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a5 Ether
0x737e8be28f2752926bd787e065330e388907025455657c1e3ac825fe0f189bce3954066535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a49.93882261 Ether
0x6e255b6253f70ed5ddb23b207411695e95de1a86ba8e90fdb6674b4d038ff85a3954060535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a4.44455785 Ether
0x2f800dd53d45a90f3e26ee5bb9ec392a2d0653a413c9c009f568ae1ebe59ffa33954060535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a0.5 Ether
0x58b01f8ccced5a7c549b8789157ce95612d21633dcddfe6281a76252659303783954055535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0xde86b22ccd5472804c68c72e7c0e6e5b94cd34fc1f8a828538f347c0294414273954053535 days 16 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a5 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity), DelegateCallReturnValue (low-severity), ECRecoverMalformedInput (medium-severity), SkipEmptyStringLiteral (low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Similar Match)
Note: Displaying Similar Match Verified Source Code At Contract 0xE4Ef6df2c125B61e7DBa539734d84f31D52DddFE(Excluding Constructor Arguments if any)
Contract Name: ADXToken
Compiler Text: v0.4.11+commit.68ef5810
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.11;



/**
 * Math operations with safety checks
 */
library SafeMath {
  function mul(uint a, uint b) internal returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint a, uint b) internal returns (uint) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint a, uint b) internal returns (uint) {
    assert(b <= a);
    return a - b;
  }

  function add(uint a, uint b) internal returns (uint) {
    uint c = a + b;
    assert(c >= a);
    return c;
  }

  function max64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a >= b ? a : b;
  }

  function min64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a < b ? a : b;
  }

  function max256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a >= b ? a : b;
  }

  function min256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a < b ? a : b;
  }

  function assert(bool assertion) internal {
    if (!assertion) {
      throw;
    }
  }
}


/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20Basic {
  uint public totalSupply;
  function balanceOf(address who) constant returns (uint);
  function transfer(address to, uint value);
  event Transfer(address indexed from, address indexed to, uint value);
}




/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances. 
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint;

  mapping(address => uint) balances;

  /**
   * @dev Fix for the ERC20 short address attack.
   */
  modifier onlyPayloadSize(uint size) {
     if(msg.data.length < size + 4) {
       throw;
     }
     _;
  }

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) {
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of. 
  * @return An uint representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) constant returns (uint balance) {
    return balances[_owner];
  }

}




/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) constant returns (uint);
  function transferFrom(address from, address to, uint value);
  function approve(address spender, uint value);
  event Approval(address indexed owner, address indexed spender, uint value);
}




/**
 * @title Standard ERC20 token
 *
 * @dev Implemantation of the basic standart token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is BasicToken, ERC20 {

  mapping (address => mapping (address => uint)) allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint the amout of tokens to be transfered
   */
  function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) {
    var _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // if (_value > _allowance) throw;

    balances[_to] = balances[_to].add(_value);
    balances[_from] = balances[_from].sub(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    Transfer(_from, _to, _value);
  }

  /**
   * @dev Aprove the passed address to spend the specified amount of tokens on beahlf of msg.sender.
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint _value) {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender, 0)` if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw;

    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
  }

  /**
   * @dev Function to check the amount of tokens than an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint specifing the amount of tokens still avaible for the spender.
   */
  function allowance(address _owner, address _spender) constant returns (uint remaining) {
    return allowed[_owner][_spender];
  }

}


/**
 * @title LimitedTransferToken
 * @dev LimitedTransferToken defines the generic interface and the implementation to limit token 
 * transferability for different events. It is intended to be used as a base class for other token 
 * contracts. 
 * LimitedTransferToken has been designed to allow for different limiting factors,
 * this can be achieved by recursively calling super.transferableTokens() until the base class is 
 * hit. For example:
 *     function transferableTokens(address holder, uint64 time) constant public returns (uint256) {
 *       return min256(unlockedTokens, super.transferableTokens(holder, time));
 *     }
 * A working example is VestedToken.sol:
 * https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/VestedToken.sol
 */

contract LimitedTransferToken is ERC20 {

  /**
   * @dev Checks whether it can transfer or otherwise throws.
   */
  modifier canTransfer(address _sender, uint _value) {
   if (_value > transferableTokens(_sender, uint64(now))) throw;
   _;
  }

  /**
   * @dev Checks modifier and allows transfer if tokens are not locked.
   * @param _to The address that will recieve the tokens.
   * @param _value The amount of tokens to be transferred.
   */
  function transfer(address _to, uint _value) canTransfer(msg.sender, _value) {
    super.transfer(_to, _value);
  }

  /**
  * @dev Checks modifier and allows transfer if tokens are not locked.
  * @param _from The address that will send the tokens.
  * @param _to The address that will recieve the tokens.
  * @param _value The amount of tokens to be transferred.
  */
  function transferFrom(address _from, address _to, uint _value) canTransfer(_from, _value) {
    super.transferFrom(_from, _to, _value);
  }

  /**
   * @dev Default transferable tokens function returns all tokens for a holder (no limit).
   * @dev Overwriting transferableTokens(address holder, uint64 time) is the way to provide the 
   * specific logic for limiting token transferability for a holder over time.
   */
  function transferableTokens(address holder, uint64 time) constant public returns (uint256) {
    return balanceOf(holder);
  }
}


/**
 * @title Vested token
 * @dev Tokens that can be vested for a group of addresses.
 */
contract VestedToken is StandardToken, LimitedTransferToken {

  uint256 MAX_GRANTS_PER_ADDRESS = 20;

  struct TokenGrant {
    address granter;     // 20 bytes
    uint256 value;       // 32 bytes
    uint64 cliff;
    uint64 vesting;
    uint64 start;        // 3 * 8 = 24 bytes
    bool revokable;
    bool burnsOnRevoke;  // 2 * 1 = 2 bits? or 2 bytes?
  } // total 78 bytes = 3 sstore per operation (32 per sstore)

  mapping (address => TokenGrant[]) public grants;

  event NewTokenGrant(address indexed from, address indexed to, uint256 value, uint256 grantId);

  /**
   * @dev Grant tokens to a specified address
   * @param _to address The address which the tokens will be granted to.
   * @param _value uint256 The amount of tokens to be granted.
   * @param _start uint64 Time of the beginning of the grant.
   * @param _cliff uint64 Time of the cliff period.
   * @param _vesting uint64 The vesting period.
   */
  function grantVestedTokens(
    address _to,
    uint256 _value,
    uint64 _start,
    uint64 _cliff,
    uint64 _vesting,
    bool _revokable,
    bool _burnsOnRevoke
  ) public {

    // Check for date inconsistencies that may cause unexpected behavior
    if (_cliff < _start || _vesting < _cliff) {
      throw;
    }

    if (tokenGrantsCount(_to) > MAX_GRANTS_PER_ADDRESS) throw;   // To prevent a user being spammed and have his balance locked (out of gas attack when calculating vesting).

    uint count = grants[_to].push(
                TokenGrant(
                  _revokable ? msg.sender : 0, // avoid storing an extra 20 bytes when it is non-revokable
                  _value,
                  _cliff,
                  _vesting,
                  _start,
                  _revokable,
                  _burnsOnRevoke
                )
              );

    transfer(_to, _value);

    NewTokenGrant(msg.sender, _to, _value, count - 1);
  }

  /**
   * @dev Revoke the grant of tokens of a specifed address.
   * @param _holder The address which will have its tokens revoked.
   * @param _grantId The id of the token grant.
   */
  function revokeTokenGrant(address _holder, uint _grantId) public {
    TokenGrant grant = grants[_holder][_grantId];

    if (!grant.revokable) { // Check if grant was revokable
      throw;
    }

    if (grant.granter != msg.sender) { // Only granter can revoke it
      throw;
    }

    address receiver = grant.burnsOnRevoke ? 0xdead : msg.sender;

    uint256 nonVested = nonVestedTokens(grant, uint64(now));

    // remove grant from array
    delete grants[_holder][_grantId];
    grants[_holder][_grantId] = grants[_holder][grants[_holder].length.sub(1)];
    grants[_holder].length -= 1;

    balances[receiver] = balances[receiver].add(nonVested);
    balances[_holder] = balances[_holder].sub(nonVested);

    Transfer(_holder, receiver, nonVested);
  }


  /**
   * @dev Calculate the total amount of transferable tokens of a holder at a given time
   * @param holder address The address of the holder
   * @param time uint64 The specific time.
   * @return An uint representing a holder's total amount of transferable tokens.
   */
  function transferableTokens(address holder, uint64 time) constant public returns (uint256) {
    uint256 grantIndex = tokenGrantsCount(holder);

    if (grantIndex == 0) return balanceOf(holder); // shortcut for holder without grants

    // Iterate through all the grants the holder has, and add all non-vested tokens
    uint256 nonVested = 0;
    for (uint256 i = 0; i < grantIndex; i++) {
      nonVested = SafeMath.add(nonVested, nonVestedTokens(grants[holder][i], time));
    }

    // Balance - totalNonVested is the amount of tokens a holder can transfer at any given time
    uint256 vestedTransferable = SafeMath.sub(balanceOf(holder), nonVested);

    // Return the minimum of how many vested can transfer and other value
    // in case there are other limiting transferability factors (default is balanceOf)
    return SafeMath.min256(vestedTransferable, super.transferableTokens(holder, time));
  }

  /**
   * @dev Check the amount of grants that an address has.
   * @param _holder The holder of the grants.
   * @return A uint representing the total amount of grants.
   */
  function tokenGrantsCount(address _holder) constant returns (uint index) {
    return grants[_holder].length;
  }

  /**
   * @dev Calculate amount of vested tokens at a specifc time.
   * @param tokens uint256 The amount of tokens grantted.
   * @param time uint64 The time to be checked
   * @param start uint64 A time representing the begining of the grant
   * @param cliff uint64 The cliff period.
   * @param vesting uint64 The vesting period.
   * @return An uint representing the amount of vested tokensof a specif grant.
   *  transferableTokens
   *   |                         _/--------   vestedTokens rect
   *   |                       _/
   *   |                     _/
   *   |                   _/
   *   |                 _/
   *   |                /
   *   |              .|
   *   |            .  |
   *   |          .    |
   *   |        .      |
   *   |      .        |
   *   |    .          |
   *   +===+===========+---------+----------> time
   *      Start       Clift    Vesting
   */
  function calculateVestedTokens(
    uint256 tokens,
    uint256 time,
    uint256 start,
    uint256 cliff,
    uint256 vesting) constant returns (uint256)
    {
      // Shortcuts for before cliff and after vesting cases.
      if (time < cliff) return 0;
      if (time >= vesting) return tokens;

      // Interpolate all vested tokens.
      // As before cliff the shortcut returns 0, we can use just calculate a value
      // in the vesting rect (as shown in above's figure)

      // vestedTokens = tokens * (time - start) / (vesting - start)
      uint256 vestedTokens = SafeMath.div(
                                    SafeMath.mul(
                                      tokens,
                                      SafeMath.sub(time, start)
                                      ),
                                    SafeMath.sub(vesting, start)
                                    );

      return vestedTokens;
  }

  /**
   * @dev Get all information about a specifc grant.
   * @param _holder The address which will have its tokens revoked.
   * @param _grantId The id of the token grant.
   * @return Returns all the values that represent a TokenGrant(address, value, start, cliff,
   * revokability, burnsOnRevoke, and vesting) plus the vested value at the current time.
   */
  function tokenGrant(address _holder, uint _grantId) constant returns (address granter, uint256 value, uint256 vested, uint64 start, uint64 cliff, uint64 vesting, bool revokable, bool burnsOnRevoke) {
    TokenGrant grant = grants[_holder][_grantId];

    granter = grant.granter;
    value = grant.value;
    start = grant.start;
    cliff = grant.cliff;
    vesting = grant.vesting;
    revokable = grant.revokable;
    burnsOnRevoke = grant.burnsOnRevoke;

    vested = vestedTokens(grant, uint64(now));
  }

  /**
   * @dev Get the amount of vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time The time to be checked
   * @return An uint representing the amount of vested tokens of a specific grant at a specific time.
   */
  function vestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
    return calculateVestedTokens(
      grant.value,
      uint256(time),
      uint256(grant.start),
      uint256(grant.cliff),
      uint256(grant.vesting)
    );
  }

  /**
   * @dev Calculate the amount of non vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time uint64 The time to be checked
   * @return An uint representing the amount of non vested tokens of a specifc grant on the 
   * passed time frame.
   */
  function nonVestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
    return grant.value.sub(vestedTokens(grant, time));
  }

  /**
   * @dev Calculate the date when the holder can trasfer all its tokens
   * @param holder address The address of the holder
   * @return An uint representing the date of the last transferable tokens.
   */
  function lastTokenIsTransferableDate(address holder) constant public returns (uint64 date) {
    date = uint64(now);
    uint256 grantIndex = grants[holder].length;
    for (uint256 i = 0; i < grantIndex; i++) {
      date = SafeMath.max64(grants[holder][i].vesting, date);
    }
  }
}

// QUESTIONS FOR AUDITORS:
// - Considering we inherit from VestedToken, how much does that hit at our gas price?
// - Ensure max supply is 100,000,000
// - Ensure that even if not totalSupply is sold, tokens would still be transferrable after (we will up to totalSupply by creating adEx tokens)

// vesting: 365 days, 365 days / 4 vesting


contract ADXToken is VestedToken {
  //FIELDS
  string public name = "AdEx";
  string public symbol = "ADX";
  uint public decimals = 4;

  //CONSTANTS
  //Time limits
  uint public constant STAGE_ONE_TIME_END = 24 hours; // first day bonus
  uint public constant STAGE_TWO_TIME_END = 1 weeks; // first week bonus
  uint public constant STAGE_THREE_TIME_END = 4 weeks;
  
  // Multiplier for the decimals
  uint private constant DECIMALS = 10000;

  //Prices of ADX
  uint public constant PRICE_STANDARD    = 900*DECIMALS; // ADX received per one ETH; MAX_SUPPLY / (valuation / ethPrice)
  uint public constant PRICE_STAGE_ONE   = PRICE_STANDARD * 130/100; // 1ETH = 30% more ADX
  uint public constant PRICE_STAGE_TWO   = PRICE_STANDARD * 115/100; // 1ETH = 15% more ADX
  uint public constant PRICE_STAGE_THREE = PRICE_STANDARD;

  //ADX Token Limits
  uint public constant ALLOC_TEAM =         16000000*DECIMALS; // team + advisors
  uint public constant ALLOC_BOUNTIES =      2000000*DECIMALS;
  uint public constant ALLOC_WINGS =         2000000*DECIMALS;
  uint public constant ALLOC_CROWDSALE =    80000000*DECIMALS;
  uint public constant PREBUY_PORTION_MAX = 20000000*DECIMALS; // this is redundantly more than what will be pre-sold
  
  //ASSIGNED IN INITIALIZATION
  //Start and end times
  uint public publicStartTime; // Time in seconds public crowd fund starts.
  uint public privateStartTime; // Time in seconds when pre-buy can purchase up to 31250 ETH worth of ADX;
  uint public publicEndTime; // Time in seconds crowdsale ends
  uint public hardcapInEth;

  //Special Addresses
  address public multisigAddress; // Address to which all ether flows.
  address public adexTeamAddress; // Address to which ALLOC_TEAM, ALLOC_BOUNTIES, ALLOC_WINGS is (ultimately) sent to.
  address public ownerAddress; // Address of the contract owner. Can halt the crowdsale.
  address public preBuy1; // Address used by pre-buy
  address public preBuy2; // Address used by pre-buy
  address public preBuy3; // Address used by pre-buy
  uint public preBuyPrice1; // price for pre-buy
  uint public preBuyPrice2; // price for pre-buy
  uint public preBuyPrice3; // price for pre-buy

  //Running totals
  uint public etherRaised; // Total Ether raised.
  uint public ADXSold; // Total ADX created
  uint public prebuyPortionTotal; // Total of Tokens purchased by pre-buy. Not to exceed PREBUY_PORTION_MAX.
  
  //booleans
  bool public halted; // halts the crowd sale if true.

  // MODIFIERS
  //Is currently in the period after the private start time and before the public start time.
  modifier is_pre_crowdfund_period() {
    if (now >= publicStartTime || now < privateStartTime) throw;
    _;
  }

  //Is currently the crowdfund period
  modifier is_crowdfund_period() {
    if (now < publicStartTime) throw;
    if (isCrowdfundCompleted()) throw;
    _;
  }

  // Is completed
  modifier is_crowdfund_completed() {
    if (!isCrowdfundCompleted()) throw;
    _;
  }
  function isCrowdfundCompleted() internal returns (bool) {
    if (now > publicEndTime || ADXSold >= ALLOC_CROWDSALE || etherRaised >= hardcapInEth) return true;
    return false;
  }

  //May only be called by the owner address
  modifier only_owner() {
    if (msg.sender != ownerAddress) throw;
    _;
  }

  //May only be called if the crowdfund has not been halted
  modifier is_not_halted() {
    if (halted) throw;
    _;
  }

  // EVENTS
  event PreBuy(uint _amount);
  event Buy(address indexed _recipient, uint _amount);

  // Initialization contract assigns address of crowdfund contract and end time.
  function ADXToken(
    address _multisig,
    address _adexTeam,
    uint _publicStartTime,
    uint _privateStartTime,
    uint _hardcapInEth,
    address _prebuy1, uint _preBuyPrice1,
    address _prebuy2, uint _preBuyPrice2,
    address _prebuy3, uint _preBuyPrice3
  ) {
    ownerAddress = msg.sender;
    publicStartTime = _publicStartTime;
    privateStartTime = _privateStartTime;
    publicEndTime = _publicStartTime + 4 weeks;
    multisigAddress = _multisig;
    adexTeamAddress = _adexTeam;

    hardcapInEth = _hardcapInEth;

    preBuy1 = _prebuy1;
    preBuyPrice1 = _preBuyPrice1;
    preBuy2 = _prebuy2;
    preBuyPrice2 = _preBuyPrice2;
    preBuy3 = _prebuy3;
    preBuyPrice3 = _preBuyPrice3;

    balances[adexTeamAddress] += ALLOC_BOUNTIES;
    balances[adexTeamAddress] += ALLOC_WINGS;

    balances[ownerAddress] += ALLOC_TEAM;

    balances[ownerAddress] += ALLOC_CROWDSALE;
  }

  // Transfer amount of tokens from sender account to recipient.
  // Only callable after the crowd fund is completed
  function transfer(address _to, uint _value)
  {
    if (_to == msg.sender) return; // no-op, allow even during crowdsale, in order to work around using grantVestedTokens() while in crowdsale
    if (!isCrowdfundCompleted()) throw;
    super.transfer(_to, _value);
  }

  // Transfer amount of tokens from a specified address to a recipient.
  // Transfer amount of tokens from sender account to recipient.
  function transferFrom(address _from, address _to, uint _value)
    is_crowdfund_completed
  {
    super.transferFrom(_from, _to, _value);
  }

  //constant function returns the current ADX price.
  function getPriceRate()
      constant
      returns (uint o_rate)
  {
      uint delta = SafeMath.sub(now, publicStartTime);

      if (delta > STAGE_TWO_TIME_END) return PRICE_STAGE_THREE;
      if (delta > STAGE_ONE_TIME_END) return PRICE_STAGE_TWO;

      return (PRICE_STAGE_ONE);
  }

  // calculates wmount of ADX we get, given the wei and the rates we've defined per 1 eth
  function calcAmount(uint _wei, uint _rate) 
    constant
    returns (uint) 
  {
    return SafeMath.div(SafeMath.mul(_wei, _rate), 1 ether);
  } 
  
  // Given the rate of a purchase and the remaining tokens in this tranche, it
  // will throw if the sale would take it past the limit of the tranche.
  // Returns `amount` in scope as the number of ADX tokens that it will purchase.
  function processPurchase(uint _rate, uint _remaining)
    internal
    returns (uint o_amount)
  {
    o_amount = calcAmount(msg.value, _rate);

    if (o_amount > _remaining) throw;
    if (!multisigAddress.send(msg.value)) throw;

    balances[ownerAddress] = balances[ownerAddress].sub(o_amount);
    balances[msg.sender] = balances[msg.sender].add(o_amount);

    ADXSold += o_amount;
    etherRaised += msg.value;
  }

  //Special Function can only be called by pre-buy and only during the pre-crowdsale period.
  function preBuy()
    payable
    is_pre_crowdfund_period
    is_not_halted
  {
    // Pre-buy participants would get the first-day price, as well as a bonus of vested tokens
    uint priceVested = 0;

    if (msg.sender == preBuy1) priceVested = preBuyPrice1;
    if (msg.sender == preBuy2) priceVested = preBuyPrice2;
    if (msg.sender == preBuy3) priceVested = preBuyPrice3;

    if (priceVested == 0) throw;

    uint amount = processPurchase(PRICE_STAGE_ONE + priceVested, SafeMath.sub(PREBUY_PORTION_MAX, prebuyPortionTotal));
    grantVestedTokens(msg.sender, calcAmount(msg.value, priceVested), 
      uint64(now), uint64(now) + 91 days, uint64(now) + 365 days, 
      false, false
    );
    prebuyPortionTotal += amount;
    PreBuy(amount);
  }

  //Default function called by sending Ether to this address with no arguments.
  //Results in creation of new ADX Tokens if transaction would not exceed hard limit of ADX Token.
  function()
    payable
    is_crowdfund_period
    is_not_halted
  {
    uint amount = processPurchase(getPriceRate(), SafeMath.sub(ALLOC_CROWDSALE, ADXSold));
    Buy(msg.sender, amount);
  }

  // To be called at the end of crowdfund period
  // WARNING: transfer(), which is called by grantVestedTokens(), wants a minimum message length
  function grantVested(address _adexTeamAddress, address _adexFundAddress)
    is_crowdfund_completed
    only_owner
    is_not_halted
  {
    // Grant tokens pre-allocated for the team
    grantVestedTokens(
      _adexTeamAddress, ALLOC_TEAM,
      uint64(now), uint64(now) + 91 days , uint64(now) + 365 days, 
      false, false
    );

    // Grant tokens that remain after crowdsale to the AdEx fund, vested for 2 years
    grantVestedTokens(
      _adexFundAddress, balances[ownerAddress],
      uint64(now), uint64(now) + 182 days , uint64(now) + 730 days, 
      false, false
    );
  }

  //May be used by owner of contract to halt crowdsale and no longer except ether.
  function toggleHalt(bool _halted)
    only_owner
  {
    halted = _halted;
  }

  //failsafe drain
  function drain()
    only_owner
  {
    if (!ownerAddress.send(this.balance)) throw;
  }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"PREBUY_PORTION_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"tokenGrantsCount","outputs":[{"name":"index","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STAGE_TWO","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuy3","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuy1","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"publicEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"grants","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"start","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ADXSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuy2","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"multisigAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ALLOC_BOUNTIES","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"publicStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"tokenGrant","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"vested","type":"uint256"},{"name":"start","type":"uint64"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"STAGE_TWO_TIME_END","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"}],"name":"lastTokenIsTransferableDate","outputs":[{"name":"date","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ALLOC_WINGS","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"STAGE_ONE_TIME_END","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_wei","type":"uint256"},{"name":"_rate","type":"uint256"}],"name":"calcAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ALLOC_CROWDSALE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"adexTeamAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getPriceRate","outputs":[{"name":"o_rate","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"privateStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_halted","type":"bool"}],"name":"toggleHalt","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ownerAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STAGE_ONE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_start","type":"uint64"},{"name":"_cliff","type":"uint64"},{"name":"_vesting","type":"uint64"},{"name":"_revokable","type":"bool"},{"name":"_burnsOnRevoke","type":"bool"}],"name":"grantVestedTokens","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"drain","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"prebuyPortionTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"hardcapInEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ALLOC_TEAM","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"etherRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"},{"name":"time","type":"uint64"}],"name":"transferableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuyPrice1","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuyPrice2","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"tokens","type":"uint256"},{"name":"time","type":"uint256"},{"name":"start","type":"uint256"},{"name":"cliff","type":"uint256"},{"name":"vesting","type":"uint256"}],"name":"calculateVestedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STAGE_THREE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_adexTeamAddress","type":"address"},{"name":"_adexFundAddress","type":"address"}],"name":"grantVested","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_holder","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"revokeTokenGrant","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuyPrice3","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STANDARD","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"STAGE_THREE_TIME_END","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"preBuy","outputs":[],"payable":true,"type":"function"},{"inputs":[{"name":"_multisig","type":"address"},{"name":"_adexTeam","type":"address"},{"name":"_publicStartTime","type":"uint256"},{"name":"_privateStartTime","type":"uint256"},{"name":"_hardcapInEth","type":"uint256"},{"name":"_prebuy1","type":"address"},{"name":"_preBuyPrice1","type":"uint256"},{"name":"_prebuy2","type":"address"},{"name":"_preBuyPrice2","type":"uint256"},{"name":"_prebuy3","type":"address"},{"name":"_preBuyPrice3","type":"uint256"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"PreBuy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"grantId","type":"uint256"}],"name":"NewTokenGrant","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

  Contract Creation Code Switch To Opcodes View
601460035560a0604052600460608190527f41644578000000000000000000000000000000000000000000000000000000006080908152620000459160059190620001e8565b506040805180820190915260038082527f414458000000000000000000000000000000000000000000000000000000000060209092019182526200008c91600691620001e8565b50600460075534156200009b57fe5b604051610160806200267683398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a0151610140909a0151979996979596949593949293919290915b600e8054600160a060020a031990811633600160a060020a0390811691909117835560088c905560098b90556224ea008c01600a55600c805483168f8316179055600d805483168e831617808255600b8c9055600f805485168c851617905560128a90556010805485168a851617905560138890556011805490941687841617909355601485905591811660009081526001602052604080822080546404a817c80090810190915593548316825280822080549094019093558354821681528281208054642540be400001905592541682529020805464ba43b740000190555b505050505050505050505062000292565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022b57805160ff19168380011785556200025b565b828001600101855582156200025b579182015b828111156200025b5782518255916020019190600101906200023e565b5b506200026a9291506200026e565b5090565b6200028f91905b808211156200026a576000815560010162000275565b5090565b90565b6123d480620002a26000396000f3006060604052361561026f5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663028118a1811461031657806302a72a4c14610338578063031f22e71461036657806306fdde0314610388578063095ea7b3146104185780630fdfa5ee1461043957806318160ddd1461046557806323b872dd1461048757806327c1f423146104ae5780632c27e581146104da5780632c71e60a146104fc578063313ce5671461056d5780634433a4401461058f578063529865c9146105b15780635462870d146105dd57806354ecd994146106095780635fd1bbc41461062b578063600e85b71461064d5780636698baaa146106c75780636c182e99146106e95780636c9e27d6146106095780636f2590771461074457806370a08231146107665780637133c0c0146107945780637717403b146107bc5780637d264bad146107de5780638a4b08d91461080a5780638a7c63c51461082c5780638c3466901461084e5780638f84aa09146108655780638fd712ae1461089157806395d89b41146108b35780639754a4d9146109435780639890220b146109875780639b914973146109995780639d61e624146109bb578063a9059cbb146109dd578063b475a1c8146109fe578063b9b8af0b14610a20578063cd72ab6914610a44578063d347c20514610a66578063d719213e14610aa1578063dbc65f8514610ac3578063dd62ed3e14610ae5578063df3c211b14610b19578063e02f8d3314610b4a578063e877715814610b6c578063eb944e4c14610b90578063eed04e6914610bb1578063efe7926814610b4a578063f514f0f914610bf5578063f590aacc14610c17575b6103145b60006008544210156102855760006000fd5b61028d610c21565b156102985760006000fd5b60185460ff16156102a95760006000fd5b6102cd6102b4610c5e565b6102c86127106304c4b40002601654610cb1565b610cca565b604080518281529051919250600160a060020a033316917fe3d4187f6ca4248660cc0ac8b8056515bac4a8132be2eca31d6d0cc170722a7e9181900360200190a25b5b5b50565b005b341561031e57fe5b610326610dae565b60408051918252519081900360200190f35b341561034057fe5b610326600160a060020a0360043516610db7565b60408051918252519081900360200190f35b341561036e57fe5b610326610dd6565b60408051918252519081900360200190f35b341561039057fe5b610398610de2565b6040805160208082528351818301528351919283929083019185019080838382156103de575b8051825260208311156103de57601f1990920191602091820191016103be565b505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561042057fe5b610314600160a060020a0360043516602435610e70565b005b341561044157fe5b610449610f10565b60408051600160a060020a039092168252519081900360200190f35b341561046d57fe5b610326610f1f565b60408051918252519081900360200190f35b341561048f57fe5b610314600160a060020a0360043581169060243516604435610f25565b005b34156104b657fe5b610449610f4b565b60408051600160a060020a039092168252519081900360200190f35b34156104e257fe5b610326610f5a565b60408051918252519081900360200190f35b341561050457fe5b61051b600160a060020a0360043516602435610f60565b60408051600160a060020a039098168852602088019690965267ffffffffffffffff9485168787015292841660608701529216608085015290151560a0840152151560c0830152519081900360e00190f35b341561057557fe5b610326610fe6565b60408051918252519081900360200190f35b341561059757fe5b610326610fec565b60408051918252519081900360200190f35b34156105b957fe5b610449610ff2565b60408051600160a060020a039092168252519081900360200190f35b34156105e557fe5b610449611001565b60408051600160a060020a039092168252519081900360200190f35b341561061157fe5b610326611010565b60408051918252519081900360200190f35b341561063357fe5b610326611019565b60408051918252519081900360200190f35b341561065557fe5b61066c600160a060020a036004351660243561101f565b60408051600160a060020a03909916895260208901979097528787019590955267ffffffffffffffff9384166060880152918316608087015290911660a0850152151560c0840152151560e083015251908190036101000190f35b34156106cf57fe5b61032661123d565b60408051918252519081900360200190f35b34156106f157fe5b610705600160a060020a0360043516611244565b6040805167ffffffffffffffff9092168252519081900360200190f35b341561061157fe5b610326611010565b60408051918252519081900360200190f35b341561074c57fe5b6103266112df565b60408051918252519081900360200190f35b341561076e57fe5b610326600160a060020a03600435166112e6565b60408051918252519081900360200190f35b341561079c57fe5b610326600435602435611305565b60408051918252519081900360200190f35b34156107c457fe5b61032661132b565b60408051918252519081900360200190f35b34156107e657fe5b610449611334565b60408051600160a060020a039092168252519081900360200190f35b341561081257fe5b610326610c5e565b60408051918252519081900360200190f35b341561083457fe5b610326611343565b60408051918252519081900360200190f35b341561085657fe5b6103146004351515611349565b005b341561086d57fe5b610449611378565b60408051600160a060020a039092168252519081900360200190f35b341561089957fe5b610326611387565b60408051918252519081900360200190f35b34156108bb57fe5b610398611397565b6040805160208082528351818301528351919283929083019185019080838382156103de575b8051825260208311156103de57601f1990920191602091820191016103be565b505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561094b57fe5b610314600160a060020a036004351660243567ffffffffffffffff6044358116906064358116906084351660a435151560c4351515611425565b005b341561098f57fe5b6103146116a0565b005b34156109a157fe5b6103266116f6565b60408051918252519081900360200190f35b34156109c357fe5b6103266116fc565b60408051918252519081900360200190f35b34156109e557fe5b610314600160a060020a0360043516602435611702565b005b3415610a0657fe5b610326611744565b60408051918252519081900360200190f35b3415610a2857fe5b610a3061174d565b604080519115158252519081900360200190f35b3415610a4c57fe5b610326611756565b60408051918252519081900360200190f35b3415610a6e57fe5b610326600160a060020a036004351667ffffffffffffffff6024351661175c565b60408051918252519081900360200190f35b3415610aa957fe5b6103266118a5565b60408051918252519081900360200190f35b3415610acb57fe5b6103266118ab565b60408051918252519081900360200190f35b3415610aed57fe5b610326600160a060020a03600435811690602435166118b1565b60408051918252519081900360200190f35b3415610b2157fe5b6103266004356024356044356064356084356118de565b60408051918252519081900360200190f35b3415610b5257fe5b610326611937565b60408051918252519081900360200190f35b3415610b7457fe5b610314600160a060020a036004358116906024351661193e565b005b3415610b9857fe5b610314600160a060020a03600435166024356119e0565b005b3415610bb957fe5b610326611e09565b60408051918252519081900360200190f35b3415610b5257fe5b610326611937565b60408051918252519081900360200190f35b3415610bfd57fe5b610326611e16565b60408051918252519081900360200190f35b610314611e1d565b005b6000600a54421180610c3b575060165464ba43b740009010155b80610c4a5750600b5460155410155b15610c5757506001610c5b565b5060005b90565b60006000610c6e42600854610cb1565b905062093a80811115610c8657628954409150610cad565b62015180811115610ca1576064633db0d8c05b049150610cad565b60646345bcc8805b0491505b5090565b6000610cbf83831115611f47565b508082035b92915050565b6000610cd63484611305565b905081811115610ce65760006000fd5b600c54604051600160a060020a03909116903480156108fc02916000818181858888f193505050501515610d1a5760006000fd5b600e54600160a060020a0316600090815260016020526040902054610d45908263ffffffff610cb116565b600e54600160a060020a03908116600090815260016020526040808220939093553390911681522054610d7e908263ffffffff611f5816565b600160a060020a033316600090815260016020526040902055601680548201905560158054340190555b92915050565b642e90edd00081565b600160a060020a0381166000908152600460205260409020545b919050565b6064633db0d8c05b0481565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b8015801590610ea35750600160a060020a0333811660009081526002602090815260408083209386168352929052205415155b15610eae5760006000fd5b600160a060020a03338116600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35b5050565b601154600160a060020a031681565b60005481565b610f2d610c21565b1515610f395760006000fd5b610f44838383611f74565b5b5b505050565b600f54600160a060020a031681565b600a5481565b600460205281600052604060002081815481101515610f7b57fe5b906000526020600020906003020160005b5080546001820154600290920154600160a060020a03909116935090915067ffffffffffffffff80821691680100000000000000008104821691608060020a8204169060ff60c060020a820481169160c860020a90041687565b60075481565b60165481565b601054600160a060020a031681565b600c54600160a060020a031681565b6404a817c80081565b60085481565b600060006000600060006000600060006000600460008c600160a060020a0316600160a060020a031681526020019081526020016000208a81548110151561106357fe5b906000526020600020906003020160005b5090508060000160009054906101000a9004600160a060020a03169850806001015497508060020160109054906101000a900467ffffffffffffffff1695508060020160009054906101000a900467ffffffffffffffff1694508060020160089054906101000a900467ffffffffffffffff1693508060020160189054906101000a900460ff1692508060020160199054906101000a900460ff16915061122c8160e060405190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182015481526020016002820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160189054906101000a900460ff161515151581526020016002820160199054906101000a900460ff16151515158152505042611fa1565b96505b509295985092959890939650565b62093a8081565b600160a060020a03811660009081526004602052604081205442915b818110156112ce57600160a060020a038416600090815260046020526040902080546112c391908390811061129157fe5b906000526020600020906003020160005b506002015468010000000000000000900467ffffffffffffffff1684611ff1565b92505b600101611260565b5b5050919050565b6404a817c80081565b6201518081565b600160a060020a0381166000908152600160205260409020545b919050565b60006113226113148484612020565b670de0b6b3a764000061204f565b90505b92915050565b64ba43b7400081565b600d54600160a060020a031681565b60095481565b600e5433600160a060020a039081169116146113655760006000fd5b6018805460ff19168215151790555b5b50565b600e54600160a060020a031681565b60646345bcc880610dde565b0481565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b60008567ffffffffffffffff168567ffffffffffffffff16108061145c57508467ffffffffffffffff168467ffffffffffffffff16105b156114675760006000fd5b60035461147389610db7565b111561147f5760006000fd5b600160a060020a03881660009081526004602052604090208054600181016114a783826122e0565b916000526020600020906003020160005b60e060405190810160405280876114d05760006114d2565b335b600160a060020a03908116825260208083018e905267ffffffffffffffff8c81166040808601919091528c82166060808701919091528f83166080808801919091528d151560a0808901919091528d151560c09889015288518b5473ffffffffffffffffffffffffffffffffffffffff19169716969096178a559387015160018a01559086015160029098018054918701519387015194870151969095015167ffffffffffffffff19909116978216979097176fffffffffffffffff0000000000000000191668010000000000000000928216929092029190911777ffffffffffffffff000000000000000000000000000000001916608060020a92909116919091021778ff000000000000000000000000000000000000000000000000191660c060020a921515929092029190911779ff00000000000000000000000000000000000000000000000000191660c860020a931515939093029290921790915550905061163f8888611702565b87600160a060020a031633600160a060020a03167ff9565aecd648a0466ffb964a79eeccdf1120ad6276189c687a6e9fe73984d9bb8960018503604051808381526020018281526020019250505060405180910390a35b5050505050505050565b600e5433600160a060020a039081169116146116bc5760006000fd5b600e54604051600160a060020a039182169130163180156108fc02916000818181858888f1935050505015156116f25760006000fd5b5b5b565b60175481565b600b5481565b33600160a060020a031682600160a060020a0316141561172157610f0c565b611729610c21565b15156117355760006000fd5b610f0c828261206c565b5b5050565b642540be400081565b60185460ff1681565b60155481565b6000600060006000600061176f87610db7565b935083151561178857611781876112e6565b945061189b565b60009250600091505b8382101561187157600160a060020a0387166000908152600460205260409020805461186391859161185e9190869081106117c857fe5b906000526020600020906003020160005b506040805160e0810182528254600160a060020a031681526001830154602082015260029092015467ffffffffffffffff8082169284019290925268010000000000000000810482166060840152608060020a8104909116608083015260ff60c060020a82048116151560a084015260c860020a90910416151560c082015289612097565b611f58565b92505b600190910190611791565b61188361187d886112e6565b84610cb1565b90506118988161189389896120c0565b6120d4565b94505b5050505092915050565b60125481565b60135481565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60006000838610156118f3576000915061192d565b8286106119025786915061192d565b611927611918886119138989610cb1565b612020565b6119228588610cb1565b61204f565b90508091505b5095945050505050565b6289544081565b611946610c21565b15156119525760006000fd5b600e5433600160a060020a0390811691161461196e5760006000fd5b60185460ff161561197f5760006000fd5b61199f82642540be4000426277f88081016301e133808201600080611425565b600e54600160a060020a0316600090815260016020526040812054610f0c91839190429062eff1008201906303c2670083019080611425565b5b5b5b5b5050565b600160a060020a038216600090815260046020526040812080548291829185908110611a0857fe5b906000526020600020906003020160005b50600281015490935060c060020a900460ff161515611a385760006000fd5b825433600160a060020a03908116911614611a535760006000fd5b600283015460c860020a900460ff16611a6c5733611a70565b61dead5b6040805160e0810182528554600160a060020a0316815260018601546020820152600286015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c0820152909250611afc9042612097565b600160a060020a038616600090815260046020526040902080549192509085908110611b2457fe5b906000526020600020906003020160005b50805473ffffffffffffffffffffffffffffffffffffffff19168155600060018083018290556002909201805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600160a060020a038716815260046020526040902080549091611baa919063ffffffff610cb116565b81548110611bb457fe5b906000526020600020906003020160005b50600160a060020a0386166000908152600460205260409020805486908110611bea57fe5b906000526020600020906003020160005b508154815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03918216178255600180840154908301556002928301805493909201805467ffffffffffffffff191667ffffffffffffffff94851617808255835468010000000000000000908190048616026fffffffffffffffff000000000000000019909116178082558354608060020a9081900490951690940277ffffffffffffffff000000000000000000000000000000001990941693909317808455825460ff60c060020a918290048116151590910278ff0000000000000000000000000000000000000000000000001990921691909117808555925460c860020a9081900490911615150279ff0000000000000000000000000000000000000000000000000019909216919091179091558516600090815260046020526040902080546000190190611d4990826122e0565b50600160a060020a038216600090815260016020526040902054611d73908263ffffffff611f5816565b600160a060020a038084166000908152600160205260408082209390935590871681522054611da8908263ffffffff610cb116565b600160a060020a0380871660008181526001602090815260409182902094909455805185815290519286169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35b5050505050565b60145481565b6289544081565b6224ea0081565b6000600060085442101580611e33575060095442105b15611e3e5760006000fd5b60185460ff1615611e4f5760006000fd5b600f546000925033600160a060020a0390811691161415611e705760125491505b60105433600160a060020a0390811691161415611e8d5760135491505b60115433600160a060020a0390811691161415611eaa5760145491505b811515611eb75760006000fd5b611ede8260646345bcc8805b04016102c86127106301312d0002601754610cb1565b610cca565b9050611f0533611eee3485611305565b42426277f88001426301e133800160006000611425565b60178054820190556040805182815290517f9e352721883879ced8efbcaca8e7316a3367205e490f0829362d23c63819e8ee9181900360200190a15b5b5b5050565b80151561030f5760006000fd5b5b50565b6000828201611f6984821015611f47565b8091505b5092915050565b8281611f80824261175c565b811115611f8d5760006000fd5b611e028585856120ee565b5b5b5050505050565b600061132283602001518367ffffffffffffffff16856080015167ffffffffffffffff16866040015167ffffffffffffffff16876060015167ffffffffffffffff166118de565b90505b92915050565b60008167ffffffffffffffff168367ffffffffffffffff1610156120155781611322565b825b90505b92915050565b6000828202611f6984158061203f575083858381151561203c57fe5b04145b611f47565b8091505b5092915050565b60006000828481151561205e57fe5b0490508091505b5092915050565b3381612078824261175c565b8111156120855760006000fd5b61208f8484612212565b5b5b50505050565b60006113226120a68484611fa1565b60208501519063ffffffff610cb116565b90505b92915050565b6000611322836112e6565b90505b92915050565b60008183106120155781611322565b825b90505b92915050565b6000606060643610156121015760006000fd5b600160a060020a038086166000908152600260209081526040808320338516845282528083205493881683526001909152902054909250612148908463ffffffff611f5816565b600160a060020a03808616600090815260016020526040808220939093559087168152205461217d908463ffffffff610cb116565b600160a060020a0386166000908152600160205260409020556121a6828463ffffffff610cb116565b600160a060020a038087166000818152600260209081526040808320338616845282529182902094909455805187815290519288169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35b5b5050505050565b604060443610156122235760006000fd5b600160a060020a03331660009081526001602052604090205461224c908363ffffffff610cb116565b600160a060020a033381166000908152600160205260408082209390935590851681522054612281908363ffffffff611f5816565b600160a060020a038085166000818152600160209081526040918290209490945580518681529051919333909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35b5b505050565b815481835581811511610f4457600302816003028360005260206000209182019101610f449190612344565b5b505050565b815481835581811511610f4457600302816003028360005260206000209182019101610f449190612344565b5b505050565b610c5b91905b80821115610cad57805473ffffffffffffffffffffffffffffffffffffffff191681556000600182015560028101805479ffffffffffffffffffffffffffffffffffffffffffffffffffff1916905560030161234a565b5090565b905600a165627a7a72305820826d02e653aaddbc978d99fe74ac88ef6f430f39fe9d2a08592ef3c71e540b9d002900000000000000000000000020b014a0b669906781250cdcf9966d5c4ce1527a0000000000000000000000008f493c12c4f5ff5fd510549e1e28ea3dd101e850000000000000000000000000000000000000000000000000000000005955768400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000001523437df0c6f68fa555b244f012458668a4c9f00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

   Swarm Source:
bzzr://826d02e653aaddbc978d99fe74ac88ef6f430f39fe9d2a08592ef3c71e540b9d

 

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