Introducción

El cultivo de aguacate (Persea americana) en Colombia ha ido tomando gran importancia recientemente debido a su potencial de exportación y consumo interno per cápita creciente. Dentro de los principales limitantes se encuentra el complejo de marchitez del aguacate (CMA; AWC en inglés), que se refiere al complejo de patologías ocasionadas por diferentes agentes causales de origen biótico o abiótico, que afectan todos los estados fenológicos del cultivo en la zona radical y basal. Los agentes causales más comunes asociados con AWC en Colombia son Phytophthora cinnamomi y Verticillium dahliae, y el trastorno de hipoxia-anoxia en plántulas y plantas adultas.

El objetivo de este taller es presentar un análisis espacial y temporal a nivel de finca que permita tomar decisiones acertadas de manejo de esta problemática en campo. Los datos analizados fueron obtenidos de una base de datos con coordenadas y la evaluación de la incidencia y severidad en 903 plantas de aguacate (con una escala de 0 a 5, siendo 5 el que representa la mayor severidad), en un área de 4 ha ubicada en Maní, Casanare, durante un periodo de 40 meses, con datos cada 60 días. Para la modelación se usaron herramientas de software tales como R Studio, Arcgis 10.5

Analisis exploratorio.

En esta imagen se observan los puntos muestreados en el lote proviendo asi la forma del lote de estudio.

Posteriormente para hacer un analisis exploratorio se graficaran los datos de AUDPC del dia 1200 respecto a los puntos muestreados con el fin de identificar patrones en la enfermedad o asociaciones dependientes de proximididad de puntos.

En efecto se puede visualirar comportamientos similares entre los puntos cercanos entre si ya que se detecta de forma empirica ciertas agrupaciones de puntos.

Poseriormente se desea observar de manera espacial esta distribucion de asociaciones entre puntos ya que se quiere evidenciar esta asociacion de forma que permita la toma de decisiones respecto a menejo oalguna actividad afin.

A partir de la visualizacion de los datos de AUDPC para el dia 1200 de forma grafica se observa que en el lote los mayores valores se hallan en agrupaciones y distribuidos hacia los bordes, con cierto recorrido hacia el centro.

Luego se trata de identificar normalidad en los datos pero no es posible ya que inicialmente estos valores son de tipo categorico ya que provienen de una escala de severidad por tanto, al no ser continuos, conceptos como normalidad de datos no es posible obtenerla por metodos convencionales.ademas la base de datos cuenta con muchos datos con ceros que no se pueden descartar ya que el cero en terminos de severidad implica sanidad de la planta y es un valor clave para decisiones de tipo agronomico.
Ahora se desea observar el patron de avance o aumento de la severidad en el tiempo, para esto se opta por utilizar un grafico convensional similar al inicial de AUDPC del dia 1200 respecto a puntos de muestreo; pero esta vez se desea elaborar para cada dia para detectar patrones de avance de tipo temporal.
D600 
  23 

Este valor es un dato atipico dentro del dataset inicial, por tanto se corrige para generar los posteriores analisis ya que su valor original es “2”.

Despues de corregir el dato atipico se generan estos graficos que muestran como se va distribuiendo el aumento de severdidad por zonas siguiendo el mismo patron hallado en el grafico de AUDPC del dia 1200 respecto al punto de muestreo,evidenciando asi que el aumento de la enfermedad se da a travez del tiempo a partir de la proximidad a los puntos mayormente afectados. Los titulos de los graficos estan en funcion de la posicion de la columna de los datos desde el dia 0 al 1200 en el dataset inicial.

Analisis espacial y temporal de la base de datos.

Analisis espacial.

AHora se desea saber como es la distribucion espacial de los graficos anteriormente realizados, pero ya que esto generaria 21 mapas de distribucion de la enfermedad, solo se van a mostrar 4, pero se dejaran todos en la seccion de anexos.

A partir de estos cuatro mapas de distribucion de la enfermedad se observa como la enfermedad avanza por el lote y el efecto que tienen los puntos iniclamente mayor afectados en la propagacion de la enfermedad colonizando asi la mayor parte del lote con un movimiento desde bordes hacia el centro.

Analisis temporal y prediccion de datos para los mese 42, 44 y 46 -> dias 1260, 1320 y 1380.

Ahora se desea predicir el comportamiento de esta enfermedad para los mesees 42, 44 y 46; para esto se deben utilizar modelos de prediccion y para este caso en especifico se empleara un modelo logistico y otro de regresion lineal simple.

Ajuste modelo temporal Logistico

Para determinar con que modelo se generaran los datos para los analisis posteriores se uso como base los datos de severidad del dia 0 al 1200.

[1] 5 5 5 0 0 0
[1] 4 4 5 0 0 0
Estos son los datos de severidad para el dia 1260 usando el modelo logistico, pero ya se observan las primeras inconsistencias ya que para el dia 1200 los primeros dos datos de severidad ya eran 5,el valor mas alto de la escala, y para el dia 1260 disminuyeron a 4 y esto en terminos agronomicos no es posible.
[1] 4 4 5 0 0 0

Nuevamente se calculo la prediccion para el dia 1320 y los primeros dos valores se mantienen en 4, cosa que no es posible.

[1] 3 3 5 0 0 0

Finalemente se calcula el dia 1380, pero los primeros dos valores decrecen a 3 evidenciando que el modelo no es adecuado ya que no se ajusta a la realidad.

Ajuste modelo temporal a partir de regresion lineal simple

Ahora se procede a determinar los valores a partir de regresion lineal simple, ya que el model logistico no suministro predicciones adecuadas.

Calculo de los meses 42, 44 y 46

[1] 5 5 5 0 0 0
[1] 5 5 5 0 0 0
[1] 5 5 5 0 0 0
A partir de estos tres valores que corresponden a las predicciones de los meses 42, 44 y 46 respectivamente, se observa que este modelo genero datos consistentes con los valores empleados para su prediccion, por tanto a partir de estos datos se prosigue con los siguientes analisis.

Organizando los valores inferidos en tabla de datos original

Una ves se obtuvieron los datos a partir de las predicciones del modelo de regresion lineal simple, se colocan en la base de datos original y a partir de todos los valores de severidad se procede con el calculo de AUDPC para los meses 42, 44 y 46.

Calculando AUDPC para los valores, fechas estimadas e incluyendo estos datos en la base de datos inicial

Luego de generar los datos de AUDPC para los meses 42, 44 y46 se colocan en la matriz inicial, para obtener completamente la base de datos no solo con los valores iniciales sino con los valores estimados paro los meses posteriores.

Incidencia en funcion del tiempo y con modelacion

Otro factor clave a evaluar es la incidencia, esta nos permite determinar el progreso de la enfermiedad en el lote respecto al tiempo

La figura representa la incidencia de la enfermedad en el cultivo con los datos muestreados hasta el día 1200 y lo proyectado según el modelo para los días 1260, 1320 y 1380. En este caso se observa que el número de plantas enfermas sobre el total de plantas evaluadas es creciente, es decir, el comportamiento de incidencia de la enfermedad en plantas de aguacate en su fase inicial es lineal, posteriormente es logarítmica y finalmente a partir de los 1000 días intenta aplanarse. A partir de esta figura, se plantea que el ajuste del modelo predictivo es lineal.

modelo de incidencia


Call:
lm(formula = vinci ~ datef, data = dtinci)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.12193 -0.00425  0.00958  0.01775  0.03894 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 1.22e-01   1.41e-02    8.67  1.5e-08 ***
datef       3.28e-04   1.75e-05   18.76  5.0e-15 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.0355 on 22 degrees of freedom
Multiple R-squared:  0.941, Adjusted R-squared:  0.939 
F-statistic:  352 on 1 and 22 DF,  p-value: 5.04e-15

Posteriormente despues de utilizr un modelo de prediccion nuevamente de regresion lineal simple ya que dio buenos resultados en sevreidad se observa en los diagramas y en los datos presentados en el sumario del modelo que el R cuadrado ajustado es de 0.93 lo que es un valor aceptable para la predicicon de futuros datos a partir de este modelo.

Analisis espacial de los datos inferidos a partir de la modelacion temporal

Ahora que se tienen los datos de severidad y de AUDPC para los meses 42, 44 y 46 gracias al modelo anteriormente descrito, se procede con la elaboracion de maps que permitan ver el movimiento de esta enfermedad en el lote en los meses inferidos.

Partiendo del mapa de severidad para el dia 1200 se observa como esta enfermedad va avanzando tanto en espacio como esn severidad para los meses 42, 44 y 46.

Una mejor forma de visualizar lo anterior es descomponiendo los mapas por categorias de severidad, asi se evidencia como la mayor cantidad de puntos que estabam depositados en cierta categoria, en el siguente mapa ya avanzaron a la otra y asi sucesivamente generando una acumulacion dominante en la categoria 5 de maxima severidad.

Despues de analizar los datos de severidad se procede con el analisis de datos de AUDPC para los meses inferidos.

Graficando AUDPC

En la figura se observa cómo a través del tiempo se espera que se dé el avance de la enfermedad, la cual cada vez será más severa, es decir, los puntos color rojo al ser más grandes, indican que el efecto del AWC atacará cada vez más plantas y en mayor intensidad. Esto nos puede dar una idea de la velocidad de dispersión de los patógenos, asociado a las labores agronómicas desarrolladas en el cultivo, con el fin de generar estrategias que permitan manejar la enfermedad, principalmente en los focos de infección (zonas con mayor cantidad y tamaño de puntos). Por ejemplo, este complejo se puede dispersar por agua de riego, herramientas o material contaminado, malezas hospederas, entre otras; teniendo en cuenta esta característica del complejo, es oportuno realizar un manejo de malezas, descontaminación de herramientas, eliminación de desechos y plantas infectadas, asegurar un buen drenaje y flujo de agua que impidan el desarrollo óptimo de los patógenos y a su vez evitar el trastorno de hipoxia-anoxia, entre otras prácticas.

Relacionando las figuras anteriores , es importante tener en cuenta el período de tiempo crítico en el cual se debe tener más cuidado (aproximadamente previo a los 800 días), pues después de pasado este tiempo, es más difícil controlar la enfermedad.

Analisis de interpolacion

“Kriging Bayesiano para el dia 1200”

“Kriging Bayesiano para el dia 1200”

En la figura se puede evidenciar claramente como se encuentran distribuidos los focos de la enfermedad con base en los datos, en la zona del margen occidental del lote se evidencia un alto progreso de la enfermedad, así como en la zona nororiental y un poco hacia el centro del lote. Adicionalmente, al compararla con las figuras aneriores del analisis espacial para datos inferidos (a los 60 días vs a los 1200 días de muestreo, respectivamente) se comprueba que los focos iniciales (puntos azul claro de mayor tamaño) posteriormente representarán las zonas mas afectadas que requieren mayor atención y que son principal fuente de inoculo (representadas de color rojo y naranja en esta figura). Esta diferenciación en el espacio permite realizar un manejo diferencial, identificando las áreas que puedan tener condiciones desfavorables, como un mal manejo agronómico (presencia de malezas, suelos anegados, presencia de residuos contaminados, etc…) o características específicas del terreno (como el nivel freático, altura, parches en condición de salinidad, etc…), con el fin de controlar los focos del problema y manteniendo sanas otras áreas del lote.
“Kriging Bayesiano para el dia 1260” “Kriging Bayesiano para el dia 1320” “Kriging Bayesiano para el dia 1380”

Con base en el modelo realizado se tienen las simulaciones de las ultimas tres figuras en donde se presenta la predicción para los meses 42 (D1260), 44 (D1320) y 46 (D1380). Los cuales presentan una distribución espacial muy similar, lo que comprueba la viabilidad del modelo utilizado, pues es congruente al compararlo entre los mismos meses pues sigue una dispersión lógica.

Los resultados obtenidos permiten inferir que el modelo es útil y funcional para contribuir al manejo de la enfermedad, ya que muestra las áreas mayormente afectadas que requieren atención prioritaria (y así evitar la propagación o dispersión del complejo) y a su vez, no solo muestra el diagnóstico actual del lote, sino también es posible predecir el comportamiento a futuro de la enfermedad permitiendo actuar a tiempo, con la ventaja de visualizar de forma más amigable los resultados. Lo anterior se cumple mientras el manejo se realice en el momento adecuado, dado que las plantas severamente enfermas deben ser eliminadas, disminuyendo las ganancias para el agricultor. Sin embargo, es importante asociarlo con otras herramientas, pues por sí sola no aseguran el éxito del manejo de la enfermedad. Se puede añadir un monitoreo constante, prácticas preventivas (como por ejemplo un fungicida protectante o usar un sistema de riego adecuado), manejo integrado de plagas, enfermedades y malezas, alimentación de la base de datos para mejorar la predicción del modelo, entre otras; de esta manera se aumentan las probabilidades de tener un cultivo sano, con gran potencial agronómico que supla las necesidades del mercado, aumentando las ganancias del agricultor.

Referencias

  • Gil, J. G. 2018. Avocado wilt complex disease, implications and management in Colombia. Revista Facultad Nacional de Agronomía Medellín. 71(2) DOI: 10.15446/rfna.v71n2.66465

  • Gil, J. G. y Morales, J. 2020. Development and validation of severity scales of avocado wilt complex caused by Phytophthora cinnamomi, Verticillium dahliae and hypoxia-anoxia disorder and their physiological responses in avocado plants. Agronomía Colombiana. DOI: 10.15446/agron.colomb.v38n1.78527

  • , J. G,. y Morales, J. 2020. Integrated proposal for management of root rot caused by Phytophthora cinnamomi in avocado cv. Hass crops DOI: 10.1016 / j.cropro.2020.105271

  • Gil, J. G y Peterson, A. 2019. Potential distributions of the most important diseases affecting Hass avocado in Antioquia Colombia. Journal of Plant Protection Research. Vol. 59, No. 2: 214–228, 2019 DOI: 10.24425/jppr.2019.129288

ANEXOS

Mapas de severidad de los dias 0 a 1200 (aproximacion inicial.)

Mismos mapas de severidad de los dias 0 a 1200 pero empleando ggplot2

LS0tDQp0aXRsZTogIk1PREVMQUNJw5NOIEVTUEFDSUFMIFkgVEVNUE9SQUwgREVMIENPTVBMRUpPIERFIE1BUkNISVRFWiBERUwgQUdVQUNBVEUgIChBV0MpIg0KYXV0aG9yOiB8IA0KICB8IE9zY2FyIEp1bGlhbiBMYSBSb3R0YSwgRGllZ28gQW5kcsOpcyBNYXJ0w61uZXosIEFuYSBNYXJpYSBGbG9yacOhbiwgQW5hIE1hcsOtYSBHYXJ6w7NuLCBLZWxseSBKaG9qYW5hIEFsemF0ZS4NCiAgfCBVbml2ZXJzaWRhZCBOYWNpb25hbCBkZSBDb2xvbWJpYS4NCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCg0KDQoNCg0KDQoNCiMgSW50cm9kdWNjacOzbg0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCkVsIGN1bHRpdm8gZGUgYWd1YWNhdGUgKFBlcnNlYSBhbWVyaWNhbmEpIGVuIENvbG9tYmlhIGhhIGlkbyB0b21hbmRvIGdyYW4gaW1wb3J0YW5jaWEgcmVjaWVudGVtZW50ZSBkZWJpZG8gYSBzdSBwb3RlbmNpYWwgZGUgZXhwb3J0YWNpw7NuIHkgY29uc3VtbyBpbnRlcm5vIHBlciBjw6FwaXRhIGNyZWNpZW50ZS4gRGVudHJvIGRlIGxvcyBwcmluY2lwYWxlcyBsaW1pdGFudGVzIHNlIGVuY3VlbnRyYSBlbCBjb21wbGVqbyBkZSBtYXJjaGl0ZXogZGVsIGFndWFjYXRlIChDTUE7IEFXQyBlbiBpbmdsw6lzKSwgcXVlIHNlIHJlZmllcmUgYWwgY29tcGxlam8gZGUgcGF0b2xvZ8OtYXMgb2Nhc2lvbmFkYXMgcG9yIGRpZmVyZW50ZXMgYWdlbnRlcyBjYXVzYWxlcyBkZSBvcmlnZW4gYmnDs3RpY28gbyBhYmnDs3RpY28sIHF1ZSBhZmVjdGFuIHRvZG9zIGxvcyBlc3RhZG9zIGZlbm9sw7NnaWNvcyBkZWwgY3VsdGl2byBlbiBsYSB6b25hIHJhZGljYWwgeSBiYXNhbC4gTG9zIGFnZW50ZXMgY2F1c2FsZXMgbcOhcyBjb211bmVzIGFzb2NpYWRvcyBjb24gQVdDIGVuIENvbG9tYmlhIHNvbiBQaHl0b3BodGhvcmEgY2lubmFtb21pIHkgVmVydGljaWxsaXVtIGRhaGxpYWUsIHkgZWwgdHJhc3Rvcm5vIGRlIGhpcG94aWEtYW5veGlhIGVuIHBsw6FudHVsYXMgeSBwbGFudGFzIGFkdWx0YXMuDQoNCkVsIG9iamV0aXZvIGRlIGVzdGUgdGFsbGVyIGVzIHByZXNlbnRhciB1biBhbsOhbGlzaXMgZXNwYWNpYWwgeSB0ZW1wb3JhbCBhIG5pdmVsIGRlIGZpbmNhIHF1ZSBwZXJtaXRhIHRvbWFyIGRlY2lzaW9uZXMgYWNlcnRhZGFzIGRlIG1hbmVqbyBkZSBlc3RhIHByb2JsZW3DoXRpY2EgZW4gY2FtcG8uIExvcyBkYXRvcyBhbmFsaXphZG9zIGZ1ZXJvbiBvYnRlbmlkb3MgZGUgdW5hIGJhc2UgZGUgZGF0b3MgY29uIGNvb3JkZW5hZGFzIHkgbGEgZXZhbHVhY2nDs24gZGUgbGEgaW5jaWRlbmNpYSB5IHNldmVyaWRhZCBlbiA5MDMgcGxhbnRhcyBkZSBhZ3VhY2F0ZSAoY29uIHVuYSBlc2NhbGEgZGUgMCBhIDUsIHNpZW5kbyA1IGVsIHF1ZSByZXByZXNlbnRhIGxhIG1heW9yIHNldmVyaWRhZCksIGVuIHVuIMOhcmVhIGRlIDQgaGEgdWJpY2FkYSBlbiBNYW7DrSwgQ2FzYW5hcmUsIGR1cmFudGUgdW4gcGVyaW9kbyBkZSA0MCBtZXNlcywgY29uIGRhdG9zIGNhZGEgNjAgZMOtYXMuIFBhcmEgbGEgbW9kZWxhY2nDs24gc2UgdXNhcm9uIGhlcnJhbWllbnRhcyBkZSBzb2Z0d2FyZSB0YWxlcyBjb21vIFIgU3R1ZGlvLCBBcmNnaXMgMTAuNQ0KPGRpdi8+DQoNCg0KDQojIEFuYWxpc2lzIGV4cGxvcmF0b3Jpby4NCg0KYGBge3IsIGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFfQ0KdGFsbGVyPVRhbGxlcl9lcGkNCnRhbGxlcg0KcGxvdCh0YWxsZXIkRWFzdGluZyx0YWxsZXIkTm9ydGhpbmcscGNoPTIwLGNleD0wLjUsY29sPSJEYXJrcmVkIixtYWluPSJNYXBhIGRlIGxhIHpvbmEgZGUgZXN0dWRpbyIseGxhYj0iT2NjaWRlbnRlIC0gT3JpZW50ZSIsIHlsYWI9IlN1ciAtIE5vcnRlIikNCiN2aXN1YWxpemFjaW9uIGRlIGRhdG9zIGkgbWFwZW8gZGUgcHVudG9zIGluaWNpYWxlcw0KYGBgDQpFbiBlc3RhIGltYWdlbiBzZSBvYnNlcnZhbiBsb3MgcHVudG9zIG11ZXN0cmVhZG9zIGVuIGVsIGxvdGUgcHJvdmllbmRvIGFzaSBsYSBmb3JtYSBkZWwgbG90ZSBkZSBlc3R1ZGlvLg0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NClBvc3Rlcmlvcm1lbnRlIHBhcmEgaGFjZXIgdW4gYW5hbGlzaXMgZXhwbG9yYXRvcmlvIHNlIGdyYWZpY2FyYW4gbG9zIGRhdG9zIGRlIEFVRFBDIGRlbCBkaWEgMTIwMCByZXNwZWN0byBhIGxvcyBwdW50b3MgbXVlc3RyZWFkb3MgY29uIGVsIGZpbiBkZSBpZGVudGlmaWNhciBwYXRyb25lcyBlbiBsYSBlbmZlcm1lZGFkIG8gYXNvY2lhY2lvbmVzIGRlcGVuZGllbnRlcyBkZSBwcm94aW1pZGlkYWQgZGUgcHVudG9zLg0KPGRpdi8+DQoNCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFfQ0KbGlicmFyeShhZ3JpY29sYWUpDQpzZXY9dGFsbGVyWyw4OjI4XQ0KZGF0ZT1zZXEoMCwxMjAwLGJ5PTYwKQ0KYXVjPWF1ZHBjKHNldixkYXRlKQ0KcGxvdCh0YWxsZXIkT1JJR19GSUQsdGFsbGVyJEFVRFBDLG1haW49ICJQcmltZXJhIHZpc3VhbGl6YWNpb24gZ3JhZmljYSBkZSBkYXRvcyAtIGRpYSAxMjAwICIseGxhYj0iSUQgZGVsIHB1bnRvIiwgeWxhYj0iQVVEUEMiKQ0KIyB2aXN1YWxpemFjaW9uIGRlIGRhdG9zIGRlIGFydWEgYmFqbyBsYSBjdXJ2YSBkZSBwcm9ncmVzbyBkZSBlbmZlcm1lZGFkLCBwb3IgcHVudG8gZW4gbWFwYQ0KYGBgDQpFbiBlZmVjdG8gIHNlIHB1ZWRlIHZpc3VhbGlyYXIgY29tcG9ydGFtaWVudG9zIHNpbWlsYXJlcyBlbnRyZSBsb3MgcHVudG9zIGNlcmNhbm9zIGVudHJlIHNpIHlhIHF1ZSBzZSBkZXRlY3RhIGRlIGZvcm1hIGVtcGlyaWNhIGNpZXJ0YXMgYWdydXBhY2lvbmVzIGRlIHB1bnRvcy4NCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQpQb3Nlcmlvcm1lbnRlIHNlIGRlc2VhIG9ic2VydmFyIGRlIG1hbmVyYSBlc3BhY2lhbCBlc3RhIGRpc3RyaWJ1Y2lvbiBkZSBhc29jaWFjaW9uZXMgZW50cmUgcHVudG9zIHlhIHF1ZSBzZSBxdWllcmUgZXZpZGVuY2lhciBlc3RhIGFzb2NpYWNpb24gZGUgZm9ybWEgcXVlIHBlcm1pdGEgbGEgdG9tYSBkZSBkZWNpc2lvbmVzIHJlc3BlY3RvIGEgbWVuZWpvIG9hbGd1bmEgYWN0aXZpZGFkIGFmaW4uDQo8ZGl2Lz4NCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFfQ0KcGxvdCh0YWxsZXIkRWFzdGluZyx0YWxsZXIkTm9ydGhpbmcscGNoPTIwLGNleD0wLjAwMDM1KnRhbGxlciRBVURQQyx4bGFiPSJFYXN0aW5nIg0KICAgICAseWxhYj0iTm9ydGhpbmciLGNvbD0iZGFya3JlZCIsbWFpbj0iTWFwYSBkZSBBVURQQyBkaWEgMTIwMCIpDQoNCiNtYXBlbyBkZSBsb3MgcHVudG9zIGRvbmRlIGVsIEFVRFBDIGZ1ZSBtYXlvciBlbiBlbCBsb3RlIHBhcmEgZWwgbWVzIDEyMDANCmBgYA0KQSBwYXJ0aXIgZGUgbGEgdmlzdWFsaXphY2lvbiBkZSBsb3MgZGF0b3MgZGUgQVVEUEMgcGFyYSBlbCBkaWEgMTIwMCBkZSBmb3JtYSBncmFmaWNhIHNlIG9ic2VydmEgcXVlIGVuIGVsIGxvdGUgbG9zIG1heW9yZXMgdmFsb3JlcyBzZSBoYWxsYW4gZW4gYWdydXBhY2lvbmVzIHkgZGlzdHJpYnVpZG9zIGhhY2lhIGxvcyBib3JkZXMsIGNvbiBjaWVydG8gcmVjb3JyaWRvIGhhY2lhIGVsIGNlbnRyby4NCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFfQ0KcGFyKG1mcm93PWMoMiwyKSkNCmhpc3QodGFsbGVyJEFVRFBDLG1haW4gPSAiSGlzdG9ncmFtYSBkZSBBVURQQyBkaWEgMTIwMCIseGxhYiA9ICJBVURQQyIpDQphdWMxPXNxcnQodGFsbGVyJEFVRFBDKQ0KaGlzdChhdWMxLG1haW4gPSAiSGlzdG9ncmFtYSBkZSBzcXJ0KEFVRFBDKSBkaWEgMTIwMCIseGxhYiA9ICJzcXJ0KEFVRFBDKSIpDQphdWMyPWxvZyh0YWxsZXIkQVVEUEMpDQpoaXN0KGF1YzIsIG1haW4gPSAiSGlzdG9ncmFtYSBkZSBsb2coQVVEUEMpIGRpYSAxMjAwIix4bGFiID0gImxvZyhBVURQQykiKQ0KI2V2aWRlbmNpYSBkZSBubyBub3JtYWxpZGFkIGVuIGxvcyBkYXRvcyBhdW4gaGFjaWVuZG8gdHJhbnNmb3JtYWNpb25lcw0KYGBgDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCkx1ZWdvIHNlIHRyYXRhIGRlIGlkZW50aWZpY2FyIG5vcm1hbGlkYWQgZW4gbG9zIGRhdG9zIHBlcm8gbm8gZXMgcG9zaWJsZSB5YSBxdWUgaW5pY2lhbG1lbnRlIGVzdG9zIHZhbG9yZXMgc29uIGRlIHRpcG8gY2F0ZWdvcmljbyB5YSBxdWUgcHJvdmllbmVuIGRlIHVuYSBlc2NhbGEgZGUgc2V2ZXJpZGFkIHBvciB0YW50bywgYWwgbm8gc2VyIGNvbnRpbnVvcywgY29uY2VwdG9zIGNvbW8gbm9ybWFsaWRhZCBkZSBkYXRvcyBubyBlcyBwb3NpYmxlIG9idGVuZXJsYSBwb3IgbWV0b2RvcyBjb252ZW5jaW9uYWxlcy5hZGVtYXMgbGEgYmFzZSBkZSBkYXRvcyBjdWVudGEgY29uIG11Y2hvcyBkYXRvcyBjb24gY2Vyb3MgcXVlIG5vIHNlIHB1ZWRlbiBkZXNjYXJ0YXIgeWEgcXVlIGVsIGNlcm8gZW4gdGVybWlub3MgZGUgc2V2ZXJpZGFkIGltcGxpY2Egc2FuaWRhZCBkZSBsYSBwbGFudGEgeSBlcyB1biB2YWxvciBjbGF2ZSBwYXJhIGRlY2lzaW9uZXMgZGUgdGlwbyBhZ3Jvbm9taWNvLg0KPGRpdi8+DQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmcgPSBGQUxTRSxyZXN1bHRzPSdoaWRlJ30NCnNldnQ9dChzZXYpDQptZGF0YT1kYXRhLmZyYW1lKGRhdGUsc2V2dCkNCiN0cmFuc3BvbmllbmRvIGRhdG9zIGRlIHNldmVyaWRhZCBwYXJhIGhhY2VybG9zIGNvaW5jaWRpciBjb24gdW4gdmVjdG9yIGRlIGZlY2hhcyA9IGRhdGUNCmBgYA0KDQoNCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQpBaG9yYSBzZSBkZXNlYSBvYnNlcnZhciBlbCBwYXRyb24gZGUgYXZhbmNlIG8gYXVtZW50byBkZSBsYSBzZXZlcmlkYWQgZW4gZWwgdGllbXBvLCBwYXJhIGVzdG8gc2Ugb3B0YSBwb3IgdXRpbGl6YXIgdW4gZ3JhZmljbyBjb252ZW5zaW9uYWwgc2ltaWxhciBhbCBpbmljaWFsIGRlIEFVRFBDIGRlbCBkaWEgMTIwMCByZXNwZWN0byBhIHB1bnRvcyBkZSBtdWVzdHJlbzsgcGVybyBlc3RhIHZleiBzZSBkZXNlYSBlbGFib3JhciBwYXJhIGNhZGEgZGlhIHBhcmEgZGV0ZWN0YXIgcGF0cm9uZXMgZGUgYXZhbmNlIGRlIHRpcG8gdGVtcG9yYWwuDQo8ZGl2Lz4NCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFfQ0Kc2V2dFsxMSw3ODBdDQojaWRlbnRpZmljYWNpb24gZGVsIHZhbG9yIGF0aXBpY28NCmBgYA0KRXN0ZSB2YWxvciBlcyB1biBkYXRvIGF0aXBpY28gZGVudHJvIGRlbCBkYXRhc2V0IGluaWNpYWwsIHBvciB0YW50byBzZSBjb3JyaWdlIHBhcmEgZ2VuZXJhciBsb3MgcG9zdGVyaW9yZXMgYW5hbGlzaXMgeWEgcXVlIHN1IHZhbG9yIG9yaWdpbmFsIGVzICIyIi4NCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFfQ0Kc2V2dFsxMSw3ODBdPTUNCnBhcihtZnJvdz1jKDIsMykpDQppPTENCmZvciAoaSBpbiAxOjIxKQ0Kew0KcGxvdChzZXZ0W2ksXSxtYWluID0gaSwgeGxhYiA9ICJJRCBkZSBwdW50byIseWxhYiA9ICJTZXZlcmlkYWQiKQ0KbGluZXMoc2V2dFtpLF0pDQppKzENCn0NCiNjb3JyZWNpb24gZGVsIHZhbG9yIHkgbnVldmEgZWplY3VjaW9uIGRlIGRhdG9zLCBpbXBsaWNpdGFtZW50ZSBzZSBvYnNlcnZhIHVuYSBkZXBlbmRlbmNpYSBlc3BhY2lhbCBvIGZvY29zIGRlIGF1bWVudG8gZGUgZW5mZXJtZWRhZA0KYGBgDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCkRlc3B1ZXMgZGUgY29ycmVnaXIgZWwgZGF0byBhdGlwaWNvIHNlIGdlbmVyYW4gZXN0b3MgZ3JhZmljb3MgcXVlIG11ZXN0cmFuIGNvbW8gc2UgdmEgZGlzdHJpYnVpZW5kbyBlbCBhdW1lbnRvIGRlIHNldmVyZGlkYWQgcG9yIHpvbmFzIHNpZ3VpZW5kbyBlbCBtaXNtbyBwYXRyb24gaGFsbGFkbyBlbiBlbCBncmFmaWNvIGRlIEFVRFBDIGRlbCBkaWEgMTIwMCByZXNwZWN0byBhbCBwdW50byBkZSBtdWVzdHJlbyxldmlkZW5jaWFuZG8gYXNpIHF1ZSBlbCBhdW1lbnRvIGRlIGxhIGVuZmVybWVkYWQgc2UgZGEgYSB0cmF2ZXogZGVsIHRpZW1wbyBhIHBhcnRpciBkZSBsYSBwcm94aW1pZGFkIGEgbG9zIHB1bnRvcyBtYXlvcm1lbnRlIGFmZWN0YWRvcy4gTG9zIHRpdHVsb3MgZGUgbG9zIGdyYWZpY29zIGVzdGFuIGVuIGZ1bmNpb24gZGUgbGEgcG9zaWNpb24gZGUgbGEgY29sdW1uYSBkZSBsb3MgZGF0b3MgZGVzZGUgZWwgZGlhIDAgYWwgMTIwMCBlbiBlbCBkYXRhc2V0IGluaWNpYWwuDQo8ZGl2Lz4NCg0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0V9DQp0YWxsZXJbNzgwLDE4XT0yDQojY29ycmVlY2lvbiBkZWwgdmFsb3IgYXRpcGljbyBlbiBlbCBkYXRhc2V0IGluaWNpYWwNCmBgYA0KDQojIEFuYWxpc2lzIGVzcGFjaWFsIHkgdGVtcG9yYWwgZGUgbGEgYmFzZSBkZSBkYXRvcy4NCg0KDQoNCg0KIyMgQW5hbGlzaXMgZXNwYWNpYWwuDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KQUhvcmEgc2UgZGVzZWEgc2FiZXIgY29tbyBlcyBsYSBkaXN0cmlidWNpb24gZXNwYWNpYWwgZGUgbG9zIGdyYWZpY29zIGFudGVyaW9ybWVudGUgcmVhbGl6YWRvcywgcGVybyB5YSBxdWUgZXN0byBnZW5lcmFyaWEgMjEgbWFwYXMgZGUgZGlzdHJpYnVjaW9uIGRlIGxhIGVuZmVybWVkYWQsIHNvbG8gc2UgdmFuIGEgbW9zdHJhciA0LCBwZXJvIHNlIGRlamFyYW4gdG9kb3MgZW4gbGEgc2VjY2lvbiBkZSBhbmV4b3MuIA0KPGRpdi8+DQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmcgPSBGQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbTE9Z2dwbG90KGRhdGEgPSB0YWxsZXIsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT0gRDApKStnZ3RpdGxlKCJEMCIpICArdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQptNz1nZ3Bsb3QoZGF0YSA9IHRhbGxlcixhZXMoeD1FYXN0aW5nLHk9Tm9ydGhpbmcsY29sb3I9RDM2MCkpK2dlb21fcG9pbnQoYWVzKHNpemU9IEQzNjApKStnZ3RpdGxlKCJEMzYwIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KbTE0PWdncGxvdChkYXRhID0gdGFsbGVyLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1ENzgwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT0gRDc4MCkpK2dndGl0bGUoIkQ3ODAiKSArdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQptMjE9Z2dwbG90KGRhdGEgPSB0YWxsZXIsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQxMjAwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT1EMTIwMCkpK2dndGl0bGUoIkQxMjAwIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KI209Z2dwbG90KGRhdGEgPSB0YWxsZXIsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQxMjAwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT1EMTIwMCkpK2dndGl0bGUoIkQxMjAwIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArIGZhY2V0X2dyaWQoRDEyMDAgfiAuKQ0KIyByZXByZXNlbnRhY2lvbiBncmFmaWNhIHVzYW5kbyBHZ3Bsb3QyIHVsdGltbyBtYXBhIHNlIGRlc2NvbXB1c28gcG9yIGNhdGVyb3JpYSBkZSBzZXZlcmlkYWQNCm0xO203O20xNDttMjENCmBgYA0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQpBIHBhcnRpciBkZSBlc3RvcyBjdWF0cm8gbWFwYXMgZGUgZGlzdHJpYnVjaW9uIGRlIGxhIGVuZmVybWVkYWQgc2Ugb2JzZXJ2YSBjb21vIGxhIGVuZmVybWVkYWQgYXZhbnphIHBvciBlbCBsb3RlIHkgZWwgZWZlY3RvIHF1ZSB0aWVuZW4gbG9zIHB1bnRvcyBpbmljbGFtZW50ZSBtYXlvciBhZmVjdGFkb3MgZW4gbGEgcHJvcGFnYWNpb24gZGUgbGEgZW5mZXJtZWRhZCBjb2xvbml6YW5kbyBhc2kgbGEgbWF5b3IgcGFydGUgZGVsIGxvdGUgY29uIHVuIG1vdmltaWVudG8gZGVzZGUgYm9yZGVzIGhhY2lhIGVsIGNlbnRyby4NCjxkaXYvPg0KDQojIyBBbmFsaXNpcyB0ZW1wb3JhbCB5IHByZWRpY2Npb24gZGUgZGF0b3MgcGFyYSBsb3MgbWVzZSA0MiwgNDQgeSA0NiAtPiBkaWFzIDEyNjAsICAxMzIwIHkgMTM4MC4NCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQpBaG9yYSBzZSBkZXNlYSBwcmVkaWNpciBlbCBjb21wb3J0YW1pZW50byBkZSBlc3RhIGVuZmVybWVkYWQgcGFyYSBsb3MgbWVzZWVzIDQyLCA0NCB5IDQ2OyBwYXJhIGVzdG8gc2UgZGViZW4gdXRpbGl6YXIgbW9kZWxvcyBkZSBwcmVkaWNjaW9uIHkgcGFyYSBlc3RlIGNhc28gZW4gZXNwZWNpZmljbyBzZSBlbXBsZWFyYSB1biBtb2RlbG8gbG9naXN0aWNvIHkgb3RybyBkZSByZWdyZXNpb24gbGluZWFsIHNpbXBsZS4NCjxkaXYvPg0KDQoqKkFqdXN0ZSBtb2RlbG8gdGVtcG9yYWwgTG9naXN0aWNvKioNCg0KUGFyYSBkZXRlcm1pbmFyIGNvbiBxdWUgbW9kZWxvIHNlIGdlbmVyYXJhbiBsb3MgZGF0b3MgcGFyYSBsb3MgYW5hbGlzaXMgcG9zdGVyaW9yZXMgc2UgdXNvIGNvbW8gYmFzZSBsb3MgZGF0b3MgZGUgc2V2ZXJpZGFkIGRlbCBkaWEgMCBhbCAxMjAwLg0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0V9DQpoZWFkKFRhbGxlcl9lcGkkRDEyMDApDQpgYGANCg0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0V9DQpsaWJyYXJ5KCJnZ3Bsb3QyIikNCmxpYnJhcnkoImdncHViciIpDQpsaWJyYXJ5KCJNb2RlbE1ldHJpY3MiKQ0KbGlicmFyeSgibWdjdiIpDQojRGF0b3MgaW5mZXJpZG9zIGRlIGxhIGZlY2hhIDEyNjAgbWVzIDQyDQppPTENCnZlY3RvcjEyNjA9YygpDQpmb3IoaSBpbiAxOjkwMyl7DQpzZXYxPXNldnRbLGldDQpkdD1kYXRhLmZyYW1lKHNldjEsZGF0ZSkNCnBvbGk8LWxtKHNldjEgfiBwb2x5KGRhdGUsIDIsIHJhdyA9IFRSVUUpLCBkYXRhID0gZHQpDQpwcmVkaWN0aW9uc3BvbCA8LSBwb2xpICU+JSBwcmVkaWN0KGR0KQ0KbmV3IDwtIGRhdGEuZnJhbWUoZGF0ZT1jKDEyNjApKSANCmluZmVyZW5jZT1wcmVkaWN0KHBvbGksIG5ld2RhdGE9bmV3LCBpbnRlcnZhbD0iY29uZmlkZW5jZSIpDQp2ZWN0b3IxMjYwPWModmVjdG9yMTI2MCxyb3VuZChpbmZlcmVuY2VbLDFdKSkNCn0NCnZlY3RvcjEyNjBbdmVjdG9yMTI2MCA9PSA3XSA8LSA1DQp2ZWN0b3IxMjYwW3ZlY3RvcjEyNjAgPT0gNl0gPC0gNQ0KaGVhZCh2ZWN0b3IxMjYwKQ0KYGBgDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KRXN0b3Mgc29uIGxvcyBkYXRvcyBkZSBzZXZlcmlkYWQgcGFyYSBlbCBkaWEgMTI2MCB1c2FuZG8gZWwgbW9kZWxvIGxvZ2lzdGljbywgcGVybyB5YSBzZSBvYnNlcnZhbiBsYXMgcHJpbWVyYXMgaW5jb25zaXN0ZW5jaWFzIHlhIHF1ZSBwYXJhIGVsIGRpYSAxMjAwIGxvcyBwcmltZXJvcyBkb3MgZGF0b3MgZGUgc2V2ZXJpZGFkIHlhIGVyYW4gNSxlbCB2YWxvciBtYXMgYWx0byBkZSBsYSBlc2NhbGEsIHkgcGFyYSBlbCBkaWEgMTI2MCBkaXNtaW51eWVyb24gYSA0IHkgZXN0byBlbiB0ZXJtaW5vcyBhZ3Jvbm9taWNvcyBubyBlcyBwb3NpYmxlLg0KPGRpdi8+DQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmcgPSBGQUxTRX0NCiNEYXRvcyBpbmZlcmlkb3MgZGUgbGEgZmVjaGEgMTMyMCBtZXMgNDQNCmk9MQ0KdmVjdG9yMTMyMD1jKCkNCmZvcihpIGluIDE6OTAzKXsNCnNldjE9c2V2dFssaV0NCmR0PWRhdGEuZnJhbWUoc2V2MSxkYXRlKQ0KcG9saTwtbG0oc2V2MSB+IHBvbHkoZGF0ZSwgMiwgcmF3ID0gVFJVRSksIGRhdGEgPSBkdCkNCnByZWRpY3Rpb25zcG9sIDwtIHBvbGkgJT4lIHByZWRpY3QoZHQpDQpuZXcgPC0gZGF0YS5mcmFtZShkYXRlPWMoMTMyMCkpIA0KaW5mZXJlbmNlPXByZWRpY3QocG9saSwgbmV3ZGF0YT1uZXcsIGludGVydmFsPSJjb25maWRlbmNlIikNCnZlY3RvcjEzMjA9Yyh2ZWN0b3IxMzIwLHJvdW5kKGluZmVyZW5jZVssMV0pKQ0KfQ0KdmVjdG9yMTMyMFt2ZWN0b3IxMzIwID09IDhdIDwtIDUNCnZlY3RvcjEzMjBbdmVjdG9yMTMyMCA9PSA3XSA8LSA1DQp2ZWN0b3IxMzIwW3ZlY3RvcjEzMjAgPT0gNl0gPC0gNQ0KaGVhZCh2ZWN0b3IxMzIwKQ0KYGBgDQpOdWV2YW1lbnRlIHNlIGNhbGN1bG8gbGEgcHJlZGljY2lvbiBwYXJhIGVsIGRpYSAxMzIwIHkgbG9zIHByaW1lcm9zIGRvcyB2YWxvcmVzIHNlIG1hbnRpZW5lbiBlbiA0LCBjb3NhIHF1ZSBubyBlcyBwb3NpYmxlLg0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0V9DQojRGF0b3MgaW5mZXJpZG9zIGRlIGxhIGZlY2hhIDEzODAgbWVzIDQ2DQppPTENCnZlY3RvcjEzODA9YygpDQpmb3IoaSBpbiAxOjkwMyl7DQpzZXYxPXNldnRbLGldDQpkdD1kYXRhLmZyYW1lKHNldjEsZGF0ZSkNCnBvbGk8LWxtKHNldjEgfiBwb2x5KGRhdGUsIDIsIHJhdyA9IFRSVUUpLCBkYXRhID0gZHQpDQpwcmVkaWN0aW9uc3BvbCA8LSBwb2xpICU+JSBwcmVkaWN0KGR0KQ0KbmV3IDwtIGRhdGEuZnJhbWUoZGF0ZT1jKDEzODApKSANCmluZmVyZW5jZT1wcmVkaWN0KHBvbGksIG5ld2RhdGE9bmV3LCBpbnRlcnZhbD0iY29uZmlkZW5jZSIpDQp2ZWN0b3IxMzgwPWModmVjdG9yMTM4MCxyb3VuZChpbmZlcmVuY2VbLDFdKSkNCn0NCnZlY3RvcjEzODBbdmVjdG9yMTM4MCA9PSA5XSA8LSA1DQp2ZWN0b3IxMzgwW3ZlY3RvcjEzODAgPT0gOF0gPC0gNQ0KdmVjdG9yMTM4MFt2ZWN0b3IxMzgwID09IDddIDwtIDUNCnZlY3RvcjEzODBbdmVjdG9yMTM4MCA9PSA2XSA8LSA1DQpoZWFkKHZlY3RvcjEzODApDQpgYGANCkZpbmFsZW1lbnRlIHNlIGNhbGN1bGEgZWwgZGlhIDEzODAsIHBlcm8gbG9zIHByaW1lcm9zIGRvcyB2YWxvcmVzIGRlY3JlY2VuIGEgMyBldmlkZW5jaWFuZG8gcXVlIGVsIG1vZGVsbyBubyBlcyBhZGVjdWFkbyB5YSBxdWUgbm8gc2UgYWp1c3RhIGEgbGEgcmVhbGlkYWQuDQoNCioqKkFqdXN0ZSBtb2RlbG8gdGVtcG9yYWwgYSBwYXJ0aXIgZGUgcmVncmVzaW9uIGxpbmVhbCBzaW1wbGUqKioNCg0KDQpBaG9yYSBzZSBwcm9jZWRlIGEgZGV0ZXJtaW5hciBsb3MgdmFsb3JlcyBhIHBhcnRpciBkZSByZWdyZXNpb24gbGluZWFsIHNpbXBsZSwgeWEgcXVlIGVsIG1vZGVsIGxvZ2lzdGljbyBubyBzdW1pbmlzdHJvIHByZWRpY2Npb25lcyBhZGVjdWFkYXMuDQoNCg0KKipDYWxjdWxvIGRlIGxvcyBtZXNlcyA0MiwgNDQgeSA0NioqDQoNCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFfQ0KI0RhdG9zIGluZmVyaWRvcyBkZSBsYSBmZWNoYSAxMjYwIG1lcyA0Mg0KaT0xDQp2ZWN0b3IxMjYwPWMoKQ0KZm9yKGkgaW4gMTo5MDMpew0Kc2V2MT1zZXZ0WyxpXQ0KZHQ9ZGF0YS5mcmFtZShzZXYxLGRhdGUpDQpzZXZlcml0eS5sbT1sbShzZXYxfmRhdGUsZGF0YT1kdCkNCm9wdGlvbnMoZGlnaXRzPTQpDQpmaXQud2l0aC5zZTwtcHJlZGljdChzZXZlcml0eS5sbSwgc2UuZml0PVRSVUUpIA0KZGF0YS5mcmFtZShkdCwgZml0dGVkLnZhbHVlPXByZWRpY3Qoc2V2ZXJpdHkubG0pLCByZXNpZHVhbD1yZXNpZChzZXZlcml0eS5sbSksIGZpdC53aXRoLnNlKQ0KbmV3IDwtIGRhdGEuZnJhbWUoZGF0ZT1jKDEyNjApKSANCmluZmVyZW5jZT1wcmVkaWN0KHNldmVyaXR5LmxtLCBuZXdkYXRhPW5ldywgaW50ZXJ2YWw9ImNvbmZpZGVuY2UiKQ0KdmVjdG9yMTI2MD1jKHZlY3RvcjEyNjAscm91bmQoaW5mZXJlbmNlWywxXSkpDQp9DQp2ZWN0b3IxMjYwW3ZlY3RvcjEyNjAgPT0gN10gPC0gNQ0KdmVjdG9yMTI2MFt2ZWN0b3IxMjYwID09IDZdIDwtIDUNCmhlYWQodmVjdG9yMTI2MCkNCmBgYA0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0V9DQojRGF0b3MgaW5mZXJpZG9zIGRlIGxhIGZlY2hhIDEzMjAgbWVzIDQ0DQppPTENCnZlY3RvcjEzMjA9YygpDQpmb3IoaSBpbiAxOjkwMyl7DQpzZXYxPXNldnRbLGldDQpkdD1kYXRhLmZyYW1lKHNldjEsZGF0ZSkNCnNldmVyaXR5LmxtPWxtKHNldjF+ZGF0ZSxkYXRhPWR0KQ0Kb3B0aW9ucyhkaWdpdHM9NCkNCmZpdC53aXRoLnNlPC1wcmVkaWN0KHNldmVyaXR5LmxtLCBzZS5maXQ9VFJVRSkgDQpkYXRhLmZyYW1lKGR0LCBmaXR0ZWQudmFsdWU9cHJlZGljdChzZXZlcml0eS5sbSksIHJlc2lkdWFsPXJlc2lkKHNldmVyaXR5LmxtKSwgZml0LndpdGguc2UpDQpuZXcgPC0gZGF0YS5mcmFtZShkYXRlPWMoMTMyMCkpIA0KaW5mZXJlbmNlPXByZWRpY3Qoc2V2ZXJpdHkubG0sIG5ld2RhdGE9bmV3LCBpbnRlcnZhbD0iY29uZmlkZW5jZSIpDQp2ZWN0b3IxMzIwPWModmVjdG9yMTMyMCxyb3VuZChpbmZlcmVuY2VbLDFdKSkNCn0NCnZlY3RvcjEzMjBbdmVjdG9yMTMyMCA9PSA3XSA8LSA1DQp2ZWN0b3IxMzIwW3ZlY3RvcjEzMjAgPT0gNl0gPC0gNQ0KaGVhZCh2ZWN0b3IxMzIwKQ0KYGBgDQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmcgPSBGQUxTRX0NCiNEYXRvcyBpbmZlcmlkb3MgZGUgbGEgZmVjaGEgMTM4MCBtZXMgNDYNCmk9MQ0KdmVjdG9yMTM4MD1jKCkNCmZvcihpIGluIDE6OTAzKXsNCnNldjE9c2V2dFssaV0NCmR0PWRhdGEuZnJhbWUoc2V2MSxkYXRlKQ0Kc2V2ZXJpdHkubG09bG0oc2V2MX5kYXRlLGRhdGE9ZHQpDQpvcHRpb25zKGRpZ2l0cz00KQ0KZml0LndpdGguc2U8LXByZWRpY3Qoc2V2ZXJpdHkubG0sIHNlLmZpdD1UUlVFKSANCmRhdGEuZnJhbWUoZHQsIGZpdHRlZC52YWx1ZT1wcmVkaWN0KHNldmVyaXR5LmxtKSwgcmVzaWR1YWw9cmVzaWQoc2V2ZXJpdHkubG0pLCBmaXQud2l0aC5zZSkNCm5ldyA8LSBkYXRhLmZyYW1lKGRhdGU9YygxMzgwKSkgDQppbmZlcmVuY2U9cHJlZGljdChzZXZlcml0eS5sbSwgbmV3ZGF0YT1uZXcsIGludGVydmFsPSJjb25maWRlbmNlIikNCnZlY3RvcjEzODA9Yyh2ZWN0b3IxMzgwLHJvdW5kKGluZmVyZW5jZVssMV0pKQ0KfQ0KdmVjdG9yMTM4MFt2ZWN0b3IxMzgwID09IDddIDwtIDUNCnZlY3RvcjEzODBbdmVjdG9yMTM4MCA9PSA2XSA8LSA1DQpoZWFkKHZlY3RvcjEzODApDQpgYGANCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KQSBwYXJ0aXIgZGUgZXN0b3MgdHJlcyB2YWxvcmVzIHF1ZSBjb3JyZXNwb25kZW4gYSBsYXMgcHJlZGljY2lvbmVzIGRlIGxvcyBtZXNlcyA0MiwgNDQgeSA0NiByZXNwZWN0aXZhbWVudGUsIHNlIG9ic2VydmEgcXVlIGVzdGUgbW9kZWxvIGdlbmVybyBkYXRvcyBjb25zaXN0ZW50ZXMgY29uIGxvcyB2YWxvcmVzIGVtcGxlYWRvcyBwYXJhIHN1IHByZWRpY2Npb24sIHBvciB0YW50byBhIHBhcnRpciBkZSBlc3RvcyBkYXRvcyBzZSBwcm9zaWd1ZSBjb24gbG9zIHNpZ3VpZW50ZXMgYW5hbGlzaXMuDQo8ZGl2Lz4NCioqT3JnYW5pemFuZG8gbG9zIHZhbG9yZXMgaW5mZXJpZG9zIGVuIHRhYmxhIGRlIGRhdG9zIG9yaWdpbmFsKioNCg0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0V9DQpwcmVkPWRhdGEuZnJhbWUodmVjdG9yMTI2MCx2ZWN0b3IxMzIwLHZlY3RvcjEzODApDQpuYW1lcyhwcmVkKT1jKCJEMTI2MCIsIkQxMzIwIiwiRDEzODAiKQ0KI3ByZWQNCnR3cHJlZD1kYXRhLmZyYW1lKHRhbGxlclsxOjI4XSxwcmVkKSN1bmllbmRvIGEgbGEgYmFzZSBkZSBkYXRvcyBvcmlnaW5hbA0KdHdwcmVkDQpgYGANCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KVW5hIHZlcyBzZSBvYnR1dmllcm9uIGxvcyBkYXRvcyBhIHBhcnRpciBkZSBsYXMgcHJlZGljY2lvbmVzIGRlbCBtb2RlbG8gZGUgcmVncmVzaW9uIGxpbmVhbCBzaW1wbGUsIHNlIGNvbG9jYW4gZW4gbGEgYmFzZSBkZSBkYXRvcyBvcmlnaW5hbCB5IGEgcGFydGlyIGRlIHRvZG9zIGxvcyB2YWxvcmVzIGRlIHNldmVyaWRhZCBzZSBwcm9jZWRlIGNvbiBlbCBjYWxjdWxvIGRlIEFVRFBDIHBhcmEgbG9zIG1lc2VzIDQyLCA0NCB5IDQ2Lg0KPGRpdi8+DQoNCioqQ2FsY3VsYW5kbyBBVURQQyBwYXJhIGxvcyB2YWxvcmVzLCBmZWNoYXMgZXN0aW1hZGFzIGUgaW5jbHV5ZW5kbyBlc3RvcyBkYXRvcyBlbiBsYSBiYXNlIGRlIGRhdG9zIGluaWNpYWwqKg0KDQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmcgPSBGQUxTRX0NCmxpYnJhcnkoYWdyaWNvbGFlKQ0KI2F1ZHBjICBEMTIwMA0Kc2V2Mj10d3ByZWRbLDg6MjhdDQpkYXRlPXNlcSgwLDEyMDAsYnk9NjApDQphdWM9YXVkcGMoc2V2LGRhdGUpDQojYXVkcGMgRDEyNjANCnNldjI9dHdwcmVkWyw4OjI5XQ0KZGF0ZTI9c2VxKDAsMTI2MCxieT02MCkNCmF1Y3AxPWF1ZHBjKHNldjIsZGF0ZTIpDQojYXVkcGMgRDEzMjANCnNldjI9dHdwcmVkWyw4OjMwXQ0KZGF0ZTI9c2VxKDAsMTMyMCxieT02MCkNCmF1Y3AyPWF1ZHBjKHNldjIsZGF0ZTIpDQojYXVkcGMgRDEzODANCnNldjI9dHdwcmVkWyw4OjMxXQ0KZGF0ZTI9c2VxKDAsMTM4MCxieT02MCkNCmF1Y3AzPWF1ZHBjKHNldjIsZGF0ZTIpDQoNCmBgYA0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0V9DQojVW5pZW5kbyBsb3MgdmVjdG9yZXMgZGUgQVVEUEMgYSBsYSBiYXNlIGRlIGRhdG9zIG9yaWdpbmFsDQphdWNzPWRhdGEuZnJhbWUoYXVjLGF1Y3AxLGF1Y3AyLGF1Y3AzKQ0KbmFtZXMoYXVjcyk9YygiQVVEUEMxMjAwIiwiQVVEUEMxMjYwIiwiQVVEUEMxMzIwIiwiQVVEUEMxMzgwIikNCnRmaW5hbD1kYXRhLmZyYW1lKHR3cHJlZCxhdWNzLHRhbGxlciRpbmNpZGVuY2lhKQ0KdGZpbmFsDQpgYGANCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KTHVlZ28gZGUgZ2VuZXJhciBsb3MgZGF0b3MgZGUgQVVEUEMgcGFyYSBsb3MgbWVzZXMgNDIsIDQ0IHk0NiBzZSBjb2xvY2FuIGVuIGxhIG1hdHJpeiBpbmljaWFsLCBwYXJhIG9idGVuZXIgY29tcGxldGFtZW50ZSBsYSBiYXNlIGRlIGRhdG9zIG5vIHNvbG8gY29uIGxvcyB2YWxvcmVzIGluaWNpYWxlcyBzaW5vIGNvbiBsb3MgdmFsb3JlcyBlc3RpbWFkb3MgcGFybyBsb3MgbWVzZXMgcG9zdGVyaW9yZXMuDQo8ZGl2Lz4NCg0KKipJbmNpZGVuY2lhIGVuIGZ1bmNpb24gZGVsIHRpZW1wbyB5IGNvbiBtb2RlbGFjaW9uKioNCg0KT3RybyBmYWN0b3IgY2xhdmUgYSBldmFsdWFyIGVzIGxhIGluY2lkZW5jaWEsIGVzdGEgbm9zIHBlcm1pdGUgZGV0ZXJtaW5hciBlbCBwcm9ncmVzbyBkZSBsYSBlbmZlcm1pZWRhZCBlbiBlbCBsb3RlIHJlc3BlY3RvIGFsIHRpZW1wbw0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0V9DQpkYXRlZj1zZXEoMCwxMzgwLGJ5PTYwKQ0KaT04DQp2aW5jaT1jKCkNCmZvcihpIGluIDg6MzEpew0KdnBydWViYT10ZmluYWxbLGldDQp2cHJ1ZWJhW3ZwcnVlYmEgPT0yXSA8LSAxDQp2cHJ1ZWJhW3ZwcnVlYmEgPT0zXSA8LSAxDQp2cHJ1ZWJhW3ZwcnVlYmEgPT00XSA8LSAxDQp2cHJ1ZWJhW3ZwcnVlYmEgPT01XSA8LSAxDQp2cHJ1ZWJhMj1zdW0odnBydWViYSkvOTAzDQp2aW5jaT1jKHZpbmNpLHJvdW5kKHZwcnVlYmEyLDMpKQ0KdmluY2kNCn0NCiN2aW5jaQ0KcGxvdChkYXRlZix2aW5jaSx4bGFiPSJUaWVtcG8iLHlsYWI9IkluY2lkZW5jaWEiLG1haW49IkluY2lkZW5jaWEgcmVzcGVjdG8gYWwgdGllbXBvIikNCmBgYA0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQpMYSBmaWd1cmEgcmVwcmVzZW50YSBsYSBpbmNpZGVuY2lhIGRlIGxhIGVuZmVybWVkYWQgZW4gZWwgY3VsdGl2byBjb24gbG9zIGRhdG9zIG11ZXN0cmVhZG9zIGhhc3RhIGVsIGTDrWEgMTIwMCB5IGxvIHByb3llY3RhZG8gc2Vnw7puIGVsIG1vZGVsbyBwYXJhIGxvcyBkw61hcyAxMjYwLCAxMzIwIHkgMTM4MC4gRW4gZXN0ZSBjYXNvIHNlIG9ic2VydmEgcXVlIGVsIG7Dum1lcm8gZGUgcGxhbnRhcyBlbmZlcm1hcyBzb2JyZSBlbCB0b3RhbCBkZSBwbGFudGFzIGV2YWx1YWRhcyBlcyBjcmVjaWVudGUsIGVzIGRlY2lyLCBlbCBjb21wb3J0YW1pZW50byBkZSBpbmNpZGVuY2lhIGRlIGxhIGVuZmVybWVkYWQgZW4gcGxhbnRhcyBkZSBhZ3VhY2F0ZSBlbiBzdSBmYXNlIGluaWNpYWwgZXMgbGluZWFsLCBwb3N0ZXJpb3JtZW50ZSBlcyBsb2dhcsOtdG1pY2EgeSBmaW5hbG1lbnRlIGEgcGFydGlyIGRlIGxvcyAxMDAwIGTDrWFzIGludGVudGEgYXBsYW5hcnNlLiBBIHBhcnRpciBkZSBlc3RhIGZpZ3VyYSwgc2UgcGxhbnRlYSBxdWUgZWwgYWp1c3RlIGRlbCBtb2RlbG8gcHJlZGljdGl2byBlcyBsaW5lYWwuDQo8ZGl2Lz4NCg0KKioqbW9kZWxvIGRlIGluY2lkZW5jaWEqKioNCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFfQ0KZHRpbmNpPWRhdGEuZnJhbWUodmluY2ksZGF0ZWYpDQppbmNpLmxtPWxtKHZpbmNpfmRhdGVmLGRhdGE9ZHRpbmNpKQ0Kb3B0aW9ucyhkaWdpdHM9NCkNCmZpdC53aXRoLnNlMjwtcHJlZGljdChpbmNpLmxtLCBzZS5maXQ9VFJVRSkgDQojZGF0YS5mcmFtZShkdGluY2ksIGZpdHRlZC52YWx1ZT1wcmVkaWN0KGluY2kubG0pLCByZXNpZHVhbD1yZXNpZChpbmNpLmxtKSwgZml0LndpdGguc2UyKQ0KbmV3MiA8LSBkYXRhLmZyYW1lKGRhdGVmPWMoMTQ0MCkpIyBhY2Egc2UgY29sb2NhIGxhIGZlY2hhIG8gbGFzIGZlY2hhcyBxdWUgc2UgcXVpZXJlbiBpbmZlcmlyIA0KaW5mZXJlbmNlMj1wcmVkaWN0KGluY2kubG0sIG5ld2RhdGE9bmV3MiwgaW50ZXJ2YWw9ImNvbmZpZGVuY2UiKQ0KaW5jaTE0NDA9YygpDQppbmNpMTQ0MD1jKGluY2kxNDQwLHJvdW5kKGluZmVyZW5jZTJbLDFdLDMpKQ0KI2luY2kxNDQwDQpzdW1tYXJ5KGluY2kubG0pDQoNCnBsb3QoaW5jaS5sbSwgd2hpY2g9MSkNCnBsb3QoaW5jaS5sbSx3aGljaD0yKQ0KYGBgDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NClBvc3Rlcmlvcm1lbnRlIGRlc3B1ZXMgZGUgdXRpbGl6ciB1biBtb2RlbG8gZGUgcHJlZGljY2lvbiBudWV2YW1lbnRlIGRlIHJlZ3Jlc2lvbiBsaW5lYWwgc2ltcGxlIHlhIHF1ZSBkaW8gYnVlbm9zIHJlc3VsdGFkb3MgZW4gc2V2cmVpZGFkIHNlIG9ic2VydmEgZW4gbG9zIGRpYWdyYW1hcyB5IGVuIGxvcyBkYXRvcyBwcmVzZW50YWRvcyBlbiBlbCBzdW1hcmlvIGRlbCBtb2RlbG8gcXVlIGVsIFIgY3VhZHJhZG8gYWp1c3RhZG8gZXMgZGUgMC45MyBsbyBxdWUgZXMgdW4gdmFsb3IgYWNlcHRhYmxlIHBhcmEgbGEgcHJlZGljaWNvbiBkZSBmdXR1cm9zIGRhdG9zIGEgcGFydGlyIGRlIGVzdGUgbW9kZWxvLg0KPGRpdi8+DQoNCiMjIEFuYWxpc2lzIGVzcGFjaWFsIGRlIGxvcyBkYXRvcyBpbmZlcmlkb3MgYSBwYXJ0aXIgZGUgbGEgbW9kZWxhY2lvbiB0ZW1wb3JhbA0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCkFob3JhIHF1ZSBzZSB0aWVuZW4gbG9zIGRhdG9zIGRlIHNldmVyaWRhZCB5IGRlIEFVRFBDIHBhcmEgbG9zIG1lc2VzIDQyLCA0NCB5IDQ2IGdyYWNpYXMgYWwgbW9kZWxvIGFudGVyaW9ybWVudGUgZGVzY3JpdG8sIHNlIHByb2NlZGUgY29uIGxhIGVsYWJvcmFjaW9uIGRlIG1hcHMgcXVlIHBlcm1pdGFuIHZlciBlbCBtb3ZpbWllbnRvIGRlIGVzdGEgZW5mZXJtZWRhZCBlbiBlbCBsb3RlIGVuIGxvcyBtZXNlcyBpbmZlcmlkb3MuDQo8ZGl2Lz4NCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFfQ0KDQpwMjE9Z2dwbG90KGRhdGEgPSB0ZmluYWwsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQxMjAwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT1EMTIwMCkpK2dndGl0bGUoIkQxMjAwIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KI2FjYSB2aWVuZW4gbG9zIGluZmVyaWRvcw0KcDIyPWdncGxvdChkYXRhID0gdGZpbmFsLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1EMTI2MCkpK2dlb21fcG9pbnQoYWVzKHNpemU9RDEyNjApKStnZ3RpdGxlKCJEMTI2MCAtIEluZmVyaWRvIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KcDIzPWdncGxvdChkYXRhID0gdGZpbmFsLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1EMTMyMCkpK2dlb21fcG9pbnQoYWVzKHNpemU9RDEzMjApKStnZ3RpdGxlKCJEMTMyMCAtIEluZmVyaWRvIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KcDI0PWdncGxvdChkYXRhID0gdGZpbmFsLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1EMTM4MCkpK2dlb21fcG9pbnQoYWVzKHNpemU9RDEzODApKStnZ3RpdGxlKCJEMTM4MCAtIEluZmVyaWRvIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KI2dyaWQuYXJyYW5nZShwMjEsIHAyMiwgIG5yb3cgPSAxLG5jb2w9MikNCiNncmlkLmFycmFuZ2UocDIzLCBwMjQsICBucm93ID0gMSxuY29sPTIpDQpwMjENCnAyMg0KcDIzDQpwMjQNCmBgYA0KUGFydGllbmRvIGRlbCBtYXBhIGRlIHNldmVyaWRhZCBwYXJhIGVsIGRpYSAxMjAwIHNlIG9ic2VydmEgY29tbyBlc3RhIGVuZmVybWVkYWQgdmEgYXZhbnphbmRvIHRhbnRvIGVuIGVzcGFjaW8gY29tbyBlc24gc2V2ZXJpZGFkIHBhcmEgbG9zIG1lc2VzIDQyLCA0NCB5IDQ2Lg0KDQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmcgPSBGQUxTRX0NCiNkaXZpZGlkb3MgcG9yIGVzY2FsYSBkZSBzZXZlcmlkYWQNCg0KZ2dwbG90KGRhdGEgPSB0YWxsZXIsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQxMjAwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT1EMTIwMCkpK2dndGl0bGUoIkQxMjAwIGJhc2UgZGUgZGF0b3Mgb3JpZ2luYWwiKSArdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsgZmFjZXRfZ3JpZChEMTIwMCB+IC4pDQpnZ3Bsb3QoZGF0YSA9IHRmaW5hbCxhZXMoeD1FYXN0aW5nLHk9Tm9ydGhpbmcsY29sb3I9RDEyNjApKStnZW9tX3BvaW50KGFlcyhzaXplPUQxMjYwKSkrZ2d0aXRsZSgiRDEyNjAgLSBJbmZlcmlkbyIpICt0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKyBmYWNldF9ncmlkKEQxMjYwIH4gLikNCmdncGxvdChkYXRhID0gdGZpbmFsLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1EMTMyMCkpK2dlb21fcG9pbnQoYWVzKHNpemU9RDEzMjApKStnZ3RpdGxlKCJEMTMyMCAtIEluZmVyaWRvIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArIGZhY2V0X2dyaWQoRDEzMjAgfiAuKQ0KZ2dwbG90KGRhdGEgPSB0ZmluYWwsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQxMzgwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT1EMTM4MCkpK2dndGl0bGUoIkQxMzgwIC0gSW5mZXJpZG8iKSArdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsgZmFjZXRfZ3JpZChEMTM4MCB+IC4pDQojc2Ugb2JzZXJ2YSB1biBhdW1lbnRvIGVuIGxhIHNldmVyaWRhZCBwYXJhIGxvcyBtZXNlcyA0MiwgNDQgeSA0NiBldmlkZW5jaWFuZG9zZSBlbCBjYW1iaW8gZW50cmUgZXNjYWxhIDIsIDMgeSA0Lg0KYGBgDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NClVuYSBtZWpvciBmb3JtYSBkZSB2aXN1YWxpemFyIGxvIGFudGVyaW9yIGVzIGRlc2NvbXBvbmllbmRvIGxvcyBtYXBhcyBwb3IgY2F0ZWdvcmlhcyBkZSBzZXZlcmlkYWQsIGFzaSBzZSBldmlkZW5jaWEgY29tbyBsYSBtYXlvciBjYW50aWRhZCBkZSBwdW50b3MgcXVlIGVzdGFiYW0gIGRlcG9zaXRhZG9zIGVuIGNpZXJ0YSBjYXRlZ29yaWEsIGVuIGVsIHNpZ3VlbnRlIG1hcGEgeWEgYXZhbnphcm9uIGEgbGEgb3RyYSB5IGFzaSBzdWNlc2l2YW1lbnRlIGdlbmVyYW5kbyB1bmEgYWN1bXVsYWNpb24gZG9taW5hbnRlIGVuIGxhIGNhdGVnb3JpYSA1IGRlIG1heGltYSBzZXZlcmlkYWQuDQo8ZGl2Lz4NCg0KRGVzcHVlcyBkZSBhbmFsaXphciBsb3MgZGF0b3MgZGUgc2V2ZXJpZGFkIHNlIHByb2NlZGUgY29uIGVsIGFuYWxpc2lzIGRlIGRhdG9zIGRlIEFVRFBDIHBhcmEgbG9zIG1lc2VzIGluZmVyaWRvcy4NCg0KKipHcmFmaWNhbmRvIEFVRFBDKioNCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFfQ0KdGZpbmFsWywzMjozNV0NCnBhcihtZnJvdz1jKDIsMikpDQpwbG90KHRhbGxlciRFYXN0aW5nLHRhbGxlciROb3J0aGluZyxwY2g9MjAsY2V4PTAuMDAwMTUqdGZpbmFsJEFVRFBDMTIwMCx4bGFiPSJFYXN0aW5nIg0KICAgICAseWxhYj0iTm9ydGhpbmciLGNvbD0iZGFya3JlZCIsbWFpbj0iTWFwYSBkZSBBVURQQyBkaWEgMTIwMCIpDQpwbG90KHRhbGxlciRFYXN0aW5nLHRhbGxlciROb3J0aGluZyxwY2g9MjAsY2V4PTAuMDAwMTUqdGZpbmFsJEFVRFBDMTI2MCx4bGFiPSJFYXN0aW5nIg0KICAgICAseWxhYj0iTm9ydGhpbmciLGNvbD0iZGFya3JlZCIsbWFpbj0iTWFwYSBkZSBBVURQQyBkaWEgMTI2MCIpDQpwbG90KHRhbGxlciRFYXN0aW5nLHRhbGxlciROb3J0aGluZyxwY2g9MjAsY2V4PTAuMDAwMTUqdGZpbmFsJEFVRFBDMTMyMCx4bGFiPSJFYXN0aW5nIg0KICAgICAseWxhYj0iTm9ydGhpbmciLGNvbD0iZGFya3JlZCIsbWFpbj0iTWFwYSBkZSBBVURQQyBkaWEgMTMyMCIpDQpwbG90KHRhbGxlciRFYXN0aW5nLHRhbGxlciROb3J0aGluZyxwY2g9MjAsY2V4PTAuMDAwMTUqdGZpbmFsJEFVRFBDMTM4MCx4bGFiPSJFYXN0aW5nIg0KICAgICAseWxhYj0iTm9ydGhpbmciLGNvbD0iZGFya3JlZCIsbWFpbj0iTWFwYSBkZSBBVURQQyBkaWEgMTM4MCIpDQpgYGANCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KRW4gbGEgZmlndXJhIHNlIG9ic2VydmEgY8OzbW8gYSB0cmF2w6lzIGRlbCB0aWVtcG8gc2UgZXNwZXJhIHF1ZSBzZSBkw6kgZWwgYXZhbmNlIGRlIGxhIGVuZmVybWVkYWQsIGxhIGN1YWwgY2FkYSB2ZXogc2Vyw6EgbcOhcyBzZXZlcmEsIGVzIGRlY2lyLCBsb3MgcHVudG9zIGNvbG9yIHJvam8gYWwgc2VyIG3DoXMgZ3JhbmRlcywgaW5kaWNhbiBxdWUgZWwgZWZlY3RvIGRlbCBBV0MgYXRhY2Fyw6EgY2FkYSB2ZXogbcOhcyBwbGFudGFzIHkgZW4gbWF5b3IgaW50ZW5zaWRhZC4gRXN0byBub3MgcHVlZGUgZGFyIHVuYSBpZGVhIGRlIGxhIHZlbG9jaWRhZCBkZSBkaXNwZXJzacOzbiBkZSBsb3MgcGF0w7NnZW5vcywgYXNvY2lhZG8gYSBsYXMgbGFib3JlcyBhZ3JvbsOzbWljYXMgZGVzYXJyb2xsYWRhcyBlbiBlbCBjdWx0aXZvLCBjb24gZWwgZmluIGRlIGdlbmVyYXIgZXN0cmF0ZWdpYXMgcXVlIHBlcm1pdGFuIG1hbmVqYXIgbGEgZW5mZXJtZWRhZCwgcHJpbmNpcGFsbWVudGUgZW4gbG9zIGZvY29zIGRlIGluZmVjY2nDs24gKHpvbmFzIGNvbiBtYXlvciBjYW50aWRhZCB5IHRhbWHDsW8gZGUgcHVudG9zKS4gUG9yIGVqZW1wbG8sIGVzdGUgY29tcGxlam8gc2UgcHVlZGUgZGlzcGVyc2FyIHBvciBhZ3VhIGRlIHJpZWdvLCBoZXJyYW1pZW50YXMgbyBtYXRlcmlhbCBjb250YW1pbmFkbywgbWFsZXphcyBob3NwZWRlcmFzLCBlbnRyZSBvdHJhczsgdGVuaWVuZG8gZW4gY3VlbnRhIGVzdGEgY2FyYWN0ZXLDrXN0aWNhIGRlbCBjb21wbGVqbywgZXMgb3BvcnR1bm8gcmVhbGl6YXIgdW4gbWFuZWpvIGRlIG1hbGV6YXMsIGRlc2NvbnRhbWluYWNpw7NuIGRlIGhlcnJhbWllbnRhcywgZWxpbWluYWNpw7NuIGRlIGRlc2VjaG9zIHkgcGxhbnRhcyBpbmZlY3RhZGFzLCBhc2VndXJhciB1biBidWVuIGRyZW5hamUgeSBmbHVqbyBkZSBhZ3VhIHF1ZSBpbXBpZGFuIGVsIGRlc2Fycm9sbG8gw7NwdGltbyBkZSBsb3MgcGF0w7NnZW5vcyB5IGEgc3UgdmV6IGV2aXRhciBlbCB0cmFzdG9ybm8gZGUgaGlwb3hpYS1hbm94aWEsIGVudHJlIG90cmFzIHByw6FjdGljYXMuIA0KDQpSZWxhY2lvbmFuZG8gbGFzIGZpZ3VyYXMgYW50ZXJpb3JlcyAsIGVzIGltcG9ydGFudGUgdGVuZXIgZW4gY3VlbnRhIGVsIHBlcsOtb2RvIGRlIHRpZW1wbyBjcsOtdGljbyBlbiBlbCBjdWFsIHNlIGRlYmUgdGVuZXIgbcOhcyBjdWlkYWRvIChhcHJveGltYWRhbWVudGUgcHJldmlvIGEgbG9zIDgwMCBkw61hcyksIHB1ZXMgZGVzcHXDqXMgZGUgcGFzYWRvIGVzdGUgdGllbXBvLCBlcyBtw6FzIGRpZsOtY2lsIGNvbnRyb2xhciBsYSBlbmZlcm1lZGFkLg0KPGRpdi8+DQoNCiMjIEFuYWxpc2lzIGRlIGludGVycG9sYWNpb24NCg0KIVsiS3JpZ2luZyBCYXllc2lhbm8gcGFyYSBlbCBkaWEgMTIwMCJdKGsxMjAwLmpwZyl7d2lkdGg9ODAlfQ0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCkVuIGxhIGZpZ3VyYSBzZSBwdWVkZSBldmlkZW5jaWFyIGNsYXJhbWVudGUgY29tbyBzZSBlbmN1ZW50cmFuIGRpc3RyaWJ1aWRvcyBsb3MgZm9jb3MgZGUgbGEgZW5mZXJtZWRhZCBjb24gYmFzZSBlbiBsb3MgZGF0b3MsIGVuIGxhIHpvbmEgZGVsIG1hcmdlbiBvY2NpZGVudGFsIGRlbCBsb3RlIHNlIGV2aWRlbmNpYSB1biBhbHRvIHByb2dyZXNvIGRlIGxhIGVuZmVybWVkYWQsIGFzw60gY29tbyBlbiBsYSB6b25hIG5vcm9yaWVudGFsIHkgdW4gcG9jbyBoYWNpYSBlbCBjZW50cm8gZGVsIGxvdGUuIEFkaWNpb25hbG1lbnRlLCBhbCBjb21wYXJhcmxhIGNvbiBsYXMgZmlndXJhcyBhbmVyaW9yZXMgZGVsIGFuYWxpc2lzIGVzcGFjaWFsIHBhcmEgZGF0b3MgaW5mZXJpZG9zICAoYSBsb3MgNjAgZMOtYXMgdnMgYSBsb3MgMTIwMCBkw61hcyBkZSBtdWVzdHJlbywgcmVzcGVjdGl2YW1lbnRlKSBzZSBjb21wcnVlYmEgcXVlIGxvcyBmb2NvcyBpbmljaWFsZXMgKHB1bnRvcyBhenVsIGNsYXJvIGRlIG1heW9yIHRhbWHDsW8pIHBvc3Rlcmlvcm1lbnRlIHJlcHJlc2VudGFyw6FuIGxhcyB6b25hcyBtYXMgYWZlY3RhZGFzIHF1ZSByZXF1aWVyZW4gbWF5b3IgYXRlbmNpw7NuIHkgcXVlIHNvbiBwcmluY2lwYWwgZnVlbnRlIGRlIGlub2N1bG8gKHJlcHJlc2VudGFkYXMgZGUgY29sb3Igcm9qbyB5IG5hcmFuamEgZW4gZXN0YSBmaWd1cmEpLiBFc3RhIGRpZmVyZW5jaWFjacOzbiBlbiBlbCBlc3BhY2lvIHBlcm1pdGUgcmVhbGl6YXIgdW4gbWFuZWpvIGRpZmVyZW5jaWFsLCBpZGVudGlmaWNhbmRvIGxhcyDDoXJlYXMgcXVlIHB1ZWRhbiB0ZW5lciBjb25kaWNpb25lcyBkZXNmYXZvcmFibGVzLCBjb21vIHVuIG1hbCBtYW5lam8gYWdyb27Ds21pY28gKHByZXNlbmNpYSBkZSBtYWxlemFzLCBzdWVsb3MgYW5lZ2Fkb3MsIHByZXNlbmNpYSBkZSByZXNpZHVvcyBjb250YW1pbmFkb3MsIGV0Y+KApikgbyBjYXJhY3RlcsOtc3RpY2FzIGVzcGVjw61maWNhcyBkZWwgdGVycmVubyAoY29tbyBlbCBuaXZlbCBmcmXDoXRpY28sIGFsdHVyYSwgcGFyY2hlcyBlbiBjb25kaWNpw7NuIGRlIHNhbGluaWRhZCwgZXRjLi4uKSwgY29uIGVsIGZpbiBkZSBjb250cm9sYXIgbG9zIGZvY29zIGRlbCBwcm9ibGVtYSB5IG1hbnRlbmllbmRvIHNhbmFzIG90cmFzIMOhcmVhcyBkZWwgbG90ZS4NCjxkaXYvPg0KDQohWyJLcmlnaW5nIEJheWVzaWFubyBwYXJhIGVsIGRpYSAxMjYwIl0oazEyNjAuanBnKXt3aWR0aD04MCV9DQohWyJLcmlnaW5nIEJheWVzaWFubyBwYXJhIGVsIGRpYSAxMzIwIl0oazEzMjAuanBnKXt3aWR0aD04MCV9DQohWyJLcmlnaW5nIEJheWVzaWFubyBwYXJhIGVsIGRpYSAxMzgwIl0oazEzODAuanBnKXt3aWR0aD04MCV9DQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCkNvbiBiYXNlIGVuIGVsIG1vZGVsbyByZWFsaXphZG8gc2UgdGllbmVuIGxhcyBzaW11bGFjaW9uZXMgZGUgbGFzIHVsdGltYXMgdHJlcyBmaWd1cmFzICBlbiBkb25kZSBzZSBwcmVzZW50YSBsYSBwcmVkaWNjacOzbiBwYXJhIGxvcyBtZXNlcyA0MiAoRDEyNjApLCA0NCAoRDEzMjApIHkgNDYgKEQxMzgwKS4gTG9zIGN1YWxlcyBwcmVzZW50YW4gdW5hIGRpc3RyaWJ1Y2nDs24gZXNwYWNpYWwgbXV5IHNpbWlsYXIsIGxvIHF1ZSBjb21wcnVlYmEgbGEgdmlhYmlsaWRhZCBkZWwgbW9kZWxvIHV0aWxpemFkbywgcHVlcyBlcyBjb25ncnVlbnRlIGFsIGNvbXBhcmFybG8gZW50cmUgbG9zIG1pc21vcyBtZXNlcyBwdWVzIHNpZ3VlIHVuYSBkaXNwZXJzacOzbiBsw7NnaWNhLg0KDQpMb3MgcmVzdWx0YWRvcyBvYnRlbmlkb3MgcGVybWl0ZW4gaW5mZXJpciBxdWUgZWwgbW9kZWxvIGVzIMO6dGlsIHkgZnVuY2lvbmFsIHBhcmEgY29udHJpYnVpciBhbCBtYW5lam8gZGUgbGEgZW5mZXJtZWRhZCwgeWEgcXVlIG11ZXN0cmEgbGFzIMOhcmVhcyBtYXlvcm1lbnRlIGFmZWN0YWRhcyBxdWUgcmVxdWllcmVuIGF0ZW5jacOzbiBwcmlvcml0YXJpYSAoeSBhc8OtIGV2aXRhciBsYSBwcm9wYWdhY2nDs24gbyBkaXNwZXJzacOzbiBkZWwgY29tcGxlam8pIHkgYSBzdSB2ZXosIG5vIHNvbG8gbXVlc3RyYSBlbCBkaWFnbsOzc3RpY28gYWN0dWFsIGRlbCBsb3RlLCBzaW5vIHRhbWJpw6luIGVzIHBvc2libGUgcHJlZGVjaXIgZWwgY29tcG9ydGFtaWVudG8gYSBmdXR1cm8gZGUgbGEgZW5mZXJtZWRhZCBwZXJtaXRpZW5kbyBhY3R1YXIgYSB0aWVtcG8sIGNvbiBsYSB2ZW50YWphIGRlIHZpc3VhbGl6YXIgZGUgZm9ybWEgbcOhcyBhbWlnYWJsZSBsb3MgcmVzdWx0YWRvcy4gTG8gYW50ZXJpb3Igc2UgY3VtcGxlIG1pZW50cmFzIGVsIG1hbmVqbyBzZSByZWFsaWNlIGVuIGVsIG1vbWVudG8gYWRlY3VhZG8sIGRhZG8gcXVlIGxhcyBwbGFudGFzIHNldmVyYW1lbnRlIGVuZmVybWFzIGRlYmVuIHNlciBlbGltaW5hZGFzLCBkaXNtaW51eWVuZG8gbGFzIGdhbmFuY2lhcyBwYXJhIGVsIGFncmljdWx0b3IuIFNpbiBlbWJhcmdvLCBlcyBpbXBvcnRhbnRlIGFzb2NpYXJsbyBjb24gb3RyYXMgaGVycmFtaWVudGFzLCBwdWVzIHBvciBzw60gc29sYSBubyBhc2VndXJhbiBlbCDDqXhpdG8gZGVsIG1hbmVqbyBkZSBsYSBlbmZlcm1lZGFkLiBTZSBwdWVkZSBhw7FhZGlyIHVuIG1vbml0b3JlbyBjb25zdGFudGUsIHByw6FjdGljYXMgcHJldmVudGl2YXMgKGNvbW8gcG9yIGVqZW1wbG8gdW4gZnVuZ2ljaWRhIHByb3RlY3RhbnRlIG8gdXNhciB1biBzaXN0ZW1hIGRlIHJpZWdvIGFkZWN1YWRvKSwgbWFuZWpvIGludGVncmFkbyBkZSBwbGFnYXMsIGVuZmVybWVkYWRlcyB5IG1hbGV6YXMsIGFsaW1lbnRhY2nDs24gZGUgbGEgYmFzZSBkZSBkYXRvcyBwYXJhIG1lam9yYXIgbGEgcHJlZGljY2nDs24gZGVsIG1vZGVsbywgZW50cmUgb3RyYXM7IGRlIGVzdGEgbWFuZXJhIHNlIGF1bWVudGFuIGxhcyBwcm9iYWJpbGlkYWRlcyBkZSB0ZW5lciB1biBjdWx0aXZvIHNhbm8sIGNvbiBncmFuIHBvdGVuY2lhbCBhZ3JvbsOzbWljbyBxdWUgc3VwbGEgbGFzIG5lY2VzaWRhZGVzIGRlbCBtZXJjYWRvLCBhdW1lbnRhbmRvIGxhcyBnYW5hbmNpYXMgZGVsIGFncmljdWx0b3IuDQo8ZGl2Lz4NCg0KIyBSZWZlcmVuY2lhcw0KDQoqIEdpbCwgSi4gRy4gMjAxOC4gQXZvY2FkbyB3aWx0IGNvbXBsZXggZGlzZWFzZSwgaW1wbGljYXRpb25zIGFuZCBtYW5hZ2VtZW50IGluIENvbG9tYmlhLiBSZXZpc3RhIEZhY3VsdGFkIE5hY2lvbmFsIGRlIEFncm9ub23DrWEgTWVkZWxsw61uLiA3MSgyKSBET0k6IDEwLjE1NDQ2L3JmbmEudjcxbjIuNjY0NjUNCg0KKiBHaWwsIEouIEcuIHkgTW9yYWxlcywgSi4gMjAyMC4gRGV2ZWxvcG1lbnQgYW5kIHZhbGlkYXRpb24gb2Ygc2V2ZXJpdHkgc2NhbGVzIG9mIGF2b2NhZG8gd2lsdCBjb21wbGV4IGNhdXNlZCBieSBQaHl0b3BodGhvcmEgY2lubmFtb21pLCBWZXJ0aWNpbGxpdW0gZGFobGlhZSBhbmQgaHlwb3hpYS1hbm94aWEgZGlzb3JkZXIgYW5kIHRoZWlyIHBoeXNpb2xvZ2ljYWwgcmVzcG9uc2VzIGluIGF2b2NhZG8gcGxhbnRzLiBBZ3Jvbm9tw61hIENvbG9tYmlhbmEuIERPSTogMTAuMTU0NDYvYWdyb24uY29sb21iLnYzOG4xLjc4NTI3DQoNCiogLCBKLiBHLC4geSBNb3JhbGVzLCBKLiAyMDIwLiBJbnRlZ3JhdGVkIHByb3Bvc2FsIGZvciBtYW5hZ2VtZW50IG9mIHJvb3Qgcm90IGNhdXNlZCBieSBQaHl0b3BodGhvcmEgY2lubmFtb21pIGluIGF2b2NhZG8gY3YuIEhhc3MgY3JvcHMgRE9JOiAxMC4xMDE2IC8gai5jcm9wcm8uMjAyMC4xMDUyNzENCg0KKiBHaWwsIEouIEcgeSBQZXRlcnNvbiwgQS4gMjAxOS4gUG90ZW50aWFsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGRpc2Vhc2VzIGFmZmVjdGluZyBIYXNzIGF2b2NhZG8gaW4gQW50aW9xdWlhIENvbG9tYmlhLiBKb3VybmFsIG9mIFBsYW50IFByb3RlY3Rpb24gUmVzZWFyY2guIFZvbC4gNTksIE5vLiAyOiAyMTTigJMyMjgsIDIwMTkgRE9JOiAxMC4yNDQyNS9qcHByLjIwMTkuMTI5Mjg4DQoNCiMgQU5FWE9TDQoNCiMjIyBNYXBhcyBkZSBzZXZlcmlkYWQgZGUgbG9zIGRpYXMgMCBhIDEyMDAgKGFwcm94aW1hY2lvbiBpbmljaWFsLikNCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFfQ0KaT04DQpwYXIobWZyb3c9YygyLDMpKQ0KZm9yIChpIGluIDg6MjgpDQp7DQp2ZWN0b3IxPXRhbGxlclssaV0NCnZlY3RvcjE9YXMubnVtZXJpYyh1bmxpc3QodmVjdG9yMSkpDQpwbG90KHRhbGxlciRFYXN0aW5nLHRhbGxlciROb3J0aGluZyxwY2g9MjAsY2V4PTAuNSp2ZWN0b3IxLGNvbD12ZWN0b3IxLG1haW49aSx4bGFiPSJFc3RlLU9lc3RlIix5bGFiPSJOb3J0ZS1zdXIiKQ0KaSsxDQp9DQojdmlzdWFsaXphY2lvbiBkZWxhIGVzY2FsYSBkZSBzZXZlcmlkYWQgcG9yIHRhbWHDsW9zIHkgY29sb3JlcyBkZSAxLTUNCmBgYA0KIyMjIE1pc21vcyBtYXBhcyBkZSBzZXZlcmlkYWQgZGUgbG9zIGRpYXMgMCBhIDEyMDAgcGVybyBlbXBsZWFuZG8gZ2dwbG90Mg0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0V9DQptMT1nZ3Bsb3QoZGF0YSA9IHRhbGxlcixhZXMoeD1FYXN0aW5nLHk9Tm9ydGhpbmcsY29sb3I9RDApKStnZW9tX3BvaW50KGFlcyhzaXplPSBEMCkpK2dndGl0bGUoIkQwIikgICt0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCm0yPWdncGxvdChkYXRhID0gdGFsbGVyLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1ENjApKStnZW9tX3BvaW50KGFlcyhzaXplPUQ2MCkpK2dndGl0bGUoIkQ2MCIpICt0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCm0zPWdncGxvdChkYXRhID0gdGFsbGVyLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1EMTIwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT0gRDEyMCkpK2dndGl0bGUoIkQxMjAiKSArdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQptND1nZ3Bsb3QoZGF0YSA9IHRhbGxlcixhZXMoeD1FYXN0aW5nLHk9Tm9ydGhpbmcsY29sb3I9RDE4MCkpK2dlb21fcG9pbnQoYWVzKHNpemU9IEQxODApKStnZ3RpdGxlKCJEMTgwIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KbTU9Z2dwbG90KGRhdGEgPSB0YWxsZXIsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQyNDApKStnZW9tX3BvaW50KGFlcyhzaXplPSBEMjQwKSkrZ2d0aXRsZSgiRDI0MCIpICt0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCm02PWdncGxvdChkYXRhID0gdGFsbGVyLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1EMzAwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT0gRDMwMCkpK2dndGl0bGUoIkQzMDAiKSArdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQptNz1nZ3Bsb3QoZGF0YSA9IHRhbGxlcixhZXMoeD1FYXN0aW5nLHk9Tm9ydGhpbmcsY29sb3I9RDM2MCkpK2dlb21fcG9pbnQoYWVzKHNpemU9IEQzNjApKStnZ3RpdGxlKCJEMzYwIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KbTg9Z2dwbG90KGRhdGEgPSB0YWxsZXIsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQ0MjApKStnZW9tX3BvaW50KGFlcyhzaXplPSBENDIwKSkrZ2d0aXRsZSgiRDQyMCIpICt0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCm05PWdncGxvdChkYXRhID0gdGFsbGVyLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1ENDgwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT0gRDQ4MCkpK2dndGl0bGUoIkQ0ODAiKSArdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQptMTA9Z2dwbG90KGRhdGEgPSB0YWxsZXIsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQ1NDApKStnZW9tX3BvaW50KGFlcyhzaXplPSBENTQwKSkrZ2d0aXRsZSgiRDU0MCIpICt0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCm0xMT1nZ3Bsb3QoZGF0YSA9IHRhbGxlcixhZXMoeD1FYXN0aW5nLHk9Tm9ydGhpbmcsY29sb3I9RDYwMCkpK2dlb21fcG9pbnQoYWVzKHNpemU9IEQ2MDApKStnZ3RpdGxlKCJENjAwIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KbTEyPWdncGxvdChkYXRhID0gdGFsbGVyLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1ENjYwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT0gRDY2MCkpK2dndGl0bGUoIkQ2NjAiKSArdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQptMTM9Z2dwbG90KGRhdGEgPSB0YWxsZXIsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQ3MjApKStnZW9tX3BvaW50KGFlcyhzaXplPSBENzIwKSkrZ2d0aXRsZSgiRDcyMCIpICt0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCm0xND1nZ3Bsb3QoZGF0YSA9IHRhbGxlcixhZXMoeD1FYXN0aW5nLHk9Tm9ydGhpbmcsY29sb3I9RDc4MCkpK2dlb21fcG9pbnQoYWVzKHNpemU9IEQ3ODApKStnZ3RpdGxlKCJENzgwIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KbTE1PWdncGxvdChkYXRhID0gdGFsbGVyLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1EODQwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT0gRDg0MCkpK2dndGl0bGUoIkQ4NDAiKSArdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQptMTY9Z2dwbG90KGRhdGEgPSB0YWxsZXIsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQ5MDApKStnZW9tX3BvaW50KGFlcyhzaXplPSBEOTAwKSkrZ2d0aXRsZSgiRDkwMCIpICt0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCm0xNz1nZ3Bsb3QoZGF0YSA9IHRhbGxlcixhZXMoeD1FYXN0aW5nLHk9Tm9ydGhpbmcsY29sb3I9RDk2MCkpK2dlb21fcG9pbnQoYWVzKHNpemU9IEQ5NjApKStnZ3RpdGxlKCJEOTYwIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KbTE4PWdncGxvdChkYXRhID0gdGFsbGVyLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1EMTAyMCkpK2dlb21fcG9pbnQoYWVzKHNpemU9RDEwMjApKStnZ3RpdGxlKCJEMTAyMCIpICt0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCm0xOT1nZ3Bsb3QoZGF0YSA9IHRhbGxlcixhZXMoeD1FYXN0aW5nLHk9Tm9ydGhpbmcsY29sb3I9RDEwODApKStnZW9tX3BvaW50KGFlcyhzaXplPUQxMDgwKSkrZ2d0aXRsZSgiRDEwODAiKSArdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQptMjA9Z2dwbG90KGRhdGEgPSB0YWxsZXIsYWVzKHg9RWFzdGluZyx5PU5vcnRoaW5nLGNvbG9yPUQxMTQwKSkrZ2VvbV9wb2ludChhZXMoc2l6ZT1EMTE0MCkpK2dndGl0bGUoIkQxMTQwIikgK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KbTIxPWdncGxvdChkYXRhID0gdGFsbGVyLGFlcyh4PUVhc3RpbmcseT1Ob3J0aGluZyxjb2xvcj1EMTIwMCkpK2dlb21fcG9pbnQoYWVzKHNpemU9RDEyMDApKStnZ3RpdGxlKCJEMTIwMCIpICt0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCm0xO20yO20zO200O201O202O203O204O205O20xMDttMTE7bTEyO20xMzttMTQ7bTE1O20xNjttMTc7bTE4O20xOTttMjA7bTIxDQpgYGANCg==