ETH Price: $2,499.28 (-2.18%)

Token

DF2.io (DF2)
 

Overview

Max Total Supply

6,328.224838234351273941 DF2

Holders

10

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 DF2

Value
$0.00
0xB74D5f0a81Ce99aC1857133E489bC2b4954935fF
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DeFi2

Compiler Version
v0.4.26+commit.4563c3fc

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2019-10-10
*/

/*
                               .
                              ":"
      www.df2.io            ___:____     |"\/"|
                          ,'        `.    \  /
                          |  O        \___/  |
~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~~^~^~^~^~^~^~^~^~^~^~^~^~
^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~~^~^~^~^~^~^~^~^~^~^~^~^
~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~~^~^~^~^~^~^~^~^~^~^~^~^~

     Decentralized Finance 2.0 at its best!

Features:
- DF2 holder get 15% from every buy event and 85%-25% from every sell event
- Anti-dump: selling fee gradually decreases from 85% on the first day to 25% on the 30th day.
- Referral bonus: 5% from buy-in amounts
- 100% open and secure
- Immutable: no way for anyone including devs to modify the contract or exit-scam in any way
- This contract will work forever, no kill switch, no admin functions


                 .
                ":"
  |"\/"|     ____:___                          www.df2.io
   \  /    ,'        `.
   |  \___/        O  |
~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~~^~^~^~^~^~^~^~^~^~^~^~^~
^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~~^~^~^~^~^~^~^~^~^~^~^~^
~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~~^~^~^~^~^~^~^~^~^~^~^~^~
*/


pragma solidity ^0.4.26;

contract DeFi2 {
    /*=================================
    =            MODIFIERS            =
    =================================*/
    // only people with tokens
    modifier onlyBagholders() {
        require(myTokens() > 0);
        _;
    }

    // only people with profits
    modifier onlyStronghands() {
        require(myDividends(true) > 0);
        _;
    }

    // administrators can:
    // -> change the name of the contract
    // -> change the name of the token
    // -> change the PoS difficulty (How many tokens it costs to hold a masternode, in case it gets crazy high later)
    // they CANNOT:
    // -> take funds
    // -> disable withdrawals
    // -> kill the contract
    // -> change the price of tokens
    modifier onlyAdministrator(){
        address _customerAddress = msg.sender;
        require(administrators_[_customerAddress]);
        _;
    }

    //
    // prevents contracts from interacting with Defi2.0 
    // 
    modifier isHuman() {
        address _addr = msg.sender;
        uint256 _codeLength;
        
        assembly {_codeLength := extcodesize(_addr)}
        require(_codeLength == 0, "sorry humans only");
        require(_addr == tx.origin);
        _;
    }


    // ensures that the first tokens in the contract will be equally distributed
    // meaning, no divine dump will be ever possible
    // result: healthy longevity.
    modifier antiEarlyWhale(uint256 _amountOfEthereum){
        address _customerAddress = msg.sender;

        if (launchTime <= now){
            onlyAmbassadors = false;
        }

        // are we still in the vulnerable phase?
        // if so, enact anti early whale protocol
        if( onlyAmbassadors && ((totalEthereumBalance() - _amountOfEthereum) <= ambassadorQuota_ )){
            require(
                // is the customer in the ambassador list?
                ambassadors_[_customerAddress] == true &&

                // does the customer purchase exceed the max ambassador quota?
                (ambassadorAccumulatedQuota_[_customerAddress] + _amountOfEthereum) <= ambassadorMaxPurchase_

            );

            // updated the accumulated quota
            ambassadorAccumulatedQuota_[_customerAddress] = SafeMath.add(ambassadorAccumulatedQuota_[_customerAddress], _amountOfEthereum);

            // execute
            _;
        } else {
            // in case the ether count drops low, the ambassador phase won't reinitiate
            onlyAmbassadors = false;
            _;
        }
    }


    /*==============================
    =            EVENTS            =
    ==============================*/
    event onTokenPurchase(
        address indexed customerAddress,
        uint256 incomingEthereum,
        uint256 tokensMinted,
        address indexed referredBy
    );

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

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

    event onWithdraw(
        address indexed customerAddress,
        uint256 ethereumWithdrawn
    );

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


    /*=====================================
    =            CONFIGURABLES            =
    =====================================*/
    string public name = "DF2.io";
    string public symbol = "DF2";
    uint8 constant public decimals = 18;
    uint8 constant internal entryFee_ = 15; // 15% to enter
    uint8 constant internal exitFeeHigh_ = 85; // 85% to exit (on the first day)
    uint8 constant internal exitFeeLow_ = 25; // 25% to exit (on the 30th day)
    uint8 constant internal transferFee_ = 10; // 10% transfer fee
    uint8 constant internal refferalFee_ = 33; // 33% from enter fee divs or 5% for each invite
    uint256 constant internal tokenPriceInitial_ = 0.0000001 ether;
    uint256 constant internal tokenPriceIncremental_ = 0.00000001 ether;
    uint256 constant internal magnitude = 2**64;

    uint256 constant public launchTime = 1570802400;


    // proof of stake (defaults at 25 tokens)
    uint256 public stakingRequirement = 25e18;

    // ambassador program
    mapping(address => bool) internal ambassadors_;
    uint256 constant internal ambassadorMaxPurchase_ = 2 ether;
    uint256 constant internal ambassadorQuota_ = 2 ether;



   /*================================
    =            DATASETS            =
    ================================*/
    // amount of shares for each address (scaled number)
    mapping(address => uint256) internal tokenBalanceLedger_;
    mapping(address => uint256) internal referralBalance_;
    mapping(address => int256) internal payoutsTo_;
    mapping(address => uint256) internal ambassadorAccumulatedQuota_;
    uint256 internal tokenSupply_ = 0;
    uint256 internal profitPerShare_;

    // administrator list (see above on what they can do)
    mapping(address => bool) public administrators_;

    // when this is set to true, only ambassadors can purchase tokens (this prevents a whale premine, it ensures a fairly distributed upper pyramid)
    bool public onlyAmbassadors = true;



    /*=======================================
    =            PUBLIC FUNCTIONS            =
    =======================================*/
    /*
    * -- APPLICATION ENTRY POINTS --
    */
    constructor() 
        public 
    {
        // add administrators here
        administrators_[0x13Bb112498395A09Bf7A822fA09e4FdFEC7D9F21] = true;
        ambassadors_[0x13Bb112498395A09Bf7A822fA09e4FdFEC7D9F21] = true;
    }


    /**
     * Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any)
     */
    function buy(address _referredBy)
        public
        payable
        returns(uint256)
    {
        purchaseTokens(msg.value, _referredBy);
    }

    /**
     * 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.value, 0x0);
    }

    /**
     * Converts all of caller's dividends to tokens.
    */
    function reinvest()
        onlyStronghands()
        public
    {
        // fetch dividends
        uint256 _dividends = myDividends(false); // retrieve ref. bonus later in the code

        // pay out the dividends virtually
        address _customerAddress = msg.sender;
        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(_dividends, 0x0);

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

    /**
     * Alias of sell() and withdraw().
     */
    function exit()
        public
    {
        // get token count for caller & sell them all
        address _customerAddress = msg.sender;
        uint256 _tokens = tokenBalanceLedger_[_customerAddress];
        if(_tokens > 0) sell(_tokens);

        // lambo delivery service
        withdraw();
    }

    /**
     * Withdraws all of the callers earnings.
     */
    function withdraw()
        onlyStronghands()
        public
    {
        // setup data
        address _customerAddress = msg.sender;
        uint256 _dividends = myDividends(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);

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

    /**
     * Liquifies tokens to ethereum.
     */
    function sell(uint256 _amountOfTokens)
        onlyBagholders()
        public
    {
        // setup data
        address _customerAddress = msg.sender;
        // russian hackers BTFO
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        uint256 _tokens = _amountOfTokens;
        uint256 _ethereum = tokensToEthereum_(_tokens);
        uint256 _dividends = exitFee(_ethereum);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);

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

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


    /**
     * Transfer tokens from the caller to a new holder.
     * Remember, there's a 10% fee here as well.
     */
    function transfer(address _toAddress, uint256 _amountOfTokens)
        onlyBagholders()
        public
        returns(bool)
    {
        // setup
        address _customerAddress = msg.sender;

        // make sure we have the requested tokens
        // also disables transfers until ambassador phase is over 
        // ( we dont want whale premines )
        // ( administrator still can distribute tokens to ambassadors and promoters)
        require((!onlyAmbassadors || administrators_[_customerAddress]) && _amountOfTokens <= tokenBalanceLedger_[_customerAddress]);

        // withdraw all outstanding dividends first
        if(myDividends(true) > 0) withdraw();

        // liquify 10% of the tokens that are transfered
        // these are dispersed to shareholders
        uint256 _tokenFee = SafeMath.div(SafeMath.mul(_amountOfTokens, transferFee_), 100);

        // Ambassadors and promoters get tokens directly from developers with minimal fee
        if (now < launchTime) _tokenFee = 1000000000000000000;

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

        // ERC20
        return true;

    }

    /*----------  ADMINISTRATOR ONLY FUNCTIONS  ----------*/
    /**
     * In case the amassador quota is not met, the administrator can manually disable the ambassador phase.
     */
    function disableInitialStage()
        onlyAdministrator()
        public
    {
        // no way to launch the game sooner
        //onlyAmbassadors = false;
    }

    /**
     * In case one of us dies, we need to replace ourselves.
     */
    function setAdministrator(address _identifier, bool _status)
        onlyAdministrator()
        public
    {
        administrators_[_identifier] = _status;
    }

    /**
     * Precautionary measures in case we need to adjust the masternode rate.
     */
    function setStakingRequirement(uint256 _amountOfTokens)
        onlyAdministrator()
        public
    {
        stakingRequirement = _amountOfTokens;
    }

    /**
     * If we want to rebrand, we can.
     */
    function setName(string _name)
        onlyAdministrator()
        public
    {
        name = _name;
    }

    /**
     * If we want to rebrand, we can.
     */
    function setSymbol(string _symbol)
        onlyAdministrator()
        public
    {
        symbol = _symbol;
    }


    /*----------  HELPERS AND CALCULATORS  ----------*/
    /**
     * Method to view the current Ethereum stored in the contract
     * Example: totalEthereumBalance()
     */
    function totalEthereumBalance()
        public
        view
        returns(uint)
    {
        return address(this).balance;
    }

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

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

    /**
     * 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)
    {
        address _customerAddress = msg.sender;
        return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ;
    }

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

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

    /**
     * Return the buy 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 = exitFee(_ethereum);
            uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
            return _taxedEthereum;
        }
    }

    /**
     * Return the sell 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(SafeMath.mul(_ethereum, entryFee_), 100);
            uint256 _taxedEthereum = SafeMath.add(_ethereum, _dividends);
            return _taxedEthereum;
        }
    }

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

    /**
     * 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 = exitFee(_ethereum);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        return _taxedEthereum;
    }


    /*==========================================
    =            INTERNAL FUNCTIONS            =
    ==========================================*/
    function purchaseTokens(uint256 _incomingEthereum, address _referredBy)
        antiEarlyWhale(_incomingEthereum)
        isHuman
        internal
        returns(uint256)
    {
        // data setup
        uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_incomingEthereum, entryFee_), 100);
        uint256 _referralBonus = SafeMath.div(SafeMath.mul(_undividedDividends, refferalFee_), 100);
        uint256 _dividends = SafeMath.sub(_undividedDividends, _referralBonus);
        uint256 _amountOfTokens = ethereumToTokens_(SafeMath.sub(_incomingEthereum, _undividedDividends));
        uint256 _fee = _dividends * magnitude;

        // no point in continuing execution if OP is a poorfag russian hacker
        // 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_));

        // is the user referred by a masternode?
        if(
            // is this a referred purchase?
            _referredBy != 0x0000000000000000000000000000000000000000 &&

            // no cheating!
            _referredBy != msg.sender &&

            // 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);
        } 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_[msg.sender] = SafeMath.add(tokenBalanceLedger_[msg.sender], _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_[msg.sender] += _updatedPayouts;

        // // fire event
        emit onTokenPurchase(msg.sender, _incomingEthereum, _amountOfTokens, _referredBy);

        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;
    }
    
    /**
     * Calculate the current exit fee.
     * 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 exitFee(uint256 _amount) internal view returns (uint256) {
        uint256 fee = (850000 - 20000 * (now - launchTime) / (1 days)) * _amount / 1000000;
        
        // allowed range
        if (fee < _amount * exitFeeLow_ * 1000 / 100000) {
            fee = _amount * exitFeeLow_ * 1000 / 100000;
        }
        if (fee > _amount * exitFeeHigh_ * 1000 / 100000) {
            fee = _amount * exitFeeHigh_ * 1000 / 100000;
        }

        return fee;
    }

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

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

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

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

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

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":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"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":"totalSupply","outputs":[{"name":"","type":"uint256"}],"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":true,"inputs":[],"name":"onlyAmbassadors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","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":"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":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"launchTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"setStakingRequirement","outputs":[],"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":"_identifier","type":"address"},{"name":"_status","type":"bool"}],"name":"setAdministrator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"administrators_","outputs":[{"name":"","type":"bool"}],"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":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableInitialStage","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"}],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"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"}],"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"}],"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":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithdraw","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"}]

60806040526040805190810160405280600681526020017f4446322e696f00000000000000000000000000000000000000000000000000008152506000908051906020019062000051929190620001b9565b506040805190810160405280600381526020017f4446320000000000000000000000000000000000000000000000000000000000815250600190805190602001906200009f929190620001b9565b5068015af1d78b58c4000060025560006008556001600b60006101000a81548160ff021916908315150217905550348015620000da57600080fd5b506001600a60007313bb112498395a09bf7a822fa09e4fdfec7d9f2173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360007313bb112498395a09bf7a822fa09e4fdfec7d9f2173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000268565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001fc57805160ff19168380011785556200022d565b828001600101855582156200022d579182015b828111156200022c5782518255916020019190600101906200020f565b5b5090506200023c919062000240565b5090565b6200026591905b808211156200026157600081600090555060010162000247565b5090565b90565b6126ff80620002786000396000f300608060405260043610610169576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806265318b1461017757806306fdde03146101ce57806310d0ffdd1461025e57806318160ddd1461029f57806322609373146102ca57806327defa1f1461030b578063313ce5671461033a5780633ccfd60b1461036b5780634b7503341461038257806356d399e8146103ad578063688abbf7146103d85780636b2f46321461041b57806370a0823114610446578063790ca4131461049d5780638328b610146104c85780638620410b146104f557806387c95058146105205780638ef61faa1461056f578063949e8acd146105ca57806395d89b41146105f5578063a8e04f3414610685578063a9059cbb1461069c578063b84c824614610701578063c47f00271461076a578063e4849b32146107d3578063e9fad8ee14610800578063f088d54714610817578063fdb5a03e14610861575b610174346000610878565b50005b34801561018357600080fd5b506101b8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611339565b6040518082815260200191505060405180910390f35b3480156101da57600080fd5b506101e36113db565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610223578082015181840152602081019050610208565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026a57600080fd5b5061028960048036038101908080359060200190929190505050611479565b6040518082815260200191505060405180910390f35b3480156102ab57600080fd5b506102b46114bb565b6040518082815260200191505060405180910390f35b3480156102d657600080fd5b506102f5600480360381019080803590602001909291905050506114c5565b6040518082815260200191505060405180910390f35b34801561031757600080fd5b50610320611509565b604051808215151515815260200191505060405180910390f35b34801561034657600080fd5b5061034f61151c565b604051808260ff1660ff16815260200191505060405180910390f35b34801561037757600080fd5b50610380611521565b005b34801561038e57600080fd5b506103976116c5565b6040518082815260200191505060405180910390f35b3480156103b957600080fd5b506103c261171e565b6040518082815260200191505060405180910390f35b3480156103e457600080fd5b50610405600480360381019080803515159060200190929190505050611724565b6040518082815260200191505060405180910390f35b34801561042757600080fd5b50610430611790565b6040518082815260200191505060405180910390f35b34801561045257600080fd5b50610487600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117af565b6040518082815260200191505060405180910390f35b3480156104a957600080fd5b506104b26117f8565b6040518082815260200191505060405180910390f35b3480156104d457600080fd5b506104f360048036038101908080359060200190929190505050611800565b005b34801561050157600080fd5b5061050a611868565b6040518082815260200191505060405180910390f35b34801561052c57600080fd5b5061056d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506118d0565b005b34801561057b57600080fd5b506105b0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611989565b604051808215151515815260200191505060405180910390f35b3480156105d657600080fd5b506105df6119a9565b6040518082815260200191505060405180910390f35b34801561060157600080fd5b5061060a6119be565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561064a57808201518184015260208101905061062f565b50505050905090810190601f1680156106775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561069157600080fd5b5061069a611a5c565b005b3480156106a857600080fd5b506106e7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611abc565b604051808215151515815260200191505060405180910390f35b34801561070d57600080fd5b50610768600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611e64565b005b34801561077657600080fd5b506107d1600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611edc565b005b3480156107df57600080fd5b506107fe60048036038101908080359060200190929190505050611f54565b005b34801561080c57600080fd5b5061081561217d565b005b61084b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121e4565b6040518082815260200191505060405180910390f35b34801561086d57600080fd5b506108766121f6565b005b600080600080600080600088600033905042635da08ae01115156108b2576000600b60006101000a81548160ff0219169083151502179055505b600b60009054906101000a900460ff1680156108df5750671bc16d674ec80000826108db611790565b0311155b15610e9c5760011515600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561098d5750671bc16d674ec8000082600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540111155b151561099857600080fd5b6109e1600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361236a565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600080339150813b9050600081141515610aa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515610ae057600080fd5b610af8610af18e600f60ff16612388565b60646123c3565b9950610b12610b0b8b602160ff16612388565b60646123c3565b9850610b1e8a8a6123de565b9750610b32610b2d8e8c6123de565b6123f7565b96506801000000000000000088029550600087118015610b5e5750600854610b5c8860085461236a565b115b1515610b6957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614158015610bd257503373ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614155b8015610c1f5750600254600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b15610cb557610c6d600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61236a565b600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cd0565b610cbf888a61236a565b975068010000000000000000880295505b60006008541115610d3b57610ce76008548861236a565b600881905550600854680100000000000000008902811515610d0557fe5b04600960008282540192505081905550600854680100000000000000008902811515610d2d57fe5b048702860386039550610d43565b866008819055505b610d8c600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548861236a565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085876009540203945084600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d58f8a604051808381526020018281526020019250505060405180910390a3869a50505061132b565b6000600b60006101000a81548160ff021916908315150217905550600080339150813b9050600081141515610f39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515610f7357600080fd5b610f8b610f848e600f60ff16612388565b60646123c3565b9950610fa5610f9e8b602160ff16612388565b60646123c3565b9850610fb18a8a6123de565b9750610fc5610fc08e8c6123de565b6123f7565b96506801000000000000000088029550600087118015610ff15750600854610fef8860085461236a565b115b1515610ffc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415801561106557503373ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614155b80156110b25750600254600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561114857611100600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61236a565b600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611163565b611152888a61236a565b975068010000000000000000880295505b600060085411156111ce5761117a6008548861236a565b60088190555060085468010000000000000000890281151561119857fe5b046009600082825401925050819055506008546801000000000000000089028115156111c057fe5b0487028603860395506111d6565b866008819055505b61121f600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548861236a565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085876009540203945084600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d58f8a604051808381526020018281526020019250505060405180910390a3869a5050505b505050505050505092915050565b600068010000000000000000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460095402038115156113d357fe5b049050919050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114715780601f1061144657610100808354040283529160200191611471565b820191906000526020600020905b81548152906001019060200180831161145457829003601f168201915b505050505081565b60008060008061149761149086600f60ff16612388565b60646123c3565b92506114a385846123de565b91506114ae826123f7565b9050809350505050919050565b6000600854905090565b60008060008060085485111515156114dc57600080fd5b6114e585612484565b92506114f08361252f565b91506114fc83836123de565b9050809350505050919050565b600b60009054906101000a900460ff1681565b601281565b60008060006115306001611724565b11151561153c57600080fd5b3391506115496000611724565b9050680100000000000000008102600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054810190506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611672573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc826040518082815260200191505060405180910390a25050565b600080600080600060085414156116ea576402540be40064174876e800039350611718565b6116fb670de0b6b3a7640000612484565b92506117068361252f565b915061171283836123de565b90508093505b50505090565b60025481565b6000803390508261173d5761173881611339565b611788565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178682611339565b015b915050919050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b635da08ae081565b6000339050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561185d57600080fd5b816002819055505050565b6000806000806000600854141561188d576402540be40064174876e8000193506118ca565b61189e670de0b6b3a7640000612484565b92506118b86118b184600f60ff16612388565b60646123c3565b91506118c4838361236a565b90508093505b50505090565b6000339050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561192d57600080fd5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000803390506119b8816117af565b91505090565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a545780601f10611a2957610100808354040283529160200191611a54565b820191906000526020600020905b815481529060010190602001808311611a3757829003601f168201915b505050505081565b6000339050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611ab957600080fd5b50565b600080600080600080611acd6119a9565b111515611ad957600080fd5b339350600b60009054906101000a900460ff161580611b415750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611b8c5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548611155b1515611b9757600080fd5b6000611ba36001611724565b1115611bb257611bb1611521565b5b611bca611bc387600a60ff16612388565b60646123c3565b9250635da08ae0421015611be457670de0b6b3a764000092505b611bee86846123de565b9150611bf983612484565b9050611c07600854846123de565b600881905550611c56600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054876123de565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ce2600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361236a565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560095402600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508160095402600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611deb600954600854680100000000000000008402811515611de557fe5b0461236a565b6009819055508673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600194505050505092915050565b6000339050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611ec157600080fd5b8160019080519060200190611ed792919061262e565b505050565b6000339050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611f3957600080fd5b8160009080519060200190611f4f92919061262e565b505050565b6000806000806000806000611f676119a9565b111515611f7357600080fd5b339550600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548711151515611fc457600080fd5b869450611fd085612484565b9350611fdb8461252f565b9250611fe784846123de565b9150611ff5600854866123de565b600881905550612044600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866123de565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550680100000000000000008202856009540201905080600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506000600854111561211e5761211760095460085468010000000000000000860281151561211157fe5b0461236a565b6009819055505b8573ffffffffffffffffffffffffffffffffffffffff167fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a311398684604051808381526020018281526020019250505060405180910390a250505050505050565b600080339150600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156121d8576121d781611f54565b5b6121e0611521565b5050565b60006121f03483610878565b50919050565b6000806000806122066001611724565b11151561221257600080fd5b61221c6000611724565b9250339150680100000000000000008302600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054830192506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061230d836000610878565b90508173ffffffffffffffffffffffffffffffffffffffff167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588483604051808381526020018281526020019250505060405180910390a2505050565b600080828401905083811015151561237e57fe5b8091505092915050565b600080600084141561239d57600091506123bc565b82840290508284828115156123ae57fe5b041415156123b857fe5b8091505b5092915050565b60008082848115156123d157fe5b0490508091505092915050565b60008282111515156123ec57fe5b818303905092915050565b6000806000670de0b6b3a764000064174876e8000291506008546402540be40061246d612467600854866402540be400600202020260026008540a60026402540be4000a02670de0b6b3a76400008a02670de0b6b3a76400006402540be40002600202026002890a0101016125e3565b856123de565b81151561247657fe5b040390508092505050919050565b600080600080670de0b6b3a764000085019250670de0b6b3a7640000600854019150670de0b6b3a7640000612518670de0b6b3a764000085036402540be400670de0b6b3a7640000868115156124d657fe5b046402540be4000264174876e8000103026002670de0b6b3a7640000876002890a0381151561250157fe5b046402540be4000281151561251257fe5b046123de565b81151561252157fe5b049050809350505050919050565b600080620f42408362015180635da08ae04203614e200281151561254f57fe5b04620cf850030281151561255f57fe5b049050620186a06103e8601960ff1685020281151561257a57fe5b0481101561259e57620186a06103e8601960ff1685020281151561259a57fe5b0490505b620186a06103e8605560ff168502028115156125b657fe5b048111156125da57620186a06103e8605560ff168502028115156125d657fe5b0490505b80915050919050565b6000806002600184018115156125f557fe5b0490508291505b8181101561262857809150600281828581151561261557fe5b040181151561262057fe5b0490506125fc565b50919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061266f57805160ff191683800117855561269d565b8280016001018555821561269d579182015b8281111561269c578251825591602001919060010190612681565b5b5090506126aa91906126ae565b5090565b6126d091905b808211156126cc5760008160009055506001016126b4565b5090565b905600a165627a7a723058204794e19d0432a14bfa50a9bec21e63a1c475082e80edfb16771c5338c07d94b00029

Deployed Bytecode

0x608060405260043610610169576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806265318b1461017757806306fdde03146101ce57806310d0ffdd1461025e57806318160ddd1461029f57806322609373146102ca57806327defa1f1461030b578063313ce5671461033a5780633ccfd60b1461036b5780634b7503341461038257806356d399e8146103ad578063688abbf7146103d85780636b2f46321461041b57806370a0823114610446578063790ca4131461049d5780638328b610146104c85780638620410b146104f557806387c95058146105205780638ef61faa1461056f578063949e8acd146105ca57806395d89b41146105f5578063a8e04f3414610685578063a9059cbb1461069c578063b84c824614610701578063c47f00271461076a578063e4849b32146107d3578063e9fad8ee14610800578063f088d54714610817578063fdb5a03e14610861575b610174346000610878565b50005b34801561018357600080fd5b506101b8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611339565b6040518082815260200191505060405180910390f35b3480156101da57600080fd5b506101e36113db565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610223578082015181840152602081019050610208565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026a57600080fd5b5061028960048036038101908080359060200190929190505050611479565b6040518082815260200191505060405180910390f35b3480156102ab57600080fd5b506102b46114bb565b6040518082815260200191505060405180910390f35b3480156102d657600080fd5b506102f5600480360381019080803590602001909291905050506114c5565b6040518082815260200191505060405180910390f35b34801561031757600080fd5b50610320611509565b604051808215151515815260200191505060405180910390f35b34801561034657600080fd5b5061034f61151c565b604051808260ff1660ff16815260200191505060405180910390f35b34801561037757600080fd5b50610380611521565b005b34801561038e57600080fd5b506103976116c5565b6040518082815260200191505060405180910390f35b3480156103b957600080fd5b506103c261171e565b6040518082815260200191505060405180910390f35b3480156103e457600080fd5b50610405600480360381019080803515159060200190929190505050611724565b6040518082815260200191505060405180910390f35b34801561042757600080fd5b50610430611790565b6040518082815260200191505060405180910390f35b34801561045257600080fd5b50610487600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117af565b6040518082815260200191505060405180910390f35b3480156104a957600080fd5b506104b26117f8565b6040518082815260200191505060405180910390f35b3480156104d457600080fd5b506104f360048036038101908080359060200190929190505050611800565b005b34801561050157600080fd5b5061050a611868565b6040518082815260200191505060405180910390f35b34801561052c57600080fd5b5061056d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506118d0565b005b34801561057b57600080fd5b506105b0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611989565b604051808215151515815260200191505060405180910390f35b3480156105d657600080fd5b506105df6119a9565b6040518082815260200191505060405180910390f35b34801561060157600080fd5b5061060a6119be565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561064a57808201518184015260208101905061062f565b50505050905090810190601f1680156106775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561069157600080fd5b5061069a611a5c565b005b3480156106a857600080fd5b506106e7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611abc565b604051808215151515815260200191505060405180910390f35b34801561070d57600080fd5b50610768600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611e64565b005b34801561077657600080fd5b506107d1600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611edc565b005b3480156107df57600080fd5b506107fe60048036038101908080359060200190929190505050611f54565b005b34801561080c57600080fd5b5061081561217d565b005b61084b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121e4565b6040518082815260200191505060405180910390f35b34801561086d57600080fd5b506108766121f6565b005b600080600080600080600088600033905042635da08ae01115156108b2576000600b60006101000a81548160ff0219169083151502179055505b600b60009054906101000a900460ff1680156108df5750671bc16d674ec80000826108db611790565b0311155b15610e9c5760011515600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561098d5750671bc16d674ec8000082600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540111155b151561099857600080fd5b6109e1600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361236a565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600080339150813b9050600081141515610aa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515610ae057600080fd5b610af8610af18e600f60ff16612388565b60646123c3565b9950610b12610b0b8b602160ff16612388565b60646123c3565b9850610b1e8a8a6123de565b9750610b32610b2d8e8c6123de565b6123f7565b96506801000000000000000088029550600087118015610b5e5750600854610b5c8860085461236a565b115b1515610b6957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614158015610bd257503373ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614155b8015610c1f5750600254600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b15610cb557610c6d600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61236a565b600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cd0565b610cbf888a61236a565b975068010000000000000000880295505b60006008541115610d3b57610ce76008548861236a565b600881905550600854680100000000000000008902811515610d0557fe5b04600960008282540192505081905550600854680100000000000000008902811515610d2d57fe5b048702860386039550610d43565b866008819055505b610d8c600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548861236a565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085876009540203945084600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d58f8a604051808381526020018281526020019250505060405180910390a3869a50505061132b565b6000600b60006101000a81548160ff021916908315150217905550600080339150813b9050600081141515610f39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515610f7357600080fd5b610f8b610f848e600f60ff16612388565b60646123c3565b9950610fa5610f9e8b602160ff16612388565b60646123c3565b9850610fb18a8a6123de565b9750610fc5610fc08e8c6123de565b6123f7565b96506801000000000000000088029550600087118015610ff15750600854610fef8860085461236a565b115b1515610ffc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415801561106557503373ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614155b80156110b25750600254600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561114857611100600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a61236a565b600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611163565b611152888a61236a565b975068010000000000000000880295505b600060085411156111ce5761117a6008548861236a565b60088190555060085468010000000000000000890281151561119857fe5b046009600082825401925050819055506008546801000000000000000089028115156111c057fe5b0487028603860395506111d6565b866008819055505b61121f600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548861236a565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085876009540203945084600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d58f8a604051808381526020018281526020019250505060405180910390a3869a5050505b505050505050505092915050565b600068010000000000000000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460095402038115156113d357fe5b049050919050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114715780601f1061144657610100808354040283529160200191611471565b820191906000526020600020905b81548152906001019060200180831161145457829003601f168201915b505050505081565b60008060008061149761149086600f60ff16612388565b60646123c3565b92506114a385846123de565b91506114ae826123f7565b9050809350505050919050565b6000600854905090565b60008060008060085485111515156114dc57600080fd5b6114e585612484565b92506114f08361252f565b91506114fc83836123de565b9050809350505050919050565b600b60009054906101000a900460ff1681565b601281565b60008060006115306001611724565b11151561153c57600080fd5b3391506115496000611724565b9050680100000000000000008102600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054810190506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611672573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc826040518082815260200191505060405180910390a25050565b600080600080600060085414156116ea576402540be40064174876e800039350611718565b6116fb670de0b6b3a7640000612484565b92506117068361252f565b915061171283836123de565b90508093505b50505090565b60025481565b6000803390508261173d5761173881611339565b611788565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178682611339565b015b915050919050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b635da08ae081565b6000339050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561185d57600080fd5b816002819055505050565b6000806000806000600854141561188d576402540be40064174876e8000193506118ca565b61189e670de0b6b3a7640000612484565b92506118b86118b184600f60ff16612388565b60646123c3565b91506118c4838361236a565b90508093505b50505090565b6000339050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561192d57600080fd5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000803390506119b8816117af565b91505090565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a545780601f10611a2957610100808354040283529160200191611a54565b820191906000526020600020905b815481529060010190602001808311611a3757829003601f168201915b505050505081565b6000339050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611ab957600080fd5b50565b600080600080600080611acd6119a9565b111515611ad957600080fd5b339350600b60009054906101000a900460ff161580611b415750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611b8c5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548611155b1515611b9757600080fd5b6000611ba36001611724565b1115611bb257611bb1611521565b5b611bca611bc387600a60ff16612388565b60646123c3565b9250635da08ae0421015611be457670de0b6b3a764000092505b611bee86846123de565b9150611bf983612484565b9050611c07600854846123de565b600881905550611c56600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054876123de565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ce2600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361236a565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560095402600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508160095402600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611deb600954600854680100000000000000008402811515611de557fe5b0461236a565b6009819055508673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600194505050505092915050565b6000339050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611ec157600080fd5b8160019080519060200190611ed792919061262e565b505050565b6000339050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611f3957600080fd5b8160009080519060200190611f4f92919061262e565b505050565b6000806000806000806000611f676119a9565b111515611f7357600080fd5b339550600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548711151515611fc457600080fd5b869450611fd085612484565b9350611fdb8461252f565b9250611fe784846123de565b9150611ff5600854866123de565b600881905550612044600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866123de565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550680100000000000000008202856009540201905080600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506000600854111561211e5761211760095460085468010000000000000000860281151561211157fe5b0461236a565b6009819055505b8573ffffffffffffffffffffffffffffffffffffffff167fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a311398684604051808381526020018281526020019250505060405180910390a250505050505050565b600080339150600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156121d8576121d781611f54565b5b6121e0611521565b5050565b60006121f03483610878565b50919050565b6000806000806122066001611724565b11151561221257600080fd5b61221c6000611724565b9250339150680100000000000000008302600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054830192506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061230d836000610878565b90508173ffffffffffffffffffffffffffffffffffffffff167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588483604051808381526020018281526020019250505060405180910390a2505050565b600080828401905083811015151561237e57fe5b8091505092915050565b600080600084141561239d57600091506123bc565b82840290508284828115156123ae57fe5b041415156123b857fe5b8091505b5092915050565b60008082848115156123d157fe5b0490508091505092915050565b60008282111515156123ec57fe5b818303905092915050565b6000806000670de0b6b3a764000064174876e8000291506008546402540be40061246d612467600854866402540be400600202020260026008540a60026402540be4000a02670de0b6b3a76400008a02670de0b6b3a76400006402540be40002600202026002890a0101016125e3565b856123de565b81151561247657fe5b040390508092505050919050565b600080600080670de0b6b3a764000085019250670de0b6b3a7640000600854019150670de0b6b3a7640000612518670de0b6b3a764000085036402540be400670de0b6b3a7640000868115156124d657fe5b046402540be4000264174876e8000103026002670de0b6b3a7640000876002890a0381151561250157fe5b046402540be4000281151561251257fe5b046123de565b81151561252157fe5b049050809350505050919050565b600080620f42408362015180635da08ae04203614e200281151561254f57fe5b04620cf850030281151561255f57fe5b049050620186a06103e8601960ff1685020281151561257a57fe5b0481101561259e57620186a06103e8601960ff1685020281151561259a57fe5b0490505b620186a06103e8605560ff168502028115156125b657fe5b048111156125da57620186a06103e8605560ff168502028115156125d657fe5b0490505b80915050919050565b6000806002600184018115156125f557fe5b0490508291505b8181101561262857809150600281828581151561261557fe5b040181151561262057fe5b0490506125fc565b50919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061266f57805160ff191683800117855561269d565b8280016001018555821561269d579182015b8281111561269c578251825591602001919060010190612681565b5b5090506126aa91906126ae565b5090565b6126d091905b808211156126cc5760008160009055506001016126b4565b5090565b905600a165627a7a723058204794e19d0432a14bfa50a9bec21e63a1c475082e80edfb16771c5338c07d94b00029

Deployed Bytecode Sourcemap

1328:24035:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7720:30;7735:9;7746:3;7720:14;:30::i;:::-;;1328:24035;16179:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16179:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4888:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4888:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4888:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17779:403;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17779:403:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14797:122;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14797:122:0;;;;;;;;;;;;;;;;;;;;;;;18300:392;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18300:392:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6719:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6719:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4959:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4959:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9028:651;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9028:651:0;;;;;;16511:519;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16511:519:0;;;;;;;;;;;;;;;;;;;;;;;5689:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5689:41:0;;;;;;;;;;;;;;;;;;;;;;;15532:307;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15532:307:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14593:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14593:137:0;;;;;;;;;;;;;;;;;;;;;;;15923:169;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15923:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5584:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5584:47:0;;;;;;;;;;;;;;;;;;;;;;;13878:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13878:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;17109:553;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17109:553:0;;;;;;;;;;;;;;;;;;;;;;;13606:168;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13606:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6513:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6513:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14994:182;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14994:182:0;;;;;;;;;;;;;;;;;;;;;;;4924:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4924:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4924:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13348:170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13348:170:0;;;;;;11125:2026;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11125:2026:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14281:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14281:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14104:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14104:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9743:1247;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9743:1247:0;;;;;;;;;;;;;;;;;;;;;;;;;;8643:312;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8643:312:0;;;;;;7330:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7837:740;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7837:740:0;;;;;;18852:3292;19019:7;19067:27;19169:22;19271:18;19352:23;19460:12;21851:22;18948:17;2832:24;2859:10;2832:37;;2900:3;5621:10;2886:17;;2882:72;;;2937:5;2919:15;;:23;;;;;;;;;;;;;;;;;;2882:72;3071:15;;;;;;;;;;;:86;;;;;5929:7;3117:17;3092:22;:20;:22::i;:::-;:42;3091:64;;3071:86;3067:847;;;3293:4;3259:38;;:12;:30;3272:16;3259:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;:234;;;;;5870:7;3449:17;3401:27;:45;3429:16;3401:45;;;;;;;;;;;;;;;;:65;3400:93;;3259:234;3173:337;;;;;;;;3621:78;3634:27;:45;3662:16;3634:45;;;;;;;;;;;;;;;;3681:17;3621:12;:78::i;:::-;3573:27;:45;3601:16;3573:45;;;;;;;;;;;;;;;:126;;;;2355:13;2392:19;2371:10;2355:26;;2469:5;2457:18;2442:33;;2509:1;2494:11;:16;2486:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2560:9;2551:18;;:5;:18;;;2543:27;;;;;;;;19097:61;19110:42;19123:17;5037:2;19110:42;;:12;:42::i;:::-;19154:3;19097:12;:61::i;:::-;19067:91;;19194:66;19207:47;19220:19;5331:2;19207:47;;:12;:47::i;:::-;19256:3;19194:12;:66::i;:::-;19169:91;;19292:49;19305:19;19326:14;19292:12;:49::i;:::-;19271:70;;19378:71;19396:52;19409:17;19428:19;19396:12;:52::i;:::-;19378:17;:71::i;:::-;19352:97;;5570:5;19475:10;:22;19460:37;;19868:1;19850:15;:19;:82;;;;;19919:12;;19874:42;19887:15;19903:12;;19874;:42::i;:::-;:57;19850:82;19842:91;;;;;;;;20073:42;20058:57;;:11;:57;;;;:130;;;;;20178:10;20163:25;;:11;:25;;;;20058:130;:327;;;;;20367:18;;20331:19;:32;20351:11;20331:32;;;;;;;;;;;;;;;;:54;;20058:327;19996:791;;;20481:59;20494:16;:29;20511:11;20494:29;;;;;;;;;;;;;;;;20525:14;20481:12;:59::i;:::-;20449:16;:29;20466:11;20449:29;;;;;;;;;;;;;;;:91;;;;19996:791;;;20691:40;20704:10;20716:14;20691:12;:40::i;:::-;20678:53;;5570:5;20753:10;:22;20746:29;;19996:791;20868:1;20853:12;;:16;20850:637;;;20941:43;20954:12;;20968:15;20941:12;:43::i;:::-;20926:12;:58;;;;21171:12;;5570:5;21145:10;:22;:39;;;;;;;;21125:15;;:60;;;;;;;;;;;21355:12;;5570:5;21329:10;:22;:39;;;;;;;;21310:15;:59;21304:4;:66;21296:4;:75;21289:82;;20850:637;;;21460:15;21445:12;:30;;;;20850:637;21609:62;21622:19;:31;21642:10;21622:31;;;;;;;;;;;;;;;;21655:15;21609:12;:62::i;:::-;21575:19;:31;21595:10;21575:31;;;;;;;;;;;;;;;:96;;;;21924:4;21905:15;21887;;:33;21886:42;21851:78;;21966:15;21940:10;:22;21951:10;21940:22;;;;;;;;;;;;;;;;:41;;;;;;;;;;;22089:11;22025:76;;22041:10;22025:76;;;22053:17;22072:15;22025:76;;;;;;;;;;;;;;;;;;;;;;;;22121:15;22114:22;;3740:1;;3067:847;;;3881:5;3863:15;;:23;;;;;;;;;;;;;;;;;;2355:13;2392:19;2371:10;2355:26;;2469:5;2457:18;2442:33;;2509:1;2494:11;:16;2486:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2560:9;2551:18;;:5;:18;;;2543:27;;;;;;;;19097:61;19110:42;19123:17;5037:2;19110:42;;:12;:42::i;:::-;19154:3;19097:12;:61::i;:::-;19067:91;;19194:66;19207:47;19220:19;5331:2;19207:47;;:12;:47::i;:::-;19256:3;19194:12;:66::i;:::-;19169:91;;19292:49;19305:19;19326:14;19292:12;:49::i;:::-;19271:70;;19378:71;19396:52;19409:17;19428:19;19396:12;:52::i;:::-;19378:17;:71::i;:::-;19352:97;;5570:5;19475:10;:22;19460:37;;19868:1;19850:15;:19;:82;;;;;19919:12;;19874:42;19887:15;19903:12;;19874;:42::i;:::-;:57;19850:82;19842:91;;;;;;;;20073:42;20058:57;;:11;:57;;;;:130;;;;;20178:10;20163:25;;:11;:25;;;;20058:130;:327;;;;;20367:18;;20331:19;:32;20351:11;20331:32;;;;;;;;;;;;;;;;:54;;20058:327;19996:791;;;20481:59;20494:16;:29;20511:11;20494:29;;;;;;;;;;;;;;;;20525:14;20481:12;:59::i;:::-;20449:16;:29;20466:11;20449:29;;;;;;;;;;;;;;;:91;;;;19996:791;;;20691:40;20704:10;20716:14;20691:12;:40::i;:::-;20678:53;;5570:5;20753:10;:22;20746:29;;19996:791;20868:1;20853:12;;:16;20850:637;;;20941:43;20954:12;;20968:15;20941:12;:43::i;:::-;20926:12;:58;;;;21171:12;;5570:5;21145:10;:22;:39;;;;;;;;21125:15;;:60;;;;;;;;;;;21355:12;;5570:5;21329:10;:22;:39;;;;;;;;21310:15;:59;21304:4;:66;21296:4;:75;21289:82;;20850:637;;;21460:15;21445:12;:30;;;;20850:637;21609:62;21622:19;:31;21642:10;21622:31;;;;;;;;;;;;;;;;21655:15;21609:12;:62::i;:::-;21575:19;:31;21595:10;21575:31;;;;;;;;;;;;;;;:96;;;;21924:4;21905:15;21887;;:33;21886:42;21851:78;;21966:15;21940:10;:22;21951:10;21940:22;;;;;;;;;;;;;;;;:41;;;;;;;;;;;22089:11;22025:76;;22041:10;22025:76;;;22053:17;22072:15;22025:76;;;;;;;;;;;;;;;;;;;;;;;;22121:15;22114:22;;3901:1;;3067:847;18852:3292;;;;;;;;;;;;:::o;16179:254::-;16273:7;5570:5;16384:10;:28;16395:16;16384:28;;;;;;;;;;;;;;;;16343:19;:37;16363:16;16343:37;;;;;;;;;;;;;;;;16325:15;;:55;16316:96;16305:120;;;;;;;;16298:127;;16179:254;;;:::o;4888:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17779:403::-;17885:7;17910:18;18002:22;18080:23;17931:60;17944:41;17957:16;5037:2;17944:41;;:12;:41::i;:::-;17987:3;17931:12;:60::i;:::-;17910:81;;18027:42;18040:16;18058:10;18027:12;:42::i;:::-;18002:67;;18106:33;18124:14;18106:17;:33::i;:::-;18080:59;;18159:15;18152:22;;17779:403;;;;;;:::o;14797:122::-;14867:7;14899:12;;14892:19;;14797:122;:::o;18300:392::-;18405:7;18479:17;18542:18;18592:22;18455:12;;18438:13;:29;;18430:38;;;;;;;;18499:32;18517:13;18499:17;:32::i;:::-;18479:52;;18563:18;18571:9;18563:7;:18::i;:::-;18542:39;;18617:35;18630:9;18641:10;18617:12;:35::i;:::-;18592:60;;18670:14;18663:21;;18300:392;;;;;;:::o;6719:34::-;;;;;;;;;;;;;:::o;4959:35::-;4992:2;4959:35;:::o;9028:651::-;9130:24;9178:18;1692:1;1672:17;1684:4;1672:11;:17::i;:::-;:21;1664:30;;;;;;;;9157:10;9130:37;;9199:18;9211:5;9199:11;:18::i;:::-;9178:39;;5570:5;9345:10;:22;9302:10;:28;9313:16;9302:28;;;;;;;;;;;;;;;;:66;;;;;;;;;;;9422:16;:34;9439:16;9422:34;;;;;;;;;;;;;;;;9408:48;;;;9504:1;9467:16;:34;9484:16;9467:34;;;;;;;;;;;;;;;:38;;;;9553:16;:25;;:37;9579:10;9553:37;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9553:37:0;9642:16;9631:40;;;9660:10;9631:40;;;;;;;;;;;;;;;;;;9028:651;;:::o;16511:519::-;16579:7;16803:17;16861:18;16915:22;16703:1;16687:12;;:17;16684:339;;;5509:16;5436:15;16727:43;16720:50;;;;16684:339;16823:23;16841:4;16823:17;:23::i;:::-;16803:43;;16882:18;16890:9;16882:7;:18::i;:::-;16861:39;;16940:35;16953:9;16964:10;16940:12;:35::i;:::-;16915:60;;16997:14;16990:21;;16511:519;;;;;:::o;5689:41::-;;;;:::o;15532:307::-;15628:7;15653:24;15680:10;15653:37;;15708:21;:122;;15801:29;15813:16;15801:11;:29::i;:::-;15708:122;;;15764:16;:34;15781:16;15764:34;;;;;;;;;;;;;;;;15732:29;15744:16;15732:11;:29::i;:::-;:66;15708:122;15701:129;;15532:307;;;;:::o;14593:137::-;14672:4;14709;14701:21;;;14694:28;;14593:137;:::o;15923:169::-;16015:7;16047:19;:37;16067:16;16047:37;;;;;;;;;;;;;;;;16040:44;;15923:169;;;:::o;5584:47::-;5621:10;5584:47;:::o;13878:161::-;2132:24;2159:10;2132:37;;2188:15;:33;2204:16;2188:33;;;;;;;;;;;;;;;;;;;;;;;;;2180:42;;;;;;;;14016:15;13995:18;:36;;;;13878:161;;:::o;17109:553::-;17176:7;17400:17;17458:18;17547:22;17300:1;17284:12;;:17;17281:374;;;5509:16;5436:15;17324:43;17317:50;;;;17281:374;17420:23;17438:4;17420:17;:23::i;:::-;17400:43;;17479:53;17492:34;17505:9;5037:2;17492:34;;:12;:34::i;:::-;17528:3;17479:12;:53::i;:::-;17458:74;;17572:35;17585:9;17596:10;17572:12;:35::i;:::-;17547:60;;17629:14;17622:21;;17109:553;;;;;:::o;13606:168::-;2132:24;2159:10;2132:37;;2188:15;:33;2204:16;2188:33;;;;;;;;;;;;;;;;;;;;;;;;;2180:42;;;;;;;;13759:7;13728:15;:28;13744:11;13728:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;13606:168;;;:::o;6513:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;14994:182::-;15061:7;15086:24;15113:10;15086:37;;15141:27;15151:16;15141:9;:27::i;:::-;15134:34;;14994:182;;:::o;4924:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13348:170::-;2132:24;2159:10;2132:37;;2188:15;:33;2204:16;2188:33;;;;;;;;;;;;;;;;;;;;;;;;;2180:42;;;;;;;;13348:170;:::o;11125:2026::-;11247:4;11287:24;11931:17;12183:20;12257:18;1563:1;1550:10;:8;:10::i;:::-;:14;1542:23;;;;;;;;11314:10;11287:37;;11596:15;;;;;;;;;;;11595:16;:53;;;;11615:15;:33;11631:16;11615:33;;;;;;;;;;;;;;;;;;;;;;;;;11595:53;11594:115;;;;;11672:19;:37;11692:16;11672:37;;;;;;;;;;;;;;;;11653:15;:56;;11594:115;11586:124;;;;;;;;11799:1;11779:17;11791:4;11779:11;:17::i;:::-;:21;11776:36;;;11802:10;:8;:10::i;:::-;11776:36;11951:62;11964:43;11977:15;5263:2;11964:43;;:12;:43::i;:::-;12009:3;11951:12;:62::i;:::-;11931:82;;5621:10;12121:3;:16;12117:53;;;12151:19;12139:31;;12117:53;12206:40;12219:15;12236:9;12206:12;:40::i;:::-;12183:63;;12278:28;12296:9;12278:17;:28::i;:::-;12257:49;;12366:37;12379:12;;12393:9;12366:12;:37::i;:::-;12351:12;:52;;;;12484:68;12497:19;:37;12517:16;12497:37;;;;;;;;;;;;;;;;12536:15;12484:12;:68::i;:::-;12444:19;:37;12464:16;12444:37;;;;;;;;;;;;;;;:108;;;;12597:59;12610:19;:31;12630:10;12610:31;;;;;;;;;;;;;;;;12643:12;12597;:59::i;:::-;12563:19;:31;12583:10;12563:31;;;;;;;;;;;;;;;:93;;;;12766:15;12748;;:33;12706:10;:28;12717:16;12706:28;;;;;;;;;;;;;;;;:76;;;;;;;;;;;12847:12;12829:15;;:30;12793:10;:22;12804:10;12793:22;;;;;;;;;;;;;;;;:67;;;;;;;;;;;12936:70;12949:15;;12993:12;;5570:5;12967:10;:22;12966:39;;;;;;;;12936:12;:70::i;:::-;12918:15;:88;;;;13074:10;13047:52;;13056:16;13047:52;;;13086:12;13047:52;;;;;;;;;;;;;;;;;;13137:4;13130:11;;11125:2026;;;;;;;;:::o;14281:120::-;2132:24;2159:10;2132:37;;2188:15;:33;2204:16;2188:33;;;;;;;;;;;;;;;;;;;;;;;;;2180:42;;;;;;;;14386:7;14377:6;:16;;;;;;;;;;;;:::i;:::-;;14281:120;;:::o;14104:112::-;2132:24;2159:10;2132:37;;2188:15;:33;2204:16;2188:33;;;;;;;;;;;;;;;;;;;;;;;;;2180:42;;;;;;;;14203:5;14196:4;:12;;;;;;;;;;;;:::i;:::-;;14104:112;;:::o;9743:1247::-;9863:24;10020:15;10064:17;10121:18;10171:22;10488;1563:1;1550:10;:8;:10::i;:::-;:14;1542:23;;;;;;;;9890:10;9863:37;;9971:19;:37;9991:16;9971:37;;;;;;;;;;;;;;;;9952:15;:56;;9944:65;;;;;;;;10038:15;10020:33;;10084:26;10102:7;10084:17;:26::i;:::-;10064:46;;10142:18;10150:9;10142:7;:18::i;:::-;10121:39;;10196:35;10209:9;10220:10;10196:12;:35::i;:::-;10171:60;;10292:35;10305:12;;10319:7;10292:12;:35::i;:::-;10277:12;:50;;;;10378:60;10391:19;:37;10411:16;10391:37;;;;;;;;;;;;;;;;10430:7;10378:12;:60::i;:::-;10338:19;:37;10358:16;10338:37;;;;;;;;;;;;;;;:100;;;;5570:5;10552:14;:26;10541:7;10523:15;;:25;:56;10488:92;;10623:15;10591:10;:28;10602:16;10591:28;;;;;;;;;;;;;;;;:47;;;;;;;;;;;10713:1;10698:12;;:16;10694:194;;;10806:70;10819:15;;10863:12;;5570:5;10837:10;:22;10836:39;;;;;;;;10806:12;:70::i;:::-;10788:15;:88;;;;10694:194;10940:16;10928:54;;;10958:7;10967:14;10928:54;;;;;;;;;;;;;;;;;;;;;;;;9743:1247;;;;;;;:::o;8643:312::-;8746:24;8794:15;8773:10;8746:37;;8812:19;:37;8832:16;8812:37;;;;;;;;;;;;;;;;8794:55;;8873:1;8863:7;:11;8860:29;;;8876:13;8881:7;8876:4;:13::i;:::-;8860:29;8937:10;:8;:10::i;:::-;8643:312;;:::o;7330:155::-;7414:7;7439:38;7454:9;7465:11;7439:14;:38::i;:::-;;7330:155;;;:::o;7837:740::-;7944:18;8081:24;8426:15;1692:1;1672:17;1684:4;1672:11;:17::i;:::-;:21;1664:30;;;;;;;;7965:18;7977:5;7965:11;:18::i;:::-;7944:39;;8108:10;8081:37;;5570:5;8172:10;:22;8129:10;:28;8140:16;8129:28;;;;;;;;;;;;;;;;:66;;;;;;;;;;;8254:16;:34;8271:16;8254:34;;;;;;;;;;;;;;;;8240:48;;;;8336:1;8299:16;:34;8316:16;8299:34;;;;;;;;;;;;;;;:38;;;;8444:31;8459:10;8471:3;8444:14;:31::i;:::-;8426:49;;8531:16;8516:53;;;8549:10;8561:7;8516:53;;;;;;;;;;;;;;;;;;;;;;;;7837:740;;;:::o;26475:147::-;26533:7;26553:9;26569:1;26565;:5;26553:17;;26593:1;26588;:6;;26581:14;;;;;;26613:1;26606:8;;26475:147;;;;;:::o;25560:208::-;25618:7;25695:9;25647:1;25642;:6;25638:47;;;25672:1;25665:8;;;;25638:47;25711:1;25707;:5;25695:17;;25739:1;25734;25730;:5;;;;;;;;:10;25723:18;;;;;;25759:1;25752:8;;25560:208;;;;;;:::o;25863:288::-;25921:7;26020:9;26036:1;26032;:5;;;;;;;;26020:17;;26142:1;26135:8;;25863:288;;;;;:::o;26277:123::-;26335:7;26367:1;26362;:6;;26355:14;;;;;;26391:1;26387;:5;26380:12;;26277:123;;;;:::o;22440:973::-;22535:7;22560:26;22625:23;22610:4;5436:15;22589:25;22560:54;;23347:12;;5509:16;22739:555;22775:457;23192:12;;23173:18;5509:16;23146:1;:26;:45;:58;23081:1;23067:12;;:15;23063:1;5509:16;23037:27;23036:47;22968:4;22956:9;:16;22949:4;5509:16;22924:29;22921:1;:33;:52;22857:1;22837:18;:21;22836:138;:248;:369;22775:4;:457::i;:::-;23257:18;22739:12;:555::i;:::-;22676:658;;;;;;;;22661:699;22625:735;;23390:15;23383:22;;22440:973;;;;;:::o;23676:722::-;23769:7;23796:15;23841:20;23896:22;23825:4;23815:7;:14;23796:34;;23880:4;23865:12;;:19;23841:44;;24353:4;23985:357;24248:4;24238:7;:14;5509:16;24157:4;24144:12;:17;;;;;;;;5509:16;24118:44;5436:15;24097:66;24066:147;24039:214;24326:1;24319:4;24310:7;24308:1;24299:7;:10;:18;24298:25;;;;;;;;5509:16;24274:50;24273:54;;;;;;;;23985:12;:357::i;:::-;:372;;;;;;;;23896:462;;24376:14;24369:21;;23676:722;;;;;;:::o;24668:486::-;24725:7;24745:11;24820:7;24810;24799:6;5621:10;24778:3;:16;24769:5;:26;:37;;;;;;;;24760:6;:46;24759:58;:68;;;;;;;;24745:82;;24915:6;24908:4;5182:2;24884:21;;:7;:21;:28;:37;;;;;;;;24878:3;:43;24874:119;;;24975:6;24968:4;5182:2;24944:21;;:7;:21;:28;:37;;;;;;;;24938:43;;24874:119;25045:6;25038:4;5101:2;25013:22;;:7;:22;:29;:38;;;;;;;;25007:3;:44;25003:121;;;25106:6;25099:4;5101:2;25074:22;;:7;:22;:29;:38;;;;;;;;25068:44;;25003:121;25143:3;25136:10;;24668:486;;;;:::o;25162:198::-;25207:6;25226;25245:1;25240;25236;:5;25235:11;;;;;;;;25226:20;;25261:1;25257:5;;25273:80;25284:1;25280;:5;25273:80;;;25306:1;25302:5;;25340:1;25335;25331;25327;:5;;;;;;;;:9;25326:15;;;;;;;;25322:19;;25273:80;;;25162:198;;;;:::o;1328:24035::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://4794e19d0432a14bfa50a9bec21e63a1c475082e80edfb16771c5338c07d94b0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.