Trabajo elaborado para la asignatura “Programación y manejo de datos en la era del Big Data” de la Universitat de València durante el curso 2021-2022. El repo del trabajo está aquí.

La página web de la asignatura y los trabajos de mis compañeros pueden verse aquí.


1. Introducción

Hoy en día, los problemas medioambientales son cada vez mayores y es imposible que pasen desapercibidos. En este trabajo, centramos el análisis en las emisiones contaminantes provenientes de la agricultura, sacando así varias conclusiones, y relacionándolas con el total de emisiones contaminantes existentes, en los países europeos. Además, hacemos un pequeño hincapié acerca de la importancia del combustible en la producción agrícola.

2. Proceso de los datos

Primeros pasos

Primero, cargamos todos los paquetes que vamos a utilizar. Los datos los hemos descargado desde Eurostat y pasado a la carpeta datos en formato xlsx (excel). Finalmente, importamos los datos a R.

Los datos extraídos, tanto las emisiones totales como las agrícolas, están expresadas en miles de toneladas de CO2.

agricultura_emisiones <- rio::import(here::here("datos", "emisiones_agricultura.xlsx"))
total_emisiones <- rio::import(here::here("datos", "emisiones_totales.xlsx"))
combustible_emisiones <- rio::import(here::here("datos", "combustibles_agricultura.xlsx"))
#Pasamos los datos a formato largo y renombramos la variable “GEO/TIME” por la variable “País”

df_agri <- agricultura_emisiones %>% pivot_longer(cols = 2:31, names_to = "year", values_to = "emisiones_agri") %>% rename (pais = "GEO/TIME") 
df_emi <- total_emisiones %>% pivot_longer(cols = 2:31, names_to = "year", values_to = "emisiones_totales") %>% rename (pais = "GEO/TIME")
df_comb <- combustible_emisiones %>% pivot_longer(cols = 2:31, names_to = "year", values_to = "emisiones_comb") %>% rename (pais = "GEO/TIME")

#Cambios los nombres de algunos países que nos dificultan el análisis

df_emi$pais <- recode(df_emi$pais, 
                          "Germany (until 1990 former territory of the FRG)" = "Germany",
                          "United Kingdom" = "UK")
df_agri$pais <- recode(df_agri$pais, 
                          "Germany (until 1990 former territory of the FRG)" = "Germany",
                          "United Kingdom" = "UK")
df_comb$pais <- recode(df_comb$pais, 
                          "Germany (until 1990 former territory of the FRG)" = "Germany",
                          "United Kingdom" = "UK")

#Ponemos la variable “year” como numérica

df_agri <- transform(df_agri, year = as.numeric(year))
df_emi <-  transform(df_emi, year = as.numeric(year))
df_comb <- transform(df_comb, year = as.numeric(year))

#Eliminamos los data frames que están en formato ancho

rm(agricultura_emisiones, combustible_emisiones, total_emisiones)

3. Totalidad de emisiones de gases efecto invernadero

La consecuencias de la producción agrícola pueden ser varias: la erosión del suelo, sobreexplotación, el uso excesivo de químicos, el agotamiento de los acuíferos o bien la reducción de la biodiversidad.

La reducción de dichos efectos se puede llevar a cabo mediante la rotación y diversidad de cultivos, la siembra directa, la apuesta por las energías renovables que son respetuosas con el medio ambiente y una buena gestíón del agua ya que es muy importante para la supervivencia de los seres vivos. Nos hemos centrado, por tanto, en las emisiones agrícolas.

En el gráfico animado, vemos que las emisiones totales han disminuido en más de un millón de toneladas, con una fuerte bajada en 2008 por la crisis financiera.

Mediante la tabla realizada, podemos observar que los 5 países que más emisiones de CO2 han lanzado a la atmósfera desde 1990 son Alemania, Reino Unido, Italia, Francia y Polonia. Son los grandes paises industriales en productos de media y alta tecnología de Europa e incluso del mundo y este sector es el más contaminante de todos.

Gráfico

Código

#Gráfico animado

df_totales <- df_emi %>%
  group_by(year) %>%
  summarise(emisiones_totales = sum(emisiones_totales))

dd <- ggplot(df_totales, aes(y = emisiones_totales,
                                 x = year)) +
  geom_line() +
  geom_point() +
  scale_x_continuous(breaks = seq(1990, 2020, 10), limits = c(1990, 2020)) + 
  theme(panel.background = element_rect(fill = "gray100"),
        plot.background = element_rect(fill = "antiquewhite")) +
  labs(title = "Emisiones totales por año",
    x = "Años", y = "Emisiones ", subtitle = "en millones de toneladas de co2",
    caption = "Fuente: Eurostat") +
  transition_reveal(year)
#- anim_save("./imagenes/emi_totales.gif", dd)

dd

Tabla

Sumatorio de emisiones totales desde 1990
Los 5 paises más contaminantes
Paises Emisiones totales
Germany 29910183
UK 19839560
Italy 14627706
France 14590586
Poland 11557085
Fuente: EUROSTAT

Otra forma de visualizar los datos

Y para mostrar los datos de manera más visual, hemos realizado lo siguiente.

4. Análisis de las emisiones agrícolas

Las emisiones agrícolas son aquellas procedentes de la producción agropecuaria.

Gracias a nuestros cálculos, podemos afirmar que, en el año 1990, los cinco países (en orden descendente) que más emisiones agrícolas lanzaban a la atmósfera eran: Francia, Alemania, Polonia, Reino Unido y Turquía y, en cambio, en el 2019 fueron: Francia, Turquía, Alemania, Reino Unido pero también España se posiciona como quinta en el ránking. Estos países son grandes y disponen de amplias superficies cultivables y cercanas al mar. Sustentan una gran parte de la producción agropecuaria europea. Es por ello que las emisiones tendrán más peso. Por tanto, los países más contaminantes en la agricultura han sido prácticamente los mismos, lo que ha variado ha sido su posición.

También, podemos sacar conclusiones sobre los países que menos emisiones agrícolas han lanzado a la atmósfera. Los 5 que menos en 1990, han sido: Malta, Chipre, Islandia, Luxemburgo y Eslovenia y en 2019 Estonia sustituye a Eslovenia. Esto se debe al tamaño del territorio, ya que su reducida extensión provoca que las superficies cultivables sean muy reducidas y prioricen llevar a cabo otro tipo de actividades, como industria o servicios, entre otros.

Todo esto aparece plasmado en las tablas siguientes.

Tabla 1

Los 5 países con más emisiones agrícolas
entre 1990 y 2019
Países Emisiones agrícolas
1990
France 81391.82
Germany 76509.49
Poland 49424.87
UK 47858.52
Turkey 46053.68
2019
France 73189.89
Turkey 68023.70
Germany 61838.92
UK 41814.95
Spain 37794.46
Fuente: EUROSTAT

Tabla 2

Los 5 países con menos emisiones agrícolas
entre 1990 y 2019
Países Emisiones agrícolas
1990
Malta 101.06
Cyprus 471.41
Iceland 656.76
Luxembourg 711.34
Slovenia 1854.90
2019
Malta 76.34
Cyprus 512.25
Iceland 618.85
Luxembourg 712.35
Estonia 1496.87
Fuente: EUROSTAT

La variación de las emisiones agrícolas entre 1990 y 2019

Además, calculamos la variación de las emisiones agrícolas, entre los años 1990 y 2019 y hemos obtenido que los 5 países que más han aumentado las emisiones agrícolas desde el primer año hasta el último han sido: Turquía, Irlanda, Chipre, España y Luxemburgo.

En cambio, los que mas han reducido sus emisiones son: Latvia, Eslovaquia, Lituania, Bulgaria y Czechia. En los últimos años han reducido el peso del sector agrícola con respecto al total y han aumentado el peso de la industria y del sector servicios. Esto les permite diversificar su estructura productiva para fomentar el desarrollo económico sostenido y crear productos de mayor valor añadido que puedan competir internacionalmente.

En el primer gráfico animado, hemos seleccionado ciertos países que consideramos relevantes para nuestro análisis. Portugal ha mantenido práctimente sus emisiones, España las ha incrementado ligeramente y Francia, Alemania y R. Unido las han disminuido.

En el segundo gráfico animado se puede observar la evolución de las emisiones agrícolas totales, desde 1990 hasta 2019. Se pueden diferenciar tres grandes etapas:

En primer lugar, 1990-2005, se produce un fuerte descenso y después vuelven a aumentar. En segundo lugar, 2005-2015, las emisiones aumentan pero después siguen disminuyendo. Y finalmente, 2015-2019, que sufren un fuerte incremento.

Tabla 3

Los 5 países que más han aumentado sus emisiones agrícolas
entre 1990 y 2019
Países Años Emisiones agrícolas Variación de las emisiones Variación porcentual
Turkey 2019 68023.70 21970.02 47.7052431
Ireland 2019 20479.70 1964.29 10.6089468
Cyprus 2019 512.25 40.84 8.6633716
Spain 2019 37794.46 2803.71 8.0127176
Luxembourg 2019 712.35 1.01 0.1419855
Fuente: EUROSTAT

Tabla 4

Los 5 países que más han reducido sus emisiones agrícolas
entre 1990 y 2019
Países Años Emisiones agrícolas Variación de las emisiones Variación porcentual
Latvia 2019 2202.37 -2782.46 -55.81855
Slovakia 2019 2774.77 -3224.11 -53.74520
Lithuania 2019 4245.50 -4441.93 -51.13054
Bulgaria 2019 6249.25 -6058.40 -49.22467
Czechia 2019 8198.66 -7513.72 -47.82038
Fuente: EUROSTAT

Mapa de coropletas

En el siguiente mapa múltiple se puede observar, en los años 1990, 2000, 2010 y 2019, como van creciendo o disminuyendo las emisiones agrícolas en los distintos países europeos gracias al cambio de color que se observa en ellos.

Gráfico

Esto mismo, se puede visualizar mediante el siguiente gráfico y además, destacamos en un color distinto, España.

Otra forma de visualizar los datos

Y de esta manera tan visual, podemos observar aquellos países que más emisiones agrícolas totales, desde 1990, han lanzado a la atmósfera.

Con ello, se afirma que han sido Francia, Alemania, Turquía, Reino Unido y España los que han lanzado más emisiones agrícolas ya que su nombre aparece en una letra más grande.

Gráficos animados

Código

#Calculamos las emisiones agrícolas totales por año

df_agri_totales <- df_agri %>%
  group_by(year) %>%
  summarise(emisiones_agri_totales = sum(emisiones_agri))

gg <- ggplot(df_agri_totales, aes(y = emisiones_agri_totales,
                                 x = year)) +
  geom_line() +
  geom_point() +
  scale_x_continuous(breaks = seq(1990, 2020, 10), limits = c(1990, 2020)) + 
  theme(panel.background = element_rect(fill = "gray100"),
        plot.background = element_rect(fill = "antiquewhite")) +
  labs(title = "Emisiones totales agrícolas, por año",
    x = "Años", y = "Emisiones ", subtitle = "en miles de toneladas de co2",
    caption = "Fuente: Eurostat") +
  transition_reveal(year)
#- anim_save("./imagenes/gg.gif", gg)

gg

#Gráfico animado

df_agri_x <- df_agri %>%
  filter(pais %in% c("Germany", "France", "Spain", "United Kingdom", "Portugal"))

anim_2 <- df_agri_x %>%
  ggplot(aes(x = year, y = emisiones_agri, group = pais, color = pais)) +
    geom_line() +
    geom_point() + 
  theme(panel.background = element_rect(fill = "gray100")) + 
  labs(title = "Emisiones agricolas, por país",
       x = "Años", y = "Emisiones", subtitle = "en miles de toneladas de co2", caption = "Fuente: Eurostat") +
  transition_reveal (year) 

#- anim_save("./imagenes/anim.gif", anim_2)

anim_2

5. Profundizamos el análisis en España

Ahora, pasamos a realizar un análisis más exhaustivo de nuestro país.

En primer lugar, hemos querido destacar los 5 años que más emisiones agrícolas han habido y los 5 que menos.

Los 5 años que más emisiones agrícolas se han lanzado han sido del 2000 hasta el 2005 y en cambio, los que menos, 1991-1994 y después, en el 2012. Por tanto, podemos afirmar que España no ha seguido la tendencia de la suma de todos los países europeos, durante los años 2000-2005, analizada en el apartado anterior.

Todo esto se puede visualizar en la tabla realizada.

Y, en el gráfico de debajo, se puede observar la evolución de las emisiones agrícolas españolas durante todos los años. Durante el período estudiado, España ha aumentado sus emisiones. Esto es debido a la influencia de las políticas PAC, que han fomentado la actividad agrícola y por tanto las emisiones.

Tabla 1

Los 5 años que más emisiones ha lanzado España
entre 1990 y 2019
País Años Emisiones agrícolas
Spain 2000 41773.52
Spain 2003 41761.69
Spain 2004 41083.96
Spain 2001 41008.39
Spain 2002 40317.59
Fuente: EUROSTAT

Tabla 2

Los 5 años que menos emisiones ha lanzado España
entre 1990 y 2019
País Años Emisiones agrícolas
Spain 1993 32279.93
Spain 1992 33482.31
Spain 1991 33668.09
Spain 1994 34123.64
Spain 2012 34290.96
Fuente: EUROSTAT

Gráfico

En este gráfico, se observa la evolución de las emisiones agrícolas en España desde 1990 hasta 2019.

La variación de las emisiones agrícolas, entre 1990 y 2019

La variación que ha sufrido España en cuanto a las emisiones agrícolas entre los años 1990 y 2019 ha sido de aproximadamente de 8,01 %, como se puede observar en la tabla de abajo.

Tabla 3

Variación de las emisiones agrícolas en España
entre 1990 y 2019
País Años Emisiones agrícolas Variación de las emisiones Variación porcentual
Spain 1990 34990.75 0.00 0.000000
Spain 2019 37794.46 2803.71 8.012718
Fuente: EUROSTAT

6. Emisiones agrícolas vs Emisiones totales

En este apartado, pretendemos llevar a cabo una comparación de las emisiones agrícolas con la totalidad de emisiones existentes.

Gráfico

Y, mediante este gráfico se puede observar dicha comparación, para el año 2019. Vemos que representan un porcentaje muy bajo.

En nuestro gráfico, la A representa las emisiones agrícolas (11,70%) y la letra B representa las emisones totales.

Las actividades agrícolas representan alrededor de un 2% del PIB. Es por ello que las emisiones tienen un papel reducido sobre el cómputo global.

Tabla 1

En esta tabla intentamos plasmar los 5 países que mayor impacto de las emisiones agrícolas tienen sobre el total; éstos han sido: Francia, Turquía, Alemania, Reino Unido y España.

Los 5 paises con mayor porcentaje de emisiones agrícolas sobre el total
entre 1990 y 2019
Paises Años Emisiones agrícolas Emisiones totales % sobre el total Variación porcentual
France 2019 73189.89 4327981 1.6910861 0.27244714
Turkey 2019 68023.70 4327981 1.5717189 0.76901485
Germany 2019 61838.92 4327981 1.4288167 0.09527554
United Kingdom 2019 41814.95 4327981 0.9661537 0.13199170
Spain 2019 37794.46 4327981 0.8732584 0.26337842
Fuente: EUROSTAT

Tabla 2

De forma análoga, los que menos han sido: Malta, Chipre, Islandia, Luxemburgo y Estonia. Esto se debe a que estos paises pequeños donde la superficie cultivable es escasa y el sector agrícola es mínimo.

Los 5 paises con menor porcentaje de emisiones agrícolas sobre el total
entre 1990 y 2019
Paises Años Emisiones agrícolas Emisiones totales % sobre el total Variación porcentual
Malta 2019 76.34 4327981 0.001763871 0.000002420444
Cyprus 2019 512.25 4327981 0.011835772 0.003619214308
Iceland 2019 618.85 4327981 0.014298814 0.002851652457
Luxembourg 2019 712.35 4327981 0.016459175 0.004060697336
Estonia 2019 1496.87 4327981 0.034585871 -0.012411704020
Fuente: EUROSTAT

7. La importancia del combustible en la agricultura

Uno de los principales gases de efecto invernadero es el dióxido de carbono (CO2), entre otros como el óxido nitroso (N2O) y el metano (CH4).

Debido a la acción del hombre, a sus sistemas de producción y de consumo de energía a partir de la Revolución Industrial, la concentración de esos gases en la atmósfera está creciendo de forma constante. Y, a más concentración de CO2, más calor se queda atrapado dentro de la atmósfera terrestre. El mayor impulsor de ese calentamiento global es el CO2 y está ligado fundamentalmente a la quema de combustibles fósiles: el carbón, el petróleo y el gas.

Hace solo una década que la producción de biocombustibles a partir de plantas se acogió como una alternativa ecológica a los combustibles fósiles. Recientemente, se ha observado que es una solución que compite con la producción de alimentos y que no siempre resulta efectiva en la reducción de emisiones de gases de efecto invernadero o contaminantes atmosféricos.

Tabla 1

Los 5 países europeos con mayor impacto del combustible en la agricultura en el año 1990 fueron: Francia, Alemania, Netherlands, Polonia e Itália. En cambio, en el 2019 Polonia, España, Francia, Turquía y Netherlands.

Los 5 paises con mayor impacto del combustible sobre la agricultura
entre 1990 y 2019
Paises Emisiones de combustible
1990
France 12156.39
Germany 10509.96
Netherlands 9925.20
Poland 9261.58
Italy 9133.25
2019
Poland 11994.05
Spain 11913.71
France 10867.73
Turkey 10862.08
Netherlands 10292.33
Fuente: EUROSTAT

Tabla 2

Mediante esta tabla, se puede visualizar las emisiones del combustible que tienen efecto sobre la producción agrícola durante los años de 1990, 2000, 2010 y 2019, es decir, cada 10 años aproximadamente.

Hay países como Autria que han sufrido una dismunución desde el primer año al último, pero otros como Cypre, las han aumentado.

Emisiones de combustible que afectan a la agricultura: 1990-2000-2010-2019
pais 1990 2000 2010 2019
Austria 1.372,82 1.181,06 980,47 979,18
Belgium 3.086,85 2.568,60 2.264,64 2.465,76
Bulgaria 1.827,82 951,15 502,85 494,11
Croatia 921,55 916,90 771,29 714,51
Cyprus 55,80 106,43 76,79 85,17
Czechia 3.831,13 1.743,16 1.271,16 1.280,89
Denmark 2.654,18 2.630,58 2.048,23 1.459,28
Estonia 650,25 110,17 241,89 322,12
Finland 1.887,68 1.678,30 1.580,74 1.336,20
France 12.156,39 13.148,94 12.214,56 10.867,73
Germany 10.509,96 6.203,53 5.811,70 6.097,30
Greece 3.208,03 2.896,15 1.876,41 497,34
Hungary 2.689,18 1.642,17 1.157,49 1.576,49
Iceland 746,40 896,85 729,89 548,63
Ireland 818,47 1.023,00 829,67 668,81
Italy 9.133,25 8.908,83 8.071,46 8.329,58
Latvia 1.655,35 342,99 431,11 524,96
Lithuania 1.622,14 193,05 229,23 234,05
Luxembourg 36,86 27,77 28,81 23,91
Malta 3,96 11,95 22,23 19,77
Netherlands 9.925,20 10.080,72 12.368,04 10.292,33
Norway 1.300,01 1.429,55 1.106,01 848,31
Poland 9.261,58 14.243,61 11.869,67 11.994,05
Portugal 1.164,65 1.311,70 1.193,32 1.247,52
Romania 2.004,97 940,28 997,58 1.587,14
Slovakia 156,69 374,63 409,92 329,67
Slovenia 184,87 261,48 236,07 239,69
Spain 8.781,24 10.191,66 10.615,10 11.913,71
Sweden 1.723,17 1.562,82 1.644,55 1.227,28
Switzerland 825,51 813,49 706,49 599,13
Turkey 6.458,27 9.516,16 14.495,81 10.862,08
UK 6.060,73 5.414,75 4.646,71 5.014,03

Gráfico

En este gráfico circular, la letra A las emisiones procedentes del combustible (18,70%) y la letra B son las emisiones totales agrícolas.

Código

#Tabla 1

impact_comb <- df_comb %>%
  filter(year %in% c(1990, 2019)) %>%
  group_by(year) %>% 
  select(pais, year, emisiones_comb) %>% 
  slice_max(emisiones_comb, n = 5) %>%
  rename("Paises" = pais, "Años" = year, "Emisiones de combustible" = emisiones_comb)

gt_comb <- gt(impact_comb) %>% 
  tab_header(title = md("**Los 5 paises con mayor impacto del combustible sobre la agricultura**"),
             subtitle = "entre 1990 y 2019") %>%
  tab_source_note(md("Fuente: [EUROSTAT](https://appsso.eurostat.ec.europa.eu/nui/show.do?dataset=env_air_gge&lang=en)")) 

gt_comb

#Tabla 2

total_comb <- df_comb %>% 
  filter(year %in% c(1990, 2000, 2010, 2019)) %>% 
  group_by(year, pais) %>% 
  slice_max(emisiones_comb, n = 5) 

data_wide2 <- total_comb %>% 
              tidyr::pivot_wider(names_from = year, 
                                 values_from = emisiones_comb)

knitr::kable(data_wide2, 
             align = "c", 
             caption = "Emisiones de combustible que afectan a la agricultura:     1990-2000-2010-2019",
             digits = 2, 
             format.args = list(decimal.mark = ",", big.mark = ".")) %>%
  kableExtra::kable_styling(fixed_thead = list(enabled = T, 
                                               background = "lightgreen")) %>%
  column_spec(1, background = "lightgreen")

#Gráfico

data_comb <- data.frame(
  group = LETTERS[1:2],
  value = c(Emisiones_combustible = 94680.73, Emisiones_agrícolas = 506550.8))

data_comb <- data_comb %>% 
  arrange(desc(group)) %>%
  mutate(prop = value / sum(data_comb$value) * 100) %>%
  mutate(ypos = cumsum(prop)- 0.5*prop )
p1 <- ggplot(data_comb, aes(x ="", y = prop, fill = group)) +
  geom_bar(stat = "identity", width = 1, color = "black") +
  coord_polar("y", start=0) +
  theme_void() + 
  theme(legend.position="none") +
  geom_text(aes(y = ypos, label = group), color = "black", size=6) +
  scale_fill_brewer(palette = "Set6")

p1 + labs(title = "Emisiones del combustible sobre las emisiones agrícolas",
     subtitle = "para el año 2019",
     caption = "Fuente: Eurostat" )

8. Conclusiones

Mediante este trabajo hemos intentado hacer un exhaustivo análisis de las emisiones agrícolas, haciendo hincapié en la totalidad de emisiones co2 y también la importancia del combustible en la agricultura.

Hemos podido observar la evolución completa de dichas variables ya que hemos realizado análisis tanto por años como por países intentando sacar conclusiones. Muchas veces, resaltamos 5 años o 5 países para poder así comparar de manera más sencilla.

Para hacer frente a las emisiones agrícolas pensamos que es importante apostar por la innovación del sector agrícola, ya que ha sido un sector históricamente atrasado. Por lo que, es necesario que dicho sector se adapte a las nuevas técnicas de cultivo existentes y su apuesta por las energías renovables.

9. Bibliografía

Eurostat (2021): Greenhouse gas emissions by source sector (source: EEA)

Tutoriales de la asignatura

Para llevar a cabo el trabajo, nos ha servido de gran ayuda los trabajos del año anterior colgados en la página web del curso, sobre todo, el de “Análisis del impacto ecológico” debido a la similitud del tema elegido. Se puede ver aquí



Bon nadal, MIAU!!



Información de mi R-sesión:

- Session info ---------------------------------------------------------------
 setting  value                       
 version  R version 4.1.1 (2021-08-10)
 os       Windows 10 x64              
 system   x86_64, mingw32             
 ui       RTerm                       
 language (EN)                        
 collate  Spanish_Spain.1252          
 ctype    Spanish_Spain.1252          
 tz       Europe/Paris                
 date     2021-12-16                  

- Packages -------------------------------------------------------------------
 package           * version    date       lib source                        
 assertthat          0.2.1      2019-03-21 [1] CRAN (R 4.1.1)                
 backports           1.2.1      2020-12-09 [1] CRAN (R 4.1.1)                
 broom               0.7.9      2021-07-27 [1] CRAN (R 4.1.1)                
 bslib               0.3.0      2021-09-02 [1] CRAN (R 4.1.1)                
 cellranger          1.1.0      2016-07-27 [1] CRAN (R 4.1.1)                
 checkmate           2.0.0      2020-02-06 [1] CRAN (R 4.1.1)                
 class               7.3-19     2021-05-03 [2] CRAN (R 4.1.1)                
 classInt            0.4-3      2020-04-07 [1] CRAN (R 4.1.1)                
 cli                 3.0.1      2021-07-17 [1] CRAN (R 4.1.1)                
 clipr               0.7.1      2020-10-08 [1] CRAN (R 4.1.1)                
 colorspace          2.0-2      2021-06-24 [1] CRAN (R 4.1.1)                
 commonmark          1.7        2018-12-01 [1] CRAN (R 4.1.1)                
 crayon              1.4.2      2021-10-29 [1] CRAN (R 4.1.1)                
 curl                4.3.2      2021-06-23 [1] CRAN (R 4.1.1)                
 data.table          1.14.0     2021-02-21 [1] CRAN (R 4.1.1)                
 DBI                 1.1.1      2021-01-15 [1] CRAN (R 4.1.1)                
 dbplyr              2.1.1      2021-04-06 [1] CRAN (R 4.1.1)                
 desc                1.3.0      2021-03-05 [1] CRAN (R 4.1.1)                
 details             0.2.1      2020-01-12 [1] CRAN (R 4.1.1)                
 digest              0.6.27     2020-10-24 [1] CRAN (R 4.1.1)                
 dplyr             * 1.0.7      2021-06-18 [1] CRAN (R 4.1.1)                
 e1071               1.7-8      2021-07-28 [1] CRAN (R 4.1.1)                
 ellipsis            0.3.2      2021-04-29 [1] CRAN (R 4.1.1)                
 evaluate            0.14       2019-05-28 [1] CRAN (R 4.1.1)                
 fansi               0.5.0      2021-05-25 [1] CRAN (R 4.1.1)                
 farver              2.1.0      2021-02-28 [1] CRAN (R 4.1.1)                
 fastmap             1.1.0      2021-01-25 [1] CRAN (R 4.1.1)                
 forcats           * 0.5.1      2021-01-27 [1] CRAN (R 4.1.1)                
 foreign             0.8-81     2020-12-22 [2] CRAN (R 4.1.1)                
 formatR             1.11       2021-06-01 [1] CRAN (R 4.1.1)                
 fs                  1.5.0      2020-07-31 [1] CRAN (R 4.1.1)                
 generics            0.1.1      2021-10-25 [1] CRAN (R 4.1.1)                
 gganimate         * 1.0.7      2020-10-15 [1] CRAN (R 4.1.1)                
 ggfittext           0.9.1      2021-01-30 [1] CRAN (R 4.1.2)                
 ggplot2           * 3.3.5      2021-06-25 [1] CRAN (R 4.1.1)                
 ggThemeAssist     * 0.1.5      2016-08-13 [1] CRAN (R 4.1.1)                
 gifski              1.4.3-1    2021-05-02 [1] CRAN (R 4.1.1)                
 glue                1.4.2      2020-08-27 [1] CRAN (R 4.1.1)                
 gridBase            0.4-7      2014-02-24 [1] CRAN (R 4.1.1)                
 gt                * 0.3.1      2021-08-07 [1] CRAN (R 4.1.1)                
 gtable              0.3.0      2019-03-25 [1] CRAN (R 4.1.1)                
 haven               2.4.3      2021-08-04 [1] CRAN (R 4.1.1)                
 here                1.0.1      2020-12-13 [1] CRAN (R 4.1.1)                
 highr               0.9        2021-04-16 [1] CRAN (R 4.1.1)                
 hms                 1.1.0      2021-05-17 [1] CRAN (R 4.1.1)                
 htmltools           0.5.2      2021-08-25 [1] CRAN (R 4.1.1)                
 htmlwidgets         1.5.4      2021-09-08 [1] CRAN (R 4.1.1)                
 httpuv              1.6.3      2021-09-09 [1] CRAN (R 4.1.1)                
 httr                1.4.2      2020-07-20 [1] CRAN (R 4.1.1)                
 igraph              1.2.7      2021-10-15 [1] CRAN (R 4.1.1)                
 jquerylib           0.1.4      2021-04-26 [1] CRAN (R 4.1.1)                
 jsonlite            1.7.2      2020-12-09 [1] CRAN (R 4.1.1)                
 kableExtra        * 1.3.4      2021-02-20 [1] CRAN (R 4.1.1)                
 KernSmooth          2.23-20    2021-05-03 [2] CRAN (R 4.1.1)                
 klippy            * 0.0.0.9500 2021-11-17 [1] Github (rlesur/klippy@378c247)
 knitr             * 1.34       2021-09-09 [1] CRAN (R 4.1.1)                
 labeling            0.4.2      2020-10-20 [1] CRAN (R 4.1.1)                
 later               1.3.0      2021-08-18 [1] CRAN (R 4.1.1)                
 lattice             0.20-44    2021-05-02 [2] CRAN (R 4.1.1)                
 lazyeval            0.2.2      2019-03-15 [1] CRAN (R 4.1.1)                
 lifecycle           1.0.1      2021-09-24 [1] CRAN (R 4.1.1)                
 lubridate           1.7.10     2021-02-26 [1] CRAN (R 4.1.1)                
 magrittr            2.0.1      2020-11-17 [1] CRAN (R 4.1.1)                
 mime                0.11       2021-06-23 [1] CRAN (R 4.1.1)                
 miniUI              0.1.1.1    2018-05-18 [1] CRAN (R 4.1.1)                
 modelr              0.1.8      2020-05-19 [1] CRAN (R 4.1.1)                
 munsell             0.5.0      2018-06-12 [1] CRAN (R 4.1.1)                
 openxlsx            4.2.4      2021-06-16 [1] CRAN (R 4.1.1)                
 pillar              1.6.4      2021-10-18 [1] CRAN (R 4.1.1)                
 pkgconfig           2.0.3      2019-09-22 [1] CRAN (R 4.1.1)                
 plotly            * 4.9.4.1    2021-06-18 [1] CRAN (R 4.1.1)                
 png                 0.1-7      2013-12-03 [1] CRAN (R 4.1.1)                
 prettyunits         1.1.1      2020-01-24 [1] CRAN (R 4.1.1)                
 progress            1.2.2      2019-05-16 [1] CRAN (R 4.1.1)                
 promises            1.2.0.1    2021-02-11 [1] CRAN (R 4.1.1)                
 proxy               0.4-26     2021-06-07 [1] CRAN (R 4.1.1)                
 purrr             * 0.3.4      2020-04-17 [1] CRAN (R 4.1.1)                
 R6                  2.5.1      2021-08-19 [1] CRAN (R 4.1.1)                
 RColorBrewer        1.1-2      2014-12-07 [1] CRAN (R 4.1.1)                
 Rcpp                1.0.7      2021-07-07 [1] CRAN (R 4.1.1)                
 readr             * 2.0.1      2021-08-10 [1] CRAN (R 4.1.1)                
 readxl              1.3.1      2019-03-13 [1] CRAN (R 4.1.1)                
 reprex              2.0.1      2021-08-05 [1] CRAN (R 4.1.1)                
 rgeos               0.5-8      2021-09-22 [1] CRAN (R 4.1.1)                
 rio               * 0.5.27     2021-06-21 [1] CRAN (R 4.1.1)                
 rlang               0.4.11     2021-04-30 [1] CRAN (R 4.1.1)                
 rmarkdown           2.11       2021-09-14 [1] CRAN (R 4.1.1)                
 rnaturalearth     * 0.1.0      2017-03-21 [1] CRAN (R 4.1.1)                
 rnaturalearthdata   0.1.0      2017-02-21 [1] CRAN (R 4.1.1)                
 rprojroot           2.0.2      2020-11-15 [1] CRAN (R 4.1.1)                
 rstudioapi          0.13       2020-11-12 [1] CRAN (R 4.1.1)                
 rvest               1.0.1      2021-07-26 [1] CRAN (R 4.1.1)                
 sass                0.4.0      2021-05-12 [1] CRAN (R 4.1.1)                
 scales              1.1.1      2020-05-11 [1] CRAN (R 4.1.1)                
 sessioninfo         1.1.1      2018-11-05 [1] CRAN (R 4.1.1)                
 sf                * 1.0-2      2021-07-26 [1] CRAN (R 4.1.1)                
 shiny               1.7.0      2021-09-22 [1] CRAN (R 4.1.1)                
 sp                  1.4-5      2021-01-10 [1] CRAN (R 4.1.1)                
 stringi             1.7.5      2021-10-04 [1] CRAN (R 4.1.1)                
 stringr           * 1.4.0      2019-02-10 [1] CRAN (R 4.1.1)                
 svglite             2.0.0      2021-02-20 [1] CRAN (R 4.1.1)                
 systemfonts         1.0.3      2021-10-13 [1] CRAN (R 4.1.1)                
 tibble            * 3.1.4      2021-08-25 [1] CRAN (R 4.1.1)                
 tidyr             * 1.1.3      2021-03-03 [1] CRAN (R 4.1.1)                
 tidyselect          1.1.1      2021-04-30 [1] CRAN (R 4.1.1)                
 tidyverse         * 1.3.1      2021-04-15 [1] CRAN (R 4.1.1)                
 treemap           * 2.4-3      2021-08-22 [1] CRAN (R 4.1.1)                
 treemapify        * 2.5.5      2021-01-08 [1] CRAN (R 4.1.2)                
 tweenr              1.0.2      2021-03-23 [1] CRAN (R 4.1.1)                
 tzdb                0.1.2      2021-07-20 [1] CRAN (R 4.1.1)                
 units               0.7-2      2021-06-08 [1] CRAN (R 4.1.1)                
 utf8                1.2.2      2021-07-24 [1] CRAN (R 4.1.1)                
 vctrs               0.3.8      2021-04-29 [1] CRAN (R 4.1.1)                
 viridisLite         0.4.0      2021-04-13 [1] CRAN (R 4.1.1)                
 webshot             0.5.2      2019-11-22 [1] CRAN (R 4.1.1)                
 withr               2.4.2      2021-04-18 [1] CRAN (R 4.1.1)                
 wordcloud2        * 0.2.1      2018-01-03 [1] CRAN (R 4.1.2)                
 xfun                0.25       2021-08-06 [1] CRAN (R 4.1.1)                
 xml2                1.3.2      2020-04-23 [1] CRAN (R 4.1.1)                
 xtable              1.8-4      2019-04-21 [1] CRAN (R 4.1.1)                
 yaml                2.2.1      2020-02-01 [1] CRAN (R 4.1.1)                
 zip                 2.2.0      2021-05-31 [1] CRAN (R 4.1.1)                

[1] C:/Users/MAYTE/Documents/R/win-library/4.1
[2] C:/Program Files/R/R-4.1.1/library




LS0tDQp0aXRsZTogIkFuw6FsaXNpcyBkZWwgaW1wYWN0byBtZWRpb2FtYmllbnRhbCBkZSBsYSBwcm9kdWNjacOzbiBhZ3LDrWNvbGEgZW4gRXVyb3BhIg0KYXV0aG9yOiAiRGFtacOhbiBQw6lyZXogU29sZXIocGVzb2RhQGFsdW1uaS51di5lcykgIFxuXG4gR2FsaW5hIE1hcsOtYSBMb3BleiBaaW5jaHVrIChnYWxvemluQGFsdW1uaS51di5lcykgIFxuIFxuIEbDoXRpbWEgTWFrcm91ZCBTYWlkaShtYWtyYXpAYWx1bW5pLnV2LmVzKS4gXG5cbiBVbml2ZXJzaXRhdCBkZSBWYWzDqG5jaWEiDQpkYXRlOiAiRGljaWVtYnJlIGRlIDIwMjEgKGFjdHVhbGl6YWRvIGVsIGByIGZvcm1hdChTeXMudGltZSgpLCAnJWQtJW0tJVknKWApIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNzczogIi4vYXNzZXRzL2Nzc19pbmRleC5jc3MiDQogICAgdGhlbWU6IHBhcGVyDQogICAgaGlnaGxpZ2h0OiB0ZXh0bWF0ZSANCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDMgDQogICAgdG9jX2Zsb2F0OiANCiAgICAgIGNvbGxhcHNlZDogdHJ1ZQ0KICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQ0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQ0KICAgIGRmX3ByaW50OiBrYWJsZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUNCi0tLQ0KDQpgYGB7ciBjaHVuay1zZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCBldmFsID0gVFJVRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIA0KICAgICAgICAgICAgICAgICAgICAgICNyZXN1bHRzID0gImhvbGQiLA0KICAgICAgICAgICAgICAgICAgICAgIGNhY2hlID0gRkFMU0UsIGNhY2hlLnBhdGggPSAiL2NhY2hlcy8iLCBjb21tZW50ID0gIiM+IiwNCiAgICAgICAgICAgICAgICAgICAgICAjZmlnLndpZHRoID0gNywgI2ZpZy5oZWlnaHQ9IDcsICAgDQogICAgICAgICAgICAgICAgICAgICAgI291dC53aWR0aCA9IDcsIG91dC5oZWlnaHQgPSA3LA0KICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlID0gVFJVRSwgIGZpZy5zaG93ID0gImhvbGQiLA0KICAgICAgICAgICAgICAgICAgICAgIGZpZy5hc3AgPSAwLjYyOCwgb3V0LndpZHRoID0gIjc1JSIsIGZpZy5hbGlnbiA9ICJjZW50ZXIiKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGRldiA9ICJwbmciLCBkZXYuYXJncyA9IGxpc3QodHlwZSA9ICJjYWlyby1wbmciKSkNCg0KYGBgDQoNCmBgYHtyIG9wdGlvbnMtc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCm9wdGlvbnMoc2NpcGVuID0gOTk5KSAjLSBwYXJhIHF1aXRhciBsYSBub3RhY2nDs24gY2llbnTDrWZpY2ENCm9wdGlvbnMoInlhbWwuZXZhbC5leHByIiA9IFRSVUUpIA0KDQpgYGANCg0KYGBge3Iga2xpcHB5LCBlY2hvID0gRkFMU0V9DQprbGlwcHk6OmtsaXBweShwb3NpdGlvbiA9IGMoInRvcCIsICJyaWdodCIpKSAjLSByZW1vdGVzOjppbnN0YWxsX2dpdGh1Yigicmxlc3VyL2tsaXBweSIpDQoNCmBgYA0KDQo8aHIgY2xhc3M9ImxpbmVhLWJsYWNrIj4NCg0KDQpUcmFiYWpvIGVsYWJvcmFkbyBwYXJhIGxhIGFzaWduYXR1cmEgIlByb2dyYW1hY2nDs24geSBtYW5lam8gZGUgZGF0b3MgZW4gbGEgZXJhIGRlbCBCaWcgRGF0YSIgZGUgbGEgVW5pdmVyc2l0YXQgZGUgVmFsw6huY2lhIGR1cmFudGUgZWwgY3Vyc28gMjAyMS0yMDIyLiBFbCByZXBvIGRlbCB0cmFiYWpvIGVzdMOhIFthcXXDrV0oaHR0cHM6Ly9naXRodWIuY29tL2RhbWlhbnBzMTQvdHJhYmFqb19CaWdEYXRhX2VxdWlwbyl7dGFyZ2V0PSJfYmxhbmsifS4gDQoNCg0KDQpMYSBww6FnaW5hIHdlYiBkZSBsYSBhc2lnbmF0dXJhIHkgbG9zIHRyYWJham9zIGRlIG1pcyBjb21wYcOxZXJvcyBwdWVkZW4gdmVyc2UgW2FxdcOtXShodHRwczovL3BlcmV6cDQ0LmdpdGh1Yi5pby9pbnRyby1kcy0yMS0yMi13ZWIvMDctdHJhYmFqb3MuaHRtbCl7dGFyZ2V0PSJfYmxhbmsifS4NCg0KPGhyIGNsYXNzPSJsaW5lYS1yZWQiPg0KDQojIDEuIEludHJvZHVjY2nDs24gDQoNCmBgYHtyLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1hZ2VuZXMiLCAiaW1hZ2VuLmpwZyIpKSANCg0KYGBgDQoNCkhveSBlbiBkw61hLCBsb3MgcHJvYmxlbWFzIG1lZGlvYW1iaWVudGFsZXMgc29uIGNhZGEgdmV6IG1heW9yZXMgeSBlcyBpbXBvc2libGUgcXVlIHBhc2VuIGRlc2FwZXJjaWJpZG9zLiBFbiBlc3RlIHRyYWJham8sIGNlbnRyYW1vcyBlbCBhbsOhbGlzaXMgZW4gbGFzIGVtaXNpb25lcyBjb250YW1pbmFudGVzIHByb3ZlbmllbnRlcyBkZSBsYSBhZ3JpY3VsdHVyYSwgc2FjYW5kbyBhc8OtIHZhcmlhcyBjb25jbHVzaW9uZXMsIHkgcmVsYWNpb27DoW5kb2xhcyBjb24gZWwgdG90YWwgZGUgZW1pc2lvbmVzIGNvbnRhbWluYW50ZXMgZXhpc3RlbnRlcywgZW4gbG9zIHBhw61zZXMgZXVyb3Blb3MuIEFkZW3DoXMsIGhhY2Vtb3MgdW4gcGVxdWXDsW8gaGluY2FwacOpIGFjZXJjYSBkZSBsYSBpbXBvcnRhbmNpYSBkZWwgY29tYnVzdGlibGUgZW4gbGEgcHJvZHVjY2nDs24gYWdyw61jb2xhLg0KDQojIDIuIFByb2Nlc28gZGUgbG9zIGRhdG9zIA0KDQojIyBQcmltZXJvcyBwYXNvcw0KDQpQcmltZXJvLCBjYXJnYW1vcyB0b2RvcyBsb3MgcGFxdWV0ZXMgcXVlIHZhbW9zIGEgdXRpbGl6YXIuIExvcyBkYXRvcyBsb3MgaGVtb3MgZGVzY2FyZ2FkbyBkZXNkZSBbRXVyb3N0YXRdKGh0dHBzOi8vYXBwc3NvLmV1cm9zdGF0LmVjLmV1cm9wYS5ldS9udWkvc2hvdy5kbz9kYXRhc2V0PWVudl9haXJfZ2dlJmxhbmc9ZW4pIHkgcGFzYWRvIGEgbGEgY2FycGV0YSBkYXRvcyBlbiBmb3JtYXRvIHhsc3ggKGV4Y2VsKS4gRmluYWxtZW50ZSwgaW1wb3J0YW1vcyBsb3MgZGF0b3MgYSBSLg0KDQpMb3MgZGF0b3MgZXh0cmHDrWRvcywgdGFudG8gbGFzIGVtaXNpb25lcyB0b3RhbGVzIGNvbW8gbGFzIGFncsOtY29sYXMsIGVzdMOhbiBleHByZXNhZGFzIGVuIG1pbGVzIGRlIHRvbmVsYWRhcyBkZSBDTzIuIA0KDQpgYGB7ciBwYWNrYWdlcy1zZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGtsaXBweSkgIy1yZW1vdGVzOjppbnN0YWxsX2dpdGh1Yigicmxlc3VyL2tsaXBweSIpDQpsaWJyYXJ5KHJpbykNCmxpYnJhcnkoZ2dhbmltYXRlKQ0KbGlicmFyeShzZikNCmxpYnJhcnkocm5hdHVyYWxlYXJ0aCkNCmxpYnJhcnkoZ3QpICNpbnN0YWxsLnBhY2thZ2VzKCJndCIpDQpsaWJyYXJ5KHdvcmRjbG91ZDIpICNpbnN0YWxsLnBhY2thZ2VzKCJ3b3JkY2xvdWQyIikNCmxpYnJhcnkoZ2dUaGVtZUFzc2lzdCkNCmxpYnJhcnkodHJlZW1hcCkNCmxpYnJhcnkodHJlZW1hcGlmeSkgI2luc3RhbGwucGFja2FnZXMo4oCcdHJlZW1hcGlmeeKAnSkNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoa2FibGVFeHRyYSkNCg0KYGBgDQoNCmBgYHtyLCBldmFsID0gVFJVRX0NCmFncmljdWx0dXJhX2VtaXNpb25lcyA8LSByaW86OmltcG9ydChoZXJlOjpoZXJlKCJkYXRvcyIsICJlbWlzaW9uZXNfYWdyaWN1bHR1cmEueGxzeCIpKQ0KdG90YWxfZW1pc2lvbmVzIDwtIHJpbzo6aW1wb3J0KGhlcmU6OmhlcmUoImRhdG9zIiwgImVtaXNpb25lc190b3RhbGVzLnhsc3giKSkNCmNvbWJ1c3RpYmxlX2VtaXNpb25lcyA8LSByaW86OmltcG9ydChoZXJlOjpoZXJlKCJkYXRvcyIsICJjb21idXN0aWJsZXNfYWdyaWN1bHR1cmEueGxzeCIpKQ0KDQpgYGANCg0KYGBge3IsIGV2YWwgPSBUUlVFfQ0KI1Bhc2Ftb3MgbG9zIGRhdG9zIGEgZm9ybWF0byBsYXJnbyB5IHJlbm9tYnJhbW9zIGxhIHZhcmlhYmxlIOKAnEdFTy9USU1F4oCdIHBvciBsYSB2YXJpYWJsZSDigJxQYcOtc+KAnQ0KDQpkZl9hZ3JpIDwtIGFncmljdWx0dXJhX2VtaXNpb25lcyAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSAyOjMxLCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImVtaXNpb25lc19hZ3JpIikgJT4lIHJlbmFtZSAocGFpcyA9ICJHRU8vVElNRSIpIA0KZGZfZW1pIDwtIHRvdGFsX2VtaXNpb25lcyAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSAyOjMxLCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImVtaXNpb25lc190b3RhbGVzIikgJT4lIHJlbmFtZSAocGFpcyA9ICJHRU8vVElNRSIpDQpkZl9jb21iIDwtIGNvbWJ1c3RpYmxlX2VtaXNpb25lcyAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSAyOjMxLCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImVtaXNpb25lc19jb21iIikgJT4lIHJlbmFtZSAocGFpcyA9ICJHRU8vVElNRSIpDQoNCiNDYW1iaW9zIGxvcyBub21icmVzIGRlIGFsZ3Vub3MgcGHDrXNlcyBxdWUgbm9zIGRpZmljdWx0YW4gZWwgYW7DoWxpc2lzDQoNCmRmX2VtaSRwYWlzIDwtIHJlY29kZShkZl9lbWkkcGFpcywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICJHZXJtYW55ICh1bnRpbCAxOTkwIGZvcm1lciB0ZXJyaXRvcnkgb2YgdGhlIEZSRykiID0gIkdlcm1hbnkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5pdGVkIEtpbmdkb20iID0gIlVLIikNCmRmX2FncmkkcGFpcyA8LSByZWNvZGUoZGZfYWdyaSRwYWlzLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkdlcm1hbnkgKHVudGlsIDE5OTAgZm9ybWVyIHRlcnJpdG9yeSBvZiB0aGUgRlJHKSIgPSAiR2VybWFueSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICJVbml0ZWQgS2luZ2RvbSIgPSAiVUsiKQ0KZGZfY29tYiRwYWlzIDwtIHJlY29kZShkZl9jb21iJHBhaXMsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiR2VybWFueSAodW50aWwgMTk5MCBmb3JtZXIgdGVycml0b3J5IG9mIHRoZSBGUkcpIiA9ICJHZXJtYW55IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuaXRlZCBLaW5nZG9tIiA9ICJVSyIpDQoNCiNQb25lbW9zIGxhIHZhcmlhYmxlIOKAnHllYXLigJ0gY29tbyBudW3DqXJpY2ENCg0KZGZfYWdyaSA8LSB0cmFuc2Zvcm0oZGZfYWdyaSwgeWVhciA9IGFzLm51bWVyaWMoeWVhcikpDQpkZl9lbWkgPC0gIHRyYW5zZm9ybShkZl9lbWksIHllYXIgPSBhcy5udW1lcmljKHllYXIpKQ0KZGZfY29tYiA8LSB0cmFuc2Zvcm0oZGZfY29tYiwgeWVhciA9IGFzLm51bWVyaWMoeWVhcikpDQoNCiNFbGltaW5hbW9zIGxvcyBkYXRhIGZyYW1lcyBxdWUgZXN0w6FuIGVuIGZvcm1hdG8gYW5jaG8NCg0Kcm0oYWdyaWN1bHR1cmFfZW1pc2lvbmVzLCBjb21idXN0aWJsZV9lbWlzaW9uZXMsIHRvdGFsX2VtaXNpb25lcykNCg0KYGBgDQoNCiMgMy4gVG90YWxpZGFkIGRlIGVtaXNpb25lcyBkZSBnYXNlcyBlZmVjdG8gaW52ZXJuYWRlcm8gey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KTGEgY29uc2VjdWVuY2lhcyBkZSBsYSBwcm9kdWNjacOzbiBhZ3LDrWNvbGEgcHVlZGVuIHNlciB2YXJpYXM6IGxhIGVyb3Npw7NuIGRlbCBzdWVsbywgc29icmVleHBsb3RhY2nDs24sIGVsIHVzbyBleGNlc2l2byBkZSBxdcOtbWljb3MsIGVsIGFnb3RhbWllbnRvIGRlIGxvcyBhY3XDrWZlcm9zIG8gYmllbiBsYSByZWR1Y2Npw7NuIGRlIGxhIGJpb2RpdmVyc2lkYWQuDQoNCkxhIHJlZHVjY2nDs24gZGUgZGljaG9zIGVmZWN0b3Mgc2UgcHVlZGUgbGxldmFyIGEgY2FibyBtZWRpYW50ZSBsYSByb3RhY2nDs24geSBkaXZlcnNpZGFkIGRlIGN1bHRpdm9zLCBsYSBzaWVtYnJhIGRpcmVjdGEsIGxhIGFwdWVzdGEgcG9yIGxhcyBlbmVyZ8OtYXMgcmVub3ZhYmxlcyBxdWUgc29uIHJlc3BldHVvc2FzIGNvbiBlbCBtZWRpbyBhbWJpZW50ZSB5IHVuYSBidWVuYSBnZXN0w63Ds24gZGVsIGFndWEgeWEgcXVlIGVzIG11eSBpbXBvcnRhbnRlIHBhcmEgbGEgc3VwZXJ2aXZlbmNpYSBkZSBsb3Mgc2VyZXMgdml2b3MuIA0KTm9zIGhlbW9zIGNlbnRyYWRvLCBwb3IgdGFudG8sIGVuIGxhcyBlbWlzaW9uZXMgYWdyw61jb2xhcy4NCg0KRW4gZWwgZ3LDoWZpY28gYW5pbWFkbywgdmVtb3MgcXVlIGxhcyBlbWlzaW9uZXMgdG90YWxlcyBoYW4gZGlzbWludWlkbyBlbiBtw6FzIGRlIHVuIG1pbGzDs24gZGUgdG9uZWxhZGFzLCBjb24gdW5hIGZ1ZXJ0ZSBiYWphZGEgZW4gMjAwOCBwb3IgbGEgY3Jpc2lzIGZpbmFuY2llcmEuDQoNCk1lZGlhbnRlIGxhIHRhYmxhIHJlYWxpemFkYSwgcG9kZW1vcyBvYnNlcnZhciBxdWUgbG9zIDUgcGHDrXNlcyBxdWUgbcOhcyBlbWlzaW9uZXMgZGUgQ08yIGhhbiBsYW56YWRvIGEgbGEgYXRtw7NzZmVyYSBkZXNkZSAxOTkwIHNvbiBBbGVtYW5pYSwgUmVpbm8gVW5pZG8sIEl0YWxpYSwgRnJhbmNpYSB5IFBvbG9uaWEuIFNvbiBsb3MgZ3JhbmRlcyBwYWlzZXMgaW5kdXN0cmlhbGVzIGVuIHByb2R1Y3RvcyBkZSBtZWRpYSB5IGFsdGEgdGVjbm9sb2fDrWEgZGUgRXVyb3BhIGUgaW5jbHVzbyBkZWwgbXVuZG8geSBlc3RlIHNlY3RvciBlcyBlbCBtw6FzIGNvbnRhbWluYW50ZSBkZSB0b2Rvcy4NCg0KIyMgR3LDoWZpY28NCg0KIVtdKC4vaW1hZ2VuZXMvZW1pX3RvdGFsZXMuZ2lmKQ0KDQojIyBDw7NkaWdvDQoNCmBgYHtyLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgZXZhbCA9IEZBTFNFLCBmaWcuYWxpZ24gPSAiY2VudGVyIn0NCiNHcsOhZmljbyBhbmltYWRvDQoNCmRmX3RvdGFsZXMgPC0gZGZfZW1pICU+JQ0KICBncm91cF9ieSh5ZWFyKSAlPiUNCiAgc3VtbWFyaXNlKGVtaXNpb25lc190b3RhbGVzID0gc3VtKGVtaXNpb25lc190b3RhbGVzKSkNCg0KZGQgPC0gZ2dwbG90KGRmX3RvdGFsZXMsIGFlcyh5ID0gZW1pc2lvbmVzX3RvdGFsZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geWVhcikpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBnZW9tX3BvaW50KCkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDE5OTAsIDIwMjAsIDEwKSwgbGltaXRzID0gYygxOTkwLCAyMDIwKSkgKyANCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gImdyYXkxMDAiKSwNCiAgICAgICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiYW50aXF1ZXdoaXRlIikpICsNCiAgbGFicyh0aXRsZSA9ICJFbWlzaW9uZXMgdG90YWxlcyBwb3IgYcOxbyIsDQogICAgeCA9ICJBw7FvcyIsIHkgPSAiRW1pc2lvbmVzICIsIHN1YnRpdGxlID0gImVuIG1pbGxvbmVzIGRlIHRvbmVsYWRhcyBkZSBjbzIiLA0KICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFdXJvc3RhdCIpICsNCiAgdHJhbnNpdGlvbl9yZXZlYWwoeWVhcikNCiMtIGFuaW1fc2F2ZSgiLi9pbWFnZW5lcy9lbWlfdG90YWxlcy5naWYiLCBkZCkNCg0KZGQNCg0KYGBgDQoNCiMjIFRhYmxhDQoNCmBgYHtyLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFLCByZXN1bHRzID0gVFJVRX0NCmRmX2VtaV9ub21icmVzIDwtIGRmX2VtaSAlPiUgDQogIGdyb3VwX2J5KHBhaXMpICU+JSANCiAgc3VtbWFyaXNlKGVtaXNpb25lc190b3RhbGVzID0gc3VtKGVtaXNpb25lc190b3RhbGVzKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBzbGljZV9tYXgoZW1pc2lvbmVzX3RvdGFsZXMsIG4gPSA1KSAlPiUNCiAgYXJyYW5nZShkZXNjKGVtaXNpb25lc190b3RhbGVzKSkgJT4lDQogIHJlbmFtZSgiUGFpc2VzIiA9IHBhaXMsICJFbWlzaW9uZXMgdG90YWxlcyIgPSBlbWlzaW9uZXNfdG90YWxlcykNCg0KZ3QoZGZfZW1pX25vbWJyZXMpICU+JSANCiAgdGFiX2hlYWRlcih0aXRsZSA9IG1kKCIqKlN1bWF0b3JpbyBkZSBlbWlzaW9uZXMgdG90YWxlcyBkZXNkZSAxOTkwKioiKSwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJMb3MgNSBwYWlzZXMgbcOhcyBjb250YW1pbmFudGVzIikgJT4lDQogIHRhYl9zb3VyY2Vfbm90ZShtZCgiRnVlbnRlOiBbRVVST1NUQVRdKGh0dHBzOi8vYXBwc3NvLmV1cm9zdGF0LmVjLmV1cm9wYS5ldS9udWkvc2hvdy5kbz9kYXRhc2V0PWVudl9haXJfZ2dlJmxhbmc9ZW4pIikpDQoNCmBgYA0KDQojIyBPdHJhIGZvcm1hIGRlIHZpc3VhbGl6YXIgbG9zIGRhdG9zIA0KDQpZIHBhcmEgbW9zdHJhciBsb3MgZGF0b3MgZGUgbWFuZXJhIG3DoXMgdmlzdWFsLCBoZW1vcyByZWFsaXphZG8gbG8gc2lndWllbnRlLg0KDQpgYGB7ciwgZmlnLmhlaWdodCA9IDIsIGZpZy53aWR0aCA9IDUgLGRwaSA9IDE1MCxmaWcuYWxpZ24gPSAiY2VudGVyIiwgZXZhbD0gVFJVRSwgZWNobz0gRkFMU0V9DQpkZl9lbWlfbm9tYnJlcyA8LSBkZl9lbWkgJT4lIA0KICBncm91cF9ieShwYWlzKSAlPiUgDQogIHN1bW1hcmlzZShlbWlzaW9uZXNfdG90YWxlcyA9IHN1bShlbWlzaW9uZXNfdG90YWxlcykpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgYXJyYW5nZShkZXNjKGVtaXNpb25lc190b3RhbGVzKSkNCiAgDQogIHdvcmRjbG91ZDIoZGF0YSA9IGRmX2VtaV9ub21icmVzLCBzaXplID0gMC41KQ0KICANCmBgYA0KDQojIDQuIEFuw6FsaXNpcyBkZSBsYXMgZW1pc2lvbmVzIGFncsOtY29sYXMgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KTGFzIGVtaXNpb25lcyBhZ3LDrWNvbGFzIHNvbiBhcXVlbGxhcyBwcm9jZWRlbnRlcyBkZSBsYSBwcm9kdWNjacOzbiBhZ3JvcGVjdWFyaWEuDQoNCkdyYWNpYXMgYSBudWVzdHJvcyBjw6FsY3Vsb3MsIHBvZGVtb3MgYWZpcm1hciBxdWUsIGVuIGVsIGHDsW8gMTk5MCwgbG9zIGNpbmNvIHBhw61zZXMgKGVuIG9yZGVuIGRlc2NlbmRlbnRlKSBxdWUgbcOhcyBlbWlzaW9uZXMgYWdyw61jb2xhcyBsYW56YWJhbiBhIGxhIGF0bcOzc2ZlcmEgZXJhbjogRnJhbmNpYSwgQWxlbWFuaWEsIFBvbG9uaWEsIFJlaW5vIFVuaWRvIHkgVHVycXXDrWEgeSwgZW4gY2FtYmlvLCBlbiBlbCAyMDE5IGZ1ZXJvbjogRnJhbmNpYSwgVHVycXXDrWEsIEFsZW1hbmlhLCBSZWlubyBVbmlkbyBwZXJvIHRhbWJpw6luIEVzcGHDsWEgc2UgcG9zaWNpb25hIGNvbW8gcXVpbnRhIGVuIGVsIHLDoW5raW5nLiANCkVzdG9zIHBhw61zZXMgc29uIGdyYW5kZXMgeSBkaXNwb25lbiBkZSBhbXBsaWFzIHN1cGVyZmljaWVzIGN1bHRpdmFibGVzIHkgY2VyY2FuYXMgYWwgbWFyLiBTdXN0ZW50YW4gdW5hIGdyYW4gcGFydGUgZGUgbGEgcHJvZHVjY2nDs24gYWdyb3BlY3VhcmlhIGV1cm9wZWEuIEVzIHBvciBlbGxvIHF1ZSBsYXMgZW1pc2lvbmVzIHRlbmRyw6FuIG3DoXMgcGVzby4NClBvciB0YW50bywgbG9zIHBhw61zZXMgbcOhcyBjb250YW1pbmFudGVzIGVuIGxhIGFncmljdWx0dXJhIGhhbiBzaWRvIHByw6FjdGljYW1lbnRlIGxvcyBtaXNtb3MsIGxvIHF1ZSBoYSB2YXJpYWRvIGhhIHNpZG8gc3UgcG9zaWNpw7NuLiANCg0KVGFtYmnDqW4sIHBvZGVtb3Mgc2FjYXIgY29uY2x1c2lvbmVzIHNvYnJlIGxvcyBwYcOtc2VzIHF1ZSBtZW5vcyBlbWlzaW9uZXMgYWdyw61jb2xhcyBoYW4gbGFuemFkbyBhIGxhIGF0bcOzc2ZlcmEuIExvcyA1IHF1ZSBtZW5vcyBlbiAxOTkwLCBoYW4gc2lkbzogTWFsdGEsIENoaXByZSwgSXNsYW5kaWEsIEx1eGVtYnVyZ28geSBFc2xvdmVuaWEgeSBlbiAyMDE5IEVzdG9uaWEgc3VzdGl0dXllIGEgRXNsb3ZlbmlhLg0KRXN0byBzZSBkZWJlIGFsIHRhbWHDsW8gZGVsIHRlcnJpdG9yaW8sIHlhIHF1ZSBzdSByZWR1Y2lkYSBleHRlbnNpw7NuIHByb3ZvY2EgcXVlIGxhcyBzdXBlcmZpY2llcyBjdWx0aXZhYmxlcyBzZWFuIG11eSByZWR1Y2lkYXMgeSBwcmlvcmljZW4gbGxldmFyIGEgY2FibyBvdHJvIHRpcG8gZGUgYWN0aXZpZGFkZXMsIGNvbW8gaW5kdXN0cmlhIG8gc2VydmljaW9zLCBlbnRyZSBvdHJvcy4NCg0KVG9kbyBlc3RvIGFwYXJlY2UgcGxhc21hZG8gZW4gbGFzIHRhYmxhcyBzaWd1aWVudGVzLg0KDQojIyBUYWJsYSAxDQoNCmBgYHtyLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFfQ0KaW1wYWN0X21heCA8LSBkZl9hZ3JpICU+JSANCiAgZmlsdGVyKHllYXIgJWluJSBjKDE5OTAsIDIwMTkpKSAlPiUNCiAgZ3JvdXBfYnkoeWVhcikgJT4lIA0KICBzZWxlY3QocGFpcywgeWVhciwgZW1pc2lvbmVzX2FncmkpICU+JSANCiAgc2xpY2VfbWF4KGVtaXNpb25lc19hZ3JpLCBuID0gNSkgJT4lDQogIHJlbmFtZSgiUGHDrXNlcyIgPSBwYWlzLCAiQcOxb3MiID0geWVhciwgIkVtaXNpb25lcyBhZ3LDrWNvbGFzIiA9IGVtaXNpb25lc19hZ3JpKQ0KZ3RfZXUgPC0gZ3QoaW1wYWN0X21heCkgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gbWQoIioqTG9zIDUgcGHDrXNlcyBjb24gbcOhcyBlbWlzaW9uZXMgYWdyw61jb2xhcyoqIiksDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiZW50cmUgMTk5MCB5IDIwMTkiKSAlPiUNCiAgdGFiX3NvdXJjZV9ub3RlKG1kKCJGdWVudGU6IFtFVVJPU1RBVF0oaHR0cHM6Ly9hcHBzc28uZXVyb3N0YXQuZWMuZXVyb3BhLmV1L251aS9zaG93LmRvP2RhdGFzZXQ9ZW52X2Fpcl9nZ2UmbGFuZz1lbikiKSkNCg0KZ3RfZXUNCg0KYGBgDQoNCiMjIFRhYmxhIDINCg0KYGBge3IsICBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFfQ0KaW1wYWN0X21pbiA8LSAgZGZfYWdyaSAlPiUNCiAgZmlsdGVyKHllYXIgJWluJSBjKDE5OTAsIDIwMTkpKSAlPiUNCiAgZ3JvdXBfYnkoeWVhcikgJT4lIA0KICBzZWxlY3QocGFpcywgeWVhciwgZW1pc2lvbmVzX2FncmkpICU+JQ0KICBzbGljZV9taW4oZW1pc2lvbmVzX2FncmksIG4gPSA1KSAlPiUNCiAgcmVuYW1lKCJQYcOtc2VzIiA9IHBhaXMsICJBw7FvcyIgPSB5ZWFyLCAiRW1pc2lvbmVzIGFncsOtY29sYXMiID0gZW1pc2lvbmVzX2FncmkpDQoNCmd0X2V1IDwtIGd0KGltcGFjdF9taW4pICU+JSANCiAgdGFiX2hlYWRlcih0aXRsZSA9IG1kKCIqKkxvcyA1IHBhw61zZXMgY29uIG1lbm9zIGVtaXNpb25lcyBhZ3LDrWNvbGFzKioiKSwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJlbnRyZSAxOTkwIHkgMjAxOSIpICU+JQ0KICB0YWJfc291cmNlX25vdGUobWQoIkZ1ZW50ZTogW0VVUk9TVEFUXShodHRwczovL2FwcHNzby5ldXJvc3RhdC5lYy5ldXJvcGEuZXUvbnVpL3Nob3cuZG8/ZGF0YXNldD1lbnZfYWlyX2dnZSZsYW5nPWVuKSIpKQ0KDQpndF9ldQ0KDQpgYGANCg0KIyMgTGEgdmFyaWFjacOzbiBkZSBsYXMgZW1pc2lvbmVzIGFncsOtY29sYXMgZW50cmUgMTk5MCB5IDIwMTkgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KQWRlbcOhcywgY2FsY3VsYW1vcyBsYSB2YXJpYWNpw7NuIGRlIGxhcyBlbWlzaW9uZXMgYWdyw61jb2xhcywgZW50cmUgbG9zIGHDsW9zIDE5OTAgeSAyMDE5IHkgaGVtb3Mgb2J0ZW5pZG8gcXVlIGxvcyA1IHBhw61zZXMgcXVlIG3DoXMgaGFuIGF1bWVudGFkbyBsYXMgZW1pc2lvbmVzIGFncsOtY29sYXMgZGVzZGUgZWwgcHJpbWVyIGHDsW8gaGFzdGEgZWwgw7psdGltbyBoYW4gc2lkbzogVHVycXXDrWEsIElybGFuZGEsIENoaXByZSwgRXNwYcOxYSB5IEx1eGVtYnVyZ28uIA0KDQpFbiBjYW1iaW8sIGxvcyBxdWUgbWFzIGhhbiByZWR1Y2lkbyBzdXMgZW1pc2lvbmVzIHNvbjogTGF0dmlhLCBFc2xvdmFxdWlhLCBMaXR1YW5pYSwgQnVsZ2FyaWEgeSBDemVjaGlhLiBFbiBsb3Mgw7psdGltb3MgYcOxb3MgaGFuIHJlZHVjaWRvIGVsIHBlc28gZGVsIHNlY3RvciBhZ3LDrWNvbGEgY29uIHJlc3BlY3RvIGFsIHRvdGFsIHkgaGFuIGF1bWVudGFkbyBlbCBwZXNvIGRlIGxhIGluZHVzdHJpYSB5IGRlbCBzZWN0b3Igc2VydmljaW9zLiBFc3RvIGxlcyBwZXJtaXRlIGRpdmVyc2lmaWNhciBzdSBlc3RydWN0dXJhIHByb2R1Y3RpdmEgcGFyYSBmb21lbnRhciBlbCBkZXNhcnJvbGxvIGVjb27Ds21pY28gc29zdGVuaWRvIHkgY3JlYXIgcHJvZHVjdG9zIGRlIG1heW9yIHZhbG9yIGHDsWFkaWRvIHF1ZSBwdWVkYW4gY29tcGV0aXIgaW50ZXJuYWNpb25hbG1lbnRlLg0KDQpFbiBlbCBwcmltZXIgZ3LDoWZpY28gYW5pbWFkbywgaGVtb3Mgc2VsZWNjaW9uYWRvIGNpZXJ0b3MgcGHDrXNlcyBxdWUgY29uc2lkZXJhbW9zIHJlbGV2YW50ZXMgcGFyYSBudWVzdHJvIGFuw6FsaXNpcy4gUG9ydHVnYWwgaGEgbWFudGVuaWRvIHByw6FjdGltZW50ZSBzdXMgZW1pc2lvbmVzLCBFc3Bhw7FhIGxhcyBoYSBpbmNyZW1lbnRhZG8gbGlnZXJhbWVudGUgeSBGcmFuY2lhLCBBbGVtYW5pYSB5IFIuIFVuaWRvIGxhcyBoYW4gZGlzbWludWlkby4NCg0KRW4gZWwgc2VndW5kbyBncsOhZmljbyBhbmltYWRvIHNlIHB1ZWRlIG9ic2VydmFyIGxhIGV2b2x1Y2nDs24gZGUgbGFzIGVtaXNpb25lcyBhZ3LDrWNvbGFzIHRvdGFsZXMsIGRlc2RlIDE5OTAgaGFzdGEgMjAxOS4gU2UgcHVlZGVuIGRpZmVyZW5jaWFyIHRyZXMgZ3JhbmRlcyBldGFwYXM6DQoNCkVuIHByaW1lciBsdWdhciwgMTk5MC0yMDA1LCBzZSBwcm9kdWNlIHVuIGZ1ZXJ0ZSBkZXNjZW5zbyB5IGRlc3B1w6lzIHZ1ZWx2ZW4gYSBhdW1lbnRhci4gRW4gc2VndW5kbyBsdWdhciwgMjAwNS0yMDE1LCBsYXMgZW1pc2lvbmVzIGF1bWVudGFuIHBlcm8gZGVzcHXDqXMgc2lndWVuIGRpc21pbnV5ZW5kby4gWSBmaW5hbG1lbnRlLCAyMDE1LTIwMTksIHF1ZSBzdWZyZW4gdW4gZnVlcnRlIGluY3JlbWVudG8uDQoNCmBgYHtyLCAgZWNobyA9IEZBTFNFLCBldmFsID0gVFJVRX0NCmNyZWNfcGVyY2VudCA8LSBkZl9hZ3JpICU+JSANCiAgZmlsdGVyKHllYXIgJWluJSBjKDE5OTAsMjAxOSkpICU+JSANCiAgZ3JvdXBfYnkocGFpcykgJT4lIA0KICBtdXRhdGUoY3JlY19lbWlzaW9uZXMgPSBlbWlzaW9uZXNfYWdyaSAtIGZpcnN0KGVtaXNpb25lc19hZ3JpKSkgJT4lIA0KICBtdXRhdGUoY3JlY19lbWlzaW9uZXNfcGVyY2VudCA9IGNyZWNfZW1pc2lvbmVzIC8gZmlyc3QoZW1pc2lvbmVzX2FncmkpICogMTAwKQ0KDQpgYGANCg0KIyMjIFRhYmxhIDMNCg0KYGBge3IsICBlY2hvPUZBTFNFLCBldmFsPVRSVUV9DQptYXhfY3JlY19wZXJjIDwtIGNyZWNfcGVyY2VudCAlPiUgDQogIGZpbHRlciAoeWVhciA9PSAyMDE5KSAlPiUgDQogIGFycmFuZ2UoY3JlY19lbWlzaW9uZXNfcGVyY2VudCkgJT4lDQogIHVuZ3JvdXAoKSAlPiUNCiAgc2xpY2VfbWF4KGNyZWNfZW1pc2lvbmVzX3BlcmNlbnQsIG4gPSA1KSAlPiUNCiAgcmVuYW1lKCJQYcOtc2VzIiA9IHBhaXMsICJBw7FvcyIgPSB5ZWFyLCAiRW1pc2lvbmVzIGFncsOtY29sYXMiID0gZW1pc2lvbmVzX2FncmksICJWYXJpYWNpw7NuIGRlIGxhcyBlbWlzaW9uZXMiID0gY3JlY19lbWlzaW9uZXMsICJWYXJpYWNpw7NuIHBvcmNlbnR1YWwiID0gY3JlY19lbWlzaW9uZXNfcGVyY2VudCkgDQoNCmd0X2V1IDwtIGd0KG1heF9jcmVjX3BlcmMpICU+JSANCiAgdGFiX2hlYWRlcih0aXRsZSA9IG1kKCIqKkxvcyA1IHBhw61zZXMgcXVlIG3DoXMgaGFuIGF1bWVudGFkbyBzdXMgZW1pc2lvbmVzIGFncsOtY29sYXMqKiIpLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gImVudHJlIDE5OTAgeSAyMDE5IikgJT4lDQogIHRhYl9zb3VyY2Vfbm90ZShtZCgiRnVlbnRlOiBbRVVST1NUQVRdKGh0dHBzOi8vYXBwc3NvLmV1cm9zdGF0LmVjLmV1cm9wYS5ldS9udWkvc2hvdy5kbz9kYXRhc2V0PWVudl9haXJfZ2dlJmxhbmc9ZW4pIikpDQoNCmd0X2V1DQoNCmBgYA0KDQojIyMgVGFibGEgNA0KDQpgYGB7ciwgIGVjaG89RkFMU0UsIGV2YWw9VFJVRX0NCm1pbl9jcmVjX3BlcmMgPC0gY3JlY19wZXJjZW50ICU+JSANCiAgZmlsdGVyICh5ZWFyID09IDIwMTkpICU+JSANCiAgYXJyYW5nZShjcmVjX2VtaXNpb25lc19wZXJjZW50KSAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBzbGljZV9taW4oY3JlY19lbWlzaW9uZXNfcGVyY2VudCwgbiA9IDUpICU+JQ0KICByZW5hbWUoIlBhw61zZXMiID0gcGFpcywgIkHDsW9zIiA9IHllYXIsICJFbWlzaW9uZXMgYWdyw61jb2xhcyIgPSBlbWlzaW9uZXNfYWdyaSwgIlZhcmlhY2nDs24gZGUgbGFzIGVtaXNpb25lcyIgPSBjcmVjX2VtaXNpb25lcywgIlZhcmlhY2nDs24gcG9yY2VudHVhbCIgPSBjcmVjX2VtaXNpb25lc19wZXJjZW50KSANCg0KZ3RfZXUgPC0gZ3QobWluX2NyZWNfcGVyYykgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gbWQoIioqTG9zIDUgcGHDrXNlcyBxdWUgbcOhcyBoYW4gcmVkdWNpZG8gc3VzIGVtaXNpb25lcyBhZ3LDrWNvbGFzKioiKSwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJlbnRyZSAxOTkwIHkgMjAxOSIpICU+JQ0KICB0YWJfc291cmNlX25vdGUobWQoIkZ1ZW50ZTogW0VVUk9TVEFUXShodHRwczovL2FwcHNzby5ldXJvc3RhdC5lYy5ldXJvcGEuZXUvbnVpL3Nob3cuZG8/ZGF0YXNldD1lbnZfYWlyX2dnZSZsYW5nPWVuKSIpKQ0KDQpndF9ldQ0KDQpgYGANCg0KIyMjIE1hcGEgZGUgY29yb3BsZXRhcw0KDQpFbiBlbCBzaWd1aWVudGUgbWFwYSBtw7psdGlwbGUgc2UgcHVlZGUgb2JzZXJ2YXIsIGVuIGxvcyBhw7FvcyAxOTkwLCAyMDAwLCAyMDEwIHkgMjAxOSwgY29tbyB2YW4gY3JlY2llbmRvIG8gZGlzbWludXllbmRvIGxhcyBlbWlzaW9uZXMgYWdyw61jb2xhcyBlbiBsb3MgZGlzdGludG9zIHBhw61zZXMgZXVyb3Blb3MgZ3JhY2lhcyBhbCBjYW1iaW8gZGUgY29sb3IgcXVlIHNlIG9ic2VydmEgZW4gZWxsb3MuDQoNCmBgYHtyLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFfQ0Kd29ybGQgPC0gbmVfY291bnRyaWVzKHNjYWxlID0gIm1lZGl1bSIsIHJldHVybmNsYXNzID0gInNmIikNCndvcmxkIDwtIHdvcmxkICU+JSBmaWx0ZXIoc3VicmVnaW9uICE9ICJBbnRhcmN0aWNhIikgJT4lIGZpbHRlcihhZG1pbiAhPSAiR3JlZW5sYW5kIikNCndvcmxkIDwtIHdvcmxkICU+JSBzZWxlY3QobmFtZSwgaXNvX2EzLCBnZW9tZXRyeSkNCg0KDQojSGFjZW1vcyBjb2luY2lkaXIgbG9zIG5vbWJyZXMgY29uIGVsIGRmIGRlIHdvcmxkDQoNCmRmX2FncmkkcGFpcyA8LSByZWNvZGUoZGZfYWdyaSRwYWlzLCAiQ3plY2hpYSIgPSAiQ3plY2ggUmVwLiIsDQogICAgICAgICAgICAgICAgICAgICAgICJVSyIgPSAiVW5pdGVkIEtpbmdkb20iKQ0KI1VuaW1vcyBjb24gd29ybGQNCg0KZGZfam9pbiA8LSBsZWZ0X2pvaW4gKGRmX2FncmksIHdvcmxkLCBieSA9IGMoInBhaXMiID0gIm5hbWUiKSkNCg0KZGZfZXUgPC0gZGZfam9pbiAlPiUNCiAgZmlsdGVyKHllYXIgJWluJSBjKCIxOTkwIiwgIjIwMDAiLCAiMjAxMCIsICIyMDE5IikpICU+JQ0KICBtdXRhdGUoZW1pc2lvbmVzXzQgPSBudGlsZShlbWlzaW9uZXNfYWdyaSwgNCkpDQoNCnBfZXUgPC0gZ2dwbG90KGRmX2V1LCBhZXMoZmlsbCA9IGVtaXNpb25lc180LCBnZW9tZXRyeSA9IGdlb21ldHJ5KSkgKw0KICBnZW9tX3NmKCkgKw0KICBsYWJzKHRpdGxlID0gIkVtaXNpb25lcyBhZ3LDrWNvbGFzIHBvciBwYWlzIiwNCiAgICAgICBmaWxsID0gIkVtaXNpb25lcyIpICsgDQogIGNvb3JkX3NmKHhsaW0gPSBjKC0xNS4wMCwgNDIuMDApLCB5bGltID0gYygzNS42MCwgNzEsMTApLCBleHBhbmQgPSBUUlVFKSArDQogIHNjYWxlX2ZpbGxfZ3JhZGllbnQoIkVtaXNpb25lcyBhZ3LDrWNvbGFzIiwgaGlnaCA9ICJncmVlbiIsIGxvdyA9ICJ3aGl0ZSIpICsgDQogIGZhY2V0X2dyaWQoeWVhciB+IC4pDQoNCnBfZXUNCg0KYGBgDQoNCiMjIyBHcsOhZmljbw0KDQpFc3RvIG1pc21vLCBzZSBwdWVkZSB2aXN1YWxpemFyIG1lZGlhbnRlIGVsIHNpZ3VpZW50ZSBncsOhZmljbyB5IGFkZW3DoXMsIGRlc3RhY2Ftb3MgZW4gdW4gY29sb3IgZGlzdGludG8sIEVzcGHDsWEuDQoNCmBgYHtyLCAgbWVzc2FnZSA9IEZBTFNFLCAgd2FybmluZyA9IEZBTFNFLCAgcmVzdWx0cyA9IFRSVUUsIGVjaG8gPSBGQUxTRSAsIGV2YWwgPSBUUlVFfQ0KZGZfYWdyaTIgPC0gZGZfYWdyaSAlPiUNCiAgZmlsdGVyKHllYXIgJWluJSBjKCIxOTkwIiwgIjIwMDAiLCAiMjAxMCIsICIyMDE5IikpICU+JQ0KICBtdXRhdGUoZW1pc2lvbmVzX2FncmkgPSBlbWlzaW9uZXNfYWdyaS8xMDAwKQ0KDQpnMSA8LSBnZ3Bsb3QoZGZfYWdyaTIsICBhZXMoeCA9IHBhaXMsIHkgPSBlbWlzaW9uZXNfYWdyaSkpICsgDQogICAgICAgIGdlb21fY29sKGZpbGwgPSAic3RlZWxibHVlIikgKw0KICBnZW9tX2NvbChkYXRhID0gZmlsdGVyKGRmX2FncmkyLCBwYWlzID09ICJTcGFpbiIpLCBmaWxsID0gIm9yYW5nZSIpICsgDQogIGNvb3JkX2ZsaXAoKSArDQogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoeWVhcikpICsgDQogIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJncmF5MTAwIikpICsNCiAgbGFicyh0aXRsZSA9ICJFbWlzaW9uZXMgYWdyw61jb2xhcywgcG9yIHBhaXNlcyIsDQogICAgICAgeCA9ICJQYcOtcyIsIHkgPSAiRW1pc2lvbmVzIiwgc3VidGl0bGUgPSAiZW4gbWlsZXMgZGUgdG9uZWxhZGFzIGRlIGNvMiIpDQoNCmcxDQoNCmBgYA0KDQojIyMgT3RyYSBmb3JtYSBkZSB2aXN1YWxpemFyIGxvcyBkYXRvcw0KDQpZIGRlIGVzdGEgbWFuZXJhIHRhbiB2aXN1YWwsIHBvZGVtb3Mgb2JzZXJ2YXIgYXF1ZWxsb3MgcGHDrXNlcyBxdWUgbcOhcyBlbWlzaW9uZXMgYWdyw61jb2xhcyB0b3RhbGVzLCBkZXNkZSAxOTkwLCBoYW4gbGFuemFkbyBhIGxhIGF0bcOzc2ZlcmEuDQoNCkNvbiBlbGxvLCBzZSBhZmlybWEgcXVlIGhhbiBzaWRvIEZyYW5jaWEsIEFsZW1hbmlhLCBUdXJxdcOtYSwgUmVpbm8gVW5pZG8geSBFc3Bhw7FhIGxvcyBxdWUgaGFuIGxhbnphZG8gbcOhcyBlbWlzaW9uZXMgYWdyw61jb2xhcyB5YSBxdWUgc3Ugbm9tYnJlIGFwYXJlY2UgZW4gdW5hIGxldHJhIG3DoXMgZ3JhbmRlLiANCg0KYGBge3IsIGV2YWw9IFRSVUUsIGVjaG89IEZBTFNFfQ0KI1N1bWFtb3MgbGEgdG90YWxpZGFkIGRlIGxhcyBlbWlzaW9uZXMgYWdyw61jb2xhcyBwb3IgcGHDrXMgZW50cmUgbG9zIGHDsW9zIDE5OTAgeSAyMDE5DQoNCmRmX2Fncmlfbm9tYnJlcyA8LSBkZl9hZ3JpICU+JSANCiAgZ3JvdXBfYnkocGFpcykgJT4lIA0KICBzdW1tYXJpc2UoZW1pc2lvbmVzX2FncmkgPSBzdW0oZW1pc2lvbmVzX2FncmkpKSAlPiUNCiAgbXV0YXRlKGVtaXNpb25lc19hZ3JpID0gZW1pc2lvbmVzX2FncmkvMTAwMDAwMCkgJT4lDQogIHVuZ3JvdXAoKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhlbWlzaW9uZXNfYWdyaSkpDQoNCmdncGxvdChkZl9hZ3JpX25vbWJyZXMsIGFlcyhhcmVhID0gZW1pc2lvbmVzX2FncmksIGZpbGwgPSBlbWlzaW9uZXNfYWdyaSwgbGFiZWwgPSBwYWlzICkpICsNCiAgZ2VvbV90cmVlbWFwKCkgKw0KICBnZW9tX3RyZWVtYXBfdGV4dChjb2xvdXIgPSAid2hpdGUiLCBwbGFjZSA9ICJjZW50cmUiLA0KICAgICAgICAgICAgICAgICAgICBncm93ID0gRkFMU0UpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2Mob3B0aW9uID0gIkQiICwgbmFtZSA9ICIiLCBhbHBoYSA9IDAuOCwgYmVnaW4gPSAwLjMsIGVuZCA9IDAuNywgZGlyZWN0aW9uID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhciggdGl0bGUgPSAiQ2FudGlkYWQgZGUgZW1pc2lvbmVzLCBlbiBtaWxsb25lcyBkZSB0b25lbGFkYXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIGJhcmhlaWdodCA9IHVuaXQoMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzID0gIm1tIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcndpZHRoID0gdW5pdCg1MCwgdW5pdHMgPSAibW0iKSwgZHJhdy51bGltID0gRiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUucG9zaXRpb24gPSAndG9wJywgdGl0bGUuaGp1c3QgPSAwLjUsIGxhYmVsLmhqdXN0ID0gMC41KSkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzPWZ1bmN0aW9uKHZhbHVlKXtmb3JtYXQodmFsdWUsIHNjaWVudGlmaWMgPSBGQUxTRSl9KSArDQogIGxhYnModGl0bGUgPSAiRW1pc2lvbmVzIGFncsOtY29sYXMgcG9yIHBhw61zIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJlbnRyZSAxOTkwIHkgMjAxOSIpICsgDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArDQogIHRoZW1lKHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KDQpgYGANCg0KIyMjIEdyw6FmaWNvcyBhbmltYWRvcw0KDQoNCiFbXSguL2ltYWdlbmVzL2FuaW0uZ2lmKQ0KDQoNCiFbXSguL2ltYWdlbmVzL2dnLmdpZikNCg0KIyMjIEPDs2RpZ28NCg0KYGBge3IsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBldmFsID0gRkFMU0UsIGZpZy5hbGlnbiA9ICJjZW50ZXIifQ0KI0NhbGN1bGFtb3MgbGFzIGVtaXNpb25lcyBhZ3LDrWNvbGFzIHRvdGFsZXMgcG9yIGHDsW8NCg0KZGZfYWdyaV90b3RhbGVzIDwtIGRmX2FncmkgJT4lDQogIGdyb3VwX2J5KHllYXIpICU+JQ0KICBzdW1tYXJpc2UoZW1pc2lvbmVzX2FncmlfdG90YWxlcyA9IHN1bShlbWlzaW9uZXNfYWdyaSkpDQoNCmdnIDwtIGdncGxvdChkZl9hZ3JpX3RvdGFsZXMsIGFlcyh5ID0gZW1pc2lvbmVzX2FncmlfdG90YWxlcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB5ZWFyKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGdlb21fcG9pbnQoKSArDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTk5MCwgMjAyMCwgMTApLCBsaW1pdHMgPSBjKDE5OTAsIDIwMjApKSArIA0KICB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiZ3JheTEwMCIpLA0KICAgICAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJhbnRpcXVld2hpdGUiKSkgKw0KICBsYWJzKHRpdGxlID0gIkVtaXNpb25lcyB0b3RhbGVzIGFncsOtY29sYXMsIHBvciBhw7FvIiwNCiAgICB4ID0gIkHDsW9zIiwgeSA9ICJFbWlzaW9uZXMgIiwgc3VidGl0bGUgPSAiZW4gbWlsZXMgZGUgdG9uZWxhZGFzIGRlIGNvMiIsDQogICAgY2FwdGlvbiA9ICJGdWVudGU6IEV1cm9zdGF0IikgKw0KICB0cmFuc2l0aW9uX3JldmVhbCh5ZWFyKQ0KIy0gYW5pbV9zYXZlKCIuL2ltYWdlbmVzL2dnLmdpZiIsIGdnKQ0KDQpnZw0KDQojR3LDoWZpY28gYW5pbWFkbw0KDQpkZl9hZ3JpX3ggPC0gZGZfYWdyaSAlPiUNCiAgZmlsdGVyKHBhaXMgJWluJSBjKCJHZXJtYW55IiwgIkZyYW5jZSIsICJTcGFpbiIsICJVbml0ZWQgS2luZ2RvbSIsICJQb3J0dWdhbCIpKQ0KDQphbmltXzIgPC0gZGZfYWdyaV94ICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSB5ZWFyLCB5ID0gZW1pc2lvbmVzX2FncmksIGdyb3VwID0gcGFpcywgY29sb3IgPSBwYWlzKSkgKw0KICAgIGdlb21fbGluZSgpICsNCiAgICBnZW9tX3BvaW50KCkgKyANCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gImdyYXkxMDAiKSkgKyANCiAgbGFicyh0aXRsZSA9ICJFbWlzaW9uZXMgYWdyaWNvbGFzLCBwb3IgcGHDrXMiLA0KICAgICAgIHggPSAiQcOxb3MiLCB5ID0gIkVtaXNpb25lcyIsIHN1YnRpdGxlID0gImVuIG1pbGVzIGRlIHRvbmVsYWRhcyBkZSBjbzIiLCBjYXB0aW9uID0gIkZ1ZW50ZTogRXVyb3N0YXQiKSArDQogIHRyYW5zaXRpb25fcmV2ZWFsICh5ZWFyKSANCg0KIy0gYW5pbV9zYXZlKCIuL2ltYWdlbmVzL2FuaW0uZ2lmIiwgYW5pbV8yKQ0KDQphbmltXzINCg0KYGBgDQoNCiMgNS4gUHJvZnVuZGl6YW1vcyBlbCBhbsOhbGlzaXMgZW4gRXNwYcOxYSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpBaG9yYSwgcGFzYW1vcyBhIHJlYWxpemFyIHVuIGFuw6FsaXNpcyBtw6FzIGV4aGF1c3Rpdm8gZGUgbnVlc3RybyBwYcOtcy4NCg0KRW4gcHJpbWVyIGx1Z2FyLCBoZW1vcyBxdWVyaWRvIGRlc3RhY2FyIGxvcyA1IGHDsW9zIHF1ZSBtw6FzIGVtaXNpb25lcyBhZ3LDrWNvbGFzIGhhbiBoYWJpZG8geSBsb3MgNSBxdWUgbWVub3MuDQoNCkxvcyA1IGHDsW9zIHF1ZSBtw6FzIGVtaXNpb25lcyBhZ3LDrWNvbGFzIHNlIGhhbiBsYW56YWRvIGhhbiBzaWRvIGRlbCAyMDAwIGhhc3RhIGVsIDIwMDUgeSBlbiBjYW1iaW8sIGxvcyBxdWUgbWVub3MsIDE5OTEtMTk5NCB5IGRlc3B1w6lzLCBlbiBlbCAyMDEyLg0KUG9yIHRhbnRvLCBwb2RlbW9zIGFmaXJtYXIgcXVlIEVzcGHDsWEgbm8gaGEgc2VndWlkbyBsYSB0ZW5kZW5jaWEgZGUgbGEgc3VtYSBkZSB0b2RvcyBsb3MgcGHDrXNlcyBldXJvcGVvcywgZHVyYW50ZSBsb3MgYcOxb3MgMjAwMC0yMDA1LCBhbmFsaXphZGEgZW4gZWwgYXBhcnRhZG8gYW50ZXJpb3IuIA0KDQpUb2RvIGVzdG8gc2UgcHVlZGUgdmlzdWFsaXphciBlbiBsYSB0YWJsYSByZWFsaXphZGEuDQoNClksIGVuIGVsIGdyw6FmaWNvIGRlIGRlYmFqbywgc2UgcHVlZGUgb2JzZXJ2YXIgbGEgZXZvbHVjacOzbiBkZSBsYXMgZW1pc2lvbmVzIGFncsOtY29sYXMgZXNwYcOxb2xhcyBkdXJhbnRlIHRvZG9zIGxvcyBhw7Fvcy4gRHVyYW50ZSBlbCBwZXLDrW9kbyBlc3R1ZGlhZG8sIEVzcGHDsWEgaGEgYXVtZW50YWRvIHN1cyBlbWlzaW9uZXMuIEVzdG8gZXMgZGViaWRvIGEgbGEgaW5mbHVlbmNpYSBkZSBsYXMgcG9sw610aWNhcyBQQUMsIHF1ZSBoYW4gZm9tZW50YWRvIGxhIGFjdGl2aWRhZCBhZ3LDrWNvbGEgeSBwb3IgdGFudG8gbGFzIGVtaXNpb25lcy4NCg0KIyMgVGFibGEgMSANCg0KYGBge3IsIGVjaG8gPSBGQUxTRSwgZXZhbCA9IFRSVUV9DQppbXBhY3RfbWF4X2VzcCA8LSAgZGZfYWdyaSAlPiUNCiAgZmlsdGVyKHBhaXMgPT0gIlNwYWluIikgJT4lDQogIHNsaWNlX21heChlbWlzaW9uZXNfYWdyaSwgbiA9IDUpICU+JQ0KICByZW5hbWUoIlBhw61zIiA9IHBhaXMsICJBw7FvcyIgPSB5ZWFyLCAiRW1pc2lvbmVzIGFncsOtY29sYXMiID0gZW1pc2lvbmVzX2FncmkpDQoNCmd0X2VzcDEgPC0gZ3QoaW1wYWN0X21heF9lc3ApICU+JSANCiAgdGFiX2hlYWRlcih0aXRsZSA9IG1kKCIqKkxvcyA1IGHDsW9zIHF1ZSBtw6FzIGVtaXNpb25lcyBoYSBsYW56YWRvIEVzcGHDsWEqKiIpLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gImVudHJlIDE5OTAgeSAyMDE5IikgJT4lDQogIHRhYl9zb3VyY2Vfbm90ZShtZCgiRnVlbnRlOiBbRVVST1NUQVRdKGh0dHBzOi8vYXBwc3NvLmV1cm9zdGF0LmVjLmV1cm9wYS5ldS9udWkvc2hvdy5kbz9kYXRhc2V0PWVudl9haXJfZ2dlJmxhbmc9ZW4pIikpIA0KDQpndF9lc3AxDQoNCmBgYA0KDQojIyBUYWJsYSAyDQoNCmBgYHtyLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFfQ0KaW1wYWN0X21pbl9lc3AgPC0gIGRmX2FncmkgJT4lIA0KICBmaWx0ZXIocGFpcyA9PSAiU3BhaW4iKSAlPiUNCiAgc2xpY2VfbWluKGVtaXNpb25lc19hZ3JpLCBuID0gNSkgJT4lDQogIHJlbmFtZSgiUGHDrXMiID0gcGFpcywgIkHDsW9zIiA9IHllYXIsICJFbWlzaW9uZXMgYWdyw61jb2xhcyIgPSBlbWlzaW9uZXNfYWdyaSkNCg0KZ3RfZXNwMiA8LSBndChpbXBhY3RfbWluX2VzcCkgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gbWQoIioqTG9zIDUgYcOxb3MgcXVlIG1lbm9zIGVtaXNpb25lcyBoYSBsYW56YWRvIEVzcGHDsWEqKiIpLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gImVudHJlIDE5OTAgeSAyMDE5IikgJT4lDQogIHRhYl9zb3VyY2Vfbm90ZShtZCgiRnVlbnRlOiBbRVVST1NUQVRdKGh0dHBzOi8vYXBwc3NvLmV1cm9zdGF0LmVjLmV1cm9wYS5ldS9udWkvc2hvdy5kbz9kYXRhc2V0PWVudl9haXJfZ2dlJmxhbmc9ZW4pIikpDQoNCmd0X2VzcDINCg0KYGBgDQoNCiMjIEdyw6FmaWNvDQoNCkVuIGVzdGUgZ3LDoWZpY28sIHNlIG9ic2VydmEgbGEgZXZvbHVjacOzbiBkZSBsYXMgZW1pc2lvbmVzIGFncsOtY29sYXMgZW4gRXNwYcOxYSBkZXNkZSAxOTkwIGhhc3RhIDIwMTkuDQoNCmBgYHtyLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgcmVzdWx0cyA9IFRSVUUsZWNobyA9IEZBTFNFICwgZXZhbCA9IFRSVUV9DQpkZl9lc3AgPC0gZGZfYWdyaSAlPiUNCiAgZmlsdGVyIChwYWlzID09ICJTcGFpbiIpDQoNCmczIDwtIGdncGxvdChkZl9lc3AsICBhZXMoeCA9IHllYXIsIHkgPSBlbWlzaW9uZXNfYWdyaSkpICsgDQogICAgICAgIGdlb21fY29sKGZpbGwgPSAibGlnaHRncmVlbiIpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgxOTkwLCAyMDIwLCAxMCksIGxpbWl0cyA9IGMoMTk5MCwgMjAyMCkpICsgDQogIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ0aGlzdGxlMSIpKSArDQogIGxhYnModGl0bGUgPSAiRW1pc2lvbmVzIGFncsOtY29sYXMgZW4gRXNwYcOxYSIsDQogICAgeCA9ICJBw7FvcyIsIHkgPSAiRW1pc2lvbmVzIGFncsOtY29sYXMiLA0KICAgIHN1YnRpdGxlID0gImVuIG1pbGVzIGRlIHRvbmVsYWRhcyBkZSBDTzIiKQ0KDQpnMyArIGxhYnMgKGNhcHRpb24gPSAiRnVlbnRlOiBFdXJvc3RhdCIpDQoNCmBgYA0KDQojIyBMYSB2YXJpYWNpw7NuIGRlIGxhcyBlbWlzaW9uZXMgYWdyw61jb2xhcywgZW50cmUgMTk5MCB5IDIwMTkgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KTGEgdmFyaWFjacOzbiBxdWUgaGEgc3VmcmlkbyBFc3Bhw7FhIGVuIGN1YW50byBhIGxhcyBlbWlzaW9uZXMgYWdyw61jb2xhcyBlbnRyZSBsb3MgYcOxb3MgMTk5MCB5IDIwMTkgaGEgc2lkbyBkZSBhcHJveGltYWRhbWVudGUgZGUgOCwwMSAlLCBjb21vIHNlIHB1ZWRlIG9ic2VydmFyIGVuIGxhIHRhYmxhIGRlIGFiYWpvLg0KDQpgYGB7ciwgZWNobyA9IEZBTFNFLCBldmFsID0gVFJVRX0NCmNyZWNfcGVyY2VudF9lc3AgPC0gZGZfYWdyaSAlPiUgDQogIGZpbHRlcih5ZWFyICVpbiUgYygxOTkwLDIwMTkpLCBwYWlzID09ICJTcGFpbiIpICU+JSANCiAgbXV0YXRlKGNyZWNfZW1pc2lvbmVzID0gZW1pc2lvbmVzX2FncmkgLSBmaXJzdChlbWlzaW9uZXNfYWdyaSkpICU+JSANCiAgbXV0YXRlKGNyZWNfZW1pc2lvbmVzX3BlcmNlbnQgPSBjcmVjX2VtaXNpb25lcyAvIGZpcnN0KGVtaXNpb25lc19hZ3JpKSAqMTAwKQ0KDQpgYGANCg0KIyMjIFRhYmxhIDMNCg0KYGBge3IsIGVjaG8gPSBGQUxTRSwgZXZhbCA9IFRSVUUsIHJlc3VsdHMgPSBUUlVFfQ0KY3JlY19wZXJjZW50X2VzcCA8LSBjcmVjX3BlcmNlbnRfZXNwICU+JQ0KICByZW5hbWUoIlBhw61zIiA9IHBhaXMsICJBw7FvcyIgPSB5ZWFyLCAiRW1pc2lvbmVzIGFncsOtY29sYXMiID0gZW1pc2lvbmVzX2FncmksICJWYXJpYWNpw7NuIGRlIGxhcyBlbWlzaW9uZXMiID0gY3JlY19lbWlzaW9uZXMsICJWYXJpYWNpw7NuIHBvcmNlbnR1YWwiID0gY3JlY19lbWlzaW9uZXNfcGVyY2VudCkNCg0KZ3RfZXNwIDwtIGd0KGNyZWNfcGVyY2VudF9lc3ApICU+JSANCiAgdGFiX2hlYWRlcih0aXRsZSA9IG1kKCIqKlZhcmlhY2nDs24gZGUgbGFzIGVtaXNpb25lcyBhZ3LDrWNvbGFzIGVuIEVzcGHDsWEqKiIpLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gImVudHJlIDE5OTAgeSAyMDE5IikgJT4lDQogIHRhYl9zb3VyY2Vfbm90ZShtZCgiRnVlbnRlOiBbRVVST1NUQVRdKGh0dHBzOi8vYXBwc3NvLmV1cm9zdGF0LmVjLmV1cm9wYS5ldS9udWkvc2hvdy5kbz9kYXRhc2V0PWVudl9haXJfZ2dlJmxhbmc9ZW4pIikpDQoNCmd0X2VzcA0KDQpgYGANCg0KIyA2LiBFbWlzaW9uZXMgYWdyw61jb2xhcyB2cyBFbWlzaW9uZXMgdG90YWxlcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpFbiBlc3RlIGFwYXJ0YWRvLCBwcmV0ZW5kZW1vcyBsbGV2YXIgYSBjYWJvIHVuYSBjb21wYXJhY2nDs24gZGUgbGFzIGVtaXNpb25lcyBhZ3LDrWNvbGFzIGNvbiBsYSB0b3RhbGlkYWQgZGUgZW1pc2lvbmVzIGV4aXN0ZW50ZXMuDQoNCmBgYHtyLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0V9DQojSnVudGFtb3MgbG9zIGRvcyBkZiBwYXJhIHBvZGVyIHRyYWJhamFyIG1lam9yIGVuIG51ZXN0cm9zIGFuw6FsaXNpcyANCg0KZGZfdG90YWxlcyA8LSBkZl9lbWkgJT4lDQogIGdyb3VwX2J5KHllYXIpICU+JQ0KICBzdW1tYXJpc2UoZW1pc2lvbmVzX3RvdGFsZXMgPSBzdW0oZW1pc2lvbmVzX3RvdGFsZXMpKQ0KDQpkZl9sZWZ0X2pvaW4gPC0gbGVmdF9qb2luKGRmX2FncmksIGRmX3RvdGFsZXMsIGJ5ID0gInllYXIiKQ0KDQojI1BvcmNlbnRhamUgZGUgZW1pc2lvbmVzIGFncsOtY29sYXMgc29icmUgZWwgdG90YWwgZGUgZW1pc2lvbmVzIHBhcmEgY2FkYSBwYcOtcw0KDQojUGFyYSBjYWRhIGHDsW8NCg0KZGZfY29tcGFyYWNpb25fMSA8LSBkZl9sZWZ0X2pvaW4gJT4lDQogIGdyb3VwX2J5KHBhaXMpICU+JQ0KICBtdXRhdGUocG9yY2VudF9zb2JyZV90b3RhbCA9IGVtaXNpb25lc19hZ3JpL2VtaXNpb25lc190b3RhbGVzICogMTAwKSAlPiUNCiAgbXV0YXRlKHZhcl9wb3JjZW50ID0gcG9yY2VudF9zb2JyZV90b3RhbCAtIGxhZyhwb3JjZW50X3NvYnJlX3RvdGFsKSkgDQoNCiNFbnRyZSAxOTkwIHkgMjAxOQ0KDQpkZl9jb21wYXJhY2lvbl8yIDwtIGRmX2xlZnRfam9pbiAlPiUNCiAgZmlsdGVyKHllYXIgJWluJSBjKDE5OTAsMjAxOSkpICU+JQ0KICBncm91cF9ieShwYWlzKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRfc29icmVfdG90YWwgPSBlbWlzaW9uZXNfYWdyaS9lbWlzaW9uZXNfdG90YWxlcyAqIDEwMCkgJT4lDQogIG11dGF0ZSh2YXJfcG9yY2VudCA9IHBvcmNlbnRfc29icmVfdG90YWwgLSBmaXJzdChwb3JjZW50X3NvYnJlX3RvdGFsKSkgDQoNCmBgYA0KDQojIyBHcsOhZmljbw0KDQpZLCBtZWRpYW50ZSBlc3RlIGdyw6FmaWNvIHNlIHB1ZWRlIG9ic2VydmFyIGRpY2hhIGNvbXBhcmFjacOzbiwgcGFyYSBlbCBhw7FvIDIwMTkuDQpWZW1vcyBxdWUgcmVwcmVzZW50YW4gdW4gcG9yY2VudGFqZSBtdXkgYmFqby4gDQoNCkVuIG51ZXN0cm8gZ3LDoWZpY28sIGxhIEEgcmVwcmVzZW50YSBsYXMgZW1pc2lvbmVzIGFncsOtY29sYXMgKDExLDcwJSkgeSBsYSBsZXRyYSBCIHJlcHJlc2VudGEgbGFzIGVtaXNvbmVzIHRvdGFsZXMuDQoNCkxhcyBhY3RpdmlkYWRlcyBhZ3LDrWNvbGFzIHJlcHJlc2VudGFuIGFscmVkZWRvciBkZSB1biAyJSBkZWwgUElCLiBFcyBwb3IgZWxsbyBxdWUgbGFzIGVtaXNpb25lcyB0aWVuZW4gdW4gcGFwZWwgcmVkdWNpZG8gc29icmUgZWwgY8OzbXB1dG8gZ2xvYmFsLg0KDQpgYGB7ciwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIHJlc3VsdHMgPSBUUlVFLGVjaG8gPSBGQUxTRSAsIGV2YWwgPSBUUlVFfQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBncm91cCA9IExFVFRFUlNbMToyXSwNCiAgdmFsdWUgPSBjKDUwNjU1MC44LCA0MzI3OTgxKSkNCg0KZGF0YSA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShkZXNjKGdyb3VwKSkgJT4lDQogIG11dGF0ZShwcm9wID0gdmFsdWUgLyBzdW0oZGF0YSR2YWx1ZSkgKiAxMDApICU+JQ0KICBtdXRhdGUoeXBvcyA9IGN1bXN1bShwcm9wKS0gMC41KnByb3AgKQ0KDQpwIDwtIGdncGxvdChkYXRhLCBhZXMoeD0iIiwgeSA9IHByb3AsIGZpbGwgPSBncm91cCkpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMSwgY29sb3IgPSAiYmxhY2siKSArDQogIGNvb3JkX3BvbGFyKCJ5Iiwgc3RhcnQgPSAwKSArDQogIHRoZW1lX3ZvaWQoKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsNCiAgZ2VvbV90ZXh0KGFlcyh5ID0geXBvcywgbGFiZWwgPSBncm91cCksIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDYpICsNCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iU2V0NSIpDQoNCnAgKyBsYWJzKHRpdGxlID0gIkVtaXNpb25lcyBhZ3LDrWNvbGFzIHNvYnJlIGxhcyBlbWlzaW9uZXMgdG90YWxlcyIsDQogICAgIHN1YnRpdGxlID0gInBhcmEgZWwgYcOxbyAyMDE5IiwNCiAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEV1cm9zdGF0IikNCg0KYGBgDQoNCiMjIFRhYmxhIDENCg0KRW4gZXN0YSB0YWJsYSBpbnRlbnRhbW9zIHBsYXNtYXIgbG9zIDUgcGHDrXNlcyBxdWUgbWF5b3IgaW1wYWN0byBkZSBsYXMgZW1pc2lvbmVzIGFncsOtY29sYXMgdGllbmVuIHNvYnJlIGVsIHRvdGFsOyDDqXN0b3MgaGFuIHNpZG86IEZyYW5jaWEsIFR1cnF1w61hLCBBbGVtYW5pYSwgUmVpbm8gVW5pZG8geSBFc3Bhw7FhLg0KDQpgYGB7ciwgZWNobyA9IEZBTFNFLCBldmFsID0gVFJVRSwgcmVzdWx0cyA9IFRSVUV9DQojRWxlZ2ltb3MgbG9zIDUgcGHDrXNlcyBjb24gbWF5b3IgcG9yY2VudGFqZSBkZSBlbWlzaW9uZXMgYWdyw61jb2xhcyBzb2JyZSBlbCB0b3RhbCBwYXJhIGhhY2VyIGxhIHRhYmxhDQoNCmRmX3RvdGFsZXMgPC0gZGZfZW1pICU+JQ0KICBncm91cF9ieSh5ZWFyKSAlPiUNCiAgc3VtbWFyaXNlKGVtaXNpb25lc190b3RhbGVzID0gc3VtKGVtaXNpb25lc190b3RhbGVzKSkNCg0KZGZfbGVmdF9qb2luIDwtIGxlZnRfam9pbihkZl9hZ3JpLCBkZl90b3RhbGVzLCBieSA9ICJ5ZWFyIikNCg0KZGZfY29tcGFyYWNpb25fMiA8LSBkZl9sZWZ0X2pvaW4gJT4lDQogIGZpbHRlcih5ZWFyICVpbiUgYygxOTkwLDIwMTkpKSAlPiUNCiAgZ3JvdXBfYnkocGFpcykgJT4lDQogIG11dGF0ZShwb3JjZW50X3NvYnJlX3RvdGFsID0gZW1pc2lvbmVzX2FncmkvZW1pc2lvbmVzX3RvdGFsZXMgKiAxMDApICU+JQ0KICBtdXRhdGUodmFyX3BvcmNlbnQgPSBwb3JjZW50X3NvYnJlX3RvdGFsIC0gZmlyc3QocG9yY2VudF9zb2JyZV90b3RhbCkpIA0KDQpkZl9tYXhfY29tcCA8LSBkZl9jb21wYXJhY2lvbl8yICU+JQ0KICBmaWx0ZXIoeWVhciA9PSAyMDE5KSAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBzbGljZV9tYXgocG9yY2VudF9zb2JyZV90b3RhbCwgbiA9IDUpICU+JQ0KICByZW5hbWUoIlBhaXNlcyIgPSBwYWlzLCAiQcOxb3MiID0geWVhciwgIkVtaXNpb25lcyBhZ3LDrWNvbGFzIiA9IGVtaXNpb25lc19hZ3JpLCAiRW1pc2lvbmVzIHRvdGFsZXMiID0gZW1pc2lvbmVzX3RvdGFsZXMsICIlIHNvYnJlIGVsIHRvdGFsIiA9IHBvcmNlbnRfc29icmVfdG90YWwsICJWYXJpYWNpw7NuIHBvcmNlbnR1YWwiID0gdmFyX3BvcmNlbnQpDQoNCmd0X21heCA8LSBndChkZl9tYXhfY29tcCkgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gbWQoIioqTG9zIDUgcGFpc2VzIGNvbiBtYXlvciBwb3JjZW50YWplIGRlIGVtaXNpb25lcyBhZ3LDrWNvbGFzIHNvYnJlIGVsIHRvdGFsKioiKSwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJlbnRyZSAxOTkwIHkgMjAxOSIpICU+JQ0KICB0YWJfc291cmNlX25vdGUobWQoIkZ1ZW50ZTogW0VVUk9TVEFUXShodHRwczovL2FwcHNzby5ldXJvc3RhdC5lYy5ldXJvcGEuZXUvbnVpL3Nob3cuZG8/ZGF0YXNldD1lbnZfYWlyX2dnZSZsYW5nPWVuKSIpKSANCg0KZ3RfbWF4DQoNCmBgYA0KDQojIyBUYWJsYSAyDQoNCkRlIGZvcm1hIGFuw6Fsb2dhLCBsb3MgcXVlIG1lbm9zIGhhbiBzaWRvOiBNYWx0YSwgQ2hpcHJlLCBJc2xhbmRpYSwgTHV4ZW1idXJnbyB5IEVzdG9uaWEuIEVzdG8gc2UgZGViZSBhIHF1ZSBlc3RvcyBwYWlzZXMgcGVxdWXDsW9zIGRvbmRlIGxhIHN1cGVyZmljaWUgY3VsdGl2YWJsZSBlcyBlc2Nhc2EgeSBlbCBzZWN0b3IgYWdyw61jb2xhIGVzIG3DrW5pbW8uDQoNCmBgYHtyLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFfQ0KZGZfdG90YWxlcyA8LSBkZl9lbWkgJT4lDQogIGdyb3VwX2J5KHllYXIpICU+JQ0KICBzdW1tYXJpc2UoZW1pc2lvbmVzX3RvdGFsZXMgPSBzdW0oZW1pc2lvbmVzX3RvdGFsZXMpKQ0KDQpkZl9sZWZ0X2pvaW4gPC0gbGVmdF9qb2luKGRmX2FncmksIGRmX3RvdGFsZXMsIGJ5ID0gInllYXIiKQ0KDQpkZl9jb21wYXJhY2lvbl8yIDwtIGRmX2xlZnRfam9pbiAlPiUNCiAgZmlsdGVyKHllYXIgJWluJSBjKDE5OTAsMjAxOSkpICU+JQ0KICBncm91cF9ieShwYWlzKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRfc29icmVfdG90YWwgPSBlbWlzaW9uZXNfYWdyaS9lbWlzaW9uZXNfdG90YWxlcyAqIDEwMCkgJT4lDQogIG11dGF0ZSh2YXJfcG9yY2VudCA9IHBvcmNlbnRfc29icmVfdG90YWwgLSBmaXJzdChwb3JjZW50X3NvYnJlX3RvdGFsKSkgDQoNCmRmX21pbl9jb21wIDwtIGRmX2NvbXBhcmFjaW9uXzIgJT4lDQogIGZpbHRlcih5ZWFyID09IDIwMTkpICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIHNsaWNlX21pbihwb3JjZW50X3NvYnJlX3RvdGFsLCBuID0gNSkgJT4lDQogIHJlbmFtZSgiUGFpc2VzIiA9IHBhaXMsICJBw7FvcyIgPSB5ZWFyLCAiRW1pc2lvbmVzIGFncsOtY29sYXMiID0gZW1pc2lvbmVzX2FncmksICJFbWlzaW9uZXMgdG90YWxlcyIgPSBlbWlzaW9uZXNfdG90YWxlcywgIiUgc29icmUgZWwgdG90YWwiID0gcG9yY2VudF9zb2JyZV90b3RhbCwgIlZhcmlhY2nDs24gcG9yY2VudHVhbCIgPSB2YXJfcG9yY2VudCkNCg0KZ3RfbWluIDwtIGd0KGRmX21pbl9jb21wKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSBtZCgiKipMb3MgNSBwYWlzZXMgY29uIG1lbm9yIHBvcmNlbnRhamUgZGUgZW1pc2lvbmVzIGFncsOtY29sYXMgc29icmUgZWwgdG90YWwqKiIpLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gImVudHJlIDE5OTAgeSAyMDE5IikgJT4lDQogIHRhYl9zb3VyY2Vfbm90ZShtZCgiRnVlbnRlOiBbRVVST1NUQVRdKGh0dHBzOi8vYXBwc3NvLmV1cm9zdGF0LmVjLmV1cm9wYS5ldS9udWkvc2hvdy5kbz9kYXRhc2V0PWVudl9haXJfZ2dlJmxhbmc9ZW4pIikpIA0KDQpndF9taW4NCg0KYGBgDQoNCiMgNy4gTGEgaW1wb3J0YW5jaWEgZGVsIGNvbWJ1c3RpYmxlIGVuIGxhIGFncmljdWx0dXJhIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNClVubyBkZSBsb3MgcHJpbmNpcGFsZXMgZ2FzZXMgZGUgZWZlY3RvIGludmVybmFkZXJvIGVzIGVsIGRpw7N4aWRvIGRlIGNhcmJvbm8gKENPMiksIGVudHJlIG90cm9zIGNvbW8gZWwgw7N4aWRvIG5pdHJvc28gKE4yTykgeSBlbCBtZXRhbm8gKENINCkuDQoNCkRlYmlkbyBhIGxhIGFjY2nDs24gZGVsIGhvbWJyZSwgYSBzdXMgc2lzdGVtYXMgZGUgcHJvZHVjY2nDs24geSBkZSBjb25zdW1vIGRlIGVuZXJnw61hIGEgcGFydGlyIGRlIGxhIFJldm9sdWNpw7NuIEluZHVzdHJpYWwsIGxhIGNvbmNlbnRyYWNpw7NuIGRlIGVzb3MgZ2FzZXMgZW4gbGEgYXRtw7NzZmVyYSBlc3TDoSBjcmVjaWVuZG8gZGUgZm9ybWEgY29uc3RhbnRlLiBZLCBhIG3DoXMgY29uY2VudHJhY2nDs24gZGUgQ08yLCBtw6FzIGNhbG9yIHNlIHF1ZWRhIGF0cmFwYWRvIGRlbnRybyBkZSBsYSBhdG3Ds3NmZXJhIHRlcnJlc3RyZS4gRWwgbWF5b3IgaW1wdWxzb3IgZGUgZXNlIGNhbGVudGFtaWVudG8gZ2xvYmFsIGVzIGVsIENPMiB5IGVzdMOhIGxpZ2FkbyBmdW5kYW1lbnRhbG1lbnRlIGEgbGEgcXVlbWEgZGUgY29tYnVzdGlibGVzIGbDs3NpbGVzOiBlbCBjYXJiw7NuLCBlbCBwZXRyw7NsZW8geSBlbCBnYXMuDQoNCkhhY2Ugc29sbyB1bmEgZMOpY2FkYSBxdWUgbGEgcHJvZHVjY2nDs24gZGUgYmlvY29tYnVzdGlibGVzIGEgcGFydGlyIGRlIHBsYW50YXMgc2UgYWNvZ2nDsyBjb21vIHVuYSBhbHRlcm5hdGl2YSBlY29sw7NnaWNhIGEgbG9zIGNvbWJ1c3RpYmxlcyBmw7NzaWxlcy4gUmVjaWVudGVtZW50ZSwgc2UgaGEgb2JzZXJ2YWRvIHF1ZSBlcyB1bmEgc29sdWNpw7NuIHF1ZSBjb21waXRlIGNvbiBsYSBwcm9kdWNjacOzbiBkZSBhbGltZW50b3MgeSBxdWUgbm8gc2llbXByZSByZXN1bHRhIGVmZWN0aXZhIGVuIGxhIHJlZHVjY2nDs24gZGUgZW1pc2lvbmVzIGRlIGdhc2VzIGRlIGVmZWN0byBpbnZlcm5hZGVybyBvIGNvbnRhbWluYW50ZXMgYXRtb3Nmw6lyaWNvcy4NCg0KDQojIyBUYWJsYSAxDQoNCkxvcyA1IHBhw61zZXMgZXVyb3Blb3MgY29uIG1heW9yIGltcGFjdG8gZGVsIGNvbWJ1c3RpYmxlIGVuIGxhIGFncmljdWx0dXJhIGVuIGVsIGHDsW8gMTk5MCBmdWVyb246IEZyYW5jaWEsIEFsZW1hbmlhLCBOZXRoZXJsYW5kcywgUG9sb25pYSBlIEl0w6FsaWEuIEVuIGNhbWJpbywgZW4gZWwgMjAxOSBQb2xvbmlhLCBFc3Bhw7FhLCBGcmFuY2lhLCBUdXJxdcOtYSB5IE5ldGhlcmxhbmRzLiANCg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgZXZhbD1UUlVFfQ0KaW1wYWN0X2NvbWIgPC0gZGZfY29tYiAlPiUNCiAgZmlsdGVyKHllYXIgJWluJSBjKDE5OTAsIDIwMTkpKSAlPiUNCiAgZ3JvdXBfYnkoeWVhcikgJT4lIA0KICBzZWxlY3QocGFpcywgeWVhciwgZW1pc2lvbmVzX2NvbWIpICU+JSANCiAgc2xpY2VfbWF4KGVtaXNpb25lc19jb21iLCBuID0gNSkgJT4lDQogIHJlbmFtZSgiUGFpc2VzIiA9IHBhaXMsICJBw7FvcyIgPSB5ZWFyLCAiRW1pc2lvbmVzIGRlIGNvbWJ1c3RpYmxlIiA9IGVtaXNpb25lc19jb21iKQ0KDQpndF9jb21iIDwtIGd0KGltcGFjdF9jb21iKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSBtZCgiKipMb3MgNSBwYWlzZXMgY29uIG1heW9yIGltcGFjdG8gZGVsIGNvbWJ1c3RpYmxlIHNvYnJlIGxhIGFncmljdWx0dXJhKioiKSwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJlbnRyZSAxOTkwIHkgMjAxOSIpICU+JQ0KICB0YWJfc291cmNlX25vdGUobWQoIkZ1ZW50ZTogW0VVUk9TVEFUXShodHRwczovL2FwcHNzby5ldXJvc3RhdC5lYy5ldXJvcGEuZXUvbnVpL3Nob3cuZG8/ZGF0YXNldD1lbnZfYWlyX2dnZSZsYW5nPWVuKSIpKSANCg0KZ3RfY29tYg0KDQpgYGANCg0KIyMgVGFibGEgMg0KDQpNZWRpYW50ZSBlc3RhIHRhYmxhLCBzZSBwdWVkZSB2aXN1YWxpemFyIGxhcyBlbWlzaW9uZXMgZGVsIGNvbWJ1c3RpYmxlIHF1ZSB0aWVuZW4gZWZlY3RvIHNvYnJlIGxhIHByb2R1Y2Npw7NuIGFncsOtY29sYSBkdXJhbnRlIGxvcyBhw7FvcyBkZSAxOTkwLCAyMDAwLCAyMDEwIHkgMjAxOSwgZXMgZGVjaXIsIGNhZGEgMTAgYcOxb3MgYXByb3hpbWFkYW1lbnRlLiANCg0KSGF5IHBhw61zZXMgY29tbyBBdXRyaWEgcXVlIGhhbiBzdWZyaWRvIHVuYSBkaXNtdW51Y2nDs24gZGVzZGUgZWwgcHJpbWVyIGHDsW8gYWwgw7psdGltbywgcGVybyBvdHJvcyBjb21vIEN5cHJlLCBsYXMgaGFuIGF1bWVudGFkby4gDQoNCmBgYHtyLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2VzID0gRkFMU0UsIGVjaG8gPSBGQUxTRSwgZXZhbCA9IFRSVUV9DQoNCnRvdGFsX2NvbWIgPC0gZGZfY29tYiAlPiUgDQogIGZpbHRlcih5ZWFyICVpbiUgYygxOTkwLCAyMDAwLCAyMDEwLCAyMDE5KSkgJT4lIA0KICBncm91cF9ieSh5ZWFyLCBwYWlzKSAlPiUgDQogIHNsaWNlX21heChlbWlzaW9uZXNfY29tYiwgbiA9IDUpIA0KDQpkYXRhX3dpZGUyIDwtIHRvdGFsX2NvbWIgJT4lIA0KICAgICAgICAgICAgICB0aWR5cjo6cGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHllYXIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX2Zyb20gPSBlbWlzaW9uZXNfY29tYikNCg0Ka25pdHI6OmthYmxlKGRhdGFfd2lkZTIsIA0KICAgICAgICAgICAgIGFsaWduID0gImMiLCANCiAgICAgICAgICAgICBjYXB0aW9uID0gIkVtaXNpb25lcyBkZSBjb21idXN0aWJsZSBxdWUgYWZlY3RhbiBhIGxhIGFncmljdWx0dXJhOiAgICAgMTk5MC0yMDAwLTIwMTAtMjAxOSIsDQogICAgICAgICAgICAgZGlnaXRzID0gMiwgDQogICAgICAgICAgICAgZm9ybWF0LmFyZ3MgPSBsaXN0KGRlY2ltYWwubWFyayA9ICIsIiwgYmlnLm1hcmsgPSAiLiIpKSAlPiUNCiAga2FibGVFeHRyYTo6a2FibGVfc3R5bGluZyhmaXhlZF90aGVhZCA9IGxpc3QoZW5hYmxlZCA9IFQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kID0gImxpZ2h0Z3JlZW4iKSkgJT4lDQogIGNvbHVtbl9zcGVjKDEsIGJhY2tncm91bmQgPSAibGlnaHRncmVlbiIpDQogDQpgYGANCg0KIyMgR3LDoWZpY28NCg0KRW4gZXN0ZSBncsOhZmljbyBjaXJjdWxhciwgbGEgbGV0cmEgQSBsYXMgZW1pc2lvbmVzIHByb2NlZGVudGVzIGRlbCBjb21idXN0aWJsZSAoMTgsNzAlKSB5IGxhIGxldHJhIEIgc29uIGxhcyBlbWlzaW9uZXMgdG90YWxlcyBhZ3LDrWNvbGFzLg0KDQpgYGB7ciwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIHJlc3VsdHMgPSBUUlVFLGVjaG8gPSBGQUxTRSAsIGV2YWwgPSBUUlVFfQ0KZGF0YV9jb21iIDwtIGRhdGEuZnJhbWUoDQogIGdyb3VwID0gTEVUVEVSU1sxOjJdLA0KICB2YWx1ZSA9IGMoRW1pc2lvbmVzX2NvbWJ1c3RpYmxlID0gOTQ2ODAuNzMsIEVtaXNpb25lc19hZ3LDrWNvbGFzID0gNTA2NTUwLjgpKQ0KDQpkYXRhX2NvbWIgPC0gZGF0YV9jb21iICU+JSANCiAgYXJyYW5nZShkZXNjKGdyb3VwKSkgJT4lDQogIG11dGF0ZShwcm9wID0gdmFsdWUgLyBzdW0oZGF0YV9jb21iJHZhbHVlKSAqIDEwMCkgJT4lDQogIG11dGF0ZSh5cG9zID0gY3Vtc3VtKHByb3ApLSAwLjUqcHJvcCApDQoNCnAxIDwtIGdncGxvdChkYXRhX2NvbWIsIGFlcyh4ID0iIiwgeSA9IHByb3AsIGZpbGwgPSBncm91cCkpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMSwgY29sb3IgPSAiYmxhY2siKSArDQogIGNvb3JkX3BvbGFyKCJ5Iiwgc3RhcnQ9MCkgKw0KICB0aGVtZV92b2lkKCkgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikgKw0KICBnZW9tX3RleHQoYWVzKHkgPSB5cG9zLCBsYWJlbCA9IGdyb3VwKSwgY29sb3IgPSAiYmxhY2siLCBzaXplPTYpICsNCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQ2IikNCg0KcDEgKyBsYWJzKHRpdGxlID0gIkVtaXNpb25lcyBkZWwgY29tYnVzdGlibGUgc29icmUgbGFzIGVtaXNpb25lcyBhZ3LDrWNvbGFzIiwNCiAgICAgc3VidGl0bGUgPSAicGFyYSBlbCBhw7FvIDIwMTkiLA0KICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRXVyb3N0YXQiICkNCg0KYGBgDQoNCiMjIEPDs2RpZ28NCg0KYGBge3IsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBldmFsID0gRkFMU0UsIGZpZy5hbGlnbiA9ICJjZW50ZXIifQ0KI1RhYmxhIDENCg0KaW1wYWN0X2NvbWIgPC0gZGZfY29tYiAlPiUNCiAgZmlsdGVyKHllYXIgJWluJSBjKDE5OTAsIDIwMTkpKSAlPiUNCiAgZ3JvdXBfYnkoeWVhcikgJT4lIA0KICBzZWxlY3QocGFpcywgeWVhciwgZW1pc2lvbmVzX2NvbWIpICU+JSANCiAgc2xpY2VfbWF4KGVtaXNpb25lc19jb21iLCBuID0gNSkgJT4lDQogIHJlbmFtZSgiUGFpc2VzIiA9IHBhaXMsICJBw7FvcyIgPSB5ZWFyLCAiRW1pc2lvbmVzIGRlIGNvbWJ1c3RpYmxlIiA9IGVtaXNpb25lc19jb21iKQ0KDQpndF9jb21iIDwtIGd0KGltcGFjdF9jb21iKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSBtZCgiKipMb3MgNSBwYWlzZXMgY29uIG1heW9yIGltcGFjdG8gZGVsIGNvbWJ1c3RpYmxlIHNvYnJlIGxhIGFncmljdWx0dXJhKioiKSwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJlbnRyZSAxOTkwIHkgMjAxOSIpICU+JQ0KICB0YWJfc291cmNlX25vdGUobWQoIkZ1ZW50ZTogW0VVUk9TVEFUXShodHRwczovL2FwcHNzby5ldXJvc3RhdC5lYy5ldXJvcGEuZXUvbnVpL3Nob3cuZG8/ZGF0YXNldD1lbnZfYWlyX2dnZSZsYW5nPWVuKSIpKSANCg0KZ3RfY29tYg0KDQojVGFibGEgMg0KDQp0b3RhbF9jb21iIDwtIGRmX2NvbWIgJT4lIA0KICBmaWx0ZXIoeWVhciAlaW4lIGMoMTk5MCwgMjAwMCwgMjAxMCwgMjAxOSkpICU+JSANCiAgZ3JvdXBfYnkoeWVhciwgcGFpcykgJT4lIA0KICBzbGljZV9tYXgoZW1pc2lvbmVzX2NvbWIsIG4gPSA1KSANCg0KZGF0YV93aWRlMiA8LSB0b3RhbF9jb21iICU+JSANCiAgICAgICAgICAgICAgdGlkeXI6OnBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSB5ZWFyLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc19mcm9tID0gZW1pc2lvbmVzX2NvbWIpDQoNCmtuaXRyOjprYWJsZShkYXRhX3dpZGUyLCANCiAgICAgICAgICAgICBhbGlnbiA9ICJjIiwgDQogICAgICAgICAgICAgY2FwdGlvbiA9ICJFbWlzaW9uZXMgZGUgY29tYnVzdGlibGUgcXVlIGFmZWN0YW4gYSBsYSBhZ3JpY3VsdHVyYTogICAgIDE5OTAtMjAwMC0yMDEwLTIwMTkiLA0KICAgICAgICAgICAgIGRpZ2l0cyA9IDIsIA0KICAgICAgICAgICAgIGZvcm1hdC5hcmdzID0gbGlzdChkZWNpbWFsLm1hcmsgPSAiLCIsIGJpZy5tYXJrID0gIi4iKSkgJT4lDQogIGthYmxlRXh0cmE6OmthYmxlX3N0eWxpbmcoZml4ZWRfdGhlYWQgPSBsaXN0KGVuYWJsZWQgPSBULCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCA9ICJsaWdodGdyZWVuIikpICU+JQ0KICBjb2x1bW5fc3BlYygxLCBiYWNrZ3JvdW5kID0gImxpZ2h0Z3JlZW4iKQ0KDQojR3LDoWZpY28NCg0KZGF0YV9jb21iIDwtIGRhdGEuZnJhbWUoDQogIGdyb3VwID0gTEVUVEVSU1sxOjJdLA0KICB2YWx1ZSA9IGMoRW1pc2lvbmVzX2NvbWJ1c3RpYmxlID0gOTQ2ODAuNzMsIEVtaXNpb25lc19hZ3LDrWNvbGFzID0gNTA2NTUwLjgpKQ0KDQpkYXRhX2NvbWIgPC0gZGF0YV9jb21iICU+JSANCiAgYXJyYW5nZShkZXNjKGdyb3VwKSkgJT4lDQogIG11dGF0ZShwcm9wID0gdmFsdWUgLyBzdW0oZGF0YV9jb21iJHZhbHVlKSAqIDEwMCkgJT4lDQogIG11dGF0ZSh5cG9zID0gY3Vtc3VtKHByb3ApLSAwLjUqcHJvcCApDQpwMSA8LSBnZ3Bsb3QoZGF0YV9jb21iLCBhZXMoeCA9IiIsIHkgPSBwcm9wLCBmaWxsID0gZ3JvdXApKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDEsIGNvbG9yID0gImJsYWNrIikgKw0KICBjb29yZF9wb2xhcigieSIsIHN0YXJ0PTApICsNCiAgdGhlbWVfdm9pZCgpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpICsNCiAgZ2VvbV90ZXh0KGFlcyh5ID0geXBvcywgbGFiZWwgPSBncm91cCksIGNvbG9yID0gImJsYWNrIiwgc2l6ZT02KSArDQogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0NiIpDQoNCnAxICsgbGFicyh0aXRsZSA9ICJFbWlzaW9uZXMgZGVsIGNvbWJ1c3RpYmxlIHNvYnJlIGxhcyBlbWlzaW9uZXMgYWdyw61jb2xhcyIsDQogICAgIHN1YnRpdGxlID0gInBhcmEgZWwgYcOxbyAyMDE5IiwNCiAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEV1cm9zdGF0IiApDQoNCiANCmBgYA0KDQoNCiMgOC4gQ29uY2x1c2lvbmVzDQoNCk1lZGlhbnRlIGVzdGUgdHJhYmFqbyBoZW1vcyBpbnRlbnRhZG8gaGFjZXIgdW4gZXhoYXVzdGl2byBhbsOhbGlzaXMgZGUgbGFzIGVtaXNpb25lcyBhZ3LDrWNvbGFzLCBoYWNpZW5kbyBoaW5jYXBpw6kgZW4gbGEgdG90YWxpZGFkIGRlIGVtaXNpb25lcyBjbzIgeSB0YW1iacOpbiBsYSBpbXBvcnRhbmNpYSBkZWwgY29tYnVzdGlibGUgZW4gbGEgYWdyaWN1bHR1cmEuDQoNCkhlbW9zIHBvZGlkbyBvYnNlcnZhciBsYSBldm9sdWNpw7NuIGNvbXBsZXRhIGRlIGRpY2hhcyB2YXJpYWJsZXMgeWEgcXVlIGhlbW9zIHJlYWxpemFkbyBhbsOhbGlzaXMgdGFudG8gcG9yIGHDsW9zIGNvbW8gcG9yIHBhw61zZXMgaW50ZW50YW5kbyBzYWNhciBjb25jbHVzaW9uZXMuDQpNdWNoYXMgdmVjZXMsIHJlc2FsdGFtb3MgNSBhw7FvcyBvIDUgcGHDrXNlcyBwYXJhIHBvZGVyIGFzw60gY29tcGFyYXIgZGUgbWFuZXJhIG3DoXMgc2VuY2lsbGEuDQoNClBhcmEgaGFjZXIgZnJlbnRlIGEgbGFzIGVtaXNpb25lcyBhZ3LDrWNvbGFzIHBlbnNhbW9zIHF1ZSBlcyBpbXBvcnRhbnRlIGFwb3N0YXIgcG9yIGxhIGlubm92YWNpw7NuIGRlbCBzZWN0b3IgYWdyw61jb2xhLCB5YSBxdWUgaGEgc2lkbyB1biBzZWN0b3IgaGlzdMOzcmljYW1lbnRlIGF0cmFzYWRvLg0KUG9yIGxvIHF1ZSwgZXMgbmVjZXNhcmlvIHF1ZSBkaWNobyBzZWN0b3Igc2UgYWRhcHRlIGEgbGFzIG51ZXZhcyB0w6ljbmljYXMgZGUgY3VsdGl2byBleGlzdGVudGVzIHkgc3UgYXB1ZXN0YSBwb3IgbGFzIGVuZXJnw61hcyByZW5vdmFibGVzLg0KDQojIDkuIEJpYmxpb2dyYWbDrWENCg0KW0V1cm9zdGF0ICgyMDIxKTogR3JlZW5ob3VzZSBnYXMgZW1pc3Npb25zIGJ5IHNvdXJjZSBzZWN0b3IgKHNvdXJjZTogRUVBKV0oaHR0cHM6Ly9hcHBzc28uZXVyb3N0YXQuZWMuZXVyb3BhLmV1L251aS9zaG93LmRvP2RhdGFzZXQ9ZW52X2Fpcl9nZ2UmbGFuZz1lbikNCg0KW1R1dG9yaWFsZXMgZGUgbGEgYXNpZ25hdHVyYV0oaHR0cHM6Ly9wZXJlenA0NC5naXRodWIuaW8vaW50cm8tZHMtMjEtMjItd2ViLzA0LXR1dG9yaWFsZXMuaHRtbCkNCg0KUGFyYSBsbGV2YXIgYSBjYWJvIGVsIHRyYWJham8sIG5vcyBoYSBzZXJ2aWRvIGRlIGdyYW4gYXl1ZGEgbG9zIHRyYWJham9zIGRlbCBhw7FvIGFudGVyaW9yIGNvbGdhZG9zIGVuIGxhIHDDoWdpbmEgd2ViIGRlbCBjdXJzbywgc29icmUgdG9kbywgZWwgZGUgIkFuw6FsaXNpcyBkZWwgaW1wYWN0byBlY29sw7NnaWNvIiBkZWJpZG8gYSBsYSBzaW1pbGl0dWQgZGVsIHRlbWEgZWxlZ2lkby4gU2UgcHVlZGUgdmVyIFthcXXDrV0oaHR0cHM6Ly9yb2RyaTQ1bC5naXRodWIuaW8vdHJhYmFqb19CaWdEYXRhX2VxdWlwby8pDQoNCjxicj48YnI+DQoNCkJvbiBuYWRhbCwgTUlBVSEhDQoNCmBgYHtyLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1hZ2VuZXMiLCAiZ2F0by1mZWxpei1uYXZpZGFkLmdpZiIpICkNCmBgYA0KDQo8aHIgY2xhc3M9ImxpbmVhLXJlZCI+DQo8aHIgY2xhc3M9ImxpbmVhLXJlZCI+DQoNCmBgYHtyLCBlY2hvID0gRkFMU0V9DQpzZXNzaW9uaW5mbzo6c2Vzc2lvbl9pbmZvKCkgJT4lIGRldGFpbHM6OmRldGFpbHMoc3VtbWFyeSA9ICdJbmZvcm1hY2nDs24gZGUgbWkgUi1zZXNpw7NuOicpIA0KYGBgDQoNCjxicj48YnI+DQoNCjxkaXYgY2xhc3M9InRvY2lmeS1leHRlbmQtcGFnZSIgZGF0YS11bmlxdWU9InRvY2lmeS1leHRlbmQtcGFnZSIgc3R5bGU9ImhlaWdodDogMDsiPjwvZGl2Pg0K