Contract 0xbd73e675e1fa3d60a302c797df5c82e558da7ce1

 

TxHash Block Age From To Value [TxFee]
0x3f6094f0a9d5c7b752f4e5b3238a12a790e2d2b139283c2ceff8d7d3c6edd0ef72499534 mins ago0xd8c997532b5b591621d7dc97fd31bccafb7a0fc8 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.0006568593
0x503114a984327d17ef18e8042154ef4bd44dd8f2c995d028a2808661a6edcc8772499485 mins ago0xd8c997532b5b591621d7dc97fd31bccafb7a0fc8 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.0006568593
0x53b7d921a4f9786e243989fde426400064da6b4c245077e272773fb3a20b666772495732 hrs 11 mins ago0x872fe902da8e333c78509620765f042346f98702 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce12.453766 Ether0.000489705
0x9775aaf1c28f35d430e7e20943197d61a7676e7d6b1a4bf67b3bc40122ed9bcb72493843 hrs 11 mins ago0x707c980075c6c599596d19a9e90449a8fb7dfdb1 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000468444
0x61b362c51704c5ca1dbf3529961b96d51242c88eca63cecaef90f019192896db72493793 hrs 15 mins ago0xfef1a4260a13ba67c0effd8930c6b702aa04da34 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000468444
0x4e94a8e41acce6f13e85247558961e914d1cf01b021de42be013c612d94e779672491964 hrs 19 mins ago0xb05a77c14ee58567b3b6f41802a013d0b266eea7 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000274224
0xe907cfaf15e88265fed498f81a314cd0867c799f9ec64af063b3140e3f49144172491944 hrs 20 mins ago0xb05a77c14ee58567b3b6f41802a013d0b266eea7 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000274992
0x7250ee92f8618d703bd6874502e855a4d542a9f8b861b8c484430f834a20e3e372491944 hrs 20 mins ago0xb05a77c14ee58567b3b6f41802a013d0b266eea7 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000274992
0x1de0b6b2bb35d5fb34a00e365ea40f2148f9e94cfa59f64a1995ebc9643f377f72491944 hrs 20 mins ago0xb05a77c14ee58567b3b6f41802a013d0b266eea7 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000293736
0x60c0d5eba9c0c3eb9d06a35cec208137a2310f50e6900889579c2910bc64b0cd72491944 hrs 20 mins ago0xb05a77c14ee58567b3b6f41802a013d0b266eea7 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000274224
0x88a98e376ae4f1965702ca1c054687880feb3b9d8fa787f9645021d49f9747ef72491944 hrs 20 mins ago0xb05a77c14ee58567b3b6f41802a013d0b266eea7 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000274224
0xd8a3101874a3e425e343ca1631206a96e9daa656af4720359305f09fa070230872491944 hrs 20 mins ago0xb05a77c14ee58567b3b6f41802a013d0b266eea7 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000293736
0x5bbb5deb994fd4e281aa7a2177cbeeb804b9436618d2fca342b3f8610a47fb7772491944 hrs 20 mins ago0xb05a77c14ee58567b3b6f41802a013d0b266eea7 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000073434
0x3fd92bbb5605df44598464d455c558704b5979c3496725398945b8acf7ac634e72491104 hrs 45 mins ago0x6503900bfec7178c4bc405775b8910313ee5dfce IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000468444
0x68c568466afbf04c1db93b845d2056accf29776a40ead4b066aeb99da9a7351872491054 hrs 47 mins ago0x6503900bfec7178c4bc405775b8910313ee5dfce IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000796248
0x9b6aa43247d6ef44211d4df90333598311b106d91cf11b00e3627cdaf38ec9c372491004 hrs 49 mins ago0x6503900bfec7178c4bc405775b8910313ee5dfce IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000468444
0xaa2c2e40d16eb663aa048959caa3adad2293998dad2c1ad59ca5a2eaa64c2f5472490854 hrs 52 mins ago0x6503900bfec7178c4bc405775b8910313ee5dfce IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000796248
0x6ede7fb730380c2a2bac5e3e65f864807a100f5cbadcfe2c39c9a3cf0e1d4b3972490804 hrs 53 mins ago0x6503900bfec7178c4bc405775b8910313ee5dfce IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000468444
0x33083d8a35b449f3caaefde76bc6fdc605f79caedef623f636374ccaf70673ca72490804 hrs 53 mins ago0x6503900bfec7178c4bc405775b8910313ee5dfce IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000977016
0xfd2e8ad0f168f86fd791af29dd8ebab594cb2b908c398549a55db23ccf55168072490664 hrs 59 mins ago0x6503900bfec7178c4bc405775b8910313ee5dfce IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000468444
0xdb26b53a11f5ae21b99f856d23f318c86c31eb0dee4447fcba86c803910659f972490635 hrs ago0x6503900bfec7178c4bc405775b8910313ee5dfce IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000274992
0x086b2aac78237216254eaeff0a0dc05541e790c09b912f81e340816358313c6b72490515 hrs 5 mins ago0x6503900bfec7178c4bc405775b8910313ee5dfce IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000274992
0x2b56f4435ad37f000ca74c6c5a64360154ac5db54df976b4790f9658ca62a2de72490025 hrs 23 mins ago0xc2c4029e78558d04e9cd8e7648daf0e6de559452 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000468444
0x9cb8874020498294d5db43d09f87fb14bae5398638cedd1d5cd0c60c94dba66672489915 hrs 27 mins ago0xbe2c671bbfd15467023fd90f0022dba28979c09d IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000468444
0x0d946a07529d6f8f516a4ee2b0990a7db01d844ac4b3f9c09550ad3a5715e39a72489805 hrs 31 mins ago0x6b7217baddb2b178a909600e664c413979e0ddd6 IN  0xbd73e675e1fa3d60a302c797df5c82e558da7ce10 Ether0.000468444
[ Download CSV Export 

Latest 25 Internal Transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x9775aaf1c28f35d430e7e20943197d61a7676e7d6b1a4bf67b3bc40122ed9bcb72493843 hrs 11 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x707c980075c6c599596d19a9e90449a8fb7dfdb11.909934446248068547 Ether
0x61b362c51704c5ca1dbf3529961b96d51242c88eca63cecaef90f019192896db72493793 hrs 15 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10xfef1a4260a13ba67c0effd8930c6b702aa04da341.363313334381982822 Ether
0x3fd92bbb5605df44598464d455c558704b5979c3496725398945b8acf7ac634e72491104 hrs 45 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x6503900bfec7178c4bc405775b8910313ee5dfce0.00232902734199847 Ether
0x9b6aa43247d6ef44211d4df90333598311b106d91cf11b00e3627cdaf38ec9c372491004 hrs 49 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x6503900bfec7178c4bc405775b8910313ee5dfce0.412296766667694201 Ether
0x6ede7fb730380c2a2bac5e3e65f864807a100f5cbadcfe2c39c9a3cf0e1d4b3972490804 hrs 53 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x6503900bfec7178c4bc405775b8910313ee5dfce0.361690667974788134 Ether
0xfd2e8ad0f168f86fd791af29dd8ebab594cb2b908c398549a55db23ccf55168072490664 hrs 59 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x6503900bfec7178c4bc405775b8910313ee5dfce0.012478574563277096 Ether
0x2b56f4435ad37f000ca74c6c5a64360154ac5db54df976b4790f9658ca62a2de72490025 hrs 23 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10xc2c4029e78558d04e9cd8e7648daf0e6de5594523.50435861513888829 Ether
0x9cb8874020498294d5db43d09f87fb14bae5398638cedd1d5cd0c60c94dba66672489915 hrs 27 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10xbe2c671bbfd15467023fd90f0022dba28979c09d2.534943183098102443 Ether
0x0d946a07529d6f8f516a4ee2b0990a7db01d844ac4b3f9c09550ad3a5715e39a72489805 hrs 31 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x6b7217baddb2b178a909600e664c413979e0ddd619.493872094536408169 Ether
0xcf4fbd87f8120b6016a14b06e8c4832d8a98ee88cb7ffc0e2ee960fca39f0a1072487476 hrs 54 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x691a4e1d7e8aef2e74c0fb20100442c3abcda9691.881516562817938604 Ether
0x2efa72f219f3a42398b1fd553d7f28a7dd9edb8a80e7a4c5fd55e3897002599672486727 hrs 22 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x8844f8233c15f853e8fcfe07025dd5abeafad4c40.039130093007796082 Ether
0x7138f5669b94b5aeef1920fe0f448085d582ccb5a078a864f369b46c82af72ef72485957 hrs 50 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10xb05a77c14ee58567b3b6f41802a013d0b266eea70.230937917563292281 Ether
0xd609440b1e4189fe04c363708fd8424654bc7450e13dcb6b9de84e8b5696f3c172485887 hrs 53 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10xb05a77c14ee58567b3b6f41802a013d0b266eea70.019770715786676456 Ether
0x99b4da7e016929abd0b1e4d0ea5757fd74b6e8f125c426aeae1d4aac16972f2272485598 hrs ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x02c73d7c23800d61f1fecafa94b90f41ab95fef50.940340290574439589 Ether
0xd56c6645580e6a17a81e546e048d29b491b267069286336be5f23d2b10d69c51724582623 hrs 9 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x32b275c92d2a5bfe4d15828766204514cb9ea8e30.029067662237915548 Ether
0x4adf465ab67e93f2e80eb16c81737ba4ae239eb47cbf9db67637232ca8575c6472455391 day 49 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x06c3af03942822bcae52d4eee6f0d199174822360.146079603929093888 Ether
0x0944228e40a33ddf73551a629361b7f85a7700784ed6f90d39f034e5fd188a8472455311 day 51 mins ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x06c3af03942822bcae52d4eee6f0d199174822360.032774944932756569 Ether
0xaff5d9f67d5a03971fc6437c246901af456e7316c267b7c40744a81984a8330472448651 day 4 hrs ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x44a94aa860e2c91c2169c29a57c07d20af177f240.0680537477155774 Ether
0x18ea76853afa19db3a1c88aaba5dba8ed15fa54368ae2424ee5475fb8f6f3aa172448251 day 4 hrs ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x900f7d1fa739527bd82e803c81b6b4f9e4b9d7563.524178910388229603 Ether
0xbec1a5a11fbecc4ba0b62eef91d77d6b4aa18521b27215d12426fdd7f97df25272448141 day 5 hrs ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x900f7d1fa739527bd82e803c81b6b4f9e4b9d7560.224606681242560706 Ether
0xd8e05f138593b086f5399ebcc8a78407daa329f61cfc589402f87120ad28936c72447081 day 5 hrs ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x8cff3c279b2916bb69fc88800d217e55a98051f80.633212900256076958 Ether
0x890cd60225efbc119bec2bcc3478f837cc940feda22c2848b2b20a3a13a0a69172446921 day 5 hrs ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10xd062c5c3915e2396928428511cfb40a2017acc680.854929708401934879 Ether
0xcab123b668735d1d9eeb34f77e8c79b37d18c6c8d33efc0edd5b47313907345f72430961 day 14 hrs ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x5411cf2e24049610cd534c237d6e2adcf953d6390.104870683453975405 Ether
0xc9c06e9bb4a87c47f09a1a409153143df15610dbdc8604e32ec636a0aa83ead472418471 day 21 hrs ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10x8b625faad1e3dad266c4e33020d1be0277018b6c0.208917987638538131 Ether
0x5f4312bbb555d366c5abab6114faeaa8a87e13172198e712c0ce21c8445042af72403242 days 6 hrs ago0xbd73e675e1fa3d60a302c797df5c82e558da7ce10xf178c83b071710dcb4c49ec6925291663e5894930.26694081778759143 Ether
[ Download CSV Export 
Contract Source Code Verified (Exact Match)
Contract Name: PantheonEcoSystem
Compiler Version: v0.4.25+commit.59dbf8f1
Optimization Enabled: No
Runs (Optimizer):  200


Contract Source Code
pragma solidity 0.4.25;

contract PantheonEcoSystem {

    struct UserRecord {
        address referrer;
        uint tokens;
        uint gained_funds;
        uint ref_funds;
        // this field can be negative
        int funds_correction;
    }

    using SafeMath for uint;
    using SafeMathInt for int;
    using Fee for Fee.fee;
    using ToAddress for bytes;

    // ERC20
    string constant public name = "Pantheon Ecosystem";
    string constant public symbol = "PAN";
    uint8 constant public decimals = 18;

    // Fees
    Fee.fee private fee_purchase = Fee.fee(1, 10); // 10%
    Fee.fee private fee_selling  = Fee.fee(1, 20); // 5%
    Fee.fee private fee_transfer = Fee.fee(1, 100); // 1%
    Fee.fee private fee_referral = Fee.fee(33, 100); // 33%

    // Minimal amount of tokens to be an participant of referral program
    uint constant private minimal_stake = 10e18;

    // Factor for converting eth <-> tokens with required precision of calculations
    uint constant private precision_factor = 1e18;

    // Pricing policy
    //  - if user buy 1 token, price will be increased by "price_offset" value
    //  - if user sell 1 token, price will be decreased by "price_offset" value
    // For details see methods "fundsToTokens" and "tokensToFunds"
    uint private price = 1e29; // 100 Gwei * precision_factor
    uint constant private price_offset = 1e28; // 10 Gwei * precision_factor

    // Total amount of tokens
    uint private total_supply = 0;

    // Total profit shared between token's holders. It's not reflect exactly sum of funds because this parameter
    // can be modified to keep the real user's dividends when total supply is changed
    // For details see method "dividendsOf" and using "funds_correction" in the code
    uint private shared_profit = 0;

    // Map of the users data
    mapping(address => UserRecord) private user_data;

    // ==== Modifiers ==== //

    modifier onlyValidTokenAmount(uint tokens) {
        require(tokens > 0, "Amount of tokens must be greater than zero");
        require(tokens <= user_data[msg.sender].tokens, "You have not enough tokens");
        _;
    }

    // ==== Public API ==== //

    // ---- Write methods ---- //

    function () public payable {
        buy(msg.data.toAddr());
    }

    /*
    * @dev Buy tokens from incoming funds
    */
    function buy(address referrer) public payable {

        // apply fee
        (uint fee_funds, uint taxed_funds) = fee_purchase.split(msg.value);
        require(fee_funds != 0, "Incoming funds is too small");

        // update user's referrer
        //  - you cannot be a referrer for yourself
        //  - user and his referrer will be together all the life
        UserRecord storage user = user_data[msg.sender];
        if (referrer != 0x0 && referrer != msg.sender && user.referrer == 0x0) {
            user.referrer = referrer;
        }

        // apply referral bonus
        if (user.referrer != 0x0) {
            fee_funds = rewardReferrer(msg.sender, user.referrer, fee_funds, msg.value);
            require(fee_funds != 0, "Incoming funds is too small");
        }

        // calculate amount of tokens and change price
        (uint tokens, uint _price) = fundsToTokens(taxed_funds);
        require(tokens != 0, "Incoming funds is too small");
        price = _price;

        // mint tokens and increase shared profit
        mintTokens(msg.sender, tokens);
        shared_profit = shared_profit.add(fee_funds);

        emit Purchase(msg.sender, msg.value, tokens, price / precision_factor, now);
    }

    /*
    * @dev Sell given amount of tokens and get funds
    */
    function sell(uint tokens) public onlyValidTokenAmount(tokens) {

        // calculate amount of funds and change price
        (uint funds, uint _price) = tokensToFunds(tokens);
        require(funds != 0, "Insufficient tokens to do that");
        price = _price;

        // apply fee
        (uint fee_funds, uint taxed_funds) = fee_selling.split(funds);
        require(fee_funds != 0, "Insufficient tokens to do that");

        // burn tokens and add funds to user's dividends
        burnTokens(msg.sender, tokens);
        UserRecord storage user = user_data[msg.sender];
        user.gained_funds = user.gained_funds.add(taxed_funds);

        // increase shared profit
        shared_profit = shared_profit.add(fee_funds);

        emit Selling(msg.sender, tokens, funds, price / precision_factor, now);
    }

    /*
    * @dev Transfer given amount of tokens from sender to another user
    * ERC20
    */
    function transfer(address to_addr, uint tokens) public onlyValidTokenAmount(tokens) returns (bool success) {

        require(to_addr != msg.sender, "You cannot transfer tokens to yourself");

        // apply fee
        (uint fee_tokens, uint taxed_tokens) = fee_transfer.split(tokens);
        require(fee_tokens != 0, "Insufficient tokens to do that");

        // calculate amount of funds and change price
        (uint funds, uint _price) = tokensToFunds(fee_tokens);
        require(funds != 0, "Insufficient tokens to do that");
        price = _price;

        // burn and mint tokens excluding fee
        burnTokens(msg.sender, tokens);
        mintTokens(to_addr, taxed_tokens);

        // increase shared profit
        shared_profit = shared_profit.add(funds);

        emit Transfer(msg.sender, to_addr, tokens);
        return true;
    }

    /*
    * @dev Reinvest all dividends
    */
    function reinvest() public {

        // get all dividends
        uint funds = dividendsOf(msg.sender);
        require(funds > 0, "You have no dividends");

        // make correction, dividents will be 0 after that
        UserRecord storage user = user_data[msg.sender];
        user.funds_correction = user.funds_correction.add(int(funds));

        // apply fee
        (uint fee_funds, uint taxed_funds) = fee_purchase.split(funds);
        require(fee_funds != 0, "Insufficient dividends to do that");

        // apply referral bonus
        if (user.referrer != 0x0) {
            fee_funds = rewardReferrer(msg.sender, user.referrer, fee_funds, funds);
            require(fee_funds != 0, "Insufficient dividends to do that");
        }

        // calculate amount of tokens and change price
        (uint tokens, uint _price) = fundsToTokens(taxed_funds);
        require(tokens != 0, "Insufficient dividends to do that");
        price = _price;

        // mint tokens and increase shared profit
        mintTokens(msg.sender, tokens);
        shared_profit = shared_profit.add(fee_funds);

        emit Reinvestment(msg.sender, funds, tokens, price / precision_factor, now);
    }

    /*
    * @dev Withdraw all dividends
    */
    function withdraw() public {

        // get all dividends
        uint funds = dividendsOf(msg.sender);
        require(funds > 0, "You have no dividends");

        // make correction, dividents will be 0 after that
        UserRecord storage user = user_data[msg.sender];
        user.funds_correction = user.funds_correction.add(int(funds));

        // send funds
        msg.sender.transfer(funds);

        emit Withdrawal(msg.sender, funds, now);
    }

    /*
    * @dev Sell all tokens and withraw dividends
    */
    function exit() public {

        // sell all tokens
        uint tokens = user_data[msg.sender].tokens;
        if (tokens > 0) {
            sell(tokens);
        }

        withdraw();
    }

    /*
    * @dev CAUTION! This method distributes all incoming funds between token's holders and gives you nothing
    * It will be used by another contracts/addresses from our ecosystem in future
    * But if you want to donate, you're welcome :)
    */
    function donate() public payable {
        shared_profit = shared_profit.add(msg.value);
        emit Donation(msg.sender, msg.value, now);
    }

    // ---- Read methods ---- //

    /*
    * @dev Total amount of tokens
    * ERC20
    */
    function totalSupply() public view returns (uint) {
        return total_supply;
    }

    /*
    * @dev Amount of user's tokens
    * ERC20
    */
    function balanceOf(address addr) public view returns (uint) {
        return user_data[addr].tokens;
    }

    /*
    * @dev Amount of user's dividends
    */
    function dividendsOf(address addr) public view returns (uint) {

        UserRecord memory user = user_data[addr];

        // gained funds from selling tokens + bonus funds from referrals
        // int because "user.funds_correction" can be negative
        int d = int(user.gained_funds.add(user.ref_funds));
        require(d >= 0);

        // avoid zero divizion
        if (total_supply > 0) {
            // profit is proportional to stake
            d = d.add(int(shared_profit.mul(user.tokens) / total_supply));
        }

        // correction
        // d -= user.funds_correction
        if (user.funds_correction > 0) {
            d = d.sub(user.funds_correction);
        }
        else if (user.funds_correction < 0) {
            d = d.add(-user.funds_correction);
        }

        // just in case
        require(d >= 0);

        // total sum must be positive uint
        return uint(d);
    }

    /*
    * @dev Amount of tokens can be gained from given amount of funds
    */
    function expectedTokens(uint funds, bool apply_fee) public view returns (uint) {
        if (funds == 0) {
            return 0;
        }
        if (apply_fee) {
            (,uint _funds) = fee_purchase.split(funds);
            funds = _funds;
        }
        (uint tokens,) = fundsToTokens(funds);
        return tokens;
    }

    /*
    * @dev Amount of funds can be gained from given amount of tokens
    */
    function expectedFunds(uint tokens, bool apply_fee) public view returns (uint) {
        // empty tokens in total OR no tokens was sold
        if (tokens == 0 || total_supply == 0) {
            return 0;
        }
        // more tokens than were mined in total, just exclude unnecessary tokens from calculating
        else if (tokens > total_supply) {
            tokens = total_supply;
        }
        (uint funds,) = tokensToFunds(tokens);
        if (apply_fee) {
            (,uint _funds) = fee_selling.split(funds);
            funds = _funds;
        }
        return funds;
    }

    /*
    * @dev Purchase price of next 1 token
    */
    function buyPrice() public view returns (uint) {
        return price / precision_factor;
    }

    /*
    * @dev Selling price of next 1 token
    */
    function sellPrice() public view returns (uint) {
        return price.sub(price_offset) / precision_factor;
    }

    // ==== Private API ==== //

    /*
    * @dev Mint given amount of tokens to given user
    */
    function mintTokens(address addr, uint tokens) internal {

        UserRecord storage user = user_data[addr];

        bool not_first_minting = total_supply > 0;

        // make correction to keep dividends the rest of the users
        if (not_first_minting) {
            shared_profit = shared_profit.mul(total_supply.add(tokens)) / total_supply;
        }

        // add tokens
        total_supply = total_supply.add(tokens);
        user.tokens = user.tokens.add(tokens);

        // make correction to keep dividends of user
        if (not_first_minting) {
            user.funds_correction = user.funds_correction.add(int(tokens.mul(shared_profit) / total_supply));
        }
    }

    /*
    * @dev Burn given amout of tokens from given user
    */
    function burnTokens(address addr, uint tokens) internal {

        UserRecord storage user = user_data[addr];

        // keep current dividents of user if last tokens will be burned
        uint dividends_from_tokens = 0;
        if (total_supply == tokens) {
            dividends_from_tokens = shared_profit.mul(user.tokens) / total_supply;
        }

        // make correction to keep dividends the rest of the users
        shared_profit = shared_profit.mul(total_supply.sub(tokens)) / total_supply;

        // sub tokens
        total_supply = total_supply.sub(tokens);
        user.tokens = user.tokens.sub(tokens);

        // make correction to keep dividends of the user
        // if burned not last tokens
        if (total_supply > 0) {
            user.funds_correction = user.funds_correction.sub(int(tokens.mul(shared_profit) / total_supply));
        }
        // if burned last tokens
        else if (dividends_from_tokens != 0) {
            user.funds_correction = user.funds_correction.sub(int(dividends_from_tokens));
        }
    }

    /*
     * @dev Rewards the referrer from given amount of funds
     */
    function rewardReferrer(address addr, address referrer_addr, uint funds, uint full_funds) internal returns (uint funds_after_reward) {
        UserRecord storage referrer = user_data[referrer_addr];
        if (referrer.tokens >= minimal_stake) {
            (uint reward_funds, uint taxed_funds) = fee_referral.split(funds);
            referrer.ref_funds = referrer.ref_funds.add(reward_funds);
            emit ReferralReward(addr, referrer_addr, full_funds, reward_funds, now);
            return taxed_funds;
        }
        else {
            return funds;
        }
    }

    /*
    * @dev Calculate tokens from funds
    *
    * Given:
    *   a[1] = price
    *   d = price_offset
    *   sum(n) = funds
    * Here is used arithmetic progression's equation transformed to a quadratic equation:
    *   a * n^2 + b * n + c = 0
    * Where:
    *   a = d
    *   b = 2 * a[1] - d
    *   c = -2 * sum(n)
    * Solve it and first root is what we need - amount of tokens
    * So:
    *   tokens = n
    *   price = a[n+1]
    *
    * For details see method below
    */
    function fundsToTokens(uint funds) internal view returns (uint tokens, uint _price) {
        uint b = price.mul(2).sub(price_offset);
        uint D = b.mul(b).add(price_offset.mul(8).mul(funds).mul(precision_factor));
        uint n = D.sqrt().sub(b).mul(precision_factor) / price_offset.mul(2);
        uint anp1 = price.add(price_offset.mul(n) / precision_factor);
        return (n, anp1);
    }

    /*
    * @dev Calculate funds from tokens
    *
    * Given:
    *   a[1] = sell_price
    *   d = price_offset
    *   n = tokens
    * Here is used arithmetic progression's equation (-d because of d must be negative to reduce price):
    *   a[n] = a[1] - d * (n - 1)
    *   sum(n) = (a[1] + a[n]) * n / 2
    * So:
    *   funds = sum(n)
    *   price = a[n]
    *
    * For details see method above
    */
    function tokensToFunds(uint tokens) internal view returns (uint funds, uint _price) {
        uint sell_price = price.sub(price_offset);
        uint an = sell_price.add(price_offset).sub(price_offset.mul(tokens) / precision_factor);
        uint sn = sell_price.add(an).mul(tokens) / precision_factor.mul(2);
        return (sn / precision_factor, an);
    }

    // ==== Events ==== //

    event Purchase(address indexed addr, uint funds, uint tokens, uint price, uint time);
    event Selling(address indexed addr, uint tokens, uint funds, uint price, uint time);
    event Reinvestment(address indexed addr, uint funds, uint tokens, uint price, uint time);
    event Withdrawal(address indexed addr, uint funds, uint time);
    event Donation(address indexed addr, uint funds, uint time);
    event ReferralReward(address indexed referral_addr, address indexed referrer_addr, uint funds, uint reward_funds, uint time);

    //ERC20
    event Transfer(address indexed from_addr, address indexed to_addr, uint tokens);

}

library SafeMath {

    /**
    * @dev Multiplies two numbers
    */
    function mul(uint a, uint b) internal pure returns (uint) {
        if (a == 0) {
            return 0;
        }
        uint c = a * b;
        require(c / a == b, "mul failed");
        return c;
    }

    /**
    * @dev Subtracts two numbers
    */
    function sub(uint a, uint b) internal pure returns (uint) {
        require(b <= a, "sub failed");
        return a - b;
    }

    /**
    * @dev Adds two numbers
    */
    function add(uint a, uint b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "add failed");
        return c;
    }

    /**
     * @dev Gives square root from number
     */
    function sqrt(uint x) internal pure returns (uint y) {
        uint z = add(x, 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = add(x / z, z) / 2;
        }
    }
}

library SafeMathInt {

    /**
    * @dev Subtracts two numbers
    */
    function sub(int a, int b) internal pure returns (int) {
        int c = a - b;
        require(c <= a, "sub failed");
        return c;
    }

    /**
    * @dev Adds two numbers
    */
    function add(int a, int b) internal pure returns (int) {
        int c = a + b;
        require(c >= a, "add failed");
        return c;
    }
}

library Fee {

    using SafeMath for uint;

    struct fee {
        uint num;
        uint den;
    }

    /*
    * @dev Splits given value to two parts: tax itself and taxed value
    */
    function split(fee memory f, uint value) internal pure returns (uint tax, uint taxed_value) {
        if (value == 0) {
            return (0, 0);
        }
        tax = value.mul(f.num) / f.den;
        taxed_value = value.sub(tax);
    }

    /*
    * @dev Returns only tax part
    */
    function get_tax(fee memory f, uint value) internal pure returns (uint tax) {
        if (value == 0) {
            return 0;
        }
        tax = value.mul(f.num) / f.den;
    }
}

library ToAddress {

    /*
    * @dev Transforms bytes to address
    */
    function toAddr(bytes source) internal pure returns (address addr) {
        assembly {
            addr := mload(add(source, 0x14))
        }
        return addr;
    }
}

Contract ABI
[{"constant":true,"inputs":[{"name":"addr","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":"totalSupply","outputs":[{"name":"","type":"uint256"}],"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":"addr","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","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":"to_addr","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokens","type":"uint256"},{"name":"apply_fee","type":"bool"}],"name":"expectedFunds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"funds","type":"uint256"},{"name":"apply_fee","type":"bool"}],"name":"expectedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokens","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":"donate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"referrer","type":"address"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Selling","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Reinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Withdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Donation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"referral_addr","type":"address"},{"indexed":true,"name":"referrer_addr","type":"address"},{"indexed":false,"name":"funds","type":"uint256"},{"indexed":false,"name":"reward_funds","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"ReferralReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from_addr","type":"address"},{"indexed":true,"name":"to_addr","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"}]

Contract Creation Code
6080604052604080519081016040528060018152602001600a81525060008082015181600001556020820151816001015550506040805190810160405280600181526020016014815250600260008201518160000155602082015181600101555050604080519081016040528060018152602001606481525060046000820151816000015560208201518160010155505060408051908101604052806021815260200160648152506006600082015181600001556020820151816001015550506c01431e0fae6d7217caa000000060085560006009556000600a553480156100e657600080fd5b506125b8806100f66000396000f3006080604052600436106100f0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806265318b1461013657806306fdde031461018d57806318160ddd1461021d578063313ce567146102485780633ccfd60b146102795780634b7503341461029057806370a08231146102bb5780638620410b1461031257806395d89b411461033d578063a9059cbb146103cd578063be2eaad414610432578063c5f606201461047f578063e4849b32146104cc578063e9fad8ee146104f9578063ed88c68e14610510578063f088d5471461051a578063fdb5a03e14610550575b61013461012f6000368080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610567565b610578565b005b34801561014257600080fd5b50610177600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610978565b6040518082815260200191505060405180910390f35b34801561019957600080fd5b506101a2610b32565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e25780820151818401526020810190506101c7565b50505050905090810190601f16801561020f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022957600080fd5b50610232610b6b565b6040518082815260200191505060405180910390f35b34801561025457600080fd5b5061025d610b75565b604051808260ff1660ff16815260200191505060405180910390f35b34801561028557600080fd5b5061028e610b7a565b005b34801561029c57600080fd5b506102a5610d01565b6040518082815260200191505060405180910390f35b3480156102c757600080fd5b506102fc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d3c565b6040518082815260200191505060405180910390f35b34801561031e57600080fd5b50610327610d88565b6040518082815260200191505060405180910390f35b34801561034957600080fd5b50610352610da5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610392578082015181840152602081019050610377565b50505050905090810190601f1680156103bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d957600080fd5b50610418600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dde565b604051808215151515815260200191505060405180910390f35b34801561043e57600080fd5b50610469600480360381019080803590602001909291908035151590602001909291905050506111e9565b6040518082815260200191505060405180910390f35b34801561048b57600080fd5b506104b660048036038101908080359060200190929190803515159060200190929190505050611274565b6040518082815260200191505060405180910390f35b3480156104d857600080fd5b506104f7600480360381019080803590602001909291905050506112e2565b005b34801561050557600080fd5b5061050e611689565b005b6105186116ee565b005b61054e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610578565b005b34801561055c57600080fd5b50610565611761565b005b600060148201519050809050919050565b60008060008060006105b334600060408051908101604052908160008201548152602001600182015481525050611b9490919063ffffffff16565b9450945060008514151515610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e636f6d696e672066756e647320697320746f6f20736d616c6c000000000081525060200191505060405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020925060008673ffffffffffffffffffffffffffffffffffffffff16141580156106c457503373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b801561070a575060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561075357858360000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610843576107c7338460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168734611bf7565b945060008514151515610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e636f6d696e672066756e647320697320746f6f20736d616c6c000000000081525060200191505060405180910390fd5b5b61084c84611d35565b91509150600082141515156108c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e636f6d696e672066756e647320697320746f6f20736d616c6c000000000081525060200191505060405180910390fd5b806008819055506108da3383611e9e565b6108ef85600a54611fb490919063ffffffff16565b600a819055503373ffffffffffffffffffffffffffffffffffffffff167fd721454499cf9c37b757e03b9d675df451c229048129d6e2d552216a035e6a553484670de0b6b3a764000060085481151561094457fe5b04426040518085815260200184815260200183815260200182815260200194505050505060405180910390a2505050505050565b6000610982612546565b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060a060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015481526020016004820154815250509150610a6a82606001518360400151611fb490919063ffffffff16565b905060008112151515610a7c57600080fd5b60006009541115610ac257610abf600954610aa68460200151600a5461203e90919063ffffffff16565b811515610aaf57fe5b04826120e590919063ffffffff16565b90505b600082608001511315610aed57610ae682608001518261216f90919063ffffffff16565b9050610b18565b600082608001511215610b1757610b148260800151600003826120e590919063ffffffff16565b90505b5b60008112151515610b2857600080fd5b8092505050919050565b6040805190810160405280601281526020017f50616e7468656f6e2045636f73797374656d000000000000000000000000000081525081565b6000600954905090565b601281565b600080610b8633610978565b9150600082111515610c00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f752068617665206e6f206469766964656e6473000000000000000000000081525060200191505060405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610c588282600401546120e590919063ffffffff16565b81600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610ca6573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb8342604051808381526020018281526020019250505060405180910390a25050565b6000670de0b6b3a7640000610d2d6b204fce5e3e250261100000006008546121f990919063ffffffff16565b811515610d3657fe5b04905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b6000670de0b6b3a7640000600854811515610d9f57fe5b04905090565b6040805190810160405280600381526020017f50414e000000000000000000000000000000000000000000000000000000000081525081565b600080600080600085600081111515610e85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f416d6f756e74206f6620746f6b656e73206d757374206265206772656174657281526020017f207468616e207a65726f0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101548111151515610f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f596f752068617665206e6f7420656e6f75676820746f6b656e7300000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515611009576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f596f752063616e6e6f74207472616e7366657220746f6b656e7320746f20796f81526020017f757273656c66000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61103c87600460408051908101604052908160008201548152602001600182015481525050611b9490919063ffffffff16565b94509450600085141515156110b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b6110c28561227e565b925092506000831415151561113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b81600881905550611150338861237b565b61115a8885611e9e565b61116f83600a54611fb490919063ffffffff16565b600a819055508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a360019550505050505092915050565b6000806000808514806111fe57506000600954145b1561120c576000925061126c565b60095485111561121c5760095494505b6112258561227e565b50915083156112685761126182600260408051908101604052908160008201548152602001600182015481525050611b9490919063ffffffff16565b9150508091505b8192505b505092915050565b60008060008085141561128a57600092506112da565b83156112ca576112c385600060408051908101604052908160008201548152602001600182015481525050611b9490919063ffffffff16565b9250508194505b6112d385611d35565b5090508092505b505092915050565b600080600080600085600081111515611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f416d6f756e74206f6620746f6b656e73206d757374206265206772656174657281526020017f207468616e207a65726f0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101548111151515611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f596f752068617665206e6f7420656e6f75676820746f6b656e7300000000000081525060200191505060405180910390fd5b61144c8761227e565b95509550600086141515156114c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b8460088190555061150386600260408051908101604052908160008201548152602001600182015481525050611b9490919063ffffffff16565b9350935060008414151515611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e73756666696369656e7420746f6b656e7320746f20646f2074686174000081525060200191505060405180910390fd5b61158a338861237b565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002091506115e2838360020154611fb490919063ffffffff16565b82600201819055506115ff84600a54611fb490919063ffffffff16565b600a819055503373ffffffffffffffffffffffffffffffffffffffff167fafd310387603da0dcf44f11f54b04254b548c58b194e75f85851e849f0eef3078888670de0b6b3a764000060085481151561165457fe5b04426040518085815260200184815260200183815260200182815260200194505050505060405180910390a250505050505050565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905060008111156116e3576116e2816112e2565b5b6116eb610b7a565b50565b61170334600a54611fb490919063ffffffff16565b600a819055503373ffffffffffffffffffffffffffffffffffffffff167f106aac375bbcf013d1e52338bbf9e740009a1a3a6869f8daa1b72aa1620f5fec3442604051808381526020018281526020019250505060405180910390a2565b60008060008060008061177333610978565b95506000861115156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f752068617665206e6f206469766964656e6473000000000000000000000081525060200191505060405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002094506118458686600401546120e590919063ffffffff16565b856004018190555061188086600060408051908101604052908160008201548152602001600182015481525050611b9490919063ffffffff16565b9350935060008414151515611923576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f496e73756666696369656e74206469766964656e647320746f20646f2074686181526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611a3957611997338660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168689611bf7565b935060008414151515611a38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f496e73756666696369656e74206469766964656e647320746f20646f2074686181526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5b611a4283611d35565b9150915060008214151515611ae5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f496e73756666696369656e74206469766964656e647320746f20646f2074686181526020017f740000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600881905550611af63383611e9e565b611b0b84600a54611fb490919063ffffffff16565b600a819055503373ffffffffffffffffffffffffffffffffffffffff167f1abe689c7914cafd54f789eb0851e90cba235302161e81e259ee4c357c374d828784670de0b6b3a7640000600854811515611b6057fe5b04426040518085815260200184815260200183815260200182815260200194505050505060405180910390a2505050505050565b6000806000831415611bb25760008081915080905091509150611bf0565b8360200151611bce85600001518561203e90919063ffffffff16565b811515611bd757fe5b049150611bed82846121f990919063ffffffff16565b90505b9250929050565b600080600080600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250678ac7230489e800008360010154101515611d2657611c8686600660408051908101604052908160008201548152602001600182015481525050611b9490919063ffffffff16565b91509150611ca1828460030154611fb490919063ffffffff16565b83600301819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f870e4e1dcfab6c09707448d3659b3d8097c084bf06e7467d6029940cd7122ee087854260405180848152602001838152602001828152602001935050505060405180910390a3809350611d2a565b8593505b505050949350505050565b600080600080600080611d726b204fce5e3e25026110000000611d64600260085461203e90919063ffffffff16565b6121f990919063ffffffff16565b9350611de4611dc3670de0b6b3a7640000611db58a611da760086b204fce5e3e2502611000000061203e90919063ffffffff16565b61203e90919063ffffffff16565b61203e90919063ffffffff16565b611dd6868761203e90919063ffffffff16565b611fb490919063ffffffff16565b9250611e0660026b204fce5e3e2502611000000061203e90919063ffffffff16565b611e3b670de0b6b3a7640000611e2d87611e1f886124ed565b6121f990919063ffffffff16565b61203e90919063ffffffff16565b811515611e4457fe5b049150611e8d670de0b6b3a7640000611e72846b204fce5e3e2502611000000061203e90919063ffffffff16565b811515611e7b57fe5b04600854611fb490919063ffffffff16565b905081819550955050505050915091565b600080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020915060006009541190508015611f2d57600954611f1c611f0b85600954611fb490919063ffffffff16565b600a5461203e90919063ffffffff16565b811515611f2557fe5b04600a819055505b611f4283600954611fb490919063ffffffff16565b600981905550611f5f838360010154611fb490919063ffffffff16565b82600101819055508015611fae57611fa5600954611f88600a548661203e90919063ffffffff16565b811515611f9157fe5b0483600401546120e590919063ffffffff16565b82600401819055505b50505050565b6000808284019050838110151515612034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f616464206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b600080600084141561205357600091506120de565b828402905082848281151561206457fe5b041415156120da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6d756c206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505b5092915050565b6000808284019050838112151515612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f616464206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b60008082840390508381131515156121ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f737562206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b6000828211151515612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f737562206661696c65640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b60008060008060006122a76b204fce5e3e250261100000006008546121f990919063ffffffff16565b925061230b670de0b6b3a76400006122d4886b204fce5e3e2502611000000061203e90919063ffffffff16565b8115156122dd57fe5b046122fd6b204fce5e3e2502611000000086611fb490919063ffffffff16565b6121f990919063ffffffff16565b91506123296002670de0b6b3a764000061203e90919063ffffffff16565b61234e876123408587611fb490919063ffffffff16565b61203e90919063ffffffff16565b81151561235757fe5b049050670de0b6b3a76400008181151561236d57fe5b048294509450505050915091565b600080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209150600090508260095414156123f6576009546123e98360010154600a5461203e90919063ffffffff16565b8115156123f257fe5b0490505b600954612422612411856009546121f990919063ffffffff16565b600a5461203e90919063ffffffff16565b81151561242b57fe5b04600a81905550612447836009546121f990919063ffffffff16565b6009819055506124648383600101546121f990919063ffffffff16565b8260010181905550600060095411156124bc576124af600954612492600a548661203e90919063ffffffff16565b81151561249b57fe5b04836004015461216f90919063ffffffff16565b82600401819055506124e7565b6000811415156124e6576124dd81836004015461216f90919063ffffffff16565b82600401819055505b5b50505050565b60008060026124fd846001611fb4565b81151561250657fe5b0490508291505b8181101561254057809150600261252f828581151561252857fe5b0483611fb4565b81151561253857fe5b04905061250d565b50919050565b60a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815250905600a165627a7a72305820d955d83e2f50a5c7177643dd267b780a8970bb1eab8c7cc7e550b3edf856cb5f0029


   Swarm Source:
bzzr://d955d83e2f50a5c7177643dd267b780a8970bb1eab8c7cc7e550b3edf856cb5f
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.