CELO Price: $0.12 (+0.66%)
Gas: 25 GWei

Contract

0xD92BcD223Aa2A9818CbeB853b1d2beAa9eaf3008

Overview

CELO Balance

Celo Mainnet LogoCelo Mainnet LogoCelo Mainnet Logo0 CELO

CELO Value

$0.00

More Info

Private Name Tags

Multichain Info

Transaction Hash
Block
From
To
Forfeit Game513336182025-11-15 19:19:3670 days ago1763234376IN
0xD92BcD22...a9eaf3008
0 CELO0.0018458125.01
Make Move513335982025-11-15 19:19:1670 days ago1763234356IN
0xD92BcD22...a9eaf3008
0 CELO0.0027951125.01
Start Game513335542025-11-15 19:18:3270 days ago1763234312IN
0xD92BcD22...a9eaf3008
0 CELO0.0013785225.01
Forfeit Game513335452025-11-15 19:18:2370 days ago1763234303IN
0xD92BcD22...a9eaf3008
0 CELO0.0013481125.01
Make Move513335042025-11-15 19:17:4270 days ago1763234262IN
0xD92BcD22...a9eaf3008
0 CELO0.0028080225.01
Start Game513334992025-11-15 19:17:3770 days ago1763234257IN
0xD92BcD22...a9eaf3008
0 CELO0.0034925725.01
Forfeit Game513334432025-11-15 19:16:4170 days ago1763234201IN
0xD92BcD22...a9eaf3008
0 CELO0.0030587925.01
Start Game513327492025-11-15 19:05:0770 days ago1763233507IN
0xD92BcD22...a9eaf3008
0 CELO0.0005979825.01
Make Move513327042025-11-15 19:04:2270 days ago1763233462IN
0xD92BcD22...a9eaf3008
0 CELO0.0018576125.01
Make Move513326402025-11-15 19:03:1870 days ago1763233398IN
0xD92BcD22...a9eaf3008
0 CELO0.0027951125.01
Start Game513326202025-11-15 19:02:5870 days ago1763233378IN
0xD92BcD22...a9eaf3008
0 CELO0.0034925725.01
Forfeit Game513325682025-11-15 19:02:0670 days ago1763233326IN
0xD92BcD22...a9eaf3008
0 CELO0.0030587925.01
Make Move513323872025-11-15 18:59:0570 days ago1763233145IN
0xD92BcD22...a9eaf3008
0 CELO0.0023272825.01
Start Game513323762025-11-15 18:58:5470 days ago1763233134IN
0xD92BcD22...a9eaf3008
0 CELO0.0012784825.01
Forfeit Game513323142025-11-15 18:57:5270 days ago1763233072IN
0xD92BcD22...a9eaf3008
0 CELO0.0005965825.01
Make Move513322922025-11-15 18:57:3070 days ago1763233050IN
0xD92BcD22...a9eaf3008
0 CELO0.0026597825.01
Make Move513322422025-11-15 18:56:4070 days ago1763233000IN
0xD92BcD22...a9eaf3008
0 CELO0.0018340525.01
Make Move513322002025-11-15 18:55:5870 days ago1763232958IN
0xD92BcD22...a9eaf3008
0 CELO0.0027745825.01
Start Game513321922025-11-15 18:55:5070 days ago1763232950IN
0xD92BcD22...a9eaf3008
0 CELO0.0034925725.01
Forfeit Game513321512025-11-15 18:55:0970 days ago1763232909IN
0xD92BcD22...a9eaf3008
0 CELO0.0030587925.01
Forfeit Game513320652025-11-15 18:53:4370 days ago1763232823IN
0xD92BcD22...a9eaf3008
0 CELO0.0014176325.001
Start Game511378602025-11-13 12:56:5873 days ago1763038618IN
0xD92BcD22...a9eaf3008
0 CELO0.0005977725.001
Start Game511378202025-11-13 12:56:1873 days ago1763038578IN
0xD92BcD22...a9eaf3008
0 CELO0.0005977725.001
Start Game511336152025-11-13 11:46:1373 days ago1763034373IN
0xD92BcD22...a9eaf3008
0 CELO0.0005977725.001
Start Game511006482025-11-13 2:36:4673 days ago1763001406IN
0xD92BcD22...a9eaf3008
0 CELO0.0005977725.001

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TicTacToeSolo

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
cancun EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @title TicTacToeSolo
 * @dev Jeu de Tic Tac Toe en mode solo contre l'IA avec leaderboard
 */
contract TicTacToeSolo {
    
    // Structure pour une partie
    struct Game {
        address player;
        uint8[9] board; // 0 = vide, 1 = joueur (X), 2 = IA (O)
        uint8 currentTurn; // 1 = joueur, 2 = IA
        GameStatus status;
        uint256 startTime;
        uint256 endTime;
        uint8 moveCount;
    }
    
    // Statut du jeu
    enum GameStatus {
        Active,
        PlayerWin,
        AIWin,
        Draw,
        Abandoned
    }
    
    // Structure pour les statistiques d'un joueur
    struct PlayerStats {
        uint256 gamesPlayed;
        uint256 wins;
        uint256 losses;
        uint256 draws;
        uint256 totalMoves;
        uint256 fastestWin; // en secondes
        uint256 currentStreak;
        uint256 bestStreak;
    }
    
    // Structure pour le leaderboard
    struct LeaderboardEntry {
        address player;
        uint256 wins;
        uint256 winRate; // pourcentage * 100
        uint256 bestStreak;
        uint256 fastestWin;
    }
    
    // Mapping des parties actives
    mapping(address => Game) public activeGames;
    
    // Mapping des statistiques des joueurs
    mapping(address => PlayerStats) public playerStats;
    
    // Liste des joueurs pour le leaderboard
    address[] public players;
    mapping(address => bool) public hasPlayed;
    
    // Événements
    event GameStarted(address indexed player, uint256 timestamp);
    event MoveMade(address indexed player, uint8 position, uint8 playerType);
    event GameEnded(address indexed player, GameStatus status, uint256 duration);
    event NewRecord(address indexed player, string recordType, uint256 value);
    
    /**
     * @dev Démarre une nouvelle partie
     */
    function startGame() external {
        require(activeGames[msg.sender].status != GameStatus.Active, "Partie deja en cours");
        
        // Initialiser une nouvelle partie
        Game storage game = activeGames[msg.sender];
        game.player = msg.sender;
        game.board = [0, 0, 0, 0, 0, 0, 0, 0, 0];
        game.currentTurn = 1; // Le joueur commence
        game.status = GameStatus.Active;
        game.startTime = block.timestamp;
        game.moveCount = 0;
        
        // Ajouter le joueur à la liste si première partie
        if (!hasPlayed[msg.sender]) {
            players.push(msg.sender);
            hasPlayed[msg.sender] = true;
        }
        
        emit GameStarted(msg.sender, block.timestamp);
    }
    
    /**
     * @dev Le joueur fait un mouvement
     * @param position Position sur le plateau (0-8)
     */
    function makeMove(uint8 position) external {
        Game storage game = activeGames[msg.sender];
        
        require(game.status == GameStatus.Active, "Aucune partie active");
        require(game.currentTurn == 1, "Ce n'est pas votre tour");
        require(position < 9, "Position invalide");
        require(game.board[position] == 0, "Case deja occupee");
        
        // Placer le mouvement du joueur
        game.board[position] = 1;
        game.moveCount++;
        emit MoveMade(msg.sender, position, 1);
        
        // Vérifier si le joueur a gagné
        if (checkWin(game.board, 1)) {
            endGame(msg.sender, GameStatus.PlayerWin);
            return;
        }
        
        // Vérifier match nul
        if (game.moveCount == 9) {
            endGame(msg.sender, GameStatus.Draw);
            return;
        }
        
        // Tour de l'IA
        game.currentTurn = 2;
        makeAIMove(msg.sender);
    }
    
    /**
     * @dev L'IA fait son mouvement (logique simple)
     */
    function makeAIMove(address player) internal {
        Game storage game = activeGames[player];
        
        // Stratégie de l'IA: 
        // 1. Gagner si possible
        // 2. Bloquer le joueur s'il peut gagner
        // 3. Prendre le centre si disponible
        // 4. Prendre un coin
        // 5. Prendre n'importe quelle case
        
        uint8 move = findWinningMove(game.board, 2);
        if (move == 255) {
            move = findWinningMove(game.board, 1); // Bloquer
        }
        if (move == 255 && game.board[4] == 0) {
            move = 4; // Centre
        }
        if (move == 255) {
            uint8[4] memory corners = [0, 2, 6, 8];
            for (uint8 i = 0; i < 4; i++) {
                if (game.board[corners[i]] == 0) {
                    move = corners[i];
                    break;
                }
            }
        }
        if (move == 255) {
            for (uint8 i = 0; i < 9; i++) {
                if (game.board[i] == 0) {
                    move = i;
                    break;
                }
            }
        }
        
        game.board[move] = 2;
        game.moveCount++;
        emit MoveMade(player, move, 2);
        
        // Vérifier si l'IA a gagné
        if (checkWin(game.board, 2)) {
            endGame(player, GameStatus.AIWin);
            return;
        }
        
        // Vérifier match nul
        if (game.moveCount == 9) {
            endGame(player, GameStatus.Draw);
            return;
        }
        
        // Retour au tour du joueur
        game.currentTurn = 1;
    }
    
    /**
     * @dev Trouve un mouvement gagnant pour un joueur
     */
    function findWinningMove(uint8[9] memory board, uint8 player) internal pure returns (uint8) {
        for (uint8 i = 0; i < 9; i++) {
            if (board[i] == 0) {
                board[i] = player;
                if (checkWin(board, player)) {
                    return i;
                }
                board[i] = 0;
            }
        }
        return 255; // Pas de mouvement gagnant
    }
    
    /**
     * @dev Vérifie si un joueur a gagné
     */
    function checkWin(uint8[9] memory board, uint8 player) internal pure returns (bool) {
        // Lignes
        if (board[0] == player && board[1] == player && board[2] == player) return true;
        if (board[3] == player && board[4] == player && board[5] == player) return true;
        if (board[6] == player && board[7] == player && board[8] == player) return true;
        
        // Colonnes
        if (board[0] == player && board[3] == player && board[6] == player) return true;
        if (board[1] == player && board[4] == player && board[7] == player) return true;
        if (board[2] == player && board[5] == player && board[8] == player) return true;
        
        // Diagonales
        if (board[0] == player && board[4] == player && board[8] == player) return true;
        if (board[2] == player && board[4] == player && board[6] == player) return true;
        
        return false;
    }
    
    /**
     * @dev Termine une partie et met à jour les statistiques
     */
    function endGame(address player, GameStatus status) internal {
        Game storage game = activeGames[player];
        game.status = status;
        game.endTime = block.timestamp;
        
        uint256 duration = game.endTime - game.startTime;
        
        // Mettre à jour les statistiques
        PlayerStats storage stats = playerStats[player];
        stats.gamesPlayed++;
        stats.totalMoves += game.moveCount;
        
        if (status == GameStatus.PlayerWin) {
            stats.wins++;
            stats.currentStreak++;
            
            if (stats.currentStreak > stats.bestStreak) {
                stats.bestStreak = stats.currentStreak;
                emit NewRecord(player, "Meilleure serie", stats.bestStreak);
            }
            
            if (stats.fastestWin == 0 || duration < stats.fastestWin) {
                stats.fastestWin = duration;
                emit NewRecord(player, "Victoire la plus rapide", duration);
            }
        } else if (status == GameStatus.AIWin) {
            stats.losses++;
            stats.currentStreak = 0;
        } else if (status == GameStatus.Draw) {
            stats.draws++;
        }
        
        emit GameEnded(player, status, duration);
    }
    
    /**
     * @dev Abandonne la partie en cours
     */
    function forfeitGame() external {
        Game storage game = activeGames[msg.sender];
        require(game.status == GameStatus.Active, "Aucune partie active");
        
        endGame(msg.sender, GameStatus.Abandoned);
        playerStats[msg.sender].losses++;
        playerStats[msg.sender].currentStreak = 0;
    }
    
    /**
     * @dev Récupère le plateau de jeu actuel
     */
    function getBoard(address player) external view returns (uint8[9] memory) {
        return activeGames[player].board;
    }
    
    /**
     * @dev Récupère les statistiques d'un joueur
     */
    function getPlayerStats(address player) external view returns (
        uint256 gamesPlayed,
        uint256 wins,
        uint256 losses,
        uint256 draws,
        uint256 winRate,
        uint256 currentStreak,
        uint256 bestStreak,
        uint256 fastestWin
    ) {
        PlayerStats memory stats = playerStats[player];
        uint256 rate = 0;
        if (stats.gamesPlayed > 0) {
            rate = (stats.wins * 10000) / stats.gamesPlayed; // Winrate * 100
        }
        
        return (
            stats.gamesPlayed,
            stats.wins,
            stats.losses,
            stats.draws,
            rate,
            stats.currentStreak,
            stats.bestStreak,
            stats.fastestWin
        );
    }
    
    /**
     * @dev Récupère le leaderboard (top 10)
     */
    function getLeaderboard() external view returns (LeaderboardEntry[] memory) {
        uint256 playerCount = players.length;
        if (playerCount == 0) {
            return new LeaderboardEntry[](0);
        }
        
        uint256 size = playerCount > 10 ? 10 : playerCount;
        LeaderboardEntry[] memory leaderboard = new LeaderboardEntry[](playerCount);
        
        // Remplir le leaderboard
        for (uint256 i = 0; i < playerCount; i++) {
            address player = players[i];
            PlayerStats memory stats = playerStats[player];
            
            uint256 winRate = 0;
            if (stats.gamesPlayed > 0) {
                winRate = (stats.wins * 10000) / stats.gamesPlayed;
            }
            
            leaderboard[i] = LeaderboardEntry({
                player: player,
                wins: stats.wins,
                winRate: winRate,
                bestStreak: stats.bestStreak,
                fastestWin: stats.fastestWin
            });
        }
        
        // Tri par nombre de victoires (bubble sort simple)
        for (uint256 i = 0; i < playerCount - 1; i++) {
            for (uint256 j = 0; j < playerCount - i - 1; j++) {
                if (leaderboard[j].wins < leaderboard[j + 1].wins) {
                    LeaderboardEntry memory temp = leaderboard[j];
                    leaderboard[j] = leaderboard[j + 1];
                    leaderboard[j + 1] = temp;
                }
            }
        }
        
        // Retourner seulement le top 10
        LeaderboardEntry[] memory top10 = new LeaderboardEntry[](size);
        for (uint256 i = 0; i < size; i++) {
            top10[i] = leaderboard[i];
        }
        
        return top10;
    }
    
    /**
     * @dev Récupère le nombre total de joueurs
     */
    function getTotalPlayers() external view returns (uint256) {
        return players.length;
    }
}

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

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"enum TicTacToeSolo.GameStatus","name":"status","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"GameEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"GameStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8","name":"position","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"playerType","type":"uint8"}],"name":"MoveMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"string","name":"recordType","type":"string"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NewRecord","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"activeGames","outputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint8","name":"currentTurn","type":"uint8"},{"internalType":"enum TicTacToeSolo.GameStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint8","name":"moveCount","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forfeitGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getBoard","outputs":[{"internalType":"uint8[9]","name":"","type":"uint8[9]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLeaderboard","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"wins","type":"uint256"},{"internalType":"uint256","name":"winRate","type":"uint256"},{"internalType":"uint256","name":"bestStreak","type":"uint256"},{"internalType":"uint256","name":"fastestWin","type":"uint256"}],"internalType":"struct TicTacToeSolo.LeaderboardEntry[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getPlayerStats","outputs":[{"internalType":"uint256","name":"gamesPlayed","type":"uint256"},{"internalType":"uint256","name":"wins","type":"uint256"},{"internalType":"uint256","name":"losses","type":"uint256"},{"internalType":"uint256","name":"draws","type":"uint256"},{"internalType":"uint256","name":"winRate","type":"uint256"},{"internalType":"uint256","name":"currentStreak","type":"uint256"},{"internalType":"uint256","name":"bestStreak","type":"uint256"},{"internalType":"uint256","name":"fastestWin","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPlayers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasPlayed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"position","type":"uint8"}],"name":"makeMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerStats","outputs":[{"internalType":"uint256","name":"gamesPlayed","type":"uint256"},{"internalType":"uint256","name":"wins","type":"uint256"},{"internalType":"uint256","name":"losses","type":"uint256"},{"internalType":"uint256","name":"draws","type":"uint256"},{"internalType":"uint256","name":"totalMoves","type":"uint256"},{"internalType":"uint256","name":"fastestWin","type":"uint256"},{"internalType":"uint256","name":"currentStreak","type":"uint256"},{"internalType":"uint256","name":"bestStreak","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"players","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startGame","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f80fd5b50612a618061001d5f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c80637780ea1a1161006f5780637780ea1a1461016a5780639c62fbc614610174578063cdafbbb6146101a4578063d65ab5f2146101db578063d9169b77146101e5578063f71d96cb1461021a576100a7565b806332d0bbe3146100ab5780634529cae7146100db5780634fd66eae146100f9578063650271d2146101305780636d763a6e1461014c575b5f80fd5b6100c560048036038101906100c09190611f68565b61024a565b6040516100d29190611fad565b60405180910390f35b6100e3610267565b6040516100f09190611fde565b60405180910390f35b610113600480360381019061010e9190611f68565b610273565b604051610127989796959493929190611ff7565b60405180910390f35b61014a600480360381019061014591906120a9565b610385565b005b6101546106ea565b6040516101619190612200565b60405180910390f35b610172610b34565b005b61018e60048036038101906101899190611f68565b610c92565b60405161019b91906122c5565b60405180910390f35b6101be60048036038101906101b99190611f68565b610d40565b6040516101d2989796959493929190611ff7565b60405180910390f35b6101e3610d84565b005b6101ff60048036038101906101fa9190611f68565b6110e7565b60405161021196959493929190612370565b60405180910390f35b610234600480360381019061022f91906123f9565b611162565b6040516102419190612424565b60405180910390f35b6003602052805f5260405f205f915054906101000a900460ff1681565b5f600280549050905090565b5f805f805f805f805f60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051806101000160405290815f820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505090505f80825f0151111561034557815f01516127108360200151610338919061246a565b61034291906124d8565b90505b815f0151826020015183604001518460600151848660c001518760e001518860a00151995099509950995099509950995099505050919395975091939597565b5f805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f60048111156103d7576103d66122fd565b5b8160020160019054906101000a900460ff1660048111156103fb576103fa6122fd565b5b1461043b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043290612562565b60405180910390fd5b6001816002015f9054906101000a900460ff1660ff1614610491576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610488906125ca565b60405180910390fd5b60098260ff16106104d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ce90612632565b60405180910390fd5b5f816001018360ff16600981106104f1576104f0612650565b5b602091828204019190069054906101000a900460ff1660ff161461054a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610541906126c7565b60405180910390fd5b6001816001018360ff166009811061056557610564612650565b5b602091828204019190066101000a81548160ff021916908360ff160217905550806005015f81819054906101000a900460ff16809291906105a5906126e5565b91906101000a81548160ff021916908360ff160217905550503373ffffffffffffffffffffffffffffffffffffffff167f10ac166a969b6ae9b140c9d6b88c6c4e565e4fc22f858bf92f1542535f0f161a83600160405161060792919061274f565b60405180910390a261067d81600101600980602002604051908101604052809291908260098015610671576020028201915f905b82829054906101000a900460ff1660ff16815260200190600101906020825f0104928301926001038202915080841161063b5790505b5050505050600161119d565b156106935761068d3360016115ad565b506106e7565b6009816005015f9054906101000a900460ff1660ff16036106bf576106b93360036115ad565b506106e7565b6002816002015f6101000a81548160ff021916908360ff1602179055506106e5336118f4565b505b50565b60605f60028054905090505f8103610758575f67ffffffffffffffff81111561071657610715612776565b5b60405190808252806020026020018201604052801561074f57816020015b61073c611df5565b8152602001906001900390816107345790505b50915050610b31565b5f600a8211610767578161076a565b600a5b90505f8267ffffffffffffffff81111561078757610786612776565b5b6040519080825280602002602001820160405280156107c057816020015b6107ad611df5565b8152602001906001900390816107a55790505b5090505f5b8381101561094d575f600282815481106107e2576107e1612650565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051806101000160405290815f820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505090505f80825f015111156108d657815f015161271083602001516108c9919061246a565b6108d391906124d8565b90505b6040518060a001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836020015181526020018281526020018360e0015181526020018360a0015181525085858151811061093257610931612650565b5b602002602001018190525050505080806001019150506107c5565b505f5b60018461095d91906127a3565b811015610a80575f5b6001828661097491906127a3565b61097e91906127a3565b811015610a72578260018261099391906127d6565b815181106109a4576109a3612650565b5b6020026020010151602001518382815181106109c3576109c2612650565b5b6020026020010151602001511015610a65575f8382815181106109e9576109e8612650565b5b6020026020010151905083600183610a0191906127d6565b81518110610a1257610a11612650565b5b6020026020010151848381518110610a2d57610a2c612650565b5b60200260200101819052508084600184610a4791906127d6565b81518110610a5857610a57612650565b5b6020026020010181905250505b8080600101915050610966565b508080600101915050610950565b505f8267ffffffffffffffff811115610a9c57610a9b612776565b5b604051908082528060200260200182016040528015610ad557816020015b610ac2611df5565b815260200190600190039081610aba5790505b5090505f5b83811015610b2857828181518110610af557610af4612650565b5b6020026020010151828281518110610b1057610b0f612650565b5b60200260200101819052508080600101915050610ada565b50809450505050505b90565b5f805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f6004811115610b8657610b856122fd565b5b8160020160019054906101000a900460ff166004811115610baa57610ba96122fd565b5b14610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190612562565b60405180910390fd5b610bf53360046115ad565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015f815480929190610c4590612809565b91905055505f60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206006018190555050565b610c9a611e35565b5f808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101600980602002604051908101604052809291908260098015610d34576020028201915f905b82829054906101000a900460ff1660ff16815260200190600101906020825f01049283019260010382029150808411610cfe5790505b50505050509050919050565b6001602052805f5260405f205f91509050805f0154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b5f6004811115610d9757610d966122fd565b5b5f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020160019054906101000a900460ff166004811115610df657610df56122fd565b5b03610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d9061289a565b60405180910390fd5b5f805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20905033815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518061012001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681525081600101906009610f23929190611e58565b506001816002015f6101000a81548160ff021916908360ff1602179055505f8160020160016101000a81548160ff02191690836004811115610f6857610f676122fd565b5b02179055504281600301819055505f816005015f6101000a81548160ff021916908360ff16021790555060035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661109657600233908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c7426040516110dc9190611fde565b60405180910390a250565b5f602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015f9054906101000a900460ff16908060020160019054906101000a900460ff1690806003015490806004015490806005015f9054906101000a900460ff16905086565b60028181548110611171575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8160ff16835f600981106111b5576111b4612650565b5b602002015160ff161480156111e757508160ff16836001600981106111dd576111dc612650565b5b602002015160ff16145b801561121057508160ff168360026009811061120657611205612650565b5b602002015160ff16145b1561121e57600190506115a7565b8160ff168360036009811061123657611235612650565b5b602002015160ff1614801561126857508160ff168360046009811061125e5761125d612650565b5b602002015160ff16145b801561129157508160ff168360056009811061128757611286612650565b5b602002015160ff16145b1561129f57600190506115a7565b8160ff16836006600981106112b7576112b6612650565b5b602002015160ff161480156112e957508160ff16836007600981106112df576112de612650565b5b602002015160ff16145b801561131257508160ff168360086009811061130857611307612650565b5b602002015160ff16145b1561132057600190506115a7565b8160ff16835f6009811061133757611336612650565b5b602002015160ff1614801561136957508160ff168360036009811061135f5761135e612650565b5b602002015160ff16145b801561139257508160ff168360066009811061138857611387612650565b5b602002015160ff16145b156113a057600190506115a7565b8160ff16836001600981106113b8576113b7612650565b5b602002015160ff161480156113ea57508160ff16836004600981106113e0576113df612650565b5b602002015160ff16145b801561141357508160ff168360076009811061140957611408612650565b5b602002015160ff16145b1561142157600190506115a7565b8160ff168360026009811061143957611438612650565b5b602002015160ff1614801561146b57508160ff168360056009811061146157611460612650565b5b602002015160ff16145b801561149457508160ff168360086009811061148a57611489612650565b5b602002015160ff16145b156114a257600190506115a7565b8160ff16835f600981106114b9576114b8612650565b5b602002015160ff161480156114eb57508160ff16836004600981106114e1576114e0612650565b5b602002015160ff16145b801561151457508160ff168360086009811061150a57611509612650565b5b602002015160ff16145b1561152257600190506115a7565b8160ff168360026009811061153a57611539612650565b5b602002015160ff1614801561156c57508160ff168360046009811061156257611561612650565b5b602002015160ff16145b801561159557508160ff168360066009811061158b5761158a612650565b5b602002015160ff16145b156115a357600190506115a7565b5f90505b92915050565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050818160020160016101000a81548160ff02191690836004811115611613576116126122fd565b5b02179055504281600401819055505f8160030154826004015461163691906127a3565b90505f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050805f015f81548092919061168b90612809565b9190505550826005015f9054906101000a900460ff1660ff16816004015f8282546116b691906127d6565b92505081905550600160048111156116d1576116d06122fd565b5b8460048111156116e4576116e36122fd565b5b0361180257806001015f8154809291906116fd90612809565b9190505550806006015f81548092919061171690612809565b919050555080600701548160060154111561178b57806006015481600701819055508473ffffffffffffffffffffffffffffffffffffffff167f3124e8763b5542ea5c91a0d62d11244216b74ddca02c9178c28348611ae6dc7582600701546040516117829190612902565b60405180910390a25b5f816005015414806117a05750806005015482105b156117fd578181600501819055508473ffffffffffffffffffffffffffffffffffffffff167f3124e8763b5542ea5c91a0d62d11244216b74ddca02c9178c28348611ae6dc75836040516117f49190612978565b60405180910390a25b61189d565b60026004811115611816576118156122fd565b5b846004811115611829576118286122fd565b5b0361185557806002015f81548092919061184290612809565b91905055505f816006018190555061189c565b60036004811115611869576118686122fd565b5b84600481111561187c5761187b6122fd565b5b0361189b57806003015f81548092919061189590612809565b91905055505b5b5b8473ffffffffffffffffffffffffffffffffffffffff167ff24fb46c2712b3949a9ece1c3b55f45bf00d3094026aa4247232a46e7d24c12485846040516118e59291906129a4565b60405180910390a25050505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f6119a282600101600980602002604051908101604052809291908260098015611996576020028201915f905b82829054906101000a900460ff1660ff16815260200190600101906020825f010492830192600103820291508084116119605790505b50505050506002611d3d565b905060ff8160ff1603611a2057611a1d82600101600980602002604051908101604052809291908260098015611a11576020028201915f905b82829054906101000a900460ff1660ff16815260200190600101906020825f010492830192600103820291508084116119db5790505b50505050506001611d3d565b90505b60ff8160ff16148015611a6157505f82600101600460098110611a4657611a45612650565b5b602091828204019190069054906101000a900460ff1660ff16145b15611a6b57600490505b60ff8160ff1603611b3b575f60405180608001604052805f60ff168152602001600260ff168152602001600660ff168152602001600860ff1681525090505f5b60048160ff161015611b38575f84600101838360ff1660048110611ad257611ad1612650565b5b602002015160ff1660098110611aeb57611aea612650565b5b602091828204019190069054906101000a900460ff1660ff1603611b2b57818160ff1660048110611b1f57611b1e612650565b5b60200201519250611b38565b8080600101915050611aab565b50505b60ff8160ff1603611ba3575f5b60098160ff161015611ba1575f836001018260ff1660098110611b6e57611b6d612650565b5b602091828204019190069054906101000a900460ff1660ff1603611b9457809150611ba1565b8080600101915050611b48565b505b6002826001018260ff1660098110611bbe57611bbd612650565b5b602091828204019190066101000a81548160ff021916908360ff160217905550816005015f81819054906101000a900460ff1680929190611bfe906126e5565b91906101000a81548160ff021916908360ff160217905550508273ffffffffffffffffffffffffffffffffffffffff167f10ac166a969b6ae9b140c9d6b88c6c4e565e4fc22f858bf92f1542535f0f161a826002604051611c60929190612a04565b60405180910390a2611cd682600101600980602002604051908101604052809291908260098015611cca576020028201915f905b82829054906101000a900460ff1660ff16815260200190600101906020825f01049283019260010382029150808411611c945790505b5050505050600261119d565b15611ced57611ce68360026115ad565b5050611d3a565b6009826005015f9054906101000a900460ff1660ff1603611d1a57611d138360036115ad565b5050611d3a565b6001826002015f6101000a81548160ff021916908360ff16021790555050505b50565b5f805f90505b60098160ff161015611de9575f848260ff1660098110611d6657611d65612650565b5b602002015160ff1603611ddc5782848260ff1660098110611d8a57611d89612650565b5b602002019060ff16908160ff1681525050611da5848461119d565b15611db35780915050611def565b5f848260ff1660098110611dca57611dc9612650565b5b602002019060ff16908160ff16815250505b8080600101915050611d43565b5060ff90505b92915050565b6040518060a001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81525090565b604051806101200160405280600990602082028036833780820191505090505090565b826009601f01602090048101928215611ede579160200282015f5b83821115611eb057835183826101000a81548160ff021916908360ff16021790555092602001926001016020815f01049283019260010302611e73565b8015611edc5782816101000a81549060ff02191690556001016020815f01049283019260010302611eb0565b505b509050611eeb9190611eef565b5090565b5b80821115611f06575f815f905550600101611ef0565b5090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611f3782611f0e565b9050919050565b611f4781611f2d565b8114611f51575f80fd5b50565b5f81359050611f6281611f3e565b92915050565b5f60208284031215611f7d57611f7c611f0a565b5b5f611f8a84828501611f54565b91505092915050565b5f8115159050919050565b611fa781611f93565b82525050565b5f602082019050611fc05f830184611f9e565b92915050565b5f819050919050565b611fd881611fc6565b82525050565b5f602082019050611ff15f830184611fcf565b92915050565b5f6101008201905061200b5f83018b611fcf565b612018602083018a611fcf565b6120256040830189611fcf565b6120326060830188611fcf565b61203f6080830187611fcf565b61204c60a0830186611fcf565b61205960c0830185611fcf565b61206660e0830184611fcf565b9998505050505050505050565b5f60ff82169050919050565b61208881612073565b8114612092575f80fd5b50565b5f813590506120a38161207f565b92915050565b5f602082840312156120be576120bd611f0a565b5b5f6120cb84828501612095565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61210681611f2d565b82525050565b61211581611fc6565b82525050565b60a082015f82015161212f5f8501826120fd565b506020820151612142602085018261210c565b506040820151612155604085018261210c565b506060820151612168606085018261210c565b50608082015161217b608085018261210c565b50505050565b5f61218c838361211b565b60a08301905092915050565b5f602082019050919050565b5f6121ae826120d4565b6121b881856120de565b93506121c3836120ee565b805f5b838110156121f35781516121da8882612181565b97506121e583612198565b9250506001810190506121c6565b5085935050505092915050565b5f6020820190508181035f83015261221881846121a4565b905092915050565b5f60099050919050565b5f81905092915050565b5f819050919050565b61224681612073565b82525050565b5f612257838361223d565b60208301905092915050565b5f602082019050919050565b61227881612220565b612282818461222a565b925061228d82612234565b805f5b838110156122bd5781516122a4878261224c565b96506122af83612263565b925050600181019050612290565b505050505050565b5f610120820190506122d95f83018461226f565b92915050565b6122e881611f2d565b82525050565b6122f781612073565b82525050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6005811061233b5761233a6122fd565b5b50565b5f81905061234b8261232a565b919050565b5f61235a8261233e565b9050919050565b61236a81612350565b82525050565b5f60c0820190506123835f8301896122df565b61239060208301886122ee565b61239d6040830187612361565b6123aa6060830186611fcf565b6123b76080830185611fcf565b6123c460a08301846122ee565b979650505050505050565b6123d881611fc6565b81146123e2575f80fd5b50565b5f813590506123f3816123cf565b92915050565b5f6020828403121561240e5761240d611f0a565b5b5f61241b848285016123e5565b91505092915050565b5f6020820190506124375f8301846122df565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61247482611fc6565b915061247f83611fc6565b925082820261248d81611fc6565b915082820484148315176124a4576124a361243d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6124e282611fc6565b91506124ed83611fc6565b9250826124fd576124fc6124ab565b5b828204905092915050565b5f82825260208201905092915050565b7f417563756e6520706172746965206163746976650000000000000000000000005f82015250565b5f61254c601483612508565b915061255782612518565b602082019050919050565b5f6020820190508181035f83015261257981612540565b9050919050565b7f4365206e276573742070617320766f74726520746f75720000000000000000005f82015250565b5f6125b4601783612508565b91506125bf82612580565b602082019050919050565b5f6020820190508181035f8301526125e1816125a8565b9050919050565b7f506f736974696f6e20696e76616c6964650000000000000000000000000000005f82015250565b5f61261c601183612508565b9150612627826125e8565b602082019050919050565b5f6020820190508181035f83015261264981612610565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f436173652064656a61206f6363757065650000000000000000000000000000005f82015250565b5f6126b1601183612508565b91506126bc8261267d565b602082019050919050565b5f6020820190508181035f8301526126de816126a5565b9050919050565b5f6126ef82612073565b915060ff82036127025761270161243d565b5b600182019050919050565b5f819050919050565b5f819050919050565b5f61273961273461272f8461270d565b612716565b612073565b9050919050565b6127498161271f565b82525050565b5f6040820190506127625f8301856122ee565b61276f6020830184612740565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6127ad82611fc6565b91506127b883611fc6565b92508282039050818111156127d0576127cf61243d565b5b92915050565b5f6127e082611fc6565b91506127eb83611fc6565b92508282019050808211156128035761280261243d565b5b92915050565b5f61281382611fc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128455761284461243d565b5b600182019050919050565b7f5061727469652064656a6120656e20636f7572730000000000000000000000005f82015250565b5f612884601483612508565b915061288f82612850565b602082019050919050565b5f6020820190508181035f8301526128b181612878565b9050919050565b7f4d65696c6c6575726520736572696500000000000000000000000000000000005f82015250565b5f6128ec600f83612508565b91506128f7826128b8565b602082019050919050565b5f6040820190508181035f830152612919816128e0565b90506129286020830184611fcf565b92915050565b7f566963746f697265206c6120706c7573207261706964650000000000000000005f82015250565b5f612962601783612508565b915061296d8261292e565b602082019050919050565b5f6040820190508181035f83015261298f81612956565b905061299e6020830184611fcf565b92915050565b5f6040820190506129b75f830185612361565b6129c46020830184611fcf565b9392505050565b5f819050919050565b5f6129ee6129e96129e4846129cb565b612716565b612073565b9050919050565b6129fe816129d4565b82525050565b5f604082019050612a175f8301856122ee565b612a2460208301846129f5565b939250505056fea2646970667358221220840cf2bc3b79362720534324ad13f3ce86d846837919a502cd303aacf23224c664736f6c63430008180033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100a7575f3560e01c80637780ea1a1161006f5780637780ea1a1461016a5780639c62fbc614610174578063cdafbbb6146101a4578063d65ab5f2146101db578063d9169b77146101e5578063f71d96cb1461021a576100a7565b806332d0bbe3146100ab5780634529cae7146100db5780634fd66eae146100f9578063650271d2146101305780636d763a6e1461014c575b5f80fd5b6100c560048036038101906100c09190611f68565b61024a565b6040516100d29190611fad565b60405180910390f35b6100e3610267565b6040516100f09190611fde565b60405180910390f35b610113600480360381019061010e9190611f68565b610273565b604051610127989796959493929190611ff7565b60405180910390f35b61014a600480360381019061014591906120a9565b610385565b005b6101546106ea565b6040516101619190612200565b60405180910390f35b610172610b34565b005b61018e60048036038101906101899190611f68565b610c92565b60405161019b91906122c5565b60405180910390f35b6101be60048036038101906101b99190611f68565b610d40565b6040516101d2989796959493929190611ff7565b60405180910390f35b6101e3610d84565b005b6101ff60048036038101906101fa9190611f68565b6110e7565b60405161021196959493929190612370565b60405180910390f35b610234600480360381019061022f91906123f9565b611162565b6040516102419190612424565b60405180910390f35b6003602052805f5260405f205f915054906101000a900460ff1681565b5f600280549050905090565b5f805f805f805f805f60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051806101000160405290815f820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505090505f80825f0151111561034557815f01516127108360200151610338919061246a565b61034291906124d8565b90505b815f0151826020015183604001518460600151848660c001518760e001518860a00151995099509950995099509950995099505050919395975091939597565b5f805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f60048111156103d7576103d66122fd565b5b8160020160019054906101000a900460ff1660048111156103fb576103fa6122fd565b5b1461043b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043290612562565b60405180910390fd5b6001816002015f9054906101000a900460ff1660ff1614610491576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610488906125ca565b60405180910390fd5b60098260ff16106104d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ce90612632565b60405180910390fd5b5f816001018360ff16600981106104f1576104f0612650565b5b602091828204019190069054906101000a900460ff1660ff161461054a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610541906126c7565b60405180910390fd5b6001816001018360ff166009811061056557610564612650565b5b602091828204019190066101000a81548160ff021916908360ff160217905550806005015f81819054906101000a900460ff16809291906105a5906126e5565b91906101000a81548160ff021916908360ff160217905550503373ffffffffffffffffffffffffffffffffffffffff167f10ac166a969b6ae9b140c9d6b88c6c4e565e4fc22f858bf92f1542535f0f161a83600160405161060792919061274f565b60405180910390a261067d81600101600980602002604051908101604052809291908260098015610671576020028201915f905b82829054906101000a900460ff1660ff16815260200190600101906020825f0104928301926001038202915080841161063b5790505b5050505050600161119d565b156106935761068d3360016115ad565b506106e7565b6009816005015f9054906101000a900460ff1660ff16036106bf576106b93360036115ad565b506106e7565b6002816002015f6101000a81548160ff021916908360ff1602179055506106e5336118f4565b505b50565b60605f60028054905090505f8103610758575f67ffffffffffffffff81111561071657610715612776565b5b60405190808252806020026020018201604052801561074f57816020015b61073c611df5565b8152602001906001900390816107345790505b50915050610b31565b5f600a8211610767578161076a565b600a5b90505f8267ffffffffffffffff81111561078757610786612776565b5b6040519080825280602002602001820160405280156107c057816020015b6107ad611df5565b8152602001906001900390816107a55790505b5090505f5b8381101561094d575f600282815481106107e2576107e1612650565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051806101000160405290815f820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505090505f80825f015111156108d657815f015161271083602001516108c9919061246a565b6108d391906124d8565b90505b6040518060a001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836020015181526020018281526020018360e0015181526020018360a0015181525085858151811061093257610931612650565b5b602002602001018190525050505080806001019150506107c5565b505f5b60018461095d91906127a3565b811015610a80575f5b6001828661097491906127a3565b61097e91906127a3565b811015610a72578260018261099391906127d6565b815181106109a4576109a3612650565b5b6020026020010151602001518382815181106109c3576109c2612650565b5b6020026020010151602001511015610a65575f8382815181106109e9576109e8612650565b5b6020026020010151905083600183610a0191906127d6565b81518110610a1257610a11612650565b5b6020026020010151848381518110610a2d57610a2c612650565b5b60200260200101819052508084600184610a4791906127d6565b81518110610a5857610a57612650565b5b6020026020010181905250505b8080600101915050610966565b508080600101915050610950565b505f8267ffffffffffffffff811115610a9c57610a9b612776565b5b604051908082528060200260200182016040528015610ad557816020015b610ac2611df5565b815260200190600190039081610aba5790505b5090505f5b83811015610b2857828181518110610af557610af4612650565b5b6020026020010151828281518110610b1057610b0f612650565b5b60200260200101819052508080600101915050610ada565b50809450505050505b90565b5f805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f6004811115610b8657610b856122fd565b5b8160020160019054906101000a900460ff166004811115610baa57610ba96122fd565b5b14610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190612562565b60405180910390fd5b610bf53360046115ad565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015f815480929190610c4590612809565b91905055505f60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206006018190555050565b610c9a611e35565b5f808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101600980602002604051908101604052809291908260098015610d34576020028201915f905b82829054906101000a900460ff1660ff16815260200190600101906020825f01049283019260010382029150808411610cfe5790505b50505050509050919050565b6001602052805f5260405f205f91509050805f0154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b5f6004811115610d9757610d966122fd565b5b5f803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020160019054906101000a900460ff166004811115610df657610df56122fd565b5b03610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d9061289a565b60405180910390fd5b5f805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20905033815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518061012001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681525081600101906009610f23929190611e58565b506001816002015f6101000a81548160ff021916908360ff1602179055505f8160020160016101000a81548160ff02191690836004811115610f6857610f676122fd565b5b02179055504281600301819055505f816005015f6101000a81548160ff021916908360ff16021790555060035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661109657600233908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c7426040516110dc9190611fde565b60405180910390a250565b5f602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015f9054906101000a900460ff16908060020160019054906101000a900460ff1690806003015490806004015490806005015f9054906101000a900460ff16905086565b60028181548110611171575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8160ff16835f600981106111b5576111b4612650565b5b602002015160ff161480156111e757508160ff16836001600981106111dd576111dc612650565b5b602002015160ff16145b801561121057508160ff168360026009811061120657611205612650565b5b602002015160ff16145b1561121e57600190506115a7565b8160ff168360036009811061123657611235612650565b5b602002015160ff1614801561126857508160ff168360046009811061125e5761125d612650565b5b602002015160ff16145b801561129157508160ff168360056009811061128757611286612650565b5b602002015160ff16145b1561129f57600190506115a7565b8160ff16836006600981106112b7576112b6612650565b5b602002015160ff161480156112e957508160ff16836007600981106112df576112de612650565b5b602002015160ff16145b801561131257508160ff168360086009811061130857611307612650565b5b602002015160ff16145b1561132057600190506115a7565b8160ff16835f6009811061133757611336612650565b5b602002015160ff1614801561136957508160ff168360036009811061135f5761135e612650565b5b602002015160ff16145b801561139257508160ff168360066009811061138857611387612650565b5b602002015160ff16145b156113a057600190506115a7565b8160ff16836001600981106113b8576113b7612650565b5b602002015160ff161480156113ea57508160ff16836004600981106113e0576113df612650565b5b602002015160ff16145b801561141357508160ff168360076009811061140957611408612650565b5b602002015160ff16145b1561142157600190506115a7565b8160ff168360026009811061143957611438612650565b5b602002015160ff1614801561146b57508160ff168360056009811061146157611460612650565b5b602002015160ff16145b801561149457508160ff168360086009811061148a57611489612650565b5b602002015160ff16145b156114a257600190506115a7565b8160ff16835f600981106114b9576114b8612650565b5b602002015160ff161480156114eb57508160ff16836004600981106114e1576114e0612650565b5b602002015160ff16145b801561151457508160ff168360086009811061150a57611509612650565b5b602002015160ff16145b1561152257600190506115a7565b8160ff168360026009811061153a57611539612650565b5b602002015160ff1614801561156c57508160ff168360046009811061156257611561612650565b5b602002015160ff16145b801561159557508160ff168360066009811061158b5761158a612650565b5b602002015160ff16145b156115a357600190506115a7565b5f90505b92915050565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050818160020160016101000a81548160ff02191690836004811115611613576116126122fd565b5b02179055504281600401819055505f8160030154826004015461163691906127a3565b90505f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050805f015f81548092919061168b90612809565b9190505550826005015f9054906101000a900460ff1660ff16816004015f8282546116b691906127d6565b92505081905550600160048111156116d1576116d06122fd565b5b8460048111156116e4576116e36122fd565b5b0361180257806001015f8154809291906116fd90612809565b9190505550806006015f81548092919061171690612809565b919050555080600701548160060154111561178b57806006015481600701819055508473ffffffffffffffffffffffffffffffffffffffff167f3124e8763b5542ea5c91a0d62d11244216b74ddca02c9178c28348611ae6dc7582600701546040516117829190612902565b60405180910390a25b5f816005015414806117a05750806005015482105b156117fd578181600501819055508473ffffffffffffffffffffffffffffffffffffffff167f3124e8763b5542ea5c91a0d62d11244216b74ddca02c9178c28348611ae6dc75836040516117f49190612978565b60405180910390a25b61189d565b60026004811115611816576118156122fd565b5b846004811115611829576118286122fd565b5b0361185557806002015f81548092919061184290612809565b91905055505f816006018190555061189c565b60036004811115611869576118686122fd565b5b84600481111561187c5761187b6122fd565b5b0361189b57806003015f81548092919061189590612809565b91905055505b5b5b8473ffffffffffffffffffffffffffffffffffffffff167ff24fb46c2712b3949a9ece1c3b55f45bf00d3094026aa4247232a46e7d24c12485846040516118e59291906129a4565b60405180910390a25050505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f6119a282600101600980602002604051908101604052809291908260098015611996576020028201915f905b82829054906101000a900460ff1660ff16815260200190600101906020825f010492830192600103820291508084116119605790505b50505050506002611d3d565b905060ff8160ff1603611a2057611a1d82600101600980602002604051908101604052809291908260098015611a11576020028201915f905b82829054906101000a900460ff1660ff16815260200190600101906020825f010492830192600103820291508084116119db5790505b50505050506001611d3d565b90505b60ff8160ff16148015611a6157505f82600101600460098110611a4657611a45612650565b5b602091828204019190069054906101000a900460ff1660ff16145b15611a6b57600490505b60ff8160ff1603611b3b575f60405180608001604052805f60ff168152602001600260ff168152602001600660ff168152602001600860ff1681525090505f5b60048160ff161015611b38575f84600101838360ff1660048110611ad257611ad1612650565b5b602002015160ff1660098110611aeb57611aea612650565b5b602091828204019190069054906101000a900460ff1660ff1603611b2b57818160ff1660048110611b1f57611b1e612650565b5b60200201519250611b38565b8080600101915050611aab565b50505b60ff8160ff1603611ba3575f5b60098160ff161015611ba1575f836001018260ff1660098110611b6e57611b6d612650565b5b602091828204019190069054906101000a900460ff1660ff1603611b9457809150611ba1565b8080600101915050611b48565b505b6002826001018260ff1660098110611bbe57611bbd612650565b5b602091828204019190066101000a81548160ff021916908360ff160217905550816005015f81819054906101000a900460ff1680929190611bfe906126e5565b91906101000a81548160ff021916908360ff160217905550508273ffffffffffffffffffffffffffffffffffffffff167f10ac166a969b6ae9b140c9d6b88c6c4e565e4fc22f858bf92f1542535f0f161a826002604051611c60929190612a04565b60405180910390a2611cd682600101600980602002604051908101604052809291908260098015611cca576020028201915f905b82829054906101000a900460ff1660ff16815260200190600101906020825f01049283019260010382029150808411611c945790505b5050505050600261119d565b15611ced57611ce68360026115ad565b5050611d3a565b6009826005015f9054906101000a900460ff1660ff1603611d1a57611d138360036115ad565b5050611d3a565b6001826002015f6101000a81548160ff021916908360ff16021790555050505b50565b5f805f90505b60098160ff161015611de9575f848260ff1660098110611d6657611d65612650565b5b602002015160ff1603611ddc5782848260ff1660098110611d8a57611d89612650565b5b602002019060ff16908160ff1681525050611da5848461119d565b15611db35780915050611def565b5f848260ff1660098110611dca57611dc9612650565b5b602002019060ff16908160ff16815250505b8080600101915050611d43565b5060ff90505b92915050565b6040518060a001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81525090565b604051806101200160405280600990602082028036833780820191505090505090565b826009601f01602090048101928215611ede579160200282015f5b83821115611eb057835183826101000a81548160ff021916908360ff16021790555092602001926001016020815f01049283019260010302611e73565b8015611edc5782816101000a81549060ff02191690556001016020815f01049283019260010302611eb0565b505b509050611eeb9190611eef565b5090565b5b80821115611f06575f815f905550600101611ef0565b5090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611f3782611f0e565b9050919050565b611f4781611f2d565b8114611f51575f80fd5b50565b5f81359050611f6281611f3e565b92915050565b5f60208284031215611f7d57611f7c611f0a565b5b5f611f8a84828501611f54565b91505092915050565b5f8115159050919050565b611fa781611f93565b82525050565b5f602082019050611fc05f830184611f9e565b92915050565b5f819050919050565b611fd881611fc6565b82525050565b5f602082019050611ff15f830184611fcf565b92915050565b5f6101008201905061200b5f83018b611fcf565b612018602083018a611fcf565b6120256040830189611fcf565b6120326060830188611fcf565b61203f6080830187611fcf565b61204c60a0830186611fcf565b61205960c0830185611fcf565b61206660e0830184611fcf565b9998505050505050505050565b5f60ff82169050919050565b61208881612073565b8114612092575f80fd5b50565b5f813590506120a38161207f565b92915050565b5f602082840312156120be576120bd611f0a565b5b5f6120cb84828501612095565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61210681611f2d565b82525050565b61211581611fc6565b82525050565b60a082015f82015161212f5f8501826120fd565b506020820151612142602085018261210c565b506040820151612155604085018261210c565b506060820151612168606085018261210c565b50608082015161217b608085018261210c565b50505050565b5f61218c838361211b565b60a08301905092915050565b5f602082019050919050565b5f6121ae826120d4565b6121b881856120de565b93506121c3836120ee565b805f5b838110156121f35781516121da8882612181565b97506121e583612198565b9250506001810190506121c6565b5085935050505092915050565b5f6020820190508181035f83015261221881846121a4565b905092915050565b5f60099050919050565b5f81905092915050565b5f819050919050565b61224681612073565b82525050565b5f612257838361223d565b60208301905092915050565b5f602082019050919050565b61227881612220565b612282818461222a565b925061228d82612234565b805f5b838110156122bd5781516122a4878261224c565b96506122af83612263565b925050600181019050612290565b505050505050565b5f610120820190506122d95f83018461226f565b92915050565b6122e881611f2d565b82525050565b6122f781612073565b82525050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6005811061233b5761233a6122fd565b5b50565b5f81905061234b8261232a565b919050565b5f61235a8261233e565b9050919050565b61236a81612350565b82525050565b5f60c0820190506123835f8301896122df565b61239060208301886122ee565b61239d6040830187612361565b6123aa6060830186611fcf565b6123b76080830185611fcf565b6123c460a08301846122ee565b979650505050505050565b6123d881611fc6565b81146123e2575f80fd5b50565b5f813590506123f3816123cf565b92915050565b5f6020828403121561240e5761240d611f0a565b5b5f61241b848285016123e5565b91505092915050565b5f6020820190506124375f8301846122df565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61247482611fc6565b915061247f83611fc6565b925082820261248d81611fc6565b915082820484148315176124a4576124a361243d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6124e282611fc6565b91506124ed83611fc6565b9250826124fd576124fc6124ab565b5b828204905092915050565b5f82825260208201905092915050565b7f417563756e6520706172746965206163746976650000000000000000000000005f82015250565b5f61254c601483612508565b915061255782612518565b602082019050919050565b5f6020820190508181035f83015261257981612540565b9050919050565b7f4365206e276573742070617320766f74726520746f75720000000000000000005f82015250565b5f6125b4601783612508565b91506125bf82612580565b602082019050919050565b5f6020820190508181035f8301526125e1816125a8565b9050919050565b7f506f736974696f6e20696e76616c6964650000000000000000000000000000005f82015250565b5f61261c601183612508565b9150612627826125e8565b602082019050919050565b5f6020820190508181035f83015261264981612610565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f436173652064656a61206f6363757065650000000000000000000000000000005f82015250565b5f6126b1601183612508565b91506126bc8261267d565b602082019050919050565b5f6020820190508181035f8301526126de816126a5565b9050919050565b5f6126ef82612073565b915060ff82036127025761270161243d565b5b600182019050919050565b5f819050919050565b5f819050919050565b5f61273961273461272f8461270d565b612716565b612073565b9050919050565b6127498161271f565b82525050565b5f6040820190506127625f8301856122ee565b61276f6020830184612740565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6127ad82611fc6565b91506127b883611fc6565b92508282039050818111156127d0576127cf61243d565b5b92915050565b5f6127e082611fc6565b91506127eb83611fc6565b92508282019050808211156128035761280261243d565b5b92915050565b5f61281382611fc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128455761284461243d565b5b600182019050919050565b7f5061727469652064656a6120656e20636f7572730000000000000000000000005f82015250565b5f612884601483612508565b915061288f82612850565b602082019050919050565b5f6020820190508181035f8301526128b181612878565b9050919050565b7f4d65696c6c6575726520736572696500000000000000000000000000000000005f82015250565b5f6128ec600f83612508565b91506128f7826128b8565b602082019050919050565b5f6040820190508181035f830152612919816128e0565b90506129286020830184611fcf565b92915050565b7f566963746f697265206c6120706c7573207261706964650000000000000000005f82015250565b5f612962601783612508565b915061296d8261292e565b602082019050919050565b5f6040820190508181035f83015261298f81612956565b905061299e6020830184611fcf565b92915050565b5f6040820190506129b75f830185612361565b6129c46020830184611fcf565b9392505050565b5f819050919050565b5f6129ee6129e96129e4846129cb565b612716565b612073565b9050919050565b6129fe816129d4565b82525050565b5f604082019050612a175f8301856122ee565b612a2460208301846129f5565b939250505056fea2646970667358221220840cf2bc3b79362720534324ad13f3ce86d846837919a502cd303aacf23224c664736f6c63430008180033

Block Transaction 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
0xD92BcD223Aa2A9818CbeB853b1d2beAa9eaf3008
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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