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+