ETH Price: $2,402.85 (-0.79%)

Contract

0x85EafC29690c6D64C8513499B6Bea8864fBEb6D7
 
Transaction Hash
Method
Block
From
To
Transfer Token114625162020-12-16 6:34:491368 days ago1608100489IN
0x85EafC29...64fBEb6D7
0 ETH0.0025462890
Change Wallet114621462020-12-16 5:08:371368 days ago1608095317IN
0x85EafC29...64fBEb6D7
0 ETH0.0026326890
_withdraw All Fu...114621072020-12-16 4:59:261368 days ago1608094766IN
0x85EafC29...64fBEb6D7
0 ETH0.0024723177
_withdraw Wei106976862020-08-20 14:48:501486 days ago1597934930IN
0x85EafC29...64fBEb6D7
0 ETH0.00379548120
_withdraw Wei106976852020-08-20 14:48:261486 days ago1597934906IN
0x85EafC29...64fBEb6D7
0 ETH0.00379548120
_withdraw Wei106976822020-08-20 14:47:591486 days ago1597934879IN
0x85EafC29...64fBEb6D7
0 ETH0.00379548120
_withdraw Wei106976622020-08-20 14:44:001486 days ago1597934640IN
0x85EafC29...64fBEb6D7
0 ETH0.00379548120
Transfer Token106976212020-08-20 14:36:461486 days ago1597934206IN
0x85EafC29...64fBEb6D7
0 ETH0.00519504120
_withdraw Wei106976212020-08-20 14:36:461486 days ago1597934206IN
0x85EafC29...64fBEb6D7
0 ETH0.00379548120
_withdraw Wei106973322020-08-20 13:28:081486 days ago1597930088IN
0x85EafC29...64fBEb6D7
0 ETH0.00622919110
Change Wallet106973022020-08-20 13:22:281486 days ago1597929748IN
0x85EafC29...64fBEb6D7
0 ETH0.00318846109
Change Wallet106972892020-08-20 13:19:021486 days ago1597929542IN
0x85EafC29...64fBEb6D7
0 ETH0.00318846109
_withdraw Wei99141482020-04-21 6:13:121607 days ago1587449592IN
0x85EafC29...64fBEb6D7
0 ETH0.00030399.6
_withdraw Wei99141472020-04-21 6:13:071607 days ago1587449587IN
0x85EafC29...64fBEb6D7
0 ETH0.00030399.6
_withdraw Wei99141432020-04-21 6:11:441607 days ago1587449504IN
0x85EafC29...64fBEb6D7
0 ETH0.00030399.6
_withdraw Wei99141382020-04-21 6:10:581607 days ago1587449458IN
0x85EafC29...64fBEb6D7
0 ETH0.00030399.6
Change Wallet99141342020-04-21 6:09:431607 days ago1587449383IN
0x85EafC29...64fBEb6D7
0 ETH0.000280819.6
Transfer Token99136082020-04-21 4:12:411607 days ago1587442361IN
0x85EafC29...64fBEb6D7
0 ETH0.000363558.4
_withdraw Wei99135742020-04-21 4:05:291607 days ago1587441929IN
0x85EafC29...64fBEb6D7
0 ETH0.000252938
Change Wallet99135642020-04-21 4:02:311607 days ago1587441751IN
0x85EafC29...64fBEb6D7
0 ETH0.000234018
_withdraw Wei98584922020-04-12 16:08:411616 days ago1586707721IN
0x85EafC29...64fBEb6D7
0 ETH0.000189346
Transfer Token96508752020-03-11 14:55:411648 days ago1583938541IN
0x85EafC29...64fBEb6D7
0 ETH0.000346248
_withdraw Wei96503852020-03-11 13:09:231648 days ago1583932163IN
0x85EafC29...64fBEb6D7
0 ETH0.0003162910
_withdraw Wei96503832020-03-11 13:08:291648 days ago1583932109IN
0x85EafC29...64fBEb6D7
0 ETH0.0005662910
Change Wallet96503662020-03-11 13:03:551648 days ago1583931835IN
0x85EafC29...64fBEb6D7
0 ETH0.0002925210
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
114621072020-12-16 4:59:261368 days ago1608094766
0x85EafC29...64fBEb6D7
34.71116924 ETH
106976862020-08-20 14:48:501486 days ago1597934930
0x85EafC29...64fBEb6D7
1.02540232 ETH
106976852020-08-20 14:48:261486 days ago1597934906
0x85EafC29...64fBEb6D7
1.02540232 ETH
106976822020-08-20 14:47:591486 days ago1597934879
0x85EafC29...64fBEb6D7
1.02540232 ETH
106976622020-08-20 14:44:001486 days ago1597934640
0x85EafC29...64fBEb6D7
1.02540232 ETH
106976212020-08-20 14:36:461486 days ago1597934206
0x85EafC29...64fBEb6D7
1.02540232 ETH
106973322020-08-20 13:28:081486 days ago1597930088
0x85EafC29...64fBEb6D7
1.02540232 ETH
99141482020-04-21 6:13:121607 days ago1587449592
0x85EafC29...64fBEb6D7
2.06208 ETH
99141472020-04-21 6:13:071607 days ago1587449587
0x85EafC29...64fBEb6D7
2.06208 ETH
99141432020-04-21 6:11:441607 days ago1587449504
0x85EafC29...64fBEb6D7
1 ETH
99141382020-04-21 6:10:581607 days ago1587449458
0x85EafC29...64fBEb6D7
1 ETH
99135742020-04-21 4:05:291607 days ago1587441929
0x85EafC29...64fBEb6D7
10 ETH
98584922020-04-12 16:08:411616 days ago1586707721
0x85EafC29...64fBEb6D7
100 wei
96503852020-03-11 13:09:231648 days ago1583932163
0x85EafC29...64fBEb6D7
4.291 ETH
96503832020-03-11 13:08:291648 days ago1583932109
0x85EafC29...64fBEb6D7
0.3659 ETH
95212632020-02-20 16:44:191668 days ago1582217059
0x85EafC29...64fBEb6D7
3.52 ETH
95211602020-02-20 16:20:361668 days ago1582215636
0x85EafC29...64fBEb6D7
3.92 ETH
95211292020-02-20 16:14:541668 days ago1582215294
0x85EafC29...64fBEb6D7
1 ETH
95210762020-02-20 16:04:111668 days ago1582214651
0x85EafC29...64fBEb6D7
1.33 ETH
95210732020-02-20 16:03:311668 days ago1582214611
0x85EafC29...64fBEb6D7
2.94 ETH
93616152020-01-27 3:35:171692 days ago1580096117
0x85EafC29...64fBEb6D7
2.2 ETH
93552592020-01-26 4:15:531693 days ago1580012153
0x85EafC29...64fBEb6D7
2.2 ETH
93552262020-01-26 4:08:271693 days ago1580011707
0x85EafC29...64fBEb6D7
1.77 ETH
93552142020-01-26 4:06:151693 days ago1580011575
0x85EafC29...64fBEb6D7
1.77 ETH
93504602020-01-25 10:28:451694 days ago1579948125
0x85EafC29...64fBEb6D7
0.02 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Crowdsale

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-05-29
*/

pragma solidity ^0.4.23;

// File: contracts/OpenZeppelin/ERC20Basic.sol

/**
 * @title ERC20
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20 {
    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);
}

// File: contracts/OpenZeppelin/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
*/

library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  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;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  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;
  }

  /**
  * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

/**
 * @title Crowdsale
 * @dev Crowdsale is a base contract for managing a token crowdsale,
 * allowing investors to purchase tokens with ether.
 */

contract Crowdsale {
  using SafeMath for uint256;

  // The token being sold
  ERC20 public token;

  // Address where funds are collected
  address public wallet;

  // Address of the contract owner
  address public owner;

  // The rate of tokens per ether. Only applied for the first tier, the first
  // 150 million tokens sold
  uint256 public rate;

  // Amount of wei raised
  uint256 public weiRaised;

  // Amount of sold tokens
  uint256 public soldTokens;

  // Amount of tokens processed
  uint256 public processedTokens;

  // Amount of unsold tokens to burn
  uint256 public unSoldTokens;

  // Amount of locked tokens
  uint256 public lockedTokens;

  // Amount of alocated tokens
  uint256 public allocatedTokens;

  // Amount of distributed tokens
  uint256 public distributedTokens;

  // ICO state paused or not
  bool public paused = false;

  // Minimal amount to exchange in ETH
  uint256 public minPurchase = 53 finney;

  // Keeping track of current round
  uint256 public currentRound;

  // We can only sell maximum total amount- 1,000,000,000 tokens during the ICO
  uint256 public constant maxTokensRaised = 1000000000E4;

  // Timestamp when the crowdsale starts 01/01/2018 @ 00:00am (UTC);
  uint256 public startTime = 1527703200;

  // Timestamp when the initial round ends (UTC);
  uint256 public currentRoundStart = startTime;

  // Timestamp when the crowdsale ends 07/07/2018 @ 00:00am (UTC);
  uint256 public endTime = 1532386740;

  // Timestamp when locked tokens become unlocked 21/09/2018 @ 00:00am (UTC);
  uint256 public lockedTill = 1542931200;

  // Timestamp when approved tokens become available 21/09/2018 @ 00:00am (UTC);
  uint256 public approvedTill = 1535328000;

  // How much each user paid for the crowdsale
  mapping(address => uint256) public crowdsaleBalances;

  // How many tokens each user got for the crowdsale
  mapping(address => uint256) public tokensBought;

  // How many tokens each user got for the crowdsale as bonus
  mapping(address => uint256) public bonusBalances;

  // How many tokens each user got locked
  mapping(address => uint256) public lockedBalances;

  // How many tokens each user got pre-delivered
  mapping(address => uint256) public allocatedBalances;

  // If user is approved to withdraw tokens
  mapping(address => bool) public approved;

  // How many tokens each user got distributed
  mapping(address => uint256) public distributedBalances;

  // Bonus levels per each round
  mapping (uint256 => uint256) public bonusLevels;

  // Rate levels per each round
  mapping (uint256 => uint256) public rateLevels;

  // Cap levels per each round
  mapping (uint256 => uint256) public capLevels;

  // To track list of contributors
  address[] public allocatedAddresses;              


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

  event Pause();
  event Unpause();

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

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

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

  function pause() onlyOwner whenNotPaused public {
    paused = true;
    emit Pause();
  }

  function unpause() onlyOwner whenPaused public {
    paused = false;
    emit Unpause();
  }

  function setNewBonusLevel (uint256 _bonusIndex, uint256 _bonusValue) onlyOwner external {
    bonusLevels[_bonusIndex] = _bonusValue;
  }

  function setNewRateLevel (uint256 _rateIndex, uint256 _rateValue) onlyOwner external {
    rateLevels[_rateIndex] = _rateValue;
  }

  function setMinPurchase (uint256 _minPurchase) onlyOwner external {
    minPurchase = _minPurchase;
  }

   // @notice Set's the rate of tokens per ether for each round
  function setNewRatesCustom (uint256 _r1, uint256 _r2, uint256 _r3, uint256 _r4, uint256 _r5, uint256 _r6) onlyOwner external {
    require(_r1 > 0 && _r2 > 0 && _r3 > 0 && _r4 > 0 && _r5 > 0 && _r6 > 0);
    rateLevels[1] = _r1;
    rateLevels[2] = _r2;
    rateLevels[3] = _r3;
    rateLevels[4] = _r4;
    rateLevels[5] = _r5;
    rateLevels[6] = _r6;
  }

   // @notice Set's the rate of tokens per ether for each round
  function setNewRatesBase (uint256 _r1) onlyOwner external {
    require(_r1 > 0);
    rateLevels[1] = _r1;
    rateLevels[2] = _r1.div(2);
    rateLevels[3] = _r1.div(3);
    rateLevels[4] = _r1.div(4);
    rateLevels[5] = _r1.div(5);
    rateLevels[6] = _r1.div(5);
  }

  /**
   * @param _rate Number of token units a buyer gets per ETH
   * @param _wallet Address where collected funds will be forwarded to
   * @param _token Address of the token being sold
   */

  constructor(uint256 _rate, address _wallet, address _owner, ERC20 _token) public {
    require(_rate > 0);
    require(_wallet != address(0));
    require(_token != address(0));

    wallet = _wallet;
    token = _token;
    owner = _owner;

    soldTokens = 0;
    unSoldTokens = 0;
    processedTokens = 0;

    lockedTokens = 0;
    distributedTokens = 0;

    currentRound = 1;

    //bonus values per each round;
    bonusLevels[1] =  5;
    bonusLevels[2] = 10;
    bonusLevels[3] = 15;
    bonusLevels[4] = 20;
    bonusLevels[5] = 50;
    bonusLevels[6] = 0;

    //rate values per each round;
    rateLevels[1] = _rate;
    rateLevels[2] = _rate.div(2);
    rateLevels[3] = _rate.div(3);
    rateLevels[4] = _rate.div(4);
    rateLevels[5] = _rate.div(5);
    rateLevels[6] = _rate.div(5);

    //cap values per each round
    capLevels[1] = 150000000E4;
    capLevels[2] = 210000000E4;
    capLevels[3] = 255000000E4;
    capLevels[4] = 285000000E4;
    capLevels[5] = 300000000E4;
    capLevels[6] = maxTokensRaised;

  }

  // -----------------------------------------
  // Crowdsale interface
  // -----------------------------------------

  function () external payable whenNotPaused {
    buyTokens(msg.sender);
  }

  /**
   * @dev low level token purchase
   * @param _beneficiary Address performing the token purchase
   */
  function buyTokens(address _beneficiary) public payable whenNotPaused {

    uint256 amountPaid = msg.value;
    _preValidatePurchase(_beneficiary, amountPaid);

    uint256 tokens = 0;
    uint256 bonusTokens = 0;
    uint256 fullTokens = 0;

    // Round 1
    if(processedTokens < capLevels[1]) {

        tokens = _getTokensAmount(amountPaid, 1);
        bonusTokens = _getBonusAmount(tokens, 1);
        fullTokens = tokens.add(bonusTokens);

        // If the amount of tokens that you want to buy gets out of round 1
        if(processedTokens.add(fullTokens) > capLevels[1]) {
            tokens = _calculateExcessTokens(amountPaid, 1);
            bonusTokens = _calculateExcessBonus(tokens, 1);
            setCurrentRound(2);
        }

    // Round 2
    } else if(processedTokens >= capLevels[1] && processedTokens < capLevels[2]) {
        tokens = _getTokensAmount(amountPaid, 2);
        bonusTokens = _getBonusAmount(tokens, 2);
        fullTokens = tokens.add(bonusTokens);

        // If the amount of tokens that you want to buy gets out of round 2
        if(processedTokens.add(fullTokens) > capLevels[2]) {
            tokens = _calculateExcessTokens(amountPaid, 2);
            bonusTokens = _calculateExcessBonus(tokens, 2);
            setCurrentRound(3);
        }

    // Round 3
    } else if(processedTokens >= capLevels[2] && processedTokens < capLevels[3]) {
         tokens = _getTokensAmount(amountPaid, 3);
         bonusTokens = _getBonusAmount(tokens, 3);
         fullTokens = tokens.add(bonusTokens);

         // If the amount of tokens that you want to buy gets out of round 3
         if(processedTokens.add(fullTokens) > capLevels[3]) {
            tokens = _calculateExcessTokens(amountPaid, 3);
            bonusTokens = _calculateExcessBonus(tokens, 3);
            setCurrentRound(4);
         }

    // Round 4
    } else if(processedTokens >= capLevels[3] && processedTokens < capLevels[4]) {
         tokens = _getTokensAmount(amountPaid, 4);
         bonusTokens = _getBonusAmount(tokens, 4);
         fullTokens = tokens.add(bonusTokens);

         // If the amount of tokens that you want to buy gets out of round 4
         if(processedTokens.add(fullTokens) > capLevels[4]) {
            tokens = _calculateExcessTokens(amountPaid, 4);
            bonusTokens = _calculateExcessBonus(tokens, 4);
            setCurrentRound(5);
         }

    // Round 5
    } else if(processedTokens >= capLevels[4] && processedTokens < capLevels[5]) {
         tokens = _getTokensAmount(amountPaid, 5);
         bonusTokens = _getBonusAmount(tokens, 5);
         fullTokens = tokens.add(bonusTokens);

         // If the amount of tokens that you want to buy gets out of round 5
         if(processedTokens.add(fullTokens) > capLevels[5]) {
            tokens = _calculateExcessTokens(amountPaid, 5);
            bonusTokens = 0;
            setCurrentRound(6);
         }

    // Round 6
    } else if(processedTokens >= capLevels[5]) {
        tokens = _getTokensAmount(amountPaid, 6);
    }

    // update state
    weiRaised = weiRaised.add(amountPaid);
    fullTokens = tokens.add(bonusTokens);
    soldTokens = soldTokens.add(fullTokens);
    processedTokens = processedTokens.add(fullTokens);

    // Keep a record of how many tokens everybody gets in case we need to do refunds
    tokensBought[msg.sender] = tokensBought[msg.sender].add(tokens);

    // Kepp a record of how many wei everybody contributed in case we need to do refunds
    crowdsaleBalances[msg.sender] = crowdsaleBalances[msg.sender].add(amountPaid);

    // Kepp a record of how many token everybody got as bonus to display in
    bonusBalances[msg.sender] = bonusBalances[msg.sender].add(bonusTokens);

   // Combine bought tokens with bonus tokens before sending to investor
    uint256 totalTokens = tokens.add(bonusTokens);

    // Distribute the token
    _processPurchase(_beneficiary, totalTokens);
    emit TokenPurchase(
      msg.sender,
      _beneficiary,
      amountPaid,
      totalTokens
    );
  }

  // -----------------------------------------
  // Internal interface (extensible)
  // -----------------------------------------

  /**
   * @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. Use super to concatenate validations.
   * @param _beneficiary Address performing the token purchase
   * @param _weiAmount Value in wei involved in the purchase
   */
  function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) view internal {

    require(_beneficiary != address(0));
    require(_weiAmount != 0);

    bool withinPeriod = hasStarted() && hasNotEnded();
    bool nonZeroPurchase = msg.value > 0;
    bool withinTokenLimit = processedTokens < maxTokensRaised;
    bool minimumPurchase = msg.value >= minPurchase;

    require(withinPeriod);
    require(nonZeroPurchase);
    require(withinTokenLimit);
    require(minimumPurchase);
  }


  /**
   * @dev Executed when a purchase has been validated and is ready to be executed. Not necessarily emits/sends tokens.
   * @param _beneficiary Address receiving the tokens
   * @param _tokenAmount Number of tokens to be purchased
   */
  function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal {
    uint256 _tokensToPreAllocate = _tokenAmount.div(2);
    uint256 _tokensToLock = _tokenAmount.sub(_tokensToPreAllocate);
    
    //record address for future distribution
    allocatedAddresses.push(_beneficiary);    

    //pre allocate 50% of purchase for delivery in 30 days
    _preAllocateTokens(_beneficiary, _tokensToPreAllocate);
    
    //lock 50% of purchase for delivery after 4 months
    _lockTokens(_beneficiary, _tokensToLock);
    
    //approve by default (dissaprove manually)
    approved[_beneficiary] = true;
  }

  function _lockTokens(address _beneficiary, uint256 _tokenAmount) internal {
    lockedBalances[_beneficiary] = lockedBalances[_beneficiary].add(_tokenAmount);
    lockedTokens = lockedTokens.add(_tokenAmount);
  }

  function _preAllocateTokens(address _beneficiary, uint256 _tokenAmount) internal {
    allocatedBalances[_beneficiary] = allocatedBalances[_beneficiary].add(_tokenAmount);
    allocatedTokens = allocatedTokens.add(_tokenAmount);
  }

  /**
   * @dev Override to extend the way in which ether is converted to bonus tokens.
   * @param _tokenAmount Value in wei to be converted into tokens
   * @return Number of bonus tokens that can be distributed with the specified bonus percent
   */
  function _getBonusAmount(uint256 _tokenAmount, uint256 _bonusIndex) internal view returns (uint256) {
    uint256 bonusValue = _tokenAmount.mul(bonusLevels[_bonusIndex]);
    return bonusValue.div(100);
  }

    function _calculateExcessBonus(uint256 _tokens, uint256 _level) internal view returns (uint256) {
        uint256 thisLevelTokens = processedTokens.add(_tokens);
        uint256 nextLevelTokens = thisLevelTokens.sub(capLevels[_level]);
        uint256 totalBonus = _getBonusAmount(nextLevelTokens, _level.add(1));
        return totalBonus;
    }

   function _calculateExcessTokens(
      uint256 amount,
      uint256 roundSelected
   ) internal returns(uint256) {
      require(amount > 0);
      require(roundSelected >= 1 && roundSelected <= 6);

      uint256 _rate = rateLevels[roundSelected];
      uint256 _leftTokens = capLevels[roundSelected].sub(processedTokens);
      uint256 weiThisRound = _leftTokens.div(_rate).mul(1E14);
      uint256 weiNextRound = amount.sub(weiThisRound);
      uint256 tokensNextRound = 0;

      // If there's excessive wei for the last tier, refund those
      uint256 nextRound = roundSelected.add(1);
      if(roundSelected != 6) {
        tokensNextRound = _getTokensAmount(weiNextRound, nextRound);
      }
      else {
         msg.sender.transfer(weiNextRound);
      }

      uint256 totalTokens = _leftTokens.add(tokensNextRound);
      return totalTokens;
   }


   function _getTokensAmount(uint256 weiPaid, uint256 roundSelected)
        internal constant returns(uint256 calculatedTokens)
   {
      require(weiPaid > 0);
      require(roundSelected >= 1 && roundSelected <= 6);
      uint256 typeTokenWei = weiPaid.div(1E14);
      calculatedTokens = typeTokenWei.mul(rateLevels[roundSelected]);

   }

  // -----------------------------------------
  // External interface (withdraw)
  // -----------------------------------------

  /**
   * @dev Determines how ETH is being transfered to owners wallet.
   */
  function _withdrawAllFunds() onlyOwner external {
    wallet.transfer(address(this).balance);
  }

  function _withdrawWei(uint256 _amount) onlyOwner external {
    wallet.transfer(_amount);
  }

   function _changeLockDate(uint256 _newDate) onlyOwner external {
    require(_newDate <= endTime.add(36 weeks));
    lockedTill = _newDate;
  }

   function _changeApproveDate(uint256 _newDate) onlyOwner external {
    require(_newDate <= endTime.add(12 weeks));
    approvedTill = _newDate;
  }

  function changeWallet(address _newWallet) onlyOwner external {
    wallet = _newWallet;
  }

   /// @notice Public function to check if the crowdsale has ended or not
   function hasNotEnded() public constant returns(bool) {
      return now < endTime && processedTokens < maxTokensRaised;
   }

   /// @notice Public function to check if the crowdsale has started or not
   function hasStarted() public constant returns(bool) {
      return now > startTime;
   }

    function setCurrentRound(uint256 _roundIndex) internal {
        currentRound = _roundIndex;
        currentRoundStart = now;
    }

    //move to next round by overwriting soldTokens value, unsold tokens will be burned;
   function goNextRound() onlyOwner external {
       require(currentRound < 6);
       uint256 notSold = getUnsold();
       unSoldTokens = unSoldTokens.add(notSold);
       processedTokens = capLevels[currentRound];
       currentRound = currentRound.add(1);
       currentRoundStart = now;
   }

    function getUnsold() internal view returns (uint256) {
        uint256 unSold = capLevels[currentRound].sub(processedTokens);
        return unSold;
    }

    function checkUnsold() onlyOwner external view returns (uint256) {
        uint256 unSold = capLevels[currentRound].sub(processedTokens);
        return unSold;
    }

    function round() public view returns(uint256) {
        return currentRound;
    }

    function currentBonusLevel() public view returns(uint256) {
        return bonusLevels[currentRound];
    }

    function currentRateLevel() public view returns(uint256) {
        return rateLevels[currentRound];
    }

    function currentCapLevel() public view returns(uint256) {
        return capLevels[currentRound];
    }

    function changeApproval(address _beneficiary, bool _newStatus) onlyOwner public {
        approved[_beneficiary] = _newStatus;
    }

    function massApproval(bool _newStatus, uint256 _start, uint256 _end) onlyOwner public {
        require(_start >= 0);
        require(_end > 0);
        require(_end > _start);
        for (uint256 i = _start; i < _end; i++) {
            approved[allocatedAddresses[i]] = _newStatus;
        }
    }

    function autoTransferApproved(uint256 _start, uint256 _end) onlyOwner public {
        require(_start >= 0);
        require(_end > 0);
        require(_end > _start);
        for (uint256 i = _start; i < _end; i++) {
            transferApprovedBalance(allocatedAddresses[i]);
        }
    }

    function autoTransferLocked(uint256 _start, uint256 _end) onlyOwner public {
        require(_start >= 0);
        require(_end > 0);
        require(_end > _start);
        for (uint256 i = _start; i < _end; i++) {
            transferLockedBalance(allocatedAddresses[i]);
        }
    }

    function transferApprovedBalance(address _beneficiary) public {
        require(_beneficiary != address(0));
        require(now >= approvedTill);
        require(allocatedTokens > 0);
        require(approved[_beneficiary]);
        require(allocatedBalances[_beneficiary] > 0);
        
        uint256 _approvedTokensToTransfer = allocatedBalances[_beneficiary];
        token.transfer(_beneficiary, _approvedTokensToTransfer);
        distributedBalances[_beneficiary] = distributedBalances[_beneficiary].add(_approvedTokensToTransfer);
        allocatedTokens = allocatedTokens.sub(_approvedTokensToTransfer);
        allocatedBalances[_beneficiary] = 0;
        distributedTokens = distributedTokens.add(_approvedTokensToTransfer);
    }

    function transferLockedBalance(address _beneficiary) public {
        require(_beneficiary != address(0));
        require(now >= lockedTill);
        require(lockedTokens > 0);
        require(approved[_beneficiary]);
        require(lockedBalances[_beneficiary] > 0);

        uint256 _lockedTokensToTransfer = lockedBalances[_beneficiary];
        token.transfer(_beneficiary, _lockedTokensToTransfer);
        distributedBalances[_beneficiary] = distributedBalances[_beneficiary].add(_lockedTokensToTransfer);
        lockedTokens = lockedTokens.sub(_lockedTokensToTransfer);
        lockedBalances[_beneficiary] = 0;
        distributedTokens = distributedTokens.add(_lockedTokensToTransfer);
    }

    function transferToken(uint256 _tokens) external onlyOwner returns (bool success) {
        //bool withinPeriod = hasStarted() && hasNotEnded();
        //require(!withinPeriod);
        return token.transfer(owner, _tokens);
    }

    function tokenBalance() public view returns (uint256) {
        return token.balanceOf(address(this));
    }

    //destory contract with unsold tokens
    function burnUnsold() public onlyOwner {
        require(now > lockedTill);
        require(address(this).balance == 0);
        require(lockedTokens == 0);
        require(allocatedTokens == 0);
        require(unSoldTokens > 0);
        selfdestruct(owner);
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"allocatedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"rateLevels","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lockedBalances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxTokensRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"transferApprovedBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bonusBalances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"crowdsaleBalances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lockedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"distributedBalances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"round","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newStatus","type":"bool"},{"name":"_start","type":"uint256"},{"name":"_end","type":"uint256"}],"name":"massApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_r1","type":"uint256"},{"name":"_r2","type":"uint256"},{"name":"_r3","type":"uint256"},{"name":"_r4","type":"uint256"},{"name":"_r5","type":"uint256"},{"name":"_r6","type":"uint256"}],"name":"setNewRatesCustom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentRoundStart","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokensBought","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"allocatedAddresses","outputs":[{"name":"","type":"address"}],"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":"checkUnsold","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":true,"inputs":[],"name":"minPurchase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"approvedTill","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasStarted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"allocatedBalances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newDate","type":"uint256"}],"name":"_changeApproveDate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"transferLockedBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"distributedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"soldTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentCapLevel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentRateLevel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newDate","type":"uint256"}],"name":"_changeLockDate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rateIndex","type":"uint256"},{"name":"_rateValue","type":"uint256"}],"name":"setNewRateLevel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentRound","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"processedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_start","type":"uint256"},{"name":"_end","type":"uint256"}],"name":"autoTransferLocked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newWallet","type":"address"}],"name":"changeWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokens","type":"uint256"}],"name":"transferToken","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"_withdrawWei","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"unSoldTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"_withdrawAllFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_newStatus","type":"bool"}],"name":"changeApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"burnUnsold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"capLevels","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"goNextRound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_start","type":"uint256"},{"name":"_end","type":"uint256"}],"name":"autoTransferApproved","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lockedTill","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"bonusLevels","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentBonusLevel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bonusIndex","type":"uint256"},{"name":"_bonusValue","type":"uint256"}],"name":"setNewBonusLevel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"approved","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_minPurchase","type":"uint256"}],"name":"setMinPurchase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_r1","type":"uint256"}],"name":"setNewRatesBase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hasNotEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_rate","type":"uint256"},{"name":"_wallet","type":"address"},{"name":"_owner","type":"address"},{"name":"_token","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"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"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]

60806040526000600b60006101000a81548160ff02191690831515021790555066bc4b381d188000600c55635b0ee6a0600e55600e54600f55635b565db4601055635bf74300601155635b833f006012553480156200005d57600080fd5b5060405160808062003dba83398101806040528101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600084111515620000af57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515620000ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200012957600080fd5b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006005819055506000600781905550600060068190555060006008819055506000600a819055506001600d819055506005601a60006001815260200190815260200160002081905550600a601a60006002815260200190815260200160002081905550600f601a600060038152602001908152602001600020819055506014601a600060048152602001908152602001600020819055506032601a600060058152602001908152602001600020819055506000601a6000600681526020019081526020016000208190555083601b60006001815260200190815260200160002081905550620002f4600285620004c064010000000002620036e4179091906401000000009004565b601b6000600281526020019081526020016000208190555062000330600385620004c064010000000002620036e4179091906401000000009004565b601b600060038152602001908152602001600020819055506200036c600485620004c064010000000002620036e4179091906401000000009004565b601b60006004815260200190815260200160002081905550620003a8600585620004c064010000000002620036e4179091906401000000009004565b601b60006005815260200190815260200160002081905550620003e4600585620004c064010000000002620036e4179091906401000000009004565b601b6000600681526020019081526020016000208190555065015d3ef79800601c600060018152602001908152602001600020819055506501e8f1c10800601c60006002815260200190815260200160002081905550650251b7d81c00601c60006003815260200190815260200160002081905550650297913cd400601c600060048152602001908152602001600020819055506502ba7def3000601c600060058152602001908152602001600020819055506509184e72a000601c6000600681526020019081526020016000208190555050505050620004dc565b6000808284811515620004cf57fe5b0490508091505092915050565b6138ce80620004ec6000396000f3006080604052600436106102d4576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680622f9569146102fb578063031a4cd3146103265780630483a7f61461036757806309838bd9146103be5780630b803b6b146103e95780630c930a4b1461042c5780630e11624b146104835780630eb34740146104da5780631190f27e14610505578063146ca5311461055c57806314bd8acd146105875780632033de43146105ca578063222d7e3414610629578063264d77971461065457806329e58fe7146106ab5780632c4e722e146107185780632faf9a93146107435780633197cbb61461076e57806333b5b62e146107995780633f4ba83a146107c45780634042b66f146107db57806340499ae81461080657806344691f7e146108315780634e618db014610860578063514a48ae146108b7578063521eb273146108e45780635319418a1461093b578063586360ce1461097e5780635c975abb146109a95780635ed9ebfc146109d85780637074754414610a0357806375b3f9f514610a2e5780637690ed7014610a5957806378e9792514610a865780638397980314610ab15780638456cb5914610ae85780638a19c8bc14610aff5780638da5cb5b14610b2a5780638e8df68714610b81578063966704c214610bac57806398b9a2dc14610be35780639e1a4d1914610c265780639fc71b3114610c51578063a309800c14610c96578063a8c9f8ae14610cc3578063aa6d5dce14610cee578063b26c977914610d05578063b52a585114610d54578063b566045b14610d6b578063ba8118b114610dac578063c1ee337514610dc3578063c72e57c714610dfa578063c9e8434614610e25578063d2c936ff14610e66578063d782cc5414610e91578063d8b964e614610ec8578063e8307d0014610f23578063ec8ac4d814610f50578063fa69ede914610f86578063fab67bb614610fb3578063fc0c546a14610fe2575b600b60009054906101000a900460ff161515156102f057600080fd5b6102f933611039565b005b34801561030757600080fd5b50610310611723565b6040518082815260200191505060405180910390f35b34801561033257600080fd5b5061035160048036038101908080359060200190929190505050611729565b6040518082815260200191505060405180910390f35b34801561037357600080fd5b506103a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611741565b6040518082815260200191505060405180910390f35b3480156103ca57600080fd5b506103d3611759565b6040518082815260200191505060405180910390f35b3480156103f557600080fd5b5061042a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611763565b005b34801561043857600080fd5b5061046d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611abe565b6040518082815260200191505060405180910390f35b34801561048f57600080fd5b506104c4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad6565b6040518082815260200191505060405180910390f35b3480156104e657600080fd5b506104ef611aee565b6040518082815260200191505060405180910390f35b34801561051157600080fd5b50610546600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611af4565b6040518082815260200191505060405180910390f35b34801561056857600080fd5b50610571611b0c565b6040518082815260200191505060405180910390f35b34801561059357600080fd5b506105c86004803603810190808035151590602001909291908035906020019092919080359060200190929190505050611b16565b005b3480156105d657600080fd5b50610627600480360381019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611c50565b005b34801561063557600080fd5b5061063e611d95565b6040518082815260200191505060405180910390f35b34801561066057600080fd5b50610695600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d9b565b6040518082815260200191505060405180910390f35b3480156106b757600080fd5b506106d660048036038101908080359060200190929190505050611db3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072457600080fd5b5061072d611df1565b6040518082815260200191505060405180910390f35b34801561074f57600080fd5b50610758611df7565b6040518082815260200191505060405180910390f35b34801561077a57600080fd5b50610783611e89565b6040518082815260200191505060405180910390f35b3480156107a557600080fd5b506107ae611e8f565b6040518082815260200191505060405180910390f35b3480156107d057600080fd5b506107d9611e95565b005b3480156107e757600080fd5b506107f0611f55565b6040518082815260200191505060405180910390f35b34801561081257600080fd5b5061081b611f5b565b6040518082815260200191505060405180910390f35b34801561083d57600080fd5b50610846611f61565b604051808215151515815260200191505060405180910390f35b34801561086c57600080fd5b506108a1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f6d565b6040518082815260200191505060405180910390f35b3480156108c357600080fd5b506108e260048036038101908080359060200190929190505050611f85565b005b3480156108f057600080fd5b506108f9612011565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561094757600080fd5b5061097c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612037565b005b34801561098a57600080fd5b50610993612392565b6040518082815260200191505060405180910390f35b3480156109b557600080fd5b506109be612398565b604051808215151515815260200191505060405180910390f35b3480156109e457600080fd5b506109ed6123ab565b6040518082815260200191505060405180910390f35b348015610a0f57600080fd5b50610a186123b1565b6040518082815260200191505060405180910390f35b348015610a3a57600080fd5b50610a436123ce565b6040518082815260200191505060405180910390f35b348015610a6557600080fd5b50610a84600480360381019080803590602001909291905050506123eb565b005b348015610a9257600080fd5b50610a9b612478565b6040518082815260200191505060405180910390f35b348015610abd57600080fd5b50610ae6600480360381019080803590602001909291908035906020019092919050505061247e565b005b348015610af457600080fd5b50610afd6124f6565b005b348015610b0b57600080fd5b50610b146125b7565b6040518082815260200191505060405180910390f35b348015610b3657600080fd5b50610b3f6125bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b8d57600080fd5b50610b966125e3565b6040518082815260200191505060405180910390f35b348015610bb857600080fd5b50610be160048036038101908080359060200190929190803590602001909291905050506125e9565b005b348015610bef57600080fd5b50610c24600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d4565b005b348015610c3257600080fd5b50610c3b612774565b6040518082815260200191505060405180910390f35b348015610c5d57600080fd5b50610c7c60048036038101908080359060200190929190505050612872565b604051808215151515815260200191505060405180910390f35b348015610ca257600080fd5b50610cc1600480360381019080803590602001909291905050506129f8565b005b348015610ccf57600080fd5b50610cd8612ac0565b6040518082815260200191505060405180910390f35b348015610cfa57600080fd5b50610d03612ac6565b005b348015610d1157600080fd5b50610d52600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612ba4565b005b348015610d6057600080fd5b50610d69612c5b565b005b348015610d7757600080fd5b50610d9660048036038101908080359060200190929190505050612d5b565b6040518082815260200191505060405180910390f35b348015610db857600080fd5b50610dc1612d73565b005b348015610dcf57600080fd5b50610df86004803603810190808035906020019092919080359060200190929190505050612e49565b005b348015610e0657600080fd5b50610e0f612f34565b6040518082815260200191505060405180910390f35b348015610e3157600080fd5b50610e5060048036038101908080359060200190929190505050612f3a565b6040518082815260200191505060405180910390f35b348015610e7257600080fd5b50610e7b612f52565b6040518082815260200191505060405180910390f35b348015610e9d57600080fd5b50610ec66004803603810190808035906020019092919080359060200190929190505050612f6f565b005b348015610ed457600080fd5b50610f09600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fe7565b604051808215151515815260200191505060405180910390f35b348015610f2f57600080fd5b50610f4e60048036038101908080359060200190929190505050613007565b005b610f84600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611039565b005b348015610f9257600080fd5b50610fb16004803603810190808035906020019092919050505061306d565b005b348015610fbf57600080fd5b50610fc86131d0565b604051808215151515815260200191505060405180910390f35b348015610fee57600080fd5b50610ff76131ef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806000806000600b60009054906101000a900460ff1615151561105d57600080fd5b34945061106a8686613214565b600093506000925060009150601c60006001815260200190815260200160002054600654101561111d5761109f8560016132d3565b93506110ac84600161334c565b92506110c1838561339490919063ffffffff16565b9150601c600060018152602001908152602001600020546110ed8360065461339490919063ffffffff16565b1115611118576110fe8560016133b2565b935061110b84600161350e565b9250611117600261357e565b5b61146a565b601c60006001815260200190815260200160002054600654101580156111585750601c60006002815260200190815260200160002054600654105b156111e6576111688560026132d3565b935061117584600261334c565b925061118a838561339490919063ffffffff16565b9150601c600060028152602001908152602001600020546111b68360065461339490919063ffffffff16565b11156111e1576111c78560026133b2565b93506111d484600261350e565b92506111e0600361357e565b5b611469565b601c60006002815260200190815260200160002054600654101580156112215750601c60006003815260200190815260200160002054600654105b156112af576112318560036132d3565b935061123e84600361334c565b9250611253838561339490919063ffffffff16565b9150601c6000600381526020019081526020016000205461127f8360065461339490919063ffffffff16565b11156112aa576112908560036133b2565b935061129d84600361350e565b92506112a9600461357e565b5b611468565b601c60006003815260200190815260200160002054600654101580156112ea5750601c60006004815260200190815260200160002054600654105b15611378576112fa8560046132d3565b935061130784600461334c565b925061131c838561339490919063ffffffff16565b9150601c600060048152602001908152602001600020546113488360065461339490919063ffffffff16565b1115611373576113598560046133b2565b935061136684600461350e565b9250611372600561357e565b5b611467565b601c60006004815260200190815260200160002054600654101580156113b35750601c60006005815260200190815260200160002054600654105b15611438576113c38560056132d3565b93506113d084600561334c565b92506113e5838561339490919063ffffffff16565b9150601c600060058152602001908152602001600020546114118360065461339490919063ffffffff16565b1115611433576114228560056133b2565b935060009250611432600661357e565b5b611466565b601c60006005815260200190815260200160002054600654101515611465576114628560066132d3565b93505b5b5b5b5b5b61147f8560045461339490919063ffffffff16565b600481905550611498838561339490919063ffffffff16565b91506114af8260055461339490919063ffffffff16565b6005819055506114ca8260065461339490919063ffffffff16565b60068190555061152284601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115b785601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061164c83601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116a2838561339490919063ffffffff16565b90506116ae868261358f565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188784604051808381526020018281526020019250505060405180910390a3505050505050565b60095481565b601b6020528060005260406000206000915090505481565b60166020528060005260406000206000915090505481565b6509184e72a00081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156117a057600080fd5b60125442101515156117b157600080fd5b60006009541115156117c257600080fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561181a57600080fd5b6000601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561186857600080fd5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561196e57600080fd5b505af1158015611982573d6000803e3d6000fd5b505050506040513d602081101561199857600080fd5b8101908080519060200190929190505050506119fc81601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a548160095461369590919063ffffffff16565b6009819055506000601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ab481600a5461339490919063ffffffff16565b600a819055505050565b60156020528060005260406000206000915090505481565b60136020528060005260406000206000915090505481565b60085481565b60196020528060005260406000206000915090505481565b6000600d54905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b7457600080fd5b60008310151515611b8457600080fd5b600082111515611b9357600080fd5b8282111515611ba157600080fd5b8290505b81811015611c4a578360186000601d84815481101515611bc157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611ba5565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cac57600080fd5b600086118015611cbc5750600085115b8015611cc85750600084115b8015611cd45750600083115b8015611ce05750600082115b8015611cec5750600081115b1515611cf757600080fd5b85601b6000600181526020019081526020016000208190555084601b6000600281526020019081526020016000208190555083601b6000600381526020019081526020016000208190555082601b6000600481526020019081526020016000208190555081601b6000600581526020019081526020016000208190555080601b60006006815260200190815260200160002081905550505050505050565b600f5481565b60146020528060005260406000206000915090505481565b601d81815481101515611dc257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e5657600080fd5b611e80600654601c6000600d5481526020019081526020016000205461369590919063ffffffff16565b90508091505090565b60105481565b600c5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ef157600080fd5b600b60009054906101000a900460ff161515611f0c57600080fd5b6000600b60006101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60045481565b60125481565b6000600e544211905090565b60176020528060005260406000206000915090505481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fe157600080fd5b611ff9626ebe0060105461339490919063ffffffff16565b811115151561200757600080fd5b8060128190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561207457600080fd5b601154421015151561208557600080fd5b600060085411151561209657600080fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156120ee57600080fd5b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561213c57600080fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561224257600080fd5b505af1158015612256573d6000803e3d6000fd5b505050506040513d602081101561226c57600080fd5b8101908080519060200190929190505050506122d081601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123288160085461369590919063ffffffff16565b6008819055506000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061238881600a5461339490919063ffffffff16565b600a819055505050565b600a5481565b600b60009054906101000a900460ff1681565b60055481565b6000601c6000600d54815260200190815260200160002054905090565b6000601b6000600d54815260200190815260200160002054905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561244757600080fd5b61246063014c3a0060105461339490919063ffffffff16565b811115151561246e57600080fd5b8060118190555050565b600e5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124da57600080fd5b80601b6000848152602001908152602001600020819055505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561255257600080fd5b600b60009054906101000a900460ff1615151561256e57600080fd5b6001600b60006101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600d5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561264757600080fd5b6000831015151561265757600080fd5b60008211151561266657600080fd5b828211151561267457600080fd5b8290505b818110156126cf576126c2601d8281548110151561269257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612037565b8080600101915050612678565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561273057600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561283257600080fd5b505af1158015612846573d6000803e3d6000fd5b505050506040513d602081101561285c57600080fd5b8101908080519060200190929190505050905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156128d057600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129b657600080fd5b505af11580156129ca573d6000803e3d6000fd5b505050506040513d60208110156129e057600080fd5b81019080805190602001909291905050509050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612a5457600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612abc573d6000803e3d6000fd5b5050565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612b2257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015612ba1573d6000803e3d6000fd5b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c0057600080fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612cb757600080fd5b60115442111515612cc757600080fd5b60003073ffffffffffffffffffffffffffffffffffffffff1631141515612ced57600080fd5b6000600854141515612cfe57600080fd5b6000600954141515612d0f57600080fd5b6000600754111515612d2057600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b601c6020528060005260406000206000915090505481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612dd157600080fd5b6006600d54101515612de257600080fd5b612dea6136ae565b9050612e018160075461339490919063ffffffff16565b600781905550601c6000600d54815260200190815260200160002054600681905550612e396001600d5461339490919063ffffffff16565b600d8190555042600f8190555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ea757600080fd5b60008310151515612eb757600080fd5b600082111515612ec657600080fd5b8282111515612ed457600080fd5b8290505b81811015612f2f57612f22601d82815481101515612ef257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611763565b8080600101915050612ed8565b505050565b60115481565b601a6020528060005260406000206000915090505481565b6000601a6000600d54815260200190815260200160002054905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612fcb57600080fd5b80601a6000848152602001908152602001600020819055505050565b60186020528060005260406000206000915054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561306357600080fd5b80600c8190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156130c957600080fd5b6000811115156130d857600080fd5b80601b600060018152602001908152602001600020819055506131056002826136e490919063ffffffff16565b601b600060028152602001908152602001600020819055506131316003826136e490919063ffffffff16565b601b6000600381526020019081526020016000208190555061315d6004826136e490919063ffffffff16565b601b600060048152602001908152602001600020819055506131896005826136e490919063ffffffff16565b601b600060058152602001908152602001600020819055506131b56005826136e490919063ffffffff16565b601b6000600681526020019081526020016000208190555050565b6000601054421080156131ea57506509184e72a000600654105b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415151561325657600080fd5b6000851415151561326657600080fd5b61326e611f61565b801561327e575061327d6131d0565b5b93506000341192506509184e72a000600654109150600c5434101590508315156132a757600080fd5b8215156132b357600080fd5b8115156132bf57600080fd5b8015156132cb57600080fd5b505050505050565b6000806000841115156132e557600080fd5b600183101580156132f7575060068311155b151561330257600080fd5b61331b655af3107a4000856136e490919063ffffffff16565b9050613343601b600085815260200190815260200160002054826136ff90919063ffffffff16565b91505092915050565b600080613375601a600085815260200190815260200160002054856136ff90919063ffffffff16565b905061338b6064826136e490919063ffffffff16565b91505092915050565b60008082840190508381101515156133a857fe5b8091505092915050565b60008060008060008060008060008a1115156133cd57600080fd5b600189101580156133df575060068911155b15156133ea57600080fd5b601b60008a8152602001908152602001600020549650613428600654601c60008c81526020019081526020016000205461369590919063ffffffff16565b9550613455655af3107a400061344789896136e490919063ffffffff16565b6136ff90919063ffffffff16565b945061346a858b61369590919063ffffffff16565b93506000925061348460018a61339490919063ffffffff16565b91506006891415156134a15761349a84836132d3565b92506134e9565b3373ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156134e7573d6000803e3d6000fd5b505b6134fc838761339490919063ffffffff16565b90508097505050505050505092915050565b6000806000806135298660065461339490919063ffffffff16565b9250613551601c6000878152602001908152602001600020548461369590919063ffffffff16565b91506135708261356b60018861339490919063ffffffff16565b61334c565b905080935050505092915050565b80600d8190555042600f8190555050565b6000806135a66002846136e490919063ffffffff16565b91506135bb828461369590919063ffffffff16565b9050601d8490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061362d848361373a565b61363784826137ee565b6001601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b60008282111515156136a357fe5b818303905092915050565b6000806136db600654601c6000600d5481526020019081526020016000205461369590919063ffffffff16565b90508091505090565b60008082848115156136f257fe5b0490508091505092915050565b60008060008414156137145760009150613733565b828402905082848281151561372557fe5b0414151561372f57fe5b8091505b5092915050565b61378c81601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137e48160095461339490919063ffffffff16565b6009819055505050565b61384081601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138988160085461339490919063ffffffff16565b60088190555050505600a165627a7a72305820718195f9c192db5ad6e7d37685a3cc0725598a69fb3dc25c7533b360740089240029000000000000000000000000000000000000000000000000000000000000d055000000000000000000000000641ad78baca220c5bd28b51ce8e0f495e85fe689000000000000000000000000641ad78baca220c5bd28b51ce8e0f495e85fe689000000000000000000000000eaf61fc150cd5c3bea75744e830d916e60ea5a9f

Deployed Bytecode

0x6080604052600436106102d4576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680622f9569146102fb578063031a4cd3146103265780630483a7f61461036757806309838bd9146103be5780630b803b6b146103e95780630c930a4b1461042c5780630e11624b146104835780630eb34740146104da5780631190f27e14610505578063146ca5311461055c57806314bd8acd146105875780632033de43146105ca578063222d7e3414610629578063264d77971461065457806329e58fe7146106ab5780632c4e722e146107185780632faf9a93146107435780633197cbb61461076e57806333b5b62e146107995780633f4ba83a146107c45780634042b66f146107db57806340499ae81461080657806344691f7e146108315780634e618db014610860578063514a48ae146108b7578063521eb273146108e45780635319418a1461093b578063586360ce1461097e5780635c975abb146109a95780635ed9ebfc146109d85780637074754414610a0357806375b3f9f514610a2e5780637690ed7014610a5957806378e9792514610a865780638397980314610ab15780638456cb5914610ae85780638a19c8bc14610aff5780638da5cb5b14610b2a5780638e8df68714610b81578063966704c214610bac57806398b9a2dc14610be35780639e1a4d1914610c265780639fc71b3114610c51578063a309800c14610c96578063a8c9f8ae14610cc3578063aa6d5dce14610cee578063b26c977914610d05578063b52a585114610d54578063b566045b14610d6b578063ba8118b114610dac578063c1ee337514610dc3578063c72e57c714610dfa578063c9e8434614610e25578063d2c936ff14610e66578063d782cc5414610e91578063d8b964e614610ec8578063e8307d0014610f23578063ec8ac4d814610f50578063fa69ede914610f86578063fab67bb614610fb3578063fc0c546a14610fe2575b600b60009054906101000a900460ff161515156102f057600080fd5b6102f933611039565b005b34801561030757600080fd5b50610310611723565b6040518082815260200191505060405180910390f35b34801561033257600080fd5b5061035160048036038101908080359060200190929190505050611729565b6040518082815260200191505060405180910390f35b34801561037357600080fd5b506103a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611741565b6040518082815260200191505060405180910390f35b3480156103ca57600080fd5b506103d3611759565b6040518082815260200191505060405180910390f35b3480156103f557600080fd5b5061042a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611763565b005b34801561043857600080fd5b5061046d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611abe565b6040518082815260200191505060405180910390f35b34801561048f57600080fd5b506104c4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad6565b6040518082815260200191505060405180910390f35b3480156104e657600080fd5b506104ef611aee565b6040518082815260200191505060405180910390f35b34801561051157600080fd5b50610546600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611af4565b6040518082815260200191505060405180910390f35b34801561056857600080fd5b50610571611b0c565b6040518082815260200191505060405180910390f35b34801561059357600080fd5b506105c86004803603810190808035151590602001909291908035906020019092919080359060200190929190505050611b16565b005b3480156105d657600080fd5b50610627600480360381019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611c50565b005b34801561063557600080fd5b5061063e611d95565b6040518082815260200191505060405180910390f35b34801561066057600080fd5b50610695600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d9b565b6040518082815260200191505060405180910390f35b3480156106b757600080fd5b506106d660048036038101908080359060200190929190505050611db3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072457600080fd5b5061072d611df1565b6040518082815260200191505060405180910390f35b34801561074f57600080fd5b50610758611df7565b6040518082815260200191505060405180910390f35b34801561077a57600080fd5b50610783611e89565b6040518082815260200191505060405180910390f35b3480156107a557600080fd5b506107ae611e8f565b6040518082815260200191505060405180910390f35b3480156107d057600080fd5b506107d9611e95565b005b3480156107e757600080fd5b506107f0611f55565b6040518082815260200191505060405180910390f35b34801561081257600080fd5b5061081b611f5b565b6040518082815260200191505060405180910390f35b34801561083d57600080fd5b50610846611f61565b604051808215151515815260200191505060405180910390f35b34801561086c57600080fd5b506108a1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f6d565b6040518082815260200191505060405180910390f35b3480156108c357600080fd5b506108e260048036038101908080359060200190929190505050611f85565b005b3480156108f057600080fd5b506108f9612011565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561094757600080fd5b5061097c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612037565b005b34801561098a57600080fd5b50610993612392565b6040518082815260200191505060405180910390f35b3480156109b557600080fd5b506109be612398565b604051808215151515815260200191505060405180910390f35b3480156109e457600080fd5b506109ed6123ab565b6040518082815260200191505060405180910390f35b348015610a0f57600080fd5b50610a186123b1565b6040518082815260200191505060405180910390f35b348015610a3a57600080fd5b50610a436123ce565b6040518082815260200191505060405180910390f35b348015610a6557600080fd5b50610a84600480360381019080803590602001909291905050506123eb565b005b348015610a9257600080fd5b50610a9b612478565b6040518082815260200191505060405180910390f35b348015610abd57600080fd5b50610ae6600480360381019080803590602001909291908035906020019092919050505061247e565b005b348015610af457600080fd5b50610afd6124f6565b005b348015610b0b57600080fd5b50610b146125b7565b6040518082815260200191505060405180910390f35b348015610b3657600080fd5b50610b3f6125bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b8d57600080fd5b50610b966125e3565b6040518082815260200191505060405180910390f35b348015610bb857600080fd5b50610be160048036038101908080359060200190929190803590602001909291905050506125e9565b005b348015610bef57600080fd5b50610c24600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d4565b005b348015610c3257600080fd5b50610c3b612774565b6040518082815260200191505060405180910390f35b348015610c5d57600080fd5b50610c7c60048036038101908080359060200190929190505050612872565b604051808215151515815260200191505060405180910390f35b348015610ca257600080fd5b50610cc1600480360381019080803590602001909291905050506129f8565b005b348015610ccf57600080fd5b50610cd8612ac0565b6040518082815260200191505060405180910390f35b348015610cfa57600080fd5b50610d03612ac6565b005b348015610d1157600080fd5b50610d52600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612ba4565b005b348015610d6057600080fd5b50610d69612c5b565b005b348015610d7757600080fd5b50610d9660048036038101908080359060200190929190505050612d5b565b6040518082815260200191505060405180910390f35b348015610db857600080fd5b50610dc1612d73565b005b348015610dcf57600080fd5b50610df86004803603810190808035906020019092919080359060200190929190505050612e49565b005b348015610e0657600080fd5b50610e0f612f34565b6040518082815260200191505060405180910390f35b348015610e3157600080fd5b50610e5060048036038101908080359060200190929190505050612f3a565b6040518082815260200191505060405180910390f35b348015610e7257600080fd5b50610e7b612f52565b6040518082815260200191505060405180910390f35b348015610e9d57600080fd5b50610ec66004803603810190808035906020019092919080359060200190929190505050612f6f565b005b348015610ed457600080fd5b50610f09600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fe7565b604051808215151515815260200191505060405180910390f35b348015610f2f57600080fd5b50610f4e60048036038101908080359060200190929190505050613007565b005b610f84600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611039565b005b348015610f9257600080fd5b50610fb16004803603810190808035906020019092919050505061306d565b005b348015610fbf57600080fd5b50610fc86131d0565b604051808215151515815260200191505060405180910390f35b348015610fee57600080fd5b50610ff76131ef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806000806000600b60009054906101000a900460ff1615151561105d57600080fd5b34945061106a8686613214565b600093506000925060009150601c60006001815260200190815260200160002054600654101561111d5761109f8560016132d3565b93506110ac84600161334c565b92506110c1838561339490919063ffffffff16565b9150601c600060018152602001908152602001600020546110ed8360065461339490919063ffffffff16565b1115611118576110fe8560016133b2565b935061110b84600161350e565b9250611117600261357e565b5b61146a565b601c60006001815260200190815260200160002054600654101580156111585750601c60006002815260200190815260200160002054600654105b156111e6576111688560026132d3565b935061117584600261334c565b925061118a838561339490919063ffffffff16565b9150601c600060028152602001908152602001600020546111b68360065461339490919063ffffffff16565b11156111e1576111c78560026133b2565b93506111d484600261350e565b92506111e0600361357e565b5b611469565b601c60006002815260200190815260200160002054600654101580156112215750601c60006003815260200190815260200160002054600654105b156112af576112318560036132d3565b935061123e84600361334c565b9250611253838561339490919063ffffffff16565b9150601c6000600381526020019081526020016000205461127f8360065461339490919063ffffffff16565b11156112aa576112908560036133b2565b935061129d84600361350e565b92506112a9600461357e565b5b611468565b601c60006003815260200190815260200160002054600654101580156112ea5750601c60006004815260200190815260200160002054600654105b15611378576112fa8560046132d3565b935061130784600461334c565b925061131c838561339490919063ffffffff16565b9150601c600060048152602001908152602001600020546113488360065461339490919063ffffffff16565b1115611373576113598560046133b2565b935061136684600461350e565b9250611372600561357e565b5b611467565b601c60006004815260200190815260200160002054600654101580156113b35750601c60006005815260200190815260200160002054600654105b15611438576113c38560056132d3565b93506113d084600561334c565b92506113e5838561339490919063ffffffff16565b9150601c600060058152602001908152602001600020546114118360065461339490919063ffffffff16565b1115611433576114228560056133b2565b935060009250611432600661357e565b5b611466565b601c60006005815260200190815260200160002054600654101515611465576114628560066132d3565b93505b5b5b5b5b5b61147f8560045461339490919063ffffffff16565b600481905550611498838561339490919063ffffffff16565b91506114af8260055461339490919063ffffffff16565b6005819055506114ca8260065461339490919063ffffffff16565b60068190555061152284601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115b785601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061164c83601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116a2838561339490919063ffffffff16565b90506116ae868261358f565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188784604051808381526020018281526020019250505060405180910390a3505050505050565b60095481565b601b6020528060005260406000206000915090505481565b60166020528060005260406000206000915090505481565b6509184e72a00081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156117a057600080fd5b60125442101515156117b157600080fd5b60006009541115156117c257600080fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561181a57600080fd5b6000601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561186857600080fd5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561196e57600080fd5b505af1158015611982573d6000803e3d6000fd5b505050506040513d602081101561199857600080fd5b8101908080519060200190929190505050506119fc81601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a548160095461369590919063ffffffff16565b6009819055506000601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ab481600a5461339490919063ffffffff16565b600a819055505050565b60156020528060005260406000206000915090505481565b60136020528060005260406000206000915090505481565b60085481565b60196020528060005260406000206000915090505481565b6000600d54905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b7457600080fd5b60008310151515611b8457600080fd5b600082111515611b9357600080fd5b8282111515611ba157600080fd5b8290505b81811015611c4a578360186000601d84815481101515611bc157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611ba5565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cac57600080fd5b600086118015611cbc5750600085115b8015611cc85750600084115b8015611cd45750600083115b8015611ce05750600082115b8015611cec5750600081115b1515611cf757600080fd5b85601b6000600181526020019081526020016000208190555084601b6000600281526020019081526020016000208190555083601b6000600381526020019081526020016000208190555082601b6000600481526020019081526020016000208190555081601b6000600581526020019081526020016000208190555080601b60006006815260200190815260200160002081905550505050505050565b600f5481565b60146020528060005260406000206000915090505481565b601d81815481101515611dc257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e5657600080fd5b611e80600654601c6000600d5481526020019081526020016000205461369590919063ffffffff16565b90508091505090565b60105481565b600c5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ef157600080fd5b600b60009054906101000a900460ff161515611f0c57600080fd5b6000600b60006101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60045481565b60125481565b6000600e544211905090565b60176020528060005260406000206000915090505481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fe157600080fd5b611ff9626ebe0060105461339490919063ffffffff16565b811115151561200757600080fd5b8060128190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561207457600080fd5b601154421015151561208557600080fd5b600060085411151561209657600080fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156120ee57600080fd5b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561213c57600080fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561224257600080fd5b505af1158015612256573d6000803e3d6000fd5b505050506040513d602081101561226c57600080fd5b8101908080519060200190929190505050506122d081601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123288160085461369590919063ffffffff16565b6008819055506000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061238881600a5461339490919063ffffffff16565b600a819055505050565b600a5481565b600b60009054906101000a900460ff1681565b60055481565b6000601c6000600d54815260200190815260200160002054905090565b6000601b6000600d54815260200190815260200160002054905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561244757600080fd5b61246063014c3a0060105461339490919063ffffffff16565b811115151561246e57600080fd5b8060118190555050565b600e5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124da57600080fd5b80601b6000848152602001908152602001600020819055505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561255257600080fd5b600b60009054906101000a900460ff1615151561256e57600080fd5b6001600b60006101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600d5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561264757600080fd5b6000831015151561265757600080fd5b60008211151561266657600080fd5b828211151561267457600080fd5b8290505b818110156126cf576126c2601d8281548110151561269257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612037565b8080600101915050612678565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561273057600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561283257600080fd5b505af1158015612846573d6000803e3d6000fd5b505050506040513d602081101561285c57600080fd5b8101908080519060200190929190505050905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156128d057600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129b657600080fd5b505af11580156129ca573d6000803e3d6000fd5b505050506040513d60208110156129e057600080fd5b81019080805190602001909291905050509050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612a5457600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612abc573d6000803e3d6000fd5b5050565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612b2257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015612ba1573d6000803e3d6000fd5b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c0057600080fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612cb757600080fd5b60115442111515612cc757600080fd5b60003073ffffffffffffffffffffffffffffffffffffffff1631141515612ced57600080fd5b6000600854141515612cfe57600080fd5b6000600954141515612d0f57600080fd5b6000600754111515612d2057600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b601c6020528060005260406000206000915090505481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612dd157600080fd5b6006600d54101515612de257600080fd5b612dea6136ae565b9050612e018160075461339490919063ffffffff16565b600781905550601c6000600d54815260200190815260200160002054600681905550612e396001600d5461339490919063ffffffff16565b600d8190555042600f8190555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ea757600080fd5b60008310151515612eb757600080fd5b600082111515612ec657600080fd5b8282111515612ed457600080fd5b8290505b81811015612f2f57612f22601d82815481101515612ef257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611763565b8080600101915050612ed8565b505050565b60115481565b601a6020528060005260406000206000915090505481565b6000601a6000600d54815260200190815260200160002054905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612fcb57600080fd5b80601a6000848152602001908152602001600020819055505050565b60186020528060005260406000206000915054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561306357600080fd5b80600c8190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156130c957600080fd5b6000811115156130d857600080fd5b80601b600060018152602001908152602001600020819055506131056002826136e490919063ffffffff16565b601b600060028152602001908152602001600020819055506131316003826136e490919063ffffffff16565b601b6000600381526020019081526020016000208190555061315d6004826136e490919063ffffffff16565b601b600060048152602001908152602001600020819055506131896005826136e490919063ffffffff16565b601b600060058152602001908152602001600020819055506131b56005826136e490919063ffffffff16565b601b6000600681526020019081526020016000208190555050565b6000601054421080156131ea57506509184e72a000600654105b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415151561325657600080fd5b6000851415151561326657600080fd5b61326e611f61565b801561327e575061327d6131d0565b5b93506000341192506509184e72a000600654109150600c5434101590508315156132a757600080fd5b8215156132b357600080fd5b8115156132bf57600080fd5b8015156132cb57600080fd5b505050505050565b6000806000841115156132e557600080fd5b600183101580156132f7575060068311155b151561330257600080fd5b61331b655af3107a4000856136e490919063ffffffff16565b9050613343601b600085815260200190815260200160002054826136ff90919063ffffffff16565b91505092915050565b600080613375601a600085815260200190815260200160002054856136ff90919063ffffffff16565b905061338b6064826136e490919063ffffffff16565b91505092915050565b60008082840190508381101515156133a857fe5b8091505092915050565b60008060008060008060008060008a1115156133cd57600080fd5b600189101580156133df575060068911155b15156133ea57600080fd5b601b60008a8152602001908152602001600020549650613428600654601c60008c81526020019081526020016000205461369590919063ffffffff16565b9550613455655af3107a400061344789896136e490919063ffffffff16565b6136ff90919063ffffffff16565b945061346a858b61369590919063ffffffff16565b93506000925061348460018a61339490919063ffffffff16565b91506006891415156134a15761349a84836132d3565b92506134e9565b3373ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156134e7573d6000803e3d6000fd5b505b6134fc838761339490919063ffffffff16565b90508097505050505050505092915050565b6000806000806135298660065461339490919063ffffffff16565b9250613551601c6000878152602001908152602001600020548461369590919063ffffffff16565b91506135708261356b60018861339490919063ffffffff16565b61334c565b905080935050505092915050565b80600d8190555042600f8190555050565b6000806135a66002846136e490919063ffffffff16565b91506135bb828461369590919063ffffffff16565b9050601d8490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061362d848361373a565b61363784826137ee565b6001601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b60008282111515156136a357fe5b818303905092915050565b6000806136db600654601c6000600d5481526020019081526020016000205461369590919063ffffffff16565b90508091505090565b60008082848115156136f257fe5b0490508091505092915050565b60008060008414156137145760009150613733565b828402905082848281151561372557fe5b0414151561372f57fe5b8091505b5092915050565b61378c81601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137e48160095461339490919063ffffffff16565b6009819055505050565b61384081601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339490919063ffffffff16565b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138988160085461339490919063ffffffff16565b60088190555050505600a165627a7a72305820718195f9c192db5ad6e7d37685a3cc0725598a69fb3dc25c7533b360740089240029

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

000000000000000000000000000000000000000000000000000000000000d055000000000000000000000000641ad78baca220c5bd28b51ce8e0f495e85fe689000000000000000000000000641ad78baca220c5bd28b51ce8e0f495e85fe689000000000000000000000000eaf61fc150cd5c3bea75744e830d916e60ea5a9f

-----Decoded View---------------
Arg [0] : _rate (uint256): 53333
Arg [1] : _wallet (address): 0x641AD78BAca220C5BD28b51Ce8e0F495e85Fe689
Arg [2] : _owner (address): 0x641AD78BAca220C5BD28b51Ce8e0F495e85Fe689
Arg [3] : _token (address): 0xeaf61FC150CD5c3BeA75744e830D916E60EA5A9F

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000d055
Arg [1] : 000000000000000000000000641ad78baca220c5bd28b51ce8e0f495e85fe689
Arg [2] : 000000000000000000000000641ad78baca220c5bd28b51ce8e0f495e85fe689
Arg [3] : 000000000000000000000000eaf61fc150cd5c3bea75744e830d916e60ea5a9f


Swarm Source

bzzr://718195f9c192db5ad6e7d37685a3cc0725598a69fb3dc25c7533b36074008924

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.