- 吐吐很快乐
AI做的五子棋
- 2025-5-4 12:20:14 @
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>搞笑技能五子棋</title>
<style>
body {
display: flex;
flex-direction: column;
align-items: center;
font-family: 'Comic Sans MS', cursive, sans-serif;
background-color: #f5f5dc;
margin: 0;
padding: 20px;
background-image: url('https://img.freepik.com/free-vector/hand-drawn-abstract-doodle-pattern_23-2149098546.jpg');
background-size: 30%;
background-opacity: 0.1;
}
h1 {
color: #FF6B6B;
margin-bottom: 10px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
font-size: 2.5em;
}
#game-container {
display: flex;
gap: 20px;
margin-bottom: 20px;
}
#game-info {
margin-bottom: 15px;
font-size: 20px;
color: #333;
background-color: #FFF9C4;
padding: 10px 20px;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
#board {
display: grid;
grid-template-columns: repeat(15, 30px);
grid-template-rows: repeat(15, 30px);
background-color: #deb887;
border: 4px solid #8b4513;
position: relative;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
}
.cell {
width: 30px;
height: 30px;
box-sizing: border-box;
position: relative;
cursor: pointer;
transition: all 0.2s;
}
.cell:hover {
background-color: rgba(255, 255, 255, 0.3);
}
.cell::before, .cell::after {
content: '';
position: absolute;
background-color: #000;
}
.cell::before {
width: 100%;
height: 1px;
top: 50%;
left: 0;
transform: translateY(-50%);
}
.cell::after {
width: 1px;
height: 100%;
left: 50%;
top: 0;
transform: translateX(-50%);
}
.stone {
position: absolute;
width: 26px;
height: 26px;
border-radius: 50%;
top: 2px;
left: 2px;
z-index: 1;
transition: all 0.3s;
}
.black {
background: radial-gradient(circle at 30% 30%, #666, #000);
box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8);
}
.white {
background: radial-gradient(circle at 30% 30%, #fff, #ccc);
box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5);
}
#skills-panel {
width: 200px;
background-color: #E3F2FD;
padding: 15px;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
.skill-card {
background-color: white;
border-radius: 8px;
padding: 10px;
margin-bottom: 10px;
cursor: pointer;
transition: all 0.3s;
border: 2px dashed transparent;
text-align: center;
font-size: 14px;
}
.skill-card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
.skill-card.active {
border-color: #FF9800;
background-color: #FFF9C4;
}
.skill-card.disabled {
opacity: 0.5;
cursor: not-allowed;
}
#restart-btn {
margin-top: 20px;
padding: 12px 25px;
font-size: 18px;
background-color: #FF6B6B;
color: white;
border: none;
border-radius: 50px;
cursor: pointer;
transition: all 0.3s;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}
#restart-btn:hover {
background-color: #FF5252;
transform: scale(1.05);
}
.effect-text {
position: absolute;
font-size: 24px;
font-weight: bold;
color: #FF4081;
z-index: 10;
animation: floatUp 1.5s forwards;
pointer-events: none;
}
@keyframes floatUp {
0% { transform: translateY(0); opacity: 1; }
100% { transform: translateY(-50px); opacity: 0; }
}
.bomb {
background-color: #FF5722 !important;
border-radius: 50%;
animation: explode 0.5s forwards;
}
@keyframes explode {
0% { transform: scale(1); opacity: 1; }
100% { transform: scale(3); opacity: 0; }
}
.rainbow {
animation: rainbow 2s linear infinite;
}
@keyframes rainbow {
0% { background-color: red; }
14% { background-color: orange; }
28% { background-color: yellow; }
42% { background-color: green; }
57% { background-color: blue; }
71% { background-color: indigo; }
85% { background-color: violet; }
100% { background-color: red; }
}
.confetti {
position: absolute;
width: 10px;
height: 10px;
background-color: #f00;
border-radius: 50%;
animation: confettiFall 3s linear forwards;
z-index: 100;
}
@keyframes confettiFall {
0% { transform: translateY(-100px) rotate(0deg); opacity: 1; }
100% { transform: translateY(600px) rotate(360deg); opacity: 0; }
}
</style>
</head>
<body>
<h1>✨搞笑技能五子棋✨</h1>
<div id="game-info">黑方回合 - 请选择技能或下棋</div>
<div id="game-container">
<div id="board"></div>
<div id="skills-panel">
<h3 style="text-align: center; color: #5E35B1;">技能卡牌</h3>
<div class="skill-card" data-skill="bomb">💣 炸弹棋</div>
<div class="skill-card" data-skill="swap">🔄 乾坤大挪移</div>
<div class="skill-card" data-skill="rainbow">🌈 彩虹棋</div>
<div class="skill-card" data-skill="steal">✋ 偷天换日</div>
<div class="skill-card" data-skill="reverse">🔄 时光倒流</div>
<div class="skill-card" data-skill="random">🎲 随机混乱</div>
</div>
</div>
<button id="restart-btn">重新开始游戏</button>
<script>
document.addEventListener('DOMContentLoaded', () => {
const board = document.getElementById('board');
const gameInfo = document.getElementById('game-info');
const restartBtn = document.getElementById('restart-btn');
const skillCards = document.querySelectorAll('.skill-card');
let currentPlayer = 'black'; // 'black' 或 'white'
let gameOver = false;
let boardState = Array(15).fill().map(() => Array(15).fill(null));
let moveHistory = [];
let selectedSkill = null;
let skillsUsed = {
black: { bomb: false, swap: false, rainbow: false, steal: false, reverse: false, random: false },
white: { bomb: false, swap: false, rainbow: false, steal: false, reverse: false, random: false }
};
// 初始化棋盘
function initBoard() {
board.innerHTML = '';
for (let i = 0; i < 15; i++) {
for (let j = 0; j < 15; j++) {
const cell = document.createElement('div');
cell.className = 'cell';
cell.dataset.row = i;
cell.dataset.col = j;
cell.addEventListener('click', handleCellClick);
board.appendChild(cell);
}
}
}
// 处理点击事件
function handleCellClick(e) {
if (gameOver) return;
const row = parseInt(e.target.dataset.row);
const col = parseInt(e.target.dataset.col);
if (boardState[row][col] !== null) return;
// 如果有选中的技能,先使用技能
if (selectedSkill) {
useSkill(selectedSkill, row, col);
selectedSkill = null;
updateSkillCards();
return;
}
// 普通下棋
placeStone(row, col, currentPlayer);
// 检查胜利
if (checkWin(row, col, currentPlayer)) {
showWinEffect(currentPlayer);
gameInfo.textContent = `${currentPlayer === 'black' ? '黑方' : '白方'}获胜!`;
gameOver = true;
return;
}
// 切换玩家
switchPlayer();
}
// 放置棋子
function placeStone(row, col, player, isSpecial = false) {
boardState[row][col] = player;
moveHistory.push({row, col, player});
const cell = document.querySelector(`.cell[data-row="${row}"][data-col="${col}"]`);
const stone = document.createElement('div');
stone.className = `stone ${player}`;
if (isSpecial) stone.classList.add('special');
cell.appendChild(stone);
// 添加动画效果
if (!isSpecial) {
const effect = document.createElement('div');
effect.className = 'effect-text';
effect.textContent = player === 'black' ? '啪!' : '叮!';
effect.style.left = `${col * 30 + 15}px`;
effect.style.top = `${row * 30 + 15}px`;
board.appendChild(effect);
setTimeout(() => {
effect.remove();
}, 1500);
}
}
// 检查胜利条件
function checkWin(row, col, player) {
const directions = [
[0, 1], // 水平
[1, 0], // 垂直
[1, 1], // 对角线
[1, -1] // 反对角线
];
for (const [dx, dy] of directions) {
let count = 1;
// 正向检查
for (let i = 1; i <= 4; i++) {
const newRow = row + i * dx;
const newCol = col + i * dy;
if (newRow < 0 || newRow >= 15 || newCol < 0 || newCol >= 15 ||
boardState[newRow][newCol] !== player) {
break;
}
count++;
}
// 反向检查
for (let i = 1; i <= 4; i++) {
const newRow = row - i * dx;
const newCol = col - i * dy;
if (newRow < 0 || newRow >= 15 || newCol < 0 || newCol >= 15 ||
boardState[newRow][newCol] !== player) {
break;
}
count++;
}
if (count >= 5) {
return true;
}
}
return false;
}
// 切换玩家
function switchPlayer() {
currentPlayer = currentPlayer === 'black' ? 'white' : 'black';
gameInfo.textContent = `${currentPlayer === 'black' ? '黑方' : '白方'}回合 - 请选择技能或下棋`;
updateSkillCards();
}
// 使用技能
function useSkill(skill, row, col) {
if (skillsUsed[currentPlayer][skill]) {
showMessage('这个技能已经用过了!');
return;
}
skillsUsed[currentPlayer][skill] = true;
switch(skill) {
case 'bomb':
useBombSkill(row, col);
break;
case 'swap':
useSwapSkill();
break;
case 'rainbow':
useRainbowSkill(row, col);
break;
case 'steal':
useStealSkill(row, col);
break;
case 'reverse':
useReverseSkill();
break;
case 'random':
useRandomSkill();
break;
}
// 使用技能后也要切换玩家
switchPlayer();
}
// 炸弹技能 - 放置一个炸弹棋,爆炸后清除周围棋子
function useBombSkill(row, col) {
placeStone(row, col, currentPlayer, true);
// 爆炸效果
const cell = document.querySelector(`.cell[data-row="${row}"][data-col="${col}"] .stone`);
cell.classList.add('bomb');
setTimeout(() => {
// 清除周围3x3区域的棋子
for (let i = Math.max(0, row-1); i <= Math.min(14, row+1); i++) {
for (let j = Math.max(0, col-1); j <= Math.min(14, col+1); j++) {
if (boardState[i][j] !== null) {
boardState[i][j] = null;
const targetCell = document.querySelector(`.cell[data-row="${i}"][data-col="${j}"]`);
targetCell.innerHTML = '';
}
}
}
// 爆炸动画
for (let i = 0; i < 30; i++) {
createConfetti(row, col);
}
showMessage('💥 炸弹爆炸了!');
}, 500);
}
// 乾坤大挪移 - 交换双方所有棋子的颜色
function useSwapSkill() {
for (let i = 0; i < 15; i++) {
for (let j = 0; j < 15; j++) {
if (boardState[i][j] === 'black') {
boardState[i][j] = 'white';
const stone = document.querySelector(`.cell[data-row="${i}"][data-col="${j}"] .stone`);
if (stone) {
stone.classList.remove('black');
stone.classList.add('white');
}
} else if (boardState[i][j] === 'white') {
boardState[i][j] = 'black';
const stone = document.querySelector(`.cell[data-row="${i}"][data-col="${j}"] .stone`);
if (stone) {
stone.classList.remove('white');
stone.classList.add('black');
}
}
}
}
showMessage('🌀 乾坤大挪移!棋子颜色互换了!');
// 交换后检查是否有玩家获胜
for (let i = 0; i < 15; i++) {
for (let j = 0; j < 15; j++) {
if (boardState[i][j] !== null) {
if (checkWin(i, j, boardState[i][j])) {
showWinEffect(boardState[i][j]);
gameInfo.textContent = `${boardState[i][j] === 'black' ? '黑方' : '白方'}获胜!`;
gameOver = true;
return;
}
}
}
}
}
// 彩虹棋 - 放置一个会变色的棋子
function useRainbowSkill(row, col) {
placeStone(row, col, currentPlayer, true);
const stone = document.querySelector(`.cell[data-row="${row}"][data-col="${col}"] .stone`);
stone.classList.add('rainbow');
showMessage('🌈 放置了一个彩虹棋!');
}
// 偷天换日 - 偷走对手的最后一颗棋子
function useStealSkill(row, col) {
// 找到对手的最后一颗棋子
let lastOpponentMove = null;
for (let i = moveHistory.length - 1; i >= 0; i--) {
if (moveHistory[i].player !== currentPlayer) {
lastOpponentMove = moveHistory[i];
break;
}
}
if (!lastOpponentMove) {
showMessage('对手还没有下棋呢!');
return;
}
// 移除对手的棋子
boardState[lastOpponentMove.row][lastOpponentMove.col] = null;
const opponentCell = document.querySelector(`.cell[data-row="${lastOpponentMove.row}"][data-col="${lastOpponentMove.col}"]`);
opponentCell.innerHTML = '';
// 放置为自己的棋子
placeStone(row, col, currentPlayer, true);
showMessage(`✋ 偷走了对手的(${lastOpponentMove.row},${lastOpponentMove.col})位置的棋子!`);
}
// 时光倒流 - 回退三步棋
function useReverseSkill() {
if (moveHistory.length < 3) {
showMessage('棋步不足,无法时光倒流!');
return;
}
for (let i = 0; i < 3; i++) {
const move = moveHistory.pop();
if (move) {
boardState[move.row][move.col] = null;
const cell = document.querySelector(`.cell[data-row="${move.row}"][data-col="${move.col}"]`);
cell.innerHTML = '';
}
}
showMessage('⏪ 时光倒流,回退了3步棋!');
}
// 随机混乱 - 随机移动5颗棋子
function useRandomSkill() {
// 收集所有已有棋子的位置
const stones = [];
for (let i = 0; i < 15; i++) {
for (let j = 0; j < 15; j++) {
if (boardState[i][j] !== null) {
stones.push({row: i, col: j, player: boardState[i][j]});
}
}
}
if (stones.length < 5) {
showMessage('棋子不足,无法随机混乱!');
return;
}
// 随机选择5颗棋子
const shuffled = [...stones].sort(() => 0.5 - Math.random()).slice(0, 5);
// 先移除这些棋子
shuffled.forEach(stone => {
boardState[stone.row][stone.col] = null;
const cell = document.querySelector(`.cell[data-row="${stone.row}"][data-col="${stone.col}"]`);
cell.innerHTML = '';
});
// 随机放置到空位
const emptyCells = [];
for (let i = 0; i < 15; i++) {
for (let j = 0; j < 15; j++) {
if (boardState[i][j] === null) {
emptyCells.push({row: i, col: j});
}
}
}
const shuffledEmpty = [...emptyCells].sort(() => 0.5 - Math.random()).slice(0, 5);
shuffled.forEach((stone, index) => {
if (index < shuffledEmpty.length) {
const newPos = shuffledEmpty[index];
placeStone(newPos.row, newPos.col, stone.player, true);
// 添加移动动画效果
const effect = document.createElement('div');
effect.className = 'effect-text';
effect.textContent = '嗖!';
effect.style.left = `${newPos.col * 30 + 15}px`;
effect.style.top = `${newPos.row * 30 + 15}px`;
board.appendChild(effect);
setTimeout(() => {
effect.remove();
}, 1500);
}
});
showMessage('🎲 随机混乱!5颗棋子被随机移动了!');
}
// 创建彩色纸屑效果
function createConfetti(row, col) {
const colors = ['#f00', '#0f0', '#00f', '#ff0', '#f0f', '#0ff'];
const confetti = document.createElement('div');
confetti.className = 'confetti';
confetti.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)];
confetti.style.left = `${col * 30 + 15 + Math.random() * 20 - 10}px`;
confetti.style.top = `${row * 30 + 15}px`;
board.appendChild(confetti);
setTimeout(() => {
confetti.remove();
}, 3000);
}
// 显示消息效果
function showMessage(msg) {
const message = document.createElement('div');
message.className = 'effect-text';
message.textContent = msg;
message.style.left = '50%';
message.style.top = '20%';
message.style.transform = 'translateX(-50%)';
message.style.fontSize = '18px';
message.style.color = '#FF4081';
document.body.appendChild(message);
setTimeout(() => {
message.remove();
}, 2000);
}
// 胜利效果
function showWinEffect(player) {
// 彩色纸屑雨
for (let i = 0; i < 100; i++) {
setTimeout(() => {
createConfetti(
Math.floor(Math.random() * 15),
Math.floor(Math.random() * 15)
);
}, i * 50);
}
// 胜利文字
const winText = document.createElement('div');
winText.className = 'effect-text';
winText.textContent = `${player === 'black' ? '黑方' : '白方'}胜利!`;
winText.style.left = '50%';
winText.style.top = '40%';
winText.style.transform = 'translateX(-50%)';
winText.style.fontSize = '36px';
winText.style.color = player === 'black' ? '#000' : '#fff';
winText.style.textShadow = player === 'black' ? '0 0 10px white' : '0 0 10px black';
document.body.appendChild(winText);
setTimeout(() => {
winText.remove();
}, 3000);
}
// 更新技能卡牌状态
function updateSkillCards() {
skillCards.forEach(card => {
card.classList.remove('active', 'disabled');
if (skillsUsed[currentPlayer][card.dataset.skill]) {
card.classList.add('disabled');
}
});
}
// 技能卡牌点击事件
skillCards.forEach(card => {
card.addEventListener('click', function() {
if (this.classList.contains('disabled') || gameOver) return;
// 取消其他卡牌的选中状态
skillCards.forEach(c => c.classList.remove('active'));
// 选中当前卡牌
this.classList.add('active');
selectedSkill = this.dataset.skill;
gameInfo.textContent = `${currentPlayer === 'black' ? '黑方' : '白方'}选择了${this.textContent},请点击棋盘使用`;
});
});
// 重新开始游戏
function restartGame() {
currentPlayer = 'black';
gameOver = false;
boardState = Array(15).fill().map(() => Array(15).fill(null));
moveHistory = [];
selectedSkill = null;
skillsUsed = {
black: { bomb: false, swap: false, rainbow: false, steal: false, reverse: false, random: false },
white: { bomb: false, swap: false, rainbow: false, steal: false, reverse: false, random: false }
};
gameInfo.textContent = '黑方回合 - 请选择技能或下棋';
initBoard();
updateSkillCards();
}
restartBtn.addEventListener('click', restartGame);
// 初始化游戏
initBoard();
updateSkillCards();
});
</script>
</body>
</html>
4 条评论
-
董章正 LV 6 @ 2025-5-11 11:50:13
-
2025-5-10 10:28:15@
html
-
2025-5-10 10:27:52@
-
2025-5-6 21:15:15@
*这不是C++代码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *</u>*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! </u>
- 1