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 2020-2021. El repo del trabajo está aquí. La página web de la asignatura y los trabajos de mis compañeros pueden verse aquí.

Introducción

A continuación explicaremos los indicadores económicos más relevantes en la macroecónomia, para ello utilizaremos datos extraídos principalmente de la base de datos del banco mundial. Todos los gráficos son de elaboración propia , en su mayoría utilizando la función ggplot() del paquete tidyverse.

en este trabajo contestaremos a las siguientes cuestiones:

  1. Evidencia empírica de la paridad cubierta y descubierta de intereses. ¿En qué grado se cumple esta teoría?
  2. Evidencia empírica de la PPA absoluta y relativa. ¿En qué grado se cumple esta teoría?
  3. Desequilibrios globales: Ahorro, Inversión, Balanza por cuenta corriente. Evolución histórica para el país que consideréis
  4. Beneficios de la globalización financiera en el país que consideréis.
  5. Balanza de Pagos y deuda externa (deuda soberana). Evolución histórica para el país que consideréis.
  6. La política de estabilización en una economía abierta: Política Fiscal y Monetaria. Análisis teórico, en función de si el país es pequeño o grande en el contexto internacional del efecto de dichas políticas sobre la renta, los tipos de interés y tipos de cambio
  7. Cualquier tema relacionado con la macroeconomía internacional y que pueda estar de actualidad. Por ejemplo, deslocalizaciones de empresas, guerras comerciales etc.

Como podemos ver en el mapa, Alemania es el país de la UE con mayor PIB y su liderazgo se ha incrementado en los últimos años.

Mapa

Código


library(ggthemes) # Load
library(tidyverse)
library(rio)
library(plotly)
library(janitor)
library(gganimate)
library(viridis)
library("sf")
library(tidyverse)
world <- rnaturalearth::ne_countries(scale = "medium", returnclass = "sf")
world_points<- st_centroid(world)
world_points <- cbind(world, st_coordinates(st_centroid(world$geometry)))

df_pwr<- read_csv("./datos/pib5.csv") %>% select(-c(`Series Name`,`Series Code`))  %>% rename(sovereignt = `Country Name`,
          `1990`=`1990 [YR1990]`,
          `1991`=`1991 [YR1991]`,
          `1992`=`1992 [YR1992]`,
          `1993`=`1993 [YR1993]`,
          `1994`=`1994 [YR1994]`,
          `1995`=`1995 [YR1995]`,
          `1996`=`1996 [YR1996]`,
          `1997`=`1997 [YR1997]`,
          `1998`=`1998 [YR1998]`,
          `1999`=`1999 [YR1999]`,
          `2000`=`2000 [YR2000]`,
          `2001`=`2001 [YR2001]`,
          `2002`=`2002 [YR2002]`,
          `2003`=`2003 [YR2003]`,
          `2004`=`2004 [YR2004]`,
          `2005`=`2005 [YR2005]`,
          `2006`=`2006 [YR2006]`,
          `2007`=`2007 [YR2007]`,
          `2008`=`2008 [YR2008]`,
          `2009`=`2009 [YR2009]`,
          `2010`=`2010 [YR2010]`,
          `2011`=`2011 [YR2011]`,
          `2012`=`2012 [YR2012]`,
          `2013`=`2013 [YR2013]`,
          `2014`=`2014 [YR2014]` ,
          `2015`=`2015 [YR2015]`,
          `2016`=`2016 [YR2016]`,
          `2017`=`2017 [YR2017]`,
          `2018`=`2018 [YR2018]`,
          `2019`=`2019 [YR2019]`

  )

df_pwr20 <- df_pwr %>%  pivot_longer(cols = 3:32, names_to = "year") %>% transform(year = as.numeric(year),
                                                                                  value = as.numeric(value)
                                                                                  )



df_pwr5 <- inner_join(world, df_pwr20, by= c("sovereignt" = "sovereignt")) %>% filter(continent == "Europe", sovereignt != "Bosnia and Herzegovina")

df_pwr9 <- df_pwr5 %>% select(sovereignt, year, value)
p <- ggplot() + geom_sf(data = df_pwr9, aes(fill = value)) +
  labs(title = "Mapa del mundo energias renovables 1990 - 2015",
       caption = "Datos provenientes de World Bank") +
  scale_fill_viridis(direction = 1) +
  transition_time(year) + labs(title = "Porcentaje de energia renovable por país", subtitle = "Año:{as.integer(frame_time)}"  ) +
  coord_sf(xlim = c(-17, 40), ylim = c(38, 70))+
  theme(
    panel.background = element_rect(fill ='#272635' ,
                                    colour = '#272635',
                                    size = 0.5, linetype = "solid"),
    plot.background = element_rect(fill ='#272635' ,
                                   colour = '#272635',
                                   size = 0.5, linetype = "solid"),
    panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                    colour = '#CECECE'), 
    panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                    colour = '#CECECE'),
    axis.text.x =element_text(colour='#CECECE'),
    axis.text.y =element_text(colour='#CECECE'),
    plot.title = element_text(colour = '#CECECE'),
    axis.title.x = element_text(colour = "#CECECE"),
    axis.title.y = element_text(colour = "#CECECE"),
    # panel.border = element_rect(fill='#272635')
  )

anim1 <- animate(p)

anim_save("./imagenes/map.gif", anim1)

1. Paridad cubierta y descubierta de los tipos de interés

Gráfico

Código

#Gráfico tipo de cambio EURO

exch_ger_csv2<- read_csv("./datos/eurofxref.csv")
Inflation<- read_csv("./datos/inflation.csv")

ger_exch9 <- exch_ger_csv2 %>% select(Date, USD, CNY, GBP, JPY) %>% drop_na() %>% pivot_longer(cols = 2:5, names_to = "currency", values_to = "exchange_rate")



p <-ggplot(ger_exch9, aes(Date, exchange_rate,group = currency )) +
  geom_line(aes(color = currency)) +

  theme(axis.title.y=element_blank(),
        axis.text.y=element_blank(),
        axis.ticks.y=element_blank())+
  geom_smooth() +
  labs(x = "Año", y = "exchange rate", 
       title = "Tipo de cambio €") +
  facet_grid(rows = vars(currency),scales = "free") +
  theme(legend.title = element_blank())+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )

p

En el siguiente Gráfico podemos ver como ha variado el tipo de cambio del euro con respecto a otras monedas del mundo a lo largo de los últimos 20 años. Como podemos observar hay cierta correlación entre los cambios con las diferentes monedas, además los tipos de cambio fluctúan mucho en un corto periodo de tiempo.

Paridad Cubierta

Hablamos de Paridad cubierta de los tipos de interés cuando al realizar una inversión en un depósito en yenes , el riesgo que proviene de el tipo de cambio a futuro entre el yen y el € queda asegurado por un contrato realizado a futuro. Así nos aseguramos de que en el caso de realizar una inversión en una moneda extranjera los tipos de interés obtenidos no se pierdan por las fluctuaciones en el tipo de cambio.

\[ \color{#6BFFB8}{ (1 + i_{\alpha}) = (1 + i_{\epsilon})\frac{F_{\frac{\alpha}{\epsilon}}}{E_{\frac{\alpha}{\epsilon}}}} \]

Paridad Descubierta

La paridad descubierta de intereses es una condición de ausencia de arbitraje que describe un equilibrio en el que los inversores son indiferentes entre depósitos bancarios remunerados en dos monedas sin que se haya cubierto el riesgo cambiario. Al contrario que en la paridad cubierta, en este caso el riesgo originado por las fluctuaciones cambiarias entre las dos monedas no queda cubierto y aún así el inversor está indiferente entre un deposito en ¥ o en €.

\[\begin{align} \color{#6BFFB8}{ E_{\frac{\alpha}{\epsilon}} = E_{\frac{\alpha}{\epsilon}}^{e} \frac{1+i_{\epsilon}}{1+i_{\alpha}} \rightarrow i_{\alpha} = i_{\epsilon} + \frac{\bigtriangleup E_{\frac{\alpha}{\epsilon}}^{e}}{E_{\frac{\alpha}{\epsilon}}} } \end{align}\]

2. PPA absoluta y relativa

Para entender la PPA absoluta hay que hablar primero de la Ley del Precio Único o LPU, es la condición por la cual el precio de un bien en un país es igual al precio de este bien en otro país, todo esto descontando costes de transporte, almacenamiento, etc. Esto nos asegura que no se produzca arbitraje ya que el mercado estará en equilibrio.

PPA absoluta

La PPA absoluta se produce cuando el valor de la misma cesta es el mismo en diferentes países, o lo que es lo mismo, cuando el tipo de cambio real es igual a 1.

\[\begin{align} \color{#6BFFB8}{ E_{\frac{\alpha}{\epsilon}} = \frac{P_{\alpha}}{P_{\epsilon}} } \end{align}\]

PPA Relativa

Gráfico

código


RPCS<- read_csv("./datos/Relativepcs.csv") %>% drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                                    "2001" = `2001 [YR2001]`,
                                                                    "2002" = `2002 [YR2002]`,
                                                                    "2003" = `2003 [YR2003]`,
                                                                    "2004" = `2004 [YR2004]`,
                                                                    "2005" = `2005 [YR2005]`,
                                                                    "2006" = `2006 [YR2006]`,
                                                                    "2007" = `2007 [YR2007]`,
                                                                    "2008" = `2008 [YR2008]`,
                                                                    "2009" = `2009 [YR2009]`,
                                                                    "2010" = `2010 [YR2010]`,
                                                                    "2011" = `2011 [YR2011]`,
                                                                    "2012" = `2012 [YR2012]`,
                                                                    "2013" = `2013 [YR2013]`,
                                                                    "2014" = `2014 [YR2014]`,
                                                                    "2015" = `2015 [YR2015]`,
                                                                    "2016" = `2016 [YR2016]`,
                                                                    "2017" = `2017 [YR2017]`,
                                                                    "2018" = `2018 [YR2018]`,
                                                                    "2019" = `2019 [YR2019]`)  %>% 
  pivot_longer(cols = 5:24, names_to = "year", values_to = "rpcs") %>% 
  select('Country Name', year, rpcs) %>%  mutate(year = as.numeric(year)) %>% pivot_wider(names_from = 'Country Name', values_from = "rpcs") %>% 
  mutate(rpcs = (Germany/`United States`)) %>% select(rpcs,year)



ger_exch12 <- ger_exch9 %>% filter(currency == "USD") %>% 
  mutate(year = year(Date)) %>% 
  mutate(month = month(Date)) %>% 
  mutate(day = day(Date)) %>% filter(day ==  2) %>% filter(month == 1) %>% select(year,exchange_rate)


d <- inner_join(ger_exch12,RPCS) 



ggplot(d)+ 

geom_line(aes(x= year,y = rpcs, colour = "Precios relativos")) +
  geom_line(aes(x= year,y = exchange_rate, colour = "Tipo de cambio")) +
  scale_colour_manual("", 
                      breaks = c("Precios relativos", "Tipo de cambio"),
                      values = c("red", "blue")) +
  geom_smooth(aes(year,rpcs),color = "red",method = "lm") +
  geom_smooth(aes(year,exchange_rate),color = "blue",method = "lm") +
  xlab(" ") +
  scale_y_continuous(" ", limits = c(0.9,2)) + 
  labs(title = "PPA RELATIVA",
       subtitle = "Alemania 2006-2020",
       x= "Año",
       y = " ") +
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )

La PPA relativa aparece cuando expresamos la anterior expresión en términos de crecimiento, Obteniendo la siguiente expresión:

\[\begin{align} \underbrace{\color{#6BFFB8}{\frac{\bigtriangleup E_{\frac{\alpha}{\epsilon},t}}{E_{\frac{\alpha}{\epsilon},t}}}}_\text{Tasa de depreciación del tipo de cambio nominal} = \underbrace{\color{#6BFFB8}{\pi_{\alpha,t} - \pi_{\epsilon,t} }}_\text{Diferencial de Inflación} \end{align}\]

Si observamos la relación entre el precio relativo y los tipos de cambio Euro -dólar, podemos observar como a corto plazo (Verde) no se cumple la PPA relativa, pero a Largo plazo (azul) ambos tienden a disminuir, es decir, la evidencia empírica nos indica que la PPA relativa solo se cumple a largo plazo.

3. Desequilibrios globales

PIB

Gráfico

Código

pib <- read_csv("./datos/PIB.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                                    "2001" = `2001 [YR2001]`,
                                                                    "2002" = `2002 [YR2002]`,
                                                                    "2003" = `2003 [YR2003]`,
                                                                    "2004" = `2004 [YR2004]`,
                                                                    "2005" = `2005 [YR2005]`,
                                                                    "2006" = `2006 [YR2006]`,
                                                                    "2007" = `2007 [YR2007]`,
                                                                    "2008" = `2008 [YR2008]`,
                                                                    "2009" = `2009 [YR2009]`,
                                                                    "2010" = `2010 [YR2010]`,
                                                                    "2011" = `2011 [YR2011]`,
                                                                    "2012" = `2012 [YR2012]`,
                                                                    "2013" = `2013 [YR2013]`,
                                                                    "2014" = `2014 [YR2014]`,
                                                                    "2015" = `2015 [YR2015]`,
                                                                    "2016" = `2016 [YR2016]`,
                                                                    "2017" = `2017 [YR2017]`,
                                                                    "2018" = `2018 [YR2018]`,
                                                                    "2019" = `2019 [YR2019]`)  %>% pivot_longer(cols = 5:24, names_to = "year", values_to = "PIB") %>% 
  select(year,PIB) %>% mutate(PIB = PIB/1000000000)


ggplot(pib,aes(year,PIB,group = 1)) +
  geom_smooth(color = "green", se= FALSE) +
  geom_line(color= "navyblue", size = 2) +
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "PIB",
       subtitle = "Alemania 2000-2019",
       caption = "World Bank, en $ actuales",
       y = "mil. mill. $",
       x = "Año")

Como podemos observar, la economía alemana ha crecido notablemente en los últimos 20 años, el período 2000-2007 está caracterizado por un rápido y continuo aumento del PIB, periodo en el que la unión europea empieza una etapa con mucha más integración y en la que Alemania sale muy beneficiada, sobre todo en lo que se refiere al comercio en la UE. La introducción del Euro como moneda única y la eliminación de las barreras arancelarias en los últimos años hace que Alemania aproveche esta oportunidad y se fortalezca como potencia en fabricación de maquinaria y tecnología punta en Europa. A partir de 2007 con la llegada de la crisis y los problemas internos de las economías europeas, el crecimiento alemán del PIB se frena considerablemente. El rescate de Grecia y el “casi” rescate del resto de las economías más afectadas por la crisis como España y Portugal entre otras, hace que la economía alemana tenga que pisar el freno.

Ahorro

Gráfico

Código

savger <- read_csv("./datos/savingsger.csv")
ger_sav <- savger %>% drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                              "2001" = `2001 [YR2001]`,
                                              "2002" = `2002 [YR2002]`,
                                              "2003" = `2003 [YR2003]`,
                                              "2004" = `2004 [YR2004]`,
                                              "2005" = `2005 [YR2005]`,
                                              "2006" = `2006 [YR2006]`,
                                              "2007" = `2007 [YR2007]`,
                                              "2008" = `2008 [YR2008]`,
                                              "2009" = `2009 [YR2009]`,
                                              "2010" = `2010 [YR2010]`,
                                              "2011" = `2011 [YR2011]`,
                                              "2012" = `2012 [YR2012]`,
                                              "2013" = `2013 [YR2013]`,
                                              "2014" = `2014 [YR2014]`,
                                              "2015" = `2015 [YR2015]`,
                                              "2016" = `2016 [YR2016]`,
                                              "2017" = `2017 [YR2017]`,
                                              "2018" = `2018 [YR2018]`,
                                              "2019" = `2019 [YR2019]`)  %>% pivot_longer(cols = 5:24, names_to = "year", values_to = "savings")
ger_sav2<- ger_sav %>% select('Country Name', year, savings) %>%  mutate(year = as.numeric(year))


ggplot() +
  geom_line(aes(year,savings,group= 1),colour="blue",ger_sav2) +
  geom_smooth(aes(year,savings),colour = "green",ger_sav2) +
  labs(title="Ahorro",
       subtitle = "Alemania 2000-2019",
       x = "Año",
       y ="%PIB")+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )

Podemos Observar que el ahorro ha aumentado de manera considerable en los últimos 20 años. Si nos centramos en el periodo entre 2007 y 2011 (Crisis) el ahorro se vuelve muy volátil, establizandose en los últimos años con una tendencia ascendente.

Inversión

Gráfico

Código

invest <- read_csv("./datos/investment.csv") 
invest2 <- invest %>% filter(`Indicator Id` == 345, `Country Name` == "Germany") %>%  pivot_longer(cols = 6:50, names_to = "year", values_to = "investment") %>% 
  select("year","investment") %>%  filter(year <= 2020,year >1999) 
invest3 <- transform(invest2,year = as.numeric(year))      
ger_sav3 <-  transform(ger_sav2,year = as.numeric(year)) 

ggplot(invest3) +
  geom_bar(aes(year,investment,fill= investment),stat="identity") +
  labs(title = "Inversión %PIB",
       subtitle = "Alemania 2000-2019",
       x= "Año",
       y = "%PIB") +
  geom_smooth(aes(year,investment, group= 1), color= "Turquoise")+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )

En cuanto a la inversión podemos destacar su estabilidad respecto al PIB en los últimos 20 años, moviéndose en valores que oscilan entre el 19% y el 23% del PIB en los últimos 20 años. En el 2000 podemos observar el valor mas alto de los últimos años, el mínimo está en 2007 cuando con la llegada de la crisis, la mayoría de las economías europeas entraron en recesión y se frenó bruscamente la inversión, Alemania no se vio tan afectada en este sentido como por ejemplo Grecia cuya inversión paso de un 26% del PIB a un 13% aproximadamente.

Ahorro e Inversión

Gráfico

Correlación

Código

gersavinv <- inner_join(invest3,ger_sav3) %>% select(investment,savings, year)%>% rename("Ahorro" = savings,"Inversión" = investment) %>% pivot_longer(cols = 1:2,names_to = "tipo", values_to = "n" ) 

ggplot(gersavinv,aes(year,n, group = tipo,color = tipo)) +
  geom_line(size = 2) +
  geom_smooth(se = FALSE, method = "lm",color = "black") +
  labs(y = "%PIB",
       x = "Año",
       subtitle =  "Alemania 2000-2019")+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )

gersavinv<-inner_join(invest3,ger_sav3) %>% select(investment,savings, year)
m <-gersavinv%>% filter(year>2006) %>% select(investment,savings) 
n<-cor(m,method= "pearson")
corrplot(n,
                      method = "number"
)

Si observamos ambas variables en un mismo gráfico podemos observar cómo estas tienen un alto grado de correlación*, sobre todo a partir del 2007.

*Utilizando el método de Pearson y restringiendo las observaciones entre 2006 y 2019.

Balanza Comercial

Gráfico

Código



exportaciones <- read_csv("./datos/Exp_ger.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                             "2001" = `2001 [YR2001]`,
                                                             "2002" = `2002 [YR2002]`,
                                                             "2003" = `2003 [YR2003]`,
                                                             "2004" = `2004 [YR2004]`,
                                                             "2005" = `2005 [YR2005]`,
                                                             "2006" = `2006 [YR2006]`,
                                                             "2007" = `2007 [YR2007]`,
                                                             "2008" = `2008 [YR2008]`,
                                                             "2009" = `2009 [YR2009]`,
                                                             "2010" = `2010 [YR2010]`,
                                                             "2011" = `2011 [YR2011]`,
                                                             "2012" = `2012 [YR2012]`,
                                                             "2013" = `2013 [YR2013]`,
                                                             "2014" = `2014 [YR2014]`,
                                                             "2015" = `2015 [YR2015]`,
                                                             "2016" = `2016 [YR2016]`,
                                                             "2017" = `2017 [YR2017]`,
                                                             "2018" = `2018 [YR2018]`,
                                                             "2019" = `2019 [YR2019]`)  %>% pivot_longer(cols = 5:24, names_to = "año", values_to = "exportaciones") %>% 
  select(año,exportaciones)

importaciones <- read_csv("./datos/Imp_ger.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                                 "2001" = `2001 [YR2001]`,
                                                                 "2002" = `2002 [YR2002]`,
                                                                 "2003" = `2003 [YR2003]`,
                                                                 "2004" = `2004 [YR2004]`,
                                                                 "2005" = `2005 [YR2005]`,
                                                                 "2006" = `2006 [YR2006]`,
                                                                 "2007" = `2007 [YR2007]`,
                                                                 "2008" = `2008 [YR2008]`,
                                                                 "2009" = `2009 [YR2009]`,
                                                                 "2010" = `2010 [YR2010]`,
                                                                 "2011" = `2011 [YR2011]`,
                                                                 "2012" = `2012 [YR2012]`,
                                                                 "2013" = `2013 [YR2013]`,
                                                                 "2014" = `2014 [YR2014]`,
                                                                 "2015" = `2015 [YR2015]`,
                                                                 "2016" = `2016 [YR2016]`,
                                                                 "2017" = `2017 [YR2017]`,
                                                                 "2018" = `2018 [YR2018]`,
                                                                 "2019" = `2019 [YR2019]`)  %>% pivot_longer(cols = 5:24, names_to = "año", values_to = "importaciones") %>% 
  select(año,importaciones)


impexp<- inner_join(importaciones, exportaciones) %>% mutate(importaciones = importaciones * -1) %>%   mutate(dif = (exportaciones-(-1*importaciones))) %>% pivot_longer(cols= 2:4,names_to = "tipo",values_to = "n") 

ggplot(impexp) +
  geom_line(aes(año, n,color= tipo,group = tipo),size=2) +
  geom_hline(aes(yintercept=0),color ='#CECECE', size = 2) +
  
  
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "EXPORTACIONES, IMPORTACIONES",
       subtitle = "Alemania 2000-2019",
       caption = "World Bank, en $ actuales",
       x = "Año",
       y= " ") +
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )

Las exportaciones netas de Alemania han sido positivas en los últimos 20 años, es decir, Alemania exporta más de lo que importa. Produciéndose un crecimiento de la balanza comercial desde el 2000, e incluso durante la crisis, la balanza comercial alemana apenas ha tenido algún bajón. La crisis financiera de 2007 afecta a Alemania, aunque está se recupera con mucha facilidad. Podemos ver como en 2007, disminuyen las importaciones debido al impacto en la renta, las exportaciones también disminuyen, pero en menor medida lo que ocasiona un aumento en la balanza comercial. En general el comercio internacional alemán disminuye, pero al disminuir más las importaciones que las exportaciones se produce una mejora en la balanza comercial.

4. Beneficios de la globalización financiera

Transacciones Financieras

Gráfico

Código



for_assets0<- read_csv("./datos/for_ass5.csv")
for_assets<- for_assets0[-c(2:6), ]
gdp0<- read_csv("./datos/gdp.csv")
for_ass1 <- for_assets %>% pivot_longer(cols = 5:26,names_to = "year", values_to = "Net foreign assets (current LCU)")
for_ass2 <- for_ass1 %>% select ( `Country Name`,year,`Net foreign assets (current LCU)`) 
gdp<- gdp0[-c(2:6), ]
gdp1 <- gdp %>% pivot_longer(cols = 5:26,names_to = "year", values_to = "GDP (current LCU)")
gdp2 <- gdp1 %>% select (`Country Name`,year, `GDP (current LCU)`) 

finan_inc <- inner_join(gdp2,for_ass2,by = "year")
finan_inc2 <- finan_inc %>% select(-"Country Name.y")


finan_inc3 <- finan_inc2 %>% mutate(date = seq(from = as.Date("1999-01-01"), to = as.Date("2020-01-01"), by = 'year')) %>% select(-year)
finan_inc4 <- finan_inc3 %>% mutate(`Financial increase` =( `Net foreign assets (current LCU)`/`GDP (current LCU)` )* 100)


ggplot(finan_inc4, aes(date,`Financial increase` ,group=1)) +
  geom_line(color="red") +
  geom_ribbon(aes(ymin=0, ymax=pmax(finan_inc4$`Financial increase`,0)), fill="green", col="green", alpha=0.5)+
  
  labs(x = "Año",
       y = "%", 
      title = "Aumento en transacciones financieras",
      subtitle = "Alemania 2000-2019")+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )

Alemania se beneficia de la globalización igual que el resto del mundo, es decir con el paso de los años el numero de transacciones con el resto del mundo aumentan exponencialmente. Los grandes actores en el comercio exterior en la economía alemana son China y los países del Este de Europa. Alemania se beneficia enormemente de la exportación de maquinaria a estos países que se desarrollan con rapidez y que contribuyen al crecimiento económico de Alemania con las compras de maquinaria que realizan los sectores productivos de estos países

Exportaciones con UE

Gráfico

Código

molp <- read_csv("./datos/1993.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                                           "2001" = `2001 [YR2001]`,
                                                                           "2002" = `2002 [YR2002]`,
                                                                           "2003" = `2003 [YR2003]`,
                                                                           "2004" = `2004 [YR2004]`,
                                                                           "2005" = `2005 [YR2005]`,
                                                                           "2006" = `2006 [YR2006]`,
                                                                           "2007" = `2007 [YR2007]`,
                                                                           "2008" = `2008 [YR2008]`,
                                                                           "2009" = `2009 [YR2009]`,
                                                                           "2010" = `2010 [YR2010]`,
                                                                           "2011" = `2011 [YR2011]`,
                                                                           "2012" = `2012 [YR2012]`,
                                                                           "2013" = `2013 [YR2013]`,
                                                                           "2014" = `2014 [YR2014]`,
                                                                           "2015" = `2015 [YR2015]`,
                                                                           "2016" = `2016 [YR2016]`,
                                                                           "2017" = `2017 [YR2017]`,
                                                                           "2018" = `2018 [YR2018]`,
                                                                           "2019" = `2019 [YR2019]`,
                                                               "1999" = `1999 [YR1999]`,
                                                               "1998" = `1998 [YR1998]`,
                                                               "1997" = `1997 [YR1997]`,
                                                               "1996" = `1996 [YR1996]`,
                                                               "1995" = `1995 [YR1995]`,
                                                               "1994" = `1994 [YR1994]`,
                                                               "1993" = `1993 [YR1993]`,
                                                               "1992" = `1992 [YR1992]`,
                                                               "1991" = `1991 [YR1991]`,
                                                               "1990" = `1990 [YR1990]`,
                                                               "1989" = `1989 [YR1989]`,
                                                               "1988" = `1988 [YR1988]`,
                                                               "1987" = `1987 [YR1987]`,
                                                               "1986" = `1986 [YR1986]`,
                                                               "1985" = `1985 [YR1985]`,
                                                               "1984" = `1984 [YR1984]`,
                                                               "1983" = `1983 [YR1983]`
                                                               
                                                            )  %>% pivot_longer(cols = 5:41, names_to = "año", values_to = "exportaciones") %>% 
  select(año,exportaciones) %>%  mutate(exportaciones = exportaciones/100000000000)
  
annotation <- data.frame(
  x = c(11,17),
  y = c(5,7),
  label = c("Creación de la UE", "Moneda única")
)

o<-ggplot(molp,aes(año, exportaciones,group=1)) + 
  geom_smooth(se= FALSE, color = "green", method = "lm") +
  geom_line(color = "darkgreen",size = 1.6) +
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "EXPORTACIONES",
       subtitle = "Alemania 1983-2019",
       caption = "World Bank, en 100 mill. de $ actuales",
       x = "Año",
       y= " ") +
  geom_text(data=annotation, aes( x=x, y=y, label=label),
            color="#B1E5F2", 
            size=4 , fontface="bold" ) +
   annotate("segment", x = 17, xend = 25, y = 5, yend = 15, colour = "red", size=2, alpha=0.4, arrow=arrow())+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'dotted',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = '',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )
o 

En el caso concreto de Alemania, si hablamos de globalización financiera, no nos podemos olvidar de la creación de la Unión Europea y de la posterior creación de una moneda única, el Euro. Como podemos ver en el gráfico, tras la introducción del Euro a la economía europea, las exportaciones alemanas crecen de manera notoria, esto es debido a la eliminación de barreras arancelarias y la integración comercial que sufre Europa en el 2000, la introducción del euro facilita las transacciones intra europeas debido a que ya no hay que realizar un cambio de moneda y se eliminan costes de transacción. Alemania pasa a ser el referente europeo y se especializa en exportación de bienes de alto valor añadido.

5. Balanza de pagos y deuda soberana

Balanza de pagos

Gráfico

Código

ctacap <- read_csv("./datos/cta-capital.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                                        "2001" = `2001 [YR2001]`,
                                                                        "2002" = `2002 [YR2002]`,
                                                                        "2003" = `2003 [YR2003]`,
                                                                        "2004" = `2004 [YR2004]`,
                                                                        "2005" = `2005 [YR2005]`,
                                                                        "2006" = `2006 [YR2006]`,
                                                                        "2007" = `2007 [YR2007]`,
                                                                        "2008" = `2008 [YR2008]`,
                                                                        "2009" = `2009 [YR2009]`,
                                                                        "2010" = `2010 [YR2010]`,
                                                                        "2011" = `2011 [YR2011]`,
                                                                        "2012" = `2012 [YR2012]`,
                                                                        "2013" = `2013 [YR2013]`,
                                                                        "2014" = `2014 [YR2014]`,
                                                                        "2015" = `2015 [YR2015]`,
                                                                        "2016" = `2016 [YR2016]`,
                                                                        "2017" = `2017 [YR2017]`,
                                                                        "2018" = `2018 [YR2018]`,
                                                                        "2019" = `2019 [YR2019]`)  %>%
  pivot_longer(cols = 5:24, names_to = "year", values_to = "ctacap") %>% 
  select(year,ctacap)


bpcger <- read_csv("./datos/bpc.csv")

bpcger2 <- bpcger %>% drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                    "2001" = `2001 [YR2001]`,
                                    "2002" = `2002 [YR2002]`,
                                    "2003" = `2003 [YR2003]`,
                                    "2004" = `2004 [YR2004]`,
                                    "2005" = `2005 [YR2005]`,
                                    "2006" = `2006 [YR2006]`,
                                    "2007" = `2007 [YR2007]`,
                                    "2008" = `2008 [YR2008]`,
                                    "2009" = `2009 [YR2009]`,
                                    "2010" = `2010 [YR2010]`,
                                    "2011" = `2011 [YR2011]`,
                                    "2012" = `2012 [YR2012]`,
                                    "2013" = `2013 [YR2013]`,
                                    "2014" = `2014 [YR2014]`,
                                    "2015" = `2015 [YR2015]`,
                                    "2016" = `2016 [YR2016]`,
                                    "2017" = `2017 [YR2017]`,
                                    "2018" = `2018 [YR2018]`,
                                    "2019" = `2019 [YR2019]`)  %>% pivot_longer(cols = 5:24, names_to = "year", values_to = "bpc") %>% 
  select(year,bpc)
ctafin <- read_csv("./datos/cta-financiera.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                                        "2001" = `2001 [YR2001]`,
                                                                        "2002" = `2002 [YR2002]`,
                                                                        "2003" = `2003 [YR2003]`,
                                                                        "2004" = `2004 [YR2004]`,
                                                                        "2005" = `2005 [YR2005]`,
                                                                        "2006" = `2006 [YR2006]`,
                                                                        "2007" = `2007 [YR2007]`,
                                                                        "2008" = `2008 [YR2008]`,
                                                                        "2009" = `2009 [YR2009]`,
                                                                        "2010" = `2010 [YR2010]`,
                                                                        "2011" = `2011 [YR2011]`,
                                                                        "2012" = `2012 [YR2012]`,
                                                                        "2013" = `2013 [YR2013]`,
                                                                        "2014" = `2014 [YR2014]`,
                                                                        "2015" = `2015 [YR2015]`,
                                                                        "2016" = `2016 [YR2016]`,
                                                                        "2017" = `2017 [YR2017]`,
                                                                        "2018" = `2018 [YR2018]`,
                                                                        "2019" = `2019 [YR2019]`)  %>% pivot_longer(cols = 5:24, names_to = "year", values_to = "ctafin") %>% 
  select(year,ctafin)

ctares <- read_csv("./datos/cta-res.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                                           "2001" = `2001 [YR2001]`,
                                                                           "2002" = `2002 [YR2002]`,
                                                                           "2003" = `2003 [YR2003]`,
                                                                           "2004" = `2004 [YR2004]`,
                                                                           "2005" = `2005 [YR2005]`,
                                                                           "2006" = `2006 [YR2006]`,
                                                                           "2007" = `2007 [YR2007]`,
                                                                           "2008" = `2008 [YR2008]`,
                                                                           "2009" = `2009 [YR2009]`,
                                                                           "2010" = `2010 [YR2010]`,
                                                                           "2011" = `2011 [YR2011]`,
                                                                           "2012" = `2012 [YR2012]`,
                                                                           "2013" = `2013 [YR2013]`,
                                                                           "2014" = `2014 [YR2014]`,
                                                                           "2015" = `2015 [YR2015]`,
                                                                           "2016" = `2016 [YR2016]`,
                                                                           "2017" = `2017 [YR2017]`,
                                                                           "2018" = `2018 [YR2018]`,
                                                                           "2019" = `2019 [YR2019]`)  %>% pivot_longer(cols = 5:24, names_to = "year", values_to = "ctares") %>% 
  select(year,ctares)





ctaerr <- read_csv("./datos/cta-errores.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                                           "2001" = `2001 [YR2001]`,
                                                                           "2002" = `2002 [YR2002]`,
                                                                           "2003" = `2003 [YR2003]`,
                                                                           "2004" = `2004 [YR2004]`,
                                                                           "2005" = `2005 [YR2005]`,
                                                                           "2006" = `2006 [YR2006]`,
                                                                           "2007" = `2007 [YR2007]`,
                                                                           "2008" = `2008 [YR2008]`,
                                                                           "2009" = `2009 [YR2009]`,
                                                                           "2010" = `2010 [YR2010]`,
                                                                           "2011" = `2011 [YR2011]`,
                                                                           "2012" = `2012 [YR2012]`,
                                                                           "2013" = `2013 [YR2013]`,
                                                                           "2014" = `2014 [YR2014]`,
                                                                           "2015" = `2015 [YR2015]`,
                                                                           "2016" = `2016 [YR2016]`,
                                                                           "2017" = `2017 [YR2017]`,
                                                                           "2018" = `2018 [YR2018]`,
                                                                           "2019" = `2019 [YR2019]`)  %>% pivot_longer(cols = 5:24, names_to = "year", values_to = "ctaerr") %>% 
  select(year,ctaerr)



ctapay <- inner_join(bpcger2,ctacap)

ctapay2 <- inner_join(ctapay,ctaerr)

ctapay3 <- inner_join(ctapay2,ctafin)

ctapay4 <- inner_join(ctapay3,ctares)


ctapay5 <- ctapay4 %>%  mutate(bpc = (bpc*(-1))/10000000000 ) %>% mutate(ctafin = (ctafin/10000000000 ))%>% mutate(ctacap = (ctacap/1000000000 ))%>%  select(year,bpc,ctacap,ctafin) %>% rename("Balanza por Cuenta Corriente" = "bpc", 
                                                             "Cuenta Financiera" = "ctafin",
                                                             "Cuenta de Capital" = "ctacap") %>%  
  pivot_longer(cols = 2:4, names_to = "cta")  
                                                                                                                                            



g <- ggplot(ctapay5, aes(x=year, y=value, fill=cta,group=cta)) + 
  geom_bar(position="stack", stat="identity") +
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  ggtitle("Balanza de Pagos") +
  xlab("Año")   + theme(axis.title.y = element_blank()) +
  theme(legend.title = element_blank())+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )
  

g

La balanza de pagos está compuesta por la suma de:

  1. La balanza por cuenta corriente

  2. La cuenta de capital

  3. La cuenta financiera.

Balanza por cuenta corriente

Gráfico 1

Gráfico 2

Código 1



bcc<- read_csv("./datos/bcc.csv")
bcc1<- bcc %>% select(LOCATION, TIME,Value) %>% pivot_wider(names_from = LOCATION, values_from = Value)
bcc2 <- bcc1 %>% select(TIME, USA, CHN, ESP, JPN,GBR,ARG,DEU)  %>% pivot_longer(cols = 2:8, names_to = "country", values_to = "bcc")%>% drop_na()

bcc3 <- bcc1 %>% select(TIME,DEU) %>% drop_na() %>% rename(year = TIME)






p <-ggplot(bcc2, aes(TIME, bcc,group = country,color = country )) +
  geom_line(aes(color = country)) +
  geom_point()+
  gghighlight(max(bcc) > 7)+
  
  #theme(axis.title.y=element_blank(),
        #axis.text.y=element_blank(),
        #axis.ticks.y=element_blank())+
   
  labs(x = "Año", 
       title = "Balanza por cuenta corriente",
       y="%PIB"
      ,subtitle = "Alemania 2000-2019") +
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )
  #facet_grid(rows = vars(country),scales = "free") 
p

Código 2





bpcger <- read_csv("./datos/bpc.csv")

bpcger2 <- bpcger %>% drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                    "2001" = `2001 [YR2001]`,
                                    "2002" = `2002 [YR2002]`,
                                    "2003" = `2003 [YR2003]`,
                                    "2004" = `2004 [YR2004]`,
                                    "2005" = `2005 [YR2005]`,
                                    "2006" = `2006 [YR2006]`,
                                    "2007" = `2007 [YR2007]`,
                                    "2008" = `2008 [YR2008]`,
                                    "2009" = `2009 [YR2009]`,
                                    "2010" = `2010 [YR2010]`,
                                    "2011" = `2011 [YR2011]`,
                                    "2012" = `2012 [YR2012]`,
                                    "2013" = `2013 [YR2013]`,
                                    "2014" = `2014 [YR2014]`,
                                    "2015" = `2015 [YR2015]`,
                                    "2016" = `2016 [YR2016]`,
                                    "2017" = `2017 [YR2017]`,
                                    "2018" = `2018 [YR2018]`,
                                    "2019" = `2019 [YR2019]`)  %>% pivot_longer(cols = 5:24, names_to = "year", values_to = "bpc") %>% 
  select(year,bpc)


ggplot(bpcger2) +
  geom_line(aes(year, bpc,group = 1),color= "turquoise") +
  geom_smooth(aes(year, bpc,group = 1),color= "turquoise")+
  #geom_smooth(aes(year, ctacap,group = 1),color= "blue")+
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "Balanza por cuenta corriente",
       subtitle = "Alemania 2000-2019",
       y = "$",
       x = "Año")+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                   colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )
  

Como podemos ver en el gráfico 1, la balanza por cuenta corriente de Alemania ha sido de las más altas, comparado con países como China, EE. UU., Japón, Argentina o Reino Unido. Ha aumentado notoriamente tras la crisis de 2007. Tiene una tendencia ascendente a largo plazo, a corto plazo se puede observar el efecto de las recesiones, aunque al igual que el PIB, se recupera rápido y vuelve a valores precrisis.

La Balanza por cuenta corriente es uno de los indicadores macroeconómicos que muestra como interactúa un país con el resto del mundo. Está compuesta por la balanza comercial, servicios, transferencias y rentas. Si la balanza por cuenta corriente es positiva, significa que Alemania como país financia al resto del mundo con su capital (El caso contrario sería España). Como podemos ver, el saldo de la balanza por cuenta corriente de Alemania no ha parado de subir desde el año 2000, esto se debe en gran medida al gran papel de las exportaciones en la economía alemana y como está ha sabido aprovechar el comercio europeo.

Cta. de capital

Gráfico

Código


ctacap <- read_csv("./datos/cta-capital.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                                        "2001" = `2001 [YR2001]`,
                                                                        "2002" = `2002 [YR2002]`,
                                                                        "2003" = `2003 [YR2003]`,
                                                                        "2004" = `2004 [YR2004]`,
                                                                        "2005" = `2005 [YR2005]`,
                                                                        "2006" = `2006 [YR2006]`,
                                                                        "2007" = `2007 [YR2007]`,
                                                                        "2008" = `2008 [YR2008]`,
                                                                        "2009" = `2009 [YR2009]`,
                                                                        "2010" = `2010 [YR2010]`,
                                                                        "2011" = `2011 [YR2011]`,
                                                                        "2012" = `2012 [YR2012]`,
                                                                        "2013" = `2013 [YR2013]`,
                                                                        "2014" = `2014 [YR2014]`,
                                                                        "2015" = `2015 [YR2015]`,
                                                                        "2016" = `2016 [YR2016]`,
                                                                        "2017" = `2017 [YR2017]`,
                                                                        "2018" = `2018 [YR2018]`,
                                                                        "2019" = `2019 [YR2019]`)  %>%
  pivot_longer(cols = 5:24, names_to = "year", values_to = "ctacap") %>% 
  select(year,ctacap)




ggplot(ctacap) +
  geom_line(aes(year, ctacap,group = 1),color= "blue") +
  #geom_smooth(aes(year, ctacap,group = 1),color= "blue")+
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "Cuenta de Capital",
       subtitle = "Alemania 2000-2019",
       y = "",
       x = "Año")+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )

La cuenta de capital es igual a: Cuenta de capital = Cambio en la propiedad extranjera de activos domésticos - Cambio en la propiedad doméstica de activos extranjeros Podemos ver como no está estable en ningún periodo y tampoco tiene una tendencia definida.

La suma de estas tres cuentas es igual a 0, como podemos ver en el gráfico ambos lados están equilibrados.

Cta. financiera

Gráfico

Código

ctafin <- read_csv("./datos/cta-financiera.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                                        "2001" = `2001 [YR2001]`,
                                                                        "2002" = `2002 [YR2002]`,
                                                                        "2003" = `2003 [YR2003]`,
                                                                        "2004" = `2004 [YR2004]`,
                                                                        "2005" = `2005 [YR2005]`,
                                                                        "2006" = `2006 [YR2006]`,
                                                                        "2007" = `2007 [YR2007]`,
                                                                        "2008" = `2008 [YR2008]`,
                                                                        "2009" = `2009 [YR2009]`,
                                                                        "2010" = `2010 [YR2010]`,
                                                                        "2011" = `2011 [YR2011]`,
                                                                        "2012" = `2012 [YR2012]`,
                                                                        "2013" = `2013 [YR2013]`,
                                                                        "2014" = `2014 [YR2014]`,
                                                                        "2015" = `2015 [YR2015]`,
                                                                        "2016" = `2016 [YR2016]`,
                                                                        "2017" = `2017 [YR2017]`,
                                                                        "2018" = `2018 [YR2018]`,
                                                                        "2019" = `2019 [YR2019]`)  %>% pivot_longer(cols = 5:24, names_to = "year", values_to = "ctafin") %>% 
  select(year,ctafin)

ggplot(ctafin) +
  geom_line(aes(year, ctafin,group = 1),color= "purple",size = 2) +
  #geom_smooth(aes(year, ctacap,group = 1),color= "blue")+
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "Cuenta Financiera",
       subtitle = "Alemania 2000-2019",
       y = "",
       x = "Año")+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )

La cuenta financiera, como se expone en la sexta edición del Manual de Balanza de Pagos publicado por el Fondo Monetario Internacional “en la cuenta financiera se registran las transacciones relativas a los activos y pasivos financieros que tienen lugar entre residentes y no residentes” por lo que actúa prácticamente igual que la Inversión analizada anteriormente, en 2007 con la llegada de la crisis cae, y a partir de 2010 en apenas 2 años vuelve a recuperar valores precrisis.

Deuda soberana

Gráfico

Código


debtger <- read_csv("./datos/sovdebt.csv") %>% select (TIME,Value)



gd<- ggplot(debtger) +
  geom_line(aes(TIME, Value,group = 1),color= "blue") +
  geom_smooth(aes(TIME, Value,group = 1), color = "white") +
  labs(title = "Deuda Soberana",  
       subtitle  =  "Alemania 2000-2019",
       caption  = "fuente: World Bank Data",
       x = "Año",
       y = "%PIB")+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )
gd

La deuda alemana, al contrario que la de la mayoría de los países europeos, ha estado bajo control en los últimos 20 años, podemos ver un período de expansión tras la crisis de 2007, en la que se busca mediante un incremento del gasto público reactivar la economía. Tras este periodo expansivo, vemos como a partir de 2013, empieza un periodo de política fiscal de austeridad y Alemania pasa a tener superávit presupuestario por 6 años consecutivos hasta inicios del 2020 con la llegada de la pandemia.


6. Política Fiscal y Monetaria

Gráfico

Código


infeu <- read_csv("./datos/inflationeu.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                               "2001" = `2001 [YR2001]`,
                                                               "2002" = `2002 [YR2002]`,
                                                               "2003" = `2003 [YR2003]`,
                                                               "2004" = `2004 [YR2004]`,
                                                               "2005" = `2005 [YR2005]`,
                                                               "2006" = `2006 [YR2006]`,
                                                               "2007" = `2007 [YR2007]`,
                                                               "2008" = `2008 [YR2008]`,
                                                               "2009" = `2009 [YR2009]`,
                                                               "2010" = `2010 [YR2010]`,
                                                               "2011" = `2011 [YR2011]`,
                                                               "2012" = `2012 [YR2012]`,
                                                               "2013" = `2013 [YR2013]`,
                                                               "2014" = `2014 [YR2014]`,
                                                               "2015" = `2015 [YR2015]`,
                                                               "2016" = `2016 [YR2016]`,
                                                               "2017" = `2017 [YR2017]`,
                                                               "2018" = `2018 [YR2018]`,
                                                               "2019" = `2019 [YR2019]`,
                                                               "1999" = `1999 [YR1999]`,
                                                               "1998" = `1998 [YR1998]`,
                                                               "1997" = `1997 [YR1997]`,
                                                               "1996" = `1996 [YR1996]`,
                                                               "1995" = `1995 [YR1995]`,
                                                               "1994" = `1994 [YR1994]`,
                                                               "1993" = `1993 [YR1993]`,
                                                               "1992" = `1992 [YR1992]`,
                                                               "1991" = `1991 [YR1991]`,
                                                               "1990" = `1990 [YR1990]`,
                                                               "1989" = `1989 [YR1989]`,
                                                               "1988" = `1988 [YR1988]`,
                                                               "1987" = `1987 [YR1987]`,
                                                               "1986" = `1986 [YR1986]`,
                                                               "1985" = `1985 [YR1985]`,
                                                               "1984" = `1984 [YR1984]`,
                                                               "1983" = `1983 [YR1983]`
                                                               
)  %>% pivot_longer(cols = 5:41, names_to = "año", values_to = "inflacion") %>% 
  select(año,inflacion) 

annotation2 <- data.frame(
  x = c(8),
  y = c(2.1),
  label = c("Inflación Objetivo")
)

ggplot(infeu,aes(año,inflacion,group=1)) +
  geom_line(color = "black", size = 2) +
  geom_smooth(se = FALSE, color= "green", method= "lm") +
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "Inflación",
       subtitle = "Union Europea 1983-2019",
       caption = "World Bank",
       x = "Año",
       y= "%PIB") +
  geom_hline(aes(yintercept=2), color = "green") +
  geom_text(data=annotation2, aes( x=x, y=y, label=label),
            color="Green", 
            size=4 , fontface="bold" )+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'dotted',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'dotted',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  ) 

La política monetaria de la mayoría de los países europeos está centralizada, es decir, el BCE tiene el control total de la política monetaria del Euro. La UE tiene una serie de normas, una de ellas es una inflación objetivo del 2%.

Como podemos ver en el gráfico, la inflación de la UE desde su creación se ha conseguido disminuir notablemente, aunque tras la crisis, debido a los bajos tipos de interés y la depresión de la economía, hemos podido observar periodos de deflación que resultan dañinos para la economía en su conjunto, es por ello que el BCE ha buscado una política monetaria expansiva mediante la compra de deuda de los países mas afectados por la crisis. Además, el BCE ha realizado numerosos préstamos en los últimos años para financiar el consumo, aunque ha resultado ciertamente efectivo, no están del todo claro sus efectos a largo plazo.

Como hemos comentado mas arriba, Alemania tras entrar en la crisis estimuló su economía con una política fiscal expansiva que buscaba reactivar su economía. Tras alcanzar niveles de PIB y crecimiento precrisis, hizo un cambio brusco en su política fiscal y comenzó a tener un Superávit en sus presupuestos, reduciendo así su deuda Pública. Alemania ha conseguido un superávit presupuestario en los últimos 6 años, no ha sido hasta la llegada de la pandemia cuando ha pasado a tener déficit.


7. Noticias de Actualidad

Tasa desempleo

Gráfico

Gráfico 2

Código



paro <- read_csv("./datos/paro.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                                       "2001" = `2001 [YR2001]`,
                                                                       "2002" = `2002 [YR2002]`,
                                                                       "2003" = `2003 [YR2003]`,
                                                                       "2004" = `2004 [YR2004]`,
                                                                       "2005" = `2005 [YR2005]`,
                                                                       "2006" = `2006 [YR2006]`,
                                                                       "2007" = `2007 [YR2007]`,
                                                                       "2008" = `2008 [YR2008]`,
                                                                       "2009" = `2009 [YR2009]`,
                                                                       "2010" = `2010 [YR2010]`,
                                                                       "2011" = `2011 [YR2011]`,
                                                                       "2012" = `2012 [YR2012]`,
                                                                       "2013" = `2013 [YR2013]`,
                                                                       "2014" = `2014 [YR2014]`,
                                                                       "2015" = `2015 [YR2015]`,
                                                                       "2016" = `2016 [YR2016]`,
                                                                       "2017" = `2017 [YR2017]`,
                                                                       "2018" = `2018 [YR2018]`,
                                                                       "2019" = `2019 [YR2019]`,
                                                                       "1999" = `1999 [YR1999]`,
                                                                       "1998" = `1998 [YR1998]`,
                                                                       "1997" = `1997 [YR1997]`,
                                                                       "1996" = `1996 [YR1996]`,
                                                                       "1995" = `1995 [YR1995]`,
                                                                       "1994" = `1994 [YR1994]`,
                                                                       "1993" = `1993 [YR1993]`,
                                                                       "1992" = `1992 [YR1992]`,
                                                                       "1991" = `1991 [YR1991]`,
                                                                       "1990" = `1990 [YR1990]`,
                                                               "2020" = `2020 [YR2020]`
                                                                       
) %>% select(!("1990")) %>% pivot_longer(cols = 5:34, names_to = "año", values_to = "paro") %>% 
  select(año,paro)
  
annotation3 <- data.frame(
  x = c(15),
  y = c(2.1),
  label = c("A partir de 2005 Alemania solo crea empleo")
)

ggplot(paro,aes(año,paro,group=1)) +
  geom_line(color = "red", size = 2) +
  geom_smooth(se = FALSE, color= "pink", method= "lm") +
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "Tasa de desempleo",
       subtitle = "Alemania 1991-2020",
       caption = "World Bank",
       x = "Año",
       y= "%") +
  geom_vline(aes(xintercept=15), color = "grey") +
  geom_text(data=annotation3, aes( x=x, y=y, label=label),
            color="Black", 
            size=3.3 , fontface="bold" )  +
  annotate("segment", x = 15, xend = 30, y = 11.3, yend = 3, colour = "Green", size=1.5, alpha=0.8, arrow=arrow())+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )

Código 2



paroesp <- read_csv("./datos/paroesp.csv") %>%  drop_na() %>% rename("2000" = `2000 [YR2000]`,
                                                               "2001" = `2001 [YR2001]`,
                                                               "2002" = `2002 [YR2002]`,
                                                               "2003" = `2003 [YR2003]`,
                                                               "2004" = `2004 [YR2004]`,
                                                               "2005" = `2005 [YR2005]`,
                                                               "2006" = `2006 [YR2006]`,
                                                               "2007" = `2007 [YR2007]`,
                                                               "2008" = `2008 [YR2008]`,
                                                               "2009" = `2009 [YR2009]`,
                                                               "2010" = `2010 [YR2010]`,
                                                               "2011" = `2011 [YR2011]`,
                                                               "2012" = `2012 [YR2012]`,
                                                               "2013" = `2013 [YR2013]`,
                                                               "2014" = `2014 [YR2014]`,
                                                               "2015" = `2015 [YR2015]`,
                                                               "2016" = `2016 [YR2016]`,
                                                               "2017" = `2017 [YR2017]`,
                                                               "2018" = `2018 [YR2018]`,
                                                               "2019" = `2019 [YR2019]`,
                                                               "1999" = `1999 [YR1999]`,
                                                               "1998" = `1998 [YR1998]`,
                                                               "1997" = `1997 [YR1997]`,
                                                               "1996" = `1996 [YR1996]`,
                                                               "1995" = `1995 [YR1995]`,
                                                               "1994" = `1994 [YR1994]`,
                                                               "1993" = `1993 [YR1993]`,
                                                               "1992" = `1992 [YR1992]`,
                                                               "1991" = `1991 [YR1991]`,
                                                            
                                                               "2020" = `2020 [YR2020]`
                                                               
)  %>% pivot_longer(cols = 5:34, names_to = "año", values_to = "paro") %>% 
  select(año,paro)

annotation4 <- data.frame(
  x = c(19,23),
  y = c(2.1, 28),
  label = c("Crisis 2007","26%")
)

ggplot(paroesp,aes(año,paro,group=1)) +
  geom_line(color = "black", size = 2) +
  geom_smooth(se = FALSE, color= "Blue") +
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  labs(title = "Tasa de desempleo",
       subtitle = "España 1991-2019",
       caption = "World Bank",
       x = "Año",
       y= "%") +
  geom_vline(aes(xintercept=17), color = "yellow") +
  geom_text(data=annotation4, aes( x=x, y=y, label=label),
            color="RED", 
            size=3.3 , fontface="bold" )  +
  annotate("segment", x = 17, xend = 23, y = 9, yend = 26, colour = "RED", size=1.5, alpha=0.5, arrow=arrow()) +
  
  annotate("segment", x = 23, xend = 30, y = 26, yend = 13, colour = "green", size=1.5, alpha=0.5, arrow=arrow())+
  theme(
     panel.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  plot.background = element_rect(fill ='#272635' ,
                                colour = '#272635',
                                size = 0.5, linetype = "solid"),
  panel.grid.major = element_line(size = 0.5, linetype = 'solid',
                                colour = '#CECECE'), 
  panel.grid.minor = element_line(size = 0.25, linetype = 'solid',
                                colour = '#CECECE'),
  axis.text.x =element_text(colour='#CECECE'),
  axis.text.y =element_text(colour='#CECECE'),
  plot.title = element_text(colour = '#CECECE'),
  axis.title.x = element_text(colour = "#CECECE"),
        axis.title.y = element_text(colour = "#CECECE"),
       # panel.border = element_rect(fill='#272635')
  )

El mercado laboral europeo ha demostrado ser de los más fuertes del continente europeo, con una continua creación de empleo y en la que apenas se pudo ver algún impacto durante la crisis de 2007. No ha sido hasta la llegada de la Pandemia en febrero de 2020, es en este momento cuando el mercado de trabajo alemán pisa el freno y comienza a aumentar la Tasa de desempleo por primera vez en más de 10 años. Cabe destacar la migración durante estos últimos años de gran parte de los trabajadores al sector servicios, cayendo el peso del empleo en los sectores productivos, esto se produce en gran medida debido a la importancia del factor tecnológico en la producción alemana. Aunque pueda parecer que la tecnología está destruyendo empleos, en realidad lo que está haciendo es desplazarlos a otros sectores productivos donde hace falta más mano de obra. Otro de los factores que ha influido durante los últimos años en la creación de empleo ha sido la gran oleada de trabajadores inmigrantes que han llegado al país con la crisis, esto ha llevado a la baja a los salarios creando mas empleo y fortaleciendo el mercado de trabajo, aunque una bajada de salarios pueda resultar negativa para los trabajadores, esto se compensa con el trabajo creado y con las mayores ganancias de ciertos sectores debido a la bajada de salarios, sobre todo en lo que respecta a mano de obra no cualificada.


LS0tDQp0aXRsZTogIlRyYWJham8gTWFjcm9lY29ub23DrWEgSW50ZXJuYWNpb25hbC4gUGHDrXMgOiBBbGVtYW5pYSINCnN1YnRpdGxlOiAiUm9kcmlnbyBMYXJhIFJvZHJpZ3Vleihyb2xhcm9AYWx1bW5pLnV2LmVzKSIgIy0gcG9uZ28gdMO6IG5vbWJyZSBhaMOtIHBhcmEgcSBhcGFyZXpjYSBtw6FzIGdyYW5kZSBxIGVsIGRlIGxhIFVWDQphdXRob3I6ICJVbml2ZXJzaXRhdCBkZSBWYWzDqG5jaWEiDQpkYXRlOiAiRGljaWVtYnJlIGRlIDIwMjAgKGFjdHVhbGl6YWRvIGVsIGByIGZvcm1hdChTeXMudGltZSgpLCAnJWQtJW0tJVknKWApIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNzczogIi4vYXNzZXRzL215X2Nzc19maWxlLmNzcyINCiAgICB0aGVtZTogcGFwZXINCiAgICBoaWdobGlnaHQ6IHRleHRtYXRlIA0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMyANCiAgICB0b2NfZmxvYXQ6IA0KICAgICAgY29sbGFwc2VkOiB0cnVlDQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlDQogICAgZGZfcHJpbnQ6IGthYmxlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KZWRpdG9yX29wdGlvbnM6IA0KICBjaHVua19vdXRwdXRfdHlwZTogY29uc29sZQ0KLS0tDQoNCmBgYHtyIHBhY2thZ2VzLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoa2xpcHB5KSAgIy0gcmVtb3Rlczo6aW5zdGFsbF9naXRodWIoInJsZXN1ci9rbGlwcHkiKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShnZ2hpZ2hsaWdodCkNCmxpYnJhcnkoY29ycnBsb3QpDQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShocmJydGhlbWVzKQ0KYGBgDQoNCmBgYHtyIGNodW5rLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBldmFsID0gVFJVRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UscGFnZWQucHJpbnQ9VFJVRSwgDQogICAgICAgICAgICAgICAgICAgICAgI2V2YWwgPSAiaG9sZCIsDQogICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBGQUxTRSwgY2FjaGUucGF0aCA9ICIvY2FjaGVzLyIsIGNvbW1lbnQgPSAiIz4iLA0KICAgICAgICAgICAgICAgICAgICAgICNmaWcud2lkdGggPSA3LCAjZmlnLmhlaWdodD0gNywgICANCiAgICAgICAgICAgICAgICAgICAgICAjb3V0LndpZHRoID0gNywgb3V0LmhlaWdodCA9IDcsDQogICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2UgPSBUUlVFLCAgZmlnLnNob3cgPSAiaG9sZCIsDQogICAgICAgICAgICAgICAgICAgICAgZmlnLmFzcCA9IDcvOSwgb3V0LndpZHRoID0gIjYwJSIsIGZpZy5hbGlnbiA9ICJjZW50ZXIiKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGRldiA9ICJwbmciLCBkZXYuYXJncyA9IGxpc3QodHlwZSA9ICJjYWlyby1wbmciKSkNCmBgYA0KDQpgYGB7ciBvcHRpb25zLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQpvcHRpb25zKHNjaXBlbiA9IDk5OSkgIy0gcGFyYSBxdWl0YXIgbGEgbm90YWNpw7NuIGNpZW50w61maWNhDQpvcHRpb25zKCJ5YW1sLmV2YWwuZXhwciIgPSBUUlVFKSANCmBgYA0KDQoNCmBgYHtyIGtsaXBweSwgZWNobyA9IEZBTFNFfQ0Ka2xpcHB5OjprbGlwcHkocG9zaXRpb24gPSBjKCJ0b3AiLCAicmlnaHQiKSkgIy0gcmVtb3Rlczo6aW5zdGFsbF9naXRodWIoInJsZXN1ci9rbGlwcHkiKQ0KYGBgDQoNCjxociBjbGFzcz0ibGluZWEtYmxhY2siPg0KPGRpdiBjbGFzcyA9ICJjYWphLTEiPg0KVHJhYmFqbyBlbGFib3JhZG8gcGFyYSBsYSBhc2lnbmF0dXJhICJQcm9ncmFtYWNpw7NuIHkgbWFuZWpvIGRlIGRhdG9zIGVuIGxhIGVyYSBkZWwgQmlnIERhdGEiIGRlIGxhIFVuaXZlcnNpdGF0IGRlIFZhbMOobmNpYSBkdXJhbnRlIGVsIGN1cnNvIDIwMjAtMjAyMS4gRWwgcmVwbyBkZWwgdHJhYmFqbyBlc3TDoSBbYXF1w61dKGh0dHBzOi8vZ2l0aHViLmNvbS9yb2RyaTQ1bC90cmFiYWpvX0JpZ0RhdGEpe3RhcmdldD0iX2JsYW5rIn0uIExhIHDDoWdpbmEgd2ViIGRlIGxhIGFzaWduYXR1cmEgeSBsb3MgdHJhYmFqb3MgZGUgbWlzIGNvbXBhw7Flcm9zIHB1ZWRlbiB2ZXJzZSBbYXF1w61dKGh0dHBzOi8vcGVyZXpwNDQuZ2l0aHViLmlvL2ludHJvLWRzLTIwLTIxLXdlYi8wNy10cmFiYWpvcy5odG1sKXt0YXJnZXQ9Il9ibGFuayJ9Lg0KDQo8IS0tIEVsIHDDoXJyYWZvIGRlIGFycmliYSBoYXMgZGUgZGVqYXJsbyBjYXNpIGlndWFsLCANCiAgICAgICAgc29sbyBIQVMgZGUgU1VTVElUVUlSIGxhcyAyIHZlY2VzIHF1ZSBhcGFyZWNlICJwZXJlenA0NCIgcG9yIHR1IHVzdWFyaW8gZGUgR2l0aHViLS0+DQo8L2Rpdj4NCg0KDQoNCg0KIyAgSW50cm9kdWNjacOzbiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KPGRpdiBjbGFzcyA9ICJjYWphLTEiPg0KQSBjb250aW51YWNpw7NuIGV4cGxpY2FyZW1vcyBsb3MgaW5kaWNhZG9yZXMgZWNvbsOzbWljb3MgbcOhcyByZWxldmFudGVzIGVuIGxhIG1hY3JvZWPDs25vbWlhLCBwYXJhIGVsbG8gdXRpbGl6YXJlbW9zIGRhdG9zIGV4dHJhw61kb3MgcHJpbmNpcGFsbWVudGUgZGUgbGEgYmFzZSBkZSBkYXRvcyBkZWwgYmFuY28gbXVuZGlhbC4gVG9kb3MgbG9zIGdyw6FmaWNvcyBzb24gZGUgZWxhYm9yYWNpw7NuIHByb3BpYSAsIGVuIHN1IG1heW9yw61hIHV0aWxpemFuZG8gbGEgZnVuY2nDs24gZ2dwbG90KCkgZGVsIHBhcXVldGUgdGlkeXZlcnNlLg0KDQplbiBlc3RlIHRyYWJham8gY29udGVzdGFyZW1vcyBhIGxhcyBzaWd1aWVudGVzIGN1ZXN0aW9uZXM6DQoNCjEuIEV2aWRlbmNpYSBlbXDDrXJpY2EgZGUgbGEgcGFyaWRhZCBjdWJpZXJ0YSB5IGRlc2N1YmllcnRhIGRlDQppbnRlcmVzZXMuIMK/RW4gcXXDqSBncmFkbyBzZSBjdW1wbGUgZXN0YSB0ZW9yw61hPw0KMi4gRXZpZGVuY2lhIGVtcMOtcmljYSBkZSBsYSBQUEEgYWJzb2x1dGEgeSByZWxhdGl2YS4gwr9FbiBxdcOpIGdyYWRvDQpzZSBjdW1wbGUgZXN0YSB0ZW9yw61hPw0KMy4gRGVzZXF1aWxpYnJpb3MgZ2xvYmFsZXM6IEFob3JybywgSW52ZXJzacOzbiwgQmFsYW56YSBwb3IgY3VlbnRhDQpjb3JyaWVudGUuIEV2b2x1Y2nDs24gaGlzdMOzcmljYSBwYXJhIGVsIHBhw61zIHF1ZSBjb25zaWRlcsOpaXMNCjQuIEJlbmVmaWNpb3MgZGUgbGEgZ2xvYmFsaXphY2nDs24gZmluYW5jaWVyYSBlbiBlbCBwYcOtcyBxdWUNCmNvbnNpZGVyw6lpcy4NCjUuIEJhbGFuemEgZGUgUGFnb3MgeSBkZXVkYSBleHRlcm5hIChkZXVkYSBzb2JlcmFuYSkuIEV2b2x1Y2nDs24NCmhpc3TDs3JpY2EgcGFyYSBlbCBwYcOtcyBxdWUgY29uc2lkZXLDqWlzLg0KNi4gTGEgcG9sw610aWNhIGRlIGVzdGFiaWxpemFjacOzbiBlbiB1bmEgZWNvbm9tw61hIGFiaWVydGE6IFBvbMOtdGljYQ0KRmlzY2FsIHkgTW9uZXRhcmlhLiBBbsOhbGlzaXMgdGXDs3JpY28sIGVuIGZ1bmNpw7NuIGRlIHNpIGVsIHBhw61zIGVzDQpwZXF1ZcOxbyBvIGdyYW5kZSBlbiBlbCBjb250ZXh0byBpbnRlcm5hY2lvbmFsIGRlbCBlZmVjdG8gZGUNCmRpY2hhcyBwb2zDrXRpY2FzIHNvYnJlIGxhIHJlbnRhLCBsb3MgdGlwb3MgZGUgaW50ZXLDqXMgeSB0aXBvcyBkZQ0KY2FtYmlvDQo3LiBDdWFscXVpZXIgdGVtYSByZWxhY2lvbmFkbyBjb24gbGEgbWFjcm9lY29ub23DrWENCmludGVybmFjaW9uYWwgeSBxdWUgcHVlZGEgZXN0YXIgZGUgYWN0dWFsaWRhZC4gUG9yIGVqZW1wbG8sDQpkZXNsb2NhbGl6YWNpb25lcyBkZSBlbXByZXNhcywgZ3VlcnJhcyBjb21lcmNpYWxlcyBldGMuDQoNCkNvbW8gcG9kZW1vcyB2ZXIgZW4gZWwgbWFwYSwgQWxlbWFuaWEgZXMgZWwgcGHDrXMgZGUgbGEgVUUgY29uIG1heW9yIFBJQiB5IHN1IGxpZGVyYXpnbyBzZSBoYSBpbmNyZW1lbnRhZG8gZW4gbG9zIMO6bHRpbW9zIGHDsW9zLg0KPC9kaXY+DQoNCiMjIE1hcGENCiFbXSguL2ltYWdlbmVzL21hcDIuZ2lmKQ0KDQoNCg0KIyMgQ8OzZGlnbw0KYGBge3IgbWFwYSBjw7NkaWdvLCBldmFsPUZBTFNFLCByZXN1bHRzPUZBTFNFLCBlY2hvPVRSVUV9DQoNCmxpYnJhcnkoZ2d0aGVtZXMpICMgTG9hZA0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHJpbykNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShnZ2FuaW1hdGUpDQpsaWJyYXJ5KHZpcmlkaXMpDQpsaWJyYXJ5KCJzZiIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCndvcmxkIDwtIHJuYXR1cmFsZWFydGg6Om5lX2NvdW50cmllcyhzY2FsZSA9ICJtZWRpdW0iLCByZXR1cm5jbGFzcyA9ICJzZiIpDQp3b3JsZF9wb2ludHM8LSBzdF9jZW50cm9pZCh3b3JsZCkNCndvcmxkX3BvaW50cyA8LSBjYmluZCh3b3JsZCwgc3RfY29vcmRpbmF0ZXMoc3RfY2VudHJvaWQod29ybGQkZ2VvbWV0cnkpKSkNCg0KZGZfcHdyPC0gcmVhZF9jc3YoIi4vZGF0b3MvcGliNS5jc3YiKSAlPiUgc2VsZWN0KC1jKGBTZXJpZXMgTmFtZWAsYFNlcmllcyBDb2RlYCkpICAlPiUgcmVuYW1lKHNvdmVyZWlnbnQgPSBgQ291bnRyeSBOYW1lYCwNCiAgICAgICAgICBgMTk5MGA9YDE5OTAgW1lSMTk5MF1gLA0KICAgICAgICAgIGAxOTkxYD1gMTk5MSBbWVIxOTkxXWAsDQogICAgICAgICAgYDE5OTJgPWAxOTkyIFtZUjE5OTJdYCwNCiAgICAgICAgICBgMTk5M2A9YDE5OTMgW1lSMTk5M11gLA0KICAgICAgICAgIGAxOTk0YD1gMTk5NCBbWVIxOTk0XWAsDQogICAgICAgICAgYDE5OTVgPWAxOTk1IFtZUjE5OTVdYCwNCiAgICAgICAgICBgMTk5NmA9YDE5OTYgW1lSMTk5Nl1gLA0KICAgICAgICAgIGAxOTk3YD1gMTk5NyBbWVIxOTk3XWAsDQogICAgICAgICAgYDE5OThgPWAxOTk4IFtZUjE5OThdYCwNCiAgICAgICAgICBgMTk5OWA9YDE5OTkgW1lSMTk5OV1gLA0KICAgICAgICAgIGAyMDAwYD1gMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgYDIwMDFgPWAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICBgMjAwMmA9YDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgIGAyMDAzYD1gMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgYDIwMDRgPWAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICBgMjAwNWA9YDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgIGAyMDA2YD1gMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgYDIwMDdgPWAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICBgMjAwOGA9YDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgIGAyMDA5YD1gMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgYDIwMTBgPWAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICBgMjAxMWA9YDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgIGAyMDEyYD1gMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgYDIwMTNgPWAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICBgMjAxNGA9YDIwMTQgW1lSMjAxNF1gICwNCiAgICAgICAgICBgMjAxNWA9YDIwMTUgW1lSMjAxNV1gLA0KICAgICAgICAgIGAyMDE2YD1gMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgYDIwMTdgPWAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICBgMjAxOGA9YDIwMTggW1lSMjAxOF1gLA0KICAgICAgICAgIGAyMDE5YD1gMjAxOSBbWVIyMDE5XWANCg0KICApDQoNCmRmX3B3cjIwIDwtIGRmX3B3ciAlPiUgIHBpdm90X2xvbmdlcihjb2xzID0gMzozMiwgbmFtZXNfdG8gPSAieWVhciIpICU+JSB0cmFuc2Zvcm0oeWVhciA9IGFzLm51bWVyaWMoeWVhciksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhcy5udW1lcmljKHZhbHVlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCg0KDQoNCmRmX3B3cjUgPC0gaW5uZXJfam9pbih3b3JsZCwgZGZfcHdyMjAsIGJ5PSBjKCJzb3ZlcmVpZ250IiA9ICJzb3ZlcmVpZ250IikpICU+JSBmaWx0ZXIoY29udGluZW50ID09ICJFdXJvcGUiLCBzb3ZlcmVpZ250ICE9ICJCb3NuaWEgYW5kIEhlcnplZ292aW5hIikNCg0KZGZfcHdyOSA8LSBkZl9wd3I1ICU+JSBzZWxlY3Qoc292ZXJlaWdudCwgeWVhciwgdmFsdWUpDQpwIDwtIGdncGxvdCgpICsgZ2VvbV9zZihkYXRhID0gZGZfcHdyOSwgYWVzKGZpbGwgPSB2YWx1ZSkpICsNCiAgbGFicyh0aXRsZSA9ICJNYXBhIGRlbCBtdW5kbyBlbmVyZ2lhcyByZW5vdmFibGVzIDE5OTAgLSAyMDE1IiwNCiAgICAgICBjYXB0aW9uID0gIkRhdG9zIHByb3ZlbmllbnRlcyBkZSBXb3JsZCBCYW5rIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXMoZGlyZWN0aW9uID0gMSkgKw0KICB0cmFuc2l0aW9uX3RpbWUoeWVhcikgKyBsYWJzKHRpdGxlID0gIlBvcmNlbnRhamUgZGUgZW5lcmdpYSByZW5vdmFibGUgcG9yIHBhw61zIiwgc3VidGl0bGUgPSAiQcOxbzp7YXMuaW50ZWdlcihmcmFtZV90aW1lKX0iICApICsNCiAgY29vcmRfc2YoeGxpbSA9IGMoLTE3LCA0MCksIHlsaW0gPSBjKDM4LCA3MCkpKw0KICB0aGVtZSgNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICAgIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogICAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICcjQ0VDRUNFJyksDQogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgIyBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbD0nIzI3MjYzNScpDQogICkNCg0KYW5pbTEgPC0gYW5pbWF0ZShwKQ0KDQphbmltX3NhdmUoIi4vaW1hZ2VuZXMvbWFwLmdpZiIsIGFuaW0xKQ0KDQoNCg0KYGBgDQojIDEuIFBhcmlkYWQgY3ViaWVydGEgeSBkZXNjdWJpZXJ0YSBkZSBsb3MgdGlwb3MgZGUgaW50ZXLDqXMgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KIyMgR3LDoWZpY28NCmBgYHtyIEdyw6FmaWNvIHRpcG9zIGRlIGNhbWJpbywgZWNobz1GQUxTRX0NCiNHcsOhZmljbyB0aXBvIGRlIGNhbWJpbyBFVVJPDQoNCmV4Y2hfZ2VyX2NzdjI8LSByZWFkX2NzdigiLi9kYXRvcy9ldXJvZnhyZWYuY3N2IikNCkluZmxhdGlvbjwtIHJlYWRfY3N2KCIuL2RhdG9zL2luZmxhdGlvbi5jc3YiKQ0KDQpnZXJfZXhjaDkgPC0gZXhjaF9nZXJfY3N2MiAlPiUgc2VsZWN0KERhdGUsIFVTRCwgQ05ZLCBHQlAsIEpQWSkgJT4lIGRyb3BfbmEoKSAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSAyOjUsIG5hbWVzX3RvID0gImN1cnJlbmN5IiwgdmFsdWVzX3RvID0gImV4Y2hhbmdlX3JhdGUiKQ0KDQoNCg0KcCA8LWdncGxvdChnZXJfZXhjaDksIGFlcyhEYXRlLCBleGNoYW5nZV9yYXRlLGdyb3VwID0gY3VycmVuY3kgKSkgKw0KICBnZW9tX2xpbmUoYWVzKGNvbG9yID0gY3VycmVuY3kpKSArDQoNCiAgdGhlbWUoYXhpcy50aXRsZS55PWVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzLnk9ZWxlbWVudF9ibGFuaygpKSsNCiAgZ2VvbV9zbW9vdGgoKSArDQogIGxhYnMoeCA9ICJBw7FvIiwgeSA9ICJleGNoYW5nZSByYXRlIiwgDQogICAgICAgdGl0bGUgPSAiVGlwbyBkZSBjYW1iaW8g4oKsIikgKw0KICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKGN1cnJlbmN5KSxzY2FsZXMgPSAiZnJlZSIpICsNCiAgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKSsNCiAgdGhlbWUoDQogICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuMjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnggPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIyBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbD0nIzI3MjYzNScpDQogICkNCg0KcA0KDQpgYGANCg0KIyMgQ8OzZGlnbw0KYGBge3IgY8OzZGlnbyB0aXBvcyBkZSBjYW1iaW8sIGV2YWw9RkFMU0UsIGVjaG89IFRSVUUsIG1lc3NhZ2U9RkFMU0V9DQojR3LDoWZpY28gdGlwbyBkZSBjYW1iaW8gRVVSTw0KDQpleGNoX2dlcl9jc3YyPC0gcmVhZF9jc3YoIi4vZGF0b3MvZXVyb2Z4cmVmLmNzdiIpDQpJbmZsYXRpb248LSByZWFkX2NzdigiLi9kYXRvcy9pbmZsYXRpb24uY3N2IikNCg0KZ2VyX2V4Y2g5IDwtIGV4Y2hfZ2VyX2NzdjIgJT4lIHNlbGVjdChEYXRlLCBVU0QsIENOWSwgR0JQLCBKUFkpICU+JSBkcm9wX25hKCkgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gMjo1LCBuYW1lc190byA9ICJjdXJyZW5jeSIsIHZhbHVlc190byA9ICJleGNoYW5nZV9yYXRlIikNCg0KDQoNCnAgPC1nZ3Bsb3QoZ2VyX2V4Y2g5LCBhZXMoRGF0ZSwgZXhjaGFuZ2VfcmF0ZSxncm91cCA9IGN1cnJlbmN5ICkpICsNCiAgZ2VvbV9saW5lKGFlcyhjb2xvciA9IGN1cnJlbmN5KSkgKw0KDQogIHRoZW1lKGF4aXMudGl0bGUueT1lbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcy55PWVsZW1lbnRfYmxhbmsoKSkrDQogIGdlb21fc21vb3RoKCkgKw0KICBsYWJzKHggPSAiQcOxbyIsIHkgPSAiZXhjaGFuZ2UgcmF0ZSIsIA0KICAgICAgIHRpdGxlID0gIlRpcG8gZGUgY2FtYmlvIOKCrCIpICsNCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhjdXJyZW5jeSksc2NhbGVzID0gImZyZWUiKSArDQogIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkrDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQoNCnANCg0KYGBgDQoNCiMgey19DQoNCjxkaXYgY2xhc3MgPSAiY2FqYS0xIj4NCg0KRW4gZWwgc2lndWllbnRlIEdyw6FmaWNvIHBvZGVtb3MgdmVyIGNvbW8gaGEgdmFyaWFkbyBlbCB0aXBvIGRlIGNhbWJpbyBkZWwgZXVybyBjb24gcmVzcGVjdG8gYSBvdHJhcyBtb25lZGFzIGRlbCBtdW5kbyBhIGxvIGxhcmdvIGRlIGxvcyDDumx0aW1vcyAyMCBhw7Fvcy4gQ29tbyBwb2RlbW9zIG9ic2VydmFyIGhheSBjaWVydGEgY29ycmVsYWNpw7NuIGVudHJlIGxvcyBjYW1iaW9zIGNvbiBsYXMgZGlmZXJlbnRlcyBtb25lZGFzLCBhZGVtw6FzIGxvcyB0aXBvcyBkZSBjYW1iaW8gZmx1Y3TDumFuIG11Y2hvIGVuIHVuIGNvcnRvIHBlcmlvZG8gZGUgdGllbXBvLg0KPC9kaXY+DQoNCg0KIyMjIFBhcmlkYWQgQ3ViaWVydGEgDQoNCjxkaXYgY2xhc3MgPSAiY2FqYS0xIj4NCkhhYmxhbW9zIGRlIFBhcmlkYWQgY3ViaWVydGEgZGUgbG9zIHRpcG9zIGRlIGludGVyw6lzIGN1YW5kbyBhbCByZWFsaXphciB1bmEgaW52ZXJzacOzbiBlbiB1biBkZXDDs3NpdG8gZW4geWVuZXMgICwgZWwgcmllc2dvIHF1ZSBwcm92aWVuZSBkZSBlbCB0aXBvIGRlIGNhbWJpbyBhIGZ1dHVybyBlbnRyZSBlbCB5ZW4gIHkgZWwg4oKsIHF1ZWRhIGFzZWd1cmFkbyBwb3IgdW4gY29udHJhdG8gcmVhbGl6YWRvIGEgZnV0dXJvLiBBc8OtIG5vcyBhc2VndXJhbW9zIGRlIHF1ZSBlbiBlbCBjYXNvIGRlIHJlYWxpemFyIHVuYSBpbnZlcnNpw7NuIGVuIHVuYSBtb25lZGEgZXh0cmFuamVyYSBsb3MgdGlwb3MgZGUgaW50ZXLDqXMgb2J0ZW5pZG9zIG5vIHNlIHBpZXJkYW4gcG9yIGxhcyBmbHVjdHVhY2lvbmVzIGVuIGVsIHRpcG8gZGUgY2FtYmlvLg0KDQoNCiQkIFxjb2xvcnsjNkJGRkI4fXsNCigxICsgaV97XGFscGhhfSkgPSAoMSArIGlfe1xlcHNpbG9ufSlcZnJhY3tGX3tcZnJhY3tcYWxwaGF9e1xlcHNpbG9ufX19e0Vfe1xmcmFje1xhbHBoYX17XGVwc2lsb259fX19ICQkDQoNCjwvZGl2Pg0KDQoNCiMjIyBQYXJpZGFkIERlc2N1YmllcnRhDQoNCjxkaXYgY2xhc3MgPSAiY2FqYS0xIj4NCkxhIHBhcmlkYWQgZGVzY3ViaWVydGEgZGUgaW50ZXJlc2VzIGVzIHVuYSBjb25kaWNpw7NuIGRlIGF1c2VuY2lhIGRlIGFyYml0cmFqZSBxdWUgZGVzY3JpYmUgdW4gZXF1aWxpYnJpbyBlbiBlbCBxdWUgbG9zIGludmVyc29yZXMgc29uIGluZGlmZXJlbnRlcyBlbnRyZSBkZXDDs3NpdG9zIGJhbmNhcmlvcyByZW11bmVyYWRvcyBlbiBkb3MgbW9uZWRhcyBzaW4gcXVlIHNlIGhheWEgY3ViaWVydG8gZWwgcmllc2dvIGNhbWJpYXJpby4gQWwgY29udHJhcmlvIHF1ZSBlbiBsYSBwYXJpZGFkIGN1YmllcnRhLCBlbiBlc3RlIGNhc28gZWwgcmllc2dvIG9yaWdpbmFkbyBwb3IgbGFzIGZsdWN0dWFjaW9uZXMgY2FtYmlhcmlhcyBlbnRyZSBsYXMgZG9zIG1vbmVkYXMgbm8gcXVlZGEgY3ViaWVydG8geSBhw7puIGFzw60gZWwgaW52ZXJzb3IgZXN0w6EgaW5kaWZlcmVudGUgZW50cmUgdW4gZGVwb3NpdG8gZW4gwqUgbyBlbiDigqwuDQo8L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzID0gImNhamEtMSI+DQoNClxiZWdpbnthbGlnbn0NClxjb2xvcnsjNkJGRkI4fXsNCkVfe1xmcmFje1xhbHBoYX17XGVwc2lsb259fSA9IEVfe1xmcmFje1xhbHBoYX17XGVwc2lsb259fV57ZX0gXGZyYWN7MStpX3tcZXBzaWxvbn19ezEraV97XGFscGhhfX0NCg0KDQpccmlnaHRhcnJvdw0KDQoNCg0KaV97XGFscGhhfSA9IGlfe1xlcHNpbG9ufSArIFxmcmFje1xiaWd0cmlhbmdsZXVwIEVfe1xmcmFje1xhbHBoYX17XGVwc2lsb259fV57ZX19e0Vfe1xmcmFje1xhbHBoYX17XGVwc2lsb259fX0NCn0NClxlbmR7YWxpZ259DQoNCjwvZGl2Pg0KDQoNCiMgMi4gUFBBIGFic29sdXRhIHkgcmVsYXRpdmEgDQoNCjxkaXYgY2xhc3MgPSAiY2FqYS0xIj4NClBhcmEgZW50ZW5kZXIgbGEgUFBBIGFic29sdXRhIGhheSBxdWUgaGFibGFyIHByaW1lcm8gZGUgbGEgTGV5IGRlbCBQcmVjaW8gw5puaWNvIG8gTFBVLCBlcyBsYSBjb25kaWNpw7NuIHBvciBsYSBjdWFsIGVsIHByZWNpbyBkZSB1biBiaWVuIGVuIHVuIHBhw61zIGVzIGlndWFsIGFsIHByZWNpbyBkZSBlc3RlIGJpZW4gZW4gb3RybyBwYcOtcywgdG9kbyBlc3RvIGRlc2NvbnRhbmRvIGNvc3RlcyBkZSB0cmFuc3BvcnRlLCBhbG1hY2VuYW1pZW50bywgZXRjLiBFc3RvIG5vcyBhc2VndXJhIHF1ZSBubyBzZSBwcm9kdXpjYSBhcmJpdHJhamUgeWEgcXVlIGVsIG1lcmNhZG8gZXN0YXLDoSBlbiBlcXVpbGlicmlvLg0KDQojIyBQUEEgYWJzb2x1dGENCkxhIFBQQSBhYnNvbHV0YSBzZSBwcm9kdWNlIGN1YW5kbyBlbCB2YWxvciBkZSBsYSBtaXNtYSBjZXN0YSBlcyBlbCBtaXNtbyBlbiBkaWZlcmVudGVzIHBhw61zZXMsIG8gbG8gcXVlIGVzIGxvIG1pc21vLCBjdWFuZG8gZWwgdGlwbyBkZSBjYW1iaW8gcmVhbCBlcyBpZ3VhbCBhIDEuDQoNClxiZWdpbnthbGlnbn0NClxjb2xvcnsjNkJGRkI4fXsNCg0KRV97XGZyYWN7XGFscGhhfXtcZXBzaWxvbn19ID0gICAgIFxmcmFje1Bfe1xhbHBoYX19e1Bfe1xlcHNpbG9ufX0NCn0NClxlbmR7YWxpZ259DQoNCg0KPC9kaXY+DQoNCiMjIFBQQSBSZWxhdGl2YSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQojIyMgR3LDoWZpY28NCmBgYHtyIGdyw6FmaWNvIHBwYSByZWxhdGl2YSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KUlBDUzwtIHJlYWRfY3N2KCIuL2RhdG9zL1JlbGF0aXZlcGNzLmNzdiIpICU+JSBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCkgICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI0LCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gInJwY3MiKSAlPiUgDQogIHNlbGVjdCgnQ291bnRyeSBOYW1lJywgeWVhciwgcnBjcykgJT4lICBtdXRhdGUoeWVhciA9IGFzLm51bWVyaWMoeWVhcikpICU+JSBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gJ0NvdW50cnkgTmFtZScsIHZhbHVlc19mcm9tID0gInJwY3MiKSAlPiUgDQogIG11dGF0ZShycGNzID0gKEdlcm1hbnkvYFVuaXRlZCBTdGF0ZXNgKSkgJT4lIHNlbGVjdChycGNzLHllYXIpDQoNCg0KDQpnZXJfZXhjaDEyIDwtIGdlcl9leGNoOSAlPiUgZmlsdGVyKGN1cnJlbmN5ID09ICJVU0QiKSAlPiUgDQogIG11dGF0ZSh5ZWFyID0geWVhcihEYXRlKSkgJT4lIA0KICBtdXRhdGUobW9udGggPSBtb250aChEYXRlKSkgJT4lIA0KICBtdXRhdGUoZGF5ID0gZGF5KERhdGUpKSAlPiUgZmlsdGVyKGRheSA9PSAgMikgJT4lIGZpbHRlcihtb250aCA9PSAxKSAlPiUgc2VsZWN0KHllYXIsZXhjaGFuZ2VfcmF0ZSkNCg0KDQpkIDwtIGlubmVyX2pvaW4oZ2VyX2V4Y2gxMixSUENTKSANCg0KDQoNCmdncGxvdChkKSsgDQoNCmdlb21fbGluZShhZXMoeD0geWVhcix5ID0gcnBjcywgY29sb3VyID0gIlByZWNpb3MgcmVsYXRpdm9zIikpICsNCiAgZ2VvbV9saW5lKGFlcyh4PSB5ZWFyLHkgPSBleGNoYW5nZV9yYXRlLCBjb2xvdXIgPSAiVGlwbyBkZSBjYW1iaW8iKSkgKw0KICBzY2FsZV9jb2xvdXJfbWFudWFsKCIiLCANCiAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKCJQcmVjaW9zIHJlbGF0aXZvcyIsICJUaXBvIGRlIGNhbWJpbyIpLA0KICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoImxpZ2h0Ymx1ZSIsICJncmVlbiIpKSArDQogIGdlb21fc21vb3RoKGFlcyh5ZWFyLHJwY3MpLGNvbG9yID0gImxpZ2h0Ymx1ZSIsbWV0aG9kID0gImxtIikgKw0KICBnZW9tX3Ntb290aChhZXMoeWVhcixleGNoYW5nZV9yYXRlKSxjb2xvciA9ICJncmVlbiIsbWV0aG9kID0gImxtIikgKw0KICB4bGFiKCIgIikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoIiAiLCBsaW1pdHMgPSBjKDAuOSwyKSkgKyANCiAgbGFicyh0aXRsZSA9ICJQUEEgUkVMQVRJVkEiLA0KICAgICAgIHN1YnRpdGxlID0gIkFsZW1hbmlhIDIwMDYtMjAyMCIsDQogICAgICAgeD0gIkHDsW8iLA0KICAgICAgIHkgPSAiICIpICsNCiAgdGhlbWUoDQogICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuMjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnggPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIyBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbD0nIzI3MjYzNScpDQogICkNCg0KDQpgYGANCg0KIyMjIGPDs2RpZ28NCmBgYHtyIEPDk0RJR08gcHBhIHJlbGF0aXZhLCBlY2hvPSBUUlVFLCB3YXJuaW5nPUZBTFNFLCBldmFsID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0NCg0KUlBDUzwtIHJlYWRfY3N2KCIuL2RhdG9zL1JlbGF0aXZlcGNzLmNzdiIpICU+JSBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCkgICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI0LCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gInJwY3MiKSAlPiUgDQogIHNlbGVjdCgnQ291bnRyeSBOYW1lJywgeWVhciwgcnBjcykgJT4lICBtdXRhdGUoeWVhciA9IGFzLm51bWVyaWMoeWVhcikpICU+JSBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gJ0NvdW50cnkgTmFtZScsIHZhbHVlc19mcm9tID0gInJwY3MiKSAlPiUgDQogIG11dGF0ZShycGNzID0gKEdlcm1hbnkvYFVuaXRlZCBTdGF0ZXNgKSkgJT4lIHNlbGVjdChycGNzLHllYXIpDQoNCg0KDQpnZXJfZXhjaDEyIDwtIGdlcl9leGNoOSAlPiUgZmlsdGVyKGN1cnJlbmN5ID09ICJVU0QiKSAlPiUgDQogIG11dGF0ZSh5ZWFyID0geWVhcihEYXRlKSkgJT4lIA0KICBtdXRhdGUobW9udGggPSBtb250aChEYXRlKSkgJT4lIA0KICBtdXRhdGUoZGF5ID0gZGF5KERhdGUpKSAlPiUgZmlsdGVyKGRheSA9PSAgMikgJT4lIGZpbHRlcihtb250aCA9PSAxKSAlPiUgc2VsZWN0KHllYXIsZXhjaGFuZ2VfcmF0ZSkNCg0KDQpkIDwtIGlubmVyX2pvaW4oZ2VyX2V4Y2gxMixSUENTKSANCg0KDQoNCmdncGxvdChkKSsgDQoNCmdlb21fbGluZShhZXMoeD0geWVhcix5ID0gcnBjcywgY29sb3VyID0gIlByZWNpb3MgcmVsYXRpdm9zIikpICsNCiAgZ2VvbV9saW5lKGFlcyh4PSB5ZWFyLHkgPSBleGNoYW5nZV9yYXRlLCBjb2xvdXIgPSAiVGlwbyBkZSBjYW1iaW8iKSkgKw0KICBzY2FsZV9jb2xvdXJfbWFudWFsKCIiLCANCiAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKCJQcmVjaW9zIHJlbGF0aXZvcyIsICJUaXBvIGRlIGNhbWJpbyIpLA0KICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoInJlZCIsICJibHVlIikpICsNCiAgZ2VvbV9zbW9vdGgoYWVzKHllYXIscnBjcyksY29sb3IgPSAicmVkIixtZXRob2QgPSAibG0iKSArDQogIGdlb21fc21vb3RoKGFlcyh5ZWFyLGV4Y2hhbmdlX3JhdGUpLGNvbG9yID0gImJsdWUiLG1ldGhvZCA9ICJsbSIpICsNCiAgeGxhYigiICIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKCIgIiwgbGltaXRzID0gYygwLjksMikpICsgDQogIGxhYnModGl0bGUgPSAiUFBBIFJFTEFUSVZBIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJBbGVtYW5pYSAyMDA2LTIwMjAiLA0KICAgICAgIHg9ICJBw7FvIiwNCiAgICAgICB5ID0gIiAiKSArDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQoNCg0KYGBgDQojIyB7LX0NCg0KPGRpdiBjbGFzcyA9ICJjYWphLTEiPg0KDQpMYSBQUEEgcmVsYXRpdmEgYXBhcmVjZSBjdWFuZG8gZXhwcmVzYW1vcyBsYSBhbnRlcmlvciBleHByZXNpw7NuIGVuIHTDqXJtaW5vcyBkZSBjcmVjaW1pZW50bywgT2J0ZW5pZW5kbyBsYSBzaWd1aWVudGUgZXhwcmVzacOzbjoNCg0KDQoNClxiZWdpbnthbGlnbn0NCg0KICAgIFx1bmRlcmJyYWNle1xjb2xvcnsjNkJGRkI4fXtcZnJhY3tcYmlndHJpYW5nbGV1cCBFX3tcZnJhY3tcYWxwaGF9e1xlcHNpbG9ufSx0fX17RV97XGZyYWN7XGFscGhhfXtcZXBzaWxvbn0sdH19fX1fXHRleHR7VGFzYSBkZSBkZXByZWNpYWNpw7NuIGRlbCB0aXBvIGRlIGNhbWJpbyBub21pbmFsfSA9IFx1bmRlcmJyYWNle1xjb2xvcnsjNkJGRkI4fXtccGlfe1xhbHBoYSx0fSAtIFxwaV97XGVwc2lsb24sdH0gfX1fXHRleHR7RGlmZXJlbmNpYWwgZGUgSW5mbGFjacOzbn0NCiAgICANCiAgICAgIA0KDQpcZW5ke2FsaWdufQ0KDQoNCg0KU2kgb2JzZXJ2YW1vcyBsYSByZWxhY2nDs24gZW50cmUgZWwgcHJlY2lvIHJlbGF0aXZvIHkgbG9zIHRpcG9zIGRlIGNhbWJpbyBFdXJvIC1kw7NsYXIsIHBvZGVtb3Mgb2JzZXJ2YXIgY29tbyBhIGNvcnRvIHBsYXpvIChWZXJkZSkgbm8gc2UgY3VtcGxlIGxhIFBQQSByZWxhdGl2YSwgcGVybyBhIExhcmdvIHBsYXpvIChhenVsKSBhbWJvcyB0aWVuZGVuIGEgZGlzbWludWlyLCBlcyBkZWNpciwgbGEgZXZpZGVuY2lhIGVtcMOtcmljYSBub3MgaW5kaWNhIHF1ZSBsYSBQUEEgcmVsYXRpdmEgc29sbyBzZSBjdW1wbGUgYSBsYXJnbyBwbGF6by4NCjwvZGl2Pg0KDQojIDMuIERlc2VxdWlsaWJyaW9zIGdsb2JhbGVzDQojIyBQSUIgey50YWJzZXQgLnRhYnNldC1waWxsc30NCiMjIyBHcsOhZmljbw0KYGBge3IgR3LDoWZpY28gUElCfQ0KcGliIDwtIHJlYWRfY3N2KCIuL2RhdG9zL1BJQi5jc3YiKSAlPiUgIGRyb3BfbmEoKSAlPiUgcmVuYW1lKCIyMDAwIiA9IGAyMDAwIFtZUjIwMDBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDEiID0gYDIwMDEgW1lSMjAwMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMiIgPSBgMjAwMiBbWVIyMDAyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAzIiA9IGAyMDAzIFtZUjIwMDNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDQiID0gYDIwMDQgW1lSMjAwNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNSIgPSBgMjAwNSBbWVIyMDA1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA2IiA9IGAyMDA2IFtZUjIwMDZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDciID0gYDIwMDcgW1lSMjAwN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOCIgPSBgMjAwOCBbWVIyMDA4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA5IiA9IGAyMDA5IFtZUjIwMDldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTAiID0gYDIwMTAgW1lSMjAxMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMSIgPSBgMjAxMSBbWVIyMDExXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEyIiA9IGAyMDEyIFtZUjIwMTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTMiID0gYDIwMTMgW1lSMjAxM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNCIgPSBgMjAxNCBbWVIyMDE0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE1IiA9IGAyMDE1IFtZUjIwMTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTYiID0gYDIwMTYgW1lSMjAxNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNyIgPSBgMjAxNyBbWVIyMDE3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE4IiA9IGAyMDE4IFtZUjIwMThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTkiID0gYDIwMTkgW1lSMjAxOV1gKSAgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gNToyNCwgbmFtZXNfdG8gPSAieWVhciIsIHZhbHVlc190byA9ICJQSUIiKSAlPiUgDQogIHNlbGVjdCh5ZWFyLFBJQikgJT4lIG11dGF0ZShQSUIgPSBQSUIvMTAwMDAwMDAwMCkNCg0KDQpnZ3Bsb3QocGliLGFlcyh5ZWFyLFBJQixncm91cCA9IDEpKSArDQogIGdlb21fc21vb3RoKGNvbG9yID0gImdyZWVuIiwgc2U9IEZBTFNFKSArDQogIGdlb21fbGluZShjb2xvcj0gIm5hdnlibHVlIiwgc2l6ZSA9IDIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxKSkgKw0KICBsYWJzKHRpdGxlID0gIlBJQiIsDQogICAgICAgc3VidGl0bGUgPSAiQWxlbWFuaWEgMjAwMC0yMDE5IiwNCiAgICAgICBjYXB0aW9uID0gIldvcmxkIEJhbmssIGVuICQgYWN0dWFsZXMiLA0KICAgICAgIHkgPSAibWlsLiBtaWxsLiAkIiwNCiAgICAgICB4ID0gIkHDsW8iKSArDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQogIA0KDQoNCg0KDQoNCg0KYGBgDQoNCiMjIyBDw7NkaWdvDQpgYGB7ciBDw7NkaWdvIFBJQiwgZWNobz0gVFJVRSwgZXZhbD1GQUxTRX0NCnBpYiA8LSByZWFkX2NzdigiLi9kYXRvcy9QSUIuY3N2IikgJT4lICBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCkgICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MjQsIG5hbWVzX3RvID0gInllYXIiLCB2YWx1ZXNfdG8gPSAiUElCIikgJT4lIA0KICBzZWxlY3QoeWVhcixQSUIpICU+JSBtdXRhdGUoUElCID0gUElCLzEwMDAwMDAwMDApDQoNCg0KZ2dwbG90KHBpYixhZXMoeWVhcixQSUIsZ3JvdXAgPSAxKSkgKw0KICBnZW9tX3Ntb290aChjb2xvciA9ICJncmVlbiIsIHNlPSBGQUxTRSkgKw0KICBnZW9tX2xpbmUoY29sb3I9ICJuYXZ5Ymx1ZSIsIHNpemUgPSAyKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSkpICsNCiAgbGFicyh0aXRsZSA9ICJQSUIiLA0KICAgICAgIHN1YnRpdGxlID0gIkFsZW1hbmlhIDIwMDAtMjAxOSIsDQogICAgICAgY2FwdGlvbiA9ICJXb3JsZCBCYW5rLCBlbiAkIGFjdHVhbGVzIiwNCiAgICAgICB5ID0gIm1pbC4gbWlsbC4gJCIsDQogICAgICAgeCA9ICJBw7FvIikNCmBgYA0KDQojIyB7LX0NCjxkaXYgY2xhc3MgPSAiY2FqYS0xIj4NCkNvbW8gcG9kZW1vcyBvYnNlcnZhciwgbGEgZWNvbm9tw61hIGFsZW1hbmEgaGEgY3JlY2lkbyBub3RhYmxlbWVudGUgZW4gbG9zIMO6bHRpbW9zIDIwIGHDsW9zLCBlbCBwZXLDrW9kbyAyMDAwLTIwMDcgZXN0w6EgY2FyYWN0ZXJpemFkbyBwb3IgdW4gcsOhcGlkbyB5IGNvbnRpbnVvIGF1bWVudG8gZGVsIFBJQiwgcGVyaW9kbyBlbiBlbCBxdWUgbGEgdW5pw7NuIGV1cm9wZWEgZW1waWV6YSB1bmEgZXRhcGEgY29uIG11Y2hhIG3DoXMgaW50ZWdyYWNpw7NuIHkgZW4gbGEgcXVlIEFsZW1hbmlhIHNhbGUgbXV5IGJlbmVmaWNpYWRhLCBzb2JyZSB0b2RvIGVuIGxvIHF1ZSBzZSByZWZpZXJlIGFsIGNvbWVyY2lvIGVuIGxhIFVFLiBMYSBpbnRyb2R1Y2Npw7NuIGRlbCBFdXJvIGNvbW8gbW9uZWRhIMO6bmljYSB5IGxhIGVsaW1pbmFjacOzbiBkZSBsYXMgYmFycmVyYXMgYXJhbmNlbGFyaWFzIGVuIGxvcyDDumx0aW1vcyBhw7FvcyBoYWNlIHF1ZSBBbGVtYW5pYSBhcHJvdmVjaGUgZXN0YSBvcG9ydHVuaWRhZCB5IHNlIGZvcnRhbGV6Y2EgY29tbyBwb3RlbmNpYSBlbiBmYWJyaWNhY2nDs24gZGUgbWFxdWluYXJpYSB5IHRlY25vbG9nw61hIHB1bnRhIGVuIEV1cm9wYS4gQSBwYXJ0aXIgZGUgMjAwNyBjb24gbGEgbGxlZ2FkYSBkZSBsYSBjcmlzaXMgeSBsb3MgcHJvYmxlbWFzIGludGVybm9zIGRlIGxhcyBlY29ub23DrWFzIGV1cm9wZWFzLCBlbCBjcmVjaW1pZW50byBhbGVtw6FuIGRlbCBQSUIgc2UgZnJlbmEgY29uc2lkZXJhYmxlbWVudGUuIEVsIHJlc2NhdGUgZGUgR3JlY2lhIHkgZWwg4oCcY2FzaeKAnSByZXNjYXRlIGRlbCByZXN0byBkZSBsYXMgZWNvbm9tw61hcyBtw6FzIGFmZWN0YWRhcyBwb3IgbGEgY3Jpc2lzIGNvbW8gRXNwYcOxYSB5IFBvcnR1Z2FsIGVudHJlIG90cmFzLCBoYWNlIHF1ZSBsYSBlY29ub23DrWEgYWxlbWFuYSB0ZW5nYSBxdWUgcGlzYXIgZWwgZnJlbm8uDQo8L2Rpdj4NCg0KIyMgQWhvcnJvIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyBHcsOhZmljbw0KDQpgYGB7ciBHcsOhZmljbyBBaG9ycm99DQpzYXZnZXIgPC0gcmVhZF9jc3YoIi4vZGF0b3Mvc2F2aW5nc2dlci5jc3YiKQ0KZ2VyX3NhdiA8LSBzYXZnZXIgJT4lIGRyb3BfbmEoKSAlPiUgcmVuYW1lKCIyMDAwIiA9IGAyMDAwIFtZUjIwMDBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIgPSBgMjAwMSBbWVIyMDAxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAzIiA9IGAyMDAzIFtZUjIwMDNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNCIgPSBgMjAwNCBbWVIyMDA0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA2IiA9IGAyMDA2IFtZUjIwMDZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNyIgPSBgMjAwNyBbWVIyMDA3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA5IiA9IGAyMDA5IFtZUjIwMDldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMCIgPSBgMjAxMCBbWVIyMDEwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEyIiA9IGAyMDEyIFtZUjIwMTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMyIgPSBgMjAxMyBbWVIyMDEzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE1IiA9IGAyMDE1IFtZUjIwMTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNiIgPSBgMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE4IiA9IGAyMDE4IFtZUjIwMThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOSIgPSBgMjAxOSBbWVIyMDE5XWApICAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI0LCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gInNhdmluZ3MiKQ0KZ2VyX3NhdjI8LSBnZXJfc2F2ICU+JSBzZWxlY3QoJ0NvdW50cnkgTmFtZScsIHllYXIsIHNhdmluZ3MpICU+JSAgbXV0YXRlKHllYXIgPSBhcy5udW1lcmljKHllYXIpKQ0KDQoNCmdncGxvdCgpICsNCiAgZ2VvbV9saW5lKGFlcyh5ZWFyLHNhdmluZ3MsZ3JvdXA9IDEpLGNvbG91cj0iYmx1ZSIsZ2VyX3NhdjIpICsNCiAgZ2VvbV9zbW9vdGgoYWVzKHllYXIsc2F2aW5ncyksY29sb3VyID0gImdyZWVuIixnZXJfc2F2MikgKw0KICBsYWJzKHRpdGxlPSJBaG9ycm8iLA0KICAgICAgIHN1YnRpdGxlID0gIkFsZW1hbmlhIDIwMDAtMjAxOSIsDQogICAgICAgeCA9ICJBw7FvIiwNCiAgICAgICB5ID0iJVBJQiIpKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRleHQueCA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBheGlzLnRleHQueSA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAjIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsPScjMjcyNjM1JykNCiAgKQ0KYGBgDQoNCiMjIyBDw7NkaWdvDQoNCmBgYHtyIEPDs2RpZ28gQWhvcnJvLCBldmFsPSBGQUxTRSwgZWNobz0gVFJVRX0NCnNhdmdlciA8LSByZWFkX2NzdigiLi9kYXRvcy9zYXZpbmdzZ2VyLmNzdiIpDQpnZXJfc2F2IDwtIHNhdmdlciAlPiUgZHJvcF9uYSgpICU+JSByZW5hbWUoIjIwMDAiID0gYDIwMDAgW1lSMjAwMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMiIgPSBgMjAwMiBbWVIyMDAyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDMiID0gYDIwMDMgW1lSMjAwM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNSIgPSBgMjAwNSBbWVIyMDA1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDYiID0gYDIwMDYgW1lSMjAwNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOCIgPSBgMjAwOCBbWVIyMDA4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiID0gYDIwMDkgW1lSMjAwOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMSIgPSBgMjAxMSBbWVIyMDExXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTIiID0gYDIwMTIgW1lSMjAxMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNCIgPSBgMjAxNCBbWVIyMDE0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUiID0gYDIwMTUgW1lSMjAxNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNyIgPSBgMjAxNyBbWVIyMDE3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTgiID0gYDIwMTggW1lSMjAxOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCkgICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MjQsIG5hbWVzX3RvID0gInllYXIiLCB2YWx1ZXNfdG8gPSAic2F2aW5ncyIpDQpnZXJfc2F2MjwtIGdlcl9zYXYgJT4lIHNlbGVjdCgnQ291bnRyeSBOYW1lJywgeWVhciwgc2F2aW5ncykgJT4lICBtdXRhdGUoeWVhciA9IGFzLm51bWVyaWMoeWVhcikpDQoNCg0KZ2dwbG90KCkgKw0KICBnZW9tX2xpbmUoYWVzKHllYXIsc2F2aW5ncyxncm91cD0gMSksY29sb3VyPSJibHVlIixnZXJfc2F2MikgKw0KICBnZW9tX3Ntb290aChhZXMoeWVhcixzYXZpbmdzKSxjb2xvdXIgPSAiZ3JlZW4iLGdlcl9zYXYyKSArDQogIGxhYnModGl0bGU9IkFob3JybyIsDQogICAgICAgc3VidGl0bGUgPSAiQWxlbWFuaWEgMjAwMC0yMDE5IiwNCiAgICAgICB4ID0gIkHDsW8iLA0KICAgICAgIHkgPSIlUElCIikrDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQpgYGANCg0KDQoNCg0KDQojIyB7LX0NCjxkaXYgY2xhc3MgPSAiY2FqYS0xIj4NClBvZGVtb3MgT2JzZXJ2YXIgcXVlIGVsIGFob3JybyBoYSBhdW1lbnRhZG8gZGUgbWFuZXJhIGNvbnNpZGVyYWJsZSBlbiBsb3Mgw7psdGltb3MgMjAgYcOxb3MuICBTaSBub3MgY2VudHJhbW9zIGVuIGVsIHBlcmlvZG8gZW50cmUgMjAwNyB5IDIwMTEgKENyaXNpcykgZWwgYWhvcnJvIHNlIHZ1ZWx2ZSBtdXkgdm9sw6F0aWwsIGVzdGFibGl6YW5kb3NlIGVuIGxvcyDDumx0aW1vcyBhw7FvcyBjb24gdW5hIHRlbmRlbmNpYSBhc2NlbmRlbnRlLg0KPGRpdi8+DQoNCiMjIEludmVyc2nDs24gey50YWJzZXQgLnRhYnNldC1waWxsc30NCiMjIyBHcsOhZmljbw0KYGBge3IgR3LDoWZpY28gSW52ZXJzacOzbn0NCmludmVzdCA8LSByZWFkX2NzdigiLi9kYXRvcy9pbnZlc3RtZW50LmNzdiIpIA0KaW52ZXN0MiA8LSBpbnZlc3QgJT4lIGZpbHRlcihgSW5kaWNhdG9yIElkYCA9PSAzNDUsIGBDb3VudHJ5IE5hbWVgID09ICJHZXJtYW55IikgJT4lICBwaXZvdF9sb25nZXIoY29scyA9IDY6NTAsIG5hbWVzX3RvID0gInllYXIiLCB2YWx1ZXNfdG8gPSAiaW52ZXN0bWVudCIpICU+JSANCiAgc2VsZWN0KCJ5ZWFyIiwiaW52ZXN0bWVudCIpICU+JSAgZmlsdGVyKHllYXIgPD0gMjAyMCx5ZWFyID4xOTk5KSANCmludmVzdDMgPC0gdHJhbnNmb3JtKGludmVzdDIseWVhciA9IGFzLm51bWVyaWMoeWVhcikpICAgICAgDQpnZXJfc2F2MyA8LSAgdHJhbnNmb3JtKGdlcl9zYXYyLHllYXIgPSBhcy5udW1lcmljKHllYXIpKSANCg0KZ2dwbG90KGludmVzdDMpICsNCiAgZ2VvbV9iYXIoYWVzKHllYXIsaW52ZXN0bWVudCxmaWxsPSBpbnZlc3RtZW50KSxzdGF0PSJpZGVudGl0eSIpICsNCiAgbGFicyh0aXRsZSA9ICJJbnZlcnNpw7NuICVQSUIiLA0KICAgICAgIHN1YnRpdGxlID0gIkFsZW1hbmlhIDIwMDAtMjAxOSIsDQogICAgICAgeD0gIkHDsW8iLA0KICAgICAgIHkgPSAiJVBJQiIpICsNCiAgZ2VvbV9zbW9vdGgoYWVzKHllYXIsaW52ZXN0bWVudCwgZ3JvdXA9IDEpLCBjb2xvcj0gIlR1cnF1b2lzZSIpKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRleHQueCA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBheGlzLnRleHQueSA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAjIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsPScjMjcyNjM1JykNCiAgKSsNCiAgdGhlbWUoDQogICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuMjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnggPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIyBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbD0nIzI3MjYzNScpDQogICkNCg0KDQpgYGANCg0KIyMjIEPDs2RpZ28NCmBgYHtyIEPDs2RpZ28gSW52ZXJzacOzbiwgZXZhbD0gRkFMU0UsIGVjaG89IFRSVUV9DQppbnZlc3QgPC0gcmVhZF9jc3YoIi4vZGF0b3MvaW52ZXN0bWVudC5jc3YiKSANCmludmVzdDIgPC0gaW52ZXN0ICU+JSBmaWx0ZXIoYEluZGljYXRvciBJZGAgPT0gMzQ1LCBgQ291bnRyeSBOYW1lYCA9PSAiR2VybWFueSIpICU+JSAgcGl2b3RfbG9uZ2VyKGNvbHMgPSA2OjUwLCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImludmVzdG1lbnQiKSAlPiUgDQogIHNlbGVjdCgieWVhciIsImludmVzdG1lbnQiKSAlPiUgIGZpbHRlcih5ZWFyIDw9IDIwMjAseWVhciA+MTk5OSkgDQppbnZlc3QzIDwtIHRyYW5zZm9ybShpbnZlc3QyLHllYXIgPSBhcy5udW1lcmljKHllYXIpKSAgICAgIA0KZ2VyX3NhdjMgPC0gIHRyYW5zZm9ybShnZXJfc2F2Mix5ZWFyID0gYXMubnVtZXJpYyh5ZWFyKSkgDQoNCmdncGxvdChpbnZlc3QzKSArDQogIGdlb21fYmFyKGFlcyh5ZWFyLGludmVzdG1lbnQsZmlsbD0gaW52ZXN0bWVudCksc3RhdD0iaWRlbnRpdHkiKSArDQogIGxhYnModGl0bGUgPSAiSW52ZXJzacOzbiAlUElCIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJBbGVtYW5pYSAyMDAwLTIwMTkiLA0KICAgICAgIHg9ICJBw7FvIiwNCiAgICAgICB5ID0gIiVQSUIiKSArDQogIGdlb21fc21vb3RoKGFlcyh5ZWFyLGludmVzdG1lbnQsIGdyb3VwPSAxKSwgY29sb3I9ICJUdXJxdW9pc2UiKSsNCiAgdGhlbWUoDQogICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuMjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnggPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIyBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbD0nIzI3MjYzNScpDQogICkNCg0KDQpgYGANCg0KIyMgey19DQo8ZGl2IGNsYXNzID0gImNhamEtMSI+DQpFbiBjdWFudG8gYSBsYSBpbnZlcnNpw7NuIHBvZGVtb3MgZGVzdGFjYXIgc3UgZXN0YWJpbGlkYWQgcmVzcGVjdG8gYWwgUElCIGVuIGxvcyDDumx0aW1vcyAyMCBhw7FvcywgbW92acOpbmRvc2UgZW4gdmFsb3JlcyBxdWUgb3NjaWxhbiBlbnRyZSBlbCAxOSUgeSBlbCAyMyUgZGVsIFBJQiBlbiBsb3Mgw7psdGltb3MgMjAgYcOxb3MuIEVuIGVsIDIwMDAgcG9kZW1vcyBvYnNlcnZhciBlbCB2YWxvciBtYXMgYWx0byBkZSBsb3Mgw7psdGltb3MgYcOxb3MsIGVsIG3DrW5pbW8gZXN0w6EgZW4gMjAwNyBjdWFuZG8gY29uIGxhIGxsZWdhZGEgZGUgbGEgY3Jpc2lzLCBsYSBtYXlvcsOtYSBkZSBsYXMgZWNvbm9tw61hcyBldXJvcGVhcyBlbnRyYXJvbiBlbiByZWNlc2nDs24geSBzZSBmcmVuw7MgYnJ1c2NhbWVudGUgbGEgaW52ZXJzacOzbiwgQWxlbWFuaWEgbm8gc2UgdmlvIHRhbiBhZmVjdGFkYSBlbiBlc3RlIHNlbnRpZG8gY29tbyBwb3IgZWplbXBsbyBHcmVjaWEgY3V5YSBpbnZlcnNpw7NuIHBhc28gZGUgdW4gMjYlIGRlbCBQSUIgYSB1biAxMyUgYXByb3hpbWFkYW1lbnRlLg0KPC9kaXY+DQojIyBBaG9ycm8gZSBJbnZlcnNpw7NuIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQojIyMgR3LDoWZpY28NCg0KYGBge3IgR3LDoWZpY28gQWhvcnJvIGUgSW52ZXJzacOzbn0NCmdlcnNhdmludiA8LSBpbm5lcl9qb2luKGludmVzdDMsZ2VyX3NhdjMpICU+JSBzZWxlY3QoaW52ZXN0bWVudCxzYXZpbmdzLCB5ZWFyKSU+JSByZW5hbWUoIkFob3JybyIgPSBzYXZpbmdzLCJJbnZlcnNpw7NuIiA9IGludmVzdG1lbnQpICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDE6MixuYW1lc190byA9ICJ0aXBvIiwgdmFsdWVzX3RvID0gIm4iICkgDQoNCmdncGxvdChnZXJzYXZpbnYsYWVzKHllYXIsbiwgZ3JvdXAgPSB0aXBvLGNvbG9yID0gdGlwbykpICsNCiAgZ2VvbV9saW5lKHNpemUgPSAyKSArDQogIGdlb21fc21vb3RoKHNlID0gRkFMU0UsIG1ldGhvZCA9ICJsbSIsY29sb3IgPSAiYmxhY2siKSArDQogIGxhYnMoeSA9ICIlUElCIiwNCiAgICAgICB4ID0gIkHDsW8iLA0KICAgICAgIHN1YnRpdGxlID0gICJBbGVtYW5pYSAyMDAwLTIwMTkiKSsNCiAgdGhlbWUoDQogICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuMjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnggPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIyBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbD0nIzI3MjYzNScpDQogICkNCmBgYA0KDQojIyMgQ29ycmVsYWNpw7NuDQoNCmBgYHtyIENvcnJlbGFjacOzbiBlbnRyZSBBaG9ycm8gZSBJbnZlcnNpw7NufQ0KDQoNCmdlcnNhdmludjwtaW5uZXJfam9pbihpbnZlc3QzLGdlcl9zYXYzKSAlPiUgc2VsZWN0KGludmVzdG1lbnQsc2F2aW5ncywgeWVhcikNCm0gPC1nZXJzYXZpbnYlPiUgZmlsdGVyKHllYXI+MjAwNikgJT4lIHNlbGVjdChpbnZlc3RtZW50LHNhdmluZ3MpIA0KbjwtY29yKG0sbWV0aG9kPSAicGVhcnNvbiIpDQpjb3JycGxvdChuLA0KICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJudW1iZXIiDQopDQoNCmBgYA0KDQojIyMgQ8OzZGlnbw0KYGBge3IgQ8OzZGlnbyBhIGUgSSBjb3JyLGVjaG89IFRSVUUsIGV2YWw9IEZBTFNFfQ0KZ2Vyc2F2aW52IDwtIGlubmVyX2pvaW4oaW52ZXN0MyxnZXJfc2F2MykgJT4lIHNlbGVjdChpbnZlc3RtZW50LHNhdmluZ3MsIHllYXIpJT4lIHJlbmFtZSgiQWhvcnJvIiA9IHNhdmluZ3MsIkludmVyc2nDs24iID0gaW52ZXN0bWVudCkgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gMToyLG5hbWVzX3RvID0gInRpcG8iLCB2YWx1ZXNfdG8gPSAibiIgKSANCg0KZ2dwbG90KGdlcnNhdmludixhZXMoeWVhcixuLCBncm91cCA9IHRpcG8sY29sb3IgPSB0aXBvKSkgKw0KICBnZW9tX2xpbmUoc2l6ZSA9IDIpICsNCiAgZ2VvbV9zbW9vdGgoc2UgPSBGQUxTRSwgbWV0aG9kID0gImxtIixjb2xvciA9ICJibGFjayIpICsNCiAgbGFicyh5ID0gIiVQSUIiLA0KICAgICAgIHggPSAiQcOxbyIsDQogICAgICAgc3VidGl0bGUgPSAgIkFsZW1hbmlhIDIwMDAtMjAxOSIpKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRleHQueCA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBheGlzLnRleHQueSA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAjIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsPScjMjcyNjM1JykNCiAgKQ0KDQpnZXJzYXZpbnY8LWlubmVyX2pvaW4oaW52ZXN0MyxnZXJfc2F2MykgJT4lIHNlbGVjdChpbnZlc3RtZW50LHNhdmluZ3MsIHllYXIpDQptIDwtZ2Vyc2F2aW52JT4lIGZpbHRlcih5ZWFyPjIwMDYpICU+JSBzZWxlY3QoaW52ZXN0bWVudCxzYXZpbmdzKSANCm48LWNvcihtLG1ldGhvZD0gInBlYXJzb24iKQ0KY29ycnBsb3QobiwNCiAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAibnVtYmVyIg0KKQ0KYGBgDQoNCiMjIHstfQ0KPGRpdiBjbGFzcyA9ICJjYWphLTEiPg0KDQpTaSBvYnNlcnZhbW9zIGFtYmFzIHZhcmlhYmxlcyBlbiB1biBtaXNtbyBncsOhZmljbyBwb2RlbW9zIG9ic2VydmFyIGPDs21vIGVzdGFzIHRpZW5lbiB1biBhbHRvIGdyYWRvIGRlIGNvcnJlbGFjacOzbiosIHNvYnJlIHRvZG8gYSBwYXJ0aXIgZGVsIDIwMDcuIA0KDQoqVXRpbGl6YW5kbyBlbCBtw6l0b2RvIGRlIFBlYXJzb24geSByZXN0cmluZ2llbmRvIGxhcyBvYnNlcnZhY2lvbmVzIGVudHJlIDIwMDYgeSAyMDE5Lg0KPC9kaXY+DQoNCiMjIEJhbGFuemEgQ29tZXJjaWFsIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyBHcsOhZmljbw0KYGBge3IgR3LDoWZpY28gRXhwb3J0YWNpb25lcyBlIEltcG9ydGFjaW9uZXN9DQoNCg0KZXhwb3J0YWNpb25lcyA8LSByZWFkX2NzdigiLi9kYXRvcy9FeHBfZ2VyLmNzdiIpICU+JSAgZHJvcF9uYSgpICU+JSByZW5hbWUoIjIwMDAiID0gYDIwMDAgW1lSMjAwMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMiIgPSBgMjAwMiBbWVIyMDAyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDMiID0gYDIwMDMgW1lSMjAwM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNSIgPSBgMjAwNSBbWVIyMDA1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDYiID0gYDIwMDYgW1lSMjAwNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOCIgPSBgMjAwOCBbWVIyMDA4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiID0gYDIwMDkgW1lSMjAwOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMSIgPSBgMjAxMSBbWVIyMDExXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTIiID0gYDIwMTIgW1lSMjAxMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNCIgPSBgMjAxNCBbWVIyMDE0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUiID0gYDIwMTUgW1lSMjAxNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNyIgPSBgMjAxNyBbWVIyMDE3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTgiID0gYDIwMTggW1lSMjAxOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCkgICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MjQsIG5hbWVzX3RvID0gImHDsW8iLCB2YWx1ZXNfdG8gPSAiZXhwb3J0YWNpb25lcyIpICU+JSANCiAgc2VsZWN0KGHDsW8sZXhwb3J0YWNpb25lcykNCg0KaW1wb3J0YWNpb25lcyA8LSByZWFkX2NzdigiLi9kYXRvcy9JbXBfZ2VyLmNzdiIpICU+JSAgZHJvcF9uYSgpICU+JSByZW5hbWUoIjIwMDAiID0gYDIwMDAgW1lSMjAwMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIgPSBgMjAwMSBbWVIyMDAxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAyIiA9IGAyMDAyIFtZUjIwMDJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDMiID0gYDIwMDMgW1lSMjAwM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNCIgPSBgMjAwNCBbWVIyMDA0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA1IiA9IGAyMDA1IFtZUjIwMDVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDYiID0gYDIwMDYgW1lSMjAwNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNyIgPSBgMjAwNyBbWVIyMDA3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA4IiA9IGAyMDA4IFtZUjIwMDhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiID0gYDIwMDkgW1lSMjAwOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMCIgPSBgMjAxMCBbWVIyMDEwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDExIiA9IGAyMDExIFtZUjIwMTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTIiID0gYDIwMTIgW1lSMjAxMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMyIgPSBgMjAxMyBbWVIyMDEzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE0IiA9IGAyMDE0IFtZUjIwMTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUiID0gYDIwMTUgW1lSMjAxNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNiIgPSBgMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE3IiA9IGAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTgiID0gYDIwMTggW1lSMjAxOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOSIgPSBgMjAxOSBbWVIyMDE5XWApICAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI0LCBuYW1lc190byA9ICJhw7FvIiwgdmFsdWVzX3RvID0gImltcG9ydGFjaW9uZXMiKSAlPiUgDQogIHNlbGVjdChhw7FvLGltcG9ydGFjaW9uZXMpDQoNCg0KaW1wZXhwPC0gaW5uZXJfam9pbihpbXBvcnRhY2lvbmVzLCBleHBvcnRhY2lvbmVzKSAlPiUgbXV0YXRlKGltcG9ydGFjaW9uZXMgPSBpbXBvcnRhY2lvbmVzICogLTEpICU+JSAgIG11dGF0ZShkaWYgPSAoZXhwb3J0YWNpb25lcy0oLTEqaW1wb3J0YWNpb25lcykpKSAlPiUgcGl2b3RfbG9uZ2VyKGNvbHM9IDI6NCxuYW1lc190byA9ICJ0aXBvIix2YWx1ZXNfdG8gPSAibiIpIA0KDQpnZ3Bsb3QoaW1wZXhwKSArDQogIGdlb21fbGluZShhZXMoYcOxbywgbixjb2xvcj0gdGlwbyxncm91cCA9IHRpcG8pLHNpemU9MikgKw0KICBnZW9tX2hsaW5lKGFlcyh5aW50ZXJjZXB0PTApLCBjb2xvciA9JyNDRUNFQ0UnLHNpemUgPSAyKSArDQogIA0KICANCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxKSkgKw0KICBsYWJzKHRpdGxlID0gIkVYUE9SVEFDSU9ORVMsIElNUE9SVEFDSU9ORVMiLA0KICAgICAgIHN1YnRpdGxlID0gIkFsZW1hbmlhIDIwMDAtMjAxOSIsDQogICAgICAgY2FwdGlvbiA9ICJXb3JsZCBCYW5rLCBlbiAkIGFjdHVhbGVzIiwNCiAgICAgICB4ID0gIkHDsW8iLA0KICAgICAgIHk9ICIgIikrDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQpgYGANCg0KDQojIyMgQ8OzZGlnbw0KDQpgYGB7ciBDw7NkaWdvIEV4cG9ydGFjaW9uZXMgZSBJbXBvcnRhY2lvbmVzLCBlY2hvPVRSVUUsIGV2YWwgPSBGQUxTRX0NCg0KDQpleHBvcnRhY2lvbmVzIDwtIHJlYWRfY3N2KCIuL2RhdG9zL0V4cF9nZXIuY3N2IikgJT4lICBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDEiID0gYDIwMDEgW1lSMjAwMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAyIiA9IGAyMDAyIFtZUjIwMDJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDQiID0gYDIwMDQgW1lSMjAwNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA1IiA9IGAyMDA1IFtZUjIwMDVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDciID0gYDIwMDcgW1lSMjAwN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA4IiA9IGAyMDA4IFtZUjIwMDhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTAiID0gYDIwMTAgW1lSMjAxMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDExIiA9IGAyMDExIFtZUjIwMTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTMiID0gYDIwMTMgW1lSMjAxM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE0IiA9IGAyMDE0IFtZUjIwMTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTYiID0gYDIwMTYgW1lSMjAxNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE3IiA9IGAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTkiID0gYDIwMTkgW1lSMjAxOV1gKSAgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gNToyNCwgbmFtZXNfdG8gPSAiYcOxbyIsIHZhbHVlc190byA9ICJleHBvcnRhY2lvbmVzIikgJT4lIA0KICBzZWxlY3QoYcOxbyxleHBvcnRhY2lvbmVzKQ0KDQppbXBvcnRhY2lvbmVzIDwtIHJlYWRfY3N2KCIuL2RhdG9zL0ltcF9nZXIuY3N2IikgJT4lICBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCkgICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MjQsIG5hbWVzX3RvID0gImHDsW8iLCB2YWx1ZXNfdG8gPSAiaW1wb3J0YWNpb25lcyIpICU+JSANCiAgc2VsZWN0KGHDsW8saW1wb3J0YWNpb25lcykNCg0KDQppbXBleHA8LSBpbm5lcl9qb2luKGltcG9ydGFjaW9uZXMsIGV4cG9ydGFjaW9uZXMpICU+JSBtdXRhdGUoaW1wb3J0YWNpb25lcyA9IGltcG9ydGFjaW9uZXMgKiAtMSkgJT4lICAgbXV0YXRlKGRpZiA9IChleHBvcnRhY2lvbmVzLSgtMSppbXBvcnRhY2lvbmVzKSkpICU+JSBwaXZvdF9sb25nZXIoY29scz0gMjo0LG5hbWVzX3RvID0gInRpcG8iLHZhbHVlc190byA9ICJuIikgDQoNCmdncGxvdChpbXBleHApICsNCiAgZ2VvbV9saW5lKGFlcyhhw7FvLCBuLGNvbG9yPSB0aXBvLGdyb3VwID0gdGlwbyksc2l6ZT0yKSArDQogIGdlb21faGxpbmUoYWVzKHlpbnRlcmNlcHQ9MCksY29sb3IgPScjQ0VDRUNFJywgc2l6ZSA9IDIpICsNCiAgDQogIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEpKSArDQogIGxhYnModGl0bGUgPSAiRVhQT1JUQUNJT05FUywgSU1QT1JUQUNJT05FUyIsDQogICAgICAgc3VidGl0bGUgPSAiQWxlbWFuaWEgMjAwMC0yMDE5IiwNCiAgICAgICBjYXB0aW9uID0gIldvcmxkIEJhbmssIGVuICQgYWN0dWFsZXMiLA0KICAgICAgIHggPSAiQcOxbyIsDQogICAgICAgeT0gIiAiKSArDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQpgYGANCiMjIHstfQ0KPGRpdiBjbGFzcyA9ICJjYWphLTEiPg0KTGFzIGV4cG9ydGFjaW9uZXMgbmV0YXMgZGUgQWxlbWFuaWEgaGFuIHNpZG8gcG9zaXRpdmFzIGVuIGxvcyDDumx0aW1vcyAyMCBhw7FvcywgZXMgZGVjaXIsIEFsZW1hbmlhIGV4cG9ydGEgbcOhcyBkZSBsbyBxdWUgaW1wb3J0YS4gUHJvZHVjacOpbmRvc2UgdW4gY3JlY2ltaWVudG8gZGUgbGEgYmFsYW56YSBjb21lcmNpYWwgZGVzZGUgZWwgMjAwMCwgZSBpbmNsdXNvIGR1cmFudGUgbGEgY3Jpc2lzLCBsYSBiYWxhbnphIGNvbWVyY2lhbCBhbGVtYW5hIGFwZW5hcyBoYSB0ZW5pZG8gYWxnw7puIGJhasOzbi4NCkxhIGNyaXNpcyBmaW5hbmNpZXJhIGRlIDIwMDcgYWZlY3RhIGEgQWxlbWFuaWEsIGF1bnF1ZSBlc3TDoSBzZSByZWN1cGVyYSBjb24gbXVjaGEgZmFjaWxpZGFkLiAgUG9kZW1vcyB2ZXIgY29tbyBlbiAyMDA3LCBkaXNtaW51eWVuIGxhcyBpbXBvcnRhY2lvbmVzIGRlYmlkbyBhbCBpbXBhY3RvIGVuIGxhIHJlbnRhLCBsYXMgZXhwb3J0YWNpb25lcyB0YW1iacOpbiBkaXNtaW51eWVuLCBwZXJvIGVuIG1lbm9yIG1lZGlkYSBsbyBxdWUgb2Nhc2lvbmEgdW4gYXVtZW50byBlbiBsYSBiYWxhbnphIGNvbWVyY2lhbC4gRW4gZ2VuZXJhbCBlbCBjb21lcmNpbyBpbnRlcm5hY2lvbmFsIGFsZW3DoW4gZGlzbWludXllLCBwZXJvIGFsIGRpc21pbnVpciBtw6FzIGxhcyBpbXBvcnRhY2lvbmVzIHF1ZSBsYXMgZXhwb3J0YWNpb25lcyBzZSBwcm9kdWNlIHVuYSBtZWpvcmEgZW4gbGEgYmFsYW56YSBjb21lcmNpYWwuIA0KPC9kaXY+DQoNCiMgey19DQoNCg0KDQoNCiMgNC4gQmVuZWZpY2lvcyBkZSBsYSBnbG9iYWxpemFjacOzbiBmaW5hbmNpZXJhIA0KDQojIyBUcmFuc2FjY2lvbmVzIEZpbmFuY2llcmFzIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyBHcsOhZmljbw0KYGBge3IgZ3LDoWZpY28gdHJhbnNhY2Npb25lcyBmaW5hbmNpZXJhc30NCg0KDQpmb3JfYXNzZXRzMDwtIHJlYWRfY3N2KCIuL2RhdG9zL2Zvcl9hc3M1LmNzdiIpDQpmb3JfYXNzZXRzPC0gZm9yX2Fzc2V0czBbLWMoMjo2KSwgXQ0KZ2RwMDwtIHJlYWRfY3N2KCIuL2RhdG9zL2dkcC5jc3YiKQ0KZm9yX2FzczEgPC0gZm9yX2Fzc2V0cyAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI2LG5hbWVzX3RvID0gInllYXIiLCB2YWx1ZXNfdG8gPSAiTmV0IGZvcmVpZ24gYXNzZXRzIChjdXJyZW50IExDVSkiKQ0KZm9yX2FzczIgPC0gZm9yX2FzczEgJT4lIHNlbGVjdCAoIGBDb3VudHJ5IE5hbWVgLHllYXIsYE5ldCBmb3JlaWduIGFzc2V0cyAoY3VycmVudCBMQ1UpYCkgDQpnZHA8LSBnZHAwWy1jKDI6NiksIF0NCmdkcDEgPC0gZ2RwICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MjYsbmFtZXNfdG8gPSAieWVhciIsIHZhbHVlc190byA9ICJHRFAgKGN1cnJlbnQgTENVKSIpDQpnZHAyIDwtIGdkcDEgJT4lIHNlbGVjdCAoYENvdW50cnkgTmFtZWAseWVhciwgYEdEUCAoY3VycmVudCBMQ1UpYCkgDQoNCmZpbmFuX2luYyA8LSBpbm5lcl9qb2luKGdkcDIsZm9yX2FzczIsYnkgPSAieWVhciIpDQpmaW5hbl9pbmMyIDwtIGZpbmFuX2luYyAlPiUgc2VsZWN0KC0iQ291bnRyeSBOYW1lLnkiKQ0KDQoNCmZpbmFuX2luYzMgPC0gZmluYW5faW5jMiAlPiUgbXV0YXRlKGRhdGUgPSBzZXEoZnJvbSA9IGFzLkRhdGUoIjE5OTktMDEtMDEiKSwgdG8gPSBhcy5EYXRlKCIyMDIwLTAxLTAxIiksIGJ5ID0gJ3llYXInKSkgJT4lIHNlbGVjdCgteWVhcikNCmZpbmFuX2luYzQgPC0gZmluYW5faW5jMyAlPiUgbXV0YXRlKGBGaW5hbmNpYWwgaW5jcmVhc2VgID0oIGBOZXQgZm9yZWlnbiBhc3NldHMgKGN1cnJlbnQgTENVKWAvYEdEUCAoY3VycmVudCBMQ1UpYCApKiAxMDApDQoNCg0KZ2dwbG90KGZpbmFuX2luYzQsIGFlcyhkYXRlLGBGaW5hbmNpYWwgaW5jcmVhc2VgICxncm91cD0xKSkgKw0KICBnZW9tX2xpbmUoY29sb3I9InJlZCIpICsNCiAgZ2VvbV9yaWJib24oYWVzKHltaW49MCwgeW1heD1wbWF4KGZpbmFuX2luYzQkYEZpbmFuY2lhbCBpbmNyZWFzZWAsMCkpLCBmaWxsPSJncmVlbiIsIGNvbD0iZ3JlZW4iLCBhbHBoYT0wLjUpKw0KICANCiAgbGFicyh4ID0gIkHDsW8iLA0KICAgICAgIHkgPSAiJSIsIA0KICAgICAgdGl0bGUgPSAiQXVtZW50byBlbiB0cmFuc2FjY2lvbmVzIGZpbmFuY2llcmFzIiwNCiAgICAgIHN1YnRpdGxlID0gIkFsZW1hbmlhIDIwMDAtMjAxOSIpKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRleHQueCA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBheGlzLnRleHQueSA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAjIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsPScjMjcyNjM1JykNCiAgKSsNCiAgdGhlbWUoDQogICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuMjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnggPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIyBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbD0nIzI3MjYzNScpDQogICkNCg0KDQoNCg0KDQpgYGANCg0KDQojIyMgQ8OzZGlnbyANCmBgYHtyIEPDs2RpZ28gdHJhbnNhY2Npb25lcyBmaW5hbmNpZXJhcywgZXZhbCA9IEZBTFNFLCBlY2hvID0gVFJVRX0NCg0KDQpmb3JfYXNzZXRzMDwtIHJlYWRfY3N2KCIuL2RhdG9zL2Zvcl9hc3M1LmNzdiIpDQpmb3JfYXNzZXRzPC0gZm9yX2Fzc2V0czBbLWMoMjo2KSwgXQ0KZ2RwMDwtIHJlYWRfY3N2KCIuL2RhdG9zL2dkcC5jc3YiKQ0KZm9yX2FzczEgPC0gZm9yX2Fzc2V0cyAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI2LG5hbWVzX3RvID0gInllYXIiLCB2YWx1ZXNfdG8gPSAiTmV0IGZvcmVpZ24gYXNzZXRzIChjdXJyZW50IExDVSkiKQ0KZm9yX2FzczIgPC0gZm9yX2FzczEgJT4lIHNlbGVjdCAoIGBDb3VudHJ5IE5hbWVgLHllYXIsYE5ldCBmb3JlaWduIGFzc2V0cyAoY3VycmVudCBMQ1UpYCkgDQpnZHA8LSBnZHAwWy1jKDI6NiksIF0NCmdkcDEgPC0gZ2RwICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MjYsbmFtZXNfdG8gPSAieWVhciIsIHZhbHVlc190byA9ICJHRFAgKGN1cnJlbnQgTENVKSIpDQpnZHAyIDwtIGdkcDEgJT4lIHNlbGVjdCAoYENvdW50cnkgTmFtZWAseWVhciwgYEdEUCAoY3VycmVudCBMQ1UpYCkgDQoNCmZpbmFuX2luYyA8LSBpbm5lcl9qb2luKGdkcDIsZm9yX2FzczIsYnkgPSAieWVhciIpDQpmaW5hbl9pbmMyIDwtIGZpbmFuX2luYyAlPiUgc2VsZWN0KC0iQ291bnRyeSBOYW1lLnkiKQ0KDQoNCmZpbmFuX2luYzMgPC0gZmluYW5faW5jMiAlPiUgbXV0YXRlKGRhdGUgPSBzZXEoZnJvbSA9IGFzLkRhdGUoIjE5OTktMDEtMDEiKSwgdG8gPSBhcy5EYXRlKCIyMDIwLTAxLTAxIiksIGJ5ID0gJ3llYXInKSkgJT4lIHNlbGVjdCgteWVhcikNCmZpbmFuX2luYzQgPC0gZmluYW5faW5jMyAlPiUgbXV0YXRlKGBGaW5hbmNpYWwgaW5jcmVhc2VgID0oIGBOZXQgZm9yZWlnbiBhc3NldHMgKGN1cnJlbnQgTENVKWAvYEdEUCAoY3VycmVudCBMQ1UpYCApKiAxMDApDQoNCg0KZ2dwbG90KGZpbmFuX2luYzQsIGFlcyhkYXRlLGBGaW5hbmNpYWwgaW5jcmVhc2VgICxncm91cD0xKSkgKw0KICBnZW9tX2xpbmUoY29sb3I9InJlZCIpICsNCiAgZ2VvbV9yaWJib24oYWVzKHltaW49MCwgeW1heD1wbWF4KGZpbmFuX2luYzQkYEZpbmFuY2lhbCBpbmNyZWFzZWAsMCkpLCBmaWxsPSJncmVlbiIsIGNvbD0iZ3JlZW4iLCBhbHBoYT0wLjUpKw0KICANCiAgbGFicyh4ID0gIkHDsW8iLA0KICAgICAgIHkgPSAiJSIsIA0KICAgICAgdGl0bGUgPSAiQXVtZW50byBlbiB0cmFuc2FjY2lvbmVzIGZpbmFuY2llcmFzIiwNCiAgICAgIHN1YnRpdGxlID0gIkFsZW1hbmlhIDIwMDAtMjAxOSIpKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRleHQueCA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBheGlzLnRleHQueSA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAjIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsPScjMjcyNjM1JykNCiAgKQ0KDQoNCg0KDQoNCmBgYA0KDQojIyB7LX0NCjxkaXYgY2xhc3MgPSAiY2FqYS0xIj4NCkFsZW1hbmlhIHNlIGJlbmVmaWNpYSBkZSBsYSBnbG9iYWxpemFjacOzbiBpZ3VhbCBxdWUgZWwgcmVzdG8gZGVsIG11bmRvLCBlcyBkZWNpciBjb24gZWwgcGFzbyBkZSBsb3MgYcOxb3MgZWwgbnVtZXJvIGRlIHRyYW5zYWNjaW9uZXMgY29uIGVsIHJlc3RvIGRlbCBtdW5kbyBhdW1lbnRhbiBleHBvbmVuY2lhbG1lbnRlLiBMb3MgZ3JhbmRlcyBhY3RvcmVzIGVuIGVsIGNvbWVyY2lvIGV4dGVyaW9yIGVuIGxhIGVjb25vbcOtYSBhbGVtYW5hIHNvbiBDaGluYSB5IGxvcyBwYcOtc2VzIGRlbCBFc3RlIGRlIEV1cm9wYS4gQWxlbWFuaWEgc2UgYmVuZWZpY2lhIGVub3JtZW1lbnRlIGRlIGxhIGV4cG9ydGFjacOzbiBkZSBtYXF1aW5hcmlhIGEgZXN0b3MgcGHDrXNlcyBxdWUgc2UgZGVzYXJyb2xsYW4gY29uIHJhcGlkZXogeSBxdWUgY29udHJpYnV5ZW4gYWwgY3JlY2ltaWVudG8gZWNvbsOzbWljbyBkZSBBbGVtYW5pYSBjb24gbGFzIGNvbXByYXMgZGUgbWFxdWluYXJpYSBxdWUgcmVhbGl6YW4gbG9zIHNlY3RvcmVzIHByb2R1Y3Rpdm9zIGRlIGVzdG9zIHBhw61zZXMNCjwvZGl2Pg0KIyMgRXhwb3J0YWNpb25lcyBjb24gVUV7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KIyMjIEdyw6FmaWNvDQpgYGB7ciBHcsOhZmljbyBleHBvcnRhY2lvbmVzIGNvbiBVRX0NCm1vbHAgPC0gcmVhZF9jc3YoIi4vZGF0b3MvMTk5My5jc3YiKSAlPiUgIGRyb3BfbmEoKSAlPiUgcmVuYW1lKCIyMDAwIiA9IGAyMDAwIFtZUjIwMDBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAyIiA9IGAyMDAyIFtZUjIwMDJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAzIiA9IGAyMDAzIFtZUjIwMDNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA1IiA9IGAyMDA1IFtZUjIwMDVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA2IiA9IGAyMDA2IFtZUjIwMDZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA4IiA9IGAyMDA4IFtZUjIwMDhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA5IiA9IGAyMDA5IFtZUjIwMDldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDExIiA9IGAyMDExIFtZUjIwMTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEyIiA9IGAyMDEyIFtZUjIwMTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE0IiA9IGAyMDE0IFtZUjIwMTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE1IiA9IGAyMDE1IFtZUjIwMTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE3IiA9IGAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE4IiA9IGAyMDE4IFtZUjIwMThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk5IiA9IGAxOTk5IFtZUjE5OTldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk4IiA9IGAxOTk4IFtZUjE5OThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk3IiA9IGAxOTk3IFtZUjE5OTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk2IiA9IGAxOTk2IFtZUjE5OTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk1IiA9IGAxOTk1IFtZUjE5OTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk0IiA9IGAxOTk0IFtZUjE5OTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkzIiA9IGAxOTkzIFtZUjE5OTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkyIiA9IGAxOTkyIFtZUjE5OTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkxIiA9IGAxOTkxIFtZUjE5OTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkwIiA9IGAxOTkwIFtZUjE5OTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg5IiA9IGAxOTg5IFtZUjE5ODldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg4IiA9IGAxOTg4IFtZUjE5ODhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg3IiA9IGAxOTg3IFtZUjE5ODddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg2IiA9IGAxOTg2IFtZUjE5ODZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg1IiA9IGAxOTg1IFtZUjE5ODVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg0IiA9IGAxOTg0IFtZUjE5ODRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTgzIiA9IGAxOTgzIFtZUjE5ODNdYA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjQxLCBuYW1lc190byA9ICJhw7FvIiwgdmFsdWVzX3RvID0gImV4cG9ydGFjaW9uZXMiKSAlPiUgDQogIHNlbGVjdChhw7FvLGV4cG9ydGFjaW9uZXMpICU+JSAgbXV0YXRlKGV4cG9ydGFjaW9uZXMgPSBleHBvcnRhY2lvbmVzLzEwMDAwMDAwMDAwMCkNCiAgDQphbm5vdGF0aW9uIDwtIGRhdGEuZnJhbWUoDQogIHggPSBjKDExLDE3KSwNCiAgeSA9IGMoNSw3KSwNCiAgbGFiZWwgPSBjKCJDcmVhY2nDs24gZGUgbGEgVUUiLCAiTW9uZWRhIMO6bmljYSIpDQopDQoNCm88LWdncGxvdChtb2xwLGFlcyhhw7FvLCBleHBvcnRhY2lvbmVzLGdyb3VwPTEpKSArIA0KICBnZW9tX3Ntb290aChzZT0gRkFMU0UsIGNvbG9yID0gImdyZWVuIiwgbWV0aG9kID0gImxtIikgKw0KICBnZW9tX2xpbmUoY29sb3IgPSAiZGFya2dyZWVuIixzaXplID0gMS42KSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSkpICsNCiAgbGFicyh0aXRsZSA9ICJFWFBPUlRBQ0lPTkVTIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJBbGVtYW5pYSAxOTgzLTIwMTkiLA0KICAgICAgIGNhcHRpb24gPSAiV29ybGQgQmFuaywgZW4gMTAwIG1pbGwuIGRlICQgYWN0dWFsZXMiLA0KICAgICAgIHggPSAiQcOxbyIsDQogICAgICAgeT0gIiAiKSArDQogIGdlb21fdGV4dChkYXRhPWFubm90YXRpb24sIGFlcyggeD14LCB5PXksIGxhYmVsPWxhYmVsKSwNCiAgICAgICAgICAgIGNvbG9yPSIjQjFFNUYyIiwgDQogICAgICAgICAgICBzaXplPTQgLCBmb250ZmFjZT0iYm9sZCIgKSArDQogICBhbm5vdGF0ZSgic2VnbWVudCIsIHggPSAxNywgeGVuZCA9IDI1LCB5ID0gNSwgeWVuZCA9IDE1LCBjb2xvdXIgPSAicmVkIiwgc2l6ZT0yLCBhbHBoYT0wLjQsIGFycm93PWFycm93KCkpKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnZG90dGVkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuMjUsIGxpbmV0eXBlID0gJ2RvdHRlZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQpvIA0KYGBgDQoNCiMjIyBDw7NkaWdvDQpgYGB7ciBDw7NkaWdvIGV4cG9ydGFjaW9uZXMgY29uIFVFLCBldmFsID0gRkFMU0UsIGVjaG8gPSBUUlVFfQ0KbW9scCA8LSByZWFkX2NzdigiLi9kYXRvcy8xOTkzLmNzdiIpICU+JSAgZHJvcF9uYSgpICU+JSByZW5hbWUoIjIwMDAiID0gYDIwMDAgW1lSMjAwMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDEiID0gYDIwMDEgW1lSMjAwMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDMiID0gYDIwMDMgW1lSMjAwM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDQiID0gYDIwMDQgW1lSMjAwNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDYiID0gYDIwMDYgW1lSMjAwNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDciID0gYDIwMDcgW1lSMjAwN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiID0gYDIwMDkgW1lSMjAwOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTAiID0gYDIwMTAgW1lSMjAxMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTIiID0gYDIwMTIgW1lSMjAxMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTMiID0gYDIwMTMgW1lSMjAxM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUiID0gYDIwMTUgW1lSMjAxNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTYiID0gYDIwMTYgW1lSMjAxNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTgiID0gYDIwMTggW1lSMjAxOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTkiID0gYDIwMTkgW1lSMjAxOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTkiID0gYDE5OTkgW1lSMTk5OV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTgiID0gYDE5OTggW1lSMTk5OF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTciID0gYDE5OTcgW1lSMTk5N11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTYiID0gYDE5OTYgW1lSMTk5Nl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTUiID0gYDE5OTUgW1lSMTk5NV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTQiID0gYDE5OTQgW1lSMTk5NF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTMiID0gYDE5OTMgW1lSMTk5M11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTIiID0gYDE5OTIgW1lSMTk5Ml1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTEiID0gYDE5OTEgW1lSMTk5MV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTAiID0gYDE5OTAgW1lSMTk5MF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5ODkiID0gYDE5ODkgW1lSMTk4OV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5ODgiID0gYDE5ODggW1lSMTk4OF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5ODciID0gYDE5ODcgW1lSMTk4N11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5ODYiID0gYDE5ODYgW1lSMTk4Nl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5ODUiID0gYDE5ODUgW1lSMTk4NV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5ODQiID0gYDE5ODQgW1lSMTk4NF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5ODMiID0gYDE5ODMgW1lSMTk4M11gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6NDEsIG5hbWVzX3RvID0gImHDsW8iLCB2YWx1ZXNfdG8gPSAiZXhwb3J0YWNpb25lcyIpICU+JSANCiAgc2VsZWN0KGHDsW8sZXhwb3J0YWNpb25lcykgJT4lICBtdXRhdGUoZXhwb3J0YWNpb25lcyA9IGV4cG9ydGFjaW9uZXMvMTAwMDAwMDAwMDAwKQ0KICANCmFubm90YXRpb24gPC0gZGF0YS5mcmFtZSgNCiAgeCA9IGMoMTEsMTcpLA0KICB5ID0gYyg1LDcpLA0KICBsYWJlbCA9IGMoIkNyZWFjacOzbiBkZSBsYSBVRSIsICJNb25lZGEgw7puaWNhIikNCikNCg0KbzwtZ2dwbG90KG1vbHAsYWVzKGHDsW8sIGV4cG9ydGFjaW9uZXMsZ3JvdXA9MSkpICsgDQogIGdlb21fc21vb3RoKHNlPSBGQUxTRSwgY29sb3IgPSAiZ3JlZW4iLCBtZXRob2QgPSAibG0iKSArDQogIGdlb21fbGluZShjb2xvciA9ICJkYXJrZ3JlZW4iLHNpemUgPSAxLjYpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxKSkgKw0KICBsYWJzKHRpdGxlID0gIkVYUE9SVEFDSU9ORVMiLA0KICAgICAgIHN1YnRpdGxlID0gIkFsZW1hbmlhIDE5ODMtMjAxOSIsDQogICAgICAgY2FwdGlvbiA9ICJXb3JsZCBCYW5rLCBlbiAxMDAgbWlsbC4gZGUgJCBhY3R1YWxlcyIsDQogICAgICAgeCA9ICJBw7FvIiwNCiAgICAgICB5PSAiICIpICsNCiAgZ2VvbV90ZXh0KGRhdGE9YW5ub3RhdGlvbiwgYWVzKCB4PXgsIHk9eSwgbGFiZWw9bGFiZWwpLA0KICAgICAgICAgICAgY29sb3I9IiNCMUU1RjIiLCANCiAgICAgICAgICAgIHNpemU9NCAsIGZvbnRmYWNlPSJib2xkIiApICsNCiAgIGFubm90YXRlKCJzZWdtZW50IiwgeCA9IDE3LCB4ZW5kID0gMjUsIHkgPSA1LCB5ZW5kID0gMTUsIGNvbG91ciA9ICJyZWQiLCBzaXplPTIsIGFscGhhPTAuNCwgYXJyb3c9YXJyb3coKSkrDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdkb3R0ZWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnggPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIyBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbD0nIzI3MjYzNScpDQogICkNCm8gDQpgYGANCg0KDQoNCiMjIHstfQ0KPGRpdiBjbGFzcyA9ICJjYWphLTEiPg0KRW4gZWwgY2FzbyBjb25jcmV0byBkZSBBbGVtYW5pYSwgc2kgaGFibGFtb3MgZGUgZ2xvYmFsaXphY2nDs24gZmluYW5jaWVyYSwgbm8gbm9zIHBvZGVtb3Mgb2x2aWRhciBkZSBsYSBjcmVhY2nDs24gZGUgbGEgVW5pw7NuIEV1cm9wZWEgeSBkZSBsYSBwb3N0ZXJpb3IgY3JlYWNpw7NuIGRlIHVuYSBtb25lZGEgw7puaWNhLCBlbCBFdXJvLiBDb21vIHBvZGVtb3MgdmVyIGVuIGVsIGdyw6FmaWNvLCB0cmFzIGxhIGludHJvZHVjY2nDs24gZGVsIEV1cm8gYSBsYSBlY29ub23DrWEgZXVyb3BlYSwgbGFzIGV4cG9ydGFjaW9uZXMgYWxlbWFuYXMgY3JlY2VuIGRlIG1hbmVyYSBub3RvcmlhLCBlc3RvIGVzIGRlYmlkbyBhIGxhIGVsaW1pbmFjacOzbiBkZSBiYXJyZXJhcyBhcmFuY2VsYXJpYXMgeSBsYSBpbnRlZ3JhY2nDs24gY29tZXJjaWFsIHF1ZSBzdWZyZSBFdXJvcGEgZW4gZWwgMjAwMCwgbGEgaW50cm9kdWNjacOzbiBkZWwgZXVybyBmYWNpbGl0YSBsYXMgdHJhbnNhY2Npb25lcyBpbnRyYSBldXJvcGVhcyBkZWJpZG8gYSBxdWUgeWEgbm8gaGF5IHF1ZSByZWFsaXphciB1biBjYW1iaW8gZGUgbW9uZWRhIHkgc2UgZWxpbWluYW4gY29zdGVzIGRlIHRyYW5zYWNjacOzbi4gIEFsZW1hbmlhIHBhc2EgYSBzZXIgZWwgcmVmZXJlbnRlIGV1cm9wZW8geSBzZSBlc3BlY2lhbGl6YSBlbiBleHBvcnRhY2nDs24gZGUgYmllbmVzIGRlIGFsdG8gdmFsb3IgYcOxYWRpZG8uDQo8L2Rpdj4NCg0KDQojIDUuIEJhbGFuemEgZGUgcGFnb3MgeSBkZXVkYSBzb2JlcmFuYSANCiMjIEJhbGFuemEgZGUgcGFnb3Mgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KDQojIyMgR3LDoWZpY28NCmBgYHtyIEdyw6FmaWNvIEJhbGFuemEgZGUgcGFnb3N9DQoNCmN0YWNhcCA8LSByZWFkX2NzdigiLi9kYXRvcy9jdGEtY2FwaXRhbC5jc3YiKSAlPiUgIGRyb3BfbmEoKSAlPiUgcmVuYW1lKCIyMDAwIiA9IGAyMDAwIFtZUjIwMDBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAyIiA9IGAyMDAyIFtZUjIwMDJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAzIiA9IGAyMDAzIFtZUjIwMDNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA1IiA9IGAyMDA1IFtZUjIwMDVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA2IiA9IGAyMDA2IFtZUjIwMDZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA4IiA9IGAyMDA4IFtZUjIwMDhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA5IiA9IGAyMDA5IFtZUjIwMDldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDExIiA9IGAyMDExIFtZUjIwMTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEyIiA9IGAyMDEyIFtZUjIwMTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE0IiA9IGAyMDE0IFtZUjIwMTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE1IiA9IGAyMDE1IFtZUjIwMTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE3IiA9IGAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE4IiA9IGAyMDE4IFtZUjIwMThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCkgICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IDU6MjQsIG5hbWVzX3RvID0gInllYXIiLCB2YWx1ZXNfdG8gPSAiY3RhY2FwIikgJT4lIA0KICBzZWxlY3QoeWVhcixjdGFjYXApDQoNCg0KYnBjZ2VyIDwtIHJlYWRfY3N2KCIuL2RhdG9zL2JwYy5jc3YiKQ0KDQpicGNnZXIyIDwtIGJwY2dlciAlPiUgZHJvcF9uYSgpICU+JSByZW5hbWUoIjIwMDAiID0gYDIwMDAgW1lSMjAwMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDEiID0gYDIwMDEgW1lSMjAwMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDMiID0gYDIwMDMgW1lSMjAwM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDQiID0gYDIwMDQgW1lSMjAwNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDYiID0gYDIwMDYgW1lSMjAwNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDciID0gYDIwMDcgW1lSMjAwN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiID0gYDIwMDkgW1lSMjAwOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTAiID0gYDIwMTAgW1lSMjAxMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTIiID0gYDIwMTIgW1lSMjAxMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTMiID0gYDIwMTMgW1lSMjAxM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUiID0gYDIwMTUgW1lSMjAxNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTYiID0gYDIwMTYgW1lSMjAxNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTgiID0gYDIwMTggW1lSMjAxOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTkiID0gYDIwMTkgW1lSMjAxOV1gKSAgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gNToyNCwgbmFtZXNfdG8gPSAieWVhciIsIHZhbHVlc190byA9ICJicGMiKSAlPiUgDQogIHNlbGVjdCh5ZWFyLGJwYykNCmN0YWZpbiA8LSByZWFkX2NzdigiLi9kYXRvcy9jdGEtZmluYW5jaWVyYS5jc3YiKSAlPiUgIGRyb3BfbmEoKSAlPiUgcmVuYW1lKCIyMDAwIiA9IGAyMDAwIFtZUjIwMDBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAyIiA9IGAyMDAyIFtZUjIwMDJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAzIiA9IGAyMDAzIFtZUjIwMDNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA1IiA9IGAyMDA1IFtZUjIwMDVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA2IiA9IGAyMDA2IFtZUjIwMDZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA4IiA9IGAyMDA4IFtZUjIwMDhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA5IiA9IGAyMDA5IFtZUjIwMDldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDExIiA9IGAyMDExIFtZUjIwMTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEyIiA9IGAyMDEyIFtZUjIwMTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE0IiA9IGAyMDE0IFtZUjIwMTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE1IiA9IGAyMDE1IFtZUjIwMTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE3IiA9IGAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE4IiA9IGAyMDE4IFtZUjIwMThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCkgICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MjQsIG5hbWVzX3RvID0gInllYXIiLCB2YWx1ZXNfdG8gPSAiY3RhZmluIikgJT4lIA0KICBzZWxlY3QoeWVhcixjdGFmaW4pDQoNCmN0YXJlcyA8LSByZWFkX2NzdigiLi9kYXRvcy9jdGEtcmVzLmNzdiIpICU+JSAgZHJvcF9uYSgpICU+JSByZW5hbWUoIjIwMDAiID0gYDIwMDAgW1lSMjAwMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDEiID0gYDIwMDEgW1lSMjAwMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDMiID0gYDIwMDMgW1lSMjAwM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDQiID0gYDIwMDQgW1lSMjAwNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDYiID0gYDIwMDYgW1lSMjAwNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDciID0gYDIwMDcgW1lSMjAwN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiID0gYDIwMDkgW1lSMjAwOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTAiID0gYDIwMTAgW1lSMjAxMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTIiID0gYDIwMTIgW1lSMjAxMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTMiID0gYDIwMTMgW1lSMjAxM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUiID0gYDIwMTUgW1lSMjAxNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTYiID0gYDIwMTYgW1lSMjAxNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTgiID0gYDIwMTggW1lSMjAxOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTkiID0gYDIwMTkgW1lSMjAxOV1gKSAgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gNToyNCwgbmFtZXNfdG8gPSAieWVhciIsIHZhbHVlc190byA9ICJjdGFyZXMiKSAlPiUgDQogIHNlbGVjdCh5ZWFyLGN0YXJlcykNCg0KDQoNCg0KDQpjdGFlcnIgPC0gcmVhZF9jc3YoIi4vZGF0b3MvY3RhLWVycm9yZXMuY3N2IikgJT4lICBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIgPSBgMjAwMSBbWVIyMDAxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMiIgPSBgMjAwMiBbWVIyMDAyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNCIgPSBgMjAwNCBbWVIyMDA0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNSIgPSBgMjAwNSBbWVIyMDA1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNyIgPSBgMjAwNyBbWVIyMDA3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOCIgPSBgMjAwOCBbWVIyMDA4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMCIgPSBgMjAxMCBbWVIyMDEwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMSIgPSBgMjAxMSBbWVIyMDExXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMyIgPSBgMjAxMyBbWVIyMDEzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNCIgPSBgMjAxNCBbWVIyMDE0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNiIgPSBgMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNyIgPSBgMjAxNyBbWVIyMDE3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOSIgPSBgMjAxOSBbWVIyMDE5XWApICAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI0LCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImN0YWVyciIpICU+JSANCiAgc2VsZWN0KHllYXIsY3RhZXJyKQ0KDQoNCg0KY3RhcGF5IDwtIGlubmVyX2pvaW4oYnBjZ2VyMixjdGFjYXApDQoNCmN0YXBheTIgPC0gaW5uZXJfam9pbihjdGFwYXksY3RhZXJyKQ0KDQpjdGFwYXkzIDwtIGlubmVyX2pvaW4oY3RhcGF5MixjdGFmaW4pDQoNCmN0YXBheTQgPC0gaW5uZXJfam9pbihjdGFwYXkzLGN0YXJlcykNCg0KDQpjdGFwYXk1IDwtIGN0YXBheTQgJT4lICBtdXRhdGUoYnBjID0gKGJwYyooLTEpKS8xMDAwMDAwMDAwMCApICU+JSBtdXRhdGUoY3RhZmluID0gKGN0YWZpbi8xMDAwMDAwMDAwMCApKSU+JSBtdXRhdGUoY3RhY2FwID0gKGN0YWNhcC8xMDAwMDAwMDAwICkpJT4lICBzZWxlY3QoeWVhcixicGMsY3RhY2FwLGN0YWZpbikgJT4lIHJlbmFtZSgiQmFsYW56YSBwb3IgQ3VlbnRhIENvcnJpZW50ZSIgPSAiYnBjIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkN1ZW50YSBGaW5hbmNpZXJhIiA9ICJjdGFmaW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDdWVudGEgZGUgQ2FwaXRhbCIgPSAiY3RhY2FwIikgJT4lICANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAyOjQsIG5hbWVzX3RvID0gImN0YSIpICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCg0KDQpnIDwtIGdncGxvdChjdGFwYXk1LCBhZXMoeD15ZWFyLCB5PXZhbHVlLCBmaWxsPWN0YSxncm91cD1jdGEpKSArIA0KICBnZW9tX2Jhcihwb3NpdGlvbj0ic3RhY2siLCBzdGF0PSJpZGVudGl0eSIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxKSkgKw0KICBnZ3RpdGxlKCJCYWxhbnphIGRlIFBhZ29zIikgKw0KICB4bGFiKCJBw7FvIikgICArIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSkgKw0KICB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRleHQueCA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBheGlzLnRleHQueSA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAjIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsPScjMjcyNjM1JykNCiAgKQ0KICANCg0KZw0KDQpgYGANCg0KIyMjIEPDs2RpZ28gDQpgYGB7ciBDw7NkaWdvIEJhbGFuemEgZGUgcGFnb3MsIGVjaG89IFRSVUUsIGV2YWw9IEZBTFNFfQ0KY3RhY2FwIDwtIHJlYWRfY3N2KCIuL2RhdG9zL2N0YS1jYXBpdGFsLmNzdiIpICU+JSAgZHJvcF9uYSgpICU+JSByZW5hbWUoIjIwMDAiID0gYDIwMDAgW1lSMjAwMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDEiID0gYDIwMDEgW1lSMjAwMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDMiID0gYDIwMDMgW1lSMjAwM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDQiID0gYDIwMDQgW1lSMjAwNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDYiID0gYDIwMDYgW1lSMjAwNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDciID0gYDIwMDcgW1lSMjAwN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiID0gYDIwMDkgW1lSMjAwOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTAiID0gYDIwMTAgW1lSMjAxMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTIiID0gYDIwMTIgW1lSMjAxMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTMiID0gYDIwMTMgW1lSMjAxM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUiID0gYDIwMTUgW1lSMjAxNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTYiID0gYDIwMTYgW1lSMjAxNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTgiID0gYDIwMTggW1lSMjAxOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTkiID0gYDIwMTkgW1lSMjAxOV1gKSAgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gNToyNCwgbmFtZXNfdG8gPSAieWVhciIsIHZhbHVlc190byA9ICJjdGFjYXAiKSAlPiUgDQogIHNlbGVjdCh5ZWFyLGN0YWNhcCkNCg0KDQpicGNnZXIgPC0gcmVhZF9jc3YoIi4vZGF0b3MvYnBjLmNzdiIpDQoNCmJwY2dlcjIgPC0gYnBjZ2VyICU+JSBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIgPSBgMjAwMSBbWVIyMDAxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMiIgPSBgMjAwMiBbWVIyMDAyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNCIgPSBgMjAwNCBbWVIyMDA0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNSIgPSBgMjAwNSBbWVIyMDA1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNyIgPSBgMjAwNyBbWVIyMDA3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOCIgPSBgMjAwOCBbWVIyMDA4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMCIgPSBgMjAxMCBbWVIyMDEwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMSIgPSBgMjAxMSBbWVIyMDExXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMyIgPSBgMjAxMyBbWVIyMDEzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNCIgPSBgMjAxNCBbWVIyMDE0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNiIgPSBgMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNyIgPSBgMjAxNyBbWVIyMDE3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOSIgPSBgMjAxOSBbWVIyMDE5XWApICAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI0LCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImJwYyIpICU+JSANCiAgc2VsZWN0KHllYXIsYnBjKQ0KY3RhZmluIDwtIHJlYWRfY3N2KCIuL2RhdG9zL2N0YS1maW5hbmNpZXJhLmNzdiIpICU+JSAgZHJvcF9uYSgpICU+JSByZW5hbWUoIjIwMDAiID0gYDIwMDAgW1lSMjAwMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDEiID0gYDIwMDEgW1lSMjAwMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDMiID0gYDIwMDMgW1lSMjAwM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDQiID0gYDIwMDQgW1lSMjAwNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDYiID0gYDIwMDYgW1lSMjAwNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDciID0gYDIwMDcgW1lSMjAwN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiID0gYDIwMDkgW1lSMjAwOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTAiID0gYDIwMTAgW1lSMjAxMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTIiID0gYDIwMTIgW1lSMjAxMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTMiID0gYDIwMTMgW1lSMjAxM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUiID0gYDIwMTUgW1lSMjAxNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTYiID0gYDIwMTYgW1lSMjAxNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTgiID0gYDIwMTggW1lSMjAxOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTkiID0gYDIwMTkgW1lSMjAxOV1gKSAgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gNToyNCwgbmFtZXNfdG8gPSAieWVhciIsIHZhbHVlc190byA9ICJjdGFmaW4iKSAlPiUgDQogIHNlbGVjdCh5ZWFyLGN0YWZpbikNCg0KY3RhcmVzIDwtIHJlYWRfY3N2KCIuL2RhdG9zL2N0YS1yZXMuY3N2IikgJT4lICBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIgPSBgMjAwMSBbWVIyMDAxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMiIgPSBgMjAwMiBbWVIyMDAyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNCIgPSBgMjAwNCBbWVIyMDA0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNSIgPSBgMjAwNSBbWVIyMDA1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNyIgPSBgMjAwNyBbWVIyMDA3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOCIgPSBgMjAwOCBbWVIyMDA4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMCIgPSBgMjAxMCBbWVIyMDEwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMSIgPSBgMjAxMSBbWVIyMDExXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMyIgPSBgMjAxMyBbWVIyMDEzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNCIgPSBgMjAxNCBbWVIyMDE0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNiIgPSBgMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNyIgPSBgMjAxNyBbWVIyMDE3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOSIgPSBgMjAxOSBbWVIyMDE5XWApICAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI0LCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImN0YXJlcyIpICU+JSANCiAgc2VsZWN0KHllYXIsY3RhcmVzKQ0KDQoNCg0KDQoNCmN0YWVyciA8LSByZWFkX2NzdigiLi9kYXRvcy9jdGEtZXJyb3Jlcy5jc3YiKSAlPiUgIGRyb3BfbmEoKSAlPiUgcmVuYW1lKCIyMDAwIiA9IGAyMDAwIFtZUjIwMDBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAyIiA9IGAyMDAyIFtZUjIwMDJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAzIiA9IGAyMDAzIFtZUjIwMDNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA1IiA9IGAyMDA1IFtZUjIwMDVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA2IiA9IGAyMDA2IFtZUjIwMDZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA4IiA9IGAyMDA4IFtZUjIwMDhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA5IiA9IGAyMDA5IFtZUjIwMDldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDExIiA9IGAyMDExIFtZUjIwMTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEyIiA9IGAyMDEyIFtZUjIwMTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE0IiA9IGAyMDE0IFtZUjIwMTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE1IiA9IGAyMDE1IFtZUjIwMTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE3IiA9IGAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE4IiA9IGAyMDE4IFtZUjIwMThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCkgICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MjQsIG5hbWVzX3RvID0gInllYXIiLCB2YWx1ZXNfdG8gPSAiY3RhZXJyIikgJT4lIA0KICBzZWxlY3QoeWVhcixjdGFlcnIpDQoNCg0KDQpjdGFwYXkgPC0gaW5uZXJfam9pbihicGNnZXIyLGN0YWNhcCkNCg0KY3RhcGF5MiA8LSBpbm5lcl9qb2luKGN0YXBheSxjdGFlcnIpDQoNCmN0YXBheTMgPC0gaW5uZXJfam9pbihjdGFwYXkyLGN0YWZpbikNCg0KY3RhcGF5NCA8LSBpbm5lcl9qb2luKGN0YXBheTMsY3RhcmVzKQ0KDQoNCmN0YXBheTUgPC0gY3RhcGF5NCAlPiUgIG11dGF0ZShicGMgPSAoYnBjKigtMSkpLzEwMDAwMDAwMDAwICkgJT4lIG11dGF0ZShjdGFmaW4gPSAoY3RhZmluLzEwMDAwMDAwMDAwICkpJT4lIG11dGF0ZShjdGFjYXAgPSAoY3RhY2FwLzEwMDAwMDAwMDAgKSklPiUgIHNlbGVjdCh5ZWFyLGJwYyxjdGFjYXAsY3RhZmluKSAlPiUgcmVuYW1lKCJCYWxhbnphIHBvciBDdWVudGEgQ29ycmllbnRlIiA9ICJicGMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ3VlbnRhIEZpbmFuY2llcmEiID0gImN0YWZpbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkN1ZW50YSBkZSBDYXBpdGFsIiA9ICJjdGFjYXAiKSAlPiUgIA0KICBwaXZvdF9sb25nZXIoY29scyA9IDI6NCwgbmFtZXNfdG8gPSAiY3RhIikgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KDQoNCmcgPC0gZ2dwbG90KGN0YXBheTUsIGFlcyh4PXllYXIsIHk9dmFsdWUsIGZpbGw9Y3RhLGdyb3VwPWN0YSkpICsgDQogIGdlb21fYmFyKHBvc2l0aW9uPSJzdGFjayIsIHN0YXQ9ImlkZW50aXR5IikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEpKSArDQogIGdndGl0bGUoIkJhbGFuemEgZGUgUGFnb3MiKSArDQogIHhsYWIoIkHDsW8iKSAgICsgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpKSArDQogIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkrDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQogIA0KDQpnDQoNCg0KYGBgDQoNCg0KDQoNCiMjIHstfQ0KPGRpdiBjbGFzcyA9ICJjYWphLTEiPg0KTGEgYmFsYW56YSBkZSBwYWdvcyBlc3TDoSBjb21wdWVzdGEgcG9yIGxhIHN1bWEgZGU6DQoNCjEuCUxhIGJhbGFuemEgcG9yIGN1ZW50YSBjb3JyaWVudGUNCg0KMi4JTGEgY3VlbnRhIGRlIGNhcGl0YWwNCg0KMy4JTGEgY3VlbnRhIGZpbmFuY2llcmEuDQo8L2Rpdj4NCg0KIyMgQmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KIyMjIEdyw6FmaWNvIDENCmBgYHtyIEdyw6FmaWNvIGJhbGFuemEgcG9yIGN1ZW50YSBjb3JyaWVudGUgdnB9DQoNCg0KYmNjPC0gcmVhZF9jc3YoIi4vZGF0b3MvYmNjLmNzdiIpDQpiY2MxPC0gYmNjICU+JSBzZWxlY3QoTE9DQVRJT04sIFRJTUUsVmFsdWUpICU+JSBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gTE9DQVRJT04sIHZhbHVlc19mcm9tID0gVmFsdWUpDQpiY2MyIDwtIGJjYzEgJT4lIHNlbGVjdChUSU1FLCBVU0EsIENITiwgRVNQLCBKUE4sR0JSLEFSRyxERVUpICAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSAyOjgsIG5hbWVzX3RvID0gImNvdW50cnkiLCB2YWx1ZXNfdG8gPSAiYmNjIiklPiUgZHJvcF9uYSgpDQoNCmJjYzMgPC0gYmNjMSAlPiUgc2VsZWN0KFRJTUUsREVVKSAlPiUgZHJvcF9uYSgpICU+JSByZW5hbWUoeWVhciA9IFRJTUUpDQoNCg0KDQoNCg0KDQpwIDwtZ2dwbG90KGJjYzIsIGFlcyhUSU1FLCBiY2MsZ3JvdXAgPSBjb3VudHJ5LGNvbG9yID0gY291bnRyeSApKSArDQogIGdlb21fbGluZShhZXMoY29sb3IgPSBjb3VudHJ5KSkgKw0KICBnZW9tX3BvaW50KCkrDQogIGdnaGlnaGxpZ2h0KG1heChiY2MpID4gNykrDQogIA0KICAjdGhlbWUoYXhpcy50aXRsZS55PWVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgI2F4aXMudGV4dC55PWVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgI2F4aXMudGlja3MueT1lbGVtZW50X2JsYW5rKCkpKw0KICAgDQogIGxhYnMoeCA9ICJBw7FvIiwgDQogICAgICAgdGl0bGUgPSAiQmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSIsDQogICAgICAgeT0iJVBJQiINCiAgICAgICxzdWJ0aXRsZSA9ICJBbGVtYW5pYSAyMDAwLTIwMTkiKSArDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQogICNmYWNldF9ncmlkKHJvd3MgPSB2YXJzKGNvdW50cnkpLHNjYWxlcyA9ICJmcmVlIikgDQpwDQoNCg0KYGBgDQoNCiMjIyBHcsOhZmljbyAyDQpgYGB7ciBHcsOhZmljbyBCYWxhbnphIFBvciBDdWVudGEgQ29ycmllbnRlfQ0KDQoNCg0KDQpicGNnZXIgPC0gcmVhZF9jc3YoIi4vZGF0b3MvYnBjLmNzdiIpDQoNCmJwY2dlcjIgPC0gYnBjZ2VyICU+JSBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIgPSBgMjAwMSBbWVIyMDAxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMiIgPSBgMjAwMiBbWVIyMDAyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNCIgPSBgMjAwNCBbWVIyMDA0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNSIgPSBgMjAwNSBbWVIyMDA1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNyIgPSBgMjAwNyBbWVIyMDA3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOCIgPSBgMjAwOCBbWVIyMDA4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMCIgPSBgMjAxMCBbWVIyMDEwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMSIgPSBgMjAxMSBbWVIyMDExXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMyIgPSBgMjAxMyBbWVIyMDEzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNCIgPSBgMjAxNCBbWVIyMDE0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNiIgPSBgMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNyIgPSBgMjAxNyBbWVIyMDE3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOSIgPSBgMjAxOSBbWVIyMDE5XWApICAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI0LCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImJwYyIpICU+JSANCiAgc2VsZWN0KHllYXIsYnBjKQ0KDQoNCmdncGxvdChicGNnZXIyKSArDQogIGdlb21fbGluZShhZXMoeWVhciwgYnBjLGdyb3VwID0gMSksY29sb3I9ICJ0dXJxdW9pc2UiKSArDQogIGdlb21fc21vb3RoKGFlcyh5ZWFyLCBicGMsZ3JvdXAgPSAxKSxjb2xvcj0gInR1cnF1b2lzZSIpKw0KICAjZ2VvbV9zbW9vdGgoYWVzKHllYXIsIGN0YWNhcCxncm91cCA9IDEpLGNvbG9yPSAiYmx1ZSIpKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEpKSArDQogIGxhYnModGl0bGUgPSAiQmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSIsDQogICAgICAgc3VidGl0bGUgPSAiQWxlbWFuaWEgMjAwMC0yMDE5IiwNCiAgICAgICB5ID0gIiQiLA0KICAgICAgIHggPSAiQcOxbyIpKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRleHQueCA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBheGlzLnRleHQueSA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAjIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsPScjMjcyNjM1JykNCiAgKQ0KYGBgDQoNCiMjIyBDw7NkaWdvIDENCmBgYHtyIEPDs2RpZ28gYmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSB2cCwgZWNobz0gVFJVRSwgZXZhbD0gRkFMU0V9DQoNCg0KYmNjPC0gcmVhZF9jc3YoIi4vZGF0b3MvYmNjLmNzdiIpDQpiY2MxPC0gYmNjICU+JSBzZWxlY3QoTE9DQVRJT04sIFRJTUUsVmFsdWUpICU+JSBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gTE9DQVRJT04sIHZhbHVlc19mcm9tID0gVmFsdWUpDQpiY2MyIDwtIGJjYzEgJT4lIHNlbGVjdChUSU1FLCBVU0EsIENITiwgRVNQLCBKUE4sR0JSLEFSRyxERVUpICAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSAyOjgsIG5hbWVzX3RvID0gImNvdW50cnkiLCB2YWx1ZXNfdG8gPSAiYmNjIiklPiUgZHJvcF9uYSgpDQoNCmJjYzMgPC0gYmNjMSAlPiUgc2VsZWN0KFRJTUUsREVVKSAlPiUgZHJvcF9uYSgpICU+JSByZW5hbWUoeWVhciA9IFRJTUUpDQoNCg0KDQoNCg0KDQpwIDwtZ2dwbG90KGJjYzIsIGFlcyhUSU1FLCBiY2MsZ3JvdXAgPSBjb3VudHJ5LGNvbG9yID0gY291bnRyeSApKSArDQogIGdlb21fbGluZShhZXMoY29sb3IgPSBjb3VudHJ5KSkgKw0KICBnZW9tX3BvaW50KCkrDQogIGdnaGlnaGxpZ2h0KG1heChiY2MpID4gNykrDQogIA0KICAjdGhlbWUoYXhpcy50aXRsZS55PWVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgI2F4aXMudGV4dC55PWVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgI2F4aXMudGlja3MueT1lbGVtZW50X2JsYW5rKCkpKw0KICAgDQogIGxhYnMoeCA9ICJBw7FvIiwgDQogICAgICAgdGl0bGUgPSAiQmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSIsDQogICAgICAgeT0iJVBJQiINCiAgICAgICxzdWJ0aXRsZSA9ICJBbGVtYW5pYSAyMDAwLTIwMTkiKSArDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQogICNmYWNldF9ncmlkKHJvd3MgPSB2YXJzKGNvdW50cnkpLHNjYWxlcyA9ICJmcmVlIikgDQpwDQoNCg0KYGBgDQoNCg0KIyMjIEPDs2RpZ28gMg0KYGBge3IgQ8OzZGlnbyBCYWxhbnphIFBvciBDdWVudGEgQ29ycmllbnRlLCBlY2hvPSBUUlVFLCBldmFsID0gRkFMU0V9DQoNCg0KDQoNCmJwY2dlciA8LSByZWFkX2NzdigiLi9kYXRvcy9icGMuY3N2IikNCg0KYnBjZ2VyMiA8LSBicGNnZXIgJT4lIGRyb3BfbmEoKSAlPiUgcmVuYW1lKCIyMDAwIiA9IGAyMDAwIFtZUjIwMDBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAyIiA9IGAyMDAyIFtZUjIwMDJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAzIiA9IGAyMDAzIFtZUjIwMDNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA1IiA9IGAyMDA1IFtZUjIwMDVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA2IiA9IGAyMDA2IFtZUjIwMDZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA4IiA9IGAyMDA4IFtZUjIwMDhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA5IiA9IGAyMDA5IFtZUjIwMDldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDExIiA9IGAyMDExIFtZUjIwMTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEyIiA9IGAyMDEyIFtZUjIwMTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE0IiA9IGAyMDE0IFtZUjIwMTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE1IiA9IGAyMDE1IFtZUjIwMTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE3IiA9IGAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE4IiA9IGAyMDE4IFtZUjIwMThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCkgICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MjQsIG5hbWVzX3RvID0gInllYXIiLCB2YWx1ZXNfdG8gPSAiYnBjIikgJT4lIA0KICBzZWxlY3QoeWVhcixicGMpDQoNCg0KZ2dwbG90KGJwY2dlcjIpICsNCiAgZ2VvbV9saW5lKGFlcyh5ZWFyLCBicGMsZ3JvdXAgPSAxKSxjb2xvcj0gInR1cnF1b2lzZSIpICsNCiAgZ2VvbV9zbW9vdGgoYWVzKHllYXIsIGJwYyxncm91cCA9IDEpLGNvbG9yPSAidHVycXVvaXNlIikrDQogICNnZW9tX3Ntb290aChhZXMoeWVhciwgY3RhY2FwLGdyb3VwID0gMSksY29sb3I9ICJibHVlIikrDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSkpICsNCiAgbGFicyh0aXRsZSA9ICJCYWxhbnphIHBvciBjdWVudGEgY29ycmllbnRlIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJBbGVtYW5pYSAyMDAwLTIwMTkiLA0KICAgICAgIHkgPSAiJCIsDQogICAgICAgeCA9ICJBw7FvIikrDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQogIA0KYGBgDQoNCiMjIHstfQ0KPGRpdiBjbGFzcyA9ICJjYWphLTEiPg0KQ29tbyBwb2RlbW9zIHZlciBlbiBlbCBncsOhZmljbyAxLCBsYSBiYWxhbnphIHBvciBjdWVudGEgY29ycmllbnRlIGRlIEFsZW1hbmlhIGhhIHNpZG8gZGUgbGFzIG3DoXMgYWx0YXMsIGNvbXBhcmFkbyBjb24gcGHDrXNlcyBjb21vIENoaW5hLCBFRS4gVVUuLCBKYXDDs24sIEFyZ2VudGluYSBvIFJlaW5vIFVuaWRvLiBIYSBhdW1lbnRhZG8gbm90b3JpYW1lbnRlIHRyYXMgbGEgY3Jpc2lzIGRlIDIwMDcuIFRpZW5lIHVuYSB0ZW5kZW5jaWEgYXNjZW5kZW50ZSBhIGxhcmdvIHBsYXpvLCBhIGNvcnRvIHBsYXpvIHNlIHB1ZWRlIG9ic2VydmFyIGVsIGVmZWN0byBkZSBsYXMgcmVjZXNpb25lcywgYXVucXVlIGFsIGlndWFsIHF1ZSBlbCBQSUIsIHNlIHJlY3VwZXJhIHLDoXBpZG8geSB2dWVsdmUgYSB2YWxvcmVzIHByZWNyaXNpcy4NCg0KTGEgQmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSBlcyB1bm8gZGUgbG9zIGluZGljYWRvcmVzIG1hY3JvZWNvbsOzbWljb3MgcXVlIG11ZXN0cmEgY29tbyBpbnRlcmFjdMO6YSB1biBwYcOtcyBjb24gZWwgcmVzdG8gZGVsIG11bmRvLg0KRXN0w6EgY29tcHVlc3RhIHBvciBsYSBiYWxhbnphIGNvbWVyY2lhbCwgc2VydmljaW9zLCB0cmFuc2ZlcmVuY2lhcyB5IHJlbnRhcy4gU2kgbGEgYmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSBlcyBwb3NpdGl2YSwgc2lnbmlmaWNhIHF1ZSBBbGVtYW5pYSBjb21vIHBhw61zIGZpbmFuY2lhIGFsIHJlc3RvIGRlbCBtdW5kbyBjb24gc3UgY2FwaXRhbCAoRWwgY2FzbyBjb250cmFyaW8gc2Vyw61hIEVzcGHDsWEpLg0KQ29tbyBwb2RlbW9zIHZlciwgZWwgc2FsZG8gZGUgbGEgYmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSBkZSBBbGVtYW5pYSBubyBoYSBwYXJhZG8gZGUgc3ViaXIgZGVzZGUgZWwgYcOxbyAyMDAwLCBlc3RvIHNlIGRlYmUgZW4gZ3JhbiBtZWRpZGEgYWwgZ3JhbiBwYXBlbCBkZSBsYXMgZXhwb3J0YWNpb25lcyBlbiBsYSBlY29ub23DrWEgYWxlbWFuYSB5IGNvbW8gZXN0w6EgaGEgc2FiaWRvIGFwcm92ZWNoYXIgZWwgY29tZXJjaW8gZXVyb3Blby4NCg0KPC9kaXY+DQoNCg0KIyMgQ3RhLiBkZSBjYXBpdGFsIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyBHcsOhZmljbw0KYGBge3IgR3LDoWZpY28gQ3RhLiBkZSBDYXBpdGFsfQ0KDQpjdGFjYXAgPC0gcmVhZF9jc3YoIi4vZGF0b3MvY3RhLWNhcGl0YWwuY3N2IikgJT4lICBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIgPSBgMjAwMSBbWVIyMDAxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMiIgPSBgMjAwMiBbWVIyMDAyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNCIgPSBgMjAwNCBbWVIyMDA0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNSIgPSBgMjAwNSBbWVIyMDA1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNyIgPSBgMjAwNyBbWVIyMDA3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOCIgPSBgMjAwOCBbWVIyMDA4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMCIgPSBgMjAxMCBbWVIyMDEwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMSIgPSBgMjAxMSBbWVIyMDExXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMyIgPSBgMjAxMyBbWVIyMDEzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNCIgPSBgMjAxNCBbWVIyMDE0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNiIgPSBgMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNyIgPSBgMjAxNyBbWVIyMDE3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOSIgPSBgMjAxOSBbWVIyMDE5XWApICAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI0LCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImN0YWNhcCIpICU+JSANCiAgc2VsZWN0KHllYXIsY3RhY2FwKQ0KDQoNCg0KDQpnZ3Bsb3QoY3RhY2FwKSArDQogIGdlb21fbGluZShhZXMoeWVhciwgY3RhY2FwLGdyb3VwID0gMSksY29sb3I9ICIjQjFFNUYyIiwgc2l6ZSA9IDIpICsNCiAgI2dlb21fc21vb3RoKGFlcyh5ZWFyLCBjdGFjYXAsZ3JvdXAgPSAxKSxjb2xvcj0gImJsdWUiKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxKSkgKw0KICBsYWJzKHRpdGxlID0gIkN1ZW50YSBkZSBDYXBpdGFsIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJBbGVtYW5pYSAyMDAwLTIwMTkiLA0KICAgICAgIHkgPSAiIiwNCiAgICAgICB4ID0gIkHDsW8iKSsNCiAgdGhlbWUoDQogICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuMjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnggPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIyBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbD0nIzI3MjYzNScpDQogICkNCmBgYA0KDQojIyMgQ8OzZGlnbw0KDQpgYGB7ciBDw7NkaWdvIEN0YS4gZGUgQ2FwaXRhbCwgZWNobyA9IFRSVUUsIGV2YWw9IEZBTFNFfQ0KDQpjdGFjYXAgPC0gcmVhZF9jc3YoIi4vZGF0b3MvY3RhLWNhcGl0YWwuY3N2IikgJT4lICBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIgPSBgMjAwMSBbWVIyMDAxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMiIgPSBgMjAwMiBbWVIyMDAyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNCIgPSBgMjAwNCBbWVIyMDA0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNSIgPSBgMjAwNSBbWVIyMDA1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNyIgPSBgMjAwNyBbWVIyMDA3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOCIgPSBgMjAwOCBbWVIyMDA4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMCIgPSBgMjAxMCBbWVIyMDEwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMSIgPSBgMjAxMSBbWVIyMDExXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMyIgPSBgMjAxMyBbWVIyMDEzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNCIgPSBgMjAxNCBbWVIyMDE0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNiIgPSBgMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNyIgPSBgMjAxNyBbWVIyMDE3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOSIgPSBgMjAxOSBbWVIyMDE5XWApICAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI0LCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImN0YWNhcCIpICU+JSANCiAgc2VsZWN0KHllYXIsY3RhY2FwKQ0KDQoNCg0KDQpnZ3Bsb3QoY3RhY2FwKSArDQogIGdlb21fbGluZShhZXMoeWVhciwgY3RhY2FwLGdyb3VwID0gMSksY29sb3I9ICJibHVlIikgKw0KICAjZ2VvbV9zbW9vdGgoYWVzKHllYXIsIGN0YWNhcCxncm91cCA9IDEpLGNvbG9yPSAiYmx1ZSIpKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEpKSArDQogIGxhYnModGl0bGUgPSAiQ3VlbnRhIGRlIENhcGl0YWwiLA0KICAgICAgIHN1YnRpdGxlID0gIkFsZW1hbmlhIDIwMDAtMjAxOSIsDQogICAgICAgeSA9ICIiLA0KICAgICAgIHggPSAiQcOxbyIpKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRleHQueCA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBheGlzLnRleHQueSA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAjIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsPScjMjcyNjM1JykNCiAgKQ0KYGBgDQojIyB7LX0NCjxkaXYgY2xhc3MgPSAiY2FqYS0xIj4NCkxhIGN1ZW50YSBkZSBjYXBpdGFsIGVzIGlndWFsIGE6IA0KQ3VlbnRhIGRlIGNhcGl0YWwgPSBDYW1iaW8gZW4gbGEgcHJvcGllZGFkIGV4dHJhbmplcmEgZGUgYWN0aXZvcyBkb23DqXN0aWNvcyAtIENhbWJpbyBlbiBsYSBwcm9waWVkYWQgZG9tw6lzdGljYSBkZSBhY3Rpdm9zIGV4dHJhbmplcm9zDQpQb2RlbW9zIHZlciBjb21vIG5vIGVzdMOhIGVzdGFibGUgZW4gbmluZ8O6biBwZXJpb2RvIHkgdGFtcG9jbyB0aWVuZSB1bmEgdGVuZGVuY2lhIGRlZmluaWRhLg0KDQoNCkxhIHN1bWEgZGUgZXN0YXMgdHJlcyBjdWVudGFzIGVzIGlndWFsIGEgMCwgY29tbyBwb2RlbW9zIHZlciBlbiBlbCBncsOhZmljbyBhbWJvcyBsYWRvcyBlc3TDoW4gZXF1aWxpYnJhZG9zLg0KPC9kaXY+DQoNCg0KIyMgQ3RhLiBmaW5hbmNpZXJhIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyBHcsOhZmljbw0KYGBge3IgR3LDoWZpY28gQ3RhIEZpbmFuY2llcmF9DQpjdGFmaW4gPC0gcmVhZF9jc3YoIi4vZGF0b3MvY3RhLWZpbmFuY2llcmEuY3N2IikgJT4lICBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIgPSBgMjAwMSBbWVIyMDAxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMiIgPSBgMjAwMiBbWVIyMDAyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNCIgPSBgMjAwNCBbWVIyMDA0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNSIgPSBgMjAwNSBbWVIyMDA1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNyIgPSBgMjAwNyBbWVIyMDA3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOCIgPSBgMjAwOCBbWVIyMDA4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMCIgPSBgMjAxMCBbWVIyMDEwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMSIgPSBgMjAxMSBbWVIyMDExXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMyIgPSBgMjAxMyBbWVIyMDEzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNCIgPSBgMjAxNCBbWVIyMDE0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNiIgPSBgMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNyIgPSBgMjAxNyBbWVIyMDE3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOSIgPSBgMjAxOSBbWVIyMDE5XWApICAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjI0LCBuYW1lc190byA9ICJ5ZWFyIiwgdmFsdWVzX3RvID0gImN0YWZpbiIpICU+JSANCiAgc2VsZWN0KHllYXIsY3RhZmluKQ0KDQpnZ3Bsb3QoY3RhZmluKSArDQogIGdlb21fbGluZShhZXMoeWVhciwgY3RhZmluLGdyb3VwID0gMSksY29sb3I9ICJwdXJwbGUiLHNpemUgPSAyKSArDQogICNnZW9tX3Ntb290aChhZXMoeWVhciwgY3RhY2FwLGdyb3VwID0gMSksY29sb3I9ICJibHVlIikrDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSkpICsNCiAgbGFicyh0aXRsZSA9ICJDdWVudGEgRmluYW5jaWVyYSIsDQogICAgICAgc3VidGl0bGUgPSAiQWxlbWFuaWEgMjAwMC0yMDE5IiwNCiAgICAgICB5ID0gIiIsDQogICAgICAgeCA9ICJBw7FvIikrDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQpgYGANCg0KIyMjIEPDs2RpZ28NCmBgYHtyIEPDs2RpZ28gQ3RhIEZpbmFuY2llcmEsIGVjaG8gPSBUUlVFLCBldmFsID0gRkFMU0UgIH0NCmN0YWZpbiA8LSByZWFkX2NzdigiLi9kYXRvcy9jdGEtZmluYW5jaWVyYS5jc3YiKSAlPiUgIGRyb3BfbmEoKSAlPiUgcmVuYW1lKCIyMDAwIiA9IGAyMDAwIFtZUjIwMDBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAyIiA9IGAyMDAyIFtZUjIwMDJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAzIiA9IGAyMDAzIFtZUjIwMDNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA1IiA9IGAyMDA1IFtZUjIwMDVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA2IiA9IGAyMDA2IFtZUjIwMDZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA4IiA9IGAyMDA4IFtZUjIwMDhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA5IiA9IGAyMDA5IFtZUjIwMDldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDExIiA9IGAyMDExIFtZUjIwMTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEyIiA9IGAyMDEyIFtZUjIwMTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE0IiA9IGAyMDE0IFtZUjIwMTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE1IiA9IGAyMDE1IFtZUjIwMTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE3IiA9IGAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE4IiA9IGAyMDE4IFtZUjIwMThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCkgICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MjQsIG5hbWVzX3RvID0gInllYXIiLCB2YWx1ZXNfdG8gPSAiY3RhZmluIikgJT4lIA0KICBzZWxlY3QoeWVhcixjdGFmaW4pDQoNCmdncGxvdChjdGFmaW4pICsNCiAgZ2VvbV9saW5lKGFlcyh5ZWFyLCBjdGFmaW4sZ3JvdXAgPSAxKSxjb2xvcj0gInB1cnBsZSIsc2l6ZSA9IDIpICsNCiAgI2dlb21fc21vb3RoKGFlcyh5ZWFyLCBjdGFjYXAsZ3JvdXAgPSAxKSxjb2xvcj0gImJsdWUiKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxKSkgKw0KICBsYWJzKHRpdGxlID0gIkN1ZW50YSBGaW5hbmNpZXJhIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJBbGVtYW5pYSAyMDAwLTIwMTkiLA0KICAgICAgIHkgPSAiIiwNCiAgICAgICB4ID0gIkHDsW8iKSsNCiAgdGhlbWUoDQogICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9JyMyNzI2MzUnICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyMyNzI2MzUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpLA0KICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuMjUsIGxpbmV0eXBlID0gJ3NvbGlkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnggPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIyBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbD0nIzI3MjYzNScpDQogICkNCmBgYA0KDQoNCg0KDQoNCg0KDQojIyB7LX0NCjxkaXYgY2xhc3MgPSAiY2FqYS0xIj4NCkxhIGN1ZW50YSBmaW5hbmNpZXJhLCBjb21vIHNlIGV4cG9uZSBlbiBsYSBzZXh0YSBlZGljacOzbiBkZWwgTWFudWFsIGRlIEJhbGFuemEgZGUgUGFnb3MgcHVibGljYWRvIHBvciBlbCBGb25kbyBNb25ldGFyaW8gSW50ZXJuYWNpb25hbCDigJxlbiBsYSBjdWVudGEgZmluYW5jaWVyYSBzZSByZWdpc3RyYW4gbGFzIHRyYW5zYWNjaW9uZXMgcmVsYXRpdmFzIGEgbG9zIGFjdGl2b3MgeSBwYXNpdm9zIGZpbmFuY2llcm9zIHF1ZSB0aWVuZW4gbHVnYXIgZW50cmUgcmVzaWRlbnRlcyB5IG5vIHJlc2lkZW50ZXPigJ0gcG9yIGxvIHF1ZSBhY3TDumEgcHLDoWN0aWNhbWVudGUgaWd1YWwgcXVlIGxhIEludmVyc2nDs24gYW5hbGl6YWRhIGFudGVyaW9ybWVudGUsIGVuIDIwMDcgY29uIGxhIGxsZWdhZGEgZGUgbGEgY3Jpc2lzIGNhZSwgeSBhIHBhcnRpciBkZSAyMDEwIGVuIGFwZW5hcyAyIGHDsW9zIHZ1ZWx2ZSBhIHJlY3VwZXJhciB2YWxvcmVzIHByZWNyaXNpcy4NCjwvZGl2Pg0KDQoNCg0KIyMgRGV1ZGEgc29iZXJhbmEgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KIyMjIEdyw6FmaWNvDQpgYGB7cn0NCg0KZGVidGdlciA8LSByZWFkX2NzdigiLi9kYXRvcy9zb3ZkZWJ0LmNzdiIpICU+JSBzZWxlY3QgKFRJTUUsVmFsdWUpDQpnZDwtIGdncGxvdChkZWJ0Z2VyKSArDQogIGdlb21fbGluZShhZXMoVElNRSwgVmFsdWUsZ3JvdXAgPSAxKSxjb2xvcj0gImJsdWUiKSArDQogIGdlb21fc21vb3RoKGFlcyhUSU1FLCBWYWx1ZSxncm91cCA9IDEpLCBjb2xvciA9ICJ3aGl0ZSIpICsNCiAgbGFicyh0aXRsZSA9ICJEZXVkYSBTb2JlcmFuYSIsICANCiAgICAgICBzdWJ0aXRsZSAgPSAgIkFsZW1hbmlhIDIwMDAtMjAxOSIsDQogICAgICAgY2FwdGlvbiAgPSAiZnVlbnRlOiBXb3JsZCBCYW5rIERhdGEiLA0KICAgICAgIHggPSAiQcOxbyIsDQogICAgICAgeSA9ICIlUElCIikrDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQpnZA0KYGBgDQoNCiMjIyBDw7NkaWdvDQpgYGB7ciwgZWNobyA9IFRSVUUsIGV2YWw9RkFMU0V9DQoNCmRlYnRnZXIgPC0gcmVhZF9jc3YoIi4vZGF0b3Mvc292ZGVidC5jc3YiKSAlPiUgc2VsZWN0IChUSU1FLFZhbHVlKQ0KDQoNCg0KZ2Q8LSBnZ3Bsb3QoZGVidGdlcikgKw0KICBnZW9tX2xpbmUoYWVzKFRJTUUsIFZhbHVlLGdyb3VwID0gMSksY29sb3I9ICJibHVlIikgKw0KICBnZW9tX3Ntb290aChhZXMoVElNRSwgVmFsdWUsZ3JvdXAgPSAxKSwgY29sb3IgPSAid2hpdGUiKSArDQogIGxhYnModGl0bGUgPSAiRGV1ZGEgU29iZXJhbmEiLCAgDQogICAgICAgc3VidGl0bGUgID0gICJBbGVtYW5pYSAyMDAwLTIwMTkiLA0KICAgICAgIGNhcHRpb24gID0gImZ1ZW50ZTogV29ybGQgQmFuayBEYXRhIiwNCiAgICAgICB4ID0gIkHDsW8iLA0KICAgICAgIHkgPSAiJVBJQiIpKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRleHQueCA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBheGlzLnRleHQueSA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAjIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsPScjMjcyNjM1JykNCiAgKQ0KZ2QNCg0KYGBgDQoNCg0KIyMgey19DQo8ZGl2IGNsYXNzID0gImNhamEtMSI+DQogTGEgZGV1ZGEgYWxlbWFuYSwgYWwgY29udHJhcmlvIHF1ZSBsYSBkZSBsYSBtYXlvcsOtYSBkZSBsb3MgcGHDrXNlcyBldXJvcGVvcywgaGEgZXN0YWRvIGJham8gY29udHJvbCBlbiBsb3Mgw7psdGltb3MgMjAgYcOxb3MsIHBvZGVtb3MgdmVyIHVuIHBlcsOtb2RvIGRlIGV4cGFuc2nDs24gdHJhcyBsYSBjcmlzaXMgZGUgMjAwNywgZW4gbGEgcXVlIHNlIGJ1c2NhIG1lZGlhbnRlIHVuIGluY3JlbWVudG8gZGVsIGdhc3RvIHDDumJsaWNvIHJlYWN0aXZhciBsYSBlY29ub23DrWEuDQpUcmFzIGVzdGUgcGVyaW9kbyBleHBhbnNpdm8sIHZlbW9zIGNvbW8gYSBwYXJ0aXIgZGUgMjAxMywgZW1waWV6YSB1biBwZXJpb2RvIGRlIHBvbMOtdGljYSBmaXNjYWwgZGUgYXVzdGVyaWRhZCB5IEFsZW1hbmlhIHBhc2EgYSB0ZW5lciBzdXBlcsOhdml0IHByZXN1cHVlc3RhcmlvIHBvciA2IGHDsW9zIGNvbnNlY3V0aXZvcyBoYXN0YSBpbmljaW9zIGRlbCAyMDIwIGNvbiBsYSBsbGVnYWRhIGRlIGxhIHBhbmRlbWlhLg0KPC9kaXY+DQoNCjxicj4NCg0KDQoNCg0KIyA2LiBQb2zDrXRpY2EgRmlzY2FsIHkgTW9uZXRhcmlhIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQojIyBHcsOhZmljbw0KYGBge3IgR3LDoWZpY28gaW5mbGFjacOzbiBFVX0NCg0KaW5mZXUgPC0gcmVhZF9jc3YoIi4vZGF0b3MvaW5mbGF0aW9uZXUuY3N2IikgJT4lICBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIgPSBgMjAwMSBbWVIyMDAxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMiIgPSBgMjAwMiBbWVIyMDAyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNCIgPSBgMjAwNCBbWVIyMDA0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNSIgPSBgMjAwNSBbWVIyMDA1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNyIgPSBgMjAwNyBbWVIyMDA3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOCIgPSBgMjAwOCBbWVIyMDA4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMCIgPSBgMjAxMCBbWVIyMDEwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMSIgPSBgMjAxMSBbWVIyMDExXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMyIgPSBgMjAxMyBbWVIyMDEzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNCIgPSBgMjAxNCBbWVIyMDE0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNiIgPSBgMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNyIgPSBgMjAxNyBbWVIyMDE3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOSIgPSBgMjAxOSBbWVIyMDE5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5OSIgPSBgMTk5OSBbWVIxOTk5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5OCIgPSBgMTk5OCBbWVIxOTk4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5NyIgPSBgMTk5NyBbWVIxOTk3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5NiIgPSBgMTk5NiBbWVIxOTk2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5NSIgPSBgMTk5NSBbWVIxOTk1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5NCIgPSBgMTk5NCBbWVIxOTk0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5MyIgPSBgMTk5MyBbWVIxOTkzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5MiIgPSBgMTk5MiBbWVIxOTkyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5MSIgPSBgMTk5MSBbWVIxOTkxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5MCIgPSBgMTk5MCBbWVIxOTkwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk4OSIgPSBgMTk4OSBbWVIxOTg5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk4OCIgPSBgMTk4OCBbWVIxOTg4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk4NyIgPSBgMTk4NyBbWVIxOTg3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk4NiIgPSBgMTk4NiBbWVIxOTg2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk4NSIgPSBgMTk4NSBbWVIxOTg1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk4NCIgPSBgMTk4NCBbWVIxOTg0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk4MyIgPSBgMTk4MyBbWVIxOTgzXWANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKSAgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gNTo0MSwgbmFtZXNfdG8gPSAiYcOxbyIsIHZhbHVlc190byA9ICJpbmZsYWNpb24iKSAlPiUgDQogIHNlbGVjdChhw7FvLGluZmxhY2lvbikgDQoNCmFubm90YXRpb24yIDwtIGRhdGEuZnJhbWUoDQogIHggPSBjKDgpLA0KICB5ID0gYygyLjEpLA0KICBsYWJlbCA9IGMoIkluZmxhY2nDs24gT2JqZXRpdm8iKQ0KKQ0KDQpnZ3Bsb3QoaW5mZXUsYWVzKGHDsW8saW5mbGFjaW9uLGdyb3VwPTEpKSArDQogIGdlb21fbGluZShjb2xvciA9ICJibGFjayIsIHNpemUgPSAyKSArDQogIGdlb21fc21vb3RoKHNlID0gRkFMU0UsIGNvbG9yPSAiZ3JlZW4iLCBtZXRob2Q9ICJsbSIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxKSkgKw0KICBsYWJzKHRpdGxlID0gIkluZmxhY2nDs24iLA0KICAgICAgIHN1YnRpdGxlID0gIlVuaW9uIEV1cm9wZWEgMTk4My0yMDE5IiwNCiAgICAgICBjYXB0aW9uID0gIldvcmxkIEJhbmsiLA0KICAgICAgIHggPSAiQcOxbyIsDQogICAgICAgeT0gIiVQSUIiKSArDQogIGdlb21faGxpbmUoYWVzKHlpbnRlcmNlcHQ9MiksIGNvbG9yID0gImdyZWVuIikgKw0KICBnZW9tX3RleHQoZGF0YT1hbm5vdGF0aW9uMiwgYWVzKCB4PXgsIHk9eSwgbGFiZWw9bGFiZWwpLA0KICAgICAgICAgICAgY29sb3I9IkdyZWVuIiwgDQogICAgICAgICAgICBzaXplPTQgLCBmb250ZmFjZT0iYm9sZCIgKSArDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdkb3R0ZWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnZG90dGVkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnggPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgYXhpcy50ZXh0LnkgPWVsZW1lbnRfdGV4dChjb2xvdXI9JyNDRUNFQ0UnKSwNCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIyBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbD0nIzI3MjYzNScpDQogICkNCmBgYA0KDQojIyBDw7NkaWdvDQpgYGB7ciBDw7NkaWdvIGluZmxhY2nDs24gRVUsIGVjaG89IFRSVUUsIGV2YWw9IEZBTFNFfQ0KDQppbmZldSA8LSByZWFkX2NzdigiLi9kYXRvcy9pbmZsYXRpb25ldS5jc3YiKSAlPiUgIGRyb3BfbmEoKSAlPiUgcmVuYW1lKCIyMDAwIiA9IGAyMDAwIFtZUjIwMDBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAyIiA9IGAyMDAyIFtZUjIwMDJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAzIiA9IGAyMDAzIFtZUjIwMDNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA1IiA9IGAyMDA1IFtZUjIwMDVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA2IiA9IGAyMDA2IFtZUjIwMDZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA4IiA9IGAyMDA4IFtZUjIwMDhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA5IiA9IGAyMDA5IFtZUjIwMDldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDExIiA9IGAyMDExIFtZUjIwMTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEyIiA9IGAyMDEyIFtZUjIwMTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE0IiA9IGAyMDE0IFtZUjIwMTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE1IiA9IGAyMDE1IFtZUjIwMTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE3IiA9IGAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE4IiA9IGAyMDE4IFtZUjIwMThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk5IiA9IGAxOTk5IFtZUjE5OTldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk4IiA9IGAxOTk4IFtZUjE5OThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk3IiA9IGAxOTk3IFtZUjE5OTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk2IiA9IGAxOTk2IFtZUjE5OTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk1IiA9IGAxOTk1IFtZUjE5OTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk0IiA9IGAxOTk0IFtZUjE5OTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkzIiA9IGAxOTkzIFtZUjE5OTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkyIiA9IGAxOTkyIFtZUjE5OTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkxIiA9IGAxOTkxIFtZUjE5OTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkwIiA9IGAxOTkwIFtZUjE5OTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg5IiA9IGAxOTg5IFtZUjE5ODldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg4IiA9IGAxOTg4IFtZUjE5ODhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg3IiA9IGAxOTg3IFtZUjE5ODddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg2IiA9IGAxOTg2IFtZUjE5ODZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg1IiA9IGAxOTg1IFtZUjE5ODVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTg0IiA9IGAxOTg0IFtZUjE5ODRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTgzIiA9IGAxOTgzIFtZUjE5ODNdYA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQopICAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSA1OjQxLCBuYW1lc190byA9ICJhw7FvIiwgdmFsdWVzX3RvID0gImluZmxhY2lvbiIpICU+JSANCiAgc2VsZWN0KGHDsW8saW5mbGFjaW9uKSANCg0KYW5ub3RhdGlvbjIgPC0gZGF0YS5mcmFtZSgNCiAgeCA9IGMoOCksDQogIHkgPSBjKDIuMSksDQogIGxhYmVsID0gYygiSW5mbGFjacOzbiBPYmpldGl2byIpDQopDQoNCmdncGxvdChpbmZldSxhZXMoYcOxbyxpbmZsYWNpb24sZ3JvdXA9MSkpICsNCiAgZ2VvbV9saW5lKGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDIpICsNCiAgZ2VvbV9zbW9vdGgoc2UgPSBGQUxTRSwgY29sb3I9ICJncmVlbiIsIG1ldGhvZD0gImxtIikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEpKSArDQogIGxhYnModGl0bGUgPSAiSW5mbGFjacOzbiIsDQogICAgICAgc3VidGl0bGUgPSAiVW5pb24gRXVyb3BlYSAxOTgzLTIwMTkiLA0KICAgICAgIGNhcHRpb24gPSAiV29ybGQgQmFuayIsDQogICAgICAgeCA9ICJBw7FvIiwNCiAgICAgICB5PSAiJVBJQiIpICsNCiAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdD0yKSwgY29sb3IgPSAiZ3JlZW4iKSArDQogIGdlb21fdGV4dChkYXRhPWFubm90YXRpb24yLCBhZXMoIHg9eCwgeT15LCBsYWJlbD1sYWJlbCksDQogICAgICAgICAgICBjb2xvcj0iR3JlZW4iLCANCiAgICAgICAgICAgIHNpemU9NCAsIGZvbnRmYWNlPSJib2xkIiApKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnZG90dGVkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gJyNDRUNFQ0UnKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuMjUsIGxpbmV0eXBlID0gJ2RvdHRlZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApIA0KYGBgDQoNCiMgey19DQo8ZGl2IGNsYXNzID0gImNhamEtMSI+DQpMYSBwb2zDrXRpY2EgbW9uZXRhcmlhIGRlIGxhIG1heW9yw61hIGRlIGxvcyBwYcOtc2VzIGV1cm9wZW9zIGVzdMOhIGNlbnRyYWxpemFkYSwgZXMgZGVjaXIsIGVsIEJDRSB0aWVuZSBlbCBjb250cm9sIHRvdGFsIGRlIGxhIHBvbMOtdGljYSBtb25ldGFyaWEgZGVsIEV1cm8uIExhIFVFIHRpZW5lIHVuYSBzZXJpZSBkZSBub3JtYXMsIHVuYSBkZSBlbGxhcyBlcyB1bmEgaW5mbGFjacOzbiBvYmpldGl2byBkZWwgMiUuDQoNCkNvbW8gcG9kZW1vcyB2ZXIgZW4gZWwgZ3LDoWZpY28sIGxhIGluZmxhY2nDs24gZGUgbGEgVUUgZGVzZGUgc3UgY3JlYWNpw7NuIHNlIGhhIGNvbnNlZ3VpZG8gZGlzbWludWlyIG5vdGFibGVtZW50ZSwgYXVucXVlIHRyYXMgbGEgY3Jpc2lzLCBkZWJpZG8gYSBsb3MgYmFqb3MgdGlwb3MgZGUgaW50ZXLDqXMgeSBsYSBkZXByZXNpw7NuIGRlIGxhIGVjb25vbcOtYSwgaGVtb3MgcG9kaWRvIG9ic2VydmFyIHBlcmlvZG9zIGRlIGRlZmxhY2nDs24gcXVlIHJlc3VsdGFuIGRhw7Fpbm9zIHBhcmEgbGEgZWNvbm9tw61hIGVuIHN1IGNvbmp1bnRvLCBlcyBwb3IgZWxsbyBxdWUgZWwgQkNFIGhhIGJ1c2NhZG8gdW5hIHBvbMOtdGljYSBtb25ldGFyaWEgZXhwYW5zaXZhIG1lZGlhbnRlIGxhIGNvbXByYSBkZSBkZXVkYSBkZSBsb3MgcGHDrXNlcyBtYXMgYWZlY3RhZG9zIHBvciBsYSBjcmlzaXMuIEFkZW3DoXMsIGVsIEJDRSBoYSByZWFsaXphZG8gbnVtZXJvc29zIHByw6lzdGFtb3MgZW4gbG9zIMO6bHRpbW9zIGHDsW9zIHBhcmEgZmluYW5jaWFyIGVsIGNvbnN1bW8sIGF1bnF1ZSBoYSByZXN1bHRhZG8gY2llcnRhbWVudGUgZWZlY3Rpdm8sIG5vIGVzdMOhbiBkZWwgdG9kbyBjbGFybyBzdXMgZWZlY3RvcyBhIGxhcmdvIHBsYXpvLg0KDQpDb21vIGhlbW9zIGNvbWVudGFkbyBtYXMgYXJyaWJhLCBBbGVtYW5pYSB0cmFzIGVudHJhciBlbiBsYSBjcmlzaXMgZXN0aW11bMOzIHN1IGVjb25vbcOtYSBjb24gdW5hIHBvbMOtdGljYSBmaXNjYWwgZXhwYW5zaXZhIHF1ZSBidXNjYWJhIHJlYWN0aXZhciBzdSBlY29ub23DrWEuIFRyYXMgYWxjYW56YXIgbml2ZWxlcyBkZSBQSUIgeSBjcmVjaW1pZW50byBwcmVjcmlzaXMsIGhpem8gdW4gY2FtYmlvIGJydXNjbyBlbiBzdSBwb2zDrXRpY2EgZmlzY2FsIHkgY29tZW56w7MgYSB0ZW5lciB1biBTdXBlcsOhdml0IGVuIHN1cyBwcmVzdXB1ZXN0b3MsIHJlZHVjaWVuZG8gYXPDrSBzdSBkZXVkYSBQw7pibGljYS4gQWxlbWFuaWEgaGEgY29uc2VndWlkbyB1biBzdXBlcsOhdml0IHByZXN1cHVlc3RhcmlvIGVuIGxvcyDDumx0aW1vcyA2IGHDsW9zLCBubyBoYSBzaWRvIGhhc3RhIGxhIGxsZWdhZGEgZGUgbGEgcGFuZGVtaWEgY3VhbmRvIGhhIHBhc2FkbyBhIHRlbmVyIGTDqWZpY2l0LiANCjwvZGl2Pg0KDQo8YnI+DQoNCg0KDQoNCiMgNy4gTm90aWNpYXMgZGUgQWN0dWFsaWRhZA0KIyMgVGFzYSBkZXNlbXBsZW8gey50YWJzZXQgLnRhYnNldC1waWxsc30NCiMjIyBHcsOhZmljbw0KYGBge3IgR3LDoWZpY28gUGFyb30NCg0KDQpwYXJvIDwtIHJlYWRfY3N2KCIuL2RhdG9zL3Bhcm8uY3N2IikgJT4lICBkcm9wX25hKCkgJT4lIHJlbmFtZSgiMjAwMCIgPSBgMjAwMCBbWVIyMDAwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMyIgPSBgMjAwMyBbWVIyMDAzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNiIgPSBgMjAwNiBbWVIyMDA2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwOSIgPSBgMjAwOSBbWVIyMDA5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMiIgPSBgMjAxMiBbWVIyMDEyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNSIgPSBgMjAxNSBbWVIyMDE1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOCIgPSBgMjAxOCBbWVIyMDE4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTkiID0gYDE5OTkgW1lSMTk5OV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5OCIgPSBgMTk5OCBbWVIxOTk4XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk3IiA9IGAxOTk3IFtZUjE5OTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTYiID0gYDE5OTYgW1lSMTk5Nl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5NSIgPSBgMTk5NSBbWVIxOTk1XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk0IiA9IGAxOTk0IFtZUjE5OTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTMiID0gYDE5OTMgW1lSMTk5M11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5MiIgPSBgMTk5MiBbWVIxOTkyXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkxIiA9IGAxOTkxIFtZUjE5OTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTAiID0gYDE5OTAgW1lSMTk5MF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMjAiID0gYDIwMjAgW1lSMjAyMF1gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKSAlPiUgc2VsZWN0KCEoIjE5OTAiKSkgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gNTozNCwgbmFtZXNfdG8gPSAiYcOxbyIsIHZhbHVlc190byA9ICJwYXJvIikgJT4lIA0KICBzZWxlY3QoYcOxbyxwYXJvKQ0KICANCmFubm90YXRpb24zIDwtIGRhdGEuZnJhbWUoDQogIHggPSBjKDE1KSwNCiAgeSA9IGMoMi4xKSwNCiAgbGFiZWwgPSBjKCJBIHBhcnRpciBkZSAyMDA1IEFsZW1hbmlhIHNvbG8gY3JlYSBlbXBsZW8iKQ0KKQ0KDQpnZ3Bsb3QocGFybyxhZXMoYcOxbyxwYXJvLGdyb3VwPTEpKSArDQogIGdlb21fbGluZShjb2xvciA9ICIjQjFFNUYyIiwgc2l6ZSA9IDIpICsNCiAgZ2VvbV9zbW9vdGgoc2UgPSBGQUxTRSwgY29sb3I9ICIjQ0VDRUNFIiwgbWV0aG9kPSAibG0iLCBzaXplID0gMS4yKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSkpICsNCiAgbGFicyh0aXRsZSA9ICJUYXNhIGRlIGRlc2VtcGxlbyIsDQogICAgICAgc3VidGl0bGUgPSAiQWxlbWFuaWEgMTk5MS0yMDIwIiwNCiAgICAgICBjYXB0aW9uID0gIldvcmxkIEJhbmsiLA0KICAgICAgIHggPSAiQcOxbyIsDQogICAgICAgeT0gIiUiKSArDQogIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQ9MTUpLCBjb2xvciA9ICJncmV5IikgKw0KICBnZW9tX3RleHQoZGF0YT1hbm5vdGF0aW9uMywgYWVzKCB4PXgsIHk9eSwgbGFiZWw9bGFiZWwpLA0KICAgICAgICAgICAgY29sb3I9IiM2QkZGQjgiLCANCiAgICAgICAgICAgIHNpemU9NCAsIGZvbnRmYWNlPSJib2xkIiApICArDQogIGFubm90YXRlKCJzZWdtZW50IiwgeCA9IDE1LCB4ZW5kID0gMzAsIHkgPSAxMS4zLCB5ZW5kID0gMywgY29sb3VyID0gIiM2QkZGQjgiLCBzaXplPTEuNSwgYWxwaGE9MC44LCBhcnJvdz1hcnJvdygpKSArDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQoNCmBgYA0KDQojIyMgR3LDoWZpY28gMg0KDQpgYGB7ciBHcsOhZmljbyBQYXJvIEVzcGHDsWF9DQoNCg0KcGFyb2VzcCA8LSByZWFkX2NzdigiLi9kYXRvcy9wYXJvZXNwLmNzdiIpICU+JSAgZHJvcF9uYSgpICU+JSByZW5hbWUoIjIwMDAiID0gYDIwMDAgW1lSMjAwMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDEiID0gYDIwMDEgW1lSMjAwMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDIiID0gYDIwMDIgW1lSMjAwMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDMiID0gYDIwMDMgW1lSMjAwM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDQiID0gYDIwMDQgW1lSMjAwNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDUiID0gYDIwMDUgW1lSMjAwNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDYiID0gYDIwMDYgW1lSMjAwNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDciID0gYDIwMDcgW1lSMjAwN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDgiID0gYDIwMDggW1lSMjAwOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiID0gYDIwMDkgW1lSMjAwOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTAiID0gYDIwMTAgW1lSMjAxMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTEiID0gYDIwMTEgW1lSMjAxMV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTIiID0gYDIwMTIgW1lSMjAxMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTMiID0gYDIwMTMgW1lSMjAxM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTQiID0gYDIwMTQgW1lSMjAxNF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUiID0gYDIwMTUgW1lSMjAxNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTYiID0gYDIwMTYgW1lSMjAxNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTciID0gYDIwMTcgW1lSMjAxN11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTgiID0gYDIwMTggW1lSMjAxOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTkiID0gYDIwMTkgW1lSMjAxOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTkiID0gYDE5OTkgW1lSMTk5OV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTgiID0gYDE5OTggW1lSMTk5OF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTciID0gYDE5OTcgW1lSMTk5N11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTYiID0gYDE5OTYgW1lSMTk5Nl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTUiID0gYDE5OTUgW1lSMTk5NV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTQiID0gYDE5OTQgW1lSMTk5NF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTMiID0gYDE5OTMgW1lSMTk5M11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTIiID0gYDE5OTIgW1lSMTk5Ml1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTEiID0gYDE5OTEgW1lSMTk5MV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMCIgPSBgMjAyMCBbWVIyMDIwXWANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKSAgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gNTozNCwgbmFtZXNfdG8gPSAiYcOxbyIsIHZhbHVlc190byA9ICJwYXJvIikgJT4lIA0KICBzZWxlY3QoYcOxbyxwYXJvKQ0KDQphbm5vdGF0aW9uNCA8LSBkYXRhLmZyYW1lKA0KICB4ID0gYygxOSwyMyksDQogIHkgPSBjKDIuMSwgMjgpLA0KICBsYWJlbCA9IGMoIkNyaXNpcyAyMDA3IiwiMjYlIikNCikNCg0KZ2dwbG90KHBhcm9lc3AsYWVzKGHDsW8scGFybyxncm91cD0xKSkgKw0KICBnZW9tX2xpbmUoY29sb3IgPSAiI0IxRTVGMiIsIHNpemUgPSAyKSArDQogIGdlb21fc21vb3RoKHNlID0gRkFMU0UsIGNvbG9yPSAiI0NFQ0VDRSIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxKSkgKw0KICBsYWJzKHRpdGxlID0gIlRhc2EgZGUgZGVzZW1wbGVvIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJFc3Bhw7FhIDE5OTEtMjAxOSIsDQogICAgICAgY2FwdGlvbiA9ICJXb3JsZCBCYW5rIiwNCiAgICAgICB4ID0gIkHDsW8iLA0KICAgICAgIHk9ICIlIikgKw0KICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0PTE3KSwgY29sb3IgPSAiIzZCRkZCOCIpICsNCiAgZ2VvbV90ZXh0KGRhdGE9YW5ub3RhdGlvbjQsIGFlcyggeD14LCB5PXksIGxhYmVsPWxhYmVsKSwNCiAgICAgICAgICAgIGNvbG9yPSJncmVlbiIsIA0KICAgICAgICAgICAgc2l6ZT0zLjkgLCBmb250ZmFjZT0iYm9sZCIgKSAgKw0KICBhbm5vdGF0ZSgic2VnbWVudCIsIHggPSAxNywgeGVuZCA9IDIzLCB5ID0gOSwgeWVuZCA9IDI2LCBjb2xvdXIgPSAiUkVEIiwgc2l6ZT0xLjUsIGFscGhhPTAuNSwgYXJyb3c9YXJyb3coKSkgKw0KICANCiAgYW5ub3RhdGUoInNlZ21lbnQiLCB4ID0gMjMsIHhlbmQgPSAzMCwgeSA9IDI2LCB5ZW5kID0gMTMsIGNvbG91ciA9ICJncmVlbiIsIHNpemU9MS41LCBhbHBoYT0wLjksIGFycm93PWFycm93KCkpKw0KICB0aGVtZSgNCiAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0nIzI3MjYzNScgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnIzI3MjYzNScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShzaXplID0gMC4yNSwgbGluZXR5cGUgPSAnc29saWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAnI0NFQ0VDRScpLA0KICBheGlzLnRleHQueCA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBheGlzLnRleHQueSA9ZWxlbWVudF90ZXh0KGNvbG91cj0nI0NFQ0VDRScpLA0KICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoY29sb3VyID0gIiNDRUNFQ0UiKSwNCiAgICAgICAjIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsPScjMjcyNjM1JykNCiAgKQ0KDQoNCmBgYA0KDQojIyMgQ8OzZGlnbw0KYGBge3IgQ8OzZGlnbyBQYXJvLCBldmFsPSBGQUxTRSwgZWNobyA9IFRSVUV9DQoNCg0KcGFybyA8LSByZWFkX2NzdigiLi9kYXRvcy9wYXJvLmNzdiIpICU+JSAgZHJvcF9uYSgpICU+JSByZW5hbWUoIjIwMDAiID0gYDIwMDAgW1lSMjAwMF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIgPSBgMjAwMSBbWVIyMDAxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAyIiA9IGAyMDAyIFtZUjIwMDJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDMiID0gYDIwMDMgW1lSMjAwM11gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNCIgPSBgMjAwNCBbWVIyMDA0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA1IiA9IGAyMDA1IFtZUjIwMDVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDYiID0gYDIwMDYgW1lSMjAwNl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwNyIgPSBgMjAwNyBbWVIyMDA3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA4IiA9IGAyMDA4IFtZUjIwMDhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMDkiID0gYDIwMDkgW1lSMjAwOV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMCIgPSBgMjAxMCBbWVIyMDEwXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDExIiA9IGAyMDExIFtZUjIwMTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTIiID0gYDIwMTIgW1lSMjAxMl1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxMyIgPSBgMjAxMyBbWVIyMDEzXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE0IiA9IGAyMDE0IFtZUjIwMTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTUiID0gYDIwMTUgW1lSMjAxNV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxNiIgPSBgMjAxNiBbWVIyMDE2XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE3IiA9IGAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTgiID0gYDIwMTggW1lSMjAxOF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAxOSIgPSBgMjAxOSBbWVIyMDE5XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk5IiA9IGAxOTk5IFtZUjE5OTldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTgiID0gYDE5OTggW1lSMTk5OF1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5NyIgPSBgMTk5NyBbWVIxOTk3XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk2IiA9IGAxOTk2IFtZUjE5OTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTUiID0gYDE5OTUgW1lSMTk5NV1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5NCIgPSBgMTk5NCBbWVIxOTk0XWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkzIiA9IGAxOTkzIFtZUjE5OTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE5OTIiID0gYDE5OTIgW1lSMTk5Ml1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5MSIgPSBgMTk5MSBbWVIxOTkxXWAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkwIiA9IGAxOTkwIFtZUjE5OTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDIwIiA9IGAyMDIwIFtZUjIwMjBdYA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCikgJT4lIHNlbGVjdCghKCIxOTkwIikpICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MzQsIG5hbWVzX3RvID0gImHDsW8iLCB2YWx1ZXNfdG8gPSAicGFybyIpICU+JSANCiAgc2VsZWN0KGHDsW8scGFybykNCiAgDQphbm5vdGF0aW9uMyA8LSBkYXRhLmZyYW1lKA0KICB4ID0gYygxNSksDQogIHkgPSBjKDIuMSksDQogIGxhYmVsID0gYygiQSBwYXJ0aXIgZGUgMjAwNSBBbGVtYW5pYSBzb2xvIGNyZWEgZW1wbGVvIikNCikNCg0KZ2dwbG90KHBhcm8sYWVzKGHDsW8scGFybyxncm91cD0xKSkgKw0KICBnZW9tX2xpbmUoY29sb3IgPSAicmVkIiwgc2l6ZSA9IDIpICsNCiAgZ2VvbV9zbW9vdGgoc2UgPSBGQUxTRSwgY29sb3I9ICJwaW5rIiwgbWV0aG9kPSAibG0iKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSkpICsNCiAgbGFicyh0aXRsZSA9ICJUYXNhIGRlIGRlc2VtcGxlbyIsDQogICAgICAgc3VidGl0bGUgPSAiQWxlbWFuaWEgMTk5MS0yMDIwIiwNCiAgICAgICBjYXB0aW9uID0gIldvcmxkIEJhbmsiLA0KICAgICAgIHggPSAiQcOxbyIsDQogICAgICAgeT0gIiUiKSArDQogIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQ9MTUpLCBjb2xvciA9ICJncmV5IikgKw0KICBnZW9tX3RleHQoZGF0YT1hbm5vdGF0aW9uMywgYWVzKCB4PXgsIHk9eSwgbGFiZWw9bGFiZWwpLA0KICAgICAgICAgICAgY29sb3I9IkJsYWNrIiwgDQogICAgICAgICAgICBzaXplPTMuMyAsIGZvbnRmYWNlPSJib2xkIiApICArDQogIGFubm90YXRlKCJzZWdtZW50IiwgeCA9IDE1LCB4ZW5kID0gMzAsIHkgPSAxMS4zLCB5ZW5kID0gMywgY29sb3VyID0gIkdyZWVuIiwgc2l6ZT0xLjUsIGFscGhhPTAuOCwgYXJyb3c9YXJyb3coKSkrDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQoNCmBgYA0KDQoNCiMjIyBDw7NkaWdvIDINCmBgYHtyIEPDs2RpZ28gUGFybyBFc3Bhw7FhLCBldmFsID0gRkFMU0UsIGVjaG8gPSBUUlVFfQ0KDQoNCnBhcm9lc3AgPC0gcmVhZF9jc3YoIi4vZGF0b3MvcGFyb2VzcC5jc3YiKSAlPiUgIGRyb3BfbmEoKSAlPiUgcmVuYW1lKCIyMDAwIiA9IGAyMDAwIFtZUjIwMDBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxIiA9IGAyMDAxIFtZUjIwMDFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAyIiA9IGAyMDAyIFtZUjIwMDJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAzIiA9IGAyMDAzIFtZUjIwMDNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA0IiA9IGAyMDA0IFtZUjIwMDRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA1IiA9IGAyMDA1IFtZUjIwMDVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA2IiA9IGAyMDA2IFtZUjIwMDZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA3IiA9IGAyMDA3IFtZUjIwMDddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA4IiA9IGAyMDA4IFtZUjIwMDhdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDA5IiA9IGAyMDA5IFtZUjIwMDldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEwIiA9IGAyMDEwIFtZUjIwMTBdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDExIiA9IGAyMDExIFtZUjIwMTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEyIiA9IGAyMDEyIFtZUjIwMTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDEzIiA9IGAyMDEzIFtZUjIwMTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE0IiA9IGAyMDE0IFtZUjIwMTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE1IiA9IGAyMDE1IFtZUjIwMTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE2IiA9IGAyMDE2IFtZUjIwMTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE3IiA9IGAyMDE3IFtZUjIwMTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE4IiA9IGAyMDE4IFtZUjIwMThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDE5IiA9IGAyMDE5IFtZUjIwMTldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk5IiA9IGAxOTk5IFtZUjE5OTldYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk4IiA9IGAxOTk4IFtZUjE5OThdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk3IiA9IGAxOTk3IFtZUjE5OTddYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk2IiA9IGAxOTk2IFtZUjE5OTZdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk1IiA9IGAxOTk1IFtZUjE5OTVdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTk0IiA9IGAxOTk0IFtZUjE5OTRdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkzIiA9IGAxOTkzIFtZUjE5OTNdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkyIiA9IGAxOTkyIFtZUjE5OTJdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxOTkxIiA9IGAxOTkxIFtZUjE5OTFdYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMjAiID0gYDIwMjAgW1lSMjAyMF1gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCikgICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDU6MzQsIG5hbWVzX3RvID0gImHDsW8iLCB2YWx1ZXNfdG8gPSAicGFybyIpICU+JSANCiAgc2VsZWN0KGHDsW8scGFybykNCg0KYW5ub3RhdGlvbjQgPC0gZGF0YS5mcmFtZSgNCiAgeCA9IGMoMTksMjMpLA0KICB5ID0gYygyLjEsIDI4KSwNCiAgbGFiZWwgPSBjKCJDcmlzaXMgMjAwNyIsIjI2JSIpDQopDQoNCmdncGxvdChwYXJvZXNwLGFlcyhhw7FvLHBhcm8sZ3JvdXA9MSkpICsNCiAgZ2VvbV9saW5lKGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDIpICsNCiAgZ2VvbV9zbW9vdGgoc2UgPSBGQUxTRSwgY29sb3I9ICJCbHVlIikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEpKSArDQogIGxhYnModGl0bGUgPSAiVGFzYSBkZSBkZXNlbXBsZW8iLA0KICAgICAgIHN1YnRpdGxlID0gIkVzcGHDsWEgMTk5MS0yMDE5IiwNCiAgICAgICBjYXB0aW9uID0gIldvcmxkIEJhbmsiLA0KICAgICAgIHggPSAiQcOxbyIsDQogICAgICAgeT0gIiUiKSArDQogIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQ9MTcpLCBjb2xvciA9ICJ5ZWxsb3ciKSArDQogIGdlb21fdGV4dChkYXRhPWFubm90YXRpb240LCBhZXMoIHg9eCwgeT15LCBsYWJlbD1sYWJlbCksDQogICAgICAgICAgICBjb2xvcj0iUkVEIiwgDQogICAgICAgICAgICBzaXplPTMuMyAsIGZvbnRmYWNlPSJib2xkIiApICArDQogIGFubm90YXRlKCJzZWdtZW50IiwgeCA9IDE3LCB4ZW5kID0gMjMsIHkgPSA5LCB5ZW5kID0gMjYsIGNvbG91ciA9ICJSRUQiLCBzaXplPTEuNSwgYWxwaGE9MC41LCBhcnJvdz1hcnJvdygpKSArDQogIA0KICBhbm5vdGF0ZSgic2VnbWVudCIsIHggPSAyMywgeGVuZCA9IDMwLCB5ID0gMjYsIHllbmQgPSAxMywgY29sb3VyID0gImdyZWVuIiwgc2l6ZT0xLjUsIGFscGhhPTAuNSwgYXJyb3c9YXJyb3coKSkrDQogIHRoZW1lKA0KICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPScjMjcyNjM1JyAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjMjcyNjM1JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksIA0KICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjI1LCBsaW5ldHlwZSA9ICdzb2xpZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICcjQ0VDRUNFJyksDQogIGF4aXMudGV4dC54ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIGF4aXMudGV4dC55ID1lbGVtZW50X3RleHQoY29sb3VyPScjQ0VDRUNFJyksDQogIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gJyNDRUNFQ0UnKSwNCiAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICIjQ0VDRUNFIiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiI0NFQ0VDRSIpLA0KICAgICAgICMgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGw9JyMyNzI2MzUnKQ0KICApDQoNCg0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyMgey19DQo8ZGl2IGNsYXNzID0gImNhamEtMSI+DQpFbCBtZXJjYWRvIGxhYm9yYWwgZXVyb3BlbyBoYSBkZW1vc3RyYWRvIHNlciBkZSBsb3MgbcOhcyBmdWVydGVzIGRlbCBjb250aW5lbnRlIGV1cm9wZW8sIGNvbiB1bmEgY29udGludWEgY3JlYWNpw7NuIGRlIGVtcGxlbyB5IGVuIGxhIHF1ZSBhcGVuYXMgc2UgcHVkbyB2ZXIgYWxnw7puIGltcGFjdG8gZHVyYW50ZSBsYSBjcmlzaXMgZGUgMjAwNy4gTm8gaGEgc2lkbyBoYXN0YSBsYSBsbGVnYWRhIGRlIGxhIFBhbmRlbWlhIGVuIGZlYnJlcm8gZGUgMjAyMCwgZXMgZW4gZXN0ZSBtb21lbnRvIGN1YW5kbyBlbCBtZXJjYWRvIGRlIHRyYWJham8gYWxlbcOhbiBwaXNhIGVsIGZyZW5vIHkgY29taWVuemEgYSBhdW1lbnRhciBsYSBUYXNhIGRlIGRlc2VtcGxlbyBwb3IgcHJpbWVyYSB2ZXogZW4gbcOhcyBkZSAxMCBhw7Fvcy4gQ2FiZSBkZXN0YWNhciBsYSBtaWdyYWNpw7NuIGR1cmFudGUgZXN0b3Mgw7psdGltb3MgYcOxb3MgZGUgZ3JhbiBwYXJ0ZSBkZSBsb3MgdHJhYmFqYWRvcmVzIGFsIHNlY3RvciBzZXJ2aWNpb3MsIGNheWVuZG8gZWwgcGVzbyBkZWwgZW1wbGVvIGVuIGxvcyBzZWN0b3JlcyBwcm9kdWN0aXZvcywgZXN0byBzZSBwcm9kdWNlIGVuIGdyYW4gbWVkaWRhIGRlYmlkbyBhIGxhIGltcG9ydGFuY2lhIGRlbCBmYWN0b3IgdGVjbm9sw7NnaWNvIGVuIGxhIHByb2R1Y2Npw7NuIGFsZW1hbmEuIEF1bnF1ZSBwdWVkYSBwYXJlY2VyIHF1ZSBsYSB0ZWNub2xvZ8OtYSBlc3TDoSBkZXN0cnV5ZW5kbyBlbXBsZW9zLCBlbiByZWFsaWRhZCBsbyBxdWUgZXN0w6EgaGFjaWVuZG8gZXMgZGVzcGxhemFybG9zIGEgb3Ryb3Mgc2VjdG9yZXMgcHJvZHVjdGl2b3MgZG9uZGUgaGFjZSBmYWx0YSBtw6FzIG1hbm8gZGUgb2JyYS4NCk90cm8gZGUgbG9zIGZhY3RvcmVzIHF1ZSBoYSBpbmZsdWlkbyBkdXJhbnRlIGxvcyDDumx0aW1vcyBhw7FvcyBlbiBsYSBjcmVhY2nDs24gZGUgZW1wbGVvIGhhIHNpZG8gbGEgZ3JhbiBvbGVhZGEgZGUgdHJhYmFqYWRvcmVzIGlubWlncmFudGVzIHF1ZSBoYW4gbGxlZ2FkbyBhbCBwYcOtcyBjb24gbGEgY3Jpc2lzLCBlc3RvIGhhIGxsZXZhZG8gYSBsYSBiYWphIGEgbG9zIHNhbGFyaW9zIGNyZWFuZG8gbWFzIGVtcGxlbyB5IGZvcnRhbGVjaWVuZG8gZWwgbWVyY2FkbyBkZSB0cmFiYWpvLCBhdW5xdWUgdW5hIGJhamFkYSBkZSBzYWxhcmlvcyBwdWVkYSByZXN1bHRhciBuZWdhdGl2YSBwYXJhIGxvcyB0cmFiYWphZG9yZXMsIGVzdG8gc2UgY29tcGVuc2EgY29uIGVsIHRyYWJham8gY3JlYWRvIHkgY29uIGxhcyBtYXlvcmVzIGdhbmFuY2lhcyBkZSBjaWVydG9zIHNlY3RvcmVzIGRlYmlkbyBhIGxhIGJhamFkYSBkZSBzYWxhcmlvcywgc29icmUgdG9kbyBlbiBsbyBxdWUgcmVzcGVjdGEgYSBtYW5vIGRlIG9icmEgbm8gY3VhbGlmaWNhZGEuDQoNCjwvZGl2Pg0KDQo8YnI+DQoNCg0KIyBCaWJsaW9ncmFmw61hDQoNCjxkaXYgY2xhc3MgPSAiY2FqYS1tZWRpdW0tYXF1YW1hcmluZSI+DQoNCuKAoglbRGF0b3MgZGVsIEJhbmNvIE11bmRpYWxdKGh0dHBzOi8vZGF0b3MuYmFuY29tdW5kaWFsLm9yZy9wYWlzL2FsZW1hbmlhKQ0KDQrigKIJW05vdGljaWEgYXVtZW50byB0YXNhIGRlIHBhcm8gQWxlbWFuaWFdKGh0dHBzOi8vd3d3LmVsZWNvbm9taXN0YS5lcy9lY29ub21pYS9ub3RpY2lhcy8xMDk3Mjk1MS8wMS8yMS9FbC1jb3JvbmF2aXJ1cy1hY2FiYS1jb24tMTQtYW5vcy1zZWd1aWRvcy1kZS1jcmVhY2lvbi1kZS1lbXBsZW8tZW4tQWxlbWFuaWEuaHRtbCkNCg0K4oCiCVtNYW51YWwgRk1JIGJhbGFuemEgZGUgcGFnb10oaHR0cHM6Ly93d3cuaW1mLm9yZy9+L21lZGlhL1dlYnNpdGVzL0lNRi9pbXBvcnRlZC1wdWJsaWNhdGlvbnMtbG9lLXBkZnMvZXh0ZXJuYWwvc3BhbmlzaC9wdWJzL2Z0L2JvcC8yMDA3L2JvcG1hbjZzLmFzaHgpDQoNCuKAoglbUG9sw610aWNhIG1vbmV0YXJpYSBFdXJvcGFdKGh0dHBzOi8vd3d3LmVjYi5ldXJvcGEuZXUvZWNiL3Rhc2tzL21vbnBvbC9odG1sL2luZGV4LmVzLmh0bWwpDQoNCuKAoglbVHJhZGVzIGFuZCBNYW51ZmFjdHVyaW5nIEpvYnMgaW4gR2VybWFueV0oaHR0cDovL2Z0cC5pemEub3JnL2RwMTA0NjkucGRmKQ0KDQo8L2Rpdj4NCg0KPGJyPg0KDQo=