Overview
ETH Balance
3.852088907445866336 ETH
Eth Value
$12,310.49 (@ $3,195.79/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 873 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Gains | 7268837 | 2085 days ago | IN | 0 ETH | 0.00032685 | ||||
Close Entry | 7268830 | 2085 days ago | IN | 0 ETH | 0.00082737 | ||||
Buy Share | 7268823 | 2085 days ago | IN | 0.01 ETH | 0.00360569 | ||||
Init Race | 7268810 | 2085 days ago | IN | 0 ETH | 0.00111409 | ||||
Withdraw Gains | 7268792 | 2085 days ago | IN | 0 ETH | 0.00028016 | ||||
Close Entry | 7268787 | 2085 days ago | IN | 0 ETH | 0.00059098 | ||||
Buy Share | 7268778 | 2085 days ago | IN | 0.01 ETH | 0.00187247 | ||||
Init Race | 7268770 | 2085 days ago | IN | 0 ETH | 0.0013369 | ||||
Change Block Tim... | 7268765 | 2085 days ago | IN | 0 ETH | 0.00016937 | ||||
Withdraw Gains | 6775142 | 2177 days ago | IN | 0 ETH | 0.00024853 | ||||
Withdraw Gains | 6757701 | 2179 days ago | IN | 0 ETH | 0.00036951 | ||||
Buy Share | 6748458 | 2181 days ago | IN | 0.077 ETH | 0.0003222 | ||||
Buy Share | 6748455 | 2181 days ago | IN | 0.077 ETH | 0.0003222 | ||||
Withdraw Gains | 6743923 | 2182 days ago | IN | 0 ETH | 0.00013685 | ||||
Withdraw Gains | 6741595 | 2182 days ago | IN | 0 ETH | 0.00037016 | ||||
Withdraw Gains | 6739162 | 2182 days ago | IN | 0 ETH | 0.00046898 | ||||
Withdraw Gains | 6739041 | 2183 days ago | IN | 0 ETH | 0.00060721 | ||||
Withdraw Gains | 6737902 | 2183 days ago | IN | 0 ETH | 0.00043257 | ||||
Withdraw Gains | 6737232 | 2183 days ago | IN | 0 ETH | 0.00022809 | ||||
Withdraw Gains | 6737108 | 2183 days ago | IN | 0 ETH | 0.00014069 | ||||
Withdraw Gains | 6737069 | 2183 days ago | IN | 0 ETH | 0.00020792 | ||||
Withdraw Gains | 6736661 | 2183 days ago | IN | 0 ETH | 0.000329 | ||||
Withdraw Gains | 6736642 | 2183 days ago | IN | 0 ETH | 0.00024759 | ||||
Withdraw Gains | 6736607 | 2183 days ago | IN | 0 ETH | 0.00028607 | ||||
Withdraw Gains | 6736405 | 2183 days ago | IN | 0 ETH | 0.00018538 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
7268837 | 2085 days ago | 0.23820156 ETH | ||||
7268830 | 2085 days ago | 0.03903104 ETH | ||||
7268830 | 2085 days ago | 0.01951552 ETH | ||||
7268823 | 2085 days ago | 0.0005 ETH | ||||
7268792 | 2085 days ago | 0.92758573 ETH | ||||
7268787 | 2085 days ago | 0.1539303 ETH | ||||
7268787 | 2085 days ago | 0.07696515 ETH | ||||
7268778 | 2085 days ago | 0.0005 ETH | ||||
6775142 | 2177 days ago | 0.02207404 ETH | ||||
6757701 | 2179 days ago | 0.01103199 ETH | ||||
6743923 | 2182 days ago | 0.08849729 ETH | ||||
6741595 | 2182 days ago | 0.4286128 ETH | ||||
6739162 | 2182 days ago | 0.61700444 ETH | ||||
6739041 | 2183 days ago | 0.0498314 ETH | ||||
6737902 | 2183 days ago | 0.38319918 ETH | ||||
6737232 | 2183 days ago | 1.25823165 ETH | ||||
6737108 | 2183 days ago | 0.20609052 ETH | ||||
6737069 | 2183 days ago | 0.08884822 ETH | ||||
6736661 | 2183 days ago | 0.35474132 ETH | ||||
6736642 | 2183 days ago | 0.37636118 ETH | ||||
6736607 | 2183 days ago | 1.5236745 ETH | ||||
6736405 | 2183 days ago | 0.10371672 ETH | ||||
6735938 | 2183 days ago | 0.71119886 ETH | ||||
6735935 | 2183 days ago | 16.67040936 ETH | ||||
6735929 | 2183 days ago | 5.98539029 ETH |
Loading...
Loading
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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
608060405260008054600160a060020a031916738942a5995bd168f347f7ec58f25a54a9a064f8821781556005805460ff191690556006819055600755600f60085534801561004d57600080fd5b5060018054600160a060020a031916331790556000303111156100a657600154604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156100a4573d6000803e3d6000fd5b505b61392280620000b66000396000f30060806040526004361061011c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630149eea0811461013557806310b7d9ae1461015c5780631449c321146101855780631e98d33414610293578063212a6fd3146102d557806332dc04aa146102ea578063342d1c32146103025780635a9e426b146103365780635b3660961461034b5780636b2f46321461036c578063844d38ee1461038157806388037e1c146103965780638da5cb5b146104b6578063a6f9dae1146104e7578063ae5dbd4314610508578063b395f27814610557578063bd679ab214610585578063bdc0ba8e1461059a578063cc0e13e2146105af578063e8657538146105c4578063fee13823146105e7575b600054600160a060020a0316331461013357600080fd5b005b34801561014157600080fd5b5061014a6105ef565b60408051918252519081900360200190f35b34801561016857600080fd5b506101716105f5565b604080519115158252519081900360200190f35b34801561019157600080fd5b5061019a6105fe565b604051808c608080838360005b838110156101bf5781810151838201526020016101a7565b505050509050018b81526020018a63ffffffff1663ffffffff16815260200189815260200188815260200187815260200186600660200280838360005b838110156102145781810151838201526020016101fc565b5050505090500185600860200280838360005b8381101561023f578181015183820152602001610227565b5050505090500184600860200280838360005b8381101561026a578181015183820152602001610252565b505050509050018381526020018281526020019b50505050505050505050505060405180910390f35b34801561029f57600080fd5b50604080516080818101909252610133913691600491608491908390819083908290808284375093965061082395505050505050565b3480156102e157600080fd5b50610133610a29565b3480156102f657600080fd5b50610133600435610aa6565b34801561030e57600080fd5b5061013363ffffffff6004358116906024359060443516600160a060020a0360643516610b05565b34801561034257600080fd5b50610133610c62565b34801561035757600080fd5b50610133600160a060020a0360043516610e33565b34801561037857600080fd5b5061014a610ef5565b34801561038d57600080fd5b5061014a610efa565b3480156103a257600080fd5b506103ab610f9b565b6040518a8152602081018a608080838360005b838110156103d65781810151838201526020016103be565b5050505090500189815260200188815260200187600460200280838360005b8381101561040d5781810151838201526020016103f5565b5050505090500186600460200280838360005b83811015610438578181015183820152602001610420565b5050505090500185600660200280838360005b8381101561046357818101518382015260200161044b565b5050505090500184600460200280838360005b8381101561048e578181015183820152602001610476565b505050509050018381526020018281526020019a505050505050505050505060405180910390f35b3480156104c257600080fd5b506104cb61131f565b60408051600160a060020a039092168252519081900360200190f35b3480156104f357600080fd5b50610133600160a060020a036004351661132e565b34801561051457600080fd5b5061051d6113f0565b6040805163ffffffff90971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561056357600080fd5b5061056c6116c4565b6040805192835260208301919091528051918290030190f35b34801561059157600080fd5b506101336116dd565b3480156105a657600080fd5b506101336117d9565b3480156105bb57600080fd5b5061013361186d565b61013363ffffffff60043581169060243516600160a060020a03604435166118d5565b610133611984565b60075490565b60055460ff1690565b6106066137de565b60008060008060006106166137fd565b61061e61381c565b61062661381c565b600654600081815260046020526040812090918291600991906016018360088082049290920154600654600090815260046020819052604080832080546001820154975483516080810194859052600790981685026101000a90960463ffffffff169766038d7ea4c680009791969095601584019560138501956014909501944394928e9291908390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116106b157905050506040805160c08101909152939e508892506006915083905082826020028201916000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161070557505060408051610100810191829052959a508994506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610761575050604080516101008101918290529599508894506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116107bd579050505050505092509a509a509a509a509a509a509a509a509a509a509a50909192939495969798999a565b600154600090819081908190600160a060020a0316331461084357600080fd5b60055460ff161561085357600080fd5b60068054600101908190556000908152600460205260408120945092505b60048310156109405784836004811061088657fe5b60200201516009846004811061089857fe5b602091828204019190066101000a81548160ff021916908360ff160217905550606484601301846008811015156108cb57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055506019846013018460040160088110151561090a57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050610871565b4380855563128a180001600185015566038d7ea4c680006002850181905560075490925061096f908590611995565b9050670de0b6b3a764000061098a828463ffffffff611a0116565b81151561099357fe5b046007808601829055549091506109b0908263ffffffff611a2d16565b6007556006546040518181527f56bb87056d3ab27d1f849434662a0094311af359f66c9c50e1a3a0f2941e34f79190879043906020810183608080838360005b83811015610a085781810151838201526020016109f0565b50505050905001828152602001935050505060405180910390a15050505050565b600154600090600160a060020a03163314610a4357600080fd5b60055460ff1615610a5357600080fd5b506006546000908152600460205260409020610a6e81611a42565b60065460408051918252517f4eb04f9aed2df935e25cbec04051b51a0d2dedf786d3ef9ef4cfcb717ff8115f9181900360200190a150565b600154600160a060020a03163314610abd57600080fd5b60008111610aca57600080fd5b60088190556040805182815290517f6c1cf48245a0a91e114596b04dfcbe443303e5f72fab6771794891112fe4395f9181900360200190a150565b6000333214610b1357600080fd5b60055460ff16158015610b2857506000600654115b8015610b3b575066038d7ea4c680008410155b8015610b50575068056bc75e2d631000008411155b8015610b63575060038563ffffffff1611155b8015610b76575060058363ffffffff1611155b8015610b95575060065460009081526004602052604090206001015443105b1515610ba057600080fd5b5060008054604080517f52dde1c300000000000000000000000000000000000000000000000000000000815260048101879052336024820181905291519193600160a060020a03909316926352dde1c3926044808401936020939083900390910190829087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b505050506040513d6020811015610c3d57600080fd5b5051935060008411610c4e57600080fd5b610c5b8186868686611c5a565b5050505050565b6005546000908190819060ff161515600114610c7d57600080fd5b3392506000600654118015610caa575060065460009081526004602052604081206016015463ffffffff16115b8015610cd55750600654600090815260046020526040902060160154634000000063ffffffff909116105b8015610cfe5750600654600160a060020a03841660009081526002602081905260409091200154145b1515610d0957600080fd5b5060009050805b6004811015610dab57600654600081815260046020818152604080842060020154600160a060020a03891685526003835281852095855294909152909120610d6d929184908110610d5d57fe5b015484910263ffffffff61219116565b600160a060020a038416600090815260036020908152604080832060065484529091528120919350908260048110610da157fe5b0155600101610d10565b6000821115610e2e57604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015610dea573d6000803e3d6000fd5b50604080518381524260208201528151600160a060020a038616927fe139691e7435f1fb40ec50ed3729009226be49087fd00e9e5bac276c2a8f40cf928290030190a25b505050565b600154600160a060020a03163314610e4a57600080fd5b600054600160a060020a0382811691161415610e6557600080fd5b600160a060020a0381161515610e7a57600080fd5b60005460408051600160a060020a03928316815291831660208301524282820152517f87ab77b91a9a6a5a04a748607e0ee38d580963c4e21fe45d2e79ffeef26bc55e9181900360600190a16000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b303190565b336000818152600260208190526040822001549091908290610f4890610f2390849060016121a1565b600160a060020a0384166000908152600260205260409020549063ffffffff61219116565b600160a060020a038316600090815260026020526040902060010154909150811115610f9157600160a060020a0382166000908152600260205260409020600101549003610f95565b5060005b92915050565b6000610fa56137de565b600080610fb06137de565b610fb86137de565b610fc06137fd565b610fc86137de565b6000806000610fd56137de565b60065460009081526004602081905260409182902060028101548351608081019094529e50339450600301908282826020028201915b81548152602001906001019080831161100b5750505050509a506004600060065481526020019081526020016000206008015499506004600060065481526020019081526020016000206007015498506004600060065481526020019081526020016000206011016004806020026040519081016040528092919082600480156110dc576020028201916000905b82829054906101000a90046001608060020a03166001608060020a031681526020019060100190602082600f010492830192600103820291508084116110995790505b505060065460009081526004602052604090206009810154949c5093965050601690920191506002905060088104919091015460079091166004026101000a900463ffffffff1681600063ffffffff909216602092830291909101526006546000908152600490915260409020601601600360088104919091015460079091166004026101000a900463ffffffff1681600163ffffffff909216602092830291909101526006546000908152600491829052604090206016019060088104919091015460079091166004026101000a900463ffffffff1681600263ffffffff909216602092830291909101526006546000908152600490915260409020601601600560088104919091015460079091166004026101000a900463ffffffff1681600363ffffffff929092166020928302919091015260068054600090815260049092526040808320815160c0810192839052949a508a949360159091019291908390855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116112405750505050600160a060020a038516600090815260036020908152604080832060065484529091529081902081516080810192839052949a5092506004915082845b8154815260200190600101908083116112bb57505050600160a060020a03909416600090815260036020908152604080832060065484529091529020600401549d9e9c9d9b9c9a9b999a9899979891976001608060020a0316965093945092505050565b600154600160a060020a031681565b600154600160a060020a0316331461134557600080fd5b600154600160a060020a038281169116141561136057600080fd5b600160a060020a038116151561137557600080fd5b60015460408051600160a060020a03928316815291831660208301524282820152517fc13a1166d81cd3b0b352a367aebab95f3a6f6bc695fdab8e9a9d335239c3861b9181900360600190a16001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6006546000908152600460205260408120601681015468010000000000000000810463ffffffff9081166c0100000000000000000000000083048216017001000000000000000000000000000000008304821601740100000000000000000000000000000000000000009092041601919081908190819081903390826114758261243b565b600160a060020a03848116600090815260036020908152604080832060065484528252808320600490810154845483517f1097b9ee0000000000000000000000000000000000000000000000000000000081526001938101939093529251969e5070010000000000000000000000000000000090046001608060020a03169b50931693631097b9ee93602480820194918390030190829087803b15801561151b57600080fd5b505af115801561152f573d6000803e3d6000fd5b505050506040513d602081101561154557600080fd5b5051600654600160a060020a038516600090815260026020819052604082200154670de0b6b3a7640000938a02939093049950965086955014156116b9576115918360065460006121a1565b9450600090505b600481101561163257670de0b6b3a764000061161b6011840183600481106115bc57fe5b600281049190910154600160a060020a03871660009081526003602090815260408083206006548452909152902060019092166010026101000a90046001608060020a031690846004811061160d57fe5b01549063ffffffff611a0116565b81151561162457fe5b049390930192600101611598565b600160a060020a038316600090815260036020908152604080832060065484529091529020600401546001608060020a031684106116b457600160a060020a038316600090815260036020908152604080832060065484529091529020600401546116ad9085906001608060020a031663ffffffff611a2d16565b93506116b9565b600093505b505050909192939495565b6006546000908152600460205260409020600101544391565b33600090815260026020819052604082200154819015156116fd57600080fd5b339150611709826124f5565b90506000811161171857600080fd5b600160a060020a038216600090815260026020526040902060010154611744908263ffffffff61219116565b600160a060020a038316600081815260026020908152604091829020600101939093558051918252918101839052428183015290517f8ea11b70a47e5aaa4024df0985799a384faaaf34e6da0aadbadcae0fbfca45ac9181900360600190a1604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610e2e573d6000803e3d6000fd5b6117e16137de565b600154600160a060020a031633146117f857600080fd5b506040805160808101825260008082526001602080840191909152600283850152600360608401526005805460ff1916905583519182524290820152825191927fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e5692918290030190a161186a81610823565b50565b600154600160a060020a0316331461188457600080fd5b6005805460ff1916600117908190556040805160ff929092161515825242602083015280517fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e569281900390910190a1565b6000803332146118e457600080fd5b50506005543390349060ff161580156118ff57506000600654115b8015611912575066038d7ea4c680008110155b8015611927575068056bc75e2d631000008111155b801561193a575060038563ffffffff1611155b801561194d575060058463ffffffff1611155b801561196c575060065460009081526004602052604090206001015443105b151561197757600080fd5b610c5b8286838787611c5a565b61199060075434612191565b600755565b600282015460009081906119b784670de0b6b3a764000063ffffffff611a0116565b8115156119c057fe5b0490506119da81856009015461219190919063ffffffff16565b600985015560088401546119f4908263ffffffff61219116565b6008850155905092915050565b6000821515611a1257506000610f95565b50818102818382811515611a2257fe5b0414610f9557600080fd5b600082821115611a3c57600080fd5b50900390565b601681015463ffffffff166000808080808086118015611a6b575063400000008663ffffffff16105b15611c515760168701805463ffffffff19166340000000881763ffffffff9081169190911790915560028801546009890154909650670de0b6b3a764000091611ab791908890611a0116565b811515611ac057fe5b0493506064611ad0856019611a01565b811515611ad957fe5b0492506064611ae985600a611a01565b811515611af257fe5b0491506064611b02856005611a01565b811515611b0b57fe5b049050611b238360075461219190919063ffffffff16565b6007556000811115611bd05760008054600154604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101949094525191169163c671b93491849160448082019260209290919082900301818588803b158015611ba257600080fd5b505af1158015611bb6573d6000803e3d6000fd5b50505050506040513d6020811015611bcd57600080fd5b50505b6000821115611c515760008054604080517f16ff1c760000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926316ff1c76928692600480820193929182900301818588803b158015611c3757600080fd5b505af1158015611c4b573d6000803e3d6000fd5b50505050505b50505050505050565b600160a060020a0385166000818152600360209081526040808320600654808552908352818420600484528285209585526002938490529184209092015490939291829182918291829114611d5c57600160a060020a038c166000908152600260208190526040909120015415611d3b57600160a060020a038c1660009081526002602081905260409091200154611cf5908d9060016121a1565b600160a060020a038d16600090815260026020526040902054909550611d21908663ffffffff61219116565b600160a060020a038d166000908152600260205260409020555b600654600160a060020a038d16600090815260026020819052604090912001555b6064611d6f8b600563ffffffff611a0116565b811515611d7857fe5b049350611d94848b03876007015461219190919063ffffffff16565b6007870155600054604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a038f811660048301528b811660248301529151919092169163c671b93491879160448082019260209290919082900301818588803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b50505050506040513d6020811015611e3657600080fd5b50516004880180546001608060020a037001000000000000000000000000000000008083048216850182160291161790559250611e8f866064611e808d602863ffffffff611a0116565b811515611e8957fe5b04611995565b506064611ea38b602863ffffffff611a0116565b811515611eac57fe5b60028801549190049a50611ece8b670de0b6b3a764000063ffffffff611a0116565b811515611ed757fe5b049150611ef182876008015461219190919063ffffffff16565b6008870155611f1d826003880163ffffffff8e1660048110611f0f57fe5b01549063ffffffff61219116565b6003870163ffffffff8d1660048110611f3257fe5b01558663ffffffff8c1660048110611f4657fe5b01549350831515611f9c576016860163ffffffff60028d011660068110611f6957fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811660010116029190911790555b611fac848363ffffffff61219116565b8763ffffffff8d1660048110611fbe57fe5b01556008860154670de0b6b3a764000010156120065760088601546007870154611ff690670de0b6b3a764000063ffffffff611a0116565b811515611fff57fe5b0460028701555b612074670de0b6b3a764000061204f6011890163ffffffff8f166004811061202a57fe5b60028104919091015486916001166010026101000a90046001608060020a0316611a01565b81151561205857fe5b60048a01546001608060020a031691900463ffffffff61259216565b6004880180546fffffffffffffffffffffffffffffffff19166001608060020a03929092169190911790556120ab8b8a848f6125ae565b9050806015870163ffffffff8b16600681106120c357fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055507f12ca57ddb41cb2f73bbe08965d3d608bb3c1947bc95672ef54022490f55360218c6006548d868d866040518087600160a060020a0316600160a060020a031681526020018681526020018563ffffffff1663ffffffff1681526020018481526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff168152602001965050505050505060405180910390a1505050505050505050505050565b81810182811015610f9557600080fd5b60008060008060008060008060008a600260008e600160a060020a0316600160a060020a03168152602001908152602001600020600201541415806121e457508a155b156121f2576000985061242c565b60008b8152600460205260409020975089801561221e57506016880154634000000063ffffffff909116105b1561222c576000985061242c565b505060168601546002870154600160a060020a038c1660009081526003602090815260408083208e8452909152812064010000000090930463ffffffff16975095508594509250835b60048110156123295781816004811061228a57fe5b015492506122c2670de0b6b3a76400006122aa858763ffffffff611a0116565b8115156122b357fe5b8891900463ffffffff61219116565b955061231f670de0b6b3a764000061230760118b0184600481106122e257fe5b60028104919091015487916001166010026101000a90046001608060020a0316611a01565b81151561231057fe5b8791900463ffffffff61219116565b9450600101612275565b60048201546001608060020a0316851061236357600482015461235c9086906001608060020a031663ffffffff611a2d16565b9450612368565b600094505b612378868663ffffffff61219116565b955060008763ffffffff161115612428578163ffffffff6000198901166004811061239f57fe5b0154925060008311156124285760098801546064906123eb90603c90670de0b6b3a7640000906123d5908963ffffffff611a0116565b8115156123de57fe5b049063ffffffff611a0116565b8115156123f457fe5b0494506124256003890163ffffffff6000198a01166004811061241357fe5b01546122aa878663ffffffff611a0116565b95505b8598505b50505050505050509392505050565b600281015460009081908180805b600483101561248e5760038701836004811061246157fe5b01549150612481670de0b6b3a7640000612307848763ffffffff611a0116565b9450600190920191612449565b60098701546064906124b790603c90670de0b6b3a7640000906123d5908963ffffffff611a0116565b8115156124c057fe5b0490506124ea87600a01546124de838861219190919063ffffffff16565b9063ffffffff61219116565b979650505050505050565b600160a060020a03811660009081526002602081905260408220015481906125499061252490859060016121a1565b600160a060020a0385166000908152600260205260409020549063ffffffff61219116565b600160a060020a038416600090815260026020526040902060010154909150811115610f9157600160a060020a0383166000908152600260205260409020600101549003610f95565b8181016001608060020a038084169082161015610f9557600080fd5b6000806125b961383c565b6125c16137fd565b60008060006004600060065481526020019081526020016000206015018a63ffffffff166006811015156125f157fe5b600891828204019190066004029054906101000a900463ffffffff169550600460006006548152602001908152602001600020600b018a63ffffffff1660068110151561263a57fe5b0154431161264a57859650612e09565b60065460009081526004602052604090206016015463ffffffff90811661016087015261267c908a90606490611a0116565b670de0b6b3a76400009004600a01985061138889111561269c5761138898505b6040805160c0810182526103e8808252610fa06020830152611388928201929092526107d060608201526080810191909152610bb860a08201529589019593508363ffffffff8b16600681106126ee57fe5b602002015161ffff168663ffffffff161080156127165750600085610160015163ffffffff16115b1561272357859650612e09565b8363ffffffff8b166006811061273557fe5b602002015161ffff1663ffffffff8716106127815743600460006006548152602001908152602001600020600b018b63ffffffff1660068110151561277657fe5b015560009550612786565b606499505b6101608501805160010163ffffffff90811690915260065460e08701819052600090815260046020526040812060160154640100000000900490911660c087015292505b600483101561298e5760e0850151600090815260046020526040902060130183600881106127f457fe5b600891828204019190066004029054906101000a900463ffffffff1685600001518460048110151561282257fe5b63ffffffff9092166020928302919091015260e08601516000908152600491829052604090206013019084016008811061285857fe5b600891828204019190066004029054906101000a900463ffffffff1685602001518460048110151561288657fe5b63ffffffff9092166020928302919091015260e0860151600090815260049091526040902060029060140184600881106128bc57fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff168115156128e757fe5b048560600151846004811015156128fa57fe5b63ffffffff9092166020928302919091015260e086015160009081526004918290526040902060029160149091019085016008811061293557fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1681151561296057fe5b0485604001518460048110151561297357fe5b63ffffffff90921660209290920201526001909201916127ca565b84610160015163ffffffff16600114156129cb57845160059063ffffffff8d16600481106129b857fe5b6020020180519190910163ffffffff1690525b6129d485612e17565b63ffffffff8a1615156129eb576129eb8b86612ef9565b8963ffffffff1660011415612a0457612a048b86612f84565b8963ffffffff1660021415612a1d57612a1d8b86612f9d565b8963ffffffff1660031415612a3657612a368b86612fb6565b8963ffffffff1660041415612a4e57612a4e85613012565b8963ffffffff1660051415612a6757612a678b8661313c565b60808501805163ffffffff8d81166201000002909117169052600092508291505b6004831015612d65578451605f908460048110612aa157fe5b6020020180519190910263ffffffff16905284516064908460048110612ac357fe5b6020020181815163ffffffff16811515612ad957fe5b0463ffffffff1690525060608501518360048110612af357fe5b60200201518551600a909102908460048110612b0b57fe5b6020020151600a02019050606481606402866020015185600481101515612b2e57fe5b6020020151605f020163ffffffff16811515612b4657fe5b04856020015184600481101515612b5957fe5b602002019063ffffffff16908163ffffffff16815250508163ffffffff16856020015184600481101515612b8957fe5b602002015163ffffffff161115612bbb5760208501518360048110612baa57fe5b602002015160ff841660c087015291505b84518360048110612bc857fe5b6020020151600460008760e00151815260200190815260200160002060130184600881101515612bf457fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846020015183600481101515612c2f57fe5b6020020151600460008760e00151815260200190815260200160002060130184600401600881101515612c5e57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846060015183600481101515612c9957fe5b6020020151600460008760e00151815260200190815260200160002060140184600881101515612cc557fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846040015183600481101515612d0057fe5b6020020151600460008760e00151815260200190815260200160002060140184600401600881101515612d2f57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050612a88565b61016085015160e0860180516000908152600460205260408082206016908101805463ffffffff96871663ffffffff1990911617905560c08a01519351835291200180546001929092019092166401000000000267ffffffff000000001990911617905560085462015180811515612dd957fe5b044301610140860181905260e0860151600090815260046020526040902060010155612e058589613170565b8596505b505050505050949350505050565b600119439081014060001990910140184241811515612e3257fe5b602084810151805191810151604082015160609092015163ffffffff90811691811695909404959095189183169190910192909201911601015a8101905080604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310612ebf5780518252601f199092019160209182019101612ea0565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120610120959095019490945250505050565b6006608082015263ffffffff60038302811660020a811660a08301528151601491841660048110612f2657fe5b60200201805163ffffffff9201821690528151609691841660048110612f4857fe5b602002015163ffffffff161115612f8057805160969063ffffffff841660048110612f6f57fe5b63ffffffff90921660209290920201525b5050565b604081015160649063ffffffff841660048110612f6f57fe5b606081015160649063ffffffff841660048110612f6f57fe5b612fc88161012001516012600e6132f0565b63ffffffff1660a0820152610120810151612fe290613358565b63ffffffff908116608083015260a082015181169083161415612f8057612f8081608001518260a0015183613441565b600660808201526101208101516002906000908190819061303690601260046132f0565b925060008560c0015163ffffffff1611156130565760018560c001510392505b604085015163ffffffff84166004811061306c57fe5b6020020151915060148263ffffffff16111561308b576005935061311c565b8160650360040290508063ffffffff1685602001518463ffffffff166004811015156130b357fe5b602002015163ffffffff16106130f2576020850151819063ffffffff8516600481106130db57fe5b6020020180519190910363ffffffff16905261311c565b602085015160009063ffffffff85166004811061310b57fe5b63ffffffff90921660209290920201525b505063ffffffff918216600391909102821660020a021660a09190910152565b600560808201526101208101516131579060186101006132f0565b63ffffffff1660a08201819052612f80908390836136e5565b7f5a250066b073a4ff8db1911b1f4467cf987e161fd19daa3dfa3f4c7518d81b638260e0015183610160015184608001518560a0015186600001518760200151886060015189604001518a61014001518b61010001518b604051808c81526020018b63ffffffff1663ffffffff1681526020018a63ffffffff1663ffffffff1681526020018963ffffffff1663ffffffff16815260200188600460200280838360005b8381101561322b578181015183820152602001613213565b5050505090500187600460200280838360005b8381101561325657818101518382015260200161323e565b5050505090500186600460200280838360005b83811015613281578181015183820152602001613269565b5050505090500185600460200280838360005b838110156132ac578181015183820152602001613294565b5050505090500184815260200183815260200182600160a060020a0316600160a060020a031681526020019b50505050505050505050505060405180910390a15050565b60008163ffffffff16848460010163ffffffff1660208110151561331057fe5b60f860020a91901a8102048563ffffffff86166020811061332d57fe5b1a60f860020a0260f860020a9004610100020163ffffffff1681151561334f57fe5b06949350505050565b60006133626138b7565b50604080516102c081018252600180825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152600261018082018190526101a082018190526101c082018190526101e08201819052610200820181905261022082015260036102408201819052610260820181905261028082015260046102a08201528061342284601860166132f0565b63ffffffff166016811061343257fe5b602002015160ff169392505050565b6134496138d7565b506040805160a08101825260018152600a602080830191909152600f82840152601460608301526019608083015260e08401805160009081526004909252838220600901548151835284832060020154915183529382206008015492939290918060646134d68763ffffffff8c16600581106134c157fe5b6020020151879060ff1663ffffffff611a0116565b8115156134df57fe5b0491506134f2858363ffffffff611a2d16565b60e0880151600090815260046020526040902060090155613519838363ffffffff611a2d16565b60e0880151600090815260046020526040902060080155670de0b6b3a7640000613549838663ffffffff611a0116565b81151561355257fe5b60e0890151600090815260046020526040902060070154919004925061357e908363ffffffff611a2d16565b60e0880180516000908152600460208181526040808420600701959095556101008c018790529251825290915220600a01546135c0908363ffffffff61219116565b60e0880180516000908152600460208190526040808320600a019490945591518152919091206003019063ffffffff8a169081106135fa57fe5b0154905060008111156136da576136808161362384670de0b6b3a764000063ffffffff611a0116565b81151561362c57fe5b04600460008a60e0015181526020019081526020016000206011018a63ffffffff1660048110151561365a57fe5b60028104919091015460019091166010026101000a90046001608060020a031690612592565b60e088015160009081526004602081905260409091206011019063ffffffff8b169081106136aa57fe5b600291828204019190066010026101000a8154816001608060020a0302191690836001608060020a031602179055505b505050505050505050565b600080805b60048310156137d6576040840151600a6001600363ffffffff89160601029250836004811061371557fe5b602002015190508063ffffffff168263ffffffff1611158061373c57508563ffffffff1683145b1561374a5760009150613750565b80820391505b8351836004811061375d57fe5b602002015163ffffffff168263ffffffff16101561379b5783518290846004811061378457fe5b6020020180519190910363ffffffff1690526137bc565b835160019084600481106137ab57fe5b63ffffffff90921660209290920201525b600463ffffffff90951694909404936001909201916136ea565b505050505050565b6080604051908101604052806004906020820280388339509192915050565b60c0604051908101604052806006906020820280388339509192915050565b610100604051908101604052806008906020820280388339509192915050565b610300604051908101604052806138516137de565b815260200161385e6137de565b815260200161386b6137de565b81526020016138786137de565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101009091015290565b6102c0604051908101604052806016906020820280388339509192915050565b60a06040519081016040528060059060208202803883395091929150505600a165627a7a72305820a281bed730379db69125a5540d11ba27393ab263ea82a75f4bef5a467328d1e50029
Deployed Bytecode
0x60806040526004361061011c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630149eea0811461013557806310b7d9ae1461015c5780631449c321146101855780631e98d33414610293578063212a6fd3146102d557806332dc04aa146102ea578063342d1c32146103025780635a9e426b146103365780635b3660961461034b5780636b2f46321461036c578063844d38ee1461038157806388037e1c146103965780638da5cb5b146104b6578063a6f9dae1146104e7578063ae5dbd4314610508578063b395f27814610557578063bd679ab214610585578063bdc0ba8e1461059a578063cc0e13e2146105af578063e8657538146105c4578063fee13823146105e7575b600054600160a060020a0316331461013357600080fd5b005b34801561014157600080fd5b5061014a6105ef565b60408051918252519081900360200190f35b34801561016857600080fd5b506101716105f5565b604080519115158252519081900360200190f35b34801561019157600080fd5b5061019a6105fe565b604051808c608080838360005b838110156101bf5781810151838201526020016101a7565b505050509050018b81526020018a63ffffffff1663ffffffff16815260200189815260200188815260200187815260200186600660200280838360005b838110156102145781810151838201526020016101fc565b5050505090500185600860200280838360005b8381101561023f578181015183820152602001610227565b5050505090500184600860200280838360005b8381101561026a578181015183820152602001610252565b505050509050018381526020018281526020019b50505050505050505050505060405180910390f35b34801561029f57600080fd5b50604080516080818101909252610133913691600491608491908390819083908290808284375093965061082395505050505050565b3480156102e157600080fd5b50610133610a29565b3480156102f657600080fd5b50610133600435610aa6565b34801561030e57600080fd5b5061013363ffffffff6004358116906024359060443516600160a060020a0360643516610b05565b34801561034257600080fd5b50610133610c62565b34801561035757600080fd5b50610133600160a060020a0360043516610e33565b34801561037857600080fd5b5061014a610ef5565b34801561038d57600080fd5b5061014a610efa565b3480156103a257600080fd5b506103ab610f9b565b6040518a8152602081018a608080838360005b838110156103d65781810151838201526020016103be565b5050505090500189815260200188815260200187600460200280838360005b8381101561040d5781810151838201526020016103f5565b5050505090500186600460200280838360005b83811015610438578181015183820152602001610420565b5050505090500185600660200280838360005b8381101561046357818101518382015260200161044b565b5050505090500184600460200280838360005b8381101561048e578181015183820152602001610476565b505050509050018381526020018281526020019a505050505050505050505060405180910390f35b3480156104c257600080fd5b506104cb61131f565b60408051600160a060020a039092168252519081900360200190f35b3480156104f357600080fd5b50610133600160a060020a036004351661132e565b34801561051457600080fd5b5061051d6113f0565b6040805163ffffffff90971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561056357600080fd5b5061056c6116c4565b6040805192835260208301919091528051918290030190f35b34801561059157600080fd5b506101336116dd565b3480156105a657600080fd5b506101336117d9565b3480156105bb57600080fd5b5061013361186d565b61013363ffffffff60043581169060243516600160a060020a03604435166118d5565b610133611984565b60075490565b60055460ff1690565b6106066137de565b60008060008060006106166137fd565b61061e61381c565b61062661381c565b600654600081815260046020526040812090918291600991906016018360088082049290920154600654600090815260046020819052604080832080546001820154975483516080810194859052600790981685026101000a90960463ffffffff169766038d7ea4c680009791969095601584019560138501956014909501944394928e9291908390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116106b157905050506040805160c08101909152939e508892506006915083905082826020028201916000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161070557505060408051610100810191829052959a508994506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610761575050604080516101008101918290529599508894506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116107bd579050505050505092509a509a509a509a509a509a509a509a509a509a509a50909192939495969798999a565b600154600090819081908190600160a060020a0316331461084357600080fd5b60055460ff161561085357600080fd5b60068054600101908190556000908152600460205260408120945092505b60048310156109405784836004811061088657fe5b60200201516009846004811061089857fe5b602091828204019190066101000a81548160ff021916908360ff160217905550606484601301846008811015156108cb57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055506019846013018460040160088110151561090a57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050610871565b4380855563128a180001600185015566038d7ea4c680006002850181905560075490925061096f908590611995565b9050670de0b6b3a764000061098a828463ffffffff611a0116565b81151561099357fe5b046007808601829055549091506109b0908263ffffffff611a2d16565b6007556006546040518181527f56bb87056d3ab27d1f849434662a0094311af359f66c9c50e1a3a0f2941e34f79190879043906020810183608080838360005b83811015610a085781810151838201526020016109f0565b50505050905001828152602001935050505060405180910390a15050505050565b600154600090600160a060020a03163314610a4357600080fd5b60055460ff1615610a5357600080fd5b506006546000908152600460205260409020610a6e81611a42565b60065460408051918252517f4eb04f9aed2df935e25cbec04051b51a0d2dedf786d3ef9ef4cfcb717ff8115f9181900360200190a150565b600154600160a060020a03163314610abd57600080fd5b60008111610aca57600080fd5b60088190556040805182815290517f6c1cf48245a0a91e114596b04dfcbe443303e5f72fab6771794891112fe4395f9181900360200190a150565b6000333214610b1357600080fd5b60055460ff16158015610b2857506000600654115b8015610b3b575066038d7ea4c680008410155b8015610b50575068056bc75e2d631000008411155b8015610b63575060038563ffffffff1611155b8015610b76575060058363ffffffff1611155b8015610b95575060065460009081526004602052604090206001015443105b1515610ba057600080fd5b5060008054604080517f52dde1c300000000000000000000000000000000000000000000000000000000815260048101879052336024820181905291519193600160a060020a03909316926352dde1c3926044808401936020939083900390910190829087803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b505050506040513d6020811015610c3d57600080fd5b5051935060008411610c4e57600080fd5b610c5b8186868686611c5a565b5050505050565b6005546000908190819060ff161515600114610c7d57600080fd5b3392506000600654118015610caa575060065460009081526004602052604081206016015463ffffffff16115b8015610cd55750600654600090815260046020526040902060160154634000000063ffffffff909116105b8015610cfe5750600654600160a060020a03841660009081526002602081905260409091200154145b1515610d0957600080fd5b5060009050805b6004811015610dab57600654600081815260046020818152604080842060020154600160a060020a03891685526003835281852095855294909152909120610d6d929184908110610d5d57fe5b015484910263ffffffff61219116565b600160a060020a038416600090815260036020908152604080832060065484529091528120919350908260048110610da157fe5b0155600101610d10565b6000821115610e2e57604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015610dea573d6000803e3d6000fd5b50604080518381524260208201528151600160a060020a038616927fe139691e7435f1fb40ec50ed3729009226be49087fd00e9e5bac276c2a8f40cf928290030190a25b505050565b600154600160a060020a03163314610e4a57600080fd5b600054600160a060020a0382811691161415610e6557600080fd5b600160a060020a0381161515610e7a57600080fd5b60005460408051600160a060020a03928316815291831660208301524282820152517f87ab77b91a9a6a5a04a748607e0ee38d580963c4e21fe45d2e79ffeef26bc55e9181900360600190a16000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b303190565b336000818152600260208190526040822001549091908290610f4890610f2390849060016121a1565b600160a060020a0384166000908152600260205260409020549063ffffffff61219116565b600160a060020a038316600090815260026020526040902060010154909150811115610f9157600160a060020a0382166000908152600260205260409020600101549003610f95565b5060005b92915050565b6000610fa56137de565b600080610fb06137de565b610fb86137de565b610fc06137fd565b610fc86137de565b6000806000610fd56137de565b60065460009081526004602081905260409182902060028101548351608081019094529e50339450600301908282826020028201915b81548152602001906001019080831161100b5750505050509a506004600060065481526020019081526020016000206008015499506004600060065481526020019081526020016000206007015498506004600060065481526020019081526020016000206011016004806020026040519081016040528092919082600480156110dc576020028201916000905b82829054906101000a90046001608060020a03166001608060020a031681526020019060100190602082600f010492830192600103820291508084116110995790505b505060065460009081526004602052604090206009810154949c5093965050601690920191506002905060088104919091015460079091166004026101000a900463ffffffff1681600063ffffffff909216602092830291909101526006546000908152600490915260409020601601600360088104919091015460079091166004026101000a900463ffffffff1681600163ffffffff909216602092830291909101526006546000908152600491829052604090206016019060088104919091015460079091166004026101000a900463ffffffff1681600263ffffffff909216602092830291909101526006546000908152600490915260409020601601600560088104919091015460079091166004026101000a900463ffffffff1681600363ffffffff929092166020928302919091015260068054600090815260049092526040808320815160c0810192839052949a508a949360159091019291908390855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116112405750505050600160a060020a038516600090815260036020908152604080832060065484529091529081902081516080810192839052949a5092506004915082845b8154815260200190600101908083116112bb57505050600160a060020a03909416600090815260036020908152604080832060065484529091529020600401549d9e9c9d9b9c9a9b999a9899979891976001608060020a0316965093945092505050565b600154600160a060020a031681565b600154600160a060020a0316331461134557600080fd5b600154600160a060020a038281169116141561136057600080fd5b600160a060020a038116151561137557600080fd5b60015460408051600160a060020a03928316815291831660208301524282820152517fc13a1166d81cd3b0b352a367aebab95f3a6f6bc695fdab8e9a9d335239c3861b9181900360600190a16001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6006546000908152600460205260408120601681015468010000000000000000810463ffffffff9081166c0100000000000000000000000083048216017001000000000000000000000000000000008304821601740100000000000000000000000000000000000000009092041601919081908190819081903390826114758261243b565b600160a060020a03848116600090815260036020908152604080832060065484528252808320600490810154845483517f1097b9ee0000000000000000000000000000000000000000000000000000000081526001938101939093529251969e5070010000000000000000000000000000000090046001608060020a03169b50931693631097b9ee93602480820194918390030190829087803b15801561151b57600080fd5b505af115801561152f573d6000803e3d6000fd5b505050506040513d602081101561154557600080fd5b5051600654600160a060020a038516600090815260026020819052604082200154670de0b6b3a7640000938a02939093049950965086955014156116b9576115918360065460006121a1565b9450600090505b600481101561163257670de0b6b3a764000061161b6011840183600481106115bc57fe5b600281049190910154600160a060020a03871660009081526003602090815260408083206006548452909152902060019092166010026101000a90046001608060020a031690846004811061160d57fe5b01549063ffffffff611a0116565b81151561162457fe5b049390930192600101611598565b600160a060020a038316600090815260036020908152604080832060065484529091529020600401546001608060020a031684106116b457600160a060020a038316600090815260036020908152604080832060065484529091529020600401546116ad9085906001608060020a031663ffffffff611a2d16565b93506116b9565b600093505b505050909192939495565b6006546000908152600460205260409020600101544391565b33600090815260026020819052604082200154819015156116fd57600080fd5b339150611709826124f5565b90506000811161171857600080fd5b600160a060020a038216600090815260026020526040902060010154611744908263ffffffff61219116565b600160a060020a038316600081815260026020908152604091829020600101939093558051918252918101839052428183015290517f8ea11b70a47e5aaa4024df0985799a384faaaf34e6da0aadbadcae0fbfca45ac9181900360600190a1604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610e2e573d6000803e3d6000fd5b6117e16137de565b600154600160a060020a031633146117f857600080fd5b506040805160808101825260008082526001602080840191909152600283850152600360608401526005805460ff1916905583519182524290820152825191927fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e5692918290030190a161186a81610823565b50565b600154600160a060020a0316331461188457600080fd5b6005805460ff1916600117908190556040805160ff929092161515825242602083015280517fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e569281900390910190a1565b6000803332146118e457600080fd5b50506005543390349060ff161580156118ff57506000600654115b8015611912575066038d7ea4c680008110155b8015611927575068056bc75e2d631000008111155b801561193a575060038563ffffffff1611155b801561194d575060058463ffffffff1611155b801561196c575060065460009081526004602052604090206001015443105b151561197757600080fd5b610c5b8286838787611c5a565b61199060075434612191565b600755565b600282015460009081906119b784670de0b6b3a764000063ffffffff611a0116565b8115156119c057fe5b0490506119da81856009015461219190919063ffffffff16565b600985015560088401546119f4908263ffffffff61219116565b6008850155905092915050565b6000821515611a1257506000610f95565b50818102818382811515611a2257fe5b0414610f9557600080fd5b600082821115611a3c57600080fd5b50900390565b601681015463ffffffff166000808080808086118015611a6b575063400000008663ffffffff16105b15611c515760168701805463ffffffff19166340000000881763ffffffff9081169190911790915560028801546009890154909650670de0b6b3a764000091611ab791908890611a0116565b811515611ac057fe5b0493506064611ad0856019611a01565b811515611ad957fe5b0492506064611ae985600a611a01565b811515611af257fe5b0491506064611b02856005611a01565b811515611b0b57fe5b049050611b238360075461219190919063ffffffff16565b6007556000811115611bd05760008054600154604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101949094525191169163c671b93491849160448082019260209290919082900301818588803b158015611ba257600080fd5b505af1158015611bb6573d6000803e3d6000fd5b50505050506040513d6020811015611bcd57600080fd5b50505b6000821115611c515760008054604080517f16ff1c760000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926316ff1c76928692600480820193929182900301818588803b158015611c3757600080fd5b505af1158015611c4b573d6000803e3d6000fd5b50505050505b50505050505050565b600160a060020a0385166000818152600360209081526040808320600654808552908352818420600484528285209585526002938490529184209092015490939291829182918291829114611d5c57600160a060020a038c166000908152600260208190526040909120015415611d3b57600160a060020a038c1660009081526002602081905260409091200154611cf5908d9060016121a1565b600160a060020a038d16600090815260026020526040902054909550611d21908663ffffffff61219116565b600160a060020a038d166000908152600260205260409020555b600654600160a060020a038d16600090815260026020819052604090912001555b6064611d6f8b600563ffffffff611a0116565b811515611d7857fe5b049350611d94848b03876007015461219190919063ffffffff16565b6007870155600054604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a038f811660048301528b811660248301529151919092169163c671b93491879160448082019260209290919082900301818588803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b50505050506040513d6020811015611e3657600080fd5b50516004880180546001608060020a037001000000000000000000000000000000008083048216850182160291161790559250611e8f866064611e808d602863ffffffff611a0116565b811515611e8957fe5b04611995565b506064611ea38b602863ffffffff611a0116565b811515611eac57fe5b60028801549190049a50611ece8b670de0b6b3a764000063ffffffff611a0116565b811515611ed757fe5b049150611ef182876008015461219190919063ffffffff16565b6008870155611f1d826003880163ffffffff8e1660048110611f0f57fe5b01549063ffffffff61219116565b6003870163ffffffff8d1660048110611f3257fe5b01558663ffffffff8c1660048110611f4657fe5b01549350831515611f9c576016860163ffffffff60028d011660068110611f6957fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811660010116029190911790555b611fac848363ffffffff61219116565b8763ffffffff8d1660048110611fbe57fe5b01556008860154670de0b6b3a764000010156120065760088601546007870154611ff690670de0b6b3a764000063ffffffff611a0116565b811515611fff57fe5b0460028701555b612074670de0b6b3a764000061204f6011890163ffffffff8f166004811061202a57fe5b60028104919091015486916001166010026101000a90046001608060020a0316611a01565b81151561205857fe5b60048a01546001608060020a031691900463ffffffff61259216565b6004880180546fffffffffffffffffffffffffffffffff19166001608060020a03929092169190911790556120ab8b8a848f6125ae565b9050806015870163ffffffff8b16600681106120c357fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055507f12ca57ddb41cb2f73bbe08965d3d608bb3c1947bc95672ef54022490f55360218c6006548d868d866040518087600160a060020a0316600160a060020a031681526020018681526020018563ffffffff1663ffffffff1681526020018481526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff168152602001965050505050505060405180910390a1505050505050505050505050565b81810182811015610f9557600080fd5b60008060008060008060008060008a600260008e600160a060020a0316600160a060020a03168152602001908152602001600020600201541415806121e457508a155b156121f2576000985061242c565b60008b8152600460205260409020975089801561221e57506016880154634000000063ffffffff909116105b1561222c576000985061242c565b505060168601546002870154600160a060020a038c1660009081526003602090815260408083208e8452909152812064010000000090930463ffffffff16975095508594509250835b60048110156123295781816004811061228a57fe5b015492506122c2670de0b6b3a76400006122aa858763ffffffff611a0116565b8115156122b357fe5b8891900463ffffffff61219116565b955061231f670de0b6b3a764000061230760118b0184600481106122e257fe5b60028104919091015487916001166010026101000a90046001608060020a0316611a01565b81151561231057fe5b8791900463ffffffff61219116565b9450600101612275565b60048201546001608060020a0316851061236357600482015461235c9086906001608060020a031663ffffffff611a2d16565b9450612368565b600094505b612378868663ffffffff61219116565b955060008763ffffffff161115612428578163ffffffff6000198901166004811061239f57fe5b0154925060008311156124285760098801546064906123eb90603c90670de0b6b3a7640000906123d5908963ffffffff611a0116565b8115156123de57fe5b049063ffffffff611a0116565b8115156123f457fe5b0494506124256003890163ffffffff6000198a01166004811061241357fe5b01546122aa878663ffffffff611a0116565b95505b8598505b50505050505050509392505050565b600281015460009081908180805b600483101561248e5760038701836004811061246157fe5b01549150612481670de0b6b3a7640000612307848763ffffffff611a0116565b9450600190920191612449565b60098701546064906124b790603c90670de0b6b3a7640000906123d5908963ffffffff611a0116565b8115156124c057fe5b0490506124ea87600a01546124de838861219190919063ffffffff16565b9063ffffffff61219116565b979650505050505050565b600160a060020a03811660009081526002602081905260408220015481906125499061252490859060016121a1565b600160a060020a0385166000908152600260205260409020549063ffffffff61219116565b600160a060020a038416600090815260026020526040902060010154909150811115610f9157600160a060020a0383166000908152600260205260409020600101549003610f95565b8181016001608060020a038084169082161015610f9557600080fd5b6000806125b961383c565b6125c16137fd565b60008060006004600060065481526020019081526020016000206015018a63ffffffff166006811015156125f157fe5b600891828204019190066004029054906101000a900463ffffffff169550600460006006548152602001908152602001600020600b018a63ffffffff1660068110151561263a57fe5b0154431161264a57859650612e09565b60065460009081526004602052604090206016015463ffffffff90811661016087015261267c908a90606490611a0116565b670de0b6b3a76400009004600a01985061138889111561269c5761138898505b6040805160c0810182526103e8808252610fa06020830152611388928201929092526107d060608201526080810191909152610bb860a08201529589019593508363ffffffff8b16600681106126ee57fe5b602002015161ffff168663ffffffff161080156127165750600085610160015163ffffffff16115b1561272357859650612e09565b8363ffffffff8b166006811061273557fe5b602002015161ffff1663ffffffff8716106127815743600460006006548152602001908152602001600020600b018b63ffffffff1660068110151561277657fe5b015560009550612786565b606499505b6101608501805160010163ffffffff90811690915260065460e08701819052600090815260046020526040812060160154640100000000900490911660c087015292505b600483101561298e5760e0850151600090815260046020526040902060130183600881106127f457fe5b600891828204019190066004029054906101000a900463ffffffff1685600001518460048110151561282257fe5b63ffffffff9092166020928302919091015260e08601516000908152600491829052604090206013019084016008811061285857fe5b600891828204019190066004029054906101000a900463ffffffff1685602001518460048110151561288657fe5b63ffffffff9092166020928302919091015260e0860151600090815260049091526040902060029060140184600881106128bc57fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff168115156128e757fe5b048560600151846004811015156128fa57fe5b63ffffffff9092166020928302919091015260e086015160009081526004918290526040902060029160149091019085016008811061293557fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1681151561296057fe5b0485604001518460048110151561297357fe5b63ffffffff90921660209290920201526001909201916127ca565b84610160015163ffffffff16600114156129cb57845160059063ffffffff8d16600481106129b857fe5b6020020180519190910163ffffffff1690525b6129d485612e17565b63ffffffff8a1615156129eb576129eb8b86612ef9565b8963ffffffff1660011415612a0457612a048b86612f84565b8963ffffffff1660021415612a1d57612a1d8b86612f9d565b8963ffffffff1660031415612a3657612a368b86612fb6565b8963ffffffff1660041415612a4e57612a4e85613012565b8963ffffffff1660051415612a6757612a678b8661313c565b60808501805163ffffffff8d81166201000002909117169052600092508291505b6004831015612d65578451605f908460048110612aa157fe5b6020020180519190910263ffffffff16905284516064908460048110612ac357fe5b6020020181815163ffffffff16811515612ad957fe5b0463ffffffff1690525060608501518360048110612af357fe5b60200201518551600a909102908460048110612b0b57fe5b6020020151600a02019050606481606402866020015185600481101515612b2e57fe5b6020020151605f020163ffffffff16811515612b4657fe5b04856020015184600481101515612b5957fe5b602002019063ffffffff16908163ffffffff16815250508163ffffffff16856020015184600481101515612b8957fe5b602002015163ffffffff161115612bbb5760208501518360048110612baa57fe5b602002015160ff841660c087015291505b84518360048110612bc857fe5b6020020151600460008760e00151815260200190815260200160002060130184600881101515612bf457fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846020015183600481101515612c2f57fe5b6020020151600460008760e00151815260200190815260200160002060130184600401600881101515612c5e57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846060015183600481101515612c9957fe5b6020020151600460008760e00151815260200190815260200160002060140184600881101515612cc557fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846040015183600481101515612d0057fe5b6020020151600460008760e00151815260200190815260200160002060140184600401600881101515612d2f57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050612a88565b61016085015160e0860180516000908152600460205260408082206016908101805463ffffffff96871663ffffffff1990911617905560c08a01519351835291200180546001929092019092166401000000000267ffffffff000000001990911617905560085462015180811515612dd957fe5b044301610140860181905260e0860151600090815260046020526040902060010155612e058589613170565b8596505b505050505050949350505050565b600119439081014060001990910140184241811515612e3257fe5b602084810151805191810151604082015160609092015163ffffffff90811691811695909404959095189183169190910192909201911601015a8101905080604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310612ebf5780518252601f199092019160209182019101612ea0565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120610120959095019490945250505050565b6006608082015263ffffffff60038302811660020a811660a08301528151601491841660048110612f2657fe5b60200201805163ffffffff9201821690528151609691841660048110612f4857fe5b602002015163ffffffff161115612f8057805160969063ffffffff841660048110612f6f57fe5b63ffffffff90921660209290920201525b5050565b604081015160649063ffffffff841660048110612f6f57fe5b606081015160649063ffffffff841660048110612f6f57fe5b612fc88161012001516012600e6132f0565b63ffffffff1660a0820152610120810151612fe290613358565b63ffffffff908116608083015260a082015181169083161415612f8057612f8081608001518260a0015183613441565b600660808201526101208101516002906000908190819061303690601260046132f0565b925060008560c0015163ffffffff1611156130565760018560c001510392505b604085015163ffffffff84166004811061306c57fe5b6020020151915060148263ffffffff16111561308b576005935061311c565b8160650360040290508063ffffffff1685602001518463ffffffff166004811015156130b357fe5b602002015163ffffffff16106130f2576020850151819063ffffffff8516600481106130db57fe5b6020020180519190910363ffffffff16905261311c565b602085015160009063ffffffff85166004811061310b57fe5b63ffffffff90921660209290920201525b505063ffffffff918216600391909102821660020a021660a09190910152565b600560808201526101208101516131579060186101006132f0565b63ffffffff1660a08201819052612f80908390836136e5565b7f5a250066b073a4ff8db1911b1f4467cf987e161fd19daa3dfa3f4c7518d81b638260e0015183610160015184608001518560a0015186600001518760200151886060015189604001518a61014001518b61010001518b604051808c81526020018b63ffffffff1663ffffffff1681526020018a63ffffffff1663ffffffff1681526020018963ffffffff1663ffffffff16815260200188600460200280838360005b8381101561322b578181015183820152602001613213565b5050505090500187600460200280838360005b8381101561325657818101518382015260200161323e565b5050505090500186600460200280838360005b83811015613281578181015183820152602001613269565b5050505090500185600460200280838360005b838110156132ac578181015183820152602001613294565b5050505090500184815260200183815260200182600160a060020a0316600160a060020a031681526020019b50505050505050505050505060405180910390a15050565b60008163ffffffff16848460010163ffffffff1660208110151561331057fe5b60f860020a91901a8102048563ffffffff86166020811061332d57fe5b1a60f860020a0260f860020a9004610100020163ffffffff1681151561334f57fe5b06949350505050565b60006133626138b7565b50604080516102c081018252600180825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152600261018082018190526101a082018190526101c082018190526101e08201819052610200820181905261022082015260036102408201819052610260820181905261028082015260046102a08201528061342284601860166132f0565b63ffffffff166016811061343257fe5b602002015160ff169392505050565b6134496138d7565b506040805160a08101825260018152600a602080830191909152600f82840152601460608301526019608083015260e08401805160009081526004909252838220600901548151835284832060020154915183529382206008015492939290918060646134d68763ffffffff8c16600581106134c157fe5b6020020151879060ff1663ffffffff611a0116565b8115156134df57fe5b0491506134f2858363ffffffff611a2d16565b60e0880151600090815260046020526040902060090155613519838363ffffffff611a2d16565b60e0880151600090815260046020526040902060080155670de0b6b3a7640000613549838663ffffffff611a0116565b81151561355257fe5b60e0890151600090815260046020526040902060070154919004925061357e908363ffffffff611a2d16565b60e0880180516000908152600460208181526040808420600701959095556101008c018790529251825290915220600a01546135c0908363ffffffff61219116565b60e0880180516000908152600460208190526040808320600a019490945591518152919091206003019063ffffffff8a169081106135fa57fe5b0154905060008111156136da576136808161362384670de0b6b3a764000063ffffffff611a0116565b81151561362c57fe5b04600460008a60e0015181526020019081526020016000206011018a63ffffffff1660048110151561365a57fe5b60028104919091015460019091166010026101000a90046001608060020a031690612592565b60e088015160009081526004602081905260409091206011019063ffffffff8b169081106136aa57fe5b600291828204019190066010026101000a8154816001608060020a0302191690836001608060020a031602179055505b505050505050505050565b600080805b60048310156137d6576040840151600a6001600363ffffffff89160601029250836004811061371557fe5b602002015190508063ffffffff168263ffffffff1611158061373c57508563ffffffff1683145b1561374a5760009150613750565b80820391505b8351836004811061375d57fe5b602002015163ffffffff168263ffffffff16101561379b5783518290846004811061378457fe5b6020020180519190910363ffffffff1690526137bc565b835160019084600481106137ab57fe5b63ffffffff90921660209290920201525b600463ffffffff90951694909404936001909201916136ea565b505050505050565b6080604051908101604052806004906020820280388339509192915050565b60c0604051908101604052806006906020820280388339509192915050565b610100604051908101604052806008906020820280388339509192915050565b610300604051908101604052806138516137de565b815260200161385e6137de565b815260200161386b6137de565b81526020016138786137de565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101009091015290565b6102c0604051908101604052806016906020820280388339509192915050565b60a06040519081016040528060059060208202803883395091929150505600a165627a7a72305820a281bed730379db69125a5540d11ba27393ab263ea82a75f4bef5a467328d1e50029
Swarm Source
bzzr://a281bed730379db69125a5540d11ba27393ab263ea82a75f4bef5a467328d1e5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,195.79 | 3.8521 | $12,310.49 |
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.