Sponsored Link:   COVESTING - EU-based digital asset exchange. Aggregated liquidity. Algorithmic & Copy-trading features. 24/7 support. Get access!
Contract Overview | DocTailorTokenSale
Balance: 0 Ether
Ether Value: $0
Transactions: 50 txns
 Latest 25 txns from a total Of 50 transactions
View All

TxHash Age From To Value [TxFee]
0xe8cafed7301c1e3a6deed59fbb26cb1eb6edfbe81ff8ea27b38425ef439a5e1521 days 14 hrs ago0x583b829dcdb5b31d4e446d23f3eea3559d3358f7  IN   DocTailorTokenSale0 Ether0.00075452115
0xe3b8e3d6d27c58ae8e3dc6e070a88a5f6016c174e3aa53eb9ced00bd73ad74fa21 days 14 hrs ago0x583b829dcdb5b31d4e446d23f3eea3559d3358f7  IN   DocTailorTokenSale0 Ether0.000366648
0xf763c3a938c4ccc7c27ed79504b024da80583dd53649bf1586689b3f44969cf521 days 14 hrs ago0x583b829dcdb5b31d4e446d23f3eea3559d3358f7  IN   DocTailorTokenSale0 Ether0.000614341
0x6310c19ee7546b46058b7989cd848d8df1974ef9c7637f0890560e7e26f0d6db21 days 14 hrs ago0x583b829dcdb5b31d4e446d23f3eea3559d3358f7  IN   DocTailorTokenSale0 Ether0.000708855
0xbfec32f23f430caa4c0d96899fb3cb642c3562032983cb21665e948b6b673bd725 days 8 hrs ago0x79e95f5b9679ca97da6823864548b223024f56ff  IN   DocTailorTokenSale0.07 Ether0.000790251
0xec73b6ceedff4ba0804868ac6ae5f84a3c72c9233af517a75d8766837445074226 days 4 hrs ago0xa0bea35b33868f02c7d2254902531a14fe400c4c  IN   DocTailorTokenSale0.012 Ether0.002330481
0xeba61b5b3f547ace511ee8abd0f8a2e0b76008cbb813e4a50df5233a4f56fd8b31 days 4 hrs ago0xa0bea35b33868f02c7d2254902531a14fe400c4c  IN   DocTailorTokenSale0.012 Ether0.002330481
0xa7a2031a4fc1ba8a784f0cea6f2e78cb3e504c9775e751dd87563ec5ca77c90638 days 16 hrs ago0x1a4196a64083871babb67cc106a38e510dc69893  IN   DocTailorTokenSale0.01 Ether0.00431046
0xbc108f5c4f2d3e2180113d0f50a8fbe2710eee34832306d2ed98f734300d317d39 days 11 hrs ago0x6d79d2fc0b8806cc21a05b50a12b19ddffb35c5f  IN   DocTailorTokenSale0.011 Ether0.000502887
0x201bd8d55162586015ee7b90d23680fad17962c15de3679864803b3422c62ccf40 days 14 hrs ago0xa0bea35b33868f02c7d2254902531a14fe400c4c  IN   DocTailorTokenSale0.022 Ether0.002330481
0x3fad36771ed60184cd8714d3335497090075fd8b5a763b8771945774854e6ee342 days 14 hrs ago0x65320b9ca78cd89d79107158d454462e6b611dbe  IN   DocTailorTokenSale0.0002 Ether0.000284205
0xf7d012b6d7cc6a3ad289c2cde1f101edf0145d8ca966af70c9274e442537761742 days 14 hrs ago0x65320b9ca78cd89d79107158d454462e6b611dbe  IN   DocTailorTokenSale0.0002 Ether0.000359205
0xd1849f8bd64b284c604c1bd1964b3d4780096e08104d8d23be14d4946af2f2c144 days 10 hrs ago0xbcc65351eca21cffa4ced8f3c306c69ce74f4ba4  IN   DocTailorTokenSale0.1 Ether0.001508661
0x770525274415443178908a6f4fa7294068ba78ca387866a640919e702fce98e745 days 1 hr ago0x13bb4b4f3cbea813f8fcf18b6e44460a1b2e40ea  IN   DocTailorTokenSale0.1 Ether0.000143682
0xcc701beb837bce066af482cd11ceec1e65eeee5f1b21ee8b5bd6431863b57b5b46 days 20 hrs ago0x84d1a0097c812f280edea748dbb82f97be2475a3  IN   DocTailorTokenSale0.05 Ether0.000287364
0xc704bfc786e566cbcdc36e91b9b0b44e685ad689401be6b857d785780fab35c847 days 3 hrs ago0x402071d58d45c900eb2c12d39c37635e50d1e18d  IN   DocTailorTokenSale1 Ether0.00143682
0x0c537bf02d541e785ce99a07518df595ca594bf6f0aa7df64763afdfd4cbe09c50 days 19 hrs ago0xfc2755e9829520665f592ed1ddca87be6793d2ec  IN   DocTailorTokenSale0.042 Ether0.001508661
0xd73cfe08b3e196bb083130b33e3bb24e7bb8e93c21c7696fbeff5d9f7aae599252 days 23 hrs ago0x36e8efe984473357ee0f7e3ca45774d7da124d2a  IN   DocTailorTokenSale0.06 Ether0.007224952
0xe9a2478bcf943828fad4eb689c0b27a01544ba1a60be03cc0cf34eaf309acab454 days 17 hrs ago0x4278ae3cc50d08805f0f4fe32bd8d49c0b4f28c7  IN   DocTailorTokenSale0.08 Ether0.0002586276
0xb9b9451d4d9afebd3fe9645c02c19dca25b4c315254d9ffb282f3765c6cb5f8d56 days 33 mins ago0x278d8468d1a82445ce6ec3902f22e6bec6c8f4c3  IN   DocTailorTokenSale0.002 Ether0.000143682
0xe7d7e187efe7662488039023c8e8bdf7cec830c2f85ed9225bd2723cad44b94356 days 16 hrs ago0x5c20f1470a84cb884eb9b8e28e6d9578d2282f66  IN   DocTailorTokenSale0.001 Ether0.000215523
0xbdf68a683b2d4a549af1ea3e1de7751dd9b9e9d4f4a38258527728a40d5571a557 days 19 hrs ago0xb3f7b743764a542641dd6a62303de415dd076330  IN   DocTailorTokenSale0 Ether0.000021076
0xe3e6bd36fe542da59b9e74eef704e16cf4859a91cfc00f853d34ef94028b874458 days 12 hrs ago0x7c9ed9d9aafbe101c675605a60f652dc4cceb948  IN   DocTailorTokenSale0.005 Ether0.000113682
0x548bd2b747eaabb6b996dea2d823c10ef41482ea07bda9c7ff2dd09122e1525158 days 12 hrs ago0x7c9ed9d9aafbe101c675605a60f652dc4cceb948  IN   DocTailorTokenSale0.0001 Ether0.000143682
0xf388cfa8513011538f59622cf2d708b16c9ab5ee7ae1263b243a3b740f85b95759 days 15 hrs ago0x2d4512ab42869308d2eef0fdfc224e24135d1e11  IN   DocTailorTokenSale0.04 Ether0.00431046
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 2 Internal Transactions

ParentTxHash Block Age From To Value
0xe3b8e3d6d27c58ae8e3dc6e070a88a5f6016c174e3aa53eb9ced00bd73ad74fa569226721 days 14 hrs ago0xd7e4ad7c318ffbafbf602e32e089e7e2326a25810x583b829dcdb5b31d4e446d23f3eea3559d3358f714.9035 Ether
0xe864dce5986b827e5201c0163b9efb2542b1215d3982fd06a8dda266505a5b615132132117 days 10 hrs ago0xd7e4ad7c318ffbafbf602e32e089e7e2326a2581  Contract Creation0 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact match)
Contract Name: DOCTCrowdsale
Compiler Version: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;

/**
 * DocTailor: https://www.doctailor.com
 */

// ==== Open Zeppelin library ===

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

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

/**
   @title ERC827 interface, an extension of ERC20 token standard

   Interface of a ERC827 token, following the ERC20 standard with extra
   methods to transfer value and data and execute calls in transfers and
   approvals.
 */
contract ERC827 is ERC20 {

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

}

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
  function safeTransfer(ERC20Basic token, address to, uint256 value) internal {
    assert(token.transfer(to, value));
  }

  function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal {
    assert(token.transferFrom(from, to, value));
  }

  function safeApprove(ERC20 token, address spender, uint256 value) internal {
    assert(token.approve(spender, value));
  }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

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

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


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

/**
 * @title Contracts that should not own Ether
 * @author Remco Bloemen <remco@2π.com>
 * @dev This tries to block incoming ether to prevent accidental loss of Ether. Should Ether end up
 * in the contract, it will allow the owner to reclaim this ether.
 * @notice Ether can still be send to this contract by:
 * calling functions labeled `payable`
 * `selfdestruct(contract_address)`
 * mining directly to the contract address
*/
contract HasNoEther is Ownable {

  /**
  * @dev Constructor that rejects incoming Ether
  * @dev The `payable` flag is added so we can access `msg.value` without compiler warning. If we
  * leave out payable, then Solidity will allow inheriting contracts to implement a payable
  * constructor. By doing it this way we prevent a payable constructor from working. Alternatively
  * we could use assembly to access msg.value.
  */
  function HasNoEther() public payable {
    require(msg.value == 0);
  }

  /**
   * @dev Disallows direct send by settings a default function without the `payable` flag.
   */
  function() external {
  }

  /**
   * @dev Transfer all Ether held by the contract to the owner.
   */
  function reclaimEther() external onlyOwner {
    assert(owner.send(this.balance));
  }
}

/**
 * @title Contracts that should not own Contracts
 * @author Remco Bloemen <remco@2π.com>
 * @dev Should contracts (anything Ownable) end up being owned by this contract, it allows the owner
 * of this contract to reclaim ownership of the contracts.
 */
contract HasNoContracts is Ownable {

  /**
   * @dev Reclaim ownership of Ownable contracts
   * @param contractAddr The address of the Ownable to be reclaimed.
   */
  function reclaimContract(address contractAddr) external onlyOwner {
    Ownable contractInst = Ownable(contractAddr);
    contractInst.transferOwnership(owner);
  }
}

/**
 * @title Contracts that should be able to recover tokens
 * @author SylTi
 * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner.
 * This will prevent any accidental loss of tokens.
 */
contract CanReclaimToken is Ownable {
  using SafeERC20 for ERC20Basic;

  /**
   * @dev Reclaim all ERC20Basic compatible tokens
   * @param token ERC20Basic The address of the token contract
   */
  function reclaimToken(ERC20Basic token) external onlyOwner {
    uint256 balance = token.balanceOf(this);
    token.safeTransfer(owner, balance);
  }

}

/**
 * @title Contracts that should not own Tokens
 * @author Remco Bloemen <remco@2π.com>
 * @dev This blocks incoming ERC23 tokens to prevent accidental loss of tokens.
 * Should tokens (any ERC20Basic compatible) end up in the contract, it allows the
 * owner to reclaim the tokens.
 */
contract HasNoTokens is CanReclaimToken {

 /**
  * @dev Reject all ERC23 compatible tokens
  * @param from_ address The address that is transferring the tokens
  * @param value_ uint256 the amount of the specified token
  * @param data_ Bytes The data passed from the caller.
  */
  function tokenFallback(address from_, uint256 value_, bytes data_) pure external {
    from_;
    value_;
    data_;
    revert();
  }

}

/**
 * @title Base contract for contracts that should not own things.
 * @author Remco Bloemen <remco@2π.com>
 * @dev Solves a class of errors where a contract accidentally becomes owner of Ether, Tokens or
 * Owned contracts. See respective base contracts for details.
 */
contract NoOwner is HasNoEther, HasNoTokens, HasNoContracts {
}

/**
 * @title Destructible
 * @dev Base contract that can be destroyed by owner. All funds in contract will be sent to the owner.
 */
contract Destructible is Ownable {

  function Destructible() public payable { }

  /**
   * @dev Transfers the current balance to the owner and terminates the contract.
   */
  function destroy() onlyOwner public {
    selfdestruct(owner);
  }

  function destroyAndSend(address _recipient) onlyOwner public {
    selfdestruct(_recipient);
  }
}

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

  mapping(address => uint256) balances;

  uint256 totalSupply_;

  /**
  * @dev total number of tokens in existence
  */
  function totalSupply() public view returns (uint256) {
    return totalSupply_;
  }

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

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

}

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

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


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

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

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * @dev Increase the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _addedValue The amount of tokens to increase the allowance by.
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  /**
   * @dev Decrease the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To decrement
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _subtractedValue The amount of tokens to decrease the allowance by.
   */
  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

/**
 * @title Mintable token
 * @dev Simple ERC20 Token example, with mintable token creation
 * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120
 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol
 */
contract MintableToken is StandardToken, Ownable {
  event Mint(address indexed to, uint256 amount);
  event MintFinished();

  bool public mintingFinished = false;


  modifier canMint() {
    require(!mintingFinished);
    _;
  }

  /**
   * @dev Function to mint tokens
   * @param _to The address that will receive the minted tokens.
   * @param _amount The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) {
    totalSupply_ = totalSupply_.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    Mint(_to, _amount);
    Transfer(address(0), _to, _amount);
    return true;
  }

  /**
   * @dev Function to stop minting new tokens.
   * @return True if the operation was successful.
   */
  function finishMinting() onlyOwner canMint public returns (bool) {
    mintingFinished = true;
    MintFinished();
    return true;
  }
}

/**
   @title ERC827, an extension of ERC20 token standard

   Implementation the ERC827, following the ERC20 standard with extra
   methods to transfer value and data and execute calls in transfers and
   approvals.
   Uses OpenZeppelin StandardToken.
 */
contract ERC827Token is ERC827, StandardToken {

  /**
     @dev Addition to ERC20 token methods. It allows to
     approve the transfer of value and execute a call with the sent data.

     Beware that changing an allowance with this method brings the risk that
     someone may use both the old and the new allowance by unfortunate
     transaction ordering. One possible solution to mitigate this race condition
     is to first reduce the spender's allowance to 0 and set the desired value
     afterwards:
     https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729

     @param _spender The address that will spend the funds.
     @param _value The amount of tokens to be spent.
     @param _data ABI-encoded contract call to call `_to` address.

     @return true if the call function was executed successfully
   */
  function approve(address _spender, uint256 _value, bytes _data) public returns (bool) {
    require(_spender != address(this));

    super.approve(_spender, _value);

    require(_spender.call(_data));

    return true;
  }

  /**
     @dev Addition to ERC20 token methods. Transfer tokens to a specified
     address and execute a call with the sent data on the same transaction

     @param _to address The address which you want to transfer to
     @param _value uint256 the amout of tokens to be transfered
     @param _data ABI-encoded contract call to call `_to` address.

     @return true if the call function was executed successfully
   */
  function transfer(address _to, uint256 _value, bytes _data) public returns (bool) {
    require(_to != address(this));

    super.transfer(_to, _value);

    require(_to.call(_data));
    return true;
  }

  /**
     @dev Addition to ERC20 token methods. Transfer tokens from one address to
     another and make a contract call on the same transaction

     @param _from The address which you want to send tokens from
     @param _to The address which you want to transfer to
     @param _value The amout of tokens to be transferred
     @param _data ABI-encoded contract call to call `_to` address.

     @return true if the call function was executed successfully
   */
  function transferFrom(address _from, address _to, uint256 _value, bytes _data) public returns (bool) {
    require(_to != address(this));

    super.transferFrom(_from, _to, _value);

    require(_to.call(_data));
    return true;
  }

  /**
   * @dev Addition to StandardToken methods. Increase the amount of tokens that
   * an owner allowed to a spender and execute a call with the sent data.
   *
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _addedValue The amount of tokens to increase the allowance by.
   * @param _data ABI-encoded contract call to call `_spender` address.
   */
  function increaseApproval(address _spender, uint _addedValue, bytes _data) public returns (bool) {
    require(_spender != address(this));

    super.increaseApproval(_spender, _addedValue);

    require(_spender.call(_data));

    return true;
  }

  /**
   * @dev Addition to StandardToken methods. Decrease the amount of tokens that
   * an owner allowed to a spender and execute a call with the sent data.
   *
   * approve should be called when allowed[_spender] == 0. To decrement
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _subtractedValue The amount of tokens to decrease the allowance by.
   * @param _data ABI-encoded contract call to call `_spender` address.
   */
  function decreaseApproval(address _spender, uint _subtractedValue, bytes _data) public returns (bool) {
    require(_spender != address(this));

    super.decreaseApproval(_spender, _subtractedValue);

    require(_spender.call(_data));

    return true;
  }

}

// ==== DOCT Contracts ===

contract DOCTToken is MintableToken, ERC827Token, NoOwner {
    string public symbol = 'DOCT';
    string public name = 'DocTailor';
    uint8 public constant decimals = 8;

    address founder;                //founder address to allow him transfer tokens even when transfers disabled
    bool public transferEnabled;    //allows to dissable transfers while minting and in case of emergency

    function setFounder(address _founder) onlyOwner public {
        founder = _founder;
    }
    function setTransferEnabled(bool enable) onlyOwner public {
        transferEnabled = enable;
    }
    modifier canTransfer() {
        require( transferEnabled || msg.sender == founder || msg.sender == owner);
        _;
    }
    
    function transfer(address _to, uint256 _value) canTransfer public returns (bool) {
        return super.transfer(_to, _value);
    }
    function transferFrom(address _from, address _to, uint256 _value) canTransfer public returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }
    function transfer(address _to, uint256 _value, bytes _data) canTransfer public returns (bool) {
        return super.transfer(_to, _value, _data);
    }
    function transferFrom(address _from, address _to, uint256 _value, bytes _data) canTransfer public returns (bool) {
        return super.transferFrom(_from, _to, _value, _data);
    }
}

/**
 * @title DocTailor Crowdsale
 */
contract DOCTCrowdsale is Ownable, HasNoContracts, CanReclaimToken, Destructible {
    using SafeMath for uint256;

    uint256 constant  DOCT_TO_ETH_DECIMALS = 10000000000;    //Need this because ETH decimals is 18, while DOCT decimals is 8.

    DOCTToken public token;

    struct Round {
        uint256 start;          //Timestamp of crowdsale round start
        uint256 end;            //Timestamp of crowdsale round end
        uint256 rate;           //Rate: how much TOKEN one will get fo 1 ETH during this round
        uint256 rateBulk;       //Rate for bulk purshases
        uint256 bulkThreshold;  //If purshase more than this amount, bulk rate applied
    }
    Round[] public rounds;          //Array of crowdsale rounds
    uint256 public hardCap;         //Max amount of tokens to mint
    uint256 public tokensMinted;    //Amount of tokens already minted
    bool public finalized;          //crowdsale is finalized

    function DOCTCrowdsale (
        uint256 _hardCap,
        uint256[] roundStarts,
        uint256[] roundEnds,
        uint256[] roundRates,
        uint256[] roundRatesBulk,
        uint256[] roundBulkThreshold
    ) public {
        token = new DOCTToken();
        token.setFounder(owner);
        token.setTransferEnabled(false);

        tokensMinted = token.totalSupply();

        //Check all paramaters are correct and create rounds
        require(_hardCap > 0);                    //Need something to sell
        hardCap = _hardCap;

        initRounds(roundStarts, roundEnds, roundRates, roundRatesBulk, roundBulkThreshold);
    }
    function initRounds(uint256[] roundStarts, uint256[] roundEnds, uint256[] roundRates, uint256[] roundRatesBulk, uint256[] roundBulkThreshold) internal {
        require(
            (roundStarts.length > 0)  &&                //There should be at least one round
            (roundStarts.length == roundEnds.length) &&
            (roundStarts.length == roundRates.length) &&
            (roundStarts.length == roundRatesBulk.length) &&
            (roundStarts.length == roundBulkThreshold.length)
        );                   
        uint256 prevRoundEnd = now;
        rounds.length = roundStarts.length;             //initialize rounds array
        for(uint8 i=0; i < roundStarts.length; i++){
            rounds[i] = Round({start:roundStarts[i], end:roundEnds[i], rate:roundRates[i], rateBulk:roundRatesBulk[i], bulkThreshold:roundBulkThreshold[i]});
            Round storage r = rounds[i];
            require(prevRoundEnd <= r.start);
            require(r.start < r.end);
            require(r.bulkThreshold > 0);
            prevRoundEnd = rounds[i].end;
        }
    }
    function setRound(uint8 roundNum, uint256 start, uint256 end, uint256 rate, uint256 rateBulk, uint256 bulkThreshold) onlyOwner external {
        uint8 round = roundNum-1;
        if(round > 0){
            require(rounds[round - 1].end <= start);
        }
        if(round < rounds.length - 1){
            require(end <= rounds[round + 1].start);   
        }
        rounds[round].start = start;
        rounds[round].end = end;
        rounds[round].rate = rate;
        rounds[round].rateBulk = rateBulk;
        rounds[round].bulkThreshold = bulkThreshold;
    }


    /**
    * @notice Buy tokens
    */
    function() payable public {
        require(msg.value > 0);
        require(crowdsaleRunning());

        uint256 rate = currentRate(msg.value);
        require(rate > 0);
        uint256 tokens = rate.mul(msg.value).div(DOCT_TO_ETH_DECIMALS);
        mintTokens(msg.sender, tokens);
    }

    /**
    * @notice Mint tokens for purshases with Non-Ether currencies
    * @param beneficiary whom to send tokend
    * @param amount how much tokens to send
    * param message reason why we are sending tokens (not stored anythere, only in transaction itself)
    */
    function saleNonEther(address beneficiary, uint256 amount, string /*message*/) onlyOwner external{
        mintTokens(beneficiary, amount);
    }

    /**
    * @notice Bulk mint tokens (different amounts)
    * @param beneficiaries array whom to send tokend
    * @param amounts array how much tokens to send
    * param message reason why we are sending tokens (not stored anythere, only in transaction itself)
    */
    function bulkTokenSend(address[] beneficiaries, uint256[] amounts, string /*message*/) onlyOwner external{
        require(beneficiaries.length == amounts.length);
        for(uint32 i=0; i < beneficiaries.length; i++){
            mintTokens(beneficiaries[i], amounts[i]);
        }
    }
    /**
    * @notice Bulk mint tokens (same amounts)
    * @param beneficiaries array whom to send tokend
    * @param amount how much tokens to send
    * param message reason why we are sending tokens (not stored anythere, only in transaction itself)
    */
    function bulkTokenSend(address[] beneficiaries, uint256 amount, string /*message*/) onlyOwner external{
        require(amount > 0);
        for(uint32 i=0; i < beneficiaries.length; i++){
            mintTokens(beneficiaries[i], amount);
        }
    }

    /**
    * @notice Shows if crowdsale is running
    */ 
    function crowdsaleRunning() constant public returns(bool){
        return !finalized && (tokensMinted < hardCap) && (currentRoundNum() > 0);
    }

    /**
    * @notice Fetches current Round number
    * @return round number (index in rounds array + 1) or 0 if none
    */
    function currentRoundNum() view public returns(uint8) {
        for(uint8 i=0; i < rounds.length; i++){
            if( (now > rounds[i].start) && (now <= rounds[i].end) ) return i+1;
        }
        return 0;
    }
    /**
    * @notice Fetches current rate (how many tokens you get for 1 ETH)
    * @param amount how much ether is received
    * @return calculated rate or zero if no round of crowdsale is running
    */
    function currentRate(uint256 amount) view public returns(uint256) {
        uint8 roundNum = currentRoundNum();
        if(roundNum == 0) {
            return 0;
        }else{
            uint8 round = roundNum-1;
            if(amount < rounds[round].bulkThreshold){
                return rounds[round].rate;
            }else{
                return rounds[round].rateBulk;
            }
        }
    }

    /**
    * @dev Helper function to mint tokens and increase tokensMinted counter
    */
    function mintTokens(address beneficiary, uint256 amount) internal {
        tokensMinted = tokensMinted.add(amount);
        require(tokensMinted <= hardCap);
        assert(token.mint(beneficiary, amount));
    }

    /**
    * @notice Sends collected funds to owner
    */
    function claimEther() public onlyOwner {
        if(this.balance > 0){
            owner.transfer(this.balance);
        }
    }

    /**
    * @notice Finalizes ICO: changes token ownership to founder, allows token transfers
    */
    function finalizeCrowdsale() onlyOwner public {
        finalized = true;
        assert(token.finishMinting());
        token.setTransferEnabled(true);
        token.transferOwnership(owner);
        claimEther();
    }

}

    Contract ABI  
[{"constant":false,"inputs":[],"name":"finalizeCrowdsale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"amount","type":"uint256"}],"name":"currentRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"contractAddr","type":"address"}],"name":"reclaimContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiaries","type":"address[]"},{"name":"amounts","type":"uint256[]"},{"name":"","type":"string"}],"name":"bulkTokenSend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensMinted","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"amount","type":"uint256"},{"name":"","type":"string"}],"name":"saleNonEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"roundNum","type":"uint8"},{"name":"start","type":"uint256"},{"name":"end","type":"uint256"},{"name":"rate","type":"uint256"},{"name":"rateBulk","type":"uint256"},{"name":"bulkThreshold","type":"uint256"}],"name":"setRound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"rounds","outputs":[{"name":"start","type":"uint256"},{"name":"end","type":"uint256"},{"name":"rate","type":"uint256"},{"name":"rateBulk","type":"uint256"},{"name":"bulkThreshold","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":"currentRoundNum","outputs":[{"name":"","type":"uint8"}],"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":"crowdsaleRunning","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiaries","type":"address[]"},{"name":"amount","type":"uint256"},{"name":"","type":"string"}],"name":"bulkTokenSend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"destroyAndSend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hardCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_hardCap","type":"uint256"},{"name":"roundStarts","type":"uint256[]"},{"name":"roundEnds","type":"uint256[]"},{"name":"roundRates","type":"uint256[]"},{"name":"roundRatesBulk","type":"uint256[]"},{"name":"roundBulkThreshold","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234156200001057600080fd5b60405162002c8c38038062002c8c833981016040528080519190602001805182019190602001805182019190602001805182019190602001805182019190602001805160008054600160a060020a03191633600160a060020a03161790559190910190506200007e62000464565b604051809103906000f08015156200009557600080fd5b60018054600160a060020a031916600160a060020a03928316179081905560005490821691637a341bc791166040517c010000000000000000000000000000000000000000000000000000000063ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200011957600080fd5b6102c65a03f115156200012b57600080fd5b5050600154600160a060020a03169050639fe9f62360006040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281529015156004820152602401600060405180830381600087803b15156200019257600080fd5b6102c65a03f11515620001a457600080fd5b5050600154600160a060020a031690506318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156200020a57600080fd5b6102c65a03f115156200021c57600080fd5b505050604051805160045550600086116200023657600080fd5b600386905562000258858585858564010000000062000e136200026482021704565b505050505050620004e8565b60008060008088511180156200027b575086518851145b801562000289575085518851145b801562000297575084518851145b8015620002a5575083518851145b1515620002b157600080fd5b4292508751620002c360028262000475565b50600091505b87518260ff1610156200045a5760a060405190810160405280898460ff1681518110620002f257fe5b906020019060200201518152602001888460ff16815181106200031157fe5b906020019060200201518152602001878460ff16815181106200033057fe5b906020019060200201518152602001868460ff16815181106200034f57fe5b906020019060200201518152602001858460ff16815181106200036e57fe5b9060200190602002015190526002805460ff85169081106200038c57fe5b9060005260206000209060050201600082015181556020820151816001015560408201518160020155606082015181600301556080820151600490910155506002805460ff8416908110620003dd57fe5b90600052602060002090600502019050806000015483111515156200040157600080fd5b60018101548154106200041357600080fd5b6004810154600090116200042657600080fd5b6002805460ff84169081106200043857fe5b90600052602060002090600502016001015492508180600101925050620002c9565b5050505050505050565b604051611710806200157c83390190565b815481835581811511620004a457600502816005028360005260206000209182019101620004a49190620004a9565b505050565b620004e591905b80821115620004e15760008082556001820181905560028201819055600382018190556004820155600501620004b0565b5090565b90565b61108480620004f86000396000f3006060604052600436106100f85763ffffffff60e060020a6000350416630bf318a3811461016857806317ffc3201461017d578063246f938f1461019c5780632aed7f3f146101c45780634864ca17146101e357806355291dbd146102195780636de9f32b1461022c5780637670dea81461023f57806383197ef01461026e57806386a3b105146102815780638c65c81f146102a95780638da5cb5b146102f157806398e2573314610320578063b3f05b9714610349578063bb50c67a14610370578063df5d7a3314610383578063f2fde38b146103b1578063f5074f41146103d0578063fb86a404146103ef578063fc0c546a14610402575b6000803481901161010857600080fd5b610110610415565b151561011b57600080fd5b6101243461044a565b91506000821161013357600080fd5b6101586402540be40061014c843463ffffffff6104f416565b9063ffffffff61052a16565b90506101643382610541565b5050005b341561017357600080fd5b61017b6105ee565b005b341561018857600080fd5b61017b600160a060020a0360043516610755565b34156101a757600080fd5b6101b260043561044a565b60405190815260200160405180910390f35b34156101cf57600080fd5b61017b600160a060020a0360043516610805565b34156101ee57600080fd5b61017b6024600480358281019290820135918135808301929082013591604435918201910135610890565b341561022457600080fd5b61017b610921565b341561023757600080fd5b6101b2610988565b341561024a57600080fd5b61017b60048035600160a060020a031690602480359160443591820191013561098e565b341561027957600080fd5b61017b6109b9565b341561028c57600080fd5b61017b60ff6004351660243560443560643560843560a4356109e2565b34156102b457600080fd5b6102bf600435610b55565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b34156102fc57600080fd5b610304610b94565b604051600160a060020a03909116815260200160405180910390f35b341561032b57600080fd5b610333610ba3565b60405160ff909116815260200160405180910390f35b341561035457600080fd5b61035c610c28565b604051901515815260200160405180910390f35b341561037b57600080fd5b61035c610415565b341561038e57600080fd5b61017b602460048035828101929082013591813591604435908101910135610c31565b34156103bc57600080fd5b61017b600160a060020a0360043516610ca8565b34156103db57600080fd5b61017b600160a060020a0360043516610d43565b34156103fa57600080fd5b6101b2610d6a565b341561040d57600080fd5b610304610d70565b60055460009060ff1615801561042e5750600354600454105b80156104445750600061043f610ba3565b60ff16115b90505b90565b6000806000610457610ba3565b915060ff8216151561046c57600092506104ed565b60018203905060028160ff1681548110151561048457fe5b9060005260206000209060050201600401548410156104c7576002805460ff83169081106104ae57fe5b90600052602060002090600502016002015492506104ed565b6002805460ff83169081106104d857fe5b90600052602060002090600502016003015492505b5050919050565b6000808315156105075760009150610523565b5082820282848281151561051757fe5b041461051f57fe5b8091505b5092915050565b600080828481151561053857fe5b04949350505050565b600454610554908263ffffffff610d7f16565b600481905560035490111561056857600080fd5b600154600160a060020a03166340c10f19838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156105c757600080fd5b6102c65a03f115156105d857600080fd5b5050506040518051905015156105ea57fe5b5050565b60005433600160a060020a0390811691161461060957600080fd5b6005805460ff1916600190811790915554600160a060020a0316637d64bcb46000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561065f57600080fd5b6102c65a03f1151561067057600080fd5b50505060405180519050151561068257fe5b60018054600160a060020a031690639fe9f6239060405160e060020a63ffffffff84160281529015156004820152602401600060405180830381600087803b15156106cc57600080fd5b6102c65a03f115156106dd57600080fd5b5050600154600054600160a060020a03918216925063f2fde38b911660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561073757600080fd5b6102c65a03f1151561074857600080fd5b505050610753610921565b565b6000805433600160a060020a0390811691161461077157600080fd5b81600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156107c857600080fd5b6102c65a03f115156107d957600080fd5b50505060405180516000549092506105ea9150600160a060020a0384811691168363ffffffff610d8e16565b6000805433600160a060020a0390811691161461082157600080fd5b506000548190600160a060020a038083169163f2fde38b911660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561087857600080fd5b6102c65a03f1151561088957600080fd5b5050505050565b6000805433600160a060020a039081169116146108ac57600080fd5b8584146108b857600080fd5b5060005b63ffffffff81168690101561091857610910878763ffffffff84168181106108e057fe5b90506020020135600160a060020a031686868463ffffffff16818110151561090457fe5b90506020020135610541565b6001016108bc565b50505050505050565b60005433600160a060020a0390811691161461093c57600080fd5b600030600160a060020a031631111561075357600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561075357600080fd5b60045481565b60005433600160a060020a039081169116146109a957600080fd5b6109b38484610541565b50505050565b60005433600160a060020a039081169116146109d457600080fd5b600054600160a060020a0316ff5b6000805433600160a060020a039081169116146109fe57600080fd5b506000198601600060ff82161115610a45578560026001830360ff16815481101515610a2657fe5b90600052602060002090600502016001015411151515610a4557600080fd5b6002546000190160ff82161015610a87576002805460ff6001840116908110610a6a57fe5b6000918252602090912060059091020154851115610a8757600080fd5b8560028260ff16815481101515610a9a57fe5b60009182526020909120600590910201556002805486919060ff8416908110610abf57fe5b9060005260206000209060050201600101819055508360028260ff16815481101515610ae757fe5b9060005260206000209060050201600201819055508260028260ff16815481101515610b0f57fe5b9060005260206000209060050201600301819055508160028260ff16815481101515610b3757fe5b90600052602060002090600502016004018190555050505050505050565b6002805482908110610b6357fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909185565b600054600160a060020a031681565b6000805b60025460ff82161015610c1f576002805460ff8316908110610bc557fe5b90600052602060002090600502016000015442118015610c0757506002805460ff8316908110610bf157fe5b9060005260206000209060050201600101544211155b15610c1757806001019150610c24565b600101610ba7565b600091505b5090565b60055460ff1681565b6000805433600160a060020a03908116911614610c4d57600080fd5b60008411610c5a57600080fd5b5060005b63ffffffff811685901015610ca057610c98868663ffffffff8416818110610c8257fe5b90506020020135600160a060020a031685610541565b600101610c5e565b505050505050565b60005433600160a060020a03908116911614610cc357600080fd5b600160a060020a0381161515610cd857600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610d5e57600080fd5b80600160a060020a0316ff5b60035481565b600154600160a060020a031681565b60008282018381101561051f57fe5b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610deb57600080fd5b6102c65a03f11515610dfc57600080fd5b505050604051805190501515610e0e57fe5b505050565b6000806000808851118015610e29575086518851145b8015610e36575085518851145b8015610e43575084518851145b8015610e50575083518851145b1515610e5b57600080fd5b4292508751610e6b600282610fff565b50600091505b87518260ff161015610ff55760a060405190810160405280898460ff1681518110610e9857fe5b906020019060200201518152602001888460ff1681518110610eb657fe5b906020019060200201518152602001878460ff1681518110610ed457fe5b906020019060200201518152602001868460ff1681518110610ef257fe5b906020019060200201518152602001858460ff1681518110610f1057fe5b9060200190602002015190526002805460ff8516908110610f2d57fe5b9060005260206000209060050201600082015181556020820151816001015560408201518160020155606082015181600301556080820151600490910155506002805460ff8416908110610f7d57fe5b9060005260206000209060050201905080600001548311151515610fa057600080fd5b6001810154815410610fb157600080fd5b600481015460009011610fc357600080fd5b6002805460ff8416908110610fd457fe5b90600052602060002090600502016001015492508180600101925050610e71565b5050505050505050565b815481835581811511610e0e57600083815260209020610e0e916104479160059182028101918502015b80821115610c2457600080825560018201819055600282018190556003820181905560048201556005016110295600a165627a7a723058207f4307f8f83050bbadf54142f4711c5772fd3a18e29a8c4963e6b8882bb8861a0029606060409081526003805460a060020a60ff0219169055805190810160405260048082527f444f43540000000000000000000000000000000000000000000000000000000060208301529080516200005c929160200190620000d4565b5060408051908101604052600981527f446f635461696c6f72000000000000000000000000000000000000000000000060208201526005908051620000a6929160200190620000d4565b5060038054600160a060020a03191633600160a060020a03161790553415620000ce57600080fd5b62000179565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200011757805160ff191683800117855562000147565b8280016001018555821562000147579182015b82811115620001475782518255916020019190600101906200012a565b506200015592915062000159565b5090565b6200017691905b8082111562000155576000815560010162000160565b90565b61158780620001896000396000f3006060604052600436106101505763ffffffff60e060020a60003504166305d2035b811461015d57806306fdde0314610184578063095ea7b31461020e57806316ca3b631461023057806317ffc3201461029557806318160ddd146102b457806323b872dd146102d95780632aed7f3f14610301578063313ce5671461032057806340c10f19146103495780634cd412d51461036b5780635c17f9f41461037e57806366188463146103e357806370a08231146104055780637272ad49146104245780637a341bc7146104895780637d64bcb4146104a85780638da5cb5b146104bb57806395d89b41146104ea5780639f727c27146104fd5780639fe9f62314610510578063a9059cbb14610528578063ab67aa581461054a578063be45fd62146105b6578063c0ee0b8a1461061b578063d73dd6231461064a578063dd62ed3e1461066c578063f2fde38b14610691575b341561015b57600080fd5b005b341561016857600080fd5b6101706106b0565b604051901515815260200160405180910390f35b341561018f57600080fd5b6101976106c0565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101d35780820151838201526020016101bb565b50505050905090810190601f1680156102005780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561021957600080fd5b610170600160a060020a036004351660243561075e565b341561023b57600080fd5b61017060048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506107ca95505050505050565b34156102a057600080fd5b61015b600160a060020a0360043516610888565b34156102bf57600080fd5b6102c761093e565b60405190815260200160405180910390f35b34156102e457600080fd5b610170600160a060020a0360043581169060243516604435610944565b341561030c57600080fd5b61015b600160a060020a03600435166109a4565b341561032b57600080fd5b610333610a31565b60405160ff909116815260200160405180910390f35b341561035457600080fd5b610170600160a060020a0360043516602435610a36565b341561037657600080fd5b610170610b44565b341561038957600080fd5b61017060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610b5495505050505050565b34156103ee57600080fd5b610170600160a060020a0360043516602435610b81565b341561041057600080fd5b6102c7600160a060020a0360043516610c7b565b341561042f57600080fd5b61017060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610c9695505050505050565b341561049457600080fd5b61015b600160a060020a0360043516610cc3565b34156104b357600080fd5b610170610d0d565b34156104c657600080fd5b6104ce610d98565b604051600160a060020a03909116815260200160405180910390f35b34156104f557600080fd5b610197610da7565b341561050857600080fd5b61015b610e12565b341561051b57600080fd5b61015b6004351515610e65565b341561053357600080fd5b610170600160a060020a0360043516602435610eaf565b341561055557600080fd5b610170600160a060020a036004803582169160248035909116916044359160849060643590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f0d95505050505050565b34156105c157600080fd5b61017060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f6f95505050505050565b341561062657600080fd5b61015b60048035600160a060020a0316906024803591604435918201910135610fc7565b341561065557600080fd5b610170600160a060020a0360043516602435610fcc565b341561067757600080fd5b6102c7600160a060020a0360043581169060243516611070565b341561069c57600080fd5b61015b600160a060020a036004351661109b565b60035460a060020a900460ff1681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107565780601f1061072b57610100808354040283529160200191610756565b820191906000526020600020905b81548152906001019060200180831161073957829003601f168201915b505050505081565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600030600160a060020a031684600160a060020a0316141515156107ed57600080fd5b6107f78484610fcc565b5083600160a060020a03168260405180828051906020019080838360005b8381101561082d578082015183820152602001610815565b50505050905090810190601f16801561085a5780820380516001836020036101000a031916815260200191505b5091505060006040518083038160008661646e5a03f1915050151561087e57600080fd5b5060019392505050565b60035460009033600160a060020a039081169116146108a657600080fd5b81600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156108fd57600080fd5b6102c65a03f1151561090e57600080fd5b505050604051805160035490925061093a9150600160a060020a0384811691168363ffffffff61113616565b5050565b60015490565b60065460009060a060020a900460ff168061096d575060065433600160a060020a039081169116145b80610986575060035433600160a060020a039081169116145b151561099157600080fd5b61099c8484846111bb565b949350505050565b60035460009033600160a060020a039081169116146109c257600080fd5b506003548190600160a060020a038083169163f2fde38b911660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610a1957600080fd5b6102c65a03f11515610a2a57600080fd5b5050505050565b600881565b60035460009033600160a060020a03908116911614610a5457600080fd5b60035460a060020a900460ff1615610a6b57600080fd5b600154610a7e908363ffffffff61133b16565b600155600160a060020a038316600090815260208190526040902054610aaa908363ffffffff61133b16565b600160a060020a0384166000818152602081905260409081902092909255907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859084905190815260200160405180910390a2600160a060020a03831660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b60065460a060020a900460ff1681565b600030600160a060020a031684600160a060020a031614151515610b7757600080fd5b6107f7848461075e565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205480831115610bde57600160a060020a033381166000908152600260209081526040808320938816835292905290812055610c15565b610bee818463ffffffff61134a16565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b600160a060020a031660009081526020819052604090205490565b600030600160a060020a031684600160a060020a031614151515610cb957600080fd5b6107f78484610b81565b60035433600160a060020a03908116911614610cde57600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035460009033600160a060020a03908116911614610d2b57600080fd5b60035460a060020a900460ff1615610d4257600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a1790557fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a150600190565b600354600160a060020a031681565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107565780601f1061072b57610100808354040283529160200191610756565b60035433600160a060020a03908116911614610e2d57600080fd5b600354600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515610e6357fe5b565b60035433600160a060020a03908116911614610e8057600080fd5b6006805491151560a060020a0274ff000000000000000000000000000000000000000019909216919091179055565b60065460009060a060020a900460ff1680610ed8575060065433600160a060020a039081169116145b80610ef1575060035433600160a060020a039081169116145b1515610efc57600080fd5b610f06838361135c565b9392505050565b60065460009060a060020a900460ff1680610f36575060065433600160a060020a039081169116145b80610f4f575060035433600160a060020a039081169116145b1515610f5a57600080fd5b610f668585858561146e565b95945050505050565b60065460009060a060020a900460ff1680610f98575060065433600160a060020a039081169116145b80610fb1575060035433600160a060020a039081169116145b1515610fbc57600080fd5b61099c84848461152e565b600080fd5b600160a060020a033381166000908152600260209081526040808320938616835292905290812054611004908363ffffffff61133b16565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a039081169116146110b657600080fd5b600160a060020a03811615156110cb57600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561119357600080fd5b6102c65a03f115156111a457600080fd5b5050506040518051905015156111b657fe5b505050565b6000600160a060020a03831615156111d257600080fd5b600160a060020a0384166000908152602081905260409020548211156111f757600080fd5b600160a060020a038085166000908152600260209081526040808320339094168352929052205482111561122a57600080fd5b600160a060020a038416600090815260208190526040902054611253908363ffffffff61134a16565b600160a060020a038086166000908152602081905260408082209390935590851681522054611288908363ffffffff61133b16565b600160a060020a03808516600090815260208181526040808320949094558783168252600281528382203390931682529190915220546112ce908363ffffffff61134a16565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600082820183811015610f0657fe5b60008282111561135657fe5b50900390565b6000600160a060020a038316151561137357600080fd5b600160a060020a03331660009081526020819052604090205482111561139857600080fd5b600160a060020a0333166000908152602081905260409020546113c1908363ffffffff61134a16565b600160a060020a0333811660009081526020819052604080822093909355908516815220546113f6908363ffffffff61133b16565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b600030600160a060020a031684600160a060020a03161415151561149157600080fd5b61149c8585856111bb565b5083600160a060020a03168260405180828051906020019080838360005b838110156114d25780820151838201526020016114ba565b50505050905090810190601f1680156114ff5780820380516001836020036101000a031916815260200191505b5091505060006040518083038160008661646e5a03f1915050151561152357600080fd5b506001949350505050565b600030600160a060020a031684600160a060020a03161415151561155157600080fd5b6107f7848461135c5600a165627a7a723058202da0d185f6ea047a267c42f2dc461f2ebc5dfeb7f11ee0bcdcd40d7e2a9bafbc002900000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000005a95f100000000000000000000000000000000000000000000000000000000005abecf80000000000000000000000000000000000000000000000000000000005acaad00000000000000000000000000000000000000000000000000000000005ad7dc000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000005abecf80000000000000000000000000000000000000000000000000000000005acaad00000000000000000000000000000000000000000000000000000000005ad7dc00000000000000000000000000000000000000000000000000000000005b0de98000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000db60000000000000000000000000000000000000000000000000000000000000ca80000000000000000000000000000000000000000000000000000000000000b9a0000000000000000000000000000000000000000000000000000000000000b1300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000ec40000000000000000000000000000000000000000000000000000000000000db60000000000000000000000000000000000000000000000000000000000000ca80000000000000000000000000000000000000000000000000000000000000c2100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e80000

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

-----Decoded View---------------
Found 31 constructor arguments :
Arg [0] : 00000000000000000000000000000000000000000000000000b1a2bc2ec50000
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [4] : 00000000000000000000000000000000000000000000000000000000000002a0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000340
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 000000000000000000000000000000000000000000000000000000005a95f100
Arg [8] : 000000000000000000000000000000000000000000000000000000005abecf80
Arg [9] : 000000000000000000000000000000000000000000000000000000005acaad00
Arg [10] : 000000000000000000000000000000000000000000000000000000005ad7dc00
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [12] : 000000000000000000000000000000000000000000000000000000005abecf80
Arg [13] : 000000000000000000000000000000000000000000000000000000005acaad00
Arg [14] : 000000000000000000000000000000000000000000000000000000005ad7dc00
Arg [15] : 000000000000000000000000000000000000000000000000000000005b0de980
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000db6
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000ca8
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000b9a
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000b13
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000ec4
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000db6
Arg [24] : 0000000000000000000000000000000000000000000000000000000000000ca8
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000c21
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [27] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [28] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [29] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [30] : 0000000000000000000000000000000000000000000000008ac7230489e80000


   Swarm Source:
bzzr://2da0d185f6ea047a267c42f2dc461f2ebc5dfeb7f11ee0bcdcd40d7e2a9bafbc

 

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.