ETH Price: $3,047.09 (+2.24%)
Gas: 2 Gwei

Contract

0x2Dd09C71d951148Bba0F25BE7F76BA401fe8EF84
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Transfer123282062021-04-28 9:45:251165 days ago1619603125IN
GoNetwork: Dutch Auction
0.45167 ETH0.00280644120
Distribute Go To...60656382018-07-31 22:36:042167 days ago1533076564IN
GoNetwork: Dutch Auction
0 ETH0.000217595
Distribute Go To...60570112018-07-30 11:42:402168 days ago1532950960IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60570092018-07-30 11:42:262168 days ago1532950946IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60570032018-07-30 11:40:312168 days ago1532950831IN
GoNetwork: Dutch Auction
0 ETH0.000123855
Distribute Go To...60570012018-07-30 11:40:212168 days ago1532950821IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569992018-07-30 11:39:272168 days ago1532950767IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569932018-07-30 11:38:032168 days ago1532950683IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569912018-07-30 11:37:252168 days ago1532950645IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569892018-07-30 11:36:502168 days ago1532950610IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569852018-07-30 11:35:292168 days ago1532950529IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569832018-07-30 11:34:382168 days ago1532950478IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569802018-07-30 11:33:122168 days ago1532950392IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569732018-07-30 11:31:552168 days ago1532950315IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569712018-07-30 11:31:382168 days ago1532950298IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569692018-07-30 11:31:062168 days ago1532950266IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569602018-07-30 11:27:522168 days ago1532950072IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569582018-07-30 11:27:282168 days ago1532950048IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569562018-07-30 11:27:062168 days ago1532950026IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569472018-07-30 11:24:562168 days ago1532949896IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569452018-07-30 11:24:372168 days ago1532949877IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569432018-07-30 11:24:122168 days ago1532949852IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569362018-07-30 11:22:232168 days ago1532949743IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569342018-07-30 11:21:322168 days ago1532949692IN
GoNetwork: Dutch Auction
0 ETH0.000255145
Distribute Go To...60569322018-07-30 11:21:052168 days ago1532949665IN
GoNetwork: Dutch Auction
0 ETH0.000255145
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
58517472018-06-25 12:28:242203 days ago1529929704
GoNetwork: Dutch Auction
100 ETH
58517402018-06-25 12:26:452203 days ago1529929605
GoNetwork: Dutch Auction
1 ETH
58516822018-06-25 12:10:112203 days ago1529928611
GoNetwork: Dutch Auction
0.3 ETH
58516332018-06-25 12:00:382203 days ago1529928038
GoNetwork: Dutch Auction
2 ETH
58513512018-06-25 10:46:332203 days ago1529923593
GoNetwork: Dutch Auction
0.5 ETH
58512912018-06-25 10:32:192203 days ago1529922739
GoNetwork: Dutch Auction
4 ETH
58510892018-06-25 9:43:162203 days ago1529919796
GoNetwork: Dutch Auction
3 ETH
58510512018-06-25 9:32:162203 days ago1529919136
GoNetwork: Dutch Auction
11 ETH
58508792018-06-25 8:46:582203 days ago1529916418
GoNetwork: Dutch Auction
5 ETH
58508502018-06-25 8:38:112203 days ago1529915891
GoNetwork: Dutch Auction
5 ETH
58506962018-06-25 7:56:182203 days ago1529913378
GoNetwork: Dutch Auction
2 ETH
58504922018-06-25 7:00:072203 days ago1529910007
GoNetwork: Dutch Auction
7.55 ETH
58501522018-06-25 5:31:552203 days ago1529904715
GoNetwork: Dutch Auction
5 ETH
58497342018-06-25 3:42:182203 days ago1529898138
GoNetwork: Dutch Auction
1.44 ETH
58496452018-06-25 3:17:502204 days ago1529896670
GoNetwork: Dutch Auction
33.4 ETH
58495162018-06-25 2:40:562204 days ago1529894456
GoNetwork: Dutch Auction
0.51 ETH
58493792018-06-25 2:03:542204 days ago1529892234
GoNetwork: Dutch Auction
1.9 ETH
58493062018-06-25 1:47:102204 days ago1529891230
GoNetwork: Dutch Auction
2 ETH
58491782018-06-25 1:19:212204 days ago1529889561
GoNetwork: Dutch Auction
25 ETH
58488932018-06-25 0:15:092204 days ago1529885709
GoNetwork: Dutch Auction
0.8 ETH
58482392018-06-24 21:34:222204 days ago1529876062
GoNetwork: Dutch Auction
2 ETH
58464732018-06-24 14:29:262204 days ago1529850566
GoNetwork: Dutch Auction
700 ETH
58463362018-06-24 13:55:052204 days ago1529848505
GoNetwork: Dutch Auction
1 ETH
58460982018-06-24 12:53:472204 days ago1529844827
GoNetwork: Dutch Auction
2.0155 ETH
58460302018-06-24 12:35:512204 days ago1529843751
GoNetwork: Dutch Auction
0.07 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GoTokenDutchAuction

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

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

pragma solidity ^0.4.18;
/*
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
GoToken, a highly scalable, low cost mobile first network infrastructure for Ethereum
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
*/

contract Token {
/*
---------------------------------------------------------------------------------------------
    ERC20 Token standard implementation
    https://github.com/ethereum/EIPs/blob/f90864a3d2b2b45c4decf95efd26b3f0c276051a/EIPS/eip-20-token-standard.md
    https://github.com/ethereum/EIPs/issues/20

    We didn't implement a separate totalsupply() function. Instead the public variable
    totalSupply will automatically create a getter function to access the supply
    of the token.
---------------------------------------------------------------------------------------------
*/
    uint256 public totalSupply;

/*
    ERC20 Token Model
*/
    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function approve(address _who, uint256 _value) public returns (bool success);
    function allowance(address _owner, address _who) public constant returns (uint256 remaining);

/*
---------------------------------------------------------------------------------------------
    Events
---------------------------------------------------------------------------------------------
*/
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

}


/// @title Standard token contract - Standard token implementation.
contract StandardToken is Token {

/*
---------------------------------------------------------------------------------------------
    Storage data structures
---------------------------------------------------------------------------------------------
*/
    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;

/*
---------------------------------------------------------------------------------------------
    Public facing functions
---------------------------------------------------------------------------------------------
*/

    /// @notice Send "_value" tokens to "_to" from "msg.sender".
    /// @dev Transfers sender's tokens to a given address. Returns success.
    /// @param _to Address of token receiver.
    /// @param _value Number of tokens to transfer.
    /// @return Returns success of function call.
    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != 0x0);
        require(_to != address(this));
        require(balances[msg.sender] >= _value);
        require(balances[_to] + _value >= balances[_to]);

        balances[msg.sender] -= _value;
        balances[_to] += _value;

        Transfer(msg.sender, _to, _value);

        return true;
    }

    /// @notice Transfer "_value" tokens from "_from" to "_to" if "msg.sender" is allowed.
    /// @dev Allows for an approved third party to transfer tokens from one
    /// address to another. Returns success.
    /// @param _from Address from where tokens are withdrawn.
    /// @param _to Address to where tokens are sent.
    /// @param _value Number of tokens to transfer.
    /// @return Returns success of function call.
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool)
    {
        //Address shouldn't be null
        require(_from != 0x0);
        require(_to != 0x0);
        require(_to != address(this));
        require(balances[_from] >= _value);
        require(allowed[_from][msg.sender] >= _value);
        require(balances[_to] + _value >= balances[_to]);

        balances[_to] += _value;
        balances[_from] -= _value;
        allowed[_from][msg.sender] -= _value;

        Transfer(_from, _to, _value);

        return true;
    }

    /// @notice Approves "_who" to transfer "_value" tokens from "msg.sender" to any address.
    /// @dev Sets approved amount of tokens for the spender. Returns success.
    /// @param _who Address of allowed account.
    /// @param _value Number of approved tokens.
    /// @return Returns success of function call.
    function approve(address _who, uint256 _value) public returns (bool) {

        // Address shouldn't be null
        require(_who != 0x0);

        // To change the approve amount you first have to reduce the addresses`
        // allowance to zero by calling `approve(_who, 0)` if it is not
        // already 0 to mitigate the race condition described here:
        // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
        require(_value == 0 || allowed[msg.sender][_who] == 0);

        allowed[msg.sender][_who] = _value;
        Approval(msg.sender, _who, _value);
        return true;
    }

    /// @dev Returns number of allowed tokens that a spender can transfer on behalf of a token owner.
    /// @param _owner Address of token owner.
    /// @param _who Address of token spender.
    /// @return Returns remaining allowance for spender.
    function allowance(address _owner, address _who) constant public returns (uint256)
    {
        return allowed[_owner][_who];
    }

    /// @dev Returns number of tokens owned by a given address.
    /// @param _owner Address of token owner.
    /// @return Returns balance of owner.
    function balanceOf(address _owner) constant public returns (uint256) {
        return balances[_owner];
    }
}


/// @title GoToken, a highly scalable, low cost mobile first network infrastructure for Ethereum
contract GoToken is StandardToken {
/*
---------------------------------------------------------------------------------------------
      All GoToken balances are transferable.
      Token name, ticker symbol and decimals
      1 token (GOT) = 1 indivisible unit * multiplier
      The multiplier is set dynamically from token's number of decimals (i.e. 10 ** decimals)

---------------------------------------------------------------------------------------------
*/

/*
---------------------------------------------------------------------------------------------
    Storage data structures
---------------------------------------------------------------------------------------------
*/
    string constant public name = "GoToken";
    string constant public symbol = "GOT";
    uint256 constant public decimals = 18;
    uint256 constant multiplier = 10 ** (decimals);

/*
---------------------------------------------------------------------------------------------
    Events
---------------------------------------------------------------------------------------------
*/
    event Deployed(uint256 indexed _total_supply);
    //event Burnt(address indexed _receiver, uint256 indexed _num, uint256 indexed _total_supply);

/*
---------------------------------------------------------------------------------------------
    Public facing functions
---------------------------------------------------------------------------------------------
*/

    /// @dev GoToken Contract constructor function sets GoToken dutch auction
    /// contract address and assigns the tokens to the auction.
    /// @param auction_address Address of dutch auction contract.
    /// @param wallet_address Address of wallet.
    /// @param initial_supply Number of initially provided token units (indivisible units).
    function GoToken(address auction_address, address wallet_address, uint256 initial_supply) public
    {
        // Auction address should not be null.
        require(auction_address != 0x0);
        require(wallet_address != 0x0);

        // Initial supply is in indivisible units e.g. 50e24
        require(initial_supply > multiplier);

        // Total supply of indivisible GOT units at deployment
        totalSupply = initial_supply;

        // preallocation
        balances[auction_address] = initial_supply / 2;
        balances[wallet_address] = initial_supply / 2;

        // Record the events
        Transfer(0x0, auction_address, balances[auction_address]);
        Transfer(0x0, wallet_address, balances[wallet_address]);

        Deployed(totalSupply);

        assert(totalSupply == balances[auction_address] + balances[wallet_address]);
    }

}


/// @title GoToken Uniform Price Dutch auction contract - distribution of a fixed
/// number of tokens using second price auction, where everybody gets the same final
/// price when the auction ends i.e. the ending bid becomes the finalized
/// price per token for all participants.
contract GoTokenDutchAuction {
/*
---------------------------------------------------------------------------------------------
    GoToken Uniform Price Dutch auction contract - distribution of a fixed
    number of tokens using seconprice auction, where everybody gets the lowest
    price when the auction ends i.e. the ending bid becomes the finalized
    price per token. This is the mechanism for price discovery.

    The uniform price Dutch auction is set up to discover a fair price for a
    fixed amount of GOT tokens. It starts with a very high price which
    continuously declines with every block over time, based on a predefined
    formula. After the auction is started, participants can send in ETH to bid.
    The auction ends once the price multiplied with the number of offered tokens
    equals the total ETH amount sent to the auction. All participants receive
    their tokens at the same final price.

    The main goals of the auction are to enable everyone to participate while
    offering certainty about the maximum total value of all tokens at the time
    of the bid.

    All token balances are transferable.
    Token name, ticker symbol and decimals
    1 token (GOT) = 1 indivisible unit * multiplier
    multiplier set from token's number of decimals (i.e. 10 ** decimals)

---------------------------------------------------------------------------------------------
*/

/*
---------------------------------------------------------------------------------------------
    Data structures for Storage
---------------------------------------------------------------------------------------------
*/

    GoToken public token;
    address public owner_address;
    address public wallet_address;
    address public whitelister_address;
    address public distributor_address;

    // Minimum bid value during the auction
    uint256 constant public bid_threshold = 10 finney;

    // Maximum contribution per ETH address during public sale
    //uint256 constant public MAX_CONTRIBUTION_PUBLICSALE = 20 ether;

    // token multiplied derived out of decimals
    uint256 public token_multiplier;

    // Total number of indivisible GoTokens (GOT * token_multiplier) that will be auctioned
    uint256 public num_tokens_auctioned;

/*
---------------------------------------------------------------------------------------------
    Price decay function parameters to be changed depending on the desired outcome
    This is modeled based on composite exponentially decaying curve auction price model.
    The price curves are mathematically modeled per the business needs. There are two
    exponentially decaying curves for teh auction: curve 1 is for teh first eight days
    and curve 2 is for the remaining days until the auction is finalized.
---------------------------------------------------------------------------------------------
*/

    // Starting price in WEI; e.g. 2 * 10 ** 18
    uint256 public price_start;

    uint256 constant public CURVE_CUTOFF_DURATION = 8 days;

    // Price constant for first eight days of the price curve; e.g. 1728
    uint256 public price_constant1;

    // Price exponent for first eight days of the price curve; e.g. 2
    uint256 public price_exponent1;

    // Price constant for eight plus days of the price curve; e.g. 1257
    uint256 public price_constant2;

    // Price exponent for eight plus days of the price curve; e.g. 2
    uint256 public price_exponent2;

    // For private sale start time (same as auction deployement time)
    uint256 public privatesale_start_time;

    // For calculating elapsed time for price auction
    uint256 public auction_start_time;
    uint256 public end_time;
    uint256 public start_block;

    // All ETH received from the bids
    uint256 public received_wei;
    uint256 public received_wei_with_bonus;

    // Cumulative ETH funds for which the tokens have been claimed
    uint256 public funds_claimed;

    // Wei per token (GOT * token_multiplier)
    uint256 public final_price;

    struct Account {
  		uint256 accounted;	// bid value including bonus
  		uint256 received;	// the amount received, without bonus
  	}

    // Address of the Bidder => bid value
    mapping (address => Account) public bids;

    // privatesalewhitelist for private ETH addresses
    mapping (address => bool) public privatesalewhitelist;

    // publicsalewhitelist for addresses that want to bid in public sale excluding private sale accounts
    mapping (address => bool) public publicsalewhitelist;

/*
---------------------------------------------------------------------------------------------
    Bonus tiers
---------------------------------------------------------------------------------------------
*/
    // Maximum duration after sale begins that 15% bonus is active.
  	uint256 constant public BONUS_DAY1_DURATION = 24 hours; ///24 hours;

  	// Maximum duration after sale begins that 10% bonus is active.
  	uint256 constant public BONUS_DAY2_DURATION = 48 hours; ///48 hours;

  	// Maximum duration after sale begins that 5% bonus is active.
  	uint256 constant public BONUS_DAY3_DURATION = 72 hours; ///72 hours;

    // The current percentage of bonus that contributors get.
  	uint256 public currentBonus = 0;

    // Waiting time in days before a participant can claim tokens after the end of the auction
    uint256 constant public TOKEN_CLAIM_WAIT_PERIOD = 0 days;

    // Keep track of stages during the auction and contract deployment process
    Stages public stage;

    enum Stages {
        AuctionDeployed,
        AuctionSetUp,
        AuctionStarted,
        AuctionEnded,
        TokensDistributed
    }

/*
---------------------------------------------------------------------------------------------
    Modifiers
---------------------------------------------------------------------------------------------
*/
    // State of the auction
    modifier atStage(Stages _stage) {
        require(stage == _stage);
        _;
    }

    // Only owner of the contract
    modifier isOwner() {
        require(msg.sender == owner_address);
        _;
    }

    // Only who is allowed to whitelist the participant ETH addresses (specified
    // during the contract deployment)
    modifier isWhitelister() {
        require(msg.sender == whitelister_address);
        _;
    }

    // Only who is allowed to distribute the GOT to the participant ETH addresses (specified
    // during the contract deployment)
    modifier isDistributor() {
        require(msg.sender == distributor_address);
        _;
    }
/*
---------------------------------------------------------------------------------------------
    Events
---------------------------------------------------------------------------------------------
*/

    event Deployed(uint256 indexed _price_start, uint256 _price_constant1, uint256 _price_exponent1, uint256  _price_constant2, uint256 _price_exponent2);
    event Setup();
    event AuctionStarted(uint256 indexed _auction_start_time, uint256 indexed _block_number);
    event BidSubmission(address indexed _sender,uint256 _amount, uint256 _amount_with_bonus, uint256 _remaining_funds_to_end_auction);
    event ClaimedTokens(address indexed _recipient, uint256 _sent_amount);
    event AuctionEnded(uint256 _final_price);
    event TokensDistributed();

    /// whitelisting events for private sale and public sale ETH addresses
  	event PrivateSaleWhitelisted(address indexed who);
    event RemovedFromPrivateSaleWhitelist(address indexed who);
    event PublicSaleWhitelisted(address indexed who);
    event RemovedFromPublicSaleWhitelist(address indexed who);

/*
---------------------------------------------------------------------------------------------
    Public facing functions
---------------------------------------------------------------------------------------------
*/

    /// @dev GoToken Contract constructor function sets the starting price,
    /// price constant and price exponent for calculating the Dutch Auction price.
    /// @param _wallet_address Wallet address to which all contributed ETH will be forwarded.
    function GoTokenDutchAuction(
        address _wallet_address,
        address _whitelister_address,
        address _distributor_address,
        uint256 _price_start,
        uint256 _price_constant1,
        uint256 _price_exponent1,
        uint256 _price_constant2,
        uint256 _price_exponent2)
        public
    {
        // Address shouldn't be null
        require(_wallet_address != 0x0);
        require(_whitelister_address != 0x0);
        require(_distributor_address != 0x0);
        wallet_address = _wallet_address;
        whitelister_address = _whitelister_address;
        distributor_address = _distributor_address;

        owner_address = msg.sender;
        stage = Stages.AuctionDeployed;
        changePriceCurveSettings(_price_start, _price_constant1, _price_exponent1, _price_constant2, _price_exponent2);
        Deployed(_price_start, _price_constant1, _price_exponent1, _price_constant2, _price_exponent2);
    }

    /// @dev Fallback function for the contract, which calls bid()
    function () public payable {
        bid();
    }

    /// @notice Set "_token_address" as the token address to be used in the auction.
    /// @dev Setup function sets external contracts addresses.
    /// @param _token_address Token address.
    function setup(address _token_address) public isOwner atStage(Stages.AuctionDeployed) {
        require(_token_address != 0x0);
        token = GoToken(_token_address);

        // Get number of GoToken indivisible tokens (GOT * token_multiplier)
        // to be auctioned from token auction balance
        num_tokens_auctioned = token.balanceOf(address(this));

        // Set the number of the token multiplier for its decimals
        token_multiplier = 10 ** (token.decimals());

        // State is set to Auction Setup
        stage = Stages.AuctionSetUp;
        Setup();
    }

    /// @notice Set "_price_start", "_price_constant1" and "_price_exponent1"
    ///  "_price_constant2" and "_price_exponent2" as
    /// the new starting price, price constant and price exponent for the auction price.
    /// @dev Changes auction price function parameters before auction is started.
    /// @param _price_start Updated start price.
    /// @param _price_constant1 Updated price divisor constant.
    /// @param _price_exponent1 Updated price divisor exponent.
    /// @param _price_constant2 Updated price divisor constant.
    /// @param _price_exponent2 Updated price divisor exponent.
    function changePriceCurveSettings(
        uint256 _price_start,
        uint256 _price_constant1,
        uint256 _price_exponent1,
        uint256 _price_constant2,
        uint256 _price_exponent2)
        internal
    {
        // You can change the price curve settings only when either the auction is Deployed
        // or the auction is setup. You can't change during the auction is running or ended.
        require(stage == Stages.AuctionDeployed || stage == Stages.AuctionSetUp);
        require(_price_start > 0);
        require(_price_constant1 > 0);
        require(_price_constant2 > 0);

        price_start = _price_start;
        price_constant1 = _price_constant1;
        price_exponent1 = _price_exponent1;
        price_constant2 = _price_constant2;
        price_exponent2 = _price_exponent2;
    }

/*
---------------------------------------------------------------------------------------------
    Functions related to whitelisting of presale and public sale ETH addresses.
    The Whitelister must add the participant's ETH address before they can bid.
---------------------------------------------------------------------------------------------
*/
    // @notice Adds account addresses to public sale ETH whitelist.
    // @dev Adds account addresses to public sale ETH whitelist.
    // @param _bidder_addresses Array of addresses. Use double quoted array.
    function addToPublicSaleWhitelist(address[] _bidder_addresses) public isWhitelister {
        for (uint32 i = 0; i < _bidder_addresses.length; i++) {
            require(!privatesalewhitelist[_bidder_addresses[i]]); //Can't be in public whitelist
            publicsalewhitelist[_bidder_addresses[i]] = true;
            PublicSaleWhitelisted(_bidder_addresses[i]);
        }
    }

    // @notice Removes account addresses from public sale ETH whitelist.
    // @dev Removes account addresses from public sale ETH whitelist.
    // @param _bidder_addresses Array of addresses.  Use double quoted array.
    function removeFromPublicSaleWhitelist(address[] _bidder_addresses) public isWhitelister {
        for (uint32 i = 0; i < _bidder_addresses.length; i++) {
            publicsalewhitelist[_bidder_addresses[i]] = false;
            RemovedFromPublicSaleWhitelist(_bidder_addresses[i]);
        }
    }

    // Private sale contributors whitelist. Only Admin can add or remove

  	// @notice Adds presale account addresses to privatesalewhitelist.
    // @ Admin Adds presale account addresses to privatesalewhitelist.
    // @param _bidder_addresses Array of addresses.
    function addToPrivateSaleWhitelist(address[] _bidder_addresses) public isOwner {
        for (uint32 i = 0; i < _bidder_addresses.length; i++) {
              privatesalewhitelist[_bidder_addresses[i]] = true;
  						PrivateSaleWhitelisted(_bidder_addresses[i]);
          }
      }

      // @notice Removes presale account addresses from privatesalewhitelist.
      // @ Admin Removes presale account addresses from privatesalewhitelist.
      // @param _bidder_addresses Array of addresses.
      function removeFromPrivateSaleWhitelist(address[] _bidder_addresses) public isOwner {
          for (uint32 i = 0; i < _bidder_addresses.length; i++) {
              privatesalewhitelist[_bidder_addresses[i]] = false;
  						RemovedFromPrivateSaleWhitelist(_bidder_addresses[i]);
          }
      }

    // @notice Start the auction.
    // @dev Starts auction and sets auction_start_time.
    function startAuction() public isOwner atStage(Stages.AuctionSetUp) {
        stage = Stages.AuctionStarted;
        auction_start_time = now;
        start_block = block.number;
        AuctionStarted(auction_start_time, start_block);
    }

    /// @notice Send "msg.value" WEI to the auction from the "msg.sender" account.
    /// @dev Allows to send a bid to the auction.
    function bid() public payable
    {
        // Address shouldn't be null and the minimum bid amount of contribution is met.
        // Private sale contributor can submit a bid at AuctionSetUp before AuctionStarted
        // When AuctionStarted only private sale and public sale whitelisted ETH addresses can participate
        require(stage == Stages.AuctionSetUp || stage == Stages.AuctionStarted);
        require(privatesalewhitelist[msg.sender] || publicsalewhitelist[msg.sender]);
        if (stage == Stages.AuctionSetUp){
          require(privatesalewhitelist[msg.sender]);
        }
        require(msg.value > 0);
        require(bids[msg.sender].received + msg.value >= bid_threshold);
        assert(bids[msg.sender].received + msg.value >= msg.value);

        // Maximum public sale contribution per ETH account
        //if (stage == Stages.AuctionStarted && publicsalewhitelist[msg.sender]) {
        //  require (bids[msg.sender].received + msg.value <= MAX_CONTRIBUTION_PUBLICSALE);
        //}

        // Remaining funds without the current bid value to end the auction
        uint256 remaining_funds_to_end_auction = remainingFundsToEndAuction();

        // The bid value must be less than the funds remaining to end the auction
        // at the current price.
        require(msg.value <= remaining_funds_to_end_auction);

/*
---------------------------------------------------------------------------------------------
        Bonus period settings
---------------------------------------------------------------------------------------------
*/
        //Private sale bids before Auction starts
        if (stage == Stages.AuctionSetUp){
          require(privatesalewhitelist[msg.sender]);
          currentBonus = 25; //private sale bonus before AuctionStarted
        }
        else if (stage == Stages.AuctionStarted) {
          // private sale contributors bonus period settings
      		if (privatesalewhitelist[msg.sender] && now >= auction_start_time  && now < auction_start_time + BONUS_DAY1_DURATION) {
      				currentBonus = 25; //private sale contributor Day 1 bonus
      		}
          else if (privatesalewhitelist[msg.sender] && now >= auction_start_time + BONUS_DAY1_DURATION && now < auction_start_time + BONUS_DAY2_DURATION ) {
      				currentBonus = 25; //private sale contributor Day 2 bonus
      		}
      		else if (privatesalewhitelist[msg.sender] && now >= auction_start_time + BONUS_DAY2_DURATION && now < auction_start_time + BONUS_DAY3_DURATION) {
      				currentBonus = 25; //private sale contributor Day 3 bonus
      		}
          else if (privatesalewhitelist[msg.sender] && now >= auction_start_time + BONUS_DAY3_DURATION) {
              currentBonus = 25; //private sale contributor Day 4+ bonus
          }
          else if (publicsalewhitelist[msg.sender] && now >= auction_start_time  && now < auction_start_time + BONUS_DAY1_DURATION) {
      				currentBonus = 15; //private sale contributor Day 1 bonus
      		}
          else if (publicsalewhitelist[msg.sender] && now >= auction_start_time + BONUS_DAY1_DURATION && now < auction_start_time + BONUS_DAY2_DURATION ) {
      				currentBonus = 10; //private sale contributor Day 2 bonus
      		}
      		else if (publicsalewhitelist[msg.sender] && now >= auction_start_time + BONUS_DAY2_DURATION && now < auction_start_time + BONUS_DAY3_DURATION) {
      				currentBonus = 5; //private sale contributor Day 3 bonus
      		}
          else if (publicsalewhitelist[msg.sender] && now >= auction_start_time + BONUS_DAY3_DURATION) {
              currentBonus = 0; //private sale contributor Day 4+ bonus
          }
      		else {
      				currentBonus = 0;
      		}
        }
        else {
          currentBonus = 0;
        }

        // amount raised including bonus
        uint256 accounted = msg.value + msg.value * (currentBonus) / 100;

        // Save the bid amount received with and without bonus.
    		bids[msg.sender].accounted += accounted; //including bonus
    		bids[msg.sender].received += msg.value;

        // keep track of total amount raised and with bonus
        received_wei += msg.value;
        received_wei_with_bonus += accounted;

        // Send bid amount to wallet
        wallet_address.transfer(msg.value);

        //Log the bid
        BidSubmission(msg.sender, msg.value, accounted, remaining_funds_to_end_auction);

        assert(received_wei >= msg.value);
        assert(received_wei_with_bonus >= accounted);
    }

    // @notice Finalize the auction - sets the final GoToken price and
    // changes the auction stage after no bids are allowed. Only owner can finalize the auction.
    // The owner can end the auction anytime after either the auction is deployed or started.
    // @dev Finalize auction and set the final GOT token price.
    function finalizeAuction() public isOwner
    {
        // The owner can end the auction anytime during the stages
        // AuctionSetUp and AuctionStarted
        require(stage == Stages.AuctionSetUp || stage == Stages.AuctionStarted);

        // Calculate the final price = WEI / (GOT / token_multiplier)
        final_price = token_multiplier * received_wei_with_bonus / num_tokens_auctioned;

        // End the auction
        end_time = now;
        stage = Stages.AuctionEnded;
        AuctionEnded(final_price);

        assert(final_price > 0);
    }

    // @notice Distribute GoTokens for "receiver_address" after the auction has ended by the owner.
    // @dev Distribute GoTokens for "receiver_address" after auction has ended by the owner.
    // @param receiver_address GoTokens will be assigned to this address if eligible.
    function distributeGoTokens(address receiver_address)
        public isDistributor atStage(Stages.AuctionEnded) returns (bool)
    {
        // Waiting period in days after the end of the auction, before anyone can claim GoTokens.
        // Ensures enough time to check if auction was finalized correctly
        // before users start transacting tokens
        require(now > end_time + TOKEN_CLAIM_WAIT_PERIOD);
        require(receiver_address != 0x0);
        require(bids[receiver_address].received > 0);

        if (bids[receiver_address].received == 0 || bids[receiver_address].accounted == 0) {
            return false;
        }

        // Number of GOT = bid_wei_with_bonus / (wei_per_GOT * token_multiplier)
        // Includes the bonus
        uint256 num = (token_multiplier * bids[receiver_address].accounted) / final_price;

        // Due to final_price rounding, the number of assigned tokens may be higher
        // than expected. Therefore, the number of remaining unassigned auction tokens
        // may be smaller than the number of tokens needed for the last claimTokens call
        uint256 auction_tokens_balance = token.balanceOf(address(this));
        if (num > auction_tokens_balance) {
            num = auction_tokens_balance;
        }

        // Update the total amount of funds for which tokens have been claimed
        funds_claimed += bids[receiver_address].received;

        // Set receiver bid to 0 before assigning tokens
        bids[receiver_address].accounted = 0;
        bids[receiver_address].received = 0;

        // Send the GoTokens to the receiver address including the qualified bonus
        require(token.transfer(receiver_address, num));

        // Log the event for claimed GoTokens
        ClaimedTokens(receiver_address, num);

        // After the last tokens are claimed, change the auction stage
        // Due to the above logic described, rounding errors will not be an issue here.
        if (funds_claimed == received_wei) {
            stage = Stages.TokensDistributed;
            TokensDistributed();
        }

        assert(token.balanceOf(receiver_address) >= num);
        assert(bids[receiver_address].accounted == 0);
        assert(bids[receiver_address].received == 0);
        return true;
    }

    /// @notice Get the GOT price in WEI during the auction, at the time of
    /// calling this function. Returns 0 if auction has ended.
    /// Returns "price_start" before auction has started.
    /// @dev Calculates the current GOT token price in WEI.
    /// @return Returns WEI per indivisible GOT (token_multiplier * GOT).
    function price() public constant returns (uint256) {
        if (stage == Stages.AuctionEnded ||
            stage == Stages.TokensDistributed) {
            return 0;
        }
        return calcTokenPrice();
    }

    /// @notice Get the remaining funds needed to end the auction, calculated at
    /// the current GOT price in WEI.
    /// @dev The remaining funds necessary to end the auction at the current GOT price in WEI.
    /// @return Returns the remaining funds to end the auction in WEI.
    function remainingFundsToEndAuction() constant public returns (uint256) {

        // num_tokens_auctioned = total number of indivisible GOT (GOT * token_multiplier) that is auctioned
        uint256 required_wei_at_price = num_tokens_auctioned * price() / token_multiplier;
        if (required_wei_at_price <= received_wei) {
            return 0;
        }

        return required_wei_at_price - received_wei;
    }

/*
---------------------------------------------------------------------------------------------
    Private function for calcuclating current token price
---------------------------------------------------------------------------------------------
*/

    // @dev Calculates the token price (WEI / GOT) at the current timestamp
    // during the auction; elapsed time = 0 before auction starts.
    // This is a composite exponentially decaying curve (two curves combined).
    // The curve 1 is for the first 8 days and the curve 2 is for the remaining days.
    // They are of the form:
    //         current_price  = price_start * (1 + elapsed) / (1 + elapsed + decay_rate);
    //          where, decay_rate = elapsed ** price_exponent / price_constant;
    // Based on the provided parameters, the price does not change in the first
    // price_constant^(1/price_exponent) seconds due to rounding.
    // Rounding in `decay_rate` also produces values that increase instead of decrease
    // in the beginning of the auction; these spikes decrease over time and are noticeable
    // only in first hours. This should be calculated before usage.
    // @return Returns the token price - WEI per GOT.

    function calcTokenPrice() constant private returns (uint256) {
        uint256 elapsed;
        uint256 decay_rate1;
        uint256 decay_rate2;
        if (stage == Stages.AuctionDeployed || stage == Stages.AuctionSetUp){
          return price_start;
        }
        if (stage == Stages.AuctionStarted) {
            elapsed = now - auction_start_time;
            // The first eight days auction price curve
            if (now >= auction_start_time && now < auction_start_time + CURVE_CUTOFF_DURATION){
              decay_rate1 = elapsed ** price_exponent1 / price_constant1;
              return price_start * (1 + elapsed) / (1 + elapsed + decay_rate1);
            }
            // The remaining days auction price curve
            else if (now >= auction_start_time && now >= auction_start_time + CURVE_CUTOFF_DURATION){
              decay_rate2 = elapsed ** price_exponent2 / price_constant2;
              return price_start * (1 + elapsed) / (1 + elapsed + decay_rate2);
            }
            else {
              return price_start;
            }

        }
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"num_tokens_auctioned","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"final_price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"publicsalewhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"auction_start_time","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price_constant2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"end_time","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"bid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"BONUS_DAY2_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token_multiplier","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BONUS_DAY3_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price_start","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bid_threshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"funds_claimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_CLAIM_WAIT_PERIOD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"privatesale_start_time","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelister_address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price_constant1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bids","outputs":[{"name":"accounted","type":"uint256"},{"name":"received","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token_address","type":"address"}],"name":"setup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"startAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"received_wei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price_exponent1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner_address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"privatesalewhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bidder_addresses","type":"address[]"}],"name":"addToPublicSaleWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"receiver_address","type":"address"}],"name":"distributeGoTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price_exponent2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BONUS_DAY1_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bidder_addresses","type":"address[]"}],"name":"removeFromPrivateSaleWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"remainingFundsToEndAuction","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"distributor_address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bidder_addresses","type":"address[]"}],"name":"addToPrivateSaleWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"start_block","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"received_wei_with_bonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bidder_addresses","type":"address[]"}],"name":"removeFromPublicSaleWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet_address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CURVE_CUTOFF_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalizeAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_wallet_address","type":"address"},{"name":"_whitelister_address","type":"address"},{"name":"_distributor_address","type":"address"},{"name":"_price_start","type":"uint256"},{"name":"_price_constant1","type":"uint256"},{"name":"_price_exponent1","type":"uint256"},{"name":"_price_constant2","type":"uint256"},{"name":"_price_exponent2","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_price_start","type":"uint256"},{"indexed":false,"name":"_price_constant1","type":"uint256"},{"indexed":false,"name":"_price_exponent1","type":"uint256"},{"indexed":false,"name":"_price_constant2","type":"uint256"},{"indexed":false,"name":"_price_exponent2","type":"uint256"}],"name":"Deployed","type":"event"},{"anonymous":false,"inputs":[],"name":"Setup","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_auction_start_time","type":"uint256"},{"indexed":true,"name":"_block_number","type":"uint256"}],"name":"AuctionStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_amount_with_bonus","type":"uint256"},{"indexed":false,"name":"_remaining_funds_to_end_auction","type":"uint256"}],"name":"BidSubmission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_sent_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_final_price","type":"uint256"}],"name":"AuctionEnded","type":"event"},{"anonymous":false,"inputs":[],"name":"TokensDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"}],"name":"PrivateSaleWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"}],"name":"RemovedFromPrivateSaleWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"}],"name":"PublicSaleWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"}],"name":"RemovedFromPublicSaleWhitelist","type":"event"}]

6060604052600060175534156200001557600080fd5b6040516101008062001ae88339810160405280805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191906020018051915050600160a060020a03881615156200007457600080fd5b600160a060020a03871615156200008a57600080fd5b600160a060020a0386161515620000a057600080fd5b60028054600160a060020a0319908116600160a060020a038b8116919091179092556003805482168a841617905560048054821689841617905560018054909116339092169190911790556018805460ff19169055620001128585858585640100000000620001708102620018451704565b847f10f552ccef5a3576f823ef456145fc90b129f5728315fd5d20a35693278328c3858585856040518085815260200184815260200183815260200182815260200194505050505060405180910390a25050505050505050620001ef565b600060185460ff1660048111156200018457fe5b1480620001a25750600160185460ff166004811115620001a057fe5b145b1515620001ae57600080fd5b60008511620001bc57600080fd5b60008411620001ca57600080fd5b60008211620001d857600080fd5b600794909455600892909255600955600a55600b55565b6118e980620001ff6000396000f3006060604052600436106101ea5763ffffffff60e060020a60003504166303cc7b8581146101f457806308b309e3146102195780630a177cc61461022c5780630eaaf5ac1461025f578063144593091461027257806316243356146102855780631998aeef146101ea5780631a76e30c146102985780631e335962146102ab578063220d8707146102be57806329b4d111146102d15780632a887299146102e45780632aefb7c5146102f75780634254704f1461030a57806346a54e151461031d5780634e012918146103305780635477d33f1461035f57806362ea82db1461037257806366d38203146103a95780636b64c769146103c85780637b10e717146103db5780637feed5b6146103ee57806380edef8e1461040157806383d46469146104145780638a0e5a75146104335780639ff90e7714610482578063a035b1fe146104a1578063a4a5f550146104b4578063a786c1d2146104c7578063aed83846146104da578063b26209f614610529578063b2ad35c01461053c578063b6d31d971461054f578063b87fb3db1461059e578063c040e6b8146105b1578063c5340dcd146105e8578063e22497e4146105fb578063e776a5b51461064a578063eca73f641461065d578063f7682aa514610670578063f77282ab14610683578063fc0c546a14610696575b6101f26106a9565b005b34156101ff57600080fd5b610207610b9d565b60405190815260200160405180910390f35b341561022457600080fd5b610207610ba3565b341561023757600080fd5b61024b600160a060020a0360043516610ba9565b604051901515815260200160405180910390f35b341561026a57600080fd5b610207610bbe565b341561027d57600080fd5b610207610bc4565b341561029057600080fd5b610207610bca565b34156102a357600080fd5b610207610bd0565b34156102b657600080fd5b610207610bd7565b34156102c957600080fd5b610207610bdd565b34156102dc57600080fd5b610207610be4565b34156102ef57600080fd5b610207610bea565b341561030257600080fd5b610207610bf5565b341561031557600080fd5b610207610bfb565b341561032857600080fd5b610207610c00565b341561033b57600080fd5b610343610c06565b604051600160a060020a03909116815260200160405180910390f35b341561036a57600080fd5b610207610c15565b341561037d57600080fd5b610391600160a060020a0360043516610c1b565b60405191825260208201526040908101905180910390f35b34156103b457600080fd5b6101f2600160a060020a0360043516610c34565b34156103d357600080fd5b6101f2610dc1565b34156103e657600080fd5b610207610e43565b34156103f957600080fd5b610207610e49565b341561040c57600080fd5b610343610e4f565b341561041f57600080fd5b61024b600160a060020a0360043516610e5e565b341561043e57600080fd5b6101f26004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650610e7395505050505050565b341561048d57600080fd5b61024b600160a060020a0360043516610f8e565b34156104ac57600080fd5b61020761131d565b34156104bf57600080fd5b610207611369565b34156104d257600080fd5b61020761136f565b34156104e557600080fd5b6101f2600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061137695505050505050565b341561053457600080fd5b61020761144a565b341561054757600080fd5b610343611488565b341561055a57600080fd5b6101f2600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061149795505050505050565b34156105a957600080fd5b61020761156b565b34156105bc57600080fd5b6105c4611571565b604051808260048111156105d457fe5b60ff16815260200191505060405180910390f35b34156105f357600080fd5b61020761157a565b341561060657600080fd5b6101f2600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061158095505050505050565b341561065557600080fd5b610343611654565b341561066857600080fd5b610207611663565b341561067b57600080fd5b610207611669565b341561068e57600080fd5b6101f2611670565b34156106a157600080fd5b610343611731565b600080600160185460ff1660048111156106bf57fe5b14806106db5750600260185460ff1660048111156106d957fe5b145b15156106e657600080fd5b600160a060020a03331660009081526015602052604090205460ff16806107255750600160a060020a03331660009081526016602052604090205460ff165b151561073057600080fd5b600160185460ff16600481111561074357fe5b141561077057600160a060020a03331660009081526015602052604090205460ff16151561077057600080fd5b6000341161077d57600080fd5b33600160a060020a0316600090815260146020526040902060010154662386f26fc100003490910110156107b057600080fd5b600160a060020a0333166000908152601460205260409020600101543490810110156107d857fe5b6107e061144a565b915034829011156107f057600080fd5b600160185460ff16600481111561080357fe5b141561083a57600160a060020a03331660009081526015602052604090205460ff16151561083057600080fd5b6019601755610ab6565b600260185460ff16600481111561084d57fe5b1415610ab057600160a060020a03331660009081526015602052604090205460ff16801561087d5750600d544210155b801561088f575062015180600d540142105b1561089e576019601755610aab565b600160a060020a03331660009081526015602052604090205460ff1680156108cd575062015180600d54014210155b80156108df57506202a300600d540142105b156108ee576019601755610aab565b600160a060020a03331660009081526015602052604090205460ff16801561091d57506202a300600d54014210155b801561092f57506203f480600d540142105b1561093e576019601755610aab565b600160a060020a03331660009081526015602052604090205460ff16801561096d57506203f480600d54014210155b1561097c576019601755610aab565b600160a060020a03331660009081526016602052604090205460ff1680156109a65750600d544210155b80156109b8575062015180600d540142105b156109c757600f601755610aab565b600160a060020a03331660009081526016602052604090205460ff1680156109f6575062015180600d54014210155b8015610a0857506202a300600d540142105b15610a1757600a601755610aab565b600160a060020a03331660009081526016602052604090205460ff168015610a4657506202a300600d54014210155b8015610a5857506203f480600d540142105b15610a67576005601755610aab565b600160a060020a03331660009081526016602052604090205460ff168015610a9657506203f480600d54014210155b15610aa5576000601755610aab565b60006017555b610ab6565b60006017555b6017546064903402600160a060020a033381166000908152601460205260409081902080543495909404850193840181556001018054850190556010805485019055601180548401905560025492945091169180156108fc029151600060405180830381858888f193505050501515610b2e57600080fd5b33600160a060020a03167f95c7f715d8ba820069888095983b8c8ef0960bd6371027a386f81ad7a03dd47134838560405180848152602001838152602001828152602001935050505060405180910390a260105434901015610b8c57fe5b60115481901015610b9957fe5b5050565b60065481565b60135481565b60166020526000908152604090205460ff1681565b600d5481565b600a5481565b600e5481565b6202a30081565b60055481565b6203f48081565b60075481565b662386f26fc1000081565b60125481565b600081565b600c5481565b600354600160a060020a031681565b60085481565b6014602052600090815260409020805460019091015482565b60015433600160a060020a03908116911614610c4f57600080fd5b60008060185460ff166004811115610c6357fe5b14610c6d57600080fd5b600160a060020a0382161515610c8257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038481169190911780835516906370a082319030906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610cfe57600080fd5b6102c65a03f11515610d0f57600080fd5b50505060405180516006555060008054600160a060020a03169063313ce56790604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d6457600080fd5b6102c65a03f11515610d7557600080fd5b5050506040518051600a0a600555506018805460ff191660011790557f587930504fa5b1062f394d90f9dac9ecadd354ed23a97af9ea4e44dff4870a8460405160405180910390a15050565b60015433600160a060020a03908116911614610ddc57600080fd5b60018060185460ff166004811115610df057fe5b14610dfa57600080fd5b6018805460ff1916600217905542600d81905543600f819055907ff8910119ddbef5440c54532457dfe8250a10ed39e583292818f44724b9e1344c60405160405180910390a350565b60105481565b60095481565b600154600160a060020a031681565b60156020526000908152604090205460ff1681565b60035460009033600160a060020a03908116911614610e9157600080fd5b5060005b81518163ffffffff161015610b995760156000838363ffffffff1681518110610eba57fe5b90602001906020020151600160a060020a0316815260208101919091526040016000205460ff1615610eeb57600080fd5b600160166000848463ffffffff1681518110610f0357fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790558163ffffffff821681518110610f4757fe5b90602001906020020151600160a060020a03167f9cb56c3c4406adeb11f1b9c8f2821408099c71151c5b593e6b5134d2ca9365e560405160405180910390a2600101610e95565b6004546000908190819033600160a060020a03908116911614610fb057600080fd5b60038060185460ff166004811115610fc457fe5b14610fce57600080fd5b600e544211610fdc57600080fd5b600160a060020a0385161515610ff157600080fd5b600160a060020a0385166000908152601460205260408120600101541161101757600080fd5b600160a060020a03851660009081526014602052604090206001015415806110555750600160a060020a038516600090815260146020526040902054155b156110635760009350611315565b601354600160a060020a0386166000908152601460205260409020546005540281151561108c57fe5b60008054929091049450600160a060020a03909116906370a082319030906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156110ef57600080fd5b6102c65a03f1151561110057600080fd5b505050604051805192505081831115611117578192505b600160a060020a038086166000908152601460205260408082206001810180546012805490910190559083905582905581549092169163a9059cbb918891879190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156111a057600080fd5b6102c65a03f115156111b157600080fd5b5050506040518051905015156111c657600080fd5b84600160a060020a03167fe9aa550fd75d0d28e07fa9dd67d3ae705678776f6c4a75abd09534f93e7d79078460405190815260200160405180910390a26010546012541415611249576018805460ff191660041790557fcea85459abe456c560868e61c476933dcee35a72aba5f546e93715929a69618660405160405180910390a15b600080548491600160a060020a03909116906370a082319088906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156112a857600080fd5b6102c65a03f115156112b957600080fd5b50505060405180519050101515156112cd57fe5b600160a060020a038516600090815260146020526040902054156112ed57fe5b600160a060020a0385166000908152601460205260409020600101541561131057fe5b600193505b505050919050565b6000600360185460ff16600481111561133257fe5b148061134e5750600460185460ff16600481111561134c57fe5b145b1561135b57506000611366565b611363611740565b90505b90565b600b5481565b6201518081565b60015460009033600160a060020a0390811691161461139457600080fd5b5060005b81518163ffffffff161015610b9957600060156000848463ffffffff16815181106113bf57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790558163ffffffff82168151811061140357fe5b90602001906020020151600160a060020a03167fb16e2862ca4a5512ecbe3359ee0899e72c16b9df25c879e716fb457bafe700ab60405160405180910390a2600101611398565b60008060055461145861131d565b6006540281151561146557fe5b0490506010548111151561147c5760009150611484565b601054810391505b5090565b600454600160a060020a031681565b60015460009033600160a060020a039081169116146114b557600080fd5b5060005b81518163ffffffff161015610b9957600160156000848463ffffffff16815181106114e057fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790558163ffffffff82168151811061152457fe5b90602001906020020151600160a060020a03167f3a4d818091b5f82c68d5a051412c5120883733a5f9ae246e1b51ac6a5c0cc22860405160405180910390a26001016114b9565b600f5481565b60185460ff1681565b60115481565b60035460009033600160a060020a0390811691161461159e57600080fd5b5060005b81518163ffffffff161015610b9957600060166000848463ffffffff16815181106115c957fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790558163ffffffff82168151811061160d57fe5b90602001906020020151600160a060020a03167fdf9548ac0f1ec0772eb68261447352dd3c0ffca6dc25cbaab31ccd6c7f9bf8d860405160405180910390a26001016115a2565b600254600160a060020a031681565b60175481565b620a8c0081565b60015433600160a060020a0390811691161461168b57600080fd5b600160185460ff16600481111561169e57fe5b14806116ba5750600260185460ff1660048111156116b857fe5b145b15156116c557600080fd5b600654601154600554028115156116d857fe5b04601381905542600e556018805460ff191660031790557f45806e512b1f4f10e33e8b3cb64d1d11d998d8c554a95e0841fc1c701278bd5d9060405190815260200160405180910390a16013546000901161172f57fe5b565b600054600160a060020a031681565b60008080808060185460ff16600481111561175757fe5b14806117735750600160185460ff16600481111561177157fe5b145b1561178257600754935061183f565b600260185460ff16600481111561179557fe5b141561183f57600d54428181039450108015906117b85750620a8c00600d540142105b156117f057600854600954840a8115156117ce57fe5b04915081836001010183600101600754028115156117e857fe5b04935061183f565b600d5442101580156118095750620a8c00600d54014210155b1561183957600a54600b54840a81151561181f57fe5b04905080836001010183600101600754028115156117e857fe5b60075493505b50505090565b600060185460ff16600481111561185857fe5b14806118745750600160185460ff16600481111561187257fe5b145b151561187f57600080fd5b6000851161188c57600080fd5b6000841161189957600080fd5b600082116118a657600080fd5b600794909455600892909255600955600a55600b555600a165627a7a72305820e06602d9c1e5a8e6f25d5319e77c0dc8cc0471de6aa7e8f766e69fd4159b96a60029000000000000000000000000175af261088b31e58ba384b3758f14bcf6c1f4e1000000000000000000000000b1c5d197bba11cec87930dca7187e7daa7f20f8f000000000000000000000000baecf676f80943ca982487e71fd52cb1cd75531e0000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000006c0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004e90000000000000000000000000000000000000000000000000000000000000002

Deployed Bytecode

0x6060604052600436106101ea5763ffffffff60e060020a60003504166303cc7b8581146101f457806308b309e3146102195780630a177cc61461022c5780630eaaf5ac1461025f578063144593091461027257806316243356146102855780631998aeef146101ea5780631a76e30c146102985780631e335962146102ab578063220d8707146102be57806329b4d111146102d15780632a887299146102e45780632aefb7c5146102f75780634254704f1461030a57806346a54e151461031d5780634e012918146103305780635477d33f1461035f57806362ea82db1461037257806366d38203146103a95780636b64c769146103c85780637b10e717146103db5780637feed5b6146103ee57806380edef8e1461040157806383d46469146104145780638a0e5a75146104335780639ff90e7714610482578063a035b1fe146104a1578063a4a5f550146104b4578063a786c1d2146104c7578063aed83846146104da578063b26209f614610529578063b2ad35c01461053c578063b6d31d971461054f578063b87fb3db1461059e578063c040e6b8146105b1578063c5340dcd146105e8578063e22497e4146105fb578063e776a5b51461064a578063eca73f641461065d578063f7682aa514610670578063f77282ab14610683578063fc0c546a14610696575b6101f26106a9565b005b34156101ff57600080fd5b610207610b9d565b60405190815260200160405180910390f35b341561022457600080fd5b610207610ba3565b341561023757600080fd5b61024b600160a060020a0360043516610ba9565b604051901515815260200160405180910390f35b341561026a57600080fd5b610207610bbe565b341561027d57600080fd5b610207610bc4565b341561029057600080fd5b610207610bca565b34156102a357600080fd5b610207610bd0565b34156102b657600080fd5b610207610bd7565b34156102c957600080fd5b610207610bdd565b34156102dc57600080fd5b610207610be4565b34156102ef57600080fd5b610207610bea565b341561030257600080fd5b610207610bf5565b341561031557600080fd5b610207610bfb565b341561032857600080fd5b610207610c00565b341561033b57600080fd5b610343610c06565b604051600160a060020a03909116815260200160405180910390f35b341561036a57600080fd5b610207610c15565b341561037d57600080fd5b610391600160a060020a0360043516610c1b565b60405191825260208201526040908101905180910390f35b34156103b457600080fd5b6101f2600160a060020a0360043516610c34565b34156103d357600080fd5b6101f2610dc1565b34156103e657600080fd5b610207610e43565b34156103f957600080fd5b610207610e49565b341561040c57600080fd5b610343610e4f565b341561041f57600080fd5b61024b600160a060020a0360043516610e5e565b341561043e57600080fd5b6101f26004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650610e7395505050505050565b341561048d57600080fd5b61024b600160a060020a0360043516610f8e565b34156104ac57600080fd5b61020761131d565b34156104bf57600080fd5b610207611369565b34156104d257600080fd5b61020761136f565b34156104e557600080fd5b6101f2600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061137695505050505050565b341561053457600080fd5b61020761144a565b341561054757600080fd5b610343611488565b341561055a57600080fd5b6101f2600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061149795505050505050565b34156105a957600080fd5b61020761156b565b34156105bc57600080fd5b6105c4611571565b604051808260048111156105d457fe5b60ff16815260200191505060405180910390f35b34156105f357600080fd5b61020761157a565b341561060657600080fd5b6101f2600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061158095505050505050565b341561065557600080fd5b610343611654565b341561066857600080fd5b610207611663565b341561067b57600080fd5b610207611669565b341561068e57600080fd5b6101f2611670565b34156106a157600080fd5b610343611731565b600080600160185460ff1660048111156106bf57fe5b14806106db5750600260185460ff1660048111156106d957fe5b145b15156106e657600080fd5b600160a060020a03331660009081526015602052604090205460ff16806107255750600160a060020a03331660009081526016602052604090205460ff165b151561073057600080fd5b600160185460ff16600481111561074357fe5b141561077057600160a060020a03331660009081526015602052604090205460ff16151561077057600080fd5b6000341161077d57600080fd5b33600160a060020a0316600090815260146020526040902060010154662386f26fc100003490910110156107b057600080fd5b600160a060020a0333166000908152601460205260409020600101543490810110156107d857fe5b6107e061144a565b915034829011156107f057600080fd5b600160185460ff16600481111561080357fe5b141561083a57600160a060020a03331660009081526015602052604090205460ff16151561083057600080fd5b6019601755610ab6565b600260185460ff16600481111561084d57fe5b1415610ab057600160a060020a03331660009081526015602052604090205460ff16801561087d5750600d544210155b801561088f575062015180600d540142105b1561089e576019601755610aab565b600160a060020a03331660009081526015602052604090205460ff1680156108cd575062015180600d54014210155b80156108df57506202a300600d540142105b156108ee576019601755610aab565b600160a060020a03331660009081526015602052604090205460ff16801561091d57506202a300600d54014210155b801561092f57506203f480600d540142105b1561093e576019601755610aab565b600160a060020a03331660009081526015602052604090205460ff16801561096d57506203f480600d54014210155b1561097c576019601755610aab565b600160a060020a03331660009081526016602052604090205460ff1680156109a65750600d544210155b80156109b8575062015180600d540142105b156109c757600f601755610aab565b600160a060020a03331660009081526016602052604090205460ff1680156109f6575062015180600d54014210155b8015610a0857506202a300600d540142105b15610a1757600a601755610aab565b600160a060020a03331660009081526016602052604090205460ff168015610a4657506202a300600d54014210155b8015610a5857506203f480600d540142105b15610a67576005601755610aab565b600160a060020a03331660009081526016602052604090205460ff168015610a9657506203f480600d54014210155b15610aa5576000601755610aab565b60006017555b610ab6565b60006017555b6017546064903402600160a060020a033381166000908152601460205260409081902080543495909404850193840181556001018054850190556010805485019055601180548401905560025492945091169180156108fc029151600060405180830381858888f193505050501515610b2e57600080fd5b33600160a060020a03167f95c7f715d8ba820069888095983b8c8ef0960bd6371027a386f81ad7a03dd47134838560405180848152602001838152602001828152602001935050505060405180910390a260105434901015610b8c57fe5b60115481901015610b9957fe5b5050565b60065481565b60135481565b60166020526000908152604090205460ff1681565b600d5481565b600a5481565b600e5481565b6202a30081565b60055481565b6203f48081565b60075481565b662386f26fc1000081565b60125481565b600081565b600c5481565b600354600160a060020a031681565b60085481565b6014602052600090815260409020805460019091015482565b60015433600160a060020a03908116911614610c4f57600080fd5b60008060185460ff166004811115610c6357fe5b14610c6d57600080fd5b600160a060020a0382161515610c8257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038481169190911780835516906370a082319030906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610cfe57600080fd5b6102c65a03f11515610d0f57600080fd5b50505060405180516006555060008054600160a060020a03169063313ce56790604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d6457600080fd5b6102c65a03f11515610d7557600080fd5b5050506040518051600a0a600555506018805460ff191660011790557f587930504fa5b1062f394d90f9dac9ecadd354ed23a97af9ea4e44dff4870a8460405160405180910390a15050565b60015433600160a060020a03908116911614610ddc57600080fd5b60018060185460ff166004811115610df057fe5b14610dfa57600080fd5b6018805460ff1916600217905542600d81905543600f819055907ff8910119ddbef5440c54532457dfe8250a10ed39e583292818f44724b9e1344c60405160405180910390a350565b60105481565b60095481565b600154600160a060020a031681565b60156020526000908152604090205460ff1681565b60035460009033600160a060020a03908116911614610e9157600080fd5b5060005b81518163ffffffff161015610b995760156000838363ffffffff1681518110610eba57fe5b90602001906020020151600160a060020a0316815260208101919091526040016000205460ff1615610eeb57600080fd5b600160166000848463ffffffff1681518110610f0357fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790558163ffffffff821681518110610f4757fe5b90602001906020020151600160a060020a03167f9cb56c3c4406adeb11f1b9c8f2821408099c71151c5b593e6b5134d2ca9365e560405160405180910390a2600101610e95565b6004546000908190819033600160a060020a03908116911614610fb057600080fd5b60038060185460ff166004811115610fc457fe5b14610fce57600080fd5b600e544211610fdc57600080fd5b600160a060020a0385161515610ff157600080fd5b600160a060020a0385166000908152601460205260408120600101541161101757600080fd5b600160a060020a03851660009081526014602052604090206001015415806110555750600160a060020a038516600090815260146020526040902054155b156110635760009350611315565b601354600160a060020a0386166000908152601460205260409020546005540281151561108c57fe5b60008054929091049450600160a060020a03909116906370a082319030906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156110ef57600080fd5b6102c65a03f1151561110057600080fd5b505050604051805192505081831115611117578192505b600160a060020a038086166000908152601460205260408082206001810180546012805490910190559083905582905581549092169163a9059cbb918891879190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156111a057600080fd5b6102c65a03f115156111b157600080fd5b5050506040518051905015156111c657600080fd5b84600160a060020a03167fe9aa550fd75d0d28e07fa9dd67d3ae705678776f6c4a75abd09534f93e7d79078460405190815260200160405180910390a26010546012541415611249576018805460ff191660041790557fcea85459abe456c560868e61c476933dcee35a72aba5f546e93715929a69618660405160405180910390a15b600080548491600160a060020a03909116906370a082319088906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156112a857600080fd5b6102c65a03f115156112b957600080fd5b50505060405180519050101515156112cd57fe5b600160a060020a038516600090815260146020526040902054156112ed57fe5b600160a060020a0385166000908152601460205260409020600101541561131057fe5b600193505b505050919050565b6000600360185460ff16600481111561133257fe5b148061134e5750600460185460ff16600481111561134c57fe5b145b1561135b57506000611366565b611363611740565b90505b90565b600b5481565b6201518081565b60015460009033600160a060020a0390811691161461139457600080fd5b5060005b81518163ffffffff161015610b9957600060156000848463ffffffff16815181106113bf57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790558163ffffffff82168151811061140357fe5b90602001906020020151600160a060020a03167fb16e2862ca4a5512ecbe3359ee0899e72c16b9df25c879e716fb457bafe700ab60405160405180910390a2600101611398565b60008060055461145861131d565b6006540281151561146557fe5b0490506010548111151561147c5760009150611484565b601054810391505b5090565b600454600160a060020a031681565b60015460009033600160a060020a039081169116146114b557600080fd5b5060005b81518163ffffffff161015610b9957600160156000848463ffffffff16815181106114e057fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790558163ffffffff82168151811061152457fe5b90602001906020020151600160a060020a03167f3a4d818091b5f82c68d5a051412c5120883733a5f9ae246e1b51ac6a5c0cc22860405160405180910390a26001016114b9565b600f5481565b60185460ff1681565b60115481565b60035460009033600160a060020a0390811691161461159e57600080fd5b5060005b81518163ffffffff161015610b9957600060166000848463ffffffff16815181106115c957fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790558163ffffffff82168151811061160d57fe5b90602001906020020151600160a060020a03167fdf9548ac0f1ec0772eb68261447352dd3c0ffca6dc25cbaab31ccd6c7f9bf8d860405160405180910390a26001016115a2565b600254600160a060020a031681565b60175481565b620a8c0081565b60015433600160a060020a0390811691161461168b57600080fd5b600160185460ff16600481111561169e57fe5b14806116ba5750600260185460ff1660048111156116b857fe5b145b15156116c557600080fd5b600654601154600554028115156116d857fe5b04601381905542600e556018805460ff191660031790557f45806e512b1f4f10e33e8b3cb64d1d11d998d8c554a95e0841fc1c701278bd5d9060405190815260200160405180910390a16013546000901161172f57fe5b565b600054600160a060020a031681565b60008080808060185460ff16600481111561175757fe5b14806117735750600160185460ff16600481111561177157fe5b145b1561178257600754935061183f565b600260185460ff16600481111561179557fe5b141561183f57600d54428181039450108015906117b85750620a8c00600d540142105b156117f057600854600954840a8115156117ce57fe5b04915081836001010183600101600754028115156117e857fe5b04935061183f565b600d5442101580156118095750620a8c00600d54014210155b1561183957600a54600b54840a81151561181f57fe5b04905080836001010183600101600754028115156117e857fe5b60075493505b50505090565b600060185460ff16600481111561185857fe5b14806118745750600160185460ff16600481111561187257fe5b145b151561187f57600080fd5b6000851161188c57600080fd5b6000841161189957600080fd5b600082116118a657600080fd5b600794909455600892909255600955600a55600b555600a165627a7a72305820e06602d9c1e5a8e6f25d5319e77c0dc8cc0471de6aa7e8f766e69fd4159b96a60029

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

000000000000000000000000175af261088b31e58ba384b3758f14bcf6c1f4e1000000000000000000000000b1c5d197bba11cec87930dca7187e7daa7f20f8f000000000000000000000000baecf676f80943ca982487e71fd52cb1cd75531e0000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000006c0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004e90000000000000000000000000000000000000000000000000000000000000002

-----Decoded View---------------
Arg [0] : _wallet_address (address): 0x175AF261088B31E58BA384b3758f14BCf6c1f4E1
Arg [1] : _whitelister_address (address): 0xB1C5D197BbA11cEc87930DCA7187e7DAA7F20F8F
Arg [2] : _distributor_address (address): 0xbaeCf676f80943CA982487E71fd52Cb1cd75531e
Arg [3] : _price_start (uint256): 2000000000000000000
Arg [4] : _price_constant1 (uint256): 1728
Arg [5] : _price_exponent1 (uint256): 2
Arg [6] : _price_constant2 (uint256): 1257
Arg [7] : _price_exponent2 (uint256): 2

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000175af261088b31e58ba384b3758f14bcf6c1f4e1
Arg [1] : 000000000000000000000000b1c5d197bba11cec87930dca7187e7daa7f20f8f
Arg [2] : 000000000000000000000000baecf676f80943ca982487e71fd52cb1cd75531e
Arg [3] : 0000000000000000000000000000000000000000000000001bc16d674ec80000
Arg [4] : 00000000000000000000000000000000000000000000000000000000000006c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 00000000000000000000000000000000000000000000000000000000000004e9
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000002


Swarm Source

bzzr://e06602d9c1e5a8e6f25d5319e77c0dc8cc0471de6aa7e8f766e69fd4159b96a6

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.