Home


En este informe se pueden explorar las diferencias en la inserción en el mercado de trabajo, en los ingresos que perciben, en la cantidad de horas que trabajan semanalmente, y la distribución de las tareas domésticas entre varones y mujeres. Presentamos esta información para el país en general y desagregada por región.

Estos datos están disponibles para su divulgación 1. Si te gusta lo que hacemos podés apoyarnos haciéndote socie del #ClubEcofeminita o realizando una donación.


1 Si necesitás citarnos en un trabajo, podés hacerlo como: “Ecofeminita. (2023). Ecofeminita/EcoFemiData: informes ecofemidata. Zenodo. http://doi.org/10.5281/zenodo.4540185”

Mercado de Trabajo


Sobre la composiciĂłn del Mercado de Trabajo



En esta sección se intenta mostrar las asimetrías que existen en el mercado de trabajo en cuanto a su composición. Para esto se utilizan las tasas de actividad, empleo, desempleo y subocupación según el sexo de las personas. El objetivo es ver qué tan masculinizado se encuentra el mercado laboral y ver si las mujeres encuentran más problemas a la hora de conseguir un empleo. Para mostrar la segregación horizontal en el mercado de trabajo se presenta la estructura de las diferentes ramas de ocupación.

En la versión extendida del informe, disponible de manera gratuita en esta web, se analizan las tasas básicas del mercado laboral teniendo en cuenta la edad de las personas y se examina la incidencia de la informalidad en las relaciones de dependencia de asalariados y asalariadas. A su vez, se grafica la diferencia en acceso a cargos jerárquicos, vinculando estos datos a la segregación vertical en el mercado de trabajo.


Tasas básicas


Total nacional


En primer lugar se presentan algunos indicadores clásicos (utilizados a nivel internacional) que caracterizan la composición del mercado de trabajo, desagregados según el sexo. Para ahondar en los conceptos utilizados se puede explorar el glosario de este informe.

La tasa de actividad es ampliamente mayor entre los varones (la diferencia ronda los 18 puntos porcentuales). Esta discrepancia podría ser explicada por múltiples causas. Una de ellas es que una importante porción de las mujeres en edad laboral dediquen su tiempo a realizar tareas domésticas no remuneradas, en lugar de tener una actividad en el mercado de trabajo. Otra razón posible podría ser el hecho de que las mujeres tiendan, en promedio, a educarse más que sus pares varones. La tasa de empleo, por su parte, exhibe una diferencia entre varones y mujeres que ronda los 18 puntos, denotando el mismo fenómeno anteriormente mencionado.

Es importante aclarar que estas tasas expresan el comportamiento agregado de la población, y que las diferencias entre varones y mujeres sufren variaciones si se tienen en cuenta otras variables, como pueden ser los grupos de edad, el nivel educativo, la presencia de niñes en el hogar o el nivel de ingresos.

Tasas de actividad y empleo por sexo

Población de 14 años y más. Total de aglomerados urbanos. 3er trimestre 2023


A diferencia de las tasas anteriores, las tasas de desocupación y subocupación expresan la proporción que estos grupos representan en la Población Económicamente Activa. Usualmente, ambas tasas son mayores para las mujeres que para los varones, señalando que, incluso siendo minoría en el mercado de trabajo, las mujeres tendrían más dificultades para conseguir trabajo y/o para trabajar una jornada completa.

En su conjunto, los cuatro indicadores presentados en esta sección muestran una primera imagen de la problemática que enfrentan las mujeres en el mercado de trabajo argentino.

Tasas de desocupaciĂłn y subocupaciĂłn por sexo

Población de 14 años y más. Total de aglomerados urbanos. 3er trimestre 2023

Por regiĂłn


A continuaciĂłn se presentan las tasas de actividad, empleo, desocupaciĂłn y subocupaciĂłn para varones y mujeres segĂşn la regiĂłn.

Tasas de actividad y empleo por regiĂłn y sexo

Población de 14 años y más. 3er trimestre 2023

Tasas de desocupaciĂłn y subocupaciĂłn por regiĂłn y sexo

Población de 14 años y más. 3er trimestre 2023

Ramas de la ocupaciĂłn


La siguiente tabla presenta los porcentajes de ocupadas mujeres sobre el total de ocupados y ocupadas para cada rama de ocupación. La tasa de feminización indica el porcentaje de mujeres que hay en cada una de ellas y, como puede observarse, las mujeres se encuentran sobrerrepresentadas en aquellos sectores vinculados al cuidado y las tareas de reproducción, como son el servicio doméstico, la enseñanza y los servicios sociales y de salud. Por su parte, sectores como la construcción, transporte y comunicaciones, las actividades primarias e incluso la industria manufacturera se encuentran masculinizadas.

Este fenómeno se conoce como Paredes de Cristal o segregación horizontal, y hace referencia a los muros invisibles que segmentan el mercado de trabajo de acuerdo a los estereotipos de género aún vigentes.

Indicadores por ramas de la ocupaciĂłn (seleccionadas)

Ocupadas/os. Tasa de feminizaciĂłn, ingreso mensual promedio, ingreso horario. Total de aglomerados urbanos. 3er trimestre 2023

Rama de la ocupaciĂłn Tasa de feminizaciĂłn Ingreso mensual promedio Ingreso horario
Servicio domestico 97.8% $ 61.300 $ 790
Servicios sociales y de salud 71.9% $205.400 $1.568
Ensenanza 71.1% $189.900 $1.830
Industria manufacturera 30.5% $180.000 $1.049
Actividades primarias 23.7% $328.000 $1.731
Transporte, almacenamiento y comunicaciones 16.4% $244.600 $1.520
Construccion 3.8% $150.300 $ 933

#Ecofemidata y Ecofeminita en base a EPH-INDEC


Si observamos la distribución de ingresos de las y los ocupados según rama de ocupación, vemos que Servicio Doméstico no sólo es la rama más feminizada sino que además concentra los menores ingresos.

DistribuciĂłn del ingreso segĂşn ramas de ocupaciĂłn (seleccionadas)

Ocupadas/os. Total de aglomerados urbanos. 3er trimestre 2023

Ingresos


Ingresos



En esta sección se coloca el foco en las diferencias de montos de ingresos que perciben los varones y las mujeres. Estos ingresos pueden provenir de diversas fuentes y al mismo tiempo pueden desagregarse según características adicionales de las personas o los puestos que desempeñan. A su vez, pueden distinguirse los ingresos mensuales y los ingresos por hora trabajada.

Para una exploración de los ingresos horarios, se puede consultar la versión extendida del informe, disponible de manera gratuita en esta web. Cabe señalar que, en el análisis de ingresos horarios, la brecha disminuye considerablemente. Esto se relaciona con las horas dedicadas a las tareas del hogar, que deja a las mujeres con menos horas para destinar al mercado de trabajo.

Para dimensionar las diferencias hacemos uso del concepto de “brecha”, que en este caso se calcula como la diferencia entre los ingresos promedios de los varones y las mujeres, expresada en términos del ingreso más alto. Es decir, que puede leerse como “las mujeres perciben ingresos que, en promedio, son un …% menores que los de los varones”.

En todas las regiones del paĂ­s, los ingresos promedios de las mujeres son menores que los de los varones.

Total Nacional



Brechas de ingresos mensuales


Como se ve en el siguiente cuadro, para el caso de todas las personas perceptoras de ingresos, la brecha entre mujeres y varones respecto al ingreso total individual es de 26.4%. Es decir, contemplando todos los ingresos que se perciben, sean de origen laboral o no laboral (como jubilaciones y pensiones, cuotas alimentarias, subsidios, etc.), las mujeres perciben ingresos que, en promedio, son un 26.4% menores que los de los varones.

Simultáneamente, en el mercado de trabajo, las mujeres ganan en promedio un 23.1% menos que los varones ($153.000 vs. $198.900). Estos datos corresponden a la totalidad de ocupadas/os, cualquiera sea su categoría ocupacional, calificación o jerarquía, y observando en este caso los ingresos provenientes de su ocupación principal.

Si tomamos en cuenta Ăşnicamente a aquellas personas que no poseen descuentos jubilatorios, se observa cĂłmo las mujeres ganan en promedio un 24.8% menos que sus pares. Es decir que la brecha de ingresos entre las y los trabajadores se amplĂ­a cuando vemos a aquellas/os asalariadas/os que tienen peores condiciones de trabajo.

Finalmente, puede observarse que también existe una brecha, aunque mucho menor, entre las jubilaciones que perciben las mujeres y los varones.

Brechas de ingresos mensuales

Por poblaciones y tipos de ingresos. Total de aglomerados urbanos. 3er trimestre 2023


Media del ingreso

PoblaciĂłn Ingreso Mujeres Varones Brecha
Perceptores de ingresos Ingreso Total Individual $164.200 $223.100 26.4%
Ocupadas/os Ingreso de la OcupaciĂłn Principal $153.000 $198.900 23.1%
Asalariadas/os sin desc. jubil. Ingreso de la OcupaciĂłn Principal $ 95.900 $127.500 24.8%
Perceptores de jubilaciĂłn JubilaciĂłn $103.300 $119.600 13.6%

#Ecofemidata y Ecofeminita en base a EPH-INDEC

Brecha de ingresos mensuales por calificaciĂłn del puesto de trabajo


El siguiente gráfico señala cómo la brecha de ingresos mensuales de las/os ocupadas/os se mantiene incluso a iguales niveles de calificación del puesto de trabajo. Por ejemplo, mientras que los varones que trabajan en ocupaciones profesionales tienen un ingreso medio de $360.500, las mujeres ocupadas en ese mismo segmento perciben un ingreso medio de $288.300, es decir, un 20.0% menos que los varones.
En los puestos no calificados, los varones ganan $123.200 en promedio, al tiempo que las mujeres ganan alrededor de $76.000. Esta brecha es del 38.3%.

Brecha de ingresos de la ocupaciĂłn principal por sexo y calificaciĂłn ocupacional

Ocupadas/os. Total de aglomerados urbanos. 3er trimestre 2023


Brecha de ingresos mensuales por nivel educativo


Como puede observarse en el cuadro siguiente, el porcentaje de personas que cuentan con un nivel educativo superior es notablemente mayor entre las ocupadas mujeres, en comparaciĂłn a los ocupados varones.

Sin embargo, a igual nivel educativo, los ingresos laborales de las mujeres trabajadoras son inferiores a los de los varones. Esta diferencia de ingresos es del 25.9% para las de nivel universitario/superior, y del 47.1% para las que cuentan con nivel primario.

Nivel educativo de mujeres y varones

Porcentaje por columnas. Ocupadas/os. Total de aglomerados urbanos. 3er trimestre 2023

Nivel Educativo Mujeres Varones
Sin InstrucciĂłn 2.7% 3.4%
Primaria 20.3% 31.6%
Secundaria 45.4% 45.3%
Superior 31.6% 19.7%

#Ecofemidata y Ecofeminita en base a EPH-INDEC


Brecha de ingresos de la ocupaciĂłn principal por sexo y nivel educativo

Ocupadas/os. Total de aglomerados urbanos. 3er trimestre 2023

Cuyo



Ingresos mensuales promedio y brecha

Por poblaciones y tipos de ingresos. Cuyo. 3er trimestre 2023


Media del ingreso

PoblaciĂłn Ingreso Mujeres Varones Brecha
Asalariadas/os sin desc. jubil. Ingreso de la OcupaciĂłn Principal $ 65.100 $115.800 43.8%
Ocupadas/os Ingreso de la OcupaciĂłn Principal $117.000 $165.200 29.2%
Perceptores de ingresos Ingreso Total Individual $133.100 $187.400 29.0%
Perceptores de jubilaciĂłn JubilaciĂłn $ 97.200 $104.600 7.1%

#Ecofemidata y Ecofeminita en base a EPH-INDEC
GBA



Ingresos mensuales promedio y brecha

Por poblaciones y tipos de ingresos. GBA. 3er trimestre 2023


Media del ingreso

PoblaciĂłn Ingreso Mujeres Varones Brecha
Asalariadas/os sin desc. jubil. Ingreso de la OcupaciĂłn Principal $117.900 $143.600 17.9%
Ocupadas/os Ingreso de la OcupaciĂłn Principal $167.100 $213.200 21.7%
Perceptores de ingresos Ingreso Total Individual $175.800 $242.800 27.6%
Perceptores de jubilaciĂłn JubilaciĂłn $ 99.700 $115.600 13.8%

#Ecofemidata y Ecofeminita en base a EPH-INDEC
NEA



Ingresos mensuales promedio y brecha

Por poblaciones y tipos de ingresos. NEA. 3er trimestre 2023


Media del ingreso

PoblaciĂłn Ingreso Mujeres Varones Brecha
Asalariadas/os sin desc. jubil. Ingreso de la OcupaciĂłn Principal $ 57.200 $ 92.400 38.1%
Ocupadas/os Ingreso de la OcupaciĂłn Principal $116.100 $147.600 21.3%
Perceptores de ingresos Ingreso Total Individual $123.300 $159.000 22.5%
Perceptores de jubilaciĂłn JubilaciĂłn $ 96.100 $117.600 18.3%

#Ecofemidata y Ecofeminita en base a EPH-INDEC
NOA



Ingresos mensuales promedio y brecha

Por poblaciones y tipos de ingresos. NOA. 3er trimestre 2023


Media del ingreso

PoblaciĂłn Ingreso Mujeres Varones Brecha
Asalariadas/os sin desc. jubil. Ingreso de la OcupaciĂłn Principal $ 58.400 $ 83.400 29.9%
Ocupadas/os Ingreso de la OcupaciĂłn Principal $103.100 $132.600 22.2%
Perceptores de ingresos Ingreso Total Individual $127.600 $153.300 16.8%
Perceptores de jubilaciĂłn JubilaciĂłn $ 92.900 $101.700 8.7%

#Ecofemidata y Ecofeminita en base a EPH-INDEC
Pampeana



Ingresos mensuales promedio y brecha

Por poblaciones y tipos de ingresos. Pampeana. 3er trimestre 2023


Media del ingreso

PoblaciĂłn Ingreso Mujeres Varones Brecha
Asalariadas/os sin desc. jubil. Ingreso de la OcupaciĂłn Principal $ 84.700 $123.400 31.3%
Ocupadas/os Ingreso de la OcupaciĂłn Principal $147.700 $197.400 25.2%
Perceptores de ingresos Ingreso Total Individual $162.800 $216.700 24.9%
Perceptores de jubilaciĂłn JubilaciĂłn $113.200 $129.500 12.6%

#Ecofemidata y Ecofeminita en base a EPH-INDEC
Patagonia



Ingresos mensuales promedio y brecha

Por poblaciones y tipos de ingresos. Patagonia. 3er trimestre 2023


Media del ingreso

PoblaciĂłn Ingreso Mujeres Varones Brecha
Asalariadas/os sin desc. jubil. Ingreso de la OcupaciĂłn Principal $ 91.700 $138.800 33.9%
Ocupadas/os Ingreso de la OcupaciĂłn Principal $208.600 $284.000 26.6%
Perceptores de ingresos Ingreso Total Individual $216.800 $302.300 28.3%
Perceptores de jubilaciĂłn JubilaciĂłn $149.300 $189.200 21.0%

#Ecofemidata y Ecofeminita en base a EPH-INDEC

Horas trabajadas


Horas trabajadas



La idea de la “brecha” también puede aplicarse para comparar las horas que trabajan en promedio mujeres y varones en su ocupación principal en el mercado de trabajo, de forma remunerada. De aquí se desprende que, en promedio, las mujeres trabajan menos horas que los varones, y esto explica una parte importante (aunque no toda) de la brecha de ingresos mensuales.

Cabe cuestionarse entonces respecto al por qué de la diferencia de horas trabajadas por mujeres y por varones. ¿Existe una falta de voluntad de las mujeres para trabajar? ¿Son más “vagas”? ¿O en realidad existe otro motivo por el cual las mujeres deben relegar sus trabajos, del cual los varones están exentos? Como veremos más adelante, los datos sugieren una estrecha relación con la distribución de las tareas domésticas hacia el interior de los hogares.

Total nacional



Brechas de horas trabajadas

Total de aglomerados urbanos. 3er trimestre 2023


Horas semanales (media)

PoblaciĂłn Mujeres Varones Brecha
Ocupadas/os 32.3 40.8 20.7%
Asalariadas/os 31.8 41.5 23.3%
Asalariadas/os sin desc. jubil. 26.5 38.7 31.4%

#Ecofemidata y Ecofeminita en base a EPH-INDEC


Cuyo



Brechas de horas trabajadas

Cuyo. 3er trimestre 2023


Horas semanales (media)

PoblaciĂłn Mujeres Varones Brecha
Asalariadas/os 29.4 41.6 29.2%
Asalariadas/os sin desc. jubil. 24.3 36.9 34.3%
Ocupadas/os 29.7 40.4 26.4%

#Ecofemidata y Ecofeminita en base a EPH-INDEC
GBA



Brechas de horas trabajadas

GBA. 3er trimestre 2023


Horas semanales (media)

PoblaciĂłn Mujeres Varones Brecha
Asalariadas/os 32.5 41.7 21.9%
Asalariadas/os sin desc. jubil. 27.8 39.0 28.8%
Ocupadas/os 33.1 41.1 19.4%

#Ecofemidata y Ecofeminita en base a EPH-INDEC
NEA



Brechas de horas trabajadas

NEA. 3er trimestre 2023


Horas semanales (media)

PoblaciĂłn Mujeres Varones Brecha
Asalariadas/os 30.1 40.6 26.0%
Asalariadas/os sin desc. jubil. 24.2 38.9 37.6%
Ocupadas/os 31.6 40.1 21.3%

#Ecofemidata y Ecofeminita en base a EPH-INDEC
NOA



Brechas de horas trabajadas

NOA. 3er trimestre 2023


Horas semanales (media)

PoblaciĂłn Mujeres Varones Brecha
Asalariadas/os 30.2 39.6 23.9%
Asalariadas/os sin desc. jubil. 26.2 37.6 30.5%
Ocupadas/os 30.4 38.9 22.0%

#Ecofemidata y Ecofeminita en base a EPH-INDEC
Pampeana



Brechas de horas trabajadas

Pampeana. 3er trimestre 2023


Horas semanales (media)

PoblaciĂłn Mujeres Varones Brecha
Asalariadas/os 31.2 41.4 24.7%
Asalariadas/os sin desc. jubil. 25.1 38.8 35.4%
Ocupadas/os 31.9 40.5 21.2%

#Ecofemidata y Ecofeminita en base a EPH-INDEC
Patagonia



Brechas de horas trabajadas

Patagonia. 3er trimestre 2023


Horas semanales (media)

PoblaciĂłn Mujeres Varones Brecha
Asalariadas/os 34.3 43.9 21.8%
Asalariadas/os sin desc. jubil. 27.7 40.8 32.1%
Ocupadas/os 33.7 43.4 22.4%

#Ecofemidata y Ecofeminita en base a EPH-INDEC

Tareas del hogar


Distribución de las tareas domésticas



El trabajo doméstico suele recaer más en las mujeres que en los varones. Es decir, es más probable que sean ellas las encargadas de realizar tareas de cuidado y reproducción para otros miembros de su hogar. En estos casos, el trabajo no se comercia en el mercado, se realiza entre quienes tienen un vínculo personal, y por lo tanto, no se remunera.

Este reparto desigual de las tareas domésticas entre varones y mujeres podría asociarse a las desigualdades vistas anteriormente en la composición del mercado de trabajo (obstáculos en el acceso a cargos jerárquicos, precarización laboral, etc ) y responde a un conjunto de normas sociales y estereotipos de género que asignan mandatos diferenciales a varones y mujeres.

Dicha feminizaciĂłn de las tareas de cuidado penaliza a estas Ăşltimas, haciendo que enfrenten extensas cargas de trabajo en el hogar y, por ende, imponiendo una fuerte restricciĂłn temporal y afectando el acceso al mercado de trabajo y a la trayectoria laboral.



Total nacional


A modo ilustrativo, se señala que: del total de personas que realizan tareas domésticas, un 69% son mujeres y un 31% son varones. Esto sucede si tenemos en cuenta el total de los hogares, y seguramente la diferencia se agravaría si quitáramos los hogares unipersonales del conteo y/o incluyéramos a las trabajadoras de servicio doméstico.

Personas que realizan las tareas domésticas del hogar según sexo

No incluye trabajadoras de servicio doméstico. Total de aglomerados urbanos. 3er trimestre 2023

A esto se suma el hecho de que prácticamente todas las personas que se dedican al servicio doméstico (es decir, que sí venden este trabajo en el mercado) son mujeres, un 96.9%. Asimismo, del total de mujeres ocupadas, un 13.1% se dedica a esta ocupación, conformando entonces una salida laboral popular. Para más información, podés consultar el informe Las trabajadoras de servicio doméstico en Argentina.

Por regiĂłn


Personas que realizan las tareas domésticas del hogar según sexo

Por región. 3er trimestre 2023 . No incluye trabajadoras de servicio doméstico


DistribuciĂłn del ingreso


DistribuciĂłn del Ingreso



Por último, podemos analizar las brechas de género en la distribución de los ingresos. En primer lugar, se ordena por deciles a las personas según su ingreso per cápita familiar (el ingreso total del hogar dividido por la cantidad de personas que lo componen). Es decir, se forman diez grupos de individuos, de igual tamaño, ordenados según el nivel de ingresos que le corresponden por el hogar al que pertenece. En el siguiente gráfico se puede observar la proporción de mujeres y de varones que finalmente componen cada decil.

En este caso, no hay diferencias destacables más allá de una leve preponderancia de las mujeres en todos los deciles, explicable por cuestiones demográficas (hay más mujeres que varones en la población general). A su vez, los resultado para cada región son muy similares a los del total nacional, por lo cúal no resulta significativa su publicación.

Composición según sexo de los deciles del ingreso per cápita familiar

Total de la poblaciĂłn. Total de aglomerados urbanos. 3er trimestre 2023

En segundo lugar, se separa a la población en deciles según el ingreso total individual. Es decir, se ordena en base al nivel de ingresos que percibe cada individuo, no el hogar (caso anterior). En este caso puede verse que los deciles más bajos de ingresos están compuestos mayoritariamente por mujeres y, en paralelo, los deciles de mayores ingresos se componen mayoritariamente por varones. Decimos entonces que los estratos de menores ingresos están feminizados, al tiempo que los estratos de mayores ingresos se encuentran masculinizados. En este caso también, los resultado para cada región son muy similares a los del total nacional, por lo cúal no resulta significativa su publicación.

ComposiciĂłn segĂşn sexo de los deciles de ingresos totales individuales

PoblaciĂłn perceptora de ingresos. Total de aglomerados urbanos. 3er trimestre 2023

¿Cuál es la diferencia entre los gráficos presentados? En el primer gráfico, las unidades de análisis son los hogares, sólo que se distribuyeron de forma “pareja” sus ingresos entre los miembros. De esta forma, la composición por sexo de los estratos de menores ingresos no tiene mayores diferencias respecto a la de los estratos de mayores ingresos. En cambio, en el segundo gráfico de esta sección vemos lo que pasa a nivel individual, lo cual es una forma de “abrir” hacia el interior de los hogares. La unidad familiar parece resolver la diferencia entre sexos, pero dentro de la se mantiene la diferencia: los varones tienen más probabilidades de ganar más que las mujeres del mismo hogar. La distribución de los ingresos de las mujeres, sesgada hacia los menores ingresos, se compensa en la estructura familiar con la distribución de los ingresos de los varones, sesgada hacia los mayores ingresos. Entonces, la familia como unidad de reproducción esconde y resuelve debajo de la superficie (la distribución aparentemente equitativa según los ingresos per cápita) la inequitativa distribución de las tareas de reproducción y las dificultades asociadas que tienen las mujeres para participar de forma plena en el mercado de trabajo y por tanto percibir ingresos semejantes a los de los varones.


Glosario


Glosario



En esta secciĂłn definimos conceptos que facilitan la lectura del informe.

Brecha de ingresos: El ingreso total contempla ingresos laborales y no laborales, como rentas o subsidios. Este indicador calcula la diferencia entre los ingresos individuales promedios de los varones y las mujeres, expresada en términos del ingreso de los varones (generalmente el más alto). Es decir, que puede leerse como “las mujeres perciben ingresos que, en promedio, son un …% menores que los de los varones”. En Argentina esta brecha es estructural, aunque sensible a los ciclos económicos.

Brecha de la ocupación principal: Este indicador es la brecha de ingresos derivada de la ocupación principal, que calcula la diferencia entre los ingresos promedios percibidos por el empleo principal de los varones y las mujeres, expresada en términos del promedio percibido por los varones (generalmente el más alto). Excluye los ingresos no laborales, como rentas o subsidios. Puede leerse como “las mujeres perciben ingresos derivados de su ocupación principal que, en promedio, son aún …% menores que los de los varones”. El fenómeno de que sea menor para las mujeres es algo que se repite en todo el mundo y se debe al tipo de inserción laboral que tienen las personas cuyo género condiciona la jerarquía del puesto donde trabajan, la rama de la ocupación, la cantidad de tiempo que destinan al mercado remunerado, cuánta responsabilidad tienen sobre las tareas domésticas, entre otras. Si bien existe la discriminación lisa y llana, la presencia de una brecha salarial mensual no implica necesariamente una diferencia salarial por hora.

CalificaciĂłn: Refiere a las competencias que requiere el puesto de trabajo.

Desocupado: es el estado de una persona que está inserta en el mercado laboral, buscando un empleo aunque no lo consiga.

Estadísticas binarias: Hace referencia a que la variable “sexo” sólo adopta el valor de “masculino” o “femenino” en la base de datos utilizada, reforzando el paradigma heteronormativo y el binarismo de género. Sin disponer de una variable que aluda a la identidad de género, muchas identidades quedan invisibilizadas y con ellas, sus situaciones y necesidades específicas.

Falta de descuento jubilatorio: Muestra el estado de una relación laboral asalariada que no cumple con la obligación de aportes. La falta de descuento jubilatorio suele ser un indicador de la falta de registro de la relación. Si bien es un fenómeno estructural en Argentina, la incidencia de esta problemática es mayor entre las mujeres asalariadas.

Feminización de la pobreza: Refiere al conjunto de procesos de empobrecimiento que afectan en mayor medida a las mujeres y que se manifiestan en una mayor proporción de mujeres entre las personas cuyos ingresos no llegan a cubrir la canasta básica.

Nivel educativo: El nivel educativo alcanzado es una forma de ver cuánto dedicaron al estudio quienes trabajan.

Ocupado/a/e: Es el estado de una persona que está inserta en el mercado laboral con un empleo, sea formal, informal, de jornada reducida, asalariado, por cuenta propia, de jefatura, entre otros.

Ocupados/as demandantes: las personas que ya tienen un empleo pero buscan activamente otro o trabajar más horas.

Paredes de cristal / segregación horizontal: Es una forma de visibilizar la distribución asimétrica de las mujeres en ramas de la ocupación, que además de reproducir estereotipos de género representa un problema de ingresos, ya que las ramas feminizadas tienen sueldos promedios más bajos y mayores niveles de informalidad que los masculinizados.

Población de 14 años y más: Es la población total de este informe, que incluye todas las personas que hayan alcanzado el umbral de los 14 años, el límite inferior de lo que se considera la “edad activa”.

Población Económicamente Activa (PEA): La Población Económicamente Activa (PEA) incluye a las personas que ofrecen su trabajo en el mercado, sea que lo consiguen (ocupadas/os) o no (desocupadas/os). Al considerar únicamente el mercado laboral no contempla la condición de actividad expandida a tareas domésticas y de cuidados no remunerados.

Ramas de la ocupaciĂłn: Es una clasificaciĂłn de las actividades econĂłmicas que realiza el establecimiento dĂłnde trabajan las personas. La rama de actividad econĂłmica de una persona no depende de las tareas especĂ­ficas de su trabajo, sino de las caracterĂ­sticas de la unidad econĂłmica en la que trabaja.

Regiones: En este informe se identifican 6 regiones: Gran Buenos Aires, Noroeste Argentino (NOA), Noreste Argentino (NEA), Cuyo, Pampeana y Patagonia. Debido a la disponibilidad de la muestra, algunas desagregaciones pierden validez y por esa razón se omite su publicación. En otros casos, las aperturas por región devuelven resultados muy similares a los del total nacional, y por esa razón no resulta significativa su publicación. Obtener datos específicos sobre cada una de las regiones no solo posibilita evidenciar las particularidades regionales de las asimetrías recorridas a lo largo del informe, sino que también permiten realizar comparaciones.

Subocupados/as: Todas las personas que trabajan menos de 35 horas semanales, están disponibles para trabajar más horas y desean aumentar la cantidad de horas que trabajan.

Tasa de actividad: Se calcula como la proporción que representa la Población Económicamente Activa entre la población total, ya sea de mujeres o de varones. Cabe destacar que esta definición de “Actividad” no contempla actividades como cocinar, limpiar, cuidar, etc. que son realizadas principalmente por mujeres fuera del mercado.

Tasa de empleo: La tasa muestra la proporción de quienes están en el mercado laboral como ocupades en relación a la población de mujeres y de varones, es decir, se recorta de la tasa de actividad la proporción de quienes están desocupadas.

Tasa de desocupación: a tasa muestra la proporción de personas que están buscando empleo pero no lo consiguen, entre la población económicamente activa . Esta situación es más recurrente entre mujeres.

Tasa de subocupación: La tasa relaciona la cantidad de personas en situación de subocupación horaria respecto al total de la PEA. Estos empleos dan mayor flexibilidad para el manejo de las responsabilidades y son las mujeres las que presentan tasas de subocupación más altas, muchas veces debido a la carga de trabajo de cuidados que demanda muchas horas que no se llevan al mercado de trabajo. Las trabajadoras tienen mayores complicaciones al momento de conseguir un trabajo de tiempo completo.

Trabajo doméstico y de cuidados: También conocido como “trabajo reproductivo” es aquel que es imprescindible para mantener la vida de las personas. Se manifiesta en tareas como cocinar, lavar, ordenar, atender las necesidades de lxs miembrxs de un hogar y de la familia en general. Todas las personas necesitamos cuidados a lo largo de nuestras vidas y la concreción de los mismos suele depender en mayor medida de las identidades feminizadas.

MetodologĂ­a


Aclaraciones metodolĂłgicas



Para realizar los cálculos se utilizan bases de datos publicadas por la Encuesta Permanente de Hogares del INDEC. Esta encuesta releva características demográficas, sociales, económicas, con especial atención a las formas de participación en el mercado laboral, entre hogares y personas de 31 aglomerados urbanos.

Respecto del impacto de la pandemia por COVID-19, tanto sobre los resultados como sobre la calidad de los datos, cabe aclarar que la encuesta pasĂł de la modalidad presencial a la telefĂłnica para contactar y realizar la entrevista a los hogares. El propio INDEC advierte que ciertos datos no cuentan con la calidad con la que habitualmente la EPH presenta sus resultados.

El documento se realizĂł utilizando el lenguaje de programaciĂłn R. Para les curioses, todo el cĂłdigo se encuentra disponible para su descarga1.


1 Presionando en Code > Download Rmd se accede a la descarga de la sintaxis completa de este informe.

LS0tDQp0aXRsZTogIkxhIGRlc2lndWFsZGFkIGRlIGfDqW5lcm8gc2UgcHVlZGUgbWVkaXIiDQpkYXRlOiAiRmVicmVybyBkZSAyMDIzIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIHRoZW1lOiBmbGF0bHkNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBkZl9wcmludDogcGFnZWQNCnN1YnRpdGxlOiBEYXRvcyBkZSBsYSBFbmN1ZXN0YSBQZXJtYW5lbnRlIGRlIEhvZ2FyZXMuIDNlciB0cmltZXN0cmUgZGUgMjAyMy4NCnVybGNvbG9yOiBudWxsDQotLS0NCg0KPHN0eWxlPg0KLm5hdj5saT5hIHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgcGFkZGluZzogMTBweCAxNXB4Ow0KICAgIGNvbG9yOiAjRTU2MTZFOw0KfQ0KDQogLm5hdi1waWxscz5saS5hY3RpdmU+YSwgLm5hdi1waWxscz5saS5hY3RpdmU+YTpmb2N1cywgLm5hdi1waWxscz5saS5hY3RpdmU+YTpob3ZlciB7DQogICAgY29sb3I6ICNmZmZmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0U1NjE2RTsNCn0NCjwvc3R5bGU+DQoNCi0tLQ0KDQojIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzfQ0KDQojIyBIb21lDQoNCi0tLQ0KDQojIyMgDQpFbiBlc3RlIGluZm9ybWUgc2UgcHVlZGVuIGV4cGxvcmFyIGxhcyBkaWZlcmVuY2lhcyBlbiBsYSBpbnNlcmNpw7NuIGVuIGVsIG1lcmNhZG8gZGUgdHJhYmFqbywgZW4gbG9zIGluZ3Jlc29zIHF1ZSBwZXJjaWJlbiwgZW4gbGEgY2FudGlkYWQgZGUgaG9yYXMgcXVlIHRyYWJhamFuIHNlbWFuYWxtZW50ZSwgeSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhcyB0YXJlYXMgZG9tw6lzdGljYXMgZW50cmUgdmFyb25lcyB5IG11amVyZXMuIFByZXNlbnRhbW9zIGVzdGEgaW5mb3JtYWNpw7NuIHBhcmEgZWwgcGHDrXMgZW4gZ2VuZXJhbCB5IGRlc2FncmVnYWRhIHBvciByZWdpw7NuLiANCjxicj48YnI+DQoNCkVzdG9zIGRhdG9zIGVzdMOhbiBkaXNwb25pYmxlcyBwYXJhIHN1IGRpdnVsZ2FjacOzbiBeMV4uIFNpIHRlIGd1c3RhIGxvIHF1ZSBoYWNlbW9zIHBvZMOpcyBhcG95YXJub3MgaGFjacOpbmRvdGUgc29jaWUgZGVsIFsjQ2x1YkVjb2ZlbWluaXRhIG8gcmVhbGl6YW5kbyB1bmEgZG9uYWNpw7NuXShodHRwczovL2RvbmFyb25saW5lLm9yZy9lY29ub21pYS1mZW1pbmktcy10YS9jbHViLWVjb2ZlbWluaXRhKS4NCg0KLS0tDQoNCl4xXiBTaSBuZWNlc2l0w6FzIGNpdGFybm9zIGVuIHVuIHRyYWJham8sIHBvZMOpcyBoYWNlcmxvIGNvbW86ICJFY29mZW1pbml0YS4gKDIwMjMpLiBFY29mZW1pbml0YS9FY29GZW1pRGF0YTogaW5mb3JtZXMgZWNvZmVtaWRhdGEuIFplbm9kby4gaHR0cDovL2RvaS5vcmcvMTAuNTI4MS96ZW5vZG8uNDU0MDE4NSINCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojIFNlIGxpbXBpYSBsYSBtZW1vcmlhIHkgc2UgY2FyZ2FuIGxpYnJlcsOtYXMgw7p0aWxlcw0KIyBSZWluaWNpYXIgUg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGh0dHIpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KGdndGhlbWVzKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShnZ2FsdCkNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoZm9ybWF0dGFibGUpDQpsaWJyYXJ5KG9wZW54bHN4KQ0KbGlicmFyeShncmlkRXh0cmEpDQpsaWJyYXJ5KGdncmlkZ2VzKQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KGVwaCkgIyBVbiBwYXF1ZXRlIHBhcmEgdHJhYmFqYXIgY29uIGxhcyBiYXNlcyBkZSBsYSBFbmN1ZXN0YSBwZXJtYW5lbnRlIGRlIEhvZ2FyZXMhDQojIENvbW8gZnVlbnRlIHRvbWFtb3MgdW4gc2NyaXB0IGNvbiBlbCBjw7NkaWdvIGRlIGZ1bmNpb25lcyBwYXJhIG1vZGlmaWNhciBlbCBmb3JtYXRvIGRlIGxvcyBkYXRvcy4NCm9wdGlvbnMoc2NpcGVuID0gOTk5OSkNCnNvdXJjZSgiLi4vLi4vUi9mdW5jaW9uZXMgZm9ybWF0by5SIikNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KIyBTZSBsZXZhbnRhbiBsYXMgYmFzZXMgdXN1YXJpYXMgZGUgbGEgRVBIIGRlbCB0cmltZXN0cmUgY29ycmVzcG9uZGllbnRlDQojbGV2YW50byBtYW51YWxtZW50ZSBwb3JxdWUgbWUgZmFsbGEgZ2V0X21pY3JvZGF0YS4gcHLDs3hpbW8gdHJpbWVzdHJlIHVzYXIgZWwgY8OzZGlnbyBncmlzYWRvIChDUykNCmxpYnJhcnkocmVhZHhsKQ0KI2Jhc2VfaW5kaXZpZHVhbCA8LSByZWFkX2V4Y2VsKCIvVXNlcnMvTWluaXN0ZXJpby5ERVNLVE9QLTQ2QlMyTUYvRG9jdW1lbnRzL0VGL3VzdV9pbmRpdmlkdWFsX1Q0MjIueGxzeC54bHN4IikNCiNiYXNlX2hvZ2FyIDwtIHJlYWRfZXhjZWwoIi9Vc2Vycy9NaW5pc3RlcmlvLkRFU0tUT1AtNDZCUzJNRi9Eb2N1bWVudHMvRUYvdXN1X2hvZ2FyX1Q0MjIueGxzeC54bHN4IikNCg0KIyAoZnVuY2lvbmVzIGRlbCBwYXF1ZXRlICdlcGgnKQ0KYmFzZV9pbmRpdmlkdWFsIDwtIGdldF9taWNyb2RhdGEoeWVhciA9IDIwMjMsIHRyaW1lc3RlciA9IDMsIHR5cGUgPSAiaW5kaXZpZHVhbCIpDQpiYXNlX2hvZ2FyIDwtIGdldF9taWNyb2RhdGEoeWVhciA9IDIwMjMsIHRyaW1lc3RlciA9IDMsIHR5cGUgPSAiaG9nYXIiKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojIFN1YnRpdHVsbyB5IGZ1ZW50ZSBwYXJhIGdyYWZpY29zDQojIGRhdGUgPC0gIjFlciB0cmltZXN0cmUgMjAyMiINCmRhdGUgPC0gcGFzdGUwKGJhc2VfaW5kaXZpZHVhbCRUUklNRVNUUkVbMV0sIGlmZWxzZShiYXNlX2luZGl2aWR1YWwkVFJJTUVTVFJFWzFdICVpbiUgYygxLDMpLCAiZXIiLCBpZmVsc2UoYmFzZV9pbmRpdmlkdWFsJFRSSU1FU1RSRVsxXT09MiwgImRvIiwgInRvIikpLCAiIHRyaW1lc3RyZSAiLCBiYXNlX2luZGl2aWR1YWwkQU5PNFsxXSkNCmFnbG9fZGF0ZSA8LSBwYXN0ZTAoIlRvdGFsIGRlIGFnbG9tZXJhZG9zIHVyYmFub3MuICIsIGRhdGUpDQpmdWVudGUgPC0gIiNFY29mZW1pZGF0YSB5IEVjb2ZlbWluaXRhIGVuIGJhc2UgYSBFUEgtSU5ERUMiDQpgYGANCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIE1vZGlmaWNhY2lvbmVzIGVuIGxhIGJhc2UNCmJhc2VfaW5kaXZpZHVhbCA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBtdXRhdGUoU2V4byA9IGFzLmNoYXJhY3RlcihDSDA0KSwNCiAgICAgICAgIFNleG8gPSBjYXNlX3doZW4oU2V4bz09IjEiIH4gIlZhcm9uZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBTZXhvPT0iMiIgfiAiTXVqZXJlcyIpLA0KICAgICAgICAgUmVnaW9uID0gYXMuY2hhcmFjdGVyKFJFR0lPTiksDQogICAgICAgICBSZWdpb24gPSBjYXNlX3doZW4oUkVHSU9OPT0iMSIgfiAiR3JhbiBCdWVub3MgQWlyZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR0lPTj09IjQwIiB+ICJOT0EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR0lPTj09IjQxIiB+ICJORUEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR0lPTj09IjQyIiB+ICJDdXlvIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdJT049PSI0MyIgfiAiUGFtcGVhbmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR0lPTj09IjQ0IiB+ICJQYXRhZ29uaWEiKSwNCiAgICAgICAgIFBQMDREX0NPRCA9IGFzLmNoYXJhY3RlcihQUDA0RF9DT0QpLA0KICAgICAgICAgUFAwNERfQ09EID0gY2FzZV93aGVuKG5jaGFyKFBQMDREX0NPRCkgPT0gNSB+IFBQMDREX0NPRCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY2hhcihQUDA0RF9DT0QpID09IDQgfiBwYXN0ZTAoIjAiLCBQUDA0RF9DT0QpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jaGFyKFBQMDREX0NPRCkgPT0gMyB+IHBhc3RlMCgiMDAiLCBQUDA0RF9DT0QpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jaGFyKFBQMDREX0NPRCkgPT0gMiB+IHBhc3RlMCgiMDAwIiwgUFAwNERfQ09EKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY2hhcihQUDA0RF9DT0QpID09IDEgfiBwYXN0ZTAoIjAwMDAiLCBQUDA0RF9DT0QpKSwNCiAgICAgICAgIENBTElGSUNBQ0lPTiA9IHN1YnN0cihQUDA0RF9DT0QsIDUsIDUpLA0KICAgICAgICAgQ0FMSUZJQ0FDSU9OID0gY2FzZV93aGVuKENBTElGSUNBQ0lPTj09IjEiIH4gIlByb2Zlc2lvbmFsZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTElGSUNBQ0lPTj09IjIiIH4gIlTDqWNuaWNvcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FMSUZJQ0FDSU9OPT0iMyIgfiAiT3BlcmF0aXZvcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FMSUZJQ0FDSU9OPT0iNCIgfiAiTm8gQ2FsaWZpY2Fkb3MiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAiMCIpLA0KICAgICAgICAgQ0FMSUZJQ0FDSU9OID0gZmFjdG9yKENBTElGSUNBQ0lPTiwgYygiTm8gQ2FsaWZpY2Fkb3MiLCAiT3BlcmF0aXZvcyIsICJUw6ljbmljb3MiLCAiUHJvZmVzaW9uYWxlcyIpKSwNCiAgICAgICAgIEpFUkFSUVVJQSA9IHN1YnN0cihQUDA0RF9DT0QsIDMsIDMpLA0KICAgICAgICAgSkVSQVJRVUlBID0gY2FzZV93aGVuKEpFUkFSUVVJQSAlaW4lIGMoIjAiLCAiMiIpIH4gIkRpcmVjY2nDs24gbyBKZWZlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkVSQVJRVUlBPT0iMSIgfiAiQ3VlbnRhcHJvcGlhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRVJBUlFVSUE9PSIzIiB+ICJUcmFiYWphZG9yZXMgQXNhbGFyaWFkb3MiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAiMCIpLA0KICAgICAgICAgSkVSQVJRVUlBID0gZmFjdG9yKEpFUkFSUVVJQSwgYygiRGlyZWNjacOzbiBvIEplZmVzIiwgIlRyYWJhamFkb3JlcyBBc2FsYXJpYWRvcyIsICJDdWVudGFwcm9waWEiKSksDQogICAgICAgICBOSVZFTF9FRFVDQVRJVk8gPSBjYXNlX3doZW4oTklWRUxfRUQgJWluJSBjKDEsIDcpIH4gIlNpbiBJbnN0cnVjY2nDs24iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JVkVMX0VEICVpbiUgYygyLCAzKSB+ICJQcmltYXJpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTklWRUxfRUQgJWluJSBjKDQsIDUpIH4gIlNlY3VuZGFyaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JVkVMX0VEID09IDYgICAgICAgICB+ICJTdXBlcmlvciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTklWRUxfRUQgPT0gOSAgICAgICAgIH4gIk5TL05SIiksDQogICAgICAgICBOSVZFTF9FRFVDQVRJVk8gPSBmYWN0b3IoTklWRUxfRURVQ0FUSVZPLCBsZXZlbHMgPSBjKCJTaW4gSW5zdHJ1Y2Npw7NuIiwgIlByaW1hcmlhIiwgIlNlY3VuZGFyaWEiLCAiU3VwZXJpb3IiKSksDQogICAgICAgICBHUlVQT19FREFEID0gY2FzZV93aGVuKENIMDYgPj0gMTQgJiBDSDA2IDw9IDI5IH4gImRlIDE0IGEgMjkgYcOxb3MiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDA2ID49IDMwICYgQ0gwNiA8PSA2NCB+ICJkZSAzMCBhIDY0IGHDsW9zIikpDQoNCiMgY29sb3JlcyA9IGMoIiNhYTE2NWEiLCIjMTZhYTY2IikNCmNvbG9yZXMgPSBjKCIjRTU2MTZFIiwgIiNjOWM5YzkiKQ0KY29sb3Jlc2IgPSBjKCIjOENEREQzIiwgIiM4NTk0QzYiLCAiI0Y4RjVFRSIpDQpgYGANCg0KIyMgTWVyY2FkbyBkZSBUcmFiYWpvDQoNCi0tLQ0KDQojIyMgU29icmUgbGEgY29tcG9zaWNpw7NuIGRlbCBNZXJjYWRvIGRlIFRyYWJham8gey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHN9DQo8YnI+PGJyPg0KRW4gZXN0YSBzZWNjacOzbiBzZSBpbnRlbnRhIG1vc3RyYXIgbGFzIGFzaW1ldHLDrWFzIHF1ZSBleGlzdGVuIGVuIGVsIG1lcmNhZG8gZGUgdHJhYmFqbyBlbiBjdWFudG8gYSBzdSBjb21wb3NpY2nDs24uIFBhcmEgZXN0byBzZSB1dGlsaXphbiBsYXMgdGFzYXMgZGUgYWN0aXZpZGFkLCBlbXBsZW8sIGRlc2VtcGxlbyB5IHN1Ym9jdXBhY2nDs24gc2Vnw7puIGVsIHNleG8gZGUgbGFzIHBlcnNvbmFzLiBFbCBvYmpldGl2byBlcyB2ZXIgcXXDqSB0YW4gbWFzY3VsaW5pemFkbyBzZSBlbmN1ZW50cmEgZWwgbWVyY2FkbyBsYWJvcmFsIHkgdmVyIHNpIGxhcyBtdWplcmVzIGVuY3VlbnRyYW4gbcOhcyBwcm9ibGVtYXMgYSBsYSBob3JhIGRlIGNvbnNlZ3VpciB1biBlbXBsZW8uIFBhcmEgbW9zdHJhciBsYSBzZWdyZWdhY2nDs24gaG9yaXpvbnRhbCBlbiBlbCBtZXJjYWRvIGRlIHRyYWJham8gc2UgcHJlc2VudGEgbGEgZXN0cnVjdHVyYSBkZSBsYXMgZGlmZXJlbnRlcyByYW1hcyBkZSBvY3VwYWNpw7NuLiANCjxicj4NCg0KRW4gbGEgdmVyc2nDs24gZXh0ZW5kaWRhIGRlbCBpbmZvcm1lLCBkaXNwb25pYmxlIGRlIG1hbmVyYSBncmF0dWl0YSBlbiBlc3RhIHdlYiwgc2UgYW5hbGl6YW4gbGFzIHRhc2FzIGLDoXNpY2FzIGRlbCBtZXJjYWRvIGxhYm9yYWwgdGVuaWVuZG8gZW4gY3VlbnRhIGxhIGVkYWQgZGUgbGFzIHBlcnNvbmFzIHkgc2UgZXhhbWluYSBsYSBpbmNpZGVuY2lhIGRlIGxhIGluZm9ybWFsaWRhZCBlbiBsYXMgcmVsYWNpb25lcyBkZSBkZXBlbmRlbmNpYSBkZSBhc2FsYXJpYWRvcyB5IGFzYWxhcmlhZGFzLiBBIHN1IHZleiwgc2UgZ3JhZmljYSBsYSBkaWZlcmVuY2lhIGVuIGFjY2VzbyBhIGNhcmdvcyBqZXLDoXJxdWljb3MsIHZpbmN1bGFuZG8gZXN0b3MgZGF0b3MgYSBsYSBzZWdyZWdhY2nDs24gdmVydGljYWwgZW4gZWwgbWVyY2FkbyBkZSB0cmFiYWpvLg0KDQotLS0NCg0KIyMjIyBUYXNhcyBiw6FzaWNhcw0KPGJyPg0KDQojIyMjIyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30NCg0KIyMjIyMjIFRvdGFsIG5hY2lvbmFsDQo8YnI+DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQp0YWJsYTEuMSA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoQ0gwNiA+PSAxNCkgJT4lIA0KICBncm91cF9ieShTZXhvKSAlPiUgDQogIHN1bW1hcmlzZShQb2JsYWNpb24gICAgICAgICA9IHN1bShQT05ERVJBKSwNCiAgICAgICAgICAgIE9jdXBhZG9zICAgICAgICAgID0gc3VtKFBPTkRFUkFbRVNUQURPID09IDFdKSwNCiAgICAgICAgICAgIERlc29jdXBhZG9zICAgICAgID0gc3VtKFBPTkRFUkFbRVNUQURPID09IDJdKSwNCiAgICAgICAgICAgIFBFQSAgICAgICAgICAgICAgID0gT2N1cGFkb3MgKyBEZXNvY3VwYWRvcywNCiAgICAgICAgICAgIE9jdXBhZG9zX2RlbWFuZCAgID0gc3VtKFBPTkRFUkFbRVNUQURPID09IDEgJiBQUDAzSiA9PTFdKSwNCiAgICAgICAgICAgIFN1Ym9jX2RlbWFuZGFudGUgID0gc3VtKFBPTkRFUkFbRVNUQURPID09IDEgJiBJTlRFTlNJID09MSAmIFBQMDNKPT0xXSksDQogICAgICAgICAgICBTdWJvY19ub19kZW1hbmQgICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAxICYgSU5URU5TSSA9PTEgJiBQUDAzSiAlaW4lIGMoMiw5KV0pLA0KICAgICAgICAgICAgU3Vib2N1cGFkb3MgICAgICAgPSBTdWJvY19kZW1hbmRhbnRlICsgU3Vib2Nfbm9fZGVtYW5kLA0KICAgICAgICAgICAgJ1Rhc2EgQWN0aXZpZGFkJyAgICAgICAgICAgICAgICAgID0gcm91bmQoUEVBL1BvYmxhY2lvbiwgMyksDQogICAgICAgICAgICAnVGFzYSBFbXBsZW8nICAgICAgICAgICAgICAgICAgICAgPSByb3VuZChPY3VwYWRvcy9Qb2JsYWNpb24sIDMpLA0KICAgICAgICAgICAgJ1Rhc2EgRGVzb2N1cGFjacOzbicgICAgICAgICAgICAgICA9IHJvdW5kKERlc29jdXBhZG9zL1BFQSwgMyksDQogICAgICAgICAgICAnVGFzYSBPY3VwYWRvcyBEZW1hbmRhbnRlcycgICAgICAgPSByb3VuZChPY3VwYWRvc19kZW1hbmQvUEVBLCAzKSwNCiAgICAgICAgICAgICdUYXNhIFN1Ym9jdXBhY2nDs24nICAgICAgICAgICAgICAgPSByb3VuZChTdWJvY3VwYWRvcy9QRUEsIDMpLA0KICAgICAgICAgICAgJ1Rhc2EgU3Vib2N1cGFjacOzbiBkZW1hbmRhbnRlJyAgICA9IHJvdW5kKFN1Ym9jX2RlbWFuZGFudGUvUEVBLCAzKSwNCiAgICAgICAgICAgICdUYXNhIFN1Ym9jdXBhY2nDs24gbm8gZGVtYW5kYW50ZScgPSByb3VuZChTdWJvY19ub19kZW1hbmQvUEVBLCAzKSkgJT4lIA0KICBzZWxlY3QoLWMoMjo5KSkgJT4lIA0KICBwaXZvdF9sb25nZXIoLiwgY29scyA9IDI6OCwgbmFtZXNfdG8gPSAiSW5kaWNhZG9yZXMiLCB2YWx1ZXNfdG8gPSAiVmFsb3IiKSAlPiUgDQogIHBpdm90X3dpZGVyKC4sIG5hbWVzX2Zyb20gPSBTZXhvLCB2YWx1ZXNfZnJvbSA9IFZhbG9yKQ0KDQppbmxpbmVfMSA8LSB0YWJsYTEuMSAlPiUgDQogIGZpbHRlcihJbmRpY2Fkb3JlcyA9PSAiVGFzYSBBY3RpdmlkYWQiKSAlPiUgDQogIHRyYW5zbXV0ZShkaWZlcmVuY2lhID0gcm91bmQoKFZhcm9uZXMtTXVqZXJlcykqMTAwLCAwKSkgJT4lIA0KICBwdWxsKGRpZmVyZW5jaWEpDQoNCmlubGluZV8yIDwtIHRhYmxhMS4xICU+JSANCiAgZmlsdGVyKEluZGljYWRvcmVzID09ICJUYXNhIEVtcGxlbyIpICU+JSANCiAgdHJhbnNtdXRlKGRpZmVyZW5jaWEgPSByb3VuZCgoVmFyb25lcy1NdWplcmVzKSoxMDAsIDApKSAlPiUgDQogIHB1bGwoZGlmZXJlbmNpYSkNCmBgYA0KDQpFbiBwcmltZXIgbHVnYXIgc2UgcHJlc2VudGFuIGFsZ3Vub3MgaW5kaWNhZG9yZXMgY2zDoXNpY29zICh1dGlsaXphZG9zIGEgbml2ZWwgaW50ZXJuYWNpb25hbCkgcXVlIGNhcmFjdGVyaXphbiBsYSBjb21wb3NpY2nDs24gZGVsIG1lcmNhZG8gZGUgdHJhYmFqbywgZGVzYWdyZWdhZG9zIHNlZ8O6biBlbCBzZXhvLiBQYXJhIGFob25kYXIgZW4gbG9zIGNvbmNlcHRvcyB1dGlsaXphZG9zIHNlIHB1ZWRlIGV4cGxvcmFyIGVsIGdsb3NhcmlvIGRlIGVzdGUgaW5mb3JtZS4gDQo8YnI+PGJyPg0KTGEgX190YXNhIGRlIGFjdGl2aWRhZF9fIGVzIGFtcGxpYW1lbnRlIG1heW9yIGVudHJlIGxvcyB2YXJvbmVzIChsYSBkaWZlcmVuY2lhIHJvbmRhIGxvcyBgciBpbmxpbmVfMWAgcHVudG9zIHBvcmNlbnR1YWxlcykuIEVzdGEgZGlzY3JlcGFuY2lhIHBvZHLDrWEgc2VyIGV4cGxpY2FkYSBwb3IgbcO6bHRpcGxlcyBjYXVzYXMuIFVuYSBkZSBlbGxhcyBlcyBxdWUgdW5hIGltcG9ydGFudGUgcG9yY2nDs24gZGUgbGFzIG11amVyZXMgZW4gZWRhZCBsYWJvcmFsIGRlZGlxdWVuIHN1IHRpZW1wbyBhIHJlYWxpemFyIHRhcmVhcyBkb23DqXN0aWNhcyBubyByZW11bmVyYWRhcywgZW4gbHVnYXIgZGUgdGVuZXIgdW5hIGFjdGl2aWRhZCBlbiBlbCBtZXJjYWRvIGRlIHRyYWJham8uIE90cmEgcmF6w7NuIHBvc2libGUgcG9kcsOtYSBzZXIgZWwgaGVjaG8gZGUgcXVlIGxhcyBtdWplcmVzIHRpZW5kYW4sIGVuIHByb21lZGlvLCBhIGVkdWNhcnNlIG3DoXMgcXVlIHN1cyBwYXJlcyB2YXJvbmVzLiBMYSBfX3Rhc2EgZGUgZW1wbGVvX18sIHBvciBzdSBwYXJ0ZSwgZXhoaWJlIHVuYSBkaWZlcmVuY2lhIGVudHJlIHZhcm9uZXMgeSBtdWplcmVzIHF1ZSByb25kYSBsb3MgYHIgaW5saW5lXzJgIHB1bnRvcywgZGVub3RhbmRvIGVsIG1pc21vIGZlbsOzbWVubyBhbnRlcmlvcm1lbnRlIG1lbmNpb25hZG8uDQo8YnI+PGJyPg0KRXMgaW1wb3J0YW50ZSBhY2xhcmFyIHF1ZSBlc3RhcyB0YXNhcyBleHByZXNhbiBlbCBjb21wb3J0YW1pZW50byBhZ3JlZ2FkbyBkZSBsYSBwb2JsYWNpw7NuLCB5IHF1ZSBsYXMgZGlmZXJlbmNpYXMgZW50cmUgdmFyb25lcyB5IG11amVyZXMgc3VmcmVuIHZhcmlhY2lvbmVzIHNpIHNlIHRpZW5lbiBlbiBjdWVudGEgb3RyYXMgdmFyaWFibGVzLCBjb21vIHB1ZWRlbiBzZXIgbG9zIGdydXBvcyBkZSBlZGFkLCBlbCBuaXZlbCBlZHVjYXRpdm8sIGxhIHByZXNlbmNpYSBkZSBuacOxZXMgZW4gZWwgaG9nYXIgbyBlbCBuaXZlbCBkZSBpbmdyZXNvcy4NCjxicj48YnI+DQoNCjxwIHN0eWxlPSJjb2xvcjojRTU2MTZFIj5fX1Rhc2FzIGRlIGFjdGl2aWRhZCB5IGVtcGxlbyBwb3Igc2V4b19fPC9wPg0KPHAgc3R5bGU9ImNvbG9yOiNjOWM5YzkiPl9fUG9ibGFjacOzbiBkZSAxNCBhw7FvcyB5IG3DoXMuIGByIGFnbG9fZGF0ZWBfXzwvcD4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0YWJsYTEuMiA8LSB0YWJsYTEuMSAlPiUgDQogIGZpbHRlcihJbmRpY2Fkb3JlcyAlaW4lIGMoIlRhc2EgQWN0aXZpZGFkIiwgIlRhc2EgRW1wbGVvIikpICU+JSANCiAgZ2F0aGVyKC4sIFNleG8sIHByb3BvcmNpb24sIDI6MykNCg0KZ2dwbG90KHRhYmxhMS4yLCBhZXMoeCA9ICcnLCBwcm9wb3JjaW9uLCBmaWxsID0gU2V4bywgZ3JvdXAgPSBTZXhvLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBwZXJjZW50KHByb3BvcmNpb24sIGRpZ2l0cyA9IDEpKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgZ2VvbV90ZXh0KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuOSksIHZqdXN0ID0yLCBzaXplID0gNikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSArDQogIGZhY2V0X3dyYXAofkluZGljYWRvcmVzLCBzdHJpcC5wb3NpdGlvbiA9ICJib3R0b20iKSArDQogIGxhYnMoY2FwdGlvbiA9IGZ1ZW50ZSkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCkpDQpgYGANCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIEFxdcOtIGhheSBxdWUgY2FtYmlhciBlbCBkaXJlY3RvcmlvIGVuIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZWwgZ3LDoWZpY28uDQojZ2dzYXZlKCJGaWd1cmExLnBuZyIsIHNjYWxlID0gMC43LCBkcGkgPSAzMDAsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcsIGJnID0gIiNmZmZmZmYiKQ0KYGBgDQoNCi0tLQ0KDQpBIGRpZmVyZW5jaWEgZGUgbGFzIHRhc2FzIGFudGVyaW9yZXMsIGxhcyBfX3Rhc2FzIGRlIGRlc29jdXBhY2nDs24geSBzdWJvY3VwYWNpw7NuX18gZXhwcmVzYW4gbGEgcHJvcG9yY2nDs24gcXVlIGVzdG9zIGdydXBvcyByZXByZXNlbnRhbiBlbiBsYSBQb2JsYWNpw7NuIEVjb27Ds21pY2FtZW50ZSBBY3RpdmEuIFVzdWFsbWVudGUsIGFtYmFzIHRhc2FzIHNvbiBtYXlvcmVzIHBhcmEgbGFzIG11amVyZXMgcXVlIHBhcmEgbG9zIHZhcm9uZXMsIHNlw7FhbGFuZG8gcXVlLCBpbmNsdXNvIHNpZW5kbyBtaW5vcsOtYSBlbiBlbCBtZXJjYWRvIGRlIHRyYWJham8sIGxhcyBtdWplcmVzIHRlbmRyw61hbiBtw6FzIGRpZmljdWx0YWRlcyBwYXJhIGNvbnNlZ3VpciB0cmFiYWpvIHkvbyBwYXJhIHRyYWJhamFyIHVuYSBqb3JuYWRhIGNvbXBsZXRhLiANCjxicj48YnI+DQpFbiBzdSBjb25qdW50bywgbG9zIGN1YXRybyBpbmRpY2Fkb3JlcyBwcmVzZW50YWRvcyBlbiBlc3RhIHNlY2Npw7NuIG11ZXN0cmFuIHVuYSBwcmltZXJhIGltYWdlbiBkZSBsYSBwcm9ibGVtw6F0aWNhIHF1ZSBlbmZyZW50YW4gbGFzIG11amVyZXMgZW4gZWwgbWVyY2FkbyBkZSB0cmFiYWpvIGFyZ2VudGluby4NCjxicj48YnI+DQoNCjxwIHN0eWxlPSJjb2xvcjojRTU2MTZFIj5fX1Rhc2FzIGRlIGRlc29jdXBhY2nDs24geSBzdWJvY3VwYWNpw7NuIHBvciBzZXhvX188L3A+DQo8cCBzdHlsZT0iY29sb3I6I2M5YzljOSI+X19Qb2JsYWNpw7NuIGRlIDE0IGHDsW9zIHkgbcOhcy4gYHIgYWdsb19kYXRlYF9fPC9wPg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRhYmxhMS4zIDwtIHRhYmxhMS4xICU+JSANCiAgZmlsdGVyKEluZGljYWRvcmVzICVpbiUgYygiVGFzYSBEZXNvY3VwYWNpw7NuIiwgIlRhc2EgU3Vib2N1cGFjacOzbiIpKSAlPiUgDQogIGdhdGhlciguLCBTZXhvLCBwcm9wb3JjaW9uLCAyOjMpDQoNCmdncGxvdCh0YWJsYTEuMywgYWVzKHggPSAnJywgcHJvcG9yY2lvbiwgZmlsbCA9IFNleG8sIGdyb3VwID0gU2V4bywgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gcGVyY2VudChwcm9wb3JjaW9uLCBkaWdpdHMgPSAxKSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGdlb21fdGV4dChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjkpLCB2anVzdCA9Miwgc2l6ZSA9IDYpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykgKw0KICBmYWNldF93cmFwKH5JbmRpY2Fkb3Jlcywgc3RyaXAucG9zaXRpb24gPSAiYm90dG9tIikgKw0KICBsYWJzKGNhcHRpb24gPSBmdWVudGUpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpKQ0KYGBgDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBBcXXDrSBoYXkgcXVlIGNhbWJpYXIgZWwgZGlyZWN0b3JpbyBlbiBxdWUgc2UgdmEgYSBndWFyZGFyIGVsIGdyw6FmaWNvLg0KI2dnc2F2ZSgiRmlndXJhMi5wbmciLCBzY2FsZSA9IDAuNywgZHBpID0gMzAwLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3LCBiZyA9ICIjZmZmZmZmIikNCmBgYA0KDQojIyMjIyMgUG9yIHJlZ2nDs24NCjxicj4NCkEgY29udGludWFjacOzbiBzZSBwcmVzZW50YW4gbGFzIHRhc2FzIGRlIGFjdGl2aWRhZCwgZW1wbGVvLCBkZXNvY3VwYWNpw7NuIHkgc3Vib2N1cGFjacOzbiBwYXJhIHZhcm9uZXMgeSBtdWplcmVzIHNlZ8O6biBsYSByZWdpw7NuLiANCjxicj48YnI+DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojY2hlcXVlYW1vcyBjYW50aWRhZGVzIG11ZXN0cmFsZXMNCnRhYmxhMS40IDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihDSDA2ID49IDE0KSAlPiUgDQogIG11dGF0ZShuID0gMSkgJT4lIA0KICBncm91cF9ieShTZXhvLCBSZWdpb24pICU+JSANCiAgc3VtbWFyaXNlKG5fUG9ibGFjaW9uICAgICAgICAgPSBzdW0obiksDQogICAgICAgICAgICBuX09jdXBhZG9zICAgICAgICAgID0gc3VtKG5bRVNUQURPID09IDFdKSwNCiAgICAgICAgICAgIG5fRGVzb2N1cGFkb3MgICAgICAgPSBzdW0obltFU1RBRE8gPT0gMV0pLA0KICAgICAgICAgICAgbl9QRUEgICAgICAgICAgICAgICA9IG5fT2N1cGFkb3MgKyBuX0Rlc29jdXBhZG9zLA0KICAgICAgICAgICAgbl9PY3VwYWRvc19kZW1hbmQgICA9IHN1bShuW0VTVEFETyA9PSAxICYgUFAwM0ogPT0xXSksDQogICAgICAgICAgICBuX1N1Ym9jX2RlbWFuZGFudGUgID0gc3VtKG5bRVNUQURPID09IDEgJiBJTlRFTlNJID09MSAmIFBQMDNKPT0xXSksDQogICAgICAgICAgICBuX1N1Ym9jX25vX2RlbWFuZCAgID0gc3VtKG5bRVNUQURPID09IDEgJiBJTlRFTlNJID09MSAmIFBQMDNKICVpbiUgYygyLDkpXSksDQogICAgICAgICAgICBuX1N1Ym9jdXBhZG9zICAgICAgID0gbl9TdWJvY19kZW1hbmRhbnRlICsgbl9TdWJvY19ub19kZW1hbmQpDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCiN0YWJsYSBkZSB0YXNhcyBiw6FzaWNhcyBwb3IgcmVnacOzbg0KdGFibGExLjUgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKENIMDYgPj0gMTQpICU+JSANCiAgZ3JvdXBfYnkoU2V4bywgUmVnaW9uKSAlPiUgDQogIHN1bW1hcmlzZShQb2JsYWNpb24gICAgICAgICA9IHN1bShQT05ERVJBKSwNCiAgICAgICAgICAgIE9jdXBhZG9zICAgICAgICAgID0gc3VtKFBPTkRFUkFbRVNUQURPID09IDFdKSwNCiAgICAgICAgICAgIERlc29jdXBhZG9zICAgICAgID0gc3VtKFBPTkRFUkFbRVNUQURPID09IDJdKSwNCiAgICAgICAgICAgIFBFQSAgICAgICAgICAgICAgID0gT2N1cGFkb3MgKyBEZXNvY3VwYWRvcywNCiAgICAgICAgICAgIE9jdXBhZG9zX2RlbWFuZCAgID0gc3VtKFBPTkRFUkFbRVNUQURPID09IDEgJiBQUDAzSiA9PTFdKSwNCiAgICAgICAgICAgIFN1Ym9jX2RlbWFuZGFudGUgID0gc3VtKFBPTkRFUkFbRVNUQURPID09IDEgJiBJTlRFTlNJID09MSAmIFBQMDNKPT0xXSksDQogICAgICAgICAgICBTdWJvY19ub19kZW1hbmQgICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAxICYgSU5URU5TSSA9PTEgJiBQUDAzSiAlaW4lIGMoMiw5KV0pLA0KICAgICAgICAgICAgU3Vib2N1cGFkb3MgICAgICAgPSBTdWJvY19kZW1hbmRhbnRlICsgU3Vib2Nfbm9fZGVtYW5kLA0KICAgICAgICAgICAgJ0FjdGl2aWRhZCcgICAgICAgICAgICAgICAgICA9IHJvdW5kKFBFQS9Qb2JsYWNpb24sIDMpLA0KICAgICAgICAgICAgJ0VtcGxlbycgICAgICAgICAgICAgICAgICAgICA9IHJvdW5kKE9jdXBhZG9zL1BvYmxhY2lvbiwgMyksDQogICAgICAgICAgICAnRGVzb2N1cGFjacOzbicgICAgICAgICAgICAgICA9IHJvdW5kKERlc29jdXBhZG9zL1BFQSwgMyksDQogICAgICAgICAgICAnU3Vib2N1cGFjacOzbicgICAgICAgICAgICAgICA9IHJvdW5kKFN1Ym9jdXBhZG9zL1BFQSwgMykpICU+JSANCiAgc2VsZWN0KC1jKDM6MTApKSAlPiUgDQogIHBpdm90X2xvbmdlciguLCBjb2xzID0gMzo2LCBuYW1lc190byA9ICJJbmRpY2Fkb3JlcyIsIHZhbHVlc190byA9ICJWYWxvciIpICU+JSANCiAgbXV0YXRlKFZhbG9yID0gcGVyY2VudChWYWxvciwgMSkpICU+JSANCiAgcGl2b3Rfd2lkZXIoLiwgbmFtZXNfZnJvbSA9IFNleG8sIHZhbHVlc19mcm9tID0gVmFsb3IpICU+JSANCiAgbXV0YXRlKEluZGljYWRvcmVzID0gZmFjdG9yKEluZGljYWRvcmVzLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFjdGl2aWRhZCIsICJFbXBsZW8iLCAiRGVzb2N1cGFjacOzbiIsICJTdWJvY3VwYWNpw7NuIikpKSAlPiUgDQogIGFycmFuZ2UoSW5kaWNhZG9yZXMpDQpgYGANCg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fVGFzYXMgZGUgYWN0aXZpZGFkIHkgZW1wbGVvIHBvciByZWdpw7NuIHkgc2V4b19fPC9wPg0KPHAgc3R5bGU9ImNvbG9yOiNjOWM5YzkiPl9fUG9ibGFjacOzbiBkZSAxNCBhw7FvcyB5IG3DoXMuIGByIGRhdGVgX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI2N1YWRybyBkZSB0YXNhcyBiw6FzaWNhcyBwb3IgcmVnacOzbiBvcGNpw7NuIDIgZGUgdmlzdWFsaXphY2nDs24NCnRhYmxhMS41X2dyYWYxIDwtIHRhYmxhMS41ICU+JSANCiAgcGl2b3RfbG9uZ2VyKC4sIGNvbHM9Mzo0LCBuYW1lc190byA9ICJTZXhvIiwgdmFsdWVzX3RvID0gInByb3BvcmNpb24iKSAlPiUgDQogIGZpbHRlcihJbmRpY2Fkb3JlcyAlaW4lIGMoIkFjdGl2aWRhZCIsICJFbXBsZW8iKSkNCg0KZ2dwbG90KHRhYmxhMS41X2dyYWYxLCBhZXMoeCA9IEluZGljYWRvcmVzLCBwcm9wb3JjaW9uLCBmaWxsID0gU2V4bywgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gcGVyY2VudChwcm9wb3JjaW9uLCBkaWdpdHMgPSAxKSkpICsNCiAgZmFjZXRfd3JhcCggfiBSZWdpb24pICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGdlb21fdGV4dChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjkpLCB2anVzdCA9Miwgc2l6ZSA9IDMpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykgKw0KICBsYWJzKGNhcHRpb24gPSBmdWVudGUpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpKQ0KYGBgDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBBcXXDrSBoYXkgcXVlIGNhbWJpYXIgZWwgZGlyZWN0b3JpbyBlbiBxdWUgc2UgdmEgYSBndWFyZGFyIGVsIGdyw6FmaWNvLg0KI2dnc2F2ZSgiVGFzYXNiYXNpY2FzMXJlZ2lvbi5wbmciLCBzY2FsZSA9IDAuNywgZHBpID0gMzAwLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3LCBiZyA9ICIjZmZmZmZmIikNCmBgYA0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19UYXNhcyBkZSBkZXNvY3VwYWNpw7NuIHkgc3Vib2N1cGFjacOzbiBwb3IgcmVnacOzbiB5IHNleG9fXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX1BvYmxhY2nDs24gZGUgMTQgYcOxb3MgeSBtw6FzLiBgciBkYXRlYF9fPC9wPg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRhYmxhMS41X2dyYWYyIDwtIHRhYmxhMS41ICU+JSANCiAgcGl2b3RfbG9uZ2VyKC4sIGNvbHM9Mzo0LCBuYW1lc190byA9ICJTZXhvIiwgdmFsdWVzX3RvID0gInByb3BvcmNpb24iKSAlPiUgDQogIGZpbHRlcihJbmRpY2Fkb3JlcyAlaW4lIGMoIkRlc29jdXBhY2nDs24iLCAiU3Vib2N1cGFjacOzbiIpKQ0KDQpnZ3Bsb3QodGFibGExLjVfZ3JhZjIsIGFlcyh4ID0gSW5kaWNhZG9yZXMsIHByb3BvcmNpb24sIGZpbGwgPSBTZXhvLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBwZXJjZW50KHByb3BvcmNpb24sIGRpZ2l0cyA9IDEpKSkgKw0KICBmYWNldF93cmFwKCB+IFJlZ2lvbikgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgZ2VvbV90ZXh0KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuOSksIHZqdXN0ID0yLCBzaXplID0gMykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSArDQogIGxhYnMoY2FwdGlvbiA9IGZ1ZW50ZSkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCkpDQpgYGANCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIEFxdcOtIGhheSBxdWUgY2FtYmlhciBlbCBkaXJlY3RvcmlvIGVuIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZWwgZ3LDoWZpY28uDQojZ2dzYXZlKCJUYXNhc2Jhc2ljYXMycmVnaW9uLnBuZyIsIHNjYWxlID0gMC43LCBkcGkgPSAzMDAsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcsIGJnID0gIiNmZmZmZmYiKQ0KYGBgDQoNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnJtKHRhYmxhMS4xLCB0YWJsYTEuMiwgdGFibGExLjMsIHRhYmxhMS40LCB0YWJsYTEuNSwgdGFibGExLjVfZ3JhZjEsIHRhYmxhMS41X2dyYWYyKQ0KYGBgDQoNCiMjIyMgUmFtYXMgZGUgbGEgb2N1cGFjacOzbg0KPGJyPg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGExLjEzIDwtIG9yZ2FuaXplX2NhZXMoYmFzZV9pbmRpdmlkdWFsKSAlPiUgDQogIG11dGF0ZShSYW1hID0gY2Flc19lcGhfbGFiZWwpICU+JSANCiAgZmlsdGVyKEVTVEFETyA9PSAxLA0KICAgICAgICAgUFAzRV9UT1QgPiAwLCAjIEhvcmFzIHRyYWJhamFkYXMgcG9zaXRpdmFzDQogICAgICAgICBQUDNFX1RPVCAhPSA5OTksDQogICAgICAgICBQMjEgPiAwLA0KICAgICAgICAgUE9ORElJTyA+IDApICU+JSAgIyBJbmdyZXNvcyBwb3NpdGl2b3MNCiAgZ3JvdXBfYnkoUmFtYSkgJT4lIA0KICBtdXRhdGUoUFAzRV9UT1QgPSBhcy5udW1lcmljKGdzdWIoIiwiLCAjY2FtYmlvICIuIiBwb3IgImNvbWFzIiwiIGVuIGxvcyBkZWNpbWFsZXMgcGFyYSBwb2RlciBvcGVyYXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQM0VfVE9ULA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgPSBUUlVFKSkpICU+JSANCiAgc3VtbWFyaXNlKHRhc2FfZmVtaW5pemFjaW9uID0gcGVyY2VudChzdW0oUE9OREVSQVtTZXhvID09ICJNdWplcmVzIl0pL3N1bShQT05ERVJBKSwgMSksDQogICAgICAgICAgICBpbmdyZXNvX3Byb21lZGlvID0gd2VpZ2h0ZWQubWVhbihQMjEsIFBPTkRJSU8vc3VtKFBPTkRJSU8pKSwNCiAgICAgICAgICAgIGluZ3Jlc29faG9yID0gcm91bmQod2VpZ2h0ZWQubWVhbihQMjEvKFBQM0VfVE9UICogMzAgLyA3KSwgUE9ORElJTyksIDIpKSAlPiUgDQogIGFycmFuZ2UoLXRhc2FfZmVtaW5pemFjaW9uKSAlPiUgDQogIGZpbHRlcihSYW1hICVpbiUgYygiU2VydmljaW8gZG9tZXN0aWNvIiwgIkVuc2VuYW56YSIsICJTZXJ2aWNpb3Mgc29jaWFsZXMgeSBkZSBzYWx1ZCIsIA0KICAiSW5kdXN0cmlhIG1hbnVmYWN0dXJlcmEiLCAiQWN0aXZpZGFkZXMgcHJpbWFyaWFzIiwgIlRyYW5zcG9ydGUsIGFsbWFjZW5hbWllbnRvIHkgY29tdW5pY2FjaW9uZXMiLA0KICAiQ29uc3RydWNjaW9uIikpICU+JSANCiAgdHJhbnNtdXRlKCJSYW1hIGRlIGxhIG9jdXBhY2nDs24iID0gUmFtYSwNCiAgICAgICAgICAgICJUYXNhIGRlIGZlbWluaXphY2nDs24iID0gdGFzYV9mZW1pbml6YWNpb24sDQogICAgICAgICAgICAiSW5ncmVzbyBtZW5zdWFsIHByb21lZGlvIiA9IGZvcm1hdG9fcGVzb3Mocm91bmQoaW5ncmVzb19wcm9tZWRpbywgLTIpLCAwKSwNCiAgICAgICAgICAgICJJbmdyZXNvIGhvcmFyaW8iID0gZm9ybWF0b19wZXNvcyhyb3VuZChpbmdyZXNvX2hvciksIDApKQ0KYGBgDQoNCkxhIHNpZ3VpZW50ZSB0YWJsYSBwcmVzZW50YSBsb3MgcG9yY2VudGFqZXMgZGUgb2N1cGFkYXMgbXVqZXJlcyBzb2JyZSBlbCB0b3RhbCBkZSBvY3VwYWRvcyB5IG9jdXBhZGFzIHBhcmEgY2FkYSByYW1hIGRlIG9jdXBhY2nDs24uIExhIHRhc2EgZGUgZmVtaW5pemFjacOzbiBpbmRpY2EgZWwgcG9yY2VudGFqZSBkZSBtdWplcmVzIHF1ZSBoYXkgZW4gY2FkYSB1bmEgZGUgZWxsYXMgeSwgY29tbyBwdWVkZSBvYnNlcnZhcnNlLCBsYXMgbXVqZXJlcyBzZSBlbmN1ZW50cmFuIHNvYnJlcnJlcHJlc2VudGFkYXMgZW4gYXF1ZWxsb3Mgc2VjdG9yZXMgdmluY3VsYWRvcyBhbCBjdWlkYWRvIHkgbGFzIHRhcmVhcyBkZSByZXByb2R1Y2Npw7NuLCBjb21vIHNvbiBlbCBzZXJ2aWNpbyBkb23DqXN0aWNvLCBsYSBlbnNlw7FhbnphIHkgbG9zIHNlcnZpY2lvcyBzb2NpYWxlcyB5IGRlIHNhbHVkLiBQb3Igc3UgcGFydGUsIHNlY3RvcmVzIGNvbW8gbGEgY29uc3RydWNjacOzbiwgdHJhbnNwb3J0ZSB5IGNvbXVuaWNhY2lvbmVzLCBsYXMgYWN0aXZpZGFkZXMgcHJpbWFyaWFzIGUgaW5jbHVzbyBsYSBpbmR1c3RyaWEgbWFudWZhY3R1cmVyYSBzZSBlbmN1ZW50cmFuIG1hc2N1bGluaXphZGFzLg0KPGJyPjxicj4NCkVzdGUgZmVuw7NtZW5vIHNlIGNvbm9jZSBjb21vIF9fUGFyZWRlcyBkZSBDcmlzdGFsX18gbyBfX3NlZ3JlZ2FjacOzbiBob3Jpem9udGFsX18sIHkgaGFjZSByZWZlcmVuY2lhIGEgbG9zIG11cm9zIGludmlzaWJsZXMgcXVlIHNlZ21lbnRhbiBlbCBtZXJjYWRvIGRlIHRyYWJham8gZGUgYWN1ZXJkbyBhIGxvcyBlc3RlcmVvdGlwb3MgZGUgZ8OpbmVybyBhw7puIHZpZ2VudGVzLiA8YnI+PGJyPg0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19JbmRpY2Fkb3JlcyBwb3IgcmFtYXMgZGUgbGEgb2N1cGFjacOzbiAoc2VsZWNjaW9uYWRhcylfXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX09jdXBhZGFzL29zLiBUYXNhIGRlIGZlbWluaXphY2nDs24sIGluZ3Jlc28gbWVuc3VhbCBwcm9tZWRpbywgaW5ncmVzbyBob3JhcmlvLiBgciBhZ2xvX2RhdGVgX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGExLjEzICU+JSANCiAga2FibGUoYWxpZ24gPSAnbGNjYycpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwgDQogICAgICAgICAgICAgICAgI2Z1bGxfd2lkdGggPSBGLCBwb3NpdGlvbiA9ICJsZWZ0IiwNCiAgICAgICAgICAgICAgICBmaXhlZF90aGVhZCA9IFQsIGZvbnRfc2l6ZSA9IDIwKSAlPiUNCiAgZm9vdG5vdGUoZ2VuZXJhbCA9IGZ1ZW50ZSwNCiAgICAgICAgICAgZ2VuZXJhbF90aXRsZSA9ICJcbiIpICU+JSANCiAgY29sdW1uX3NwZWMoMiwgd2lkdGggPSAiNmNtIikgJT4lIA0KICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gY29sb3Jlc1sxXSkNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kcm0odGFibGExLjEzKQ0KYGBgDQoNCi0tLQ0KDQo8YnI+DQpTaSBvYnNlcnZhbW9zIGxhIGRpc3RyaWJ1Y2nDs24gZGUgaW5ncmVzb3MgZGUgbGFzIHkgbG9zIG9jdXBhZG9zIHNlZ8O6biByYW1hIGRlIG9jdXBhY2nDs24sIHZlbW9zIHF1ZSBTZXJ2aWNpbyBEb23DqXN0aWNvIG5vIHPDs2xvIGVzIGxhIHJhbWEgbcOhcyBmZW1pbml6YWRhIHNpbm8gcXVlIGFkZW3DoXMgY29uY2VudHJhIGxvcyBtZW5vcmVzIGluZ3Jlc29zLg0KPGJyPjxicj4NCg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGExLjE0IDwtIG9yZ2FuaXplX2NhZXMoYmFzZV9pbmRpdmlkdWFsKSAlPiUgDQogIG11dGF0ZShSYW1hID0gY2Flc19lcGhfbGFiZWwpICU+JSANCiAgZmlsdGVyKEVTVEFETyA9PSAxLA0KICAgICAgICAgUFAzRV9UT1QgPiAwLCAjIEhvcmFzIHRyYWJhamFkYXMgcG9zaXRpdmFzDQogICAgICAgICBQUDNFX1RPVCAhPSA5OTksDQogICAgICAgICBQMjEgPiAwLA0KICAgICAgICAgUE9ORElJTyA+IDApICU+JSAgIyBJbmdyZXNvcyBwb3NpdGl2b3MNCiAgZmlsdGVyKFJhbWEgJWluJSBjKCJTZXJ2aWNpbyBkb21lc3RpY28iLCAiRW5zZW5hbnphIiwgIlNlcnZpY2lvcyBzb2NpYWxlcyB5IGRlIHNhbHVkIiwgDQogICJJbmR1c3RyaWEgbWFudWZhY3R1cmVyYSIsICJBY3RpdmlkYWRlcyBwcmltYXJpYXMiLCAiVHJhbnNwb3J0ZSwgYWxtYWNlbmFtaWVudG8geSBjb211bmljYWNpb25lcyIsDQogICJDb25zdHJ1Y2Npb24iKSkNCmBgYA0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19EaXN0cmlidWNpw7NuIGRlbCBpbmdyZXNvIHNlZ8O6biByYW1hcyBkZSBvY3VwYWNpw7NuIChzZWxlY2Npb25hZGFzKV9fPC9wPg0KPHAgc3R5bGU9ImNvbG9yOiNjOWM5YzkiPl9fT2N1cGFkYXMvb3MuIGByIGFnbG9fZGF0ZWBfXzwvcD4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsICByZXN1bHRzPSdoaWRlJ30NCiMgVGlyYSB3YXJuaW5ncyBwb3JxdWUgYWp1c3RhbW9zIGVsIGxpbWl0ZSBzdXBlcmlvciBkZWwgZWplIHggYSBtYW5vIHkgaGF5IG9ic2VydmFjaW9uZXMgY29uIFAyMSBwb3IgZW5jaW1hIGRlICQxNTAuMDAwDQpnZ3Bsb3QodGFibGExLjE0LCBhZXMoeCA9IFAyMSwgeSA9IFJhbWEsIHdlaWdodHMgPSBQT05ESUlPLCBncm91cCA9IFJhbWEsIGFscGhhID0gUmFtYSAhPSAiU2VydmljaW8gZG9tZXN0aWNvIikpICsNCiAgZ2VvbV9kZW5zaXR5X3JpZGdlcyhzY2FsZSA9IDIsIGZpbGwgPSBjb2xvcmVzYlsyXSkgKyANCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTUwMDAwKSkgKw0KICBzY2FsZV9hbHBoYV9tYW51YWwodmFsdWVzID0gYygxLCAwLjQpLCBndWlkZSA9IEZBTFNFKSArDQogICMgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3Jlc2JbMl0pICsNCiAgbGFicyhjYXB0aW9uID0gZnVlbnRlLA0KICAgIHggPSAiSW5ncmVzbyBkZSBsYSBPY3VwYWNpb24gUHJpbmNpcGFsIChJT1ApIikgKw0KICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3Quc3VidGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTApLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnJtKHRhYmxhMS4xNCkNCmBgYA0KDQojIyBJbmdyZXNvcw0KDQotLS0NCg0KIyMjIEluZ3Jlc29zIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzfQ0KPGJyPjxicj4NCkVuIGVzdGEgc2VjY2nDs24gc2UgY29sb2NhIGVsIGZvY28gZW4gbGFzIGRpZmVyZW5jaWFzIGRlIG1vbnRvcyBkZSBpbmdyZXNvcyBxdWUgcGVyY2liZW4gbG9zIHZhcm9uZXMgeSBsYXMgbXVqZXJlcy4gRXN0b3MgaW5ncmVzb3MgcHVlZGVuIHByb3ZlbmlyIGRlIGRpdmVyc2FzIGZ1ZW50ZXMgeSBhbCBtaXNtbyB0aWVtcG8gcHVlZGVuIGRlc2FncmVnYXJzZSBzZWfDum4gY2FyYWN0ZXLDrXN0aWNhcyBhZGljaW9uYWxlcyBkZSBsYXMgcGVyc29uYXMgbyBsb3MgcHVlc3RvcyBxdWUgZGVzZW1wZcOxYW4uIEEgc3UgdmV6LCBwdWVkZW4gZGlzdGluZ3VpcnNlIGxvcyBpbmdyZXNvcyBtZW5zdWFsZXMgeSBsb3MgaW5ncmVzb3MgcG9yIGhvcmEgdHJhYmFqYWRhLg0KPGJyPjxicj4NClBhcmEgdW5hIGV4cGxvcmFjacOzbiBkZSBsb3MgaW5ncmVzb3MgaG9yYXJpb3MsIHNlIHB1ZWRlIGNvbnN1bHRhciBsYSB2ZXJzacOzbiBleHRlbmRpZGEgZGVsIGluZm9ybWUsIGRpc3BvbmlibGUgZGUgbWFuZXJhIGdyYXR1aXRhIGVuIGVzdGEgd2ViLg0KQ2FiZSBzZcOxYWxhciBxdWUsIGVuIGVsIGFuw6FsaXNpcyBkZSBpbmdyZXNvcyBob3JhcmlvcywgbGEgYnJlY2hhIGRpc21pbnV5ZSBjb25zaWRlcmFibGVtZW50ZS4gRXN0byBzZSByZWxhY2lvbmEgY29uIGxhcyBob3JhcyBkZWRpY2FkYXMgYSBsYXMgdGFyZWFzIGRlbCBob2dhciwgcXVlIGRlamEgYSBsYXMgbXVqZXJlcyBjb24gbWVub3MgaG9yYXMgcGFyYSBkZXN0aW5hciBhbCBtZXJjYWRvIGRlIHRyYWJham8uDQo8YnI+PGJyPg0KUGFyYSBkaW1lbnNpb25hciBsYXMgZGlmZXJlbmNpYXMgaGFjZW1vcyB1c28gZGVsIGNvbmNlcHRvIGRlICJicmVjaGEiLCBxdWUgZW4gZXN0ZSBjYXNvIHNlIGNhbGN1bGEgY29tbyBsYSBkaWZlcmVuY2lhIGVudHJlIGxvcyBpbmdyZXNvcyBwcm9tZWRpb3MgZGUgbG9zIHZhcm9uZXMgeSBsYXMgbXVqZXJlcywgZXhwcmVzYWRhIGVuIHTDqXJtaW5vcyBkZWwgaW5ncmVzbyBtw6FzIGFsdG8uIEVzIGRlY2lyLCBxdWUgcHVlZGUgbGVlcnNlIGNvbW8gXyJsYXMgbXVqZXJlcyBwZXJjaWJlbiBpbmdyZXNvcyBxdWUsIGVuIHByb21lZGlvLCBzb24gdW4gLi4uJSBtZW5vcmVzIHF1ZSBsb3MgZGUgbG9zIHZhcm9uZXMiLl8NCjxicj48YnI+DQpFbiB0b2RhcyBsYXMgcmVnaW9uZXMgZGVsIHBhw61zLCBsb3MgaW5ncmVzb3MgcHJvbWVkaW9zIGRlIGxhcyBtdWplcmVzIHNvbiBtZW5vcmVzIHF1ZSBsb3MgZGUgbG9zIHZhcm9uZXMuDQo8YnI+PGJyPg0KDQojIyMjIyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30NCg0KIyMjIyMjIFRvdGFsIE5hY2lvbmFsDQo8YnI+PGJyPg0KDQojIyMjIyMjIF9fQnJlY2hhcyBkZSBpbmdyZXNvcyBtZW5zdWFsZXNfXw0KPGJyPg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KIyBJbmdyZXNvIFRvdGFsIEluZGl2aWR1YWwNCiMgYXMubnVtZXJpYyBwb3JxdWUgc2FsaWEgY29tbyBOQSBwb3Igc2VyIGludGVnZXIgZGVtYXNpYWRvIGdyYW5kZSwgbWF5b3IgZGUgbG8gcXVlIHNlIHB1ZWRlIHJlcHJlc2VudGFyIGVuIFINCnRhYmxhMi4xIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihQNDdUID4gMCkgJT4lIA0KICBncm91cF9ieShTZXhvKSAlPiUgDQogIHN1bW1hcmlzZSggTWVkaWEuSVRJID0gcm91bmQod2VpZ2h0ZWQubWVhbihhcy5udW1lcmljKFA0N1QpICwgYXMubnVtZXJpYyhQT05ESUkpKSkpICU+JSANCiAgc3ByZWFkKC4sIFNleG8sIE1lZGlhLklUSSkgJT4lIA0KICBtdXRhdGUoUG9ibGFjacOzbiA9ICJQZXJjZXB0b3JlcyBkZSBpbmdyZXNvcyIsDQogICAgICAgICBJbmdyZXNvID0gIkluZ3Jlc28gVG90YWwgSW5kaXZpZHVhbCIpDQoNCiMgSW5ncmVzbyBkZSBsYSBPY3VwYWNpw7NuIFByaW5jaXBhbA0KdGFibGEyLjIgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKEVTVEFETyA9PSAxKSAlPiUgDQogIGdyb3VwX2J5KFNleG8pICU+JSANCiAgc3VtbWFyaXNlKE1lZGlhLklPUCA9IHJvdW5kKHdlaWdodGVkLm1lYW4oYXMubnVtZXJpYyhQMjEpLCBhcy5udW1lcmljKFBPTkRJSU8pKSkpICU+JSANCiAgc3ByZWFkKC4sIFNleG8sIE1lZGlhLklPUCkgJT4lIA0KICBtdXRhdGUoUG9ibGFjacOzbiA9ICJPY3VwYWRhcy9vcyIsDQogICAgICAgICBJbmdyZXNvID0gIkluZ3Jlc28gZGUgbGEgT2N1cGFjacOzbiBQcmluY2lwYWwiKQ0KDQojIEFzYWwuIHNpbiBkZXNjdWVudG8ganViaWxhdG9yaW8uIEluZ3Jlc28gZGUgbGEgT2N1cGFjacOzbiBQcmluY2lwYWwNCnRhYmxhMi4zIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSAmIENBVF9PQ1VQID09IDMgJiBQUDA3SCA9PSAyICYgUDIxPjApICU+JSANCiAgZ3JvdXBfYnkoU2V4bykgJT4lIA0KICBzdW1tYXJpc2UoTWVkaWEuSU9QID0gcm91bmQod2VpZ2h0ZWQubWVhbihhcy5udW1lcmljKFAyMSksIGFzLm51bWVyaWMoUE9ORElJTykpKSkgJT4lIA0KICBzcHJlYWQoLiwgU2V4bywgTWVkaWEuSU9QKSAlPiUgDQogIG11dGF0ZShQb2JsYWNpw7NuID0gIkFzYWxhcmlhZGFzL29zIHNpbiBkZXNjLiBqdWJpbC4iLA0KICAgICAgICAgSW5ncmVzbyA9ICJJbmdyZXNvIGRlIGxhIE9jdXBhY2nDs24gUHJpbmNpcGFsIikNCg0KIyBKdWJpbGFjaW9uZXMNCnRhYmxhMi40IDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihWMl9NID4gMCkgJT4lIA0KICBncm91cF9ieShTZXhvKSAlPiUgDQogIHN1bW1hcmlzZShNZWRpYS5KVUIgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKGFzLm51bWVyaWMoVjJfTSksIGFzLm51bWVyaWMoUE9ORElJKSkpKSAlPiUgDQogIHNwcmVhZCguLCBTZXhvLCBNZWRpYS5KVUIpICU+JSANCiAgbXV0YXRlKFBvYmxhY2nDs24gPSAiUGVyY2VwdG9yZXMgZGUganViaWxhY2nDs24iLA0KICAgICAgICAgSW5ncmVzbyA9ICJKdWJpbGFjacOzbiIpDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnRhYmxhMi41IDwtIGJpbmRfcm93cyh0YWJsYTIuMSwgdGFibGEyLjIsIHRhYmxhMi4zLCB0YWJsYTIuNCkgJT4lIA0KICBtdXRhdGUoQnJlY2hhID0gcGVyY2VudCgoKFZhcm9uZXMtTXVqZXJlcykvVmFyb25lcyksIDEpLA0KICAgICAgICAgTXVqZXJlcyA9IGZvcm1hdG9fcGVzb3Mocm91bmQoTXVqZXJlcywgLTIpLCAwKSwNCiAgICAgICAgIFZhcm9uZXMgPSBmb3JtYXRvX3Blc29zKHJvdW5kKFZhcm9uZXMsIC0yKSwgMCkpICU+JSANCiAgc2VsZWN0KFBvYmxhY2nDs24sIEluZ3Jlc28sIE11amVyZXMsIFZhcm9uZXMsIEJyZWNoYSkNCg0KaW5saW5lXzkgPC0gdGFibGEyLjUgJT4lIA0KICBmaWx0ZXIoUG9ibGFjacOzbiA9PSAiUGVyY2VwdG9yZXMgZGUgaW5ncmVzb3MiKSAlPiUgDQogIHB1bGwoQnJlY2hhKQ0KDQppbmxpbmVfMTAgPC0gdGFibGEyLjUgJT4lIA0KICBmaWx0ZXIoUG9ibGFjacOzbiA9PSAiT2N1cGFkYXMvb3MiKSAlPiUgDQogIHB1bGwoQnJlY2hhKQ0KDQppbmxpbmVfMTEgPC0gdGFibGEyLjUgJT4lIA0KICBmaWx0ZXIoUG9ibGFjacOzbiA9PSAiT2N1cGFkYXMvb3MiKSAlPiUgDQogIHB1bGwoTXVqZXJlcykNCg0KaW5saW5lXzEyIDwtIHRhYmxhMi41ICU+JSANCiAgZmlsdGVyKFBvYmxhY2nDs24gPT0gIk9jdXBhZGFzL29zIikgJT4lIA0KICBwdWxsKFZhcm9uZXMpDQoNCmlubGluZV8xMyA8LSB0YWJsYTIuNSAlPiUgDQogIGZpbHRlcihQb2JsYWNpw7NuID09ICJBc2FsYXJpYWRhcy9vcyBzaW4gZGVzYy4ganViaWwuIikgJT4lIA0KICBwdWxsKEJyZWNoYSkNCmBgYA0KDQpDb21vIHNlIHZlIGVuIGVsIHNpZ3VpZW50ZSBjdWFkcm8sIHBhcmEgZWwgY2FzbyBkZSB0b2RhcyBsYXMgcGVyc29uYXMgcGVyY2VwdG9yYXMgZGUgaW5ncmVzb3MsIGxhIGJyZWNoYSBlbnRyZSBtdWplcmVzIHkgdmFyb25lcyByZXNwZWN0byBhbCBpbmdyZXNvIHRvdGFsIGluZGl2aWR1YWwgZXMgZGUgX19gciBpbmxpbmVfOWBfXy4gRXMgZGVjaXIsIGNvbnRlbXBsYW5kbyB0b2RvcyBsb3MgaW5ncmVzb3MgcXVlIHNlIHBlcmNpYmVuLCBzZWFuIGRlIG9yaWdlbiBsYWJvcmFsIG8gbm8gbGFib3JhbCAoY29tbyBqdWJpbGFjaW9uZXMgeSBwZW5zaW9uZXMsIGN1b3RhcyBhbGltZW50YXJpYXMsIHN1YnNpZGlvcywgZXRjLiksIGxhcyBtdWplcmVzIHBlcmNpYmVuIGluZ3Jlc29zIHF1ZSwgZW4gcHJvbWVkaW8sIHNvbiB1biBgciBpbmxpbmVfOWAgbWVub3JlcyBxdWUgbG9zIGRlIGxvcyB2YXJvbmVzLg0KPGJyPjxicj4NClNpbXVsdMOhbmVhbWVudGUsIGVuIGVsIG1lcmNhZG8gZGUgdHJhYmFqbywgbGFzIG11amVyZXMgZ2FuYW4gZW4gcHJvbWVkaW8gdW4gX19gciBpbmxpbmVfMTBgX18gbWVub3MgcXVlIGxvcyB2YXJvbmVzIChfYHIgaW5saW5lXzExYF8gdnMuIF9gciBpbmxpbmVfMTJgXykuIEVzdG9zIGRhdG9zIGNvcnJlc3BvbmRlbiBhIGxhIHRvdGFsaWRhZCBkZSBvY3VwYWRhcy9vcywgY3VhbHF1aWVyYSBzZWEgc3UgY2F0ZWdvcsOtYSBvY3VwYWNpb25hbCwgY2FsaWZpY2FjacOzbiBvIGplcmFycXXDrWEsIHkgb2JzZXJ2YW5kbyBlbiBlc3RlIGNhc28gbG9zIGluZ3Jlc29zIHByb3ZlbmllbnRlcyBkZSBzdSBvY3VwYWNpw7NuIHByaW5jaXBhbC4NCjxicj48YnI+DQpTaSB0b21hbW9zIGVuIGN1ZW50YSDDum5pY2FtZW50ZSBhIGFxdWVsbGFzIHBlcnNvbmFzIHF1ZSBubyBwb3NlZW4gZGVzY3VlbnRvcyBqdWJpbGF0b3Jpb3MsIHNlIG9ic2VydmEgY8OzbW8gbGFzIG11amVyZXMgZ2FuYW4gZW4gcHJvbWVkaW8gdW4gX19gciBpbmxpbmVfMTNgX18gbWVub3MgcXVlIHN1cyBwYXJlcy4gRXMgZGVjaXIgcXVlIGxhIGJyZWNoYSBkZSBpbmdyZXNvcyBlbnRyZSBsYXMgeSBsb3MgdHJhYmFqYWRvcmVzIHNlIGFtcGzDrWEgY3VhbmRvIHZlbW9zIGEgYXF1ZWxsYXMvb3MgYXNhbGFyaWFkYXMvb3MgcXVlIHRpZW5lbiBwZW9yZXMgY29uZGljaW9uZXMgZGUgdHJhYmFqby4NCjxicj48YnI+DQpGaW5hbG1lbnRlLCBwdWVkZSBvYnNlcnZhcnNlIHF1ZSB0YW1iacOpbiBleGlzdGUgdW5hIGJyZWNoYSwgYXVucXVlIG11Y2hvIG1lbm9yLCBlbnRyZSBsYXMganViaWxhY2lvbmVzIHF1ZSBwZXJjaWJlbiBsYXMgbXVqZXJlcyB5IGxvcyB2YXJvbmVzLg0KPGJyPjxicj4NCg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fQnJlY2hhcyBkZSBpbmdyZXNvcyBtZW5zdWFsZXNfXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX1BvciBwb2JsYWNpb25lcyB5IHRpcG9zIGRlIGluZ3Jlc29zLiBgciBhZ2xvX2RhdGVgX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGEyLjUgJT4lIA0KICBzZWxlY3QoUG9ibGFjacOzbiwgSW5ncmVzbywgTXVqZXJlcywgVmFyb25lcywgQnJlY2hhKSAlPiUgDQogIGthYmxlKGFsaWduID0gJ2xsY2NjJykgJT4lDQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCANCiAgICAgICAgICAgICAgICAjZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiLA0KICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlxuIiA9IDIsICJNZWRpYSBkZWwgaW5ncmVzbyIgPSAyLCAiXG4iID0gMSksIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pICU+JSANCiAgZm9vdG5vdGUoZ2VuZXJhbCA9IGZ1ZW50ZSwNCiAgICAgICAgICAgZ2VuZXJhbF90aXRsZSA9ICJcbiIpICU+JSANCiAgY29sdW1uX3NwZWMoMiwgd2lkdGggPSAiNmNtIikgJT4lIA0KICBjb2x1bW5fc3BlYyg1LCBib2xkID0gVFJVRSwgd2lkdGggPSAiMmNtIikgJT4lIA0KICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gY29sb3Jlc1sxXSkNCg0KIyBFbiBlc3RlIGN1YWRybyBsYSBicmVjaGEgbWFudGllbmUgY29tcGFyYWJpbGlkYWQgY29uIHRyaW1lc3RyZXMgYW50ZXJpb3JlcyBwb3JxdWUgc2UgY2FsY3VsYSBzb2JyZSBsb3MgdmFsb3JlcyBzaW4gcmVkb25kZWFyDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnJtKHRhYmxhMi4xLCB0YWJsYTIuMiwgdGFibGEyLjMsIHRhYmxhMi40LCB0YWJsYTIuNSkNCmBgYA0KDQotLS0NCg0KIyMjIyMjIyBfX0JyZWNoYSBkZSBpbmdyZXNvcyBtZW5zdWFsZXMgcG9yIGNhbGlmaWNhY2nDs24gZGVsIHB1ZXN0byBkZSB0cmFiYWpvX18NCjxicj4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCiMgT2N1cGFkZXMNCnRhYmxhMi42IDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihDQUxJRklDQUNJT04gIT0gIjAiLA0KICAgICAgICAgRVNUQURPID09IDEsDQogICAgICAgICBQMjEgPj0gMCwNCiAgICAgICAgIFBPTkRJSU8gPj0gMCkgJT4lICAjIEluZ3Jlc29zIHBvc2l0aXZvcykgJT4lIA0KICBncm91cF9ieShTZXhvLCBDQUxJRklDQUNJT04pICU+JSANCiAgc3VtbWFyaXNlKElPUF9tZW5zdWFsICA9IHJvdW5kKHdlaWdodGVkLm1lYW4oUDIxLCBQT05ESUlPL3N1bShQT05ESUlPKSksIDIpKSANCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KaW5saW5lXzE0IDwtIHRhYmxhMi42ICU+JSANCiAgZmlsdGVyKFNleG8gPT0gIlZhcm9uZXMiLCANCiAgICAgICAgIENBTElGSUNBQ0lPTiA9PSAiUHJvZmVzaW9uYWxlcyIpICU+JSANCiAgcHVsbChJT1BfbWVuc3VhbCkgJT4lIA0KICByb3VuZCguLCAtMikgJT4lIA0KICBmb3JtYXRvX3Blc29zKC4sIDApDQoNCmlubGluZV8xNSA8LSB0YWJsYTIuNiAlPiUgDQogIGZpbHRlcihTZXhvID09ICJNdWplcmVzIiwNCiAgICAgICAgIENBTElGSUNBQ0lPTiA9PSAiUHJvZmVzaW9uYWxlcyIpICU+JSANCiAgcHVsbChJT1BfbWVuc3VhbCkgJT4lIA0KICByb3VuZCguLCAtMikgJT4lIA0KICBmb3JtYXRvX3Blc29zKC4sIDApDQoNCmlubGluZV8xNiA8LSB0YWJsYTIuNiAlPiUgDQogIGZpbHRlcihDQUxJRklDQUNJT04gPT0gIlByb2Zlc2lvbmFsZXMiKSAlPiUgDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBTZXhvLCB2YWx1ZXNfZnJvbSA9IElPUF9tZW5zdWFsKSAlPiUgDQogIG11dGF0ZShicmVjaGEgPSAoVmFyb25lcy1NdWplcmVzKS9WYXJvbmVzKSAlPiUgDQogIHB1bGwoYnJlY2hhKSAlPiUgDQogIHBlcmNlbnQoLiwgMSkNCiAgDQppbmxpbmVfMTcgPC0gdGFibGEyLjYgJT4lIA0KICBmaWx0ZXIoU2V4byA9PSAiVmFyb25lcyIsDQogICAgICAgICBDQUxJRklDQUNJT04gPT0gIk5vIENhbGlmaWNhZG9zIikgJT4lIA0KICBwdWxsKElPUF9tZW5zdWFsKSAlPiUgDQogIHJvdW5kKC4sIC0yKSAlPiUgDQogIGZvcm1hdG9fcGVzb3MoLiwgMCkNCg0KaW5saW5lXzE4IDwtIHRhYmxhMi42ICU+JSANCiAgZmlsdGVyKFNleG8gPT0gIk11amVyZXMiLA0KICAgICAgICAgQ0FMSUZJQ0FDSU9OID09ICJObyBDYWxpZmljYWRvcyIpICU+JQ0KICBwdWxsKElPUF9tZW5zdWFsKSAlPiUgDQogIHJvdW5kKC4sIC0yKSAlPiUgDQogIGZvcm1hdG9fcGVzb3MoLiwgMCkNCg0KaW5saW5lXzE5IDwtIHRhYmxhMi42ICU+JSANCiAgZmlsdGVyKENBTElGSUNBQ0lPTiA9PSAiTm8gQ2FsaWZpY2Fkb3MiKSAlPiUgDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBTZXhvLCB2YWx1ZXNfZnJvbSA9IElPUF9tZW5zdWFsKSAlPiUgDQogIG11dGF0ZShicmVjaGEgPSAoVmFyb25lcy1NdWplcmVzKS9WYXJvbmVzKSAlPiUgDQogIHB1bGwoYnJlY2hhKSAlPiUgDQogIHBlcmNlbnQoLiwgMSkNCmBgYA0KDQpFbCBzaWd1aWVudGUgZ3LDoWZpY28gc2XDsWFsYSBjw7NtbyBsYSBicmVjaGEgZGUgaW5ncmVzb3MgbWVuc3VhbGVzIGRlIGxhcy9vcyBvY3VwYWRhcy9vcyBzZSBtYW50aWVuZSBpbmNsdXNvIGEgaWd1YWxlcyBuaXZlbGVzIGRlIGNhbGlmaWNhY2nDs24gZGVsIHB1ZXN0byBkZSB0cmFiYWpvLiBQb3IgZWplbXBsbywgbWllbnRyYXMgcXVlIGxvcyB2YXJvbmVzIHF1ZSB0cmFiYWphbiBlbiBvY3VwYWNpb25lcyBwcm9mZXNpb25hbGVzIHRpZW5lbiB1biBpbmdyZXNvIG1lZGlvIGRlIF9gciBpbmxpbmVfMTRgXywgbGFzIG11amVyZXMgb2N1cGFkYXMgZW4gZXNlIG1pc21vIHNlZ21lbnRvIHBlcmNpYmVuIHVuIGluZ3Jlc28gbWVkaW8gZGUgX2ByIGlubGluZV8xNWBfLCBlcyBkZWNpciwgdW4gX19gciBpbmxpbmVfMTZgX18gbWVub3MgcXVlIGxvcyB2YXJvbmVzLiAgICANCkVuIGxvcyBwdWVzdG9zIG5vIGNhbGlmaWNhZG9zLCBsb3MgdmFyb25lcyBnYW5hbiBfYHIgaW5saW5lXzE3YF8gZW4gcHJvbWVkaW8sIGFsIHRpZW1wbyBxdWUgbGFzIG11amVyZXMgZ2FuYW4gYWxyZWRlZG9yIGRlIF9gciBpbmxpbmVfMThgXy4gRXN0YSBicmVjaGEgZXMgZGVsIF9fYHIgaW5saW5lXzE5YF9fLg0KPGJyPjxicj4NCg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fQnJlY2hhIGRlIGluZ3Jlc29zIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsDQogICAgICAgcG9yIHNleG8geSBjYWxpZmljYWNpw7NuIG9jdXBhY2lvbmFsX188L3A+DQo8cCBzdHlsZT0iY29sb3I6I2M5YzljOSI+X19PY3VwYWRhcy9vcy4gYHIgYWdsb19kYXRlYF9fPC9wPg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRhYmxhMi42X2dyYWYxIDwtIHRhYmxhMi42ICU+JSANCiAgcGl2b3Rfd2lkZXIoLiwgbmFtZXNfZnJvbSA9IFNleG8sIHZhbHVlc19mcm9tID0gSU9QX21lbnN1YWwpICU+JSANCiAgbXV0YXRlKGJyZWNoYSA9IHBlcmNlbnQoKFZhcm9uZXMtTXVqZXJlcykvVmFyb25lcywgMSksDQogICAgICAgICB4ID0gKFZhcm9uZXMrTXVqZXJlcykvMikNCg0KZ2dwbG90KHRhYmxhMi42X2dyYWYxLCANCiAgICAgICBhZXMoeCA9IE11amVyZXMsIHhlbmQgPSBWYXJvbmVzLCB5ID0gQ0FMSUZJQ0FDSU9OLCANCiAgICAgICAgICAgZ3JvdXAgPSBDQUxJRklDQUNJT04sIGxhYmVsID0gYnJlY2hhKSkgKw0KICBnZW9tX2R1bWJiZWxsKGNvbG9yID0gIiM4MDgwODAiLA0KICAgICAgICAgICAgICAgIHNpemVfeCA9IDMsIHNpemVfeGVuZCA9IDMsDQogICAgICAgICAgICAgICAgY29sb3VyX3ggPSBjb2xvcmVzWzFdLA0KICAgICAgICAgICAgICAgIGNvbG91cl94ZW5kID0gY29sb3Jlc1syXSkgKw0KICBnZW9tX3RleHQoZGF0YSA9IHRhYmxhMi42X2dyYWYxLCANCiAgICAgICAgICAgIGFlcyh4LCBDQUxJRklDQUNJT04sIGxhYmVsID0gYnJlY2hhKSwgbnVkZ2VfeSA9IC4yKSArDQogIGxhYnMoeCA9ICJJbmdyZXNvIE1lbnN1YWwiLA0KICAgICAgIHkgPSBOVUxMLCANCiAgICAgICBjYXB0aW9uID0gZnVlbnRlKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIEFxdcOtIGhheSBxdWUgY2FtYmlhciBlbCBkaXJlY3RvcmlvIGVuIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZWwgZ3LDoWZpY28uDQojZ2dzYXZlKCJGaWd1cmE4LnBuZyIsIHNjYWxlID0gMC43LCBkcGkgPSAzMDAsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcsIGJnID0gIiNmZmZmZmYiKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpybSh0YWJsYTIuNiwgdGFibGEyLjZfZ3JhZjEpDQpgYGANCg0KLS0tDQoNCiMjIyMjIyMgX19CcmVjaGEgZGUgaW5ncmVzb3MgbWVuc3VhbGVzIHBvciBuaXZlbCBlZHVjYXRpdm9fXyANCjxicj4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnRhYmxhMi43IDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSwgDQogICAgICAgICAhaXMubmEoTklWRUxfRURVQ0FUSVZPKSkgJT4lIA0KICBncm91cF9ieShTZXhvKSAlPiUNCiAgbXV0YXRlKEZyZWN1ZW5jaWEgPSBzdW0oUE9OREVSQSkpICU+JSANCiAgZ3JvdXBfYnkoU2V4bywgTklWRUxfRURVQ0FUSVZPKSAlPiUgDQogIHN1bW1hcmlzZShUYXNhID0gcGVyY2VudChzdW0oUE9OREVSQSkvdW5pcXVlKEZyZWN1ZW5jaWEpLCAxKSkgJT4lIA0KICBwaXZvdF93aWRlciguLCBuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBUYXNhKSAlPiUgDQogIHJlbmFtZSgiTml2ZWwgRWR1Y2F0aXZvIiA9IE5JVkVMX0VEVUNBVElWTykNCg0KdGFibGEyLjggPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKEVTVEFETyA9PSAxLCANCiAgICAgICAgICFpcy5uYShOSVZFTF9FRFVDQVRJVk8pLA0KICAgICAgICAgUDIxPj0wLA0KICAgICAgICAgUE9ORElJTz49MCkgJT4lIA0KICBncm91cF9ieShTZXhvLCBOSVZFTF9FRFVDQVRJVk8pICU+JSANCiAgc3VtbWFyaXNlKElPUF9tZW5zdWFsICA9IHJvdW5kKHdlaWdodGVkLm1lYW4oUDIxLCBQT05ESUlPL3N1bShQT05ESUlPKSksIDIpKSANCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KaW5saW5lXzIwIDwtIHRhYmxhMi44ICU+JSANCiAgZmlsdGVyKE5JVkVMX0VEVUNBVElWTyA9PSAiU3VwZXJpb3IiKSAlPiUgDQogIHBpdm90X3dpZGVyKC4sIG5hbWVzX2Zyb20gPSBTZXhvLCB2YWx1ZXNfZnJvbSA9IElPUF9tZW5zdWFsKSAlPiUgDQogIG11dGF0ZShicmVjaGEgPSAoVmFyb25lcy1NdWplcmVzKS9WYXJvbmVzKSAlPiUgDQogIHB1bGwoYnJlY2hhKSAlPiUgDQogIHBlcmNlbnQoLiwgMSkNCg0KaW5saW5lXzIxIDwtIHRhYmxhMi44ICU+JSANCiAgZmlsdGVyKE5JVkVMX0VEVUNBVElWTyA9PSAiUHJpbWFyaWEiKSAlPiUgDQogIHBpdm90X3dpZGVyKC4sIG5hbWVzX2Zyb20gPSBTZXhvLCB2YWx1ZXNfZnJvbSA9IElPUF9tZW5zdWFsKSAlPiUgDQogIG11dGF0ZShicmVjaGEgPSAoVmFyb25lcy1NdWplcmVzKS9WYXJvbmVzKSAlPiUgDQogIHB1bGwoYnJlY2hhKSAlPiUgDQogIHBlcmNlbnQoLiwgMSkNCmBgYA0KDQpDb21vIHB1ZWRlIG9ic2VydmFyc2UgZW4gZWwgY3VhZHJvIHNpZ3VpZW50ZSwgZWwgcG9yY2VudGFqZSBkZSBwZXJzb25hcyBxdWUgY3VlbnRhbiBjb24gdW4gbml2ZWwgZWR1Y2F0aXZvIHN1cGVyaW9yIGVzIG5vdGFibGVtZW50ZSBtYXlvciBlbnRyZSBsYXMgb2N1cGFkYXMgbXVqZXJlcywgZW4gY29tcGFyYWNpw7NuIGEgbG9zIG9jdXBhZG9zIHZhcm9uZXMuDQo8YnI+PGJyPg0KU2luIGVtYmFyZ28sIGEgaWd1YWwgbml2ZWwgZWR1Y2F0aXZvLCBsb3MgaW5ncmVzb3MgbGFib3JhbGVzIGRlIGxhcyBtdWplcmVzIHRyYWJhamFkb3JhcyBzb24gaW5mZXJpb3JlcyBhIGxvcyBkZSBsb3MgdmFyb25lcy4gRXN0YSBkaWZlcmVuY2lhIGRlIGluZ3Jlc29zIGVzIGRlbCBfX2ByIGlubGluZV8yMGBfXyBwYXJhIGxhcyBkZSBuaXZlbCB1bml2ZXJzaXRhcmlvL3N1cGVyaW9yLCB5IGRlbCBfX2ByIGlubGluZV8yMWBfXyBwYXJhIGxhcyBxdWUgY3VlbnRhbiBjb24gbml2ZWwgcHJpbWFyaW8uDQo8YnI+PGJyPg0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19OaXZlbCBlZHVjYXRpdm8gZGUgbXVqZXJlcyB5IHZhcm9uZXNfXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX1BvcmNlbnRhamUgcG9yIGNvbHVtbmFzLiBPY3VwYWRhcy9vcy4gYHIgYWdsb19kYXRlYF9fPC9wPg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRhYmxhMi43ICU+JSANCiAgbXV0YXRlKE11amVyZXMgPSBjb2xvcl90aWxlKCIjZjdjZmQzIiwgY29sb3Jlc1sxXSkoKE11amVyZXMpKSwNCiAgICAgICAgIFZhcm9uZXMgPSBjb2xvcl90aWxlKCIjRURFREVEIiwgY29sb3Jlc1syXSkoKFZhcm9uZXMpKSkgJT4lIA0KICBzZWxlY3QoJ05pdmVsIEVkdWNhdGl2bycsIE11amVyZXMsIFZhcm9uZXMpICU+JSANCiAga2FibGUoZXNjYXBlID0gRkFMU0UsIGRpZ2l0cyA9IDEsIGFsaWduID0gJ2xjYycpICU+JSANCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIA0KICAgICAgICAgICAgICAgICNmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIsDQogICAgICAgICAgICAgICAgZml4ZWRfdGhlYWQgPSBULCBmb250X3NpemUgPSAyMCkgJT4lIA0KICBmb290bm90ZShnZW5lcmFsID0gZnVlbnRlLA0KICAgICAgICAgICBnZW5lcmFsX3RpdGxlID0gIlxuIikgJT4lIA0KICBjb2x1bW5fc3BlYygxLCB3aWR0aCA9ICI3Y20iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDIsIGNvbG9yID0gImJsYWNrIiwgd2lkdGggPSAiNGNtIikgJT4lIA0KICBjb2x1bW5fc3BlYygzLCBjb2xvciA9ICJibGFjayIsIHdpZHRoID0gIjRjbSIpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnRhYmxhMi44X2dyYWYxIDwtIHRhYmxhMi44ICU+JSANCiAgcGl2b3Rfd2lkZXIoLiwgbmFtZXNfZnJvbSA9IFNleG8sIHZhbHVlc19mcm9tID0gSU9QX21lbnN1YWwpICU+JQ0KICBtdXRhdGUoYnJlY2hhID0gcGVyY2VudCgoVmFyb25lcy1NdWplcmVzKS9WYXJvbmVzLCAxKSwNCiAgICAgICAgIHggPSAoVmFyb25lcytNdWplcmVzKS8yKQ0KYGBgDQoNCjxicj48YnI+DQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19CcmVjaGEgZGUgaW5ncmVzb3MgZGUgbGEgb2N1cGFjacOzbiBwcmluY2lwYWwNCiAgICAgICBwb3Igc2V4byB5IG5pdmVsIGVkdWNhdGl2b19fPC9wPg0KPHAgc3R5bGU9ImNvbG9yOiNjOWM5YzkiPl9fT2N1cGFkYXMvb3MuIGByIGFnbG9fZGF0ZWBfXzwvcD4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpnZ3Bsb3QodGFibGEyLjhfZ3JhZjEsIA0KICAgICAgIGFlcyh4ID0gTXVqZXJlcywgeGVuZCA9IFZhcm9uZXMsIHkgPSBOSVZFTF9FRFVDQVRJVk8sIA0KICAgICAgICAgICBncm91cCA9IE5JVkVMX0VEVUNBVElWTywgbGFiZWwgPSBicmVjaGEpKSArDQogIGdlb21fZHVtYmJlbGwoY29sb3IgPSAiIzgwODA4MCIsDQogICAgICAgICAgICAgICAgc2l6ZV94ID0gMywgc2l6ZV94ZW5kID0gMywNCiAgICAgICAgICAgICAgICBjb2xvdXJfeCA9IGNvbG9yZXNbMV0sDQogICAgICAgICAgICAgICAgY29sb3VyX3hlbmQgPSBjb2xvcmVzWzJdKSArDQogIGdlb21fdGV4dChkYXRhID0gdGFibGEyLjhfZ3JhZjEsIA0KICAgICAgICAgICAgYWVzKHgsIE5JVkVMX0VEVUNBVElWTywgbGFiZWwgPSBicmVjaGEpLCBudWRnZV95ID0gLjIpICsNCiAgbGFicyh4ID0gIkluZ3Jlc28gTWVuc3VhbCIsDQogICAgICAgeSA9IE5VTEwsIA0KICAgICAgIGNhcHRpb24gPSBmdWVudGUpKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gY29sb3JlcykrDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIEFxdcOtIGhheSBxdWUgY2FtYmlhciBlbCBkaXJlY3RvcmlvIGVuIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZWwgZ3LDoWZpY28uDQojZ2dzYXZlKCJGaWd1cmExMC5wbmciLCBzY2FsZSA9IDAuNywgZHBpID0gMzAwLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3LCBiZyA9ICIjZmZmZmZmIikNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kcm0odGFibGEyLjcsIHRhYmxhMi44LCB0YWJsYTIuOF9ncmFmMSkNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KI1RhYmxhIHBhcmEgaW5ncmVzb3MgbWVuc3VhbGVzIHBvciByZWdpw7NuICBwYXNvIDENCg0KIyBJbmdyZXNvIFRvdGFsIEluZGl2aWR1YWwNCnRhYmxhMi45IDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihQNDdUID4gMCkgJT4lIA0KICBncm91cF9ieShTZXhvLCBSZWdpb24pICU+JSANCiAgc3VtbWFyaXNlKCBNZWRpYS5JVEkgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKGFzLm51bWVyaWMoUDQ3VCkgLCBhcy5udW1lcmljKFBPTkRJSSkpKSkgJT4lIA0KICBzcHJlYWQoLiwgU2V4bywgTWVkaWEuSVRJKSAlPiUgDQogIG11dGF0ZShQb2JsYWNpw7NuID0gIlBlcmNlcHRvcmVzIGRlIGluZ3Jlc29zIiwNCiAgICAgICAgIEluZ3Jlc28gPSAiSW5ncmVzbyBUb3RhbCBJbmRpdmlkdWFsIikNCg0KIyBJbmdyZXNvIGRlIGxhIE9jdXBhY2nDs24gUHJpbmNpcGFsDQp0YWJsYTIuMTAgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKEVTVEFETyA9PSAxKSAlPiUgDQogIGdyb3VwX2J5KFNleG8sIFJlZ2lvbikgJT4lIA0KICBzdW1tYXJpc2UoTWVkaWEuSU9QID0gcm91bmQod2VpZ2h0ZWQubWVhbihhcy5udW1lcmljKFAyMSksIGFzLm51bWVyaWMoUE9ORElJTykpKSkgJT4lIA0KICBzcHJlYWQoLiwgU2V4bywgTWVkaWEuSU9QKSAlPiUgDQogIG11dGF0ZShQb2JsYWNpw7NuID0gIk9jdXBhZGFzL29zIiwNCiAgICAgICAgIEluZ3Jlc28gPSAiSW5ncmVzbyBkZSBsYSBPY3VwYWNpw7NuIFByaW5jaXBhbCIpDQoNCiMgQXNhbC4gc2luIGRlc2N1ZW50byBqdWJpbGF0b3Jpby4gSW5ncmVzbyBkZSBsYSBPY3VwYWNpw7NuIFByaW5jaXBhbA0KdGFibGEyLjExIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSAmIENBVF9PQ1VQID09IDMgJiBQUDA3SCA9PSAyICYgUDIxPjApICU+JSANCiAgZ3JvdXBfYnkoU2V4bywgUmVnaW9uKSAlPiUgDQogIHN1bW1hcmlzZShNZWRpYS5JT1AgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKGFzLm51bWVyaWMoUDIxKSwgYXMubnVtZXJpYyhQT05ESUlPKSkpKSAlPiUgDQogIHNwcmVhZCguLCBTZXhvLCBNZWRpYS5JT1ApICU+JSANCiAgbXV0YXRlKFBvYmxhY2nDs24gPSAiQXNhbGFyaWFkYXMvb3Mgc2luIGRlc2MuIGp1YmlsLiIsDQogICAgICAgICBJbmdyZXNvID0gIkluZ3Jlc28gZGUgbGEgT2N1cGFjacOzbiBQcmluY2lwYWwiKQ0KDQojIEp1YmlsYWNpb25lcw0KdGFibGEyLjEyIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihWMl9NID4gMCkgJT4lIA0KICBncm91cF9ieShTZXhvLCBSZWdpb24pICU+JSANCiAgc3VtbWFyaXNlKE1lZGlhLkpVQiA9IHJvdW5kKHdlaWdodGVkLm1lYW4oYXMubnVtZXJpYyhWMl9NKSwgYXMubnVtZXJpYyhQT05ESUkpKSkpICU+JSANCiAgc3ByZWFkKC4sIFNleG8sIE1lZGlhLkpVQikgJT4lIA0KICBtdXRhdGUoUG9ibGFjacOzbiA9ICJQZXJjZXB0b3JlcyBkZSBqdWJpbGFjacOzbiIsDQogICAgICAgICBJbmdyZXNvID0gIkp1YmlsYWNpw7NuIikNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KDQojVGFibGEgcGFyYSBpbmdyZXNvcyBtZW5zdWFsZXMgcG9yIHJlZ2nDs24gcGFzbyAyDQoNCnRhYmxhMi4xMyA8LSBiaW5kX3Jvd3ModGFibGEyLjksIHRhYmxhMi4xMCwgdGFibGEyLjExLCB0YWJsYTIuMTIpICU+JSANCiAgbXV0YXRlKEJyZWNoYSA9IHBlcmNlbnQoKChWYXJvbmVzLU11amVyZXMpL1Zhcm9uZXMpLCAxKSwNCiAgICAgICAgIE11amVyZXMgPSBmb3JtYXRvX3Blc29zKHJvdW5kKE11amVyZXMsIC0yKSwgMCksDQogICAgICAgICBWYXJvbmVzID0gZm9ybWF0b19wZXNvcyhyb3VuZChWYXJvbmVzLCAtMiksIDApKSAlPiUgDQogIHNlbGVjdChSZWdpb24sIFBvYmxhY2nDs24sIEluZ3Jlc28sIE11amVyZXMsIFZhcm9uZXMsIEJyZWNoYSkNCg0KdGFibGEyLjEzbSA8LSB0YWJsYTIuMTMgJT4lIA0KICBzZWxlY3QoYygxOjQpKSAlPiUgDQogIHNwcmVhZCguLCBSZWdpb24sIE11amVyZXMpDQoNCnRhYmxhMi4xM3YgPC0gdGFibGEyLjEzICU+JSANCiAgc2VsZWN0KGMoMTozLCA1KSkgJT4lIA0KICBzcHJlYWQoLiwgUmVnaW9uLCBWYXJvbmVzKQ0KDQp0YWJsYTIuMTNiIDwtIHRhYmxhMi4xMyAlPiUgDQogIHNlbGVjdChjKDE6MywgNikpICU+JSANCiAgc3ByZWFkKC4sIFJlZ2lvbiwgQnJlY2hhKQ0KDQp0YWJsYTIuMTQgPC0gbGVmdF9qb2luKHRhYmxhMi4xM20sIHRhYmxhMi4xM3YsIGJ5ID0gYygiUG9ibGFjacOzbiIsICJJbmdyZXNvIikpICU+JSANCiAgc2VsZWN0KFBvYmxhY2nDs24sIEluZ3Jlc28sIGBNdWplcmVzYCA9IGBDdXlvLnhgLCBgVmFyb25lc2AgPSBgQ3V5by55YCwNCiAgICAgICAgICAgICAgICAgICAgIGAgTXVqZXJlc2AgPSBgR3JhbiBCdWVub3MgQWlyZXMueGAsIGAgVmFyb25lc2AgPSBgR3JhbiBCdWVub3MgQWlyZXMueWAsDQogICAgICAgICAgICAgICAgICAgIGAgIE11amVyZXNgID0gYE5FQS54YCwgYCAgVmFyb25lc2AgPSBgTkVBLnlgLA0KICAgICAgICAgICAgICAgICAgIGAgICBNdWplcmVzYCA9IGBOT0EueGAsIGAgICBWYXJvbmVzYCA9IGBOT0EueWAsDQogICAgICAgICAgICAgICAgICBgICAgIE11amVyZXNgID0gYFBhbXBlYW5hLnhgLCBgICAgIFZhcm9uZXNgID0gYFBhbXBlYW5hLnlgLA0KICAgICAgICAgICAgICAgICBgICAgICBNdWplcmVzYCA9IGBQYXRhZ29uaWEueGAsIGAgICAgIFZhcm9uZXNgID0gYFBhdGFnb25pYS55YCkgJT4lIA0KICBsZWZ0X2pvaW4oLiwgdGFibGEyLjEzYiwgYnkgPSBjKCJQb2JsYWNpw7NuIiwgIkluZ3Jlc28iKSkgJT4lIA0KICBtdXRhdGUoYEJyZWNoYWAgPSBgQ3V5b2AsDQogICAgICAgICBgIEJyZWNoYWAgPSBgR3JhbiBCdWVub3MgQWlyZXNgLA0KICAgICAgICAgYCAgQnJlY2hhYCA9IGBORUFgLA0KICAgICAgICAgYCAgIEJyZWNoYWAgPSBgTk9BYCwNCiAgICAgICAgIGAgICAgQnJlY2hhYCA9IGBQYW1wZWFuYWAsDQogICAgICAgICBgICAgICBCcmVjaGFgID0gYFBhdGFnb25pYWApICU+JSANCiAgc2VsZWN0KFBvYmxhY2nDs24sIEluZ3Jlc28sDQogICAgICAgICBgTXVqZXJlc2AsIGBWYXJvbmVzYCwgYEJyZWNoYWAsDQogICAgICAgICBgIE11amVyZXNgLCBgIFZhcm9uZXNgLCBgIEJyZWNoYWAsDQogICAgICAgICBgICBNdWplcmVzYCwgYCAgVmFyb25lc2AsIGAgIEJyZWNoYWAsDQogICAgICAgICBgICAgTXVqZXJlc2AsIGAgICBWYXJvbmVzYCwgYCAgIEJyZWNoYWAsDQogICAgICAgICBgICAgIE11amVyZXNgLCBgICAgIFZhcm9uZXNgLCBgICAgIEJyZWNoYWAsDQogICAgICAgICBgICAgICBNdWplcmVzYCwgYCAgICAgVmFyb25lc2AsIGAgICAgIEJyZWNoYWApDQoNCmBgYA0KDQojIyMjIyMgQ3V5bw0KPGJyPjxicj4NCg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fSW5ncmVzb3MgbWVuc3VhbGVzIHByb21lZGlvIHkgYnJlY2hhX188L3A+DQo8cCBzdHlsZT0iY29sb3I6I2M5YzljOSI+X19Qb3IgcG9ibGFjaW9uZXMgeSB0aXBvcyBkZSBpbmdyZXNvcy4gQ3V5by4gYHIgZGF0ZWBfXzwvcD4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0YWJsYTIuMTQgJT4lIA0KICBzZWxlY3QoMTo1KSAlPiUgDQogIGthYmxlKGFsaWduID0gJ2xsY2NjJykgJT4lDQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCANCiAgICAgICAgICAgICAgICAjZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiLA0KICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlxuIiA9IDIsICJNZWRpYSBkZWwgaW5ncmVzbyIgPSAyLCAiXG4iID0gMSksIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pICU+JSANCiAgZm9vdG5vdGUoZ2VuZXJhbCA9IGZ1ZW50ZSwNCiAgICAgICAgICAgZ2VuZXJhbF90aXRsZSA9ICJcbiIpICU+JSANCiAgY29sdW1uX3NwZWMoMSwgd2lkdGggPSAiN2NtIikgJT4lDQogIGNvbHVtbl9zcGVjKDIsIHdpZHRoID0gIjdjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoMywgd2lkdGggPSAiM2NtIikgJT4lDQogIGNvbHVtbl9zcGVjKDQsIHdpZHRoID0gIjNjbSIpICU+JQ0KICBjb2x1bW5fc3BlYyg1LCBib2xkID0gVFJVRSwgd2lkdGggPSAiMmNtIikgJT4lDQogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKQ0KYGBgDQoNCg0KIyMjIyMjIEdCQQ0KPGJyPjxicj4NCg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fSW5ncmVzb3MgbWVuc3VhbGVzIHByb21lZGlvIHkgYnJlY2hhX188L3A+DQo8cCBzdHlsZT0iY29sb3I6I2M5YzljOSI+X19Qb3IgcG9ibGFjaW9uZXMgeSB0aXBvcyBkZSBpbmdyZXNvcy4gR0JBLiBgciBkYXRlYF9fPC9wPg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRhYmxhMi4xNCAlPiUgDQogIHNlbGVjdChjKDEsMiw2OjgpKSAlPiUgDQogIGthYmxlKGFsaWduID0gJ2xsY2NjJykgJT4lDQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCANCiAgICAgICAgICAgICAgICAjZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiLA0KICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlxuIiA9IDIsICJNZWRpYSBkZWwgaW5ncmVzbyIgPSAyLCAiXG4iID0gMSksIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pICU+JSANCiAgZm9vdG5vdGUoZ2VuZXJhbCA9IGZ1ZW50ZSwNCiAgICAgICAgICAgZ2VuZXJhbF90aXRsZSA9ICJcbiIpICU+JSANCiAgY29sdW1uX3NwZWMoMSwgd2lkdGggPSAiN2NtIikgJT4lDQogIGNvbHVtbl9zcGVjKDIsIHdpZHRoID0gIjdjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoMywgd2lkdGggPSAiM2NtIikgJT4lDQogIGNvbHVtbl9zcGVjKDQsIHdpZHRoID0gIjNjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoNSwgYm9sZCA9IFRSVUUsIHdpZHRoID0gIjJjbSIpICU+JQ0KICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gY29sb3Jlc1sxXSkNCmBgYA0KDQojIyMjIyMgTkVBDQo8YnI+PGJyPg0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19JbmdyZXNvcyBtZW5zdWFsZXMgcHJvbWVkaW8geSBicmVjaGFfXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX1BvciBwb2JsYWNpb25lcyB5IHRpcG9zIGRlIGluZ3Jlc29zLiBORUEuIGByIGRhdGVgX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGEyLjE0ICU+JSANCiAgc2VsZWN0KGMoMSwyLDk6MTEpKSAlPiUgDQogIGthYmxlKGFsaWduID0gJ2xsY2NjJykgJT4lDQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCANCiAgICAgICAgICAgICAgICAjZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiLA0KICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlxuIiA9IDIsICJNZWRpYSBkZWwgaW5ncmVzbyIgPSAyLCAiXG4iID0gMSksIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pICU+JSANCiAgZm9vdG5vdGUoZ2VuZXJhbCA9IGZ1ZW50ZSwNCiAgICAgICAgICAgZ2VuZXJhbF90aXRsZSA9ICJcbiIpICU+JSANCiAgY29sdW1uX3NwZWMoMSwgd2lkdGggPSAiN2NtIikgJT4lDQogIGNvbHVtbl9zcGVjKDIsIHdpZHRoID0gIjdjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoMywgd2lkdGggPSAiM2NtIikgJT4lDQogIGNvbHVtbl9zcGVjKDQsIHdpZHRoID0gIjNjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoNSwgYm9sZCA9IFRSVUUsIHdpZHRoID0gIjJjbSIpICU+JQ0KICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gY29sb3Jlc1sxXSkNCmBgYA0KDQojIyMjIyMgTk9BDQo8YnI+PGJyPg0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19JbmdyZXNvcyBtZW5zdWFsZXMgcHJvbWVkaW8geSBicmVjaGFfXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX1BvciBwb2JsYWNpb25lcyB5IHRpcG9zIGRlIGluZ3Jlc29zLiBOT0EuIGByIGRhdGVgX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGEyLjE0ICU+JSANCiAgc2VsZWN0KGMoMSwyLDEyOjE0KSkgJT4lIA0KICBrYWJsZShhbGlnbiA9ICdsbGNjYycpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwgDQogICAgICAgICAgICAgICAgI2Z1bGxfd2lkdGggPSBGLCBwb3NpdGlvbiA9ICJsZWZ0IiwNCiAgICAgICAgICAgICAgICBmaXhlZF90aGVhZCA9IFQsIGZvbnRfc2l6ZSA9IDIwKSAlPiUNCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJcbiIgPSAyLCAiTWVkaWEgZGVsIGluZ3Jlc28iID0gMiwgIlxuIiA9IDEpLCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKSAlPiUgDQogIGZvb3Rub3RlKGdlbmVyYWwgPSBmdWVudGUsDQogICAgICAgICAgIGdlbmVyYWxfdGl0bGUgPSAiXG4iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDEsIHdpZHRoID0gIjdjbSIpICU+JQ0KICBjb2x1bW5fc3BlYygyLCB3aWR0aCA9ICI3Y20iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDMsIHdpZHRoID0gIjNjbSIpICU+JQ0KICBjb2x1bW5fc3BlYyg0LCB3aWR0aCA9ICIzY20iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDUsIGJvbGQgPSBUUlVFLCB3aWR0aCA9ICIyY20iKSAlPiUNCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pDQpgYGANCg0KIyMjIyMjIFBhbXBlYW5hDQo8YnI+PGJyPg0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19JbmdyZXNvcyBtZW5zdWFsZXMgcHJvbWVkaW8geSBicmVjaGFfXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX1BvciBwb2JsYWNpb25lcyB5IHRpcG9zIGRlIGluZ3Jlc29zLiBQYW1wZWFuYS4gYHIgZGF0ZWBfXzwvcD4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0YWJsYTIuMTQgJT4lDQogIHNlbGVjdChjKDEsMiwxNToxNykpICU+JSANCiAga2FibGUoYWxpZ24gPSAnbGxjY2MnKSAlPiUNCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIA0KICAgICAgICAgICAgICAgICNmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIsDQogICAgICAgICAgICAgICAgZml4ZWRfdGhlYWQgPSBULCBmb250X3NpemUgPSAyMCkgJT4lDQogIGFkZF9oZWFkZXJfYWJvdmUoYygiXG4iID0gMiwgIk1lZGlhIGRlbCBpbmdyZXNvIiA9IDIsICJcbiIgPSAxKSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gY29sb3Jlc1sxXSkgJT4lIA0KICBmb290bm90ZShnZW5lcmFsID0gZnVlbnRlLA0KICAgICAgICAgICBnZW5lcmFsX3RpdGxlID0gIlxuIikgJT4lIA0KICBjb2x1bW5fc3BlYygxLCB3aWR0aCA9ICI3Y20iKSAlPiUNCiAgY29sdW1uX3NwZWMoMiwgd2lkdGggPSAiN2NtIikgJT4lIA0KICBjb2x1bW5fc3BlYygzLCB3aWR0aCA9ICIzY20iKSAlPiUNCiAgY29sdW1uX3NwZWMoNCwgd2lkdGggPSAiM2NtIikgJT4lIA0KICBjb2x1bW5fc3BlYyg1LCBib2xkID0gVFJVRSwgd2lkdGggPSAiMmNtIikgJT4lDQogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKQ0KYGBgDQoNCiMjIyMjIyBQYXRhZ29uaWENCjxicj48YnI+DQoNCjxwIHN0eWxlPSJjb2xvcjojRTU2MTZFIj5fX0luZ3Jlc29zIG1lbnN1YWxlcyBwcm9tZWRpbyB5IGJyZWNoYV9fPC9wPg0KPHAgc3R5bGU9ImNvbG9yOiNjOWM5YzkiPl9fUG9yIHBvYmxhY2lvbmVzIHkgdGlwb3MgZGUgaW5ncmVzb3MuIFBhdGFnb25pYS4gYHIgZGF0ZWBfXzwvcD4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0YWJsYTIuMTQgJT4lIA0KICBzZWxlY3QoYygxLDIsMTg6MjApKSAlPiUgDQogIGthYmxlKGFsaWduID0gJ2xsY2NjJykgJT4lDQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCANCiAgICAgICAgICAgICAgICAjZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiLA0KICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlxuIiA9IDIsICJNZWRpYSBkZWwgaW5ncmVzbyIgPSAyLCAiXG4iID0gMSksIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pICU+JSANCiAgZm9vdG5vdGUoZ2VuZXJhbCA9IGZ1ZW50ZSwNCiAgICAgICAgICAgZ2VuZXJhbF90aXRsZSA9ICJcbiIpICU+JSANCiAgY29sdW1uX3NwZWMoMSwgd2lkdGggPSAiN2NtIikgJT4lDQogIGNvbHVtbl9zcGVjKDIsIHdpZHRoID0gIjdjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoMywgd2lkdGggPSAiM2NtIikgJT4lDQogIGNvbHVtbl9zcGVjKDQsIHdpZHRoID0gIjNjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoNSwgYm9sZCA9IFRSVUUsIHdpZHRoID0gIjJjbSIpICU+JQ0KICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gY29sb3Jlc1sxXSkNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kcm0odGFibGEyLjksIHRhYmxhMi4xMCwgdGFibGEyLjExLCB0YWJsYTIuMTIsIHRhYmxhMi4xMywgdGFibGEyLjEzYiwgdGFibGEyLjEzbSwgdGFibGEyLjEzdiwgdGFibGEyLjE0KQ0KYGBgDQoNCiMjIEhvcmFzIHRyYWJhamFkYXMNCg0KLS0tDQoNCiMjIyBIb3JhcyB0cmFiYWphZGFzDQo8YnI+PGJyPg0KDQpMYSBpZGVhIGRlIGxhICJicmVjaGEiIHRhbWJpw6luIHB1ZWRlIGFwbGljYXJzZSBwYXJhIGNvbXBhcmFyIGxhcyBob3JhcyBxdWUgdHJhYmFqYW4gZW4gcHJvbWVkaW8gbXVqZXJlcyB5IHZhcm9uZXMgZW4gc3Ugb2N1cGFjacOzbiBwcmluY2lwYWwgZW4gZWwgbWVyY2FkbyBkZSB0cmFiYWpvLCBkZSBmb3JtYSByZW11bmVyYWRhLiBEZSBhcXXDrSBzZSBkZXNwcmVuZGUgcXVlLCBlbiBwcm9tZWRpbywgbGFzIG11amVyZXMgdHJhYmFqYW4gbWVub3MgaG9yYXMgcXVlIGxvcyB2YXJvbmVzLCB5IGVzdG8gZXhwbGljYSB1bmEgcGFydGUgaW1wb3J0YW50ZSAoYXVucXVlIG5vIHRvZGEpIGRlIGxhIGJyZWNoYSBkZSBpbmdyZXNvcyBtZW5zdWFsZXMuDQo8YnI+PGJyPg0KQ2FiZSBjdWVzdGlvbmFyc2UgZW50b25jZXMgcmVzcGVjdG8gYWwgcG9yIHF1w6kgZGUgbGEgZGlmZXJlbmNpYSBkZSBob3JhcyB0cmFiYWphZGFzIHBvciBtdWplcmVzIHkgcG9yIHZhcm9uZXMuIMK/RXhpc3RlIHVuYSBmYWx0YSBkZSB2b2x1bnRhZCBkZSBsYXMgbXVqZXJlcyBwYXJhIHRyYWJhamFyPyDCv1NvbiBtw6FzICJ2YWdhcyI/IMK/TyBlbiByZWFsaWRhZCBleGlzdGUgb3RybyBtb3Rpdm8gcG9yIGVsIGN1YWwgbGFzIG11amVyZXMgZGViZW4gcmVsZWdhciBzdXMgdHJhYmFqb3MsIGRlbCBjdWFsIGxvcyB2YXJvbmVzIGVzdMOhbiBleGVudG9zPyBDb21vIHZlcmVtb3MgbcOhcyBhZGVsYW50ZSwgbG9zIGRhdG9zIHN1Z2llcmVuIHVuYSBlc3RyZWNoYSByZWxhY2nDs24gY29uIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbGFzIHRhcmVhcyBkb23DqXN0aWNhcyBoYWNpYSBlbCBpbnRlcmlvciBkZSBsb3MgaG9nYXJlcy4NCjxicj48YnI+DQoNCiMjIyMgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHN9DQoNCiMjIyMjIFRvdGFsIG5hY2lvbmFsDQo8YnI+DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojIE9jdXBhZGVzDQp0YWJsYTMuMSA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoRVNUQURPID09IDEsDQogICAgICAgICBQUDNFX1RPVCA+IDAsICMgSG9yYXMgdHJhYmFqYWRhcyBwb3NpdGl2YXMNCiAgICAgICAgIFBQM0VfVE9UICE9IDk5OSkgJT4lIA0KICBncm91cF9ieShTZXhvKSAlPiUgDQogICAgbXV0YXRlKFBQM0VfVE9UID0gYXMubnVtZXJpYyhnc3ViKCIsIiwgI2NhbWJpbyAiLiIgcG9yICJjb21hcyIsIiBlbiBsb3MgZGVjaW1hbGVzIHBhcmEgcG9kZXIgb3BlcmFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDNFX1RPVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkID0gVFJVRSkpKSAlPiUgDQogIHN1bW1hcmlzZShIb3JhcyA9IHdlaWdodGVkLm1lYW4oUFAzRV9UT1QsIFBPTkRFUkEpKSAlPiUgDQogIHBpdm90X3dpZGVyKC4sIG5hbWVzX2Zyb20gPSBTZXhvLCB2YWx1ZXNfZnJvbSA9IEhvcmFzKSAlPiUgDQogIG11dGF0ZShQb2JsYWNpw7NuID0gIk9jdXBhZGFzL29zIikNCg0KIyBBc2FsYXJpYWRlcw0KdGFibGEzLjIgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKEVTVEFETyA9PSAxLA0KICAgICAgICAgQ0FUX09DVVAgPT0gMywNCiAgICAgICAgIFBQM0VfVE9UID4gMCwgIyBIb3JhcyB0cmFiYWphZGFzIHBvc2l0aXZhcw0KICAgICAgICAgUFAzRV9UT1QgIT0gOTk5KSAlPiUgDQogIGdyb3VwX2J5KFNleG8pICU+JSANCiAgICBtdXRhdGUoUFAzRV9UT1QgPSBhcy5udW1lcmljKGdzdWIoIiwiLCAjY2FtYmlvICIuIiBwb3IgImNvbWFzIiwiIGVuIGxvcyBkZWNpbWFsZXMgcGFyYSBwb2RlciBvcGVyYXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQM0VfVE9ULA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgPSBUUlVFKSkpICU+JSANCiAgc3VtbWFyaXNlKEhvcmFzID0gd2VpZ2h0ZWQubWVhbihQUDNFX1RPVCwgUE9OREVSQSkpICU+JSANCiAgcGl2b3Rfd2lkZXIoLiwgbmFtZXNfZnJvbSA9IFNleG8sIHZhbHVlc19mcm9tID0gSG9yYXMpICU+JSANCiAgbXV0YXRlKFBvYmxhY2nDs24gPSAiQXNhbGFyaWFkYXMvb3MiKQ0KDQojIEFzYWwuIHNpbiBkZXNjdWVudG8ganViaWxhdG9yaW8NCnRhYmxhMy4zIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSwgDQogICAgICAgICBDQVRfT0NVUCA9PSAzLA0KICAgICAgICAgUFAwN0ggPT0gMiwNCiAgICAgICAgIFBQM0VfVE9UID4gMCwgIyBIb3JhcyB0cmFiYWphZGFzIHBvc2l0aXZhcw0KICAgICAgICAgUFAzRV9UT1QgIT0gOTk5KSAlPiUgDQogIGdyb3VwX2J5KFNleG8pICU+JSANCiAgICBtdXRhdGUoUFAzRV9UT1QgPSBhcy5udW1lcmljKGdzdWIoIiwiLCAjY2FtYmlvICIuIiBwb3IgImNvbWFzIiwiIGVuIGxvcyBkZWNpbWFsZXMgcGFyYSBwb2RlciBvcGVyYXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQM0VfVE9ULA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgPSBUUlVFKSkpICU+JSANCiAgc3VtbWFyaXNlKEhvcmFzID0gd2VpZ2h0ZWQubWVhbihQUDNFX1RPVCwgUE9OREVSQSkpICU+JSANCiAgcGl2b3Rfd2lkZXIoLiwgbmFtZXNfZnJvbSA9IFNleG8sIHZhbHVlc19mcm9tID0gSG9yYXMpICU+JSANCiAgbXV0YXRlKFBvYmxhY2nDs24gPSAiQXNhbGFyaWFkYXMvb3Mgc2luIGRlc2MuIGp1YmlsLiIpDQoNCnRhYmxhMy40IDwtIGJpbmRfcm93cyh0YWJsYTMuMSwgdGFibGEzLjIsIHRhYmxhMy4zKSAlPiUgDQogIG11dGF0ZShCcmVjaGEgPSBwZXJjZW50KCgoVmFyb25lcy1NdWplcmVzKS9WYXJvbmVzKSwgMSksDQogICAgICAgICBNdWplcmVzID0gKE11amVyZXMpLA0KICAgICAgICAgVmFyb25lcyA9IChWYXJvbmVzKSkgJT4lIA0KICBzZWxlY3QoUG9ibGFjacOzbiwgTXVqZXJlcywgVmFyb25lcywgQnJlY2hhKQ0KYGBgDQoNCjxicj4NCjxwIHN0eWxlPSJjb2xvcjojRTU2MTZFIj5fX0JyZWNoYXMgZGUgaG9yYXMgdHJhYmFqYWRhc19fPC9wPg0KPHAgc3R5bGU9ImNvbG9yOiNjOWM5YzkiPl9fYHIgYWdsb19kYXRlYF9fPC9wPg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmthYmxlKHRhYmxhMy40LCBkaWdpdHMgPSAxLCBhbGlnbiA9ICdsY2NjJykgJT4lDQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCANCiAgICAgICAgICAgICAgICAjZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiLA0KICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlxuIiA9IDEsICJIb3JhcyBzZW1hbmFsZXMgKG1lZGlhKSIgPSAyLCAiXG4iID0gMSksDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gY29sb3Jlc1sxXSkgJT4lIA0KICBmb290bm90ZShnZW5lcmFsID0gZnVlbnRlLA0KICAgICAgICAgICBnZW5lcmFsX3RpdGxlID0gIlxuIikgJT4lIA0KICBjb2x1bW5fc3BlYygxLCB3aWR0aCA9ICI4Y20iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDQsIGJvbGQgPSBUUlVFLCB3aWR0aCA9ICI0Y20iKSAlPiUgDQogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpybSh0YWJsYTMuMSwgdGFibGEzLjIsIHRhYmxhMy4zLCB0YWJsYTMuNCkNCmBgYA0KDQo8YnI+DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQoNCiNUYWJsYSBwYXJhIGhvcmFzIHRyYWJhamFkYXMgcG9yIHJlZ2nDs24gcGFzbyAxDQoNCiMgT2N1cGFkZXMNCnRhYmxhMy41IDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSwNCiAgICAgICAgIFBQM0VfVE9UID4gMCwgIyBIb3JhcyB0cmFiYWphZGFzIHBvc2l0aXZhcw0KICAgICAgICAgUFAzRV9UT1QgIT0gOTk5KSAlPiUgDQogIGdyb3VwX2J5KFNleG8sIFJlZ2lvbikgJT4lIA0KICAgIG11dGF0ZShQUDNFX1RPVCA9IGFzLm51bWVyaWMoZ3N1YigiLCIsICNjYW1iaW8gIi4iIHBvciAiY29tYXMiLCIgZW4gbG9zIGRlY2ltYWxlcyBwYXJhIHBvZGVyIG9wZXJhcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFAzRV9UT1QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZCA9IFRSVUUpKSkgJT4lIA0KICBzdW1tYXJpc2UoSG9yYXMgPSB3ZWlnaHRlZC5tZWFuKFBQM0VfVE9ULCBQT05ERVJBKSkgJT4lIA0KICBwaXZvdF93aWRlciguLCBuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBIb3JhcykgJT4lIA0KICBtdXRhdGUoUG9ibGFjacOzbiA9ICJPY3VwYWRhcy9vcyIpDQoNCiMgQXNhbGFyaWFkZXMNCnRhYmxhMy42IDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSwNCiAgICAgICAgIENBVF9PQ1VQID09IDMsDQogICAgICAgICBQUDNFX1RPVCA+IDAsICMgSG9yYXMgdHJhYmFqYWRhcyBwb3NpdGl2YXMNCiAgICAgICAgIFBQM0VfVE9UICE9IDk5OSkgJT4lIA0KICBncm91cF9ieShTZXhvLCBSZWdpb24pICU+JSANCiAgICBtdXRhdGUoUFAzRV9UT1QgPSBhcy5udW1lcmljKGdzdWIoIiwiLCAjY2FtYmlvICIuIiBwb3IgImNvbWFzIiwiIGVuIGxvcyBkZWNpbWFsZXMgcGFyYSBwb2RlciBvcGVyYXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQM0VfVE9ULA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgPSBUUlVFKSkpICU+JSANCiAgc3VtbWFyaXNlKEhvcmFzID0gd2VpZ2h0ZWQubWVhbihQUDNFX1RPVCwgUE9OREVSQSkpICU+JSANCiAgcGl2b3Rfd2lkZXIoLiwgbmFtZXNfZnJvbSA9IFNleG8sIHZhbHVlc19mcm9tID0gSG9yYXMpICU+JSANCiAgbXV0YXRlKFBvYmxhY2nDs24gPSAiQXNhbGFyaWFkYXMvb3MiKQ0KDQojIEFzYWwuIHNpbiBkZXNjdWVudG8ganViaWxhdG9yaW8NCnRhYmxhMy43IDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSwgDQogICAgICAgICBDQVRfT0NVUCA9PSAzLA0KICAgICAgICAgUFAwN0ggPT0gMiwNCiAgICAgICAgIFBQM0VfVE9UID4gMCwgIyBIb3JhcyB0cmFiYWphZGFzIHBvc2l0aXZhcw0KICAgICAgICAgUFAzRV9UT1QgIT0gOTk5KSAlPiUgDQogIGdyb3VwX2J5KFNleG8sIFJlZ2lvbikgJT4lIA0KICAgIG11dGF0ZShQUDNFX1RPVCA9IGFzLm51bWVyaWMoZ3N1YigiLCIsICNjYW1iaW8gIi4iIHBvciAiY29tYXMiLCIgZW4gbG9zIGRlY2ltYWxlcyBwYXJhIHBvZGVyIG9wZXJhcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFAzRV9UT1QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZCA9IFRSVUUpKSkgJT4lIA0KICBzdW1tYXJpc2UoSG9yYXMgPSB3ZWlnaHRlZC5tZWFuKFBQM0VfVE9ULCBQT05ERVJBKSkgJT4lIA0KICBwaXZvdF93aWRlciguLCBuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBIb3JhcykgJT4lIA0KICBtdXRhdGUoUG9ibGFjacOzbiA9ICJBc2FsYXJpYWRhcy9vcyBzaW4gZGVzYy4ganViaWwuIikNCg0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQoNCiNUYWJsYSBwYXJhIGhvcmFzIHRyYWJhamFkYXMgcG9yIHJlZ2nDs24gcGFzbyAyDQoNCnRhYmxhMy44IDwtIGJpbmRfcm93cyh0YWJsYTMuNSwgdGFibGEzLjYsIHRhYmxhMy43KSAlPiUgDQogIG11dGF0ZShCcmVjaGEgPSBwZXJjZW50KCgoVmFyb25lcy1NdWplcmVzKS9WYXJvbmVzKSwgMSksDQogICAgICAgICBNdWplcmVzID0gKE11amVyZXMpLA0KICAgICAgICAgVmFyb25lcyA9IChWYXJvbmVzKSkgJT4lIA0KICBzZWxlY3QoUmVnaW9uLCBQb2JsYWNpw7NuLCBNdWplcmVzLCBWYXJvbmVzLCBCcmVjaGEpDQoNCnRhYmxhMy44bSA8LSB0YWJsYTMuOCAlPiUgDQogIHNlbGVjdChjKDE6MykpICU+JSANCiAgc3ByZWFkKC4sIFJlZ2lvbiwgTXVqZXJlcykNCg0KdGFibGEzLjh2IDwtIHRhYmxhMy44ICU+JSAgDQogIHNlbGVjdChjKDEsIDIsIDQpKSAlPiUgDQogIHNwcmVhZCguLCBSZWdpb24sIFZhcm9uZXMpDQoNCnRhYmxhMy44YiA8LSB0YWJsYTMuOCAlPiUgIA0KICBzZWxlY3QoYygxLCAyLCA1KSkgJT4lIA0KICBzcHJlYWQoLiwgUmVnaW9uLCBCcmVjaGEpDQoNCnRhYmxhMy45IDwtIGxlZnRfam9pbih0YWJsYTMuOG0sIHRhYmxhMy44diwgYnkgPSBjKCJQb2JsYWNpw7NuIikpICU+JSANCiAgc2VsZWN0KFBvYmxhY2nDs24sIGBNdWplcmVzYCA9IGBDdXlvLnhgLCBgVmFyb25lc2AgPSBgQ3V5by55YCwNCiAgICAgICAgICAgICAgICAgICAgIGAgTXVqZXJlc2AgPSBgR3JhbiBCdWVub3MgQWlyZXMueGAsIGAgVmFyb25lc2AgPSBgR3JhbiBCdWVub3MgQWlyZXMueWAsDQogICAgICAgICAgICAgICAgICAgIGAgIE11amVyZXNgID0gYE5FQS54YCwgYCAgVmFyb25lc2AgPSBgTkVBLnlgLA0KICAgICAgICAgICAgICAgICAgIGAgICBNdWplcmVzYCA9IGBOT0EueGAsIGAgICBWYXJvbmVzYCA9IGBOT0EueWAsDQogICAgICAgICAgICAgICAgICBgICAgIE11amVyZXNgID0gYFBhbXBlYW5hLnhgLCBgICAgIFZhcm9uZXNgID0gYFBhbXBlYW5hLnlgLA0KICAgICAgICAgICAgICAgICBgICAgICBNdWplcmVzYCA9IGBQYXRhZ29uaWEueGAsIGAgICAgIFZhcm9uZXNgID0gYFBhdGFnb25pYS55YCkgJT4lIA0KICBsZWZ0X2pvaW4oLiwgdGFibGEzLjhiLCBieSA9IGMoIlBvYmxhY2nDs24iKSkgJT4lIA0KICBtdXRhdGUoYEJyZWNoYWAgPSBgQ3V5b2AsDQogICAgICAgICBgIEJyZWNoYWAgPSBgR3JhbiBCdWVub3MgQWlyZXNgLA0KICAgICAgICAgYCAgQnJlY2hhYCA9IGBORUFgLA0KICAgICAgICAgYCAgIEJyZWNoYWAgPSBgTk9BYCwNCiAgICAgICAgIGAgICAgQnJlY2hhYCA9IGBQYW1wZWFuYWAsDQogICAgICAgICBgICAgICBCcmVjaGFgID0gYFBhdGFnb25pYWApICU+JSANCiAgc2VsZWN0KFBvYmxhY2nDs24sDQogICAgICAgICBgTXVqZXJlc2AsIGBWYXJvbmVzYCwgYEJyZWNoYWAsDQogICAgICAgICBgIE11amVyZXNgLCBgIFZhcm9uZXNgLCBgIEJyZWNoYWAsDQogICAgICAgICBgICBNdWplcmVzYCwgYCAgVmFyb25lc2AsIGAgIEJyZWNoYWAsDQogICAgICAgICBgICAgTXVqZXJlc2AsIGAgICBWYXJvbmVzYCwgYCAgIEJyZWNoYWAsDQogICAgICAgICBgICAgIE11amVyZXNgLCBgICAgIFZhcm9uZXNgLCBgICAgIEJyZWNoYWAsDQogICAgICAgICBgICAgICBNdWplcmVzYCwgYCAgICAgVmFyb25lc2AsIGAgICAgIEJyZWNoYWApDQoNCmBgYA0KDQojIyMjIyBDdXlvDQo8YnI+PGJyPg0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19CcmVjaGFzIGRlIGhvcmFzIHRyYWJhamFkYXNfXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX0N1eW8uIGByIGRhdGVgX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGEzLjkgJT4lIA0KICBzZWxlY3QoMTo0KSAlPiUgDQogIGthYmxlKGRpZ2l0cyA9IDEsIGFsaWduID0gJ2xjY2MnKSAlPiUNCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIA0KICAgICAgICAgICAgICAgICNmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIsDQogICAgICAgICAgICAgICAgZml4ZWRfdGhlYWQgPSBULCBmb250X3NpemUgPSAyMCkgJT4lDQogIGFkZF9oZWFkZXJfYWJvdmUoYygiXG4iID0gMSwgIkhvcmFzIHNlbWFuYWxlcyAobWVkaWEpIiA9IDIsICJcbiIgPSAxKSwNCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKSAlPiUgDQogIGZvb3Rub3RlKGdlbmVyYWwgPSBmdWVudGUsDQogICAgICAgICAgIGdlbmVyYWxfdGl0bGUgPSAiXG4iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDEsIHdpZHRoID0gIjhjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoNCwgYm9sZCA9IFRSVUUsIHdpZHRoID0gIjRjbSIpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pDQpgYGANCiMjIyMjIEdCQQ0KPGJyPjxicj4NCg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fQnJlY2hhcyBkZSBob3JhcyB0cmFiYWphZGFzX188L3A+DQo8cCBzdHlsZT0iY29sb3I6I2M5YzljOSI+X19HQkEuIGByIGRhdGVgX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGEzLjkgJT4lIA0KICBzZWxlY3QoMSwgNTo3KSAlPiUgDQogIGthYmxlKGRpZ2l0cyA9IDEsIGFsaWduID0gJ2xjY2MnKSAlPiUNCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIA0KICAgICAgICAgICAgICAgICNmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIsDQogICAgICAgICAgICAgICAgZml4ZWRfdGhlYWQgPSBULCBmb250X3NpemUgPSAyMCkgJT4lDQogIGFkZF9oZWFkZXJfYWJvdmUoYygiXG4iID0gMSwgIkhvcmFzIHNlbWFuYWxlcyAobWVkaWEpIiA9IDIsICJcbiIgPSAxKSwNCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKSAlPiUgDQogIGZvb3Rub3RlKGdlbmVyYWwgPSBmdWVudGUsDQogICAgICAgICAgIGdlbmVyYWxfdGl0bGUgPSAiXG4iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDEsIHdpZHRoID0gIjhjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoNCwgYm9sZCA9IFRSVUUsIHdpZHRoID0gIjRjbSIpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pDQpgYGANCg0KIyMjIyMgTkVBDQo8YnI+PGJyPg0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19CcmVjaGFzIGRlIGhvcmFzIHRyYWJhamFkYXNfXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX05FQS4gYHIgZGF0ZWBfXzwvcD4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0YWJsYTMuOSAlPiUgDQogIHNlbGVjdCgxLCA4OjEwKSAlPiUgDQogIGthYmxlKGRpZ2l0cyA9IDEsIGFsaWduID0gJ2xjY2MnKSAlPiUNCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIA0KICAgICAgICAgICAgICAgICNmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIsDQogICAgICAgICAgICAgICAgZml4ZWRfdGhlYWQgPSBULCBmb250X3NpemUgPSAyMCkgJT4lDQogIGFkZF9oZWFkZXJfYWJvdmUoYygiXG4iID0gMSwgIkhvcmFzIHNlbWFuYWxlcyAobWVkaWEpIiA9IDIsICJcbiIgPSAxKSwNCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKSAlPiUgDQogIGZvb3Rub3RlKGdlbmVyYWwgPSBmdWVudGUsDQogICAgICAgICAgIGdlbmVyYWxfdGl0bGUgPSAiXG4iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDEsIHdpZHRoID0gIjhjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoNCwgYm9sZCA9IFRSVUUsIHdpZHRoID0gIjRjbSIpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pDQpgYGANCg0KIyMjIyMgTk9BDQo8YnI+PGJyPg0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19CcmVjaGFzIGRlIGhvcmFzIHRyYWJhamFkYXNfXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX05PQS4gYHIgZGF0ZWBfXzwvcD4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0YWJsYTMuOSAlPiUgDQogIHNlbGVjdCgxLCAxMToxMykgJT4lIA0KICBrYWJsZShkaWdpdHMgPSAxLCBhbGlnbiA9ICdsY2NjJykgJT4lDQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCANCiAgICAgICAgICAgICAgICAjZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiLA0KICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlxuIiA9IDEsICJIb3JhcyBzZW1hbmFsZXMgKG1lZGlhKSIgPSAyLCAiXG4iID0gMSksDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gY29sb3Jlc1sxXSkgJT4lIA0KICBmb290bm90ZShnZW5lcmFsID0gZnVlbnRlLA0KICAgICAgICAgICBnZW5lcmFsX3RpdGxlID0gIlxuIikgJT4lIA0KICBjb2x1bW5fc3BlYygxLCB3aWR0aCA9ICI4Y20iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDQsIGJvbGQgPSBUUlVFLCB3aWR0aCA9ICI0Y20iKSAlPiUgDQogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKQ0KYGBgDQoNCiMjIyMjIFBhbXBlYW5hDQo8YnI+PGJyPg0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19CcmVjaGFzIGRlIGhvcmFzIHRyYWJhamFkYXNfXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX1BhbXBlYW5hLiBgciBkYXRlYF9fPC9wPg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRhYmxhMy45ICU+JSANCiAgc2VsZWN0KDEsIDE0OjE2KSAlPiUgDQogIGthYmxlKGRpZ2l0cyA9IDEsIGFsaWduID0gJ2xjY2MnKSAlPiUNCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIA0KICAgICAgICAgICAgICAgICNmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIsDQogICAgICAgICAgICAgICAgZml4ZWRfdGhlYWQgPSBULCBmb250X3NpemUgPSAyMCkgJT4lDQogIGFkZF9oZWFkZXJfYWJvdmUoYygiXG4iID0gMSwgIkhvcmFzIHNlbWFuYWxlcyAobWVkaWEpIiA9IDIsICJcbiIgPSAxKSwNCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKSAlPiUgDQogIGZvb3Rub3RlKGdlbmVyYWwgPSBmdWVudGUsDQogICAgICAgICAgIGdlbmVyYWxfdGl0bGUgPSAiXG4iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDEsIHdpZHRoID0gIjhjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoNCwgYm9sZCA9IFRSVUUsIHdpZHRoID0gIjRjbSIpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pDQpgYGANCg0KIyMjIyMgUGF0YWdvbmlhDQo8YnI+PGJyPg0KDQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19CcmVjaGFzIGRlIGhvcmFzIHRyYWJhamFkYXNfXzwvcD4NCjxwIHN0eWxlPSJjb2xvcjojYzljOWM5Ij5fX1BhdGFnb25pYS4gYHIgZGF0ZWBfXzwvcD4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0YWJsYTMuOSAlPiUgDQogIHNlbGVjdCgxLCAxNzoxOSkgJT4lIA0KICBrYWJsZShkaWdpdHMgPSAxLCBhbGlnbiA9ICdsY2NjJykgJT4lDQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCANCiAgICAgICAgICAgICAgICAjZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiLA0KICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlxuIiA9IDEsICJIb3JhcyBzZW1hbmFsZXMgKG1lZGlhKSIgPSAyLCAiXG4iID0gMSksDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gY29sb3Jlc1sxXSkgJT4lIA0KICBmb290bm90ZShnZW5lcmFsID0gZnVlbnRlLA0KICAgICAgICAgICBnZW5lcmFsX3RpdGxlID0gIlxuIikgJT4lIA0KICBjb2x1bW5fc3BlYygxLCB3aWR0aCA9ICI4Y20iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDQsIGJvbGQgPSBUUlVFLCB3aWR0aCA9ICI0Y20iKSAlPiUgDQogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpybSh0YWJsYTMuNSwgdGFibGEzLjYsIHRhYmxhMy43LCB0YWJsYTMuOCwgdGFibGEzLjhiLCB0YWJsYTMuOG0sIHRhYmxhMy44diwgdGFibGEzLjkpDQpgYGANCg0KIyMgVGFyZWFzIGRlbCBob2dhcg0KDQotLS0NCg0KIyMjIERpc3RyaWJ1Y2nDs24gZGUgbGFzIHRhcmVhcyBkb23DqXN0aWNhcw0KPGJyPjxicj4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnRhYmxhNC4xX2dyYWYgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgbGVmdF9qb2luKC4sIGJhc2VfaG9nYXIgJT4lIA0KICAgICAgICAgICAgICBzZWxlY3QoQ09EVVNVLCBOUk9fSE9HQVIsIFZJSTFfMSwgVklJMV8yKSwgDQogICAgICAgICAgICBieSA9IGMoIkNPRFVTVSIsICJOUk9fSE9HQVIiKSkgJT4lIA0KICBtdXRhdGUocHJvcG9yY2lvbiA9IGNhc2Vfd2hlbihWSUkxXzEgPT0gQ09NUE9ORU5URSB8IFZJSTFfMiA9PSBDT01QT05FTlRFIH4gMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IDApKSAlPiUgDQogIHNlbGVjdChTZXhvLCBwcm9wb3JjaW9uLCBQT05ERVJBKSAlPiUgDQogIGdyb3VwX2J5KFNleG8pICU+JSANCiAgc3VtbWFyaXNlKHByb3BvcmNpb24gPSBzdW0ocHJvcG9yY2lvbipQT05ERVJBKSkgJT4lIA0KICBtdXRhdGUocHJvcG9yY2lvbiA9IHJvdW5kKHByb3BvcmNpb24vc3VtKHByb3BvcmNpb24pKjEwMCwgMCkpDQoNCmlubGluZV8yMiA8LSB0YWJsYTQuMV9ncmFmICU+JSANCiAgZmlsdGVyKFNleG8gPT0gIk11amVyZXMiKSAlPiUgDQogIHB1bGwocHJvcG9yY2lvbikNCiAgDQppbmxpbmVfMjMgPC0gdGFibGE0LjFfZ3JhZiAlPiUgDQogIGZpbHRlcihTZXhvID09ICJWYXJvbmVzIikgJT4lIA0KICBwdWxsKHByb3BvcmNpb24pDQpgYGANCg0KRWwgdHJhYmFqbyBkb23DqXN0aWNvIHN1ZWxlIHJlY2FlciBtw6FzIGVuIGxhcyBtdWplcmVzIHF1ZSBlbiBsb3MgdmFyb25lcy4gRXMgZGVjaXIsIGVzIG3DoXMgcHJvYmFibGUgcXVlIHNlYW4gZWxsYXMgbGFzIGVuY2FyZ2FkYXMgZGUgcmVhbGl6YXIgdGFyZWFzIGRlIGN1aWRhZG8geSByZXByb2R1Y2Npw7NuIHBhcmEgb3Ryb3MgbWllbWJyb3MgZGUgc3UgaG9nYXIuIEVuIGVzdG9zIGNhc29zLCBlbCB0cmFiYWpvIG5vIHNlIGNvbWVyY2lhIGVuIGVsIG1lcmNhZG8sIHNlIHJlYWxpemEgZW50cmUgcXVpZW5lcyB0aWVuZW4gdW4gdsOtbmN1bG8gcGVyc29uYWwsIHkgcG9yIGxvIHRhbnRvLCBubyBzZSByZW11bmVyYS4NCg0KRXN0ZSByZXBhcnRvIGRlc2lndWFsIGRlIGxhcyB0YXJlYXMgZG9tw6lzdGljYXMgZW50cmUgdmFyb25lcyB5IG11amVyZXMgcG9kcsOtYSBhc29jaWFyc2UgYSBsYXMgZGVzaWd1YWxkYWRlcyB2aXN0YXMgYW50ZXJpb3JtZW50ZSBlbiBsYSBjb21wb3NpY2nDs24gZGVsIG1lcmNhZG8gZGUgdHJhYmFqbyAob2JzdMOhY3Vsb3MgZW4gZWwgYWNjZXNvIGEgY2FyZ29zIGplcsOhcnF1aWNvcywgcHJlY2FyaXphY2nDs24gbGFib3JhbCwgZXRjICkgeSByZXNwb25kZSBhIHVuIGNvbmp1bnRvIGRlIG5vcm1hcyBzb2NpYWxlcyB5IGVzdGVyZW90aXBvcyBkZSBnw6luZXJvIHF1ZSBhc2lnbmFuIG1hbmRhdG9zIGRpZmVyZW5jaWFsZXMgYSB2YXJvbmVzIHkgbXVqZXJlcy4NCg0KRGljaGEgZmVtaW5pemFjacOzbiBkZSBsYXMgdGFyZWFzIGRlIGN1aWRhZG8gcGVuYWxpemEgYSBlc3RhcyDDumx0aW1hcywgaGFjaWVuZG8gcXVlIGVuZnJlbnRlbiBleHRlbnNhcyBjYXJnYXMgZGUgdHJhYmFqbyBlbiBlbCBob2dhciB5LCBwb3IgZW5kZSwgaW1wb25pZW5kbyB1bmEgZnVlcnRlIHJlc3RyaWNjacOzbiB0ZW1wb3JhbCB5IGFmZWN0YW5kbyBlbCBhY2Nlc28gYWwgbWVyY2FkbyBkZSB0cmFiYWpvIHkgYSBsYSB0cmF5ZWN0b3JpYSBsYWJvcmFsLiANCg0KPGJyPjxicj4NCg0KIyMjIyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30NCg0KIyMjIyMgVG90YWwgbmFjaW9uYWwNCjxicj4NCg0KQSBtb2RvIGlsdXN0cmF0aXZvLCBzZSBzZcOxYWxhIHF1ZTogX19kZWwgdG90YWwgZGUgcGVyc29uYXMgcXVlIHJlYWxpemFuIHRhcmVhcyBkb23DqXN0aWNhcywgdW4gYHIgaW5saW5lXzIyYCUgc29uIG11amVyZXMgeSB1biBgciBpbmxpbmVfMjNgJSBzb24gdmFyb25lcy5fXyBFc3RvIHN1Y2VkZSBzaSB0ZW5lbW9zIGVuIGN1ZW50YSBlbCB0b3RhbCBkZSBsb3MgaG9nYXJlcywgeSBzZWd1cmFtZW50ZSBsYSBkaWZlcmVuY2lhIHNlIGFncmF2YXLDrWEgc2kgcXVpdMOhcmFtb3MgbG9zIGhvZ2FyZXMgdW5pcGVyc29uYWxlcyBkZWwgY29udGVvIHkvbyBpbmNsdXnDqXJhbW9zIGEgbGFzIHRyYWJhamFkb3JhcyBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvLg0KPGJyPjxicj4NCg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fUGVyc29uYXMgcXVlIHJlYWxpemFuIGxhcyB0YXJlYXMgZG9tw6lzdGljYXMgZGVsIGhvZ2FyIHNlZ8O6biBzZXhvX188L3A+DQo8cCBzdHlsZT0iY29sb3I6I2M5YzljOSI+X19ObyBpbmNsdXllIHRyYWJhamFkb3JhcyBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvLiBgciBhZ2xvX2RhdGVgX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyMgUHJlcCBkYXRhIChub3RoaW5nIHRvIGNoYW5nZSBoZXJlKQ0KbnJvd3MgPC0gMTANCmRmIDwtIGV4cGFuZC5ncmlkKHggPSAxOm5yb3dzLCB5ID0gMTpucm93cykNCmRmJFNleG8gPC0gZmFjdG9yKHJlcCh0YWJsYTQuMV9ncmFmJFNleG8sIHRhYmxhNC4xX2dyYWYkcHJvcG9yY2lvbikpICANCiMjIFBsb3QNCmdncGxvdChkZiwgYWVzKHggPSB4LCB5ID0geSwgZmlsbCA9IFNleG8pKSArIA0KICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC41KSArDQogIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApKSArDQogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApLCB0cmFucyA9ICdyZXZlcnNlJykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSArDQogIGxhYnMoY2FwdGlvbiA9IGZ1ZW50ZSwNCiAgICAgICB4ID0gTlVMTCwNCiAgICAgICB5ID0gTlVMTCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCkpDQpgYGANCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIGdnc2F2ZSgiR3JhZmljb3MvRmlndXJhMTQucG5nIiwgc2NhbGUgPSAzKQ0KDQojIEFxdcOtIGhheSBxdWUgY2FtYmlhciBlbCBkaXJlY3RvcmlvIGVuIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZWwgZ3LDoWZpY28uDQojZ2dzYXZlKCJGaWd1cmExNC5wbmciLCBzY2FsZSA9IDAuNywgZHBpID0gMzAwLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3LCBiZyA9ICIjZmZmZmZmIikNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kcm0odGFibGE0LjFfZ3JhZiwgZGYpDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnRhYmxhNC4xIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihQUDA0QjEgPT0gMSkgJT4lIA0KICBtdXRhdGUoVG90YWwgPSBzdW0oUE9OREVSQSkpICU+JSANCiAgZ3JvdXBfYnkoU2V4bykgJT4lIA0KICBzdW1tYXJpc2UoUHJvcG9yY2lvbiA9IHBlcmNlbnQoc3VtKFBPTkRFUkEpL3VuaXF1ZShUb3RhbCksIDEpKQ0KDQp0YWJsYTQuMiA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoRVNUQURPID09IDEsDQogICAgICAgICBTZXhvID09ICJNdWplcmVzIikgJT4lIA0KICBtdXRhdGUoc2VydmljaW8uZG9tZXN0aWNvID0gY2FzZV93aGVuKFBQMDRCMSA9PSAxIH4gIlPDrSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFAwNEIxICE9IDEgfiAiTm8iKSkgJT4lIA0KICBncm91cF9ieShzZXJ2aWNpby5kb21lc3RpY28pICU+JSANCiAgc3VtbWFyaXNlKGZyZWN1ZW5jaWEgPSBzdW0oUE9OREVSQSkpICU+JSANCiAgbXV0YXRlKHByb3BvcmNpb24gPSBwZXJjZW50KGZyZWN1ZW5jaWEvc3VtKGZyZWN1ZW5jaWEpLCAxKSkNCg0KaW5saW5lXzI0IDwtIHRhYmxhNC4xICU+JSANCiAgZmlsdGVyKFNleG8gPT0gIk11amVyZXMiKSAlPiUgDQogIHB1bGwoUHJvcG9yY2lvbikNCg0KaW5saW5lXzI1IDwtIHRhYmxhNC4yICU+JSANCiAgZmlsdGVyKHNlcnZpY2lvLmRvbWVzdGljbyA9PSAiU8OtIikgJT4lIA0KICBwdWxsKHByb3BvcmNpb24pDQpgYGANCg0KQSBlc3RvIHNlIHN1bWEgZWwgaGVjaG8gZGUgcXVlIHByw6FjdGljYW1lbnRlIHRvZGFzIGxhcyBwZXJzb25hcyBxdWUgc2UgZGVkaWNhbiBhbCBzZXJ2aWNpbyBkb23DqXN0aWNvIChlcyBkZWNpciwgcXVlIHPDrSB2ZW5kZW4gZXN0ZSB0cmFiYWpvIGVuIGVsIG1lcmNhZG8pIHNvbiBtdWplcmVzLCB1biBfX2ByIGlubGluZV8yNGAuX18gQXNpbWlzbW8sIGRlbCB0b3RhbCBkZSBtdWplcmVzIG9jdXBhZGFzLCB1biBfX2ByIGlubGluZV8yNWBfXyBzZSBkZWRpY2EgYSBlc3RhIG9jdXBhY2nDs24sIGNvbmZvcm1hbmRvIGVudG9uY2VzIHVuYSBzYWxpZGEgbGFib3JhbCBwb3B1bGFyLiBQYXJhIG3DoXMgaW5mb3JtYWNpw7NuLCBwb2TDqXMgY29uc3VsdGFyIGVsIGluZm9ybWUgW0xhcyB0cmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljbyBlbiBBcmdlbnRpbmFdKGh0dHA6Ly9lY29ub21pYWZlbWluaXRhLmNvbS9pbmZvcm1lLXNlcnZpY2lvLWRvbWVzdGljby8pLg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kcm0odGFibGE0LjEsIHRhYmxhNC4yKQ0KYGBgDQoNCiMjIyMjIFBvciByZWdpw7NuDQo8YnI+DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQ0KdGFibGE0LjMgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgbGVmdF9qb2luKC4sIGJhc2VfaG9nYXIgJT4lIA0KICAgICAgICAgICAgICBzZWxlY3QoQ09EVVNVLCBOUk9fSE9HQVIsIFZJSTFfMSwgVklJMV8yKSwgDQogICAgICAgICAgICAgIGJ5ID0gYygiQ09EVVNVIiwgIk5ST19IT0dBUiIpKSAlPiUgDQogIG11dGF0ZShwcm9wb3JjaW9uID0gY2FzZV93aGVuKFZJSTFfMSA9PSBDT01QT05FTlRFIHwgVklJMV8yID09IENPTVBPTkVOVEUgfiAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gMCkpICU+JSANCiAgc2VsZWN0KFNleG8sIHByb3BvcmNpb24sIFBPTkRFUkEsIFJlZ2lvbikgJT4lIA0KICBncm91cF9ieShSZWdpb24sIFNleG8pICU+JSANCiAgc3VtbWFyaXNlKHByb3BvcmNpb24gPSBzdW0ocHJvcG9yY2lvbipQT05ERVJBKSkgJT4lIA0KICBtdXRhdGUocHJvcG9yY2lvbiA9IHBlcmNlbnQocm91bmQocHJvcG9yY2lvbi9zdW0ocHJvcG9yY2lvbiksMyksMSkpDQpgYGANCg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fUGVyc29uYXMgcXVlIHJlYWxpemFuIGxhcyB0YXJlYXMgZG9tw6lzdGljYXMgZGVsIGhvZ2FyIHNlZ8O6biBzZXhvX188L3A+DQo8cCBzdHlsZT0iY29sb3I6I2M5YzljOSI+X19Qb3IgcmVnacOzbi4gYHIgZGF0ZWAgLiBObyBpbmNsdXllIHRyYWJhamFkb3JhcyBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZ2dwbG90KHRhYmxhNC4zLCBhZXMoeD1SZWdpb24sIHk9cHJvcG9yY2lvbiwgZmlsbD1TZXhvKSkgKw0KICAgIGdlb21fYmFyKHBvc2l0aW9uPSJmaWxsIiwgc3RhdD0iaWRlbnRpdHkiLCB3aWR0aCA9IDAuNSkgKw0KICBnZW9tX3RleHQoDQogIHN0YXQgPSAiaWRlbnRpdHkiLA0KICBwb3NpdGlvbiA9ICJzdGFjayIsIHZqdXN0ID0yLCBzaXplID0gMywNCiAgYWVzKFJlZ2lvbiwgcHJvcG9yY2lvbiwgbGFiZWwgPSBwcm9wb3JjaW9uKSkrDQogICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykgKw0KICBsYWJzKGNhcHRpb24gPSBmdWVudGUpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpKQ0KDQpgYGANCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIGdnc2F2ZSgiR3JhZmljb3MvRmlndXJhMTQucG5nIiwgc2NhbGUgPSAzKQ0KDQojIEFxdcOtIGhheSBxdWUgY2FtYmlhciBlbCBkaXJlY3RvcmlvIGVuIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZWwgZ3LDoWZpY28uDQojZ2dzYXZlKCJGaWd1cmExNC5wbmciLCBzY2FsZSA9IDAuNywgZHBpID0gMzAwLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3LCBiZyA9ICIjZmZmZmZmIikNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kcm0odGFibGE0LjMpDQpgYGANCjxicj4NCg0KIyMgRGlzdHJpYnVjacOzbiBkZWwgaW5ncmVzbw0KDQotLS0NCg0KIyMjIERpc3RyaWJ1Y2nDs24gZGVsIEluZ3Jlc28NCjxicj48YnI+DQoNClBvciDDumx0aW1vLCBwb2RlbW9zIGFuYWxpemFyIGxhcyBicmVjaGFzIGRlIGfDqW5lcm8gZW4gbGEgZGlzdHJpYnVjacOzbiBkZSBsb3MgaW5ncmVzb3MuIEVuIHByaW1lciBsdWdhciwgc2Ugb3JkZW5hIHBvciBkZWNpbGVzIGEgbGFzIHBlcnNvbmFzIHNlZ8O6biBzdSBpbmdyZXNvIHBlciBjw6FwaXRhIGZhbWlsaWFyIChlbCBpbmdyZXNvIHRvdGFsIGRlbCBob2dhciBkaXZpZGlkbyBwb3IgbGEgY2FudGlkYWQgZGUgcGVyc29uYXMgcXVlIGxvIGNvbXBvbmVuKS4gRXMgZGVjaXIsIHNlIGZvcm1hbiBkaWV6IGdydXBvcyBkZSBpbmRpdmlkdW9zLCBkZSBpZ3VhbCB0YW1hw7FvLCBvcmRlbmFkb3Mgc2Vnw7puIGVsIG5pdmVsIGRlIGluZ3Jlc29zIHF1ZSBsZSBjb3JyZXNwb25kZW4gcG9yIGVsIGhvZ2FyIGFsIHF1ZSBwZXJ0ZW5lY2UuIEVuIGVsIHNpZ3VpZW50ZSBncsOhZmljbyBzZSBwdWVkZSBvYnNlcnZhciBsYSBwcm9wb3JjacOzbiBkZSBtdWplcmVzIHkgZGUgdmFyb25lcyBxdWUgZmluYWxtZW50ZSBjb21wb25lbiBjYWRhIGRlY2lsLiANCg0KRW4gZXN0ZSBjYXNvLCBubyBoYXkgZGlmZXJlbmNpYXMgZGVzdGFjYWJsZXMgbcOhcyBhbGzDoSBkZSB1bmEgbGV2ZSBwcmVwb25kZXJhbmNpYSBkZSBsYXMgbXVqZXJlcyBlbiB0b2RvcyBsb3MgZGVjaWxlcywgZXhwbGljYWJsZSBwb3IgY3Vlc3Rpb25lcyBkZW1vZ3LDoWZpY2FzIChoYXkgbcOhcyBtdWplcmVzIHF1ZSB2YXJvbmVzIGVuIGxhIHBvYmxhY2nDs24gZ2VuZXJhbCkuIEEgc3UgdmV6LCBsb3MgcmVzdWx0YWRvIHBhcmEgY2FkYSByZWdpw7NuIHNvbiBtdXkgc2ltaWxhcmVzIGEgbG9zIGRlbCB0b3RhbCBuYWNpb25hbCwgcG9yIGxvIGPDumFsIG5vIHJlc3VsdGEgc2lnbmlmaWNhdGl2YSBzdSBwdWJsaWNhY2nDs24uIA0KPGJyPjxicj4NCg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fQ29tcG9zaWNpw7NuIHNlZ8O6biBzZXhvIGRlIGxvcyBkZWNpbGVzIGRlbCBpbmdyZXNvIHBlciBjw6FwaXRhIGZhbWlsaWFyX188L3A+DQo8cCBzdHlsZT0iY29sb3I6I2M5YzljOSI+X19Ub3RhbCBkZSBsYSBwb2JsYWNpw7NuLiBgciBhZ2xvX2RhdGVgX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30NCnRhYmxhNS4xX2dyYWYgPC1iYXNlX2luZGl2aWR1YWwgJT4lIA0KICBzZWxlY3QoREVDQ0ZSLCBJUENGLCBQT05ESUgsIFNleG8pICU+JSANCiAgbXV0YXRlKERFQ0NGUiA9IGFzLm51bWVyaWMoREVDQ0ZSKSkgJT4lIA0KICBmaWx0ZXIoREVDQ0ZSICVpbiUgYygxOjEwKSkgJT4lIA0KICBncm91cF9ieShERUNDRlIpICU+JSANCiAgbXV0YXRlKFBvYiA9IHN1bShQT05ESUgpKSAlPiUgDQogIGdyb3VwX2J5KERFQ0NGUiwgU2V4bykgJT4lDQogIHN1bW1hcmlzZShQcm9wID0gc3VtKFBPTkRJSCkvdW5pcXVlKFBvYikpDQoNCmdncGxvdCh0YWJsYTUuMV9ncmFmLCBhZXMoeCA9IGFzLm51bWVyaWMoREVDQ0ZSKSwgUHJvcCwgZmlsbCA9IFNleG8sIGdyb3VwID0gU2V4bywgbGFiZWwgPSBwZXJjZW50KFByb3AsIDApKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgZ2VvbV90ZXh0KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuOSksIHZqdXN0ID0tLjEsIHNpemUgPSAyLjUpICsNCiAgbGFicyh5ID0gJycpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoIkRlY2lsIGRlbCBpbmdyZXNvIHBlciBjw6FwaXRhIGZhbWlsaWFyIiwgYnJlYWtzID0gYygxOjEwKSkgKw0KICBsYWJzKGNhcHRpb24gPSBmdWVudGUpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKSkNCmBgYA0KICAgICAgICAgICAgIA0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIGdnc2F2ZSgiR3JhZmljb3MvRmlndXJhMTUucG5nIiwgc2NhbGUgPSAxKQ0KDQojIEFxdcOtIGhheSBxdWUgY2FtYmlhciBlbCBkaXJlY3RvcmlvIGVuIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZWwgZ3LDoWZpY28uDQojZ2dzYXZlKCJGaWd1cmExNS5wbmciLCBzY2FsZSA9IDAuNywgZHBpID0gMzAwLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3LCBiZyA9ICIjZmZmZmZmIikNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kcm0odGFibGE1LjFfZ3JhZikNCmBgYA0KDQpFbiBzZWd1bmRvIGx1Z2FyLCBzZSBzZXBhcmEgYSBsYSBwb2JsYWNpw7NuIGVuIGRlY2lsZXMgc2Vnw7puIGVsIGluZ3Jlc28gdG90YWwgaW5kaXZpZHVhbC4gRXMgZGVjaXIsIHNlIG9yZGVuYSBlbiBiYXNlIGFsIG5pdmVsIGRlIGluZ3Jlc29zIHF1ZSBwZXJjaWJlIGNhZGEgaW5kaXZpZHVvLCBubyBlbCBob2dhciAoY2FzbyBhbnRlcmlvcikuIEVuIGVzdGUgY2FzbyBwdWVkZSB2ZXJzZSBxdWUgbG9zIGRlY2lsZXMgbcOhcyBiYWpvcyBkZSBpbmdyZXNvcyBlc3TDoW4gY29tcHVlc3RvcyBtYXlvcml0YXJpYW1lbnRlIHBvciBtdWplcmVzIHksIGVuIHBhcmFsZWxvLCBsb3MgZGVjaWxlcyBkZSBtYXlvcmVzIGluZ3Jlc29zIHNlIGNvbXBvbmVuIG1heW9yaXRhcmlhbWVudGUgcG9yIHZhcm9uZXMuIA0KRGVjaW1vcyBlbnRvbmNlcyBxdWUgbG9zIGVzdHJhdG9zIGRlIG1lbm9yZXMgaW5ncmVzb3MgZXN0w6FuIGZlbWluaXphZG9zLCBhbCB0aWVtcG8gcXVlIGxvcyBlc3RyYXRvcyBkZSBtYXlvcmVzIGluZ3Jlc29zIHNlIGVuY3VlbnRyYW4gbWFzY3VsaW5pemFkb3MuIEVuIGVzdGUgY2FzbyB0YW1iacOpbiwgbG9zIHJlc3VsdGFkbyBwYXJhIGNhZGEgcmVnacOzbiBzb24gbXV5IHNpbWlsYXJlcyBhIGxvcyBkZWwgdG90YWwgbmFjaW9uYWwsIHBvciBsbyBjw7phbCBubyByZXN1bHRhIHNpZ25pZmljYXRpdmEgc3UgcHVibGljYWNpw7NuLiANCjxicj48YnI+DQoNCjxwIHN0eWxlPSJjb2xvcjojRTU2MTZFIj5fX0NvbXBvc2ljacOzbiBzZWfDum4gc2V4byBkZSBsb3MgZGVjaWxlcyBkZSBpbmdyZXNvcyB0b3RhbGVzIGluZGl2aWR1YWxlc19fPC9wPg0KPHAgc3R5bGU9ImNvbG9yOiNjOWM5YzkiPl9fUG9ibGFjacOzbiBwZXJjZXB0b3JhIGRlIGluZ3Jlc29zLiBgciBhZ2xvX2RhdGVgX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30NCnRhYmxhNS4yX2dyYWYgPC1iYXNlX2luZGl2aWR1YWwgJT4lIA0KICBzZWxlY3QoREVDSU5EUiwgUDQ3VCwgUE9ORElJLCBTZXhvKSAlPiUgDQogIG11dGF0ZShERUNJTkRSID0gYXMubnVtZXJpYyhERUNJTkRSKSkgJT4lIA0KICBmaWx0ZXIoREVDSU5EUiAlaW4lIGMoMToxMCkpICU+JSANCiAgZ3JvdXBfYnkoREVDSU5EUikgJT4lIA0KICBtdXRhdGUoUG9iID0gc3VtKFBPTkRJSSkpICU+JSANCiAgZ3JvdXBfYnkoREVDSU5EUiwgU2V4bykgJT4lDQogIHN1bW1hcmlzZShQcm9wID0gc3VtKFBPTkRJSSkvdW5pcXVlKFBvYikpDQoNCmdncGxvdCh0YWJsYTUuMl9ncmFmLCBhZXMoeCA9IGFzLm51bWVyaWMoREVDSU5EUiksIFByb3AsIGZpbGwgPSBTZXhvLCBncm91cD0gU2V4bywgbGFiZWwgPSBwZXJjZW50KFByb3AsIDApKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpKw0KICBnZW9tX3RleHQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC45KSwgdmp1c3QgPS0uMSwgc2l6ZSA9IDIuNSkrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKSkgKw0KICBsYWJzKHkgPSAnJykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSArDQogIHNjYWxlX3hfY29udGludW91cygiRGVjaWwgZGUgaW5ncmVzbyB0b3RhbCBpbmRpdmlkdWFsIiwgYnJlYWtzID1jKDE6MTApKSArDQogIGxhYnMoY2FwdGlvbiA9IGZ1ZW50ZSkNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Kcm0odGFibGE1LjJfZ3JhZikNCmBgYA0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgZ2dzYXZlKCJHcmFmaWNvcy9GaWd1cmExNi5wbmciLCBzY2FsZSA9IDEpDQoNCiMgQXF1w60gaGF5IHF1ZSBjYW1iaWFyIGVsIGRpcmVjdG9yaW8gZW4gcXVlIHNlIHZhIGEgZ3VhcmRhciBlbCBncsOhZmljby4NCiNnZ3NhdmUoIkZpZ3VyYTE2LnBuZyIsIHNjYWxlID0gMC43LCBkcGkgPSAzMDAsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcsIGJnID0gIiNmZmZmZmYiKQ0KYGBgDQoNCsK/Q3XDoWwgZXMgbGEgZGlmZXJlbmNpYSBlbnRyZSBsb3MgZ3LDoWZpY29zIHByZXNlbnRhZG9zPyBFbiBlbCBwcmltZXIgZ3LDoWZpY28sIGxhcyB1bmlkYWRlcyBkZSBhbsOhbGlzaXMgc29uIGxvcyBob2dhcmVzLCBzw7NsbyBxdWUgc2UgZGlzdHJpYnV5ZXJvbiBkZSBmb3JtYSAicGFyZWphIiBzdXMgaW5ncmVzb3MgZW50cmUgbG9zIG1pZW1icm9zLiBEZSBlc3RhIGZvcm1hLCBsYSBjb21wb3NpY2nDs24gcG9yIHNleG8gZGUgbG9zIGVzdHJhdG9zIGRlIG1lbm9yZXMgaW5ncmVzb3Mgbm8gdGllbmUgbWF5b3JlcyBkaWZlcmVuY2lhcyByZXNwZWN0byBhIGxhIGRlIGxvcyBlc3RyYXRvcyBkZSBtYXlvcmVzIGluZ3Jlc29zLiBFbiBjYW1iaW8sIGVuIGVsIHNlZ3VuZG8gZ3LDoWZpY28gZGUgZXN0YSBzZWNjacOzbiB2ZW1vcyBsbyBxdWUgcGFzYSBhIG5pdmVsIGluZGl2aWR1YWwsIGxvIGN1YWwgZXMgdW5hIGZvcm1hIGRlICJhYnJpciIgaGFjaWEgZWwgaW50ZXJpb3IgZGUgbG9zIGhvZ2FyZXMuIExhIHVuaWRhZCBmYW1pbGlhciBwYXJlY2UgcmVzb2x2ZXIgbGEgZGlmZXJlbmNpYSBlbnRyZSBzZXhvcywgcGVybyBkZW50cm8gZGUgbGEgc2UgbWFudGllbmUgbGEgZGlmZXJlbmNpYTogbG9zIHZhcm9uZXMgdGllbmVuIG3DoXMgcHJvYmFiaWxpZGFkZXMgZGUgZ2FuYXIgbcOhcyBxdWUgbGFzIG11amVyZXMgZGVsIG1pc21vIGhvZ2FyLiBMYSBkaXN0cmlidWNpw7NuIGRlIGxvcyBpbmdyZXNvcyBkZSBsYXMgbXVqZXJlcywgc2VzZ2FkYSBoYWNpYSBsb3MgbWVub3JlcyBpbmdyZXNvcywgc2UgY29tcGVuc2EgZW4gbGEgZXN0cnVjdHVyYSBmYW1pbGlhciBjb24gbGEgZGlzdHJpYnVjacOzbiBkZSBsb3MgaW5ncmVzb3MgZGUgbG9zIHZhcm9uZXMsIHNlc2dhZGEgaGFjaWEgbG9zIG1heW9yZXMgaW5ncmVzb3MuDQpFbnRvbmNlcywgX2xhIGZhbWlsaWEgY29tbyB1bmlkYWQgZGUgcmVwcm9kdWNjacOzbiBlc2NvbmRlIHkgcmVzdWVsdmUgZGViYWpvIGRlIGxhIHN1cGVyZmljaWUgKGxhIGRpc3RyaWJ1Y2nDs24gYXBhcmVudGVtZW50ZSBlcXVpdGF0aXZhIHNlZ8O6biBsb3MgaW5ncmVzb3MgcGVyIGPDoXBpdGEpIGxhIGluZXF1aXRhdGl2YSBkaXN0cmlidWNpw7NuIGRlIGxhcyB0YXJlYXMgZGUgcmVwcm9kdWNjacOzbiB5IGxhcyBkaWZpY3VsdGFkZXMgYXNvY2lhZGFzIHF1ZSB0aWVuZW4gbGFzIG11amVyZXMgcGFyYSBwYXJ0aWNpcGFyIGRlIGZvcm1hIHBsZW5hIGVuIGVsIG1lcmNhZG8gZGUgdHJhYmFqbyB5IHBvciB0YW50byBwZXJjaWJpciBpbmdyZXNvcyBzZW1lamFudGVzIGEgbG9zIGRlIGxvcyB2YXJvbmVzLl8gDQogICAgICANCjxicj4NCg0KIyMgR2xvc2FyaW8NCg0KLS0tDQoNCiMjIyBHbG9zYXJpbyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30NCjxicj48YnI+DQpFbiBlc3RhIHNlY2Npw7NuIGRlZmluaW1vcyBjb25jZXB0b3MgcXVlIGZhY2lsaXRhbiBsYSBsZWN0dXJhIGRlbCBpbmZvcm1lLiAgDQo8YnI+DQoNCl9fQnJlY2hhIGRlIGluZ3Jlc29zOl9fIEVsIGluZ3Jlc28gdG90YWwgY29udGVtcGxhIGluZ3Jlc29zIGxhYm9yYWxlcyB5IG5vIGxhYm9yYWxlcywgY29tbyByZW50YXMgbyBzdWJzaWRpb3MuIEVzdGUgaW5kaWNhZG9yIGNhbGN1bGEgbGEgZGlmZXJlbmNpYSBlbnRyZSBsb3MgaW5ncmVzb3MgaW5kaXZpZHVhbGVzIHByb21lZGlvcyBkZSBsb3MgdmFyb25lcyB5IGxhcyBtdWplcmVzLCBleHByZXNhZGEgZW4gdMOpcm1pbm9zIGRlbCBpbmdyZXNvIGRlIGxvcyB2YXJvbmVzIChnZW5lcmFsbWVudGUgZWwgbcOhcyBhbHRvKS4gRXMgZGVjaXIsIHF1ZSBwdWVkZSBsZWVyc2UgY29tbyDigJxsYXMgbXVqZXJlcyBwZXJjaWJlbiBpbmdyZXNvcyBxdWUsIGVuIHByb21lZGlvLCBzb24gdW4g4oCmJSBtZW5vcmVzIHF1ZSBsb3MgZGUgbG9zIHZhcm9uZXPigJ0uIEVuIEFyZ2VudGluYSBlc3RhIGJyZWNoYSBlcyBlc3RydWN0dXJhbCwgYXVucXVlIHNlbnNpYmxlIGEgbG9zIGNpY2xvcyBlY29uw7NtaWNvcy4NCjxicj4NCg0KX19CcmVjaGEgZGUgbGEgb2N1cGFjacOzbiBwcmluY2lwYWw6X18gRXN0ZSBpbmRpY2Fkb3IgZXMgbGEgYnJlY2hhIGRlIGluZ3Jlc29zIGRlcml2YWRhIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsLCBxdWUgY2FsY3VsYSBsYSBkaWZlcmVuY2lhIGVudHJlIGxvcyBpbmdyZXNvcyBwcm9tZWRpb3MgcGVyY2liaWRvcyBwb3IgZWwgZW1wbGVvIHByaW5jaXBhbCBkZSBsb3MgdmFyb25lcyB5IGxhcyBtdWplcmVzLCBleHByZXNhZGEgZW4gdMOpcm1pbm9zIGRlbCBwcm9tZWRpbyBwZXJjaWJpZG8gcG9yIGxvcyB2YXJvbmVzIChnZW5lcmFsbWVudGUgZWwgbcOhcyBhbHRvKS4gRXhjbHV5ZSBsb3MgaW5ncmVzb3Mgbm8gbGFib3JhbGVzLCBjb21vIHJlbnRhcyBvIHN1YnNpZGlvcy4gIFB1ZWRlIGxlZXJzZSBjb21vIOKAnGxhcyBtdWplcmVzIHBlcmNpYmVuIGluZ3Jlc29zIGRlcml2YWRvcyBkZSBzdSBvY3VwYWNpw7NuIHByaW5jaXBhbCBxdWUsIGVuIHByb21lZGlvLCBzb24gYcO6biDigKYlIG1lbm9yZXMgcXVlIGxvcyBkZSBsb3MgdmFyb25lc+KAnS4gRWwgZmVuw7NtZW5vIGRlIHF1ZSBzZWEgbWVub3IgcGFyYSBsYXMgbXVqZXJlcyBlcyBhbGdvIHF1ZSBzZSByZXBpdGUgZW4gdG9kbyBlbCBtdW5kbyB5IHNlIGRlYmUgYWwgdGlwbyBkZSBpbnNlcmNpw7NuIGxhYm9yYWwgcXVlIHRpZW5lbiBsYXMgcGVyc29uYXMgY3V5byBnw6luZXJvIGNvbmRpY2lvbmEgbGEgamVyYXJxdcOtYSBkZWwgcHVlc3RvIGRvbmRlIHRyYWJhamFuLCBsYSByYW1hIGRlIGxhIG9jdXBhY2nDs24sIGxhIGNhbnRpZGFkIGRlIHRpZW1wbyBxdWUgZGVzdGluYW4gYWwgbWVyY2FkbyByZW11bmVyYWRvLCBjdcOhbnRhIHJlc3BvbnNhYmlsaWRhZCB0aWVuZW4gc29icmUgbGFzIHRhcmVhcyBkb23DqXN0aWNhcywgZW50cmUgb3RyYXMuIFNpIGJpZW4gZXhpc3RlIGxhIGRpc2NyaW1pbmFjacOzbiBsaXNhIHkgbGxhbmEsIGxhIHByZXNlbmNpYSBkZSB1bmEgYnJlY2hhIHNhbGFyaWFsIG1lbnN1YWwgbm8gaW1wbGljYSBuZWNlc2FyaWFtZW50ZSB1bmEgZGlmZXJlbmNpYSBzYWxhcmlhbCBwb3IgaG9yYS4NCjxicj4NCg0KX19DYWxpZmljYWNpw7NuOl9fIFJlZmllcmUgYSBsYXMgY29tcGV0ZW5jaWFzIHF1ZSByZXF1aWVyZSBlbCBwdWVzdG8gZGUgdHJhYmFqby4gDQo8YnI+DQoNCl9fRGVzb2N1cGFkbzpfXyBlcyBlbCBlc3RhZG8gZGUgdW5hIHBlcnNvbmEgcXVlIGVzdMOhIGluc2VydGEgZW4gZWwgbWVyY2FkbyBsYWJvcmFsLCBidXNjYW5kbyB1biBlbXBsZW8gYXVucXVlIG5vIGxvIGNvbnNpZ2EuIA0KPGJyPg0KDQpfX0VzdGFkw61zdGljYXMgYmluYXJpYXM6X18gSGFjZSByZWZlcmVuY2lhIGEgcXVlIGxhIHZhcmlhYmxlIOKAnHNleG/igJ0gc8OzbG8gYWRvcHRhIGVsIHZhbG9yIGRlIOKAnG1hc2N1bGlub+KAnSBvIOKAnGZlbWVuaW5v4oCdIGVuIGxhIGJhc2UgZGUgZGF0b3MgdXRpbGl6YWRhLCByZWZvcnphbmRvIGVsIHBhcmFkaWdtYSBoZXRlcm9ub3JtYXRpdm8geSBlbCBiaW5hcmlzbW8gZGUgZ8OpbmVyby4gU2luIGRpc3BvbmVyIGRlIHVuYSB2YXJpYWJsZSBxdWUgYWx1ZGEgYSBsYSBpZGVudGlkYWQgZGUgZ8OpbmVybywgbXVjaGFzIGlkZW50aWRhZGVzIHF1ZWRhbiBpbnZpc2liaWxpemFkYXMgeSBjb24gZWxsYXMsIHN1cyBzaXR1YWNpb25lcyB5IG5lY2VzaWRhZGVzIGVzcGVjw61maWNhcy4NCjxicj4NCg0KX19GYWx0YSBkZSBkZXNjdWVudG8ganViaWxhdG9yaW86X18gTXVlc3RyYSBlbCBlc3RhZG8gZGUgdW5hIHJlbGFjacOzbiBsYWJvcmFsIGFzYWxhcmlhZGEgcXVlIG5vIGN1bXBsZSBjb24gbGEgb2JsaWdhY2nDs24gZGUgYXBvcnRlcy4gTGEgZmFsdGEgZGUgZGVzY3VlbnRvIGp1YmlsYXRvcmlvIHN1ZWxlIHNlciB1biBpbmRpY2Fkb3IgZGUgbGEgZmFsdGEgZGUgcmVnaXN0cm8gZGUgbGEgcmVsYWNpw7NuLiBTaSBiaWVuIGVzIHVuIGZlbsOzbWVubyBlc3RydWN0dXJhbCBlbiBBcmdlbnRpbmEsIGxhIGluY2lkZW5jaWEgZGUgZXN0YSBwcm9ibGVtw6F0aWNhIGVzIG1heW9yIGVudHJlIGxhcyBtdWplcmVzIGFzYWxhcmlhZGFzLg0KPGJyPg0KDQpfX0ZlbWluaXphY2nDs24gZGUgbGEgcG9icmV6YTpfXyBSZWZpZXJlIGFsIGNvbmp1bnRvIGRlIHByb2Nlc29zIGRlIGVtcG9icmVjaW1pZW50byBxdWUgYWZlY3RhbiBlbiBtYXlvciBtZWRpZGEgYSBsYXMgbXVqZXJlcyB5IHF1ZSBzZSBtYW5pZmllc3RhbiBlbiB1bmEgbWF5b3IgcHJvcG9yY2nDs24gZGUgbXVqZXJlcyBlbnRyZSBsYXMgcGVyc29uYXMgY3V5b3MgaW5ncmVzb3Mgbm8gbGxlZ2FuIGEgY3VicmlyIGxhIGNhbmFzdGEgYsOhc2ljYS4NCjxicj4NCg0KX19OaXZlbCBlZHVjYXRpdm86X18gRWwgbml2ZWwgZWR1Y2F0aXZvIGFsY2FuemFkbyBlcyB1bmEgZm9ybWEgZGUgdmVyIGN1w6FudG8gZGVkaWNhcm9uIGFsIGVzdHVkaW8gcXVpZW5lcyB0cmFiYWphbi4NCjxicj4NCg0KX19PY3VwYWRvL2EvZTpfXyBFcyBlbCBlc3RhZG8gZGUgdW5hIHBlcnNvbmEgcXVlIGVzdMOhIGluc2VydGEgZW4gZWwgbWVyY2FkbyBsYWJvcmFsIGNvbiB1biBlbXBsZW8sIHNlYSBmb3JtYWwsIGluZm9ybWFsLCBkZSBqb3JuYWRhIHJlZHVjaWRhLCBhc2FsYXJpYWRvLCBwb3IgY3VlbnRhIHByb3BpYSwgZGUgamVmYXR1cmEsIGVudHJlIG90cm9zLiANCjxicj4NCg0KX19PY3VwYWRvcy9hcyBkZW1hbmRhbnRlczpfXyAgbGFzIHBlcnNvbmFzIHF1ZSB5YSB0aWVuZW4gdW4gZW1wbGVvIHBlcm8gYnVzY2FuIGFjdGl2YW1lbnRlIG90cm8gbyB0cmFiYWphciBtw6FzIGhvcmFzLg0KPGJyPg0KDQpfX1BhcmVkZXMgZGUgY3Jpc3RhbCAvIHNlZ3JlZ2FjacOzbiBob3Jpem9udGFsOl9fIEVzIHVuYSBmb3JtYSBkZSB2aXNpYmlsaXphciBsYSBkaXN0cmlidWNpw7NuIGFzaW3DqXRyaWNhIGRlIGxhcyBtdWplcmVzIGVuIHJhbWFzIGRlIGxhIG9jdXBhY2nDs24sIHF1ZSBhZGVtw6FzIGRlIHJlcHJvZHVjaXIgZXN0ZXJlb3RpcG9zIGRlIGfDqW5lcm8gcmVwcmVzZW50YSB1biBwcm9ibGVtYSBkZSBpbmdyZXNvcywgeWEgcXVlIGxhcyByYW1hcyBmZW1pbml6YWRhcyB0aWVuZW4gc3VlbGRvcyBwcm9tZWRpb3MgbcOhcyBiYWpvcyB5IG1heW9yZXMgbml2ZWxlcyBkZSBpbmZvcm1hbGlkYWQgcXVlIGxvcyBtYXNjdWxpbml6YWRvcy4NCjxicj4NCg0KX19Qb2JsYWNpw7NuIGRlIDE0IGHDsW9zIHkgbcOhczpfXyBFcyBsYSBwb2JsYWNpw7NuIHRvdGFsIGRlIGVzdGUgaW5mb3JtZSwgcXVlIGluY2x1eWUgdG9kYXMgbGFzIHBlcnNvbmFzIHF1ZSBoYXlhbiBhbGNhbnphZG8gZWwgdW1icmFsIGRlIGxvcyAxNCBhw7FvcywgZWwgbMOtbWl0ZSBpbmZlcmlvciBkZSBsbyBxdWUgc2UgY29uc2lkZXJhIGxhIOKAnGVkYWQgYWN0aXZh4oCdLg0KPGJyPg0KDQpfX1BvYmxhY2nDs24gRWNvbsOzbWljYW1lbnRlIEFjdGl2YSAoUEVBKTpfXyAgTGEgUG9ibGFjacOzbiBFY29uw7NtaWNhbWVudGUgQWN0aXZhIChQRUEpIGluY2x1eWUgYSBsYXMgcGVyc29uYXMgcXVlIG9mcmVjZW4gc3UgdHJhYmFqbyBlbiBlbCBtZXJjYWRvLCBzZWEgcXVlIGxvIGNvbnNpZ3VlbiAob2N1cGFkYXMvb3MpIG8gbm8gKGRlc29jdXBhZGFzL29zKS4gQWwgY29uc2lkZXJhciDDum5pY2FtZW50ZSBlbCBtZXJjYWRvIGxhYm9yYWwgbm8gY29udGVtcGxhIGxhIGNvbmRpY2nDs24gZGUgYWN0aXZpZGFkIGV4cGFuZGlkYSBhIHRhcmVhcyBkb23DqXN0aWNhcyB5IGRlIGN1aWRhZG9zIG5vIHJlbXVuZXJhZG9zLiANCjxicj4NCg0KX19SYW1hcyBkZSBsYSBvY3VwYWNpw7NuOl9fIEVzIHVuYSBjbGFzaWZpY2FjacOzbiBkZSBsYXMgYWN0aXZpZGFkZXMgZWNvbsOzbWljYXMgcXVlIHJlYWxpemEgZWwgZXN0YWJsZWNpbWllbnRvIGTDs25kZSB0cmFiYWphbiBsYXMgcGVyc29uYXMuIExhIHJhbWEgZGUgYWN0aXZpZGFkIGVjb27Ds21pY2EgZGUgdW5hIHBlcnNvbmEgbm8gZGVwZW5kZSBkZSBsYXMgdGFyZWFzIGVzcGVjw61maWNhcyBkZSBzdSB0cmFiYWpvLCBzaW5vIGRlIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlIGxhIHVuaWRhZCBlY29uw7NtaWNhIGVuIGxhIHF1ZSB0cmFiYWphLiANCjxicj4NCg0KX19SZWdpb25lczpfXyBFbiBlc3RlIGluZm9ybWUgc2UgaWRlbnRpZmljYW4gNiByZWdpb25lczogR3JhbiBCdWVub3MgQWlyZXMsIE5vcm9lc3RlIEFyZ2VudGlubyAoTk9BKSwgTm9yZXN0ZSBBcmdlbnRpbm8gKE5FQSksIEN1eW8sIFBhbXBlYW5hIHkgUGF0YWdvbmlhLiBEZWJpZG8gYSBsYSBkaXNwb25pYmlsaWRhZCBkZSBsYSBtdWVzdHJhLCBhbGd1bmFzIGRlc2FncmVnYWNpb25lcyBwaWVyZGVuIHZhbGlkZXogeSBwb3IgZXNhIHJhesOzbiBzZSBvbWl0ZSBzdSBwdWJsaWNhY2nDs24uIEVuIG90cm9zIGNhc29zLCBsYXMgYXBlcnR1cmFzIHBvciByZWdpw7NuIGRldnVlbHZlbiByZXN1bHRhZG9zIG11eSBzaW1pbGFyZXMgYSBsb3MgZGVsIHRvdGFsIG5hY2lvbmFsLCB5IHBvciBlc2EgcmF6w7NuIG5vIHJlc3VsdGEgc2lnbmlmaWNhdGl2YSBzdSBwdWJsaWNhY2nDs24uIE9idGVuZXIgZGF0b3MgZXNwZWPDrWZpY29zIHNvYnJlIGNhZGEgdW5hIGRlIGxhcyByZWdpb25lcyBubyBzb2xvIHBvc2liaWxpdGEgZXZpZGVuY2lhciBsYXMgcGFydGljdWxhcmlkYWRlcyByZWdpb25hbGVzIGRlIGxhcyBhc2ltZXRyw61hcyByZWNvcnJpZGFzIGEgbG8gbGFyZ28gZGVsIGluZm9ybWUsIHNpbm8gcXVlIHRhbWJpw6luIHBlcm1pdGVuIHJlYWxpemFyIGNvbXBhcmFjaW9uZXMuIA0KPGJyPg0KDQpfX1N1Ym9jdXBhZG9zL2FzOl9fIFRvZGFzIGxhcyBwZXJzb25hcyBxdWUgdHJhYmFqYW4gbWVub3MgZGUgMzUgaG9yYXMgc2VtYW5hbGVzLCBlc3TDoW4gZGlzcG9uaWJsZXMgcGFyYSB0cmFiYWphciBtw6FzIGhvcmFzIHkgZGVzZWFuIGF1bWVudGFyIGxhIGNhbnRpZGFkIGRlIGhvcmFzIHF1ZSB0cmFiYWphbi4NCjxicj4NCg0KX19UYXNhIGRlIGFjdGl2aWRhZDpfXyBTZSBjYWxjdWxhIGNvbW8gbGEgcHJvcG9yY2nDs24gcXVlIHJlcHJlc2VudGEgbGEgUG9ibGFjacOzbiBFY29uw7NtaWNhbWVudGUgQWN0aXZhIGVudHJlIGxhIHBvYmxhY2nDs24gdG90YWwsIHlhIHNlYSBkZSBtdWplcmVzIG8gZGUgdmFyb25lcy4gQ2FiZSBkZXN0YWNhciBxdWUgZXN0YSBkZWZpbmljacOzbiBkZSAiQWN0aXZpZGFkIiBubyBjb250ZW1wbGEgYWN0aXZpZGFkZXMgY29tbyBjb2NpbmFyLCBsaW1waWFyLCBjdWlkYXIsIGV0Yy4gcXVlIHNvbiByZWFsaXphZGFzIHByaW5jaXBhbG1lbnRlIHBvciBtdWplcmVzIGZ1ZXJhIGRlbCBtZXJjYWRvLiANCjxicj4NCg0KX19UYXNhIGRlIGVtcGxlbzpfXyBMYSB0YXNhIG11ZXN0cmEgbGEgcHJvcG9yY2nDs24gZGUgcXVpZW5lcyBlc3TDoW4gZW4gZWwgbWVyY2FkbyBsYWJvcmFsIGNvbW8gb2N1cGFkZXMgZW4gcmVsYWNpw7NuIGEgbGEgcG9ibGFjacOzbiBkZSBtdWplcmVzIHkgZGUgdmFyb25lcywgZXMgZGVjaXIsIHNlIHJlY29ydGEgZGUgbGEgdGFzYSBkZSBhY3RpdmlkYWQgbGEgcHJvcG9yY2nDs24gZGUgcXVpZW5lcyBlc3TDoW4gZGVzb2N1cGFkYXMuDQo8YnI+DQoNCl9fVGFzYSBkZSBkZXNvY3VwYWNpw7NuOl9fIGEgdGFzYSBtdWVzdHJhIGxhIHByb3BvcmNpw7NuIGRlIHBlcnNvbmFzIHF1ZSBlc3TDoW4gYnVzY2FuZG8gZW1wbGVvIHBlcm8gbm8gbG8gY29uc2lndWVuLCBlbnRyZSBsYSBwb2JsYWNpw7NuIGVjb27Ds21pY2FtZW50ZSBhY3RpdmEgLiBFc3RhIHNpdHVhY2nDs24gZXMgbcOhcyByZWN1cnJlbnRlIGVudHJlIG11amVyZXMuDQo8YnI+DQoNCl9fVGFzYSBkZSBzdWJvY3VwYWNpw7NuOl9fIExhIHRhc2EgcmVsYWNpb25hIGxhIGNhbnRpZGFkIGRlIHBlcnNvbmFzIGVuIHNpdHVhY2nDs24gZGUgc3Vib2N1cGFjacOzbiBob3JhcmlhIHJlc3BlY3RvIGFsIHRvdGFsIGRlIGxhIFBFQS4gRXN0b3MgZW1wbGVvcyBkYW4gbWF5b3IgZmxleGliaWxpZGFkIHBhcmEgZWwgbWFuZWpvIGRlIGxhcyByZXNwb25zYWJpbGlkYWRlcyB5IHNvbiBsYXMgbXVqZXJlcyBsYXMgcXVlIHByZXNlbnRhbiB0YXNhcyBkZSBzdWJvY3VwYWNpw7NuIG3DoXMgYWx0YXMsIG11Y2hhcyB2ZWNlcyBkZWJpZG8gYSBsYSBjYXJnYSBkZSB0cmFiYWpvIGRlIGN1aWRhZG9zIHF1ZSBkZW1hbmRhIG11Y2hhcyBob3JhcyBxdWUgbm8gc2UgbGxldmFuIGFsIG1lcmNhZG8gZGUgdHJhYmFqby4gTGFzIHRyYWJhamFkb3JhcyB0aWVuZW4gbWF5b3JlcyBjb21wbGljYWNpb25lcyBhbCBtb21lbnRvIGRlIGNvbnNlZ3VpciB1biB0cmFiYWpvIGRlIHRpZW1wbyBjb21wbGV0by4gDQo8YnI+DQoNCl9fVHJhYmFqbyBkb23DqXN0aWNvIHkgZGUgY3VpZGFkb3M6X18gVGFtYmnDqW4gY29ub2NpZG8gY29tbyDigJx0cmFiYWpvIHJlcHJvZHVjdGl2b+KAnSBlcyBhcXVlbCBxdWUgZXMgaW1wcmVzY2luZGlibGUgcGFyYSBtYW50ZW5lciBsYSB2aWRhIGRlIGxhcyBwZXJzb25hcy4gU2UgbWFuaWZpZXN0YSBlbiB0YXJlYXMgY29tbyBjb2NpbmFyLCBsYXZhciwgb3JkZW5hciwgYXRlbmRlciBsYXMgbmVjZXNpZGFkZXMgZGUgbHhzIG1pZW1icnhzIGRlIHVuIGhvZ2FyIHkgZGUgbGEgZmFtaWxpYSBlbiBnZW5lcmFsLiBUb2RhcyBsYXMgcGVyc29uYXMgbmVjZXNpdGFtb3MgY3VpZGFkb3MgYSBsbyBsYXJnbyBkZSBudWVzdHJhcyB2aWRhcyB5IGxhIGNvbmNyZWNpw7NuIGRlIGxvcyBtaXNtb3Mgc3VlbGUgZGVwZW5kZXIgZW4gbWF5b3IgbWVkaWRhIGRlIGxhcyBpZGVudGlkYWRlcyBmZW1pbml6YWRhcy4NCjxicj4NCg0KIyMgTWV0b2RvbG9nw61hDQoNCi0tLQ0KDQojIyMgQWNsYXJhY2lvbmVzIG1ldG9kb2zDs2dpY2FzDQo8YnI+PGJyPg0KUGFyYSByZWFsaXphciBsb3MgY8OhbGN1bG9zIHNlIHV0aWxpemFuIGJhc2VzIGRlIGRhdG9zIHB1YmxpY2FkYXMgcG9yIGxhIEVuY3Vlc3RhIFBlcm1hbmVudGUgZGUgSG9nYXJlcyBkZWwgSU5ERUMuIEVzdGEgZW5jdWVzdGEgcmVsZXZhIGNhcmFjdGVyw61zdGljYXMgZGVtb2dyw6FmaWNhcywgc29jaWFsZXMsIGVjb27Ds21pY2FzLCBjb24gZXNwZWNpYWwgYXRlbmNpw7NuIGEgbGFzIGZvcm1hcyBkZSBwYXJ0aWNpcGFjacOzbiBlbiBlbCBtZXJjYWRvIGxhYm9yYWwsIGVudHJlIGhvZ2FyZXMgeSBwZXJzb25hcyBkZSAzMSBhZ2xvbWVyYWRvcyB1cmJhbm9zLiANCjxicj48YnI+DQpSZXNwZWN0byBkZWwgaW1wYWN0byBkZSBsYSBwYW5kZW1pYSBwb3IgQ09WSUQtMTksIHRhbnRvIHNvYnJlIGxvcyByZXN1bHRhZG9zIGNvbW8gc29icmUgbGEgY2FsaWRhZCBkZSBsb3MgZGF0b3MsIGNhYmUgYWNsYXJhciBxdWUgbGEgZW5jdWVzdGEgcGFzw7MgZGUgbGEgbW9kYWxpZGFkIHByZXNlbmNpYWwgYSBsYSB0ZWxlZsOzbmljYSBwYXJhIGNvbnRhY3RhciB5IHJlYWxpemFyIGxhIGVudHJldmlzdGEgYSBsb3MgaG9nYXJlcy4gRWwgcHJvcGlvIElOREVDIGFkdmllcnRlIHF1ZSBjaWVydG9zIGRhdG9zIG5vIGN1ZW50YW4gY29uIGxhIGNhbGlkYWQgY29uIGxhIHF1ZSBoYWJpdHVhbG1lbnRlIGxhIEVQSCBwcmVzZW50YSBzdXMgcmVzdWx0YWRvcy4NCjxicj48YnI+DQpFbCBkb2N1bWVudG8gc2UgcmVhbGl6w7MgdXRpbGl6YW5kbyBlbCBsZW5ndWFqZSBkZSBwcm9ncmFtYWNpw7NuIFIuIFBhcmEgbGVzIGN1cmlvc2VzLCB0b2RvIGVsIGPDs2RpZ28gc2UgZW5jdWVudHJhIGRpc3BvbmlibGUgcGFyYSBzdSBkZXNjYXJnYV4xXi4gDQoNCi0tLQ0KDQpeMV4gUHJlc2lvbmFuZG8gZW4gX0NvZGUgPiBEb3dubG9hZCBSbWRfIHNlIGFjY2VkZSBhIGxhIGRlc2NhcmdhIGRlIGxhIHNpbnRheGlzIGNvbXBsZXRhIGRlIGVzdGUgaW5mb3JtZS4NCjxicj48YnI+DQoNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCiNGSU4gREVMIElORk9STUUNCmBgYA0K