ETH Price: $2,816.49 (-6.28%)

Contract

0xc42Af557861a03AA7CDE7a56bA5018e1d3c195Cd
 

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BlastTicTac

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : BlastTicTacToe.sol
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";

enum YieldMode {
    AUTOMATIC,
    VOID, 
    CLAIMABLE
}

enum GasMode {
    VOID,
    CLAIMABLE 
}

interface IBlast{
    // configure
    function configureContract(address contractAddress, YieldMode _yield, GasMode gasMode, address governor) external;
    function configure(YieldMode _yield, GasMode gasMode, address governor) external;

    // base configuration options
    function configureClaimableYield() external;
    function configureClaimableYieldOnBehalf(address contractAddress) external;
    function configureAutomaticYield() external;
    function configureAutomaticYieldOnBehalf(address contractAddress) external;
    function configureVoidYield() external;
    function configureVoidYieldOnBehalf(address contractAddress) external;
    function configureClaimableGas() external;
    function configureClaimableGasOnBehalf(address contractAddress) external;
    function configureVoidGas() external;
    function configureVoidGasOnBehalf(address contractAddress) external;
    function configureGovernor(address _governor) external;
    function configureGovernorOnBehalf(address _newGovernor, address contractAddress) external;

    // claim yield
    function claimYield(address contractAddress, address recipientOfYield, uint256 amount) external returns (uint256);
    function claimAllYield(address contractAddress, address recipientOfYield) external returns (uint256);

    // claim gas
    function claimAllGas(address contractAddress, address recipientOfGas) external returns (uint256);
    function claimGasAtMinClaimRate(address contractAddress, address recipientOfGas, uint256 minClaimRateBips) external returns (uint256);
    function claimMaxGas(address contractAddress, address recipientOfGas) external returns (uint256);
    function claimGas(address contractAddress, address recipientOfGas, uint256 gasToClaim, uint256 gasSecondsToConsume) external returns (uint256);

    // read functions
    function readClaimableYield(address contractAddress) external view returns (uint256);
    function readYieldConfiguration(address contractAddress) external view returns (uint8);
    function readGasParams(address contractAddress) external view returns (uint256 etherSeconds, uint256 etherBalance, uint256 lastUpdated, GasMode);
}
interface IBlastPoints {
  function configurePointsOperator(address operator) external;
  function configurePointsOperatorOnBehalf(address contractAddress, address operator) external;
}

contract BlastTicTac is Ownable{
    // Define the game board
    IBlast public constant BLAST = IBlast(0x4300000000000000000000000000000000000002);
    IBlastPoints public constant BLASTPoints = IBlastPoints(0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800);

    uint8 constant BOARD_SIZE = 3;
    mapping(uint256 => uint8[BOARD_SIZE][BOARD_SIZE]) public gameBoards;
    uint256 public currentRoundId=0;
    uint256 public currentMoveId=0;
    
    
    // Mapping from game ID to game data
    mapping(uint256 => Game) public games;
    // maping from gameid => (address-> (chosenside->amount))
    mapping(uint256 => mapping(address => mapping(uint8=>uint256))) public stakeAmount;
    // mapping(uint256 => mapping(address => uint256)) public winningAmount;
    mapping(uint256 => mapping(address => bool)) public winningClaimed;
    mapping(uint256 => mapping(uint256 => mapping(address => bool))) public voteCasted;
    //roundid->moveid->weightmap
    mapping(uint256 => mapping(uint256 => uint256[BOARD_SIZE][BOARD_SIZE])) public gameVoteWeight;
    //roundid->addr->side->totalweight;
    mapping(uint256 => mapping(address => mapping(uint8=> uint256))) public playerVoteWeightSum;
    mapping(uint256 =>mapping(uint8=>uint256)) public totalVoteWeightSum;
    // Events to emit when game state changes
    event VoteMade(uint256 indexed gameId, address player, uint8 row, uint8 col);
    event GameOver(uint256 indexed gameId, address winner, uint256 totalStake);

    uint256 public minimumStake=0.001 ether;
    //countdown begins 60 second from the first vote . after everymove first vote time resets to 0
    uint256 public defaultMoveInterval = 10 seconds;
    uint256 public betAcceptMaxMove =3;
    uint256 feeRate=100; //100 = 1%
    uint8 defaultBlackOverrideProbability=40;
    uint8 defaultWhiteOverrideProbability=50;
    uint8 maxBlackOverrideProbability=60;
    uint8 maxWhiteOverrideProbability=70;
    uint8 boostAmount=5;
    uint256 boostFee=0.001 ether;

    bool public bettingOpens=false;


    uint256 public unclaimedFee=0;
    uint256 public randomnessBlock;
      // Struct to manage game data
    struct Game {
        uint256 stakeBlack;
        uint256 stakeWhite;
        uint256 gameStartTime;
        uint256 firstVoteTime;
        uint256 totalMoves;
        uint8 occupiedPosition;
        uint256 moveInterval;
        uint8 blackOverrideProbability;
        uint8 whiteOverrideProbability;
        Player winningSide;
    }
    enum Player { None, Black, White }


    constructor(){

        BLAST.configureClaimableYield();
        BLAST.configureClaimableGas();
        BLASTPoints.configurePointsOperator(msg.sender);
        games[currentRoundId] = Game({
            stakeBlack: 0,
            stakeWhite: 0,
            gameStartTime: block.timestamp,
            firstVoteTime: 0,
            totalMoves: 0,
            occupiedPosition:0,
            moveInterval:defaultMoveInterval,
            winningSide: Player.None,
            blackOverrideProbability:defaultBlackOverrideProbability,
            whiteOverrideProbability:defaultWhiteOverrideProbability
        });
    }
    function claimYield(address recipient, uint256 amount) external onlyOwner{
	  //This function is public meaning anyone can claim the yield
		BLAST.claimYield(address(this), recipient, amount);
  }

	function claimAllYield(address recipient) external onlyOwner{
	  //This function is public meaning anyone can claim the yield
        BLAST.claimAllYield(address(this), recipient);
  }
    function claimMyContractsGas() external onlyOwner{
        BLAST.claimAllGas(address(this), msg.sender);
    }

    //owner will only call this function when we are migrating to a new contract
    //fund is immediately available for claim after each round
    function withdraw() public onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function editMinStake(uint256 newMinStake) external onlyOwner{
        minimumStake=newMinStake;
    }
    function editMoveInterval(uint256 newMoveInterval) external onlyOwner{
        defaultMoveInterval=newMoveInterval;
    }
    function editBetAcceptMaxMove(uint256 newBetAcceptMaxMove) external onlyOwner{
        betAcceptMaxMove=newBetAcceptMaxMove;
    }
    function editBettingOpens(bool opens) external onlyOwner{
        bettingOpens=opens;
    }

    function placeBet(uint8 side,uint256 roundId) external payable {
        //also need to check if round ends, if round

        //TODO check whole number
        _doEndCurrentMove();
        require(bettingOpens,"Betting is not open");
        require(roundId==currentRoundId,"Round Over");
        require(side == uint8(Player.Black) || side == uint8(Player.White), "Invalid side.");
        require(msg.value >= minimumStake, "Bet amount greater than minimum.");
        require(games[currentRoundId].occupiedPosition<=betAcceptMaxMove,"Too late to join");

        if (side == uint8(Player.Black)) {
            games[currentRoundId].stakeBlack += msg.value;
        } else if (side == uint8(Player.White)) {
            games[currentRoundId].stakeWhite += msg.value;
        }
        stakeAmount[currentRoundId][msg.sender][side] += msg.value;
    }

      function voteMove(uint8 row, uint8 col, uint256 roundId,uint256 moveId) external {
    
        //check round end
        //TODO: user can only vote once per move 
        
        _doEndCurrentMove();
        if (games[currentRoundId].firstVoteTime == 0) {
            games[currentRoundId].firstVoteTime = block.timestamp;
        } 
        require(row < BOARD_SIZE && col < BOARD_SIZE, "Invalid board position.");
        require(gameBoards[currentRoundId][row][col] != getCurrentSide(), "Position already taken by own piece.");
        // require(gameBoards[currentRoundId][row][col] == 0, "Position already taken.");//can be changed
        require(roundId==currentRoundId,"Round Not Current");
        require(moveId==currentMoveId,"Move Not Current");
        //check if user have stake on current side
        require(stakeAmount[roundId][msg.sender][getCurrentSide() ]>0,"You need active stake on this side to vote");
        require(!voteCasted[roundId][moveId][msg.sender],"You Already Voted");
        voteCasted[roundId][moveId][msg.sender]=true;
        gameVoteWeight[roundId][moveId][row][col]+=stakeAmount[currentRoundId][msg.sender][getCurrentSide() ];
        //TODO: can add multiplier here for early moves
        playerVoteWeightSum[roundId][msg.sender][getCurrentSide()]+=stakeAmount[currentRoundId][msg.sender][getCurrentSide() ];
        totalVoteWeightSum[roundId][getCurrentSide()]+=stakeAmount[currentRoundId][msg.sender][getCurrentSide() ];
        
        randomnessBlock=block.number+1;
    }

    function getCurrentSide() public view returns (uint8) {
        //1 black 2 white
        return uint8(currentMoveId % 2 +1);
    }   
    function getCurrentHighestVotedMove() public view returns(uint8,uint8){
        uint8 highestRow;
        uint8 highestCol;
        uint256 highestWeight = 0;

        for (uint8 row = 0; row < BOARD_SIZE; row++) {
            for (uint8 col = 0; col < BOARD_SIZE; col++) {
                uint256 weight = gameVoteWeight[currentRoundId][currentMoveId][row][col];
                if (weight > highestWeight) {
                    highestWeight = weight;
                    highestRow = row;
                    highestCol = col;
                }
            }
        }

        return (highestRow, highestCol);

    }
    function checkCurrentMoveWin(uint8 row, uint8 col) internal view returns (bool) {
        uint8[BOARD_SIZE][BOARD_SIZE] memory board = gameBoards[currentRoundId];
        uint8 count;
        uint8 side=getCurrentSide();
        board[row][col]=side;

        // Check row
        count = 0;
        for (uint8 i = 0; i < BOARD_SIZE; i++) {
            if (board[row][i] == uint8(side)) count++;
        }
        if (count == BOARD_SIZE) return true;

        // Check column
        count = 0;
        for (uint8 i = 0; i < BOARD_SIZE; i++) {
            if (board[i][col] == uint8(side)) count++;
        }
        if (count == BOARD_SIZE) return true;

        // Check diagonal
        if (row == col) {
            count = 0;
            for (uint8 i = 0; i < BOARD_SIZE; i++) {
                if (board[i][i] == uint8(side)) count++;
            }
            if (count == BOARD_SIZE) return true;
        }

        // Check anti-diagonal
        if (row + col == BOARD_SIZE - 1) {
            count = 0;
            for (uint8 i = 0; i < BOARD_SIZE; i++) {
                if (board[i][BOARD_SIZE - 1 - i] == uint8(side)) count++;
            }
            if (count == BOARD_SIZE) return true;
        }

        return false;
    }
    function isCurrentMoveEnd() public view returns (bool){
        if(games[currentRoundId].firstVoteTime>0 && (block.timestamp - games[currentRoundId].firstVoteTime >= games[currentRoundId].moveInterval)){
            return true;
        }
        return false;
    }
    function isCurrentRoundEnd() public view returns (bool){
        if(!isCurrentMoveEnd()){
            return false;
        }
        //get the highest voted move
         (uint8 row, uint8 col) = getCurrentHighestVotedMove();
         return checkCurrentMoveWin(row,col);
        //check tic tac toe
    }
    function RandomnessBlockAvailable() public view returns (bool){
        return block.number > randomnessBlock && isCurrentMoveEnd();
    }
    function moveSuccess() public view returns (bool){
        require(RandomnessBlockAvailable(), "Block Not Available");
        bytes32 blockHash = blockhash(randomnessBlock);
        require(blockHash != bytes32(0), "Block hash not available");

        uint256 randomValue = uint256(blockHash);
        if(getCurrentSide()==1){
            return (randomValue % 100) < games[currentRoundId].blackOverrideProbability;
        }
        else{
            return (randomValue % 100) < games[currentRoundId].whiteOverrideProbability;
        }

        
    }
    
    function _doEndCurrentMove() internal{

        if(isCurrentMoveEnd()){

            (uint8 row, uint8 col) = getCurrentHighestVotedMove();
             //if position occupied, check if randomness block has passed and decide if override
            if(gameBoards[currentRoundId][row][col]>0){
                require(RandomnessBlockAvailable(),"Waiting for dice roll, please wait 1 block");
                if(moveSuccess()){
                    gameBoards[currentRoundId][row][col]=getCurrentSide();
                } 
            }
            else{
                gameBoards[currentRoundId][row][col]=getCurrentSide();
                games[currentRoundId].occupiedPosition+=1;
            }
            
           
            games[currentRoundId].totalMoves+=1;

            if(isCurrentRoundEnd()){
                //when round end, winner must be current side's player
                games[currentRoundId].winningSide=Player(getCurrentSide());
                _computeReward(currentRoundId);
                _startNewRound();
                
            }
            else{
                currentMoveId+=1;
                games[currentRoundId].firstVoteTime=0;
            }
        }
       

        //get the highest voted move and make move on board

        //check if the round ended
        //TODO: problem next move not decided yet this affects winning?
       
    }


    function _startNewRound() internal{

        //start new round
        currentRoundId+=1;
        currentMoveId=0;
        games[currentRoundId] = Game({
            stakeBlack: 0,
            stakeWhite: 0,
            gameStartTime: block.timestamp,
            firstVoteTime: 0,
            totalMoves: 0,
            occupiedPosition:0,
            moveInterval:defaultMoveInterval,
            winningSide: Player.None,
            blackOverrideProbability:defaultBlackOverrideProbability,
            whiteOverrideProbability:defaultWhiteOverrideProbability
        });
  

    }
    function _computeReward(uint256 roundId) internal{
        uint256 feeAmount=(games[roundId].stakeBlack)*feeRate/10000+(games[roundId].stakeWhite)*feeRate/10000;
        // Update unclaimedFee
        unclaimedFee += feeAmount;
    

    }
    //optional function can delete?
    function rewardForRound(uint256 roundId, address user) public view returns(uint256){
        require(currentRoundId>roundId,"You check reward for previous round after a new round starts");
        Game storage game = games[roundId];
        uint256 totalWinnerStake = game.winningSide == Player.Black  ? game.stakeBlack : game.stakeWhite;
        uint256 totalLoserStake = game.winningSide == Player.Black  ?   game.stakeWhite : game.stakeBlack;
        
            // maping from gameid => (address-> (chosenside->amount))

        uint256 myWinningStake= stakeAmount[roundId][user][uint8(game.winningSide)];
        // uint256 totalStake= game.stakeBlack+game.stakeWhite;
        // uint256 totalWinningBasic= totalStake * myWinningStake/totalWinnerStake* (10000-feeRate)/10000;

        uint256 myvoteWeight = playerVoteWeightSum[roundId][user][uint8(game.winningSide)];
        uint256 totalVoteWeight = totalVoteWeightSum[roundId][uint8(game.winningSide)];


        uint256 totalWinningAdvanced= myWinningStake* (10000-feeRate)/10000
        + totalLoserStake /2 *myWinningStake/totalWinnerStake* (10000-feeRate)/10000 
        +totalLoserStake /2 *myvoteWeight/totalVoteWeight* (10000-feeRate)/10000 
        ;
        
    

        return totalWinningAdvanced;
    }
    function  claim(uint256[] calldata rounds) external{
        _doEndCurrentMove();
        uint256 totalReward = 0;
        for (uint256 i = 0; i < rounds.length; i++) {
            require(!winningClaimed[rounds[i]][msg.sender],"Winning Already Claimed");
            // require(winningAmount[rounds[i]][msg.sender]>0,"Winning Must be Greater Than Zero");
            require(rounds[i]<currentRoundId,"Round must be over");
            totalReward+=rewardForRound(rounds[i],msg.sender);//winningAmount[rounds[i]][msg.sender];
            winningClaimed[rounds[i]][msg.sender]=true;
            
        }
        payable(msg.sender).transfer(totalReward);
    }
    function claimFee() external onlyOwner{
        payable(msg.sender).transfer(unclaimedFee);
        unclaimedFee=0;
    }

    function viewBoard(uint256 currid) public view returns(string memory){


        uint8[BOARD_SIZE][BOARD_SIZE] memory board=gameBoards[currid];
        bytes memory boardString = new bytes(3 * 3); // Each number + comma
        uint256 index = 0;

        for (uint8 i = 0; i < 3; i++) {
            for (uint8 j = 0; j < 3; j++) {
                uint8 value = board[i][j];
                boardString[index++] = bytes1(uint8(48 + value)); // Convert number to ASCII
            }
        }

        return string(boardString);

    }
   
    function viewVoteWeight(uint256 roundId, uint256 moveId) public view returns (uint256[3][3] memory) {
        return gameVoteWeight[roundId][moveId];
    }

    function editProbabilitiesAndFees(
        uint8 _defaultBlackOverrideProbability,
        uint8 _defaultWhiteOverrideProbability,
        uint8 _maxBlackOverrideProbability,
        uint8 _maxWhiteOverrideProbability,
        uint8 _boostAmount,
        uint256 _boostFee
    ) external onlyOwner {
        defaultBlackOverrideProbability = _defaultBlackOverrideProbability;
        defaultWhiteOverrideProbability = _defaultWhiteOverrideProbability;
        maxBlackOverrideProbability = _maxBlackOverrideProbability;
        maxWhiteOverrideProbability = _maxWhiteOverrideProbability;
        boostAmount = _boostAmount;
        boostFee = _boostFee;
    }

    function boostProbability(uint256 roundId, uint8 side) external payable {
        require(bettingOpens,"Betting is not open");
        _doEndCurrentMove();
        require(msg.value == boostFee, "Incorrect boost fee");
        require(roundId==currentRoundId,"Round Over");
        require(side==1||side==2,"Invalid side");
        Game storage game = games[roundId];
        if (side == 1) {
            require(game.blackOverrideProbability + boostAmount<maxBlackOverrideProbability,"exceeds max");
            game.blackOverrideProbability += boostAmount;
        } else if (side == 2) {
            require(game.whiteOverrideProbability + boostAmount<maxWhiteOverrideProbability,"exceeds max");
            game.whiteOverrideProbability += boostAmount;
        } 

        // Add boost fee to unclaimed fees
        unclaimedFee += msg.value;
    }
  
   



  
    

   
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalStake","type":"uint256"}],"name":"GameOver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8","name":"row","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"col","type":"uint8"}],"name":"VoteMade","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLASTPoints","outputs":[{"internalType":"contract IBlastPoints","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RandomnessBlockAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"betAcceptMaxMove","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bettingOpens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"},{"internalType":"uint8","name":"side","type":"uint8"}],"name":"boostProbability","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"rounds","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"claimAllYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimMyContractsGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentMoveId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRoundId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultMoveInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBetAcceptMaxMove","type":"uint256"}],"name":"editBetAcceptMaxMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"opens","type":"bool"}],"name":"editBettingOpens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinStake","type":"uint256"}],"name":"editMinStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMoveInterval","type":"uint256"}],"name":"editMoveInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_defaultBlackOverrideProbability","type":"uint8"},{"internalType":"uint8","name":"_defaultWhiteOverrideProbability","type":"uint8"},{"internalType":"uint8","name":"_maxBlackOverrideProbability","type":"uint8"},{"internalType":"uint8","name":"_maxWhiteOverrideProbability","type":"uint8"},{"internalType":"uint8","name":"_boostAmount","type":"uint8"},{"internalType":"uint256","name":"_boostFee","type":"uint256"}],"name":"editProbabilitiesAndFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"gameBoards","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"gameVoteWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"uint256","name":"stakeBlack","type":"uint256"},{"internalType":"uint256","name":"stakeWhite","type":"uint256"},{"internalType":"uint256","name":"gameStartTime","type":"uint256"},{"internalType":"uint256","name":"firstVoteTime","type":"uint256"},{"internalType":"uint256","name":"totalMoves","type":"uint256"},{"internalType":"uint8","name":"occupiedPosition","type":"uint8"},{"internalType":"uint256","name":"moveInterval","type":"uint256"},{"internalType":"uint8","name":"blackOverrideProbability","type":"uint8"},{"internalType":"uint8","name":"whiteOverrideProbability","type":"uint8"},{"internalType":"enum BlastTicTac.Player","name":"winningSide","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentHighestVotedMove","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSide","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCurrentMoveEnd","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCurrentRoundEnd","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moveSuccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"side","type":"uint8"},{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"placeBet","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint8","name":"","type":"uint8"}],"name":"playerVoteWeightSum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomnessBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"rewardForRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint8","name":"","type":"uint8"}],"name":"stakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint8","name":"","type":"uint8"}],"name":"totalVoteWeightSum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclaimedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"currid","type":"uint256"}],"name":"viewBoard","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"},{"internalType":"uint256","name":"moveId","type":"uint256"}],"name":"viewVoteWeight","outputs":[{"internalType":"uint256[3][3]","name":"","type":"uint256[3][3]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"voteCasted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"row","type":"uint8"},{"internalType":"uint8","name":"col","type":"uint8"},{"internalType":"uint256","name":"roundId","type":"uint256"},{"internalType":"uint256","name":"moveId","type":"uint256"}],"name":"voteMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"winningClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600255600060035566038d7ea4c68000600b55600a600c556003600d556064600e556028600f60006101000a81548160ff021916908360ff1602179055506032600f60016101000a81548160ff021916908360ff160217905550603c600f60026101000a81548160ff021916908360ff1602179055506046600f60036101000a81548160ff021916908360ff1602179055506005600f60046101000a81548160ff021916908360ff16021790555066038d7ea4c680006010556000601160006101000a81548160ff0219169083151502179055506000601255348015620000ec57600080fd5b506200010d62000101620003f860201b60201c565b6200040060201b60201c565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663f098767a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200016a57600080fd5b505af11580156200017f573d6000803e3d6000fd5b5050505073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620001e057600080fd5b505af1158015620001f5573d6000803e3d6000fd5b50505050732536fe9ab3f511540f2f9e2ec2a805005c3dd80073ffffffffffffffffffffffffffffffffffffffff166336b91f2b336040518263ffffffff1660e01b815260040162000248919062000509565b600060405180830381600087803b1580156200026357600080fd5b505af115801562000278573d6000803e3d6000fd5b5050505060405180610140016040528060008152602001600081526020014281526020016000815260200160008152602001600060ff168152602001600c548152602001600f60009054906101000a900460ff1660ff168152602001600f60019054906101000a900460ff1660ff1681526020016000600281111562000303576200030262000526565b5b815250600460006002548152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff021916908360ff16021790555060c0820151816006015560e08201518160070160006101000a81548160ff021916908360ff1602179055506101008201518160070160016101000a81548160ff021916908360ff1602179055506101208201518160070160026101000a81548160ff02191690836002811115620003ea57620003e962000526565b5b021790555090505062000555565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004f182620004c4565b9050919050565b6200050381620004e4565b82525050565b6000602082019050620005206000830184620004f8565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b614a8f80620005656000396000f3fe6080604052600436106102675760003560e01c80638b66607311610144578063c4e31a5a116100b6578063dcb3b30e1161007a578063dcb3b30e1461092d578063e4d43ec114610949578063ec5ffac214610974578063f2fde38b1461099f578063f42787da146109c8578063fdb001c0146109f357610267565b8063c4e31a5a14610846578063cc390f2914610871578063cc5de87e146108ae578063dc14d3d3146108d9578063dc1fb8001461090457610267565b806399d32fc41161010857806399d32fc4146107365780639cabd1561461074d5780639cbe5efd1461078a578063a0e6fbbd146107b5578063b983c696146107e0578063c2d94aec1461081d57610267565b80638b666073146106705780638da5cb5b1461068c57806391894930146106b7578063950dcdef146106e257806397d757761461070b57610267565b806335c34696116101dd5780636ba4c138116101a15780636ba4c138146105885780636dcb1d41146105b15780636ecb134e146105da578063715018a61461060557806373c73db31461061c57806377d5d2dc1461065957610267565b806335c34696146104a357806338bc7abe146104e05780633ccfd60b1461050b57806344ad7ef6146105225780635b4e1ba51461055f57610267565b8063117a5b901161022f578063117a5b901461036657806315174013146103ac5780631869ebda146103e9578063281df9a0146104125780632893874b1461043b5780632c9cfcfc1461047857610267565b8063039fd05f1461026c5780630551ea67146102955780630996ccc3146102c15780630b6ee9cd146102ec5780630c59b8ee14610329575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906132c3565b610a1e565b005b3480156102a157600080fd5b506102aa610a30565b6040516102b892919061330c565b60405180910390f35b3480156102cd57600080fd5b506102d6610aff565b6040516102e39190613344565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e919061335f565b610b05565b60405161032091906133b2565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b91906133f9565b610b4e565b60405161035d9190613344565b60405180910390f35b34801561037257600080fd5b5061038d600480360381019061038891906132c3565b610b73565b6040516103a39a999897969594939291906134b0565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce91906132c3565b610bfb565b6040516103e091906135dc565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b919061365c565b610de7565b005b34801561041e57600080fd5b50610439600480360381019061043491906132c3565b610e88565b005b34801561044757600080fd5b50610462600480360381019061045d919061369c565b610e9a565b60405161046f9190613823565b60405180910390f35b34801561048457600080fd5b5061048d610f42565b60405161049a919061385a565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613875565b610fbc565b6040516104d7919061385a565b60405180910390f35b3480156104ec57600080fd5b506104f5610feb565b604051610502919061385a565b60405180910390f35b34801561051757600080fd5b50610520611023565b005b34801561052e57600080fd5b50610549600480360381019061054491906138b5565b611074565b6040516105569190613344565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190613948565b6110bc565b005b34801561059457600080fd5b506105af60048036038101906105aa91906139da565b6110e1565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190613a27565b61131e565b005b3480156105e657600080fd5b506105ef6113bc565b6040516105fc9190613344565b60405180910390f35b34801561061157600080fd5b5061061a6113c2565b005b34801561062857600080fd5b50610643600480360381019061063e9190613875565b6113d6565b6040516106509190613344565b60405180910390f35b34801561066557600080fd5b5061066e611729565b005b61068a600480360381019061068591906133f9565b6117c6565b005b34801561069857600080fd5b506106a1611add565b6040516106ae9190613ac3565b60405180910390f35b3480156106c357600080fd5b506106cc611b06565b6040516106d9919061385a565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190613ade565b611c35565b005b34801561071757600080fd5b5061072061227c565b60405161072d9190613ba4565b60405180910390f35b34801561074257600080fd5b5061074b612294565b005b34801561075957600080fd5b50610774600480360381019061076f9190613bbf565b6122ef565b604051610781919061385a565b60405180910390f35b34801561079657600080fd5b5061079f61232b565b6040516107ac9190613344565b60405180910390f35b3480156107c157600080fd5b506107ca612331565b6040516107d79190613344565b60405180910390f35b3480156107ec57600080fd5b5061080760048036038101906108029190613c12565b612337565b6040516108149190613344565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190613c65565b612369565b005b34801561085257600080fd5b5061085b612407565b604051610868919061385a565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613c12565b612423565b6040516108a59190613344565b60405180910390f35b3480156108ba57600080fd5b506108c3612455565b6040516108d0919061385a565b60405180910390f35b3480156108e557600080fd5b506108ee612468565b6040516108fb9190613344565b60405180910390f35b34801561091057600080fd5b5061092b600480360381019061092691906132c3565b61246e565b005b61094760048036038101906109429190613c92565b612480565b005b34801561095557600080fd5b5061095e612772565b60405161096b9190613344565b60405180910390f35b34801561098057600080fd5b50610989612778565b6040516109969190613344565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190613c65565b61277e565b005b3480156109d457600080fd5b506109dd612801565b6040516109ea91906133b2565b60405180910390f35b3480156109ff57600080fd5b50610a08612823565b604051610a159190613cf3565b60405180910390f35b610a2661283b565b80600b8190555050565b6000806000806000805b600360ff168160ff161015610af15760005b600360ff168160ff161015610add576000600860006002548152602001908152602001600020600060035481526020019081526020016000208360ff1660038110610a9a57610a99613d0e565b5b600302018260ff1660038110610ab357610ab2613d0e565b5b0154905083811115610ac9578093508295508194505b508080610ad590613d6c565b915050610a4c565b508080610ae990613d6c565b915050610a3a565b508282945094505050509091565b60035481565b60016020528260005260406000208260038110610b2157600080fd5b018160038110610b3057600080fd5b6020918282040191900692509250509054906101000a900460ff1681565b600a602052816000526040600020602052806000526040600020600091509150505481565b60046020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16908060060154908060070160009054906101000a900460ff16908060070160019054906101000a900460ff16908060070160029054906101000a900460ff1690508a565b6060600060016000848152602001908152602001600020600380602002604051908101604052809291906000905b82821015610ca557838201600380602002604051908101604052809291908260038015610c91576020028201916000905b82829054906101000a900460ff1660ff1681526020019060010190602082600001049283019260010382029150808411610c5a5790505b505050505081526020019060010190610c29565b5050505090506000600967ffffffffffffffff811115610cc857610cc7613d95565b5b6040519080825280601f01601f191660200182016040528015610cfa5781602001600182028036833780820191505090505b5090506000805b60038160ff161015610ddb5760005b60038160ff161015610dc7576000858360ff1660038110610d3457610d33613d0e565b5b60200201518260ff1660038110610d4e57610d4d613d0e565b5b60200201519050806030610d629190613dc4565b60f81b858580610d7190613df9565b965081518110610d8457610d83613d0e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080610dbf90613d6c565b915050610d10565b508080610dd390613d6c565b915050610d01565b50819350505050919050565b610def61283b565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663f97196623084846040518463ffffffff1660e01b8152600401610e4093929190613e41565b6020604051808303816000875af1158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190613e8d565b505050565b610e9061283b565b80600c8190555050565b610ea2613234565b600860008481526020019081526020016000206000838152602001908152602001600020600380602002604051908101604052809291906000905b82821015610f3657838260030201600380602002604051908101604052809291908260038015610f22576020028201915b815481526020019060010190808311610f0e575b505050505081526020019060010190610edd565b50505050905092915050565b60008060046000600254815260200190815260200160002060030154118015610fa65750600460006002548152602001908152602001600020600601546004600060025481526020019081526020016000206003015442610fa39190613eba565b10155b15610fb45760019050610fb9565b600090505b90565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000610ff5610f42565b6110025760009050611020565b60008061100d610a30565b9150915061101b82826128b9565b925050505b90565b61102b61283b565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611071573d6000803e3d6000fd5b50565b6008602052836000526040600020602052826000526040600020826003811061109c57600080fd5b6003020181600381106110ae57600080fd5b016000935093505050505481565b6110c461283b565b80601160006101000a81548160ff02191690831515021790555050565b6110e9612c63565b6000805b838390508110156112d1576006600085858481811061110f5761110e613d0e565b5b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690613f3a565b60405180910390fd5b6002548484838181106111c5576111c4613d0e565b5b905060200201351061120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120390613fa6565b60405180910390fd5b61122f84848381811061122257611221613d0e565b5b90506020020135336113d6565b8261123a9190613fc6565b915060016006600086868581811061125557611254613d0e565b5b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112c990613df9565b9150506110ed565b503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611318573d6000803e3d6000fd5b50505050565b61132661283b565b85600f60006101000a81548160ff021916908360ff16021790555084600f60016101000a81548160ff021916908360ff16021790555083600f60026101000a81548160ff021916908360ff16021790555082600f60036101000a81548160ff021916908360ff16021790555081600f60046101000a81548160ff021916908360ff16021790555080601081905550505050505050565b600c5481565b6113ca61283b565b6113d46000612f47565b565b6000826002541161141c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114139061406c565b60405180910390fd5b600060046000858152602001908152602001600020905060006001600281111561144957611448613439565b5b8260070160029054906101000a900460ff16600281111561146d5761146c613439565b5b1461147c578160010154611482565b81600001545b905060006001600281111561149a57611499613439565b5b8360070160029054906101000a900460ff1660028111156114be576114bd613439565b5b146114cd5782600001546114d3565b82600101545b905060006005600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008560070160029054906101000a900460ff16600281111561154d5761154c613439565b5b60ff1660ff16815260200190815260200160002054905060006009600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008660070160029054906101000a900460ff1660028111156115dc576115db613439565b5b60ff1660ff1681526020019081526020016000205490506000600a60008a815260200190815260200160002060008760070160029054906101000a900460ff16600281111561162e5761162d613439565b5b60ff1660ff1681526020019081526020016000205490506000612710600e5461271061165a9190613eba565b838560028961166991906140bb565b61167391906140ec565b61167d91906140bb565b61168791906140ec565b61169191906140bb565b612710600e546127106116a49190613eba565b888760028a6116b391906140bb565b6116bd91906140ec565b6116c791906140bb565b6116d191906140ec565b6116db91906140bb565b612710600e546127106116ee9190613eba565b876116f991906140ec565b61170391906140bb565b61170d9190613fc6565b6117179190613fc6565b90508097505050505050505092915050565b61173161283b565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663954fa5ee30336040518363ffffffff1660e01b815260040161178092919061412e565b6020604051808303816000875af115801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c39190613e8d565b50565b601160009054906101000a900460ff16611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c906141a3565b60405180910390fd5b61181d612c63565b6010543414611861576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118589061420f565b60405180910390fd5b60025482146118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c9061427b565b60405180910390fd5b60018160ff1614806118ba575060028160ff16145b6118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f0906142e7565b60405180910390fd5b600060046000848152602001908152602001600020905060018260ff16036119e957600f60029054906101000a900460ff1660ff16600f60049054906101000a900460ff168260070160009054906101000a900460ff1661195a9190613dc4565b60ff161061199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490614353565b60405180910390fd5b600f60049054906101000a900460ff168160070160008282829054906101000a900460ff166119cc9190613dc4565b92506101000a81548160ff021916908360ff160217905550611abf565b60028260ff1603611abe57600f60039054906101000a900460ff1660ff16600f60049054906101000a900460ff168260070160019054906101000a900460ff16611a339190613dc4565b60ff1610611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d90614353565b60405180910390fd5b600f60049054906101000a900460ff168160070160018282829054906101000a900460ff16611aa59190613dc4565b92506101000a81548160ff021916908360ff1602179055505b5b3460126000828254611ad19190613fc6565b92505081905550505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611b10612407565b611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b46906143bf565b60405180910390fd5b60006013544090506000801b8103611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b939061442b565b60405180910390fd5b60008160001c90506001611bae612801565b60ff1603611bf65760046000600254815260200190815260200160002060070160009054906101000a900460ff1660ff16606482611bec919061444b565b1092505050611c32565b60046000600254815260200190815260200160002060070160019054906101000a900460ff1660ff16606482611c2c919061444b565b10925050505b90565b611c3d612c63565b60006004600060025481526020019081526020016000206003015403611c7b5742600460006002548152602001908152602001600020600301819055505b600360ff168460ff16108015611c975750600360ff168360ff16105b611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd906144c8565b60405180910390fd5b611cde612801565b60ff166001600060025481526020019081526020016000208560ff1660038110611d0b57611d0a613d0e565b5b018460ff1660038110611d2157611d20613d0e565b5b602091828204019190069054906101000a900460ff1660ff1603611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d719061455a565b60405180910390fd5b6002548214611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db5906145c6565b60405180910390fd5b6003548114611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990614632565b60405180910390fd5b60006005600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611e5e612801565b60ff1660ff1681526020019081526020016000205411611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa906146c4565b60405180910390fd5b60076000838152602001908152602001600020600082815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5990614730565b60405180910390fd5b600160076000848152602001908152602001600020600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060056000600254815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000612038612801565b60ff1660ff168152602001908152602001600020546008600084815260200190815260200160002060008381526020019081526020016000208560ff166003811061208657612085613d0e565b5b600302018460ff166003811061209f5761209e613d0e565b5b0160008282546120af9190613fc6565b9250508190555060056000600254815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000612112612801565b60ff1660ff168152602001908152602001600020546009600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000612181612801565b60ff1660ff16815260200190815260200160002060008282546121a49190613fc6565b9250508190555060056000600254815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000612207612801565b60ff1660ff16815260200190815260200160002054600a60008481526020019081526020016000206000612239612801565b60ff1660ff168152602001908152602001600020600082825461225c9190613fc6565b925050819055506001436122709190613fc6565b60138190555050505050565b73430000000000000000000000000000000000000281565b61229c61283b565b3373ffffffffffffffffffffffffffffffffffffffff166108fc6012549081150290604051600060405180830381858888f193505050501580156122e4573d6000803e3d6000fd5b506000601281905550565b6007602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b60025481565b60135481565b600560205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b61237161283b565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663860043b630836040518363ffffffff1660e01b81526004016123c092919061412e565b6020604051808303816000875af11580156123df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124039190613e8d565b5050565b60006013544311801561241e575061241d610f42565b5b905090565b600960205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b601160009054906101000a900460ff1681565b600d5481565b61247661283b565b80600d8190555050565b612488612c63565b601160009054906101000a900460ff166124d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ce906141a3565b60405180910390fd5b600254811461251b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125129061427b565b60405180910390fd5b6001600281111561252f5761252e613439565b5b60ff168260ff16148061255957506002808111156125505761254f613439565b5b60ff168260ff16145b612598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258f9061479c565b60405180910390fd5b600b543410156125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d490614808565b60405180910390fd5b600d5460046000600254815260200190815260200160002060050160009054906101000a900460ff1660ff16111561264a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264190614874565b60405180910390fd5b6001600281111561265e5761265d613439565b5b60ff168260ff160361269e573460046000600254815260200190815260200160002060000160008282546126929190613fc6565b925050819055506126ee565b6002808111156126b1576126b0613439565b5b60ff168260ff16036126ed573460046000600254815260200190815260200160002060010160008282546126e59190613fc6565b925050819055505b5b3460056000600254815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008460ff1660ff16815260200190815260200160002060008282546127679190613fc6565b925050819055505050565b60125481565b600b5481565b61278661283b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90614906565b60405180910390fd5b6127fe81612f47565b50565b600060016002600354612814919061444b565b61281e9190613fc6565b905090565b732536fe9ab3f511540f2f9e2ec2a805005c3dd80081565b61284361300b565b73ffffffffffffffffffffffffffffffffffffffff16612861611add565b73ffffffffffffffffffffffffffffffffffffffff16146128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90614972565b60405180910390fd5b565b600080600160006002548152602001908152602001600020600380602002604051908101604052809291906000905b8282101561296457838201600380602002604051908101604052809291908260038015612950576020028201916000905b82829054906101000a900460ff1660ff16815260200190600101906020826000010492830192600103820291508084116129195790505b5050505050815260200190600101906128e8565b505050509050600080612975612801565b905080838760ff166003811061298e5761298d613d0e565b5b60200201518660ff16600381106129a8576129a7613d0e565b5b602002019060ff16908160ff16815250506000915060005b600360ff168160ff161015612a32578160ff16848860ff16600381106129e9576129e8613d0e565b5b60200201518260ff1660038110612a0357612a02613d0e565b5b602002015160ff1603612a1f578280612a1b90613d6c565b9350505b8080612a2a90613d6c565b9150506129c0565b50600360ff168260ff1603612a4d5760019350505050612c5d565b6000915060005b600360ff168160ff161015612ac6578160ff16848260ff1660038110612a7d57612a7c613d0e565b5b60200201518760ff1660038110612a9757612a96613d0e565b5b602002015160ff1603612ab3578280612aaf90613d6c565b9350505b8080612abe90613d6c565b915050612a54565b50600360ff168260ff1603612ae15760019350505050612c5d565b8460ff168660ff1603612b83576000915060005b600360ff168160ff161015612b67578160ff16848260ff1660038110612b1e57612b1d613d0e565b5b60200201518260ff1660038110612b3857612b37613d0e565b5b602002015160ff1603612b54578280612b5090613d6c565b9350505b8080612b5f90613d6c565b915050612af5565b50600360ff168260ff1603612b825760019350505050612c5d565b5b60016003612b919190614992565b60ff168587612ba09190613dc4565b60ff1603612c55576000915060005b600360ff168160ff161015612c39578160ff16848260ff1660038110612bd857612bd7613d0e565b5b60200201518260016003612bec9190614992565b612bf69190614992565b60ff1660038110612c0a57612c09613d0e565b5b602002015160ff1603612c26578280612c2290613d6c565b9350505b8080612c3190613d6c565b915050612baf565b50600360ff168260ff1603612c545760019350505050612c5d565b5b600093505050505b92915050565b612c6b610f42565b15612f4557600080612c7b610a30565b9150915060006001600060025481526020019081526020016000208360ff1660038110612cab57612caa613d0e565b5b018260ff1660038110612cc157612cc0613d0e565b5b602091828204019190069054906101000a900460ff1660ff161115612da257612ce8612407565b612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e90614a39565b60405180910390fd5b612d2f611b06565b15612d9d57612d3c612801565b6001600060025481526020019081526020016000208360ff1660038110612d6657612d65613d0e565b5b018260ff1660038110612d7c57612d7b613d0e565b5b602091828204019190066101000a81548160ff021916908360ff1602179055505b612e58565b612daa612801565b6001600060025481526020019081526020016000208360ff1660038110612dd457612dd3613d0e565b5b018260ff1660038110612dea57612de9613d0e565b5b602091828204019190066101000a81548160ff021916908360ff160217905550600160046000600254815260200190815260200160002060050160008282829054906101000a900460ff16612e3f9190613dc4565b92506101000a81548160ff021916908360ff1602179055505b60016004600060025481526020019081526020016000206004016000828254612e819190613fc6565b92505081905550612e90610feb565b15612f0957612e9d612801565b60ff166002811115612eb257612eb1613439565b5b60046000600254815260200190815260200160002060070160026101000a81548160ff02191690836002811115612eec57612eeb613439565b5b0217905550612efc600254613013565b612f046130a0565b612f42565b600160036000828254612f1c9190613fc6565b925050819055506000600460006002548152602001908152602001600020600301819055505b50505b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000612710600e54600460008581526020019081526020016000206001015461303c91906140ec565b61304691906140bb565b612710600e54600460008681526020019081526020016000206000015461306d91906140ec565b61307791906140bb565b6130819190613fc6565b905080601260008282546130959190613fc6565b925050819055505050565b6001600260008282546130b39190613fc6565b92505081905550600060038190555060405180610140016040528060008152602001600081526020014281526020016000815260200160008152602001600060ff168152602001600c548152602001600f60009054906101000a900460ff1660ff168152602001600f60019054906101000a900460ff1660ff1681526020016000600281111561314657613145613439565b5b815250600460006002548152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff021916908360ff16021790555060c0820151816006015560e08201518160070160006101000a81548160ff021916908360ff1602179055506101008201518160070160016101000a81548160ff021916908360ff1602179055506101208201518160070160026101000a81548160ff0219169083600281111561322a57613229613439565b5b0217905550905050565b60405180606001604052806003905b61324b613261565b8152602001906001900390816132435790505090565b6040518060600160405280600390602082028036833780820191505090505090565b600080fd5b600080fd5b6000819050919050565b6132a08161328d565b81146132ab57600080fd5b50565b6000813590506132bd81613297565b92915050565b6000602082840312156132d9576132d8613283565b5b60006132e7848285016132ae565b91505092915050565b600060ff82169050919050565b613306816132f0565b82525050565b600060408201905061332160008301856132fd565b61332e60208301846132fd565b9392505050565b61333e8161328d565b82525050565b60006020820190506133596000830184613335565b92915050565b60008060006060848603121561337857613377613283565b5b6000613386868287016132ae565b9350506020613397868287016132ae565b92505060406133a8868287016132ae565b9150509250925092565b60006020820190506133c760008301846132fd565b92915050565b6133d6816132f0565b81146133e157600080fd5b50565b6000813590506133f3816133cd565b92915050565b600080604083850312156134105761340f613283565b5b600061341e858286016132ae565b925050602061342f858286016133e4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061347957613478613439565b5b50565b600081905061348a82613468565b919050565b600061349a8261347c565b9050919050565b6134aa8161348f565b82525050565b6000610140820190506134c6600083018d613335565b6134d3602083018c613335565b6134e0604083018b613335565b6134ed606083018a613335565b6134fa6080830189613335565b61350760a08301886132fd565b61351460c0830187613335565b61352160e08301866132fd565b61352f6101008301856132fd565b61353d6101208301846134a1565b9b9a5050505050505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561358657808201518184015260208101905061356b565b60008484015250505050565b6000601f19601f8301169050919050565b60006135ae8261354c565b6135b88185613557565b93506135c8818560208601613568565b6135d181613592565b840191505092915050565b600060208201905081810360008301526135f681846135a3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613629826135fe565b9050919050565b6136398161361e565b811461364457600080fd5b50565b60008135905061365681613630565b92915050565b6000806040838503121561367357613672613283565b5b600061368185828601613647565b9250506020613692858286016132ae565b9150509250929050565b600080604083850312156136b3576136b2613283565b5b60006136c1858286016132ae565b92505060206136d2858286016132ae565b9150509250929050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b6137258161328d565b82525050565b6000613737838361371c565b60208301905092915050565b6000602082019050919050565b613759816136fc565b6137638184613707565b925061376e82613712565b8060005b8381101561379f578151613786878261372b565b965061379183613743565b925050600181019050613772565b505050505050565b60006137b38383613750565b60608301905092915050565b6000602082019050919050565b6137d5816136dc565b6137df81846136e7565b92506137ea826136f2565b8060005b8381101561381b57815161380287826137a7565b965061380d836137bf565b9250506001810190506137ee565b505050505050565b60006101208201905061383960008301846137cc565b92915050565b60008115159050919050565b6138548161383f565b82525050565b600060208201905061386f600083018461384b565b92915050565b6000806040838503121561388c5761388b613283565b5b600061389a858286016132ae565b92505060206138ab85828601613647565b9150509250929050565b600080600080608085870312156138cf576138ce613283565b5b60006138dd878288016132ae565b94505060206138ee878288016132ae565b93505060406138ff878288016132ae565b9250506060613910878288016132ae565b91505092959194509250565b6139258161383f565b811461393057600080fd5b50565b6000813590506139428161391c565b92915050565b60006020828403121561395e5761395d613283565b5b600061396c84828501613933565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261399a57613999613975565b5b8235905067ffffffffffffffff8111156139b7576139b661397a565b5b6020830191508360208202830111156139d3576139d261397f565b5b9250929050565b600080602083850312156139f1576139f0613283565b5b600083013567ffffffffffffffff811115613a0f57613a0e613288565b5b613a1b85828601613984565b92509250509250929050565b60008060008060008060c08789031215613a4457613a43613283565b5b6000613a5289828a016133e4565b9650506020613a6389828a016133e4565b9550506040613a7489828a016133e4565b9450506060613a8589828a016133e4565b9350506080613a9689828a016133e4565b92505060a0613aa789828a016132ae565b9150509295509295509295565b613abd8161361e565b82525050565b6000602082019050613ad86000830184613ab4565b92915050565b60008060008060808587031215613af857613af7613283565b5b6000613b06878288016133e4565b9450506020613b17878288016133e4565b9350506040613b28878288016132ae565b9250506060613b39878288016132ae565b91505092959194509250565b6000819050919050565b6000613b6a613b65613b60846135fe565b613b45565b6135fe565b9050919050565b6000613b7c82613b4f565b9050919050565b6000613b8e82613b71565b9050919050565b613b9e81613b83565b82525050565b6000602082019050613bb96000830184613b95565b92915050565b600080600060608486031215613bd857613bd7613283565b5b6000613be6868287016132ae565b9350506020613bf7868287016132ae565b9250506040613c0886828701613647565b9150509250925092565b600080600060608486031215613c2b57613c2a613283565b5b6000613c39868287016132ae565b9350506020613c4a86828701613647565b9250506040613c5b868287016133e4565b9150509250925092565b600060208284031215613c7b57613c7a613283565b5b6000613c8984828501613647565b91505092915050565b60008060408385031215613ca957613ca8613283565b5b6000613cb7858286016133e4565b9250506020613cc8858286016132ae565b9150509250929050565b6000613cdd82613b71565b9050919050565b613ced81613cd2565b82525050565b6000602082019050613d086000830184613ce4565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d77826132f0565b915060ff8203613d8a57613d89613d3d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000613dcf826132f0565b9150613dda836132f0565b9250828201905060ff811115613df357613df2613d3d565b5b92915050565b6000613e048261328d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e3657613e35613d3d565b5b600182019050919050565b6000606082019050613e566000830186613ab4565b613e636020830185613ab4565b613e706040830184613335565b949350505050565b600081519050613e8781613297565b92915050565b600060208284031215613ea357613ea2613283565b5b6000613eb184828501613e78565b91505092915050565b6000613ec58261328d565b9150613ed08361328d565b9250828203905081811115613ee857613ee7613d3d565b5b92915050565b7f57696e6e696e6720416c726561647920436c61696d6564000000000000000000600082015250565b6000613f24601783613557565b9150613f2f82613eee565b602082019050919050565b60006020820190508181036000830152613f5381613f17565b9050919050565b7f526f756e64206d757374206265206f7665720000000000000000000000000000600082015250565b6000613f90601283613557565b9150613f9b82613f5a565b602082019050919050565b60006020820190508181036000830152613fbf81613f83565b9050919050565b6000613fd18261328d565b9150613fdc8361328d565b9250828201905080821115613ff457613ff3613d3d565b5b92915050565b7f596f7520636865636b2072657761726420666f722070726576696f757320726f60008201527f756e642061667465722061206e657720726f756e642073746172747300000000602082015250565b6000614056603c83613557565b915061406182613ffa565b604082019050919050565b6000602082019050818103600083015261408581614049565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140c68261328d565b91506140d18361328d565b9250826140e1576140e061408c565b5b828204905092915050565b60006140f78261328d565b91506141028361328d565b92508282026141108161328d565b9150828204841483151761412757614126613d3d565b5b5092915050565b60006040820190506141436000830185613ab4565b6141506020830184613ab4565b9392505050565b7f42657474696e67206973206e6f74206f70656e00000000000000000000000000600082015250565b600061418d601383613557565b915061419882614157565b602082019050919050565b600060208201905081810360008301526141bc81614180565b9050919050565b7f496e636f727265637420626f6f73742066656500000000000000000000000000600082015250565b60006141f9601383613557565b9150614204826141c3565b602082019050919050565b60006020820190508181036000830152614228816141ec565b9050919050565b7f526f756e64204f76657200000000000000000000000000000000000000000000600082015250565b6000614265600a83613557565b91506142708261422f565b602082019050919050565b6000602082019050818103600083015261429481614258565b9050919050565b7f496e76616c696420736964650000000000000000000000000000000000000000600082015250565b60006142d1600c83613557565b91506142dc8261429b565b602082019050919050565b60006020820190508181036000830152614300816142c4565b9050919050565b7f65786365656473206d6178000000000000000000000000000000000000000000600082015250565b600061433d600b83613557565b915061434882614307565b602082019050919050565b6000602082019050818103600083015261436c81614330565b9050919050565b7f426c6f636b204e6f7420417661696c61626c6500000000000000000000000000600082015250565b60006143a9601383613557565b91506143b482614373565b602082019050919050565b600060208201905081810360008301526143d88161439c565b9050919050565b7f426c6f636b2068617368206e6f7420617661696c61626c650000000000000000600082015250565b6000614415601883613557565b9150614420826143df565b602082019050919050565b6000602082019050818103600083015261444481614408565b9050919050565b60006144568261328d565b91506144618361328d565b9250826144715761447061408c565b5b828206905092915050565b7f496e76616c696420626f61726420706f736974696f6e2e000000000000000000600082015250565b60006144b2601783613557565b91506144bd8261447c565b602082019050919050565b600060208201905081810360008301526144e1816144a5565b9050919050565b7f506f736974696f6e20616c72656164792074616b656e206279206f776e20706960008201527f6563652e00000000000000000000000000000000000000000000000000000000602082015250565b6000614544602483613557565b915061454f826144e8565b604082019050919050565b6000602082019050818103600083015261457381614537565b9050919050565b7f526f756e64204e6f742043757272656e74000000000000000000000000000000600082015250565b60006145b0601183613557565b91506145bb8261457a565b602082019050919050565b600060208201905081810360008301526145df816145a3565b9050919050565b7f4d6f7665204e6f742043757272656e7400000000000000000000000000000000600082015250565b600061461c601083613557565b9150614627826145e6565b602082019050919050565b6000602082019050818103600083015261464b8161460f565b9050919050565b7f596f75206e65656420616374697665207374616b65206f6e207468697320736960008201527f646520746f20766f746500000000000000000000000000000000000000000000602082015250565b60006146ae602a83613557565b91506146b982614652565b604082019050919050565b600060208201905081810360008301526146dd816146a1565b9050919050565b7f596f7520416c726561647920566f746564000000000000000000000000000000600082015250565b600061471a601183613557565b9150614725826146e4565b602082019050919050565b600060208201905081810360008301526147498161470d565b9050919050565b7f496e76616c696420736964652e00000000000000000000000000000000000000600082015250565b6000614786600d83613557565b915061479182614750565b602082019050919050565b600060208201905081810360008301526147b581614779565b9050919050565b7f42657420616d6f756e742067726561746572207468616e206d696e696d756d2e600082015250565b60006147f2602083613557565b91506147fd826147bc565b602082019050919050565b60006020820190508181036000830152614821816147e5565b9050919050565b7f546f6f206c61746520746f206a6f696e00000000000000000000000000000000600082015250565b600061485e601083613557565b915061486982614828565b602082019050919050565b6000602082019050818103600083015261488d81614851565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148f0602683613557565b91506148fb82614894565b604082019050919050565b6000602082019050818103600083015261491f816148e3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061495c602083613557565b915061496782614926565b602082019050919050565b6000602082019050818103600083015261498b8161494f565b9050919050565b600061499d826132f0565b91506149a8836132f0565b9250828203905060ff8111156149c1576149c0613d3d565b5b92915050565b7f57616974696e6720666f72206469636520726f6c6c2c20706c6561736520776160008201527f6974203120626c6f636b00000000000000000000000000000000000000000000602082015250565b6000614a23602a83613557565b9150614a2e826149c7565b604082019050919050565b60006020820190508181036000830152614a5281614a16565b905091905056fea2646970667358221220aae4ba47c670ae0a5a96e83ac29c361de894a4bdeba1ab975880664bfe454e4a64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102675760003560e01c80638b66607311610144578063c4e31a5a116100b6578063dcb3b30e1161007a578063dcb3b30e1461092d578063e4d43ec114610949578063ec5ffac214610974578063f2fde38b1461099f578063f42787da146109c8578063fdb001c0146109f357610267565b8063c4e31a5a14610846578063cc390f2914610871578063cc5de87e146108ae578063dc14d3d3146108d9578063dc1fb8001461090457610267565b806399d32fc41161010857806399d32fc4146107365780639cabd1561461074d5780639cbe5efd1461078a578063a0e6fbbd146107b5578063b983c696146107e0578063c2d94aec1461081d57610267565b80638b666073146106705780638da5cb5b1461068c57806391894930146106b7578063950dcdef146106e257806397d757761461070b57610267565b806335c34696116101dd5780636ba4c138116101a15780636ba4c138146105885780636dcb1d41146105b15780636ecb134e146105da578063715018a61461060557806373c73db31461061c57806377d5d2dc1461065957610267565b806335c34696146104a357806338bc7abe146104e05780633ccfd60b1461050b57806344ad7ef6146105225780635b4e1ba51461055f57610267565b8063117a5b901161022f578063117a5b901461036657806315174013146103ac5780631869ebda146103e9578063281df9a0146104125780632893874b1461043b5780632c9cfcfc1461047857610267565b8063039fd05f1461026c5780630551ea67146102955780630996ccc3146102c15780630b6ee9cd146102ec5780630c59b8ee14610329575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906132c3565b610a1e565b005b3480156102a157600080fd5b506102aa610a30565b6040516102b892919061330c565b60405180910390f35b3480156102cd57600080fd5b506102d6610aff565b6040516102e39190613344565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e919061335f565b610b05565b60405161032091906133b2565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b91906133f9565b610b4e565b60405161035d9190613344565b60405180910390f35b34801561037257600080fd5b5061038d600480360381019061038891906132c3565b610b73565b6040516103a39a999897969594939291906134b0565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce91906132c3565b610bfb565b6040516103e091906135dc565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b919061365c565b610de7565b005b34801561041e57600080fd5b50610439600480360381019061043491906132c3565b610e88565b005b34801561044757600080fd5b50610462600480360381019061045d919061369c565b610e9a565b60405161046f9190613823565b60405180910390f35b34801561048457600080fd5b5061048d610f42565b60405161049a919061385a565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613875565b610fbc565b6040516104d7919061385a565b60405180910390f35b3480156104ec57600080fd5b506104f5610feb565b604051610502919061385a565b60405180910390f35b34801561051757600080fd5b50610520611023565b005b34801561052e57600080fd5b50610549600480360381019061054491906138b5565b611074565b6040516105569190613344565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190613948565b6110bc565b005b34801561059457600080fd5b506105af60048036038101906105aa91906139da565b6110e1565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190613a27565b61131e565b005b3480156105e657600080fd5b506105ef6113bc565b6040516105fc9190613344565b60405180910390f35b34801561061157600080fd5b5061061a6113c2565b005b34801561062857600080fd5b50610643600480360381019061063e9190613875565b6113d6565b6040516106509190613344565b60405180910390f35b34801561066557600080fd5b5061066e611729565b005b61068a600480360381019061068591906133f9565b6117c6565b005b34801561069857600080fd5b506106a1611add565b6040516106ae9190613ac3565b60405180910390f35b3480156106c357600080fd5b506106cc611b06565b6040516106d9919061385a565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190613ade565b611c35565b005b34801561071757600080fd5b5061072061227c565b60405161072d9190613ba4565b60405180910390f35b34801561074257600080fd5b5061074b612294565b005b34801561075957600080fd5b50610774600480360381019061076f9190613bbf565b6122ef565b604051610781919061385a565b60405180910390f35b34801561079657600080fd5b5061079f61232b565b6040516107ac9190613344565b60405180910390f35b3480156107c157600080fd5b506107ca612331565b6040516107d79190613344565b60405180910390f35b3480156107ec57600080fd5b5061080760048036038101906108029190613c12565b612337565b6040516108149190613344565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190613c65565b612369565b005b34801561085257600080fd5b5061085b612407565b604051610868919061385a565b60405180910390f35b34801561087d57600080fd5b5061089860048036038101906108939190613c12565b612423565b6040516108a59190613344565b60405180910390f35b3480156108ba57600080fd5b506108c3612455565b6040516108d0919061385a565b60405180910390f35b3480156108e557600080fd5b506108ee612468565b6040516108fb9190613344565b60405180910390f35b34801561091057600080fd5b5061092b600480360381019061092691906132c3565b61246e565b005b61094760048036038101906109429190613c92565b612480565b005b34801561095557600080fd5b5061095e612772565b60405161096b9190613344565b60405180910390f35b34801561098057600080fd5b50610989612778565b6040516109969190613344565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190613c65565b61277e565b005b3480156109d457600080fd5b506109dd612801565b6040516109ea91906133b2565b60405180910390f35b3480156109ff57600080fd5b50610a08612823565b604051610a159190613cf3565b60405180910390f35b610a2661283b565b80600b8190555050565b6000806000806000805b600360ff168160ff161015610af15760005b600360ff168160ff161015610add576000600860006002548152602001908152602001600020600060035481526020019081526020016000208360ff1660038110610a9a57610a99613d0e565b5b600302018260ff1660038110610ab357610ab2613d0e565b5b0154905083811115610ac9578093508295508194505b508080610ad590613d6c565b915050610a4c565b508080610ae990613d6c565b915050610a3a565b508282945094505050509091565b60035481565b60016020528260005260406000208260038110610b2157600080fd5b018160038110610b3057600080fd5b6020918282040191900692509250509054906101000a900460ff1681565b600a602052816000526040600020602052806000526040600020600091509150505481565b60046020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16908060060154908060070160009054906101000a900460ff16908060070160019054906101000a900460ff16908060070160029054906101000a900460ff1690508a565b6060600060016000848152602001908152602001600020600380602002604051908101604052809291906000905b82821015610ca557838201600380602002604051908101604052809291908260038015610c91576020028201916000905b82829054906101000a900460ff1660ff1681526020019060010190602082600001049283019260010382029150808411610c5a5790505b505050505081526020019060010190610c29565b5050505090506000600967ffffffffffffffff811115610cc857610cc7613d95565b5b6040519080825280601f01601f191660200182016040528015610cfa5781602001600182028036833780820191505090505b5090506000805b60038160ff161015610ddb5760005b60038160ff161015610dc7576000858360ff1660038110610d3457610d33613d0e565b5b60200201518260ff1660038110610d4e57610d4d613d0e565b5b60200201519050806030610d629190613dc4565b60f81b858580610d7190613df9565b965081518110610d8457610d83613d0e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080610dbf90613d6c565b915050610d10565b508080610dd390613d6c565b915050610d01565b50819350505050919050565b610def61283b565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663f97196623084846040518463ffffffff1660e01b8152600401610e4093929190613e41565b6020604051808303816000875af1158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190613e8d565b505050565b610e9061283b565b80600c8190555050565b610ea2613234565b600860008481526020019081526020016000206000838152602001908152602001600020600380602002604051908101604052809291906000905b82821015610f3657838260030201600380602002604051908101604052809291908260038015610f22576020028201915b815481526020019060010190808311610f0e575b505050505081526020019060010190610edd565b50505050905092915050565b60008060046000600254815260200190815260200160002060030154118015610fa65750600460006002548152602001908152602001600020600601546004600060025481526020019081526020016000206003015442610fa39190613eba565b10155b15610fb45760019050610fb9565b600090505b90565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000610ff5610f42565b6110025760009050611020565b60008061100d610a30565b9150915061101b82826128b9565b925050505b90565b61102b61283b565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611071573d6000803e3d6000fd5b50565b6008602052836000526040600020602052826000526040600020826003811061109c57600080fd5b6003020181600381106110ae57600080fd5b016000935093505050505481565b6110c461283b565b80601160006101000a81548160ff02191690831515021790555050565b6110e9612c63565b6000805b838390508110156112d1576006600085858481811061110f5761110e613d0e565b5b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690613f3a565b60405180910390fd5b6002548484838181106111c5576111c4613d0e565b5b905060200201351061120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120390613fa6565b60405180910390fd5b61122f84848381811061122257611221613d0e565b5b90506020020135336113d6565b8261123a9190613fc6565b915060016006600086868581811061125557611254613d0e565b5b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112c990613df9565b9150506110ed565b503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611318573d6000803e3d6000fd5b50505050565b61132661283b565b85600f60006101000a81548160ff021916908360ff16021790555084600f60016101000a81548160ff021916908360ff16021790555083600f60026101000a81548160ff021916908360ff16021790555082600f60036101000a81548160ff021916908360ff16021790555081600f60046101000a81548160ff021916908360ff16021790555080601081905550505050505050565b600c5481565b6113ca61283b565b6113d46000612f47565b565b6000826002541161141c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114139061406c565b60405180910390fd5b600060046000858152602001908152602001600020905060006001600281111561144957611448613439565b5b8260070160029054906101000a900460ff16600281111561146d5761146c613439565b5b1461147c578160010154611482565b81600001545b905060006001600281111561149a57611499613439565b5b8360070160029054906101000a900460ff1660028111156114be576114bd613439565b5b146114cd5782600001546114d3565b82600101545b905060006005600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008560070160029054906101000a900460ff16600281111561154d5761154c613439565b5b60ff1660ff16815260200190815260200160002054905060006009600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008660070160029054906101000a900460ff1660028111156115dc576115db613439565b5b60ff1660ff1681526020019081526020016000205490506000600a60008a815260200190815260200160002060008760070160029054906101000a900460ff16600281111561162e5761162d613439565b5b60ff1660ff1681526020019081526020016000205490506000612710600e5461271061165a9190613eba565b838560028961166991906140bb565b61167391906140ec565b61167d91906140bb565b61168791906140ec565b61169191906140bb565b612710600e546127106116a49190613eba565b888760028a6116b391906140bb565b6116bd91906140ec565b6116c791906140bb565b6116d191906140ec565b6116db91906140bb565b612710600e546127106116ee9190613eba565b876116f991906140ec565b61170391906140bb565b61170d9190613fc6565b6117179190613fc6565b90508097505050505050505092915050565b61173161283b565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663954fa5ee30336040518363ffffffff1660e01b815260040161178092919061412e565b6020604051808303816000875af115801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c39190613e8d565b50565b601160009054906101000a900460ff16611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c906141a3565b60405180910390fd5b61181d612c63565b6010543414611861576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118589061420f565b60405180910390fd5b60025482146118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c9061427b565b60405180910390fd5b60018160ff1614806118ba575060028160ff16145b6118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f0906142e7565b60405180910390fd5b600060046000848152602001908152602001600020905060018260ff16036119e957600f60029054906101000a900460ff1660ff16600f60049054906101000a900460ff168260070160009054906101000a900460ff1661195a9190613dc4565b60ff161061199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490614353565b60405180910390fd5b600f60049054906101000a900460ff168160070160008282829054906101000a900460ff166119cc9190613dc4565b92506101000a81548160ff021916908360ff160217905550611abf565b60028260ff1603611abe57600f60039054906101000a900460ff1660ff16600f60049054906101000a900460ff168260070160019054906101000a900460ff16611a339190613dc4565b60ff1610611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d90614353565b60405180910390fd5b600f60049054906101000a900460ff168160070160018282829054906101000a900460ff16611aa59190613dc4565b92506101000a81548160ff021916908360ff1602179055505b5b3460126000828254611ad19190613fc6565b92505081905550505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611b10612407565b611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b46906143bf565b60405180910390fd5b60006013544090506000801b8103611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b939061442b565b60405180910390fd5b60008160001c90506001611bae612801565b60ff1603611bf65760046000600254815260200190815260200160002060070160009054906101000a900460ff1660ff16606482611bec919061444b565b1092505050611c32565b60046000600254815260200190815260200160002060070160019054906101000a900460ff1660ff16606482611c2c919061444b565b10925050505b90565b611c3d612c63565b60006004600060025481526020019081526020016000206003015403611c7b5742600460006002548152602001908152602001600020600301819055505b600360ff168460ff16108015611c975750600360ff168360ff16105b611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd906144c8565b60405180910390fd5b611cde612801565b60ff166001600060025481526020019081526020016000208560ff1660038110611d0b57611d0a613d0e565b5b018460ff1660038110611d2157611d20613d0e565b5b602091828204019190069054906101000a900460ff1660ff1603611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d719061455a565b60405180910390fd5b6002548214611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db5906145c6565b60405180910390fd5b6003548114611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990614632565b60405180910390fd5b60006005600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611e5e612801565b60ff1660ff1681526020019081526020016000205411611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa906146c4565b60405180910390fd5b60076000838152602001908152602001600020600082815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5990614730565b60405180910390fd5b600160076000848152602001908152602001600020600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060056000600254815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000612038612801565b60ff1660ff168152602001908152602001600020546008600084815260200190815260200160002060008381526020019081526020016000208560ff166003811061208657612085613d0e565b5b600302018460ff166003811061209f5761209e613d0e565b5b0160008282546120af9190613fc6565b9250508190555060056000600254815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000612112612801565b60ff1660ff168152602001908152602001600020546009600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000612181612801565b60ff1660ff16815260200190815260200160002060008282546121a49190613fc6565b9250508190555060056000600254815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000612207612801565b60ff1660ff16815260200190815260200160002054600a60008481526020019081526020016000206000612239612801565b60ff1660ff168152602001908152602001600020600082825461225c9190613fc6565b925050819055506001436122709190613fc6565b60138190555050505050565b73430000000000000000000000000000000000000281565b61229c61283b565b3373ffffffffffffffffffffffffffffffffffffffff166108fc6012549081150290604051600060405180830381858888f193505050501580156122e4573d6000803e3d6000fd5b506000601281905550565b6007602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b60025481565b60135481565b600560205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b61237161283b565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663860043b630836040518363ffffffff1660e01b81526004016123c092919061412e565b6020604051808303816000875af11580156123df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124039190613e8d565b5050565b60006013544311801561241e575061241d610f42565b5b905090565b600960205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b601160009054906101000a900460ff1681565b600d5481565b61247661283b565b80600d8190555050565b612488612c63565b601160009054906101000a900460ff166124d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ce906141a3565b60405180910390fd5b600254811461251b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125129061427b565b60405180910390fd5b6001600281111561252f5761252e613439565b5b60ff168260ff16148061255957506002808111156125505761254f613439565b5b60ff168260ff16145b612598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258f9061479c565b60405180910390fd5b600b543410156125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d490614808565b60405180910390fd5b600d5460046000600254815260200190815260200160002060050160009054906101000a900460ff1660ff16111561264a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264190614874565b60405180910390fd5b6001600281111561265e5761265d613439565b5b60ff168260ff160361269e573460046000600254815260200190815260200160002060000160008282546126929190613fc6565b925050819055506126ee565b6002808111156126b1576126b0613439565b5b60ff168260ff16036126ed573460046000600254815260200190815260200160002060010160008282546126e59190613fc6565b925050819055505b5b3460056000600254815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008460ff1660ff16815260200190815260200160002060008282546127679190613fc6565b925050819055505050565b60125481565b600b5481565b61278661283b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90614906565b60405180910390fd5b6127fe81612f47565b50565b600060016002600354612814919061444b565b61281e9190613fc6565b905090565b732536fe9ab3f511540f2f9e2ec2a805005c3dd80081565b61284361300b565b73ffffffffffffffffffffffffffffffffffffffff16612861611add565b73ffffffffffffffffffffffffffffffffffffffff16146128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90614972565b60405180910390fd5b565b600080600160006002548152602001908152602001600020600380602002604051908101604052809291906000905b8282101561296457838201600380602002604051908101604052809291908260038015612950576020028201916000905b82829054906101000a900460ff1660ff16815260200190600101906020826000010492830192600103820291508084116129195790505b5050505050815260200190600101906128e8565b505050509050600080612975612801565b905080838760ff166003811061298e5761298d613d0e565b5b60200201518660ff16600381106129a8576129a7613d0e565b5b602002019060ff16908160ff16815250506000915060005b600360ff168160ff161015612a32578160ff16848860ff16600381106129e9576129e8613d0e565b5b60200201518260ff1660038110612a0357612a02613d0e565b5b602002015160ff1603612a1f578280612a1b90613d6c565b9350505b8080612a2a90613d6c565b9150506129c0565b50600360ff168260ff1603612a4d5760019350505050612c5d565b6000915060005b600360ff168160ff161015612ac6578160ff16848260ff1660038110612a7d57612a7c613d0e565b5b60200201518760ff1660038110612a9757612a96613d0e565b5b602002015160ff1603612ab3578280612aaf90613d6c565b9350505b8080612abe90613d6c565b915050612a54565b50600360ff168260ff1603612ae15760019350505050612c5d565b8460ff168660ff1603612b83576000915060005b600360ff168160ff161015612b67578160ff16848260ff1660038110612b1e57612b1d613d0e565b5b60200201518260ff1660038110612b3857612b37613d0e565b5b602002015160ff1603612b54578280612b5090613d6c565b9350505b8080612b5f90613d6c565b915050612af5565b50600360ff168260ff1603612b825760019350505050612c5d565b5b60016003612b919190614992565b60ff168587612ba09190613dc4565b60ff1603612c55576000915060005b600360ff168160ff161015612c39578160ff16848260ff1660038110612bd857612bd7613d0e565b5b60200201518260016003612bec9190614992565b612bf69190614992565b60ff1660038110612c0a57612c09613d0e565b5b602002015160ff1603612c26578280612c2290613d6c565b9350505b8080612c3190613d6c565b915050612baf565b50600360ff168260ff1603612c545760019350505050612c5d565b5b600093505050505b92915050565b612c6b610f42565b15612f4557600080612c7b610a30565b9150915060006001600060025481526020019081526020016000208360ff1660038110612cab57612caa613d0e565b5b018260ff1660038110612cc157612cc0613d0e565b5b602091828204019190069054906101000a900460ff1660ff161115612da257612ce8612407565b612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e90614a39565b60405180910390fd5b612d2f611b06565b15612d9d57612d3c612801565b6001600060025481526020019081526020016000208360ff1660038110612d6657612d65613d0e565b5b018260ff1660038110612d7c57612d7b613d0e565b5b602091828204019190066101000a81548160ff021916908360ff1602179055505b612e58565b612daa612801565b6001600060025481526020019081526020016000208360ff1660038110612dd457612dd3613d0e565b5b018260ff1660038110612dea57612de9613d0e565b5b602091828204019190066101000a81548160ff021916908360ff160217905550600160046000600254815260200190815260200160002060050160008282829054906101000a900460ff16612e3f9190613dc4565b92506101000a81548160ff021916908360ff1602179055505b60016004600060025481526020019081526020016000206004016000828254612e819190613fc6565b92505081905550612e90610feb565b15612f0957612e9d612801565b60ff166002811115612eb257612eb1613439565b5b60046000600254815260200190815260200160002060070160026101000a81548160ff02191690836002811115612eec57612eeb613439565b5b0217905550612efc600254613013565b612f046130a0565b612f42565b600160036000828254612f1c9190613fc6565b925050819055506000600460006002548152602001908152602001600020600301819055505b50505b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000612710600e54600460008581526020019081526020016000206001015461303c91906140ec565b61304691906140bb565b612710600e54600460008681526020019081526020016000206000015461306d91906140ec565b61307791906140bb565b6130819190613fc6565b905080601260008282546130959190613fc6565b925050819055505050565b6001600260008282546130b39190613fc6565b92505081905550600060038190555060405180610140016040528060008152602001600081526020014281526020016000815260200160008152602001600060ff168152602001600c548152602001600f60009054906101000a900460ff1660ff168152602001600f60019054906101000a900460ff1660ff1681526020016000600281111561314657613145613439565b5b815250600460006002548152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff021916908360ff16021790555060c0820151816006015560e08201518160070160006101000a81548160ff021916908360ff1602179055506101008201518160070160016101000a81548160ff021916908360ff1602179055506101208201518160070160026101000a81548160ff0219169083600281111561322a57613229613439565b5b0217905550905050565b60405180606001604052806003905b61324b613261565b8152602001906001900390816132435790505090565b6040518060600160405280600390602082028036833780820191505090505090565b600080fd5b600080fd5b6000819050919050565b6132a08161328d565b81146132ab57600080fd5b50565b6000813590506132bd81613297565b92915050565b6000602082840312156132d9576132d8613283565b5b60006132e7848285016132ae565b91505092915050565b600060ff82169050919050565b613306816132f0565b82525050565b600060408201905061332160008301856132fd565b61332e60208301846132fd565b9392505050565b61333e8161328d565b82525050565b60006020820190506133596000830184613335565b92915050565b60008060006060848603121561337857613377613283565b5b6000613386868287016132ae565b9350506020613397868287016132ae565b92505060406133a8868287016132ae565b9150509250925092565b60006020820190506133c760008301846132fd565b92915050565b6133d6816132f0565b81146133e157600080fd5b50565b6000813590506133f3816133cd565b92915050565b600080604083850312156134105761340f613283565b5b600061341e858286016132ae565b925050602061342f858286016133e4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061347957613478613439565b5b50565b600081905061348a82613468565b919050565b600061349a8261347c565b9050919050565b6134aa8161348f565b82525050565b6000610140820190506134c6600083018d613335565b6134d3602083018c613335565b6134e0604083018b613335565b6134ed606083018a613335565b6134fa6080830189613335565b61350760a08301886132fd565b61351460c0830187613335565b61352160e08301866132fd565b61352f6101008301856132fd565b61353d6101208301846134a1565b9b9a5050505050505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561358657808201518184015260208101905061356b565b60008484015250505050565b6000601f19601f8301169050919050565b60006135ae8261354c565b6135b88185613557565b93506135c8818560208601613568565b6135d181613592565b840191505092915050565b600060208201905081810360008301526135f681846135a3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613629826135fe565b9050919050565b6136398161361e565b811461364457600080fd5b50565b60008135905061365681613630565b92915050565b6000806040838503121561367357613672613283565b5b600061368185828601613647565b9250506020613692858286016132ae565b9150509250929050565b600080604083850312156136b3576136b2613283565b5b60006136c1858286016132ae565b92505060206136d2858286016132ae565b9150509250929050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b6137258161328d565b82525050565b6000613737838361371c565b60208301905092915050565b6000602082019050919050565b613759816136fc565b6137638184613707565b925061376e82613712565b8060005b8381101561379f578151613786878261372b565b965061379183613743565b925050600181019050613772565b505050505050565b60006137b38383613750565b60608301905092915050565b6000602082019050919050565b6137d5816136dc565b6137df81846136e7565b92506137ea826136f2565b8060005b8381101561381b57815161380287826137a7565b965061380d836137bf565b9250506001810190506137ee565b505050505050565b60006101208201905061383960008301846137cc565b92915050565b60008115159050919050565b6138548161383f565b82525050565b600060208201905061386f600083018461384b565b92915050565b6000806040838503121561388c5761388b613283565b5b600061389a858286016132ae565b92505060206138ab85828601613647565b9150509250929050565b600080600080608085870312156138cf576138ce613283565b5b60006138dd878288016132ae565b94505060206138ee878288016132ae565b93505060406138ff878288016132ae565b9250506060613910878288016132ae565b91505092959194509250565b6139258161383f565b811461393057600080fd5b50565b6000813590506139428161391c565b92915050565b60006020828403121561395e5761395d613283565b5b600061396c84828501613933565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261399a57613999613975565b5b8235905067ffffffffffffffff8111156139b7576139b661397a565b5b6020830191508360208202830111156139d3576139d261397f565b5b9250929050565b600080602083850312156139f1576139f0613283565b5b600083013567ffffffffffffffff811115613a0f57613a0e613288565b5b613a1b85828601613984565b92509250509250929050565b60008060008060008060c08789031215613a4457613a43613283565b5b6000613a5289828a016133e4565b9650506020613a6389828a016133e4565b9550506040613a7489828a016133e4565b9450506060613a8589828a016133e4565b9350506080613a9689828a016133e4565b92505060a0613aa789828a016132ae565b9150509295509295509295565b613abd8161361e565b82525050565b6000602082019050613ad86000830184613ab4565b92915050565b60008060008060808587031215613af857613af7613283565b5b6000613b06878288016133e4565b9450506020613b17878288016133e4565b9350506040613b28878288016132ae565b9250506060613b39878288016132ae565b91505092959194509250565b6000819050919050565b6000613b6a613b65613b60846135fe565b613b45565b6135fe565b9050919050565b6000613b7c82613b4f565b9050919050565b6000613b8e82613b71565b9050919050565b613b9e81613b83565b82525050565b6000602082019050613bb96000830184613b95565b92915050565b600080600060608486031215613bd857613bd7613283565b5b6000613be6868287016132ae565b9350506020613bf7868287016132ae565b9250506040613c0886828701613647565b9150509250925092565b600080600060608486031215613c2b57613c2a613283565b5b6000613c39868287016132ae565b9350506020613c4a86828701613647565b9250506040613c5b868287016133e4565b9150509250925092565b600060208284031215613c7b57613c7a613283565b5b6000613c8984828501613647565b91505092915050565b60008060408385031215613ca957613ca8613283565b5b6000613cb7858286016133e4565b9250506020613cc8858286016132ae565b9150509250929050565b6000613cdd82613b71565b9050919050565b613ced81613cd2565b82525050565b6000602082019050613d086000830184613ce4565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d77826132f0565b915060ff8203613d8a57613d89613d3d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000613dcf826132f0565b9150613dda836132f0565b9250828201905060ff811115613df357613df2613d3d565b5b92915050565b6000613e048261328d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e3657613e35613d3d565b5b600182019050919050565b6000606082019050613e566000830186613ab4565b613e636020830185613ab4565b613e706040830184613335565b949350505050565b600081519050613e8781613297565b92915050565b600060208284031215613ea357613ea2613283565b5b6000613eb184828501613e78565b91505092915050565b6000613ec58261328d565b9150613ed08361328d565b9250828203905081811115613ee857613ee7613d3d565b5b92915050565b7f57696e6e696e6720416c726561647920436c61696d6564000000000000000000600082015250565b6000613f24601783613557565b9150613f2f82613eee565b602082019050919050565b60006020820190508181036000830152613f5381613f17565b9050919050565b7f526f756e64206d757374206265206f7665720000000000000000000000000000600082015250565b6000613f90601283613557565b9150613f9b82613f5a565b602082019050919050565b60006020820190508181036000830152613fbf81613f83565b9050919050565b6000613fd18261328d565b9150613fdc8361328d565b9250828201905080821115613ff457613ff3613d3d565b5b92915050565b7f596f7520636865636b2072657761726420666f722070726576696f757320726f60008201527f756e642061667465722061206e657720726f756e642073746172747300000000602082015250565b6000614056603c83613557565b915061406182613ffa565b604082019050919050565b6000602082019050818103600083015261408581614049565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140c68261328d565b91506140d18361328d565b9250826140e1576140e061408c565b5b828204905092915050565b60006140f78261328d565b91506141028361328d565b92508282026141108161328d565b9150828204841483151761412757614126613d3d565b5b5092915050565b60006040820190506141436000830185613ab4565b6141506020830184613ab4565b9392505050565b7f42657474696e67206973206e6f74206f70656e00000000000000000000000000600082015250565b600061418d601383613557565b915061419882614157565b602082019050919050565b600060208201905081810360008301526141bc81614180565b9050919050565b7f496e636f727265637420626f6f73742066656500000000000000000000000000600082015250565b60006141f9601383613557565b9150614204826141c3565b602082019050919050565b60006020820190508181036000830152614228816141ec565b9050919050565b7f526f756e64204f76657200000000000000000000000000000000000000000000600082015250565b6000614265600a83613557565b91506142708261422f565b602082019050919050565b6000602082019050818103600083015261429481614258565b9050919050565b7f496e76616c696420736964650000000000000000000000000000000000000000600082015250565b60006142d1600c83613557565b91506142dc8261429b565b602082019050919050565b60006020820190508181036000830152614300816142c4565b9050919050565b7f65786365656473206d6178000000000000000000000000000000000000000000600082015250565b600061433d600b83613557565b915061434882614307565b602082019050919050565b6000602082019050818103600083015261436c81614330565b9050919050565b7f426c6f636b204e6f7420417661696c61626c6500000000000000000000000000600082015250565b60006143a9601383613557565b91506143b482614373565b602082019050919050565b600060208201905081810360008301526143d88161439c565b9050919050565b7f426c6f636b2068617368206e6f7420617661696c61626c650000000000000000600082015250565b6000614415601883613557565b9150614420826143df565b602082019050919050565b6000602082019050818103600083015261444481614408565b9050919050565b60006144568261328d565b91506144618361328d565b9250826144715761447061408c565b5b828206905092915050565b7f496e76616c696420626f61726420706f736974696f6e2e000000000000000000600082015250565b60006144b2601783613557565b91506144bd8261447c565b602082019050919050565b600060208201905081810360008301526144e1816144a5565b9050919050565b7f506f736974696f6e20616c72656164792074616b656e206279206f776e20706960008201527f6563652e00000000000000000000000000000000000000000000000000000000602082015250565b6000614544602483613557565b915061454f826144e8565b604082019050919050565b6000602082019050818103600083015261457381614537565b9050919050565b7f526f756e64204e6f742043757272656e74000000000000000000000000000000600082015250565b60006145b0601183613557565b91506145bb8261457a565b602082019050919050565b600060208201905081810360008301526145df816145a3565b9050919050565b7f4d6f7665204e6f742043757272656e7400000000000000000000000000000000600082015250565b600061461c601083613557565b9150614627826145e6565b602082019050919050565b6000602082019050818103600083015261464b8161460f565b9050919050565b7f596f75206e65656420616374697665207374616b65206f6e207468697320736960008201527f646520746f20766f746500000000000000000000000000000000000000000000602082015250565b60006146ae602a83613557565b91506146b982614652565b604082019050919050565b600060208201905081810360008301526146dd816146a1565b9050919050565b7f596f7520416c726561647920566f746564000000000000000000000000000000600082015250565b600061471a601183613557565b9150614725826146e4565b602082019050919050565b600060208201905081810360008301526147498161470d565b9050919050565b7f496e76616c696420736964652e00000000000000000000000000000000000000600082015250565b6000614786600d83613557565b915061479182614750565b602082019050919050565b600060208201905081810360008301526147b581614779565b9050919050565b7f42657420616d6f756e742067726561746572207468616e206d696e696d756d2e600082015250565b60006147f2602083613557565b91506147fd826147bc565b602082019050919050565b60006020820190508181036000830152614821816147e5565b9050919050565b7f546f6f206c61746520746f206a6f696e00000000000000000000000000000000600082015250565b600061485e601083613557565b915061486982614828565b602082019050919050565b6000602082019050818103600083015261488d81614851565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148f0602683613557565b91506148fb82614894565b604082019050919050565b6000602082019050818103600083015261491f816148e3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061495c602083613557565b915061496782614926565b602082019050919050565b6000602082019050818103600083015261498b8161494f565b9050919050565b600061499d826132f0565b91506149a8836132f0565b9250828203905060ff8111156149c1576149c0613d3d565b5b92915050565b7f57616974696e6720666f72206469636520726f6c6c2c20706c6561736520776160008201527f6974203120626c6f636b00000000000000000000000000000000000000000000602082015250565b6000614a23602a83613557565b9150614a2e826149c7565b604082019050919050565b60006020820190508181036000830152614a5281614a16565b905091905056fea2646970667358221220aae4ba47c670ae0a5a96e83ac29c361de894a4bdeba1ab975880664bfe454e4a64736f6c63430008110033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

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.