493 lines
24 KiB
PHP
493 lines
24 KiB
PHP
<?php
|
|
/**
|
|
* Instalador automático del sistema WhatsApp Bot
|
|
* Desarrollado por U-Site.app - https://u-site.app
|
|
* Genera contraseña aleatoria y configura la base de datos
|
|
* Fecha: 13 de noviembre de 2025
|
|
*/
|
|
|
|
// Verificar si la instalación ya está completada
|
|
$installationLockFile = '.installation_completed';
|
|
if (file_exists($installationLockFile)) {
|
|
header('Location: login.php');
|
|
exit('La instalación ya está completada. <a href="login.php">Iniciar sesión</a>');
|
|
}
|
|
|
|
// Función para generar contraseña aleatoria segura
|
|
function generateRandomPassword($length = 20) {
|
|
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*-_=+';
|
|
$password = '';
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$password .= $chars[random_int(0, strlen($chars) - 1)];
|
|
}
|
|
return $password;
|
|
}
|
|
|
|
// Configuración de la instalación (compatible con cPanel)
|
|
$dbHost = 'localhost';
|
|
$dbName = 'whatsapp_bot';
|
|
$dbUser = 'whatsapp_user';
|
|
$dbPass = generateRandomPassword(20);
|
|
$dbRootUser = 'root';
|
|
$dbRootPass = ''; // En cPanel puede requerir contraseña
|
|
|
|
// Generar contraseña para admin
|
|
$adminPassword = generateRandomPassword(12);
|
|
|
|
$installStep = $_GET['step'] ?? 'welcome';
|
|
$errors = [];
|
|
$success = [];
|
|
|
|
// Procesar instalación
|
|
if ($installStep === 'install' && $_POST) {
|
|
try {
|
|
// 1. Intentar conectar como root para crear base de datos y usuario
|
|
try {
|
|
$rootPdo = new PDO("mysql:host=$dbHost;charset=utf8mb4", $dbRootUser, $dbRootPass);
|
|
$rootPdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
} catch (PDOException $e) {
|
|
// Si no se puede conectar como root, es probable que sea hosting compartido
|
|
throw new Exception("⚠️ HOSTING COMPARTIDO DETECTADO ⚠️<br><br>" .
|
|
"No se pueden crear bases de datos automáticamente en este tipo de hosting.<br><br>" .
|
|
"<strong>SOLUCIÓN:</strong><br>" .
|
|
"1. Crea manualmente la base de datos y usuario en tu panel de control<br>" .
|
|
"2. Usa <a href='install_manual.php' class='btn btn-warning btn-sm'>install_manual.php</a> en su lugar<br>" .
|
|
"3. Lee la guía: <a href='GUIA_HESTIACP.md' target='_blank'>GUIA_HESTIACP.md</a><br><br>" .
|
|
"Error técnico: " . $e->getMessage());
|
|
}
|
|
|
|
// 2. Crear base de datos
|
|
$rootPdo->exec("CREATE DATABASE IF NOT EXISTS `$dbName` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
|
|
$success[] = "✅ Base de datos '$dbName' creada correctamente";
|
|
|
|
// 3. Crear usuario con permisos
|
|
$rootPdo->exec("DROP USER IF EXISTS '$dbUser'@'localhost'");
|
|
$rootPdo->exec("CREATE USER '$dbUser'@'localhost' IDENTIFIED BY '$dbPass'");
|
|
$rootPdo->exec("GRANT ALL PRIVILEGES ON `$dbName`.* TO '$dbUser'@'localhost'");
|
|
$rootPdo->exec("FLUSH PRIVILEGES");
|
|
$success[] = "✅ Usuario '$dbUser' creado con contraseña aleatoria";
|
|
|
|
// 4. Conectar con nuevo usuario
|
|
$pdo = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4", $dbUser, $dbPass);
|
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
|
|
// 5. Crear tablas desde schema.sql
|
|
$schema = file_get_contents('database/schema.sql');
|
|
if (!$schema) {
|
|
throw new Exception("No se pudo leer el archivo schema.sql");
|
|
}
|
|
|
|
// Ejecutar comandos SQL uno por uno
|
|
$statements = array_filter(array_map('trim', explode(';', $schema)));
|
|
$tablesCreated = 0;
|
|
|
|
foreach ($statements as $statement) {
|
|
if (!empty($statement) && !preg_match('/^--/', $statement)) {
|
|
$pdo->exec($statement);
|
|
if (preg_match('/CREATE TABLE|INSERT INTO/', $statement)) {
|
|
$tablesCreated++;
|
|
}
|
|
}
|
|
}
|
|
|
|
$success[] = "✅ $tablesCreated elementos de base de datos procesados";
|
|
|
|
// 6. Actualizar archivo de configuración
|
|
$configFile = 'config/config.php';
|
|
$configContent = file_get_contents($configFile);
|
|
|
|
$configContent = preg_replace("/define\('DB_HOST',\s*'[^']*'\);/", "define('DB_HOST', '$dbHost');", $configContent);
|
|
$configContent = preg_replace("/define\('DB_NAME',\s*'[^']*'\);/", "define('DB_NAME', '$dbName');", $configContent);
|
|
$configContent = preg_replace("/define\('DB_USER',\s*'[^']*'\);/", "define('DB_USER', '$dbUser');", $configContent);
|
|
$configContent = preg_replace("/define\('DB_PASS',\s*'[^']*'\);/", "define('DB_PASS', '$dbPass');", $configContent);
|
|
$configContent = preg_replace("/define\('ADMIN_PASSWORD',\s*'[^']*'\);/", "define('ADMIN_PASSWORD', '" . password_hash($adminPassword, PASSWORD_DEFAULT) . "');", $configContent);
|
|
|
|
// Auto-detectar URL del servidor
|
|
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://';
|
|
$host = $_SERVER['HTTP_HOST'];
|
|
$path = dirname($_SERVER['SCRIPT_NAME']);
|
|
$autoUrl = $protocol . $host . $path;
|
|
$configContent = preg_replace("/define\('APP_URL',\s*'[^']*'\);/", "define('APP_URL', '$autoUrl');", $configContent);
|
|
|
|
file_put_contents($configFile, $configContent);
|
|
$success[] = "✅ Archivo config.php actualizado con nuevas credenciales";
|
|
|
|
// 7. Crear archivo de bloqueo de instalación
|
|
$lockContent = "Instalación completada: " . date('Y-m-d H:i:s') . "\n";
|
|
$lockContent .= "Desarrollado por: U-Site.app\n";
|
|
$lockContent .= "URL: https://u-site.app\n";
|
|
file_put_contents($installationLockFile, $lockContent);
|
|
$success[] = "✅ Sistema bloqueado contra reinstalaciones";
|
|
|
|
// 8. Crear archivo de credenciales para referencia
|
|
$credentialsFile = "CREDENCIALES_SISTEMA.txt";
|
|
$credentialsContent = "=== CREDENCIALES DEL SISTEMA WHATSAPP BOT ===\n";
|
|
$credentialsContent .= "Desarrollado por: U-Site.app (https://u-site.app)\n";
|
|
$credentialsContent .= "Generado automáticamente: " . date('Y-m-d H:i:s') . "\n\n";
|
|
$credentialsContent .= "=== BASE DE DATOS ===\n";
|
|
$credentialsContent .= "Host: $dbHost\n";
|
|
$credentialsContent .= "Base de datos: $dbName\n";
|
|
$credentialsContent .= "Usuario: $dbUser\n";
|
|
$credentialsContent .= "Contraseña: $dbPass\n\n";
|
|
$credentialsContent .= "=== PANEL ADMINISTRATIVO ===\n";
|
|
$credentialsContent .= "Usuario: admin\n";
|
|
$credentialsContent .= "Contraseña: $adminPassword\n";
|
|
$credentialsContent .= "URL Login: $autoUrl/login.php\n\n";
|
|
$credentialsContent .= "⚠️ IMPORTANTE: Guarda estas credenciales en un lugar seguro.\n";
|
|
$credentialsContent .= "⚠️ Elimina este archivo después de guardar las credenciales.\n";
|
|
$credentialsContent .= "⚠️ El sistema está protegido contra reinstalaciones.\n\n";
|
|
$credentialsContent .= "📞 Soporte técnico: support@u-site.app\n";
|
|
|
|
file_put_contents($credentialsFile, $credentialsContent);
|
|
$success[] = "✅ Archivo de credenciales creado: $credentialsFile";
|
|
|
|
$installStep = 'completed';
|
|
|
|
} catch (PDOException $e) {
|
|
$errors[] = "❌ Error de base de datos: " . $e->getMessage();
|
|
} catch (Exception $e) {
|
|
$errors[] = "❌ Error general: " . $e->getMessage();
|
|
}
|
|
}
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="es">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>🚀 Instalador WhatsApp Bot</title>
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
|
<style>
|
|
:root {
|
|
--primary-color: #25d366;
|
|
--secondary-color: #075e54;
|
|
--bg-gradient: linear-gradient(135deg, #25d366 0%, #075e54 100%);
|
|
}
|
|
body {
|
|
background: var(--bg-gradient);
|
|
min-height: 100vh;
|
|
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
|
}
|
|
.install-card {
|
|
background: rgba(255,255,255,0.95);
|
|
border-radius: 20px;
|
|
backdrop-filter: blur(10px);
|
|
box-shadow: 0 20px 40px rgba(0,0,0,0.1);
|
|
}
|
|
.btn-install {
|
|
background: var(--bg-gradient);
|
|
border: none;
|
|
color: white;
|
|
padding: 15px 30px;
|
|
border-radius: 10px;
|
|
font-weight: 600;
|
|
}
|
|
.btn-install:hover {
|
|
transform: translateY(-2px);
|
|
color: white;
|
|
}
|
|
.password-display {
|
|
background: #f8f9fa;
|
|
border: 2px dashed #28a745;
|
|
border-radius: 10px;
|
|
font-family: 'Courier New', monospace;
|
|
font-size: 1.1rem;
|
|
font-weight: bold;
|
|
color: #155724;
|
|
word-break: break-all;
|
|
padding: 15px;
|
|
}
|
|
.step-indicator {
|
|
width: 40px;
|
|
height: 40px;
|
|
border-radius: 50%;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-right: 15px;
|
|
font-weight: bold;
|
|
}
|
|
.step-active { background: var(--primary-color); color: white; }
|
|
.step-completed { background: #28a745; color: white; }
|
|
.step-pending { background: #e9ecef; color: #6c757d; }
|
|
.console-output {
|
|
background: #1e1e1e;
|
|
color: #00ff00;
|
|
border-radius: 10px;
|
|
font-family: 'Courier New', monospace;
|
|
font-size: 0.9rem;
|
|
max-height: 300px;
|
|
overflow-y: auto;
|
|
}
|
|
.blink {
|
|
animation: blink 1s infinite;
|
|
}
|
|
@keyframes blink {
|
|
0%, 50% { opacity: 1; }
|
|
51%, 100% { opacity: 0; }
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container mt-5">
|
|
<div class="row justify-content-center">
|
|
<div class="col-lg-8">
|
|
<div class="install-card p-5">
|
|
|
|
<?php if ($installStep === 'welcome'): ?>
|
|
<!-- Pantalla de Bienvenida -->
|
|
<div class="text-center mb-4">
|
|
<i class="fas fa-database text-primary" style="font-size: 4rem;"></i>
|
|
<h1 class="mt-3 fw-bold">Instalador WhatsApp Bot</h1>
|
|
<p class="text-muted">Configuración automática con credenciales aleatorias</p>
|
|
<div class="mt-3">
|
|
<small class="text-muted">
|
|
Desarrollado por <strong><a href="https://u-site.app" target="_blank" class="text-decoration-none">U-Site.app</a></strong> |
|
|
<a href="https://u-site.app/support" target="_blank" class="text-decoration-none">Soporte técnico</a>
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row g-3 mb-4">
|
|
<div class="col-md-4">
|
|
<div class="d-flex align-items-center">
|
|
<span class="step-indicator step-active">1</span>
|
|
<div>
|
|
<h6 class="mb-1">Crear BD</h6>
|
|
<small class="text-muted">Base de datos: <strong>whatsapp_bot</strong></small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="d-flex align-items-center">
|
|
<span class="step-indicator step-pending">2</span>
|
|
<div>
|
|
<h6 class="mb-1">Crear Usuario</h6>
|
|
<small class="text-muted">Usuario: <strong>whatsapp_user</strong></small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="d-flex align-items-center">
|
|
<span class="step-indicator step-pending">3</span>
|
|
<div>
|
|
<h6 class="mb-1">Configurar</h6>
|
|
<small class="text-muted">Aplicar configuración</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="alert alert-info">
|
|
<i class="fas fa-info-circle me-2"></i>
|
|
<strong>Configuración automática para cPanel/hosting compartido:</strong>
|
|
<ul class="mb-0 mt-2">
|
|
<li><strong>Host:</strong> localhost (compatible con cualquier hosting)</li>
|
|
<li><strong>Base de datos:</strong> whatsapp_bot (se creará automáticamente)</li>
|
|
<li><strong>Usuario DB:</strong> whatsapp_user (se creará automáticamente)</li>
|
|
<li><strong>Contraseña DB:</strong> Se generará aleatoriamente (20 caracteres)</li>
|
|
<li><strong>Usuario Admin:</strong> admin</li>
|
|
<li><strong>Contraseña Admin:</strong> Se generará aleatoriamente (12 caracteres)</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="alert alert-success">
|
|
<i class="fas fa-shield-alt me-2"></i>
|
|
<strong>Características de seguridad:</strong>
|
|
<ul class="mb-0 mt-2">
|
|
<li>✅ Protección contra reinstalaciones</li>
|
|
<li>✅ Sistema de login con bloqueo por intentos</li>
|
|
<li>✅ Contraseñas encriptadas</li>
|
|
<li>✅ Auto-detección de URL del servidor</li>
|
|
<li>✅ Compatible con cualquier hosting cPanel</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="alert alert-warning">
|
|
<i class="fas fa-exclamation-triangle me-2"></i>
|
|
<strong>Requisitos:</strong> Asegúrate de que MySQL esté funcionando en Laragon
|
|
</div>
|
|
|
|
<div class="alert alert-danger">
|
|
<i class="fas fa-server me-2"></i>
|
|
<strong>⚠️ ¿Usas hosting compartido? (HestiaCP, cPanel, etc.)</strong><br>
|
|
Este instalador automático <strong>NO funcionará</strong> en hosting compartido porque requiere privilegios de administrador.<br><br>
|
|
<strong>👉 SOLUCIÓN:</strong>
|
|
<a href="install_manual.php" class="btn btn-warning btn-sm me-2">
|
|
<i class="fas fa-tools me-1"></i>Usar Instalador Manual
|
|
</a>
|
|
<a href="GUIA_HESTIACP.md" target="_blank" class="btn btn-info btn-sm">
|
|
<i class="fas fa-book me-1"></i>Ver Guía
|
|
</a>
|
|
</div>
|
|
|
|
<div class="text-center mb-4">
|
|
<div class="row g-3">
|
|
<div class="col-md-6">
|
|
<div class="password-display">
|
|
🔐 CONTRASEÑA BD:<br>
|
|
<strong><?= htmlspecialchars($dbPass) ?></strong>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="password-display">
|
|
👤 CONTRASEÑA ADMIN:<br>
|
|
<strong><?= htmlspecialchars($adminPassword) ?></strong>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="text-center">
|
|
<a href="?step=install" class="btn btn-install btn-lg">
|
|
<i class="fas fa-play me-2"></i>Iniciar Instalación
|
|
</a>
|
|
</div>
|
|
|
|
<?php elseif ($installStep === 'install'): ?>
|
|
<!-- Pantalla de Instalación -->
|
|
<div class="text-center mb-4">
|
|
<i class="fas fa-cog fa-spin text-warning" style="font-size: 3rem;"></i>
|
|
<h2 class="mt-3">Instalando Sistema...</h2>
|
|
<p class="text-muted">Configurando base de datos automáticamente</p>
|
|
</div>
|
|
|
|
<form method="POST" id="installForm">
|
|
<div class="console-output p-4 mb-4">
|
|
<div>WhatsApp Bot Installer v1.0</div>
|
|
<div>Connecting to MySQL server (localhost)...</div>
|
|
<div>Generating secure random password...</div>
|
|
<div class="mt-3">
|
|
<strong style="color: #ffff00;">🔐 CONTRASEÑAS GENERADAS:</strong><br>
|
|
<span style="color: #00ffff; font-size: 1.0rem;">DB: <?= htmlspecialchars($dbPass) ?></span><br>
|
|
<span style="color: #00ff00; font-size: 1.0rem;">Admin: <?= htmlspecialchars($adminPassword) ?></span>
|
|
</div>
|
|
<div class="mt-2">Creating database 'whatsapp_bot'...</div>
|
|
<div>Creating user 'whatsapp_user'@'localhost'...</div>
|
|
<div>Granting privileges...</div>
|
|
<div>Installing database schema...</div>
|
|
<div>Updating configuration files...</div>
|
|
<div class="text-success mt-2">Ready to execute installation <span class="blink">_</span></div>
|
|
</div>
|
|
|
|
<div class="text-center">
|
|
<button type="submit" class="btn btn-install btn-lg">
|
|
<i class="fas fa-database me-2"></i>Ejecutar Instalación
|
|
</button>
|
|
</div>
|
|
</form>
|
|
|
|
<script>
|
|
// Auto-submit después de mostrar la información
|
|
setTimeout(function() {
|
|
document.getElementById('installForm').submit();
|
|
}, 4000);
|
|
</script>
|
|
|
|
<?php elseif ($installStep === 'completed'): ?>
|
|
<!-- Pantalla de Completado -->
|
|
<div class="text-center mb-4">
|
|
<i class="fas fa-check-circle text-success" style="font-size: 4rem;"></i>
|
|
<h1 class="mt-3 text-success fw-bold">¡Instalación Completada!</h1>
|
|
<p class="text-muted">Tu sistema WhatsApp Bot está listo para usar</p>
|
|
</div>
|
|
|
|
<!-- Mostrar errores si los hay -->
|
|
<?php if (!empty($errors)): ?>
|
|
<div class="alert alert-danger">
|
|
<h5><i class="fas fa-exclamation-triangle me-2"></i>Errores encontrados:</h5>
|
|
<?php foreach ($errors as $error): ?>
|
|
<div><?= htmlspecialchars($error) ?></div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<!-- Mostrar éxitos -->
|
|
<?php if (!empty($success)): ?>
|
|
<div class="alert alert-success">
|
|
<h5><i class="fas fa-check-circle me-2"></i>Instalación exitosa:</h5>
|
|
<?php foreach ($success as $msg): ?>
|
|
<div><?= htmlspecialchars($msg) ?></div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<!-- Mostrar credenciales -->
|
|
<div class="row g-4 mb-4">
|
|
<div class="col-md-6">
|
|
<h5><i class="fas fa-database me-2 text-primary"></i>Credenciales de BD</h5>
|
|
<div class="bg-light p-3 rounded">
|
|
<div><strong>Host:</strong> <?= $dbHost ?></div>
|
|
<div><strong>Base de datos:</strong> <?= $dbName ?></div>
|
|
<div><strong>Usuario:</strong> <?= $dbUser ?></div>
|
|
<div class="mt-2">
|
|
<strong>Contraseña:</strong><br>
|
|
<div class="password-display mt-1">
|
|
<?= htmlspecialchars($dbPass) ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<h5 class="mt-3"><i class="fas fa-user-shield me-2 text-success"></i>Credenciales Admin</h5>
|
|
<div class="bg-light p-3 rounded">
|
|
<div><strong>Usuario:</strong> admin</div>
|
|
<div class="mt-2">
|
|
<strong>Contraseña:</strong><br>
|
|
<div class="password-display mt-1">
|
|
<?= htmlspecialchars($adminPassword) ?>
|
|
</div>
|
|
</div>
|
|
<div class="mt-2"><strong>URL Login:</strong><br>
|
|
<a href="login.php" target="_blank"><?= AUTO_DETECTED_URL ?? $autoUrl ?? '' ?>/login.php</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<h5><i class="fas fa-link me-2 text-success"></i>Próximos Pasos</h5>
|
|
<div class="d-grid gap-2">
|
|
<a href="login.php" class="btn btn-install">
|
|
<i class="fas fa-sign-in-alt me-2"></i>Iniciar Sesión
|
|
</a>
|
|
<a href="test.php" class="btn btn-outline-primary">
|
|
<i class="fas fa-check-circle me-2"></i>Probar Sistema
|
|
</a>
|
|
<a href="server_setup.php" class="btn btn-outline-warning">
|
|
<i class="fab fa-whatsapp me-2"></i>Configurar WhatsApp
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="alert alert-warning">
|
|
<i class="fas fa-exclamation-triangle me-2"></i>
|
|
<strong>¡IMPORTANTE!</strong>
|
|
<ul class="mb-0 mt-2">
|
|
<li>Guarda las credenciales en un lugar seguro</li>
|
|
<li>El archivo <code>CREDENCIALES_SISTEMA.txt</code> contiene toda la información</li>
|
|
<li>Elimina este archivo después de guardar las credenciales</li>
|
|
<li><strong>El sistema está protegido contra reinstalaciones</strong></li>
|
|
<li>Configura tu token de WhatsApp después del login</li>
|
|
<li>Soporte técnico: <a href="mailto:support@u-site.app">support@u-site.app</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<?php endif; ?>
|
|
|
|
<!-- Footer -->
|
|
<div class="mt-5 pt-4 border-top text-center">
|
|
<small class="text-muted">
|
|
WhatsApp Bot Manager v1.0 by <strong>U-Site.app</strong> |
|
|
Instalación automática con credenciales seguras |
|
|
<a href="https://u-site.app/support" target="_blank">Soporte</a>
|
|
</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
|
</body>
|
|
</html>
|