Introducción
En los últimos años, la salud mental ha cobrado una relevancia
creciente, especialmente dentro del ámbito educativo. Estudiantes de
todos los niveles enfrentan presiones académicas, sociales y personales
que pueden afectar significativamente su bienestar emocional. En este
contexto, entender los factores que influyen en la salud mental de los
estudiantes universitarios es fundamental para desarrollar estrategias
de apoyo más efectivas.
Este proyecto presenta un análisis exploratorio de datos (EDA) enfocado
en un conjunto de información recopilada mediante encuestas a
estudiantes universitarios sobre su salud mental. A través de una serie
de visualizaciones interactivas, se busca identificar patrones,
relaciones y posibles factores de riesgo o protección que inciden en el
bienestar psicológico de esta población.
Para hacer una apropiada síntesis de estos datos vemos preciso utilizar
las herramientas de visualizacion grafica que el lenguaje R es capaz de
facilitar, ya que más que sólo mostrar datos, pretendemos apuntar a las
causas, los patrones y los factores que influyen negativamente sobre la
salud mental de los estudiantes, para de esta manera, tanto los
estudiantes como las instituciones puedan valorar qué se puede mejorar
para una mantener una buena salud mental.
Descripción del problema
La etapa universitaria representa un periodo de profundos cambios y
exigencias para los jóvenes. Factores como la carga académica, la
adaptación social, la presión por el rendimiento, la incertidumbre sobre
el futuro y la falta de redes de apoyo pueden desencadenar altos niveles
de estrés, ansiedad y otros problemas de salud mental.
A pesar del creciente reconocimiento de este fenómeno, muchas
universidades aún carecen de mecanismos adecuados para detectar y
atender oportunamente estos problemas. A menudo, los estudiantes no
buscan ayuda profesional por desconocimiento, estigmatización o falta de
recursos accesibles.
Este proyecto parte de una pregunta central: ¿Qué patrones o factores
pueden estar asociados con la salud mental de los estudiantes
universitarios, según los datos autodeclarados en una encuesta?
Entre las preguntas específicas que guiarán este análisis se
encuentran:
¿Qué tan frecuente es el estrés entre los estudiantes
encuestados?
¿Existen diferencias entre géneros o cursos en cuanto a la búsqueda
de ayuda profesional?
¿Qué relación existe entre la edad, el tipo de institución y la
presencia de problemas mentales?
El objetivo de este análisis es proporcionar una visión basada en datos
que permita comprender mejor la situación actual de los estudiantes y,
eventualmente, ofrecer información útil para la toma de decisiones
institucionales.
Definición de fuentes de datos
Para este análisis se utiliza un conjunto de datos denominado
“Student Mental Health”, que recopila respuestas de estudiantes
universitarios a una encuesta enfocada en su estado emocional, hábitos y
acceso a servicios de salud mental.
Características principales del conjunto de datos:
Cantidad de observaciones: 101 estudiantes
Variables a usar:
timestamp: Fecha y hora de la respuesta.
gender: Género del estudiante.
age: Edad del estudiante.
course: Carrera o área de estudio.
year of study: Año actual de carrera.
cgpa: Promedio de calificaciones.
marital status: Estado marital del estudiante.
depression: Presencia de síntomas depresivos.
anxiety: Presencia de ansiedad.
panick attack: Indica si se han presentado ataques de ansiedad.
seek treatment: Indica si el estudiante ha buscado ayuda profesional.
La distribución por género permite conocer la representatividad de
los estudiantes encuestados. En muchos estudios sobre salud mental, se
observan diferencias notables entre géneros tanto en la prevalencia de
síntomas como en la búsqueda de ayuda.
La ansiedad es una de las condiciones más frecuentes entre
estudiantes universitarios. Esta gráfica busca cuantificar cuántos
estudiantes reconocen sentirse con ansiedad. En la misma, podemos ver
que una buena parte de los estudiantes encuestados no se sienten con
ansiedad.
Sin embargo, es importante considerar que muchas veces los
estudiantes no identifican o no expresan abiertamente sus niveles de
ansiedad debido a estigmas sociales, falta de autoconocimiento emocional
o por considerar sus síntomas como “normales” dentro del contexto
universitario.
Por otro lado, aquellos que sí reportan experimentar ansiedad pueden
enfrentarse a una amplia gama de efectos negativos. A nivel académico,
la ansiedad puede dificultar la concentración, la memoria y la capacidad
de organizar ideas, lo que impacta directamente en el rendimiento en
exámenes, entregas de proyectos y participación en clase. En lo
emocional, puede manifestarse como una sensación constante de
preocupación, irritabilidad o incluso episodios de pánico. En el plano
físico, es común que se presenten síntomas como insomnio, dolores
musculares, fatiga persistente o problemas gastrointestinales.
El rendimiento académico puede relacionarse con la salud mental, tanto
como causa como consecuencia. Observar su distribución puede revelar si
hay un sesgo hacia cierto tipo de estudiante.Si observamos, en la
gráfica se ve que una gran mayoría tiene un rendimiento por arriba de 3
y unos pocos por debajo de este.
Si analizamos el grafico, podemos darnos cuenta que la gran parte de
los encuestados no han buscado orientación profesional o bien desconocen
de la existencia de estos recursos en su institucion.
Esto es algo muy negativo, ya que muchas veces al presentar algun tipo
de padecimiento, ya sea ansiedad o depresion, la mejor opcion en estos
casos es buscar la ayuda de un profesional que nos pueda asesorar sobre
como salir o sobreponerse a este tipo de situaciones.
#bivariable
En el gráfico presentado, podemos notar una alta densidad de
estudiantes en las carreras de tecnología y en ciencias sociales. A su
vez, estas parecen tener la mayor incidencia en padecimientos de
depresión, lo que sugiere una posible correlación entre el tipo de
formación académica y la carga emocional que enfrentan los estudiantes.
También es importante observar que en aquellas carreras que no se
pudieron catalogar explícitamente, se evidencia que un mayor porcentaje
de estudiantes presenta síntomas de depresión en comparación con
aquellos que no los manifiestan.
Particularmente, las carreras del ámbito tecnológico, como las
ingenierías, presentan desafíos únicos que pueden tener un impacto
significativo en la salud mental. Estas disciplinas suelen estar
marcadas por una fuerte carga académica, una alta competitividad, y un
ritmo exigente de aprendizaje técnico y práctico. Los estudiantes de
ingeniería frecuentemente enfrentan jornadas largas de estudio, entregas
complejas, y exámenes que requieren no solo memoria, sino también
razonamiento lógico, abstracción matemática y resolución eficiente de
problemas bajo presión.
Revisando la grafica, podemos notar varias cosas, ninguno de los
estudiantes que dijeron no tener depresión acude a un profesional.
Mientras tanto, observamos que los estudiantes que dicen tener depresion
son una minoría los que acuden a tratamiento.
Para dar algo de contexto sobre este grafico 3D podemos empezar diciendo
que el tamaño de las burbujas crece segun que tantos padecimientos tenga
la persona encuestada, y que segun el color de la burbuja representa si
buscó ayuda profesional, con esto en mente podemos observar distintos
patrones curiosos, como por ejemplo que las personas que presentan
padecimientos de salud mental no siempre buscan tratamiento, y esto es
mas notable en los primeros años de estudio y a edades mas tempranas, y
tambien podemos observar que las personas con un rendimiento academico
mas bajo tienden a presentar mas condiciones de salud mental
En este grafico podemos observar varios comportamientos interesantes, en
primer lugar podemos ver que las personas que presentan depresion son
los unicos que se plantean el buscar tratamiento profesional, luego
podemos observar como las mujeres son mas propensas a buscar ayuda
profesional, mas que los hombres.
Los gráficos muestran patrones importantes sobre la salud mental de los
estudiantes universitarios. Por ejemplo, se observa que las mujeres
tienden a presentar más síntomas de depresión. También se nota que
quienes están en los primeros años de carrera suelen sentir más
ansiedad, posiblemente por el reto de adaptarse al nuevo ambiente
académico y social. Además, los estudiantes con promedios más bajos
(menos de 3.0) son menos propensos a buscar ayuda profesional, incluso
si experimentan ansiedad o depresión. Esto podría deberse al estigma o a
la falta de recursos accesibles. En general, los datos muestran la
necesidad de ofrecer apoyo psicológico adaptado al género, al año de
estudios y al rendimiento académico, y de promover campañas que ayuden a
normalizar el cuidado de la salud mental en las universidades.
Conclusiones
A partir de lo anteriormente expuesto, tenemos varias conclusiones
que podemos hacer respecto a los estudiantes entrevistados, que si bien
los graficos pueden variar dependiendo del lugar y la universidad, mucho
de lo que se puede apreciar en estos datos se pueden extrapolar a otros
lugares.
-Tan solo una minoría busca asesoramiento profesional ante la
depresión y la ansiedad
-Se pudo observar que estudiantes de menor edad y en sus primeros
años de estudio tienden a presentar más sintomas de depresion y
ansiedad
-Los estudiantes con menor rendimiento academico se ven mayormente
afectados tanto por depresion o por ansiedad
-Según la muestra de datos, los estudiantes del area de tecnologia y
de ciencias sociales y humanidades, aparte de ser un sector mas denso,
son los que tienden a ser más afectados por depresion o ansiedad.
-Vemos que a pesar de las pocas instancias, dentro de estas las
mujeres fueron las que mas buscaron ayuda profesional.
Siendo esta la situación hay puntos que pueden ser algo alarmantes,
por ejemplo:
La baja búsqueda de ayuda profesional sugiere que muchos estudiantes
pueden estar enfrentando trastornos emocionales sin el acompañamiento
adecuado, lo que podría estar manifestando un deterioro progresivo de su
salud mental, ademas de esto, la baja búsqueda de ayuda profesional
sugiere que muchos estudiantes pueden estar enfrentando trastornos
emocionales sin el acompañamiento adecuado, lo que podría derivar en un
deterioro progresivo de su bienestar psicológico.
A su vez, los estudiantes más jóvenes y de primeros años, al ser más
afectados podrían tener mayores dificultades de adaptación al entorno
universitario, afectando de mala manera su permanencia y el desarrollo
académico.
De la misma forma, aunque las mujeres buscan más ayuda, sigue siendo
preocupante que los hombres, posiblemente por estigmas de género, no
accedan a apoyo profesional, reprimiendo así sus aflicciones.
Siendo así, sería útil implementar acciones que propicien la buena salud
mental , quizas fortaleciendo los servicios de salud mental en
universidades, haciendo campañas de concientización y desestigmatización
o fomentar aún más el equilibrio entre vida académica y personal
LS0tDQp0aXRsZTogIkFuw6FsaXNpcyBzb2JyZSBsYSBzYWx1ZCBtZW50YWwgZW4gZXN0dWRpYW50ZXMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICB3YXJuaW5nID0gRkFMU0UsDQogIG1lc3NhZ2UgPSBGQUxTRSwNCiAgZWNobyA9IEZBTFNFICANCikNCmBgYA0KPGgyIHN0eWxlPSJjb2xvcjpkYXJrYmx1ZTsiPg0KDQpJbnRyb2R1Y2Npw7NuDQoNCjwvaDI+DQoNCjxwPg0KRW4gbG9zIMO6bHRpbW9zIGHDsW9zLCBsYSBzYWx1ZCBtZW50YWwgaGEgY29icmFkbyB1bmEgcmVsZXZhbmNpYSBjcmVjaWVudGUsIGVzcGVjaWFsbWVudGUgZGVudHJvIGRlbCDDoW1iaXRvIGVkdWNhdGl2by4gRXN0dWRpYW50ZXMgZGUgdG9kb3MgbG9zIG5pdmVsZXMgZW5mcmVudGFuIHByZXNpb25lcyBhY2Fkw6ltaWNhcywgc29jaWFsZXMgeSBwZXJzb25hbGVzIHF1ZSBwdWVkZW4gYWZlY3RhciBzaWduaWZpY2F0aXZhbWVudGUgc3UgYmllbmVzdGFyIGVtb2Npb25hbC4gRW4gZXN0ZSBjb250ZXh0bywgZW50ZW5kZXIgbG9zIGZhY3RvcmVzIHF1ZSBpbmZsdXllbiBlbiBsYSBzYWx1ZCBtZW50YWwgZGUgbG9zIGVzdHVkaWFudGVzIHVuaXZlcnNpdGFyaW9zIGVzIGZ1bmRhbWVudGFsIHBhcmEgZGVzYXJyb2xsYXIgZXN0cmF0ZWdpYXMgZGUgYXBveW8gbcOhcyBlZmVjdGl2YXMuDQo8L3A+DQoNCjxwPg0KRXN0ZSBwcm95ZWN0byBwcmVzZW50YSB1biBhbsOhbGlzaXMgZXhwbG9yYXRvcmlvIGRlIGRhdG9zIChFREEpIGVuZm9jYWRvIGVuIHVuIGNvbmp1bnRvIGRlIGluZm9ybWFjacOzbiByZWNvcGlsYWRhIG1lZGlhbnRlIGVuY3Vlc3RhcyBhIGVzdHVkaWFudGVzIHVuaXZlcnNpdGFyaW9zIHNvYnJlIHN1IHNhbHVkIG1lbnRhbC4gQSB0cmF2w6lzIGRlIHVuYSBzZXJpZSBkZSB2aXN1YWxpemFjaW9uZXMgaW50ZXJhY3RpdmFzLCBzZSBidXNjYSBpZGVudGlmaWNhciBwYXRyb25lcywgcmVsYWNpb25lcyB5IHBvc2libGVzIGZhY3RvcmVzIGRlIHJpZXNnbyBvIHByb3RlY2Npw7NuIHF1ZSBpbmNpZGVuIGVuIGVsIGJpZW5lc3RhciBwc2ljb2zDs2dpY28gZGUgZXN0YSBwb2JsYWNpw7NuLg0KPC9wPg0KDQo8cD4NClBhcmEgaGFjZXIgdW5hIGFwcm9waWFkYSBzw61udGVzaXMgZGUgZXN0b3MgZGF0b3MgdmVtb3MgcHJlY2lzbyB1dGlsaXphciBsYXMgaGVycmFtaWVudGFzIGRlIHZpc3VhbGl6YWNpb24gZ3JhZmljYSBxdWUgZWwgbGVuZ3VhamUgUiBlcyBjYXBheiBkZSBmYWNpbGl0YXIsIHlhIHF1ZSBtw6FzIHF1ZSBzw7NsbyBtb3N0cmFyIGRhdG9zLCBwcmV0ZW5kZW1vcyBhcHVudGFyIGEgbGFzIGNhdXNhcywgbG9zIHBhdHJvbmVzIHkgbG9zIGZhY3RvcmVzIHF1ZSBpbmZsdXllbiBuZWdhdGl2YW1lbnRlIHNvYnJlIGxhIHNhbHVkIG1lbnRhbCBkZSBsb3MgZXN0dWRpYW50ZXMsIHBhcmEgZGUgZXN0YSBtYW5lcmEsIHRhbnRvIGxvcyBlc3R1ZGlhbnRlcyBjb21vIGxhcyBpbnN0aXR1Y2lvbmVzIHB1ZWRhbiB2YWxvcmFyIHF1w6kgc2UgcHVlZGUgbWVqb3JhciBwYXJhIHVuYSBtYW50ZW5lciB1bmEgYnVlbmEgc2FsdWQgbWVudGFsLg0KPC9wPg0KDQo8aDIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPg0KRGVzY3JpcGNpw7NuIGRlbCBwcm9ibGVtYQ0KPGgyLz4NCg0KPHA+DQpMYSBldGFwYSB1bml2ZXJzaXRhcmlhIHJlcHJlc2VudGEgdW4gcGVyaW9kbyBkZSBwcm9mdW5kb3MgY2FtYmlvcyB5IGV4aWdlbmNpYXMgcGFyYSBsb3MgasOzdmVuZXMuIEZhY3RvcmVzIGNvbW8gbGEgY2FyZ2EgYWNhZMOpbWljYSwgbGEgYWRhcHRhY2nDs24gc29jaWFsLCBsYSBwcmVzacOzbiBwb3IgZWwgcmVuZGltaWVudG8sIGxhIGluY2VydGlkdW1icmUgc29icmUgZWwgZnV0dXJvIHkgbGEgZmFsdGEgZGUgcmVkZXMgZGUgYXBveW8gcHVlZGVuIGRlc2VuY2FkZW5hciBhbHRvcyBuaXZlbGVzIGRlIGVzdHLDqXMsIGFuc2llZGFkIHkgb3Ryb3MgcHJvYmxlbWFzIGRlIHNhbHVkIG1lbnRhbC4NCg0KQSBwZXNhciBkZWwgY3JlY2llbnRlIHJlY29ub2NpbWllbnRvIGRlIGVzdGUgZmVuw7NtZW5vLCBtdWNoYXMgdW5pdmVyc2lkYWRlcyBhw7puIGNhcmVjZW4gZGUgbWVjYW5pc21vcyBhZGVjdWFkb3MgcGFyYSBkZXRlY3RhciB5IGF0ZW5kZXIgb3BvcnR1bmFtZW50ZSBlc3RvcyBwcm9ibGVtYXMuIEEgbWVudWRvLCBsb3MgZXN0dWRpYW50ZXMgbm8gYnVzY2FuIGF5dWRhIHByb2Zlc2lvbmFsIHBvciBkZXNjb25vY2ltaWVudG8sIGVzdGlnbWF0aXphY2nDs24gbyBmYWx0YSBkZSByZWN1cnNvcyBhY2Nlc2libGVzLg0KDQpFc3RlIHByb3llY3RvIHBhcnRlIGRlIHVuYSBwcmVndW50YSBjZW50cmFsOg0Kwr9RdcOpIHBhdHJvbmVzIG8gZmFjdG9yZXMgcHVlZGVuIGVzdGFyIGFzb2NpYWRvcyBjb24gbGEgc2FsdWQgbWVudGFsIGRlIGxvcyBlc3R1ZGlhbnRlcyB1bml2ZXJzaXRhcmlvcywgc2Vnw7puIGxvcyBkYXRvcyBhdXRvZGVjbGFyYWRvcyBlbiB1bmEgZW5jdWVzdGE/DQoNCkVudHJlIGxhcyBwcmVndW50YXMgZXNwZWPDrWZpY2FzIHF1ZSBndWlhcsOhbiBlc3RlIGFuw6FsaXNpcyBzZSBlbmN1ZW50cmFuOg0KDQrCv1F1w6kgdGFuIGZyZWN1ZW50ZSBlcyBlbCBlc3Ryw6lzIGVudHJlIGxvcyBlc3R1ZGlhbnRlcyBlbmN1ZXN0YWRvcz8NCg0Kwr9FeGlzdGVuIGRpZmVyZW5jaWFzIGVudHJlIGfDqW5lcm9zIG8gY3Vyc29zIGVuIGN1YW50byBhIGxhIGLDunNxdWVkYSBkZSBheXVkYSBwcm9mZXNpb25hbD8NCg0Kwr9RdcOpIHJlbGFjacOzbiBleGlzdGUgZW50cmUgbGEgZWRhZCwgZWwgdGlwbyBkZSBpbnN0aXR1Y2nDs24geSBsYSBwcmVzZW5jaWEgZGUgcHJvYmxlbWFzIG1lbnRhbGVzPw0KDQpFbCBvYmpldGl2byBkZSBlc3RlIGFuw6FsaXNpcyBlcyBwcm9wb3JjaW9uYXIgdW5hIHZpc2nDs24gYmFzYWRhIGVuIGRhdG9zIHF1ZSBwZXJtaXRhIGNvbXByZW5kZXIgbWVqb3IgbGEgc2l0dWFjacOzbiBhY3R1YWwgZGUgbG9zIGVzdHVkaWFudGVzIHksIGV2ZW50dWFsbWVudGUsIG9mcmVjZXIgaW5mb3JtYWNpw7NuIMO6dGlsIHBhcmEgbGEgdG9tYSBkZSBkZWNpc2lvbmVzIGluc3RpdHVjaW9uYWxlcy4NCjxwLz4NCg0KPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij4NCkRlZmluaWNpw7NuIGRlIGZ1ZW50ZXMgZGUgZGF0b3MNCjxoMi8+DQo8cD4NClBhcmEgZXN0ZSBhbsOhbGlzaXMgc2UgdXRpbGl6YSB1biBjb25qdW50byBkZSBkYXRvcyBkZW5vbWluYWRvICJTdHVkZW50IE1lbnRhbCBIZWFsdGgiLCBxdWUgcmVjb3BpbGEgcmVzcHVlc3RhcyBkZSBlc3R1ZGlhbnRlcyB1bml2ZXJzaXRhcmlvcyBhIHVuYSBlbmN1ZXN0YSBlbmZvY2FkYSBlbiBzdSBlc3RhZG8gZW1vY2lvbmFsLCBow6FiaXRvcyB5IGFjY2VzbyBhIHNlcnZpY2lvcyBkZSBzYWx1ZCBtZW50YWwuDQoNCkNhcmFjdGVyw61zdGljYXMgcHJpbmNpcGFsZXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zOg0KDQpDYW50aWRhZCBkZSBvYnNlcnZhY2lvbmVzOiAxMDEgZXN0dWRpYW50ZXMNCg0KVmFyaWFibGVzIGEgdXNhcjoNCg0KdGltZXN0YW1wOiBGZWNoYSB5IGhvcmEgZGUgbGEgcmVzcHVlc3RhLg0KDQpnZW5kZXI6IEfDqW5lcm8gZGVsIGVzdHVkaWFudGUuDQoNCmFnZTogRWRhZCBkZWwgZXN0dWRpYW50ZS4NCg0KY291cnNlOiBDYXJyZXJhIG8gw6FyZWEgZGUgZXN0dWRpby4NCg0KeWVhciBvZiBzdHVkeTogQcOxbyBhY3R1YWwgZGUgY2FycmVyYS4NCg0KY2dwYTogUHJvbWVkaW8gZGUgY2FsaWZpY2FjaW9uZXMuDQoNCm1hcml0YWwgc3RhdHVzOiBFc3RhZG8gbWFyaXRhbCBkZWwgZXN0dWRpYW50ZS4NCg0KZGVwcmVzc2lvbjogUHJlc2VuY2lhIGRlIHPDrW50b21hcyBkZXByZXNpdm9zLg0KDQphbnhpZXR5OiBQcmVzZW5jaWEgZGUgYW5zaWVkYWQuDQoNCnBhbmljayBhdHRhY2s6IEluZGljYSBzaSBzZSBoYW4gcHJlc2VudGFkbyBhdGFxdWVzIGRlIGFuc2llZGFkLg0KDQpzZWVrIHRyZWF0bWVudDogSW5kaWNhIHNpIGVsIGVzdHVkaWFudGUgaGEgYnVzY2FkbyBheXVkYSBwcm9mZXNpb25hbC4NCjxwLz4NCg0KYGBge3J9DQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkodGlkeXIpDQpkYXRvcyA8LSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9wcm9sdS9Eb3dubG9hZHMvU3R1ZGVudF9NZW50YWxfSGVhbHRoX0NsZWFuZWQueGxzeCIpDQoNCmdyYWZpY28gPC0gZ2dwbG90KGRhdGEgPSBkYXRvcywgYWVzKHggPSBmYWN0b3IoZ2VuZGVyKSwgZmlsbCA9IGZhY3RvcihnZW5kZXIpKSkgKw0KICBnZW9tX2JhcihhbHBoYSA9IDAuOCkgKw0KICBsYWJzKHRpdGxlID0gIkdlbmVybyBkZSBlbmN1ZXN0YWRvcyIsIHggPSAiR2VuZXJvIiwgeSA9ICJDYW50aWRhZCIsIGZpbGwgPSAiR2VuZXJvIikNCmdncGxvdGx5KGdyYWZpY28pDQpgYGANCjxwPg0KTGEgZGlzdHJpYnVjacOzbiBwb3IgZ8OpbmVybyBwZXJtaXRlIGNvbm9jZXIgbGEgcmVwcmVzZW50YXRpdmlkYWQgZGUgbG9zIGVzdHVkaWFudGVzIGVuY3Vlc3RhZG9zLiBFbiBtdWNob3MgZXN0dWRpb3Mgc29icmUgc2FsdWQgbWVudGFsLCBzZSBvYnNlcnZhbiBkaWZlcmVuY2lhcyBub3RhYmxlcyBlbnRyZSBnw6luZXJvcyB0YW50byBlbiBsYSBwcmV2YWxlbmNpYSBkZSBzw61udG9tYXMgY29tbyBlbiBsYSBiw7pzcXVlZGEgZGUgYXl1ZGEuDQoNCjxwLz4NCg0KYGBge3J9DQp0YWJsYV9hbnNpZWRhZCA8LSB0YWJsZShkYXRvcyRhbnhpZXR5KQ0KDQpncmFmaWNvX3Bhc3RlbCA8LSBwbG90X2x5KGxhYmVscyA9IG5hbWVzKHRhYmxhX2Fuc2llZGFkKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRhYmxhX2Fuc2llZGFkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJwaWUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGluZm8gPSAicGVyY2VudCtsYWJlbCIsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChjb2xvcnMgPSBjKCJsaWdodGJsdWUiLCAic2FsbW9uIikpKSAlPiUNCiAgbGF5b3V0KHRpdGxlID0gIkRpc3RyaWJ1Y2nDs24gZGUgZXN0dWRpYW50ZXMgY29uIGFuc2llZGFkIikNCg0KDQpncmFmaWNvX3Bhc3RlbA0KDQpgYGANCg0KPHA+DQpMYSBhbnNpZWRhZCBlcyB1bmEgZGUgbGFzIGNvbmRpY2lvbmVzIG3DoXMgZnJlY3VlbnRlcyBlbnRyZSBlc3R1ZGlhbnRlcyB1bml2ZXJzaXRhcmlvcy4gRXN0YSBncsOhZmljYSBidXNjYSBjdWFudGlmaWNhciBjdcOhbnRvcyBlc3R1ZGlhbnRlcyByZWNvbm9jZW4gc2VudGlyc2UgY29uIGFuc2llZGFkLiBFbiBsYSBtaXNtYSwgcG9kZW1vcyB2ZXIgcXVlIHVuYSBidWVuYSBwYXJ0ZSBkZSBsb3MgZXN0dWRpYW50ZXMgZW5jdWVzdGFkb3Mgbm8gc2Ugc2llbnRlbiBjb24gYW5zaWVkYWQuDQoNClNpbiBlbWJhcmdvLCBlcyBpbXBvcnRhbnRlIGNvbnNpZGVyYXIgcXVlIG11Y2hhcyB2ZWNlcyBsb3MgZXN0dWRpYW50ZXMgbm8gaWRlbnRpZmljYW4gbyBubyBleHByZXNhbiBhYmllcnRhbWVudGUgc3VzIG5pdmVsZXMgZGUgYW5zaWVkYWQgZGViaWRvIGEgZXN0aWdtYXMgc29jaWFsZXMsIGZhbHRhIGRlIGF1dG9jb25vY2ltaWVudG8gZW1vY2lvbmFsIG8gcG9yIGNvbnNpZGVyYXIgc3VzIHPDrW50b21hcyBjb21vICJub3JtYWxlcyIgZGVudHJvIGRlbCBjb250ZXh0byB1bml2ZXJzaXRhcmlvLg0KDQpQb3Igb3RybyBsYWRvLCBhcXVlbGxvcyBxdWUgc8OtIHJlcG9ydGFuIGV4cGVyaW1lbnRhciBhbnNpZWRhZCBwdWVkZW4gZW5mcmVudGFyc2UgYSB1bmEgYW1wbGlhIGdhbWEgZGUgZWZlY3RvcyBuZWdhdGl2b3MuIEEgbml2ZWwgYWNhZMOpbWljbywgbGEgYW5zaWVkYWQgcHVlZGUgZGlmaWN1bHRhciBsYSBjb25jZW50cmFjacOzbiwgbGEgbWVtb3JpYSB5IGxhIGNhcGFjaWRhZCBkZSBvcmdhbml6YXIgaWRlYXMsIGxvIHF1ZSBpbXBhY3RhIGRpcmVjdGFtZW50ZSBlbiBlbCByZW5kaW1pZW50byBlbiBleMOhbWVuZXMsIGVudHJlZ2FzIGRlIHByb3llY3RvcyB5IHBhcnRpY2lwYWNpw7NuIGVuIGNsYXNlLiBFbiBsbyBlbW9jaW9uYWwsIHB1ZWRlIG1hbmlmZXN0YXJzZSBjb21vIHVuYSBzZW5zYWNpw7NuIGNvbnN0YW50ZSBkZSBwcmVvY3VwYWNpw7NuLCBpcnJpdGFiaWxpZGFkIG8gaW5jbHVzbyBlcGlzb2Rpb3MgZGUgcMOhbmljby4gRW4gZWwgcGxhbm8gZsOtc2ljbywgZXMgY29tw7puIHF1ZSBzZSBwcmVzZW50ZW4gc8OtbnRvbWFzIGNvbW8gaW5zb21uaW8sIGRvbG9yZXMgbXVzY3VsYXJlcywgZmF0aWdhIHBlcnNpc3RlbnRlIG8gcHJvYmxlbWFzIGdhc3Ryb2ludGVzdGluYWxlcy4NCjxwLz4NCg0KDQpgYGB7cn0NCnBsb3RfbHkoZGF0b3MsIHg9fmNncGEsIHR5cGU9J2hpc3RvZ3JhbScpJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJIaXN0b2dyYW1hIGRlIHJlbmRpbWllbnRvIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FudGlkYWQgZGUgZXN0dWRpYW50ZXMiKQ0KICApDQpgYGANCjxwPg0KRWwgcmVuZGltaWVudG8gYWNhZMOpbWljbyBwdWVkZSByZWxhY2lvbmFyc2UgY29uIGxhIHNhbHVkIG1lbnRhbCwgdGFudG8gY29tbyBjYXVzYSBjb21vIGNvbnNlY3VlbmNpYS4gT2JzZXJ2YXIgc3UgZGlzdHJpYnVjacOzbiBwdWVkZSByZXZlbGFyIHNpIGhheSB1biBzZXNnbyBoYWNpYSBjaWVydG8gdGlwbyBkZSBlc3R1ZGlhbnRlLlNpIG9ic2VydmFtb3MsIGVuIGxhIGdyw6FmaWNhIHNlIHZlIHF1ZSB1bmEgZ3JhbiBtYXlvcsOtYSB0aWVuZSB1biByZW5kaW1pZW50byBwb3IgYXJyaWJhIGRlIDMgeSB1bm9zIHBvY29zIHBvciBkZWJham8gZGUgZXN0ZS4NCjxwLz4NCg0KYGBge3J9DQpncmFmaWNvIDwtIGdncGxvdChkYXRhID0gZGF0b3MsIGFlcyh4ID0gZmFjdG9yKHNlZWtfdHJlYXRtZW50KSwgZmlsbCA9IGZhY3RvcihzZWVrX3RyZWF0bWVudCkpKSArDQogIGdlb21fYmFyKGFscGhhID0gMC44KSArDQogIGxhYnModGl0bGUgPSAiQ2FudGlkYWQgZGUgZW5jdWVzdGFkb3MgcXVlIGJ1c2NhbiBheXVkYSBwcm9mZXNpb25hbCIseD0iUmVzcHVlc3RhIix5ID0gIkNhbnRpZGFkIiwgZmlsbCA9ICJDYW50aWRhZCIpDQpnZ3Bsb3RseShncmFmaWNvKQ0KYGBgDQo8cD4NClNpIGFuYWxpemFtb3MgZWwgZ3JhZmljbywgcG9kZW1vcyBkYXJub3MgY3VlbnRhIHF1ZSBsYSBncmFuIHBhcnRlIGRlIGxvcyBlbmN1ZXN0YWRvcyBubyBoYW4gYnVzY2FkbyBvcmllbnRhY2nDs24gcHJvZmVzaW9uYWwgbyBiaWVuIGRlc2Nvbm9jZW4gZGUgbGEgZXhpc3RlbmNpYSBkZSBlc3RvcyByZWN1cnNvcyBlbiBzdSBpbnN0aXR1Y2lvbi4NCg0KRXN0byBlcyBhbGdvIG11eSBuZWdhdGl2bywgeWEgcXVlIG11Y2hhcyB2ZWNlcyBhbCBwcmVzZW50YXIgYWxndW4gdGlwbyBkZSBwYWRlY2ltaWVudG8sIHlhIHNlYSBhbnNpZWRhZCBvIGRlcHJlc2lvbiwgbGEgbWVqb3Igb3BjaW9uIGVuIGVzdG9zIGNhc29zIGVzIGJ1c2NhciBsYSBheXVkYSBkZSB1biBwcm9mZXNpb25hbCBxdWUgbm9zIHB1ZWRhIGFzZXNvcmFyIHNvYnJlIGNvbW8gc2FsaXIgbyBzb2JyZXBvbmVyc2UgYSBlc3RlIHRpcG8gZGUgc2l0dWFjaW9uZXMuDQo8cC8+DQoNCg0KI2JpdmFyaWFibGUNCg0KYGBge3J9DQpkYXRvcyA8LSBkYXRvcyAlPiUNCiAgbXV0YXRlKEFyZWEgPSBjYXNlX3doZW4oDQogICAgY291cnNlICVpbiUgYygiTGF3cyIsICJMYXciLCAiUHN5Y2hvbG9neSIsICJIdW1hbiBSZXNvdXJjZXMiLCAiSXJraHMiLCAiS2lya2hzIiwgIktJUktIUyIsICJVc3VsdWRkaW4iLA0KICAgICAgICAgICAgICAgICAgIkZpcWgiLCAiRmlxaCBmYXR3YSIsICJQZW5kaWRpa2FuIElzbGFtIiwgIklzbGFtaWMgRWR1Y2F0aW9uIiwgIkNvbW11bmljYXRpb24iLCAiTWFsY29tIiwgIkh1bWFuIFNjaWVuY2VzIikgfiAiQ2llbmNpYXMgU29jaWFsZXMgeSBIdW1hbmlkYWRlcyIsDQogICAgDQogICAgY291cnNlICVpbiUgYygiQmlvbWVkaWNhbCBzY2llbmNlIiwgIkJpb21lZGljYWwgU2NpZW5jZSIsICJOdXJzaW5nIiwgIkRpcGxvbWEgTnVyc2luZyIsICJSYWRpb2dyYXBoeSIsICJCaW90ZWNobm9sb2d5IiwgIk1IU0MiKSB+ICJDaWVuY2lhcyBkZSBsYSBTYWx1ZCIsDQogICAgDQogICAgY291cnNlICVpbiUgYygiTWF0aGVtYXRpY3MiLCAiTWF0aGVtYXRoaWNzIiwgIk1hcmluZSBzY2llbmNlIiwgIkVjb25zIiwgIkVjb25vbWljcyIpIH4gIkNpZW5jaWFzIEV4YWN0YXMgeSBOYXR1cmFsZXMiLA0KICAgIA0KICAgIGNvdXJzZSAlaW4lIGMoIkFjY291bnRpbmciLCAiQmFua2luZyBTdHVkaWVzIiwgIkJ1c2luZXNzIEFkbWluaXN0cmF0aW9uIiwgIktFTk1TIiwgIktvcCIpIH4gIk5lZ29jaW9zIHkgRWNvbm9tw61hIiwNCiAgICANCiAgICBjb3Vyc2UgJWluJSBjKCJCSVQiLCAiQkNTIiwgIkNUUyIsICJJVCIsICJFbmdpbmVlcmluZyIsICJFbmdpbmUiLCAiZW5naW4iLCAiS09FIiwgIkVOTSIsICJLT0EiLCAiQkVOTCIpIH4gIlRlY25vbG9nw61hIGUgSW5nZW5pZXLDrWEiLA0KICAgIA0KICAgIGNvdXJzZSAlaW4lIGMoIkRJUExPTUEgVEVTTCIsICJQZW5kaWRpa2FuIElzbGFtIiwgIklzbGFtaWMgRWR1Y2F0aW9uIikgfiAiRWR1Y2FjacOzbiB5IEZvcm1hY2nDs24gRG9jZW50ZSIsDQogICAgDQogICAgVFJVRSB+ICJPdHJvcyINCiAgKSkNCg0KDQpkZl9zdW1tYXJ5IDwtIGRhdG9zICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRlcHJlc3Npb24pKSAlPiUNCiAgZ3JvdXBfYnkoQXJlYSxkZXByZXNzaW9uKSAlPiUNCiAgc3VtbWFyaXNlKGNvdW50ID0gbigpLCAuZ3JvdXBzID0gImRyb3AiKQ0KDQoNCnBsb3RfbHkoZGZfc3VtbWFyeSwNCiAgICAgICAgeCA9IH5BcmVhLA0KICAgICAgICB5ID0gfmNvdW50LA0KICAgICAgICBjb2xvciA9IH5kZXByZXNzaW9uLA0KICAgICAgICBjb2xvcnMgPSBjKCIjNjZjMmE1IiwgIiNmYzhkNjIiKSwNCiAgICAgICAgdHlwZSA9ICJiYXIiKSAlPiUNCiAgbGF5b3V0KHRpdGxlID0gIkRpc3RyaWJ1Y2nDs24gZGUgZGVwcmVzaW9uIHBvciDDoXJlYSBhY2Fkw6ltaWNhIiwNCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICLDgXJlYSBBY2Fkw6ltaWNhIiwgdGlja2FuZ2xlID0gLTMwKSwNCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJDYW50aWRhZCBkZSBlc3R1ZGlhbnRlcyIpLA0KICAgICAgICAgYmFybW9kZSA9ICJncm91cCIpDQoNCmBgYA0KDQo8cD4NCkVuIGVsIGdyw6FmaWNvIHByZXNlbnRhZG8sIHBvZGVtb3Mgbm90YXIgdW5hIGFsdGEgZGVuc2lkYWQgZGUgZXN0dWRpYW50ZXMgZW4gbGFzIGNhcnJlcmFzIGRlIHRlY25vbG9nw61hIHkgZW4gY2llbmNpYXMgc29jaWFsZXMuIEEgc3UgdmV6LCBlc3RhcyBwYXJlY2VuIHRlbmVyIGxhIG1heW9yIGluY2lkZW5jaWEgZW4gcGFkZWNpbWllbnRvcyBkZSBkZXByZXNpw7NuLCBsbyBxdWUgc3VnaWVyZSB1bmEgcG9zaWJsZSBjb3JyZWxhY2nDs24gZW50cmUgZWwgdGlwbyBkZSBmb3JtYWNpw7NuIGFjYWTDqW1pY2EgeSBsYSBjYXJnYSBlbW9jaW9uYWwgcXVlIGVuZnJlbnRhbiBsb3MgZXN0dWRpYW50ZXMuIFRhbWJpw6luIGVzIGltcG9ydGFudGUgb2JzZXJ2YXIgcXVlIGVuIGFxdWVsbGFzIGNhcnJlcmFzIHF1ZSBubyBzZSBwdWRpZXJvbiBjYXRhbG9nYXIgZXhwbMOtY2l0YW1lbnRlLCBzZSBldmlkZW5jaWEgcXVlIHVuIG1heW9yIHBvcmNlbnRhamUgZGUgZXN0dWRpYW50ZXMgcHJlc2VudGEgc8OtbnRvbWFzIGRlIGRlcHJlc2nDs24gZW4gY29tcGFyYWNpw7NuIGNvbiBhcXVlbGxvcyBxdWUgbm8gbG9zIG1hbmlmaWVzdGFuLg0KDQpQYXJ0aWN1bGFybWVudGUsIGxhcyBjYXJyZXJhcyBkZWwgw6FtYml0byB0ZWNub2zDs2dpY28sIGNvbW8gbGFzIGluZ2VuaWVyw61hcywgcHJlc2VudGFuIGRlc2Fmw61vcyDDum5pY29zIHF1ZSBwdWVkZW4gdGVuZXIgdW4gaW1wYWN0byBzaWduaWZpY2F0aXZvIGVuIGxhIHNhbHVkIG1lbnRhbC4gRXN0YXMgZGlzY2lwbGluYXMgc3VlbGVuIGVzdGFyIG1hcmNhZGFzIHBvciB1bmEgZnVlcnRlIGNhcmdhIGFjYWTDqW1pY2EsIHVuYSBhbHRhIGNvbXBldGl0aXZpZGFkLCB5IHVuIHJpdG1vIGV4aWdlbnRlIGRlIGFwcmVuZGl6YWplIHTDqWNuaWNvIHkgcHLDoWN0aWNvLiBMb3MgZXN0dWRpYW50ZXMgZGUgaW5nZW5pZXLDrWEgZnJlY3VlbnRlbWVudGUgZW5mcmVudGFuIGpvcm5hZGFzIGxhcmdhcyBkZSBlc3R1ZGlvLCBlbnRyZWdhcyBjb21wbGVqYXMsIHkgZXjDoW1lbmVzIHF1ZSByZXF1aWVyZW4gbm8gc29sbyBtZW1vcmlhLCBzaW5vIHRhbWJpw6luIHJhem9uYW1pZW50byBsw7NnaWNvLCBhYnN0cmFjY2nDs24gbWF0ZW3DoXRpY2EgeSByZXNvbHVjacOzbiBlZmljaWVudGUgZGUgcHJvYmxlbWFzIGJham8gcHJlc2nDs24uDQo8L3A+DQoNCmBgYHtyfQ0KDQpkYXRvc19jb250YWRvcyA8LSBkYXRvcyAlPiUNCiAgZ3JvdXBfYnkoZGVwcmVzc2lvbiwgc2Vla190cmVhdG1lbnQpICU+JQ0KICBzdW1tYXJpc2UoY291bnQgPSBuKCksIC5ncm91cHMgPSAnZHJvcCcpDQoNCg0KcGxvdF9seSgNCiAgZGF0b3NfY29udGFkb3MsDQogIHggPSB+ZGVwcmVzc2lvbiwNCiAgeSA9IH5jb3VudCwNCiAgY29sb3IgPSB+c2Vla190cmVhdG1lbnQsDQogIGNvbG9ycyA9IGMoInN0ZWVsYmx1ZSIsICJmaXJlYnJpY2siKSwNCiAgdHlwZSA9ICJiYXIiDQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiRXN0dWRpYW50ZXMgY29uIGRlcHJlc2nDs24gcXVlIGJ1c2NhbiBheXVkYSBwcm9mZXNpb25hbCIsDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIsK/RGVwcmVzacOzbj8iKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FudGlkYWQgZGUgZXN0dWRpYW50ZXMiKSwNCiAgICBiYXJtb2RlID0gImdyb3VwIiAgDQogICkNCmBgYA0KPHA+DQpSZXZpc2FuZG8gbGEgZ3JhZmljYSwgcG9kZW1vcyBub3RhciB2YXJpYXMgY29zYXMsIG5pbmd1bm8gZGUgbG9zIGVzdHVkaWFudGVzIHF1ZSBkaWplcm9uIG5vIHRlbmVyIGRlcHJlc2nDs24gYWN1ZGUgYSB1biBwcm9mZXNpb25hbC4gTWllbnRyYXMgdGFudG8sIG9ic2VydmFtb3MgcXVlIGxvcyBlc3R1ZGlhbnRlcyBxdWUgZGljZW4gdGVuZXIgZGVwcmVzaW9uIHNvbiB1bmEgbWlub3LDrWEgbG9zIHF1ZSBhY3VkZW4gYSB0cmF0YW1pZW50by4NCjxwLz4NCg0KYGBge3J9DQoNCmRmIDwtIGRhdG9zICU+JQ0KICBtdXRhdGUoDQogICAgYcOxbyA9IGNhc2Vfd2hlbigNCiAgICAgIHllYXJfb2Zfc3R1ZHkgPT0gImZvdW5kYXRpb24iIH4gMCwNCiAgICAgIHllYXJfb2Zfc3R1ZHkgPT0gInllYXIgMSIgfiAxLA0KICAgICAgeWVhcl9vZl9zdHVkeSA9PSAieWVhciAyIiB+IDIsDQogICAgICB5ZWFyX29mX3N0dWR5ID09ICJ5ZWFyIDMiIH4gMywNCiAgICAgIHllYXJfb2Zfc3R1ZHkgPT0gInllYXIgNCIgfiA0DQogICAgKSwNCiAgICBjZ3BhID0gY2FzZV93aGVuKA0KICAgICAgY2dwYSA9PSAiMCAtIDEuOTkiIH4gMS4wLA0KICAgICAgY2dwYSA9PSAiMi4wMCAtIDIuNDkiIH4gMi4yNSwNCiAgICAgIGNncGEgPT0gIjIuNTAgLSAyLjk5IiB+IDIuNzUsDQogICAgICBjZ3BhID09ICIzLjAwIC0gMy40OSIgfiAzLjI1LA0KICAgICAgY2dwYSA9PSAiMy41MCAtIDQuMDAiIH4gMy43NQ0KICAgICksDQogICAgbWVudGFsX2hlYWx0aF9zY29yZSA9IChkZXByZXNzaW9uID09ICJZZXMiKSArIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAoYW54aWV0eSA9PSAiWWVzIikgKyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhbmljX2F0dGFjayA9PSAiWWVzIikNCiAgKQ0KDQpmaWcgPC0gcGxvdF9seSgNCiAgZGF0YSA9IGRmLA0KICB4ID0gfmFnZSwNCiAgeSA9IH5jZ3BhLA0KICB6ID0gfmHDsW8sDQogIGNvbG9yID0gfnNlZWtfdHJlYXRtZW50LA0KICBzaXplID0gfm1lbnRhbF9oZWFsdGhfc2NvcmUsDQogIHN5bWJvbCA9IH5nZW5kZXIsDQogIHRleHQgPSB+cGFzdGUoIkNvdXJzZToiLCBjb3Vyc2UsDQogICAgICAgICAgICAgICAgIjxicj5EZXByZXNzaW9uOiIsIGRlcHJlc3Npb24sDQogICAgICAgICAgICAgICAgIjxicj5BbnhpZXR5OiIsIGFueGlldHksDQogICAgICAgICAgICAgICAgIjxicj5QYW5pYyBBdHRhY2s6IiwgcGFuaWNfYXR0YWNrKSwNCiAgdHlwZSA9ICJzY2F0dGVyM2QiLA0KICBtb2RlID0gIm1hcmtlcnMiDQopDQoNCmZpZyA8LSBmaWcgJT4lIGxheW91dCh0aXRsZSA9ICJSZWxhY2nDs24gZW50cmUgRWRhZCwgQ0dQQSB5IEHDsW8gZGUgRXN0dWRpbyBjb24gU2FsdWQgTWVudGFsIikNCmZpZw0KYGBgDQo8cD4NClBhcmEgZGFyIGFsZ28gZGUgY29udGV4dG8gc29icmUgZXN0ZSBncmFmaWNvIDNEIHBvZGVtb3MgZW1wZXphciBkaWNpZW5kbyBxdWUgZWwgdGFtYcOxbyBkZSBsYXMgYnVyYnVqYXMgY3JlY2Ugc2VndW4gcXVlIHRhbnRvcyBwYWRlY2ltaWVudG9zIHRlbmdhIGxhIHBlcnNvbmEgZW5jdWVzdGFkYSwgeSBxdWUgc2VndW4gZWwgY29sb3IgZGUgbGEgYnVyYnVqYSByZXByZXNlbnRhIHNpIGJ1c2PDsyBheXVkYSBwcm9mZXNpb25hbCwgY29uIGVzdG8gZW4gbWVudGUgcG9kZW1vcyBvYnNlcnZhciBkaXN0aW50b3MgcGF0cm9uZXMgY3VyaW9zb3MsIGNvbW8gcG9yIGVqZW1wbG8gcXVlIGxhcyBwZXJzb25hcyBxdWUgcHJlc2VudGFuIHBhZGVjaW1pZW50b3MgZGUgc2FsdWQgbWVudGFsIG5vIHNpZW1wcmUgYnVzY2FuIHRyYXRhbWllbnRvLCB5IGVzdG8gZXMgbWFzIG5vdGFibGUgZW4gbG9zIHByaW1lcm9zIGHDsW9zIGRlIGVzdHVkaW8geSBhIGVkYWRlcyBtYXMgdGVtcHJhbmFzLCB5IHRhbWJpZW4gcG9kZW1vcyBvYnNlcnZhciBxdWUgbGFzIHBlcnNvbmFzIGNvbiB1biByZW5kaW1pZW50byBhY2FkZW1pY28gbWFzIGJham8gdGllbmRlbiBhIHByZXNlbnRhciBtYXMgY29uZGljaW9uZXMgZGUgc2FsdWQgbWVudGFsDQo8cC8+DQpgYGB7cn0NCg0KZ3JhZmljb0ZhY2V0YSA8LSBnZ3Bsb3QoZGYsIGFlcyh4ID0gZ2VuZGVyLCBmaWxsID0gc2Vla190cmVhdG1lbnQpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArDQogIGZhY2V0X2dyaWQoZGVwcmVzc2lvbiB+IHllYXJfb2Zfc3R1ZHkpICsNCiAgbGFicygNCiAgICB5ID0gIlByb3BvcmNpw7NuIiwNCiAgICB0aXRsZSA9ICJCw7pzcXVlZGEgZGUgdHJhdGFtaWVudG8gcG9yIGfDqW5lcm8sIGHDsW8geSBwcmVzZW5jaWEgZGUgZGVwcmVzacOzbiIsDQogICAgZmlsbCA9ICJCdXNjYSB0cmF0YW1pZW50byINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKQ0KZ2dwbG90bHkoZ3JhZmljb0ZhY2V0YSkNCmBgYA0KPHA+DQpFbiBlc3RlIGdyYWZpY28gcG9kZW1vcyBvYnNlcnZhciB2YXJpb3MgY29tcG9ydGFtaWVudG9zIGludGVyZXNhbnRlcywgZW4gcHJpbWVyIGx1Z2FyIHBvZGVtb3MgdmVyIHF1ZSBsYXMgcGVyc29uYXMgcXVlIHByZXNlbnRhbiBkZXByZXNpb24gc29uIGxvcyB1bmljb3MgcXVlIHNlIHBsYW50ZWFuIGVsIGJ1c2NhciB0cmF0YW1pZW50byBwcm9mZXNpb25hbCwgbHVlZ28gcG9kZW1vcyBvYnNlcnZhciBjb21vIGxhcyBtdWplcmVzIHNvbiBtYXMgcHJvcGVuc2FzIGEgYnVzY2FyIGF5dWRhIHByb2Zlc2lvbmFsLCBtYXMgcXVlIGxvcyBob21icmVzLg0KPHAvPg0KYGBge3J9DQpncmFmaWNvMSA8LSBwbG90X2x5KGRhdGEgPSBkYXRvcywgeCA9IH5nZW5kZXIsIGNvbG9yID0gfmRlcHJlc3Npb24sIHR5cGUgPSAiaGlzdG9ncmFtIikgJT4lDQogIGxheW91dCh0aXRsZSA9IGxpc3QodGV4dCA9ICJEZXByZXNpw7NuIHBvciBnw6luZXJvIiwgeSA9IDAuOTgpLCAgDQogICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiR8OpbmVybyIpLCANCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJDYW50aWRhZCIpKQ0KDQpncmFmaWNvMiA8LSBwbG90X2x5KGRhdGEgPSBkYXRvcywgeCA9IH55ZWFyX29mX3N0dWR5LCBjb2xvciA9IH5hbnhpZXR5LCB0eXBlID0gImhpc3RvZ3JhbSIpICU+JQ0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSAiQW5zaWVkYWQgcG9yIGHDsW8gZGUgZXN0dWRpbyIsIHkgPSAwLjk4KSwNCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJBw7FvIGRlIGVzdHVkaW8iKSwgDQogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FudGlkYWQiKSkNCg0KZ3JhZmljbzMgPC0gcGxvdF9seShkYXRhID0gZGF0b3MsIHggPSB+Y2dwYSwgY29sb3IgPSB+c2Vla190cmVhdG1lbnQsIHR5cGUgPSAiaGlzdG9ncmFtIikgJT4lDQogIGxheW91dCh0aXRsZSA9IGxpc3QodGV4dCA9ICJCw7pzcXVlZGEgZGUgdHJhdGFtaWVudG8gcG9yIENHUEEiLCB5ID0gMC45OCksDQogICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ0dQQSIpLCANCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJDYW50aWRhZCIpKQ0KDQoNCmdyYWZpY29fY29tcHVlc3RvIDwtIHN1YnBsb3QoDQogIGdyYWZpY28xLCBncmFmaWNvMiwgZ3JhZmljbzMsDQogIG5yb3dzID0gMiwgDQogIG1hcmdpbiA9IDAuMSwgIA0KICB0aXRsZVkgPSBUUlVFLCAgDQogIHRpdGxlWCA9IFRSVUUsICANCiAgaGVpZ2h0cyA9IGMoMC41LCAwLjUpICANCikgJT4lIA0KICBsYXlvdXQoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiQW7DoWxpc2lzIGNvbXB1ZXN0byBkZSBzYWx1ZCBtZW50YWwgZW4gZXN0dWRpYW50ZXMiLCANCiAgICAgICAgICAgICAgICAgeCA9IDAuNSwgeSA9IDAuOTgsIHhhbmNob3IgPSAiY2VudGVyIiksICANCiAgICBzaG93bGVnZW5kID0gVFJVRSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICBsaXN0KHggPSAwLjIsIHkgPSAxLjAsIHRleHQgPSAiRGVwcmVzacOzbiBwb3IgZ8OpbmVybyIsIHNob3dhcnJvdyA9IEZBTFNFLCB4cmVmID0gInBhcGVyIiwgeXJlZiA9ICJwYXBlciIpLA0KICAgICAgbGlzdCh4ID0gMSwgeSA9IDEuMCwgdGV4dCA9ICJBbnNpZWRhZCBwb3IgYcOxbyBkZSBlc3R1ZGlvIiwgc2hvd2Fycm93ID0gRkFMU0UsIHhyZWYgPSAicGFwZXIiLCB5cmVmID0gInBhcGVyIiksDQogICAgICBsaXN0KHggPSAwLjEwLCB5ID0gMC40MCwgdGV4dCA9ICJCw7pzcXVlZGEgZGUgdHJhdGFtaWVudG8gcG9yIENHUEEiLCBzaG93YXJyb3cgPSBGQUxTRSwgeHJlZiA9ICJwYXBlciIsIHlyZWYgPSAicGFwZXIiKQ0KICAgICkNCiAgKQ0KDQoNCmdyYWZpY29fY29tcHVlc3RvDQpgYGANCg0KPHA+DQpMb3MgZ3LDoWZpY29zIG11ZXN0cmFuIHBhdHJvbmVzIGltcG9ydGFudGVzIHNvYnJlIGxhIHNhbHVkIG1lbnRhbCBkZSBsb3MgZXN0dWRpYW50ZXMgdW5pdmVyc2l0YXJpb3MuIFBvciBlamVtcGxvLCBzZSBvYnNlcnZhIHF1ZSBsYXMgbXVqZXJlcyB0aWVuZGVuIGEgcHJlc2VudGFyIG3DoXMgc8OtbnRvbWFzIGRlIGRlcHJlc2nDs24uIFRhbWJpw6luIHNlIG5vdGEgcXVlIHF1aWVuZXMgZXN0w6FuIGVuIGxvcyBwcmltZXJvcyBhw7FvcyBkZSBjYXJyZXJhIHN1ZWxlbiBzZW50aXIgbcOhcyBhbnNpZWRhZCwgcG9zaWJsZW1lbnRlIHBvciBlbCByZXRvIGRlIGFkYXB0YXJzZSBhbCBudWV2byBhbWJpZW50ZSBhY2Fkw6ltaWNvIHkgc29jaWFsLiBBZGVtw6FzLCBsb3MgZXN0dWRpYW50ZXMgY29uIHByb21lZGlvcyBtw6FzIGJham9zIChtZW5vcyBkZSAzLjApIHNvbiBtZW5vcyBwcm9wZW5zb3MgYSBidXNjYXIgYXl1ZGEgcHJvZmVzaW9uYWwsIGluY2x1c28gc2kgZXhwZXJpbWVudGFuIGFuc2llZGFkIG8gZGVwcmVzacOzbi4gRXN0byBwb2Ryw61hIGRlYmVyc2UgYWwgZXN0aWdtYSBvIGEgbGEgZmFsdGEgZGUgcmVjdXJzb3MgYWNjZXNpYmxlcy4gRW4gZ2VuZXJhbCwgbG9zIGRhdG9zIG11ZXN0cmFuIGxhIG5lY2VzaWRhZCBkZSBvZnJlY2VyIGFwb3lvIHBzaWNvbMOzZ2ljbyBhZGFwdGFkbyBhbCBnw6luZXJvLCBhbCBhw7FvIGRlIGVzdHVkaW9zIHkgYWwgcmVuZGltaWVudG8gYWNhZMOpbWljbywgeSBkZSBwcm9tb3ZlciBjYW1wYcOxYXMgcXVlIGF5dWRlbiBhIG5vcm1hbGl6YXIgZWwgY3VpZGFkbyBkZSBsYSBzYWx1ZCBtZW50YWwgZW4gbGFzIHVuaXZlcnNpZGFkZXMuDQo8cC8+DQoNCjxoMiBzdHlsZT0iY29sb3I6ZGFya2JsdWU7Ij4NCg0KQ29uY2x1c2lvbmVzDQoNCjwvaDI+DQoNCjxwPg0KQSBwYXJ0aXIgZGUgbG8gYW50ZXJpb3JtZW50ZSBleHB1ZXN0bywgdGVuZW1vcyB2YXJpYXMgY29uY2x1c2lvbmVzIHF1ZSBwb2RlbW9zIGhhY2VyIHJlc3BlY3RvIGEgbG9zIGVzdHVkaWFudGVzIGVudHJldmlzdGFkb3MsIHF1ZSBzaSBiaWVuIGxvcyBncmFmaWNvcyBwdWVkZW4gdmFyaWFyIGRlcGVuZGllbmRvIGRlbCBsdWdhciB5IGxhIHVuaXZlcnNpZGFkLCBtdWNobyBkZSBsbyBxdWUgc2UgcHVlZGUgYXByZWNpYXIgZW4gZXN0b3MgZGF0b3Mgc2UgcHVlZGVuIGV4dHJhcG9sYXIgYSBvdHJvcyBsdWdhcmVzLg0KDQotVGFuIHNvbG8gdW5hIG1pbm9yw61hIGJ1c2NhIGFzZXNvcmFtaWVudG8gcHJvZmVzaW9uYWwgYW50ZSBsYSBkZXByZXNpw7NuIHkgbGEgYW5zaWVkYWQNCg0KLVNlIHB1ZG8gb2JzZXJ2YXIgcXVlIGVzdHVkaWFudGVzIGRlIG1lbm9yIGVkYWQgeSBlbiBzdXMgcHJpbWVyb3MgYcOxb3MgZGUgZXN0dWRpbyB0aWVuZGVuIGEgcHJlc2VudGFyIG3DoXMgc2ludG9tYXMgZGUgZGVwcmVzaW9uIHkgYW5zaWVkYWQNCg0KLUxvcyBlc3R1ZGlhbnRlcyBjb24gbWVub3IgcmVuZGltaWVudG8gYWNhZGVtaWNvIHNlIHZlbiBtYXlvcm1lbnRlIGFmZWN0YWRvcyB0YW50byBwb3IgZGVwcmVzaW9uIG8gcG9yIGFuc2llZGFkDQoNCi1TZWfDum4gbGEgbXVlc3RyYSBkZSBkYXRvcywgbG9zIGVzdHVkaWFudGVzIGRlbCBhcmVhIGRlIHRlY25vbG9naWEgeSBkZSBjaWVuY2lhcyBzb2NpYWxlcyB5IGh1bWFuaWRhZGVzLCBhcGFydGUgZGUgc2VyIHVuIHNlY3RvciBtYXMgZGVuc28sIHNvbiBsb3MgcXVlIHRpZW5kZW4gYSBzZXIgbcOhcyBhZmVjdGFkb3MgcG9yIGRlcHJlc2lvbiBvIGFuc2llZGFkLg0KDQotVmVtb3MgcXVlIGEgcGVzYXIgZGUgbGFzIHBvY2FzIGluc3RhbmNpYXMsIGRlbnRybyBkZSBlc3RhcyBsYXMgbXVqZXJlcyBmdWVyb24gbGFzIHF1ZSBtYXMgYnVzY2Fyb24gYXl1ZGEgcHJvZmVzaW9uYWwuDQoNClNpZW5kbyBlc3RhIGxhIHNpdHVhY2nDs24gaGF5IHB1bnRvcyBxdWUgcHVlZGVuIHNlciBhbGdvIGFsYXJtYW50ZXMsIHBvciBlamVtcGxvOg0KDQpMYSBiYWphIGLDunNxdWVkYSBkZSBheXVkYSBwcm9mZXNpb25hbCBzdWdpZXJlIHF1ZSBtdWNob3MgZXN0dWRpYW50ZXMgcHVlZGVuIGVzdGFyIGVuZnJlbnRhbmRvIHRyYXN0b3Jub3MgZW1vY2lvbmFsZXMgc2luIGVsIGFjb21wYcOxYW1pZW50byBhZGVjdWFkbywgbG8gcXVlIHBvZHLDrWEgZXN0YXIgbWFuaWZlc3RhbmRvIHVuIGRldGVyaW9ybyBwcm9ncmVzaXZvIGRlIHN1IHNhbHVkIG1lbnRhbCwgYWRlbWFzIGRlIGVzdG8sIGxhIGJhamEgYsO6c3F1ZWRhIGRlIGF5dWRhIHByb2Zlc2lvbmFsIHN1Z2llcmUgcXVlIG11Y2hvcyBlc3R1ZGlhbnRlcyBwdWVkZW4gZXN0YXIgZW5mcmVudGFuZG8gdHJhc3Rvcm5vcyBlbW9jaW9uYWxlcyBzaW4gZWwgYWNvbXBhw7FhbWllbnRvIGFkZWN1YWRvLCBsbyBxdWUgcG9kcsOtYSBkZXJpdmFyIGVuIHVuIGRldGVyaW9ybyBwcm9ncmVzaXZvIGRlIHN1IGJpZW5lc3RhciBwc2ljb2zDs2dpY28uDQoNCkEgc3UgdmV6LCBsb3MgZXN0dWRpYW50ZXMgbcOhcyBqw7N2ZW5lcyB5IGRlIHByaW1lcm9zIGHDsW9zLCBhbCBzZXIgbcOhcyBhZmVjdGFkb3MgcG9kcsOtYW4gdGVuZXIgbWF5b3JlcyBkaWZpY3VsdGFkZXMgZGUgYWRhcHRhY2nDs24gYWwgZW50b3JubyB1bml2ZXJzaXRhcmlvLCBhZmVjdGFuZG8gZGUgbWFsYSBtYW5lcmEgc3UgcGVybWFuZW5jaWEgeSBlbCBkZXNhcnJvbGxvIGFjYWTDqW1pY28uDQoNCkRlIGxhIG1pc21hIGZvcm1hLCBhdW5xdWUgbGFzIG11amVyZXMgYnVzY2FuIG3DoXMgYXl1ZGEsIHNpZ3VlIHNpZW5kbyBwcmVvY3VwYW50ZSBxdWUgbG9zIGhvbWJyZXMsIHBvc2libGVtZW50ZSBwb3IgZXN0aWdtYXMgZGUgZ8OpbmVybywgbm8gYWNjZWRhbiBhIGFwb3lvIHByb2Zlc2lvbmFsLCByZXByaW1pZW5kbyBhc8OtIHN1cyBhZmxpY2Npb25lcy4NCg0KU2llbmRvIGFzw60sIHNlcsOtYSDDunRpbCBpbXBsZW1lbnRhciBhY2Npb25lcyBxdWUgcHJvcGljaWVuIGxhIGJ1ZW5hIHNhbHVkIG1lbnRhbCAsIHF1aXphcyBmb3J0YWxlY2llbmRvIGxvcyBzZXJ2aWNpb3MgZGUgc2FsdWQgbWVudGFsIGVuIHVuaXZlcnNpZGFkZXMsIGhhY2llbmRvIGNhbXBhw7FhcyBkZSBjb25jaWVudGl6YWNpw7NuIHkgZGVzZXN0aWdtYXRpemFjacOzbiBvIGZvbWVudGFyIGHDum4gbcOhcyBlbCBlcXVpbGlicmlvIGVudHJlIHZpZGEgYWNhZMOpbWljYSB5IHBlcnNvbmFsDQo8cC8+