Sponsored:   Kirik Meta Protocol - New Generation of Blockchain - Join Pre-Sale Aug 15-17
Contract Overview | BloomToken
Balance: 0 Ether
Ether Value: $0
Transactions: 34489 txns
Token Tracker: Bloom (BLT)
 Latest 25 txns from a total Of 34489 transactions
(+7 PendingTxns)

TxHash Age From To Value [TxFee]
0x593bb990860ed2ee1d52004d8a31dac44acd3ef2ba44f6131f7a05ef74184b9b(pending)0x9087dcae78967116d6d3b084483cc71a5867a403  IN  0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0 Ether(pending)
0xafd26424ab4c90efd81bf36d6da421bcc1e86bb7e2fd3154d99f3cd877fe7e73(pending)0xf4a8b3b4acd90752d80524937e5d9b3d70131e65  IN  0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0 Ether(pending)
0xbfe8f12dd5f93ca5da8bf70b0361e6cbeb52ac92d9432ee829c50e98b816b956(pending)0xe96caa325fd73321d4c51a593dee2d613d817e17  IN  0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0 Ether(pending)
0x196575393895a13be8f1399c1b61c3787408160d5ea2cb415ef31a0ccd0e83f2(pending)0xe96caa325fd73321d4c51a593dee2d613d817e17  IN  0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0 Ether(pending)
0xf34a93d8bbed07c20956bdd58e0f8d7cffaa481fde78c5d0d165fdf7cd193630(pending)0xe96caa325fd73321d4c51a593dee2d613d817e17  IN  0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0 Ether(pending)
0x604794625e657cbc1dab70922235c7f9bad248d93f470fb907cce8fbf59e02c5(pending)0xe96caa325fd73321d4c51a593dee2d613d817e17  IN  0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0 Ether(pending)
0xff7525b5d5315e667e15ab7a482cf9a9009e2f14d4969af78041ec86ab445801(pending)0x2a2258f2e6c3f75830f5b805623457a4ea38ca6d  IN  0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0 Ether(pending)
0xe12b15d85ec348bc8006accc620f6806ef4879f081e2602dafd83f2864d7b57b4 hrs 53 mins ago0x30f0e09b97c4fe4ee34aa482a9c34184372adc20  IN   BloomToken0 Ether0.00030111
0x89af3e2b5c900d3c283fdca373d6a7bd9edf47fbe3b92f238eea1725a36fa5646 hrs 53 mins ago0x29a802b8ff3049b0cd564625e583bb2dac587a97  IN   BloomToken0 Ether0.000427664
0xb409126c4d897b6f6b878769cfb0689afa273948454d44f04600dd60917d415110 hrs 39 mins ago0x0c4f88eceae88f9d66c9a1a763be8a1012161886  IN   BloomToken0 Ether0.000119676
0x1f6b86cb8ff063ed1a635b84c707f31f8678b248c4b1dc658dc225031108b67815 hrs 53 mins ago0xd43a25b442e2c343dad472a871c5262cca275eb4  IN   BloomToken0 Ether0.0001545815
0x7d9eb5e9c7ebac08b4ed0c87ef35f1e641d5287875f9a56453439efb2c24638817 hrs 42 mins ago0x074976a8d5f07da5dada1eb248ad369a764bb373  IN   BloomToken0 Ether0.000852057
0x8f462ee9622bf02f0d2668a28a1e46de02561030f8c44b049c4f010d741b6c0c17 hrs 43 mins agoBittrex_1  IN   BloomToken0 Ether0.0094649
0x25ed547e40e49504df7edc21e3d56811e09930d14fbb691067fc0e549e856e1718 hrs 14 mins ago0x40e813770bbbe324e0864b23c1e920e8ca54af3e  IN   BloomToken0 Ether0.00050057
0x0e4afcb48cfcb1252977c94703baf83fe97a9f26b00f213edcdca956b6f5cab818 hrs 15 mins agoBittrex_1  IN   BloomToken0 Ether0.0106852
0x99b2395b60e875054767c7adfabc388674488655f8ed2e1d0c596a322b3c2b7518 hrs 20 mins ago0x7c3c05d63dd13aab94feb494d3bfe3db19b8dd69  IN   BloomToken0 Ether0.000349951
0x71e5a153bd8079048090b573267aa89dde9e79880fc7561f1ef64652319aec5818 hrs 27 mins agoBittrex_1  IN   BloomToken0 Ether0.0094521
0xa35cd0d88f6a4ceb6ed90c211ec2bd0a8289c8159955a5e2cc53319a7fa1bf1320 hrs 33 mins ago0x561ccc7730c0787c351360f9fe220d9154e0536a  IN   BloomToken0 Ether0.000701694
0x2392b97efedf43f8de57b74abc5be74fc4b684e5f21573b48d0a1f850d7e1b5720 hrs 36 mins ago0x561ccc7730c0787c351360f9fe220d9154e0536a  IN   BloomToken0 Ether0.00040148
0x1660b7127f9d766a1bb84ce41d3291818d24db1eeb7312176255dec5582bcabe20 hrs 36 mins agoBittrex_1  IN   BloomToken0 Ether0.0106916
0x6a494d1ac6f3f60675b9652bba24ebfc5a5518484969f624c5ab90879858b7921 day 2 hrs ago0xcdf20191fc4886dbe8a073ca06a0f0f7ac8cf78c  IN   BloomToken0 Ether0.001987629
0x272fd25aa8e5be495ae5a834b58bea5319092178dd6623956b09ca62f042f07b1 day 7 hrs ago0x8ebd10fe696288c6ed1e024064fdf54541aa63e0  IN   BloomToken0 Ether0.000600684
0x51e94b584066638253ae966210c483dd50ef820b892eb8af5c4ebc13a0a8dd0c1 day 7 hrs agoBibox  IN   BloomToken0 Ether0.0037834
0x593ad6308ad4b33f333ea78ae2c2d345be9003f644b24d2b9141b562437df1561 day 8 hrs ago0x8ebd10fe696288c6ed1e024064fdf54541aa63e0  IN   BloomToken0 Ether0.004383556
0xe11dd5224df43f44493b702a542b331a04dbd43973c33bfeab0884c1cf9f303d1 day 8 hrs ago0xc0ba17218126f02ff9f6067c0585487eb857e885  IN   BloomToken0 Ether0.000186000006
[ 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
0xdaabd6f3a53022a5ba5f9d74e297ade863e00d9d3645564cbf0caeb9be56363e5481940117 days 9 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb43.40579003 Ether
0x5728bb138d4092d5c4771cca00268ad77c2de6584e4ac71faa37b01dfc453a725289058149 days 17 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.2792 Ether
0xae345de4086a7c0e471a0c9747289d2ee73ddf322470ecfda38be62f2b96e23f5117029178 days 23 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0x98cc5e509c1e89e8cc76c78f55535345da322935b358ae38afca5cdf9df061865116896179 days 2 mins ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xd43c0f0eabcd08ff386ed29b21b6d1661801635f74c9d4d5b59881a5517648095116835179 days 21 mins ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0x4fce77982a2549f93757a7085f0beb7525cc2b86e03944214ad91abb179747395116810179 days 28 mins ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xee10159e9835bccadb0610080d431895fdc322dca9d7d743458a9639d0f7a55c5112433179 days 18 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xe5c7208a8534eb27b31131f9a460e84b07a577a0f799328f2bc8aeaf8728a3e14997645199 days 1 hr ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.0003 Ether
0x122646806d2fea41a97db7fb6403979770b30013705c2589f4de8d14c72414db4996471199 days 6 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.001 Ether
0xf03a67648c32953c42c349ca63a411544186d0896710c9cbe2440e69560e39474930853210 days 9 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.09276 Ether
0xc367cbd7dea57b3f969eadcdcf5fd28d7b0d03a3ca13be51cbe780e17b7bbcff4837235227 days 11 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.5 Ether
0x61e2763117824c33d9e903b5c1a6279c29b3b5aca98b30a5b5a0faff397ceef44836060227 days 16 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.05 Ether
0x380252e0862ba2097e6212aa03acd8eae7b17aad56969df34e6472b7101943134832872228 days 4 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.96766138 Ether
0x9f594928c6ed5c11e71e7e6c3745560ff662f5c6e9f73b6c7a3c2c60866314604832409228 days 6 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.6 Ether
0xd871598f9e918f52e01aacf4ff8e3d090c0a05d60166ad1d5ebd9a17f67c767d4810127232 days 2 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac2 Ether
0x9adea1f235358d2d30741905fc8f43d13b1927d0a63c3667e8f163148b50c0a74805307232 days 21 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x2b2fefc722dd87bfc329ad36b279255795efc9426bad4d35b9eb589229621c2a4805242232 days 22 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x3f7ac8deca293b0ad618a39308968eb61d07a1bd0af605d1a51e863abfeddd254805215232 days 22 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x5fbd5a07ef5e4b21211350049de20708c2aca5da032fe91c98e2e2f06e0f99f64803081233 days 6 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x33e6b6a6ef3dd99bb3bd48b741f7aa3dbc61122a5fa4b5729298400b9f60af8c4783966236 days 11 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.019 Ether
0x256d30d943cd97c04125972e9b2caabe80ac684ad6c3c39be8ca0fb37b5ad7634746095243 days 3 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.39 Ether
0xf21666c10fff1bedc27540803e5bed8e2e9e77b8b30df70061007c09786e46694702795250 days 15 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.48318051 Ether
0x67cba4d653a56b589094cedcd0c2ab978c90e093773070fe1093583a5eeea3644666912256 days 22 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.2924213 Ether
0x5deb87b8c7e8f577c6c663a241ad185122bfd763a10dd114b32410ef502d9dd14666900256 days 22 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.29 Ether
0xa0c7471f4bd3e4dc19123fb55665db16cf2672627558454f997bce9d51005d504666898256 days 22 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.001 Ether
[ Download CSV Export  ] 
Warning: The compiled contract might be susceptible to NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) Solidity compiler bugs.

Contract Source Code Verified (Exact match)
Contract Name: BLT
Compiler Version: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.13;

library Math {
  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;
  }
}

library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant 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;
  }

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

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

contract TokenController {
    /// @notice Called when `_owner` sends ether to the MiniMe Token contract
    /// @param _owner The address that sent the ether to create tokens
    /// @return True if the ether is accepted, false if it throws
    function proxyPayment(address _owner) payable returns(bool);

    /// @notice Notifies the controller about a token transfer allowing the
    ///  controller to react if desired
    /// @param _from The origin of the transfer
    /// @param _to The destination of the transfer
    /// @param _amount The amount of the transfer
    /// @return False if the controller does not authorize the transfer
    function onTransfer(address _from, address _to, uint _amount) returns(bool);

    /// @notice Notifies the controller about an approval allowing the
    ///  controller to react if desired
    /// @param _owner The address that calls `approve()`
    /// @param _spender The spender in the `approve()` call
    /// @param _amount The amount in the `approve()` call
    /// @return False if the controller does not authorize the approval
    function onApprove(address _owner, address _spender, uint _amount)
        returns(bool);
}

contract Controlled {
    /// @notice The address of the controller is the only address that can call
    ///  a function with this modifier
    modifier onlyController { require(msg.sender == controller); _; }

    address public controller;

    function Controlled() { controller = msg.sender;}

    /// @notice Changes the controller of the contract
    /// @param _newController The new controller of the contract
    function changeController(address _newController) onlyController {
        controller = _newController;
    }
}

contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 _amount, address _token, bytes _data);
}

contract MiniMeToken is Controlled {

    string public name;                //The Token's name: e.g. DigixDAO Tokens
    uint8 public decimals;             //Number of decimals of the smallest unit
    string public symbol;              //An identifier: e.g. REP
    string public version = 'MMT_0.1'; //An arbitrary versioning scheme


    /// @dev `Checkpoint` is the structure that attaches a block number to a
    ///  given value, the block number attached is the one that last changed the
    ///  value
    struct  Checkpoint {

        // `fromBlock` is the block number that the value was generated from
        uint128 fromBlock;

        // `value` is the amount of tokens at a specific block number
        uint128 value;
    }

    // `parentToken` is the Token address that was cloned to produce this token;
    //  it will be 0x0 for a token that was not cloned
    MiniMeToken public parentToken;

    // `parentSnapShotBlock` is the block number from the Parent Token that was
    //  used to determine the initial distribution of the Clone Token
    uint public parentSnapShotBlock;

    // `creationBlock` is the block number that the Clone Token was created
    uint public creationBlock;

    // `balances` is the map that tracks the balance of each address, in this
    //  contract when the balance changes the block number that the change
    //  occurred is also included in the map
    mapping (address => Checkpoint[]) balances;

    // `allowed` tracks any extra transfer rights as in all ERC20 tokens
    mapping (address => mapping (address => uint256)) allowed;

    // Tracks the history of the `totalSupply` of the token
    Checkpoint[] totalSupplyHistory;

    // Flag that determines if the token is transferable or not.
    bool public transfersEnabled;

    // The factory used to create new clone tokens
    MiniMeTokenFactory public tokenFactory;

////////////////
// Constructor
////////////////

    /// @notice Constructor to create a MiniMeToken
    /// @param _tokenFactory The address of the MiniMeTokenFactory contract that
    ///  will create the Clone token contracts, the token factory needs to be
    ///  deployed first
    /// @param _parentToken Address of the parent token, set to 0x0 if it is a
    ///  new token
    /// @param _parentSnapShotBlock Block of the parent token that will
    ///  determine the initial distribution of the clone token, set to 0 if it
    ///  is a new token
    /// @param _tokenName Name of the new token
    /// @param _decimalUnits Number of decimals of the new token
    /// @param _tokenSymbol Token Symbol for the new token
    /// @param _transfersEnabled If true, tokens will be able to be transferred
    function MiniMeToken(
        address _tokenFactory,
        address _parentToken,
        uint _parentSnapShotBlock,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol,
        bool _transfersEnabled
    ) {
        tokenFactory = MiniMeTokenFactory(_tokenFactory);
        name = _tokenName;                                 // Set the name
        decimals = _decimalUnits;                          // Set the decimals
        symbol = _tokenSymbol;                             // Set the symbol
        parentToken = MiniMeToken(_parentToken);
        parentSnapShotBlock = _parentSnapShotBlock;
        transfersEnabled = _transfersEnabled;
        creationBlock = block.number;
    }


///////////////////
// ERC20 Methods
///////////////////

    /// @notice Send `_amount` tokens to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _amount) returns (bool success) {
        require(transfersEnabled);
        return doTransfer(msg.sender, _to, _amount);
    }

    /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it
    ///  is approved by `_from`
    /// @param _from The address holding the tokens being transferred
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function transferFrom(address _from, address _to, uint256 _amount
    ) returns (bool success) {

        // The controller of this contract can move tokens around at will,
        //  this is important to recognize! Confirm that you trust the
        //  controller of this contract, which in most situations should be
        //  another open source smart contract or 0x0
        if (msg.sender != controller) {
            require(transfersEnabled);

            // The standard ERC 20 transferFrom functionality
            if (allowed[_from][msg.sender] < _amount) return false;
            allowed[_from][msg.sender] -= _amount;
        }
        return doTransfer(_from, _to, _amount);
    }

    /// @dev This is the actual transfer function in the token contract, it can
    ///  only be called by other functions in this contract.
    /// @param _from The address holding the tokens being transferred
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function doTransfer(address _from, address _to, uint _amount
    ) internal returns(bool) {

           if (_amount == 0) {
               return true;
           }

           require(parentSnapShotBlock < block.number);

           // Do not allow transfer to 0x0 or the token contract itself
           require((_to != 0) && (_to != address(this)));

           // If the amount being transfered is more than the balance of the
           //  account the transfer returns false
           var previousBalanceFrom = balanceOfAt(_from, block.number);
           if (previousBalanceFrom < _amount) {
               return false;
           }

           // Alerts the token controller of the transfer
           if (isContract(controller)) {
               require(TokenController(controller).onTransfer(_from, _to, _amount));
           }

           // First update the balance array with the new value for the address
           //  sending the tokens
           updateValueAtNow(balances[_from], previousBalanceFrom - _amount);

           // Then update the balance array with the new value for the address
           //  receiving the tokens
           var previousBalanceTo = balanceOfAt(_to, block.number);
           require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
           updateValueAtNow(balances[_to], previousBalanceTo + _amount);

           // An event to make the transfer easy to find on the blockchain
           Transfer(_from, _to, _amount);

           return true;
    }

    /// @param _owner The address that's balance is being requested
    /// @return The balance of `_owner` at the current block
    function balanceOf(address _owner) constant returns (uint256 balance) {
        return balanceOfAt(_owner, block.number);
    }

    /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on
    ///  its behalf. This is a modified version of the ERC20 approve function
    ///  to be a little bit safer
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _amount The amount of tokens to be approved for transfer
    /// @return True if the approval was successful
    function approve(address _spender, uint256 _amount) returns (bool success) {
        require(transfersEnabled);

        // 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
        require((_amount == 0) || (allowed[msg.sender][_spender] == 0));

        // Alerts the token controller of the approve function call
        if (isContract(controller)) {
            require(TokenController(controller).onApprove(msg.sender, _spender, _amount));
        }

        allowed[msg.sender][_spender] = _amount;
        Approval(msg.sender, _spender, _amount);
        return true;
    }

    /// @dev This function makes it easy to read the `allowed[]` map
    /// @param _owner The address of the account that owns the token
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens of _owner that _spender is allowed
    ///  to spend
    function allowance(address _owner, address _spender
    ) constant returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }

    /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on
    ///  its behalf, and then a function is triggered in the contract that is
    ///  being approved, `_spender`. This allows users to use their tokens to
    ///  interact with contracts in one function call instead of two
    /// @param _spender The address of the contract able to transfer the tokens
    /// @param _amount The amount of tokens to be approved for transfer
    /// @return True if the function call was successful
    function approveAndCall(address _spender, uint256 _amount, bytes _extraData
    ) returns (bool success) {
        require(approve(_spender, _amount));

        ApproveAndCallFallBack(_spender).receiveApproval(
            msg.sender,
            _amount,
            this,
            _extraData
        );

        return true;
    }

    /// @dev This function makes it easy to get the total number of tokens
    /// @return The total number of tokens
    function totalSupply() constant returns (uint) {
        return totalSupplyAt(block.number);
    }


////////////////
// Query balance and totalSupply in History
////////////////

    /// @dev Queries the balance of `_owner` at a specific `_blockNumber`
    /// @param _owner The address from which the balance will be retrieved
    /// @param _blockNumber The block number when the balance is queried
    /// @return The balance at `_blockNumber`
    function balanceOfAt(address _owner, uint _blockNumber) constant
        returns (uint) {

        // These next few lines are used when the balance of the token is
        //  requested before a check point was ever created for this token, it
        //  requires that the `parentToken.balanceOfAt` be queried at the
        //  genesis block for that token as this contains initial balance of
        //  this token
        if ((balances[_owner].length == 0)
            || (balances[_owner][0].fromBlock > _blockNumber)) {
            if (address(parentToken) != 0) {
                return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock));
            } else {
                // Has no parent
                return 0;
            }

        // This will return the expected balance during normal situations
        } else {
            return getValueAt(balances[_owner], _blockNumber);
        }
    }

    /// @notice Total amount of tokens at a specific `_blockNumber`.
    /// @param _blockNumber The block number when the totalSupply is queried
    /// @return The total amount of tokens at `_blockNumber`
    function totalSupplyAt(uint _blockNumber) constant returns(uint) {

        // These next few lines are used when the totalSupply of the token is
        //  requested before a check point was ever created for this token, it
        //  requires that the `parentToken.totalSupplyAt` be queried at the
        //  genesis block for this token as that contains totalSupply of this
        //  token at this block number.
        if ((totalSupplyHistory.length == 0)
            || (totalSupplyHistory[0].fromBlock > _blockNumber)) {
            if (address(parentToken) != 0) {
                return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock));
            } else {
                return 0;
            }

        // This will return the expected totalSupply during normal situations
        } else {
            return getValueAt(totalSupplyHistory, _blockNumber);
        }
    }

////////////////
// Clone Token Method
////////////////

    /// @notice Creates a new clone token with the initial distribution being
    ///  this token at `_snapshotBlock`
    /// @param _cloneTokenName Name of the clone token
    /// @param _cloneDecimalUnits Number of decimals of the smallest unit
    /// @param _cloneTokenSymbol Symbol of the clone token
    /// @param _snapshotBlock Block when the distribution of the parent token is
    ///  copied to set the initial distribution of the new clone token;
    ///  if the block is zero than the actual block, the current block is used
    /// @param _transfersEnabled True if transfers are allowed in the clone
    /// @return The address of the new MiniMeToken Contract
    function createCloneToken(
        string _cloneTokenName,
        uint8 _cloneDecimalUnits,
        string _cloneTokenSymbol,
        uint _snapshotBlock,
        bool _transfersEnabled
        ) returns(address) {
        if (_snapshotBlock == 0) _snapshotBlock = block.number;
        MiniMeToken cloneToken = tokenFactory.createCloneToken(
            this,
            _snapshotBlock,
            _cloneTokenName,
            _cloneDecimalUnits,
            _cloneTokenSymbol,
            _transfersEnabled
            );

        cloneToken.changeController(msg.sender);

        // An event to make the token easy to find on the blockchain
        NewCloneToken(address(cloneToken), _snapshotBlock);
        return address(cloneToken);
    }

////////////////
// Generate and destroy tokens
////////////////

    /// @notice Generates `_amount` tokens that are assigned to `_owner`
    /// @param _owner The address that will be assigned the new tokens
    /// @param _amount The quantity of tokens generated
    /// @return True if the tokens are generated correctly
    function generateTokens(address _owner, uint _amount
    ) onlyController returns (bool) {
        uint curTotalSupply = totalSupply();
        require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow
        uint previousBalanceTo = balanceOf(_owner);
        require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
        updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);
        updateValueAtNow(balances[_owner], previousBalanceTo + _amount);
        Transfer(0, _owner, _amount);
        return true;
    }


    /// @notice Burns `_amount` tokens from `_owner`
    /// @param _owner The address that will lose the tokens
    /// @param _amount The quantity of tokens to burn
    /// @return True if the tokens are burned correctly
    function destroyTokens(address _owner, uint _amount
    ) onlyController returns (bool) {
        uint curTotalSupply = totalSupply();
        require(curTotalSupply >= _amount);
        uint previousBalanceFrom = balanceOf(_owner);
        require(previousBalanceFrom >= _amount);
        updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount);
        updateValueAtNow(balances[_owner], previousBalanceFrom - _amount);
        Transfer(_owner, 0, _amount);
        return true;
    }

////////////////
// Enable tokens transfers
////////////////


    /// @notice Enables token holders to transfer their tokens freely if true
    /// @param _transfersEnabled True if transfers are allowed in the clone
    function enableTransfers(bool _transfersEnabled) onlyController {
        transfersEnabled = _transfersEnabled;
    }

////////////////
// Internal helper functions to query and set a value in a snapshot array
////////////////

    /// @dev `getValueAt` retrieves the number of tokens at a given block number
    /// @param checkpoints The history of values being queried
    /// @param _block The block number to retrieve the value at
    /// @return The number of tokens being queried
    function getValueAt(Checkpoint[] storage checkpoints, uint _block
    ) constant internal returns (uint) {
        if (checkpoints.length == 0) return 0;

        // Shortcut for the actual value
        if (_block >= checkpoints[checkpoints.length-1].fromBlock)
            return checkpoints[checkpoints.length-1].value;
        if (_block < checkpoints[0].fromBlock) return 0;

        // Binary search of the value in the array
        uint min = 0;
        uint max = checkpoints.length-1;
        while (max > min) {
            uint mid = (max + min + 1)/ 2;
            if (checkpoints[mid].fromBlock<=_block) {
                min = mid;
            } else {
                max = mid-1;
            }
        }
        return checkpoints[min].value;
    }

    /// @dev `updateValueAtNow` used to update the `balances` map and the
    ///  `totalSupplyHistory`
    /// @param checkpoints The history of data being updated
    /// @param _value The new number of tokens
    function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value
    ) internal  {
        if ((checkpoints.length == 0)
        || (checkpoints[checkpoints.length -1].fromBlock < block.number)) {
               Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ];
               newCheckPoint.fromBlock =  uint128(block.number);
               newCheckPoint.value = uint128(_value);
           } else {
               Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1];
               oldCheckPoint.value = uint128(_value);
           }
    }

    /// @dev Internal function to determine if an address is a contract
    /// @param _addr The address being queried
    /// @return True if `_addr` is a contract
    function isContract(address _addr) constant internal returns(bool) {
        uint size;
        if (_addr == 0) return false;
        assembly {
            size := extcodesize(_addr)
        }
        return size>0;
    }

    /// @dev Helper function to return a min betwen the two uints
    function min(uint a, uint b) internal returns (uint) {
        return a < b ? a : b;
    }

    /// @notice The fallback function: If the contract's controller has not been
    ///  set to 0, then the `proxyPayment` method is called which relays the
    ///  ether and creates tokens as described in the token controller contract
    function ()  payable {
        require(isContract(controller));
        require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender));
    }

//////////
// Safety Methods
//////////

    /// @notice This method can be used by the controller to extract mistakenly
    ///  sent tokens to this contract.
    /// @param _token The address of the token contract that you want to recover
    ///  set to 0 in case you want to extract ether.
    function claimTokens(address _token) onlyController {
        if (_token == 0x0) {
            controller.transfer(this.balance);
            return;
        }

        MiniMeToken token = MiniMeToken(_token);
        uint balance = token.balanceOf(this);
        token.transfer(controller, balance);
        ClaimedTokens(_token, controller, balance);
    }

////////////////
// Events
////////////////
    event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount);
    event Transfer(address indexed _from, address indexed _to, uint256 _amount);
    event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock);
    event Approval(
        address indexed _owner,
        address indexed _spender,
        uint256 _amount
        );

}

contract MiniMeTokenFactory {

    /// @notice Update the DApp by creating a new token with new functionalities
    ///  the msg.sender becomes the controller of this clone token
    /// @param _parentToken Address of the token being cloned
    /// @param _snapshotBlock Block of the parent token that will
    ///  determine the initial distribution of the clone token
    /// @param _tokenName Name of the new token
    /// @param _decimalUnits Number of decimals of the new token
    /// @param _tokenSymbol Token Symbol for the new token
    /// @param _transfersEnabled If true, tokens will be able to be transferred
    /// @return The address of the new token contract
    function createCloneToken(
        address _parentToken,
        uint _snapshotBlock,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol,
        bool _transfersEnabled
    ) returns (MiniMeToken) {
        MiniMeToken newToken = new MiniMeToken(
            this,
            _parentToken,
            _snapshotBlock,
            _tokenName,
            _decimalUnits,
            _tokenSymbol,
            _transfersEnabled
            );

        newToken.changeController(msg.sender);
        return newToken;
    }
}

contract MiniMeVestedToken is MiniMeToken {
  using SafeMath for uint256;
  using Math for uint64;

  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)

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

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

  mapping (address => bool) public canCreateGrants;
  address public vestingWhitelister;

  modifier canTransfer(address _sender, uint _value) {
    require(spendableBalanceOf(_sender) >= _value);
    _;
  }

  modifier onlyVestingWhitelister {
    require(msg.sender == vestingWhitelister);
    _;
  }

  function MiniMeVestedToken (
      address _tokenFactory,
      address _parentToken,
      uint _parentSnapShotBlock,
      string _tokenName,
      uint8 _decimalUnits,
      string _tokenSymbol,
      bool _transfersEnabled
  ) public
    MiniMeToken(_tokenFactory, _parentToken, _parentSnapShotBlock, _tokenName, _decimalUnits, _tokenSymbol, _transfersEnabled) {
    vestingWhitelister = msg.sender;
    doSetCanCreateGrants(vestingWhitelister, true);
  }

  // @dev Add canTransfer modifier before allowing transfer and transferFrom to go through
  function transfer(address _to, uint _value)
           public
           canTransfer(msg.sender, _value)
           returns (bool success) {
    return super.transfer(_to, _value);
  }

  function transferFrom(address _from, address _to, uint _value)
           public
           canTransfer(_from, _value)
           returns (bool success) {
    return super.transferFrom(_from, _to, _value);
  }

  function spendableBalanceOf(address _holder) public constant returns (uint) {
    return transferableTokens(_holder, uint64(now)); // solhint-disable not-rely-on-time
  }

  /**
   * @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 start, cliff and vesting are properly order to ensure correct functionality of the formula.
    require(_cliff >= _start);
    require(_vesting >= _cliff);

    require(canCreateGrants[msg.sender]);
    require(tokenGrantsCount(_to) < 20);   // To prevent a user being spammed and have his balance locked (out of gas attack when calculating vesting).

    TokenGrant memory grant = TokenGrant(
      _revokable ? msg.sender : 0,
      _value,
      _cliff,
      _vesting,
      _start,
      _revokable,
      _burnsOnRevoke
    );

    uint256 count = grants[_to].push(grant);

    assert(transfer(_to, _value));

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

  function setCanCreateGrants(address _addr, bool _allowed)
           public onlyVestingWhitelister {
    doSetCanCreateGrants(_addr, _allowed);
  }

  function changeVestingWhitelister(address _newWhitelister) public onlyVestingWhitelister {
    require(_newWhitelister != 0);
    doSetCanCreateGrants(vestingWhitelister, false);
    vestingWhitelister = _newWhitelister;
    doSetCanCreateGrants(vestingWhitelister, true);
  }

  /**
   * @dev Revoke the grant of tokens of a specifed address.
   * @param _holder The address which will have its tokens revoked.
   * @param _receiver Recipient of revoked tokens.
   * @param _grantId The id of the token grant.
   */
  function revokeTokenGrant(address _holder, address _receiver, uint256 _grantId) public onlyVestingWhitelister {
    require(_receiver != 0);

    TokenGrant storage grant = grants[_holder][_grantId];

    require(grant.revokable);
    require(grant.granter == msg.sender); // Only granter can revoke it

    address receiver = grant.burnsOnRevoke ? 0xdead : _receiver;

    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;

    doTransfer(_holder, receiver, nonVested);
  }

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

  /**
   * @dev Get all information about a specific 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, uint256 _grantId) public constant returns (address granter, uint256 value, uint256 vested, uint64 start, uint64 cliff, uint64 vesting, bool revokable, bool burnsOnRevoke) {
    TokenGrant storage 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 The date in which all tokens are transferable for the holder
  // Useful for displaying purposes (not used in any logic calculations)
  function lastTokenIsTransferableDate(address holder) public constant returns (uint64 date) {
    date = uint64(now);
    uint256 grantIndex = tokenGrantsCount(holder);
    for (uint256 i = 0; i < grantIndex; i++) {
      date = grants[holder][i].vesting.max64(date);
    }
    return date;
  }

  // @dev How many tokens can a holder transfer at a point in time
  function transferableTokens(address holder, uint64 time) public constant 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 = nonVested.add(nonVestedTokens(grants[holder][i], time));
    }

    // Balance - totalNonVested is the amount of tokens a holder can transfer at any given time
    return balanceOf(holder).sub(nonVested);
  }

  function doSetCanCreateGrants(address _addr, bool _allowed)
           internal {
    canCreateGrants[_addr] = _allowed;
  }

  /**
   * @dev Calculate amount of vested tokens at a specific time
   * @param tokens uint256 The amount of tokens granted
   * @param time uint64 The time to be checked
   * @param start uint64 The time representing the beginning of the grant
   * @param cliff uint64  The cliff period, the period before nothing can be paid out
   * @param vesting uint64 The vesting period
   * @return An uint256 representing the amount of vested tokens of a specific grant
   *  transferableTokens
   *   |                         _/--------   vestedTokens rect
   *   |                       _/
   *   |                     _/
   *   |                   _/
   *   |                 _/
   *   |                /
   *   |              .|
   *   |            .  |
   *   |          .    |
   *   |        .      |
   *   |      .        |
   *   |    .          |
   *   +===+===========+---------+----------> time
   *      Start       Cliff    Vesting
   */
  function calculateVestedTokens(
    uint256 tokens,
    uint256 time,
    uint256 start,
    uint256 cliff,
    uint256 vesting) internal 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 this function to
    // calculate it.

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

    return vested;
  }

  /**
   * @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 uint256 representing the amount of non vested tokens of a specific grant on the
   * passed time frame.
   */
  function nonVestedTokens(TokenGrant storage grant, uint64 time) internal constant returns (uint256) {
    // Of all the tokens of the grant, how many of them are not vested?
    // grantValue - vestedTokens
    return grant.value.sub(vestedTokens(grant, time));
  }

  /**
   * @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 uint256 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)
    );
  }
}

contract BLT is MiniMeVestedToken {
  function BLT(address _tokenFactory) public MiniMeVestedToken(
    _tokenFactory,
    0x0,           // no parent token
    0,             // no snapshot block number from parent
    "Bloom Token", // Token name
    18,            // Decimals
    "BLT",         // Symbol
    true           // Enable transfers
  ) {} // solhint-disable-line no-empty-blocks
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"tokenGrantsCount","outputs":[{"name":"index","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":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"spendableBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"canCreateGrants","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_allowed","type":"bool"}],"name":"setCanCreateGrants","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"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":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"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":false,"inputs":[{"name":"_cloneTokenName","type":"string"},{"name":"_cloneDecimalUnits","type":"uint8"},{"name":"_cloneTokenSymbol","type":"string"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"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":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"parentToken","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"generateTokens","outputs":[{"name":"","type":"bool"}],"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":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_holder","type":"address"},{"name":"_receiver","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"revokeTokenGrant","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"transfersEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"parentSnapShotBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"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":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"destroyTokens","outputs":[{"name":"","type":"bool"}],"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":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vestingWhitelister","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenFactory","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_transfersEnabled","type":"bool"}],"name":"enableTransfers","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newWhitelister","type":"address"}],"name":"changeVestingWhitelister","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_tokenFactory","type":"address"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"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":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_cloneToken","type":"address"},{"indexed":false,"name":"_snapshotBlock","type":"uint256"}],"name":"NewCloneToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405260408051908101604052600781527f4d4d545f302e3100000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000219565b5034156200005a57600080fd5b60405160208062002ed3833981016040528080519150505b806000806040805190810160405280600b81526020017f426c6f6f6d20546f6b656e000000000000000000000000000000000000000000815250601260408051908101604052600381527f424c540000000000000000000000000000000000000000000000000000000000602082015260015b868686868686865b5b60008054600160a060020a03191633600160a060020a03161790555b600b805461010060a860020a031916610100600160a060020a038a160217905560018480516200013f92916020019062000219565b506002805460ff191660ff851617905560038280516200016492916020019062000219565b5060058054600160a060020a031916600160a060020a0388161790556006859055600b805460ff1916821515179055436007555b5050600e8054600160a060020a03191633600160a060020a039081169190911791829055620001e096501693506001925050640100000000620001f081026200234a17049050565b5b505050505050505b50620002c3565b600160a060020a0382166000908152600d60205260409020805460ff19168215151790555b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200025c57805160ff19168380011785556200028c565b828001600101855582156200028c579182015b828111156200028c5782518255916020019190600101906200026f565b5b506200029b9291506200029f565b5090565b620002c091905b808211156200029b5760008155600101620002a6565b5090565b90565b612c0080620002d36000396000f300606060405236156101b15763ffffffff60e060020a60003504166302a72a4c811461025857806306fdde0314610289578063095ea7b3146103145780630f8f8b831461034a578063176345141461037b57806318160ddd146103a057806318cd55f3146103c55780631f9a391c146103f857806323b872dd1461041e5780632c71e60a1461045a578063313ce567146104d55780633cebb823146104fe5780634ee2cd7e1461051f57806354fd4d5014610553578063600e85b7146105de5780636638c0871461065f5780636c182e991461072357806370a082311461075f57806380a5400114610790578063827f32c0146107bf57806395d89b41146107f55780639754a4d914610880578063981b24d0146108c7578063a9059cbb146108ef578063b0cf0dcb14610925578063bef97c871461094f578063c5bcc4f114610976578063cae9ca511461099b578063d347c20514610a14578063d3ce77fe14610a52578063dd62ed3e14610a88578063df8de3e714610abf578063dfae7dc114610ae0578063e77772fe14610b0f578063f41e60c514610b3e578063f77c479114610b58578063fb13a70714610b87575b5b6000546101c790600160a060020a0316610ba8565b15156101d257600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b151561022e57600080fd5b6125ee5a03f1151561023f57600080fd5b5050505060405180519050151561025557600080fd5b5b005b341561026357600080fd5b610277600160a060020a0360043516610bd5565b60405190815260200160405180910390f35b341561029457600080fd5b61029c610bf4565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031f57600080fd5b610336600160a060020a0360043516602435610c92565b604051901515815260200160405180910390f35b341561035557600080fd5b610277600160a060020a0360043516610dfc565b60405190815260200160405180910390f35b341561038657600080fd5b610277610e10565b60405190815260200160405180910390f35b34156103ab57600080fd5b610277610e16565b60405190815260200160405180910390f35b34156103d057600080fd5b610336600160a060020a0360043516610e27565b604051901515815260200160405180910390f35b341561040357600080fd5b610255600160a060020a03600435166024351515610e3c565b005b341561042957600080fd5b610336600160a060020a0360043581169060243516604435610e67565b604051901515815260200160405180910390f35b341561046557600080fd5b61047c600160a060020a0360043516602435610e98565b604051600160a060020a039097168752602087019590955267ffffffffffffffff93841660408088019190915292841660608701529216608085015290151560a084015290151560c083015260e0909101905180910390f35b34156104e057600080fd5b6104e8610f1e565b60405160ff909116815260200160405180910390f35b341561050957600080fd5b610255600160a060020a0360043516610f27565b005b341561052a57600080fd5b610277600160a060020a0360043516602435610f62565b60405190815260200160405180910390f35b341561055e57600080fd5b61029c6110a8565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105e957600080fd5b610600600160a060020a0360043516602435611146565b604051600160a060020a039098168852602088019690965260408088019590955267ffffffffffffffff9384166060880152918316608087015290911660a0850152151560c084015290151560e0830152610100909101905180910390f35b341561066a57600080fd5b61070760046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050843594602001351515935061129392505050565b604051600160a060020a03909116815260200160405180910390f35b341561072e57600080fd5b610742600160a060020a03600435166114c3565b60405167ffffffffffffffff909116815260200160405180910390f35b341561076a57600080fd5b610277600160a060020a036004351661154e565b60405190815260200160405180910390f35b341561079b57600080fd5b610707611562565b604051600160a060020a03909116815260200160405180910390f35b34156107ca57600080fd5b610336600160a060020a0360043516602435611571565b604051901515815260200160405180910390f35b341561080057600080fd5b61029c611644565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561088b57600080fd5b610255600160a060020a036004351660243567ffffffffffffffff6044358116906064358116906084351660a435151560c43515156116e2565b005b34156108d257600080fd5b6102776004356119a7565b60405190815260200160405180910390f35b34156108fa57600080fd5b610336600160a060020a0360043516602435611a9f565b604051901515815260200160405180910390f35b341561093057600080fd5b610255600160a060020a0360043581169060243516604435611ace565b005b341561095a57600080fd5b610336611de5565b604051901515815260200160405180910390f35b341561098157600080fd5b610277611dee565b60405190815260200160405180910390f35b34156109a657600080fd5b61033660048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611df495505050505050565b604051901515815260200160405180910390f35b3415610a1f57600080fd5b610277600160a060020a036004351667ffffffffffffffff60243516611f12565b60405190815260200160405180910390f35b3415610a5d57600080fd5b610336600160a060020a0360043516602435611fca565b604051901515815260200160405180910390f35b3415610a9357600080fd5b610277600160a060020a0360043581169060243516612097565b60405190815260200160405180910390f35b3415610aca57600080fd5b610255600160a060020a03600435166120c4565b005b3415610aeb57600080fd5b610707612271565b604051600160a060020a03909116815260200160405180910390f35b3415610b1a57600080fd5b610707612280565b604051600160a060020a03909116815260200160405180910390f35b3415610b4957600080fd5b6102556004351515612294565b005b3415610b6357600080fd5b6107076122c2565b604051600160a060020a03909116815260200160405180910390f35b3415610b9257600080fd5b610255600160a060020a03600435166122d1565b005b600080600160a060020a0383161515610bc45760009150610bcf565b823b90506000811191505b50919050565b600160a060020a0381166000908152600c60205260409020545b919050565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b600b5460009060ff161515610ca657600080fd5b811580610cd65750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b1515610ce157600080fd5b600054610cf690600160a060020a0316610ba8565b15610d915760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610d6b57600080fd5b6102c65a03f11515610d7c57600080fd5b505050604051805190501515610d9157600080fd5b5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b6000610e088242611f12565b90505b919050565b60075481565b6000610e21436119a7565b90505b90565b600d6020526000908152604090205460ff1681565b600e5433600160a060020a03908116911614610e5757600080fd5b610e61828261234a565b5b5b5050565b6000838280610e7583610dfc565b1015610e8057600080fd5b610e8b868686612373565b92505b5b50509392505050565b600c60205281600052604060002081815481101515610eb357fe5b906000526020600020906003020160005b5080546001820154600290920154600160a060020a03909116935090915067ffffffffffffffff80821691680100000000000000008104821691608060020a8204169060ff60c060020a820481169160c860020a90041687565b60025460ff1681565b60005433600160a060020a03908116911614610f4257600080fd5b60008054600160a060020a031916600160a060020a0383161790555b5b50565b600160a060020a0382166000908152600860205260408120541580610fc25750600160a060020a038316600090815260086020526040812080548492908110610fa757fe5b906000526020600020900160005b50546001608060020a0316115b1561107857600554600160a060020a03161561106b57600554600654600160a060020a0390911690634ee2cd7e908590610ffd908690612415565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561104957600080fd5b6102c65a03f1151561105a57600080fd5b505050604051805190509050610df6565b506000610df6565b610df6565b600160a060020a038316600090815260086020526040902061109a908361242f565b9050610df6565b5b92915050565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b6000806000806000806000806000600c60008c600160a060020a0316600160a060020a031681526020019081526020016000208a81548110151561118657fe5b906000526020600020906003020160005b50805460018201546002830154600160a060020a039092169b50995067ffffffffffffffff608060020a820481169850808216975068010000000000000000820416955060ff60c060020a82048116955060c860020a90910416925090506112828160e060405190810160409081528254600160a060020a031682526001830154602083015260029092015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c082015242612589565b96505b509295985092959890939650565b6000808315156112a1574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b838110156113455780820151818401525b60200161132c565b50505050905090810190601f1680156113725780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156113a95780820151818401525b602001611390565b50505050905090810190601f1680156113d65780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15156113fa57600080fd5b6102c65a03f1151561140b57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561146457600080fd5b6102c65a03f1151561147557600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a28091505b5095945050505050565b426000806114d084610bd5565b9150600090505b8181101561154657600160a060020a0384166000908152600c60205260409020805461153b9185918490811061150957fe5b906000526020600020906003020160005b506002015468010000000000000000900467ffffffffffffffff16906125d9565b92505b6001016114d7565b5b5050919050565b6000610e088243610f62565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a0390811691161461159157600080fd5b611599610e16565b9150838201829010156115ab57600080fd5b6115b48561154e565b9050838101819010156115c657600080fd5b6115d3600a858401612608565b600160a060020a03851660009081526008602052604090206115f790828601612608565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b5b505092915050565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b6116ea612a92565b600067ffffffffffffffff808816908716101561170657600080fd5b67ffffffffffffffff808716908616101561172057600080fd5b600160a060020a0333166000908152600d602052604090205460ff16151561174757600080fd5b60146117528a610bd5565b1061175c57600080fd5b60e06040519081016040528085611774576000611776565b335b600160a060020a031681526020018981526020018767ffffffffffffffff1681526020018667ffffffffffffffff1681526020018867ffffffffffffffff16815260200185151581526020018415158152509150600c60008a600160a060020a0316600160a060020a0316815260200190815260200160002080548060010182816118019190612ace565b916000526020600020906003020160005b50839081518154600160a060020a031916600160a060020a039190911617815560208201518160010155604082015160028201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160020160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060a082015160028201805491151560c060020a0278ff0000000000000000000000000000000000000000000000001990921691909117905560c08201516002909101805491151560c860020a0279ff00000000000000000000000000000000000000000000000000199092169190911790555090506119428989611a9f565b151561194a57fe5b88600160a060020a031633600160a060020a03167ff9565aecd648a0466ffb964a79eeccdf1120ad6276189c687a6e9fe73984d9bb8a6001850360405191825260208201526040908101905180910390a35b505050505050505050565b600a5460009015806119e0575081600a60008154811015156119c557fe5b906000526020600020900160005b50546001608060020a0316115b15611a8757600554600160a060020a031615611a7a57600554600654600160a060020a039091169063981b24d090611a19908590612415565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a5857600080fd5b6102c65a03f11515611a6957600080fd5b505050604051805190509050610bef565b506000610bef565b610bef565b611a92600a8361242f565b9050610bef565b5b919050565b6000338280611aad83610dfc565b1015611ab857600080fd5b611ac285856126f1565b92505b5b505092915050565b600e546000908190819033600160a060020a03908116911614611af057600080fd5b600160a060020a0385161515611b0557600080fd5b600160a060020a0386166000908152600c60205260409020805485908110611b2957fe5b906000526020600020906003020160005b50600281015490935060c060020a900460ff161515611b5857600080fd5b825433600160a060020a03908116911614611b7257600080fd5b600283015460c860020a900460ff16611b8b5784611b8f565b61dead5b9150611b9b8342612719565b600160a060020a0387166000908152600c6020526040902080549192509085908110611bc357fe5b906000526020600020906003020160005b508054600160a060020a0319168155600060018083018290556002909201805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600160a060020a0388168152600c6020526040902080549091611c3c919063ffffffff6127c516565b81548110611c4657fe5b906000526020600020906003020160005b50600160a060020a0387166000908152600c60205260409020805486908110611c7c57fe5b906000526020600020906003020160005b5081548154600160a060020a031916600160a060020a03918216178255600180840154908301556002928301805493909201805467ffffffffffffffff191667ffffffffffffffff94851617808255835468010000000000000000908190048616026fffffffffffffffff000000000000000019909116178082558354608060020a9081900490951690940277ffffffffffffffff000000000000000000000000000000001990941693909317808455825460ff60c060020a918290048116151590910278ff0000000000000000000000000000000000000000000000001990921691909117808555925460c860020a9081900490911615150279ff00000000000000000000000000000000000000000000000000199092169190911790915586166000908152600c6020526040902080546000190190611dce9082612ace565b50611dda8683836127dc565b505b5b505050505050565b600b5460ff1681565b60065481565b6000611e008484610c92565b1515611e0b57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611ea45780820151818401525b602001611e8b565b50505050905090810190601f168015611ed15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515611ef257600080fd5b6102c65a03f11515611f0357600080fd5b505050600190505b9392505050565b600080600080611f2186610bd5565b9250821515611f3a57611f338661154e565b9350611fc1565b5060009050805b82811015611fa557600160a060020a0386166000908152600c602052604090208054611f9a91611f8d9184908110611f7557fe5b906000526020600020906003020160005b5087612719565b839063ffffffff6129bb16565b91505b600101611f41565b611fbe82611fb28861154e565b9063ffffffff6127c516565b93505b50505092915050565b600080548190819033600160a060020a03908116911614611fea57600080fd5b611ff2610e16565b91508382101561200157600080fd5b61200a8561154e565b90508381101561201957600080fd5b612026600a858403612608565b600160a060020a038516600090815260086020526040902061204a90858303612608565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b5b505092915050565b600160a060020a038083166000908152600960209081526040808320938516835292905220545b92915050565b60008054819033600160a060020a039081169116146120e257600080fd5b600160a060020a038316151561213057600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561212b57600080fd5b61226b565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561218a57600080fd5b6102c65a03f1151561219b57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561220b57600080fd5b6102c65a03f1151561221c57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b5b505050565b600e54600160a060020a031681565b600b546101009004600160a060020a031681565b60005433600160a060020a039081169116146122af57600080fd5b600b805460ff19168215151790555b5b50565b600054600160a060020a031681565b600e5433600160a060020a039081169116146122ec57600080fd5b600160a060020a038116151561230157600080fd5b600e5461231890600160a060020a0316600061234a565b600e8054600160a060020a031916600160a060020a038381169190911791829055610f5e9116600161234a565b5b5b50565b600160a060020a0382166000908152600d60205260409020805460ff19168215151790555b5050565b6000805433600160a060020a0390811691161461240057600b5460ff16151561239b57600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156123d257506000611f0b565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b61240b8484846127dc565b90505b9392505050565b60008183106124245781612426565b825b90505b92915050565b60008060008085805490506000141561244b5760009350611fc1565b85548690600019810190811061245d57fe5b906000526020600020900160005b50546001608060020a031685106124b55785548690600019810190811061248e57fe5b906000526020600020900160005b5054608060020a90046001608060020a03169350611fc1565b8560008154811015156124c457fe5b906000526020600020900160005b50546001608060020a03168510156124ed5760009350611fc1565b8554600093506000190191505b8282111561254f5760026001838501015b04905084868281548110151561251d57fe5b906000526020600020900160005b50546001608060020a0316116125435780925061254a565b6001810391505b6124fa565b858381548110151561255d57fe5b906000526020600020900160005b5054608060020a90046001608060020a031693505b50505092915050565b600061242683602001518367ffffffffffffffff16856080015167ffffffffffffffff16866040015167ffffffffffffffff16876060015167ffffffffffffffff166129d5565b90505b92915050565b60008167ffffffffffffffff168367ffffffffffffffff1610156124245781612426565b825b90505b92915050565b8154600090819015806126455750835443908590600019810190811061262a57fe5b906000526020600020900160005b50546001608060020a0316105b156126ae578354849061265b8260018301612b32565b8154811061266557fe5b906000526020600020900160005b5080546001608060020a03858116608060020a024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506126ea565b8354849060001981019081106126c057fe5b906000526020600020900160005b5080546001608060020a03808616608060020a02911617815590505b5b50505050565b600b5460009060ff16151561270557600080fd5b6124263384846127dc565b90505b92915050565b60006124266127ab8460e060405190810160409081528254600160a060020a031682526001830154602083015260029092015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c082015284612589565b60018501549063ffffffff6127c516565b90505b92915050565b6000828211156127d157fe5b508082035b92915050565b600080808315156127f05760019250610e8e565b6006544390106127ff57600080fd5b600160a060020a03851615801590612829575030600160a060020a031685600160a060020a031614155b151561283457600080fd5b61283e8643610f62565b9150838210156128515760009250610e8e565b60005461286690600160a060020a0316610ba8565b156129015760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156128db57600080fd5b6102c65a03f115156128ec57600080fd5b50505060405180519050151561290157600080fd5b5b600160a060020a038616600090815260086020526040902061292690858403612608565b6129308543610f62565b90508381018190101561294257600080fd5b600160a060020a038516600090815260086020526040902061296690828601612608565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b6000828201838110156129ca57fe5b8091505b5092915050565b600080838610156129e957600091506114b9565b8286106129f8578691506114b9565b612a37612a0b848763ffffffff6127c516565b612a2b612a1e898963ffffffff6127c516565b8a9063ffffffff612a4716565b9063ffffffff612a7616565b90508091505b5095945050505050565b6000828202831580612a635750828482811515612a6057fe5b04145b15156129ca57fe5b8091505b5092915050565b6000808284811515612a8457fe5b0490508091505b5092915050565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c082015290565b81548183558181151161226b5760030281600302836000526020600020918201910161226b9190612b5c565b5b505050565b81548183558181151161226b5760030281600302836000526020600020918201910161226b9190612b5c565b5b505050565b81548183558181151161226b5760008381526020902061226b918101908301612bb3565b5b505050565b610e2491905b80821115612bac578054600160a060020a03191681556000600182015560028101805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600301612b62565b5090565b90565b610e2491905b80821115612bac5760008155600101612bb9565b5090565b905600a165627a7a7230582063d99dc8aa536d6773fb92c35aa7f2cb046a6a87dd1cdf8c82b66cd5de9e08040029000000000000000000000000f418eed07958f018d484b8d43e1af1249cce0b6e

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

-----Decoded View---------------
Found 1 constructor arguments :
Arg [0] : 000000000000000000000000f418eed07958f018d484b8d43e1af1249cce0b6e


   Swarm Source:
bzzr://63d99dc8aa536d6773fb92c35aa7f2cb046a6a87dd1cdf8c82b66cd5de9e0804

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.