/* Archivo de configuración para UnrealIRCd 6
 *
 * Simplemente copie este archivo a su directorio conf/, llámelo
 * 'unrealircd.conf' y revíselo línea por línea (¡edítelo!)
 *
 * Importante: Todas las líneas, excepto { y } terminan con ;
 * Esto es muy importante, si pierde un ; en algún lugar entonces el
 * el analizador del archivo de configuración se quejará y el archivo no
 * ser procesado correctamente!
 * Si esta es tu primera experiencia con una configuración de UnrealIRCd
 * entonces te recomendamos que leas un poco sobre la sintaxis,
 * esto solo toma unos minutos y te ayudará mucho:
 * https://www.unrealircd.org/docs/Configuration#Configuration_file_syntax
 *
 * Documentación de UnrealIRCd 6 (¡muy extensa!):
 * https://www.unrealircd.org/docs/UnrealIRCd_6_documentation
 *
 * Preguntas frecuentes:
 * https://www.unrealircd.org/docs/FAQ
 *
 */

/* Esto es un comentario, todo el texto aquí es ignorado (tipo de comentario #1) */
// Esto también es un comentario, esta línea se ignora (tipo de comentario #2)
# Esto también es un comentario, nuevamente esta línea se ignora (tipo de comentario #3)

/* UnrealIRCd hace un uso intensivo de los módulos. Los módulos le permiten completamente
 * personaliza el conjunto de características que deseas habilitar en UnrealIRCd.
 * Ver: https://www.unrealircd.org/docs/Modules
 *
 * Al usar el incluir a continuación, le indicamos al IRCd que lea el archivo
 * 'modules.default.conf' que cargará más de 150 módulos
 * enviado con UnrealIRCd. En otras palabras: esto simplemente cargará
 * todas las funciones disponibles en UnrealIRCd.
 * Si está configurando UnrealIRCd por primera vez, le sugerimos
 * utilizar esta. Luego, cuando todo esté funcionando, puedes venir
 * volver más tarde para personalizar la lista (si lo desea).
 */
include "modules.default.conf";
 
/* Ahora incluyamos algunos otros archivos también:
 * - help/help.conf para nuestro sistema on-IRC /HELPOP
 * - badwords.conf para canal y modo de usuario +G
 * - spamfilter.conf como ejemplo para el uso de spamfilter
 *   (Comentado)
 * - operclass.default.conf contiene algunas buenas operclasses que
 * puedes usar en tus bloques operativos.
 */
include "help/help.conf";
include "badwords.conf";
//include "spamfilter.conf";
include "operclass.default.conf";
include "snomasks.default.conf";

/* Cargar el módulo de encubrimiento predeterminado (2021 en adelante): */
loadmodule "cloak_sha256";
/* O cargue el módulo antiguo de UnrealIRCd 3.2/4/5 en su lugar: */
//loadmodule "cloak_md5";

/* Este es el bloque yo { } que básicamente dice quiénes somos.
 * Define el nombre de nuestro servidor, alguna línea de información y un "sid" único.
 * La identificación del servidor (sid) debe comenzar con un dígito seguido de dos dígitos o
 * cartas. El sid debe ser único para su red IRC (cada servidor debe
 * tener su propio sid).
 */
 me {
	name "irc.example.org";
	info "ExampleNET Server";
	sid "001";
}

/* El bloque admin { } define lo que verán los usuarios si escriben /ADMIN.
 * Normalmente contiene información sobre cómo contactar con el administrador.
 */
admin {
	"Bob Smith";
	"bob";
	"email@example.org";
}

/* Los clientes y servidores se colocan en bloques de clase { }, los definimos aquí.
 * Los bloques de clase constan de los siguientes elementos:
 * - pingfreq: con qué frecuencia hacer ping a un usuario/servidor (en segundos)
 * - connfreq: con qué frecuencia intentamos conectarnos a este servidor (en segundos)
 * - sendq: el tamaño máximo de cola para una conexión
 * - recvq: máxima cola de recepción de una conexión (control de inundación)
 */

/* Clase de cliente con buenos valores predeterminados */
class clients
{
	pingfreq 90;
	maxclients 1000;
	sendq 200k;
	recvq 8000;
}

/* Clase especial para IRCOps con límites más altos */
class opers
{
	pingfreq 90;
	maxclients 50;
	sendq 1M;
	recvq 8000;
}

/* Clase de servidor con buenos valores predeterminados */
class servers
{
	pingfreq 60;
	connfreq 15; /* intenta conectarte cada 15 segundos */
	maxclients 10; /* maximo de servidores */
	sendq 20M;
}

/* Permitir que los bloques definan qué clientes pueden conectarse a este servidor.
 * Esto le permite agregar una contraseña de servidor o restringir el servidor a
 * IP específicas solamente. También configuras las conexiones máximas
 * permitido por IP aquí.
 * Ver también: https://www.unrealircd.org/docs/Allow_block
 */

 /* Permitir el ingreso de todos, pero solo 3 conexiones por IP */
allow {
	mask *;
	class clients;
	maxperip 3;
}

/* Los bloques Oper definen sus operadores IRC.
 * Los operadores de IRC son personas que tienen "derechos adicionales" en comparación con otros,
 * por ejemplo, pueden /MATAR a otras personas, iniciar la vinculación del servidor,
 * /ÚNETE a los canales aunque estén prohibidos, etc.
 *
 * Para obtener más información sobre cómo convertirse en un IRCOp y cómo ser administrador
 * tareas, ver: https://www.unrealircd.org/docs/IRCOp_guide
 *
 * Para obtener detalles sobre el propio bloque oper { }, consulte
 * https://www.unrealircd.org/docs/Oper_block
 */
 
/* Aquí hay un bloque de operación de ejemplo para 'bobsmith'.
 * ¡DEBES cambiar esto!
 */
oper bobsmith {
	class opers;
	mask *@*;

	/* Technically you can put oper passwords in plaintext in the conf but
	 * this is HIGHLY DISCOURAGED. Instead you should generate a password hash:
	 * On *NIX, run: ./unrealircd mkpasswd
	 * On Windows, run: "C:\Program Files\UnrealIRCd 6\bin\unrealircdctl" mkpasswd
	 * .. and then paste the result below:
	 */
	password "$argon2id..etc..";
	/* See https://www.unrealircd.org/docs/Authentication_types for
	 * more information, including even better authentication types
	 * such as 'certfp', and how to generate hashes on Windows.
	 */

	/* Los permisos de operación se definen en un bloque 'operclass'.
	 * Ver https://www.unrealircd.org/docs/Operclass_block
	 * UnrealIRCd se envía con una serie de bloques predeterminados, consulte
	 * el artículo para una lista completa. Elegimos 'netadmin' aquí.
	 */
	operclass netadmin;
	swhois "is a Network Administrator";
	vhost netadmin.example.org;
}

/* Los bloques de escucha definen los puertos donde el servidor debe escuchar.
 * En otras palabras: los puertos que los clientes y servidores pueden usar para
 * conectarse a este servidor.
 * 
 * Sintaxis:
 * listen {
 *   ip <ip>;
 *   port <port>;
 *   options {
 *     <options....>;
 *   }
 * }
 */

/* Puerto IRC estándar 6667
 * Insecure plaintext (NOT for production servers)
 * This listen block is here only for quick testing.
 * Delete or comment out this listen block on production servers
 * and use TLS on port 6697 instead.
 */
listen {
	ip *;
	port 6667;
}

/* Puerto IRC estándar 6697 */
listen {
	ip *;
	port 6697;
	options { tls; }
}

/* Puerto especial solo para servidores SSL/TLS para vincular */
listen {
	ip *;
	port 6900;
	options { tls; serversonly; }
}

/* NOTA: Si está en una shell IRCd con múltiples IP y usa
 * los bloques de escucha anteriores { } entonces probablemente obtendrás un
 * Error 'Dirección ya en uso' y el ircd no se iniciará.
 * Esto significa que DEBE vincularse a una IP específica en lugar de '*' como:
 * escucha { ip 1.2.3.4; puerto 6667; }
 * Por supuesto, reemplaza la IP con la IP que te fue asignada.
 */
 
/*
 * Los bloques de enlace le permiten vincular varios servidores para formar una red.
 * Ver https://www.unrealircd.org/docs/Tutorial:_Linking_servers
 */
link hub.ejemplo.org
{
	incoming {
		mask *@algo;
	}

	outgoing {
		bind-ip *; /* o explícitamente una IP */
		hostname hub.ejemplo.org;
		port 6900;
		options { tls; }
	}

	/* Usamos la huella digital SPKI del otro servidor para la autenticación.
	 * Ejecute './unrealircd spkifp' en el otro lado del linkeo para obtenerlo.
	 * ( Windows: "C:\Program Files\UnrealIRCd 6\bin\unrealircdctl" spkifp )
	 */
	password "AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUV=" { spkifp; }

	class servers;
}

/* El bloque de enlace para servicios suele ser mucho más simple.
 * Para más información sobre qué son los Servicios,
 * ver https://www.unrealircd.org/docs/Services
 */
link services.ejemplo.org
{
	incoming {
		mask 127.0.0.1;
	}

	password "cambiameporfavor";

	class servers;
}

/* Las líneas U dan a otros servidores (incluso) más poder/comandos.
 * Si usas servicios debes agregarlos aquí.
 * ¡NUNCA pongas el nombre de un servidor UnrealIRCd aquí!
 */
ulines {
	services.ejemnplo.org;
}

/* Aquí puede agregar una contraseña para los comandos /DIE y /RESTART exclusivos de IRCOp.
 * Esto está destinado principalmente a proporcionar un poco de protección contra accidentes
 * reinicios y muertes del servidor.
 */
drpass {
	restart "restart";
	die "die";
}
 
/* El bloque de registro define qué debe registrarse y en qué archivo.
 * Ver también https://www.unrealircd.org/docs/Log_block
 */
 
/* Este es un buen valor predeterminado, registra todo excepto
 * cosas de depuración y unión/parte/kick.
 */
log {
	source {
		all;
		!debug;
		!join.LOCAL_CLIENT_JOIN;
		!join.REMOTE_CLIENT_JOIN;
		!part.LOCAL_CLIENT_PART;
		!part.REMOTE_CLIENT_PART;
		!kick.LOCAL_CLIENT_KICK;
		!kick.REMOTE_CLIENT_KICK;
	}
	destination {
		file "ircd.log" { maxsize 100M; }
	}
}

/* In addition to regular logging, also add a JSON log file.
 * This includes lots of information about every event so is great
 * for auditing purposes and is machine readable. It is, however
 * less readable for humans.
 */
log {
	source {
		all;
		!debug;
		!join.LOCAL_CLIENT_JOIN;
		!join.REMOTE_CLIENT_JOIN;
		!part.LOCAL_CLIENT_PART;
		!part.REMOTE_CLIENT_PART;
		!kick.LOCAL_CLIENT_KICK;
		!kick.REMOTE_CLIENT_KICK;
	}
	destination {
		file "ircd.json.log" { maxsize 250M; type json; }
	}
}

/* Con "aliases" puedes crear un alias como /ALGO para enviar un mensaje a
 * algún usuario o bot. Suelen utilizarse para servicios.
 *
 * Tenemos una cantidad de archivos de alias preestablecidos, consulte el directorio alias/.
 * A modo de ejemplo, aquí incluimos todos los alias utilizados para los servicios de anope.
 */
include "aliases/anope.conf";

/* Prohibir los apodos para que no puedan ser utilizados por usuarios regulares */
ban nick {
	mask "*C*h*a*n*S*e*r*v*";
	reason "Reservado para Servicios";
}

/* Baneo por ip.
 * Tenga en cuenta que normalmente usa /KLINE, /GLINE y /ZLINE para esto.
 */
ban ip {
	mask 195.86.232.81;
	reason "Te odio";
}

/* Baneo del servidor: si vemos que este servidor está vinculado a alguien, lo desvinculamos */
ban server {
	mask eris.berkeley.edu;
	reason "Sal de aquí.";
}

/* Baneo de usuario: solo como ejemplo, normalmente usa /KLINE o /GLINE para esto */
ban user {
	mask *tirc@*.saturn.bbn.com;
	reason "Idiot";
}

/* Baneo del nombre real le permite prohibir clientes en función de su 'nombre real'
 * o campo 'gecos'.
 */
ban realname {
	mask "Equipo Swat";
	reason "mIRKFORCE";
}

ban realname {
	mask "sub7server";
	reason "sub7";
}

/* Excepciones de baneo y TKL. Le permite eximir a los usuarios/máquinas de
 * KLINE, GLINE, etc.
 * Si es un IRCOp con una IP estática (y no hay personas que no sean de confianza en esa IP)
 * entonces te sugerimos que te añadas aquí. Así siempre puedes entrar
 * incluso si accidentalmente colocas una prohibición de *LINE en ti mismo.
 */

/* excepto el baneo con el tipo 'todos' (all) te proteja de GLINE, GZLINE, QLINE, SHUN */
except ban {
	mask *@192.0.2.1;
	type all;
}

/* This allows IRCCloud connections in without maxperip restrictions
 * and also exempt them from connect-flood throttling.
 */
except ban {
	mask *.irccloud.com;
	type { maxperip; connect-flood; }
}

/* Con los bloques de denegación de DCC puede prohibir los nombres de archivo para DCC */
deny dcc {
	filename "*sub7*";
	reason "Posible Sub7 Virus";
}
 
/* denegar canal le permite prohibir un canal (máscara) por completo */
deny channel {
	channel "*warez*";
	reason "Warez es ilegal";
	class "clients";
}

/* Los VHosts (hosts virtuales) permiten a los usuarios adquirir un host diferente.
 * Ver https://www.unrealircd.org/docs/Vhost_block
 */
 
/* Ejemplo de vhost que puede usar. En el tipo de IRC: prueba de prueba /VHOST
 * NOTA: solo las personas con un host 'unrealircd.com' pueden usarlo para
 * asegúrese de cambiar el vhost::mask antes de probar.
 */
vhost {
	vhost odio.microsefrs.com;
	mask *@unrealircd.com;
	login "test";
	password "test";
}

/* Los bloques de la lista negra consultarán un servicio de lista negra de DNS externo
 * cada vez que un usuario se conecta, para ver si se conoce la dirección IP
 * para causar ataques de drones, es una máquina pirateada conocida, etc.
 * Documentación: https://www.unrealircd.org/docs/Blacklist_block
 * O simplemente eche un vistazo a los bloques a continuación.
 */
 
/* DroneBL, probablemente la lista negra más popular utilizada por los servidores IRC.
 * Ver https://dronebl.org/ para su documentación y el
 * significado de los tipos de respuesta. Al momento de escribir usamos tipos:
 * 3: IRC Drone, 5: Embotellador, 6: Spambot o drone desconocido,
 * 7: Drone DDoS, 8: Proxy SOCKS, 9: Proxy HTTP, 10: ProxyChain,
 * 11: Proxy de página web, 12: Open DNS Resolver, 13: Atacantes de fuerza bruta,
 * 14: Proxy Wingate abierto, 15: Enrutador / puerta de enlace comprometidos,
 * 16: Gusanos autoenraizadores.
 */
blacklist dronebl {
        dns {
                name dnsbl.dronebl.org;
                type record;
                reply { 3; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; }
        }
        action gline;
        ban-time 24h;
        reason "Proxy/Drone Detectado. Chequea https://dronebl.org/lookup?ip=$ip para más detalles.";
}

/* EFnetRBL, consulte https://rbl.efnetrbl.org/ para obtener la documentación
 * y el significado de los tipos de respuesta.
 * Al momento de escribir: 1 es proxy abierto, 4 es TOR, 5 es drones/inundaciones.
 *
 * NOTA: Si desea permitir proxies TOR en su servidor, entonces
 * necesita eliminar el '4;' abajo en la sección de respuesta.
 */
blacklist efnetrbl {
        dns {
                name rbl.efnetrbl.org;
                type record;
                reply { 1; 4; 5; }
        }
        action gline;
        ban-time 24h;
        reason "Proxy/Drone/TOR detected. Check https://rbl.efnetrbl.org/?i=$ip for details.";
}

/* Puede incluir otros archivos de configuración */
/* include "klines.conf"; */
 
/* Configuración de la red */
set {
	network-name 		"EjemploNET";
	default-server 		"irc.ejemplo.org";
	services-server 	"services.ejemplo.org";
	stats-server 		"stats.ejemplo.org";
	help-channel 		"#Ayuda";
	cloak-prefix		"Clk";
	prefix-quit 		"Quit";

	/* Las claves de ocultación deben ser las mismas en todos los servidores de la red.
   * Se utilizan para generar hosts enmascarados y deben mantenerse en secreto.
   * Las claves deben ser 3 cadenas aleatorias de 80 caracteres cada una (o más).
   * y debe constar de minúsculas (a-z), mayúsculas (A-Z) y dígitos (0-9).
   * SUGERENCIA: En *NIX, puede ejecutar './unrealircd gencloak' en su shell para dejar
   * UnrealIRCd genera 3 cadenas aleatorias para ti.
   * On Windows, you can run "C:\Program Files\UnrealIRCd 6\bin\unrealircdctl" gencloak
   */  
	cloak-keys {
		"Oozahho1raezoh0iMee4ohvegaifahv5xaepeitaich9tahdiquaid0geecipahdauVaij3zieph4ahi";
		"y otra llave";
		"y otra llave";
	}
}

/* Configuración específica del servidor */
set {
	kline-address 'agrega.una.dirección.de.correo-electrónico'; /* correo electrónico o URL que se muestra cuando un usuario está baneado */
	modes-on-connect "+ixw"; /* cuando los usuarios se conecten, obtendrán estos modos de usuario */
	modes-on-oper "+xws"; /* cuando alguien se convierte en IRCOp obtendrá estos modos */
	modes-on-join "+nt"; /* modos de canal predeterminados cuando se crea un nuevo canal */
	oper-auto-join "#opers"; /* Los IRCOps se unen automáticamente a este canal */
	options {
		hide-ulines; /* ocultar líneas U en /MAP y /LINKS */
		show-connect-info; /* mostrar mensajes de "buscando su nombre de host" al conectarse */
	}

	maxchannelsperuser 10; /* número máximo de canales que un usuario puede /JOIN */

	/* El tiempo mínimo que un usuario debe estar conectado antes de que se le permita
	 * use un mensaje SALIR. Con suerte, esto ayudará a detener el spam.
	 */
	anti-spam-quit-message-time 10s;

	/* O simplemente establezca una salida estática, lo que significa que se ignora cualquier razón /QUIT */
	/* static-quit "Salida del cliente"; */

	/* static-part hace lo mismo para /PART */
	/* static-part yes; */

	/* Protección contra inundaciones:
	 * Hay muchas configuraciones para esto y la mayoría tiene buenos valores predeterminados.
	 * Ver https://www.unrealircd.org/docs/Set_block#set::anti-flood
	 */
	anti-flood {
	}

	/* Configuración del filtro de spam */
	spamfilter {
		ban-time 1d; /* duración predeterminada de una prohibición de *LINE establecida por spamfilter */
		ban-reason "Spam/Publicidad"; /* razón por defecto */
		virus-help-channel "#Ayuda"; /* canal a usar para la acción 'viruschan' */
		/* except "#Ayuda"; canal para eximir de Spamfilter */
	}

	/* Restringir ciertos comandos.
	 * Ver https://www.unrealircd.org/docs/Set_block#set::restrict-commands
	 */
	restrict-commands {
		list {
			except {
				connect-time 60;
				identified yes;
				reputation-score 24;
			}
		}
		invite {
			except {
				connect-time 120;
				identified yes;
				reputation-score 24;
			}
		}
		/* Además de la capacidad de restringir cualquier comando,
		 * como se muestra arriba. También hay 4 tipos especiales.
		 * que puedes restringir. Estos son "mensajes privados",
		 * "aviso privado", "mensaje de canal" y "aviso de canal".
		 * Están comentados (deshabilitados) en este ejemplo:
		 */
		//private-message {
		//	except {
		//		connect-time 10;
		//	}
		//}
		//private-notice {
		//	except {
		//		connect-time 10;
		//	}
		//}
	}
}

/*
 * Lo siguiente configurará la limitación de conexión de "usuarios desconocidos".
 *
 * Cuando UnrealIRCd detecta una gran cantidad de usuarios que se conectan desde direcciones IP
 * que no se han visto antes, entonces se rechazan las conexiones de nuevas IP
 * por encima de la tarifa establecida. Por ejemplo a las 10:60 solo se pueden conectar 10 usuarios por minuto
 * que no se han visto antes. Las direcciones IP conocidas siempre pueden entrar,
 * independientemente de la tarifa establecida. Lo mismo para los usuarios que inician sesión con SASL.
 *
 * Ver también https://www.unrealircd.org/docs/Connthrottle para más detalles.
 * O simplemente siga leyendo los ajustes de configuración predeterminados a continuación:
 */
set {
	connthrottle {
		/* Primero debemos configurar lo que llamamos "usuarios conocidos".
		 * De forma predeterminada, estos son usuarios en direcciones IP que tienen
		 * una puntuación de 24 o superior. Una puntuación de 24 significa que el
		 * La IP estuvo conectada a esta red durante al menos 2 horas
		 * en el último mes (o mínimo 1 hora si está registrado).
		 * La opción sasl-bypass es otra configuración. Significa
		 * que los usuarios que se autentican en los servicios a través de SASL
		 * también se consideran usuarios conocidos.
		 * Usuarios en el grupo de "usuarios conocidos" (ya sea por reputación
		 * o por SASL) siempre están permitidas en este módulo.
		 */
		except {
			reputation-score 24;
			identified yes;
		}
    
		/* Los nuevos usuarios son todos los usuarios que no pertenecen al
		 * grupo de usuarios conocidos. Se consideran "nuevos" y en
		 * caso de un alto número de tales nuevos usuarios que se conectan
		 * están sujetos a limitación de velocidad de conexión.
		 * Por defecto la tarifa es de 20 nuevos usuarios locales por minuto
		 * y 30 nuevos usuarios globales por minuto.
		 */
		new-users {
			local-throttle 20:60;
			global-throttle 30:60;
		}

		/* Esto configura cuando este módulo NO estará activo.
		 * La configuración predeterminada deshabilitará el módulo cuando:
		 * - El módulo de reputación se ha estado ejecutando durante menos de
		 *   una semana. Si se ejecuta menos de 1 semana, entonces hay
		 * datos insuficientes para considerar quién es un "usuario conocido".
		 * - El servidor acaba de iniciarse (primeros 3 minutos).
		 */
		disabled-when {
			reputation-gathering 1w;
			start-delay 3m;
		}
	}
}

/* HISTORIAL DE UN CANAL:
 * UnrealIRCd tiene el modo de canal +H que los usuarios pueden usar para volver a leer
 * los mensajes del canal, antes de que se unieran. Para información general
 * en esta función, lee https://www.unrealircd.org/docs/Channel_history
 *
 * El historial del canal puede ser configurado vía set::history. Los valores predeterminados
 * son probablemente buenos para ti, pero si está en un sistema con poca memoria
 * o tiene miles de canales, entonces es posible que debas volver a verificar. Lee
 * https://www.unrealircd.org/docs/Set_block#set::history para las opciones.
 *
 * Además de eso, puedes tener "persistent channel history", cual
 * significa que el historial del canal se almacena encriptado en el disco
 * para que se conserve entre reinicios del servidor IRC, lee
 * https://www.unrealircd.org/docs/Set_block#Persistent_channel_history
 * La función de historial persistente NO está habilitada de manera predeterminada 
 * porque usted necesita configurar un bloque de secreto { } para ello. Un sencillo
 * ejemplo con contraseñas almacenadas directamente en el archivo de configuración.
 * Para obtener una mejor seguridad, lee https://www.unrealircd.org/docs/Secret_block
 * las diferentes alternativas para que no almacenes contraseñas directamente en la configuración.
 */
//secret historydb { password "somepassword"; }
//set { history { channel { persist yes; db-secret "historydb"; } } }

/* Finalmente, es posible que desee tener un MOTD (Mensaje del día), esto puede ser
 * se hace creando un archivo de texto 'ircd.motd' en su directorio conf/.
 * Este archivo se mostrará a tus usuarios al conectarse.
 * Para obtener más información, consulte https://www.unrealircd.org/docs/MOTD_and_Rules
 */ 

/*
 * Problemas o necesita más ayuda?
 * 1) https://www.unrealircd.org/docs/
 * 2) https://www.unrealircd.org/docs/Main_Page/es <- ¡responde el 80% de tus preguntas!
 * 3) Si aún tiene problemas, puede obtener soporte:
 * - Foros: https://forums.unrealircd.org/
 * - IRC: irc.unrealircd.org (SSL en el puerto 6697) / #unreal-support
 * ¡Tenga en cuenta que primero le pedimos que lea la documentación y las preguntas frecuentes!
 */
