Introducción

La disponibilidad de un gran volumen de datos, así como recientes avances en las técnicas para su procesamiento y análisis, permiten actualmente abordar nuevos y viejos interrogantes obteniendo respuestas más precisas.

A lo largo de las distintas campañas, por su relevancia para la economía argentina, vuelven a surgir preguntas en torno a la producción y comercialización de granos: ¿Cuál fue el volumen producido? ¿Dónde se origina? ¿Bajo qué modalidades se comercializa? ¿Cuánto estuvo destinado al mercado doméstico? ¿Qué puertos concentraron la mayor parte de la exportación? ¿En qué momento del año se comercializan los mayores volúmenes? Aunque las preguntas parezcan simples, llegar a respuestas confiables no lo es tanto. Típicamente, este tipo de cuestiones son respondidas mediante supuestos, consultas a expertos, o datos agregados del sector.

Por este motivo, el presente trabajo tiene como objetivo principal explorar nuevos métodos para responder a estos interrogantes, por medio de una base de datos relativamente poco explotada y con un gran potencial como SIO-GRANOS. Las técnicas que derivan del campo del análisis de grandes volúmenes de datos resultan de especial utilidad para esta tarea.

En particular, se buscó analizar los flujos comerciales de granos al interior del país a lo largo de los años, identificando el origen, el destino y la estacionalidad según cada especie.



Método

SIO-GRANOS es un Sistema unificado de Información Obligatoria de las operaciones de compraventa de granos que conforman el Mercado Físico, desarrollado por las Bolsas de Cereales y el MATba-Rofex. Todos los operadores incluidos en el RUCA deben acceder al sistema y realizar declaraciones de las operaciones realizadas. El sistema admite un solo declarante en cada operación: el corredor (si lo hubiera) o en su defecto, el comprador. En esta oportunidad, se tomaron la totalidad de los datos desde el año 2015 al 2020, que comprenden aproximadamente 4 millones de registros.

Para identificar las cantidades transportadas de granos se sumaron las cantidades correspondientes a la modalidad de compraventa, sin importar su condición de pago, ni tampoco si correspondían a un destino final o no. Luego, se sumaron las ampliaciones de los contratos y se restaron las anulaciones.

Las más recientes herramientas para el procesamiento de datos probaron ser de gran utilidad para este trabajo. Se utilizó Python para las etapas de extracción y normalización, y R para la transformación y la visualización. Por otro lado, Flourish y Power Bi habilitan las visualizaciones interactivas que se observan debajo.



Importancia

Más allá de los resultados obtenidos, la importancia de este trabajo radica en la posibilidad de responder preguntas habituales utilizando nueva información. Hasta el momento, caracterizábamos los flujos comerciales fundamentalmente desde el destino de los granos, con ancla en los datos de exportación. Ahora surge la posibilidad de estudiar los flujos desde el origen, a través de las operaciones particulares de compra-venta.

En este sentido, es posible cruzar resultados y validar las respuestas que se obtenían hasta el momento por medio de fuentes alternativas. Y como se puede apreciar, los resultados parecen en línea con los que surgen de otras bases de datos como estimaciones de producción, camiones arribados a puerto, embarques y exportaciones. También es posible complementar estudios y sacar mejores conclusiones inspeccionando el dashboard interactivo al final del artículo.

Si bien en este artículo se concentra en los agregados provinciales, la información está disponible por departamentos, abriendo la posibilidad a estudios más específicos. Esta tarea puede ser de especial importancia para mejorar la toma de decisiones productivas, comerciales, logísticas y de inversiones, especialmente en infraestructura.

Por otro lado, las técnicas aquí empleadas permiten avanzar en la construcción de nuevas herramientas: la elaboración de monitores para seguir la evolución de distintos indicadores y variables; y la construcción de modelos predictivos. Ambas líneas de trabajo se encuentran en desarrollo en la Bolsa de Cereales.

Finalmente, la metodología aquí utilizada puede ser aplicada sobre la misma base de SIO-GRANOS para obtener información en relación a interrogantes más complejos, relacionados por ejemplo con el financiamiento obtenido por los productores en cada campaña agrícola. Un trabajo en este sentido se publicará a la brevedad en este blog.



Principales hallazgos

  • Del 2015 al 2020 se transportaron 632,5 Mtn, de las cuales un 45% corresponden a soja, 32% a maíz, 17% a trigo y el 6% restante a cebada, girasol y sorgo. En promedio, se transportan 105,4 Mtn al año. El mínimo valor se registró en el año 2018 con 90,9 Mtn y el máximo en el año 2019 con 122,6 Mtn.

  • La participación de sorgo, soja y girasol disminuyó en las cantidades transportadas, siendo soja la que registra la mayor caída. Mientras que la participación trigo, cebada y maíz aumentó, siendo maíz el que registra el mayor incremento.

  • Las provincias de Buenos Aires, Córdoba, Santa Fe, Entre Ríos y La Pampa, que se encuentran a una distancia inferior a 350 km del puerto más cercano, son el origen del 90% de las cantidades transportadas. Sin embargo, los mayores incrementos en las cantidades transportadas se dieron en el resto del país.

  • El 64% de los granos transportados tiene como destino los puertos de Bahía Blanca, Quequén y Rosario, siendo los ubicados al Norte y Sur de este último los de mayor relevancia.

  • De las principales provincias productoras, solamente Buenos Aires tiene como lugar de entrega los puertos de Quequén y Bahía Blanca, concentrándose en el cultivo de trigo.

  • Los periodos de cosecha de cada grano continúan determinando la estacionalidad en los flujos comerciales. Los meses de abril, mayo, julio y diciembre concentran la mayor parte de las cantidades transportadas a lo largo el año.

  • El 36% de los granos transportados tiene como destino al mercado interno. En promedio, se transportaron a este destino 37,7 Mtn anuales. El máximo se registró en el año 2016 con 46 Mtn y el mínimo en el 2018 con 30,7 Mtn.



Resultados

Como se puede observar en la figura 1, los flujos comerciales de granos no tuvieron una tendencia definida a lo largo del periodo observado. Los mismos guardan una relación directa con las cantidades producidas, que se relacionan con los incentivos económicos que recibe el productor – determinado por las relaciones insumo producto y las expectativas de políticas – y las condiciones climáticas, entre otros factores.

En el total del periodo estudiado se transportaron 632,5 Mtn, de las cuales un 45% corresponden a soja, 32% a maíz, 17% a trigo y el 6% restante a cebada, girasol y sorgo. En promedio, se transportan 105,4 Mtn al año. El mínimo valor se registró en el año 2018 con 90,9 Mtn y el máximo en el año 2019 con 122,6 Mtn. Esta dinámica en las cantidades transportadas está en línea con las estimaciones de producción de la Bolsa de Cereales. Reflejan el gran aumento de la producción en la campaña 2016/17 como reacción al nuevo set de políticas, la severa sequía que afecto la campaña 2017/18, la gran cosecha de la campaña 2018/19 y el cambio de incentivos del nuevo set de políticas que, junto a un escenario climático menos favorable, redujo la producción de la campaña 2019/20.


Figura 1: Flujos comerciales de granos anualizado y en millones de toneladas.

Fuente: Bolsa de Cereales en base a datos del SIO-GRANOS del 2015 - 2020

Al observar la participación de cada grano en el total transportado anualmente, se puede concluir que a lo largo del periodo estudiado se produjeron cambios significativos. Entre los granos que disminuyeron su participación se encuentran sorgo, girasol y soja, con caídas de 0,6; 0,4 y 19 puntos porcentuales, respectivamente. Mientras que entre los que aumentaron su participación se encuentran trigo, cebada y maíz, con subas de 2 puntos porcentuales para los dos primeros, y 16 para el cereal de verano. Sin embargo, debe destacarse que en el caso del trigo, asciende a una participación del 19% en el año 2018, para luego disminuir hasta el 15%. Una situación similar ocurre en el girasol, sube hasta el año 2018 y luego desciende, con una participación final incluso inferior a la inicial. Nuevamente, estos comportamientos se corresponden con las estimaciones de producción para esos años, donde se observa un aumento en la participación de gramíneas en relación a oleaginosas.


Tabla 1: Participación de cada grano en las cantidades transportadas.

Grano 2015 2016 2017 2018 2019 2020 Promedio
Cebada 1% 2% 2% 3% 3% 3% 2%
Girasol 3% 3% 3% 4% 3% 2% 3%
Maíz 25% 29% 30% 33% 36% 40% 32%
Soja 57% 49% 46% 41% 40% 38% 45%
Sorgo 1% 1% 1% 0% 0% 1% 1%
Trigo 13% 17% 19% 19% 17% 15% 17%
Total 100% 100% 100% 100% 100% 100% 100%

Fuente: Bolsa de Cereales en base a datos del SIO-GRANOS del 2015 - 2020

Otro aspecto interesante para indagar es el origen provincial de los granos. Como se puede observar en la Figura 2, las provincias que tienen mayor participación son: Buenos Aires, Córdoba, Santa Fe, Entre Ríos y La Pampa. Las primeras tres son origen de 523,1 Mtn y representan un 83% del total. Si incorporamos Entre Ríos y La Pampa, las cantidades ascienden a 568 Mtn y un 90% del total. De esta forma, se puede verificar que más del 90% de los granos transportados se encuentran a una distancia menor a 350 km de un puerto, lo que marca una ventaja competitiva de Argentina respecto al resto de los competidores mundiales.


Figura 2: Origen provincial de los granos como porcentaje del flujo total comercializado.

Fuente: Bolsa de Cereales en base a datos del SIO-GRANOS del 2015 - 2020

Resulta interesante incorporar a los flujos provinciales los destinos de esos granos. En la Figura 3 se puede identificar que 406 Mtn - el 64% - de los granos transportados durante el período analizado tuvo como destino los puertos de Bahía Blanca, Quequén y Rosario. Solamente los puertos de Rosario (Norte y Sur) recibieron 331,1 Mtn, el 52% del total transportado del 2015 al 2020. Además, también resulta importante destacar que, entre las principales provincias de origen, solamente Buenos Aires tiene como lugar de entrega a los puertos de Quequén y Bahía Blanca. Y, en general, estos puertos se abastecen en mayor medida de trigo, que es el grano con mayor producción concentrada en Buenos Aires.

Por otra parte, durante el periodo estudiado se destinaron 226,1 Mtn al mercado interno, un 36% de los granos transportados. En promedio, se transportaron a este destino 37,7 Mtn anuales. El máximo flujo se registró en el año 2016 con 46 Mtn y el mínimo en el 2018 con 30,7 Mtn. Sin embargo, como se verá a continuación las cantidades en el 2020 alcanzaron las 35,5 Mtn, marcando una disminución respecto a las 40,2 Mtn del 2015.


Figura 3: Flujos comerciales de granos según origen provincial y destino en millones de toneladas.

Fuente: Bolsa de Cereales en base a datos del SIO-GRANOS del 2015 - 2020

En la Tabla 2 se puede observar la variación en las cantidades según el origen provincial. Las provincias de Córdoba y Entre Ríos presentan disminuciones del 3% en las cantidades transportadas, mientras que el resto de las principales provincias productoras presentan incrementos a lo largo del período. Si bien Santa Fe continúa siendo la provincia con mayor originación, el resto del país en su conjunto presenta el mayor incremento porcentual (51%).


Tabla 2: Flujos comerciales de granos según origen provincial en millones de toneladas.

Año Buenos Aires La Pampa Córdoba Entre Ríos Santa Fe Resto del país
2015 25.8 2.6 25.1 4.5 29 8.6
2020 29.1 2.8 24.3 4.3 37.4 13.1
Var. (%) 13% 11% -3% -3% 29% 51%

Fuente: Bolsa de Cereales en base a datos del SIO-GRANOS del 2015 - 2020

En la Tabla 3 se puede observar la variación en las cantidades según el destino. El resto del país, que representa todos los granos destinados al mercado interno, es el único destino con reducción en las cantidades recibidas (-12%). El resto de los principales puertos presentan incrementos en las cantidades, siendo los de Rosario Sur (60%) y Bahía Blanca (56%) los que capturaron la mayor parte de los incrementos. Sin embargo, los puertos de Rosario Norte continúan siendo el principal destino de los granos.


Tabla 3: Flujos comerciales de granos según destino en millones de toneladas.

Año Quequén Bahía Blanca Rosario Norte Rosario Sur Resto del País
2015 3.8 4.9 33 13.6 40.2
2020 5.6 7.7 40.4 21.9 35.5
Var. (%) 47% 56% 22% 60% -12%

Fuente: Bolsa de Cereales en base a datos del SIO-GRANOS del 2015 - 2020

Finalmente, para evaluar la estacionalidad mensual de los flujos comerciales según cada grano se presenta en la Figura 4 la distribución mensual de las cantidades transportadas en millones de toneladas. Como se puede visualizar, las cantidades transportadas presentan distinto comportamiento, que coincide en mayor medida con el periodo de cosecha de cada cultivo:

  • Maíz: presenta dos periodos estacionales relacionados con la cosecha. Uno de marzo a abril, que es cuando se cosecha el maíz temprano, y el otro de junio a agosto, que es cuando se cosecha el maíz tardío.
  • Soja: exhibe también dos periodos estacionales de cosecha. Uno de abril a junio, que es cuando se cosecha la soja de primera, y el otro de agosto a octubre, que es cuando se cosecha la soja de segunda.
  • Trigo: posee un periodo estacional de cosecha, que va desde mediados de noviembre a febrero.
  • Girasol: un período desde mediados de diciembre a marzo.
  • Cebada: también un período desde mediados de noviembre a febrero.
  • Sorgo: la cosecha se desarrolla entre mediados de febrero hasta junio, debido a que se prioriza la cosecha de maíz y soja.


Figura 4: Estacionalidad mensual del flujo comercial según cada grano en millones de toneladas.

Fuente: Bolsa de Cereales en base a datos del SIO-GRANOS del 2015 - 2020

Al sumar los flujos mensuales de todos los granos se puede observar como la influencia de la estacionalidad de soja, maíz y trigo impactan notoriamente. La cosecha de la soja de primera y el maíz temprano marcan el primer pico en las cantidades transportadas entre abril - mayo. El segundo pico está influenciado por la soja de segunda y el maíz tardío en julio. Finalmente, la cosecha de trigo, girasol y cebada impactan en el mes de diciembre.


Figura 5: Estacionalidad mensual del flujo comercial de granos en millones de toneladas.

Fuente: Bolsa de Cereales en base a datos del SIO-GRANOS del 2015 - 2020



Dashboard Interactivo


Fuente: Bolsa de Cereales en base a datos del SIO-GRANOS del 2015 - 2020

LS0tDQp0aXRsZTogPHNwYW4gc3R5bGU9ImNvbG9yOnN0ZWVsYmx1ZSI+TWFwYSBkZSBsYSBjb21lcmNpYWxpemFjacOzbiBkZSBncmFub3MgZW4gQXJnZW50aW5hPC9zcGFuPg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiDQphdXRob3I6ICJKdWFuIFBhYmxvIEdpYW5hdGllbXBvIC0gQm9sc2EgZGUgQ2VyZWFsZXMiDQp0YWdzOg0KLSBTb2phDQotIE1hw616DQotIFRyaWdvDQotIENvbWVyY2lhbGl6YWNpw7NuDQotIEJpZ0RhdGENCi0gRURBDQotIEdyYW5vcw0KLSBEYXRhVml6DQotLS0NCg0KKioqDQoNCj4gIyMgIEludHJvZHVjY2nDs24NCg0KPGRpdiBjbGFzcz10ZXh0LWp1c3RpZnk+DQpMYSBkaXNwb25pYmlsaWRhZCBkZSB1biBncmFuIHZvbHVtZW4gZGUgZGF0b3MsIGFzw60gY29tbyByZWNpZW50ZXMgYXZhbmNlcyBlbiBsYXMgdMOpY25pY2FzIHBhcmEgc3UgcHJvY2VzYW1pZW50byB5IGFuw6FsaXNpcywgcGVybWl0ZW4gYWN0dWFsbWVudGUgYWJvcmRhciBudWV2b3MgeSB2aWVqb3MgaW50ZXJyb2dhbnRlcyBvYnRlbmllbmRvIHJlc3B1ZXN0YXMgbcOhcyBwcmVjaXNhcy4gDQoNCkEgbG8gbGFyZ28gZGUgbGFzIGRpc3RpbnRhcyBjYW1wYcOxYXMsIHBvciBzdSByZWxldmFuY2lhIHBhcmEgbGEgZWNvbm9tw61hIGFyZ2VudGluYSwgdnVlbHZlbiBhIHN1cmdpciBwcmVndW50YXMgZW4gdG9ybm8gYSBsYSBwcm9kdWNjacOzbiB5IGNvbWVyY2lhbGl6YWNpw7NuIGRlIGdyYW5vczogX8K/Q3XDoWwgZnVlIGVsIHZvbHVtZW4gcHJvZHVjaWRvPyDCv0TDs25kZSBzZSBvcmlnaW5hPyDCv0Jham8gcXXDqSBtb2RhbGlkYWRlcyBzZSBjb21lcmNpYWxpemE/IMK/Q3XDoW50byBlc3R1dm8gZGVzdGluYWRvIGFsIG1lcmNhZG8gZG9tw6lzdGljbz8gwr9RdcOpIHB1ZXJ0b3MgY29uY2VudHJhcm9uIGxhIG1heW9yIHBhcnRlIGRlIGxhIGV4cG9ydGFjacOzbj8gwr9FbiBxdcOpIG1vbWVudG8gZGVsIGHDsW8gc2UgY29tZXJjaWFsaXphbiBsb3MgbWF5b3JlcyB2b2zDum1lbmVzP18gQXVucXVlIGxhcyBwcmVndW50YXMgcGFyZXpjYW4gc2ltcGxlcywgbGxlZ2FyIGEgcmVzcHVlc3RhcyBjb25maWFibGVzIG5vIGxvIGVzIHRhbnRvLiBUw61waWNhbWVudGUsIGVzdGUgdGlwbyBkZSBjdWVzdGlvbmVzIHNvbiByZXNwb25kaWRhcyBtZWRpYW50ZSBzdXB1ZXN0b3MsIGNvbnN1bHRhcyBhIGV4cGVydG9zLCBvIGRhdG9zIGFncmVnYWRvcyBkZWwgc2VjdG9yLg0KDQpQb3IgZXN0ZSBtb3Rpdm8sIGVsIHByZXNlbnRlIHRyYWJham8gdGllbmUgY29tbyBvYmpldGl2byBwcmluY2lwYWwgZXhwbG9yYXIgbnVldm9zIG3DqXRvZG9zIHBhcmEgcmVzcG9uZGVyIGEgZXN0b3MgaW50ZXJyb2dhbnRlcywgcG9yIG1lZGlvIGRlIHVuYSBiYXNlIGRlIGRhdG9zIHJlbGF0aXZhbWVudGUgcG9jbyBleHBsb3RhZGEgeSBjb24gdW4gZ3JhbiBwb3RlbmNpYWwgY29tbyBTSU8tR1JBTk9TLiBMYXMgdMOpY25pY2FzIHF1ZSBkZXJpdmFuIGRlbCBjYW1wbyBkZWwgYW7DoWxpc2lzIGRlIGdyYW5kZXMgdm9sw7ptZW5lcyBkZSBkYXRvcyByZXN1bHRhbiBkZSBlc3BlY2lhbCB1dGlsaWRhZCBwYXJhIGVzdGEgdGFyZWEuDQoNCkVuIHBhcnRpY3VsYXIsIHNlIGJ1c2PDsyBhbmFsaXphciBsb3MgZmx1am9zIGNvbWVyY2lhbGVzIGRlIGdyYW5vcyBhbCBpbnRlcmlvciBkZWwgcGHDrXMgYSBsbyBsYXJnbyBkZSBsb3MgYcOxb3MsIGlkZW50aWZpY2FuZG8gZWwgb3JpZ2VuLCBlbCBkZXN0aW5vIHkgbGEgZXN0YWNpb25hbGlkYWQgc2Vnw7puIGNhZGEgZXNwZWNpZS4gDQoNCg0KPC9kaXY+DQoNCjxiciAvPg0KDQoqKioNCg0KPiAjIyAgTcOpdG9kbw0KDQo8ZGl2IGNsYXNzPXRleHQtanVzdGlmeT4NCltTSU8tR1JBTk9TXShodHRwczovL3d3dy5zaW9ncmFub3MuY29tLmFyL3F1ZV9lc19zaW9ncmFub3MuaHRtbCkgZXMgdW4gU2lzdGVtYSB1bmlmaWNhZG8gZGUgSW5mb3JtYWNpw7NuIE9ibGlnYXRvcmlhIGRlIGxhcyBvcGVyYWNpb25lcyBkZSBjb21wcmF2ZW50YSBkZSBncmFub3MgcXVlIGNvbmZvcm1hbiBlbCBNZXJjYWRvIEbDrXNpY28sIGRlc2Fycm9sbGFkbyBwb3IgbGFzIEJvbHNhcyBkZSBDZXJlYWxlcyB5IGVsIE1BVGJhLVJvZmV4LiAgVG9kb3MgbG9zIG9wZXJhZG9yZXMgaW5jbHVpZG9zIGVuIGVsIFJVQ0EgZGViZW4gYWNjZWRlciBhbCBzaXN0ZW1hIHkgcmVhbGl6YXIgZGVjbGFyYWNpb25lcyBkZSBsYXMgb3BlcmFjaW9uZXMgcmVhbGl6YWRhcy4gRWwgc2lzdGVtYSAgYWRtaXRlIHVuIHNvbG8gZGVjbGFyYW50ZSBlbiBjYWRhIG9wZXJhY2nDs246IGVsICBjb3JyZWRvciAoc2kgbG8gaHViaWVyYSkgbyBlbiBzdSBkZWZlY3RvLCBlbCBjb21wcmFkb3IuIEVuIGVzdGEgb3BvcnR1bmlkYWQsIHNlIHRvbWFyb24gbGEgdG90YWxpZGFkIGRlIGxvcyBkYXRvcyBkZXNkZSBlbCBhw7FvIDIwMTUgYWwgMjAyMCwgcXVlIGNvbXByZW5kZW4gYXByb3hpbWFkYW1lbnRlIDQgbWlsbG9uZXMgZGUgcmVnaXN0cm9zLiANCg0KUGFyYSBpZGVudGlmaWNhciBsYXMgY2FudGlkYWRlcyB0cmFuc3BvcnRhZGFzIGRlIGdyYW5vcyBzZSBzdW1hcm9uIGxhcyBjYW50aWRhZGVzIGNvcnJlc3BvbmRpZW50ZXMgYSBsYSBtb2RhbGlkYWQgZGUgY29tcHJhdmVudGEsIHNpbiBpbXBvcnRhciBzdSBjb25kaWNpw7NuIGRlIHBhZ28sIG5pIHRhbXBvY28gc2kgY29ycmVzcG9uZMOtYW4gYSB1biBkZXN0aW5vIGZpbmFsIG8gbm8uIEx1ZWdvLCBzZSBzdW1hcm9uIGxhcyBhbXBsaWFjaW9uZXMgZGUgbG9zIGNvbnRyYXRvcyB5IHNlIHJlc3Rhcm9uIGxhcyBhbnVsYWNpb25lcy4NCg0KTGFzIG3DoXMgcmVjaWVudGVzIGhlcnJhbWllbnRhcyBwYXJhIGVsIHByb2Nlc2FtaWVudG8gZGUgZGF0b3MgcHJvYmFyb24gc2VyIGRlIGdyYW4gdXRpbGlkYWQgcGFyYSBlc3RlIHRyYWJham8uIFNlIHV0aWxpesOzIFB5dGhvbiBwYXJhIGxhcyBldGFwYXMgZGUgZXh0cmFjY2nDs24geSBub3JtYWxpemFjacOzbiwgeSBSIHBhcmEgbGEgdHJhbnNmb3JtYWNpw7NuIHkgbGEgdmlzdWFsaXphY2nDs24uIFBvciBvdHJvIGxhZG8sIEZsb3VyaXNoIHkgUG93ZXIgQmkgaGFiaWxpdGFuIGxhcyB2aXN1YWxpemFjaW9uZXMgaW50ZXJhY3RpdmFzIHF1ZSBzZSBvYnNlcnZhbiBkZWJham8uDQoNCg0KPC9kaXY+DQoNCjxiciAvPg0KDQoqKioNCg0KPiAjIyBJbXBvcnRhbmNpYQ0KDQo8ZGl2IGNsYXNzPXRleHQtanVzdGlmeT4NCk3DoXMgYWxsw6EgZGUgbG9zIHJlc3VsdGFkb3Mgb2J0ZW5pZG9zLCBsYSBpbXBvcnRhbmNpYSBkZSBlc3RlIHRyYWJham8gcmFkaWNhIGVuIGxhIHBvc2liaWxpZGFkIGRlIHJlc3BvbmRlciBwcmVndW50YXMgaGFiaXR1YWxlcyB1dGlsaXphbmRvIG51ZXZhIGluZm9ybWFjacOzbi4gSGFzdGEgZWwgbW9tZW50bywgY2FyYWN0ZXJpesOhYmFtb3MgbG9zIGZsdWpvcyBjb21lcmNpYWxlcyBmdW5kYW1lbnRhbG1lbnRlIGRlc2RlIGVsIGRlc3Rpbm8gZGUgbG9zIGdyYW5vcywgY29uIGFuY2xhIGVuIGxvcyBkYXRvcyBkZSBleHBvcnRhY2nDs24uIEFob3JhIHN1cmdlIGxhIHBvc2liaWxpZGFkIGRlIGVzdHVkaWFyIGxvcyBmbHVqb3MgZGVzZGUgZWwgb3JpZ2VuLCBhIHRyYXbDqXMgZGUgbGFzIG9wZXJhY2lvbmVzIHBhcnRpY3VsYXJlcyBkZSBjb21wcmEtdmVudGEuDQoNCkVuIGVzdGUgc2VudGlkbywgZXMgcG9zaWJsZSBjcnV6YXIgcmVzdWx0YWRvcyB5IHZhbGlkYXIgbGFzIHJlc3B1ZXN0YXMgcXVlIHNlIG9idGVuw61hbiBoYXN0YSBlbCBtb21lbnRvIHBvciBtZWRpbyBkZSBmdWVudGVzIGFsdGVybmF0aXZhcy4gWSBjb21vIHNlIHB1ZWRlIGFwcmVjaWFyLCBsb3MgcmVzdWx0YWRvcyBwYXJlY2VuIGVuIGzDrW5lYSBjb24gbG9zIHF1ZSBzdXJnZW4gZGUgb3RyYXMgYmFzZXMgZGUgZGF0b3MgY29tbyBlc3RpbWFjaW9uZXMgZGUgcHJvZHVjY2nDs24sIGNhbWlvbmVzIGFycmliYWRvcyBhIHB1ZXJ0bywgZW1iYXJxdWVzIHkgZXhwb3J0YWNpb25lcy4gVGFtYmnDqW4gZXMgcG9zaWJsZSBjb21wbGVtZW50YXIgZXN0dWRpb3MgeSBzYWNhciBtZWpvcmVzIGNvbmNsdXNpb25lcyBpbnNwZWNjaW9uYW5kbyBlbCBbZGFzaGJvYXJkIGludGVyYWN0aXZvXSgjZGFzaGJvYXJkLWludGVyYWN0aXZvKSBhbCBmaW5hbCBkZWwgYXJ0w61jdWxvLg0KDQpTaSBiaWVuIGVuIGVzdGUgYXJ0w61jdWxvIHNlIGNvbmNlbnRyYSBlbiBsb3MgYWdyZWdhZG9zIHByb3ZpbmNpYWxlcywgbGEgaW5mb3JtYWNpw7NuIGVzdMOhIGRpc3BvbmlibGUgcG9yIGRlcGFydGFtZW50b3MsIGFicmllbmRvIGxhIHBvc2liaWxpZGFkIGEgZXN0dWRpb3MgbcOhcyBlc3BlY8OtZmljb3MuIEVzdGEgdGFyZWEgcHVlZGUgc2VyIGRlIGVzcGVjaWFsIGltcG9ydGFuY2lhIHBhcmEgbWVqb3JhciBsYSB0b21hIGRlIGRlY2lzaW9uZXMgcHJvZHVjdGl2YXMsIGNvbWVyY2lhbGVzLCBsb2fDrXN0aWNhcyB5IGRlIGludmVyc2lvbmVzLCBlc3BlY2lhbG1lbnRlIGVuIGluZnJhZXN0cnVjdHVyYS4NCg0KUG9yIG90cm8gbGFkbywgbGFzIHTDqWNuaWNhcyBhcXXDrSBlbXBsZWFkYXMgcGVybWl0ZW4gYXZhbnphciBlbiBsYSBjb25zdHJ1Y2Npw7NuIGRlIG51ZXZhcyBoZXJyYW1pZW50YXM6IGxhIGVsYWJvcmFjacOzbiBkZSBtb25pdG9yZXMgcGFyYSBzZWd1aXIgbGEgZXZvbHVjacOzbiBkZSBkaXN0aW50b3MgaW5kaWNhZG9yZXMgeSB2YXJpYWJsZXM7IHkgbGEgY29uc3RydWNjacOzbiBkZSBtb2RlbG9zIHByZWRpY3Rpdm9zLiBBbWJhcyBsw61uZWFzIGRlIHRyYWJham8gc2UgZW5jdWVudHJhbiBlbiBkZXNhcnJvbGxvIGVuIGxhIEJvbHNhIGRlIENlcmVhbGVzLg0KDQpGaW5hbG1lbnRlLCBsYSBtZXRvZG9sb2fDrWEgYXF1w60gdXRpbGl6YWRhIHB1ZWRlIHNlciBhcGxpY2FkYSBzb2JyZSBsYSBtaXNtYSBiYXNlIGRlIFNJTy1HUkFOT1MgcGFyYSBvYnRlbmVyIGluZm9ybWFjacOzbiBlbiByZWxhY2nDs24gYSBpbnRlcnJvZ2FudGVzIG3DoXMgY29tcGxlam9zLCByZWxhY2lvbmFkb3MgcG9yIGVqZW1wbG8gY29uIGVsIGZpbmFuY2lhbWllbnRvIG9idGVuaWRvIHBvciBsb3MgcHJvZHVjdG9yZXMgZW4gY2FkYSBjYW1wYcOxYSBhZ3LDrWNvbGEuIFVuIHRyYWJham8gZW4gZXN0ZSBzZW50aWRvIHNlIHB1YmxpY2Fyw6EgYSBsYSBicmV2ZWRhZCBlbiBlc3RlIGJsb2cuIA0KDQo8L2Rpdj4NCg0KPGJyIC8+DQoNCioqKg0KDQo+ICMjIFByaW5jaXBhbGVzIGhhbGxhemdvcw0KDQo8ZGl2IGNsYXNzPXRleHQtanVzdGlmeT4NCg0KLQlEZWwgMjAxNSBhbCAyMDIwIHNlIHRyYW5zcG9ydGFyb24gNjMyLDUgTXRuLCBkZSBsYXMgY3VhbGVzIHVuIDQ1JSBjb3JyZXNwb25kZW4gYSBzb2phLCAzMiUgYSBtYcOteiwgMTclIGEgdHJpZ28geSBlbCA2JSByZXN0YW50ZSBhIGNlYmFkYSwgZ2lyYXNvbCB5IHNvcmdvLiBfX0VuIHByb21lZGlvLCBzZSB0cmFuc3BvcnRhbiAxMDUsNCBNdG4gYWwgYcOxb19fLiBFbCBtw61uaW1vIHZhbG9yIHNlIHJlZ2lzdHLDsyBlbiBlbCBhw7FvIDIwMTggY29uIDkwLDkgTXRuIHkgZWwgbcOheGltbyBlbiBlbCBhw7FvIDIwMTkgY29uIDEyMiw2IE10bi4NCg0KLSBMYSBwYXJ0aWNpcGFjacOzbiBkZSBzb3Jnbywgc29qYSB5IGdpcmFzb2wgZGlzbWludXnDsyBlbiBsYXMgY2FudGlkYWRlcyB0cmFuc3BvcnRhZGFzLCBzaWVuZG8gc29qYSBsYSBxdWUgcmVnaXN0cmEgbGEgbWF5b3IgY2HDrWRhLiBNaWVudHJhcyBxdWUgX19sYSBwYXJ0aWNpcGFjacOzbiB0cmlnbywgY2ViYWRhIHkgbWHDrXogYXVtZW50w7NfXywgc2llbmRvIG1hw616IGVsIHF1ZSByZWdpc3RyYSBlbCBtYXlvciBpbmNyZW1lbnRvLiANCg0KLQlMYXMgcHJvdmluY2lhcyBkZSBfX0J1ZW5vcyBBaXJlcywgQ8OzcmRvYmEsIFNhbnRhIEZlLCBFbnRyZSBSw61vcyB5IExhIFBhbXBhX18sIHF1ZSBzZSBlbmN1ZW50cmFuIGEgdW5hIGRpc3RhbmNpYSBpbmZlcmlvciBhIDM1MCBrbSBkZWwgcHVlcnRvIG3DoXMgY2VyY2FubywgX19zb24gZWwgb3JpZ2VuIGRlbCA5MCUgZGUgbGFzIGNhbnRpZGFkZXMgdHJhbnNwb3J0YWRhc19fLiBTaW4gZW1iYXJnbywgbG9zIG1heW9yZXMgaW5jcmVtZW50b3MgZW4gbGFzIGNhbnRpZGFkZXMgdHJhbnNwb3J0YWRhcyBzZSBkaWVyb24gZW4gZWwgcmVzdG8gZGVsIHBhw61zLg0KDQotCV9fRWwgNjQlX18gZGUgbG9zIGdyYW5vcyB0cmFuc3BvcnRhZG9zIF9fdGllbmUgY29tbyBkZXN0aW5vIGxvcyBwdWVydG9zX18gZGUgQmFow61hIEJsYW5jYSwgUXVlcXXDqW4geSBSb3NhcmlvLCBzaWVuZG8gbG9zIHViaWNhZG9zIGFsIE5vcnRlIHkgU3VyIGRlIGVzdGUgw7psdGltbyBsb3MgZGUgbWF5b3IgcmVsZXZhbmNpYS4NCg0KLQlEZSBsYXMgcHJpbmNpcGFsZXMgcHJvdmluY2lhcyBwcm9kdWN0b3JhcywgX19zb2xhbWVudGUgQnVlbm9zIEFpcmVzIHRpZW5lIGNvbW8gbHVnYXIgZGUgZW50cmVnYSBsb3MgcHVlcnRvcyBkZSBRdWVxdcOpbiB5IEJhaMOtYSBCbGFuY2FfXywgY29uY2VudHLDoW5kb3NlIGVuIGVsIGN1bHRpdm8gZGUgdHJpZ28uDQoNCi0JX19Mb3MgcGVyaW9kb3MgZGUgY29zZWNoYSBkZSBjYWRhIGdyYW5vIGNvbnRpbsO6YW4gZGV0ZXJtaW5hbmRvIGxhIGVzdGFjaW9uYWxpZGFkIGVuIGxvcyBmbHVqb3MgY29tZXJjaWFsZXNfXy4gTG9zIG1lc2VzIGRlIGFicmlsLCBtYXlvLCBqdWxpbyB5IGRpY2llbWJyZSBjb25jZW50cmFuIGxhIG1heW9yIHBhcnRlIGRlIGxhcyBjYW50aWRhZGVzIHRyYW5zcG9ydGFkYXMgYSBsbyBsYXJnbyBlbCBhw7FvLg0KDQotIF9fRWwgMzYlX18gZGUgbG9zIGdyYW5vcyB0cmFuc3BvcnRhZG9zIF9fdGllbmUgY29tbyBkZXN0aW5vIGFsIG1lcmNhZG8gaW50ZXJub19fLiBfX0VuIHByb21lZGlvX18sIHNlIHRyYW5zcG9ydGFyb24gYSBlc3RlIGRlc3Rpbm8gX18zNyw3IE10biBhbnVhbGVzX18uIEVsIG3DoXhpbW8gc2UgcmVnaXN0csOzIGVuIGVsIGHDsW8gMjAxNiBjb24gNDYgTXRuIHkgZWwgbcOtbmltbyBlbiBlbCAyMDE4IGNvbiAzMCw3IE10bi4NCg0KPC9kaXY+DQoNCjxiciAvPg0KDQoqKioNCg0KPiAjIyBSZXN1bHRhZG9zDQoNCjxkaXYgY2xhc3M9dGV4dC1qdXN0aWZ5Pg0KQ29tbyBzZSBwdWVkZSBvYnNlcnZhciBlbiBsYSBmaWd1cmEgMSwgbG9zIGZsdWpvcyBjb21lcmNpYWxlcyBkZSBncmFub3Mgbm8gdHV2aWVyb24gdW5hIHRlbmRlbmNpYSBkZWZpbmlkYSBhIGxvIGxhcmdvIGRlbCBwZXJpb2RvIG9ic2VydmFkby4gTG9zIG1pc21vcyBndWFyZGFuIHVuYSByZWxhY2nDs24gZGlyZWN0YSBjb24gbGFzIGNhbnRpZGFkZXMgcHJvZHVjaWRhcywgcXVlIHNlIHJlbGFjaW9uYW4gY29uIGxvcyBpbmNlbnRpdm9zIGVjb27Ds21pY29zIHF1ZSByZWNpYmUgZWwgcHJvZHVjdG9yIOKAkyBkZXRlcm1pbmFkbyBwb3IgbGFzIHJlbGFjaW9uZXMgaW5zdW1vIHByb2R1Y3RvIHkgbGFzIGV4cGVjdGF0aXZhcyBkZSBwb2zDrXRpY2FzIOKAkyB5IGxhcyBjb25kaWNpb25lcyBjbGltw6F0aWNhcywgZW50cmUgb3Ryb3MgZmFjdG9yZXMuIA0KDQpFbiBlbCB0b3RhbCBkZWwgcGVyaW9kbyBlc3R1ZGlhZG8gc2UgdHJhbnNwb3J0YXJvbiA2MzIsNSBNdG4sIGRlIGxhcyBjdWFsZXMgdW4gNDUlIGNvcnJlc3BvbmRlbiBhIHNvamEsIDMyJSBhIG1hw616LCAxNyUgYSB0cmlnbyB5IGVsIDYlIHJlc3RhbnRlIGEgY2ViYWRhLCBnaXJhc29sIHkgc29yZ28uIEVuIHByb21lZGlvLCBzZSB0cmFuc3BvcnRhbiAxMDUsNCBNdG4gYWwgYcOxby4gRWwgbcOtbmltbyB2YWxvciBzZSByZWdpc3Ryw7MgZW4gZWwgYcOxbyAyMDE4IGNvbiA5MCw5IE10biB5IGVsIG3DoXhpbW8gZW4gZWwgYcOxbyAyMDE5IGNvbiAxMjIsNiBNdG4uIEVzdGEgZGluw6FtaWNhIGVuIGxhcyBjYW50aWRhZGVzIHRyYW5zcG9ydGFkYXMgZXN0w6EgZW4gbMOtbmVhIGNvbiBsYXMgZXN0aW1hY2lvbmVzIGRlIHByb2R1Y2Npw7NuIGRlIGxhIEJvbHNhIGRlIENlcmVhbGVzLiBSZWZsZWphbiBlbCBncmFuIGF1bWVudG8gZGUgbGEgcHJvZHVjY2nDs24gZW4gbGEgY2FtcGHDsWEgMjAxNi8xNyBjb21vIHJlYWNjacOzbiBhbCBudWV2byBzZXQgZGUgcG9sw610aWNhcywgbGEgc2V2ZXJhIHNlcXXDrWEgcXVlIGFmZWN0byBsYSBjYW1wYcOxYSAyMDE3LzE4LCBsYSBncmFuIGNvc2VjaGEgZGUgbGEgY2FtcGHDsWEgMjAxOC8xOSB5IGVsIGNhbWJpbyBkZSBpbmNlbnRpdm9zIGRlbCBudWV2byBzZXQgZGUgcG9sw610aWNhcyBxdWUsIGp1bnRvIGEgdW4gZXNjZW5hcmlvIGNsaW3DoXRpY28gbWVub3MgZmF2b3JhYmxlLCByZWR1am8gbGEgcHJvZHVjY2nDs24gZGUgbGEgY2FtcGHDsWEgMjAxOS8yMC4NCg0KPC9kaXY+DQoNCg0KPGJyIC8+DQoNCiMjIyMgRmlndXJhIDE6IEZsdWpvcyBjb21lcmNpYWxlcyBkZSBncmFub3MgYW51YWxpemFkbyB5IGVuIG1pbGxvbmVzIGRlIHRvbmVsYWRhcy4NCg0KYGBge3IgZmlnLmhlaWdodCA9IDUsIGZpZy53aWR0aCA9IDguNzUsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0UscmVzdWx0cz0naGlkZScsbWVzc2FnZT1GQUxTRX0NCg0KaW52aXNpYmxlKGxpYnJhcnkoa2FibGVFeHRyYSkpDQppbnZpc2libGUobGlicmFyeSh0aWR5dmVyc2UpKQ0KaW52aXNpYmxlKGxpYnJhcnkoc2NhbGVzKSkNCmludmlzaWJsZShsaWJyYXJ5KGhpZ2hjaGFydGVyKSkNCmludmlzaWJsZShsaWJyYXJ5KHBsb3RseSkpDQoNCmdncGxvdGx5KA0KZ2dwbG90KGRhdGFBbnVhbEdyYWYyICU+JSByZW5hbWUoIkHDkU8iID0gQU5PKSAlPiUgbXV0YXRlKEHDkU8gPSBhcy5mYWN0b3IoQcORTykpLCBhZXMoeD1Bw5FPLCB5PWBDQU5USURBREVTIChNdG4pYCApKSsNCiAgZ2VvbV9jb2woYWVzKGZpbGw9IEHDkU8pKSsNCiAgI2ZhY2V0X3dyYXAoflBST0RVQ1RPLCBzY2FsZXMgPSAiZnJlZV95IikrDQogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiQmx1ZXMiKSsNCiAgdGhlbWVfYncoKSsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSsNCiAgeGxhYigiQcOxbyIpKyANCiAgeWxhYigiTWlsbG9uZXMgZGUgdG9uZWxhZGFzIikNCikgDQojICU+JSANCiMgICBsYXlvdXQoYW5ub3RhdGlvbnMgPSANCiMgbGlzdCh4ID0gMCwgeSA9IC0wLjEsIHRleHQgPSAiRnVlbnRlOiBCb2xzYSBkZSBDZXJlYWxlcyBlbiBiYXNlIGEgZGF0b3MgZGVsICBTSU8tR1JBTk9TIGRlbCAyMDE1IC0gMjAyMCIsIA0KIyAgICAgIHNob3dhcnJvdyA9IEYsIHhyZWY9J3BhcGVyJywgeXJlZj0ncGFwZXInLCANCiMgICAgICB4YW5jaG9yPSdyaWdodCcsIHlhbmNob3I9J2F1dG8nLCB4c2hpZnQ9MCwgeXNoaWZ0PTAsDQojICAgICAgZm9udD1saXN0KHNpemU9OSwgY29sb3I9ImdyYXkiKSkNCiMgKQ0KDQoNCmBgYA0KPGZvbnQgc2l6ZT0iMiI+IEZ1ZW50ZTogQm9sc2EgZGUgQ2VyZWFsZXMgZW4gYmFzZSBhIGRhdG9zIGRlbCAgU0lPLUdSQU5PUyBkZWwgMjAxNSAtIDIwMjAgPC9mb250Pg0KPGJyIC8+DQoNCg0KPGRpdiBjbGFzcz10ZXh0LWp1c3RpZnk+DQpBbCBvYnNlcnZhciBsYSBwYXJ0aWNpcGFjacOzbiBkZSBjYWRhIGdyYW5vIGVuIGVsIHRvdGFsIHRyYW5zcG9ydGFkbyBhbnVhbG1lbnRlLCBzZSBwdWVkZSBjb25jbHVpciBxdWUgYSBsbyBsYXJnbyBkZWwgcGVyaW9kbyBlc3R1ZGlhZG8gc2UgcHJvZHVqZXJvbiBjYW1iaW9zIHNpZ25pZmljYXRpdm9zLiBFbnRyZSBsb3MgZ3Jhbm9zIHF1ZSBkaXNtaW51eWVyb24gc3UgcGFydGljaXBhY2nDs24gc2UgZW5jdWVudHJhbiBzb3JnbywgZ2lyYXNvbCB5IHNvamEsIGNvbiBjYcOtZGFzIGRlIDAsNjsgMCw0IHkgMTkgcHVudG9zIHBvcmNlbnR1YWxlcywgcmVzcGVjdGl2YW1lbnRlLiBNaWVudHJhcyBxdWUgZW50cmUgbG9zIHF1ZSBhdW1lbnRhcm9uIHN1IHBhcnRpY2lwYWNpw7NuIHNlIGVuY3VlbnRyYW4gdHJpZ28sIGNlYmFkYSB5IG1hw616LCBjb24gc3ViYXMgZGUgMiBwdW50b3MgcG9yY2VudHVhbGVzIHBhcmEgbG9zIGRvcyBwcmltZXJvcywgeSAxNiBwYXJhIGVsIGNlcmVhbCBkZSB2ZXJhbm8uIFNpbiBlbWJhcmdvLCBkZWJlIGRlc3RhY2Fyc2UgcXVlIGVuIGVsIGNhc28gZGVsIHRyaWdvLCBhc2NpZW5kZSBhIHVuYSBwYXJ0aWNpcGFjacOzbiBkZWwgMTklIGVuIGVsIGHDsW8gMjAxOCwgcGFyYSBsdWVnbyBkaXNtaW51aXIgaGFzdGEgZWwgMTUlLiBVbmEgc2l0dWFjacOzbiBzaW1pbGFyIG9jdXJyZSBlbiBlbCBnaXJhc29sLCBzdWJlIGhhc3RhIGVsIGHDsW8gMjAxOCB5IGx1ZWdvIGRlc2NpZW5kZSwgY29uIHVuYSBwYXJ0aWNpcGFjacOzbiBmaW5hbCBpbmNsdXNvIGluZmVyaW9yIGEgbGEgaW5pY2lhbC4gTnVldmFtZW50ZSwgZXN0b3MgY29tcG9ydGFtaWVudG9zIHNlIGNvcnJlc3BvbmRlbiBjb24gbGFzIGVzdGltYWNpb25lcyBkZSBwcm9kdWNjacOzbiBwYXJhIGVzb3MgYcOxb3MsIGRvbmRlIHNlIG9ic2VydmEgdW4gYXVtZW50byBlbiBsYSBwYXJ0aWNpcGFjacOzbiBkZSBncmFtw61uZWFzIGVuIHJlbGFjacOzbiBhIG9sZWFnaW5vc2FzLiANCjwvZGl2Pg0KDQo8YnIgLz4NCg0KIyMjIyBUYWJsYSAxOiBQYXJ0aWNpcGFjacOzbiBkZSBjYWRhIGdyYW5vIGVuIGxhcyBjYW50aWRhZGVzIHRyYW5zcG9ydGFkYXMuDQoNCmBgYHtyIGZpZy5oZWlnaHQgPSA1LCBmaWcud2lkdGggPSA4Ljc1LGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFLHJlc3VsdHM9J2hpZGUnLG1lc3NhZ2U9RkFMU0V9DQppbnZpc2libGUobGlicmFyeShyZWFkeGwpKQ0KaW52aXNpYmxlKGxpYnJhcnkoa2FibGVFeHRyYSkpDQppbnZpc2libGUobGlicmFyeSh0aWR5dmVyc2UpKQ0KaW52aXNpYmxlKGxpYnJhcnkoc2NhbGVzKSkNCmludmlzaWJsZShsaWJyYXJ5KGhpZ2hjaGFydGVyKSkNCmludmlzaWJsZShsaWJyYXJ5KHBsb3RseSkpDQoNClRhYmxhMSA8LSByZWFkX2V4Y2VsKCJEYXRhL1RhYmxhcy54bHN4IiwgDQogICAgc2hlZXQgPSAiVGFibGExIikNCg0KcGVyY2VudCA8LSBmdW5jdGlvbih4LCBkaWdpdHMgPSAwLCBmb3JtYXQgPSAiZiIsIC4uLikgew0KICBwYXN0ZTAoZm9ybWF0QygxMDAgKiB4LCBmb3JtYXQgPSBmb3JtYXQsIGRpZ2l0cyA9IGRpZ2l0cywgLi4uKSwgIiUiKQ0KfQ0KDQpUYWJsYTEkYDIwMTVgID0gcGVyY2VudChUYWJsYTEkYDIwMTVgKQ0KVGFibGExJGAyMDE2YCA9IHBlcmNlbnQoVGFibGExJGAyMDE2YCkNClRhYmxhMSRgMjAxN2AgPSBwZXJjZW50KFRhYmxhMSRgMjAxN2ApDQpUYWJsYTEkYDIwMThgID0gcGVyY2VudChUYWJsYTEkYDIwMThgKQ0KVGFibGExJGAyMDE5YCA9IHBlcmNlbnQoVGFibGExJGAyMDE5YCkNClRhYmxhMSRgMjAyMGAgPSBwZXJjZW50KFRhYmxhMSRgMjAyMGApDQpUYWJsYTEkUHJvbWVkaW8gPSBwZXJjZW50KFRhYmxhMSRQcm9tZWRpbykNCg0KDQpUYWJsYTEgJT4lIA0Ka2FibGUoZm9ybWF0ID0gImh0bWwiLCBlc2NhcGUgPSBGLGFsaWduPXJlcCgnYycpKSAlPiUNCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSxmaXhlZF90aGVhZCA9IFQpICU+JSANCiAgICAgICByb3dfc3BlYyhucm93KFRhYmxhMSksIGJvbGQgPSBUUlVFKSAlPiUgDQogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSAic3RlZWxibHVlIikNCmBgYA0KPGZvbnQgc2l6ZT0iMiI+IEZ1ZW50ZTogQm9sc2EgZGUgQ2VyZWFsZXMgZW4gYmFzZSBhIGRhdG9zIGRlbCAgU0lPLUdSQU5PUyBkZWwgMjAxNSAtIDIwMjAgPC9mb250Pg0KPGJyIC8+DQoNCg0KPGRpdiBjbGFzcz10ZXh0LWp1c3RpZnk+DQpPdHJvIGFzcGVjdG8gaW50ZXJlc2FudGUgcGFyYSBpbmRhZ2FyIGVzIGVsIG9yaWdlbiBwcm92aW5jaWFsIGRlIGxvcyBncmFub3MuIENvbW8gc2UgcHVlZGUgb2JzZXJ2YXIgZW4gbGEgRmlndXJhIDIsIGxhcyBwcm92aW5jaWFzIHF1ZSB0aWVuZW4gbWF5b3IgcGFydGljaXBhY2nDs24gc29uOiBCdWVub3MgQWlyZXMsIEPDs3Jkb2JhLCBTYW50YSBGZSwgRW50cmUgUsOtb3MgeSBMYSBQYW1wYS4gTGFzIHByaW1lcmFzIHRyZXMgc29uIG9yaWdlbiBkZSA1MjMsMSBNdG4geSByZXByZXNlbnRhbiB1biA4MyUgZGVsIHRvdGFsLiBTaSBpbmNvcnBvcmFtb3MgRW50cmUgUsOtb3MgeSBMYSBQYW1wYSwgbGFzIGNhbnRpZGFkZXMgYXNjaWVuZGVuIGEgNTY4IE10biB5IHVuIDkwJSBkZWwgdG90YWwuIERlIGVzdGEgZm9ybWEsIHNlIHB1ZWRlIHZlcmlmaWNhciBxdWUgbcOhcyBkZWwgOTAlIGRlIGxvcyBncmFub3MgdHJhbnNwb3J0YWRvcyBzZSBlbmN1ZW50cmFuIGEgdW5hIGRpc3RhbmNpYSBtZW5vciBhIDM1MCBrbSBkZSB1biBwdWVydG8sIGxvIHF1ZSBtYXJjYSB1bmEgdmVudGFqYSBjb21wZXRpdGl2YSBkZSBBcmdlbnRpbmEgcmVzcGVjdG8gYWwgcmVzdG8gZGUgbG9zIGNvbXBldGlkb3JlcyBtdW5kaWFsZXMuDQo8L2Rpdj4NCg0KPGJyIC8+DQoNCiMjIyMgRmlndXJhIDI6IE9yaWdlbiBwcm92aW5jaWFsIGRlIGxvcyBncmFub3MgY29tbyBwb3JjZW50YWplIGRlbCBmbHVqbyB0b3RhbCBjb21lcmNpYWxpemFkby4NCjxpZnJhbWUgc3JjPSdodHRwczovL2Zsby51cmkuc2gvdmlzdWFsaXNhdGlvbi81NDA2OTA5L2VtYmVkJyB0aXRsZT0nSW50ZXJhY3RpdmUgb3IgdmlzdWFsIGNvbnRlbnQnIGZyYW1lYm9yZGVyPScwJyBzY3JvbGxpbmc9J25vJyBzdHlsZT0nd2lkdGg6MTAwJTtoZWlnaHQ6NjAwcHg7JyBzYW5kYm94PSdhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1mb3JtcyBhbGxvdy1zY3JpcHRzIGFsbG93LWRvd25sb2FkcyBhbGxvdy1wb3B1cHMgYWxsb3ctcG9wdXBzLXRvLWVzY2FwZS1zYW5kYm94IGFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbic+PC9pZnJhbWU+DQoNCjxmb250IHNpemU9IjIiPiBGdWVudGU6IEJvbHNhIGRlIENlcmVhbGVzIGVuIGJhc2UgYSBkYXRvcyBkZWwgIFNJTy1HUkFOT1MgZGVsIDIwMTUgLSAyMDIwIDwvZm9udD4NCjxiciAvPg0KDQoNCjxkaXYgY2xhc3M9dGV4dC1qdXN0aWZ5Pg0KDQpSZXN1bHRhIGludGVyZXNhbnRlIGluY29ycG9yYXIgYSBsb3MgZmx1am9zIHByb3ZpbmNpYWxlcyBsb3MgZGVzdGlub3MgZGUgZXNvcyBncmFub3MuIEVuIGxhIEZpZ3VyYSAzIHNlIHB1ZWRlIGlkZW50aWZpY2FyIHF1ZSA0MDYgTXRuIC0gZWwgNjQlIC0gIGRlIGxvcyBncmFub3MgdHJhbnNwb3J0YWRvcyBkdXJhbnRlIGVsIHBlcsOtb2RvIGFuYWxpemFkbyB0dXZvIGNvbW8gZGVzdGlubyBsb3MgcHVlcnRvcyBkZSBCYWjDrWEgQmxhbmNhLCBRdWVxdcOpbiB5IFJvc2FyaW8uIFNvbGFtZW50ZSBsb3MgcHVlcnRvcyBkZSBSb3NhcmlvIChOb3J0ZSB5IFN1cikgcmVjaWJpZXJvbiAzMzEsMSBNdG4sIGVsIDUyJSBkZWwgdG90YWwgdHJhbnNwb3J0YWRvIGRlbCAyMDE1IGFsIDIwMjAuIEFkZW3DoXMsIHRhbWJpw6luIHJlc3VsdGEgaW1wb3J0YW50ZSBkZXN0YWNhciBxdWUsIGVudHJlIGxhcyBwcmluY2lwYWxlcyBwcm92aW5jaWFzIGRlIG9yaWdlbiwgc29sYW1lbnRlIEJ1ZW5vcyBBaXJlcyB0aWVuZSBjb21vIGx1Z2FyIGRlIGVudHJlZ2EgYSBsb3MgcHVlcnRvcyBkZSBRdWVxdcOpbiB5IEJhaMOtYSBCbGFuY2EuIFksIGVuIGdlbmVyYWwsIGVzdG9zIHB1ZXJ0b3Mgc2UgYWJhc3RlY2VuIGVuIG1heW9yIG1lZGlkYSBkZSB0cmlnbywgcXVlIGVzIGVsIGdyYW5vIGNvbiBtYXlvciBwcm9kdWNjacOzbiBjb25jZW50cmFkYSBlbiBCdWVub3MgQWlyZXMuDQoNClBvciBvdHJhIHBhcnRlLCBkdXJhbnRlIGVsIHBlcmlvZG8gZXN0dWRpYWRvIHNlIGRlc3RpbmFyb24gMjI2LDEgTXRuIGFsIG1lcmNhZG8gaW50ZXJubywgdW4gMzYlIGRlIGxvcyBncmFub3MgdHJhbnNwb3J0YWRvcy4gRW4gcHJvbWVkaW8sIHNlIHRyYW5zcG9ydGFyb24gYSBlc3RlIGRlc3Rpbm8gMzcsNyBNdG4gYW51YWxlcy4gRWwgbcOheGltbyBmbHVqbyBzZSByZWdpc3Ryw7MgZW4gZWwgYcOxbyAyMDE2IGNvbiA0NiBNdG4geSBlbCBtw61uaW1vIGVuIGVsIDIwMTggY29uIDMwLDcgTXRuLiBTaW4gZW1iYXJnbywgY29tbyBzZSB2ZXLDoSBhIGNvbnRpbnVhY2nDs24gbGFzIGNhbnRpZGFkZXMgZW4gZWwgMjAyMCBhbGNhbnphcm9uIGxhcyAzNSw1IE10biwgbWFyY2FuZG8gdW5hIGRpc21pbnVjacOzbiByZXNwZWN0byBhIGxhcyA0MCwyIE10biBkZWwgMjAxNS4NCjwvZGl2Pg0KDQo8YnIgLz4NCg0KIyMjIyBGaWd1cmEgMzogRmx1am9zIGNvbWVyY2lhbGVzIGRlIGdyYW5vcyBzZWfDum4gb3JpZ2VuIHByb3ZpbmNpYWwgeSBkZXN0aW5vIGVuIG1pbGxvbmVzIGRlIHRvbmVsYWRhcy4NCjxpZnJhbWUgc3JjPSdodHRwczovL2Zsby51cmkuc2gvdmlzdWFsaXNhdGlvbi81MTkyMzcxL2VtYmVkJyB0aXRsZT0nSW50ZXJhY3RpdmUgb3IgdmlzdWFsIGNvbnRlbnQnIGZyYW1lYm9yZGVyPScwJyBzY3JvbGxpbmc9J25vJyBzdHlsZT0nd2lkdGg6MTAwJTtoZWlnaHQ6NjAwcHg7JyBzYW5kYm94PSdhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1mb3JtcyBhbGxvdy1zY3JpcHRzIGFsbG93LWRvd25sb2FkcyBhbGxvdy1wb3B1cHMgYWxsb3ctcG9wdXBzLXRvLWVzY2FwZS1zYW5kYm94IGFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbic+PC9pZnJhbWU+DQoNCjxmb250IHNpemU9IjIiPiBGdWVudGU6IEJvbHNhIGRlIENlcmVhbGVzIGVuIGJhc2UgYSBkYXRvcyBkZWwgIFNJTy1HUkFOT1MgZGVsIDIwMTUgLSAyMDIwIDwvZm9udD4NCjxiciAvPg0KDQoNCjxkaXYgY2xhc3M9dGV4dC1qdXN0aWZ5Pg0KRW4gbGEgVGFibGEgMiBzZSBwdWVkZSBvYnNlcnZhciBsYSB2YXJpYWNpw7NuIGVuIGxhcyBjYW50aWRhZGVzIHNlZ8O6biBlbCBvcmlnZW4gcHJvdmluY2lhbC4gTGFzIHByb3ZpbmNpYXMgZGUgQ8OzcmRvYmEgeSBFbnRyZSBSw61vcyBwcmVzZW50YW4gZGlzbWludWNpb25lcyBkZWwgMyUgZW4gbGFzIGNhbnRpZGFkZXMgdHJhbnNwb3J0YWRhcywgbWllbnRyYXMgcXVlIGVsIHJlc3RvIGRlIGxhcyBwcmluY2lwYWxlcyBwcm92aW5jaWFzIHByb2R1Y3RvcmFzIHByZXNlbnRhbiBpbmNyZW1lbnRvcyBhIGxvIGxhcmdvIGRlbCBwZXLDrW9kby4gU2kgYmllbiBTYW50YSBGZSBjb250aW7DumEgc2llbmRvIGxhIHByb3ZpbmNpYSBjb24gbWF5b3Igb3JpZ2luYWNpw7NuLCBlbCByZXN0byBkZWwgcGHDrXMgZW4gc3UgY29uanVudG8gcHJlc2VudGEgZWwgbWF5b3IgaW5jcmVtZW50byBwb3JjZW50dWFsICg1MSUpLg0KPC9kaXY+DQoNCjxiciAvPg0KDQojIyMjIFRhYmxhIDI6IEZsdWpvcyBjb21lcmNpYWxlcyBkZSBncmFub3Mgc2Vnw7puIG9yaWdlbiBwcm92aW5jaWFsIGVuIG1pbGxvbmVzIGRlIHRvbmVsYWRhcy4NCmBgYHtyIGZpZy5oZWlnaHQgPSA1LCBmaWcud2lkdGggPSA4Ljc1LGVjaG89RkFMU0Usd2FybmluZyA9IEZBTFNFLHJlc3VsdHM9J2hpZGUnLG1lc3NhZ2U9RkFMU0V9DQoNClRhYmxhMiA8LSByZWFkX2V4Y2VsKCJEYXRhL1RhYmxhcy54bHN4IiwgDQogICAgc2hlZXQgPSAiVGFibGEyIikNCg0KVGFibGEyICU+JSANCmthYmxlKGZvcm1hdCA9ICJodG1sIiwgZXNjYXBlID0gRixhbGlnbj1yZXAoJ2MnKSkgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksZml4ZWRfdGhlYWQgPSBUKSAlPiUgDQogICAgICAgcm93X3NwZWMobnJvdyhUYWJsYTIpLCBib2xkID0gVFJVRSkgJT4lIA0KICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gInN0ZWVsYmx1ZSIpDQpgYGANCjxmb250IHNpemU9IjIiPiBGdWVudGU6IEJvbHNhIGRlIENlcmVhbGVzIGVuIGJhc2UgYSBkYXRvcyBkZWwgIFNJTy1HUkFOT1MgZGVsIDIwMTUgLSAyMDIwIDwvZm9udD4NCjxiciAvPg0KDQoNCjxkaXYgY2xhc3M9dGV4dC1qdXN0aWZ5Pg0KRW4gbGEgVGFibGEgMyBzZSBwdWVkZSBvYnNlcnZhciBsYSB2YXJpYWNpw7NuIGVuIGxhcyBjYW50aWRhZGVzIHNlZ8O6biBlbCBkZXN0aW5vLiBFbCByZXN0byBkZWwgcGHDrXMsIHF1ZSByZXByZXNlbnRhIHRvZG9zIGxvcyBncmFub3MgZGVzdGluYWRvcyBhbCBtZXJjYWRvIGludGVybm8sIGVzIGVsIMO6bmljbyBkZXN0aW5vIGNvbiByZWR1Y2Npw7NuIGVuIGxhcyBjYW50aWRhZGVzIHJlY2liaWRhcyAoLTEyJSkuIEVsIHJlc3RvIGRlIGxvcyBwcmluY2lwYWxlcyBwdWVydG9zIHByZXNlbnRhbiBpbmNyZW1lbnRvcyBlbiBsYXMgY2FudGlkYWRlcywgc2llbmRvIGxvcyBkZSBSb3NhcmlvIFN1ciAoNjAlKSB5IEJhaMOtYSBCbGFuY2EgKDU2JSkgbG9zIHF1ZSBjYXB0dXJhcm9uIGxhIG1heW9yIHBhcnRlIGRlIGxvcyBpbmNyZW1lbnRvcy4gU2luIGVtYmFyZ28sIGxvcyBwdWVydG9zIGRlIFJvc2FyaW8gTm9ydGUgY29udGluw7phbiBzaWVuZG8gZWwgcHJpbmNpcGFsIGRlc3Rpbm8gZGUgbG9zIGdyYW5vcy4NCg0KPC9kaXY+DQoNCjxiciAvPg0KDQojIyMjIFRhYmxhIDM6IEZsdWpvcyBjb21lcmNpYWxlcyBkZSBncmFub3Mgc2Vnw7puIGRlc3Rpbm8gZW4gbWlsbG9uZXMgZGUgdG9uZWxhZGFzLg0KYGBge3IgZmlnLmhlaWdodCA9IDUsIGZpZy53aWR0aCA9IDguNzUsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0UscmVzdWx0cz0naGlkZScsbWVzc2FnZT1GQUxTRX0NCg0KVGFibGEzIDwtIHJlYWRfZXhjZWwoIkRhdGEvVGFibGFzLnhsc3giLCANCiAgICBzaGVldCA9ICJUYWJsYTMiKQ0KDQpUYWJsYTMgJT4lIA0Ka2FibGUoZm9ybWF0ID0gImh0bWwiLCBlc2NhcGUgPSBGLGFsaWduPXJlcCgnYycpKSAlPiUNCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSxmaXhlZF90aGVhZCA9IFQpICU+JSANCiAgICAgICByb3dfc3BlYyhucm93KFRhYmxhMyksIGJvbGQgPSBUUlVFKSAlPiUgDQogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSAic3RlZWxibHVlIikNCmBgYA0KPGZvbnQgc2l6ZT0iMiI+IEZ1ZW50ZTogQm9sc2EgZGUgQ2VyZWFsZXMgZW4gYmFzZSBhIGRhdG9zIGRlbCAgU0lPLUdSQU5PUyBkZWwgMjAxNSAtIDIwMjAgPC9mb250Pg0KPGJyIC8+DQoNCg0KPGRpdiBjbGFzcz10ZXh0LWp1c3RpZnk+DQpGaW5hbG1lbnRlLCBwYXJhIGV2YWx1YXIgbGEgZXN0YWNpb25hbGlkYWQgbWVuc3VhbCBkZSBsb3MgZmx1am9zIGNvbWVyY2lhbGVzIHNlZ8O6biBjYWRhIGdyYW5vIHNlIHByZXNlbnRhIGVuIGxhIEZpZ3VyYSA0IGxhIGRpc3RyaWJ1Y2nDs24gbWVuc3VhbCBkZSBsYXMgY2FudGlkYWRlcyB0cmFuc3BvcnRhZGFzIGVuIG1pbGxvbmVzIGRlIHRvbmVsYWRhcy4gQ29tbyBzZSBwdWVkZSB2aXN1YWxpemFyLCBsYXMgY2FudGlkYWRlcyB0cmFuc3BvcnRhZGFzIHByZXNlbnRhbiBkaXN0aW50byBjb21wb3J0YW1pZW50bywgcXVlIGNvaW5jaWRlIGVuIG1heW9yIG1lZGlkYSBjb24gZWwgcGVyaW9kbyBkZSBjb3NlY2hhIGRlIGNhZGEgY3VsdGl2bzoNCg0KLQlfTWHDrXpfOiBwcmVzZW50YSBkb3MgcGVyaW9kb3MgZXN0YWNpb25hbGVzIHJlbGFjaW9uYWRvcyBjb24gbGEgY29zZWNoYS4gVW5vIGRlIG1hcnpvIGEgYWJyaWwsIHF1ZSBlcyBjdWFuZG8gc2UgY29zZWNoYSBlbCBtYcOteiB0ZW1wcmFubywgeSBlbCBvdHJvIGRlIGp1bmlvIGEgYWdvc3RvLCBxdWUgZXMgY3VhbmRvIHNlIGNvc2VjaGEgZWwgbWHDrXogdGFyZMOtby4NCi0JX1NvamFfOiBleGhpYmUgdGFtYmnDqW4gZG9zIHBlcmlvZG9zIGVzdGFjaW9uYWxlcyBkZSBjb3NlY2hhLiBVbm8gZGUgYWJyaWwgYSBqdW5pbywgcXVlIGVzIGN1YW5kbyBzZSBjb3NlY2hhIGxhIHNvamEgZGUgcHJpbWVyYSwgeSBlbCBvdHJvIGRlIGFnb3N0byBhIG9jdHVicmUsIHF1ZSBlcyBjdWFuZG8gc2UgY29zZWNoYSBsYSBzb2phIGRlIHNlZ3VuZGEuDQotCV9Ucmlnb186IHBvc2VlIHVuIHBlcmlvZG8gZXN0YWNpb25hbCBkZSBjb3NlY2hhLCBxdWUgdmEgZGVzZGUgbWVkaWFkb3MgZGUgbm92aWVtYnJlIGEgZmVicmVyby4NCi0JX0dpcmFzb2xfOiB1biBwZXLDrW9kbyBkZXNkZSBtZWRpYWRvcyBkZSBkaWNpZW1icmUgYSBtYXJ6by4NCi0JX0NlYmFkYV86IHRhbWJpw6luIHVuIHBlcsOtb2RvIGRlc2RlIG1lZGlhZG9zIGRlIG5vdmllbWJyZSBhIGZlYnJlcm8uDQotCV9Tb3Jnb186IGxhIGNvc2VjaGEgc2UgZGVzYXJyb2xsYSBlbnRyZSBtZWRpYWRvcyBkZSBmZWJyZXJvIGhhc3RhIGp1bmlvLCBkZWJpZG8gYSBxdWUgc2UgcHJpb3JpemEgbGEgY29zZWNoYSBkZSBtYcOteiB5IHNvamEuIA0KPC9kaXY+DQoNCjxiciAvPg0KDQojIyMjIEZpZ3VyYSA0OiBFc3RhY2lvbmFsaWRhZCBtZW5zdWFsIGRlbCBmbHVqbyBjb21lcmNpYWwgc2Vnw7puIGNhZGEgZ3Jhbm8gZW4gbWlsbG9uZXMgZGUgdG9uZWxhZGFzLg0KYGBge3IgZmlnLmhlaWdodCA9IDUsIGZpZy53aWR0aCA9IDguNzUsZWNobz1GQUxTRSx3YXJuaW5nID0gRkFMU0UscmVzdWx0cz0naGlkZScsbWVzc2FnZT1GQUxTRX0NCg0KZ2dwbG90bHkoDQpnZ3Bsb3QoZGF0YSAlPiUgZ3JvdXBfYnkoTUVTLEFOTyxQUk9EVUNUTykgJT4lIHN1bW1hcmlzZSgiQ0FOVElEQURFUyIgPSBzdW0oQ0FOVElEQURFUykpLCBhZXMoeD1hcy5mYWN0b3IoTUVTKSwgeT1DQU5USURBREVTLzEwMDAwMDAsZmlsbD1QUk9EVUNUTykpKw0KICBnZW9tX2JveHBsb3Qob3V0bGllci5zaGFwZSA9IE5BLGNvZWYgPSAwKSsNCiAgZmFjZXRfd3JhcCh+UFJPRFVDVE8sIHNjYWxlcyA9ICJmcmVlX3kiKSsNCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJCbHVlcyIpKw0KICB0aGVtZV9idygpKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpKw0KICB4bGFiKCJNZXMiKSsgDQogIHlsYWIoIk1pbGxvbmVzIGRlIHRvbmVsYWRhcyIpDQopDQoNCmBgYA0KPGZvbnQgc2l6ZT0iMiI+IEZ1ZW50ZTogQm9sc2EgZGUgQ2VyZWFsZXMgZW4gYmFzZSBhIGRhdG9zIGRlbCAgU0lPLUdSQU5PUyBkZWwgMjAxNSAtIDIwMjAgPC9mb250Pg0KPGJyIC8+DQoNCg0KPGRpdiBjbGFzcz10ZXh0LWp1c3RpZnk+DQpBbCBzdW1hciBsb3MgZmx1am9zIG1lbnN1YWxlcyBkZSB0b2RvcyBsb3MgZ3Jhbm9zIHNlIHB1ZWRlIG9ic2VydmFyIGNvbW8gbGEgaW5mbHVlbmNpYSBkZSBsYSBlc3RhY2lvbmFsaWRhZCBkZSBzb2phLCBtYcOteiB5IHRyaWdvIGltcGFjdGFuIG5vdG9yaWFtZW50ZS4gTGEgY29zZWNoYSBkZSBsYSBzb2phIGRlIHByaW1lcmEgeSBlbCBtYcOteiB0ZW1wcmFubyBtYXJjYW4gZWwgcHJpbWVyIHBpY28gZW4gbGFzIGNhbnRpZGFkZXMgdHJhbnNwb3J0YWRhcyBlbnRyZSBhYnJpbCAtIG1heW8uIEVsIHNlZ3VuZG8gcGljbyBlc3TDoSBpbmZsdWVuY2lhZG8gcG9yIGxhIHNvamEgZGUgc2VndW5kYSB5IGVsIG1hw616IHRhcmTDrW8gZW4ganVsaW8uIEZpbmFsbWVudGUsIGxhIGNvc2VjaGEgZGUgdHJpZ28sIGdpcmFzb2wgeSBjZWJhZGEgaW1wYWN0YW4gZW4gZWwgbWVzIGRlIGRpY2llbWJyZS4NCjwvZGl2Pg0KDQo8YnIgLz4NCg0KIyMjIyBGaWd1cmEgNTogRXN0YWNpb25hbGlkYWQgbWVuc3VhbCBkZWwgZmx1am8gY29tZXJjaWFsIGRlIGdyYW5vcyBlbiBtaWxsb25lcyBkZSB0b25lbGFkYXMuDQpgYGB7ciBmaWcuaGVpZ2h0ID0gNSwgZmlnLndpZHRoID0gOC43NSxlY2hvPUZBTFNFLHdhcm5pbmcgPSBGQUxTRSxyZXN1bHRzPSdoaWRlJyxtZXNzYWdlPUZBTFNFfQ0KDQpnZ3Bsb3RseSgNCmdncGxvdChkYXRhICU+JSBncm91cF9ieShNRVMsQU5PKSAlPiUgc3VtbWFyaXNlKCJDQU5USURBREVTIiA9IHN1bShDQU5USURBREVTKSksIGFlcyh4PWFzLmZhY3RvcihNRVMpLCB5PUNBTlRJREFERVMvMTAwMDAwMCkpKw0KICBnZW9tX2JveHBsb3Qob3V0bGllci5zaGFwZSA9IE5BLGNvZWYgPSAwLGZpbGw9ImxpZ2h0Qmx1ZSIpKw0KICB0aGVtZV9idygpKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpKw0KICB4bGFiKCJNZXMiKSsgDQogIHlsYWIoIk1pbGxvbmVzIGRlIHRvbmVsYWRhcyIpDQopDQpgYGANCjxmb250IHNpemU9IjIiPiBGdWVudGU6IEJvbHNhIGRlIENlcmVhbGVzIGVuIGJhc2UgYSBkYXRvcyBkZWwgIFNJTy1HUkFOT1MgZGVsIDIwMTUgLSAyMDIwIDwvZm9udD4NCg0KDQo8YnIgLz4NCg0KDQoqKioNCg0KPiAjIyBEYXNoYm9hcmQgSW50ZXJhY3Rpdm8NCg0KPGJyIC8+DQoNCjxpZnJhbWUgc3R5bGU9J3dpZHRoOjEwMCU7aGVpZ2h0OjYwMHB4Oycgc3JjPSJodHRwczovL2FwcC5wb3dlcmJpLmNvbS92aWV3P3I9ZXlKcklqb2lNREptTmpGbFltUXRNVFJqT0MwME5URXhMV0ppWTJJdE1UUmhOakF6WWpabVpUTXpJaXdpZENJNklqZzVNV0ZqTjJSakxXUmpNalV0TkRRd01DMWlNRFkzTFRsaE5UUXlNMll5T1dFM01pSjkiIGZyYW1lYm9yZGVyPSIwIiBhbGxvd0Z1bGxTY3JlZW49InRydWUiPjwvaWZyYW1lPg0KDQo8Zm9udCBzaXplPSIyIj4gRnVlbnRlOiBCb2xzYSBkZSBDZXJlYWxlcyBlbiBiYXNlIGEgZGF0b3MgZGVsICBTSU8tR1JBTk9TIGRlbCAyMDE1IC0gMjAyMCA8L2ZvbnQ+DQo8YnIgLz4=