ETH Price: $3,195.79 (-0.19%)

Contract

0x9157494EcD62333B03C348eFA9E7a5Af03F87476
 

Overview

ETH Balance

3.852088907445866336 ETH

Eth Value

$12,310.49 (@ $3,195.79/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Gains72688372019-02-26 4:51:222085 days ago1551156682IN
0x9157494E...f03F87476
0 ETH0.000326857
Close Entry72688302019-02-26 4:50:362085 days ago1551156636IN
0x9157494E...f03F87476
0 ETH0.000827377
Buy Share72688232019-02-26 4:48:522085 days ago1551156532IN
0x9157494E...f03F87476
0.01 ETH0.0036056910
Init Race72688102019-02-26 4:43:002085 days ago1551156180IN
0x9157494E...f03F87476
0 ETH0.001114095
Withdraw Gains72687922019-02-26 4:36:202085 days ago1551155780IN
0x9157494E...f03F87476
0 ETH0.000280166
Close Entry72687872019-02-26 4:34:182085 days ago1551155658IN
0x9157494E...f03F87476
0 ETH0.000590985
Buy Share72687782019-02-26 4:31:322085 days ago1551155492IN
0x9157494E...f03F87476
0.01 ETH0.001872475
Init Race72687702019-02-26 4:29:422085 days ago1551155382IN
0x9157494E...f03F87476
0 ETH0.00133696
Change Block Tim...72687652019-02-26 4:27:472085 days ago1551155267IN
0x9157494E...f03F87476
0 ETH0.000169376
Withdraw Gains67751422018-11-26 8:23:032177 days ago1543220583IN
0x9157494E...f03F87476
0 ETH0.000248534.1
Withdraw Gains67577012018-11-23 12:08:412179 days ago1542974921IN
0x9157494E...f03F87476
0 ETH0.000369518.1
Buy Share67484582018-11-21 23:42:132181 days ago1542843733IN
0x9157494E...f03F87476
0.077 ETH0.000322213
Buy Share67484552018-11-21 23:42:032181 days ago1542843723IN
0x9157494E...f03F87476
0.077 ETH0.000322213
Withdraw Gains67439232018-11-21 5:49:312182 days ago1542779371IN
0x9157494E...f03F87476
0 ETH0.000136853
Withdraw Gains67415952018-11-20 20:47:462182 days ago1542746866IN
0x9157494E...f03F87476
0 ETH0.000370166
Withdraw Gains67391622018-11-20 11:03:212182 days ago1542711801IN
0x9157494E...f03F87476
0 ETH0.0004689810
Withdraw Gains67390412018-11-20 10:35:402183 days ago1542710140IN
0x9157494E...f03F87476
0 ETH0.0006072110
Withdraw Gains67379022018-11-20 6:00:212183 days ago1542693621IN
0x9157494E...f03F87476
0 ETH0.000432577
Withdraw Gains67372322018-11-20 3:22:492183 days ago1542684169IN
0x9157494E...f03F87476
0 ETH0.000228095
Withdraw Gains67371082018-11-20 2:53:182183 days ago1542682398IN
0x9157494E...f03F87476
0 ETH0.000140693
Withdraw Gains67370692018-11-20 2:44:382183 days ago1542681878IN
0x9157494E...f03F87476
0 ETH0.000207923.43
Withdraw Gains67366612018-11-20 1:09:542183 days ago1542676194IN
0x9157494E...f03F87476
0 ETH0.0003297
Withdraw Gains67366422018-11-20 1:05:122183 days ago1542675912IN
0x9157494E...f03F87476
0 ETH0.000247594
Withdraw Gains67366072018-11-20 0:58:002183 days ago1542675480IN
0x9157494E...f03F87476
0 ETH0.000286076.1
Withdraw Gains67364052018-11-20 0:06:432183 days ago1542672403IN
0x9157494E...f03F87476
0 ETH0.000185383
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
72688372019-02-26 4:51:222085 days ago1551156682
0x9157494E...f03F87476
0.23820156 ETH
72688302019-02-26 4:50:362085 days ago1551156636
0x9157494E...f03F87476
0.03903104 ETH
72688302019-02-26 4:50:362085 days ago1551156636
0x9157494E...f03F87476
0.01951552 ETH
72688232019-02-26 4:48:522085 days ago1551156532
0x9157494E...f03F87476
0.0005 ETH
72687922019-02-26 4:36:202085 days ago1551155780
0x9157494E...f03F87476
0.92758573 ETH
72687872019-02-26 4:34:182085 days ago1551155658
0x9157494E...f03F87476
0.1539303 ETH
72687872019-02-26 4:34:182085 days ago1551155658
0x9157494E...f03F87476
0.07696515 ETH
72687782019-02-26 4:31:322085 days ago1551155492
0x9157494E...f03F87476
0.0005 ETH
67751422018-11-26 8:23:032177 days ago1543220583
0x9157494E...f03F87476
0.02207404 ETH
67577012018-11-23 12:08:412179 days ago1542974921
0x9157494E...f03F87476
0.01103199 ETH
67439232018-11-21 5:49:312182 days ago1542779371
0x9157494E...f03F87476
0.08849729 ETH
67415952018-11-20 20:47:462182 days ago1542746866
0x9157494E...f03F87476
0.4286128 ETH
67391622018-11-20 11:03:212182 days ago1542711801
0x9157494E...f03F87476
0.61700444 ETH
67390412018-11-20 10:35:402183 days ago1542710140
0x9157494E...f03F87476
0.0498314 ETH
67379022018-11-20 6:00:212183 days ago1542693621
0x9157494E...f03F87476
0.38319918 ETH
67372322018-11-20 3:22:492183 days ago1542684169
0x9157494E...f03F87476
1.25823165 ETH
67371082018-11-20 2:53:182183 days ago1542682398
0x9157494E...f03F87476
0.20609052 ETH
67370692018-11-20 2:44:382183 days ago1542681878
0x9157494E...f03F87476
0.08884822 ETH
67366612018-11-20 1:09:542183 days ago1542676194
0x9157494E...f03F87476
0.35474132 ETH
67366422018-11-20 1:05:122183 days ago1542675912
0x9157494E...f03F87476
0.37636118 ETH
67366072018-11-20 0:58:002183 days ago1542675480
0x9157494E...f03F87476
1.5236745 ETH
67364052018-11-20 0:06:432183 days ago1542672403
0x9157494E...f03F87476
0.10371672 ETH
67359382018-11-19 22:15:592183 days ago1542665759
0x9157494E...f03F87476
0.71119886 ETH
67359352018-11-19 22:15:302183 days ago1542665730
0x9157494E...f03F87476
16.67040936 ETH
67359292018-11-19 22:13:402183 days ago1542665620
0x9157494E...f03F87476
5.98539029 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtherKnightGame

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

/*

Introducing "ETHERKNIGHT" our first HDX20 POWERED GAME running on the Ethereum Blockchain 
"ETHERKNIGHT" is playable @ http://etherknightgame.io

About the game :
4 Knight Characters racing against each other to be the first to reach the goal and win the pot of gold.

How to play ETHERKNIGHT:
The Race will start after at least 1 player has bought shares of any Knight Racer then for every new item activated
a 24H countdown will reset. At the end of the countdown, the players on the first Racer will share the Treasure and
everybody else will receive their payout (no one is leaving the table without values).
In addition, when you buy shares of your favorite Racer 5% of the price will buy you HDX20 Token earning you Ethereum
from the volume of any HDX20 POWERED GAMES (visit https://hdx20.io/ for details).
Please remember, at every new buy, the price of the share is increasing a little and so will be your payout even
if you are not the winner, buying shares at the beginning of the race is highly advised.

Play for the big WIN, Play for the TREASURE, Play for staking HDX20 TOKEN or Play for all at once...Your Choice!

We wish you Good Luck!

PAYOUTS DISTRIBUTION:
.60% to the winners of the race distributed proportionally to their shares.
.10% to the community of HDX20 gamers/holders distributed as price appreciation.
.5% to developer for running, developing and expanding the platform.
.25% for provisioning the TREASURE for the next Race.

This product is copyrighted. Any unauthorized copy, modification, or use without express written consent from HyperDevbox is prohibited.

Copyright 2018 HyperDevbox

*/


pragma solidity ^0.4.25;


interface HDX20Interface
{
    function() payable external;
    
    
    function buyTokenFromGame( address _customerAddress , address _referrer_address ) payable external returns(uint256);
  
    function payWithToken( uint256 _eth , address _player_address ) external returns(uint256);
  
    function appreciateTokenPrice() payable external;
   
    function totalSupply() external view returns(uint256); 
    
    function ethBalanceOf(address _customerAddress) external view returns(uint256);
  
    function balanceOf(address _playerAddress) external view returns(uint256);
    
    function sellingPrice( bool includeFees) external view returns(uint256);
  
}

contract EtherKnightGame
{
     HDX20Interface private HDXcontract = HDX20Interface(0x8942a5995bd168f347f7ec58f25a54a9a064f882);
     
     using SafeMath for uint256;
      using SafeMath128 for uint128;
     
     /*==============================
    =            EVENTS            =
    ==============================*/
    event OwnershipTransferred(
        
         address previousOwner,
         address nextOwner,
          uint256 timeStamp
         );
         
    event HDXcontractChanged(
        
         address previous,
         address next,
         uint256 timeStamp
         );
 
   
    
     event onWithdrawGains(
        address customerAddress,
        uint256 ethereumWithdrawn,
        uint256 timeStamp
    );
    
    event onNewRound(
        uint256       gRND,
        uint32        turnRound,
        uint32        eventType,
        uint32        eventTarget,
        uint32[4]     persoEnergy,
        uint32[4]     persoDistance,
        uint32[4]     powerUpSpeed,
        uint32[4]     powerUpShield,
        uint256       blockNumberTimeout,
        uint256       treasureAmountFind,
        address       customerAddress
        
       
       
    );
    
    
    event onNewRace(
        
        uint256 gRND,
        uint8[4] persoType,
        uint256  blockNumber
        
        );
        
    event onBuyShare(
        address     customerAddress,
        uint256     gRND,
        uint32      perso,
        uint256     nbToken,
        uint32      actionType,
        uint32      actionValue
        );    
        
        
     event onMaintenance(
        bool        mode,
        uint256     timeStamp

        );    
        
    event onRefund(
        address     indexed customerAddress,
        uint256     eth,
        uint256     timeStamp
         
        );   
        
    event onCloseEntry(
        
         uint256 gRND
         
        );    
        
    event onChangeBlockTimeAverage(
        
         uint256 blocktimeavg
         
        );    
        
    /*==============================
    =            MODIFIERS         =
    ==============================*/
    modifier onlyOwner
    {
        require (msg.sender == owner );
        _;
    }
    
    modifier onlyFromHDXToken
    {
        require (msg.sender == address( HDXcontract ));
        _;
    }
   
     modifier onlyDirectTransaction
    {
        require (msg.sender == tx.origin);
        _;
    }
   
   
     modifier isPlayer
    {
        require (PlayerData[ msg.sender].gRND !=0);
        _;
    }
    
    modifier isMaintenance
    {
        require (maintenanceMode==true);
        _;
    }
    
     modifier isNotMaintenance
    {
        require (maintenanceMode==false);
        _;
    }
   
    // Changing ownership of the contract safely
    address public owner;
  
    
   
    
     /// Contract governance.

    constructor () public
    {
        owner = msg.sender;
       
        
        if ( address(this).balance > 0)
        {
            owner.transfer( address(this).balance );
        }
    }
    
    function changeOwner(address _nextOwner) public
    onlyOwner
    {
        require (_nextOwner != owner);
        require(_nextOwner != address(0));
         
        emit OwnershipTransferred(owner, _nextOwner , now);
         
        owner = _nextOwner;
    }
    
    function changeHDXcontract(address _next) public
    onlyOwner
    {
        require (_next != address( HDXcontract ));
        require( _next != address(0));
         
        emit HDXcontractChanged(address(HDXcontract), _next , now);
         
        HDXcontract  = HDX20Interface( _next);
    }
  
  
    
    function changeBlockTimeAverage( uint256 blocktimeavg) public
    onlyOwner
    {
        require ( blocktimeavg>0 );
        
       
        blockTimeAverage = blocktimeavg;
        
        emit onChangeBlockTimeAverage( blockTimeAverage );
         
    }
    
    function enableMaintenance() public
    onlyOwner
    {
        maintenanceMode = true;
        
        emit onMaintenance( maintenanceMode , now);
        
    }

    function disableMaintenance() public
    onlyOwner
    {
        uint8[4] memory perso =[0,1,2,3];
        
        maintenanceMode = false;
        
        emit onMaintenance( maintenanceMode , now);
        
        //reset with a new race
        initRace( perso );
    }
    
  
    
    
   
    function refundMe() public
    isMaintenance
    {
        address _playerAddress = msg.sender;
         
        
      
        require( this_gRND>0 && GameRoundData[ this_gRND].extraData[0]>0 && GameRoundData[ this_gRND].extraData[0]<(1<<30) && PlayerData[ _playerAddress ].gRND==this_gRND);
        
        uint256 _eth = 0;

        for( uint i=0;i<4;i++)
        {
            _eth = _eth.add( PlayerGameRound[ _playerAddress][this_gRND].shares[i] * GameRoundData[ this_gRND].sharePrice);
            
            PlayerGameRound[ _playerAddress][this_gRND].shares[i] = 0;
        }
        
        if (_eth>0)
        {
               _playerAddress.transfer( _eth );  
               
               emit onRefund( _playerAddress , _eth , now );
        }
        
    }
    
     /*================================
    =       GAMES VARIABLES         =
    ================================*/
    
    struct PlayerData_s
    {
   
        uint256 chest;  
        uint256 payoutsTo;
        uint256 gRND;  
       
    }
    
    struct PlayerGameRound_s
    {
        uint256[4]      shares;
        uint128         treasure_payoutsTo;    
        uint128         token;
      
       
    }
    
    struct GameRoundData_s
    {
       uint256              blockNumber;
       uint256              blockNumberTimeout;
       uint256              sharePrice;
       uint256[4]           sharePots;
       uint256              shareEthBalance;
       uint256              shareSupply;
       uint256              treasureSupply;
       uint256              totalTreasureFound;
       uint256[6]           actionBlockNumber;
      
       uint128[4]           treasurePerShare; 
       uint32[8]            persoData; //energy[4] distance[4]
       uint32[8]            powerUpData; //Speed[4] Shield[4]
       
       uint32[6]            actionValue;
       
       uint32[6]            extraData;//[0]==this_TurnRound , [1]==winner , [2-5] totalPlayers
  
    }
    
  
   
    
 
    
   
    mapping (address => PlayerData_s)   private PlayerData;
    
   
    mapping (address => mapping (uint256 => PlayerGameRound_s)) private PlayerGameRound;
    
   
    mapping (uint256 => GameRoundData_s)   private GameRoundData;
    
   
    bool        private maintenanceMode=false;     
   
    uint256     private this_gRND =0;
  
 
  
  
    //85 , missing 15% for shares appreciation
    uint8 constant private HDX20BuyFees = 5;
    uint8 constant private TREASUREBuyFees = 40;
    uint8 constant private BUYPercentage = 40;
    
    
   
    uint8 constant private DevFees = 5;
    uint8 constant private TreasureFees = 25;
    uint8 constant private AppreciationFees = 10;
  
   
    uint256 constant internal magnitude = 1e18;
  
    uint256 private genTreasure = 0;
   
    uint256 constant private minimumSharePrice = 0.001 ether;
    
    uint256 private blockTimeAverage = 15;  //seconds per block                          
    
 
    uint8[4]    private this_Perso_Type;
    
   
      
    /*================================
    =       PUBLIC FUNCTIONS         =
    ================================*/
    
    //fallback will be called only from the HDX token contract to fund the game from customers's HDX20
    
     function()
     payable
     public
     onlyFromHDXToken 
    {
       
      
      
          
    }
    
    
    function ChargeTreasure() public payable
    {
        genTreasure = SafeMath.add( genTreasure , msg.value);     
    }
    
    
    function buyTreasureShares(GameRoundData_s storage  _GameRoundData , uint256 _eth ) private
    returns( uint256)
    {
        uint256 _nbshares = (_eth.mul( magnitude)) / _GameRoundData.sharePrice;
       
        _GameRoundData.treasureSupply = _GameRoundData.treasureSupply.add( _nbshares );
        
        _GameRoundData.shareSupply =   _GameRoundData.shareSupply.add( _nbshares );
        
        return( _nbshares);
    }
   
    
    function initRace( uint8[4] p ) public
    onlyOwner
    isNotMaintenance
    {
 
        
        this_gRND++;
        
        GameRoundData_s storage _GameRoundData = GameRoundData[ this_gRND ];
       
        for( uint i=0;i<4;i++)
        {
           this_Perso_Type[i] = p[i];
       
            _GameRoundData.persoData[i] = 100;
            _GameRoundData.persoData[4+i] = 25;
            
        }
       
        _GameRoundData.blockNumber = block.number;
        
        _GameRoundData.blockNumberTimeout = block.number + (360*10*24*3600); 
        
        uint256 _sharePrice = 0.001 ether; // minimumSharePrice;
        
        _GameRoundData.sharePrice = _sharePrice;
        
        uint256 _nbshares = buyTreasureShares(_GameRoundData, genTreasure );
     
        //convert into ETH
        _nbshares = _nbshares.mul( _sharePrice ) / magnitude;
        
        //start balance   
        _GameRoundData.shareEthBalance = _nbshares;
        
        genTreasure = genTreasure.sub( _nbshares);
     
       
        emit onNewRace( this_gRND , p , block.number);
        
    }
    
    
   
    function get_TotalPayout(  GameRoundData_s storage  _GameRoundData ) private view
    returns( uint256)
    {
      
       uint256 _payout = 0;
        
       uint256 _sharePrice = _GameRoundData.sharePrice;
     
       for(uint i=0;i<4;i++)
       {
           uint256 _bet = _GameRoundData.sharePots[i];
           
           _payout = _payout.add( _bet.mul (_sharePrice) / magnitude );
       }           
         
       uint256 _potValue = ((_GameRoundData.treasureSupply.mul( _sharePrice ) / magnitude).mul(100-DevFees-TreasureFees-AppreciationFees)) / 100;
       
       
       _payout = _payout.add( _potValue ).add(_GameRoundData.totalTreasureFound );
       
   
       return( _payout );
        
    }
    
    
  
    function get_PendingGains( address _player_address , uint256 _gRND, bool realmode) private view
    returns( uint256)
    {
       
       //did not play 
       if (PlayerData[ _player_address].gRND != _gRND || _gRND==0) return( 0 );
       
       GameRoundData_s storage  _GameRoundData = GameRoundData[ _gRND ];
       
       if (realmode && _GameRoundData.extraData[0] < (1<<30)) return( 0 ); 
       
       uint32 _winner = _GameRoundData.extraData[1];
       
       uint256 _gains = 0;
       uint256 _treasure = 0;
       uint256 _sharePrice = _GameRoundData.sharePrice;
       uint256 _shares;
       
       PlayerGameRound_s storage  _PlayerGameRound = PlayerGameRound[ _player_address][_gRND];
       
       for(uint i=0;i<4;i++)
       {
           _shares = _PlayerGameRound.shares[ i ];
            
           _gains = _gains.add( _shares.mul( _sharePrice) / magnitude );
        
           
           _treasure = _treasure.add(_shares.mul( _GameRoundData.treasurePerShare[ i ] ) / magnitude);
           
       }
       
        if (_treasure >=  _PlayerGameRound.treasure_payoutsTo) _treasure = _treasure.sub(_PlayerGameRound.treasure_payoutsTo );
       else _treasure = 0;
           
       _gains = _gains.add(_treasure );
       
       if (_winner>0)
       {
           _shares = _PlayerGameRound.shares[ _winner-1 ];
           
           if (_shares>0)
           {
              
               _treasure = ((_GameRoundData.treasureSupply.mul( _sharePrice ) / magnitude).mul(100-DevFees-TreasureFees-AppreciationFees)) / 100;
       
               
               _gains = _gains.add(  _treasure.mul( _shares ) / _GameRoundData.sharePots[ _winner-1]  );
               
           }
           
       }
    
       
        return( _gains );
        
    }
    
    
    
    //process the fees, hdx20 appreciation, calcul results at the end of the race
    function process_Taxes(  GameRoundData_s storage _GameRoundData ) private
    {
        uint32 turnround = _GameRoundData.extraData[0];
        
        if (turnround>0 && turnround<(1<<30))
        {  
            _GameRoundData.extraData[0] = turnround | (1<<30);
            
            uint256 _sharePrice = _GameRoundData.sharePrice;
             
            uint256 _potValue = _GameRoundData.treasureSupply.mul( _sharePrice ) / magnitude;
     
           
            uint256 _treasure = SafeMath.mul( _potValue , TreasureFees) / 100; 
            
            uint256 _appreciation = SafeMath.mul( _potValue , AppreciationFees) / 100; 
          
            uint256 _dev = SafeMath.mul( _potValue , DevFees) / 100;
           
            genTreasure = genTreasure.add( _treasure );
            
            //distribute devfees in hdx20 token
            if (_dev>0)
            {
                HDXcontract.buyTokenFromGame.value( _dev )( owner , address(0));
            }
            
            //distribute the profit to the token holders pure profit
            if (_appreciation>0 )
            {
               
                HDXcontract.appreciateTokenPrice.value( _appreciation )();
                
            }
            
          
            
            
        }
     
    }
    
    
    
    function BuyShareWithDividends( uint32 perso , uint256 eth , uint32 action, address _referrer_address ) public
    onlyDirectTransaction
    {
  
        require( maintenanceMode==false  && this_gRND>0 && (eth>=minimumSharePrice) && (eth <=100 ether) &&  perso<=3 && action <=5 && block.number <GameRoundData[ this_gRND ].blockNumberTimeout );
  
        address _customer_address = msg.sender;
        
        eth = HDXcontract.payWithToken( eth , _customer_address );
       
        require( eth>0 );
         
        CoreBuyShare( _customer_address , perso , eth , action , _referrer_address );
        
       
    }
    
    function BuyShare(   uint32 perso , uint32 action , address _referrer_address ) public payable
    onlyDirectTransaction
    {
     
         
        address _customer_address = msg.sender;
        uint256 eth = msg.value;
        
        require( maintenanceMode==false  && this_gRND>0 && (eth>=minimumSharePrice) &&(eth <=100 ether) && perso<=3 && action <=5 && block.number <GameRoundData[ this_gRND ].blockNumberTimeout);
   
         
        CoreBuyShare( _customer_address , perso , eth , action , _referrer_address);
     
    }
    
    /*================================
    =       CORE BUY FUNCTIONS       =
    ================================*/
    
    function CoreBuyShare( address _player_address , uint32 perso , uint256 eth , uint32 action ,  address _referrer_address ) private
    {
    
        PlayerGameRound_s storage  _PlayerGameRound = PlayerGameRound[ _player_address][ this_gRND];
        
        GameRoundData_s storage  _GameRoundData = GameRoundData[ this_gRND ];
        
      
        if (PlayerData[ _player_address].gRND != this_gRND)
        {
           
            if (PlayerData[_player_address].gRND !=0)
            {
                uint256 _gains = get_PendingGains( _player_address , PlayerData[ _player_address].gRND , true );
            
                 PlayerData[ _player_address].chest = PlayerData[ _player_address].chest.add( _gains);
            }
          
          
            PlayerData[ _player_address ].gRND = this_gRND;
           
   
        }
        
        //HDX20BuyFees
        uint256 _tempo = (eth.mul(HDX20BuyFees)) / 100;
        
        _GameRoundData.shareEthBalance =  _GameRoundData.shareEthBalance.add( eth-_tempo );  //minus the hdx20 fees
        
        uint256 _nb_token =   HDXcontract.buyTokenFromGame.value( _tempo )( _player_address , _referrer_address);
        
         //keep track for result UI screen how many token bought in this game round
        _PlayerGameRound.token += uint128(_nb_token);
        
        //increase the treasure shares
        buyTreasureShares(_GameRoundData , (eth.mul(TREASUREBuyFees)) / 100 );
   
        //what is left for the player
        eth = eth.mul( BUYPercentage) / 100;
        
        uint256 _nbshare =  (eth.mul( magnitude)) / _GameRoundData.sharePrice;
        
        _GameRoundData.shareSupply =  _GameRoundData.shareSupply.add( _nbshare );
        _GameRoundData.sharePots[ perso ] =  _GameRoundData.sharePots[ perso ].add( _nbshare);
        
        _tempo =  _PlayerGameRound.shares[ perso ];
        
        if (_tempo==0)
        {
            _GameRoundData.extraData[ 2+perso ]++; 
        }
        
        _PlayerGameRound.shares[ perso ] =  _tempo.add( _nbshare);
   
        //this will always raise the price after 1 share
        if (_GameRoundData.shareSupply>magnitude)
        {
            _GameRoundData.sharePrice = (_GameRoundData.shareEthBalance.mul( magnitude)) / _GameRoundData.shareSupply;
        }
       
       
        _PlayerGameRound.treasure_payoutsTo = _PlayerGameRound.treasure_payoutsTo.add( uint128(_nbshare.mul(   _GameRoundData.treasurePerShare[ perso ]  ) / magnitude) );
     
        
        uint32 actionValue = ApplyAction( perso , action , _nbshare , _player_address);
        
        _GameRoundData.actionValue[ action] = actionValue;
        
        emit onBuyShare( _player_address , this_gRND , perso , _nb_token , action, actionValue  );
                         
        
    }
    
     struct GameVar_s
    {
        uint32[4]   perso_energy;
        uint32[4]   perso_distance;
        uint32[4]   powerUpShield;
        uint32[4]   powerUpSpeed;
        
        uint32      event_type;
        uint32      event_target;
     
        uint32      winner;
        
        uint256     this_gRND;
        
        uint256     treasureAmountFind;
        
        bytes32     seed;
        
        uint256     blockNumberTimeout;
        
        uint32      turnround;
      
    }
    
    function actionPowerUpShield( uint32 perso , GameVar_s gamevar) pure private
    {
        
        gamevar.powerUpShield[ perso ] = 100;
        
    }
    
    function actionPowerUpSpeed( uint32 perso , GameVar_s gamevar) pure private
    {
        
        gamevar.powerUpSpeed[ perso ] = 100;
        
    }
    
   
    
    function actionApple( uint32 perso , GameVar_s gamevar) pure private
    {
        
        gamevar.event_type = 6;     //apple / banana etc...
        
        gamevar.event_target = 1<<(perso*3);
        
        gamevar.perso_energy[ perso ] += 20; 
        
        if (gamevar.perso_energy[ perso] > 150) gamevar.perso_energy[ perso ] = 150;
        
    }
    
    function actionBanana(  GameVar_s gamevar ) pure private
    {
        
        gamevar.event_type = 6;     //apple / banana etc...
        
        uint32 result = 2;
        
        uint32 target = get_modulo_value(gamevar.seed,18, 4);
        
        if (gamevar.winner>0) target = gamevar.winner-1;
    
        
        uint32 shield = uint32(gamevar.powerUpShield[ target ]);
        
        if (shield>20) result = 5; //jumping banana
        else
        {
                    uint32 dd = 4 * (101 - shield);
                                   
                  
                    
                    if (gamevar.perso_distance[ target ]>=dd)  gamevar.perso_distance[ target ] -= dd;
                    else  gamevar.perso_distance[ target ] = 0;
                    
        }
        
        gamevar.event_target = result<<(target*3);
        
       
        
    }
    
    function getTreasureProbabilityType( bytes32 seed ) private pure
    returns( uint32 )
    {
           uint8[22] memory this_TreasureProbability =[
    
        1,1,1,1,1,1,1,1,1,1,1,1,    //12 chances to have 10%
        2,2,2,2,2,2,                //6 chances to have 15%
        3,3,3,                      //3 chances to have 20%
        4                           //1 chance to have 25%
       
        ];       
        
        return( this_TreasureProbability[ get_modulo_value(seed,24, 22) ] );
    }
    
   
    
    function distribute_treasure( uint32 type2 , uint32 target , GameVar_s gamevar) private
    {
        uint8[5] memory this_TreasureValue =[
        
        1,
        10,
        15,
        20,
        25
      
        ];  
        
       
        uint256 _treasureSupply = GameRoundData[ gamevar.this_gRND].treasureSupply;
        uint256 _sharePrice = GameRoundData[ gamevar.this_gRND].sharePrice;
        uint256 _shareSupply = GameRoundData[ gamevar.this_gRND].shareSupply;
       
        //how many shares to sell
        uint256  _amount = _treasureSupply.mul(this_TreasureValue[ type2 ] )  / 100;
       
        GameRoundData[ gamevar.this_gRND].treasureSupply = _treasureSupply.sub( _amount );
        GameRoundData[ gamevar.this_gRND].shareSupply =  _shareSupply.sub( _amount );
        
        //in eth
        _amount = _amount.mul( _sharePrice ) / magnitude;
        
        //price of shares should not change
        GameRoundData[ gamevar.this_gRND].shareEthBalance =  GameRoundData[ gamevar.this_gRND].shareEthBalance.sub( _amount );
        
        gamevar.treasureAmountFind = _amount;
       
        GameRoundData[ gamevar.this_gRND].totalTreasureFound =   GameRoundData[ gamevar.this_gRND].totalTreasureFound.add( _amount );
       
        uint256 _shares = GameRoundData[ gamevar.this_gRND].sharePots[ target ];
    
        if (_shares>0)
        {
           
            GameRoundData[ gamevar.this_gRND].treasurePerShare[ target ] =  GameRoundData[ gamevar.this_gRND].treasurePerShare[ target ].add( uint128(((_amount.mul(magnitude)) / _shares)));
        }
        
    }
    
    function actionTreasure( uint32 perso, GameVar_s gamevar ) private
    {
        gamevar.event_target =  get_modulo_value(gamevar.seed,18,  14);
        gamevar.event_type = getTreasureProbabilityType( gamevar.seed );
                                                    
        if (gamevar.event_target==perso)
        {

                distribute_treasure( gamevar.event_type , gamevar.event_target, gamevar);
        }
        
       
    }
    
    function apply_attack( uint32 perso, uint32 target , GameVar_s gamevar) pure private
    {
        for(uint i=0;i<4;i++)
        {
            uint32 damage = (1+(target % 3)) * 10;
            
            uint32 shield = uint32(  gamevar.powerUpShield[i] );
            
            if (damage<= shield || i==perso) damage = 0;
            else damage -=  shield;
            
            if (damage<gamevar.perso_energy[i]) gamevar.perso_energy[i] -= damage;
            else gamevar.perso_energy[i] = 1;   //minimum
            
            target >>= 2;
            
        }
        
    }
    
    
    function actionAttack( uint32 perso , GameVar_s gamevar ) pure private
    {
            gamevar.event_type =  5; 
            gamevar.event_target = get_modulo_value(gamevar.seed,24,256);     //8 bits 4x2
            
            apply_attack( perso , gamevar.event_target , gamevar);    
    }
    
    function ApplyAction( uint32 perso ,  uint32 action , uint256 nbshare , address _player_address) private
    returns( uint32)
    {
        uint32 actionValue = GameRoundData[ this_gRND].actionValue[ action ];
        
        //only the last one is activating within the same block
        if (block.number<= GameRoundData[ this_gRND].actionBlockNumber[ action]) return( actionValue);
        
        GameVar_s memory gamevar;
          
        gamevar.turnround = GameRoundData[ this_gRND ].extraData[0];
        
        nbshare = nbshare.mul(100);
        nbshare /= magnitude;
      
        nbshare += 10;
        
        if (nbshare>5000) nbshare = 5000;
        
        actionValue += uint32( nbshare );
        
    
         uint16[6] memory actionPrice =[
        
        1000,   //apple
        4000,   //powerup shield
        5000,   //powerup speed 
        2000,   //chest
        1000,   //banana action
        3000   //attack
      
        ];  
        
        if (actionValue<actionPrice[action] && gamevar.turnround>0)
        {
           
            return( actionValue );
        }
        
        if (actionValue>=actionPrice[action])
        {
            GameRoundData[ this_gRND].actionBlockNumber[ action] = block.number;
             
            actionValue = 0;
        }
        else action = 100; //this is the first action
        
        gamevar.turnround++;
     
        
      
        
        gamevar.this_gRND = this_gRND;
        gamevar.winner = GameRoundData[ gamevar.this_gRND].extraData[1];
      
        
        uint i;
            
        for( i=0;i<4;i++)
        {
                gamevar.perso_energy[i] = GameRoundData[ gamevar.this_gRND].persoData[i];
                gamevar.perso_distance[i] = GameRoundData[ gamevar.this_gRND].persoData[4+i];
                gamevar.powerUpSpeed[i] = GameRoundData[ gamevar.this_gRND].powerUpData[i] / 2;
                gamevar.powerUpShield[i] = GameRoundData[ gamevar.this_gRND].powerUpData[4+i] / 2;
    
        }
        
        
        
        //a little boost for the fist action maker 
        if (gamevar.turnround==1) gamevar.perso_energy[ perso ] += 5;
        
        getSeed( gamevar);
    
      
        if (action==0) actionApple( perso , gamevar );
        if (action==1) actionPowerUpShield( perso , gamevar);
        if (action==2) actionPowerUpSpeed( perso , gamevar );
        if (action==3) actionTreasure( perso, gamevar);
        if (action==4) actionBanana(  gamevar);
        if (action==5) actionAttack( perso , gamevar);
        
        gamevar.event_type |= (perso<<16);

        uint32 CurrentWinnerXpos = 0; //gamevar.perso_distance[0]; //this.Racers[n].perso_distance;
       
        for( i=0; i<4;i++)
        {
      
                //tiredness
                gamevar.perso_energy[ i ] *= 95;
                gamevar.perso_energy[ i ] /= 100;
                
                                           
                uint32 spd1 =  (gamevar.perso_energy[ i ]*10) + (gamevar.powerUpSpeed[ i ]*10); 
                                       
                gamevar.perso_distance[ i ] = (  (gamevar.perso_distance[ i ]*95) + (spd1*100)  )/100; 
                         
               if (gamevar.perso_distance[i] > CurrentWinnerXpos)
               {
                   CurrentWinnerXpos = gamevar.perso_distance[i];
                   gamevar.winner = uint8(i);
               }
               
                GameRoundData[ gamevar.this_gRND].persoData[i] = gamevar.perso_energy[i];
                GameRoundData[ gamevar.this_gRND].persoData[4+i] = gamevar.perso_distance[i];
                GameRoundData[ gamevar.this_gRND].powerUpData[i] = gamevar.powerUpSpeed[i];
                GameRoundData[ gamevar.this_gRND].powerUpData[4+i] = gamevar.powerUpShield[i];
        
        }
         
        GameRoundData[ gamevar.this_gRND ].extraData[0] = gamevar.turnround;
        
        GameRoundData[ gamevar.this_gRND].extraData[1] = 1+gamevar.winner;
        
        gamevar.blockNumberTimeout = block.number + ((24*60*60) / blockTimeAverage);
        
        GameRoundData[ gamevar.this_gRND].blockNumberTimeout = gamevar.blockNumberTimeout;
        
    
        
        emitRound( gamevar , _player_address);
        
        return( actionValue );
    }
  
    function emitRound(GameVar_s gamevar , address _player_address) private
    {
           emit onNewRound(
            gamevar.this_gRND,   
            gamevar.turnround,
            gamevar.event_type,
            gamevar.event_target,
            gamevar.perso_energy,
            gamevar.perso_distance,
            gamevar.powerUpSpeed,
            gamevar.powerUpShield,
            gamevar.blockNumberTimeout,
            gamevar.treasureAmountFind,
            _player_address
           
        );
        
    }
   
    
    function get_Gains(address _player_address) private view
    returns( uint256)
    {
       
        uint256 _gains = PlayerData[ _player_address ].chest.add( get_PendingGains( _player_address , PlayerData[ _player_address].gRND , true) );
        
        if (_gains > PlayerData[ _player_address].payoutsTo)
        {
            _gains -= PlayerData[ _player_address].payoutsTo;
        }
        else _gains = 0;
     
    
        return( _gains );
        
    }
    
    
    function WithdrawGains() public 
    isPlayer
    {
        address _customer_address = msg.sender;
        
        uint256 _gains = get_Gains( _customer_address );
        
        require( _gains>0);
        
        PlayerData[ _customer_address ].payoutsTo = PlayerData[ _customer_address ].payoutsTo.add( _gains );
        
      
        emit onWithdrawGains( _customer_address , _gains , now);
        
        _customer_address.transfer( _gains );
        
        
    }
    
    function getSeed(GameVar_s gamevar) private view
   
    {
            uint256 _seed =  uint256( blockhash( block.number-1) );
            _seed ^= uint256( blockhash( block.number-2) );
            _seed ^= uint256(block.coinbase) / now;
            _seed += gamevar.perso_distance[0];
            _seed += gamevar.perso_distance[1];
            _seed += gamevar.perso_distance[2];
            _seed += gamevar.perso_distance[3];
            
            _seed += gasleft();
            
            gamevar.seed = keccak256(abi.encodePacked( _seed));
        
            
    }
    
    function CloseEntry() public
    onlyOwner
    isNotMaintenance
    {
    
        GameRoundData_s storage  _GameRoundData = GameRoundData[ this_gRND ];
         
        process_Taxes( _GameRoundData);
          
        emit onCloseEntry( this_gRND );
      
    }
    
   
    
    
    function get_probability( bytes32 seed ,  uint32 bytepos , uint32 percentage) pure private
    returns( bool )
    {
       uint32 v = uint32(seed[bytepos]);
       
       if (v<= ((255*percentage)/100)) return( true );
       else return( false );
     
    }
    
    function get_modulo_value( bytes32 seed , uint32 bytepos, uint32 mod) pure private
    returns( uint32 )
    {
      
        return( ((uint32(seed[ bytepos])*256)+(uint32(seed[ bytepos+1]))) % mod);
    }
    
  
    
  
  
    
     /*================================
    =  VIEW AND HELPERS FUNCTIONS    =
    ================================*/
  
    
    function view_get_Treasure() public
    view
    returns(uint256)
    {
      
      return( genTreasure);  
    }
 
    function view_get_gameData() public
    view
    returns( uint256 sharePrice, uint256[4] sharePots, uint256 shareSupply , uint256 shareEthBalance, uint128[4] treasurePerShare, uint32[4] totalPlayers , uint32[6] actionValue , uint256[4] shares , uint256 treasure_payoutsTo ,uint256 treasureSupply  )
    {
        address _player_address = msg.sender;
         
        sharePrice = GameRoundData[ this_gRND].sharePrice;
        sharePots = GameRoundData[ this_gRND].sharePots;
        shareSupply = GameRoundData[ this_gRND].shareSupply;
        shareEthBalance = GameRoundData[ this_gRND].shareEthBalance;
        treasurePerShare = GameRoundData[ this_gRND].treasurePerShare;
        
        treasureSupply = GameRoundData[ this_gRND].treasureSupply;
        
        uint32[4] memory totalPlayersm;
       
        totalPlayersm[0] = GameRoundData[ this_gRND].extraData[2];
        totalPlayersm[1] = GameRoundData[ this_gRND].extraData[3];
        totalPlayersm[2] = GameRoundData[ this_gRND].extraData[4];
        totalPlayersm[3] = GameRoundData[ this_gRND].extraData[5];
        
       
        totalPlayers = totalPlayersm;
        actionValue = GameRoundData[ this_gRND].actionValue;
        
        shares = PlayerGameRound[_player_address][this_gRND].shares;
        
        treasure_payoutsTo = PlayerGameRound[_player_address][this_gRND].treasure_payoutsTo;
    }
  
    
    function view_get_Gains()
    public
    view
    returns( uint256 gains)
    {
        
        address _player_address = msg.sender;
   
      
        uint256 _gains = PlayerData[ _player_address ].chest.add( get_PendingGains( _player_address , PlayerData[ _player_address].gRND, true) );
        
        if (_gains > PlayerData[ _player_address].payoutsTo)
        {
            _gains -= PlayerData[ _player_address].payoutsTo;
        }
        else _gains = 0;
     
    
        return( _gains );
        
    }
  
  
    
    function view_get_gameStates() public 
    view
    returns(uint8[4] types, uint256 grnd, uint32 turnround, uint256 minimumshare , uint256 blockNumber , uint256 blockNumberTimeout, uint32[6] actionValue , uint32[8] persoData , uint32[8] powerUpData , uint256 blockNumberCurrent , uint256 blockTimeAvg)
    {
        return( this_Perso_Type, this_gRND , GameRoundData[ this_gRND].extraData[0] , minimumSharePrice , GameRoundData[ this_gRND].blockNumber,GameRoundData[ this_gRND].blockNumberTimeout, GameRoundData[ this_gRND].actionValue , GameRoundData[ this_gRND].persoData , GameRoundData[ this_gRND].powerUpData, block.number , blockTimeAverage /*, view_get_MyRacer()*/);
    }
    
    function view_get_ResultData() public
    view
    returns(uint32 TotalPlayer, uint256 TotalPayout ,uint256 MyTokenValue, uint256 MyToken, uint256 MyGains , uint256 MyTreasureFound )
    {
        address _player_address = msg.sender;
        
        GameRoundData_s storage  _GameRoundData = GameRoundData[ this_gRND ];
        
        TotalPlayer = _GameRoundData.extraData[2]+_GameRoundData.extraData[3]+_GameRoundData.extraData[4]+_GameRoundData.extraData[5];
     
        TotalPayout = get_TotalPayout( _GameRoundData );
      
        MyToken =  PlayerGameRound[ _player_address][ this_gRND].token;
          
        MyTokenValue = MyToken * HDXcontract.sellingPrice( true );
        MyTokenValue /= magnitude;
      
        MyGains = 0;
        MyTreasureFound = 0;
        
        if (PlayerData[ _player_address].gRND == this_gRND)
        {
       
           MyGains =  get_PendingGains( _player_address , this_gRND,false); //we need false because the race is not yet closed at that moment
        
           
           for(uint i=0;i<4;i++)
           {
             MyTreasureFound += PlayerGameRound[_player_address][ this_gRND].shares[ i ].mul( _GameRoundData.treasurePerShare[ i ] ) / magnitude;
           }
       
       
            if (MyTreasureFound >=  PlayerGameRound[_player_address][this_gRND].treasure_payoutsTo) MyTreasureFound = MyTreasureFound.sub(  PlayerGameRound[_player_address][this_gRND].treasure_payoutsTo );
            else MyTreasureFound = 0;
              
           
            
        }
        
        
    }    
 
 
    function totalEthereumBalance()
    public
    view
    returns(uint256)
    {
        return address(this).balance;
    }
    
    function view_get_maintenanceMode()
    public
    view
    returns(bool)
    {
        return( maintenanceMode);
    }
    
    function view_get_blockNumbers()
    public
    view
    returns( uint256 b1 , uint256 b2 )
    {
        return( block.number , GameRoundData[ this_gRND ].blockNumberTimeout);
        
    }
    
   
}


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);
        return c;
    }

   
    function sub(uint256 a, uint256 b)
        internal
        pure
        returns (uint256) 
    {
        require(b <= a);
        return a - b;
    }

   
    function add(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c) 
    {
        c = a + b;
        require(c >= a);
        return c;
    }
    
   
    
  
    
   
}


library SafeMath128 {
    
   
    function mul(uint128 a, uint128 b) 
        internal 
        pure 
        returns (uint128 c) 
    {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b);
        return c;
    }

   
    function sub(uint128 a, uint128 b)
        internal
        pure
        returns (uint128) 
    {
        require(b <= a);
        return a - b;
    }

   
    function add(uint128 a, uint128 b)
        internal
        pure
        returns (uint128 c) 
    {
        c = a + b;
        require(c >= a);
        return c;
    }
    
   
    
  
    
   
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"view_get_Treasure","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"view_get_maintenanceMode","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"view_get_gameStates","outputs":[{"name":"types","type":"uint8[4]"},{"name":"grnd","type":"uint256"},{"name":"turnround","type":"uint32"},{"name":"minimumshare","type":"uint256"},{"name":"blockNumber","type":"uint256"},{"name":"blockNumberTimeout","type":"uint256"},{"name":"actionValue","type":"uint32[6]"},{"name":"persoData","type":"uint32[8]"},{"name":"powerUpData","type":"uint32[8]"},{"name":"blockNumberCurrent","type":"uint256"},{"name":"blockTimeAvg","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"p","type":"uint8[4]"}],"name":"initRace","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"CloseEntry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"blocktimeavg","type":"uint256"}],"name":"changeBlockTimeAverage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"perso","type":"uint32"},{"name":"eth","type":"uint256"},{"name":"action","type":"uint32"},{"name":"_referrer_address","type":"address"}],"name":"BuyShareWithDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"refundMe","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_next","type":"address"}],"name":"changeHDXcontract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"view_get_Gains","outputs":[{"name":"gains","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"view_get_gameData","outputs":[{"name":"sharePrice","type":"uint256"},{"name":"sharePots","type":"uint256[4]"},{"name":"shareSupply","type":"uint256"},{"name":"shareEthBalance","type":"uint256"},{"name":"treasurePerShare","type":"uint128[4]"},{"name":"totalPlayers","type":"uint32[4]"},{"name":"actionValue","type":"uint32[6]"},{"name":"shares","type":"uint256[4]"},{"name":"treasure_payoutsTo","type":"uint256"},{"name":"treasureSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nextOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"view_get_ResultData","outputs":[{"name":"TotalPlayer","type":"uint32"},{"name":"TotalPayout","type":"uint256"},{"name":"MyTokenValue","type":"uint256"},{"name":"MyToken","type":"uint256"},{"name":"MyGains","type":"uint256"},{"name":"MyTreasureFound","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"view_get_blockNumbers","outputs":[{"name":"b1","type":"uint256"},{"name":"b2","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"WithdrawGains","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableMaintenance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableMaintenance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"perso","type":"uint32"},{"name":"action","type":"uint32"},{"name":"_referrer_address","type":"address"}],"name":"BuyShare","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"ChargeTreasure","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousOwner","type":"address"},{"indexed":false,"name":"nextOwner","type":"address"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previous","type":"address"},{"indexed":false,"name":"next","type":"address"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"HDXcontractChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onWithdrawGains","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"gRND","type":"uint256"},{"indexed":false,"name":"turnRound","type":"uint32"},{"indexed":false,"name":"eventType","type":"uint32"},{"indexed":false,"name":"eventTarget","type":"uint32"},{"indexed":false,"name":"persoEnergy","type":"uint32[4]"},{"indexed":false,"name":"persoDistance","type":"uint32[4]"},{"indexed":false,"name":"powerUpSpeed","type":"uint32[4]"},{"indexed":false,"name":"powerUpShield","type":"uint32[4]"},{"indexed":false,"name":"blockNumberTimeout","type":"uint256"},{"indexed":false,"name":"treasureAmountFind","type":"uint256"},{"indexed":false,"name":"customerAddress","type":"address"}],"name":"onNewRound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"gRND","type":"uint256"},{"indexed":false,"name":"persoType","type":"uint8[4]"},{"indexed":false,"name":"blockNumber","type":"uint256"}],"name":"onNewRace","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"customerAddress","type":"address"},{"indexed":false,"name":"gRND","type":"uint256"},{"indexed":false,"name":"perso","type":"uint32"},{"indexed":false,"name":"nbToken","type":"uint256"},{"indexed":false,"name":"actionType","type":"uint32"},{"indexed":false,"name":"actionValue","type":"uint32"}],"name":"onBuyShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"mode","type":"bool"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onMaintenance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"eth","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"gRND","type":"uint256"}],"name":"onCloseEntry","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"blocktimeavg","type":"uint256"}],"name":"onChangeBlockTimeAverage","type":"event"}]

608060405260008054600160a060020a031916738942a5995bd168f347f7ec58f25a54a9a064f8821781556005805460ff191690556006819055600755600f60085534801561004d57600080fd5b5060018054600160a060020a031916331790556000303111156100a657600154604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156100a4573d6000803e3d6000fd5b505b61392280620000b66000396000f30060806040526004361061011c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630149eea0811461013557806310b7d9ae1461015c5780631449c321146101855780631e98d33414610293578063212a6fd3146102d557806332dc04aa146102ea578063342d1c32146103025780635a9e426b146103365780635b3660961461034b5780636b2f46321461036c578063844d38ee1461038157806388037e1c146103965780638da5cb5b146104b6578063a6f9dae1146104e7578063ae5dbd4314610508578063b395f27814610557578063bd679ab214610585578063bdc0ba8e1461059a578063cc0e13e2146105af578063e8657538146105c4578063fee13823146105e7575b600054600160a060020a0316331461013357600080fd5b005b34801561014157600080fd5b5061014a6105ef565b60408051918252519081900360200190f35b34801561016857600080fd5b506101716105f5565b604080519115158252519081900360200190f35b34801561019157600080fd5b5061019a6105fe565b604051808c608080838360005b838110156101bf5781810151838201526020016101a7565b505050509050018b81526020018a63ffffffff1663ffffffff16815260200189815260200188815260200187815260200186600660200280838360005b838110156102145781810151838201526020016101fc565b5050505090500185600860200280838360005b8381101561023f578181015183820152602001610227565b5050505090500184600860200280838360005b8381101561026a578181015183820152602001610252565b505050509050018381526020018281526020019b50505050505050505050505060405180910390f35b34801561029f57600080fd5b50604080516080818101909252610133913691600491608491908390819083908290808284375093965061082395505050505050565b3480156102e157600080fd5b50610133610a29565b3480156102f657600080fd5b50610133600435610aa6565b34801561030e57600080fd5b5061013363ffffffff6004358116906024359060443516600160a060020a0360643516610b05565b34801561034257600080fd5b50610133610c62565b34801561035757600080fd5b50610133600160a060020a0360043516610e33565b34801561037857600080fd5b5061014a610ef5565b34801561038d57600080fd5b5061014a610efa565b3480156103a257600080fd5b506103ab610f9b565b6040518a8152602081018a608080838360005b838110156103d65781810151838201526020016103be565b5050505090500189815260200188815260200187600460200280838360005b8381101561040d5781810151838201526020016103f5565b5050505090500186600460200280838360005b83811015610438578181015183820152602001610420565b5050505090500185600660200280838360005b8381101561046357818101518382015260200161044b565b5050505090500184600460200280838360005b8381101561048e578181015183820152602001610476565b505050509050018381526020018281526020019a505050505050505050505060405180910390f35b3480156104c257600080fd5b506104cb61131f565b60408051600160a060020a039092168252519081900360200190f35b3480156104f357600080fd5b50610133600160a060020a036004351661132e565b34801561051457600080fd5b5061051d6113f0565b6040805163ffffffff90971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561056357600080fd5b5061056c6116c4565b6040805192835260208301919091528051918290030190f35b34801561059157600080fd5b506101336116dd565b3480156105a657600080fd5b506101336117d9565b3480156105bb57600080fd5b5061013361186d565b61013363ffffffff60043581169060243516600160a060020a03604435166118d5565b610133611984565b60075490565b60055460ff1690565b6106066137de565b60008060008060006106166137fd565b61061e61381c565b61062661381c565b600654600081815260046020526040812090918291600991906016018360088082049290920154600654600090815260046020819052604080832080546001820154975483516080810194859052600790981685026101000a90960463ffffffff169766038d7ea4c680009791969095601584019560138501956014909501944394928e9291908390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116106b157905050506040805160c08101909152939e508892506006915083905082826020028201916000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161070557505060408051610100810191829052959a508994506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610761575050604080516101008101918290529599508894506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116107bd579050505050505092509a509a509a509a509a509a509a509a509a509a509a50909192939495969798999a565b600154600090819081908190600160a060020a0316331461084357600080fd5b60055460ff161561085357600080fd5b60068054600101908190556000908152600460205260408120945092505b60048310156109405784836004811061088657fe5b60200201516009846004811061089857fe5b602091828204019190066101000a81548160ff021916908360ff160217905550606484601301846008811015156108cb57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055506019846013018460040160088110151561090a57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050610871565b4380855563128a180001600185015566038d7ea4c680006002850181905560075490925061096f908590611995565b9050670de0b6b3a764000061098a828463ffffffff611a0116565b81151561099357fe5b046007808601829055549091506109b0908263ffffffff611a2d16565b6007556006546040518181527f56bb87056d3ab27d1f849434662a0094311af359f66c9c50e1a3a0f2941e34f79190879043906020810183608080838360005b83811015610a085781810151838201526020016109f0565b50505050905001828152602001935050505060405180910390a15050505050565b600154600090600160a060020a03163314610a4357600080fd5b60055460ff1615610a5357600080fd5b506006546000908152600460205260409020610a6e81611a42565b60065460408051918252517f4eb04f9aed2df935e25cbec04051b51a0d2dedf786d3ef9ef4cfcb717ff8115f9181900360200190a150565b600154600160a060020a03163314610abd57600080fd5b60008111610aca57600080fd5b60088190556040805182815290517f6c1cf48245a0a91e114596b04dfcbe443303e5f72fab6771794891112fe4395f9181900360200190a150565b6000333214610b1357600080fd5b60055460ff16158015610b2857506000600654115b8015610b3b575066038d7ea4c680008410155b8015610b50575068056bc75e2d631000008411155b8015610b63575060038563ffffffff1611155b8015610b76575060058363ffffffff1611155b8015610b95575060065460009081526004602052604090206001015443105b1515610ba057600080fd5b5060008054604080517f52dde1c300000000000000000000000000000000000000000000000000000000815260048101879052336024820181905291519193600160a060020a03909316926352dde1c3926044808401936020939083900390910190829087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b505050506040513d6020811015610c3d57600080fd5b5051935060008411610c4e57600080fd5b610c5b8186868686611c5a565b5050505050565b6005546000908190819060ff161515600114610c7d57600080fd5b3392506000600654118015610caa575060065460009081526004602052604081206016015463ffffffff16115b8015610cd55750600654600090815260046020526040902060160154634000000063ffffffff909116105b8015610cfe5750600654600160a060020a03841660009081526002602081905260409091200154145b1515610d0957600080fd5b5060009050805b6004811015610dab57600654600081815260046020818152604080842060020154600160a060020a03891685526003835281852095855294909152909120610d6d929184908110610d5d57fe5b015484910263ffffffff61219116565b600160a060020a038416600090815260036020908152604080832060065484529091528120919350908260048110610da157fe5b0155600101610d10565b6000821115610e2e57604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015610dea573d6000803e3d6000fd5b50604080518381524260208201528151600160a060020a038616927fe139691e7435f1fb40ec50ed3729009226be49087fd00e9e5bac276c2a8f40cf928290030190a25b505050565b600154600160a060020a03163314610e4a57600080fd5b600054600160a060020a0382811691161415610e6557600080fd5b600160a060020a0381161515610e7a57600080fd5b60005460408051600160a060020a03928316815291831660208301524282820152517f87ab77b91a9a6a5a04a748607e0ee38d580963c4e21fe45d2e79ffeef26bc55e9181900360600190a16000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b303190565b336000818152600260208190526040822001549091908290610f4890610f2390849060016121a1565b600160a060020a0384166000908152600260205260409020549063ffffffff61219116565b600160a060020a038316600090815260026020526040902060010154909150811115610f9157600160a060020a0382166000908152600260205260409020600101549003610f95565b5060005b92915050565b6000610fa56137de565b600080610fb06137de565b610fb86137de565b610fc06137fd565b610fc86137de565b6000806000610fd56137de565b60065460009081526004602081905260409182902060028101548351608081019094529e50339450600301908282826020028201915b81548152602001906001019080831161100b5750505050509a506004600060065481526020019081526020016000206008015499506004600060065481526020019081526020016000206007015498506004600060065481526020019081526020016000206011016004806020026040519081016040528092919082600480156110dc576020028201916000905b82829054906101000a90046001608060020a03166001608060020a031681526020019060100190602082600f010492830192600103820291508084116110995790505b505060065460009081526004602052604090206009810154949c5093965050601690920191506002905060088104919091015460079091166004026101000a900463ffffffff1681600063ffffffff909216602092830291909101526006546000908152600490915260409020601601600360088104919091015460079091166004026101000a900463ffffffff1681600163ffffffff909216602092830291909101526006546000908152600491829052604090206016019060088104919091015460079091166004026101000a900463ffffffff1681600263ffffffff909216602092830291909101526006546000908152600490915260409020601601600560088104919091015460079091166004026101000a900463ffffffff1681600363ffffffff929092166020928302919091015260068054600090815260049092526040808320815160c0810192839052949a508a949360159091019291908390855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116112405750505050600160a060020a038516600090815260036020908152604080832060065484529091529081902081516080810192839052949a5092506004915082845b8154815260200190600101908083116112bb57505050600160a060020a03909416600090815260036020908152604080832060065484529091529020600401549d9e9c9d9b9c9a9b999a9899979891976001608060020a0316965093945092505050565b600154600160a060020a031681565b600154600160a060020a0316331461134557600080fd5b600154600160a060020a038281169116141561136057600080fd5b600160a060020a038116151561137557600080fd5b60015460408051600160a060020a03928316815291831660208301524282820152517fc13a1166d81cd3b0b352a367aebab95f3a6f6bc695fdab8e9a9d335239c3861b9181900360600190a16001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6006546000908152600460205260408120601681015468010000000000000000810463ffffffff9081166c0100000000000000000000000083048216017001000000000000000000000000000000008304821601740100000000000000000000000000000000000000009092041601919081908190819081903390826114758261243b565b600160a060020a03848116600090815260036020908152604080832060065484528252808320600490810154845483517f1097b9ee0000000000000000000000000000000000000000000000000000000081526001938101939093529251969e5070010000000000000000000000000000000090046001608060020a03169b50931693631097b9ee93602480820194918390030190829087803b15801561151b57600080fd5b505af115801561152f573d6000803e3d6000fd5b505050506040513d602081101561154557600080fd5b5051600654600160a060020a038516600090815260026020819052604082200154670de0b6b3a7640000938a02939093049950965086955014156116b9576115918360065460006121a1565b9450600090505b600481101561163257670de0b6b3a764000061161b6011840183600481106115bc57fe5b600281049190910154600160a060020a03871660009081526003602090815260408083206006548452909152902060019092166010026101000a90046001608060020a031690846004811061160d57fe5b01549063ffffffff611a0116565b81151561162457fe5b049390930192600101611598565b600160a060020a038316600090815260036020908152604080832060065484529091529020600401546001608060020a031684106116b457600160a060020a038316600090815260036020908152604080832060065484529091529020600401546116ad9085906001608060020a031663ffffffff611a2d16565b93506116b9565b600093505b505050909192939495565b6006546000908152600460205260409020600101544391565b33600090815260026020819052604082200154819015156116fd57600080fd5b339150611709826124f5565b90506000811161171857600080fd5b600160a060020a038216600090815260026020526040902060010154611744908263ffffffff61219116565b600160a060020a038316600081815260026020908152604091829020600101939093558051918252918101839052428183015290517f8ea11b70a47e5aaa4024df0985799a384faaaf34e6da0aadbadcae0fbfca45ac9181900360600190a1604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610e2e573d6000803e3d6000fd5b6117e16137de565b600154600160a060020a031633146117f857600080fd5b506040805160808101825260008082526001602080840191909152600283850152600360608401526005805460ff1916905583519182524290820152825191927fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e5692918290030190a161186a81610823565b50565b600154600160a060020a0316331461188457600080fd5b6005805460ff1916600117908190556040805160ff929092161515825242602083015280517fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e569281900390910190a1565b6000803332146118e457600080fd5b50506005543390349060ff161580156118ff57506000600654115b8015611912575066038d7ea4c680008110155b8015611927575068056bc75e2d631000008111155b801561193a575060038563ffffffff1611155b801561194d575060058463ffffffff1611155b801561196c575060065460009081526004602052604090206001015443105b151561197757600080fd5b610c5b8286838787611c5a565b61199060075434612191565b600755565b600282015460009081906119b784670de0b6b3a764000063ffffffff611a0116565b8115156119c057fe5b0490506119da81856009015461219190919063ffffffff16565b600985015560088401546119f4908263ffffffff61219116565b6008850155905092915050565b6000821515611a1257506000610f95565b50818102818382811515611a2257fe5b0414610f9557600080fd5b600082821115611a3c57600080fd5b50900390565b601681015463ffffffff166000808080808086118015611a6b575063400000008663ffffffff16105b15611c515760168701805463ffffffff19166340000000881763ffffffff9081169190911790915560028801546009890154909650670de0b6b3a764000091611ab791908890611a0116565b811515611ac057fe5b0493506064611ad0856019611a01565b811515611ad957fe5b0492506064611ae985600a611a01565b811515611af257fe5b0491506064611b02856005611a01565b811515611b0b57fe5b049050611b238360075461219190919063ffffffff16565b6007556000811115611bd05760008054600154604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101949094525191169163c671b93491849160448082019260209290919082900301818588803b158015611ba257600080fd5b505af1158015611bb6573d6000803e3d6000fd5b50505050506040513d6020811015611bcd57600080fd5b50505b6000821115611c515760008054604080517f16ff1c760000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926316ff1c76928692600480820193929182900301818588803b158015611c3757600080fd5b505af1158015611c4b573d6000803e3d6000fd5b50505050505b50505050505050565b600160a060020a0385166000818152600360209081526040808320600654808552908352818420600484528285209585526002938490529184209092015490939291829182918291829114611d5c57600160a060020a038c166000908152600260208190526040909120015415611d3b57600160a060020a038c1660009081526002602081905260409091200154611cf5908d9060016121a1565b600160a060020a038d16600090815260026020526040902054909550611d21908663ffffffff61219116565b600160a060020a038d166000908152600260205260409020555b600654600160a060020a038d16600090815260026020819052604090912001555b6064611d6f8b600563ffffffff611a0116565b811515611d7857fe5b049350611d94848b03876007015461219190919063ffffffff16565b6007870155600054604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a038f811660048301528b811660248301529151919092169163c671b93491879160448082019260209290919082900301818588803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b50505050506040513d6020811015611e3657600080fd5b50516004880180546001608060020a037001000000000000000000000000000000008083048216850182160291161790559250611e8f866064611e808d602863ffffffff611a0116565b811515611e8957fe5b04611995565b506064611ea38b602863ffffffff611a0116565b811515611eac57fe5b60028801549190049a50611ece8b670de0b6b3a764000063ffffffff611a0116565b811515611ed757fe5b049150611ef182876008015461219190919063ffffffff16565b6008870155611f1d826003880163ffffffff8e1660048110611f0f57fe5b01549063ffffffff61219116565b6003870163ffffffff8d1660048110611f3257fe5b01558663ffffffff8c1660048110611f4657fe5b01549350831515611f9c576016860163ffffffff60028d011660068110611f6957fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811660010116029190911790555b611fac848363ffffffff61219116565b8763ffffffff8d1660048110611fbe57fe5b01556008860154670de0b6b3a764000010156120065760088601546007870154611ff690670de0b6b3a764000063ffffffff611a0116565b811515611fff57fe5b0460028701555b612074670de0b6b3a764000061204f6011890163ffffffff8f166004811061202a57fe5b60028104919091015486916001166010026101000a90046001608060020a0316611a01565b81151561205857fe5b60048a01546001608060020a031691900463ffffffff61259216565b6004880180546fffffffffffffffffffffffffffffffff19166001608060020a03929092169190911790556120ab8b8a848f6125ae565b9050806015870163ffffffff8b16600681106120c357fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055507f12ca57ddb41cb2f73bbe08965d3d608bb3c1947bc95672ef54022490f55360218c6006548d868d866040518087600160a060020a0316600160a060020a031681526020018681526020018563ffffffff1663ffffffff1681526020018481526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff168152602001965050505050505060405180910390a1505050505050505050505050565b81810182811015610f9557600080fd5b60008060008060008060008060008a600260008e600160a060020a0316600160a060020a03168152602001908152602001600020600201541415806121e457508a155b156121f2576000985061242c565b60008b8152600460205260409020975089801561221e57506016880154634000000063ffffffff909116105b1561222c576000985061242c565b505060168601546002870154600160a060020a038c1660009081526003602090815260408083208e8452909152812064010000000090930463ffffffff16975095508594509250835b60048110156123295781816004811061228a57fe5b015492506122c2670de0b6b3a76400006122aa858763ffffffff611a0116565b8115156122b357fe5b8891900463ffffffff61219116565b955061231f670de0b6b3a764000061230760118b0184600481106122e257fe5b60028104919091015487916001166010026101000a90046001608060020a0316611a01565b81151561231057fe5b8791900463ffffffff61219116565b9450600101612275565b60048201546001608060020a0316851061236357600482015461235c9086906001608060020a031663ffffffff611a2d16565b9450612368565b600094505b612378868663ffffffff61219116565b955060008763ffffffff161115612428578163ffffffff6000198901166004811061239f57fe5b0154925060008311156124285760098801546064906123eb90603c90670de0b6b3a7640000906123d5908963ffffffff611a0116565b8115156123de57fe5b049063ffffffff611a0116565b8115156123f457fe5b0494506124256003890163ffffffff6000198a01166004811061241357fe5b01546122aa878663ffffffff611a0116565b95505b8598505b50505050505050509392505050565b600281015460009081908180805b600483101561248e5760038701836004811061246157fe5b01549150612481670de0b6b3a7640000612307848763ffffffff611a0116565b9450600190920191612449565b60098701546064906124b790603c90670de0b6b3a7640000906123d5908963ffffffff611a0116565b8115156124c057fe5b0490506124ea87600a01546124de838861219190919063ffffffff16565b9063ffffffff61219116565b979650505050505050565b600160a060020a03811660009081526002602081905260408220015481906125499061252490859060016121a1565b600160a060020a0385166000908152600260205260409020549063ffffffff61219116565b600160a060020a038416600090815260026020526040902060010154909150811115610f9157600160a060020a0383166000908152600260205260409020600101549003610f95565b8181016001608060020a038084169082161015610f9557600080fd5b6000806125b961383c565b6125c16137fd565b60008060006004600060065481526020019081526020016000206015018a63ffffffff166006811015156125f157fe5b600891828204019190066004029054906101000a900463ffffffff169550600460006006548152602001908152602001600020600b018a63ffffffff1660068110151561263a57fe5b0154431161264a57859650612e09565b60065460009081526004602052604090206016015463ffffffff90811661016087015261267c908a90606490611a0116565b670de0b6b3a76400009004600a01985061138889111561269c5761138898505b6040805160c0810182526103e8808252610fa06020830152611388928201929092526107d060608201526080810191909152610bb860a08201529589019593508363ffffffff8b16600681106126ee57fe5b602002015161ffff168663ffffffff161080156127165750600085610160015163ffffffff16115b1561272357859650612e09565b8363ffffffff8b166006811061273557fe5b602002015161ffff1663ffffffff8716106127815743600460006006548152602001908152602001600020600b018b63ffffffff1660068110151561277657fe5b015560009550612786565b606499505b6101608501805160010163ffffffff90811690915260065460e08701819052600090815260046020526040812060160154640100000000900490911660c087015292505b600483101561298e5760e0850151600090815260046020526040902060130183600881106127f457fe5b600891828204019190066004029054906101000a900463ffffffff1685600001518460048110151561282257fe5b63ffffffff9092166020928302919091015260e08601516000908152600491829052604090206013019084016008811061285857fe5b600891828204019190066004029054906101000a900463ffffffff1685602001518460048110151561288657fe5b63ffffffff9092166020928302919091015260e0860151600090815260049091526040902060029060140184600881106128bc57fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff168115156128e757fe5b048560600151846004811015156128fa57fe5b63ffffffff9092166020928302919091015260e086015160009081526004918290526040902060029160149091019085016008811061293557fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1681151561296057fe5b0485604001518460048110151561297357fe5b63ffffffff90921660209290920201526001909201916127ca565b84610160015163ffffffff16600114156129cb57845160059063ffffffff8d16600481106129b857fe5b6020020180519190910163ffffffff1690525b6129d485612e17565b63ffffffff8a1615156129eb576129eb8b86612ef9565b8963ffffffff1660011415612a0457612a048b86612f84565b8963ffffffff1660021415612a1d57612a1d8b86612f9d565b8963ffffffff1660031415612a3657612a368b86612fb6565b8963ffffffff1660041415612a4e57612a4e85613012565b8963ffffffff1660051415612a6757612a678b8661313c565b60808501805163ffffffff8d81166201000002909117169052600092508291505b6004831015612d65578451605f908460048110612aa157fe5b6020020180519190910263ffffffff16905284516064908460048110612ac357fe5b6020020181815163ffffffff16811515612ad957fe5b0463ffffffff1690525060608501518360048110612af357fe5b60200201518551600a909102908460048110612b0b57fe5b6020020151600a02019050606481606402866020015185600481101515612b2e57fe5b6020020151605f020163ffffffff16811515612b4657fe5b04856020015184600481101515612b5957fe5b602002019063ffffffff16908163ffffffff16815250508163ffffffff16856020015184600481101515612b8957fe5b602002015163ffffffff161115612bbb5760208501518360048110612baa57fe5b602002015160ff841660c087015291505b84518360048110612bc857fe5b6020020151600460008760e00151815260200190815260200160002060130184600881101515612bf457fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846020015183600481101515612c2f57fe5b6020020151600460008760e00151815260200190815260200160002060130184600401600881101515612c5e57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846060015183600481101515612c9957fe5b6020020151600460008760e00151815260200190815260200160002060140184600881101515612cc557fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846040015183600481101515612d0057fe5b6020020151600460008760e00151815260200190815260200160002060140184600401600881101515612d2f57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050612a88565b61016085015160e0860180516000908152600460205260408082206016908101805463ffffffff96871663ffffffff1990911617905560c08a01519351835291200180546001929092019092166401000000000267ffffffff000000001990911617905560085462015180811515612dd957fe5b044301610140860181905260e0860151600090815260046020526040902060010155612e058589613170565b8596505b505050505050949350505050565b600119439081014060001990910140184241811515612e3257fe5b602084810151805191810151604082015160609092015163ffffffff90811691811695909404959095189183169190910192909201911601015a8101905080604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310612ebf5780518252601f199092019160209182019101612ea0565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120610120959095019490945250505050565b6006608082015263ffffffff60038302811660020a811660a08301528151601491841660048110612f2657fe5b60200201805163ffffffff9201821690528151609691841660048110612f4857fe5b602002015163ffffffff161115612f8057805160969063ffffffff841660048110612f6f57fe5b63ffffffff90921660209290920201525b5050565b604081015160649063ffffffff841660048110612f6f57fe5b606081015160649063ffffffff841660048110612f6f57fe5b612fc88161012001516012600e6132f0565b63ffffffff1660a0820152610120810151612fe290613358565b63ffffffff908116608083015260a082015181169083161415612f8057612f8081608001518260a0015183613441565b600660808201526101208101516002906000908190819061303690601260046132f0565b925060008560c0015163ffffffff1611156130565760018560c001510392505b604085015163ffffffff84166004811061306c57fe5b6020020151915060148263ffffffff16111561308b576005935061311c565b8160650360040290508063ffffffff1685602001518463ffffffff166004811015156130b357fe5b602002015163ffffffff16106130f2576020850151819063ffffffff8516600481106130db57fe5b6020020180519190910363ffffffff16905261311c565b602085015160009063ffffffff85166004811061310b57fe5b63ffffffff90921660209290920201525b505063ffffffff918216600391909102821660020a021660a09190910152565b600560808201526101208101516131579060186101006132f0565b63ffffffff1660a08201819052612f80908390836136e5565b7f5a250066b073a4ff8db1911b1f4467cf987e161fd19daa3dfa3f4c7518d81b638260e0015183610160015184608001518560a0015186600001518760200151886060015189604001518a61014001518b61010001518b604051808c81526020018b63ffffffff1663ffffffff1681526020018a63ffffffff1663ffffffff1681526020018963ffffffff1663ffffffff16815260200188600460200280838360005b8381101561322b578181015183820152602001613213565b5050505090500187600460200280838360005b8381101561325657818101518382015260200161323e565b5050505090500186600460200280838360005b83811015613281578181015183820152602001613269565b5050505090500185600460200280838360005b838110156132ac578181015183820152602001613294565b5050505090500184815260200183815260200182600160a060020a0316600160a060020a031681526020019b50505050505050505050505060405180910390a15050565b60008163ffffffff16848460010163ffffffff1660208110151561331057fe5b60f860020a91901a8102048563ffffffff86166020811061332d57fe5b1a60f860020a0260f860020a9004610100020163ffffffff1681151561334f57fe5b06949350505050565b60006133626138b7565b50604080516102c081018252600180825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152600261018082018190526101a082018190526101c082018190526101e08201819052610200820181905261022082015260036102408201819052610260820181905261028082015260046102a08201528061342284601860166132f0565b63ffffffff166016811061343257fe5b602002015160ff169392505050565b6134496138d7565b506040805160a08101825260018152600a602080830191909152600f82840152601460608301526019608083015260e08401805160009081526004909252838220600901548151835284832060020154915183529382206008015492939290918060646134d68763ffffffff8c16600581106134c157fe5b6020020151879060ff1663ffffffff611a0116565b8115156134df57fe5b0491506134f2858363ffffffff611a2d16565b60e0880151600090815260046020526040902060090155613519838363ffffffff611a2d16565b60e0880151600090815260046020526040902060080155670de0b6b3a7640000613549838663ffffffff611a0116565b81151561355257fe5b60e0890151600090815260046020526040902060070154919004925061357e908363ffffffff611a2d16565b60e0880180516000908152600460208181526040808420600701959095556101008c018790529251825290915220600a01546135c0908363ffffffff61219116565b60e0880180516000908152600460208190526040808320600a019490945591518152919091206003019063ffffffff8a169081106135fa57fe5b0154905060008111156136da576136808161362384670de0b6b3a764000063ffffffff611a0116565b81151561362c57fe5b04600460008a60e0015181526020019081526020016000206011018a63ffffffff1660048110151561365a57fe5b60028104919091015460019091166010026101000a90046001608060020a031690612592565b60e088015160009081526004602081905260409091206011019063ffffffff8b169081106136aa57fe5b600291828204019190066010026101000a8154816001608060020a0302191690836001608060020a031602179055505b505050505050505050565b600080805b60048310156137d6576040840151600a6001600363ffffffff89160601029250836004811061371557fe5b602002015190508063ffffffff168263ffffffff1611158061373c57508563ffffffff1683145b1561374a5760009150613750565b80820391505b8351836004811061375d57fe5b602002015163ffffffff168263ffffffff16101561379b5783518290846004811061378457fe5b6020020180519190910363ffffffff1690526137bc565b835160019084600481106137ab57fe5b63ffffffff90921660209290920201525b600463ffffffff90951694909404936001909201916136ea565b505050505050565b6080604051908101604052806004906020820280388339509192915050565b60c0604051908101604052806006906020820280388339509192915050565b610100604051908101604052806008906020820280388339509192915050565b610300604051908101604052806138516137de565b815260200161385e6137de565b815260200161386b6137de565b81526020016138786137de565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101009091015290565b6102c0604051908101604052806016906020820280388339509192915050565b60a06040519081016040528060059060208202803883395091929150505600a165627a7a72305820a281bed730379db69125a5540d11ba27393ab263ea82a75f4bef5a467328d1e50029

Deployed Bytecode

0x60806040526004361061011c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630149eea0811461013557806310b7d9ae1461015c5780631449c321146101855780631e98d33414610293578063212a6fd3146102d557806332dc04aa146102ea578063342d1c32146103025780635a9e426b146103365780635b3660961461034b5780636b2f46321461036c578063844d38ee1461038157806388037e1c146103965780638da5cb5b146104b6578063a6f9dae1146104e7578063ae5dbd4314610508578063b395f27814610557578063bd679ab214610585578063bdc0ba8e1461059a578063cc0e13e2146105af578063e8657538146105c4578063fee13823146105e7575b600054600160a060020a0316331461013357600080fd5b005b34801561014157600080fd5b5061014a6105ef565b60408051918252519081900360200190f35b34801561016857600080fd5b506101716105f5565b604080519115158252519081900360200190f35b34801561019157600080fd5b5061019a6105fe565b604051808c608080838360005b838110156101bf5781810151838201526020016101a7565b505050509050018b81526020018a63ffffffff1663ffffffff16815260200189815260200188815260200187815260200186600660200280838360005b838110156102145781810151838201526020016101fc565b5050505090500185600860200280838360005b8381101561023f578181015183820152602001610227565b5050505090500184600860200280838360005b8381101561026a578181015183820152602001610252565b505050509050018381526020018281526020019b50505050505050505050505060405180910390f35b34801561029f57600080fd5b50604080516080818101909252610133913691600491608491908390819083908290808284375093965061082395505050505050565b3480156102e157600080fd5b50610133610a29565b3480156102f657600080fd5b50610133600435610aa6565b34801561030e57600080fd5b5061013363ffffffff6004358116906024359060443516600160a060020a0360643516610b05565b34801561034257600080fd5b50610133610c62565b34801561035757600080fd5b50610133600160a060020a0360043516610e33565b34801561037857600080fd5b5061014a610ef5565b34801561038d57600080fd5b5061014a610efa565b3480156103a257600080fd5b506103ab610f9b565b6040518a8152602081018a608080838360005b838110156103d65781810151838201526020016103be565b5050505090500189815260200188815260200187600460200280838360005b8381101561040d5781810151838201526020016103f5565b5050505090500186600460200280838360005b83811015610438578181015183820152602001610420565b5050505090500185600660200280838360005b8381101561046357818101518382015260200161044b565b5050505090500184600460200280838360005b8381101561048e578181015183820152602001610476565b505050509050018381526020018281526020019a505050505050505050505060405180910390f35b3480156104c257600080fd5b506104cb61131f565b60408051600160a060020a039092168252519081900360200190f35b3480156104f357600080fd5b50610133600160a060020a036004351661132e565b34801561051457600080fd5b5061051d6113f0565b6040805163ffffffff90971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561056357600080fd5b5061056c6116c4565b6040805192835260208301919091528051918290030190f35b34801561059157600080fd5b506101336116dd565b3480156105a657600080fd5b506101336117d9565b3480156105bb57600080fd5b5061013361186d565b61013363ffffffff60043581169060243516600160a060020a03604435166118d5565b610133611984565b60075490565b60055460ff1690565b6106066137de565b60008060008060006106166137fd565b61061e61381c565b61062661381c565b600654600081815260046020526040812090918291600991906016018360088082049290920154600654600090815260046020819052604080832080546001820154975483516080810194859052600790981685026101000a90960463ffffffff169766038d7ea4c680009791969095601584019560138501956014909501944394928e9291908390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116106b157905050506040805160c08101909152939e508892506006915083905082826020028201916000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161070557505060408051610100810191829052959a508994506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610761575050604080516101008101918290529599508894506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116107bd579050505050505092509a509a509a509a509a509a509a509a509a509a509a50909192939495969798999a565b600154600090819081908190600160a060020a0316331461084357600080fd5b60055460ff161561085357600080fd5b60068054600101908190556000908152600460205260408120945092505b60048310156109405784836004811061088657fe5b60200201516009846004811061089857fe5b602091828204019190066101000a81548160ff021916908360ff160217905550606484601301846008811015156108cb57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055506019846013018460040160088110151561090a57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050610871565b4380855563128a180001600185015566038d7ea4c680006002850181905560075490925061096f908590611995565b9050670de0b6b3a764000061098a828463ffffffff611a0116565b81151561099357fe5b046007808601829055549091506109b0908263ffffffff611a2d16565b6007556006546040518181527f56bb87056d3ab27d1f849434662a0094311af359f66c9c50e1a3a0f2941e34f79190879043906020810183608080838360005b83811015610a085781810151838201526020016109f0565b50505050905001828152602001935050505060405180910390a15050505050565b600154600090600160a060020a03163314610a4357600080fd5b60055460ff1615610a5357600080fd5b506006546000908152600460205260409020610a6e81611a42565b60065460408051918252517f4eb04f9aed2df935e25cbec04051b51a0d2dedf786d3ef9ef4cfcb717ff8115f9181900360200190a150565b600154600160a060020a03163314610abd57600080fd5b60008111610aca57600080fd5b60088190556040805182815290517f6c1cf48245a0a91e114596b04dfcbe443303e5f72fab6771794891112fe4395f9181900360200190a150565b6000333214610b1357600080fd5b60055460ff16158015610b2857506000600654115b8015610b3b575066038d7ea4c680008410155b8015610b50575068056bc75e2d631000008411155b8015610b63575060038563ffffffff1611155b8015610b76575060058363ffffffff1611155b8015610b95575060065460009081526004602052604090206001015443105b1515610ba057600080fd5b5060008054604080517f52dde1c300000000000000000000000000000000000000000000000000000000815260048101879052336024820181905291519193600160a060020a03909316926352dde1c3926044808401936020939083900390910190829087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b505050506040513d6020811015610c3d57600080fd5b5051935060008411610c4e57600080fd5b610c5b8186868686611c5a565b5050505050565b6005546000908190819060ff161515600114610c7d57600080fd5b3392506000600654118015610caa575060065460009081526004602052604081206016015463ffffffff16115b8015610cd55750600654600090815260046020526040902060160154634000000063ffffffff909116105b8015610cfe5750600654600160a060020a03841660009081526002602081905260409091200154145b1515610d0957600080fd5b5060009050805b6004811015610dab57600654600081815260046020818152604080842060020154600160a060020a03891685526003835281852095855294909152909120610d6d929184908110610d5d57fe5b015484910263ffffffff61219116565b600160a060020a038416600090815260036020908152604080832060065484529091528120919350908260048110610da157fe5b0155600101610d10565b6000821115610e2e57604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015610dea573d6000803e3d6000fd5b50604080518381524260208201528151600160a060020a038616927fe139691e7435f1fb40ec50ed3729009226be49087fd00e9e5bac276c2a8f40cf928290030190a25b505050565b600154600160a060020a03163314610e4a57600080fd5b600054600160a060020a0382811691161415610e6557600080fd5b600160a060020a0381161515610e7a57600080fd5b60005460408051600160a060020a03928316815291831660208301524282820152517f87ab77b91a9a6a5a04a748607e0ee38d580963c4e21fe45d2e79ffeef26bc55e9181900360600190a16000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b303190565b336000818152600260208190526040822001549091908290610f4890610f2390849060016121a1565b600160a060020a0384166000908152600260205260409020549063ffffffff61219116565b600160a060020a038316600090815260026020526040902060010154909150811115610f9157600160a060020a0382166000908152600260205260409020600101549003610f95565b5060005b92915050565b6000610fa56137de565b600080610fb06137de565b610fb86137de565b610fc06137fd565b610fc86137de565b6000806000610fd56137de565b60065460009081526004602081905260409182902060028101548351608081019094529e50339450600301908282826020028201915b81548152602001906001019080831161100b5750505050509a506004600060065481526020019081526020016000206008015499506004600060065481526020019081526020016000206007015498506004600060065481526020019081526020016000206011016004806020026040519081016040528092919082600480156110dc576020028201916000905b82829054906101000a90046001608060020a03166001608060020a031681526020019060100190602082600f010492830192600103820291508084116110995790505b505060065460009081526004602052604090206009810154949c5093965050601690920191506002905060088104919091015460079091166004026101000a900463ffffffff1681600063ffffffff909216602092830291909101526006546000908152600490915260409020601601600360088104919091015460079091166004026101000a900463ffffffff1681600163ffffffff909216602092830291909101526006546000908152600491829052604090206016019060088104919091015460079091166004026101000a900463ffffffff1681600263ffffffff909216602092830291909101526006546000908152600490915260409020601601600560088104919091015460079091166004026101000a900463ffffffff1681600363ffffffff929092166020928302919091015260068054600090815260049092526040808320815160c0810192839052949a508a949360159091019291908390855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116112405750505050600160a060020a038516600090815260036020908152604080832060065484529091529081902081516080810192839052949a5092506004915082845b8154815260200190600101908083116112bb57505050600160a060020a03909416600090815260036020908152604080832060065484529091529020600401549d9e9c9d9b9c9a9b999a9899979891976001608060020a0316965093945092505050565b600154600160a060020a031681565b600154600160a060020a0316331461134557600080fd5b600154600160a060020a038281169116141561136057600080fd5b600160a060020a038116151561137557600080fd5b60015460408051600160a060020a03928316815291831660208301524282820152517fc13a1166d81cd3b0b352a367aebab95f3a6f6bc695fdab8e9a9d335239c3861b9181900360600190a16001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6006546000908152600460205260408120601681015468010000000000000000810463ffffffff9081166c0100000000000000000000000083048216017001000000000000000000000000000000008304821601740100000000000000000000000000000000000000009092041601919081908190819081903390826114758261243b565b600160a060020a03848116600090815260036020908152604080832060065484528252808320600490810154845483517f1097b9ee0000000000000000000000000000000000000000000000000000000081526001938101939093529251969e5070010000000000000000000000000000000090046001608060020a03169b50931693631097b9ee93602480820194918390030190829087803b15801561151b57600080fd5b505af115801561152f573d6000803e3d6000fd5b505050506040513d602081101561154557600080fd5b5051600654600160a060020a038516600090815260026020819052604082200154670de0b6b3a7640000938a02939093049950965086955014156116b9576115918360065460006121a1565b9450600090505b600481101561163257670de0b6b3a764000061161b6011840183600481106115bc57fe5b600281049190910154600160a060020a03871660009081526003602090815260408083206006548452909152902060019092166010026101000a90046001608060020a031690846004811061160d57fe5b01549063ffffffff611a0116565b81151561162457fe5b049390930192600101611598565b600160a060020a038316600090815260036020908152604080832060065484529091529020600401546001608060020a031684106116b457600160a060020a038316600090815260036020908152604080832060065484529091529020600401546116ad9085906001608060020a031663ffffffff611a2d16565b93506116b9565b600093505b505050909192939495565b6006546000908152600460205260409020600101544391565b33600090815260026020819052604082200154819015156116fd57600080fd5b339150611709826124f5565b90506000811161171857600080fd5b600160a060020a038216600090815260026020526040902060010154611744908263ffffffff61219116565b600160a060020a038316600081815260026020908152604091829020600101939093558051918252918101839052428183015290517f8ea11b70a47e5aaa4024df0985799a384faaaf34e6da0aadbadcae0fbfca45ac9181900360600190a1604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610e2e573d6000803e3d6000fd5b6117e16137de565b600154600160a060020a031633146117f857600080fd5b506040805160808101825260008082526001602080840191909152600283850152600360608401526005805460ff1916905583519182524290820152825191927fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e5692918290030190a161186a81610823565b50565b600154600160a060020a0316331461188457600080fd5b6005805460ff1916600117908190556040805160ff929092161515825242602083015280517fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e569281900390910190a1565b6000803332146118e457600080fd5b50506005543390349060ff161580156118ff57506000600654115b8015611912575066038d7ea4c680008110155b8015611927575068056bc75e2d631000008111155b801561193a575060038563ffffffff1611155b801561194d575060058463ffffffff1611155b801561196c575060065460009081526004602052604090206001015443105b151561197757600080fd5b610c5b8286838787611c5a565b61199060075434612191565b600755565b600282015460009081906119b784670de0b6b3a764000063ffffffff611a0116565b8115156119c057fe5b0490506119da81856009015461219190919063ffffffff16565b600985015560088401546119f4908263ffffffff61219116565b6008850155905092915050565b6000821515611a1257506000610f95565b50818102818382811515611a2257fe5b0414610f9557600080fd5b600082821115611a3c57600080fd5b50900390565b601681015463ffffffff166000808080808086118015611a6b575063400000008663ffffffff16105b15611c515760168701805463ffffffff19166340000000881763ffffffff9081169190911790915560028801546009890154909650670de0b6b3a764000091611ab791908890611a0116565b811515611ac057fe5b0493506064611ad0856019611a01565b811515611ad957fe5b0492506064611ae985600a611a01565b811515611af257fe5b0491506064611b02856005611a01565b811515611b0b57fe5b049050611b238360075461219190919063ffffffff16565b6007556000811115611bd05760008054600154604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101949094525191169163c671b93491849160448082019260209290919082900301818588803b158015611ba257600080fd5b505af1158015611bb6573d6000803e3d6000fd5b50505050506040513d6020811015611bcd57600080fd5b50505b6000821115611c515760008054604080517f16ff1c760000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926316ff1c76928692600480820193929182900301818588803b158015611c3757600080fd5b505af1158015611c4b573d6000803e3d6000fd5b50505050505b50505050505050565b600160a060020a0385166000818152600360209081526040808320600654808552908352818420600484528285209585526002938490529184209092015490939291829182918291829114611d5c57600160a060020a038c166000908152600260208190526040909120015415611d3b57600160a060020a038c1660009081526002602081905260409091200154611cf5908d9060016121a1565b600160a060020a038d16600090815260026020526040902054909550611d21908663ffffffff61219116565b600160a060020a038d166000908152600260205260409020555b600654600160a060020a038d16600090815260026020819052604090912001555b6064611d6f8b600563ffffffff611a0116565b811515611d7857fe5b049350611d94848b03876007015461219190919063ffffffff16565b6007870155600054604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a038f811660048301528b811660248301529151919092169163c671b93491879160448082019260209290919082900301818588803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b50505050506040513d6020811015611e3657600080fd5b50516004880180546001608060020a037001000000000000000000000000000000008083048216850182160291161790559250611e8f866064611e808d602863ffffffff611a0116565b811515611e8957fe5b04611995565b506064611ea38b602863ffffffff611a0116565b811515611eac57fe5b60028801549190049a50611ece8b670de0b6b3a764000063ffffffff611a0116565b811515611ed757fe5b049150611ef182876008015461219190919063ffffffff16565b6008870155611f1d826003880163ffffffff8e1660048110611f0f57fe5b01549063ffffffff61219116565b6003870163ffffffff8d1660048110611f3257fe5b01558663ffffffff8c1660048110611f4657fe5b01549350831515611f9c576016860163ffffffff60028d011660068110611f6957fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811660010116029190911790555b611fac848363ffffffff61219116565b8763ffffffff8d1660048110611fbe57fe5b01556008860154670de0b6b3a764000010156120065760088601546007870154611ff690670de0b6b3a764000063ffffffff611a0116565b811515611fff57fe5b0460028701555b612074670de0b6b3a764000061204f6011890163ffffffff8f166004811061202a57fe5b60028104919091015486916001166010026101000a90046001608060020a0316611a01565b81151561205857fe5b60048a01546001608060020a031691900463ffffffff61259216565b6004880180546fffffffffffffffffffffffffffffffff19166001608060020a03929092169190911790556120ab8b8a848f6125ae565b9050806015870163ffffffff8b16600681106120c357fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055507f12ca57ddb41cb2f73bbe08965d3d608bb3c1947bc95672ef54022490f55360218c6006548d868d866040518087600160a060020a0316600160a060020a031681526020018681526020018563ffffffff1663ffffffff1681526020018481526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff168152602001965050505050505060405180910390a1505050505050505050505050565b81810182811015610f9557600080fd5b60008060008060008060008060008a600260008e600160a060020a0316600160a060020a03168152602001908152602001600020600201541415806121e457508a155b156121f2576000985061242c565b60008b8152600460205260409020975089801561221e57506016880154634000000063ffffffff909116105b1561222c576000985061242c565b505060168601546002870154600160a060020a038c1660009081526003602090815260408083208e8452909152812064010000000090930463ffffffff16975095508594509250835b60048110156123295781816004811061228a57fe5b015492506122c2670de0b6b3a76400006122aa858763ffffffff611a0116565b8115156122b357fe5b8891900463ffffffff61219116565b955061231f670de0b6b3a764000061230760118b0184600481106122e257fe5b60028104919091015487916001166010026101000a90046001608060020a0316611a01565b81151561231057fe5b8791900463ffffffff61219116565b9450600101612275565b60048201546001608060020a0316851061236357600482015461235c9086906001608060020a031663ffffffff611a2d16565b9450612368565b600094505b612378868663ffffffff61219116565b955060008763ffffffff161115612428578163ffffffff6000198901166004811061239f57fe5b0154925060008311156124285760098801546064906123eb90603c90670de0b6b3a7640000906123d5908963ffffffff611a0116565b8115156123de57fe5b049063ffffffff611a0116565b8115156123f457fe5b0494506124256003890163ffffffff6000198a01166004811061241357fe5b01546122aa878663ffffffff611a0116565b95505b8598505b50505050505050509392505050565b600281015460009081908180805b600483101561248e5760038701836004811061246157fe5b01549150612481670de0b6b3a7640000612307848763ffffffff611a0116565b9450600190920191612449565b60098701546064906124b790603c90670de0b6b3a7640000906123d5908963ffffffff611a0116565b8115156124c057fe5b0490506124ea87600a01546124de838861219190919063ffffffff16565b9063ffffffff61219116565b979650505050505050565b600160a060020a03811660009081526002602081905260408220015481906125499061252490859060016121a1565b600160a060020a0385166000908152600260205260409020549063ffffffff61219116565b600160a060020a038416600090815260026020526040902060010154909150811115610f9157600160a060020a0383166000908152600260205260409020600101549003610f95565b8181016001608060020a038084169082161015610f9557600080fd5b6000806125b961383c565b6125c16137fd565b60008060006004600060065481526020019081526020016000206015018a63ffffffff166006811015156125f157fe5b600891828204019190066004029054906101000a900463ffffffff169550600460006006548152602001908152602001600020600b018a63ffffffff1660068110151561263a57fe5b0154431161264a57859650612e09565b60065460009081526004602052604090206016015463ffffffff90811661016087015261267c908a90606490611a0116565b670de0b6b3a76400009004600a01985061138889111561269c5761138898505b6040805160c0810182526103e8808252610fa06020830152611388928201929092526107d060608201526080810191909152610bb860a08201529589019593508363ffffffff8b16600681106126ee57fe5b602002015161ffff168663ffffffff161080156127165750600085610160015163ffffffff16115b1561272357859650612e09565b8363ffffffff8b166006811061273557fe5b602002015161ffff1663ffffffff8716106127815743600460006006548152602001908152602001600020600b018b63ffffffff1660068110151561277657fe5b015560009550612786565b606499505b6101608501805160010163ffffffff90811690915260065460e08701819052600090815260046020526040812060160154640100000000900490911660c087015292505b600483101561298e5760e0850151600090815260046020526040902060130183600881106127f457fe5b600891828204019190066004029054906101000a900463ffffffff1685600001518460048110151561282257fe5b63ffffffff9092166020928302919091015260e08601516000908152600491829052604090206013019084016008811061285857fe5b600891828204019190066004029054906101000a900463ffffffff1685602001518460048110151561288657fe5b63ffffffff9092166020928302919091015260e0860151600090815260049091526040902060029060140184600881106128bc57fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff168115156128e757fe5b048560600151846004811015156128fa57fe5b63ffffffff9092166020928302919091015260e086015160009081526004918290526040902060029160149091019085016008811061293557fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1681151561296057fe5b0485604001518460048110151561297357fe5b63ffffffff90921660209290920201526001909201916127ca565b84610160015163ffffffff16600114156129cb57845160059063ffffffff8d16600481106129b857fe5b6020020180519190910163ffffffff1690525b6129d485612e17565b63ffffffff8a1615156129eb576129eb8b86612ef9565b8963ffffffff1660011415612a0457612a048b86612f84565b8963ffffffff1660021415612a1d57612a1d8b86612f9d565b8963ffffffff1660031415612a3657612a368b86612fb6565b8963ffffffff1660041415612a4e57612a4e85613012565b8963ffffffff1660051415612a6757612a678b8661313c565b60808501805163ffffffff8d81166201000002909117169052600092508291505b6004831015612d65578451605f908460048110612aa157fe5b6020020180519190910263ffffffff16905284516064908460048110612ac357fe5b6020020181815163ffffffff16811515612ad957fe5b0463ffffffff1690525060608501518360048110612af357fe5b60200201518551600a909102908460048110612b0b57fe5b6020020151600a02019050606481606402866020015185600481101515612b2e57fe5b6020020151605f020163ffffffff16811515612b4657fe5b04856020015184600481101515612b5957fe5b602002019063ffffffff16908163ffffffff16815250508163ffffffff16856020015184600481101515612b8957fe5b602002015163ffffffff161115612bbb5760208501518360048110612baa57fe5b602002015160ff841660c087015291505b84518360048110612bc857fe5b6020020151600460008760e00151815260200190815260200160002060130184600881101515612bf457fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846020015183600481101515612c2f57fe5b6020020151600460008760e00151815260200190815260200160002060130184600401600881101515612c5e57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846060015183600481101515612c9957fe5b6020020151600460008760e00151815260200190815260200160002060140184600881101515612cc557fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846040015183600481101515612d0057fe5b6020020151600460008760e00151815260200190815260200160002060140184600401600881101515612d2f57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050612a88565b61016085015160e0860180516000908152600460205260408082206016908101805463ffffffff96871663ffffffff1990911617905560c08a01519351835291200180546001929092019092166401000000000267ffffffff000000001990911617905560085462015180811515612dd957fe5b044301610140860181905260e0860151600090815260046020526040902060010155612e058589613170565b8596505b505050505050949350505050565b600119439081014060001990910140184241811515612e3257fe5b602084810151805191810151604082015160609092015163ffffffff90811691811695909404959095189183169190910192909201911601015a8101905080604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310612ebf5780518252601f199092019160209182019101612ea0565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120610120959095019490945250505050565b6006608082015263ffffffff60038302811660020a811660a08301528151601491841660048110612f2657fe5b60200201805163ffffffff9201821690528151609691841660048110612f4857fe5b602002015163ffffffff161115612f8057805160969063ffffffff841660048110612f6f57fe5b63ffffffff90921660209290920201525b5050565b604081015160649063ffffffff841660048110612f6f57fe5b606081015160649063ffffffff841660048110612f6f57fe5b612fc88161012001516012600e6132f0565b63ffffffff1660a0820152610120810151612fe290613358565b63ffffffff908116608083015260a082015181169083161415612f8057612f8081608001518260a0015183613441565b600660808201526101208101516002906000908190819061303690601260046132f0565b925060008560c0015163ffffffff1611156130565760018560c001510392505b604085015163ffffffff84166004811061306c57fe5b6020020151915060148263ffffffff16111561308b576005935061311c565b8160650360040290508063ffffffff1685602001518463ffffffff166004811015156130b357fe5b602002015163ffffffff16106130f2576020850151819063ffffffff8516600481106130db57fe5b6020020180519190910363ffffffff16905261311c565b602085015160009063ffffffff85166004811061310b57fe5b63ffffffff90921660209290920201525b505063ffffffff918216600391909102821660020a021660a09190910152565b600560808201526101208101516131579060186101006132f0565b63ffffffff1660a08201819052612f80908390836136e5565b7f5a250066b073a4ff8db1911b1f4467cf987e161fd19daa3dfa3f4c7518d81b638260e0015183610160015184608001518560a0015186600001518760200151886060015189604001518a61014001518b61010001518b604051808c81526020018b63ffffffff1663ffffffff1681526020018a63ffffffff1663ffffffff1681526020018963ffffffff1663ffffffff16815260200188600460200280838360005b8381101561322b578181015183820152602001613213565b5050505090500187600460200280838360005b8381101561325657818101518382015260200161323e565b5050505090500186600460200280838360005b83811015613281578181015183820152602001613269565b5050505090500185600460200280838360005b838110156132ac578181015183820152602001613294565b5050505090500184815260200183815260200182600160a060020a0316600160a060020a031681526020019b50505050505050505050505060405180910390a15050565b60008163ffffffff16848460010163ffffffff1660208110151561331057fe5b60f860020a91901a8102048563ffffffff86166020811061332d57fe5b1a60f860020a0260f860020a9004610100020163ffffffff1681151561334f57fe5b06949350505050565b60006133626138b7565b50604080516102c081018252600180825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152600261018082018190526101a082018190526101c082018190526101e08201819052610200820181905261022082015260036102408201819052610260820181905261028082015260046102a08201528061342284601860166132f0565b63ffffffff166016811061343257fe5b602002015160ff169392505050565b6134496138d7565b506040805160a08101825260018152600a602080830191909152600f82840152601460608301526019608083015260e08401805160009081526004909252838220600901548151835284832060020154915183529382206008015492939290918060646134d68763ffffffff8c16600581106134c157fe5b6020020151879060ff1663ffffffff611a0116565b8115156134df57fe5b0491506134f2858363ffffffff611a2d16565b60e0880151600090815260046020526040902060090155613519838363ffffffff611a2d16565b60e0880151600090815260046020526040902060080155670de0b6b3a7640000613549838663ffffffff611a0116565b81151561355257fe5b60e0890151600090815260046020526040902060070154919004925061357e908363ffffffff611a2d16565b60e0880180516000908152600460208181526040808420600701959095556101008c018790529251825290915220600a01546135c0908363ffffffff61219116565b60e0880180516000908152600460208190526040808320600a019490945591518152919091206003019063ffffffff8a169081106135fa57fe5b0154905060008111156136da576136808161362384670de0b6b3a764000063ffffffff611a0116565b81151561362c57fe5b04600460008a60e0015181526020019081526020016000206011018a63ffffffff1660048110151561365a57fe5b60028104919091015460019091166010026101000a90046001608060020a031690612592565b60e088015160009081526004602081905260409091206011019063ffffffff8b169081106136aa57fe5b600291828204019190066010026101000a8154816001608060020a0302191690836001608060020a031602179055505b505050505050505050565b600080805b60048310156137d6576040840151600a6001600363ffffffff89160601029250836004811061371557fe5b602002015190508063ffffffff168263ffffffff1611158061373c57508563ffffffff1683145b1561374a5760009150613750565b80820391505b8351836004811061375d57fe5b602002015163ffffffff168263ffffffff16101561379b5783518290846004811061378457fe5b6020020180519190910363ffffffff1690526137bc565b835160019084600481106137ab57fe5b63ffffffff90921660209290920201525b600463ffffffff90951694909404936001909201916136ea565b505050505050565b6080604051908101604052806004906020820280388339509192915050565b60c0604051908101604052806006906020820280388339509192915050565b610100604051908101604052806008906020820280388339509192915050565b610300604051908101604052806138516137de565b815260200161385e6137de565b815260200161386b6137de565b81526020016138786137de565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101009091015290565b6102c0604051908101604052806016906020820280388339509192915050565b60a06040519081016040528060059060208202803883395091929150505600a165627a7a72305820a281bed730379db69125a5540d11ba27393ab263ea82a75f4bef5a467328d1e50029

Swarm Source

bzzr://a281bed730379db69125a5540d11ba27393ab263ea82a75f4bef5a467328d1e5

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.