ETH Price: $3,407.36 (-7.69%)

Contract

0xF317a365cFef0Aa4357ABd057048808A1d430402
 

Overview

ETH Balance

18.846535261004245062 ETH

Eth Value

$64,217.00 (@ $3,407.36/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Award By Rnd No212280982024-11-20 9:36:4729 days ago1732095407IN
Plagueinc.io
0 ETH0.000989049.1019748
Award By Rnd No212280282024-11-20 9:22:4729 days ago1732094567IN
Plagueinc.io
0 ETH0.0013116612.07093813
Award By Rnd No185331612023-11-09 8:21:47406 days ago1699518107IN
Plagueinc.io
0 ETH0.0029324836
Award By Rnd No185331302023-11-09 8:15:23406 days ago1699517723IN
Plagueinc.io
0 ETH0.0041203345
Award By Rnd No185331132023-11-09 8:11:59406 days ago1699517519IN
Plagueinc.io
0 ETH0.0041203345
Award By Rnd No185330862023-11-09 8:06:35406 days ago1699517195IN
Plagueinc.io
0 ETH0.0064094170
Award By Rnd No185330162023-11-09 7:52:35406 days ago1699516355IN
Plagueinc.io
0 ETH0.0031131434
Award By Rnd No185329962023-11-09 7:48:23406 days ago1699516103IN
Plagueinc.io
0 ETH0.0031131434
Award By Rnd No185329802023-11-09 7:45:11406 days ago1699515911IN
Plagueinc.io
0 ETH0.0031131434
Award By Rnd No185329582023-11-09 7:40:47407 days ago1699515647IN
Plagueinc.io
0 ETH0.0036945434
Award By Rnd No185329192023-11-09 7:32:59407 days ago1699515179IN
Plagueinc.io
0 ETH0.0036945434
Award By Rnd No182063522023-09-24 14:48:35452 days ago1695566915IN
Plagueinc.io
0 ETH0.000899598.27871792
Award By Rnd No182060902023-09-24 13:55:47452 days ago1695563747IN
Plagueinc.io
0 ETH0.000766747.05616339
Award By Rnd No182059912023-09-24 13:35:47452 days ago1695562547IN
Plagueinc.io
0 ETH0.000623866.81352263
Award By Rnd No182059792023-09-24 13:33:23452 days ago1695562403IN
Plagueinc.io
0 ETH0.000573267.03755142
Award By Rnd No118840562021-02-19 0:28:511400 days ago1613694531IN
Plagueinc.io
0 ETH0.00868511164
Award By Rnd No118840302021-02-19 0:24:071400 days ago1613694247IN
Plagueinc.io
0 ETH0.01060757161.3
Award By Rnd No117742872021-02-02 3:04:331417 days ago1612235073IN
Plagueinc.io
0 ETH0.01049919130
Award By Rnd No117742002021-02-02 2:47:371417 days ago1612234057IN
Plagueinc.io
0 ETH0.00841766128
Award By Rnd No117741722021-02-02 2:40:391417 days ago1612233639IN
Plagueinc.io
0 ETH0.00854919130
Award By Rnd No117741452021-02-02 2:35:511417 days ago1612233351IN
Plagueinc.io
0 ETH0.00854919130
Fee Withdraw117740902021-02-02 2:26:241417 days ago1612232784IN
Plagueinc.io
0 ETH0.00507559130
Award By Rnd No117740672021-02-02 2:21:231417 days ago1612232483IN
Plagueinc.io
0 ETH0.01049919130
Award By Rnd No117740352021-02-02 2:13:351417 days ago1612232015IN
Plagueinc.io
0 ETH0.00688454130
Award By Rnd No117740352021-02-02 2:13:351417 days ago1612232015IN
Plagueinc.io
0 ETH0.01049919130
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
212280982024-11-20 9:36:4729 days ago1732095407
Plagueinc.io
0.13423746 ETH
212280282024-11-20 9:22:4729 days ago1732094567
Plagueinc.io
0.06802593 ETH
185331302023-11-09 8:15:23406 days ago1699517723
Plagueinc.io
0.03660204 ETH
185331132023-11-09 8:11:59406 days ago1699517519
Plagueinc.io
0.03775757 ETH
185330862023-11-09 8:06:35406 days ago1699517195
Plagueinc.io
0.0875492 ETH
185330162023-11-09 7:52:35406 days ago1699516355
Plagueinc.io
0.115 ETH
185329962023-11-09 7:48:23406 days ago1699516103
Plagueinc.io
0.12943269 ETH
185329802023-11-09 7:45:11406 days ago1699515911
Plagueinc.io
0.20037905 ETH
185329582023-11-09 7:40:47407 days ago1699515647
Plagueinc.io
0.20357531 ETH
185329192023-11-09 7:32:59407 days ago1699515179
Plagueinc.io
1.74216363 ETH
182063522023-09-24 14:48:35452 days ago1695566915
Plagueinc.io
0.00818752 ETH
182060902023-09-24 13:55:47452 days ago1695563747
Plagueinc.io
0.22619458 ETH
182059912023-09-24 13:35:47452 days ago1695562547
Plagueinc.io
0.19832836 ETH
118840302021-02-19 0:24:071400 days ago1613694247
Plagueinc.io
0.0162481 ETH
117742872021-02-02 3:04:331417 days ago1612235073
Plagueinc.io
0.34458143 ETH
117742002021-02-02 2:47:371417 days ago1612234057
Plagueinc.io
0.34593818 ETH
117741722021-02-02 2:40:391417 days ago1612233639
Plagueinc.io
0.05150884 ETH
117741452021-02-02 2:35:511417 days ago1612233351
Plagueinc.io
0.03659204 ETH
117740902021-02-02 2:26:241417 days ago1612232784
Plagueinc.io
0.01695076 ETH
117740672021-02-02 2:21:231417 days ago1612232483
Plagueinc.io
0.48699557 ETH
117740352021-02-02 2:13:351417 days ago1612232015
Plagueinc.io
0.70530859 ETH
117739992021-02-02 2:05:381417 days ago1612231538
Plagueinc.io
0.0361838 ETH
117739552021-02-02 1:55:491417 days ago1612230949
Plagueinc.io
0.16691441 ETH
117697232021-02-01 10:16:271417 days ago1612174587
Plagueinc.io
13.84253552 ETH
117696732021-02-01 10:02:541417 days ago1612173774
Plagueinc.io
0.80450472 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Plague

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

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

pragma solidity ^0.4.24;
//================================================================================
//                            Plague Inc. <Grand prize>
// WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!!
//                     This game is easy for you to get rich.
//                           Please prepare enough ETH.
//                 If you have HEART DISEASE, PLEASE DON'T PLAY.
//       If you are Chinese or American, please don't play. YOU ARE TOO RICH.
// 
// Plague Inc. , which is abbreviated as PIC by players.
// is developed by a well-known games company who put a lot of effort into R&D.
// One evening, our producer had a hands-on experience on FOMO3D.
// and he was really annoyed by the "unreasonable" numerical settings in FOMO3D.
// He said: "We can make a better one!"
// So we made a better one. ^v^
// 
// # It takes less time for investors to get back their capital, while making more
//   profit (51% for investor dividends).
// # Introducers can get a high return of 10% (effective in the long term).
// # A lot of investors suffered losses in FOMO3D Quick, which is solved perfectly
//   by Plague Inc.
// # A total of 11 players will share the grand prize, you don’t have to be the
//   last one.
// # Better numerical and time setup, no worries about being in trouble.
// 
//                     ©2030 Plague Inc. All Rights Reserved.
//                                www.plagueinc.io
//                Memorial Bittorrent, eDonkey, eMule. Embrace IPFS
//                        Blockchain will change the world.
//================================================================================
library SafeMath {
    function mul(uint256 a, uint256 b) 
        internal 
        pure 
        returns (uint256 c) 
    {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b, "SafeMath mul failed");
        return c;
    }

    function sub(uint256 a, uint256 b)
        internal
        pure
        returns (uint256) 
    {
        require(b <= a, "SafeMath sub failed");
        return a - b;
    }
    
    function add(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c) 
    {
        c = a + b;
        require(c >= a, "SafeMath add failed");
        return c;
    }
    
    function sqrt(uint256 x)
        internal
        pure
        returns (uint256 y) 
    {
        uint256 z = ((add(x,1)) / 2);
        y = x;
        while (z < y) 
        {
            y = z;
            z = ((add((x / z),z)) / 2);
        }
    }
    
    function sq(uint256 x)
        internal
        pure
        returns (uint256)
    {
        return (mul(x,x));
    }
    
    function pwr(uint256 x, uint256 y)
        internal 
        pure 
        returns (uint256)
    {
        if (x==0)
            return (0);
        else if (y==0)
            return (1);
        else 
        {
            uint256 z = x;
            for (uint256 i=1; i < y; i++)
                z = mul(z,x);
            return (z);
        }
    }
}

contract PlagueEvents {
	
	//infective person
    event onInfectiveStage
    (
        address indexed player,
        uint256 indexed rndNo,
        uint256 keys,
        uint256 eth,
        uint256 timeStamp,
		address indexed inveter
    );

    // become leader during second stage
    event onDevelopmentStage
    (
        address indexed player,
        uint256 indexed rndNo,
        uint256 eth,
        uint256 timeStamp,
		address indexed inveter
    );

    // award
    event onAward
    (
        address indexed player,
        uint256 indexed rndNo,
        uint256 eth,
        uint256 timeStamp
    );
}

contract Plague is PlagueEvents{
    using SafeMath for *;
    using KeysCalc for uint256;

    struct Round {
        uint256 eth;                // total eth
        uint256 keys;               // total keys
        uint256 startTime;          // start time
        uint256 endTime;            // end time
        uint256 infectiveEndTime;   // infective end time
        address leader;             // leader
        address infectLastPlayer;   // the player will award 10% eth
        address [11] lastInfective;  // the lastest 11 infective
        address [4] loseInfective;  // the lose infective
        bool [11] infectiveAward_m; //
        uint256 totalInfective;     // the count of this round
        uint256 inveterAmount;      // remain inveter amount of this round
        uint256 lastRoundReward;    // last round remain eth 10% + eth 4% - inveterAmount + last remain award
        uint256 exAward;            // development award
    }

    struct PlayerRound {
        uint256 eth;        // eth player has added to round
        uint256 keys;       // keys
        uint256 withdraw;   // how many eth has been withdraw
        uint256 getInveterAmount; // inverter amount
        uint256 hasGetAwardAmount;  // player has get award amount
    }

    uint256 public rndNo = 1;                                   // current round number
    uint256 public totalEth = 0;                                // total eth in all round

    uint256 constant private rndInfectiveStage_ = 12 hours;          // round timer at infective stage 12 hours;
    uint256 constant private rndInfectiveReadyTime_ = 30 minutes;      // round timer at infective stage ready time
    uint256 constant private rndDevelopmentStage_ = 15 minutes;       // round timer at development stage 30 minutes; 
    uint256 constant private rndDevelopmentReadyTime_ = 12 hours;       // round timer at development stage ready time 1 hours;
    uint256 constant private allKeys_ = 15000000 * (10 ** 18);   // all keys count
    uint256 constant private allEths_ = 18703123828125000000000; // all eths count
    uint256 constant private rndIncreaseTime_ = 3 hours;       // increase time 3 hours
    uint256 constant private developmentAwardPercent = 1;   // 0.1% reduction every 3 hours

    mapping (uint256 => Round) public round_m;                  // (rndNo => Round)
    mapping (uint256 => mapping (address => PlayerRound)) public playerRound_m;   // (rndNo => addr => PlayerRound)

    address public owner;               // owner address
    address public receiver = address(0);            // receive eth address
    uint256 public ownerWithdraw = 0;   // how many eth has been withdraw by owner
    bool public isStartGame = false;    // start game flag

    constructor()
        public
    {
        owner = msg.sender;
    }

    /**
     * @dev prevents contracts from interacting
     */
    modifier onlyHuman() 
    {
        address _addr = msg.sender;
        uint256 _codeLength;
        
        assembly {_codeLength := extcodesize(_addr)}
        require(_codeLength == 0, "sorry humans only");
        _;
    }
    
    /**
     * @dev sets boundaries for incoming tx 
     */
    modifier isWithinLimits(uint256 _eth) 
    {
        require(_eth >= 1000000000, "pocket lint: not a valid currency");
        require(_eth <= 100000000000000000000000, "no vitalik, no");
        _;    
    }

    /**
     * @dev only owner
     */
    modifier onlyOwner() 
    {
        require(owner == msg.sender, "only owner can do it");
        _;    
    }
    
    /**
     * @dev It must be human beings to call the function.
     */
    function isHuman(address _addr) private view returns (bool)
    {
        uint256 _codeLength;
        
        assembly {_codeLength := extcodesize(_addr)}
        return _codeLength == 0;
    }
   
   /**
	 * @dev player infect a person at current round
	 * 
	 */
    function buyKeys(address _inveter) private
    {
        uint256 _eth = msg.value;
        uint256 _now = now;
        uint256 _rndNo = rndNo;
        uint256 _ethUse = msg.value;

        if (_now > round_m[_rndNo].endTime)
        {
            require(round_m[_rndNo].endTime + rndDevelopmentReadyTime_ < _now, "we should wait some time");
            
            uint256 lastAwardEth = (round_m[_rndNo].eth.mul(14) / 100).sub(round_m[_rndNo].inveterAmount);
            
            if(round_m[_rndNo].totalInfective < round_m[_rndNo].lastInfective.length)
            {
                uint256 nextPlayersAward = round_m[_rndNo].lastInfective.length.sub(round_m[_rndNo].totalInfective);
                uint256 _totalAward = round_m[_rndNo].eth.mul(30) / 100;
                _totalAward = _totalAward.add(round_m[_rndNo].lastRoundReward);
                if(round_m[_rndNo].infectLastPlayer != address(0))
                {
                    lastAwardEth = lastAwardEth.add(nextPlayersAward.mul(_totalAward.mul(3)/100));
                }
                else
                {
                    lastAwardEth = lastAwardEth.add(nextPlayersAward.mul(_totalAward.mul(4)/100));
                }
            }
            
            _rndNo = _rndNo.add(1);
            rndNo = _rndNo;
            round_m[_rndNo].startTime = _now;
            round_m[_rndNo].endTime = _now + rndInfectiveStage_;
            round_m[_rndNo].totalInfective = 0;
            round_m[_rndNo].lastRoundReward = lastAwardEth;
        }

        // infective or second stage
        if (round_m[_rndNo].keys < allKeys_)
        {
            // infection stage
            uint256 _keys = (round_m[_rndNo].eth).keysRec(_eth);
            
            if (_keys.add(round_m[_rndNo].keys) >= allKeys_)
            {
                _keys = allKeys_.sub(round_m[_rndNo].keys);

                if (round_m[_rndNo].eth >= allEths_)
                {
                    _ethUse = 0;
                } 
                else {
                    _ethUse = (allEths_).sub(round_m[_rndNo].eth);
                }

                if (_eth > _ethUse)
                {
                    // refund
                    msg.sender.transfer(_eth.sub(_ethUse));
                } 
                else {
                    // fix
                    _ethUse = _eth;
                }
                // first stage is over, record current time
                round_m[_rndNo].infectiveEndTime = _now.add(rndInfectiveReadyTime_);
                round_m[_rndNo].endTime = _now.add(rndDevelopmentStage_).add(rndInfectiveReadyTime_);
                round_m[_rndNo].infectLastPlayer = msg.sender;
            }
            else
            {
                require (_keys >= 1 * 10 ** 19, "at least 10 thound people");
                round_m[_rndNo].endTime = _now + rndInfectiveStage_;
            }
            
            round_m[_rndNo].leader = msg.sender;

            // update playerRound
            playerRound_m[_rndNo][msg.sender].keys = _keys.add(playerRound_m[_rndNo][msg.sender].keys);
            playerRound_m[_rndNo][msg.sender].eth = _ethUse.add(playerRound_m[_rndNo][msg.sender].eth);

            // update round
            round_m[_rndNo].keys = _keys.add(round_m[_rndNo].keys);
            round_m[_rndNo].eth = _ethUse.add(round_m[_rndNo].eth);

            // update global variable
            totalEth = _ethUse.add(totalEth);

            // event
            emit PlagueEvents.onInfectiveStage
            (
                msg.sender,
                _rndNo,
                _keys,
                _ethUse,
                _now,
				_inveter
            );
        } else {
            // second stage
            require(round_m[_rndNo].infectiveEndTime < _now, "The virus is being prepared...");
            
            // increase 0.05 Ether every 3 hours
            _ethUse = (((_now.sub(round_m[_rndNo].infectiveEndTime)) / rndIncreaseTime_).mul(5 * 10 ** 16)).add((5 * 10 ** 16));
            
            require(_eth >= _ethUse, "Ether amount is wrong");
            
            if(_eth > _ethUse)
            {
                msg.sender.transfer(_eth.sub(_ethUse));
            }

            round_m[_rndNo].endTime = _now + rndDevelopmentStage_;
            round_m[_rndNo].leader = msg.sender;

            // update playerRound
            playerRound_m[_rndNo][msg.sender].eth = _ethUse.add(playerRound_m[_rndNo][msg.sender].eth);

            // update round
            round_m[_rndNo].eth = _ethUse.add(round_m[_rndNo].eth);

            // update global variable
            totalEth = _ethUse.add(totalEth);
            
            // update development award
            uint256 _exAwardPercent = ((_now.sub(round_m[_rndNo].infectiveEndTime)) / rndIncreaseTime_).mul(developmentAwardPercent).add(developmentAwardPercent);
            if(_exAwardPercent >= 410)
            {
                _exAwardPercent = 410;
            }
            round_m[_rndNo].exAward = (_exAwardPercent.mul(_ethUse) / 1000).add(round_m[_rndNo].exAward);

            // event
            emit PlagueEvents.onDevelopmentStage
            (
                msg.sender,
                _rndNo,
                _ethUse,
                _now,
				_inveter
            );
        }
        
        // caculate share inveter amount
        if(_inveter != address(0) && isHuman(_inveter)) 
        {
            playerRound_m[_rndNo][_inveter].getInveterAmount = playerRound_m[_rndNo][_inveter].getInveterAmount.add(_ethUse.mul(10) / 100);
            round_m[_rndNo].inveterAmount = round_m[_rndNo].inveterAmount.add(_ethUse.mul(10) / 100);
        }
        
        round_m[_rndNo].loseInfective[round_m[_rndNo].totalInfective % 4] = round_m[_rndNo].lastInfective[round_m[_rndNo].totalInfective % 11];
        round_m[_rndNo].lastInfective[round_m[_rndNo].totalInfective % 11] = msg.sender;
        
        round_m[_rndNo].totalInfective = round_m[_rndNo].totalInfective.add(1);
    }
    
	/**
	 * @dev recommend a player
	 */
    function buyKeyByAddr(address _inveter)
        onlyHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        require(isStartGame == true, "The game hasn't started yet.");
        buyKeys(_inveter);
    }

    /**
     * @dev play
     */
    function()
        onlyHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        require(isStartGame == true, "The game hasn't started yet.");
        buyKeys(address(0));
    }
    
    /**
     * @dev Award by rndNo.
     * 0x80ec35ff
     * 0x80ec35ff0000000000000000000000000000000000000000000000000000000000000001
     */
    function awardByRndNo(uint256 _rndNo)
        onlyHuman()
        public
    {
        require(isStartGame == true, "The game hasn't started yet.");
        require(_rndNo <= rndNo, "You're running too fast");
        
        uint256 _ethOut = 0;
        uint256 _totalAward = round_m[_rndNo].eth.mul(30) / 100;
        _totalAward = _totalAward.add(round_m[_rndNo].lastRoundReward);
        _totalAward = _totalAward.add(round_m[_rndNo].exAward);
        uint256 _getAward = 0;
        
        //withdraw award
        uint256 _totalWithdraw = round_m[_rndNo].eth.mul(51) / 100;
        _totalWithdraw = _totalWithdraw.sub(round_m[_rndNo].exAward);
        _totalWithdraw = (_totalWithdraw.mul(playerRound_m[_rndNo][msg.sender].keys));
        _totalWithdraw = _totalWithdraw / round_m[_rndNo].keys;
        
        uint256 _inveterAmount = playerRound_m[_rndNo][msg.sender].getInveterAmount;
        _totalWithdraw = _totalWithdraw.add(_inveterAmount);
        uint256 _withdrawed = playerRound_m[_rndNo][msg.sender].withdraw;
        if(_totalWithdraw > _withdrawed)
        {
            _ethOut = _ethOut.add(_totalWithdraw.sub(_withdrawed));
            playerRound_m[_rndNo][msg.sender].withdraw = _totalWithdraw;
        }
        
         //lastest infect player
        if(msg.sender == round_m[_rndNo].infectLastPlayer && round_m[_rndNo].infectLastPlayer != address(0) && round_m[_rndNo].infectiveEndTime != 0)
        {
            _getAward = _getAward.add(_totalAward.mul(10)/100);
        }
        
        if(now > round_m[_rndNo].endTime)
        {
            // finally award
            if(round_m[_rndNo].leader == msg.sender)
            {
                _getAward = _getAward.add(_totalAward.mul(60)/100);
            }
            
            //finally ten person award
            for(uint256 i = 0;i < round_m[_rndNo].lastInfective.length; i = i.add(1))
            {
                if(round_m[_rndNo].lastInfective[i] == msg.sender && (round_m[_rndNo].totalInfective.sub(1) % 11) != i){
                    if(round_m[_rndNo].infectiveAward_m[i])
                        continue;
                    if(round_m[_rndNo].infectLastPlayer != address(0))
                    {
                        _getAward = _getAward.add(_totalAward.mul(3)/100);
                    }
                    else{
                        _getAward = _getAward.add(_totalAward.mul(4)/100);
                    }
                        
                    round_m[_rndNo].infectiveAward_m[i] = true;
                }
            }
        }
        _ethOut = _ethOut.add(_getAward.sub(playerRound_m[_rndNo][msg.sender].hasGetAwardAmount));
        playerRound_m[_rndNo][msg.sender].hasGetAwardAmount = _getAward;
        
        if(_ethOut != 0)
        {
            msg.sender.transfer(_ethOut); 
        }
        
        // event
        emit PlagueEvents.onAward
        (
            msg.sender,
            _rndNo,
            _ethOut,
            now
        );
    }
    
    /**
     * @dev Get player bonus data
     * 0xd982466d
     * 0xd982466d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000028f211f6c07d3b79e0aab886d56333e4027d4f59
     * @return player's award
     * @return player's can withdraw amount
     * @return player's inveter amount
     * @return player's has been withdraw
     */
    function getPlayerAwardByRndNo(uint256 _rndNo, address _playAddr)
        view
        public
        returns (uint256, uint256, uint256, uint256)
    {
        uint256 _ethPlayerAward = 0;
        
        //withdraw award
        uint256 _totalWithdraw = round_m[_rndNo].eth.mul(51) / 100;
        _totalWithdraw = _totalWithdraw.sub(round_m[_rndNo].exAward);
        _totalWithdraw = (_totalWithdraw.mul(playerRound_m[_rndNo][_playAddr].keys));
        _totalWithdraw = _totalWithdraw / round_m[_rndNo].keys;
        
        uint256 _totalAward = round_m[_rndNo].eth.mul(30) / 100;
        _totalAward = _totalAward.add(round_m[_rndNo].lastRoundReward);
        _totalAward = _totalAward.add(round_m[_rndNo].exAward);
        
        //lastest infect player
        if(_playAddr == round_m[_rndNo].infectLastPlayer && round_m[_rndNo].infectLastPlayer != address(0) && round_m[_rndNo].infectiveEndTime != 0)
        {
            _ethPlayerAward = _ethPlayerAward.add(_totalAward.mul(10)/100);
        }
        
        if(now > round_m[_rndNo].endTime)
        {
            // finally award
            if(round_m[_rndNo].leader == _playAddr)
            {
                _ethPlayerAward = _ethPlayerAward.add(_totalAward.mul(60)/100);
            }
            
            //finally ten person award
            for(uint256 i = 0;i < round_m[_rndNo].lastInfective.length; i = i.add(1))
            {
                if(round_m[_rndNo].lastInfective[i] == _playAddr && (round_m[_rndNo].totalInfective.sub(1) % 11) != i)
                {
                    if(round_m[_rndNo].infectLastPlayer != address(0))
                    {
                        _ethPlayerAward = _ethPlayerAward.add(_totalAward.mul(3)/100);
                    }
                    else{
                        _ethPlayerAward = _ethPlayerAward.add(_totalAward.mul(4)/100);
                    }
                }
            }
        }
        
        
        return
        (
            _ethPlayerAward,
            _totalWithdraw,
            playerRound_m[_rndNo][_playAddr].getInveterAmount,
            playerRound_m[_rndNo][_playAddr].hasGetAwardAmount + playerRound_m[_rndNo][_playAddr].withdraw
        );
    }
    
    /**
     * @dev fee withdraw to receiver, everyone can do it.
     * 0x6561e6ba
     */
    function feeWithdraw()
        onlyHuman()
        public 
    {
        require(isStartGame == true, "The game hasn't started yet.");
        require(receiver != address(0), "The receiver address has not been initialized.");
        
        uint256 _total = (totalEth.mul(5) / (100));
        uint256 _withdrawed = ownerWithdraw;
        require(_total > _withdrawed, "No need to withdraw");
        ownerWithdraw = _total;
        receiver.transfer(_total.sub(_withdrawed));
    }
    
    /**
     * @dev start game
     * 0xd65ab5f2
     */
    function startGame()
        onlyOwner()
        public
    {
        require(isStartGame == false, "The game has already started!");
        
        round_m[1].startTime = now;
        round_m[1].endTime = now + rndInfectiveStage_;
        round_m[1].lastRoundReward = 0;
        isStartGame = true;
    }

    /**
     * @dev change owner.
     * 0x547e3f06000000000000000000000000695c7a3c1a27de4bb32cd812a8c2677e25f0b9d5
     */
    function changeReceiver(address newReceiver)
        onlyOwner()
        public
    {
        receiver = newReceiver;
    }

    /**
     * @dev returns all current round info needed for front end
     * 0x747dff42
     */
    function getCurrentRoundInfo()
        public 
        view 
        returns(uint256, uint256[2], uint256[3], address[2], uint256[6], address[11], address[4])
    {
        uint256 _rndNo = rndNo;
        uint256 _totalAwardAtRound = round_m[_rndNo].lastRoundReward.add(round_m[_rndNo].exAward).add(round_m[_rndNo].eth.mul(30) / 100);
        
        return (
            _rndNo,
            [round_m[_rndNo].eth, round_m[_rndNo].keys],
            [round_m[_rndNo].startTime, round_m[_rndNo].endTime, round_m[_rndNo].infectiveEndTime],
            [round_m[_rndNo].leader, round_m[_rndNo].infectLastPlayer],
            [getBuyPrice(), round_m[_rndNo].lastRoundReward, _totalAwardAtRound, round_m[_rndNo].inveterAmount, round_m[_rndNo].totalInfective % 11, round_m[_rndNo].exAward],
            round_m[_rndNo].lastInfective,
            round_m[_rndNo].loseInfective
        );
    }

    /**
     * @dev return the price buyer will pay for next 1 individual key during first stage.
     * 0x018a25e8
     * @return price for next key bought (in wei format)
     */
    function getBuyPrice()
        public 
        view 
        returns(uint256)
    {
        uint256 _rndNo = rndNo;
        uint256 _now = now;
        
        // start next round?
        if (_now > round_m[_rndNo].endTime)
        {
            return (750007031250000);
        }
        if (round_m[_rndNo].keys < allKeys_)
        {
            return ((round_m[_rndNo].keys.add(10000000000000000000)).ethRec(10000000000000000000));
        }
        if(round_m[_rndNo].keys >= allKeys_ && 
            round_m[_rndNo].infectiveEndTime != 0 && 
            round_m[_rndNo].infectLastPlayer != address(0) &&
            _now < round_m[_rndNo].infectiveEndTime)
        {
            return 5 * 10 ** 16;
        }
        if(round_m[_rndNo].keys >= allKeys_ && _now > round_m[_rndNo].infectiveEndTime)
        {
            // increase 0.05 Ether every 3 hours
            uint256 currentPrice = (((_now.sub(round_m[_rndNo].infectiveEndTime)) / rndIncreaseTime_).mul(5 * 10 ** 16)).add((5 * 10 ** 16));
            return currentPrice;
        }
        //second stage
        return (0);
    }
    
}

library KeysCalc {
    using SafeMath for *;
    /**
     * @dev calculates number of keys received given X eth 
     * @param _curEth current amount of eth in contract 
     * @param _newEth eth being spent
     * @return amount of ticket purchased
     */
    function keysRec(uint256 _curEth, uint256 _newEth)
        internal
        pure
        returns (uint256)
    {
        return(keys((_curEth).add(_newEth)).sub(keys(_curEth)));
    }
    
    /**
     * @dev calculates amount of eth received if you sold X keys 
     * @param _curKeys current amount of keys that exist 
     * @param _sellKeys amount of keys you wish to sell
     * @return amount of eth received
     */
    function ethRec(uint256 _curKeys, uint256 _sellKeys)
        internal
        pure
        returns (uint256)
    {
        return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys))));
    }

    /**
     * @dev calculates how many keys would exist with given an amount of eth
     * @param _eth eth "in contract"
     * @return number of keys that would exist
     */
    function keys(uint256 _eth) 
        internal
        pure
        returns(uint256)
    {
        return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000);
    }
    
    /**
     * @dev calculates how much eth would be in contract given a number of keys
     * @param _keys number of keys "in contract" 
     * @return eth that would exists
     */
    function eth(uint256 _keys) 
        internal
        pure
        returns(uint256)  
    {
        return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq());
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"getBuyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rndNo","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ownerWithdraw","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReceiver","type":"address"}],"name":"changeReceiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"feeWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentRoundInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256[2]"},{"name":"","type":"uint256[3]"},{"name":"","type":"address[2]"},{"name":"","type":"uint256[6]"},{"name":"","type":"address[11]"},{"name":"","type":"address[4]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"round_m","outputs":[{"name":"eth","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"startTime","type":"uint256"},{"name":"endTime","type":"uint256"},{"name":"infectiveEndTime","type":"uint256"},{"name":"leader","type":"address"},{"name":"infectLastPlayer","type":"address"},{"name":"totalInfective","type":"uint256"},{"name":"inveterAmount","type":"uint256"},{"name":"lastRoundReward","type":"uint256"},{"name":"exAward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rndNo","type":"uint256"}],"name":"awardByRndNo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"playerRound_m","outputs":[{"name":"eth","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"withdraw","type":"uint256"},{"name":"getInveterAmount","type":"uint256"},{"name":"hasGetAwardAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_inveter","type":"address"}],"name":"buyKeyByAddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"startGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_rndNo","type":"uint256"},{"name":"_playAddr","type":"address"}],"name":"getPlayerAwardByRndNo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isStartGame","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"receiver","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"player","type":"address"},{"indexed":true,"name":"rndNo","type":"uint256"},{"indexed":false,"name":"keys","type":"uint256"},{"indexed":false,"name":"eth","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"},{"indexed":true,"name":"inveter","type":"address"}],"name":"onInfectiveStage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"player","type":"address"},{"indexed":true,"name":"rndNo","type":"uint256"},{"indexed":false,"name":"eth","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"},{"indexed":true,"name":"inveter","type":"address"}],"name":"onDevelopmentStage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"player","type":"address"},{"indexed":true,"name":"rndNo","type":"uint256"},{"indexed":false,"name":"eth","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onAward","type":"event"}]

6080604052600160008181559081905560058054600160a060020a03191690556006556007805460ff1916905534801561003857600080fd5b5060048054600160a060020a031916331790556128518061005a6000396000f3006080604052600436106100e55763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461026d5780633c28308a146102945780633c3c9c23146102a95780634311de8f146102be578063547e3f06146102d35780636561e6ba146102f6578063747dff421461030b5780637e8ac5901461043e57806380ec35ff146104b65780638da5cb5b146104ce578063a05ce940146104ff578063c5960c291461054e578063d65ab5f214610562578063d982466d14610577578063e3aae11b146105c1578063f7260d3e146105ea575b33803b801561012c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612806833981519152604482015290519081900360640190fd5b34633b9aca008110156101af576040805160e560020a62461bcd02815260206004820152602160248201527f706f636b6574206c696e743a206e6f7420612076616c69642063757272656e6360448201527f7900000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b69152d02c7e14af6800000811115610211576040805160e560020a62461bcd02815260206004820152600e60248201527f6e6f20766974616c696b2c206e6f000000000000000000000000000000000000604482015290519081900360640190fd5b60075460ff16151560011461025e576040805160e560020a62461bcd02815260206004820152601c60248201526000805160206127e6833981519152604482015290519081900360640190fd5b61026860006105ff565b505050005b34801561027957600080fd5b50610282611120565b60408051918252519081900360200190f35b3480156102a057600080fd5b506102826112de565b3480156102b557600080fd5b506102826112e4565b3480156102ca57600080fd5b506102826112ea565b3480156102df57600080fd5b506102f4600160a060020a03600435166112f0565b005b34801561030257600080fd5b506102f4611381565b34801561031757600080fd5b50610320611574565b6040518088815260200187600260200280838360005b8381101561034e578181015183820152602001610336565b5050505090500186600360200280838360005b83811015610379578181015183820152602001610361565b5050505090500185600260200280838360005b838110156103a457818101518382015260200161038c565b5050505090500184600660200280838360005b838110156103cf5781810151838201526020016103b7565b5050505090500183600b60200280838360005b838110156103fa5781810151838201526020016103e2565b5050505090500182600460200280838360005b8381101561042557818101518382015260200161040d565b5050505090500197505050505050505060405180910390f35b34801561044a57600080fd5b5061045660043561177c565b604080519b8c5260208c019a909a528a8a019890985260608a01969096526080890194909452600160a060020a0392831660a0890152911660c087015260e086015261010085015261012084015261014083015251908190036101600190f35b3480156104c257600080fd5b506102f46004356117e2565b3480156104da57600080fd5b506104e3611dc3565b60408051600160a060020a039092168252519081900360200190f35b34801561050b57600080fd5b50610523600435600160a060020a0360243516611dd2565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6102f4600160a060020a0360043516611e0a565b34801561056e57600080fd5b506102f4611f92565b34801561058357600080fd5b5061059b600435600160a060020a03602435166120d7565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156105cd57600080fd5b506105d6612442565b604080519115158252519081900360200190f35b3480156105f657600080fd5b506104e361244b565b60008054808252600260205260408220600301543492429291849190819081908190819088111561083b5760008781526002602052604090206003015461a8c0018811610696576040805160e560020a62461bcd02815260206004820152601860248201527f77652073686f756c64207761697420736f6d652074696d650000000000000000604482015290519081900360640190fd5b6000878152600260205260409020601881015490546106da91906064906106c490600e63ffffffff61245a16565b8115156106cd57fe5b049063ffffffff6124d716565b600088815260026020526040902060170154909550600b11156107f65760008781526002602052604090206017015461071b90600b9063ffffffff6124d716565b60008881526002602052604090205490945060649061074190601e63ffffffff61245a16565b81151561074a57fe5b600089815260026020526040902060190154919004935061077290849063ffffffff61253716565b600088815260026020526040902060060154909350600160a060020a0316156107da576107d36107c660646107ae86600363ffffffff61245a16565b8115156107b757fe5b8791900463ffffffff61245a16565b869063ffffffff61253716565b94506107f6565b6107f36107c660646107ae86600463ffffffff61245a16565b94505b61080787600163ffffffff61253716565b600081815581815260026020819052604082209081018b905561a8c08b016003820155601781019190915560190186905596505b6000878152600260205260409020600101546a0c685fa11e01ec6f0000001115610be95760008781526002602052604090205461087e908a63ffffffff61259216565b6000888152600260205260409020600101549092506a0c685fa11e01ec6f000000906108b190849063ffffffff61253716565b10610a0d576000878152600260205260409020600101546108e4906a0c685fa11e01ec6f0000009063ffffffff6124d716565b6000888152600260205260409020549092506903f5e5fbdc485eafe2001161090f576000955061093c565b600087815260026020526040902054610939906903f5e5fbdc485eafe2009063ffffffff6124d716565b95505b8589111561098657336108fc6109588b8963ffffffff6124d716565b6040518115909202916000818181858888f19350505050158015610980573d6000803e3d6000fd5b5061098a565b8895505b61099c8861070863ffffffff61253716565b6000888152600260205260409020600401556109d26107086109c68a61038463ffffffff61253716565b9063ffffffff61253716565b60008881526002602052604090206003810191909155600601805473ffffffffffffffffffffffffffffffffffffffff191633179055610a87565b678ac7230489e80000821015610a6d576040805160e560020a62461bcd02815260206004820152601960248201527f6174206c656173742031302074686f756e642070656f706c6500000000000000604482015290519081900360640190fd5b600087815260026020526040902061a8c089016003909101555b6000878152600260209081526040808320600501805473ffffffffffffffffffffffffffffffffffffffff19163390811790915560038352818420908452909152902060010154610adf90839063ffffffff61253716565b60008881526003602090815260408083203384529091529020600181019190915554610b0c908790612537565b6000888152600360209081526040808320338452825280832093909355898252600290522060010154610b4690839063ffffffff61253716565b6000888152600260205260409020600181019190915554610b6e90879063ffffffff61253716565b600088815260026020526040902055600154610b9190879063ffffffff61253716565b60015560408051838152602081018890528082018a90529051600160a060020a038c1691899133917f6ba72b77342d975bcfca91896da50e2306b21fa4b34dc71d1beb12dbd6afc33b919081900360600190a4610eed565b6000878152600260205260409020600401548811610c51576040805160e560020a62461bcd02815260206004820152601e60248201527f546865207669727573206973206265696e672070726570617265642e2e2e0000604482015290519081900360640190fd5b610ca966b1a2bc2ec500006109c666b1a2bc2ec50000612a30610c93600260008e8152602001908152602001600020600401548e6124d790919063ffffffff16565b811515610c9c57fe5b049063ffffffff61245a16565b955085891015610d03576040805160e560020a62461bcd02815260206004820152601560248201527f457468657220616d6f756e742069732077726f6e670000000000000000000000604482015290519081900360640190fd5b85891115610d4957336108fc610d1f8b8963ffffffff6124d716565b6040518115909202916000818181858888f19350505050158015610d47573d6000803e3d6000fd5b505b60008781526002602090815260408083206103848c016003808301919091556005909101805473ffffffffffffffffffffffffffffffffffffffff191633908117909155908352818420908452909152902054610dad90879063ffffffff61253716565b6000888152600360209081526040808320338452825280832093909355898252600290522054610de490879063ffffffff61253716565b600088815260026020526040902055600154610e0790879063ffffffff61253716565b6001908155600088815260026020526040902060040154610e3e91906109c6908290612a3090610c93908e9063ffffffff6124d716565b905061019a8110610e4e575061019a5b6000878152600260205260409020601a0154610e8d906103e8610e77848a63ffffffff61245a16565b811515610e8057fe5b049063ffffffff61253716565b600088815260026020908152604091829020601a019290925580518881529182018a90528051600160a060020a038d16928a9233927f7cfc1da3c0c40e1670d11d884a3776eb3a8949e87b844c6dac43b5c9c3dc5f7e9281900390910190a45b600160a060020a038a1615801590610f095750610f098a6125cb565b1561100857610f766064610f2488600a63ffffffff61245a16565b811515610f2d57fe5b04600360008a815260200190815260200160002060008d600160a060020a0316600160a060020a031681526020019081526020016000206003015461253790919063ffffffff16565b6003600089815260200190815260200160002060008c600160a060020a0316600160a060020a0316815260200190815260200160002060030181905550610ff56064610fcc600a8961245a90919063ffffffff16565b811515610fd557fe5b60008a81526002602052604090206018015491900463ffffffff61253716565b6000888152600260205260409020601801555b60008781526002602052604090206017810154600790910190600b9006600b811061102f57fe5b015460008881526002602052604090206017810154600160a060020a03909216916012909101906003166004811061106357fe5b01805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560008781526002602052604090206017810154339160070190600b9006600b81106110b657fe5b01805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556000878152600260205260409020601701546110ff906001612537565b60009788526002602052604090972060170196909655505050505050505050565b60008054808252600260205260408220600301544290839082111561114e576602aa209ead3c5093506112d8565b6000838152600260205260409020600101546a0c685fa11e01ec6f00000011156111b5576000838152600260205260409020600101546111ae90678ac7230489e80000906111a2908263ffffffff61253716565b9063ffffffff6125d716565b93506112d8565b6000838152600260205260409020600101546a0c685fa11e01ec6f000000118015906111f1575060008381526002602052604090206004015415155b80156112165750600083815260026020526040902060060154600160a060020a031615155b8015611232575060008381526002602052604090206004015482105b156112465766b1a2bc2ec5000093506112d8565b6000838152600260205260409020600101546a0c685fa11e01ec6f00000011801590611282575060008381526002602052604090206004015482115b156112d3576112c966b1a2bc2ec500006109c666b1a2bc2ec50000612a30610c93600260008a815260200190815260200160002060040154886124d790919063ffffffff16565b90508093506112d8565b600093505b50505090565b60005481565b60015481565b60065481565b600454600160a060020a03163314611352576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79206f776e65722063616e20646f206974000000000000000000000000604482015290519081900360640190fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008033803b80156113cb576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612806833981519152604482015290519081900360640190fd5b60075460ff161515600114611418576040805160e560020a62461bcd02815260206004820152601c60248201526000805160206127e6833981519152604482015290519081900360640190fd5b600554600160a060020a031615156114a0576040805160e560020a62461bcd02815260206004820152602e60248201527f546865207265636569766572206164647265737320686173206e6f742062656560448201527f6e20696e697469616c697a65642e000000000000000000000000000000000000606482015290519081900360840190fd5b6001546064906114b790600563ffffffff61245a16565b8115156114c057fe5b04935060065492508284111515611521576040805160e560020a62461bcd02815260206004820152601360248201527f4e6f206e65656420746f20776974686472617700000000000000000000000000604482015290519081900360640190fd5b6006849055600554600160a060020a03166108fc611545868663ffffffff6124d716565b6040518115909202916000818181858888f1935050505015801561156d573d6000803e3d6000fd5b5050505050565b600061157e61274d565b611586612768565b61158e61274d565b611596612787565b61159e6127a6565b6115a66127c6565b6000805480825260026020526040822054909190611608906064906115d290601e63ffffffff61245a16565b8115156115db57fe5b6000858152600260205260409020601a81015460199091015492909104916109c69163ffffffff61253716565b604080518082018252600085815260026020818152848320805485526001810154828601528551606081018752818401548152600382015481840152600482015481880152865180880188526005830154600160a060020a039081168252958b905293835260069091015490931690820152835160c081019094529394508593919290919080611696611120565b815260008881526002602081815260408084206019810154838701528186018c9052601881015460608701526017810154600b908190066080880152601a82015460a090970196909652938c905291905280516101608101918290526007830193601290930192909184919082845b8154600160a060020a0316815260019091019060200180831161170557505060408051608081019182905294965085935060049250905082845b8154600160a060020a0316815260019091019060200180831161173f57505050505090509850985098509850985098509850505090919293949596565b600260208190526000918252604090912080546001820154928201546003830154600484015460058501546006860154601787015460188801546019890154601a90990154979998969795969495600160a060020a03948516959390941693919290918b565b600080808080808033803b8015611831576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612806833981519152604482015290519081900360640190fd5b60075460ff16151560011461187e576040805160e560020a62461bcd02815260206004820152601c60248201526000805160206127e6833981519152604482015290519081900360640190fd5b6000548a11156118d8576040805160e560020a62461bcd02815260206004820152601760248201527f596f752772652072756e6e696e6720746f6f2066617374000000000000000000604482015290519081900360640190fd5b60008a8152600260205260408120549099506064906118fe90601e63ffffffff61245a16565b81151561190757fe5b60008c815260026020526040902060190154919004985061192f90899063ffffffff61253716565b60008b8152600260205260409020601a015490985061195590899063ffffffff61253716565b60008b815260026020526040812054919950975060649061197d90603363ffffffff61245a16565b81151561198657fe5b60008c8152600260205260409020601a015491900496506119ae90879063ffffffff6124d716565b60008b81526003602090815260408083203384529091529020600101549096506119df90879063ffffffff61245a16565b60008b815260026020526040902060010154909650868115156119fe57fe5b60008c8152600360208181526040808420338552909152909120015491900496509450611a31868663ffffffff61253716565b60008b8152600360209081526040808320338452909152902060020154909650935083861115611a9d57611a7b611a6e878663ffffffff6124d716565b8a9063ffffffff61253716565b60008b8152600360209081526040808320338452909152902060020187905598505b60008a815260026020526040902060060154600160a060020a031633148015611adf575060008a815260026020526040902060060154600160a060020a031615155b8015611afb575060008a81526002602052604090206004015415155b15611b3157611b2e6064611b168a600a63ffffffff61245a16565b811515611b1f57fe5b8991900463ffffffff61253716565b96505b60008a815260026020526040902060030154421115611cf15760008a815260026020526040902060050154600160a060020a0316331415611b8557611b826064611b168a603c63ffffffff61245a16565b96505b600092505b60008a90526002602052600b831015611cf15760008a8152600260205260409020339060070184600b8110611bbb57fe5b0154600160a060020a0316148015611c03575060008a8152600260205260409020601701548390600b90611bf690600163ffffffff6124d716565b811515611bff57fe5b0614155b15611cd95760008a815260026020526040902060160183600b8110611c2457fe5b602081049091015460ff601f9092166101000a90041615611c4457611cd9565b60008a815260026020526040902060060154600160a060020a031615611c8157611c7a6064611b168a600363ffffffff61245a16565b9650611c9a565b611c976064611b168a600463ffffffff61245a16565b96505b60008a815260026020526040902060019060160184600b8110611cb957fe5b602091828204019190066101000a81548160ff0219169083151502179055505b611cea83600163ffffffff61253716565b9250611b8a565b60008a8152600360209081526040808320338452909152902060040154611d2390611a6e90899063ffffffff6124d716565b60008b8152600360209081526040808320338452909152902060040188905598508815611d795760405133908a156108fc02908b906000818181858888f19350505050158015611d77573d6000803e3d6000fd5b505b604080518a815242602082015281518c9233927f067aa1d7e7bd2c0daf878a68551cbd9e1a4dbaaa1510600154c71bffbe420d86929081900390910190a350505050505050505050565b600454600160a060020a031681565b600360208181526000938452604080852090915291835291208054600182015460028301549383015460049093015491939092909185565b33803b8015611e51576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612806833981519152604482015290519081900360640190fd5b34633b9aca00811015611ed4576040805160e560020a62461bcd02815260206004820152602160248201527f706f636b6574206c696e743a206e6f7420612076616c69642063757272656e6360448201527f7900000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b69152d02c7e14af6800000811115611f36576040805160e560020a62461bcd02815260206004820152600e60248201527f6e6f20766974616c696b2c206e6f000000000000000000000000000000000000604482015290519081900360640190fd5b60075460ff161515600114611f83576040805160e560020a62461bcd02815260206004820152601c60248201526000805160206127e6833981519152604482015290519081900360640190fd5b611f8c846105ff565b50505050565b600454600160a060020a03163314611ff4576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79206f776e65722063616e20646f206974000000000000000000000000604482015290519081900360640190fd5b60075460ff161561204f576040805160e560020a62461bcd02815260206004820152601d60248201527f5468652067616d652068617320616c7265616479207374617274656421000000604482015290519081900360640190fd5b600160008181526002602052427fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e281905561a8c0017fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e3557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2f9556007805460ff19169091179055565b600082815260026020526040812054819081908190819081908190819060649061210890603363ffffffff61245a16565b81151561211157fe5b60008c8152600260205260409020601a0154919004935061213990849063ffffffff6124d716565b60008b8152600360209081526040808320600160a060020a038e16845290915290206001015490935061217390849063ffffffff61245a16565b60008b8152600260205260409020600101549093508381151561219257fe5b60008c81526002602052604090205491900493506064906121ba90601e63ffffffff61245a16565b8115156121c357fe5b60008c81526002602052604090206019015491900492506121eb90839063ffffffff61253716565b60008b8152600260205260409020601a015490925061221190839063ffffffff61253716565b60008b815260026020526040902060060154909250600160a060020a038a81169116148015612259575060008a815260026020526040902060060154600160a060020a031615155b8015612275575060008a81526002602052604090206004015415155b156122ab576122a8606461229084600a63ffffffff61245a16565b81151561229957fe5b8691900463ffffffff61253716565b93505b60008a8152600260205260409020600301544211156123fb5760008a815260026020526040902060050154600160a060020a038a811691161415612302576122ff606461229084603c63ffffffff61245a16565b93505b5060005b60008a90526002602052600b8110156123fb5760008a8152600260205260409020600160a060020a038a169060070182600b811061234057fe5b0154600160a060020a0316148015612388575060008a8152600260205260409020601701548190600b9061237b90600163ffffffff6124d716565b81151561238457fe5b0614155b156123e35760008a815260026020526040902060060154600160a060020a0316156123ca576123c3606461229084600363ffffffff61245a16565b93506123e3565b6123e0606461229084600463ffffffff61245a16565b93505b6123f481600163ffffffff61253716565b9050612306565b50506000978852600360208181526040808b20600160a060020a039a909a168b52989052969097209586015460028701546004909701549198909691909101945092505050565b60075460ff1681565b600554600160a060020a031681565b600082151561246b575060006124d1565b5081810281838281151561247b57fe5b04146124d1576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b600082821115612531576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b818101828110156124d1576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b60006125c46125a0846125fd565b6125b86125b3868663ffffffff61253716565b6125fd565b9063ffffffff6124d716565b9392505050565b803b8015905b50919050565b60006125c46125f46125ef858563ffffffff6124d716565b612681565b6125b885612681565b60006309502f906126716d03b2a1d15167e7c5699bfde000006125b861266c7a0dac7055469777a6122ee4310dd6c14410500f29048400000000006109c66b01027e72f1f12813088000006126608a670de0b6b3a764000063ffffffff61245a16565b9063ffffffff61245a16565b6126ee565b81151561267a57fe5b0492915050565b6000612694670de0b6b3a7640000612741565b61267160026126c76126b486670de0b6b3a764000063ffffffff61245a16565b65886c8f6730709063ffffffff61245a16565b8115156126d057fe5b046109c66126dd86612741565b6304a817c89063ffffffff61245a16565b60008060026126fe846001612537565b81151561270757fe5b0490508291505b818110156125d1578091506002612730828581151561272957fe5b0483612537565b81151561273957fe5b04905061270e565b60006124d1828361245a565b60408051808201825290600290829080388339509192915050565b6060604051908101604052806003906020820280388339509192915050565b60c0604051908101604052806006906020820280388339509192915050565b61016060405190810160405280600b906020820280388339509192915050565b608060405190810160405280600490602082028038833950919291505056005468652067616d65206861736e27742073746172746564207965742e00000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820e05d60b44ce490bd187fac60c4d67dae3a62e78c4ce111a796f41a77c5fd93e70029

Deployed Bytecode

0x6080604052600436106100e55763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461026d5780633c28308a146102945780633c3c9c23146102a95780634311de8f146102be578063547e3f06146102d35780636561e6ba146102f6578063747dff421461030b5780637e8ac5901461043e57806380ec35ff146104b65780638da5cb5b146104ce578063a05ce940146104ff578063c5960c291461054e578063d65ab5f214610562578063d982466d14610577578063e3aae11b146105c1578063f7260d3e146105ea575b33803b801561012c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612806833981519152604482015290519081900360640190fd5b34633b9aca008110156101af576040805160e560020a62461bcd02815260206004820152602160248201527f706f636b6574206c696e743a206e6f7420612076616c69642063757272656e6360448201527f7900000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b69152d02c7e14af6800000811115610211576040805160e560020a62461bcd02815260206004820152600e60248201527f6e6f20766974616c696b2c206e6f000000000000000000000000000000000000604482015290519081900360640190fd5b60075460ff16151560011461025e576040805160e560020a62461bcd02815260206004820152601c60248201526000805160206127e6833981519152604482015290519081900360640190fd5b61026860006105ff565b505050005b34801561027957600080fd5b50610282611120565b60408051918252519081900360200190f35b3480156102a057600080fd5b506102826112de565b3480156102b557600080fd5b506102826112e4565b3480156102ca57600080fd5b506102826112ea565b3480156102df57600080fd5b506102f4600160a060020a03600435166112f0565b005b34801561030257600080fd5b506102f4611381565b34801561031757600080fd5b50610320611574565b6040518088815260200187600260200280838360005b8381101561034e578181015183820152602001610336565b5050505090500186600360200280838360005b83811015610379578181015183820152602001610361565b5050505090500185600260200280838360005b838110156103a457818101518382015260200161038c565b5050505090500184600660200280838360005b838110156103cf5781810151838201526020016103b7565b5050505090500183600b60200280838360005b838110156103fa5781810151838201526020016103e2565b5050505090500182600460200280838360005b8381101561042557818101518382015260200161040d565b5050505090500197505050505050505060405180910390f35b34801561044a57600080fd5b5061045660043561177c565b604080519b8c5260208c019a909a528a8a019890985260608a01969096526080890194909452600160a060020a0392831660a0890152911660c087015260e086015261010085015261012084015261014083015251908190036101600190f35b3480156104c257600080fd5b506102f46004356117e2565b3480156104da57600080fd5b506104e3611dc3565b60408051600160a060020a039092168252519081900360200190f35b34801561050b57600080fd5b50610523600435600160a060020a0360243516611dd2565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6102f4600160a060020a0360043516611e0a565b34801561056e57600080fd5b506102f4611f92565b34801561058357600080fd5b5061059b600435600160a060020a03602435166120d7565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156105cd57600080fd5b506105d6612442565b604080519115158252519081900360200190f35b3480156105f657600080fd5b506104e361244b565b60008054808252600260205260408220600301543492429291849190819081908190819088111561083b5760008781526002602052604090206003015461a8c0018811610696576040805160e560020a62461bcd02815260206004820152601860248201527f77652073686f756c64207761697420736f6d652074696d650000000000000000604482015290519081900360640190fd5b6000878152600260205260409020601881015490546106da91906064906106c490600e63ffffffff61245a16565b8115156106cd57fe5b049063ffffffff6124d716565b600088815260026020526040902060170154909550600b11156107f65760008781526002602052604090206017015461071b90600b9063ffffffff6124d716565b60008881526002602052604090205490945060649061074190601e63ffffffff61245a16565b81151561074a57fe5b600089815260026020526040902060190154919004935061077290849063ffffffff61253716565b600088815260026020526040902060060154909350600160a060020a0316156107da576107d36107c660646107ae86600363ffffffff61245a16565b8115156107b757fe5b8791900463ffffffff61245a16565b869063ffffffff61253716565b94506107f6565b6107f36107c660646107ae86600463ffffffff61245a16565b94505b61080787600163ffffffff61253716565b600081815581815260026020819052604082209081018b905561a8c08b016003820155601781019190915560190186905596505b6000878152600260205260409020600101546a0c685fa11e01ec6f0000001115610be95760008781526002602052604090205461087e908a63ffffffff61259216565b6000888152600260205260409020600101549092506a0c685fa11e01ec6f000000906108b190849063ffffffff61253716565b10610a0d576000878152600260205260409020600101546108e4906a0c685fa11e01ec6f0000009063ffffffff6124d716565b6000888152600260205260409020549092506903f5e5fbdc485eafe2001161090f576000955061093c565b600087815260026020526040902054610939906903f5e5fbdc485eafe2009063ffffffff6124d716565b95505b8589111561098657336108fc6109588b8963ffffffff6124d716565b6040518115909202916000818181858888f19350505050158015610980573d6000803e3d6000fd5b5061098a565b8895505b61099c8861070863ffffffff61253716565b6000888152600260205260409020600401556109d26107086109c68a61038463ffffffff61253716565b9063ffffffff61253716565b60008881526002602052604090206003810191909155600601805473ffffffffffffffffffffffffffffffffffffffff191633179055610a87565b678ac7230489e80000821015610a6d576040805160e560020a62461bcd02815260206004820152601960248201527f6174206c656173742031302074686f756e642070656f706c6500000000000000604482015290519081900360640190fd5b600087815260026020526040902061a8c089016003909101555b6000878152600260209081526040808320600501805473ffffffffffffffffffffffffffffffffffffffff19163390811790915560038352818420908452909152902060010154610adf90839063ffffffff61253716565b60008881526003602090815260408083203384529091529020600181019190915554610b0c908790612537565b6000888152600360209081526040808320338452825280832093909355898252600290522060010154610b4690839063ffffffff61253716565b6000888152600260205260409020600181019190915554610b6e90879063ffffffff61253716565b600088815260026020526040902055600154610b9190879063ffffffff61253716565b60015560408051838152602081018890528082018a90529051600160a060020a038c1691899133917f6ba72b77342d975bcfca91896da50e2306b21fa4b34dc71d1beb12dbd6afc33b919081900360600190a4610eed565b6000878152600260205260409020600401548811610c51576040805160e560020a62461bcd02815260206004820152601e60248201527f546865207669727573206973206265696e672070726570617265642e2e2e0000604482015290519081900360640190fd5b610ca966b1a2bc2ec500006109c666b1a2bc2ec50000612a30610c93600260008e8152602001908152602001600020600401548e6124d790919063ffffffff16565b811515610c9c57fe5b049063ffffffff61245a16565b955085891015610d03576040805160e560020a62461bcd02815260206004820152601560248201527f457468657220616d6f756e742069732077726f6e670000000000000000000000604482015290519081900360640190fd5b85891115610d4957336108fc610d1f8b8963ffffffff6124d716565b6040518115909202916000818181858888f19350505050158015610d47573d6000803e3d6000fd5b505b60008781526002602090815260408083206103848c016003808301919091556005909101805473ffffffffffffffffffffffffffffffffffffffff191633908117909155908352818420908452909152902054610dad90879063ffffffff61253716565b6000888152600360209081526040808320338452825280832093909355898252600290522054610de490879063ffffffff61253716565b600088815260026020526040902055600154610e0790879063ffffffff61253716565b6001908155600088815260026020526040902060040154610e3e91906109c6908290612a3090610c93908e9063ffffffff6124d716565b905061019a8110610e4e575061019a5b6000878152600260205260409020601a0154610e8d906103e8610e77848a63ffffffff61245a16565b811515610e8057fe5b049063ffffffff61253716565b600088815260026020908152604091829020601a019290925580518881529182018a90528051600160a060020a038d16928a9233927f7cfc1da3c0c40e1670d11d884a3776eb3a8949e87b844c6dac43b5c9c3dc5f7e9281900390910190a45b600160a060020a038a1615801590610f095750610f098a6125cb565b1561100857610f766064610f2488600a63ffffffff61245a16565b811515610f2d57fe5b04600360008a815260200190815260200160002060008d600160a060020a0316600160a060020a031681526020019081526020016000206003015461253790919063ffffffff16565b6003600089815260200190815260200160002060008c600160a060020a0316600160a060020a0316815260200190815260200160002060030181905550610ff56064610fcc600a8961245a90919063ffffffff16565b811515610fd557fe5b60008a81526002602052604090206018015491900463ffffffff61253716565b6000888152600260205260409020601801555b60008781526002602052604090206017810154600790910190600b9006600b811061102f57fe5b015460008881526002602052604090206017810154600160a060020a03909216916012909101906003166004811061106357fe5b01805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560008781526002602052604090206017810154339160070190600b9006600b81106110b657fe5b01805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556000878152600260205260409020601701546110ff906001612537565b60009788526002602052604090972060170196909655505050505050505050565b60008054808252600260205260408220600301544290839082111561114e576602aa209ead3c5093506112d8565b6000838152600260205260409020600101546a0c685fa11e01ec6f00000011156111b5576000838152600260205260409020600101546111ae90678ac7230489e80000906111a2908263ffffffff61253716565b9063ffffffff6125d716565b93506112d8565b6000838152600260205260409020600101546a0c685fa11e01ec6f000000118015906111f1575060008381526002602052604090206004015415155b80156112165750600083815260026020526040902060060154600160a060020a031615155b8015611232575060008381526002602052604090206004015482105b156112465766b1a2bc2ec5000093506112d8565b6000838152600260205260409020600101546a0c685fa11e01ec6f00000011801590611282575060008381526002602052604090206004015482115b156112d3576112c966b1a2bc2ec500006109c666b1a2bc2ec50000612a30610c93600260008a815260200190815260200160002060040154886124d790919063ffffffff16565b90508093506112d8565b600093505b50505090565b60005481565b60015481565b60065481565b600454600160a060020a03163314611352576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79206f776e65722063616e20646f206974000000000000000000000000604482015290519081900360640190fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008033803b80156113cb576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612806833981519152604482015290519081900360640190fd5b60075460ff161515600114611418576040805160e560020a62461bcd02815260206004820152601c60248201526000805160206127e6833981519152604482015290519081900360640190fd5b600554600160a060020a031615156114a0576040805160e560020a62461bcd02815260206004820152602e60248201527f546865207265636569766572206164647265737320686173206e6f742062656560448201527f6e20696e697469616c697a65642e000000000000000000000000000000000000606482015290519081900360840190fd5b6001546064906114b790600563ffffffff61245a16565b8115156114c057fe5b04935060065492508284111515611521576040805160e560020a62461bcd02815260206004820152601360248201527f4e6f206e65656420746f20776974686472617700000000000000000000000000604482015290519081900360640190fd5b6006849055600554600160a060020a03166108fc611545868663ffffffff6124d716565b6040518115909202916000818181858888f1935050505015801561156d573d6000803e3d6000fd5b5050505050565b600061157e61274d565b611586612768565b61158e61274d565b611596612787565b61159e6127a6565b6115a66127c6565b6000805480825260026020526040822054909190611608906064906115d290601e63ffffffff61245a16565b8115156115db57fe5b6000858152600260205260409020601a81015460199091015492909104916109c69163ffffffff61253716565b604080518082018252600085815260026020818152848320805485526001810154828601528551606081018752818401548152600382015481840152600482015481880152865180880188526005830154600160a060020a039081168252958b905293835260069091015490931690820152835160c081019094529394508593919290919080611696611120565b815260008881526002602081815260408084206019810154838701528186018c9052601881015460608701526017810154600b908190066080880152601a82015460a090970196909652938c905291905280516101608101918290526007830193601290930192909184919082845b8154600160a060020a0316815260019091019060200180831161170557505060408051608081019182905294965085935060049250905082845b8154600160a060020a0316815260019091019060200180831161173f57505050505090509850985098509850985098509850505090919293949596565b600260208190526000918252604090912080546001820154928201546003830154600484015460058501546006860154601787015460188801546019890154601a90990154979998969795969495600160a060020a03948516959390941693919290918b565b600080808080808033803b8015611831576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612806833981519152604482015290519081900360640190fd5b60075460ff16151560011461187e576040805160e560020a62461bcd02815260206004820152601c60248201526000805160206127e6833981519152604482015290519081900360640190fd5b6000548a11156118d8576040805160e560020a62461bcd02815260206004820152601760248201527f596f752772652072756e6e696e6720746f6f2066617374000000000000000000604482015290519081900360640190fd5b60008a8152600260205260408120549099506064906118fe90601e63ffffffff61245a16565b81151561190757fe5b60008c815260026020526040902060190154919004985061192f90899063ffffffff61253716565b60008b8152600260205260409020601a015490985061195590899063ffffffff61253716565b60008b815260026020526040812054919950975060649061197d90603363ffffffff61245a16565b81151561198657fe5b60008c8152600260205260409020601a015491900496506119ae90879063ffffffff6124d716565b60008b81526003602090815260408083203384529091529020600101549096506119df90879063ffffffff61245a16565b60008b815260026020526040902060010154909650868115156119fe57fe5b60008c8152600360208181526040808420338552909152909120015491900496509450611a31868663ffffffff61253716565b60008b8152600360209081526040808320338452909152902060020154909650935083861115611a9d57611a7b611a6e878663ffffffff6124d716565b8a9063ffffffff61253716565b60008b8152600360209081526040808320338452909152902060020187905598505b60008a815260026020526040902060060154600160a060020a031633148015611adf575060008a815260026020526040902060060154600160a060020a031615155b8015611afb575060008a81526002602052604090206004015415155b15611b3157611b2e6064611b168a600a63ffffffff61245a16565b811515611b1f57fe5b8991900463ffffffff61253716565b96505b60008a815260026020526040902060030154421115611cf15760008a815260026020526040902060050154600160a060020a0316331415611b8557611b826064611b168a603c63ffffffff61245a16565b96505b600092505b60008a90526002602052600b831015611cf15760008a8152600260205260409020339060070184600b8110611bbb57fe5b0154600160a060020a0316148015611c03575060008a8152600260205260409020601701548390600b90611bf690600163ffffffff6124d716565b811515611bff57fe5b0614155b15611cd95760008a815260026020526040902060160183600b8110611c2457fe5b602081049091015460ff601f9092166101000a90041615611c4457611cd9565b60008a815260026020526040902060060154600160a060020a031615611c8157611c7a6064611b168a600363ffffffff61245a16565b9650611c9a565b611c976064611b168a600463ffffffff61245a16565b96505b60008a815260026020526040902060019060160184600b8110611cb957fe5b602091828204019190066101000a81548160ff0219169083151502179055505b611cea83600163ffffffff61253716565b9250611b8a565b60008a8152600360209081526040808320338452909152902060040154611d2390611a6e90899063ffffffff6124d716565b60008b8152600360209081526040808320338452909152902060040188905598508815611d795760405133908a156108fc02908b906000818181858888f19350505050158015611d77573d6000803e3d6000fd5b505b604080518a815242602082015281518c9233927f067aa1d7e7bd2c0daf878a68551cbd9e1a4dbaaa1510600154c71bffbe420d86929081900390910190a350505050505050505050565b600454600160a060020a031681565b600360208181526000938452604080852090915291835291208054600182015460028301549383015460049093015491939092909185565b33803b8015611e51576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612806833981519152604482015290519081900360640190fd5b34633b9aca00811015611ed4576040805160e560020a62461bcd02815260206004820152602160248201527f706f636b6574206c696e743a206e6f7420612076616c69642063757272656e6360448201527f7900000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b69152d02c7e14af6800000811115611f36576040805160e560020a62461bcd02815260206004820152600e60248201527f6e6f20766974616c696b2c206e6f000000000000000000000000000000000000604482015290519081900360640190fd5b60075460ff161515600114611f83576040805160e560020a62461bcd02815260206004820152601c60248201526000805160206127e6833981519152604482015290519081900360640190fd5b611f8c846105ff565b50505050565b600454600160a060020a03163314611ff4576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79206f776e65722063616e20646f206974000000000000000000000000604482015290519081900360640190fd5b60075460ff161561204f576040805160e560020a62461bcd02815260206004820152601d60248201527f5468652067616d652068617320616c7265616479207374617274656421000000604482015290519081900360640190fd5b600160008181526002602052427fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e281905561a8c0017fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e3557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2f9556007805460ff19169091179055565b600082815260026020526040812054819081908190819081908190819060649061210890603363ffffffff61245a16565b81151561211157fe5b60008c8152600260205260409020601a0154919004935061213990849063ffffffff6124d716565b60008b8152600360209081526040808320600160a060020a038e16845290915290206001015490935061217390849063ffffffff61245a16565b60008b8152600260205260409020600101549093508381151561219257fe5b60008c81526002602052604090205491900493506064906121ba90601e63ffffffff61245a16565b8115156121c357fe5b60008c81526002602052604090206019015491900492506121eb90839063ffffffff61253716565b60008b8152600260205260409020601a015490925061221190839063ffffffff61253716565b60008b815260026020526040902060060154909250600160a060020a038a81169116148015612259575060008a815260026020526040902060060154600160a060020a031615155b8015612275575060008a81526002602052604090206004015415155b156122ab576122a8606461229084600a63ffffffff61245a16565b81151561229957fe5b8691900463ffffffff61253716565b93505b60008a8152600260205260409020600301544211156123fb5760008a815260026020526040902060050154600160a060020a038a811691161415612302576122ff606461229084603c63ffffffff61245a16565b93505b5060005b60008a90526002602052600b8110156123fb5760008a8152600260205260409020600160a060020a038a169060070182600b811061234057fe5b0154600160a060020a0316148015612388575060008a8152600260205260409020601701548190600b9061237b90600163ffffffff6124d716565b81151561238457fe5b0614155b156123e35760008a815260026020526040902060060154600160a060020a0316156123ca576123c3606461229084600363ffffffff61245a16565b93506123e3565b6123e0606461229084600463ffffffff61245a16565b93505b6123f481600163ffffffff61253716565b9050612306565b50506000978852600360208181526040808b20600160a060020a039a909a168b52989052969097209586015460028701546004909701549198909691909101945092505050565b60075460ff1681565b600554600160a060020a031681565b600082151561246b575060006124d1565b5081810281838281151561247b57fe5b04146124d1576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b600082821115612531576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b818101828110156124d1576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b60006125c46125a0846125fd565b6125b86125b3868663ffffffff61253716565b6125fd565b9063ffffffff6124d716565b9392505050565b803b8015905b50919050565b60006125c46125f46125ef858563ffffffff6124d716565b612681565b6125b885612681565b60006309502f906126716d03b2a1d15167e7c5699bfde000006125b861266c7a0dac7055469777a6122ee4310dd6c14410500f29048400000000006109c66b01027e72f1f12813088000006126608a670de0b6b3a764000063ffffffff61245a16565b9063ffffffff61245a16565b6126ee565b81151561267a57fe5b0492915050565b6000612694670de0b6b3a7640000612741565b61267160026126c76126b486670de0b6b3a764000063ffffffff61245a16565b65886c8f6730709063ffffffff61245a16565b8115156126d057fe5b046109c66126dd86612741565b6304a817c89063ffffffff61245a16565b60008060026126fe846001612537565b81151561270757fe5b0490508291505b818110156125d1578091506002612730828581151561272957fe5b0483612537565b81151561273957fe5b04905061270e565b60006124d1828361245a565b60408051808201825290600290829080388339509192915050565b6060604051908101604052806003906020820280388339509192915050565b60c0604051908101604052806006906020820280388339509192915050565b61016060405190810160405280600b906020820280388339509192915050565b608060405190810160405280600490602082028038833950919291505056005468652067616d65206861736e27742073746172746564207965742e00000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820e05d60b44ce490bd187fac60c4d67dae3a62e78c4ce111a796f41a77c5fd93e70029

Swarm Source

bzzr://e05d60b44ce490bd187fac60c4d67dae3a62e78c4ce111a796f41a77c5fd93e7

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.