ETH Price: $1,950.59 (-0.63%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Edit Contributor...78025682019-05-21 9:54:452476 days ago1558432485IN
Etherisc: Token Sale
0 ETH0.0006656110
Edit Contributor...71557272019-01-31 21:59:052586 days ago1548971945IN
Etherisc: Token Sale
0 ETH0.0068084
Edit Contributor...71557162019-01-31 21:54:542586 days ago1548971694IN
Etherisc: Token Sale
0 ETH0.00684
Edit Contributor...71081462019-01-22 9:20:522595 days ago1548148852IN
Etherisc: Token Sale
0 ETH0.001181857
Edit Contributor...69030542018-12-17 12:06:582631 days ago1545048418IN
Etherisc: Token Sale
0 ETH0.0011649712
Edit Contributor...66974372018-11-13 14:56:562665 days ago1542121016IN
Etherisc: Token Sale
0 ETH0.00033445
Edit Contributor...64519142018-10-04 12:52:212705 days ago1538657541IN
Etherisc: Token Sale
0 ETH0.000694185
Edit Contributor...64329162018-10-01 10:29:592708 days ago1538389799IN
Etherisc: Token Sale
0 ETH0.0033301815
Edit Contributor...62279912018-08-28 9:09:052742 days ago1535447345IN
Etherisc: Token Sale
0 ETH0.001335745
Edit Contributor...61806102018-08-20 9:21:572750 days ago1534756917IN
Etherisc: Token Sale
0 ETH0.000492274
Transfer61612252018-08-17 2:18:212753 days ago1534472301IN
Etherisc: Token Sale
0.001 ETH0.00086141
Edit Contributor...61532982018-08-15 18:13:222755 days ago1534356802IN
Etherisc: Token Sale
0 ETH0.001685248
Edit Contributor...61450362018-08-14 9:03:592756 days ago1534237439IN
Etherisc: Token Sale
0 ETH0.0030233712
Edit Contributor...61053382018-08-07 15:49:102763 days ago1533656950IN
Etherisc: Token Sale
0 ETH0.0403406236
Finalize61047122018-08-07 13:19:302763 days ago1533647970IN
Etherisc: Token Sale
0 ETH0.0014948515
Airdrop For60804012018-08-03 11:03:122767 days ago1533294192IN
Etherisc: Token Sale
0 ETH0.000407815
Airdrop For60803682018-08-03 10:55:072767 days ago1533293707IN
Etherisc: Token Sale
0 ETH0.000440255
Edit Contributor...60752652018-08-02 14:11:152768 days ago1533219075IN
Etherisc: Token Sale
0 ETH0.000315284
Edit Contributor...60748342018-08-02 12:11:422768 days ago1533211902IN
Etherisc: Token Sale
0 ETH0.00069415
Edit Contributor...60633942018-07-31 13:38:172770 days ago1533044297IN
Etherisc: Token Sale
0 ETH0.000666323
Edit Contributor...60633712018-07-31 13:31:462770 days ago1533043906IN
Etherisc: Token Sale
0 ETH0.003968343
Edit Contributor...60633382018-07-31 13:25:302770 days ago1533043530IN
Etherisc: Token Sale
0 ETH0.003965933
Edit Contributor...60633112018-07-31 13:19:122770 days ago1533043152IN
Etherisc: Token Sale
0 ETH0.003964933
Edit Contributor...60632802018-07-31 13:11:352770 days ago1533042695IN
Etherisc: Token Sale
0 ETH0.003965453
Edit Contributor...60632222018-07-31 12:57:042770 days ago1533041824IN
Etherisc: Token Sale
0 ETH0.003966353
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer60163952018-07-23 14:58:292778 days ago1532357909
Etherisc: Token Sale
3 ETH
Transfer60163912018-07-23 14:57:352778 days ago1532357855
Etherisc: Token Sale
20 ETH
Transfer60163702018-07-23 14:50:132778 days ago1532357413
Etherisc: Token Sale
2.99 ETH
Transfer60163572018-07-23 14:47:362778 days ago1532357256
Etherisc: Token Sale
0.294 ETH
Transfer60163552018-07-23 14:46:572778 days ago1532357217
Etherisc: Token Sale
10.41487789 ETH
Transfer60163482018-07-23 14:45:312778 days ago1532357131
Etherisc: Token Sale
50 ETH
Transfer60163452018-07-23 14:44:422778 days ago1532357082
Etherisc: Token Sale
1 ETH
Transfer60163412018-07-23 14:43:462778 days ago1532357026
Etherisc: Token Sale
50 ETH
Transfer60163342018-07-23 14:42:352778 days ago1532356955
Etherisc: Token Sale
0.010115 ETH
Transfer60163252018-07-23 14:40:022778 days ago1532356802
Etherisc: Token Sale
3 ETH
Transfer60163122018-07-23 14:35:182778 days ago1532356518
Etherisc: Token Sale
5 ETH
Transfer60163112018-07-23 14:35:102778 days ago1532356510
Etherisc: Token Sale
10 ETH
Transfer60163072018-07-23 14:33:292778 days ago1532356409
Etherisc: Token Sale
0.02 ETH
Transfer60163072018-07-23 14:33:292778 days ago1532356409
Etherisc: Token Sale
11 ETH
Transfer60162982018-07-23 14:31:482778 days ago1532356308
Etherisc: Token Sale
5.015 ETH
Transfer60162892018-07-23 14:28:522778 days ago1532356132
Etherisc: Token Sale
1.2437 ETH
Transfer60162712018-07-23 14:25:332778 days ago1532355933
Etherisc: Token Sale
0.6 ETH
Transfer60162542018-07-23 14:21:132778 days ago1532355673
Etherisc: Token Sale
5.04 ETH
Transfer60162392018-07-23 14:18:582778 days ago1532355538
Etherisc: Token Sale
0.9937 ETH
Transfer60162382018-07-23 14:18:162778 days ago1532355496
Etherisc: Token Sale
1 ETH
Transfer60162252018-07-23 14:14:242778 days ago1532355264
Etherisc: Token Sale
0.35 ETH
Transfer60162112018-07-23 14:10:212778 days ago1532355021
Etherisc: Token Sale
1.5 ETH
Transfer60162042018-07-23 14:07:062778 days ago1532354826
Etherisc: Token Sale
0.03 ETH
Transfer60161802018-07-23 14:02:262778 days ago1532354546
Etherisc: Token Sale
1 ETH
Transfer60161402018-07-23 13:54:552778 days ago1532354095
Etherisc: Token Sale
0.05 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DipTge

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-06-22
*/

pragma solidity 0.4.24;

// File: contracts/tokensale/DipTgeInterface.sol

contract DipTgeInterface {
    function tokenIsLocked(address _contributor) public constant returns (bool);
}

// File: zeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @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() {
    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) onlyOwner public {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

// File: zeppelin-solidity/contracts/math/SafeMath.sol

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

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

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

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

// File: zeppelin-solidity/contracts/token/ERC20Basic.sol

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

// File: zeppelin-solidity/contracts/token/BasicToken.sol

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

  mapping(address => uint256) balances;

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

    // 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 constant returns (uint256 balance) {
    return balances[_owner];
  }

}

// File: zeppelin-solidity/contracts/token/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public constant 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);
}

// File: zeppelin-solidity/contracts/token/StandardToken.sol

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

    uint256 _allowance = allowed[_from][msg.sender];

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

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = _allowance.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 constant returns (uint256 remaining) {
    return allowed[_owner][_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
   */
  function increaseApproval (address _spender, uint _addedValue)
    returns (bool success) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval (address _spender, uint _subtractedValue)
    returns (bool success) {
    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;
  }

}

// File: zeppelin-solidity/contracts/token/MintableToken.sol

/**
 * @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(0x0, _to, _amount);
    return true;
  }

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

// File: zeppelin-solidity/contracts/lifecycle/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    Unpause();
  }
}

// File: zeppelin-solidity/contracts/token/PausableToken.sol

/**
 * @title Pausable token
 *
 * @dev StandardToken modified with pausable transfers.
 **/

contract PausableToken is StandardToken, Pausable {

  function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {
    return super.transfer(_to, _value);
  }

  function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) {
    return super.transferFrom(_from, _to, _value);
  }

  function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) {
    return super.approve(_spender, _value);
  }

  function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) {
    return super.increaseApproval(_spender, _addedValue);
  }

  function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) {
    return super.decreaseApproval(_spender, _subtractedValue);
  }
}

// File: contracts/token/DipToken.sol

/**
 * @title DIP Token
 * @dev The Decentralized Insurance Platform Token.
 * @author Christoph Mussenbrock
 * @copyright 2017 Etherisc GmbH
 */

pragma solidity 0.4.24;





contract DipToken is PausableToken, MintableToken {

  string public constant name = "Decentralized Insurance Protocol";
  string public constant symbol = "DIP";
  uint256 public constant decimals = 18;
  uint256 public constant MAXIMUM_SUPPLY = 10**9 * 10**18; // 1 Billion 1'000'000'000

  DipTgeInterface public DipTokensale;

  constructor() public {
    DipTokensale = DipTgeInterface(owner);
  }

  modifier shouldNotBeLockedIn(address _contributor) {
    // after LockIntTime2, we don't need to check anymore, and
    // the DipTokensale contract is no longer required.
    require(DipTokensale.tokenIsLocked(_contributor) == false);
    _;
  }

  /**
   * @dev Function to mint tokens
   * @param _to The address that will recieve 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) public returns (bool) {
    if (totalSupply.add(_amount) > MAXIMUM_SUPPLY) {
      return false;
    }

    return super.mint(_to, _amount);
  }

  /**
   * Owner can transfer back tokens which have been sent to this contract by mistake.
   * @param  _token address of token contract of the respective tokens
   * @param  _to where to send the tokens
   */
  function salvageTokens(ERC20Basic _token, address _to) onlyOwner public {
    _token.transfer(_to, _token.balanceOf(this));
  }

  function transferFrom(address _from, address _to, uint256 _value) shouldNotBeLockedIn(_from) public returns (bool) {
      return super.transferFrom(_from, _to, _value);
  }

  function transfer(address to, uint256 value) shouldNotBeLockedIn(msg.sender) public returns (bool) {
      return super.transfer(to, value);
  }
}

// File: zeppelin-solidity/contracts/crowdsale/Crowdsale.sol

/**
 * @title Crowdsale
 * @dev Crowdsale is a base contract for managing a token crowdsale.
 * Crowdsales have a start and end timestamps, where investors can make
 * token purchases and the crowdsale will assign them tokens based
 * on a token per ETH rate. Funds collected are forwarded to a wallet
 * as they arrive.
 */
contract Crowdsale {
  using SafeMath for uint256;

  // The token being sold
  MintableToken public token;

  // start and end timestamps where investments are allowed (both inclusive)
  uint256 public startTime;
  uint256 public endTime;

  // address where funds are collected
  address public wallet;

  // how many token units a buyer gets per wei
  uint256 public rate;

  // amount of raised money in wei
  uint256 public weiRaised;

  /**
   * event for token purchase logging
   * @param purchaser who paid for the tokens
   * @param beneficiary who got the tokens
   * @param value weis paid for purchase
   * @param amount amount of tokens purchased
   */
  event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);


  function Crowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet) {
    require(_startTime >= now);
    require(_endTime >= _startTime);
    require(_rate > 0);
    require(_wallet != 0x0);

    token = createTokenContract();
    startTime = _startTime;
    endTime = _endTime;
    rate = _rate;
    wallet = _wallet;
  }

  // creates the token to be sold.
  // override this method to have crowdsale of a specific mintable token.
  function createTokenContract() internal returns (MintableToken) {
    return new MintableToken();
  }


  // fallback function can be used to buy tokens
  function () payable {
    buyTokens(msg.sender);
  }

  // low level token purchase function
  function buyTokens(address beneficiary) public payable {
    require(beneficiary != 0x0);
    require(validPurchase());

    uint256 weiAmount = msg.value;

    // calculate token amount to be created
    uint256 tokens = weiAmount.mul(rate);

    // update state
    weiRaised = weiRaised.add(weiAmount);

    token.mint(beneficiary, tokens);
    TokenPurchase(msg.sender, beneficiary, weiAmount, tokens);

    forwardFunds();
  }

  // send ether to the fund collection wallet
  // override to create custom fund forwarding mechanisms
  function forwardFunds() internal {
    wallet.transfer(msg.value);
  }

  // @return true if the transaction can buy tokens
  function validPurchase() internal constant returns (bool) {
    bool withinPeriod = now >= startTime && now <= endTime;
    bool nonZeroPurchase = msg.value != 0;
    return withinPeriod && nonZeroPurchase;
  }

  // @return true if crowdsale event has ended
  function hasEnded() public constant returns (bool) {
    return now > endTime;
  }


}

// File: contracts/tokensale/DipWhitelistedCrowdsale.sol

/**
 * @title DIP Token Generating Event
 * @dev The Decentralized Insurance Platform Token.
 * @author Christoph Mussenbrock
 * @copyright 2017 Etherisc GmbH
 */

pragma solidity 0.4.24;





contract DipWhitelistedCrowdsale is Ownable {
  using SafeMath for uint256;

  struct ContributorData {
    uint256 allowance;
    uint256 contributionAmount;
    uint256 tokensIssued;
    bool airdrop;
    uint256 bonus;        // 0 == 0%, 4 == 25%, 10 == 10%
    uint256 lockupPeriod; // 0, 1 or 2 (years)
  }

  mapping (address => ContributorData) public contributorList;

  event Whitelisted(address indexed _contributor, uint256 _allowance, bool _airdrop, uint256 _bonus, uint256 _lockupPeriod);

  /**
   * Push contributor data to the contract before the crowdsale
   */
  function editContributors (
    address[] _contributorAddresses,
    uint256[] _contributorAllowance,
    bool[] _airdrop,
    uint256[] _bonus,
    uint256[] _lockupPeriod
  ) onlyOwner public {
    // Check if input data is consistent
    require(
      _contributorAddresses.length == _contributorAllowance.length &&
      _contributorAddresses.length == _airdrop.length &&
      _contributorAddresses.length == _bonus.length &&
      _contributorAddresses.length == _lockupPeriod.length
    );

    for (uint256 cnt = 0; cnt < _contributorAddresses.length; cnt = cnt.add(1)) {
      require(_bonus[cnt] == 0 || _bonus[cnt] == 4 || _bonus[cnt] == 10);
      require(_lockupPeriod[cnt] <= 2);

      address contributor = _contributorAddresses[cnt];
      contributorList[contributor].allowance = _contributorAllowance[cnt];
      contributorList[contributor].airdrop = _airdrop[cnt];
      contributorList[contributor].bonus = _bonus[cnt];
      contributorList[contributor].lockupPeriod = _lockupPeriod[cnt];

      emit Whitelisted(
        _contributorAddresses[cnt],
        _contributorAllowance[cnt],
        _airdrop[cnt],
        _bonus[cnt],
        _lockupPeriod[cnt]
      );
    }
  }

}

// File: zeppelin-solidity/contracts/crowdsale/FinalizableCrowdsale.sol

/**
 * @title FinalizableCrowdsale
 * @dev Extension of Crowdsale where an owner can do extra work
 * after finishing.
 */
contract FinalizableCrowdsale is Crowdsale, Ownable {
  using SafeMath for uint256;

  bool public isFinalized = false;

  event Finalized();

  /**
   * @dev Must be called after crowdsale ends, to do some extra finalization
   * work. Calls the contract's finalization function.
   */
  function finalize() onlyOwner public {
    require(!isFinalized);
    require(hasEnded());

    finalization();
    Finalized();

    isFinalized = true;
  }

  /**
   * @dev Can be overridden to add finalization logic. The overriding function
   * should call super.finalization() to ensure the chain of finalization is
   * executed entirely.
   */
  function finalization() internal {
  }
}

// File: contracts/tokensale/DipTge.sol

/**
 * @title DIP Token Generating Event
 * @notice The Decentralized Insurance Platform Token.
 * @author Christoph Mussenbrock
 *
 * @copyright 2017 Etherisc GmbH
 */

pragma solidity 0.4.24;







contract DipTge is DipWhitelistedCrowdsale, FinalizableCrowdsale {

  using SafeMath for uint256;

  enum state { pendingStart, priorityPass, crowdsale, crowdsaleEnded }

  uint256 public startOpenPpTime;
  uint256 public hardCap;
  uint256 public lockInTime1; // token lock-in period for team, ECA, US accredited investors
  uint256 public lockInTime2; // token lock-in period for founders
  state public crowdsaleState = state.pendingStart;

  event DipTgeStarted(uint256 _time);
  event CrowdsaleStarted(uint256 _time);
  event HardCapReached(uint256 _time);
  event DipTgeEnded(uint256 _time);
  event TokenAllocated(address _beneficiary, uint256 _amount);

  constructor(
    uint256 _startTime,
    uint256 _startOpenPpTime,
    uint256 _endTime,
    uint256 _lockInTime1,
    uint256 _lockInTime2,
    uint256 _hardCap,
    uint256 _rate,
    address _wallet
  )
    Crowdsale(_startTime, _endTime, _rate, _wallet)
    public
  {
    // Check arguments
    require(_startTime >= block.timestamp);
    require(_startOpenPpTime >= _startTime);
    require(_endTime >= _startOpenPpTime);
    require(_lockInTime1 >= _endTime);
    require(_lockInTime2 > _lockInTime1);
    require(_hardCap > 0);
    require(_rate > 0);
    require(_wallet != 0x0);

    // Set contract fields
    startOpenPpTime = _startOpenPpTime;
    hardCap = _hardCap;
    lockInTime1 = _lockInTime1;
    lockInTime2 = _lockInTime2;
    DipToken(token).pause();
  }

  function setRate(uint256 _rate) onlyOwner public {
    require(crowdsaleState == state.pendingStart);

    rate = _rate;
  }

  function unpauseToken() onlyOwner external {
    DipToken(token).unpause();
  }

  /**
   * Calculate the maximum remaining contribution allowed for an address
   * @param  _contributor the address of the contributor
   * @return maxContribution maximum allowed amount in wei
   */
  function calculateMaxContribution(address _contributor) public constant returns (uint256 _maxContribution) {
    uint256 maxContrib = 0;

    if (crowdsaleState == state.priorityPass) {
      maxContrib = contributorList[_contributor].allowance.sub(contributorList[_contributor].contributionAmount);

      if (maxContrib > hardCap.sub(weiRaised)) {
        maxContrib = hardCap.sub(weiRaised);
      }
    } else if (crowdsaleState == state.crowdsale) {
      if (contributorList[_contributor].allowance > 0) {
        maxContrib = hardCap.sub(weiRaised);
      }
    }

    return maxContrib;
  }

  /**
   * Calculate amount of tokens
   * This is used twice:
   * 1) For calculation of token amount plus optional bonus from wei amount contributed
   * In this case, rate is the defined exchange rate of ETH against DIP.
   * 2) For calculation of token amount plus optional bonus from DIP token amount
   * In the second case, rate == 1 because we have already calculated DIP tokens from RSC amount
   * by applying a factor of 10/32.
   * @param _contributor the address of the contributor
   * @param _amount contribution amount
   * @return _tokens amount of tokens
   */
  function calculateTokens(address _contributor, uint256 _amount, uint256 _rate) public constant returns (uint256 _tokens) {
    uint256 bonus = contributorList[_contributor].bonus;

    assert(bonus == 0 || bonus == 4 || bonus == 10);

    if (bonus > 0) {
      _tokens = _amount.add(_amount.div(bonus)).mul(_rate);
    } else {
      _tokens = _amount.mul(_rate);
    }
  }

  /**
   * Set the current state of the crowdsale.
   */
  function setCrowdsaleState() public {
    if (weiRaised >= hardCap && crowdsaleState != state.crowdsaleEnded) {

      crowdsaleState = state.crowdsaleEnded;
      emit HardCapReached(block.timestamp);
      emit DipTgeEnded(block.timestamp);

    } else if (
      block.timestamp >= startTime &&
      block.timestamp < startOpenPpTime &&
      crowdsaleState != state.priorityPass
    ) {

      crowdsaleState = state.priorityPass;
      emit DipTgeStarted(block.timestamp);

    } else if (
      block.timestamp >= startOpenPpTime &&
      block.timestamp <= endTime &&
      crowdsaleState != state.crowdsale
    ) {

      crowdsaleState = state.crowdsale;
      emit CrowdsaleStarted(block.timestamp);

    } else if (
      crowdsaleState != state.crowdsaleEnded &&
      block.timestamp > endTime
    ) {

      crowdsaleState = state.crowdsaleEnded;
      emit DipTgeEnded(block.timestamp);
    }
  }

  /**
   * The token buying function.
   * @param  _beneficiary  receiver of tokens.
   */
  function buyTokens(address _beneficiary) public payable {
    require(_beneficiary != 0x0);
    require(validPurchase());
    require(contributorList[_beneficiary].airdrop == false);

    setCrowdsaleState();

    uint256 weiAmount = msg.value;
    uint256 maxContrib = calculateMaxContribution(_beneficiary);
    uint256 refund;

    if (weiAmount > maxContrib) {
      refund = weiAmount.sub(maxContrib);
      weiAmount = maxContrib;
    }

    // stop here if transaction does not yield tokens
    require(weiAmount > 0);

    // calculate token amount to be created
    uint256 tokens = calculateTokens(_beneficiary, weiAmount, rate);

    assert(tokens > 0);

    // update state
    weiRaised = weiRaised.add(weiAmount);

    require(token.mint(_beneficiary, tokens));
    emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokens);

    contributorList[_beneficiary].contributionAmount = contributorList[_beneficiary].contributionAmount.add(weiAmount);
    contributorList[_beneficiary].tokensIssued = contributorList[_beneficiary].tokensIssued.add(tokens);

    wallet.transfer(weiAmount);

    if (refund != 0) _beneficiary.transfer(refund);
  }

  /**
   * Check if token is locked.
   */
  function tokenIsLocked(address _contributor) public constant returns (bool) {

    if (block.timestamp < lockInTime1 && contributorList[_contributor].lockupPeriod == 1) {
      return true;
    } else if (block.timestamp < lockInTime2 && contributorList[_contributor].lockupPeriod == 2) {
      return true;
    }

    return false;

  }


  /**
   * Distribute tokens to selected team members & founders.
   * Unit of Allowance is ETH and is converted in number of tokens by multiplying with Rate.
   * This can be called by any whitelisted beneficiary.
   */
  function airdrop() public {
    airdropFor(msg.sender);
  }


  /**
   * Alternatively to airdrop(); tokens can be directly sent to beneficiaries by this function
   * This can be called only once.
   */
  function airdropFor(address _beneficiary) public {
    require(_beneficiary != 0x0);
    require(contributorList[_beneficiary].airdrop == true);
    require(contributorList[_beneficiary].tokensIssued == 0);
    require(contributorList[_beneficiary].allowance > 0);

    setCrowdsaleState();

    require(crowdsaleState == state.crowdsaleEnded);

    uint256 amount = contributorList[_beneficiary].allowance.mul(rate);
    require(token.mint(_beneficiary, amount));
    emit TokenAllocated(_beneficiary, amount);

    contributorList[_beneficiary].tokensIssued = contributorList[_beneficiary].tokensIssued.add(amount);
  }

  /**
   * Creates an new ERC20 Token contract for the DIP Token.
   * Overrides Crowdsale function
   * @return the created token
   */
  function createTokenContract() internal returns (MintableToken) {
    return new DipToken();
  }

  /**
   * Finalize sale and perform cleanup actions.
   */
  function finalization() internal {
    uint256 maxSupply = DipToken(token).MAXIMUM_SUPPLY();
    token.mint(wallet, maxSupply.sub(token.totalSupply())); // Alternativly, hardcode remaining token distribution.
    token.finishMinting();
    token.transferOwnership(owner);
  }

  /**
   * Owner can transfer back tokens which have been sent to this contract by mistake.
   * @param  _token address of token contract of the respective tokens
   * @param  _to where to send the tokens
   */
  function salvageTokens(ERC20Basic _token, address _to) onlyOwner external {
    _token.transfer(_to, _token.balanceOf(this));
  }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"_contributor","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_rate","type":"uint256"}],"name":"calculateTokens","outputs":[{"name":"_tokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rate","type":"uint256"}],"name":"setRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"airdrop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_contributor","type":"address"}],"name":"tokenIsLocked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"airdropFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpauseToken","outputs":[],"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":"_contributor","type":"address"}],"name":"calculateMaxContribution","outputs":[{"name":"_maxContribution","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"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":"","type":"address"}],"name":"contributorList","outputs":[{"name":"allowance","type":"uint256"},{"name":"contributionAmount","type":"uint256"},{"name":"tokensIssued","type":"uint256"},{"name":"airdrop","type":"bool"},{"name":"bonus","type":"uint256"},{"name":"lockupPeriod","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lockInTime2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setCrowdsaleState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_contributorAddresses","type":"address[]"},{"name":"_contributorAllowance","type":"uint256[]"},{"name":"_airdrop","type":"bool[]"},{"name":"_bonus","type":"uint256[]"},{"name":"_lockupPeriod","type":"uint256[]"}],"name":"editContributors","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"}],"name":"salvageTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startOpenPpTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleState","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lockInTime1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"hasEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","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":"_startTime","type":"uint256"},{"name":"_startOpenPpTime","type":"uint256"},{"name":"_endTime","type":"uint256"},{"name":"_lockInTime1","type":"uint256"},{"name":"_lockInTime2","type":"uint256"},{"name":"_hardCap","type":"uint256"},{"name":"_rate","type":"uint256"},{"name":"_wallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_time","type":"uint256"}],"name":"DipTgeStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_time","type":"uint256"}],"name":"CrowdsaleStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_time","type":"uint256"}],"name":"HardCapReached","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_time","type":"uint256"}],"name":"DipTgeEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_beneficiary","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokenAllocated","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_contributor","type":"address"},{"indexed":false,"name":"_allowance","type":"uint256"},{"indexed":false,"name":"_airdrop","type":"bool"},{"indexed":false,"name":"_bonus","type":"uint256"},{"indexed":false,"name":"_lockupPeriod","type":"uint256"}],"name":"Whitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"}]

60806040526008805460ff19908116909155600d805490911690553480156200002757600080fd5b506040516101008062002bb683398101604090815281516020830151918301516060840151608085015160a086015160c087015160e090970151949693949293919290919087868383428410156200007e57600080fd5b838310156200008c57600080fd5b600082116200009a57600080fd5b600160a060020a0381161515620000b057600080fd5b620000c36401000000006200021a810204565b60008054600160a060020a03928316600160a060020a03199182161790915560019590955560029390935560049190915560038054919092169083161790556006805490911633179055428810156200011b57600080fd5b878710156200012957600080fd5b868610156200013757600080fd5b858510156200014557600080fd5b8484116200015257600080fd5b600083116200016057600080fd5b600082116200016e57600080fd5b600160a060020a03811615156200018457600080fd5b6009879055600a839055600b859055600c84905560008054604080517f8456cb590000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692638456cb599260048084019382900301818387803b158015620001f357600080fd5b505af115801562000208573d6000803e3d6000fd5b5050505050505050505050506200025a565b60006200022662000249565b604051809103906000f08015801562000243573d6000803e3d6000fd5b50905090565b6040516110c68062001af083390190565b611886806200026a6000396000f3006080604052600436106101505763ffffffff60e060020a6000350416631adda83a811461015b5780632c4e722e146101945780633197cbb6146101a957806334fcf437146101be5780633884d635146101d65780633e03c84f146101eb5780634042b66f146102205780634bb278f3146102355780634faf94201461024a57806350669a031461026b578063521eb273146102805780635f2536f7146102b157806378e97925146102d25780638d4e4083146102e75780638da5cb5b146102fc57806392acb4d6146103115780639ff1b56f14610365578063b5cb06111461037a578063b70949c91461038f578063bb957493146104c8578063d3087ff5146104ef578063e7bb523314610504578063ebf652cc1461053d578063ec8ac4d814610552578063ecb70fb714610566578063f2fde38b1461057b578063fb86a4041461059c578063fc0c546a146105b1575b610159336105c6565b005b34801561016757600080fd5b50610182600160a060020a0360043516602435604435610875565b60408051918252519081900360200190f35b3480156101a057600080fd5b5061018261090c565b3480156101b557600080fd5b50610182610912565b3480156101ca57600080fd5b50610159600435610918565b3480156101e257600080fd5b50610159610951565b3480156101f757600080fd5b5061020c600160a060020a036004351661095c565b604080519115158252519081900360200190f35b34801561022c57600080fd5b506101826109d9565b34801561024157600080fd5b506101596109df565b34801561025657600080fd5b50610159600160a060020a0360043516610a59565b34801561027757600080fd5b50610159610c73565b34801561028c57600080fd5b50610295610cfe565b60408051600160a060020a039092168252519081900360200190f35b3480156102bd57600080fd5b50610182600160a060020a0360043516610d0d565b3480156102de57600080fd5b50610182610dea565b3480156102f357600080fd5b5061020c610df0565b34801561030857600080fd5b50610295610df9565b34801561031d57600080fd5b50610332600160a060020a0360043516610e08565b604080519687526020870195909552858501939093529015156060850152608084015260a0830152519081900360c00190f35b34801561037157600080fd5b50610182610e41565b34801561038657600080fd5b50610159610e47565b34801561039b57600080fd5b506040805160206004803580820135838102808601850190965280855261015995369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375094975061104b9650505050505050565b3480156104d457600080fd5b50610159600160a060020a0360043581169060243516611324565b3480156104fb57600080fd5b5061018261144a565b34801561051057600080fd5b50610519611450565b6040518082600381111561052957fe5b60ff16815260200191505060405180910390f35b34801561054957600080fd5b50610182611459565b610159600160a060020a03600435166105c6565b34801561057257600080fd5b5061020c61145f565b34801561058757600080fd5b50610159600160a060020a0360043516611467565b3480156105a857600080fd5b506101826114fc565b3480156105bd57600080fd5b50610295611502565b6000808080600160a060020a03851615156105e057600080fd5b6105e8611511565b15156105f357600080fd5b600160a060020a03851660009081526007602052604090206003015460ff161561061c57600080fd5b610624610e47565b34935061063085610d0d565b9250828411156106505761064a848463ffffffff61154116565b91508293505b6000841161065d57600080fd5b61066a8585600454610875565b90506000811161067657fe5b600554610689908563ffffffff61155316565b60055560008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03898116600483015260248201869052915191909216926340c10f1992604480820193602093909283900390910190829087803b1580156106fe57600080fd5b505af1158015610712573d6000803e3d6000fd5b505050506040513d602081101561072857600080fd5b5051151561073557600080fd5b60408051858152602081018390528151600160a060020a0388169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a3600160a060020a0385166000908152600760205260409020600101546107a9908563ffffffff61155316565b600160a060020a03861660009081526007602052604090206001810191909155600201546107dd908263ffffffff61155316565b600160a060020a03808716600090815260076020526040808220600201939093556003549251929091169186156108fc0291879190818181858888f1935050505015801561082f573d6000803e3d6000fd5b50811561086e57604051600160a060020a0386169083156108fc029084906000818181858888f1935050505015801561086c573d6000803e3d6000fd5b505b5050505050565b600160a060020a03831660009081526007602052604081206004015480158061089e5750806004145b806108a9575080600a145b15156108b157fe5b60008111156108f1576108ea836108de6108d1878563ffffffff61156916565b879063ffffffff61155316565b9063ffffffff61158016565b9150610904565b610901848463ffffffff61158016565b91505b509392505050565b60045481565b60025481565b600654600160a060020a0316331461092f57600080fd5b6000600d5460ff16600381111561094257fe5b1461094c57600080fd5b600455565b61095a33610a59565b565b6000600b544210801561098a5750600160a060020a0382166000908152600760205260409020600501546001145b15610997575060016109d4565b600c54421080156109c35750600160a060020a0382166000908152600760205260409020600501546002145b156109d0575060016109d4565b5060005b919050565b60055481565b600654600160a060020a031633146109f657600080fd5b60085460ff1615610a0657600080fd5b610a0e61145f565b1515610a1957600080fd5b610a216115a4565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a16008805460ff19166001179055565b6000600160a060020a0382161515610a7057600080fd5b600160a060020a03821660009081526007602052604090206003015460ff161515600114610a9d57600080fd5b600160a060020a03821660009081526007602052604090206002015415610ac357600080fd5b600160a060020a03821660009081526007602052604081205411610ae657600080fd5b610aee610e47565b6003600d5460ff166003811115610b0157fe5b14610b0b57600080fd5b600454600160a060020a038316600090815260076020526040902054610b369163ffffffff61158016565b60008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301526024820186905291519495509116926340c10f1992604480840193602093929083900390910190829087803b158015610ba957600080fd5b505af1158015610bbd573d6000803e3d6000fd5b505050506040513d6020811015610bd357600080fd5b50511515610be057600080fd5b60408051600160a060020a03841681526020810183905281517f355d073376c545ace08b6df926659a4228940d3214a213a7f300f2ad3ca10ce2929181900390910190a1600160a060020a038216600090815260076020526040902060020154610c50908263ffffffff61155316565b600160a060020a0390921660009081526007602052604090206002019190915550565b600654600160a060020a03163314610c8a57600080fd5b60008054604080517f3f4ba83a0000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692633f4ba83a9260048084019382900301818387803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b50505050565b600354600160a060020a031681565b6000806001600d5460ff166003811115610d2357fe5b1415610d9457600160a060020a038316600090815260076020526040902060018101549054610d579163ffffffff61154116565b9050610d70600554600a5461154190919063ffffffff16565b811115610d8f57600554600a54610d8c9163ffffffff61154116565b90505b610de4565b6002600d5460ff166003811115610da757fe5b1415610de457600160a060020a0383166000908152600760205260408120541115610de457600554600a54610de19163ffffffff61154116565b90505b92915050565b60015481565b60085460ff1681565b600654600160a060020a031681565b60076020526000908152604090208054600182015460028301546003840154600485015460059095015493949293919260ff9091169186565b600c5481565b600a5460055410158015610e6c57506003600d5460ff166003811115610e6957fe5b14155b15610eea57600d805460ff191660031790556040805142815290517f4f27c566270debe1b8a29c9ff8413f6e10dc1757ddfb9e667cc2cc205042946d916020908290030190a16040805142815290517f2f5acfa415b12b6c51cfab9440997eb8391c513f2e8fe90ba8cd19b851facdda9181900360200190a161095a565b6001544210158015610efd575060095442105b8015610f1a57506001600d5460ff166003811115610f1757fe5b14155b15610f6557600d805460ff191660011790556040805142815290517f7ae66aa6794e64276976d872ac7e8376771c141ca007c7d540cf6c3a4e20d9d3916020908290030190a161095a565b6009544210158015610f7957506002544211155b8015610f9657506002600d5460ff166003811115610f9357fe5b14155b15610fe157600d805460ff191660021790556040805142815290517f712173de1d50109191e0d0671c67415bf3d44508558069796106054c5600d501916020908290030190a161095a565b6003600d5460ff166003811115610ff457fe5b14158015611003575060025442115b1561095a57600d805460ff191660031790556040805142815290517f2f5acfa415b12b6c51cfab9440997eb8391c513f2e8fe90ba8cd19b851facdda916020908290030190a1565b6006546000908190600160a060020a0316331461106757600080fd5b85518751148015611079575084518751145b8015611086575083518751145b8015611093575082518751145b151561109e57600080fd5b600091505b865182101561131b5783828151811015156110ba57fe5b90602001906020020151600014806110e9575083828151811015156110db57fe5b906020019060200201516004145b8061110b575083828151811015156110fd57fe5b90602001906020020151600a145b151561111657600080fd5b6002838381518110151561112657fe5b60209081029091010151111561113b57600080fd5b868281518110151561114957fe5b906020019060200201519050858281518110151561116357fe5b6020908102909101810151600160a060020a03831660009081526007909252604090912055845185908390811061119657fe5b602090810291909101810151600160a060020a038316600090815260079092526040909120600301805460ff191691151591909117905583518490839081106111db57fe5b6020908102909101810151600160a060020a03831660009081526007909252604090912060040155825183908390811061121157fe5b6020908102909101810151600160a060020a03831660009081526007909252604090912060050155865187908390811061124757fe5b90602001906020020151600160a060020a03167f77c09a19fcd5375bb199fef6f7ff5c86bb393ad9b0574d097475dbec3263d43d878481518110151561128957fe5b9060200190602002015187858151811015156112a157fe5b9060200190602002015187868151811015156112b957fe5b9060200190602002015187878151811015156112d157fe5b60209081029091018101516040805195865293151591850191909152838301919091526060830152519081900360800190a261131482600163ffffffff61155316565b91506110a3565b50505050505050565b600654600160a060020a0316331461133b57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a0384169163a9059cbb91849184916370a08231916024808201926020929091908290030181600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561142057600080fd5b505af1158015611434573d6000803e3d6000fd5b505050506040513d6020811015610cf857600080fd5b60095481565b600d5460ff1681565b600b5481565b600254421190565b600654600160a060020a0316331461147e57600080fd5b600160a060020a038116151561149357600080fd5b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a5481565b600054600160a060020a031681565b6000806000600154421015801561152a57506002544211155b91505034151581801561153a5750805b9250505090565b60008282111561154d57fe5b50900390565b60008282018381101561156257fe5b9392505050565b600080828481151561157757fe5b04949350505050565b600082820283158061159c575082848281151561159957fe5b04145b151561156257fe5b60008060009054906101000a9004600160a060020a0316600160a060020a0316633d0c49246040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156115f857600080fd5b505af115801561160c573d6000803e3d6000fd5b505050506040513d602081101561162257600080fd5b505160008054600354604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051949550600160a060020a03928316946340c10f199492909316926116d49286926318160ddd9260048083019360209383900390910190829087803b15801561169b57600080fd5b505af11580156116af573d6000803e3d6000fd5b505050506040513d60208110156116c557600080fd5b5051859063ffffffff61154116565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561172657600080fd5b505af115801561173a573d6000803e3d6000fd5b505050506040513d602081101561175057600080fd5b505060008054604080517f7d64bcb40000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692637d64bcb4926004808401936020939083900390910190829087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b505050506040513d60208110156117dd57600080fd5b505060008054600654604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169263f2fde38b926024808201939182900301818387803b15801561184657600080fd5b505af115801561086e573d6000803e3d6000fd00a165627a7a72305820ab1d48b0ec09c9f04b81174885703b2beb0971d4e215cfcad8a7fd93a2fba2f1002960806040526003805460a060020a61ffff021916905534801561002157600080fd5b5060038054600160a060020a031990811633179182905560048054909116600160a060020a0392909216919091179055611066806100606000396000f3006080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166305d2035b811461012c57806306fdde0314610155578063095ea7b3146101df57806318160ddd1461020357806323b872dd1461022a578063313ce567146102545780633d0c4924146102695780633f4ba83a1461027e57806340c10f19146102955780635c975abb146102b957806366188463146102ce57806370a08231146102f25780637d64bcb4146103135780638456cb59146103285780638da5cb5b1461033d57806395d89b411461036e578063a9059cbb14610383578063bb957493146103a7578063d73dd623146103ce578063dd62ed3e146103f2578063e63b6b8714610419578063f2fde38b1461042e575b600080fd5b34801561013857600080fd5b5061014161044f565b604080519115158252519081900360200190f35b34801561016157600080fd5b5061016a610471565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101a457818101518382015260200161018c565b50505050905090810190601f1680156101d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101eb57600080fd5b50610141600160a060020a03600435166024356104aa565b34801561020f57600080fd5b506102186104d7565b60408051918252519081900360200190f35b34801561023657600080fd5b50610141600160a060020a03600435811690602435166044356104dd565b34801561026057600080fd5b50610218610593565b34801561027557600080fd5b50610218610598565b34801561028a57600080fd5b506102936105a8565b005b3480156102a157600080fd5b50610141600160a060020a0360043516602435610620565b3480156102c557600080fd5b5061014161065a565b3480156102da57600080fd5b50610141600160a060020a036004351660243561066a565b3480156102fe57600080fd5b50610218600160a060020a036004351661068e565b34801561031f57600080fd5b506101416106a9565b34801561033457600080fd5b50610293610729565b34801561034957600080fd5b506103526107a6565b60408051600160a060020a039092168252519081900360200190f35b34801561037a57600080fd5b5061016a6107b5565b34801561038f57600080fd5b50610141600160a060020a03600435166024356107ec565b3480156103b357600080fd5b50610293600160a060020a036004358116906024351661089c565b3480156103da57600080fd5b50610141600160a060020a03600435166024356109e1565b3480156103fe57600080fd5b50610218600160a060020a0360043581169060243516610a05565b34801561042557600080fd5b50610352610a30565b34801561043a57600080fd5b50610293600160a060020a0360043516610a3f565b6003547501000000000000000000000000000000000000000000900460ff1681565b6040805190810160405280602081526020017f446563656e7472616c697a656420496e737572616e63652050726f746f636f6c81525081565b60035460009060a060020a900460ff16156104c457600080fd5b6104ce8383610ad4565b90505b92915050565b60005481565b60048054604080517f3e03c84f000000000000000000000000000000000000000000000000000000008152600160a060020a0380881694820194909452905160009387931691633e03c84f91602480830192602092919082900301818887803b15801561054957600080fd5b505af115801561055d573d6000803e3d6000fd5b505050506040513d602081101561057357600080fd5b50511561057f57600080fd5b61058a858585610b3a565b95945050505050565b601281565b6b033b2e3c9fd0803ce800000081565b600354600160a060020a031633146105bf57600080fd5b60035460a060020a900460ff1615156105d757600080fd5b6003805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600080546b033b2e3c9fd0803ce800000090610642908463ffffffff610b5f16565b1115610650575060006104d1565b6104ce8383610b75565b60035460a060020a900460ff1681565b60035460009060a060020a900460ff161561068457600080fd5b6104ce8383610c92565b600160a060020a031660009081526001602052604090205490565b600354600090600160a060020a031633146106c357600080fd5b6003805475ff000000000000000000000000000000000000000000191675010000000000000000000000000000000000000000001790556040517fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0890600090a150600190565b600354600160a060020a0316331461074057600080fd5b60035460a060020a900460ff161561075757600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600354600160a060020a031681565b60408051808201909152600381527f4449500000000000000000000000000000000000000000000000000000000000602082015281565b60048054604080517f3e03c84f00000000000000000000000000000000000000000000000000000000815233938101849052905160009392600160a060020a031691633e03c84f91602480830192602092919082900301818887803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b505050506040513d602081101561087e57600080fd5b50511561088a57600080fd5b6108948484610d82565b949350505050565b600354600160a060020a031633146108b357600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a0384169163a9059cbb91849184916370a08231916024808201926020929091908290030181600087803b15801561091f57600080fd5b505af1158015610933573d6000803e3d6000fd5b505050506040513d602081101561094957600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156109b157600080fd5b505af11580156109c5573d6000803e3d6000fd5b505050506040513d60208110156109db57600080fd5b50505050565b60035460009060a060020a900460ff16156109fb57600080fd5b6104ce8383610da6565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600454600160a060020a031681565b600354600160a060020a03163314610a5657600080fd5b600160a060020a0381161515610a6b57600080fd5b600354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b336000818152600260209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035460009060a060020a900460ff1615610b5457600080fd5b610894848484610e3f565b600082820183811015610b6e57fe5b9392505050565b600354600090600160a060020a03163314610b8f57600080fd5b6003547501000000000000000000000000000000000000000000900460ff1615610bb857600080fd5b600054610bcb908363ffffffff610b5f16565b6000908155600160a060020a038416815260016020526040902054610bf6908363ffffffff610b5f16565b600160a060020a038416600081815260016020908152604091829020939093558051858152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a2604080518381529051600160a060020a038516916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350600192915050565b336000908152600260209081526040808320600160a060020a038616845290915281205480831115610ce757336000908152600260209081526040808320600160a060020a0388168452909152812055610d1c565b610cf7818463ffffffff610f6116565b336000908152600260209081526040808320600160a060020a03891684529091529020555b336000818152600260209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60035460009060a060020a900460ff1615610d9c57600080fd5b6104ce8383610f73565b336000908152600260209081526040808320600160a060020a0386168452909152812054610dda908363ffffffff610b5f16565b336000818152600260209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600080600160a060020a0384161515610e5757600080fd5b50600160a060020a03841660008181526002602090815260408083203384528252808320549383526001909152902054610e97908463ffffffff610f6116565b600160a060020a038087166000908152600160205260408082209390935590861681522054610ecc908463ffffffff610b5f16565b600160a060020a038516600090815260016020526040902055610ef5818463ffffffff610f6116565b600160a060020a03808716600081815260026020908152604080832033845282529182902094909455805187815290519288169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3506001949350505050565b600082821115610f6d57fe5b50900390565b6000600160a060020a0383161515610f8a57600080fd5b33600090815260016020526040902054610faa908363ffffffff610f6116565b3360009081526001602052604080822092909255600160a060020a03851681522054610fdc908363ffffffff610b5f16565b600160a060020a0384166000818152600160209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3506001929150505600a165627a7a72305820dcbfff5de4a3b0f5ca6944f78565e29b6302d9417dd58bc7746af97037c3c3700029000000000000000000000000000000000000000000000000000000005b310370000000000000000000000000000000000000000000000000000000005b379af0000000000000000000000000000000000000000000000000000000005b55ed70000000000000000000000000000000000000000000000000000000005d3720f0000000000000000000000000000000000000000000000000000000005f19a5f0000000000000000000000000000000000000000000000cb49b44ba602d80000000000000000000000000000000000000000000000000000000000000000013880000000000000000000000005c3095c53743b8857d6e1d107e5014cdc7b44efc

Deployed Bytecode

0x6080604052600436106101505763ffffffff60e060020a6000350416631adda83a811461015b5780632c4e722e146101945780633197cbb6146101a957806334fcf437146101be5780633884d635146101d65780633e03c84f146101eb5780634042b66f146102205780634bb278f3146102355780634faf94201461024a57806350669a031461026b578063521eb273146102805780635f2536f7146102b157806378e97925146102d25780638d4e4083146102e75780638da5cb5b146102fc57806392acb4d6146103115780639ff1b56f14610365578063b5cb06111461037a578063b70949c91461038f578063bb957493146104c8578063d3087ff5146104ef578063e7bb523314610504578063ebf652cc1461053d578063ec8ac4d814610552578063ecb70fb714610566578063f2fde38b1461057b578063fb86a4041461059c578063fc0c546a146105b1575b610159336105c6565b005b34801561016757600080fd5b50610182600160a060020a0360043516602435604435610875565b60408051918252519081900360200190f35b3480156101a057600080fd5b5061018261090c565b3480156101b557600080fd5b50610182610912565b3480156101ca57600080fd5b50610159600435610918565b3480156101e257600080fd5b50610159610951565b3480156101f757600080fd5b5061020c600160a060020a036004351661095c565b604080519115158252519081900360200190f35b34801561022c57600080fd5b506101826109d9565b34801561024157600080fd5b506101596109df565b34801561025657600080fd5b50610159600160a060020a0360043516610a59565b34801561027757600080fd5b50610159610c73565b34801561028c57600080fd5b50610295610cfe565b60408051600160a060020a039092168252519081900360200190f35b3480156102bd57600080fd5b50610182600160a060020a0360043516610d0d565b3480156102de57600080fd5b50610182610dea565b3480156102f357600080fd5b5061020c610df0565b34801561030857600080fd5b50610295610df9565b34801561031d57600080fd5b50610332600160a060020a0360043516610e08565b604080519687526020870195909552858501939093529015156060850152608084015260a0830152519081900360c00190f35b34801561037157600080fd5b50610182610e41565b34801561038657600080fd5b50610159610e47565b34801561039b57600080fd5b506040805160206004803580820135838102808601850190965280855261015995369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375094975061104b9650505050505050565b3480156104d457600080fd5b50610159600160a060020a0360043581169060243516611324565b3480156104fb57600080fd5b5061018261144a565b34801561051057600080fd5b50610519611450565b6040518082600381111561052957fe5b60ff16815260200191505060405180910390f35b34801561054957600080fd5b50610182611459565b610159600160a060020a03600435166105c6565b34801561057257600080fd5b5061020c61145f565b34801561058757600080fd5b50610159600160a060020a0360043516611467565b3480156105a857600080fd5b506101826114fc565b3480156105bd57600080fd5b50610295611502565b6000808080600160a060020a03851615156105e057600080fd5b6105e8611511565b15156105f357600080fd5b600160a060020a03851660009081526007602052604090206003015460ff161561061c57600080fd5b610624610e47565b34935061063085610d0d565b9250828411156106505761064a848463ffffffff61154116565b91508293505b6000841161065d57600080fd5b61066a8585600454610875565b90506000811161067657fe5b600554610689908563ffffffff61155316565b60055560008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03898116600483015260248201869052915191909216926340c10f1992604480820193602093909283900390910190829087803b1580156106fe57600080fd5b505af1158015610712573d6000803e3d6000fd5b505050506040513d602081101561072857600080fd5b5051151561073557600080fd5b60408051858152602081018390528151600160a060020a0388169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a3600160a060020a0385166000908152600760205260409020600101546107a9908563ffffffff61155316565b600160a060020a03861660009081526007602052604090206001810191909155600201546107dd908263ffffffff61155316565b600160a060020a03808716600090815260076020526040808220600201939093556003549251929091169186156108fc0291879190818181858888f1935050505015801561082f573d6000803e3d6000fd5b50811561086e57604051600160a060020a0386169083156108fc029084906000818181858888f1935050505015801561086c573d6000803e3d6000fd5b505b5050505050565b600160a060020a03831660009081526007602052604081206004015480158061089e5750806004145b806108a9575080600a145b15156108b157fe5b60008111156108f1576108ea836108de6108d1878563ffffffff61156916565b879063ffffffff61155316565b9063ffffffff61158016565b9150610904565b610901848463ffffffff61158016565b91505b509392505050565b60045481565b60025481565b600654600160a060020a0316331461092f57600080fd5b6000600d5460ff16600381111561094257fe5b1461094c57600080fd5b600455565b61095a33610a59565b565b6000600b544210801561098a5750600160a060020a0382166000908152600760205260409020600501546001145b15610997575060016109d4565b600c54421080156109c35750600160a060020a0382166000908152600760205260409020600501546002145b156109d0575060016109d4565b5060005b919050565b60055481565b600654600160a060020a031633146109f657600080fd5b60085460ff1615610a0657600080fd5b610a0e61145f565b1515610a1957600080fd5b610a216115a4565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a16008805460ff19166001179055565b6000600160a060020a0382161515610a7057600080fd5b600160a060020a03821660009081526007602052604090206003015460ff161515600114610a9d57600080fd5b600160a060020a03821660009081526007602052604090206002015415610ac357600080fd5b600160a060020a03821660009081526007602052604081205411610ae657600080fd5b610aee610e47565b6003600d5460ff166003811115610b0157fe5b14610b0b57600080fd5b600454600160a060020a038316600090815260076020526040902054610b369163ffffffff61158016565b60008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301526024820186905291519495509116926340c10f1992604480840193602093929083900390910190829087803b158015610ba957600080fd5b505af1158015610bbd573d6000803e3d6000fd5b505050506040513d6020811015610bd357600080fd5b50511515610be057600080fd5b60408051600160a060020a03841681526020810183905281517f355d073376c545ace08b6df926659a4228940d3214a213a7f300f2ad3ca10ce2929181900390910190a1600160a060020a038216600090815260076020526040902060020154610c50908263ffffffff61155316565b600160a060020a0390921660009081526007602052604090206002019190915550565b600654600160a060020a03163314610c8a57600080fd5b60008054604080517f3f4ba83a0000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692633f4ba83a9260048084019382900301818387803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b50505050565b600354600160a060020a031681565b6000806001600d5460ff166003811115610d2357fe5b1415610d9457600160a060020a038316600090815260076020526040902060018101549054610d579163ffffffff61154116565b9050610d70600554600a5461154190919063ffffffff16565b811115610d8f57600554600a54610d8c9163ffffffff61154116565b90505b610de4565b6002600d5460ff166003811115610da757fe5b1415610de457600160a060020a0383166000908152600760205260408120541115610de457600554600a54610de19163ffffffff61154116565b90505b92915050565b60015481565b60085460ff1681565b600654600160a060020a031681565b60076020526000908152604090208054600182015460028301546003840154600485015460059095015493949293919260ff9091169186565b600c5481565b600a5460055410158015610e6c57506003600d5460ff166003811115610e6957fe5b14155b15610eea57600d805460ff191660031790556040805142815290517f4f27c566270debe1b8a29c9ff8413f6e10dc1757ddfb9e667cc2cc205042946d916020908290030190a16040805142815290517f2f5acfa415b12b6c51cfab9440997eb8391c513f2e8fe90ba8cd19b851facdda9181900360200190a161095a565b6001544210158015610efd575060095442105b8015610f1a57506001600d5460ff166003811115610f1757fe5b14155b15610f6557600d805460ff191660011790556040805142815290517f7ae66aa6794e64276976d872ac7e8376771c141ca007c7d540cf6c3a4e20d9d3916020908290030190a161095a565b6009544210158015610f7957506002544211155b8015610f9657506002600d5460ff166003811115610f9357fe5b14155b15610fe157600d805460ff191660021790556040805142815290517f712173de1d50109191e0d0671c67415bf3d44508558069796106054c5600d501916020908290030190a161095a565b6003600d5460ff166003811115610ff457fe5b14158015611003575060025442115b1561095a57600d805460ff191660031790556040805142815290517f2f5acfa415b12b6c51cfab9440997eb8391c513f2e8fe90ba8cd19b851facdda916020908290030190a1565b6006546000908190600160a060020a0316331461106757600080fd5b85518751148015611079575084518751145b8015611086575083518751145b8015611093575082518751145b151561109e57600080fd5b600091505b865182101561131b5783828151811015156110ba57fe5b90602001906020020151600014806110e9575083828151811015156110db57fe5b906020019060200201516004145b8061110b575083828151811015156110fd57fe5b90602001906020020151600a145b151561111657600080fd5b6002838381518110151561112657fe5b60209081029091010151111561113b57600080fd5b868281518110151561114957fe5b906020019060200201519050858281518110151561116357fe5b6020908102909101810151600160a060020a03831660009081526007909252604090912055845185908390811061119657fe5b602090810291909101810151600160a060020a038316600090815260079092526040909120600301805460ff191691151591909117905583518490839081106111db57fe5b6020908102909101810151600160a060020a03831660009081526007909252604090912060040155825183908390811061121157fe5b6020908102909101810151600160a060020a03831660009081526007909252604090912060050155865187908390811061124757fe5b90602001906020020151600160a060020a03167f77c09a19fcd5375bb199fef6f7ff5c86bb393ad9b0574d097475dbec3263d43d878481518110151561128957fe5b9060200190602002015187858151811015156112a157fe5b9060200190602002015187868151811015156112b957fe5b9060200190602002015187878151811015156112d157fe5b60209081029091018101516040805195865293151591850191909152838301919091526060830152519081900360800190a261131482600163ffffffff61155316565b91506110a3565b50505050505050565b600654600160a060020a0316331461133b57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a0384169163a9059cbb91849184916370a08231916024808201926020929091908290030181600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561142057600080fd5b505af1158015611434573d6000803e3d6000fd5b505050506040513d6020811015610cf857600080fd5b60095481565b600d5460ff1681565b600b5481565b600254421190565b600654600160a060020a0316331461147e57600080fd5b600160a060020a038116151561149357600080fd5b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a5481565b600054600160a060020a031681565b6000806000600154421015801561152a57506002544211155b91505034151581801561153a5750805b9250505090565b60008282111561154d57fe5b50900390565b60008282018381101561156257fe5b9392505050565b600080828481151561157757fe5b04949350505050565b600082820283158061159c575082848281151561159957fe5b04145b151561156257fe5b60008060009054906101000a9004600160a060020a0316600160a060020a0316633d0c49246040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156115f857600080fd5b505af115801561160c573d6000803e3d6000fd5b505050506040513d602081101561162257600080fd5b505160008054600354604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051949550600160a060020a03928316946340c10f199492909316926116d49286926318160ddd9260048083019360209383900390910190829087803b15801561169b57600080fd5b505af11580156116af573d6000803e3d6000fd5b505050506040513d60208110156116c557600080fd5b5051859063ffffffff61154116565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561172657600080fd5b505af115801561173a573d6000803e3d6000fd5b505050506040513d602081101561175057600080fd5b505060008054604080517f7d64bcb40000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692637d64bcb4926004808401936020939083900390910190829087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b505050506040513d60208110156117dd57600080fd5b505060008054600654604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169263f2fde38b926024808201939182900301818387803b15801561184657600080fd5b505af115801561086e573d6000803e3d6000fd00a165627a7a72305820ab1d48b0ec09c9f04b81174885703b2beb0971d4e215cfcad8a7fd93a2fba2f10029

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

000000000000000000000000000000000000000000000000000000005b310370000000000000000000000000000000000000000000000000000000005b379af0000000000000000000000000000000000000000000000000000000005b55ed70000000000000000000000000000000000000000000000000000000005d3720f0000000000000000000000000000000000000000000000000000000005f19a5f0000000000000000000000000000000000000000000000cb49b44ba602d80000000000000000000000000000000000000000000000000000000000000000013880000000000000000000000005c3095c53743b8857d6e1d107e5014cdc7b44efc

-----Decoded View---------------
Arg [0] : _startTime (uint256): 1529938800
Arg [1] : _startOpenPpTime (uint256): 1530370800
Arg [2] : _endTime (uint256): 1532358000
Arg [3] : _lockInTime1 (uint256): 1563894000
Arg [4] : _lockInTime2 (uint256): 1595516400
Arg [5] : _hardCap (uint256): 60000000000000000000000
Arg [6] : _rate (uint256): 5000
Arg [7] : _wallet (address): 0x5C3095c53743b8857D6E1D107e5014cDC7B44efc

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000005b310370
Arg [1] : 000000000000000000000000000000000000000000000000000000005b379af0
Arg [2] : 000000000000000000000000000000000000000000000000000000005b55ed70
Arg [3] : 000000000000000000000000000000000000000000000000000000005d3720f0
Arg [4] : 000000000000000000000000000000000000000000000000000000005f19a5f0
Arg [5] : 000000000000000000000000000000000000000000000cb49b44ba602d800000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [7] : 0000000000000000000000005c3095c53743b8857d6e1d107e5014cdc7b44efc


Swarm Source

bzzr://dcbfff5de4a3b0f5ca6944f78565e29b6302d9417dd58bc7746af97037c3c370

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.