Sponsored Link:   Buy your 1st Ethereum in 5 minutes. Trusted by more than 100k buyers.
Contract Overview | SimpleTokenSale
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 10166 txns
Token Tracker 0x2c4e8f2d746113d0696ce89b35f0d8bf88e0aeca
  Latest 25 txns from a total Of 10166 transactions View All

TxHash Age From To Value [TxFee]
0xf7e34ee3373ac150cb7061059e2f94d20d87eaa14db15a3ddcc9bc48521c7749 16 secs ago0x2967f6d0911786dabceb3221386dbe53b9e763af  IN   SimpleTokenSale1 Ether0.0014961
0xb4cd3fca4a2ca5cb29de86bcdc034710a4e110306273c7adb3797c996ba50792 16 secs ago0xffe79cb1ad7c76944a51b81d81a82e02951ef19e  IN   SimpleTokenSale0.2 Ether0.001570905
0xaf04a19ce679db2293ba8d1811edafef7181d0c55052a0e66d034f639e10350a4 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00047225
0xed930753334fa1a3776be088426639ae996dd3e73a3dc3bbdeedfe5f6c151a854 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00047225
0x733afde5e16a21f03c50817f0455a502aae53ec853b306c4837911098e0580935 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00047225
0x8654d39651778a77ac8202c48358db2d53f173f791385397bbe1cf9981f4c6596 mins ago0x75c4af80f498cc96cb48b05d18dfe74841a3e610  IN   SimpleTokenSale1.367 Ether0.001570905
0x2497360dc48e579e9ac69a7d92ed8a8271d9a51d690cbf902a82da3a71c7ff527 mins ago0xe94336e44faad2ac683bc889e35d8de48080295c  IN   SimpleTokenSale3 Ether0.00089766
0xa1f93a869194a612180f63086b8513ced76a1dfe11a46326725184f4584ff4177 mins ago0xa497a7dfe15b7e60bad897874c192f27f82e674f  IN   SimpleTokenSale5 Ether0.001870125
0x5be3c0682b55e44bd07b576947e19ec1105eba91d8b737a172e3157c6b487bf78 mins ago0xfc400d58a0bb090de68e320dd321bde1b75f60a5  IN   SimpleTokenSale2.3 Ether0.00059805
0x701bb49658ba5498b81865569217f784a0ae15b6b347854dc6ffea02bd5185c08 mins ago0xd9fe03267221c4e7bf92f712a17c5d4c493c116b  IN   SimpleTokenSale3 Ether0.000314181
0x71115a1eb837218d315ca913c605816c29eb5cf89a8b69bea0ea345f39ce3ecb9 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00047225
0xc72ee4db2c85fa8c6930b7a7c233db12a01464f319d4de61a7dd171702e1e3529 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00047225
0xc161f98ab4b7145b17be1faedd4ed17d5c9631d40358d8df369b66c81c79ce2611 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00047225
0x80c38bfebe3c37a8e014a4dc334583cb4f10a659aa892cf7e9c9981ba751c8bd13 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00047225
0x6bb0af254ebd6cfcb6a17e3fdd43eed3d2ea6f733794f84506a56aa5b3053f5116 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00047225
0xb0e17dcf66a149e7461c6ccf6330afcc701ea56dd77cc5b3c11c763e249a49df16 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00047225
0x37e21a17329c935bb022052216aa0e589b1f49697c654d716ca72150b4979a9019 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00017161
0x553b9545cb6576dc311ab984c6694ef510d7ff32f38e27830bb70be78f34ffb219 mins ago0x3f04ed56e840d6f6805a2c73ea0e1d276fb26bcc  IN   SimpleTokenSale9.5 Ether0.0011961
0xa5d49ec667298ffbbdda3bcffdceb6dea2a3a2e89da73c457085e5e7c519c95d23 mins ago0x3f04ed56e840d6f6805a2c73ea0e1d276fb26bcc  IN   SimpleTokenSale0.5 Ether0.0014961
0xe0e3101e40e6aaae9e53fa1be48b08fe1289344c6a536a5c1d66614a38710a0024 mins ago0x763c993207b59744e0c7fb6c953f6518928a2603  IN   SimpleTokenSale0.15 Ether0.001570905
0xbd4ec558faacc6abde86582f96ab7284fbc51167885fd1742287a06e379a854926 mins ago0x4ef810b755d19d5d7a6dfcc5a663e20e7d92d905  IN   SimpleTokenSale1.4 Ether0.001570905
0x5c3e8a985ae360a326b74875fe2620f52582358cc41d6ad29b380a497942c21e27 mins ago0x3dda9f2975db2888fb44f5b3727a664abb317927  IN   SimpleTokenSale0.320332905 Ether0.001570905
0x143d6556f1c2c89a9744ddf106385f50dd553f0aa5089c9a8be3dcf646e126bd29 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00047225
0x7cd114ceb7e58a8fb6648cdb33aaa066270918951e23b90400fb88bb4291c9ef30 mins ago0xd0c7b3c0e1e5c23870a82127135f1d4e16642fd5  IN   SimpleTokenSale0 Ether0.00047225
0xfb18479149c1f4f514abfdc86d93ca12402729a657a5526b25214dd74c08193530 mins ago0xea48373c34e8515239387694340a0735b1a5359d  IN   SimpleTokenSale2.2 Ether0.00134649
[ 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
0xf7e34ee3373ac150cb7061059e2f94d20d87eaa14db15a3ddcc9bc48521c77494613295 16 secs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b1 Ether
0xb4cd3fca4a2ca5cb29de86bcdc034710a4e110306273c7adb3797c996ba507924613295 16 secs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.2 Ether
0x8654d39651778a77ac8202c48358db2d53f173f791385397bbe1cf9981f4c65946132716 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b1.367 Ether
0x2497360dc48e579e9ac69a7d92ed8a8271d9a51d690cbf902a82da3a71c7ff5246132697 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b3 Ether
0xa1f93a869194a612180f63086b8513ced76a1dfe11a46326725184f4584ff41746132667 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b5 Ether
0x5be3c0682b55e44bd07b576947e19ec1105eba91d8b737a172e3157c6b487bf746132648 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b2.3 Ether
0x701bb49658ba5498b81865569217f784a0ae15b6b347854dc6ffea02bd5185c046132598 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b3 Ether
0x553b9545cb6576dc311ab984c6694ef510d7ff32f38e27830bb70be78f34ffb2461320619 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b9.5 Ether
0xa5d49ec667298ffbbdda3bcffdceb6dea2a3a2e89da73c457085e5e7c519c95d461318923 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.5 Ether
0xe0e3101e40e6aaae9e53fa1be48b08fe1289344c6a536a5c1d66614a38710a00461318424 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.15 Ether
0xbd4ec558faacc6abde86582f96ab7284fbc51167885fd1742287a06e379a8549461317726 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b1.4 Ether
0x5c3e8a985ae360a326b74875fe2620f52582358cc41d6ad29b380a497942c21e461317327 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.320332905 Ether
0xfb18479149c1f4f514abfdc86d93ca12402729a657a5526b25214dd74c081935461316130 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b2.2 Ether
0x2b6d60bb5b1440fb4e65a0c868f80f57ec3c250af634ac58a73e89fd223fa886461314535 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.5 Ether
0xe6bbf607a196fbeaf8b64ce4ba74b732f9ed3074deb96af8c60fd053a27c667f461313737 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.13479 Ether
0x2f59ad98bbb80132500bfd41288720e644e5b5e0163c4298694a553ce94345cb461313737 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.147115 Ether
0xdb129ef2165bb2036604782a3dfcfd7b2eb0b0a622515c5b7799f6dcaaeb7937461310046 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.22 Ether
0x447662dc01d7e5d08f7555b16fa85431b1afd843025868f0d2c7dff69aaa9f52461307850 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b1 Ether
0x4c1755be9df256278aa3cbb63ec6490853fb686f9c0ccc453d3e145dd4ba8bc6461307651 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b1.2 Ether
0x2fc76e8d2d08b16453e39c3e12f7b65e522a41427c6db8aa45e95d63c27c1195461305454 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.577738638 Ether
0x0a1f04d6243d5360e37f31e09f017674a0b447515f649c43a67132092b5a2c23461304057 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.39 Ether
0x28b767f64c802c6bdac9efbcb025a8aa984c840a3939549dd81f675c9531a5cf46129891 hr 9 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b3.5 Ether
0x41bb0655b0b2f37a7ca762469ecfe989a560cefb431fa72cc9c70c0c7fd6df3a46129601 hr 18 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.24 Ether
0x4642a1b86bfde198a75e1d420931f218040ad75e26ee79252f0386bd81bd5ae346129591 hr 18 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b1.5 Ether
0x9b28153a7a990ab5417661f4b9d9eac7bd6a81d3df5da58d46778443e04ed80946129151 hr 29 mins ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b1.5 Ether
[ Download CSV Export  ] 
Contract Source Code Verified
Contract Name: TokenSale
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
pragma solidity ^0.4.17;

// ----------------------------------------------------------------------------
// Token Trustee Implementation
//
// Copyright (c) 2017 OpenST Ltd.
// https://simpletoken.org/
//
// The MIT Licence.
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// SafeMath Library Implementation
//
// Copyright (c) 2017 OpenST Ltd.
// https://simpletoken.org/
//
// The MIT Licence.
//
// Based on the SafeMath library by the OpenZeppelin team.
// Copyright (c) 2016 Smart Contract Solutions, Inc.
// https://github.com/OpenZeppelin/zeppelin-solidity
// The MIT License.
// ----------------------------------------------------------------------------


library SafeMath {

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;

        assert(a == 0 || c / a == b);

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // 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 pure returns (uint256) {
        assert(b <= a);

        return a - b;
    }


    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;

        assert(c >= a);

        return c;
    }
}

//
// Implements basic ownership with 2-step transfers.
//
contract Owned {

    address public owner;
    address public proposedOwner;

    event OwnershipTransferInitiated(address indexed _proposedOwner);
    event OwnershipTransferCompleted(address indexed _newOwner);


    function Owned() public {
        owner = msg.sender;
    }


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


    function isOwner(address _address) internal view returns (bool) {
        return (_address == owner);
    }


    function initiateOwnershipTransfer(address _proposedOwner) public onlyOwner returns (bool) {
        proposedOwner = _proposedOwner;

        OwnershipTransferInitiated(_proposedOwner);

        return true;
    }


    function completeOwnershipTransfer() public returns (bool) {
        require(msg.sender == proposedOwner);

        owner = proposedOwner;
        proposedOwner = address(0);

        OwnershipTransferCompleted(owner);

        return true;
    }
}

//
// Implements a more advanced ownership and permission model based on owner,
// admin and ops per Simple Token key management specification.
//
contract OpsManaged is Owned {

    address public opsAddress;
    address public adminAddress;

    event AdminAddressChanged(address indexed _newAddress);
    event OpsAddressChanged(address indexed _newAddress);


    function OpsManaged() public
        Owned()
    {
    }


    modifier onlyAdmin() {
        require(isAdmin(msg.sender));
        _;
    }


    modifier onlyAdminOrOps() {
        require(isAdmin(msg.sender) || isOps(msg.sender));
        _;
    }


    modifier onlyOwnerOrAdmin() {
        require(isOwner(msg.sender) || isAdmin(msg.sender));
        _;
    }


    modifier onlyOps() {
        require(isOps(msg.sender));
        _;
    }


    function isAdmin(address _address) internal view returns (bool) {
        return (adminAddress != address(0) && _address == adminAddress);
    }


    function isOps(address _address) internal view returns (bool) {
        return (opsAddress != address(0) && _address == opsAddress);
    }


    function isOwnerOrOps(address _address) internal view returns (bool) {
        return (isOwner(_address) || isOps(_address));
    }


    // Owner and Admin can change the admin address. Address can also be set to 0 to 'disable' it.
    function setAdminAddress(address _adminAddress) external onlyOwnerOrAdmin returns (bool) {
        require(_adminAddress != owner);
        require(_adminAddress != address(this));
        require(!isOps(_adminAddress));

        adminAddress = _adminAddress;

        AdminAddressChanged(_adminAddress);

        return true;
    }


    // Owner and Admin can change the operations address. Address can also be set to 0 to 'disable' it.
    function setOpsAddress(address _opsAddress) external onlyOwnerOrAdmin returns (bool) {
        require(_opsAddress != owner);
        require(_opsAddress != address(this));
        require(!isAdmin(_opsAddress));

        opsAddress = _opsAddress;

        OpsAddressChanged(_opsAddress);

        return true;
    }
}

contract SimpleTokenConfig {

    string  public constant TOKEN_SYMBOL   = "ST";
    string  public constant TOKEN_NAME     = "Simple Token";
    uint8   public constant TOKEN_DECIMALS = 18;

    uint256 public constant DECIMALSFACTOR = 10**uint256(TOKEN_DECIMALS);
    uint256 public constant TOKENS_MAX     = 800000000 * DECIMALSFACTOR;
}

contract ERC20Interface {

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    function name() public view returns (string);
    function symbol() public view returns (string);
    function decimals() public view returns (uint8);
    function totalSupply() public view returns (uint256);

    function balanceOf(address _owner) public view returns (uint256 balance);
    function allowance(address _owner, address _spender) public view returns (uint256 remaining);

    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function approve(address _spender, uint256 _value) public returns (bool success);
}

//
// Standard ERC20 implementation, with ownership.
//
contract ERC20Token is ERC20Interface, Owned {

    using SafeMath for uint256;

    string  private tokenName;
    string  private tokenSymbol;
    uint8   private tokenDecimals;
    uint256 internal tokenTotalSupply;

    mapping(address => uint256) balances;
    mapping(address => mapping (address => uint256)) allowed;


    function ERC20Token(string _symbol, string _name, uint8 _decimals, uint256 _totalSupply) public
        Owned()
    {
        tokenSymbol      = _symbol;
        tokenName        = _name;
        tokenDecimals    = _decimals;
        tokenTotalSupply = _totalSupply;
        balances[owner]  = _totalSupply;

        // According to the ERC20 standard, a token contract which creates new tokens should trigger
        // a Transfer event and transfers of 0 values must also fire the event.
        Transfer(0x0, owner, _totalSupply);
    }


    function name() public view returns (string) {
        return tokenName;
    }


    function symbol() public view returns (string) {
        return tokenSymbol;
    }


    function decimals() public view returns (uint8) {
        return tokenDecimals;
    }


    function totalSupply() public view returns (uint256) {
        return tokenTotalSupply;
    }


    function balanceOf(address _owner) public view returns (uint256) {
        return balances[_owner];
    }


    function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }


    function transfer(address _to, uint256 _value) public returns (bool success) {
        // According to the EIP20 spec, "transfers of 0 values MUST be treated as normal
        // transfers and fire the Transfer event".
        // Also, should throw if not enough balance. This is taken care of by SafeMath.
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);

        Transfer(msg.sender, _to, _value);

        return true;
    }


    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        balances[_from] = balances[_from].sub(_value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);

        Transfer(_from, _to, _value);

        return true;
    }


    function approve(address _spender, uint256 _value) public returns (bool success) {

        allowed[msg.sender][_spender] = _value;

        Approval(msg.sender, _spender, _value);

        return true;
    }
}

//
// SimpleToken is a standard ERC20 token with some additional functionality:
// - It has a concept of finalize
// - Before finalize, nobody can transfer tokens except:
//     - Owner and operations can transfer tokens
//     - Anybody can send back tokens to owner
// - After finalize, no restrictions on token transfers
//

//
// Permissions, according to the ST key management specification.
//
//                                    Owner    Admin   Ops
// transfer (before finalize)           x               x
// transferForm (before finalize)       x               x
// finalize                                      x
//

contract SimpleToken is ERC20Token, OpsManaged, SimpleTokenConfig {

    bool public finalized;


    // Events
    event Burnt(address indexed _from, uint256 _amount);
    event Finalized();


    function SimpleToken() public
        ERC20Token(TOKEN_SYMBOL, TOKEN_NAME, TOKEN_DECIMALS, TOKENS_MAX)
        OpsManaged()
    {
        finalized = false;
    }


    // Implementation of the standard transfer method that takes into account the finalize flag.
    function transfer(address _to, uint256 _value) public returns (bool success) {
        checkTransferAllowed(msg.sender, _to);

        return super.transfer(_to, _value);
    }


    // Implementation of the standard transferFrom method that takes into account the finalize flag.
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        checkTransferAllowed(msg.sender, _to);

        return super.transferFrom(_from, _to, _value);
    }


    function checkTransferAllowed(address _sender, address _to) private view {
        if (finalized) {
            // Everybody should be ok to transfer once the token is finalized.
            return;
        }

        // Owner and Ops are allowed to transfer tokens before the sale is finalized.
        // This allows the tokens to move from the TokenSale contract to a beneficiary.
        // We also allow someone to send tokens back to the owner. This is useful among other
        // cases, for the Trustee to transfer unlocked tokens back to the owner (reclaimTokens).
        require(isOwnerOrOps(_sender) || _to == owner);
    }

    // Implement a burn function to permit msg.sender to reduce its balance
    // which also reduces tokenTotalSupply
    function burn(uint256 _value) public returns (bool success) {
        require(_value <= balances[msg.sender]);

        balances[msg.sender] = balances[msg.sender].sub(_value);
        tokenTotalSupply = tokenTotalSupply.sub(_value);

        Burnt(msg.sender, _value);

        return true;
    }


    // Finalize method marks the point where token transfers are finally allowed for everybody.
    function finalize() external onlyAdmin returns (bool success) {
        require(!finalized);

        finalized = true;

        Finalized();

        return true;
    }
}

//
// Implements a simple trustee which can release tokens based on
// an explicit call from the owner.
//

//
// Permissions, according to the ST key management specification.
//
//                                Owner    Admin   Ops   Revoke
// grantAllocation                           x      x
// revokeAllocation                                        x
// processAllocation                                x
// reclaimTokens                             x
// setRevokeAddress                 x                      x
//

contract Trustee is OpsManaged {

    using SafeMath for uint256;


    SimpleToken public tokenContract;

    struct Allocation {
        uint256 amountGranted;
        uint256 amountTransferred;
        bool    revokable;
    }

    // The trustee has a special 'revoke' key which is allowed to revoke allocations.
    address public revokeAddress;

    // Total number of tokens that are currently allocated.
    // This does not include tokens that have been processed (sent to an address) already or
    // the ones in the trustee's account that have not been allocated yet.
    uint256 public totalLocked;

    mapping (address => Allocation) public allocations;


    //
    // Events
    //
    event AllocationGranted(address indexed _from, address indexed _account, uint256 _amount, bool _revokable);
    event AllocationRevoked(address indexed _from, address indexed _account, uint256 _amountRevoked);
    event AllocationProcessed(address indexed _from, address indexed _account, uint256 _amount);
    event RevokeAddressChanged(address indexed _newAddress);
    event TokensReclaimed(uint256 _amount);


    function Trustee(SimpleToken _tokenContract) public
        OpsManaged()
    {
        require(address(_tokenContract) != address(0));

        tokenContract = _tokenContract;
    }


    modifier onlyOwnerOrRevoke() {
        require(isOwner(msg.sender) || isRevoke(msg.sender));
        _;
    }


    modifier onlyRevoke() {
        require(isRevoke(msg.sender));
        _;
    }


    function isRevoke(address _address) private view returns (bool) {
        return (revokeAddress != address(0) && _address == revokeAddress);
    }


    // Owner and revoke can change the revoke address. Address can also be set to 0 to 'disable' it.
    function setRevokeAddress(address _revokeAddress) external onlyOwnerOrRevoke returns (bool) {
        require(_revokeAddress != owner);
        require(!isAdmin(_revokeAddress));
        require(!isOps(_revokeAddress));

        revokeAddress = _revokeAddress;

        RevokeAddressChanged(_revokeAddress);

        return true;
    }


    // Allows admin or ops to create new allocations for a specific account.
    function grantAllocation(address _account, uint256 _amount, bool _revokable) public onlyAdminOrOps returns (bool) {
        require(_account != address(0));
        require(_account != address(this));
        require(_amount > 0);

        // Can't create an allocation if there is already one for this account.
        require(allocations[_account].amountGranted == 0);

        if (isOps(msg.sender)) {
            // Once the token contract is finalized, the ops key should not be able to grant allocations any longer.
            // Before finalized, it is used by the TokenSale contract to allocate pre-sales.
            require(!tokenContract.finalized());
        }

        totalLocked = totalLocked.add(_amount);
        require(totalLocked <= tokenContract.balanceOf(address(this)));

        allocations[_account] = Allocation({
            amountGranted     : _amount,
            amountTransferred : 0,
            revokable         : _revokable
        });

        AllocationGranted(msg.sender, _account, _amount, _revokable);

        return true;
    }


    // Allows the revoke key to revoke allocations, if revoke is allowed.
    function revokeAllocation(address _account) external onlyRevoke returns (bool) {
        require(_account != address(0));

        Allocation memory allocation = allocations[_account];

        require(allocation.revokable);

        uint256 ownerRefund = allocation.amountGranted.sub(allocation.amountTransferred);

        delete allocations[_account];

        totalLocked = totalLocked.sub(ownerRefund);

        AllocationRevoked(msg.sender, _account, ownerRefund);

        return true;
    }


    // Push model which allows ops to transfer tokens to the beneficiary.
    // The exact amount to transfer is calculated based on agreements with
    // the beneficiaries. Here we only restrict that the total amount transfered cannot
    // exceed what has been granted.
    function processAllocation(address _account, uint256 _amount) external onlyOps returns (bool) {
        require(_account != address(0));
        require(_amount > 0);

        Allocation storage allocation = allocations[_account];

        require(allocation.amountGranted > 0);

        uint256 transferable = allocation.amountGranted.sub(allocation.amountTransferred);

        if (transferable < _amount) {
           return false;
        }

        allocation.amountTransferred = allocation.amountTransferred.add(_amount);

        // Note that transfer will fail if the token contract has not been finalized yet.
        require(tokenContract.transfer(_account, _amount));

        totalLocked = totalLocked.sub(_amount);

        AllocationProcessed(msg.sender, _account, _amount);

        return true;
    }


    // Allows the admin to claim back all tokens that are not currently allocated.
    // Note that the trustee should be able to move tokens even before the token is
    // finalized because SimpleToken allows sending back to owner specifically.
    function reclaimTokens() external onlyAdmin returns (bool) {
        uint256 ownBalance = tokenContract.balanceOf(address(this));

        // If balance <= amount locked, there is nothing to reclaim.
        require(ownBalance > totalLocked);

        uint256 amountReclaimed = ownBalance.sub(totalLocked);

        address tokenOwner = tokenContract.owner();
        require(tokenOwner != address(0));

        require(tokenContract.transfer(tokenOwner, amountReclaimed));

        TokensReclaimed(amountReclaimed);

        return true;
    }
}

// ----------------------------------------------------------------------------
// Pausable Contract Implementation
//
// Copyright (c) 2017 OpenST Ltd.
// https://simpletoken.org/
//
// The MIT Licence.
//
// Based on the Pausable contract by the OpenZeppelin team.
// Copyright (c) 2016 Smart Contract Solutions, Inc.
// https://github.com/OpenZeppelin/zeppelin-solidity
// The MIT License.
// ----------------------------------------------------------------------------

contract Pausable is OpsManaged {

  event Pause();
  event Unpause();

  bool public paused = false;


  modifier whenNotPaused() {
    require(!paused);
    _;
  }


  modifier whenPaused() {
    require(paused);
    _;
  }


  function pause() public onlyAdmin whenNotPaused {
    paused = true;

    Pause();
  }


  function unpause() public onlyAdmin whenPaused {
    paused = false;

    Unpause();
  }
}

contract TokenSaleConfig is SimpleTokenConfig {

    uint256 public constant PHASE1_START_TIME         = 1510664400; // 2017-11-14, 13:00:00 UTC
    uint256 public constant PHASE2_START_TIME         = 1510750800; // 2017-11-15, 13:00:00 UTC
    uint256 public constant END_TIME                  = 1512133199; // 2017-12-01, 12:59:59 UTC
    uint256 public constant CONTRIBUTION_MIN          = 0.1 ether;
    uint256 public constant CONTRIBUTION_MAX          = 10000.0 ether;

    // This is the maximum number of tokens each individual account is allowed to
    // buy during Phase 1 of the token sale (whitelisted phase)
    // Calculated based on 300 USD/ETH * 10 ETH / 0.0833 USD / token = ~36,000
    uint256 public constant PHASE1_ACCOUNT_TOKENS_MAX = 36000     * DECIMALSFACTOR;

    uint256 public constant TOKENS_SALE               = 240000000 * DECIMALSFACTOR;
    uint256 public constant TOKENS_FOUNDERS           = 80000000  * DECIMALSFACTOR;
    uint256 public constant TOKENS_ADVISORS           = 80000000  * DECIMALSFACTOR;
    uint256 public constant TOKENS_EARLY_BACKERS      = 44884831  * DECIMALSFACTOR;
    uint256 public constant TOKENS_ACCELERATOR        = 217600000 * DECIMALSFACTOR;
    uint256 public constant TOKENS_FUTURE             = 137515169 * DECIMALSFACTOR;

    // We use a default for when the contract is deployed but this can be changed afterwards
    // by calling the setTokensPerKEther function
    // For the public sale, tokens are priced at 0.0833 USD/token.
    // So if we have 300 USD/ETH -> 300,000 USD/KETH / 0.0833 USD/token = ~3,600,000
    uint256 public constant TOKENS_PER_KETHER         = 3600000;

    // Constant used by buyTokens as part of the cost <-> tokens conversion.
    // 18 for ETH -> WEI, TOKEN_DECIMALS (18 for Simple Token), 3 for the K in tokensPerKEther.
    uint256 public constant PURCHASE_DIVIDER          = 10**(uint256(18) - TOKEN_DECIMALS + 3);

}

//
// Implementation of the 1st token sale for Simple Token
//
// * Lifecycle *
// Initialization sequence should be as follow:
//    1. Deploy SimpleToken contract
//    2. Deploy Trustee contract
//    3. Deploy TokenSale contract
//    4. Set operationsAddress of SimpleToken contract to TokenSale contract
//    5. Set operationsAddress of Trustee contract to TokenSale contract
//    6. Set operationsAddress of TokenSale contract to some address
//    7. Transfer tokens from owner to TokenSale contract
//    8. Transfer tokens from owner to Trustee contract
//    9. Initialize TokenSale contract
//
// Pre-sale sequence:
//    - Set tokensPerKEther
//    - Set phase1AccountTokensMax
//    - Add presales
//    - Add allocations for founders, advisors, etc.
//    - Update whitelist
//
// After-sale sequence:
//    1. Finalize the TokenSale contract
//    2. Finalize the SimpleToken contract
//    3. Set operationsAddress of TokenSale contract to 0
//    4. Set operationsAddress of SimpleToken contract to 0
//    5. Set operationsAddress of Trustee contract to some address
//
// Anytime
//    - Add/Remove allocations
//

//
// Permissions, according to the ST key management specification.
//
//                                Owner    Admin   Ops
// initialize                       x
// changeWallet                              x
// updateWhitelist                                  x
// setTokensPerKEther                        x
// setPhase1AccountTokensMax                 x
// addPresale                                x
// pause / unpause                           x
// reclaimTokens                             x
// burnUnsoldTokens                          x
// finalize                                  x
//

contract TokenSale is OpsManaged, Pausable, TokenSaleConfig { // Pausable is also Owned

    using SafeMath for uint256;


    // We keep track of whether the sale has been finalized, at which point
    // no additional contributions will be permitted.
    bool public finalized;

    // The sale end time is initially defined by the END_TIME constant but it
    // may get extended if the sale is paused.
    uint256 public endTime;
    uint256 public pausedTime;

    // Number of tokens per 1000 ETH. See TokenSaleConfig for details.
    uint256 public tokensPerKEther;

    // Keeps track of the maximum amount of tokens that an account is allowed to purchase in phase 1.
    uint256 public phase1AccountTokensMax;

    // Address where the funds collected during the sale will be forwarded.
    address public wallet;

    // Token contract that the sale contract will interact with.
    SimpleToken public tokenContract;

    // Trustee contract to hold on token balances. The following token pools will be held by trustee:
    //    - Founders
    //    - Advisors
    //    - Early investors
    //    - Presales
    Trustee public trusteeContract;

    // Total amount of tokens sold during presale + public sale. Excludes pre-sale bonuses.
    uint256 public totalTokensSold;

    // Total amount of tokens given as bonus during presale. Will influence accelerator token balance.
    uint256 public totalPresaleBase;
    uint256 public totalPresaleBonus;

    // Map of addresses that have been whitelisted in advance (and passed KYC).
    // The whitelist value indicates what phase (1 or 2) the address has been whitelisted for.
    // Addresses whitelisted for phase 1 can also contribute during phase 2.
    mapping(address => uint8) public whitelist;


    //
    // EVENTS
    //
    event Initialized();
    event PresaleAdded(address indexed _account, uint256 _baseTokens, uint256 _bonusTokens);
    event WhitelistUpdated(address indexed _account, uint8 _phase);
    event TokensPurchased(address indexed _beneficiary, uint256 _cost, uint256 _tokens, uint256 _totalSold);
    event TokensPerKEtherUpdated(uint256 _amount);
    event Phase1AccountTokensMaxUpdated(uint256 _tokens);
    event WalletChanged(address _newWallet);
    event TokensReclaimed(uint256 _amount);
    event UnsoldTokensBurnt(uint256 _amount);
    event Finalized();


    function TokenSale(SimpleToken _tokenContract, Trustee _trusteeContract, address _wallet) public
        OpsManaged()
    {
        require(address(_tokenContract) != address(0));
        require(address(_trusteeContract) != address(0));
        require(_wallet != address(0));

        require(PHASE1_START_TIME >= currentTime());
        require(PHASE2_START_TIME > PHASE1_START_TIME);
        require(END_TIME > PHASE2_START_TIME);
        require(TOKENS_PER_KETHER > 0);
        require(PHASE1_ACCOUNT_TOKENS_MAX > 0);

        // Basic check that the constants add up to TOKENS_MAX
        uint256 partialAllocations = TOKENS_FOUNDERS.add(TOKENS_ADVISORS).add(TOKENS_EARLY_BACKERS);
        require(partialAllocations.add(TOKENS_SALE).add(TOKENS_ACCELERATOR).add(TOKENS_FUTURE) == TOKENS_MAX);

        wallet                 = _wallet;
        pausedTime             = 0;
        endTime                = END_TIME;
        finalized              = false;
        tokensPerKEther        = TOKENS_PER_KETHER;
        phase1AccountTokensMax = PHASE1_ACCOUNT_TOKENS_MAX;

        tokenContract   = _tokenContract;
        trusteeContract = _trusteeContract;
    }


    // Initialize is called to check some configuration parameters.
    // It expects that a certain amount of tokens have already been assigned to the sale contract address.
    function initialize() external onlyOwner returns (bool) {
        require(totalTokensSold == 0);
        require(totalPresaleBase == 0);
        require(totalPresaleBonus == 0);

        uint256 ownBalance = tokenContract.balanceOf(address(this));
        require(ownBalance == TOKENS_SALE);

        // Simple check to confirm that tokens are present
        uint256 trusteeBalance = tokenContract.balanceOf(address(trusteeContract));
        require(trusteeBalance >= TOKENS_FUTURE);

        Initialized();

        return true;
    }


    // Allows the admin to change the wallet where ETH contributions are sent.
    function changeWallet(address _wallet) external onlyAdmin returns (bool) {
        require(_wallet != address(0));
        require(_wallet != address(this));
        require(_wallet != address(trusteeContract));
        require(_wallet != address(tokenContract));

        wallet = _wallet;

        WalletChanged(wallet);

        return true;
    }



    //
    // TIME
    //

    function currentTime() public view returns (uint256 _currentTime) {
        return now;
    }


    modifier onlyBeforeSale() {
        require(hasSaleEnded() == false);
        require(currentTime() < PHASE1_START_TIME);
       _;
    }


    modifier onlyDuringSale() {
        require(hasSaleEnded() == false && currentTime() >= PHASE1_START_TIME);
        _;
    }

    modifier onlyAfterSale() {
        // require finalized is stronger than hasSaleEnded
        require(finalized);
        _;
    }


    function hasSaleEnded() private view returns (bool) {
        // if sold out or finalized, sale has ended
        if (totalTokensSold >= TOKENS_SALE || finalized) {
            return true;
        // else if sale is not paused (pausedTime = 0) 
        // and endtime has past, then sale has ended
        } else if (pausedTime == 0 && currentTime() >= endTime) {
            return true;
        // otherwise it is not past and not paused; or paused
        // and as such not ended
        } else {
            return false;
        }
    }



    //
    // WHITELIST
    //

    // Allows ops to add accounts to the whitelist.
    // Only those accounts will be allowed to contribute during the sale.
    // _phase = 1: Can contribute during phases 1 and 2 of the sale.
    // _phase = 2: Can contribute during phase 2 of the sale only.
    // _phase = 0: Cannot contribute at all (not whitelisted).
    function updateWhitelist(address _account, uint8 _phase) external onlyOps returns (bool) {
        require(_account != address(0));
        require(_phase <= 2);
        require(!hasSaleEnded());

        whitelist[_account] = _phase;

        WhitelistUpdated(_account, _phase);

        return true;
    }



    //
    // PURCHASES / CONTRIBUTIONS
    //

    // Allows the admin to set the price for tokens sold during phases 1 and 2 of the sale.
    function setTokensPerKEther(uint256 _tokensPerKEther) external onlyAdmin onlyBeforeSale returns (bool) {
        require(_tokensPerKEther > 0);

        tokensPerKEther = _tokensPerKEther;

        TokensPerKEtherUpdated(_tokensPerKEther);

        return true;
    }


    // Allows the admin to set the maximum amount of tokens that an account can buy during phase 1 of the sale.
    function setPhase1AccountTokensMax(uint256 _tokens) external onlyAdmin onlyBeforeSale returns (bool) {
        require(_tokens > 0);

        phase1AccountTokensMax = _tokens;

        Phase1AccountTokensMaxUpdated(_tokens);

        return true;
    }


    function () external payable whenNotPaused onlyDuringSale {
        buyTokens();
    }


    // This is the main function to process incoming ETH contributions.
    function buyTokens() public payable whenNotPaused onlyDuringSale returns (bool) {
        require(msg.value >= CONTRIBUTION_MIN);
        require(msg.value <= CONTRIBUTION_MAX);
        require(totalTokensSold < TOKENS_SALE);

        // All accounts need to be whitelisted to purchase.
        uint8 whitelistedPhase = whitelist[msg.sender];
        require(whitelistedPhase > 0);

        uint256 tokensMax = TOKENS_SALE.sub(totalTokensSold);

        if (currentTime() < PHASE2_START_TIME) {
            // We are in phase 1 of the sale
            require(whitelistedPhase == 1);

            uint256 accountBalance = tokenContract.balanceOf(msg.sender);

            // Can only purchase up to a maximum per account.
            // Calculate how much of that amount is still available.
            uint256 phase1Balance = phase1AccountTokensMax.sub(accountBalance);

            if (phase1Balance < tokensMax) {
                tokensMax = phase1Balance;
            }
        }

        require(tokensMax > 0);

        uint256 tokensBought = msg.value.mul(tokensPerKEther).div(PURCHASE_DIVIDER);
        require(tokensBought > 0);

        uint256 cost = msg.value;
        uint256 refund = 0;

        if (tokensBought > tokensMax) {
            // Not enough tokens available for full contribution, we will do partial.
            tokensBought = tokensMax;

            // Calculate actual cost for partial amount of tokens.
            cost = tokensBought.mul(PURCHASE_DIVIDER).div(tokensPerKEther);

            // Calculate refund for contributor.
            refund = msg.value.sub(cost);
        }

        totalTokensSold = totalTokensSold.add(tokensBought);

        // Transfer tokens to the account
        require(tokenContract.transfer(msg.sender, tokensBought));

        // Issue a ETH refund for any unused portion of the funds.
        if (refund > 0) {
            msg.sender.transfer(refund);
        }

        // Transfer the contribution to the wallet
        wallet.transfer(msg.value.sub(refund));

        TokensPurchased(msg.sender, cost, tokensBought, totalTokensSold);

        // If all tokens available for sale have been sold out, finalize the sale automatically.
        if (totalTokensSold == TOKENS_SALE) {
            finalizeInternal();
        }

        return true;
    }


    //
    // PRESALES
    //

    // Allows the admin to record pre-sales, before the public sale starts. Presale base tokens come out of the
    // main sale pool (the 30% allocation) while bonus tokens come from the remaining token pool.
    function addPresale(address _account, uint256 _baseTokens, uint256 _bonusTokens) external onlyAdmin onlyBeforeSale returns (bool) {
        require(_account != address(0));

        // Presales may have 0 bonus tokens but need to have a base amount of tokens sold.
        require(_baseTokens > 0);
        require(_bonusTokens < _baseTokens);

        // We do not count bonus tokens as part of the sale cap.
        totalTokensSold = totalTokensSold.add(_baseTokens);
        require(totalTokensSold <= TOKENS_SALE);

        uint256 ownBalance = tokenContract.balanceOf(address(this));
        require(_baseTokens <= ownBalance);

        totalPresaleBase  = totalPresaleBase.add(_baseTokens);
        totalPresaleBonus = totalPresaleBonus.add(_bonusTokens);

        // Move base tokens to the trustee
        require(tokenContract.transfer(address(trusteeContract), _baseTokens));

        // Presale allocations are marked as locked, they cannot be removed by the owner.
        uint256 tokens = _baseTokens.add(_bonusTokens);
        require(trusteeContract.grantAllocation(_account, tokens, false /* revokable */));

        PresaleAdded(_account, _baseTokens, _bonusTokens);

        return true;
    }


    //
    // PAUSE / UNPAUSE
    //

    // Allows the owner or admin to pause the sale for any reason.
    function pause() public onlyAdmin whenNotPaused {
        require(hasSaleEnded() == false);

        pausedTime = currentTime();

        return super.pause();
    }


    // Unpause may extend the end time of the public sale.
    // Note that we do not extend the start time of each phase.
    // Currently does not extend phase 1 end time, only final end time.
    function unpause() public onlyAdmin whenPaused {

        // If owner unpauses before sale starts, no impact on end time.
        uint256 current = currentTime();

        // If owner unpauses after sale starts, calculate how to extend end.
        if (current > PHASE1_START_TIME) {
            uint256 timeDelta;

            if (pausedTime < PHASE1_START_TIME) {
                // Pause was triggered before the start time, extend by time that
                // passed from proposed start time until now.
                timeDelta = current.sub(PHASE1_START_TIME);
            } else {
                // Pause was triggered while the sale was already started.
                // Extend end time by amount of time since pause.
                timeDelta = current.sub(pausedTime);
            }

            endTime = endTime.add(timeDelta);
        }

        pausedTime = 0;

        return super.unpause();
    }


    // Allows the admin to move bonus tokens still available in the sale contract
    // out before burning all remaining unsold tokens in burnUnsoldTokens().
    // Used to distribute bonuses to token sale participants when the sale has ended
    // and all bonuses are known.
    function reclaimTokens(uint256 _amount) external onlyAfterSale onlyAdmin returns (bool) {
        uint256 ownBalance = tokenContract.balanceOf(address(this));
        require(_amount <= ownBalance);
        
        address tokenOwner = tokenContract.owner();
        require(tokenOwner != address(0));

        require(tokenContract.transfer(tokenOwner, _amount));

        TokensReclaimed(_amount);

        return true;
    }


    // Allows the admin to burn all unsold tokens in the sale contract.
    function burnUnsoldTokens() external onlyAfterSale onlyAdmin returns (bool) {
        uint256 ownBalance = tokenContract.balanceOf(address(this));

        require(tokenContract.burn(ownBalance));

        UnsoldTokensBurnt(ownBalance);

        return true;
    }


    // Allows the admin to finalize the sale and complete allocations.
    // The SimpleToken.admin also needs to finalize the token contract
    // so that token transfers are enabled.
    function finalize() external onlyAdmin returns (bool) {
        return finalizeInternal();
    }


    // The internal one will be called if tokens are sold out or
    // the end time for the sale is reached, in addition to being called
    // from the public version of finalize().
    function finalizeInternal() private returns (bool) {
        require(!finalized);

        finalized = true;

        Finalized();

        return true;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"PHASE1_START_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokensPerKEther","type":"uint256"}],"name":"setTokensPerKEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PURCHASE_DIVIDER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTION_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_ACCELERATOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPresaleBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_adminAddress","type":"address"}],"name":"setAdminAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_SALE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PHASE2_START_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"END_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_phase","type":"uint8"}],"name":"updateWhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMALS","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokens","type":"uint256"}],"name":"setPhase1AccountTokensMax","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_EARLY_BACKERS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_baseTokens","type":"uint256"},{"name":"_bonusTokens","type":"uint256"}],"name":"addPresale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_opsAddress","type":"address"}],"name":"setOpsAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"reclaimTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"DECIMALSFACTOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"opsAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"burnUnsoldTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"changeWallet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_ADVISORS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPresaleBase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensPerKEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PHASE1_ACCOUNT_TOKENS_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pausedTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTION_MIN","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"trusteeContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_proposedOwner","type":"address"}],"name":"initiateOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buyTokens","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"proposedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentTime","outputs":[{"name":"_currentTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"completeOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"phase1AccountTokensMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_PER_KETHER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_FOUNDERS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_FUTURE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenContract","type":"address"},{"name":"_trusteeContract","type":"address"},{"name":"_wallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_account","type":"address"},{"indexed":false,"name":"_baseTokens","type":"uint256"},{"indexed":false,"name":"_bonusTokens","type":"uint256"}],"name":"PresaleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_account","type":"address"},{"indexed":false,"name":"_phase","type":"uint8"}],"name":"WhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_beneficiary","type":"address"},{"indexed":false,"name":"_cost","type":"uint256"},{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_totalSold","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokensPerKEtherUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"Phase1AccountTokensMaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newWallet","type":"address"}],"name":"WalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokensReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"UnsoldTokensBurnt","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newAddress","type":"address"}],"name":"AdminAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newAddress","type":"address"}],"name":"OpsAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_proposedOwner","type":"address"}],"name":"OwnershipTransferInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newOwner","type":"address"}],"name":"OwnershipTransferCompleted","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526003805460a060020a60ff021916905534156200002057600080fd5b6040516060806200207383398101604052808051919060200180519190602001805160008054600160a060020a03191633600160a060020a039081169190911782559193509150841615156200007557600080fd5b600160a060020a03831615156200008b57600080fd5b600160a060020a0382161515620000a157600080fd5b620000b96401000000006200081e620001e482021704565b635a0ae8d01015620000ca57600080fd5b620001146a2520bb90685948ca1c0000620000ff6a422ca8b0a00a42500000008064010000000062001c52620001e882021704565b9064010000000062001c52620001e882021704565b90506b0295be96e640669720000000620001656a71bff83fbcdcd385e40000620000ff6ab3fe97a2fafd2f4000000081866ac685fa11e01ec6f000000064010000000062001c52620001e882021704565b146200017057600080fd5b5060088054600160a060020a0319908116600160a060020a03938416179091556000600555635a21524f6004556003805460a860020a60ff02191690556236ee8060065569079f905c6fd34e80000060075560098054821694831694909417909355600a80549093169116179055620001ff565b4290565b600082820183811015620001f857fe5b9392505050565b611e64806200020f6000396000f3006060604052600436106102635763ffffffff60e060020a6000350416630e4d591981146102b05780630e9d02cc146102d557806317393f04146102ff57806318821400146103125780631a2309f01461039c57806322bcabcd146103af5780632820d6a5146103c25780632a905318146103d55780632c1e816d146103e85780633197cbb6146104075780633280922b1461041a57806336484ea01461042d57806337ba682d146104405780633f4ba83a146104535780634bb278f3146104685780634d399cb31461047b578063521eb273146104a057806355a373d6146104cf5780635b7f415c146104e25780635c975abb1461050b57806363b201171461051e57806369a68f5f1461053157806369be51bb1461054757806369d0292d1461055a578063707789c51461057f5780637760da7f1461059e5780638129fc1c146105b45780638456cb59146105c75780638bc04eb7146105da5780638da5cb5b146105ed5780638ea6437614610600578063940bb3441461061357806398b9a2dc146106265780639978be95146106455780639b19251a14610658578063a09b7e2b14610677578063a5bc770c1461068a578063a67e91a81461069d578063a6e53b99146106b0578063b2cca39d146106c3578063b3f05b97146106d6578063ba9bb827146106e9578063bb133331146106fc578063c0b6f5611461070f578063d0febe4c1461072e578063d153b60c14610736578063d18e81b314610749578063e71a78111461075c578063e87a9d841461076f578063f527c85614610782578063f653279c14610645578063f92c9b4714610795578063fc6f9468146107a8575b60035460a060020a900460ff161561027a57600080fd5b6102826107bb565b15801561029a5750635a0ae8d061029761081e565b10155b15156102a557600080fd5b6102ad610822565b50005b34156102bb57600080fd5b6102c3610bdb565b60405190815260200160405180910390f35b34156102e057600080fd5b6102eb600435610be3565b604051901515815260200160405180910390f35b341561030a57600080fd5b6102c3610c6f565b341561031d57600080fd5b610325610c75565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610361578082015183820152602001610349565b50505050905090810190601f16801561038e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103a757600080fd5b6102c3610cac565b34156103ba57600080fd5b6102c3610cba565b34156103cd57600080fd5b6102c3610cc9565b34156103e057600080fd5b610325610ccf565b34156103f357600080fd5b6102eb600160a060020a0360043516610d06565b341561041257600080fd5b6102c3610dd9565b341561042557600080fd5b6102c3610ddf565b341561043857600080fd5b6102c3610dee565b341561044b57600080fd5b6102c3610df6565b341561045e57600080fd5b610466610dfe565b005b341561047357600080fd5b6102eb610eab565b341561048657600080fd5b6102eb600160a060020a036004351660ff60243516610ece565b34156104ab57600080fd5b6104b3610f83565b604051600160a060020a03909116815260200160405180910390f35b34156104da57600080fd5b6104b3610f92565b34156104ed57600080fd5b6104f5610fa1565b60405160ff909116815260200160405180910390f35b341561051657600080fd5b6102eb610fa6565b341561052957600080fd5b6102c3610fb6565b341561053c57600080fd5b6102eb600435610fbc565b341561055257600080fd5b6102c3611048565b341561056557600080fd5b6102eb600160a060020a0360043516602435604435611057565b341561058a57600080fd5b6102eb600160a060020a0360043516611324565b34156105a957600080fd5b6102eb6004356113f7565b34156105bf57600080fd5b6102eb6115e8565b34156105d257600080fd5b61046661177d565b34156105e557600080fd5b6102c36117cf565b34156105f857600080fd5b6104b36117db565b341561060b57600080fd5b6104b36117ea565b341561061e57600080fd5b6102eb6117f9565b341561063157600080fd5b6102eb600160a060020a0360043516611953565b341561065057600080fd5b6102c3611a49565b341561066357600080fd5b6104f5600160a060020a0360043516611a58565b341561068257600080fd5b6102c3611a6d565b341561069557600080fd5b6102c3611a73565b34156106a857600080fd5b6102c3611a79565b34156106bb57600080fd5b6102c3611a89565b34156106ce57600080fd5b6102c3611a97565b34156106e157600080fd5b6102eb611a9d565b34156106f457600080fd5b6102c3611aad565b341561070757600080fd5b6104b3611ab9565b341561071a57600080fd5b6102eb600160a060020a0360043516611ac8565b6102eb610822565b341561074157600080fd5b6104b3611b3d565b341561075457600080fd5b6102c361081e565b341561076757600080fd5b6102eb611b4c565b341561077a57600080fd5b6102c3611bd3565b341561078d57600080fd5b6102c3611bd9565b34156107a057600080fd5b6102c3611be0565b34156107b357600080fd5b6104b3611bef565b600b546000906ac685fa11e01ec6f0000000901015806107e4575060035460a860020a900460ff165b156107f15750600161081b565b60055415801561080a575060045461080761081e565b10155b156108175750600161081b565b5060005b90565b4290565b600080600080600080600080600360149054906101000a900460ff1615151561084a57600080fd5b6108526107bb565b15801561086a5750635a0ae8d061086761081e565b10155b151561087557600080fd5b67016345785d8a000034101561088a57600080fd5b69021e19e0c9bab24000003411156108a157600080fd5b600b546ac685fa11e01ec6f000000090106108bb57600080fd5b600160a060020a0333166000908152600e602052604081205460ff16975087116108e457600080fd5b600b54610903906ac685fa11e01ec6f00000009063ffffffff611bfe16565b9550635a0c3a5061091261081e565b10156109bf57600160ff88161461092857600080fd5b600954600160a060020a03166370a082313360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561098157600080fd5b6102c65a03f1151561099257600080fd5b50505060405180516007549096506109b191508663ffffffff611bfe16565b9350858410156109bf578395505b600086116109cc57600080fd5b6006546109f4906103e8906109e890349063ffffffff611c1016565b9063ffffffff611c3b16565b925060008311610a0357600080fd5b50349050600085831115610a4257600654869350610a2d906109e8856103e863ffffffff611c1016565b9150610a3f348363ffffffff611bfe16565b90505b600b54610a55908463ffffffff611c5216565b600b55600954600160a060020a031663a9059cbb338560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ab757600080fd5b6102c65a03f11515610ac857600080fd5b505050604051805190501515610add57600080fd5b6000811115610b1757600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610b1757600080fd5b600854600160a060020a03166108fc610b36348463ffffffff611bfe16565b9081150290604051600060405180830381858888f193505050501515610b5b57600080fd5b33600160a060020a03167f0d1a0d5e3d583a0e92588799dd06e50fd78c07daf05f0cc06d7b848b1ca445f18385600b5460405180848152602001838152602001828152602001935050505060405180910390a2600b546ac685fa11e01ec6f00000001415610bcd57610bcb611c61565b505b600197505050505050505090565b635a0ae8d081565b6000610bee33611cd2565b1515610bf957600080fd5b610c016107bb565b15610c0b57600080fd5b635a0ae8d0610c1861081e565b10610c2257600080fd5b60008211610c2f57600080fd5b60068290557fee386bebbe46d39825c2b93313aa1ab1dc57d4774cac81c6debb8c611c9227ab8260405190815260200160405180910390a1506001919050565b6103e881565b60408051908101604052600c81527f53696d706c6520546f6b656e0000000000000000000000000000000000000000602082015281565b69021e19e0c9bab240000081565b6ab3fe97a2fafd2f4000000081565b600d5481565b60408051908101604052600281527f5354000000000000000000000000000000000000000000000000000000000000602082015281565b6000610d1133611d02565b80610d205750610d2033611cd2565b1515610d2b57600080fd5b600054600160a060020a0383811691161415610d4657600080fd5b30600160a060020a031682600160a060020a031614151515610d6757600080fd5b610d7082611d16565b15610d7a57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557f17bb0532ac84902a52bb6799529153f5ea501fc54fbcf3ea00dbd42bceb6b0f460405160405180910390a2506001919050565b60045481565b6ac685fa11e01ec6f000000081565b635a0c3a5081565b635a21524f81565b600080610e0a33611cd2565b1515610e1557600080fd5b60035460a060020a900460ff161515610e2d57600080fd5b610e3561081e565b9150635a0ae8d0821115610e9a57635a0ae8d06005541015610e6c57610e6582635a0ae8d063ffffffff611bfe16565b9050610e83565b600554610e8090839063ffffffff611bfe16565b90505b600454610e96908263ffffffff611c5216565b6004555b6000600555610ea7611d43565b5050565b6000610eb633611cd2565b1515610ec157600080fd5b610ec9611c61565b905090565b6000610ed933611d16565b1515610ee457600080fd5b600160a060020a0383161515610ef957600080fd5b600260ff83161115610f0a57600080fd5b610f126107bb565b15610f1c57600080fd5b600160a060020a0383166000818152600e602052604090819020805460ff191660ff86161790557f7ed18aa59a2962897d3e7ed3da887dfb6a03cca6c3cfe8d74e55130f631791c89084905160ff909116815260200160405180910390a250600192915050565b600854600160a060020a031681565b600954600160a060020a031681565b601281565b60035460a060020a900460ff1681565b600b5481565b6000610fc733611cd2565b1515610fd257600080fd5b610fda6107bb565b15610fe457600080fd5b635a0ae8d0610ff161081e565b10610ffb57600080fd5b6000821161100857600080fd5b60078290557f744598cd73b148cd670bce32eb1ef87a62ed5b38792946e86f562d0860213ed48260405190815260200160405180910390a1506001919050565b6a2520bb90685948ca1c000081565b600080600061106533611cd2565b151561107057600080fd5b6110786107bb565b1561108257600080fd5b635a0ae8d061108f61081e565b1061109957600080fd5b600160a060020a03861615156110ae57600080fd5b600085116110bb57600080fd5b8484106110c757600080fd5b600b546110da908663ffffffff611c5216565b600b8190556ac685fa11e01ec6f00000009011156110f757600080fd5b600954600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561115057600080fd5b6102c65a03f1151561116157600080fd5b50505060405180519250508185111561117957600080fd5b600c5461118c908663ffffffff611c5216565b600c55600d546111a2908563ffffffff611c5216565b600d55600954600a54600160a060020a039182169163a9059cbb91168760006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561120b57600080fd5b6102c65a03f1151561121c57600080fd5b50505060405180519050151561123157600080fd5b611241858563ffffffff611c5216565b600a54909150600160a060020a03166395c8d4ee87836000806040516020015260405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401602060405180830381600087803b15156112ae57600080fd5b6102c65a03f115156112bf57600080fd5b5050506040518051905015156112d457600080fd5b85600160a060020a03167ffdd0298ea259dd9c953110328b22720e53774c2027c9667a5b275dc5e460cb12868660405191825260208201526040908101905180910390a250600195945050505050565b600061132f33611d02565b8061133e575061133e33611cd2565b151561134957600080fd5b600054600160a060020a038381169116141561136457600080fd5b30600160a060020a031682600160a060020a03161415151561138557600080fd5b61138e82611cd2565b1561139857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557fac46a4511b8366ae3b7cf3cf342e31556274975598dcae03c866f8f0f55d51c460405160405180910390a2506001919050565b6000806000600360159054906101000a900460ff16151561141757600080fd5b61142033611cd2565b151561142b57600080fd5b600954600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561148457600080fd5b6102c65a03f1151561149557600080fd5b5050506040518051925050818411156114ad57600080fd5b600954600160a060020a0316638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156114f557600080fd5b6102c65a03f1151561150657600080fd5b5050506040518051915050600160a060020a038116151561152657600080fd5b600954600160a060020a031663a9059cbb828660006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561158557600080fd5b6102c65a03f1151561159657600080fd5b5050506040518051905015156115ab57600080fd5b7fbce3cc672456937708767d1642a17cacb1962753bd5cff46c8dbd377906a6b4b8460405190815260200160405180910390a15060019392505050565b60008060006115f633611d02565b151561160157600080fd5b600b541561160e57600080fd5b600c541561161b57600080fd5b600d541561162857600080fd5b600954600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561168157600080fd5b6102c65a03f1151561169257600080fd5b50505060405180519250506ac685fa11e01ec6f000000082146116b457600080fd5b600954600a54600160a060020a03918216916370a08231911660006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561171457600080fd5b6102c65a03f1151561172557600080fd5b50505060405180519150506a71bff83fbcdcd385e4000081101561174857600080fd5b7f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c860405160405180910390a160019250505090565b61178633611cd2565b151561179157600080fd5b60035460a060020a900460ff16156117a857600080fd5b6117b06107bb565b156117ba57600080fd5b6117c261081e565b6005556117cd611dbb565b565b670de0b6b3a764000081565b600054600160a060020a031681565b600254600160a060020a031681565b600354600090819060a860020a900460ff16151561181657600080fd5b61181f33611cd2565b151561182a57600080fd5b600954600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561188357600080fd5b6102c65a03f1151561189457600080fd5b5050506040518051600954909250600160a060020a031690506342966c688260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156118f257600080fd5b6102c65a03f1151561190357600080fd5b50505060405180519050151561191857600080fd5b7f8a18a804523143af3d2399b3fdf76bf116e01d31987f8e774d8f1282f013cb7e8160405190815260200160405180910390a1600191505090565b600061195e33611cd2565b151561196957600080fd5b600160a060020a038216151561197e57600080fd5b30600160a060020a031682600160a060020a03161415151561199f57600080fd5b600a54600160a060020a03838116911614156119ba57600080fd5b600954600160a060020a03838116911614156119d557600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290557f3ce716f94fe275e52428cbf6b7f388e5a65976d4edabc34355a77f5e89655bdc9116604051600160a060020a03909116815260200160405180910390a1506001919050565b6a422ca8b0a00a425000000081565b600e6020526000908152604090205460ff1681565b600c5481565b60065481565b6b0295be96e64066972000000081565b69079f905c6fd34e80000081565b60055481565b60035460a860020a900460ff1681565b67016345785d8a000081565b600a54600160a060020a031681565b6000611ad333611d02565b1515611ade57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557f20f5afdf40bf7b43c89031a5d4369a30b159e512d164aa46124bcb706b4a1caf60405160405180910390a2506001919050565b600154600160a060020a031681565b60015460009033600160a060020a03908116911614611b6a57600080fd5b6001805460008054600160a060020a0380841673ffffffffffffffffffffffffffffffffffffffff1992831617928390559216909255167f624adc4c72536289dd9d5439ccdeccd8923cb9af95fb626b21935447c77b840760405160405180910390a250600190565b60075481565b6236ee8081565b6a71bff83fbcdcd385e4000081565b600354600160a060020a031681565b600082821115611c0a57fe5b50900390565b6000828202831580611c2c5750828482811515611c2957fe5b04145b1515611c3457fe5b9392505050565b6000808284811515611c4957fe5b04949350505050565b600082820183811015611c3457fe5b60035460009060a860020a900460ff1615611c7b57600080fd5b6003805475ff000000000000000000000000000000000000000000191660a860020a1790557f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a150600190565b600354600090600160a060020a031615801590611cfc5750600354600160a060020a038381169116145b92915050565b600054600160a060020a0390811691161490565b600254600090600160a060020a031615801590611cfc575050600254600160a060020a0390811691161490565b611d4c33611cd2565b1515611d5757600080fd5b60035460a060020a900460ff161515611d6f57600080fd5b6003805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b611dc433611cd2565b1515611dcf57600080fd5b60035460a060020a900460ff1615611de657600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15600a165627a7a72305820d70335dbd36e2892b2e69a9407bafe127794d39bc50a6ce104a0561861dad2e200290000000000000000000000002c4e8f2d746113d0696ce89b35f0d8bf88e0aeca0000000000000000000000004288f043370910c923f7a600526ca8064da05d0d0000000000000000000000002ef2782905830533d218b7ff4d15b8c0981ce84b

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

-----Decoded View---------------
Found 3 constructor arguments :
Arg [0] : 0000000000000000000000002c4e8f2d746113d0696ce89b35f0d8bf88e0aeca
Arg [1] : 0000000000000000000000004288f043370910c923f7a600526ca8064da05d0d
Arg [2] : 0000000000000000000000002ef2782905830533d218b7ff4d15b8c0981ce84b


   Swarm Source:
bzzr://d70335dbd36e2892b2e69a9407bafe127794d39bc50a6ce104a0561861dad2e2
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.