ETH Price: $3,197.07 (-13.73%)

Contract

0xed2bd91E69155782D045Ca8254EAFA8935e99b58
 

Overview

ETH Balance

0.224484938394050375 ETH

Eth Value

$717.69 (@ $3,197.07/ETH)

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw72985612019-03-03 19:59:302118 days ago1551643170IN
0xed2bd91E...935e99b58
0 ETH0.000169582
Sell72985582019-03-03 19:58:242118 days ago1551643104IN
0xed2bd91E...935e99b58
0 ETH0.000140422
Withdraw66508812018-11-05 23:52:332236 days ago1541461953IN
0xed2bd91E...935e99b58
0 ETH0.000593557
Withdraw66369242018-11-03 16:56:162238 days ago1541264176IN
0xed2bd91E...935e99b58
0 ETH0.000438348
Sell66369212018-11-03 16:55:152238 days ago1541264115IN
0xed2bd91E...935e99b58
0 ETH0.000208697
Sell66369192018-11-03 16:54:272238 days ago1541264067IN
0xed2bd91E...935e99b58
0 ETH0.000561198
Buy66357322018-11-03 12:18:522238 days ago1541247532IN
0xed2bd91E...935e99b58
0.01 ETH0.001041885
Process Rewards66324332018-11-02 23:14:352239 days ago1541200475IN
0xed2bd91E...935e99b58
0 ETH0.005934848
Sell66306252018-11-02 16:13:012239 days ago1541175181IN
0xed2bd91E...935e99b58
0 ETH0.001279243
Sell66306242018-11-02 16:12:402239 days ago1541175160IN
0xed2bd91E...935e99b58
0 ETH0.0016956957
Withdraw66306242018-11-02 16:12:402239 days ago1541175160IN
0xed2bd91E...935e99b58
0 ETH0.0021917240
Sell66306242018-11-02 16:12:402239 days ago1541175160IN
0xed2bd91E...935e99b58
0 ETH0.0011304638
Withdraw66301952018-11-02 14:32:332239 days ago1541169153IN
0xed2bd91E...935e99b58
0 ETH0.0042396550
Sell66301232018-11-02 14:11:592239 days ago1541167919IN
0xed2bd91E...935e99b58
0 ETH0.0035042550
Sell66300892018-11-02 14:05:532239 days ago1541167553IN
0xed2bd91E...935e99b58
0 ETH0.0063191790
Withdraw66298052018-11-02 12:59:522239 days ago1541163592IN
0xed2bd91E...935e99b58
0 ETH0.000328756
Sell66297972018-11-02 12:58:172239 days ago1541163497IN
0xed2bd91E...935e99b58
0 ETH0.000178496
Withdraw66296812018-11-02 12:31:162239 days ago1541161876IN
0xed2bd91E...935e99b58
0 ETH0.0005479310
Sell66296682018-11-02 12:28:382239 days ago1541161718IN
0xed2bd91E...935e99b58
0 ETH0.0007008510
Transfer66296382018-11-02 12:21:042239 days ago1541161264IN
0xed2bd91E...935e99b58
0 ETH0.0012754311
Withdraw66296222018-11-02 12:18:012239 days ago1541161081IN
0xed2bd91E...935e99b58
0 ETH0.000383557
Sell66296142018-11-02 12:16:322239 days ago1541160992IN
0xed2bd91E...935e99b58
0 ETH0.000490597
Transfer66296072018-11-02 12:14:182239 days ago1541160858IN
0xed2bd91E...935e99b58
0 ETH0.001057
Reinvest66295882018-11-02 12:10:512239 days ago1541160651IN
0xed2bd91E...935e99b58
0 ETH0.00128
Activate Bot66295662018-11-02 12:04:202239 days ago1541160260IN
0xed2bd91E...935e99b58
0 ETH0.000222518
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
72985612019-03-03 19:59:302118 days ago1551643170
0xed2bd91E...935e99b58
0.00802004 ETH
72985582019-03-03 19:58:242118 days ago1551643104
0xed2bd91E...935e99b58
0.00001698 ETH
66508812018-11-05 23:52:332236 days ago1541461953
0xed2bd91E...935e99b58
0.09569162 ETH
66369242018-11-03 16:56:162238 days ago1541264176
0xed2bd91E...935e99b58
0.3106627 ETH
66369192018-11-03 16:54:272238 days ago1541264067
0xed2bd91E...935e99b58
0.00686894 ETH
66357322018-11-03 12:18:522238 days ago1541247532
0xed2bd91E...935e99b58
0.0002 ETH
66324332018-11-02 23:14:352239 days ago1541200475
0xed2bd91E...935e99b58
0.0003937 ETH
66324332018-11-02 23:14:352239 days ago1541200475
0xed2bd91E...935e99b58
0.00026756 ETH
66324332018-11-02 23:14:352239 days ago1541200475
0xed2bd91E...935e99b58
0.00164219 ETH
66306242018-11-02 16:12:402239 days ago1541175160
0xed2bd91E...935e99b58
0.00005783 ETH
66301952018-11-02 14:32:332239 days ago1541169153
0xed2bd91E...935e99b58
0.51509045 ETH
66301232018-11-02 14:11:592239 days ago1541167919
0xed2bd91E...935e99b58
0.00038089 ETH
66300892018-11-02 14:05:532239 days ago1541167553
0xed2bd91E...935e99b58
0.00434521 ETH
66298052018-11-02 12:59:522239 days ago1541163592
0xed2bd91E...935e99b58
0.93894621 ETH
66296812018-11-02 12:31:162239 days ago1541161876
0xed2bd91E...935e99b58
11.59200923 ETH
66296682018-11-02 12:28:382239 days ago1541161718
0xed2bd91E...935e99b58
0.24116799 ETH
66296382018-11-02 12:21:042239 days ago1541161264
0xed2bd91E...935e99b58
0.19921322 ETH
66296222018-11-02 12:18:012239 days ago1541161081
0xed2bd91E...935e99b58
0.74627183 ETH
66296142018-11-02 12:16:322239 days ago1541160992
0xed2bd91E...935e99b58
0.01653345 ETH
66296072018-11-02 12:14:182239 days ago1541160858
0xed2bd91E...935e99b58
0.00226539 ETH
66295882018-11-02 12:10:512239 days ago1541160651
0xed2bd91E...935e99b58
0.0000453 ETH
66295652018-11-02 12:04:152239 days ago1541160255
0xed2bd91E...935e99b58
0.01837899 ETH
66295152018-11-02 11:54:522239 days ago1541159692
0xed2bd91E...935e99b58
0.0204211 ETH
66293762018-11-02 11:21:102239 days ago1541157670
0xed2bd91E...935e99b58
0.41690989 ETH
66293592018-11-02 11:17:122239 days ago1541157432
0xed2bd91E...935e99b58
0.01651143 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
P6

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-10-30
*/

pragma solidity ^0.4.23;

// File: contracts/Bankroll.sol

interface Bankroll {

    //Customer functions

    /// @dev Stores ETH funds for customer
    function credit(address _customerAddress, uint256 amount) external returns (uint256);

    /// @dev Debits address by an amount
    function debit(address _customerAddress, uint256 amount) external returns (uint256);

    /// @dev Withraws balance for address; returns amount sent
    function withdraw(address _customerAddress) external returns (uint256);

    /// @dev Retrieve the token balance of any single address.
    function balanceOf(address _customerAddress) external view returns (uint256);

    /// @dev Stats of any single address
    function statsOf(address _customerAddress) external view returns (uint256[8]);


    // System functions

    // @dev Deposit funds
    function deposit() external payable;

    // @dev Deposit on behalf of an address; it is not a credit
    function depositBy(address _customerAddress) external payable;

    // @dev Distribute house profit
    function houseProfit(uint256 amount)  external;


    /// @dev Get all the ETH stored in contract minus credits to customers
    function netEthereumBalance() external view returns (uint256);


    /// @dev Get all the ETH stored in contract
    function totalEthereumBalance() external view returns (uint256);

}

// File: contracts/P4RTYRelay.sol

/*
 * Visit: https://p4rty.io
 * Discord: https://discord.gg/7y3DHYF
*/

interface P4RTYRelay {
    /**
    * @dev Will relay to internal implementation
    * @param beneficiary Token purchaser
    * @param tokenAmount Number of tokens to be minted
    */
    function relay(address beneficiary, uint256 tokenAmount) external;
}

// File: contracts/SessionQueue.sol

/// A FIFO queue for storing addresses
contract SessionQueue {

    mapping(uint256 => address) private queue;
    uint256 private first = 1;
    uint256 private last = 0;

    /// @dev Push into queue
    function enqueue(address data) internal {
        last += 1;
        queue[last] = data;
    }

    /// @dev Returns true if the queue has elements in it
    function available() internal view returns (bool) {
        return last >= first;
    }

    /// @dev Returns the size of the queue
    function depth() internal view returns (uint256) {
        return last - first + 1;
    }

    /// @dev Pops from the head of the queue
    function dequeue() internal returns (address data) {
        require(last >= first);
        // non-empty queue

        data = queue[first];

        delete queue[first];
        first += 1;
    }

    /// @dev Returns the head of the queue without a pop
    function peek() internal view returns (address data) {
        require(last >= first);
        // non-empty queue

        data = queue[first];
    }
}

// File: openzeppelin-solidity/contracts/math/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 c) {
    if (a == 0) {
      return 0;
    }
    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 a / b;
  }

  /**
  * @dev Subtracts 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 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}

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

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


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


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

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

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

}

// File: openzeppelin-solidity/contracts/ownership/Whitelist.sol

/**
 * @title Whitelist
 * @dev The Whitelist contract has a whitelist of addresses, and provides basic authorization control functions.
 * @dev This simplifies the implementation of "user permissions".
 */
contract Whitelist is Ownable {
  mapping(address => bool) public whitelist;

  event WhitelistedAddressAdded(address addr);
  event WhitelistedAddressRemoved(address addr);

  /**
   * @dev Throws if called by any account that's not whitelisted.
   */
  modifier onlyWhitelisted() {
    require(whitelist[msg.sender]);
    _;
  }

  /**
   * @dev add an address to the whitelist
   * @param addr address
   * @return true if the address was added to the whitelist, false if the address was already in the whitelist
   */
  function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) {
    if (!whitelist[addr]) {
      whitelist[addr] = true;
      emit WhitelistedAddressAdded(addr);
      success = true;
    }
  }

  /**
   * @dev add addresses to the whitelist
   * @param addrs addresses
   * @return true if at least one address was added to the whitelist,
   * false if all addresses were already in the whitelist
   */
  function addAddressesToWhitelist(address[] addrs) onlyOwner public returns(bool success) {
    for (uint256 i = 0; i < addrs.length; i++) {
      if (addAddressToWhitelist(addrs[i])) {
        success = true;
      }
    }
  }

  /**
   * @dev remove an address from the whitelist
   * @param addr address
   * @return true if the address was removed from the whitelist,
   * false if the address wasn't in the whitelist in the first place
   */
  function removeAddressFromWhitelist(address addr) onlyOwner public returns(bool success) {
    if (whitelist[addr]) {
      whitelist[addr] = false;
      emit WhitelistedAddressRemoved(addr);
      success = true;
    }
  }

  /**
   * @dev remove addresses from the whitelist
   * @param addrs addresses
   * @return true if at least one address was removed from the whitelist,
   * false if all addresses weren't in the whitelist in the first place
   */
  function removeAddressesFromWhitelist(address[] addrs) onlyOwner public returns(bool success) {
    for (uint256 i = 0; i < addrs.length; i++) {
      if (removeAddressFromWhitelist(addrs[i])) {
        success = true;
      }
    }
  }

}

// File: contracts/P6.sol

// solhint-disable-line






/*
 * Visit: https://p4rty.io
 * Discord: https://discord.gg/7y3DHYF
 * Stable + DIVIS: Whale and Minow Friendly
 * Fees balanced for maximum dividends for ALL
 * Active depositors rewarded with P4RTY tokens
 * 50% of ETH value in earned P4RTY token rewards
 * 2% of dividends fund a gaming bankroll; gaming profits are paid back into P6
 * P4RTYRelay is notified on all dividend producing transactions
 * Smart Launch phase which is anti-whale & anti-snipe
 *
 * P6
 * The worry free way to earn A TON OF ETH & P4RTY reward tokens
 *
 * -> What?
 * The first Ethereum Bonded Pure Dividend Token:
 * [✓] The only dividend printing press that is part of the P4RTY Entertainment Network
 * [✓] Earn ERC20 P4RTY tokens on all ETH deposit activities
 * [✓] 3% P6 Faucet for free P6 / P4RTY
 * [✓] Auto-Reinvests
 * [✓] 10% exchange fees on buys and sells
 * [✓] 100 tokens to activate faucet
 *
 * -> How?
 * To replay or use the faucet the contract must be fully launched
 * To sell or transfer you need to be vested (maximum of 3 days) after a reinvest
*/

contract P6 is Whitelist, SessionQueue {


    /*=================================
    =            MODIFIERS            =
    =================================*/

    /// @dev Only people with tokens
    modifier onlyTokenHolders {
        require(myTokens() > 0);
        _;
    }

    /// @dev Only people with profits
    modifier onlyDivis {
        require(myDividends(true) > 0);
        _;
    }

    /// @dev Only invested; If participating in prelaunch have to buy tokens
    modifier invested {
        require(stats[msg.sender].invested > 0, "Must buy tokens once to withdraw");

        _;

    }

    /// @dev After every reinvest features are protected by a cooloff to vest funds
    modifier cooledOff {
        require(msg.sender == owner && !contractIsLaunched || now - bot[msg.sender].coolOff > coolOffPeriod);
        _;
    }

    /// @dev The faucet has a rewardPeriod
    modifier teamPlayer {
        require(msg.sender == owner || now - lastReward[msg.sender] > rewardProcessingPeriod, "No spamming");
        _;
    }

    /// @dev Functions only available after launch
    modifier launched {
        require(contractIsLaunched || msg.sender == owner, "Contract not lauched");
        _;
    }


    /*==============================
    =            EVENTS            =
    ==============================*/

    event onLog(
        string heading,
        address caller,
        address subj,
        uint val
    );

    event onTokenPurchase(
        address indexed customerAddress,
        uint256 incomingEthereum,
        uint256 tokensMinted,
        address indexed referredBy,
        uint timestamp,
        uint256 price
    );

    event onTokenSell(
        address indexed customerAddress,
        uint256 tokensBurned,
        uint256 ethereumEarned,
        uint timestamp,
        uint256 price
    );

    event onReinvestment(
        address indexed customerAddress,
        uint256 ethereumReinvested,
        uint256 tokensMinted
    );

    event onCommunityReward(
        address indexed sourceAddress,
        address indexed destinationAddress,
        uint256 ethereumEarned
    );

    event onReinvestmentProxy(
        address indexed customerAddress,
        address indexed destinationAddress,
        uint256 ethereumReinvested
    );

    event onWithdraw(
        address indexed customerAddress,
        uint256 ethereumWithdrawn
    );

    event onDeposit(
        address indexed customerAddress,
        uint256 ethereumDeposited
    );

    // ERC20
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 tokens
    );


    /*=====================================
    =            CONFIGURABLES            =
    =====================================*/

    /// @dev 10% dividends for token purchase
    uint256  internal entryFee_ = 10;

    /// @dev 1% dividends for token transfer
    uint256  internal transferFee_ = 1;

    /// @dev 10% dividends for token selling
    uint256  internal exitFee_ = 10;

    /// @dev 3% of entryFee_  is given to faucet
    /// traditional referral mechanism repurposed as a many to many faucet
    /// powers auto reinvest
    uint256  internal referralFee_ = 30;

    /// @dev 20% of entryFee/exit fee is given to Bankroll
    uint256  internal maintenanceFee_ = 20;
    address  internal maintenanceAddress;

    //Advanced Config
    uint256 constant internal bankrollThreshold = 0.5 ether;
    uint256 constant internal botThreshold = 0.01 ether;
    uint256 constant rewardProcessingPeriod = 6 hours;
    uint256 constant reapPeriod = 7 days;
    uint256 public  maxProcessingCap = 10;

    uint256 public coolOffPeriod = 3 days;
    uint256 public launchETHMaximum = 20 ether;
    bool public contractIsLaunched = false;
    uint public lastReaped;


    uint256 constant internal tokenPriceInitial_ = 0.0000001 ether;
    uint256 constant internal tokenPriceIncremental_ = 0.00000001 ether;

    uint256 constant internal magnitude = 2 ** 64;

    /// @dev proof of stake (defaults at 100 tokens)
    uint256 public stakingRequirement = 100e18;


    /*=================================
     =            DATASETS            =
     ================================*/

    // bookkeeping for autoreinvest
    struct Bot {
        bool active;
        bool queued;
        uint256 lastBlock;
        uint256 coolOff;
    }

    // Onchain Stats!!!
    struct Stats {
        uint invested;
        uint reinvested;
        uint withdrawn;
        uint rewarded;
        uint contributed;
        uint transferredTokens;
        uint receivedTokens;
        uint xInvested;
        uint xReinvested;
        uint xRewarded;
        uint xContributed;
        uint xWithdrawn;
        uint xTransferredTokens;
        uint xReceivedTokens;
    }


    // amount of shares for each address (scaled number)
    mapping(address => uint256) internal lastReward;
    mapping(address => uint256) internal tokenBalanceLedger_;
    mapping(address => uint256) internal referralBalance_;
    mapping(address => int256) internal payoutsTo_;
    mapping(address => Bot) internal bot;
    mapping(address => Stats) internal stats;
    //on chain referral tracking
    mapping(address => address) public referrals;
    uint256 internal tokenSupply_;
    uint256 internal profitPerShare_;

    P4RTYRelay public relay;
    Bankroll public bankroll;
    bool internal bankrollEnabled = true;

    /*=======================================
    =            PUBLIC FUNCTIONS           =
    =======================================*/

    constructor(address relayAddress)  public {

        relay = P4RTYRelay(relayAddress);
        updateMaintenanceAddress(msg.sender);
    }

    //Maintenance Functions

    /// @dev Minted P4RTY tokens are sent to the maintenance address
    function updateMaintenanceAddress(address maintenance) onlyOwner public {
        maintenanceAddress = maintenance;
    }

    /// @dev Update the bankroll; 2% of dividends go to the bankroll
    function updateBankrollAddress(address bankrollAddress) onlyOwner public {
        bankroll = Bankroll(bankrollAddress);
    }

    /// @dev The cap determines the amount of addresses processed when a user runs the faucet
    function updateProcessingCap(uint cap) onlyOwner public {
        require(cap >= 5 && cap <= 15, "Capacity set outside of policy range");
        maxProcessingCap = cap;
    }

    /// @dev Updates the coolOff period where reinvest must vest
    function updateCoolOffPeriod(uint coolOff) onlyOwner public {
        require(coolOff >= 5 minutes && coolOff <= 3 days);
        coolOffPeriod = coolOff;
    }

    /// @dev Opens the contract for public use outside of the launch phase
    function launchContract() onlyOwner public {
        contractIsLaunched = true;
    }


    //Bot Functions

    /* Activates the bot and queues if necessary; else removes */
    function activateBot(bool auto) public {
        bot[msg.sender].active = auto;

        //Spam protection for customerAddress
        if (bot[msg.sender].active) {
            if (!bot[msg.sender].queued) {
                bot[msg.sender].queued = true;
                enqueue(msg.sender);
            }
        }
    }

    /* Returns if the sender has the reinvestment not enabled */
    function botEnabled() public view returns (bool){
        return bot[msg.sender].active;
    }


    function fundBankRoll(uint256 amount) internal {
        bankroll.deposit.value(amount)();
    }

    /// @dev Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any)
    function buyFor(address _customerAddress) onlyWhitelisted public payable returns (uint256) {
        return purchaseTokens(_customerAddress, msg.value);
    }

    /// @dev Converts all incoming ethereum to tokens for the caller
    function buy() public payable returns (uint256) {
        if (contractIsLaunched){
            //ETH sent during prelaunch needs to be processed
            if(stats[msg.sender].invested == 0 && referralBalance_[msg.sender] > 0){
                reinvestFor(msg.sender);
            }
            return purchaseTokens(msg.sender, msg.value);
        }  else {
            //Just deposit funds
            return deposit();
        }
    }

    function deposit() internal returns (uint256) {
        require(msg.value > 0);

        //Just add to the referrals for sidelined ETH
        referralBalance_[msg.sender] = SafeMath.add(referralBalance_[msg.sender], msg.value);

        require(referralBalance_[msg.sender] <= launchETHMaximum, "Exceeded investment cap");

        emit onDeposit(msg.sender, msg.value);

        return 0;

    }

    /**
     * @dev Fallback function to handle ethereum that was send straight to the contract
     *  Unfortunately we cannot use a referral address this way.
     */
    function() payable public {
        purchaseTokens(msg.sender, msg.value);
    }

    /// @dev Converts all of caller's dividends to tokens.
    function reinvest() onlyDivis launched public {
        reinvestFor(msg.sender);
    }

    /// @dev Allows owner to reinvest on behalf of a supporter
    function investSupporter(address _customerAddress) public onlyOwner {
        require(!contractIsLaunched, "Contract already opened");
        reinvestFor(_customerAddress);
    }

    /// @dev Internal utility method for reinvesting
    function reinvestFor(address _customerAddress) internal {

        // fetch dividends
        uint256 _dividends = totalDividends(_customerAddress, false);
        // retrieve ref. bonus later in the code

        payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude);

        // retrieve ref. bonus
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;

        // dispatch a buy order with the virtualized "withdrawn dividends"
        uint256 _tokens = purchaseTokens(_customerAddress, _dividends);

        // fire event
        emit onReinvestment(_customerAddress, _dividends, _tokens);

        //Stats
        stats[_customerAddress].reinvested = SafeMath.add(stats[_customerAddress].reinvested, _dividends);
        stats[_customerAddress].xReinvested += 1;

        //Refresh the coolOff
        bot[_customerAddress].coolOff = now;

    }

    /// @dev Withdraws all of the callers earnings.
    function withdraw() onlyDivis  invested public {
        withdrawFor(msg.sender);
    }

    /// @dev Utility function for withdrawing earnings
    function withdrawFor(address _customerAddress) internal {

        // setup data
        uint256 _dividends = totalDividends(_customerAddress, false);
        // get ref. bonus later in the code

        // update dividend tracker
        payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude);

        // add ref. bonus
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;

        // lambo delivery service
        _customerAddress.transfer(_dividends);

        //stats
        stats[_customerAddress].withdrawn = SafeMath.add(stats[_customerAddress].withdrawn, _dividends);
        stats[_customerAddress].xWithdrawn += 1;

        // fire event
        emit onWithdraw(_customerAddress, _dividends);
    }


    /// @dev Liquifies tokens to ethereum.
    function sell(uint256 _amountOfTokens) onlyTokenHolders cooledOff public {
        address _customerAddress = msg.sender;

        //Selling deactivates auto reinvest
        bot[_customerAddress].active = false;


        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        uint256 _tokens = _amountOfTokens;
        uint256 _ethereum = tokensToEthereum_(_tokens);


        uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100);
        uint256 _maintenance = SafeMath.div(SafeMath.mul(_undividedDividends, maintenanceFee_), 100);
        //maintenance and referral come out of the exitfee
        uint256 _dividends = SafeMath.sub(_undividedDividends, _maintenance);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _undividedDividends);

        // burn the sold tokens
        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens);
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens);

        // update dividends tracker
        int256 _updatedPayouts = (int256) (profitPerShare_ * _tokens + (_taxedEthereum * magnitude));
        payoutsTo_[_customerAddress] -= _updatedPayouts;


        //Apply maintenance fee to the bankroll
        fundBankRoll(_maintenance);

        // dividing by zero is a bad idea
        if (tokenSupply_ > 0) {
            // update the amount of dividends per token
            profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_);
        }

        // fire event
        emit onTokenSell(_customerAddress, _tokens, _taxedEthereum, now, buyPrice());

        //GO!!! Bankroll Bot GO!!!
        brbReinvest(_customerAddress);
    }

    //@dev Bankroll Bot can only transfer 10% of funds during a reapPeriod
    //Its funds will always be locked because it always reinvests
    function reap(address _toAddress) public onlyOwner {
        require(now - lastReaped > reapPeriod, "Reap not available, too soon");
        lastReaped = now;
        transferTokens(owner, _toAddress, SafeMath.div(balanceOf(owner), 10));

    }

    /**
     * @dev Transfer tokens from the caller to a new holder.
     *  Remember, there's a 1% fee here as well.
     */
    function transfer(address _toAddress, uint256 _amountOfTokens) onlyTokenHolders cooledOff external returns (bool){
        address _customerAddress = msg.sender;
        return transferTokens(_customerAddress, _toAddress, _amountOfTokens);
    }

    /// @dev Utility function for transfering tokens
    function transferTokens(address _customerAddress, address _toAddress, uint256 _amountOfTokens)  internal returns (bool){

        // make sure we have the requested tokens
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);

        // withdraw all outstanding dividends first
        if (totalDividends(_customerAddress,true) > 0) {
            withdrawFor(_customerAddress);
        }

        // liquify a percentage of the tokens that are transfered
        // these are dispersed to shareholders
        uint256 _tokenFee = SafeMath.div(SafeMath.mul(_amountOfTokens, transferFee_), 100);
        uint256 _taxedTokens = SafeMath.sub(_amountOfTokens, _tokenFee);
        uint256 _dividends = tokensToEthereum_(_tokenFee);

        // burn the fee tokens
        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokenFee);

        // exchange tokens
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
        tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _taxedTokens);

        // update dividend trackers
        payoutsTo_[_customerAddress] -= (int256) (profitPerShare_ * _amountOfTokens);
        payoutsTo_[_toAddress] += (int256) (profitPerShare_ * _taxedTokens);

        // disperse dividends among holders
        profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_);

        // fire event
        emit Transfer(_customerAddress, _toAddress, _taxedTokens);

        //Stats
        stats[_customerAddress].xTransferredTokens += 1;
        stats[_customerAddress].transferredTokens += _amountOfTokens;
        stats[_toAddress].receivedTokens += _taxedTokens;
        stats[_toAddress].xReceivedTokens += 1;

        // ERC20
        return true;
    }


    /*=====================================
    =      HELPERS AND CALCULATORS        =
    =====================================*/

    /**
     * @dev Method to view the current Ethereum stored in the contract
     *  Example: totalEthereumBalance()
     */
    function totalEthereumBalance() public view returns (uint256) {
        return address(this).balance;
    }

    /// @dev Retrieve the total token supply.
    function totalSupply() public view returns (uint256) {
        return tokenSupply_;
    }

    /// @dev Retrieve the tokens owned by the caller.
    function myTokens() public view returns (uint256) {
        address _customerAddress = msg.sender;
        return balanceOf(_customerAddress);
    }

    /**
     * @dev Retrieve the dividends owned by the caller.
     *  If `_includeReferralBonus` is to to 1/true, the referral bonus will be included in the calculations.
     *  The reason for this, is that in the frontend, we will want to get the total divs (global + ref)
     *  But in the internal calculations, we want them separate.
     */
    /**
     * @dev Retrieve the dividends owned by the caller.
     *  If `_includeReferralBonus` is to to 1/true, the referral bonus will be included in the calculations.
     *  The reason for this, is that in the frontend, we will want to get the total divs (global + ref)
     *  But in the internal calculations, we want them separate.
     */
    function myDividends(bool _includeReferralBonus) public view returns (uint256) {
        return totalDividends(msg.sender, _includeReferralBonus);
    }

    function totalDividends(address _customerAddress, bool _includeReferralBonus) internal view returns (uint256) {
        return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress);
    }

    /// @dev Retrieve the token balance of any single address.
    function balanceOf(address _customerAddress) public view returns (uint256) {
        return tokenBalanceLedger_[_customerAddress];
    }

    /// @dev Stats of any single address
    function statsOf(address _customerAddress) public view returns (uint256[14]){
        Stats memory s = stats[_customerAddress];
        uint256[14] memory statArray = [s.invested, s.withdrawn, s.rewarded, s.contributed, s.transferredTokens, s.receivedTokens, s.xInvested, s.xRewarded, s.xContributed, s.xWithdrawn, s.xTransferredTokens, s.xReceivedTokens, s.reinvested, s.xReinvested];
        return statArray;
    }

    /// @dev Retrieve the dividend balance of any single address.
    function dividendsOf(address _customerAddress) public view returns (uint256) {
        return (uint256) ((int256) (profitPerShare_ * tokenBalanceLedger_[_customerAddress]) - payoutsTo_[_customerAddress]) / magnitude;
    }

    /// @dev Return the sell price of 1 individual token.
    function sellPrice() public view returns (uint256) {
        // our calculation relies on the token supply, so we need supply. Doh.
        if (tokenSupply_ == 0) {
            return tokenPriceInitial_ - tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e18);
            uint256 _dividends = SafeMath.div(_ethereum, exitFee_);
            uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
            return _taxedEthereum;
        }

    }

    /// @dev Return the buy price of 1 individual token.
    function buyPrice() public view returns (uint256) {
        // our calculation relies on the token supply, so we need supply. Doh.
        if (tokenSupply_ == 0) {
            return tokenPriceInitial_ + tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e18);
            uint256 _dividends = SafeMath.div(_ethereum, entryFee_);
            uint256 _taxedEthereum = SafeMath.add(_ethereum, _dividends);
            return _taxedEthereum;
        }

    }

    /// @dev Function for the frontend to dynamically retrieve the price scaling of buy orders.
    function calculateTokensReceived(uint256 _ethereumToSpend) public view returns (uint256) {
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereumToSpend, entryFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, _dividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);

        return _amountOfTokens;
    }

    /// @dev Function for the frontend to dynamically retrieve the price scaling of sell orders.
    function calculateEthereumReceived(uint256 _tokensToSell) public view returns (uint256) {
        require(_tokensToSell <= tokenSupply_);
        uint256 _ethereum = tokensToEthereum_(_tokensToSell);
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        return _taxedEthereum;
    }


    /*==========================================
    =            INTERNAL FUNCTIONS            =
    ==========================================*/

    /// @dev Internal function to actually purchase the tokens.
    function purchaseTokens(address _customerAddress, uint256 _incomingEthereum) internal returns (uint256) {
        // data setup
        address _referredBy = msg.sender;
        uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_incomingEthereum, entryFee_), 100);
        uint256 _maintenance = SafeMath.div(SafeMath.mul(_undividedDividends, maintenanceFee_), 100);
        uint256 _referralBonus = SafeMath.div(SafeMath.mul(_undividedDividends, referralFee_), 100);
        //maintenance and referral come out of the buyin
        uint256 _dividends = SafeMath.sub(_undividedDividends, SafeMath.add(_referralBonus, _maintenance));
        uint256 _taxedEthereum = SafeMath.sub(_incomingEthereum, _undividedDividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);
        uint256 _fee = _dividends * magnitude;
        uint256 _tokenAllocation = SafeMath.div(_incomingEthereum, 2);


        // prevents overflow in the case that the pyramid somehow magically starts being used by everyone in the world
        // (or hackers)
        // and yes we know that the safemath function automatically rules out the "greater then" equasion.
        require(_amountOfTokens > 0 && SafeMath.add(_amountOfTokens, tokenSupply_) > tokenSupply_);

        //Apply maintenance fee to bankroll
        fundBankRoll(_maintenance);

        // is the user referred by a masternode?
        if (

        // no cheating!
            _referredBy != _customerAddress &&

            // does the referrer have at least X whole tokens?
            // i.e is the referrer a godly chad masternode
            tokenBalanceLedger_[_referredBy] >= stakingRequirement
        ) {
            // wealth redistribution
            referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus);

            //Stats
            stats[_referredBy].rewarded = SafeMath.add(stats[_referredBy].rewarded, _referralBonus);
            stats[_referredBy].xRewarded += 1;
            stats[_customerAddress].contributed = SafeMath.add(stats[_customerAddress].contributed, _referralBonus);
            stats[_customerAddress].xContributed += 1;

            //It pays to play
            emit onCommunityReward(_customerAddress, _referredBy, _referralBonus);
        } else {
            // no ref purchase
            // add the referral bonus back to the global dividends cake
            _dividends = SafeMath.add(_dividends, _referralBonus);
            _fee = _dividends * magnitude;
        }

        // we can't give people infinite ethereum
        if (tokenSupply_ > 0) {
            // add tokens to the pool
            tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens);

            // take the amount of dividends gained through this transaction, and allocates them evenly to each shareholder
            profitPerShare_ += (_dividends * magnitude / tokenSupply_);

            // calculate the amount of tokens the customer receives over his purchase
            _fee = _fee - (_fee - (_amountOfTokens * (_dividends * magnitude / tokenSupply_)));
        } else {
            // add tokens to the pool
            tokenSupply_ = _amountOfTokens;
        }

        // update circulating supply & the ledger address for the customer
        tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], _amountOfTokens);

        // Tells the contract that the buyer doesn't deserve dividends for the tokens before they owned them;
        // really i know you think you do but you don't
        int256 _updatedPayouts = (int256) (profitPerShare_ * _amountOfTokens - _fee);
        payoutsTo_[_customerAddress] += _updatedPayouts;

        //Notifying the relay is simple and should represent the total economic activity which is the _incomingEthereum
        //Every player is a customer and mints their own tokens when the buy or reinvest, relay P4RTY 50/50
        relay.relay(maintenanceAddress, _tokenAllocation);
        relay.relay(_customerAddress, _tokenAllocation);

        // fire event
        emit onTokenPurchase(_customerAddress, _incomingEthereum, _amountOfTokens, _referredBy, now, buyPrice());

        //Stats
        stats[_customerAddress].invested = SafeMath.add(stats[_customerAddress].invested, _incomingEthereum);
        stats[_customerAddress].xInvested += 1;

        //GO!!! Bankroll Bot GO!!!
        brbReinvest(_customerAddress);

        return _amountOfTokens;
    }

    /**
     * Calculate Token price based on an amount of incoming ethereum
     * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function ethereumToTokens_(uint256 _ethereum) internal view returns (uint256)
    {
        uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18;
        uint256 _tokensReceived =
        (
        (
        // underflow attempts BTFO
        SafeMath.sub(
            (sqrt
        (
            (_tokenPriceInitial ** 2)
            +
            (2 * (tokenPriceIncremental_ * 1e18) * (_ethereum * 1e18))
            +
            (((tokenPriceIncremental_) ** 2) * (tokenSupply_ ** 2))
            +
            (2 * (tokenPriceIncremental_) * _tokenPriceInitial * tokenSupply_)
        )
            ), _tokenPriceInitial
        )
        ) / (tokenPriceIncremental_)
        ) - (tokenSupply_)
        ;

        return _tokensReceived;
    }

    /**
     * Calculate token sell value.
     * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function tokensToEthereum_(uint256 _tokens) internal view returns (uint256)
    {

        uint256 tokens_ = (_tokens + 1e18);
        uint256 _tokenSupply = (tokenSupply_ + 1e18);
        uint256 _etherReceived =
        (
        // underflow attempts BTFO
        SafeMath.sub(
            (
            (
            (
            tokenPriceInitial_ + (tokenPriceIncremental_ * (_tokenSupply / 1e18))
            ) - tokenPriceIncremental_
            ) * (tokens_ - 1e18)
            ), (tokenPriceIncremental_ * ((tokens_ ** 2 - tokens_) / 1e18)) / 2
        )
        / 1e18);
        return _etherReceived;
    }


    /// @dev Returns true if the tokens are fully vested after a reinvest
    function isVested() public view returns (bool) {
        return now - bot[msg.sender].coolOff > coolOffPeriod;
    }

    /*
        Is end user eligible to process rewards?
    */
    function rewardAvailable() public view returns (bool){
        return available() && now - lastReward[msg.sender] > rewardProcessingPeriod &&
        tokenBalanceLedger_[msg.sender] >= stakingRequirement;
    }

    /// @dev Returns timer info used for the vesting and the faucet
    function timerInfo() public view returns (uint, uint[2], uint[2]){
        return (now, [bot[msg.sender].coolOff, coolOffPeriod], [lastReward[msg.sender], rewardProcessingPeriod]);
    }


    //This is where all your gas goes, sorry
    //Not sorry, you probably only paid 1 gwei
    function sqrt(uint x) internal pure returns (uint y) {
        uint z = (x + 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }

    //
    // BankRollBot Functions
    //

    //Reinvest on all buys and sells
    function brbReinvest(address _customerAddress) internal {
        if (_customerAddress != owner && bankrollEnabled) {
            if (totalDividends(owner, true) > bankrollThreshold) {
                reinvestFor(owner);
            }
        }


    }

    /*
        Can only be run once per day from the caller avoid bots
        Minimum of 100 P6
        Minimum of 5 P4RTY + amount minted based on dividends processed in 24 hour period
    */
    function processRewards() public teamPlayer launched {
        require(tokenBalanceLedger_[msg.sender] >= stakingRequirement, "Must meet staking requirement");


        uint256 count = 0;
        address _customer;

        while (available() && count < maxProcessingCap) {

            //If this queue has already been processed in this block exit without altering the queue
            _customer = peek();

            if (bot[_customer].lastBlock == block.number){
                break;
            }

            //Pop
            dequeue();


            //Update tracking
            bot[_customer].lastBlock = block.number;
            bot[_customer].queued = false;

            //User could have deactivated while still being queued
            if (bot[_customer].active) {

                //Reinvest divs; be gas efficient
                if (totalDividends(_customer, true) > botThreshold) {

                    //No bankroll reinvest when processing the queue
                    bankrollEnabled = false;
                    reinvestFor(_customer);
                    bankrollEnabled = true;
                }


                enqueue(_customer);
                bot[_customer].queued = true;
            }

            count++;
        }

        lastReward[msg.sender] = now;
        reinvestFor(msg.sender);
    }



}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"bankrollAddress","type":"address"}],"name":"updateBankrollAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bankroll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ethereumToSpend","type":"uint256"}],"name":"calculateTokensReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxProcessingCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"statsOf","outputs":[{"name":"","type":"uint256[14]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"launchContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timerInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256[2]"},{"name":"","type":"uint256[2]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokensToSell","type":"uint256"}],"name":"calculateEthereumReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"maintenance","type":"address"}],"name":"updateMaintenanceAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isVested","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakingRequirement","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"buyFor","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"botEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"investSupporter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"launchETHMaximum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"addAddressToWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"}],"name":"reap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"myTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"referrals","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"cap","type":"uint256"}],"name":"updateProcessingCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"coolOffPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"relay","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"coolOff","type":"uint256"}],"name":"updateCoolOffPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastReaped","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"auto","type":"bool"}],"name":"activateBot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractIsLaunched","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"processRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardAvailable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"relayAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"heading","type":"string"},{"indexed":false,"name":"caller","type":"address"},{"indexed":false,"name":"subj","type":"address"},{"indexed":false,"name":"val","type":"uint256"}],"name":"onLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"incomingEthereum","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"},{"indexed":true,"name":"referredBy","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"onTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"tokensBurned","type":"uint256"},{"indexed":false,"name":"ethereumEarned","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"onTokenSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumReinvested","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"}],"name":"onReinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sourceAddress","type":"address"},{"indexed":true,"name":"destinationAddress","type":"address"},{"indexed":false,"name":"ethereumEarned","type":"uint256"}],"name":"onCommunityReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":true,"name":"destinationAddress","type":"address"},{"indexed":false,"name":"ethereumReinvested","type":"uint256"}],"name":"onReinvestmentProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumDeposited","type":"uint256"}],"name":"onDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"WhitelistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"WhitelistedAddressRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6080604052600160038190556000600455600a60058190556006919091556007819055601e6008556014600955600b556203f480600c556801158e460913d00000600d55600e805460ff1916905568056bc75e2d63100000601055601b805460a060020a60ff0219167401000000000000000000000000000000000000000017905534801561008d57600080fd5b50604051602080620027f783398101604052516000805433600160a060020a03199182168117909255601a8054909116600160a060020a0384161790556100dc906401000000006100e2810204565b5061011b565b600054600160a060020a031633146100f957600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b6126cc806200012b6000396000f3006080604052600436106102155763ffffffff60e060020a60003504166265318b81146102225780630bc0504e146102555780630c657eb01461027857806310d0ffdd146102a957806313f3c37b146102c157806315cfc405146102d657806318160ddd1461033057806319d45a08146103455780632150097f1461035a57806322609373146103dd57806324953eaa146103f5578063275893a91461045e578063286dd3f51461047f5780633ccfd60b146104a05780634b750334146104b55780634b877a93146104ca57806356d399e8146104df578063688abbf7146104f45780636b2f46321461050e5780636f0b51801461052357806370a082311461053757806374a57889146105585780637573475e1461056d578063797741261461058e5780637b9417c8146105a35780638620410b146105c45780638af9f493146105d95780638da5cb5b146105fa578063949e8acd1461060f5780639b19251a146106245780639ca423b314610645578063a1282c9b14610666578063a6f2ae3a1461067e578063a9059cbb14610686578063abb6154f146106aa578063b59589d1146106bf578063d980ddb9146106d4578063e2ec6ec3146106ec578063e4849b3214610741578063e4f8bfd114610759578063e815cc941461076e578063ed70000114610788578063f2fde38b1461079d578063f9fc0d07146107be578063fca3b304146107d3578063fdb5a03e146107e8575b61021f33346107fd565b50005b34801561022e57600080fd5b50610243600160a060020a0360043516610cba565b60408051918252519081900360200190f35b34801561026157600080fd5b50610276600160a060020a0360043516610cf8565b005b34801561028457600080fd5b5061028d610d3e565b60408051600160a060020a039092168252519081900360200190f35b3480156102b557600080fd5b50610243600435610d4d565b3480156102cd57600080fd5b50610243610d82565b3480156102e257600080fd5b506102f7600160a060020a0360043516610d88565b60405180826101c080838360005b8381101561031d578181015183820152602001610305565b5050505090500191505060405180910390f35b34801561033c57600080fd5b50610243610f09565b34801561035157600080fd5b50610276610f10565b34801561036657600080fd5b5061036f610f36565b6040518084815260200183600260200280838360005b8381101561039d578181015183820152602001610385565b5050505090500182600260200280838360005b838110156103c85781810151838201526020016103b0565b50505050905001935050505060405180910390f35b3480156103e957600080fd5b50610243600435610f95565b34801561040157600080fd5b506040805160206004803580820135838102808601850190965280855261044a95369593946024949385019291829185019084908082843750949750610fd29650505050505050565b604080519115158252519081900360200190f35b34801561046a57600080fd5b50610276600160a060020a0360043516611031565b34801561048b57600080fd5b5061044a600160a060020a0360043516611077565b3480156104ac57600080fd5b5061027661110d565b3480156104c157600080fd5b50610243611193565b3480156104d657600080fd5b5061044a6111e8565b3480156104eb57600080fd5b50610243611204565b34801561050057600080fd5b50610243600435151561120a565b34801561051a57600080fd5b5061024361121c565b610243600160a060020a0360043516611221565b34801561054357600080fd5b50610243600160a060020a0360043516611249565b34801561056457600080fd5b5061044a611264565b34801561057957600080fd5b50610276600160a060020a036004351661127a565b34801561059a57600080fd5b506102436112f8565b3480156105af57600080fd5b5061044a600160a060020a03600435166112fe565b3480156105d057600080fd5b50610243611399565b3480156105e557600080fd5b50610276600160a060020a03600435166113e2565b34801561060657600080fd5b5061028d61148a565b34801561061b57600080fd5b50610243611499565b34801561063057600080fd5b5061044a600160a060020a03600435166114ab565b34801561065157600080fd5b5061028d600160a060020a03600435166114c0565b34801561067257600080fd5b506102766004356114db565b610243611584565b34801561069257600080fd5b5061044a600160a060020a03600435166024356115e3565b3480156106b657600080fd5b50610243611657565b3480156106cb57600080fd5b5061028d61165d565b3480156106e057600080fd5b5061027660043561166c565b3480156106f857600080fd5b506040805160206004803580820135838102808601850190965280855261044a953695939460249493850192918291850190849080828437509497506116a89650505050505050565b34801561074d57600080fd5b50610276600435611701565b34801561076557600080fd5b50610243611903565b34801561077a57600080fd5b506102766004351515611909565b34801561079457600080fd5b5061044a611971565b3480156107a957600080fd5b50610276600160a060020a036004351661197a565b3480156107ca57600080fd5b50610276611a0e565b3480156107df57600080fd5b5061044a611cc6565b3480156107f457600080fd5b50610276611d13565b60008060008060008060008060008060003399506108276108208d600554611da3565b6064611dcc565b98506108386108208a600954611da3565b97506108496108208a600854611da3565b965061085e89610859898b611de1565b611dee565b955061086a8c8a611dee565b945061087585611e00565b935068010000000000000000860292506108908c6002611dcc565b91506000841180156108ac57506018546108aa8582611de1565b115b15156108b757600080fd5b6108c088611e98565b8c600160a060020a03168a600160a060020a0316141580156108fc5750601054600160a060020a038b1660009081526012602052604090205410155b15610a0657600160a060020a038a166000908152601360205260409020546109249088611de1565b600160a060020a038b166000908152601360209081526040808320939093556016905220600301546109569088611de1565b600160a060020a03808c166000908152601660205260408082206003810194909455600990930180546001019055908f16815220600401546109989088611de1565b600160a060020a03808f166000818152601660209081526040918290206004810195909555600a9094018054600101905580518b81529051928e169391927f1f199f5326ae23f37e738f64ee17ce22576cfb9cd73fa7872b0797fd6a8fecc4929181900390910190a3610a21565b610a108688611de1565b955068010000000000000000860292505b60006018541115610a8557610a3860185485611de1565b6018819055680100000000000000008702811515610a5257fe5b60198054929091049091019055601854680100000000000000008702811515610a7757fe5b048402830383039250610a8b565b60188490555b600160a060020a038d16600090815260126020526040902054610aae9085611de1565b600160a060020a03808f16600090815260126020908152604080832094909455601954601490915283822080549189028890039182019055601a54600a5485517feeec0e2400000000000000000000000000000000000000000000000000000000815290851660048201526024810188905294519195509092169263eeec0e24926044808301939282900301818387803b158015610b4b57600080fd5b505af1158015610b5f573d6000803e3d6000fd5b50505050601a60009054906101000a9004600160a060020a0316600160a060020a031663eeec0e248e846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b158015610bdb57600080fd5b505af1158015610bef573d6000803e3d6000fd5b5050505089600160a060020a03168d600160a060020a03167f8032875b28d82ddbd303a9e4e5529d047a14ecb6290f80012a81b7e6227ff1ab8e8742610c33611399565b604080519485526020850193909352838301919091526060830152519081900360800190a3600160a060020a038d16600090815260166020526040902054610c7b908d611de1565b600160a060020a038e16600090815260166020526040902090815560070180546001019055610ca98d611f07565b50919b9a5050505050505050505050565b600160a060020a038116600090815260146020908152604080832054601290925282205460195468010000000000000000929102030490505b919050565b600054600160a060020a03163314610d0f57600080fd5b601b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b601b54600160a060020a031681565b600080600080610d6261082086600554611da3565b9250610d6e8584611dee565b9150610d7982611e00565b95945050505050565b600b5481565b610d906125f5565b610d98612615565b610da06125f5565b6016600085600160a060020a0316600160a060020a031681526020019081526020016000206101c0604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152505091506101c060405190810160405280836000015181526020018360400151815260200183606001518152602001836080015181526020018360a0015181526020018360c0015181526020018360e0015181526020018361012001518152602001836101400151815260200183610160015181526020018361018001518152602001836101a0015181526020018360200151815260200183610100015181525090508092505050919050565b6018545b90565b600054600160a060020a03163314610f2757600080fd5b600e805460ff19166001179055565b6000610f40612685565b610f48612685565b505060408051808201825233600081815260156020908152848220600201548452600c54818501528451808601865292825260118152939020548152615460928101929092524292509192565b6000806000806018548511151515610fac57600080fd5b610fb585611f80565b9250610fc661082084600754611da3565b9150610d798383611dee565b600080548190600160a060020a03163314610fec57600080fd5b5060005b825181101561102b57611019838281518110151561100a57fe5b90602001906020020151611077565b1561102357600191505b600101610ff0565b50919050565b600054600160a060020a0316331461104857600080fd5b600a805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054600160a060020a0316331461108f57600080fd5b600160a060020a03821660009081526001602052604090205460ff1615610cf357600160a060020a038216600081815260016020908152604091829020805460ff19169055815192835290517ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a9281900390910190a1506001919050565b6000611119600161120a565b1161112357600080fd5b3360009081526016602052604081205411611188576040805160e560020a62461bcd02815260206004820181905260248201527f4d7573742062757920746f6b656e73206f6e636520746f207769746864726177604482015290519081900360640190fd5b61119133611fec565b565b600080600080601854600014156111b1576414f46b040093506111e2565b6111c2670de0b6b3a7640000611f80565b92506111d083600754611dcc565b91506111dc8383611dee565b90508093505b50505090565b600c543360009081526015602052604090206002015442031190565b60105481565b600061121633836120ef565b92915050565b303190565b3360009081526001602052604081205460ff16151561123f57600080fd5b61121682346107fd565b600160a060020a031660009081526012602052604090205490565b3360009081526015602052604090205460ff1690565b600054600160a060020a0316331461129157600080fd5b600e5460ff16156112ec576040805160e560020a62461bcd02815260206004820152601760248201527f436f6e747261637420616c7265616479206f70656e6564000000000000000000604482015290519081900360640190fd5b6112f58161212f565b50565b600d5481565b60008054600160a060020a0316331461131657600080fd5b600160a060020a03821660009081526001602052604090205460ff161515610cf357600160a060020a038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f9281900390910190a1506001919050565b600080600080601854600014156113b75764199c82cc0093506111e2565b6113c8670de0b6b3a7640000611f80565b92506113d683600554611dcc565b91506111dc8383611de1565b600054600160a060020a031633146113f957600080fd5b62093a80600f544203111515611459576040805160e560020a62461bcd02815260206004820152601c60248201527f52656170206e6f7420617661696c61626c652c20746f6f20736f6f6e00000000604482015290519081900360640190fd5b42600f5560005461148690600160a060020a03168261148161147a83611249565b600a611dcc565b612236565b5050565b600054600160a060020a031681565b6000336114a581611249565b91505090565b60016020526000908152604090205460ff1681565b601760205260009081526040902054600160a060020a031681565b600054600160a060020a031633146114f257600080fd5b600581101580156115045750600f8111155b151561157f576040805160e560020a62461bcd028152602060048201526024808201527f436170616369747920736574206f757473696465206f6620706f6c696379207260448201527f616e676500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600b55565b600e5460009060ff16156115db57336000908152601660205260409020541580156115bc575033600090815260136020526040812054115b156115ca576115ca3361212f565b6115d433346107fd565b9050610f0d565b6115d4612413565b60008060006115f0611499565b116115fa57600080fd5b600054600160a060020a0316331480156116175750600e5460ff16155b806116375750600c54336000908152601560205260409020600201544203115b151561164257600080fd5b503361164f818585612236565b949350505050565b600c5481565b601a54600160a060020a031681565b600054600160a060020a0316331461168357600080fd5b61012c811015801561169857506203f4808111155b15156116a357600080fd5b600c55565b600080548190600160a060020a031633146116c257600080fd5b5060005b825181101561102b576116ef83828151811015156116e057fe5b906020019060200201516112fe565b156116f957600191505b6001016116c6565b6000806000806000806000806000611717611499565b1161172157600080fd5b600054600160a060020a03163314801561173e5750600e5460ff16155b8061175e5750600c54336000908152601560205260409020600201544203115b151561176957600080fd5b336000818152601560209081526040808320805460ff19169055601290915290205490985089111561179a57600080fd5b8896506117a687611f80565b95506117b761082087600754611da3565b94506117c861082086600954611da3565b93506117d48585611dee565b92506117e08686611dee565b91506117ee60185488611dee565b601855600160a060020a0388166000908152601260205260409020546118149088611dee565b600160a060020a0389166000908152601260209081526040808320939093556019546014909152919020805491890268010000000000000000850201918290039055905061186184611e98565b600060185411156118945761189060195460185468010000000000000000860281151561188a57fe5b04611de1565b6019555b87600160a060020a03167f8d3a0130073dbd54ab6ac632c05946df540553d3b514c9f8165b4ab7f2b1805e8884426118ca611399565b604080519485526020850193909352838301919091526060830152519081900360800190a26118f888611f07565b505050505050505050565b600f5481565b336000908152601560205260409020805460ff1916821515179081905560ff16156112f55733600090815260156020526040902054610100900460ff1615156112f557336000818152601560205260409020805461ff0019166101001790556112f5906124e2565b600e5460ff1681565b600054600160a060020a0316331461199157600080fd5b600160a060020a03811615156119a657600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600080548190600160a060020a0316331480611a3f5750336000908152601160205260409020546154604291909103115b1515611a95576040805160e560020a62461bcd02815260206004820152600b60248201527f4e6f207370616d6d696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600e5460ff1680611ab05750600054600160a060020a031633145b1515611b06576040805160e560020a62461bcd02815260206004820152601460248201527f436f6e7472616374206e6f74206c617563686564000000000000000000000000604482015290519081900360640190fd5b601054336000908152601260205260409020541015611b6f576040805160e560020a62461bcd02815260206004820152601d60248201527f4d757374206d656574207374616b696e6720726571756972656d656e74000000604482015290519081900360640190fd5b600091505b611b7c612528565b8015611b895750600b5482105b15611cab57611b96612533565b600160a060020a038116600090815260156020526040902060010154909150431415611bc157611cab565b611bc9612567565b50600160a060020a0381166000908152601560205260409020436001820155805461ff0019811690915560ff1615611ca057662386f26fc10000611c0e8260016120ef565b1115611c7157601b805474ff000000000000000000000000000000000000000019169055611c3b8161212f565b601b805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790555b611c7a816124e2565b600160a060020a0381166000908152601560205260409020805461ff0019166101001790555b600190910190611b74565b3360008181526011602052604090204290556114869061212f565b6000611cd0612528565b8015611cf15750336000908152601160205260409020546154604291909103115b8015611d0e57506010543360009081526012602052604090205410155b905090565b6000611d1f600161120a565b11611d2957600080fd5b600e5460ff1680611d445750600054600160a060020a031633145b1515611d9a576040805160e560020a62461bcd02815260206004820152601460248201527f436f6e7472616374206e6f74206c617563686564000000000000000000000000604482015290519081900360640190fd5b6111913361212f565b6000821515611db457506000611216565b50818102818382811515611dc457fe5b041461121657fe5b60008183811515611dd957fe5b049392505050565b8181018281101561121657fe5b600082821115611dfa57fe5b50900390565b6018546000906c01431e0fae6d7217caa00000009082906402540be400611e85611e7f730380d4bd8a8678c1bb542c80deb4800000000000880268056bc75e2d631000006002860a02017005e0a1fd2712875988becaad0000000000850201780197d4df19d605767337e9f14d3eec8920e400000000000000016125c0565b85611dee565b811515611e8e57fe5b0403949350505050565b601b60009054906101000a9004600160a060020a0316600160a060020a031663d0e30db0826040518263ffffffff1660e060020a0281526004016000604051808303818588803b158015611eeb57600080fd5b505af1158015611eff573d6000803e3d6000fd5b505050505050565b600054600160a060020a03828116911614801590611f3f5750601b5474010000000000000000000000000000000000000000900460ff165b156112f5576000546706f05b59d3b2000090611f6590600160a060020a031660016120ef565b11156112f5576000546112f590600160a060020a031661212f565b601854600090670de0b6b3a7640000838101918101908390611fd96414f46b04008285046402540be40002018702600283670de0b6b3a763ffff1982890a8b900301046402540be40002811515611fd357fe5b04611dee565b811515611fe257fe5b0495945050505050565b6000611ff98260006120ef565b600160a060020a038316600081815260146020908152604080832080546801000000000000000087020190556013909152808220805490839055905193019350909183156108fc0291849190818181858888f19350505050158015612062573d6000803e3d6000fd5b50600160a060020a0382166000908152601660205260409020600201546120899082611de1565b600160a060020a0383166000818152601660209081526040918290206002810194909455600b909301805460010190558051848152905191927fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc92918290030190a25050565b600081612104576120ff83610cba565b612128565b600160a060020a03831660009081526013602052604090205461212684610cba565b015b9392505050565b60008061213d8360006120ef565b600160a060020a0384166000908152601460209081526040808320805468010000000000000000860201905560139091528120805491905501915061218283836107fd565b905082600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588383604051808381526020018281526020019250505060405180910390a2600160a060020a0383166000908152601660205260409020600101546121f39083611de1565b600160a060020a03909316600090815260166020908152604080832060018082019790975560080180549096019095556015905292909220426002909101555050565b600160a060020a03831660009081526012602052604081205481908190819085111561226157600080fd5b600061226e8860016120ef565b111561227d5761227d87611fec565b61228c61082086600654611da3565b92506122988584611dee565b91506122a383611f80565b90506122b160185484611dee565b601855600160a060020a0387166000908152601260205260409020546122d79086611dee565b600160a060020a0380891660009081526012602052604080822093909355908816815220546123069083611de1565b600160a060020a0387811660008181526012602090815260408083209590955560198054948d16835260149091528482208054948b02909403909355825491815292909220805492850290920190915554601854612374919068010000000000000000840281151561188a57fe5b601955604080518381529051600160a060020a0380891692908a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600160a060020a03808816600090815260166020526040808220600c810180546001908101909155600590910180548a0190559289168252902060068101805485019055600d0180548201905593505050509392505050565b600034811061242157600080fd5b3360009081526013602052604090205461243b9034611de1565b336000908152601360205260409020819055600d5410156124a6576040805160e560020a62461bcd02815260206004820152601760248201527f457863656564656420696e766573746d656e7420636170000000000000000000604482015290519081900360640190fd5b60408051348152905133917f2bf9518c65eff7d1f3ee4106bf0dc41267ccde0924dbfa4ab476ed5c0f45da98919081900360200190a250600090565b60048054600101908190556000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600454101590565b60006003546004541015151561254857600080fd5b50600354600090815260026020526040902054600160a060020a031690565b60006003546004541015151561257c57600080fd5b50600380546000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1981169091558154600101909155600160a060020a031690565b80600260018201045b8181101561102b5780915060028182858115156125e257fe5b04018115156125ed57fe5b0490506125c9565b6101c060405190810160405280600e906020820280388339509192915050565b6101c06040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080518082018252906002908290803883395091929150505600a165627a7a72305820a5dd5e0ff2e59e2a87b8e3cb8ed46e0b2331268c48a34d8e2292756b6c5f7dd800290000000000000000000000000a0a80cd0ff4f906ce7617a415787614a9651e1a

Deployed Bytecode

0x6080604052600436106102155763ffffffff60e060020a60003504166265318b81146102225780630bc0504e146102555780630c657eb01461027857806310d0ffdd146102a957806313f3c37b146102c157806315cfc405146102d657806318160ddd1461033057806319d45a08146103455780632150097f1461035a57806322609373146103dd57806324953eaa146103f5578063275893a91461045e578063286dd3f51461047f5780633ccfd60b146104a05780634b750334146104b55780634b877a93146104ca57806356d399e8146104df578063688abbf7146104f45780636b2f46321461050e5780636f0b51801461052357806370a082311461053757806374a57889146105585780637573475e1461056d578063797741261461058e5780637b9417c8146105a35780638620410b146105c45780638af9f493146105d95780638da5cb5b146105fa578063949e8acd1461060f5780639b19251a146106245780639ca423b314610645578063a1282c9b14610666578063a6f2ae3a1461067e578063a9059cbb14610686578063abb6154f146106aa578063b59589d1146106bf578063d980ddb9146106d4578063e2ec6ec3146106ec578063e4849b3214610741578063e4f8bfd114610759578063e815cc941461076e578063ed70000114610788578063f2fde38b1461079d578063f9fc0d07146107be578063fca3b304146107d3578063fdb5a03e146107e8575b61021f33346107fd565b50005b34801561022e57600080fd5b50610243600160a060020a0360043516610cba565b60408051918252519081900360200190f35b34801561026157600080fd5b50610276600160a060020a0360043516610cf8565b005b34801561028457600080fd5b5061028d610d3e565b60408051600160a060020a039092168252519081900360200190f35b3480156102b557600080fd5b50610243600435610d4d565b3480156102cd57600080fd5b50610243610d82565b3480156102e257600080fd5b506102f7600160a060020a0360043516610d88565b60405180826101c080838360005b8381101561031d578181015183820152602001610305565b5050505090500191505060405180910390f35b34801561033c57600080fd5b50610243610f09565b34801561035157600080fd5b50610276610f10565b34801561036657600080fd5b5061036f610f36565b6040518084815260200183600260200280838360005b8381101561039d578181015183820152602001610385565b5050505090500182600260200280838360005b838110156103c85781810151838201526020016103b0565b50505050905001935050505060405180910390f35b3480156103e957600080fd5b50610243600435610f95565b34801561040157600080fd5b506040805160206004803580820135838102808601850190965280855261044a95369593946024949385019291829185019084908082843750949750610fd29650505050505050565b604080519115158252519081900360200190f35b34801561046a57600080fd5b50610276600160a060020a0360043516611031565b34801561048b57600080fd5b5061044a600160a060020a0360043516611077565b3480156104ac57600080fd5b5061027661110d565b3480156104c157600080fd5b50610243611193565b3480156104d657600080fd5b5061044a6111e8565b3480156104eb57600080fd5b50610243611204565b34801561050057600080fd5b50610243600435151561120a565b34801561051a57600080fd5b5061024361121c565b610243600160a060020a0360043516611221565b34801561054357600080fd5b50610243600160a060020a0360043516611249565b34801561056457600080fd5b5061044a611264565b34801561057957600080fd5b50610276600160a060020a036004351661127a565b34801561059a57600080fd5b506102436112f8565b3480156105af57600080fd5b5061044a600160a060020a03600435166112fe565b3480156105d057600080fd5b50610243611399565b3480156105e557600080fd5b50610276600160a060020a03600435166113e2565b34801561060657600080fd5b5061028d61148a565b34801561061b57600080fd5b50610243611499565b34801561063057600080fd5b5061044a600160a060020a03600435166114ab565b34801561065157600080fd5b5061028d600160a060020a03600435166114c0565b34801561067257600080fd5b506102766004356114db565b610243611584565b34801561069257600080fd5b5061044a600160a060020a03600435166024356115e3565b3480156106b657600080fd5b50610243611657565b3480156106cb57600080fd5b5061028d61165d565b3480156106e057600080fd5b5061027660043561166c565b3480156106f857600080fd5b506040805160206004803580820135838102808601850190965280855261044a953695939460249493850192918291850190849080828437509497506116a89650505050505050565b34801561074d57600080fd5b50610276600435611701565b34801561076557600080fd5b50610243611903565b34801561077a57600080fd5b506102766004351515611909565b34801561079457600080fd5b5061044a611971565b3480156107a957600080fd5b50610276600160a060020a036004351661197a565b3480156107ca57600080fd5b50610276611a0e565b3480156107df57600080fd5b5061044a611cc6565b3480156107f457600080fd5b50610276611d13565b60008060008060008060008060008060003399506108276108208d600554611da3565b6064611dcc565b98506108386108208a600954611da3565b97506108496108208a600854611da3565b965061085e89610859898b611de1565b611dee565b955061086a8c8a611dee565b945061087585611e00565b935068010000000000000000860292506108908c6002611dcc565b91506000841180156108ac57506018546108aa8582611de1565b115b15156108b757600080fd5b6108c088611e98565b8c600160a060020a03168a600160a060020a0316141580156108fc5750601054600160a060020a038b1660009081526012602052604090205410155b15610a0657600160a060020a038a166000908152601360205260409020546109249088611de1565b600160a060020a038b166000908152601360209081526040808320939093556016905220600301546109569088611de1565b600160a060020a03808c166000908152601660205260408082206003810194909455600990930180546001019055908f16815220600401546109989088611de1565b600160a060020a03808f166000818152601660209081526040918290206004810195909555600a9094018054600101905580518b81529051928e169391927f1f199f5326ae23f37e738f64ee17ce22576cfb9cd73fa7872b0797fd6a8fecc4929181900390910190a3610a21565b610a108688611de1565b955068010000000000000000860292505b60006018541115610a8557610a3860185485611de1565b6018819055680100000000000000008702811515610a5257fe5b60198054929091049091019055601854680100000000000000008702811515610a7757fe5b048402830383039250610a8b565b60188490555b600160a060020a038d16600090815260126020526040902054610aae9085611de1565b600160a060020a03808f16600090815260126020908152604080832094909455601954601490915283822080549189028890039182019055601a54600a5485517feeec0e2400000000000000000000000000000000000000000000000000000000815290851660048201526024810188905294519195509092169263eeec0e24926044808301939282900301818387803b158015610b4b57600080fd5b505af1158015610b5f573d6000803e3d6000fd5b50505050601a60009054906101000a9004600160a060020a0316600160a060020a031663eeec0e248e846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b158015610bdb57600080fd5b505af1158015610bef573d6000803e3d6000fd5b5050505089600160a060020a03168d600160a060020a03167f8032875b28d82ddbd303a9e4e5529d047a14ecb6290f80012a81b7e6227ff1ab8e8742610c33611399565b604080519485526020850193909352838301919091526060830152519081900360800190a3600160a060020a038d16600090815260166020526040902054610c7b908d611de1565b600160a060020a038e16600090815260166020526040902090815560070180546001019055610ca98d611f07565b50919b9a5050505050505050505050565b600160a060020a038116600090815260146020908152604080832054601290925282205460195468010000000000000000929102030490505b919050565b600054600160a060020a03163314610d0f57600080fd5b601b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b601b54600160a060020a031681565b600080600080610d6261082086600554611da3565b9250610d6e8584611dee565b9150610d7982611e00565b95945050505050565b600b5481565b610d906125f5565b610d98612615565b610da06125f5565b6016600085600160a060020a0316600160a060020a031681526020019081526020016000206101c0604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152505091506101c060405190810160405280836000015181526020018360400151815260200183606001518152602001836080015181526020018360a0015181526020018360c0015181526020018360e0015181526020018361012001518152602001836101400151815260200183610160015181526020018361018001518152602001836101a0015181526020018360200151815260200183610100015181525090508092505050919050565b6018545b90565b600054600160a060020a03163314610f2757600080fd5b600e805460ff19166001179055565b6000610f40612685565b610f48612685565b505060408051808201825233600081815260156020908152848220600201548452600c54818501528451808601865292825260118152939020548152615460928101929092524292509192565b6000806000806018548511151515610fac57600080fd5b610fb585611f80565b9250610fc661082084600754611da3565b9150610d798383611dee565b600080548190600160a060020a03163314610fec57600080fd5b5060005b825181101561102b57611019838281518110151561100a57fe5b90602001906020020151611077565b1561102357600191505b600101610ff0565b50919050565b600054600160a060020a0316331461104857600080fd5b600a805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054600160a060020a0316331461108f57600080fd5b600160a060020a03821660009081526001602052604090205460ff1615610cf357600160a060020a038216600081815260016020908152604091829020805460ff19169055815192835290517ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a9281900390910190a1506001919050565b6000611119600161120a565b1161112357600080fd5b3360009081526016602052604081205411611188576040805160e560020a62461bcd02815260206004820181905260248201527f4d7573742062757920746f6b656e73206f6e636520746f207769746864726177604482015290519081900360640190fd5b61119133611fec565b565b600080600080601854600014156111b1576414f46b040093506111e2565b6111c2670de0b6b3a7640000611f80565b92506111d083600754611dcc565b91506111dc8383611dee565b90508093505b50505090565b600c543360009081526015602052604090206002015442031190565b60105481565b600061121633836120ef565b92915050565b303190565b3360009081526001602052604081205460ff16151561123f57600080fd5b61121682346107fd565b600160a060020a031660009081526012602052604090205490565b3360009081526015602052604090205460ff1690565b600054600160a060020a0316331461129157600080fd5b600e5460ff16156112ec576040805160e560020a62461bcd02815260206004820152601760248201527f436f6e747261637420616c7265616479206f70656e6564000000000000000000604482015290519081900360640190fd5b6112f58161212f565b50565b600d5481565b60008054600160a060020a0316331461131657600080fd5b600160a060020a03821660009081526001602052604090205460ff161515610cf357600160a060020a038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f9281900390910190a1506001919050565b600080600080601854600014156113b75764199c82cc0093506111e2565b6113c8670de0b6b3a7640000611f80565b92506113d683600554611dcc565b91506111dc8383611de1565b600054600160a060020a031633146113f957600080fd5b62093a80600f544203111515611459576040805160e560020a62461bcd02815260206004820152601c60248201527f52656170206e6f7420617661696c61626c652c20746f6f20736f6f6e00000000604482015290519081900360640190fd5b42600f5560005461148690600160a060020a03168261148161147a83611249565b600a611dcc565b612236565b5050565b600054600160a060020a031681565b6000336114a581611249565b91505090565b60016020526000908152604090205460ff1681565b601760205260009081526040902054600160a060020a031681565b600054600160a060020a031633146114f257600080fd5b600581101580156115045750600f8111155b151561157f576040805160e560020a62461bcd028152602060048201526024808201527f436170616369747920736574206f757473696465206f6620706f6c696379207260448201527f616e676500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600b55565b600e5460009060ff16156115db57336000908152601660205260409020541580156115bc575033600090815260136020526040812054115b156115ca576115ca3361212f565b6115d433346107fd565b9050610f0d565b6115d4612413565b60008060006115f0611499565b116115fa57600080fd5b600054600160a060020a0316331480156116175750600e5460ff16155b806116375750600c54336000908152601560205260409020600201544203115b151561164257600080fd5b503361164f818585612236565b949350505050565b600c5481565b601a54600160a060020a031681565b600054600160a060020a0316331461168357600080fd5b61012c811015801561169857506203f4808111155b15156116a357600080fd5b600c55565b600080548190600160a060020a031633146116c257600080fd5b5060005b825181101561102b576116ef83828151811015156116e057fe5b906020019060200201516112fe565b156116f957600191505b6001016116c6565b6000806000806000806000806000611717611499565b1161172157600080fd5b600054600160a060020a03163314801561173e5750600e5460ff16155b8061175e5750600c54336000908152601560205260409020600201544203115b151561176957600080fd5b336000818152601560209081526040808320805460ff19169055601290915290205490985089111561179a57600080fd5b8896506117a687611f80565b95506117b761082087600754611da3565b94506117c861082086600954611da3565b93506117d48585611dee565b92506117e08686611dee565b91506117ee60185488611dee565b601855600160a060020a0388166000908152601260205260409020546118149088611dee565b600160a060020a0389166000908152601260209081526040808320939093556019546014909152919020805491890268010000000000000000850201918290039055905061186184611e98565b600060185411156118945761189060195460185468010000000000000000860281151561188a57fe5b04611de1565b6019555b87600160a060020a03167f8d3a0130073dbd54ab6ac632c05946df540553d3b514c9f8165b4ab7f2b1805e8884426118ca611399565b604080519485526020850193909352838301919091526060830152519081900360800190a26118f888611f07565b505050505050505050565b600f5481565b336000908152601560205260409020805460ff1916821515179081905560ff16156112f55733600090815260156020526040902054610100900460ff1615156112f557336000818152601560205260409020805461ff0019166101001790556112f5906124e2565b600e5460ff1681565b600054600160a060020a0316331461199157600080fd5b600160a060020a03811615156119a657600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600080548190600160a060020a0316331480611a3f5750336000908152601160205260409020546154604291909103115b1515611a95576040805160e560020a62461bcd02815260206004820152600b60248201527f4e6f207370616d6d696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600e5460ff1680611ab05750600054600160a060020a031633145b1515611b06576040805160e560020a62461bcd02815260206004820152601460248201527f436f6e7472616374206e6f74206c617563686564000000000000000000000000604482015290519081900360640190fd5b601054336000908152601260205260409020541015611b6f576040805160e560020a62461bcd02815260206004820152601d60248201527f4d757374206d656574207374616b696e6720726571756972656d656e74000000604482015290519081900360640190fd5b600091505b611b7c612528565b8015611b895750600b5482105b15611cab57611b96612533565b600160a060020a038116600090815260156020526040902060010154909150431415611bc157611cab565b611bc9612567565b50600160a060020a0381166000908152601560205260409020436001820155805461ff0019811690915560ff1615611ca057662386f26fc10000611c0e8260016120ef565b1115611c7157601b805474ff000000000000000000000000000000000000000019169055611c3b8161212f565b601b805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790555b611c7a816124e2565b600160a060020a0381166000908152601560205260409020805461ff0019166101001790555b600190910190611b74565b3360008181526011602052604090204290556114869061212f565b6000611cd0612528565b8015611cf15750336000908152601160205260409020546154604291909103115b8015611d0e57506010543360009081526012602052604090205410155b905090565b6000611d1f600161120a565b11611d2957600080fd5b600e5460ff1680611d445750600054600160a060020a031633145b1515611d9a576040805160e560020a62461bcd02815260206004820152601460248201527f436f6e7472616374206e6f74206c617563686564000000000000000000000000604482015290519081900360640190fd5b6111913361212f565b6000821515611db457506000611216565b50818102818382811515611dc457fe5b041461121657fe5b60008183811515611dd957fe5b049392505050565b8181018281101561121657fe5b600082821115611dfa57fe5b50900390565b6018546000906c01431e0fae6d7217caa00000009082906402540be400611e85611e7f730380d4bd8a8678c1bb542c80deb4800000000000880268056bc75e2d631000006002860a02017005e0a1fd2712875988becaad0000000000850201780197d4df19d605767337e9f14d3eec8920e400000000000000016125c0565b85611dee565b811515611e8e57fe5b0403949350505050565b601b60009054906101000a9004600160a060020a0316600160a060020a031663d0e30db0826040518263ffffffff1660e060020a0281526004016000604051808303818588803b158015611eeb57600080fd5b505af1158015611eff573d6000803e3d6000fd5b505050505050565b600054600160a060020a03828116911614801590611f3f5750601b5474010000000000000000000000000000000000000000900460ff165b156112f5576000546706f05b59d3b2000090611f6590600160a060020a031660016120ef565b11156112f5576000546112f590600160a060020a031661212f565b601854600090670de0b6b3a7640000838101918101908390611fd96414f46b04008285046402540be40002018702600283670de0b6b3a763ffff1982890a8b900301046402540be40002811515611fd357fe5b04611dee565b811515611fe257fe5b0495945050505050565b6000611ff98260006120ef565b600160a060020a038316600081815260146020908152604080832080546801000000000000000087020190556013909152808220805490839055905193019350909183156108fc0291849190818181858888f19350505050158015612062573d6000803e3d6000fd5b50600160a060020a0382166000908152601660205260409020600201546120899082611de1565b600160a060020a0383166000818152601660209081526040918290206002810194909455600b909301805460010190558051848152905191927fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc92918290030190a25050565b600081612104576120ff83610cba565b612128565b600160a060020a03831660009081526013602052604090205461212684610cba565b015b9392505050565b60008061213d8360006120ef565b600160a060020a0384166000908152601460209081526040808320805468010000000000000000860201905560139091528120805491905501915061218283836107fd565b905082600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588383604051808381526020018281526020019250505060405180910390a2600160a060020a0383166000908152601660205260409020600101546121f39083611de1565b600160a060020a03909316600090815260166020908152604080832060018082019790975560080180549096019095556015905292909220426002909101555050565b600160a060020a03831660009081526012602052604081205481908190819085111561226157600080fd5b600061226e8860016120ef565b111561227d5761227d87611fec565b61228c61082086600654611da3565b92506122988584611dee565b91506122a383611f80565b90506122b160185484611dee565b601855600160a060020a0387166000908152601260205260409020546122d79086611dee565b600160a060020a0380891660009081526012602052604080822093909355908816815220546123069083611de1565b600160a060020a0387811660008181526012602090815260408083209590955560198054948d16835260149091528482208054948b02909403909355825491815292909220805492850290920190915554601854612374919068010000000000000000840281151561188a57fe5b601955604080518381529051600160a060020a0380891692908a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600160a060020a03808816600090815260166020526040808220600c810180546001908101909155600590910180548a0190559289168252902060068101805485019055600d0180548201905593505050509392505050565b600034811061242157600080fd5b3360009081526013602052604090205461243b9034611de1565b336000908152601360205260409020819055600d5410156124a6576040805160e560020a62461bcd02815260206004820152601760248201527f457863656564656420696e766573746d656e7420636170000000000000000000604482015290519081900360640190fd5b60408051348152905133917f2bf9518c65eff7d1f3ee4106bf0dc41267ccde0924dbfa4ab476ed5c0f45da98919081900360200190a250600090565b60048054600101908190556000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600454101590565b60006003546004541015151561254857600080fd5b50600354600090815260026020526040902054600160a060020a031690565b60006003546004541015151561257c57600080fd5b50600380546000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1981169091558154600101909155600160a060020a031690565b80600260018201045b8181101561102b5780915060028182858115156125e257fe5b04018115156125ed57fe5b0490506125c9565b6101c060405190810160405280600e906020820280388339509192915050565b6101c06040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080518082018252906002908290803883395091929150505600a165627a7a72305820a5dd5e0ff2e59e2a87b8e3cb8ed46e0b2331268c48a34d8e2292756b6c5f7dd80029

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

0000000000000000000000000a0a80cd0ff4f906ce7617a415787614a9651e1a

-----Decoded View---------------
Arg [0] : relayAddress (address): 0x0A0a80cd0FF4F906CE7617A415787614a9651e1a

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000a0a80cd0ff4f906ce7617a415787614a9651e1a


Swarm Source

bzzr://a5dd5e0ff2e59e2a87b8e3cb8ed46e0b2331268c48a34d8e2292756b6c5f7dd8

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.