Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 586 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Clear Bets | 9473228 | 1846 days ago | IN | 0 ETH | 0.00078321 | ||||
Roll Dice | 9473219 | 1846 days ago | IN | 0.01 ETH | 0.0018576 | ||||
Clear Bets | 8003521 | 2082 days ago | IN | 0 ETH | 0.00022687 | ||||
Roll Dice | 8003511 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003506 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003501 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003497 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003493 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003488 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003484 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003478 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003474 | 2082 days ago | IN | 0.01 ETH | 0.00136019 | ||||
Roll Dice | 8003469 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003464 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003459 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003454 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003449 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003445 | 2082 days ago | IN | 0.01 ETH | 0.00136019 | ||||
Roll Dice | 8003441 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003436 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003432 | 2082 days ago | IN | 0.01 ETH | 0.00136019 | ||||
Roll Dice | 8003427 | 2082 days ago | IN | 0.01 ETH | 0.00136038 | ||||
Roll Dice | 8003422 | 2082 days ago | IN | 0.01 ETH | 0.00084833 | ||||
Clear Bets | 8003416 | 2082 days ago | IN | 0 ETH | 0.00026818 | ||||
Roll Dice | 7949804 | 2091 days ago | IN | 0.012 ETH | 0.00241004 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
9473228 | 1846 days ago | 0.01086086 ETH | ||||
8003521 | 2082 days ago | 0.01123595 ETH | ||||
8003511 | 2082 days ago | 0.01123595 ETH | ||||
8003506 | 2082 days ago | 0.01123595 ETH | ||||
8003501 | 2082 days ago | 0.01149425 ETH | ||||
8003497 | 2082 days ago | 0.01190476 ETH | ||||
8003493 | 2082 days ago | 0.01234567 ETH | ||||
8003488 | 2082 days ago | 0.0125 ETH | ||||
8003484 | 2082 days ago | 0.01020408 ETH | ||||
8003478 | 2082 days ago | 0.01470588 ETH | ||||
8003474 | 2082 days ago | 0.01639344 ETH | ||||
8003469 | 2082 days ago | 0.01851851 ETH | ||||
8003464 | 2082 days ago | 0.02173913 ETH | ||||
8003459 | 2082 days ago | 0.02564102 ETH | ||||
8003454 | 2082 days ago | 0.03125 ETH | ||||
8003449 | 2082 days ago | 0.04 ETH | ||||
8003445 | 2082 days ago | 0.05 ETH | ||||
8003441 | 2082 days ago | 0.0625 ETH | ||||
8003436 | 2082 days ago | 0.07692307 ETH | ||||
8003432 | 2082 days ago | 0.09090909 ETH | ||||
8003427 | 2082 days ago | 0.09090909 ETH | ||||
8003416 | 2082 days ago | 0.012 ETH | ||||
7949270 | 2091 days ago | 0.019 ETH | ||||
7948435 | 2091 days ago | 0.022 ETH | ||||
7947904 | 2091 days ago | 1 wei |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SpinWin
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-05-07 */ pragma solidity ^0.4.24; /** * @title SpinWinInterface */ interface SpinWinInterface { function refundPendingBets() external returns (bool); } /** * @title AdvertisingInterface */ interface AdvertisingInterface { function incrementBetCounter() external returns (bool); } contract SpinWinLibraryInterface { function calculateWinningReward(uint256 betValue, uint256 playerNumber, uint256 houseEdge) external pure returns (uint256); function calculateTokenReward(address settingAddress, uint256 betValue, uint256 playerNumber, uint256 houseEdge) external constant returns (uint256); function generateRandomNumber(address settingAddress, uint256 betBlockNumber, uint256 extraData, uint256 divisor) external constant returns (uint256); function calculateClearBetBlocksReward(address settingAddress, address lotteryAddress) external constant returns (uint256); function calculateLotteryContribution(address settingAddress, address lotteryAddress, uint256 betValue) external constant returns (uint256); function calculateExchangeTokenValue(address settingAddress, uint256 tokenAmount) external constant returns (uint256, uint256, uint256, uint256); } /** * @title LotteryInterface */ interface LotteryInterface { function claimReward(address playerAddress, uint256 tokenAmount) external returns (bool); function calculateLotteryContributionPercentage() external constant returns (uint256); function getNumLottery() external constant returns (uint256); function isActive() external constant returns (bool); function getCurrentTicketMultiplierHonor() external constant returns (uint256); function getCurrentLotteryTargetBalance() external constant returns (uint256, uint256); } /** * @title SettingInterface */ interface SettingInterface { function uintSettings(bytes32 name) external constant returns (uint256); function boolSettings(bytes32 name) external constant returns (bool); function isActive() external constant returns (bool); function canBet(uint256 rewardValue, uint256 betValue, uint256 playerNumber, uint256 houseEdge) external constant returns (bool); function isExchangeAllowed(address playerAddress, uint256 tokenAmount) external constant returns (bool); /******************************************/ /* SPINWIN ONLY METHODS */ /******************************************/ function spinwinSetUintSetting(bytes32 name, uint256 value) external; function spinwinIncrementUintSetting(bytes32 name) external; function spinwinSetBoolSetting(bytes32 name, bool value) external; function spinwinAddFunds(uint256 amount) external; function spinwinUpdateTokenToWeiExchangeRate() external; function spinwinRollDice(uint256 betValue) external; function spinwinUpdateWinMetric(uint256 playerProfit) external; function spinwinUpdateLoseMetric(uint256 betValue, uint256 tokenRewardValue) external; function spinwinUpdateLotteryContributionMetric(uint256 lotteryContribution) external; function spinwinUpdateExchangeMetric(uint256 exchangeAmount) external; /******************************************/ /* SPINLOTTERY ONLY METHODS */ /******************************************/ function spinlotterySetUintSetting(bytes32 name, uint256 value) external; function spinlotteryIncrementUintSetting(bytes32 name) external; function spinlotterySetBoolSetting(bytes32 name, bool value) external; function spinlotteryUpdateTokenToWeiExchangeRate() external; function spinlotterySetMinBankroll(uint256 _minBankroll) external returns (bool); } /** * @title TokenInterface */ interface TokenInterface { function getTotalSupply() external constant returns (uint256); function getBalanceOf(address account) external constant returns (uint256); function transfer(address _to, uint256 _value) external returns (bool); function transferFrom(address _from, address _to, uint256 _value) external returns (bool); function approve(address _spender, uint256 _value) external returns (bool success); function approveAndCall(address _spender, uint256 _value, bytes _extraData) external returns (bool success); function burn(uint256 _value) external returns (bool success); function burnFrom(address _from, uint256 _value) external returns (bool success); function mintTransfer(address _to, uint _value) external returns (bool); function burnAt(address _at, uint _value) external returns (bool); } // https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract TokenERC20 { // Public variables of the token string public name; string public symbol; uint8 public decimals = 18; // 18 decimals is the strongly suggested default, avoid changing it uint256 public totalSupply; // This creates an array with all balances mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; // This generates a public event on the blockchain that will notify clients event Transfer(address indexed from, address indexed to, uint256 value); // This generates a public event on the blockchain that will notify clients event Approval(address indexed _owner, address indexed _spender, uint256 _value); // This notifies clients about the amount burnt event Burn(address indexed from, uint256 value); /** * Constructor function * * Initializes contract with initial supply tokens to the creator of the contract */ constructor( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens name = tokenName; // Set the name for display purposes symbol = tokenSymbol; // Set the symbol for display purposes } /** * Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { // Prevent transfer to 0x0 address. Use burn() instead require(_to != 0x0); // Check if the sender has enough require(balanceOf[_from] >= _value); // Check for overflows require(balanceOf[_to] + _value > balanceOf[_to]); // Save this for an assertion in the future uint previousBalances = balanceOf[_from] + balanceOf[_to]; // Subtract from the sender balanceOf[_from] -= _value; // Add the same to the recipient balanceOf[_to] += _value; emit Transfer(_from, _to, _value); // Asserts are used to use static analysis to find bugs in your code. They should never fail assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /** * Transfer tokens * * Send `_value` tokens to `_to` from your account * * @param _to The address of the recipient * @param _value the amount to send */ function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } /** * Transfer tokens from other address * * Send `_value` tokens to `_to` in behalf of `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value the amount to send */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /** * Set allowance for other address * * Allows `_spender` to spend no more than `_value` tokens in your behalf * * @param _spender The address authorized to spend * @param _value the max amount they can spend */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * Set allowance for other address and notify * * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it * * @param _spender The address authorized to spend * @param _value the max amount they can spend * @param _extraData some extra information to send to the approved contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * Destroy tokens * * Remove `_value` tokens from the system irreversibly * * @param _value the amount of money to burn */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply emit Burn(msg.sender, _value); return true; } /** * Destroy tokens from other account * * Remove `_value` tokens from the system irreversibly on behalf of `_from`. * * @param _from the address of the sender * @param _value the amount of money to burn */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply emit Burn(_from, _value); return true; } } contract developed { address public developer; /** * Constructor */ constructor() public { developer = msg.sender; } /** * @dev Checks only developer address is calling */ modifier onlyDeveloper { require(msg.sender == developer); _; } /** * @dev Allows developer to switch developer address * @param _developer The new developer address to be set */ function changeDeveloper(address _developer) public onlyDeveloper { developer = _developer; } /** * @dev Allows developer to withdraw ERC20 Token */ function withdrawToken(address tokenContractAddress) public onlyDeveloper { TokenERC20 _token = TokenERC20(tokenContractAddress); if (_token.balanceOf(this) > 0) { _token.transfer(developer, _token.balanceOf(this)); } } } /** * @title SpinWin */ contract SpinWin is developed, SpinWinInterface { using SafeMath for uint256; address public tokenAddress; address public settingAddress; address public lotteryAddress; TokenInterface internal _spintoken; SettingInterface internal _setting; LotteryInterface internal _lottery; SpinWinLibraryInterface internal _lib; AdvertisingInterface internal _advertising; /** * @dev Player variables */ struct Bet { address playerAddress; bytes32 betId; uint256 betValue; uint256 diceResult; uint256 playerNumber; uint256 houseEdge; uint256 rewardValue; uint256 tokenRewardValue; uint256 blockNumber; bool processed; } struct TokenExchange { address playerAddress; bytes32 exchangeId; bool processed; } mapping (uint256 => Bet) internal bets; mapping (bytes32 => uint256) internal betIdLookup; mapping (address => uint256) public playerPendingWithdrawals; mapping (address => uint256) public playerPendingTokenWithdrawals; mapping (address => address) public referees; mapping (bytes32 => TokenExchange) public tokenExchanges; mapping (address => uint256) public lotteryBlocksAmount; uint256 constant public TWO_DECIMALS = 100; uint256 constant public PERCENTAGE_DIVISOR = 10 ** 6; // 1000000 = 100% uint256 constant public CURRENCY_DIVISOR = 10**18; uint256 public totalPendingBets; /** * @dev Log when bet is placed */ event LogBet(bytes32 indexed betId, address indexed playerAddress, uint256 playerNumber, uint256 betValue, uint256 houseEdge, uint256 rewardValue, uint256 tokenRewardValue); /** * @dev Log when bet is cleared * * Status: * -2 = lose + failed mint and transfer * -1 = lose + failed send * 0 = lose * 1 = win * 2 = win + failed send * 3 = refund * 4 = refund + failed send * 5 = owner cancel + refund * 6 = owner cancel + refund + failed send */ event LogResult(bytes32 indexed betId, address indexed playerAddress, uint256 playerNumber, uint256 diceResult, uint256 betValue, uint256 houseEdge, uint256 rewardValue, uint256 tokenRewardValue, int256 status); /** * @dev Log when spinwin contributes some ETH to the lottery contract address */ event LogLotteryContribution(bytes32 indexed betId, address indexed playerAddress, uint256 weiValue); /** * @dev Log when spinwin rewards the referee of a bet or the person clears bet * rewardType * 1 = referral * 2 = clearBet */ event LogRewardLotteryBlocks(address indexed receiver, bytes32 indexed betId, uint256 lottoBlocksAmount, uint256 rewardType, uint256 status); /** * @dev Log when player clears bets */ event LogClearBets(address indexed playerAddress); /** * @dev Log when player claims the lottery blocks reward * * Status: * 0 = failed * 1 = success */ event LogClaimLotteryBlocks(address indexed playerAddress, uint256 numLottery, uint256 claimAmount, uint256 claimStatus); /** * @dev Log when player exchanges token to Wei * * Status: * 0 = failed send * 1 = success * 2 = failed destroy token */ event LogTokenExchange(bytes32 indexed exchangeId, address indexed playerAddress, uint256 tokenValue, uint256 tokenToWeiExchangeRate, uint256 weiValue, uint256 receivedWeiValue, uint256 remainderTokenValue, uint256 status); /** * @dev Log when player withdraws balance from failed transfer * * Status: * 0 = failed * 1 = success */ event LogPlayerWithdrawBalance(address indexed playerAddress, uint256 withdrawAmount, uint256 status); /** * @dev Log when player withdraw token balance from failed token transfer * * Status: * 0 = failed * 1 = success */ event LogPlayerWithdrawTokenBalance(address indexed playerAddress, uint256 withdrawAmount, uint256 status); /** * @dev Log when a bet ID is not found during clear bet */ event LogBetNotFound(bytes32 indexed betId); /** * @dev Log when developer cancel existing active bet */ event LogDeveloperCancelBet(bytes32 indexed betId, address indexed playerAddress); /** * Constructor * @param _tokenAddress SpinToken contract address * @param _settingAddress GameSetting contract address * @param _libraryAddress SpinWinLibrary contract address */ constructor(address _tokenAddress, address _settingAddress, address _libraryAddress) public { tokenAddress = _tokenAddress; settingAddress = _settingAddress; _spintoken = TokenInterface(_tokenAddress); _setting = SettingInterface(_settingAddress); _lib = SpinWinLibraryInterface(_libraryAddress); } /** * @dev Checks if contract is active */ modifier isActive { require(_setting.isActive() == true); _; } /** * @dev Checks whether a bet is allowed, and player profit, bet value, house edge and player number are within range */ modifier canBet(uint256 _betValue, uint256 _playerNumber, uint256 _houseEdge) { require(_setting.canBet(_lib.calculateWinningReward(_betValue, _playerNumber, _houseEdge), _betValue, _playerNumber, _houseEdge) == true); _; } /** * @dev Checks if bet exist */ modifier betExist(bytes32 betId, address playerAddress) { require(betIdLookup[betId] > 0 && bets[betIdLookup[betId]].betId == betId && bets[betIdLookup[betId]].playerAddress == playerAddress); _; } /** * @dev Checks if token exchange is allowed */ modifier isExchangeAllowed(address playerAddress, uint256 tokenAmount) { require(_setting.isExchangeAllowed(playerAddress, tokenAmount) == true); _; } /******************************************/ /* DEVELOPER ONLY METHODS */ /******************************************/ /** * @dev Allows developer to set lottery contract address * @param _lotteryAddress The new lottery contract address to be set */ function devSetLotteryAddress(address _lotteryAddress) public onlyDeveloper { require (_lotteryAddress != address(0)); lotteryAddress = _lotteryAddress; _lottery = LotteryInterface(_lotteryAddress); } /** * @dev Allows developer to set advertising contract address * @param _advertisingAddress The new advertising contract address to be set */ function devSetAdvertisingAddress(address _advertisingAddress) public onlyDeveloper { require (_advertisingAddress != address(0)); _advertising = AdvertisingInterface(_advertisingAddress); } /** * @dev Allows developer to get bet internal ID based on public betId * @param betId The public betId * @return The bet internal ID */ function devGetBetInternalId(bytes32 betId) public onlyDeveloper constant returns (uint256) { return (betIdLookup[betId]); } /** * @dev Allows developer to get bet info based on `betInternalId` * @param betInternalId The bet internal ID to be queried * @return The bet information */ function devGetBet(uint256 betInternalId) public onlyDeveloper constant returns (address, uint256, uint256, uint256, uint256, uint256, uint256, uint256, bool) { Bet memory _bet = bets[betInternalId]; return (_bet.playerAddress, _bet.betValue, _bet.diceResult, _bet.playerNumber, _bet.houseEdge, _bet.rewardValue, _bet.tokenRewardValue, _bet.blockNumber, _bet.processed); } /** * @dev Allows developer to manually refund existing active bet. * @param betId The ID of the bet to be cancelled * @return Return true if success */ function devRefundBet(bytes32 betId) public onlyDeveloper returns (bool) { require (betIdLookup[betId] > 0); Bet storage _bet = bets[betIdLookup[betId]]; require(_bet.processed == false); _bet.processed = true; uint256 betValue = _bet.betValue; _bet.betValue = 0; _bet.rewardValue = 0; _bet.tokenRewardValue = 0; _refundPlayer(betIdLookup[betId], betValue); return true; } /** * @dev Add funds to the contract */ function () public payable isActive { _setting.spinwinAddFunds(msg.value); } /******************************************/ /* SETTING METHODS */ /******************************************/ /** * @dev Triggered during escape hatch. Go through each pending bets * and move the bet value to playerPendingWithdrawals so that player * can withdraw later */ function refundPendingBets() public returns (bool) { require (msg.sender == settingAddress); uint256 totalBets = _setting.uintSettings('totalBets'); if (totalBets > 0) { for (uint256 i = 1; i <= totalBets; i++) { Bet storage _bet = bets[i]; if (_bet.processed == false) { uint256 _betValue = _bet.betValue; _bet.processed = true; _bet.betValue = 0; playerPendingWithdrawals[_bet.playerAddress] = playerPendingWithdrawals[_bet.playerAddress].add(_betValue); emit LogResult(_bet.betId, _bet.playerAddress, _bet.playerNumber, 0, _betValue, _bet.houseEdge, 0, 0, 4); } } } return true; } /******************************************/ /* PUBLIC METHODS */ /******************************************/ /** * @dev Player places a bet. If it has a `referrerAddress`, we want to give reward to the referrer accordingly. * @dev If there is a bet that needs to be cleared, we will do it here too. * @param playerNumber The number that the player chose * @param houseEdge The house edge percentage that the player chose * @param clearBetId The bet ID to be cleared * @param referreeAddress The referree address if exist * @return Return true if success */ function rollDice(uint256 playerNumber, uint256 houseEdge, bytes32 clearBetId, address referreeAddress) public payable canBet(msg.value, playerNumber, houseEdge) returns (bool) { uint256 betInternalId = _storeBet(msg.value, msg.sender, playerNumber, houseEdge); // Check if we need to clear a pending bet if (clearBetId != '') { _clearSingleBet(msg.sender, clearBetId, _setting.uintSettings('blockSecurityCount')); } // Check if we need to reward the referree _rewardReferree(referreeAddress, betInternalId); _advertising.incrementBetCounter(); return true; } /** * @dev Player can clear multiple bets * @param betIds The bet ids to be cleared */ function clearBets(bytes32[] betIds) public isActive { require (betIds.length > 0 && betIds.length <= _setting.uintSettings('maxNumClearBets')); bool canClear = false; uint256 blockSecurityCount = _setting.uintSettings('blockSecurityCount'); for (uint256 i = 0; i < betIds.length; i++) { Bet memory _bet = bets[betIdLookup[betIds[i]]]; if (_bet.processed == false && _setting.uintSettings('contractBalance') >= _bet.rewardValue && (block.number.sub(_bet.blockNumber)) >= blockSecurityCount) { canClear = true; break; } } require(canClear == true); // Loop through each bets and clear it if possible for (i = 0; i < betIds.length; i++) { _clearSingleBet(msg.sender, betIds[i], blockSecurityCount); } emit LogClearBets(msg.sender); } /** * @dev Allow player to claim lottery blocks reward * and spend it on lottery blocks */ function claimLotteryBlocks() public isActive { require (_lottery.isActive() == true); require (lotteryBlocksAmount[msg.sender] > 0); uint256 claimAmount = lotteryBlocksAmount[msg.sender]; lotteryBlocksAmount[msg.sender] = 0; uint256 claimStatus = 1; if (!_lottery.claimReward(msg.sender, claimAmount)) { claimStatus = 0; lotteryBlocksAmount[msg.sender] = claimAmount; } emit LogClaimLotteryBlocks(msg.sender, _lottery.getNumLottery(), claimAmount, claimStatus); } /** * @dev Player exchanges token for Wei * @param tokenAmount The amount of token to be exchanged * @return Return true if success */ function exchangeToken(uint256 tokenAmount) public isExchangeAllowed(msg.sender, tokenAmount) { (uint256 weiValue, uint256 sendWei, uint256 tokenRemainder, uint256 burnToken) = _lib.calculateExchangeTokenValue(settingAddress, tokenAmount); _setting.spinwinIncrementUintSetting('totalTokenExchanges'); // Generate exchangeId bytes32 _exchangeId = keccak256(abi.encodePacked(this, msg.sender, _setting.uintSettings('totalTokenExchanges'))); TokenExchange storage _tokenExchange = tokenExchanges[_exchangeId]; // Make sure we don't process the exchange bet twice require (_tokenExchange.processed == false); // Update exchange metric _setting.spinwinUpdateExchangeMetric(sendWei); /* * Store the info about this exchange */ _tokenExchange.playerAddress = msg.sender; _tokenExchange.exchangeId = _exchangeId; _tokenExchange.processed = true; /* * Burn token at this address */ if (!_spintoken.burnAt(_tokenExchange.playerAddress, burnToken)) { uint256 exchangeStatus = 2; // status = failed destroy token } else { if (!_tokenExchange.playerAddress.send(sendWei)) { exchangeStatus = 0; // status = failed send // If send failed, let player withdraw via playerWithdrawPendingTransactions playerPendingWithdrawals[_tokenExchange.playerAddress] = playerPendingWithdrawals[_tokenExchange.playerAddress].add(sendWei); } else { exchangeStatus = 1; // status = success } } // Update the token to wei exchange rate _setting.spinwinUpdateTokenToWeiExchangeRate(); emit LogTokenExchange(_tokenExchange.exchangeId, _tokenExchange.playerAddress, tokenAmount, _setting.uintSettings('tokenToWeiExchangeRateHonor'), weiValue, sendWei, tokenRemainder, exchangeStatus); } /** * @dev Calculate winning ETH when player wins * @param betValue The amount of ETH for this bet * @param playerNumber The number that player chose * @param houseEdge The house edge for this bet * @return The amount of ETH to be sent to player if he/she wins */ function calculateWinningReward(uint256 betValue, uint256 playerNumber, uint256 houseEdge) public view returns (uint256) { return _lib.calculateWinningReward(betValue, playerNumber, houseEdge); } /** * @dev Calculates token reward amount when player loses * @param betValue The amount of ETH for this bet * @param playerNumber The number that player chose * @param houseEdge The house edge for this bet * @return The amount of token to be sent to player if he/she loses */ function calculateTokenReward(uint256 betValue, uint256 playerNumber, uint256 houseEdge) public constant returns (uint256) { return _lib.calculateTokenReward(settingAddress, betValue, playerNumber, houseEdge); } /** * @dev Player withdraws balance in case of a failed refund or failed win send */ function playerWithdrawPendingTransactions() public { require(playerPendingWithdrawals[msg.sender] > 0); uint256 withdrawAmount = playerPendingWithdrawals[msg.sender]; playerPendingWithdrawals[msg.sender] = 0; // External call to untrusted contract uint256 status = 1; // status = success if (!msg.sender.send(withdrawAmount)) { status = 0; // status = failed /* * If send failed, revert playerPendingWithdrawals[msg.sender] = 0 * so that player can try to withdraw again later */ playerPendingWithdrawals[msg.sender] = withdrawAmount; } emit LogPlayerWithdrawBalance(msg.sender, withdrawAmount, status); } /** * @dev Players withdraws SPIN token balance in case of a failed token transfer */ function playerWithdrawPendingTokenTransactions() public { require(playerPendingTokenWithdrawals[msg.sender] > 0); uint256 withdrawAmount = playerPendingTokenWithdrawals[msg.sender]; playerPendingTokenWithdrawals[msg.sender] = 0; // Mint and transfer token to msg.sender uint256 status = 1; // status = success if (!_spintoken.mintTransfer(msg.sender, withdrawAmount)) { status = 0; // status = failed /* * If transfer failed, revert playerPendingTokenWithdrawals[msg.sender] = 0 * so that player can try to withdraw again later */ playerPendingTokenWithdrawals[msg.sender] = withdrawAmount; } emit LogPlayerWithdrawTokenBalance(msg.sender, withdrawAmount, status); } /** * @dev Player gets bet information based on betId * @return The bet information */ function playerGetBet(bytes32 betId) public constant returns (uint256, uint256, uint256, uint256, uint256, uint256, bool) { require(betIdLookup[betId] > 0 && bets[betIdLookup[betId]].betId == betId); Bet memory _bet = bets[betIdLookup[betId]]; return (_bet.betValue, _bet.diceResult, _bet.playerNumber, _bet.houseEdge, _bet.rewardValue, _bet.tokenRewardValue, _bet.processed); } /** * @dev Player gets pending bet IDs * @return The pending bet IDs */ function playerGetPendingBetIds() public constant returns (bytes32[]) { bytes32[] memory pendingBetIds = new bytes32[](totalPendingBets); if (totalPendingBets > 0) { uint256 counter = 0; for (uint256 i = 1; i <= _setting.uintSettings('totalBets'); i++) { Bet memory _bet = bets[i]; if (_bet.processed == false) { pendingBetIds[counter] = _bet.betId; counter++; } if (counter == totalPendingBets) { break; } } } return pendingBetIds; } /** * @dev Player gets pending bet information based on betId * @return The bet information */ function playerGetPendingBet(bytes32 betId) public constant returns (address, uint256, uint256, uint256, uint256) { require(betIdLookup[betId] > 0 && bets[betIdLookup[betId]].betId == betId); Bet memory _bet = bets[betIdLookup[betId]]; return (_bet.playerAddress, _bet.playerNumber, _bet.betValue, _bet.houseEdge, _bet.blockNumber); } /** * @dev Calculates lottery block rewards when player clears a bet * @return The amount of lottery blocks to be rewarded when player clears bet */ function calculateClearBetBlocksReward() public constant returns (uint256) { return _lib.calculateClearBetBlocksReward(settingAddress, lotteryAddress); } /******************************************/ /* INTERNAL METHODS */ /******************************************/ /** * @dev Stores bet information. * @param betValue The value of the bet * @param playerAddress The player address * @param playerNumber The number that player chose * @param houseEdge The house edge for this bet * @return The internal bet ID of this bet */ function _storeBet (uint256 betValue, address playerAddress, uint256 playerNumber, uint256 houseEdge) internal returns (uint256) { // Update the setting metric _setting.spinwinRollDice(betValue); uint256 betInternalId = _setting.uintSettings('totalBets'); // Generate betId bytes32 betId = keccak256(abi.encodePacked(this, playerAddress, betInternalId)); Bet storage _bet = bets[betInternalId]; // Make sure we don't process the same bet twice require (_bet.processed == false); // Store the info about this bet betIdLookup[betId] = betInternalId; _bet.playerAddress = playerAddress; _bet.betId = betId; _bet.betValue = betValue; _bet.playerNumber = playerNumber; _bet.houseEdge = houseEdge; // Safely calculate winning reward _bet.rewardValue = calculateWinningReward(betValue, playerNumber, houseEdge); // Safely calculate token payout _bet.tokenRewardValue = calculateTokenReward(betValue, playerNumber, houseEdge); _bet.blockNumber = block.number; // Update the pendingBets counter totalPendingBets++; emit LogBet(_bet.betId, _bet.playerAddress, _bet.playerNumber, _bet.betValue, _bet.houseEdge, _bet.rewardValue, _bet.tokenRewardValue); return betInternalId; } /** * @dev Internal function to clear single bet * @param playerAddress The player who clears this bet * @param betId The bet ID to be cleared * @param blockSecurityCount The block security count to be checked * @return true if success, false otherwise */ function _clearSingleBet(address playerAddress, bytes32 betId, uint256 blockSecurityCount) internal returns (bool) { if (betIdLookup[betId] > 0) { Bet memory _bet = bets[betIdLookup[betId]]; /* Check if we can clear this bet * - Make sure we don't process the same bet twice * - Check if contract can payout on win * - block number difference >= blockSecurityCount */ if (_bet.processed == false && _setting.uintSettings('contractBalance') >= _bet.rewardValue && (block.number.sub(_bet.blockNumber)) >= blockSecurityCount) { _processBet(playerAddress, betIdLookup[betId], true); } else { emit LogRewardLotteryBlocks(playerAddress, _bet.betId, 0, 2, 0); } return true; } else { emit LogBetNotFound(betId); return false; } } /** * @dev Internal function to process existing bet. * If no dice result, then we initiate a refund. * If player wins (dice result < player number), we send player winning ETH. * If player loses (dice result >= player number), we send player some SPIN token. * If player loses and bankroll goal is reached, spinwin will contribute some ETH to lottery contract address. * * @param triggerAddress The player who clears this bet * @param betInternalId The bet internal ID to be processed * @param isClearMultiple Whether or not this is part of clear multiple bets transaction * @return Return true if success */ function _processBet(address triggerAddress, uint256 betInternalId, bool isClearMultiple) internal returns (bool) { Bet storage _bet = bets[betInternalId]; uint256 _betValue = _bet.betValue; uint256 _rewardValue = _bet.rewardValue; uint256 _tokenRewardValue = _bet.tokenRewardValue; // Prevent re-entrancy _bet.processed = true; _bet.betValue = 0; _bet.rewardValue = 0; _bet.tokenRewardValue = 0; // Generate the result _bet.diceResult = _lib.generateRandomNumber(settingAddress, _bet.blockNumber, _setting.uintSettings('totalBets').add(_setting.uintSettings('totalWeiWagered')), 100); if (_bet.diceResult == 0) { /* * Invalid random number. Refund the player */ _refundPlayer(betInternalId, _betValue); } else if (_bet.diceResult < _bet.playerNumber) { /* * Player wins. Send the player the winning eth amount */ _payWinner(betInternalId, _betValue, _rewardValue); } else { /* * Player loses. Send the player 1 wei and the spintoken amount */ _payLoser(betInternalId, _betValue, _tokenRewardValue); } // Update the pendingBets counter totalPendingBets--; // Update the token to wei exchange rate _setting.spinwinUpdateTokenToWeiExchangeRate(); // Calculate the lottery blocks reward for this transaction uint256 lotteryBlocksReward = calculateClearBetBlocksReward(); // If this is a single clear (from placing bet), we want to multiply this with clearSingleBetMultiplier if (isClearMultiple == false) { uint256 multiplier = _setting.uintSettings('clearSingleBetMultiplier'); } else { multiplier = _setting.uintSettings('clearMultipleBetsMultiplier'); } lotteryBlocksReward = (lotteryBlocksReward.mul(multiplier)).div(TWO_DECIMALS); lotteryBlocksAmount[triggerAddress] = lotteryBlocksAmount[triggerAddress].add(lotteryBlocksReward); emit LogRewardLotteryBlocks(triggerAddress, _bet.betId, lotteryBlocksReward, 2, 1); return true; } /** * @dev Refund the player when we are unable to determine the dice result * @param betInternalId The bet internal ID * @param refundAmount The amount to be refunded */ function _refundPlayer(uint256 betInternalId, uint256 refundAmount) internal { Bet memory _bet = bets[betInternalId]; /* * Send refund - external call to an untrusted contract * If send fails, map refund value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ int256 betStatus = 3; // status = refund if (!_bet.playerAddress.send(refundAmount)) { betStatus = 4; // status = refund + failed send // If send failed, let player withdraw via playerWithdrawPendingTransactions playerPendingWithdrawals[_bet.playerAddress] = playerPendingWithdrawals[_bet.playerAddress].add(refundAmount); } emit LogResult(_bet.betId, _bet.playerAddress, _bet.playerNumber, _bet.diceResult, refundAmount, _bet.houseEdge, 0, 0, betStatus); } /** * @dev Pays the player the winning eth amount * @param betInternalId The bet internal ID * @param betValue The original wager * @param playerProfit The player profit */ function _payWinner(uint256 betInternalId, uint256 betValue, uint256 playerProfit) internal { Bet memory _bet = bets[betInternalId]; // Update setting's contract balance and total wei won _setting.spinwinUpdateWinMetric(playerProfit); // Safely calculate payout via profit plus original wager playerProfit = playerProfit.add(betValue); /* * Send win - external call to an untrusted contract * If send fails, map reward value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ int256 betStatus = 1; // status = win if (!_bet.playerAddress.send(playerProfit)) { betStatus = 2; // status = win + failed send // If send failed, let player withdraw via playerWithdrawPendingTransactions playerPendingWithdrawals[_bet.playerAddress] = playerPendingWithdrawals[_bet.playerAddress].add(playerProfit); } emit LogResult(_bet.betId, _bet.playerAddress, _bet.playerNumber, _bet.diceResult, betValue, _bet.houseEdge, playerProfit, 0, betStatus); } /** * @dev Pays the player 1 wei and the spintoken amount * @param betInternalId The bet internal ID * @param betValue The original wager * @param tokenRewardValue The token reward for this bet */ function _payLoser(uint256 betInternalId, uint256 betValue, uint256 tokenRewardValue) internal { Bet memory _bet = bets[betInternalId]; /* * Update the game setting metric when player loses */ _setting.spinwinUpdateLoseMetric(betValue, tokenRewardValue); int256 betStatus; // status = lose /* * Send 1 Wei to losing bet - external call to an untrusted contract */ if (!_bet.playerAddress.send(1)) { betStatus = -1; // status = lose + failed send // If send failed, let player withdraw via playerWithdrawPendingTransactions playerPendingWithdrawals[_bet.playerAddress] = playerPendingWithdrawals[_bet.playerAddress].add(1); } /* * Mint and transfer token reward to this player */ if (tokenRewardValue > 0) { if (!_spintoken.mintTransfer(_bet.playerAddress, tokenRewardValue)) { betStatus = -2; // status = lose + failed mint and transfer // If transfer token failed, let player withdraw via playerWithdrawPendingTokenTransactions playerPendingTokenWithdrawals[_bet.playerAddress] = playerPendingTokenWithdrawals[_bet.playerAddress].add(tokenRewardValue); } } emit LogResult(_bet.betId, _bet.playerAddress, _bet.playerNumber, _bet.diceResult, betValue, _bet.houseEdge, 1, tokenRewardValue, betStatus); _sendLotteryContribution(betInternalId, betValue); } /** * @dev Contribute the house win to lottery address * @param betInternalId The bet internal ID * @param betValue The original wager * @return Return true if success */ function _sendLotteryContribution(uint256 betInternalId, uint256 betValue) internal returns (bool) { /* * If contractBalance >= minBankroll, contribute the a percentage of the winning to lottery */ uint256 contractBalance = _setting.uintSettings('contractBalance'); if (contractBalance >= _setting.uintSettings('minBankroll')) { Bet memory _bet = bets[betInternalId]; uint256 lotteryContribution = _lib.calculateLotteryContribution(settingAddress, lotteryAddress, betValue); if (lotteryContribution > 0 && contractBalance >= lotteryContribution) { // Safely adjust contractBalance _setting.spinwinUpdateLotteryContributionMetric(lotteryContribution); emit LogLotteryContribution(_bet.betId, _bet.playerAddress, lotteryContribution); // Contribute to the lottery if (!lotteryAddress.call.gas(_setting.uintSettings('gasForLottery')).value(lotteryContribution)()) { return false; } } } return true; } /** * @dev Reward the referree if necessary. * @param referreeAddress The address of the referree * @param betInternalId The internal bet ID */ function _rewardReferree(address referreeAddress, uint256 betInternalId) internal { Bet memory _bet = bets[betInternalId]; // If the player already has a referee, use that address if (referees[_bet.playerAddress] != address(0)) { referreeAddress = referees[_bet.playerAddress]; } if (referreeAddress != address(0) && referreeAddress != _bet.playerAddress) { referees[_bet.playerAddress] = referreeAddress; uint256 _tokenForLotto = _bet.tokenRewardValue.mul(_setting.uintSettings('referralPercent')).div(PERCENTAGE_DIVISOR); lotteryBlocksAmount[referreeAddress] = lotteryBlocksAmount[referreeAddress].add(_tokenForLotto); emit LogRewardLotteryBlocks(referreeAddress, _bet.betId, _tokenForLotto, 1, 1); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[],"name":"playerWithdrawPendingTokenTransactions","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"settingAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"betIds","type":"bytes32[]"}],"name":"clearBets","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"playerPendingWithdrawals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"betId","type":"bytes32"}],"name":"playerGetBet","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refundPendingBets","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"betId","type":"bytes32"}],"name":"playerGetPendingBet","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"betValue","type":"uint256"},{"name":"playerNumber","type":"uint256"},{"name":"houseEdge","type":"uint256"}],"name":"calculateTokenReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lotteryBlocksAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_developer","type":"address"}],"name":"changeDeveloper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"betValue","type":"uint256"},{"name":"playerNumber","type":"uint256"},{"name":"houseEdge","type":"uint256"}],"name":"calculateWinningReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lotteryAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_advertisingAddress","type":"address"}],"name":"devSetAdvertisingAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"betId","type":"bytes32"}],"name":"devGetBetInternalId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calculateClearBetBlocksReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"playerGetPendingBetIds","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"referees","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"betInternalId","type":"uint256"}],"name":"devGetBet","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenContractAddress","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAmount","type":"uint256"}],"name":"exchangeToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"betId","type":"bytes32"}],"name":"devRefundBet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalPendingBets","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"playerWithdrawPendingTransactions","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimLotteryBlocks","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TWO_DECIMALS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"playerNumber","type":"uint256"},{"name":"houseEdge","type":"uint256"},{"name":"clearBetId","type":"bytes32"},{"name":"referreeAddress","type":"address"}],"name":"rollDice","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_lotteryAddress","type":"address"}],"name":"devSetLotteryAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"tokenExchanges","outputs":[{"name":"playerAddress","type":"address"},{"name":"exchangeId","type":"bytes32"},{"name":"processed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"developer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERCENTAGE_DIVISOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CURRENCY_DIVISOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"playerPendingTokenWithdrawals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_settingAddress","type":"address"},{"name":"_libraryAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"betId","type":"bytes32"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerNumber","type":"uint256"},{"indexed":false,"name":"betValue","type":"uint256"},{"indexed":false,"name":"houseEdge","type":"uint256"},{"indexed":false,"name":"rewardValue","type":"uint256"},{"indexed":false,"name":"tokenRewardValue","type":"uint256"}],"name":"LogBet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"betId","type":"bytes32"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerNumber","type":"uint256"},{"indexed":false,"name":"diceResult","type":"uint256"},{"indexed":false,"name":"betValue","type":"uint256"},{"indexed":false,"name":"houseEdge","type":"uint256"},{"indexed":false,"name":"rewardValue","type":"uint256"},{"indexed":false,"name":"tokenRewardValue","type":"uint256"},{"indexed":false,"name":"status","type":"int256"}],"name":"LogResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"betId","type":"bytes32"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"weiValue","type":"uint256"}],"name":"LogLotteryContribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"receiver","type":"address"},{"indexed":true,"name":"betId","type":"bytes32"},{"indexed":false,"name":"lottoBlocksAmount","type":"uint256"},{"indexed":false,"name":"rewardType","type":"uint256"},{"indexed":false,"name":"status","type":"uint256"}],"name":"LogRewardLotteryBlocks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"}],"name":"LogClearBets","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"numLottery","type":"uint256"},{"indexed":false,"name":"claimAmount","type":"uint256"},{"indexed":false,"name":"claimStatus","type":"uint256"}],"name":"LogClaimLotteryBlocks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"exchangeId","type":"bytes32"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"tokenValue","type":"uint256"},{"indexed":false,"name":"tokenToWeiExchangeRate","type":"uint256"},{"indexed":false,"name":"weiValue","type":"uint256"},{"indexed":false,"name":"receivedWeiValue","type":"uint256"},{"indexed":false,"name":"remainderTokenValue","type":"uint256"},{"indexed":false,"name":"status","type":"uint256"}],"name":"LogTokenExchange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"withdrawAmount","type":"uint256"},{"indexed":false,"name":"status","type":"uint256"}],"name":"LogPlayerWithdrawBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"withdrawAmount","type":"uint256"},{"indexed":false,"name":"status","type":"uint256"}],"name":"LogPlayerWithdrawTokenBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"betId","type":"bytes32"}],"name":"LogBetNotFound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"betId","type":"bytes32"},{"indexed":true,"name":"playerAddress","type":"address"}],"name":"LogDeveloperCancelBet","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b5060405160608061400083398101604090815281516020830151919092015160008054600160a060020a0319908116331790915560018054600160a060020a03958616908316811790915560028054948616948316851790556004805483169091179055600580548216909317909255600780549390911692909116919091179055613f5f806100a16000396000f3006080604052600436106101875763ffffffff60e060020a6000350416630480135f8114610293578063085d6d95146102aa5780631e4c189c146102db5780631f90d1851461033057806320235de21461036357806321061bbd146103b557806321abc498146103de578063253925511461042b578063256aefda1461044957806331119b4d1461046a578063378f44781461048b5780633beedf6d146104a9578063409de563146104be5780635359840d146104df5780635e4a8e23146104f7578063605e20581461050c57806364a60b471461057157806370159a0e1461059257806389476069146105fd5780638f78c3111461061e57806394b44f771461063657806394e5bb691461064e5780639d76ea5814610663578063a5f4af3314610678578063b065b6f41461068d578063b14ad5b8146106a2578063b2e777aa146106b7578063b6763f19146106d4578063c97a2896146106f5578063ca4b208b14610737578063caf297651461074c578063dbf93f9814610761578063e8a7efc414610776575b600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b505050506040513d602081101561020457600080fd5b5051151560011461021457600080fd5b600554604080517f2560e8fb0000000000000000000000000000000000000000000000000000000081523460048201529051600160a060020a0390921691632560e8fb9160248082019260009290919082900301818387803b15801561027957600080fd5b505af115801561028d573d6000803e3d6000fd5b50505050005b34801561029f57600080fd5b506102a8610797565b005b3480156102b657600080fd5b506102bf6108c1565b60408051600160a060020a039092168252519081900360200190f35b3480156102e757600080fd5b50604080516020600480358082013583810280860185019096528085526102a8953695939460249493850192918291850190849080828437509497506108d09650505050505050565b34801561033c57600080fd5b50610351600160a060020a0360043516610cf7565b60408051918252519081900360200190f35b34801561036f57600080fd5b5061037b600435610d09565b604080519788526020880196909652868601949094526060860192909252608085015260a0840152151560c0830152519081900360e00190f35b3480156103c157600080fd5b506103ca610e1a565b604080519115158252519081900360200190f35b3480156103ea57600080fd5b506103f6600435610fdf565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561043757600080fd5b506103516004356024356044356110e5565b34801561045557600080fd5b50610351600160a060020a036004351661119c565b34801561047657600080fd5b506102a8600160a060020a03600435166111ae565b34801561049757600080fd5b506103516004356024356044356111f4565b3480156104b557600080fd5b506102bf611268565b3480156104ca57600080fd5b506102a8600160a060020a0360043516611277565b3480156104eb57600080fd5b506103516004356112d2565b34801561050357600080fd5b506103516112fd565b34801561051857600080fd5b506105216113a6565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561055d578181015183820152602001610545565b505050509050019250505060405180910390f35b34801561057d57600080fd5b506102bf600160a060020a0360043516611560565b34801561059e57600080fd5b506105aa60043561157b565b60408051600160a060020a03909a168a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e0840152151561010083015251908190036101200190f35b34801561060957600080fd5b506102a8600160a060020a036004351661165d565b34801561062a57600080fd5b506102a860043561182b565b34801561064257600080fd5b506103ca600435611f24565b34801561065a57600080fd5b50610351611fd6565b34801561066f57600080fd5b506102bf611fdc565b34801561068457600080fd5b506102a8611feb565b34801561069957600080fd5b506102a8612097565b3480156106ae57600080fd5b50610351612368565b6103ca600435602435604435600160a060020a036064351661236d565b3480156106e057600080fd5b506102a8600160a060020a0360043516612604565b34801561070157600080fd5b5061070d600435612669565b60408051600160a060020a0390941684526020840192909252151582820152519081900360600190f35b34801561074357600080fd5b506102bf612697565b34801561075857600080fd5b506103516126a6565b34801561076d57600080fd5b506103516126ad565b34801561078257600080fd5b50610351600160a060020a03600435166126b9565b336000908152600c6020526040812054819081106107b457600080fd5b5050336000818152600c602090815260408083208054908490556004805483517fc349c93e000000000000000000000000000000000000000000000000000000008152918201969096526024810182905291519094600194600160a060020a039091169363c349c93e936044808201949293918390030190829087803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050506040513d602081101561086757600080fd5b505115156108835750336000908152600c602052604081208290555b6040805183815260208101839052815133927f0552532b8d5628d8c51edf8c1d6d10c72617f800a2e0c805e0b609f1dcc84b4b928290030190a25050565b600254600160a060020a031681565b60008060006108dd613e91565b600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b505050506040513d602081101561095a57600080fd5b5051151560011461096a57600080fd5b60008551118015610a1757506005546040805160e060020a6382d9bfd90281527f6d61784e756d436c65617242657473000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b1580156109e657600080fd5b505af11580156109fa573d6000803e3d6000fd5b505050506040513d6020811015610a1057600080fd5b5051855111155b1515610a2257600080fd5b6005546040805160e060020a6382d9bfd90281527f626c6f636b5365637572697479436f756e7400000000000000000000000000006004820152905160009650600160a060020a03909216916382d9bfd99160248082019260209290919082900301818a87803b158015610a9557600080fd5b505af1158015610aa9573d6000803e3d6000fd5b505050506040513d6020811015610abf57600080fd5b50519250600091505b8451821015610c7b5760096000600a60008886815181101515610ae757fe5b602090810290910181015182528181019290925260409081016000908120548452838301949094529182019092208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009015460ff16158015610120830181905291925090610c3f575060c08101516005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015610c1057600080fd5b505af1158015610c24573d6000803e3d6000fd5b505050506040513d6020811015610c3a57600080fd5b505110155b8015610c62575082610c5f826101000151436126cb90919063ffffffff16565b10155b15610c705760019350610c7b565b600190910190610ac8565b600184151514610c8a57600080fd5b600091505b8451821015610cc657610cba338684815181101515610caa57fe5b90602001906020020151856126dd565b50600190910190610c8f565b60405133907eee1bfaa583a6b50363166e24a466ec786118fa3535f3ae3d5bb03b05c289df90600090a25050505050565b600b6020526000908152604090205481565b6000806000806000806000610d1c613e91565b6000898152600a6020526040812054118015610d5557506000898152600a60209081526040808320548352600990915290206001015489145b1515610d6057600080fd5b50505060009586525050600a602090815260408086205486526009808352958190208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301829052600381015460608401819052600482015460808501819052600583015460a08601819052600684015460c08701819052600785015460e08801819052600886015461010089015294909a015460ff161515610120909601869052939991989097509295509193509190565b6002546000908190819081908190600160a060020a03163314610e3c57600080fd5b6005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b505050506040513d6020811015610ec457600080fd5b505193506000841115610fd457600192505b838311610fd45760008381526009602081905260409091209081015490925060ff161515610fc9575060028101805460098301805460ff191660011790556000918290558254600160a060020a03168252600b602052604090912054610f42908263ffffffff61292316565b8254600160a060020a039081166000908152600b60209081526040808320949094558554600187015460048089015460058a0154885191825294810186905280880189905260608101949094526080840185905260a084019490945260c0830193909352935193909216929091600080516020613ef4833981519152919081900360e00190a35b600190920191610ed6565b600194505050505090565b6000806000806000610fef613e91565b6000878152600a602052604081205411801561102857506000878152600a60209081526040808320548352600990915290206001015487145b151561103357600080fd5b50505060009384525050600a602090815260408084205484526009808352938190208151610140810183528154600160a060020a0316808252600183015494820194909452600282015492810183905260038201546060820152600482015460808201819052600583015460a08301819052600684015460c0840152600784015460e084015260088401546101008401819052939097015460ff16151561012090920191909152929592949193509091565b600754600254604080517f23a565c5000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018790526044810186905260648101859052905160009392909216916323a565c59160848082019260209290919082900301818787803b15801561116857600080fd5b505af115801561117c573d6000803e3d6000fd5b505050506040513d602081101561119257600080fd5b5051949350505050565b600f6020526000908152604090205481565b600054600160a060020a031633146111c557600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754604080517f378f44780000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490529051600092600160a060020a03169163378f447891606480830192602092919082900301818787803b15801561116857600080fd5b600354600160a060020a031681565b600054600160a060020a0316331461128e57600080fd5b600160a060020a03811615156112a357600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054600160a060020a031633146112ea57600080fd5b506000908152600a602052604090205490565b600754600254600354604080517fde7864bb000000000000000000000000000000000000000000000000000000008152600160a060020a039384166004820152918316602483015251600093929092169163de7864bb9160448082019260209290919082900301818787803b15801561137557600080fd5b505af1158015611389573d6000803e3d6000fd5b505050506040513d602081101561139f57600080fd5b5051905090565b6060806000806113b4613e91565b6010546040519080825280602002602001820160405280156113e0578160200160208202803883390190505b509350600060105411156115575760009250600191505b6005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561145557600080fd5b505af1158015611469573d6000803e3d6000fd5b505050506040513d602081101561147f57600080fd5b5051821161155757506000818152600960208181526040928390208351610140810185528154600160a060020a031681526001820154928101929092526002810154938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e0820152600883015461010082015291015460ff161515610120820181905261153d578060200151848481518110151561152c57fe5b602090810290910101526001909201915b60105483141561154c57611557565b6001909101906113f7565b50919392505050565b600d60205260009081526040902054600160a060020a031681565b6000806000806000806000806000611591613e91565b600054600160a060020a031633146115a857600080fd5b5050506000978852505060096020818152604097889020885161014081018a528154600160a060020a031680825260018301549382019390935260028201549981018a9052600382015460608201819052600483015460808301819052600584015460a08401819052600685015460c08501819052600786015460e0860181905260088701546101008701819052969098015460ff161515610120909501859052959d929b5090995097509295509293509190565b60008054600160a060020a0316331461167557600080fd5b50604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290518291600091600160a060020a038416916370a0823191602480830192602092919082900301818787803b1580156116db57600080fd5b505af11580156116ef573d6000803e3d6000fd5b505050506040513d602081101561170557600080fd5b505111156118275760008054604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038086169463a9059cbb949091169285926370a0823192602480840193602093929083900390910190829087803b15801561178157600080fd5b505af1158015611795573d6000803e3d6000fd5b505050506040513d60208110156117ab57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156117fa57600080fd5b505af115801561180e573d6000803e3d6000fd5b505050506040513d602081101561182457600080fd5b50505b5050565b600554604080517fe1042804000000000000000000000000000000000000000000000000000000008152336004820181905260248201859052915160009384938493849384938493849390928b92600160a060020a03169163e104280491604480830192602092919082900301818987803b1580156118a957600080fd5b505af11580156118bd573d6000803e3d6000fd5b505050506040513d60208110156118d357600080fd5b505115156001146118e357600080fd5b600754600254604080517f45a3b9c1000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018e9052905191909216916345a3b9c19160448083019260809291908290030181600087803b15801561195557600080fd5b505af1158015611969573d6000803e3d6000fd5b505050506040513d608081101561197f57600080fd5b508051602082015160408084015160609094015160055482517f943426470000000000000000000000000000000000000000000000000000000081527f746f74616c546f6b656e45786368616e6765730000000000000000000000000060048201529251949e50929c50939a50929850600160a060020a031691639434264791602480830192600092919082900301818387803b158015611a1f57600080fd5b505af1158015611a33573d6000803e3d6000fd5b50506005546040805160e060020a6382d9bfd90281527f746f74616c546f6b656e45786368616e6765730000000000000000000000000060048201529051309450339350600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015611aab57600080fd5b505af1158015611abf573d6000803e3d6000fd5b505050506040513d6020811015611ad557600080fd5b5051604080516c01000000000000000000000000600160a060020a0395861681026020838101919091529490951690940260348501526048808501929092528051808503909201825260689093019283905280519092918291908401908083835b60208310611b555780518252601f199092019160209182019101611b36565b51815160209384036101000a600019018019909216911617905260408051929094018290039091206000818152600e909252929020600281015492995097505060ff16159150611ba6905057600080fd5b600554604080517f8d8a1f1e000000000000000000000000000000000000000000000000000000008152600481018b90529051600160a060020a0390921691638d8a1f1e9160248082019260009290919082900301818387803b158015611c0c57600080fd5b505af1158015611c20573d6000803e3d6000fd5b5050855473ffffffffffffffffffffffffffffffffffffffff19163317808755600180880189905560028801805460ff1916909117905560048054604080517f9803f216000000000000000000000000000000000000000000000000000000008152600160a060020a0394851693810193909352602483018c90525192169350639803f21692506044808201926020929091908290030181600087803b158015611cc957600080fd5b505af1158015611cdd573d6000803e3d6000fd5b505050506040513d6020811015611cf357600080fd5b50511515611d045760029250611d83565b8354604051600160a060020a039091169089156108fc02908a906000818181858888f193505050501515611d7e578354600160a060020a03166000908152600b6020526040812054909350611d5f908963ffffffff61292316565b8454600160a060020a03166000908152600b6020526040902055611d83565b600192505b600560009054906101000a9004600160a060020a0316600160a060020a031663327fdeb86040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015611dd657600080fd5b505af1158015611dea573d6000803e3d6000fd5b505050508360000160009054906101000a9004600160a060020a0316600160a060020a03168460010154600019167f7a85f5414930606b334089b5715d0849610160cebfbcae7152c1e359cb287e238c600560009054906101000a9004600160a060020a0316600160a060020a03166382d9bfd96040518163ffffffff1660e060020a02815260040180807f746f6b656e546f57656945786368616e676552617465486f6e6f7200000000008152506020019050602060405180830381600087803b158015611eb857600080fd5b505af1158015611ecc573d6000803e3d6000fd5b505050506040513d6020811015611ee257600080fd5b50516040805192835260208301919091528181018e9052606082018d9052608082018c905260a08201889052519081900360c00190a350505050505050505050565b6000805481908190600160a060020a03163314611f4057600080fd5b6000848152600a602052604081205411611f5957600080fd5b6000848152600a602090815260408083205483526009918290529091209081015490925060ff1615611f8a57600080fd5b5060098101805460ff191660011790556002810180546000918290556006830182905560078301829055848252600a602052604090912054611fcc908261293d565b5060019392505050565b60105481565b600154600160a060020a031681565b336000908152600b60205260408120548190811061200857600080fd5b5050336000818152600b602052604080822080549083905590519092600192909184156108fc0291859190818181858888f1935050505015156120595750336000908152600b602052604081208290555b6040805183815260208101839052815133927fd4689e0f08c0a262a44fa32f4f6ddf1ed43cfe1e14fdebb1539ec6f3a831bb9c928290030190a25050565b600080600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156120ed57600080fd5b505af1158015612101573d6000803e3d6000fd5b505050506040513d602081101561211757600080fd5b5051151560011461212757600080fd5b600660009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561217a57600080fd5b505af115801561218e573d6000803e3d6000fd5b505050506040513d60208110156121a457600080fd5b505115156001146121b457600080fd5b336000908152600f6020526040812054116121ce57600080fd5b5050336000818152600f6020908152604080832080549084905560065482517f174e31c400000000000000000000000000000000000000000000000000000000815260048101969096526024860182905291519094600194600160a060020a039093169363174e31c49360448084019492938390030190829087803b15801561225657600080fd5b505af115801561226a573d6000803e3d6000fd5b505050506040513d602081101561228057600080fd5b5051151561229c5750336000908152600f602052604081208290555b33600160a060020a03167fb040751adc2b4663a203ce7f91ba3aacbbe4fa3dcacfcf73afba78bf322b48d2600660009054906101000a9004600160a060020a0316600160a060020a0316634699560c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561231a57600080fd5b505af115801561232e573d6000803e3d6000fd5b505050506040513d602081101561234457600080fd5b50516040805191825260208201869052818101859052519081900360600190a25050565b606481565b600554600754604080517f378f447800000000000000000000000000000000000000000000000000000000815234600482018190526024820189905260448201889052915160009485948a938a93600160a060020a0393841693634b60fc2a93169163378f447891606480830192602092919082900301818c87803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b505050506040513d602081101561241f57600080fd5b50516040805160e060020a63ffffffff851602815260048101929092526024820187905260448201869052606482018590525160848083019260209291908290030181600087803b15801561247357600080fd5b505af1158015612487573d6000803e3d6000fd5b505050506040513d602081101561249d57600080fd5b505115156001146124ad57600080fd5b6124b934338b8b612ab2565b9350861561256c576005546040805160e060020a6382d9bfd90281527f626c6f636b5365637572697479436f756e7400000000000000000000000000006004820152905161256a9233928b92600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561253957600080fd5b505af115801561254d573d6000803e3d6000fd5b505050506040513d602081101561256357600080fd5b50516126dd565b505b6125768685612d9a565b600860009054906101000a9004600160a060020a0316600160a060020a0316639df613ea6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156125c957600080fd5b505af11580156125dd573d6000803e3d6000fd5b505050506040513d60208110156125f357600080fd5b5060019a9950505050505050505050565b600054600160a060020a0316331461261b57600080fd5b600160a060020a038116151561263057600080fd5b60038054600160a060020a0390921673ffffffffffffffffffffffffffffffffffffffff19928316811790915560068054909216179055565b600e60205260009081526040902080546001820154600290920154600160a060020a03909116919060ff1683565b600054600160a060020a031681565b620f424081565b670de0b6b3a764000081565b600c6020526000908152604090205481565b6000828211156126d757fe5b50900390565b60006126e7613e91565b6000848152600a602052604081205411156128eb57506000838152600a602090815260408083205483526009808352928190208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301529091015460ff161580156101208301819052612840575060c08101516005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561281157600080fd5b505af1158015612825573d6000803e3d6000fd5b505050506040513d602081101561283b57600080fd5b505110155b8015612863575082612860826101000151436126cb90919063ffffffff16565b10155b1561288a576000848152600a6020526040902054612884908690600161301b565b506128e2565b60208082015160408051600080825260029482019490945280820193909352519091600160a060020a038816917fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d99181900360600190a35b6001915061291b565b60405184907fe0a05d247c244a5ec656afb31d240208d32df06332108e132529fd9c537323a190600090a2600091505b509392505050565b60008282018381101561293257fe5b8091505b5092915050565b612945613e91565b5060008281526009602081815260408084208151610140810183528154600160a060020a0316808252600183015494820194909452600282015481840152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e08301526008830154610100830152919094015460ff16151561012085015290519293909285156108fc0291869190818181858888f193505050501515612a3c57508051600160a060020a03166000908152600b6020526040902054600490612a21908463ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b815160208084015160808086015160608088015160a0808a015160408051958652978501929092528387018b905291830152600092820183905281019190915260c081018590529151600160a060020a03909316929091600080516020613ef4833981519152919081900360e00190a350505050565b600554604080517f66ce9c72000000000000000000000000000000000000000000000000000000008152600481018790529051600092839283928392600160a060020a0316916366ce9c72916024808301928692919082900301818387803b158015612b1d57600080fd5b505af1158015612b31573d6000803e3d6000fd5b50506005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a0390921693506382d9bfd992506024808201926020929091908290030181600087803b158015612b9357600080fd5b505af1158015612ba7573d6000803e3d6000fd5b505050506040513d6020811015612bbd57600080fd5b5051604080516c01000000000000000000000000308102602083810191909152600160a060020a038c1690910260348301526048808301859052835180840390910181526068909201928390528151939650909282918401908083835b60208310612c395780518252601f199092019160209182019101612c1a565b51815160209384036101000a600019018019909216911617905260408051929094018290039091206000898152600992839052939093209081015492965094505060ff16159150612c8b905057600080fd5b6000828152600a60205260409020839055805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03881617815560018101829055600281018890556004810186905560058101859055612ce98887876111f4565b6006820155612cf98887876110e5565b600782019081554360088301556010805460019081019091558254908301546004840154600285015460058601546006870154955460408051948552602085019390935283830191909152606083019590955260808201949094529251600160a060020a039092169290917f56b3f1a6cd856076d6f8adbf8170c43a0b0f532fc5696a2699a0e0cabc7041639181900360a00190a350909695505050505050565b612da2613e91565b5060008181526009602081815260408084208151610140810183528154600160a060020a039081168083526001840154838701526002840154838601526003840154606084015260048401546080840152600584015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152908552600d9092528320549092911615612e60578151600160a060020a039081166000908152600d60205260409020541693505b600160a060020a03841615801590612e8557508151600160a060020a03858116911614155b15611824578151600160a060020a039081166000908152600d60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916898616179055600554815160e060020a6382d9bfd90281527f726566657272616c50657263656e74000000000000000000000000000000000060048201529151612f8295620f424095612f769593909116936382d9bfd993602480830194919391928390030190829087803b158015612f3957600080fd5b505af1158015612f4d573d6000803e3d6000fd5b505050506040513d6020811015612f6357600080fd5b505160e08601519063ffffffff61350016565b9063ffffffff61352b16565b600160a060020a0385166000908152600f6020526040902054909150612fae908263ffffffff61292316565b600160a060020a0385166000818152600f602090815260409182902093909355848301518151858152600194810185905280830194909452905190927fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d9919081900360600190a350505050565b600082815260096020818152604080842060028082018054600684018054600780870180549a8801805460ff19166001179055948b9055918a9055928990555492546008850154600554875160e060020a6382d9bfd90281527f746f74616c5765695761676572656400000000000000000000000000000000006004820152975196999398949793968b968796600160a060020a0391821696631c1faa9b96831695946131ab949316926382d9bfd99260248084019391929182900301818c87803b1580156130e957600080fd5b505af11580156130fd573d6000803e3d6000fd5b505050506040513d602081101561311357600080fd5b50516005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561317357600080fd5b505af1158015613187573d6000803e3d6000fd5b505050506040513d602081101561319d57600080fd5b50519063ffffffff61292316565b6040805160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064828101525160848083019260209291908290030181600087803b15801561320357600080fd5b505af1158015613217573d6000803e3d6000fd5b505050506040513d602081101561322d57600080fd5b505160038701819055151561324b57613246898661293d565b613271565b85600401548660030154101561326657613246898686613542565b61327189868561375c565b60108054600019019055600554604080517f327fdeb80000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163327fdeb89160048082019260009290919082900301818387803b1580156132da57600080fd5b505af11580156132ee573d6000803e3d6000fd5b505050506132fa6112fd565b91508715156133a6576005546040805160e060020a6382d9bfd90281527f636c65617253696e676c654265744d756c7469706c696572000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561337357600080fd5b505af1158015613387573d6000803e3d6000fd5b505050506040513d602081101561339d57600080fd5b50519050613445565b6005546040805160e060020a6382d9bfd90281527f636c6561724d756c7469706c65426574734d756c7469706c696572000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561341657600080fd5b505af115801561342a573d6000803e3d6000fd5b505050506040513d602081101561344057600080fd5b505190505b61345a6064612f76848463ffffffff61350016565b600160a060020a038b166000908152600f6020526040902054909250613486908363ffffffff61292316565b600160a060020a038b166000818152600f6020908152604091829020939093556001808a0154825187815260029581019590955284830191909152905190927fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d9919081900360600190a35060019998505050505050505050565b6000808315156135135760009150612936565b5082820282848281151561352357fe5b041461293257fe5b600080828481151561353957fe5b04949350505050565b61354a613e91565b5060008381526009602081815260408084208151610140810183528154600160a060020a03908116825260018301549482019490945260028201548184015260038201546060820152600480830154608083015260058084015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152905482517f2ef5c02e00000000000000000000000000000000000000000000000000000000815294850187905291519094939190921691632ef5c02e91602480820192869290919082900301818387803b15801561363557600080fd5b505af1158015613649573d6000803e3d6000fd5b50505050613660848461292390919063ffffffff16565b825160405191945060019250600160a060020a03169084156108fc029085906000818181858888f1935050505015156136dc57508051600160a060020a03166000908152600b60205260409020546002906136c1908463ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b8160000151600160a060020a0316826020015160001916600080516020613ef483398151915284608001518560600151888760a00151896000896040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a35050505050565b613764613e91565b5060008381526009602081815260408084208151610140810183528154600160a060020a03908116825260018301549482019490945260028201548184015260038201546060820152600480830154608083015260058084015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152905482517f47fb0b1800000000000000000000000000000000000000000000000000000000815294850188905260248501879052915190949391909216916347fb0b1891604480820192869290919082900301818387803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b50508351604051600160a060020a0390911692506000915060019082818181858883f1935050505015156138e357508051600160a060020a03166000908152600b6020526040902054600019906138c890600163ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b60008311156139d957600480548351604080517fc349c93e000000000000000000000000000000000000000000000000000000008152600160a060020a0392831694810194909452602484018790525191169163c349c93e9160448083019260209291908290030181600087803b15801561395d57600080fd5b505af1158015613971573d6000803e3d6000fd5b505050506040513d602081101561398757600080fd5b505115156139d957508051600160a060020a03166000908152600c6020526040902054600119906139be908463ffffffff61292316565b8251600160a060020a03166000908152600c60205260409020555b8160000151600160a060020a0316826020015160001916600080516020613ef483398151915284608001518560600151888760a0015160018a896040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a3613a5c8585613a64565b505050505050565b600080613a6f613e91565b6005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600092600160a060020a0316916382d9bfd991602480830192602092919082900301818787803b158015613ade57600080fd5b505af1158015613af2573d6000803e3d6000fd5b505050506040513d6020811015613b0857600080fd5b50516005546040805160e060020a6382d9bfd90281527f6d696e42616e6b726f6c6c00000000000000000000000000000000000000000060048201529051929550600160a060020a03909116916382d9bfd9916024808201926020929091908290030181600087803b158015613b7d57600080fd5b505af1158015613b91573d6000803e3d6000fd5b505050506040513d6020811015613ba757600080fd5b50518310613e835760008681526009602081815260408084208151610140810183528154600160a060020a0390811682526001830154828601526002808401548386015260038085015460608501526004808601546080860152600586015460a0860152600686015460c086015260078087015460e08701526008870154610100870152959098015460ff16151561012085015293549054935485517ff1129768000000000000000000000000000000000000000000000000000000008152948316978501979097529581166024840152604483018c90529251909750939091169363f112976893606480840194939192918390030190829087803b158015613caf57600080fd5b505af1158015613cc3573d6000803e3d6000fd5b505050506040513d6020811015613cd957600080fd5b50519050600081118015613ced5750808310155b15613e8357600554604080517fe20be9fd000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e20be9fd9160248082019260009290919082900301818387803b158015613d5857600080fd5b505af1158015613d6c573d6000803e3d6000fd5b505050508160000151600160a060020a03168260200151600019167f7d87edb5f1d55fdeb650288045e17cd2957473ed0eab57f68bb5f752694af381836040518082815260200191505060405180910390a36003546005546040805160e060020a6382d9bfd90281527f676173466f724c6f74746572790000000000000000000000000000000000000060048201529051600160a060020a0393841693909216916382d9bfd9916024808201926020929091908290030181600087803b158015613e3557600080fd5b505af1158015613e49573d6000803e3d6000fd5b505050506040513d6020811015613e5f57600080fd5b505160405183906000818181858888f193505050501515613e835760009350613e88565b600193505b50505092915050565b610140604051908101604052806000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815250905600d9227e659bdf4c2e74777ad3feac5d6a564cbd9272a0b8a11263e1e7c17c9388746f74616c426574730000000000000000000000000000000000000000000000a165627a7a72305820860620f36b26c0e5c6e555a5ea5f9d72b7387e05827e56bedcb52866d15baa2a0029000000000000000000000000b42f5366792ed7c08995451c1a93780b7554762b000000000000000000000000b654457bab03011531ef939cb31f76eb36e2ddf3000000000000000000000000ea1853f9162ba2b6594fc18d60c66bf4b6211e0d
Deployed Bytecode
0x6080604052600436106101875763ffffffff60e060020a6000350416630480135f8114610293578063085d6d95146102aa5780631e4c189c146102db5780631f90d1851461033057806320235de21461036357806321061bbd146103b557806321abc498146103de578063253925511461042b578063256aefda1461044957806331119b4d1461046a578063378f44781461048b5780633beedf6d146104a9578063409de563146104be5780635359840d146104df5780635e4a8e23146104f7578063605e20581461050c57806364a60b471461057157806370159a0e1461059257806389476069146105fd5780638f78c3111461061e57806394b44f771461063657806394e5bb691461064e5780639d76ea5814610663578063a5f4af3314610678578063b065b6f41461068d578063b14ad5b8146106a2578063b2e777aa146106b7578063b6763f19146106d4578063c97a2896146106f5578063ca4b208b14610737578063caf297651461074c578063dbf93f9814610761578063e8a7efc414610776575b600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b505050506040513d602081101561020457600080fd5b5051151560011461021457600080fd5b600554604080517f2560e8fb0000000000000000000000000000000000000000000000000000000081523460048201529051600160a060020a0390921691632560e8fb9160248082019260009290919082900301818387803b15801561027957600080fd5b505af115801561028d573d6000803e3d6000fd5b50505050005b34801561029f57600080fd5b506102a8610797565b005b3480156102b657600080fd5b506102bf6108c1565b60408051600160a060020a039092168252519081900360200190f35b3480156102e757600080fd5b50604080516020600480358082013583810280860185019096528085526102a8953695939460249493850192918291850190849080828437509497506108d09650505050505050565b34801561033c57600080fd5b50610351600160a060020a0360043516610cf7565b60408051918252519081900360200190f35b34801561036f57600080fd5b5061037b600435610d09565b604080519788526020880196909652868601949094526060860192909252608085015260a0840152151560c0830152519081900360e00190f35b3480156103c157600080fd5b506103ca610e1a565b604080519115158252519081900360200190f35b3480156103ea57600080fd5b506103f6600435610fdf565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561043757600080fd5b506103516004356024356044356110e5565b34801561045557600080fd5b50610351600160a060020a036004351661119c565b34801561047657600080fd5b506102a8600160a060020a03600435166111ae565b34801561049757600080fd5b506103516004356024356044356111f4565b3480156104b557600080fd5b506102bf611268565b3480156104ca57600080fd5b506102a8600160a060020a0360043516611277565b3480156104eb57600080fd5b506103516004356112d2565b34801561050357600080fd5b506103516112fd565b34801561051857600080fd5b506105216113a6565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561055d578181015183820152602001610545565b505050509050019250505060405180910390f35b34801561057d57600080fd5b506102bf600160a060020a0360043516611560565b34801561059e57600080fd5b506105aa60043561157b565b60408051600160a060020a03909a168a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e0840152151561010083015251908190036101200190f35b34801561060957600080fd5b506102a8600160a060020a036004351661165d565b34801561062a57600080fd5b506102a860043561182b565b34801561064257600080fd5b506103ca600435611f24565b34801561065a57600080fd5b50610351611fd6565b34801561066f57600080fd5b506102bf611fdc565b34801561068457600080fd5b506102a8611feb565b34801561069957600080fd5b506102a8612097565b3480156106ae57600080fd5b50610351612368565b6103ca600435602435604435600160a060020a036064351661236d565b3480156106e057600080fd5b506102a8600160a060020a0360043516612604565b34801561070157600080fd5b5061070d600435612669565b60408051600160a060020a0390941684526020840192909252151582820152519081900360600190f35b34801561074357600080fd5b506102bf612697565b34801561075857600080fd5b506103516126a6565b34801561076d57600080fd5b506103516126ad565b34801561078257600080fd5b50610351600160a060020a03600435166126b9565b336000908152600c6020526040812054819081106107b457600080fd5b5050336000818152600c602090815260408083208054908490556004805483517fc349c93e000000000000000000000000000000000000000000000000000000008152918201969096526024810182905291519094600194600160a060020a039091169363c349c93e936044808201949293918390030190829087803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050506040513d602081101561086757600080fd5b505115156108835750336000908152600c602052604081208290555b6040805183815260208101839052815133927f0552532b8d5628d8c51edf8c1d6d10c72617f800a2e0c805e0b609f1dcc84b4b928290030190a25050565b600254600160a060020a031681565b60008060006108dd613e91565b600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b505050506040513d602081101561095a57600080fd5b5051151560011461096a57600080fd5b60008551118015610a1757506005546040805160e060020a6382d9bfd90281527f6d61784e756d436c65617242657473000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b1580156109e657600080fd5b505af11580156109fa573d6000803e3d6000fd5b505050506040513d6020811015610a1057600080fd5b5051855111155b1515610a2257600080fd5b6005546040805160e060020a6382d9bfd90281527f626c6f636b5365637572697479436f756e7400000000000000000000000000006004820152905160009650600160a060020a03909216916382d9bfd99160248082019260209290919082900301818a87803b158015610a9557600080fd5b505af1158015610aa9573d6000803e3d6000fd5b505050506040513d6020811015610abf57600080fd5b50519250600091505b8451821015610c7b5760096000600a60008886815181101515610ae757fe5b602090810290910181015182528181019290925260409081016000908120548452838301949094529182019092208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009015460ff16158015610120830181905291925090610c3f575060c08101516005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015610c1057600080fd5b505af1158015610c24573d6000803e3d6000fd5b505050506040513d6020811015610c3a57600080fd5b505110155b8015610c62575082610c5f826101000151436126cb90919063ffffffff16565b10155b15610c705760019350610c7b565b600190910190610ac8565b600184151514610c8a57600080fd5b600091505b8451821015610cc657610cba338684815181101515610caa57fe5b90602001906020020151856126dd565b50600190910190610c8f565b60405133907eee1bfaa583a6b50363166e24a466ec786118fa3535f3ae3d5bb03b05c289df90600090a25050505050565b600b6020526000908152604090205481565b6000806000806000806000610d1c613e91565b6000898152600a6020526040812054118015610d5557506000898152600a60209081526040808320548352600990915290206001015489145b1515610d6057600080fd5b50505060009586525050600a602090815260408086205486526009808352958190208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301829052600381015460608401819052600482015460808501819052600583015460a08601819052600684015460c08701819052600785015460e08801819052600886015461010089015294909a015460ff161515610120909601869052939991989097509295509193509190565b6002546000908190819081908190600160a060020a03163314610e3c57600080fd5b6005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b505050506040513d6020811015610ec457600080fd5b505193506000841115610fd457600192505b838311610fd45760008381526009602081905260409091209081015490925060ff161515610fc9575060028101805460098301805460ff191660011790556000918290558254600160a060020a03168252600b602052604090912054610f42908263ffffffff61292316565b8254600160a060020a039081166000908152600b60209081526040808320949094558554600187015460048089015460058a0154885191825294810186905280880189905260608101949094526080840185905260a084019490945260c0830193909352935193909216929091600080516020613ef4833981519152919081900360e00190a35b600190920191610ed6565b600194505050505090565b6000806000806000610fef613e91565b6000878152600a602052604081205411801561102857506000878152600a60209081526040808320548352600990915290206001015487145b151561103357600080fd5b50505060009384525050600a602090815260408084205484526009808352938190208151610140810183528154600160a060020a0316808252600183015494820194909452600282015492810183905260038201546060820152600482015460808201819052600583015460a08301819052600684015460c0840152600784015460e084015260088401546101008401819052939097015460ff16151561012090920191909152929592949193509091565b600754600254604080517f23a565c5000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018790526044810186905260648101859052905160009392909216916323a565c59160848082019260209290919082900301818787803b15801561116857600080fd5b505af115801561117c573d6000803e3d6000fd5b505050506040513d602081101561119257600080fd5b5051949350505050565b600f6020526000908152604090205481565b600054600160a060020a031633146111c557600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754604080517f378f44780000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490529051600092600160a060020a03169163378f447891606480830192602092919082900301818787803b15801561116857600080fd5b600354600160a060020a031681565b600054600160a060020a0316331461128e57600080fd5b600160a060020a03811615156112a357600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054600160a060020a031633146112ea57600080fd5b506000908152600a602052604090205490565b600754600254600354604080517fde7864bb000000000000000000000000000000000000000000000000000000008152600160a060020a039384166004820152918316602483015251600093929092169163de7864bb9160448082019260209290919082900301818787803b15801561137557600080fd5b505af1158015611389573d6000803e3d6000fd5b505050506040513d602081101561139f57600080fd5b5051905090565b6060806000806113b4613e91565b6010546040519080825280602002602001820160405280156113e0578160200160208202803883390190505b509350600060105411156115575760009250600191505b6005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561145557600080fd5b505af1158015611469573d6000803e3d6000fd5b505050506040513d602081101561147f57600080fd5b5051821161155757506000818152600960208181526040928390208351610140810185528154600160a060020a031681526001820154928101929092526002810154938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e0820152600883015461010082015291015460ff161515610120820181905261153d578060200151848481518110151561152c57fe5b602090810290910101526001909201915b60105483141561154c57611557565b6001909101906113f7565b50919392505050565b600d60205260009081526040902054600160a060020a031681565b6000806000806000806000806000611591613e91565b600054600160a060020a031633146115a857600080fd5b5050506000978852505060096020818152604097889020885161014081018a528154600160a060020a031680825260018301549382019390935260028201549981018a9052600382015460608201819052600483015460808301819052600584015460a08401819052600685015460c08501819052600786015460e0860181905260088701546101008701819052969098015460ff161515610120909501859052959d929b5090995097509295509293509190565b60008054600160a060020a0316331461167557600080fd5b50604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290518291600091600160a060020a038416916370a0823191602480830192602092919082900301818787803b1580156116db57600080fd5b505af11580156116ef573d6000803e3d6000fd5b505050506040513d602081101561170557600080fd5b505111156118275760008054604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038086169463a9059cbb949091169285926370a0823192602480840193602093929083900390910190829087803b15801561178157600080fd5b505af1158015611795573d6000803e3d6000fd5b505050506040513d60208110156117ab57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156117fa57600080fd5b505af115801561180e573d6000803e3d6000fd5b505050506040513d602081101561182457600080fd5b50505b5050565b600554604080517fe1042804000000000000000000000000000000000000000000000000000000008152336004820181905260248201859052915160009384938493849384938493849390928b92600160a060020a03169163e104280491604480830192602092919082900301818987803b1580156118a957600080fd5b505af11580156118bd573d6000803e3d6000fd5b505050506040513d60208110156118d357600080fd5b505115156001146118e357600080fd5b600754600254604080517f45a3b9c1000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018e9052905191909216916345a3b9c19160448083019260809291908290030181600087803b15801561195557600080fd5b505af1158015611969573d6000803e3d6000fd5b505050506040513d608081101561197f57600080fd5b508051602082015160408084015160609094015160055482517f943426470000000000000000000000000000000000000000000000000000000081527f746f74616c546f6b656e45786368616e6765730000000000000000000000000060048201529251949e50929c50939a50929850600160a060020a031691639434264791602480830192600092919082900301818387803b158015611a1f57600080fd5b505af1158015611a33573d6000803e3d6000fd5b50506005546040805160e060020a6382d9bfd90281527f746f74616c546f6b656e45786368616e6765730000000000000000000000000060048201529051309450339350600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015611aab57600080fd5b505af1158015611abf573d6000803e3d6000fd5b505050506040513d6020811015611ad557600080fd5b5051604080516c01000000000000000000000000600160a060020a0395861681026020838101919091529490951690940260348501526048808501929092528051808503909201825260689093019283905280519092918291908401908083835b60208310611b555780518252601f199092019160209182019101611b36565b51815160209384036101000a600019018019909216911617905260408051929094018290039091206000818152600e909252929020600281015492995097505060ff16159150611ba6905057600080fd5b600554604080517f8d8a1f1e000000000000000000000000000000000000000000000000000000008152600481018b90529051600160a060020a0390921691638d8a1f1e9160248082019260009290919082900301818387803b158015611c0c57600080fd5b505af1158015611c20573d6000803e3d6000fd5b5050855473ffffffffffffffffffffffffffffffffffffffff19163317808755600180880189905560028801805460ff1916909117905560048054604080517f9803f216000000000000000000000000000000000000000000000000000000008152600160a060020a0394851693810193909352602483018c90525192169350639803f21692506044808201926020929091908290030181600087803b158015611cc957600080fd5b505af1158015611cdd573d6000803e3d6000fd5b505050506040513d6020811015611cf357600080fd5b50511515611d045760029250611d83565b8354604051600160a060020a039091169089156108fc02908a906000818181858888f193505050501515611d7e578354600160a060020a03166000908152600b6020526040812054909350611d5f908963ffffffff61292316565b8454600160a060020a03166000908152600b6020526040902055611d83565b600192505b600560009054906101000a9004600160a060020a0316600160a060020a031663327fdeb86040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015611dd657600080fd5b505af1158015611dea573d6000803e3d6000fd5b505050508360000160009054906101000a9004600160a060020a0316600160a060020a03168460010154600019167f7a85f5414930606b334089b5715d0849610160cebfbcae7152c1e359cb287e238c600560009054906101000a9004600160a060020a0316600160a060020a03166382d9bfd96040518163ffffffff1660e060020a02815260040180807f746f6b656e546f57656945786368616e676552617465486f6e6f7200000000008152506020019050602060405180830381600087803b158015611eb857600080fd5b505af1158015611ecc573d6000803e3d6000fd5b505050506040513d6020811015611ee257600080fd5b50516040805192835260208301919091528181018e9052606082018d9052608082018c905260a08201889052519081900360c00190a350505050505050505050565b6000805481908190600160a060020a03163314611f4057600080fd5b6000848152600a602052604081205411611f5957600080fd5b6000848152600a602090815260408083205483526009918290529091209081015490925060ff1615611f8a57600080fd5b5060098101805460ff191660011790556002810180546000918290556006830182905560078301829055848252600a602052604090912054611fcc908261293d565b5060019392505050565b60105481565b600154600160a060020a031681565b336000908152600b60205260408120548190811061200857600080fd5b5050336000818152600b602052604080822080549083905590519092600192909184156108fc0291859190818181858888f1935050505015156120595750336000908152600b602052604081208290555b6040805183815260208101839052815133927fd4689e0f08c0a262a44fa32f4f6ddf1ed43cfe1e14fdebb1539ec6f3a831bb9c928290030190a25050565b600080600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156120ed57600080fd5b505af1158015612101573d6000803e3d6000fd5b505050506040513d602081101561211757600080fd5b5051151560011461212757600080fd5b600660009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561217a57600080fd5b505af115801561218e573d6000803e3d6000fd5b505050506040513d60208110156121a457600080fd5b505115156001146121b457600080fd5b336000908152600f6020526040812054116121ce57600080fd5b5050336000818152600f6020908152604080832080549084905560065482517f174e31c400000000000000000000000000000000000000000000000000000000815260048101969096526024860182905291519094600194600160a060020a039093169363174e31c49360448084019492938390030190829087803b15801561225657600080fd5b505af115801561226a573d6000803e3d6000fd5b505050506040513d602081101561228057600080fd5b5051151561229c5750336000908152600f602052604081208290555b33600160a060020a03167fb040751adc2b4663a203ce7f91ba3aacbbe4fa3dcacfcf73afba78bf322b48d2600660009054906101000a9004600160a060020a0316600160a060020a0316634699560c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561231a57600080fd5b505af115801561232e573d6000803e3d6000fd5b505050506040513d602081101561234457600080fd5b50516040805191825260208201869052818101859052519081900360600190a25050565b606481565b600554600754604080517f378f447800000000000000000000000000000000000000000000000000000000815234600482018190526024820189905260448201889052915160009485948a938a93600160a060020a0393841693634b60fc2a93169163378f447891606480830192602092919082900301818c87803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b505050506040513d602081101561241f57600080fd5b50516040805160e060020a63ffffffff851602815260048101929092526024820187905260448201869052606482018590525160848083019260209291908290030181600087803b15801561247357600080fd5b505af1158015612487573d6000803e3d6000fd5b505050506040513d602081101561249d57600080fd5b505115156001146124ad57600080fd5b6124b934338b8b612ab2565b9350861561256c576005546040805160e060020a6382d9bfd90281527f626c6f636b5365637572697479436f756e7400000000000000000000000000006004820152905161256a9233928b92600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561253957600080fd5b505af115801561254d573d6000803e3d6000fd5b505050506040513d602081101561256357600080fd5b50516126dd565b505b6125768685612d9a565b600860009054906101000a9004600160a060020a0316600160a060020a0316639df613ea6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156125c957600080fd5b505af11580156125dd573d6000803e3d6000fd5b505050506040513d60208110156125f357600080fd5b5060019a9950505050505050505050565b600054600160a060020a0316331461261b57600080fd5b600160a060020a038116151561263057600080fd5b60038054600160a060020a0390921673ffffffffffffffffffffffffffffffffffffffff19928316811790915560068054909216179055565b600e60205260009081526040902080546001820154600290920154600160a060020a03909116919060ff1683565b600054600160a060020a031681565b620f424081565b670de0b6b3a764000081565b600c6020526000908152604090205481565b6000828211156126d757fe5b50900390565b60006126e7613e91565b6000848152600a602052604081205411156128eb57506000838152600a602090815260408083205483526009808352928190208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301529091015460ff161580156101208301819052612840575060c08101516005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561281157600080fd5b505af1158015612825573d6000803e3d6000fd5b505050506040513d602081101561283b57600080fd5b505110155b8015612863575082612860826101000151436126cb90919063ffffffff16565b10155b1561288a576000848152600a6020526040902054612884908690600161301b565b506128e2565b60208082015160408051600080825260029482019490945280820193909352519091600160a060020a038816917fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d99181900360600190a35b6001915061291b565b60405184907fe0a05d247c244a5ec656afb31d240208d32df06332108e132529fd9c537323a190600090a2600091505b509392505050565b60008282018381101561293257fe5b8091505b5092915050565b612945613e91565b5060008281526009602081815260408084208151610140810183528154600160a060020a0316808252600183015494820194909452600282015481840152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e08301526008830154610100830152919094015460ff16151561012085015290519293909285156108fc0291869190818181858888f193505050501515612a3c57508051600160a060020a03166000908152600b6020526040902054600490612a21908463ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b815160208084015160808086015160608088015160a0808a015160408051958652978501929092528387018b905291830152600092820183905281019190915260c081018590529151600160a060020a03909316929091600080516020613ef4833981519152919081900360e00190a350505050565b600554604080517f66ce9c72000000000000000000000000000000000000000000000000000000008152600481018790529051600092839283928392600160a060020a0316916366ce9c72916024808301928692919082900301818387803b158015612b1d57600080fd5b505af1158015612b31573d6000803e3d6000fd5b50506005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a0390921693506382d9bfd992506024808201926020929091908290030181600087803b158015612b9357600080fd5b505af1158015612ba7573d6000803e3d6000fd5b505050506040513d6020811015612bbd57600080fd5b5051604080516c01000000000000000000000000308102602083810191909152600160a060020a038c1690910260348301526048808301859052835180840390910181526068909201928390528151939650909282918401908083835b60208310612c395780518252601f199092019160209182019101612c1a565b51815160209384036101000a600019018019909216911617905260408051929094018290039091206000898152600992839052939093209081015492965094505060ff16159150612c8b905057600080fd5b6000828152600a60205260409020839055805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03881617815560018101829055600281018890556004810186905560058101859055612ce98887876111f4565b6006820155612cf98887876110e5565b600782019081554360088301556010805460019081019091558254908301546004840154600285015460058601546006870154955460408051948552602085019390935283830191909152606083019590955260808201949094529251600160a060020a039092169290917f56b3f1a6cd856076d6f8adbf8170c43a0b0f532fc5696a2699a0e0cabc7041639181900360a00190a350909695505050505050565b612da2613e91565b5060008181526009602081815260408084208151610140810183528154600160a060020a039081168083526001840154838701526002840154838601526003840154606084015260048401546080840152600584015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152908552600d9092528320549092911615612e60578151600160a060020a039081166000908152600d60205260409020541693505b600160a060020a03841615801590612e8557508151600160a060020a03858116911614155b15611824578151600160a060020a039081166000908152600d60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916898616179055600554815160e060020a6382d9bfd90281527f726566657272616c50657263656e74000000000000000000000000000000000060048201529151612f8295620f424095612f769593909116936382d9bfd993602480830194919391928390030190829087803b158015612f3957600080fd5b505af1158015612f4d573d6000803e3d6000fd5b505050506040513d6020811015612f6357600080fd5b505160e08601519063ffffffff61350016565b9063ffffffff61352b16565b600160a060020a0385166000908152600f6020526040902054909150612fae908263ffffffff61292316565b600160a060020a0385166000818152600f602090815260409182902093909355848301518151858152600194810185905280830194909452905190927fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d9919081900360600190a350505050565b600082815260096020818152604080842060028082018054600684018054600780870180549a8801805460ff19166001179055948b9055918a9055928990555492546008850154600554875160e060020a6382d9bfd90281527f746f74616c5765695761676572656400000000000000000000000000000000006004820152975196999398949793968b968796600160a060020a0391821696631c1faa9b96831695946131ab949316926382d9bfd99260248084019391929182900301818c87803b1580156130e957600080fd5b505af11580156130fd573d6000803e3d6000fd5b505050506040513d602081101561311357600080fd5b50516005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561317357600080fd5b505af1158015613187573d6000803e3d6000fd5b505050506040513d602081101561319d57600080fd5b50519063ffffffff61292316565b6040805160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064828101525160848083019260209291908290030181600087803b15801561320357600080fd5b505af1158015613217573d6000803e3d6000fd5b505050506040513d602081101561322d57600080fd5b505160038701819055151561324b57613246898661293d565b613271565b85600401548660030154101561326657613246898686613542565b61327189868561375c565b60108054600019019055600554604080517f327fdeb80000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163327fdeb89160048082019260009290919082900301818387803b1580156132da57600080fd5b505af11580156132ee573d6000803e3d6000fd5b505050506132fa6112fd565b91508715156133a6576005546040805160e060020a6382d9bfd90281527f636c65617253696e676c654265744d756c7469706c696572000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561337357600080fd5b505af1158015613387573d6000803e3d6000fd5b505050506040513d602081101561339d57600080fd5b50519050613445565b6005546040805160e060020a6382d9bfd90281527f636c6561724d756c7469706c65426574734d756c7469706c696572000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561341657600080fd5b505af115801561342a573d6000803e3d6000fd5b505050506040513d602081101561344057600080fd5b505190505b61345a6064612f76848463ffffffff61350016565b600160a060020a038b166000908152600f6020526040902054909250613486908363ffffffff61292316565b600160a060020a038b166000818152600f6020908152604091829020939093556001808a0154825187815260029581019590955284830191909152905190927fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d9919081900360600190a35060019998505050505050505050565b6000808315156135135760009150612936565b5082820282848281151561352357fe5b041461293257fe5b600080828481151561353957fe5b04949350505050565b61354a613e91565b5060008381526009602081815260408084208151610140810183528154600160a060020a03908116825260018301549482019490945260028201548184015260038201546060820152600480830154608083015260058084015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152905482517f2ef5c02e00000000000000000000000000000000000000000000000000000000815294850187905291519094939190921691632ef5c02e91602480820192869290919082900301818387803b15801561363557600080fd5b505af1158015613649573d6000803e3d6000fd5b50505050613660848461292390919063ffffffff16565b825160405191945060019250600160a060020a03169084156108fc029085906000818181858888f1935050505015156136dc57508051600160a060020a03166000908152600b60205260409020546002906136c1908463ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b8160000151600160a060020a0316826020015160001916600080516020613ef483398151915284608001518560600151888760a00151896000896040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a35050505050565b613764613e91565b5060008381526009602081815260408084208151610140810183528154600160a060020a03908116825260018301549482019490945260028201548184015260038201546060820152600480830154608083015260058084015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152905482517f47fb0b1800000000000000000000000000000000000000000000000000000000815294850188905260248501879052915190949391909216916347fb0b1891604480820192869290919082900301818387803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b50508351604051600160a060020a0390911692506000915060019082818181858883f1935050505015156138e357508051600160a060020a03166000908152600b6020526040902054600019906138c890600163ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b60008311156139d957600480548351604080517fc349c93e000000000000000000000000000000000000000000000000000000008152600160a060020a0392831694810194909452602484018790525191169163c349c93e9160448083019260209291908290030181600087803b15801561395d57600080fd5b505af1158015613971573d6000803e3d6000fd5b505050506040513d602081101561398757600080fd5b505115156139d957508051600160a060020a03166000908152600c6020526040902054600119906139be908463ffffffff61292316565b8251600160a060020a03166000908152600c60205260409020555b8160000151600160a060020a0316826020015160001916600080516020613ef483398151915284608001518560600151888760a0015160018a896040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a3613a5c8585613a64565b505050505050565b600080613a6f613e91565b6005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600092600160a060020a0316916382d9bfd991602480830192602092919082900301818787803b158015613ade57600080fd5b505af1158015613af2573d6000803e3d6000fd5b505050506040513d6020811015613b0857600080fd5b50516005546040805160e060020a6382d9bfd90281527f6d696e42616e6b726f6c6c00000000000000000000000000000000000000000060048201529051929550600160a060020a03909116916382d9bfd9916024808201926020929091908290030181600087803b158015613b7d57600080fd5b505af1158015613b91573d6000803e3d6000fd5b505050506040513d6020811015613ba757600080fd5b50518310613e835760008681526009602081815260408084208151610140810183528154600160a060020a0390811682526001830154828601526002808401548386015260038085015460608501526004808601546080860152600586015460a0860152600686015460c086015260078087015460e08701526008870154610100870152959098015460ff16151561012085015293549054935485517ff1129768000000000000000000000000000000000000000000000000000000008152948316978501979097529581166024840152604483018c90529251909750939091169363f112976893606480840194939192918390030190829087803b158015613caf57600080fd5b505af1158015613cc3573d6000803e3d6000fd5b505050506040513d6020811015613cd957600080fd5b50519050600081118015613ced5750808310155b15613e8357600554604080517fe20be9fd000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e20be9fd9160248082019260009290919082900301818387803b158015613d5857600080fd5b505af1158015613d6c573d6000803e3d6000fd5b505050508160000151600160a060020a03168260200151600019167f7d87edb5f1d55fdeb650288045e17cd2957473ed0eab57f68bb5f752694af381836040518082815260200191505060405180910390a36003546005546040805160e060020a6382d9bfd90281527f676173466f724c6f74746572790000000000000000000000000000000000000060048201529051600160a060020a0393841693909216916382d9bfd9916024808201926020929091908290030181600087803b158015613e3557600080fd5b505af1158015613e49573d6000803e3d6000fd5b505050506040513d6020811015613e5f57600080fd5b505160405183906000818181858888f193505050501515613e835760009350613e88565b600193505b50505092915050565b610140604051908101604052806000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815250905600d9227e659bdf4c2e74777ad3feac5d6a564cbd9272a0b8a11263e1e7c17c9388746f74616c426574730000000000000000000000000000000000000000000000a165627a7a72305820860620f36b26c0e5c6e555a5ea5f9d72b7387e05827e56bedcb52866d15baa2a0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b42f5366792ed7c08995451c1a93780b7554762b000000000000000000000000b654457bab03011531ef939cb31f76eb36e2ddf3000000000000000000000000ea1853f9162ba2b6594fc18d60c66bf4b6211e0d
-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0xb42f5366792ed7c08995451C1A93780B7554762B
Arg [1] : _settingAddress (address): 0xb654457bAB03011531eF939Cb31f76Eb36e2ddf3
Arg [2] : _libraryAddress (address): 0xeA1853f9162Ba2B6594fc18d60C66BF4b6211E0d
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b42f5366792ed7c08995451c1a93780b7554762b
Arg [1] : 000000000000000000000000b654457bab03011531ef939cb31f76eb36e2ddf3
Arg [2] : 000000000000000000000000ea1853f9162ba2b6594fc18d60c66bf4b6211e0d
Deployed Bytecode Sourcemap
11858:29447:0:-;;;;;;;;;-1:-1:-1;;;11858:29447:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16571:8;;;;;;;;;-1:-1:-1;;;;;16571:8:0;-1:-1:-1;;;;;16571:17:0;;:19;;;;;-1:-1:-1;;;16571:19:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16571:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16571:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16571:19:0;:27;;16594:4;16571:27;16563:36;;;;;;19834:8;;:35;;;;;;19859:9;19834:35;;;;;;-1:-1:-1;;;;;19834:8:0;;;;:24;;:35;;;;;:8;;:35;;;;;;;;:8;;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;19834:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19834:35:0;;;;11858:29447;27380:722;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27380:722:0;;;;;;11973:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11973:29:0;;;;;;;;-1:-1:-1;;;;;11973:29:0;;;;;;;;;;;;;;22179:791;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22179:791:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22179:791:0;;-1:-1:-1;22179:791:0;;-1:-1:-1;;;;;;;22179:791:0;12727:60;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12727:60:0;-1:-1:-1;;;;;12727:60:0;;;;;;;;;;;;;;;;;;;;;28205:392;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28205:392:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20197:653;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20197:653:0;;;;;;;;;;;;;;;;;;;;;;29299:348;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29299:348:0;;;;;;;;;-1:-1:-1;;;;;29299:348:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26304:216;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26304:216:0;;;;;;;;;12968:55;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12968:55:0;-1:-1:-1;;;;;12968:55:0;;;;;11408:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11408:98:0;-1:-1:-1;;;;;11408:98:0;;;;;25802:200;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25802:200:0;;;;;;;;;12006:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12006:29:0;;;;18108:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18108:198:0;-1:-1:-1;;;;;18108:198:0;;;;;18463:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18463:129:0;;;;;29812:158;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29812:158:0;;;;28685:503;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28685:503:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28685:503:0;;;;;;;;;;;;;;;;;12860:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12860:44:0;-1:-1:-1;;;;;12860:44:0;;;;;18770:386;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18770:386:0;;;;;;;;;-1:-1:-1;;;;;18770:386:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11574:234;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11574:234:0;-1:-1:-1;;;;;11574:234:0;;;;;23729:1784;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23729:1784:0;;;;;19328:412;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19328:412:0;;;;;13206:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13206:31:0;;;;11942:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11942:27:0;;;;26618:663;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26618:663:0;;;;23077:498;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23077:498:0;;;;13029:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13029:42:0;;;;21470:606;;;;;;;;-1:-1:-1;;;;;21470:606:0;;;;;17738:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17738:211:0;-1:-1:-1;;;;;17738:211:0;;;;;12908:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12908:56:0;;;;;;;;;-1:-1:-1;;;;;12908:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11026:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11026:24:0;;;;13075:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13075:52:0;;;;13151:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13151:49:0;;;;12791:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12791:65:0;-1:-1:-1;;;;;12791:65:0;;;;;27380:722;27480:10;27501:22;27450:41;;;:29;:41;;;;;;27501:22;;27450:45;-1:-1:-1;27442:54:0;;;;;;-1:-1:-1;;27556:10:0;27526:41;;;;:29;:41;;;;;;;;;;27572:45;;;;27716:10;;;:51;;;;;;;;;;;;;;;;;;;;27526:41;;-1:-1:-1;;;;;;;27716:10:0;;;;:23;;:51;;;;;27526:41;;27716:51;;;;;;;;:10;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;27716:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27716:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27716:51:0;27715:52;27711:312;;;-1:-1:-1;27989:10:0;27784:1;27959:41;;;:29;:41;;;;;:58;;;27711:312;28032:65;;;;;;;;;;;;;;28062:10;;28032:65;;;;;;;;27380:722;;:::o;11973:29::-;;;-1:-1:-1;;;;;11973:29:0;;:::o;22179:791::-;22330:13;22356:26;22438:9;22483:15;;:::i;:::-;16571:8;;;;;;;;;-1:-1:-1;;;;;16571:8:0;-1:-1:-1;;;;;16571:17:0;;:19;;;;;-1:-1:-1;;;16571:19:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16571:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16571:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16571:19:0;:27;;16594:4;16571:27;16563:36;;;;;;22262:1;22246:6;:13;:17;:78;;;;-1:-1:-1;22284:8:0;;:40;;;-1:-1:-1;;;;;22284:40:0;;;;;;;;;-1:-1:-1;;;;;22284:8:0;;;;:21;;:40;;;;;;;;;;;;;;;:8;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;22284:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22284:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22284:40:0;22267:13;;:57;;22246:78;22237:88;;;;;;;;22385:8;;:43;;;-1:-1:-1;;;;;22385:43:0;;;;;;;;;22346:5;;-1:-1:-1;;;;;;22385:8:0;;;;:21;;:43;;;;;;;;;;;;;;;22346:5;22385:8;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;22385:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22385:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22385:43:0;;-1:-1:-1;22450:1:0;;-1:-1:-1;22433:303:0;22457:6;:13;22453:1;:17;22433:303;;;22501:4;:28;22506:11;:22;22518:6;22525:1;22518:9;;;;;;;;;;;;;;;;;;;;22506:22;;;;;;;;;;;;;;;;;;22501:28;;;;;;;;;;;;;;;22483:46;;;;;;;;;-1:-1:-1;;;;;22483:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22483:46:0;22539:87;;-1:-1:-1;22610:16:0;;;;22566:8;;:40;;;-1:-1:-1;;;;;22566:40:0;;;;;;;;;-1:-1:-1;;;;;22566:8:0;;;;:21;;:40;;;;;;;;;;;;;;;:8;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;22566:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22566:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22566:40:0;:60;;22539:87;:149;;;;;22670:18;22631:34;22648:4;:16;;;22631:12;:16;;:34;;;;:::i;:::-;22630:58;;22539:149;22535:196;;;22708:4;22697:15;;22719:5;;22535:196;22472:3;;;;;22433:303;;;22760:4;22748:16;;;;22740:25;;;;;;22835:1;22831:5;;22826:106;22842:6;:13;22838:1;:17;22826:106;;;22868:58;22884:10;22896:6;22903:1;22896:9;;;;;;;;;;;;;;;;;;22907:18;22868:15;:58::i;:::-;-1:-1:-1;22857:3:0;;;;;22826:106;;;22941:24;;22954:10;;22941:24;;;;;22179:791;;;;;:::o;12727:60::-;;;;;;;;;;;;;:::o;28205:392::-;28270:7;28279;28288;28297;28306;28315;28324:4;28414:15;;:::i;:::-;28364:1;28343:18;;;:11;:18;;;;;;:22;:65;;;;-1:-1:-1;28369:39:0;28374:18;;;:11;:18;;;;;;;;;28369:24;;:4;:24;;;;;:30;;;:39;;28343:65;28335:74;;;;;;;;-1:-1:-1;;;28432:24:0;28437:18;;;-1:-1:-1;;28437:11:0;:18;;;;;;;;;28432:24;;:4;:24;;;;;;;28414:42;;;;;;;;;-1:-1:-1;;;;;28414:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28414:42:0;;-1:-1:-1;28414:42:0;;-1:-1:-1;28414:42:0;;28205:392::o;20197:653::-;20276:14;;20242:4;;;;;;;;;;-1:-1:-1;;;;;20276:14:0;20262:10;:28;20253:38;;;;;;20316:8;;:34;;;-1:-1:-1;;;;;20316:34:0;;-1:-1:-1;;;;;;;;;;;20316:34:0;;;;;;-1:-1:-1;;;;;20316:8:0;;;;:21;;:34;;;;;;;;;;;;;;;:8;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;20316:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20316:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20316:34:0;;-1:-1:-1;20371:1:0;20359:13;;20355:475;;;20397:1;20385:13;;20380:445;20400:14;;;20380:445;;20447:7;;;;:4;:7;;;;;;;;20465:14;;;;20447:7;;-1:-1:-1;20465:14:0;;:23;;20461:358;;-1:-1:-1;20518:13:0;;;;;20539:14;;;:21;;-1:-1:-1;;20539:21:0;20556:4;20539:21;;;:14;20568:17;;;;20665:18;;-1:-1:-1;;;;;20665:18:0;20640:44;;:24;:44;;;;;;;:59;;20518:13;20640:59;:48;:59;:::i;:::-;20618:18;;-1:-1:-1;;;;;20618:18:0;;;20593:44;;;;:24;:44;;;;;;;;:106;;;;20734:18;;20618;20722:10;;;20754:17;;;;;20787:14;;;;20712:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20734:18;;;;;20722:10;;-1:-1:-1;;;;;;;;;;;20712:99:0;;;;;;;;;20461:358;20416:3;;;;;20380:445;;;20841:4;20834:11;;20197:653;;;;;:::o;29299:348::-;29371:7;29380;29389;29398;29407;29500:15;;:::i;:::-;29450:1;29429:18;;;:11;:18;;;;;;:22;:65;;;;-1:-1:-1;29455:39:0;29460:18;;;:11;:18;;;;;;;;;29455:24;;:4;:24;;;;;:30;;;:39;;29429:65;29421:74;;;;;;;;-1:-1:-1;;;29518:24:0;29523:18;;;-1:-1:-1;;29523:11:0;:18;;;;;;;;;29518:24;;:4;:24;;;;;;;29500:42;;;;;;;;;-1:-1:-1;;;;;29500:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29500:42:0;;29299:348::o;26304:216::-;26439:4;;26465:14;;26439:76;;;;;;-1:-1:-1;;;;;26465:14:0;;;26439:76;;;;;;;;;;;;;;;;;;;;;;;;26418:7;;26439:4;;;;;:25;;:76;;;;;;;;;;;;;;;26418:7;26439:4;:76;;;5:2:-1;;;;30:1;27;20:12;5:2;26439:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26439:76:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26439:76:0;;26304:216;-1:-1:-1;;;;26304:216:0:o;12968:55::-;;;;;;;;;;;;;:::o;11408:98::-;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;11479:9;:22;;-1:-1:-1;;11479:22:0;-1:-1:-1;;;;;11479:22:0;;;;;;;;;;11408:98::o;25802:200::-;25935:4;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;25914:7;;-1:-1:-1;;;;;25935:4:0;;:27;;:62;;;;;;;;;;;;;;25914:7;25935:4;:62;;;5:2:-1;;;;30:1;27;20:12;12006:29:0;;;-1:-1:-1;;;;;12006:29:0;;:::o;18108:198::-;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;-1:-1:-1;;;;;18206:33:0;;;;18197:43;;;;;;18245:12;:56;;-1:-1:-1;;18245:56:0;-1:-1:-1;;;;;18245:56:0;;;;;;;;;;18108:198::o;18463:129::-;18546:7;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;-1:-1:-1;18568:18:0;;;;:11;:18;;;;;;;18463:129::o;29812:158::-;29899:4;;29934:14;;29950;;29899:66;;;;;;-1:-1:-1;;;;;29934:14:0;;;29899:66;;;;29950:14;;;29899:66;;;;;29878:7;;29899:4;;;;;:34;;:66;;;;;;;;;;;;;;;29878:7;29899:4;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;29899:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29899:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29899:66:0;;-1:-1:-1;29812:158:0;:::o;28685:503::-;28744:9;28760:30;28861:15;28891:9;28959:15;;:::i;:::-;28807:16;;28793:31;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;28793:31:0;;28760:64;;28852:1;28833:16;;:20;28829:330;;;28879:1;28861:19;;28903:1;28891:13;;28886:268;28911:8;;:34;;;-1:-1:-1;;;;;28911:34:0;;-1:-1:-1;;;;;;;;;;;28911:34:0;;;;;;-1:-1:-1;;;;;28911:8:0;;;;:21;;:34;;;;;;;;;;;;;;;:8;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;28911:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28911:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28911:34:0;28906:39;;28886:268;;-1:-1:-1;28977:7:0;;;;:4;:7;;;;;;;;;28959:25;;;;;;;;;-1:-1:-1;;;;;28959:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28991:97;;29053:4;:10;;;29028:13;29042:7;29028:22;;;;;;;;;;;;;;;;;;:35;29071:9;;;;;28991:97;29109:16;;29098:7;:27;29094:54;;;29135:5;;29094:54;28947:3;;;;;28886:268;;;-1:-1:-1;29170:13:0;;28685:503;-1:-1:-1;;;28685:503:0:o;12860:44::-;;;;;;;;;;;;-1:-1:-1;;;;;12860:44:0;;:::o;18770:386::-;18857:7;18866;18875;18884;18893;18902;18911;18920;18929:4;18940:15;;:::i;:::-;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;-1:-1:-1;;;18958:19:0;;;;-1:-1:-1;;18958:4:0;:19;;;;;;;;;18940:37;;;;;;;;;-1:-1:-1;;;;;18940:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18940:37:0;;-1:-1:-1;18940:37:0;-1:-1:-1;18940:37:0;;-1:-1:-1;18940:37:0;;-1:-1:-1;18940:37:0;;18770:386::o;11574:234::-;11653:17;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;-1:-1:-1;11714:22:0;;;;;;11731:4;11714:22;;;;;;11684:20;;11739:1;;-1:-1:-1;;;;;11714:16:0;;;;;:22;;;;;;;;;;;;;;11739:1;11714:16;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;11714:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11714:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11714:22:0;:26;11710:94;;;11764:9;;;11775:22;;;;;;11792:4;11775:22;;;;;;-1:-1:-1;;;;;11748:15:0;;;;;;11764:9;;;;11748:15;;11775:16;;:22;;;;;;;;;;;;;;;;;;11748:15;11775:22;;;5:2:-1;;;;30:1;27;20:12;5:2;11775:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11775:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11775:22:0;11748:50;;;-1:-1:-1;;;11748:50:0;;;;;;-1:-1:-1;;;;;11748:50:0;;;;;;;;;;;;;;;;;;;;11775:22;;11748:50;;;;;;;-1:-1:-1;11748:50:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;11748:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11748:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;11710:94:0;11574:234;;:::o;23729:1784::-;17376:8;;:54;;;;;;23801:10;17376:54;;;;;;;;;;;;;;23832:16;;;;;;;;;;;;;;23801:10;;23813:11;;-1:-1:-1;;;;;17376:8:0;;:26;;:54;;;;;;;;;;;;;;23832:16;17376:8;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;17376:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17376:54:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17376:54:0;:62;;17434:4;17376:62;17368:71;;;;;;23912:4;;23945:14;;23912:61;;;;;;-1:-1:-1;;;;;23945:14:0;;;23912:61;;;;;;;;;;;;:4;;;;;:32;;:61;;;;;;;;;;;;;;:4;;:61;;;5:2:-1;;;;30:1;27;20:12;5:2;23912:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23912:61:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;23912:61:0;;;;;;;;;;;;;;;;23980:8;;:59;;;;;;;;;;;;23912:61;;-1:-1:-1;23912:61:0;;-1:-1:-1;23912:61:0;;-1:-1:-1;23912:61:0;;-1:-1:-1;;;;;;23980:8:0;;:36;;:59;;;;;:8;;:59;;;;;;;:8;;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;23980:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24139:8:0;;:44;;;-1:-1:-1;;;;;24139:44:0;;;;;;;;;24121:4;;-1:-1:-1;24127:10:0;;-1:-1:-1;;;;;;24139:8:0;;;;:21;;:44;;;;;;;;;;;;;;;:8;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;24139:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24139:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24139:44:0;24104:80;;;;-1:-1:-1;;;;;24104:80:0;;;;;24139:44;24104:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;24104:80:0;;;;;;;;24094:91;;24104:80;;;;;24094:91;;;;;24104:80;24094:91;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;24094:91:0;;;;;;;;;;;;;-1:-1:-1;24229:27:0;;;:14;:27;;;;;;24328:24;;;;24094:91;;-1:-1:-1;24229:27:0;-1:-1:-1;;24328:24:0;;:33;;-1:-1:-1;24319:43:0;;-1:-1:-1;24319:43:0;;;;;24398:8;;:45;;;;;;;;;;;;;;-1:-1:-1;;;;;24398:8:0;;;;:36;;:45;;;;;:8;;:45;;;;;;;;:8;;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;24398:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24504:41:0;;-1:-1:-1;;24504:41:0;24535:10;24504:41;;;;;24550:25;;;:39;;;24594:24;;;:31;;-1:-1:-1;;24594:31:0;;;;;;24683:10;;;:58;;;;;;-1:-1:-1;;;;;24701:28:0;;;24683:58;;;;;;;;;;;;;;:10;;;-1:-1:-1;24683:17:0;;-1:-1:-1;24683:58:0;;;;;;;;;;;;;;;24504:28;24683:10;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;24683:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24683:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24683:58:0;24682:59;24678:533;;;24774:1;24749:26;;24678:533;;;24833:28;;:42;;-1:-1:-1;;;;;24833:28:0;;;;:42;;;;;24867:7;;24833:28;:42;:28;:42;24867:7;24833:28;:42;;;;;;;24832:43;24828:378;;;25099:28;;-1:-1:-1;;;;;25099:28:0;24901:1;25074:54;;;:24;:54;;;;;;24901:1;;-1:-1:-1;25074:67:0;;25133:7;25074:67;:58;:67;:::i;:::-;25042:28;;-1:-1:-1;;;;;25042:28:0;25017:54;;;;:24;:54;;;;;:124;24828:378;;;25178:1;25161:18;;24828:378;25259:8;;;;;;;;;-1:-1:-1;;;;;25259:8:0;-1:-1:-1;;;;;25259:44:0;;:46;;;;;-1:-1:-1;;;25259:46:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25259:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25259:46:0;;;;25361:14;:28;;;;;;;;;;-1:-1:-1;;;;;25361:28:0;-1:-1:-1;;;;;25317:191:0;25334:14;:25;;;25317:191;;;;25391:11;25404:8;;;;;;;;;-1:-1:-1;;;;;25404:8:0;-1:-1:-1;;;;;25404:21:0;;:52;;;;;-1:-1:-1;;;25404:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25404:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25404:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25404:52:0;25317:191;;;;;;25404:52;25317:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23729:1784;;;;;;;;;;:::o;19328:412::-;19395:4;11256:9;;19395:4;;;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;19436:1;19415:18;;;:11;:18;;;;;;:22;19406:32;;;;;;19464:24;19469:18;;;:11;:18;;;;;;;;;19464:24;;:4;:24;;;;;;;19503:14;;;;19464:24;;-1:-1:-1;19503:14:0;;:23;19495:32;;;;;;-1:-1:-1;19534:14:0;;;:21;;-1:-1:-1;;19534:21:0;19551:4;19534:21;;;19579:13;;;;;19534:14;19597:17;;;;19619:16;;;:20;;;-1:-1:-1;19644:21:0;;:25;;;19690:18;;;:11;:18;;;;;;;19676:43;;19579:13;19676;:43::i;:::-;-1:-1:-1;19731:4:0;;19328:412;-1:-1:-1;;;19328:412:0:o;13206:31::-;;;;:::o;11942:27::-;;;-1:-1:-1;;;;;11942:27:0;;:::o;26618:663::-;26708:10;26729:22;26683:36;;;:24;:36;;;;;;26729:22;;26683:40;-1:-1:-1;26675:49:0;;;;;;-1:-1:-1;;26779:10:0;26754:36;;;;:24;:36;;;;;;;;26795:40;;;;26932:31;;26754:36;;-1:-1:-1;;26779:10:0;;26932:31;;;;;26754:36;;26932:31;;26754:36;26932:31;26754:36;26779:10;26932:31;;;;;;;26931:32;26927:280;;;-1:-1:-1;27173:10:0;26980:1;27148:36;;;:24;:36;;;;;:53;;;26927:280;27216:60;;;;;;;;;;;;;;27241:10;;27216:60;;;;;;;;26618:663;;:::o;23077:498::-;23220:19;23318;16571:8;;;;;;;;;-1:-1:-1;;;;;16571:8:0;-1:-1:-1;;;;;16571:17:0;;:19;;;;;-1:-1:-1;;;16571:19:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16571:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16571:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16571:19:0;:27;;16594:4;16571:27;16563:36;;;;;;23137:8;;;;;;;;;-1:-1:-1;;;;;23137:8:0;-1:-1:-1;;;;;23137:17:0;;:19;;;;;-1:-1:-1;;;23137:19:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23137:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23137:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23137:19:0;:27;;23160:4;23137:27;23128:37;;;;;;23199:10;23213:1;23179:31;;;:19;:31;;;;;;:35;23170:45;;;;;;-1:-1:-1;;23262:10:0;23242:31;;;;:19;:31;;;;;;;;;;23278:35;;;;23351:8;;:45;;;;;;;;;;;;;;;;;;;;23242:31;;-1:-1:-1;;;;;;;23351:8:0;;;;:20;;:45;;;;;23242:31;;23351:45;;;;;;;:8;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;23351:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23351:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23351:45:0;23350:46;23346:130;;;-1:-1:-1;23445:10:0;23418:1;23425:31;;;:19;:31;;;;;:45;;;23346:130;23507:10;-1:-1:-1;;;;;23485:85:0;;23519:8;;;;;;;;;-1:-1:-1;;;;;23519:8:0;-1:-1:-1;;;;;23519:22:0;;:24;;;;;-1:-1:-1;;;23519:24:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23519:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23519:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23519:24:0;23485:85;;;;;;23519:24;23485:85;;;;;;;;;;;;;;;;;;;;23077:498;;:::o;13029:42::-;13068:3;13029:42;:::o;21470:606::-;16837:8;;16853:4;;:65;;;;;;21602:9;16853:65;;;;;;;;;;;;;;;;;;;;21650:4;;;;21613:12;;21627:9;;-1:-1:-1;;;;;16837:8:0;;;;:15;;16853:4;;:27;;:65;;;;;;;;;;;;;;21650:4;16853;:65;;;5:2:-1;;;;30:1;27;20:12;5:2;16853:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16853:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16853:65:0;16837:120;;;-1:-1:-1;;;16837:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16853:65;;16837:120;;;;;;;-1:-1:-1;16837:120:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;16837:120:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16837:120:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16837:120:0;:128;;16961:4;16837:128;16829:137;;;;;;21685:57;21695:9;21706:10;21718:12;21732:9;21685;:57::i;:::-;21661:81;-1:-1:-1;21799:16:0;;21795:118;;21863:8;;:43;;;-1:-1:-1;;;;;21863:43:0;;;;;;;;;21823:84;;21839:10;;21851;;-1:-1:-1;;;;;21863:8:0;;;;:21;;:43;;;;;;;;;;;;;;;:8;;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;21863:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21863:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21863:43:0;21823:15;:84::i;:::-;;21795:118;21965:47;21981:15;21998:13;21965:15;:47::i;:::-;22019:12;;;;;;;;;-1:-1:-1;;;;;22019:12:0;-1:-1:-1;;;;;22019:32:0;;:34;;;;;-1:-1:-1;;;22019:34:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22019:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22019:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22067:4:0;;21470:606;-1:-1:-1;;;;;;;;;;21470:606:0:o;17738:211::-;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;-1:-1:-1;;;;;17828:29:0;;;;17819:39;;;;;;17863:14;:32;;-1:-1:-1;;;;;17863:32:0;;;-1:-1:-1;;17863:32:0;;;;;;;;17900:8;:44;;;;;;;;17738:211::o;12908:56::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12908:56:0;;;;;;;;:::o;11026:24::-;;;-1:-1:-1;;;;;11026:24:0;;:::o;13075:52::-;13120:7;13075:52;:::o;13151:49::-;13194:6;13151:49;:::o;12791:65::-;;;;;;;;;;;;;:::o;5116:108::-;5174:7;5195:6;;;;5188:14;;;;-1:-1:-1;5214:5:0;;;5116:108::o;31941:797::-;32050:4;32095:15;;:::i;:::-;32086:1;32065:18;;;:11;:18;;;;;;:22;32061:673;;;-1:-1:-1;32113:24:0;32118:18;;;:11;:18;;;;;;;;;32113:24;;:4;:24;;;;;;;32095:42;;;;;;;;;-1:-1:-1;;;;;32095:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32350:87;;-1:-1:-1;32421:16:0;;;;32377:8;;:40;;;-1:-1:-1;;;;;32377:40:0;;;;;;;;;-1:-1:-1;;;;;32377:8:0;;;;:21;;:40;;;;;;;;;;;;;;;:8;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;32377:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32377:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32377:40:0;:60;;32350:87;:149;;;;;32481:18;32442:34;32459:4;:16;;;32442:12;:16;;:34;;;;:::i;:::-;32441:58;;32350:149;32346:304;;;32535:18;;;;:11;:18;;;;;;32508:52;;32520:13;;32555:4;32508:11;:52::i;:::-;;32346:304;;;32623:10;;;;;32585:58;;;;;;;32638:1;32585:58;;;;;;;;;;;;;;;32623:10;;-1:-1:-1;;;;;32585:58:0;;;;;;;;;;;;32346:304;32662:4;32655:11;;;;32061:673;32689:21;;32704:5;;32689:21;;;;;32723:5;32716:12;;32061:673;31941:797;;;;;;:::o;5229:126::-;5287:7;5313:5;;;5330:6;;;;5323:14;;;;5349:1;5342:8;;5229:126;;;;;;:::o;35575:819::-;35657:15;;:::i;:::-;-1:-1:-1;35912:16:0;35676:19;;;:4;:19;;;;;;;;35657:38;;;;;;;;;-1:-1:-1;;;;;35657:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35961:37;;35657:38;;;;35961:37;;;;;35985:12;;35961:37;;35912:16;35961:37;35985:12;35657:38;35961:37;;;;;;;35960:38;35956:300;;;-1:-1:-1;36213:18:0;;-1:-1:-1;;;;;36188:44:0;;;;;:24;:44;;;;;;36018:1;;36188:62;;36237:12;36188:62;:48;:62;:::i;:::-;36166:18;;-1:-1:-1;;;;;36141:44:0;;;;;:24;:44;;;;;:109;35956:300;36287:18;;36275:10;;;;;36307:17;;;;;36326:15;;;;;36357:14;;;;;36265:124;;;;;;;;;;;;;;;;;;;;;;;36287:18;36265:124;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36265:124:0;;;;36275:10;;-1:-1:-1;;;;;;;;;;;36265:124:0;;;;;;;;;35575:819;;;;:::o;30403:1257::-;30569:8;;:34;;;;;;;;;;;;;;30523:7;;;;;;;;-1:-1:-1;;;;;30569:8:0;;:24;;:34;;;;;30523:7;;30569:34;;;;;;;30523:7;30569:8;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;30569:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30634:8:0;;:34;;;-1:-1:-1;;;;;30634:34:0;;-1:-1:-1;;;;;;;;;;;30634:34:0;;;;;;-1:-1:-1;;;;;30634:8:0;;;;-1:-1:-1;30634:21:0;;-1:-1:-1;30634:34:0;;;;;;;;;;;;;;;:8;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;30634:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30634:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30634:34:0;30722:52;;;;30739:4;30722:52;;30634:34;30722:52;;;;;;;-1:-1:-1;;;;;30722:52:0;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;30722:52:0;;;;;;;;30712:63;;30634:34;;-1:-1:-1;30722:52:0;;;;30712:63;;;;30722:52;30712:63;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;30712:63:0;;;;;;;;;;;;;-1:-1:-1;30801:19:0;;;:4;:19;;;;;;;;30888:14;;;;30712:63;;-1:-1:-1;30801:19:0;-1:-1:-1;;30888:14:0;;:23;;-1:-1:-1;30879:33:0;;-1:-1:-1;30879:33:0;;;;;30955:18;;;;:11;:18;;;;;:34;;;30994;;-1:-1:-1;;30994:34:0;-1:-1:-1;;;;;30994:34:0;;;;;-1:-1:-1;31033:10:0;;:18;;;31056:13;;;:24;;;31085:17;;;:32;;;31122:14;;;:26;;;31212:57;31056:24;31085:32;31122:26;31212:22;:57::i;:::-;31193:16;;;:76;31336:55;31357:8;31367:12;31381:9;31336:20;:55::i;:::-;31312:21;;;:79;;;31415:12;31396:16;;;:31;31471:16;:18;;;;;;;;;31520;;31508:10;;;;31540:17;;;;31559:13;;;;31574:14;;;;31590:16;;;;31608:21;;31501:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31520:18:0;;;;31508:10;;31501:129;;;;;;;;;-1:-1:-1;31642:13:0;;30403:1257;-1:-1:-1;;;;;;30403:1257:0:o;40556:746::-;40643:15;;:::i;:::-;-1:-1:-1;40991:22:0;40661:19;;;:4;:19;;;;;;;;40643:37;;;;;;;;;-1:-1:-1;;;;;40643:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40751:28;;;:8;:28;;;;;;40643:37;;40991:22;40751:28;:42;40747:106;;40828:18;;-1:-1:-1;;;;;40819:28:0;;;;;;;:8;:28;;;;;;;;-1:-1:-1;40747:106:0;-1:-1:-1;;;;;40861:29:0;;;;;;:70;;-1:-1:-1;40913:18:0;;-1:-1:-1;;;;;40894:37:0;;;;;;;40861:70;40857:441;;;40948:18;;-1:-1:-1;;;;;40939:28:0;;;;;;;:8;:28;;;;;;;;:46;;-1:-1:-1;;40939:46:0;;;;;;;41042:8;;:40;;-1:-1:-1;;;;;41042:40:0;;;;;;;;;41016:91;;13120:7;;41016:67;;41042:8;;;;;:21;;:40;;;;;40939:28;;41042:40;;;;;;;;;:8;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;41042:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41042:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41042:40:0;41016:21;;;;;:67;:25;:67;:::i;:::-;:71;:91;:71;:91;:::i;:::-;-1:-1:-1;;;;;41152:36:0;;;;;;:19;:36;;;;;;40991:116;;-1:-1:-1;41152:56:0;;40991:116;41152:56;:40;:56;:::i;:::-;-1:-1:-1;;;;;41113:36:0;;;;;;:19;:36;;;;;;;;;:95;;;;41259:10;;;;41219:73;;;;;41287:1;41219:73;;;;;;;;;;;;;;;41259:10;;41219:73;;;;;;;;;;40556:746;;;;:::o;33388:1997::-;33496:4;33527:19;;;:4;:19;;;;;;;;33571:13;;;;;;33612:16;;;;;33661:21;;;;;;33715:14;;;:21;;-1:-1:-1;;33715:21:0;33732:4;33715:21;;;33741:17;;;;33763:20;;;;33788:25;;;;33864:4;33890:14;;33906:16;;;;-1:-1:-1;33963:8:0;:40;;-1:-1:-1;;;;;33963:40:0;;;-1:-1:-1;33963:40:0;;;;;33527:19;;33571:13;;33612:16;;33661:21;;33496:4;;;;-1:-1:-1;;;;;33864:4:0;;;;:25;;33890:14;;;33906:16;33924:80;;33963:8;;;:21;;:40;;;;;33527:19;;33963:40;;;;;;33496:4;33963:8;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;33963:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33963:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33963:40:0;33924:8;;:34;;;-1:-1:-1;;;;;33924:34:0;;-1:-1:-1;;;;;;;;;;;33924:34:0;;;;;;-1:-1:-1;;;;;33924:8:0;;;;:21;;:34;;;;;33963:40;;33924:34;;;;;;;;:8;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;33924:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33924:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33924:34:0;;:80;:38;:80;:::i;:::-;33864:146;;;-1:-1:-1;;;33864:146:0;;;;;;-1:-1:-1;;;;;33864:146:0;;;;;;;;;;;;;;;;;;34006:3;33864:146;;;;;;;;;;;;;;;;;;;-1:-1:-1;33864:146:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;33864:146:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33864:146:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33864:146:0;33846:15;;;:164;;;34021:20;34017:478;;;34112:39;34126:13;34141:9;34112:13;:39::i;:::-;34017:478;;;34185:4;:17;;;34167:4;:15;;;:35;34163:332;;;34284:50;34295:13;34310:9;34321:12;34284:10;:50::i;34163:332::-;34435:54;34445:13;34460:9;34471:17;34435:9;:54::i;:::-;34536:16;:18;;-1:-1:-1;;34536:18:0;;;34605:8;;:46;;;;;;;;-1:-1:-1;;;;;34605:8:0;;;;:44;;:46;;;;;34536:16;;34605:46;;;;;;;;34536:16;34605:8;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;34605:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34605:46:0;;;;34751:31;:29;:31::i;:::-;34721:61;-1:-1:-1;34900:24:0;;;34896:195;;34953:8;;:49;;;-1:-1:-1;;;;;34953:49:0;;;;;;;;;-1:-1:-1;;;;;34953:8:0;;;;:21;;:49;;;;;;;;;;;;;;;:8;;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;34953:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34953:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34953:49:0;;-1:-1:-1;34896:195:0;;;35033:8;;:52;;;-1:-1:-1;;;;;35033:52:0;;;;;;;;;-1:-1:-1;;;;;35033:8:0;;;;:21;;:52;;;;;;;;;;;;;;;:8;;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;35033:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35033:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35033:52:0;;-1:-1:-1;34896:195:0;35117:55;13068:3;35118:35;:19;35142:10;35118:35;:23;:35;:::i;35117:55::-;-1:-1:-1;;;;;35217:35:0;;;;;;:19;:35;;;;;;35095:77;;-1:-1:-1;35217:60:0;;35095:77;35217:60;:39;:60;:::i;:::-;-1:-1:-1;;;;;35179:35:0;;;;;;:19;:35;;;;;;;;;:98;;;;35326:10;;;;;35287:77;;;;;35359:1;35287:77;;;;;;;;;;;;;;;;35326:10;;35287:77;;;;;;;;;;-1:-1:-1;35376:4:0;;33388:1997;-1:-1:-1;;;;;;;;;33388:1997:0:o;4679:166::-;4737:7;;4755:6;;4751:32;;;4776:1;4769:8;;;;4751:32;-1:-1:-1;4799:5:0;;;4803:1;4799;:5;4816;;;;;;;;:10;4809:18;;;4850:261;4908:7;4995:9;5011:1;5007;:5;;;;;;;;;4850:261;-1:-1:-1;;;;4850:261:0:o;36589:1051::-;36686:15;;:::i;:::-;-1:-1:-1;37157:16:0;36705:19;;;:4;:19;;;;;;;;36686:38;;;;;;;;;-1:-1:-1;;;;;36686:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36787:8;;:45;;;;;;;;;;;;;36686:38;;37157:16;36787:8;;;;;:31;;:45;;;;;37157:16;;36787:45;;;;;;;;37157:16;36787:8;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;36787:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36787:45:0;;;;36915:26;36932:8;36915:12;:16;;:26;;;;:::i;:::-;37203:18;;:37;;36900:41;;-1:-1:-1;37176:1:0;;-1:-1:-1;;;;;;37203:23:0;;:37;;;;;36900:41;;37203:18;:37;:18;:37;36900:41;37203:23;:37;;;;;;;37202:38;37198:297;;;-1:-1:-1;37452:18:0;;-1:-1:-1;;;;;37427:44:0;;;;;:24;:44;;;;;;37260:1;;37427:62;;37476:12;37427:62;:48;:62;:::i;:::-;37405:18;;-1:-1:-1;;;;;37380:44:0;;;;;:24;:44;;;;;:109;37198:297;37526:4;:18;;;-1:-1:-1;;;;;37504:131:0;37514:4;:10;;;37504:131;;;-1:-1:-1;;;;;;;;;;;37546:4:0;:17;;;37565:4;:15;;;37582:8;37592:4;:14;;;37608:12;37622:1;37625:9;37504:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36589:1051;;;;;:::o;37859:1360::-;37959:15;;:::i;:::-;-1:-1:-1;38137:16:0;37978:19;;;:4;:19;;;;;;;;37959:38;;;;;;;;;-1:-1:-1;;;;;37959:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38070:8;;:60;;;;;;;;;;;;;;;;;;;37959:38;;38137:16;38070:8;;;;;:32;;:60;;;;;38137:16;;38070:60;;;;;;;;38137:16;38070:8;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;38070:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;38267:18:0;;:26;;-1:-1:-1;;;;;38267:23:0;;;;-1:-1:-1;38267:18:0;;-1:-1:-1;38291:1:0;;38267:18;:26;:18;:26;38291:1;38267:23;:18;:26;;;;;;38266:27;38262:277;;;-1:-1:-1;38507:18:0;;-1:-1:-1;;;;;38482:44:0;;;;;:24;:44;;;;;;-1:-1:-1;;38313:2:0;38482:51;;38531:1;38482:51;:48;:51;:::i;:::-;38460:18;;-1:-1:-1;;;;;38435:44:0;;;;;:24;:44;;;;;:98;38262:277;38633:1;38614:16;:20;38610:406;;;38647:10;;;38671:18;;38647:61;;;;;;-1:-1:-1;;;;;38647:61:0;;;;;;;;;;;;;;;;;:10;;;:23;;:61;;;;;;;;;;;;;;:10;;:61;;;5:2:-1;;;;30:1;27;20:12;5:2;38647:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38647:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38647:61:0;38646:62;38642:369;;;-1:-1:-1;38963:18:0;;-1:-1:-1;;;;;38933:49:0;;;;;:29;:49;;;;;;-1:-1:-1;;38729:2:0;38933:71;;38987:16;38933:71;:53;:71;:::i;:::-;38911:18;;-1:-1:-1;;;;;38881:49:0;;;;;:29;:49;;;;;:123;38642:369;39047:4;:18;;;-1:-1:-1;;;;;39025:135:0;39035:4;:10;;;39025:135;;;-1:-1:-1;;;;;;;;;;;39067:4:0;:17;;;39086:4;:15;;;39103:8;39113:4;:14;;;39129:1;39132:16;39150:9;39025:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39165:49;39190:13;39205:8;39165:24;:49::i;:::-;;37859:1360;;;;;:::o;39412:981::-;39505:4;39624:23;39762:15;;:::i;:::-;39650:8;;:40;;;-1:-1:-1;;;;;39650:40:0;;;;;;;;;39806:27;;-1:-1:-1;;;;;39650:8:0;;:21;;:40;;;;;;;;;;;;;;39806:27;39650:8;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;39650:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39650:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39650:40:0;39718:8;;:36;;;-1:-1:-1;;;;;39718:36:0;;;;;;;;;39650:40;;-1:-1:-1;;;;;;39718:8:0;;;;:21;;:36;;;;;39650:40;;39718:36;;;;;;;;:8;;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;39718:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39718:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39718:36:0;39699:55;;39695:678;;39781:19;;;;:4;:19;;;;;;;;39762:38;;;;;;;;;-1:-1:-1;;;;;39762:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39836:4;;39870:14;;39886;;39836:75;;;;;39870:14;;;39836:75;;;;;;;39886:14;;;39836:75;;;;;;;;;;;;39762:38;;-1:-1:-1;39836:4:0;;;;;:33;;:75;;;;;39781:19;39836:75;;;;;;;;;;:4;:75;;;5:2:-1;;;;30:1;27;20:12;5:2;39836:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39836:75:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39836:75:0;;-1:-1:-1;39945:1:0;39923:23;;:65;;;;;39969:19;39950:15;:38;;39923:65;39919:449;;;40035:8;;:68;;;;;;;;;;;;;;-1:-1:-1;;;;;40035:8:0;;;;:47;;:68;;;;;:8;;:68;;;;;;;;:8;;:68;;;5:2:-1;;;;30:1;27;20:12;5:2;40035:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40035:68:0;;;;40152:4;:18;;;-1:-1:-1;;;;;40117:75:0;40140:4;:10;;;40117:75;;;;40172:19;40117:75;;;;;;;;;;;;;;;;;;40240:14;;40264:8;;:38;;;-1:-1:-1;;;;;40264:38:0;;;;;;;;;-1:-1:-1;;;;;40240:14:0;;;;40264:8;;;;:21;;:38;;;;;;;;;;;;;;;-1:-1:-1;40264:8:0;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;40264:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40264:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40264:38:0;40240:92;;40310:19;;40240:92;;;;40310:19;40240:92;40264:38;40240:92;;;;;;40239:93;40235:127;;;40349:5;40342:12;;;;40235:127;40384:4;40377:11;;39412:981;;;;;;;;:::o;11858:29447::-;;;;;;;;;;;-1:-1:-1;;;;;11858:29447:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://860620f36b26c0e5c6e555a5ea5f9d72b7387e05827e56bedcb52866d15baa2a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,098.44 | 0.0396 | $83.18 |
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.