[Fonte dos dados]:
https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_time_series 
http://www.citypopulation.de/en/china/cities/hubei/
https://www.worldometers.info/coronavirus/#countries
https://www.worldometers.info/geography/countries-of-the-world/
https://www.worldometers.info/world-population/population-by-region/
#variáveis
#Brazil_c   China_c France_c    Germany_c   Iran_c  Italy_c Korea_South_c   Spain_c Switzerland_c   United_Kingdom_c    US_c Brazil_c_1Mpop China_c_1Mpop France_c_1Mpop    Germany_c_1Mpop Iran_c_1Mpop    Italy_c_1Mpop   Korea_South_c_1Mpop Spain_c_1Mpop   Switzerland_c_1Mpop United_Kingdom_c_1Mpop  US_c_1Mpop Brazil_c_ac  China_c_ac  France_c_ac Germany_c_ac    Iran_c_ac   Italy_c_ac  Korea_South_c_ac    Spain_c_ac  Switzerland_c_ac    United_Kingdom_c_ac US_c_ac Brazil_c_d  China_c_d   France_c_d  Germany_c_d Iran_c_d    Italy_c_d   Korea_South_c_d Spain_c_d   Switzerland_c_d United_Kingdom_c_d  US_c_d Brazil_m China_m France_m    Germany_m   Iran_m  Italy_m Korea_South_m   Spain_m Switzerland_m   United_Kingdom_m    US_m Brazil_m_1Mpop China_m_1Mpop   France_m_1Mpop  Germany_m_1Mpop Iran_m_1Mpop    Italy_m_1Mpop   Korea_South_m_1Mpop Spain_m_1Mpop   Switzerland_m_1Mpop United_Kingdom_m_1Mpop  US_m_1Mpop Brazil_m_ac  China_m_ac  France_m_ac Germany_m_ac    Iran_m_ac   Italy_m_ac  Korea_South_m_ac    Spain_m_ac  Switzerland_m_ac    United_Kingdom_m_ac US_m_ac Brazil_m_d  China_m_d   France_m_d  Germany_m_d Iran_m_d    Italy_m_d   Korea_South_m_d Spain_m_d   Switzerland_m_d United_Kingdom_m_d  US_m_d
    
#Legenda: 
#    _c confirmado
#    _c_ac  confirmado acumulado
#    _m morte
#    _m_ac  morte acumulada
#    _c_d   confirmado/densidade
#    _m_d   morte/densidade
#    _c_1Mpop   confirmado acumulado por M de hab (omiti _ac para preservar o tamanho da variável)                  
#    _m_1Mpop   morte acumulada por M de hab (omiti _ac para preservar o tamanho da variável)           
#    _cd_1Mpop confirmado por dia por M de hab

#   Roteiro:
#    1) Top 10 + Brasil
#    2) Graf Novos casos por dia e Mortos por dia
#    3) Matriz
#    a) Faixa etária? (idade média)
#    b) densidade demog.
#    c) início do isolamento social
#    d) primeiro caso de corona confirmado   
library(tidyverse)
library(readr)
library(scales)
library(ggthemes)
library(reshape2)
library(readxl)
covid <- read_excel("covid19.xlsx", sheet = "r") 

#covid %>% slice(86) %>% select(contains("_ac"))

# Bases The Center for Systems Science and Engineering (CSSE) at Johns Hopkins University - Baltimore, MD

covid19_confirmed_global
covid19_deaths_global

Casos Confirmados

# Brazil_c  China_c France_c    Germany_c   Iran_c  Italy_c Korea_South_c   Spain_c Switzerland_c   United_Kingdom_c    US_c

ggplot(covid, aes(as.Date(Data))) +  
  theme(axis.text.x = element_text(angle=90))  + 
  theme_bw(base_size = 14,)+ theme(legend.position = "bottom")+ 
  ylab("covid19 - Casos Confirmados") + xlab("dia")+
  geom_point(aes(y = Brazil_c, color = "Brazil_c"), size=3)+ 
  geom_line(aes(y = China_c, color = "China_c"), size=1)+
#  geom_line(aes(y = France_c, color = "France_c"))+
#  geom_line(aes(y = Germany_c, color = "Germany_c"))+
#  geom_line(aes(y = Iran_c, color = "Iran_c"))+
  geom_line(aes(y = Italy_c, color = "Italy_c"), size=1)+
  geom_line(aes(y = Korea_South_c, color = "Korea_South_c"), size=1)+
  geom_line(aes(y = Spain_c, color = "Spain_c"), size=1)+
#  geom_line(aes(y = Switzerland_c, color = "Switzerland_c"))+
#  geom_line(aes(y = United_Kingdom_c, color = "United_Kingdom_c"))+
  geom_line(aes(y = US_c, color = "US_c"), size=1)+
  scale_x_date(date_labels = "%d-%b-%Y") 

NA
NA
NA
NA

Mortes


ggplot(covid, aes(as.Date(Data)))+ 
  theme(axis.text.x = element_text(angle=90)) + theme_bw()+
  ylab("covid19 - Mortes") + xlab("dia")+
    theme_bw(base_size = 16)+ theme(legend.position = "bottom") +
  geom_point(aes(y = Brazil_m, colour = "Brazil_m"), size=2)+
  geom_line(aes(y = China_m, colour = "China_m"), size=1)+
#  geom_line(aes(y = France_m, colour = "France_m"))+
#  geom_line(aes(y = Germany_m, colour = "Germany_m"))+
#  geom_line(aes(y = Iran_m, colour = "Iran_m"))+
  geom_line(aes(y = Italy_m, colour = "Italy_m"), size=1)+
  geom_line(aes(y = Korea_South_m, colour = "Korea_South_m"), size=1)+
  geom_line(aes(y = Spain_m, colour = "Spain_m"), size=1)+
#  geom_line(aes(y = Switzerland_m, colour = "Switzerland_m"))+
#  geom_line(aes(y = United_Kingdom_m, colour = "United_Kingdom_m"))+
  geom_line(aes(y = US_m, colour = "US_m"), size=1)+
  scale_x_date(date_labels = "%d-%b-%Y") 

Casos confirmados (acumulado) por M hab

# Brazil_c_1Mpop    China_c_1Mpop   France_c_1Mpop  Germany_c_1Mpop Iran_c_1Mpop    Italy_c_1Mpop   Korea_South_c_1Mpop Spain_c_1Mpop   Switzerland_c_1Mpop United_Kingdom_c_1Mpop  US_c_1Mpop

ggplot(covid, aes(as.Date(Data))) + 
  theme(axis.text.x = element_text(angle=90)) + theme_bw()+
  ylab("covid19 - Casos confirmados (acumulado) por M hab") + xlab("dia")+
    theme_bw(base_size = 16)+ theme(legend.position = "bottom") +
  geom_point(aes(y = Brazil_c_1Mpop, colour = "Brazil_c_1Mpop"), size=2)+
  geom_line(aes(y = China_c_1Mpop, colour = "China_c_1Mpop"), size=1)+
 # geom_line(aes(y = France_c_1Mpop, colour = "France_c_1Mpop"))+
#  geom_line(aes(y = Germany_c_1Mpop, colour = "Germany_c_1Mpop"))+
#  geom_line(aes(y = Iran_c_1Mpop, colour = "Iran_c_1Mpop"))+
  geom_line(aes(y = Italy_c_1Mpop, colour = "Italy_c_1Mpop"), size=1)+
  geom_line(aes(y = Korea_South_c_1Mpop, colour = "Korea_South_c_1Mpop"), size=1)+
  geom_line(aes(y = Spain_c_1Mpop, colour = "Spain_c_1Mpop"), size=1)+
#  geom_line(aes(y = Switzerland_c_1Mpop, colour = "Switzerland_c_1Mpop"))+
#  geom_line(aes(y = United_Kingdom_c_1Mpop, colour = "United_Kingdom_c_1Mpop"))+
  geom_line(aes(y = US_c_1Mpop, colour = "US_c_1Mpop"), size=1)+
  scale_x_date(date_labels = "%d-%b-%Y") 

Casos confirmados (acumulado)

# Brazil_c_ac   China_c_ac  France_c_ac Germany_c_ac    Iran_c_ac   Italy_c_ac  Korea_South_c_ac    Spain_c_ac  Switzerland_c_ac    United_Kingdom_c_ac US_c_ac


ggplot(covid, aes(as.Date(Data))) + 
  theme(axis.text.x = element_text(angle=90)) +  #scale_y_log10 () +
  ylab("covid19 - Casos confirmados (acumulado)") + xlab("dia")+ 
  theme_bw(base_size = 16)+ theme(legend.position = "bottom") + 
  geom_point(aes(y = Brazil_c_ac, colour = "Brazil_c_ac"), size=2)+
  geom_line(aes(y = China_c_ac, colour = "China_c_ac"), size=1)+
 # geom_line(aes(y = France_c_ac, colour = "France_c_ac"))+
#  geom_line(aes(y = Germany_c_ac, colour = "Germany_c_ac"))+
#  geom_line(aes(y = Iran_c_ac, colour = "Iran_c_ac"))+
  geom_line(aes(y = Italy_c_ac, colour = "Italy_c_ac"), size=1)+
  geom_line(aes(y = Korea_South_c_ac, colour = "Korea_South_c_ac"), size=1)+
  geom_line(aes(y = Spain_c_ac, colour = "Spain_c_ac"), size=1)+
#  geom_line(aes(y = Switzerland_c_ac, colour = "Switzerland_c_ac"))+
#  geom_line(aes(y = United_Kingdom_c_ac, colour = "United_Kingdom_c_ac"))+
  geom_line(aes(y = US_c_ac, colour = "US_c_ac"), size=1)+
  scale_x_date(date_labels = "%d-%b-%Y") 

Casos confirmados (acumulado) - a partir de março

# Brazil_c_ac   China_c_ac  France_c_ac Germany_c_ac    Iran_c_ac   Italy_c_ac  Korea_South_c_ac    Spain_c_ac  Switzerland_c_ac    United_Kingdom_c_ac US_c_ac
covid_s <- slice(covid, 40:1000)

ggplot(covid_s, aes(as.Date(Data))) + 
  theme(axis.text.x = element_text(angle=90)) + theme_bw()+# scale_y_log10 () +
  ylab("covid19 - Casos confirmados (acumulado)") + xlab("dia")+
  theme_bw(base_size = 16)+ theme(legend.position = "bottom") +
  geom_point(aes(y = Brazil_c_ac, colour = "Brazil_c_ac"), size=3)+
  geom_line(aes(y = China_c_ac, colour = "China_c_ac"), size=1)+
 # geom_line(aes(y = France_c_ac, colour = "France_c_ac"), size=1)+
#  geom_line(aes(y = Germany_c_ac, colour = "Germany_c_ac"), size=1)+
#  geom_line(aes(y = Iran_c_ac, colour = "Iran_c_ac"), size=1)+
  geom_line(aes(y = Italy_c_ac, colour = "Italy_c_ac"), size=1)+
  geom_line(aes(y = Korea_South_c_ac, colour = "Korea_South_c_ac"), size=1)+
  geom_line(aes(y = Spain_c_ac, colour = "Spain_c_ac"), size=1)+
#  geom_line(aes(y = Switzerland_c_ac, colour = "Switzerland_c_ac"), size=1)+
#  geom_line(aes(y = United_Kingdom_c_ac, colour = "United_Kingdom_c_ac"), size=1)+
  geom_line(aes(y = US_c_ac, colour = "US_c_ac"), size=1)+
  scale_x_date(date_labels = "%d-%b-%Y") 

Casos Confirmados - a partir de março

# Brazil_c  China_c France_c    Germany_c   Iran_c  Italy_c Korea_South_c   Spain_c Switzerland_c   United_Kingdom_c    US_c

ggplot(covid_s, aes(as.Date(Data))) +  
  theme(axis.text.x = element_text(angle=90)) + theme_bw() +#  scale_y_log10 () +
  theme_bw(base_size = 14,)+ theme(legend.position = "bottom")+ 
  ylab("covid19 - Casos Confirmados") + xlab("dia")+
  geom_point(aes(y = Brazil_c, color = "Brazil_c"), size=3)+ 
  geom_line(aes(y = China_c, color = "China_c"), size=1)+
 # geom_line(aes(y = France_c, color = "France_c"), size=1)+
#  geom_line(aes(y = Germany_c, color = "Germany_c"), size=1)+
#  geom_line(aes(y = Iran_c, color = "Iran_c"), size=1)+
  geom_line(aes(y = Italy_c, color = "Italy_c"), size=1)+
  geom_line(aes(y = Korea_South_c, color = "Korea_South_c"), size=1)+
  geom_line(aes(y = Spain_c, color = "Spain_c"), size=1)+
#  geom_line(aes(y = Switzerland_c, color = "Switzerland_c"), size=1)+
#  geom_line(aes(y = United_Kingdom_c, color = "United_Kingdom_c"), size=1)+
  geom_line(aes(y = US_c, color = "US_c"), size=1)+
  scale_x_date(date_labels = "%d-%b-%Y") 

  
#ggplot(covid, aes(x=Data, y=Brazil_m)) +  geom_point()+stat_smooth(method=loess) +  theme_bw() 

Casos confirmados (diário) por M hab - a partir de março




covid_d <- slice(covid, 40:1000)
ggplot(covid_d, aes(as.Date(Data))) + 
  theme(axis.text.x = element_text(angle=90)) + theme_bw()+
  ylab("covid19 - Casos confirmados (diário) por M Hab") + xlab("dia")+
  theme_bw(base_size = 14)+ theme(legend.position = "bottom") +
  geom_point(aes(y = Brazil_cd_1Mpop, colour = "Brazil_cd_1Mpop"), size=4, shape=1)+
  geom_line(aes(y = China_cd_1Mpop, colour = "China_cd_1Mpop"), size=1)+
#  geom_line(aes(y = France_cd_1Mpop, colour = "France_cd_1Mpop"), size=1)+
 # geom_line(aes(y = Germany_cd_1Mpop, colour = "Germany_cd_1Mpop"), size=1)+
#  geom_line(aes(y = Iran_cd_1Mpop, colour = "Iran_cd_1Mpop"), size=1)+
  geom_line(aes(y = Italy_cd_1Mpop, colour = "Italy_cd_1Mpop"), size=1)+
  geom_line(aes(y = Korea_South_cd_1Mpop, colour = "Korea_South_cd_1Mpop"), size=1)+
  geom_line(aes(y = Spain_cd_1Mpop, colour = "Spain_cd_1Mpop"), size=1)+
#  geom_line(aes(y = Switzerland_cd_1Mpop, colour = "Switzerland_cd_1Mpop"), size=1)+
#  geom_line(aes(y = United_Kingdom_cd_1Mpop, colour = "United_Kingdom_cd_1Mpop"), size=1)+
  geom_line(aes(y = US_cd_1Mpop, colour = "US_cd_1Mpop"), size=1)+
  scale_x_date(date_labels = "%d-%b-%Y") 

Casos confirmados (acumulado) a partir do 1º dia com 100 casos

# Brazil_c_ac   China_c_ac  France_c_ac Germany_c_ac    Iran_c_ac   Italy_c_ac  Korea_South_c_ac    Spain_c_ac  Switzerland_c_ac    United_Kingdom_c_ac US_c_ac


# a apartir de 100 casos 

conf <- read_excel("covid19.xlsx", sheet = "conf_100") 


ggplot(conf, aes(dias)) + 
  theme(axis.text.x = element_text(angle=90)) + theme_bw()+
  ylab("covid19 - Casos confirmados (acumulado)") + xlab("dia")+
  theme_bw(base_size = 16)+ theme(legend.position = "bottom") +
  geom_point(aes(y = Brazil_c, colour = "Brazil_c"), size=1, shape=10)+
  geom_line(aes(y = China_c, colour = "China_c"), size=1)+
 # geom_line(aes(y = France_c, colour = "France_c"), size=1)+
#  geom_line(aes(y = Germany_c, colour = "Germany_c"), size=1)+
#  geom_line(aes(y = Iran_c, colour = "Iran_c"), size=1)+
  geom_line(aes(y = Italy_c, colour = "Italy_c"), size=1)+
  geom_line(aes(y = Korea_South_c, colour = "Korea_South_c"), size=1)+
  geom_line(aes(y = Spain_c, colour = "Spain_c"), size=1)+
#  geom_line(aes(y = Switzerland_c, colour = "Switzerland_c"), size=1)+
#  geom_line(aes(y = United_Kingdom_c, colour = "United_Kingdom_c"), size=1)+
  geom_line(aes(y = US_c, colour = "US_c"), size=1)

Morte acumulada por M de hab

# Brazil_m_1Mpop    China_m_1Mpop   France_m_1Mpop  Germany_m_1Mpop Iran_m_1Mpop    Italy_m_1Mpop   Korea_South_m_1Mpop Spain_m_1Mpop   Switzerland_m_1Mpop United_Kingdom_m_1Mpop  US_m_1Mpop
ggplot(covid, aes(as.Date(Data))) + 
  theme(axis.text.x = element_text(angle=90)) + theme_bw()+
  ylab("covid19 - Morte acumulada por M de hab ") + xlab("dia")+
  geom_point(aes(y = Brazil_m_1Mpop, colour = "Brazil_m_1Mpop"), size=1)+
  geom_line(aes(y = China_m_1Mpop, colour = "China_m_1Mpop"), size=1)+
#  geom_line(aes(y = France_m_1Mpop, colour = "France_m_1Mpop"))+
#  geom_line(aes(y = Germany_m_1Mpop, colour = "Germany_m_1Mpop"))+
#  geom_line(aes(y = Iran_m_1Mpop, colour = "Iran_m_1Mpop"))+
  geom_line(aes(y = Italy_m_1Mpop, colour = "Italy_m_1Mpop"), size=1)+
  geom_line(aes(y = Korea_South_m_1Mpop, colour = "Korea_South_m_1Mpop"), size=1)+
  geom_line(aes(y = Spain_m_1Mpop, colour = "Spain_m_1Mpop"), size=1)+
#  geom_line(aes(y = Switzerland_m_1Mpop, colour = "Switzerland_m_1Mpop"))+
#  geom_line(aes(y = United_Kingdom_m_1Mpop, colour = "United_Kingdom_m_1Mpop"))+
  geom_line(aes(y = US_m_1Mpop, colour = "US_m_1Mpop"), size=1)+
    theme_bw(base_size = 16)+ theme(legend.position = "bottom") +
  scale_x_date(date_labels = "%d-%b-%Y") 

Morte acumulada

# Brazil_m_ac   China_m_ac  France_m_ac Germany_m_ac    Iran_m_ac   Italy_m_ac  Korea_South_m_ac    Spain_m_ac  Switzerland_m_ac    United_Kingdom_m_ac US_m_ac

ggplot(covid, aes(as.Date(Data))) + 
  theme(axis.text.x = element_text(angle=90)) + theme_bw()+
  ylab("covid19 - Morte acumulada") + xlab("dia")+
  geom_point(aes(y = Brazil_m_ac, colour = "Brazil_m_ac"), size=1)+
  geom_line(aes(y = China_m_ac, colour = "China_m_ac"), size=1)+
#  geom_line(aes(y = France_m_ac, colour = "France_m_ac"))+
#  geom_line(aes(y = Germany_m_ac, colour = "Germany_m_ac"))+
#  geom_line(aes(y = Iran_m_ac, colour = "Iran_m_ac"))+
  geom_line(aes(y = Italy_m_ac, colour = "Italy_m_ac"), size=1)+
  geom_line(aes(y = Korea_South_m_ac, colour = "Korea_South_m_ac"), size=1)+
  geom_line(aes(y = Spain_m_ac, colour = "Spain_m_ac"), size=1)+
#  geom_line(aes(y = Switzerland_m_ac, colour = "Switzerland_m_ac"))+
#  geom_line(aes(y = United_Kingdom_m_ac, colour = "United_Kingdom_m_ac"))+
  geom_line(aes(y = US_m_ac, colour = "US_m_ac"), size=1)+
    theme_bw(base_size = 16)+ theme(legend.position = "bottom") +
  scale_x_date(date_labels = "%d-%b-%Y") 

Morte por densidade demográfica

# Brazil_m_d    China_m_d   France_m_d  Germany_m_d Iran_m_d    Italy_m_d   Korea_South_m_d Spain_m_d   Switzerland_m_d United_Kingdom_m_d  US_m_d
ggplot(covid, aes(as.Date(Data))) + 
  theme(axis.text.x = element_text(angle=90)) + theme_bw()+
  ylab("covid19 - Morte por densidade demográfica") + xlab("dia")+
  geom_point(aes(y = Brazil_m_d, colour = "Brazil_m_d"), size=1)+
  geom_line(aes(y = China_m_d, colour = "China_m_d"), size=1)+
 # geom_line(aes(y = France_m_d, colour = "France_m_d"))+
#  geom_line(aes(y = Germany_m_d, colour = "Germany_m_d"))+
#  geom_line(aes(y = Iran_m_d, colour = "Iran_m_d"))+
  geom_line(aes(y = Italy_m_d, colour = "Italy_m_d"), size=1)+
  geom_line(aes(y = Korea_South_m_d, colour = "Korea_South_m_d"), size=1)+
  geom_line(aes(y = Spain_m_d, colour = "Spain_m_d"), size=1)+
#  geom_line(aes(y = Switzerland_m_d, colour = "Switzerland_m_d"))+
#  geom_line(aes(y = United_Kingdom_m_d, colour = "United_Kingdom_m_d"))+
  geom_line(aes(y = US_m_d, colour = "US_m_d"), size=1)+
    theme_bw(base_size = 16)+ theme(legend.position = "bottom") +
  scale_x_date(date_labels = "%d-%b-%Y") 

library(readxl)





covid3 <- read_excel("covid19.xlsx", sheet = "r2", 
    col_types = c("text", "numeric", "date", 
        "date", "numeric", "numeric", "text", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric"))



#covid3
# Tempo de Isolamento após registro do 1º caso x mortos x densidade
#Fonte de dados: [https://www.worldometers.info/coronavirus/#countries]

#covid3 <-na.exclude(covid3)
#ggplot(covid3, aes(x=pais)) + 
#  theme(axis.text.x = element_text(angle=90)) + theme_hc()+
#  ylab("covid19 - Tempo de Isolamento após registro do 1º caso") + xlab("País")+
#  geom_point(aes(y = tempo_1_caso_isolamento, size = mortos_28_03, colour = pais))
 

#ggplot(covid3, aes(x=pais)) + 
#  theme(axis.text.x = element_text(angle=90)) + theme_hc()+
#  ylab("covid19 - Tempo de Isolamento após registro do 1º caso") + xlab("País")+ theme_calc()+
#  geom_point(aes(y = tempo_1_caso_isolamento, size = mortos_28_03, colour = densidade))

Casos confirmados (acumulado) x Tempos de Isolamento Social

#x: tempo acumulado em isolamento
#y: casos conf acumum 

# US_t  Italy_t China_t Spain_t Germany_t   France_t    United_Kingdom_t    Korea_South_t   Brazil_t

ggplot(covid, aes(x=China_t)) +  theme(axis.text.x = element_text(angle=90)) +  
#  scale_color_brewer(palette = "Accent") +
  theme_bw(base_size = 14)+ theme(legend.position = "bottom") +
  ylab("Covid19 - Casos confirmados (acumulado)") +
  ggtitle("A linha pontilhada indica quando cada país iniciou o isolamento social") +
  xlab("Tempo em isolamento da China")+
  geom_point(aes(y = Brazil_c_ac, color = "Brazil_c_ac"), shape=0, size=2) + 
  geom_point(aes(y = China_c_ac, colour = "China_c_ac"), shape=1, size=2)+ 
#  geom_point(aes(y = France_c_ac, colour = "France_c_ac"), shape=2, size=2)+
#  geom_point(aes(y = Germany_c_ac, colour = "Germany_c_ac"), shape=3, size=2)+
  geom_point(aes(y = Italy_c_ac, colour = "Italy_c_ac"), shape=4, size=2)+
  geom_point(aes(y = Korea_South_c_ac, colour = "Korea_South_c_ac"), shape=5, size=2)+
  geom_point(aes(y = Spain_c_ac, colour = "Spain_c_ac"), shape=6, size=2)+
#  geom_point(aes(y = United_Kingdom_c_ac, colour = "United_Kingdom_c_ac"), shape=7, size=2)+
  geom_point(aes(y = US_c_ac, colour = "US_c_ac"), shape=8, size=2) +  geom_text(aes(xx, yy, label=pais))+
  geom_segment(aes(x=33, y=0,yend=100000,xend =33), size=1, linetype=8)+
  geom_segment(aes(x=0, y=0 ,yend=103000,xend =0), size=1, linetype=8)+
    geom_segment(aes(x=9, y=0 ,yend=100000,xend =9), size=1, linetype=8)+ 
    geom_segment(aes(x=5, y=0 ,yend=97000 ,xend =5), size=1, linetype=8)+
    geom_segment(aes(x=1, y=0 ,yend=109000,xend =1), size=1, linetype=8)+
    geom_segment(aes(x=-2, y=0,yend=100000,xend =-2), size=1, linetype=8)+
    geom_segment(aes(x=3, y=0 ,yend=115000,xend =3), size=1, linetype=8)+
    geom_segment(aes(x=55, y=0,yend=100000,xend =55), size=1, linetype=8)+
    geom_segment(aes(x=40, y=0,yend=100000,xend =40), size=1, linetype=8)

NA
NA

Casos confirmados (acumulado) x Tempos de Isolamento Social

#x: tempo acumulado em isolamento
#y: casos conf acumum 

# US_t  Italy_t China_t Spain_t Germany_t   France_t    United_Kingdom_t    Korea_South_t   Brazil_t

# BASE DE DADOS CHAMADA isolam - COM DADOS SOMENTE DO INÍCIO DE ISOLAM DE CADA PAÍS


grafico_isolam <- read_excel("covid19.xlsx", sheet = "isolam") 

ggplot(grafico_isolam, aes(x=China_t)) +  theme(axis.text.x = element_text(angle=90)) +  
#  scale_color_brewer(palette = "Accent") +
  theme_bw(base_size = 16)+ theme(legend.position = "bottom") +
  ylab("Covid19 - Casos confirmados (acumulado)") +
  ggtitle("Tempo acumulado em isolamento social x Casos confirmados (acumulado) ") +
  xlab("Tempo acumulado em isolamento social")+
  geom_point(aes(y = Brazil_c_ac, color = "Brazil_c_ac"), size=4) + 
  geom_line(aes(y = China_c_ac, colour = "China_c_ac"), size=1)+ 
#  geom_point(aes(y = France_c_ac, colour = "France_c_ac"), shape=2, size=2)+
#  geom_point(aes(y = Germany_c_ac, colour = "Germany_c_ac"), shape=3, size=2)+
  geom_line(aes(y = Italy_c_ac, colour = "Italy_c_ac"), size=1)+
  geom_line(aes(y = Korea_South_c_ac, colour = "Korea_South_c_ac"), size=1)+
  geom_line(aes(y = Spain_c_ac, colour = "Spain_c_ac"), size=1)+
#  geom_point(aes(y = United_Kingdom_c_ac, colour = "United_Kingdom_c_ac"), shape=7, size=2)+
  geom_line(aes(y = US_c_ac, colour = "US_c_ac"), size=1)

Mortes - Box-plot

library(stringr)
covid2 <-covid[,c(1:109)]
covid2 <- stack(covid2)
covid2 <-filter(covid2,str_detect(ind, "_m"))
covid2 <-filter(covid2,str_detect(ind,"_m(?!_ac)"))
covid2 <-filter(covid2,str_detect(ind,"_m(?!_1Mpop)"))
covid2 <-filter(covid2,str_detect(ind,"_m(?!_d)"))

covid2 <- arrange(covid2,values)

ggplot(covid2, aes(x = ind, y = values )) + geom_boxplot(aes(fill = ind))+ theme_bw()+
  ylab("covid19 - Mortes") + xlab("País") + theme(axis.text.x = element_text(angle=90)) +
 theme(legend.position = "bottom") 



ggplot(covid2, aes(x = ind, y = values )) + 
  geom_dotplot(aes(color = ind), binaxis="y", stackdir='centerwhole', fill = "white",dotsize=0.5) + theme_bw()+
  ylab("covid19 - Mortes") + xlab("País") + theme(axis.text.x = element_text(angle=90)) +
 theme(legend.position = "bottom") 

Casos Confirmados - Box-plot

library(stringr)
covid2 <-covid[,c(1:109)]
covid2 <- stack(covid2)
covid2 <-filter(covid2,str_detect(ind, "_c"))
covid2 <-filter(covid2,str_detect(ind,"_c(?!_ac)"))
covid2 <-filter(covid2,str_detect(ind,"_c(?!_1Mpop)"))
covid2 <-filter(covid2,str_detect(ind,"_c(?!_d)"))
covid2 <- arrange(covid2,values)

ggplot(covid2, aes(x = ind, y = values )) + geom_boxplot(aes(fill = ind))+ theme_bw()+
  ylab("covid19 - Casos Confirmados") + xlab("País") + theme(axis.text.x = element_text(angle=90)) +
 theme(legend.position = "bottom") 


ggplot(covid2, aes(x = ind, y = values )) + 
  geom_dotplot(aes(color = ind), binaxis="y", stackdir='centerwhole', fill = "white",dotsize=0.5) + theme_bw()+
  ylab("covid19 - Casos Confirmados") + xlab("País") + theme(axis.text.x = element_text(angle=90)) +
  theme(legend.position = "bottom") 

Mortes (acumuladas) desde a 1º morte em cada país


#Italy_m_ac Spain_m_ac  China_m_ac  US_m_ac Korea_South_m_ac    Brazil_m_ac dia

desconto=3000
x=65

covid_1dia <- read_excel("covid19.xlsx", sheet = "1morte") 

ggplot(covid_1dia, aes(Dia)) + 
  theme(axis.text.x = element_text(angle=90)) + theme_bw()+
  ylab("covid19 - Mortes (acumulada)") + xlab("dia")+
  theme_bw(base_size = 16)+ theme(legend.position = "bottom") +
  geom_point(aes(y = Brazil_m_ac, colour = "Brazil_m_ac"), size=2, shape=10)+
  geom_line(aes(y = China_m_ac, colour = "China_m_ac"), size=1)+
 # geom_line(aes(y = France_m_ac, colour = "France_m_ac"), size=1)+
#  geom_line(aes(y = Germany_m_ac, colour = "Germany_m_ac"), size=1)+
#  geom_line(aes(y = Iran_m_ac, colour = "Iran_m_ac"), size=1)+
  geom_line(aes(y = Italy_m_ac, colour = "Italy_m_ac"), size=1)+
  geom_line(aes(y = Korea_South_m_ac, colour = "Korea_South_m_ac"), size=1)+
  geom_line(aes(y = Spain_m_ac, colour = "Spain_m_ac"), size=1)+
#  geom_line(aes(y = Switzerland_m_ac, colour = "Switzerland_m_ac"), size=1)+
#  geom_line(aes(y = United_Kingdom_m_ac, colour = "United_Kingdom_m_ac"), size=1)+
  geom_line(aes(y = US_m_ac, colour = "US_m_ac"), size=1)+
  geom_vline(aes(xintercept=30),size=1,linetype="dashed", color="blue" )#+

#    geom_text(aes(label = covid_1dia$Brazil_m_ac[30],     x=x+20, y=10000+desconto), color="black", size=7)+
#    geom_text(aes(label = covid_1dia$China_m_ac[30],      x=x+20, y=10000+2*desconto), color="black", size=7)+
#    geom_text(aes(label = covid_1dia$Italy_m_ac[30],      x=x+20, y=10000+3*desconto), color="black", size=7)+
#    geom_text(aes(label = covid_1dia$Korea_South_m_ac[30],x=x+20, y=10000+4*desconto), color="black", size=7)+
#    geom_text(aes(label = covid_1dia$Spain_m_ac[30],      x=x+20, y=10000+5*desconto), color="black", size=7)+
#    geom_text(aes(label = covid_1dia$US_m_ac[30],         x=x+20, y=10000+6*desconto), color="black", size=7)+
  #geom_text(aes(label = "Mortes no 30º Dia",     x=15, y=10000+6*desconto), color="blue", size=7)+
  #geom_text(aes(label = "desde a 1º morte",     x=15, y=10000+6*desconto-2500), color="blue", size=7)+
  #geom_text(aes(label = "em cada país",     x=15, y=10000+6*desconto-5000), color="blue", size=7)+
 #   geom_text(aes(label = "Brazil",     x=x, y=10000+desconto), color="black", size=7,nudge_x=0)+
#    geom_text(aes(label = "China",      x=x, y=10000+2*desconto), color="black", size=7,nudge_x=0)+
 #   geom_text(aes(label = "Italy",      x=x, y=10000+3*desconto), color="black", size=7,nudge_x=-1)+
#    geom_text(aes(label = "Korea_South", x=x, y=10000+4*desconto), color="black", size=7,nudge_x=5)+
 #   geom_text(aes(label = "Spain",      x=x, y=10000+5*desconto), color="black", size=7,nudge_x=0)+
#    geom_text(aes(label = "US",         x=x, y=10000+6*desconto), color="black", size=7,nudge_x=-1)

Mortes (acumuladas) desde o 1º caso confirmado em cada país


#Italy_m_ac Spain_m_ac  China_m_ac  US_m_ac Korea_South_m_ac    Brazil_m_ac dia

covid_1dia <- read_excel("covid19.xlsx", sheet = "1caso") 

ggplot(covid_1dia, aes(Dia)) + 
  theme(axis.text.x = element_text(angle=90)) + theme_bw()+
  ylab("covid19 - Mortes (acumulada)") + xlab("dia")+
  theme_bw(base_size = 16)+ theme(legend.position = "bottom") +
  geom_point(aes(y = Brazil_m_ac, colour = "Brazil_m_ac"), size=2, shape=10)+
  geom_line(aes(y = China_m_ac, colour = "China_m_ac"), size=1)+
 # geom_line(aes(y = France_m_ac, colour = "France_m_ac"), size=1)+
#  geom_line(aes(y = Germany_m_ac, colour = "Germany_m_ac"), size=1)+
#  geom_line(aes(y = Iran_m_ac, colour = "Iran_m_ac"), size=1)+
  geom_line(aes(y = Italy_m_ac, colour = "Italy_m_ac"), size=1)+
  geom_line(aes(y = Korea_South_m_ac, colour = "Korea_South_m_ac"), size=1)+
  geom_line(aes(y = Spain_m_ac, colour = "Spain_m_ac"), size=1)+
#  geom_line(aes(y = Switzerland_m_ac, colour = "Switzerland_m_ac"), size=1)+
#  geom_line(aes(y = United_Kingdom_m_ac, colour = "United_Kingdom_m_ac"), size=1)+
  geom_line(aes(y = US_m_ac, colour = "US_m_ac"), size=1)+
 geom_vline(aes(xintercept=50),size=1,linetype="dashed", color="blue" )#+

#    geom_text(aes(label = covid_1dia$Brazil_m_ac[50],     x=x+20, y=10000+desconto), color="black", size=7)+
#    geom_text(aes(label = covid_1dia$China_m_ac[50],      x=x+20, y=10000+2*desconto), color="black", size=7)+
#    geom_text(aes(label = covid_1dia$Italy_m_ac[50],      x=x+20, y=10000+3*desconto), color="black", size=7)+
#    geom_text(aes(label = covid_1dia$Korea_South_m_ac[50],x=x+20, y=10000+4*desconto), color="black", size=7)+
#    geom_text(aes(label = covid_1dia$Spain_m_ac[50],      x=x+20, y=10000+5*desconto), color="black", size=7)+
##    geom_text(aes(label = covid_1dia$US_m_ac[50],         x=x+20, y=10000+6*desconto), color="black", size=7)+
#  geom_text(aes(label = "Mortes no 50º Dia",     x=15, y=10000+6*desconto), color="blue", size=7)+
#  geom_text(aes(label = "desde o 1º caso",     x=15, y=10000+6*desconto-2500), color="blue", size=7)+
#  geom_text(aes(label = "em cada país",     x=15, y=10000+6*desconto-5000), color="blue", size=7)+
#    geom_text(aes(label = "Brazil",     x=x, y=10000+desconto), color="black", size=7,nudge_x=0)+
##    geom_text(aes(label = "China",      x=x, y=10000+2*desconto), color="black", size=7,nudge_x=0)+
#    geom_text(aes(label = "Italy",      x=x, y=10000+3*desconto), color="black", size=7,nudge_x=-1)+
#    geom_text(aes(label = "Korea_South", x=x, y=10000+4*desconto), color="black", size=7,nudge_x=3)+
#    geom_text(aes(label = "Spain",      x=x, y=10000+5*desconto), color="black", size=7,nudge_x=0)+
#    geom_text(aes(label = "US",         x=x, y=10000+6*desconto), color="black", size=7,nudge_x=-1)

Mortes (acumuladas) por M hab desde o 1º caso confirmado em cada país


#   Italy_m_ac_1Mpop    Spain_m_ac_1Mpop    China_m_ac_1Mpop    US_m_ac_1Mpop   Korea_South_m_ac_1Mpop  Brazil_m_ac_1Mpop

desconto=50
x=75
covid_1dia <- read_excel("covid19.xlsx", sheet = "1caso") 

ggplot(covid_1dia, aes(Dia)) + 
  theme(axis.text.x = element_text(angle=90)) + theme_bw()+
  ylab("covid19 - Mortes (acumulada) por M hab") + xlab("dia")+
  theme_bw(base_size = 16)+ theme(legend.position = "bottom") +
  geom_point(aes(y = Brazil_m_ac_1Mpop, colour = "Brazil_m_ac_1Mpop"), size=2, shape=10)+
  geom_line(aes(y = China_m_ac_1Mpop, colour = "China_m_ac_1Mpop"), size=1)+
 # geom_line(aes(y = France_m_ac_1Mpop, colour = "France_m_ac_1Mpop"), size=1)+
#  geom_line(aes(y = Germany_m_ac_1Mpop, colour = "Germany_m_ac_1Mpop"), size=1)+
#  geom_line(aes(y = Iran_m_ac_1Mpop, colour = "Iran_m_ac_1Mpop"), size=1)+
  geom_line(aes(y = Italy_m_ac_1Mpop, colour = "Italy_m_ac_1Mpop"), size=1)+
  geom_line(aes(y = Korea_South_m_ac_1Mpop, colour = "Korea_South_m_ac_1Mpop"), size=1)+
  geom_line(aes(y = Spain_m_ac_1Mpop, colour = "Spain_m_ac_1Mpop"), size=1)+
#  geom_line(aes(y = Switzerland_m_ac_1Mpop, colour = "Switzerland_m_ac_1Mpop"), size=1)+
#  geom_line(aes(y = United_Kingdom_m_ac_1Mpop, colour = "United_Kingdom_m_ac_1Mpop"), size=1)+
  geom_line(aes(y = US_m_ac_1Mpop, colour = "US_m_ac_1Mpop"), size=1)+
 geom_vline(aes(xintercept=50),size=1,linetype="dashed", color="blue" )#+

#    geom_text(aes(label = round(covid_1dia$Brazil_m_ac_1Mpop[50],2),     x=x+25, y=1+desconto), color="black", size=7)+
#    geom_text(aes(label = round(covid_1dia$China_m_ac_1Mpop[50],2),      x=x+25, y=1+1.5*desconto), color="black", size=7)+
#    geom_text(aes(label = round(covid_1dia$Italy_m_ac_1Mpop[50],2),      x=x+25, y=1+2*desconto), color="black", size=7)+
#    geom_text(aes(label = round(covid_1dia$Korea_South_m_ac_1Mpop[50],2),x=x+25, y=1+2.5*desconto), color="black", size=7)+
#    geom_text(aes(label = round(covid_1dia$Spain_m_ac_1Mpop[50],2),      x=x+25, y=1+3*desconto), color="black", size=7)+
#    geom_text(aes(label = round(covid_1dia$US_m_ac_1Mpop[50],2),         x=x+25, y=1+3.5*desconto), color="black", size=7)+
#  geom_text(aes(label = "Mortes no 50º Dia",     x=15, y=1+6*desconto), color="blue", size=7)+
#  geom_text(aes(label = "desde o 1º caso",     x=15, y=1+5*desconto), color="blue", size=7)+
#  geom_text(aes(label = "por M Hab em cada país",     x=15, y=1+4*desconto), color="blue", size=7)+
#    geom_text(aes(label = "Brazil",     x=x, y=1+desconto), color="black", size=7,nudge_x=0)+
#    geom_text(aes(label = "China",      x=x, y=1+1.5*desconto), color="black", size=7,nudge_x=0)+
#    geom_text(aes(label = "Italy",      x=x, y=1+2*desconto), color="black", size=7,nudge_x=-1)+
#    geom_text(aes(label = "Korea_South", x=x, y=1+2.5*desconto), color="black", size=7,nudge_x=3)+
#    geom_text(aes(label = "Spain",      x=x, y=1+3*desconto), color="black", size=7,nudge_x=0)+
#    geom_text(aes(label = "US",         x=x, y=1+3.5*desconto), color="black", size=7,nudge_x=-1)
LS0tDQp0aXRsZTogIkNvdmlkLTE5Ig0KYXV0aG9yOiAiUHJvZmVzc29yIERyLiBMZW9uaSwgUi4gQy4gLSBBTUFOIC0gUmVzZW5kZSAtIFJKLiINCmRhdGU6ICdSZWxhdMOzcmlvIGdlcmFkbyBlbTogYHIgZm9ybWF0KFN5cy50aW1lKCksICIlZCBkZSAlQiBkZSAlWSIpYCcNCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgdGhlbWU6IGpvdXJuYWwNCiAgICB0b2M6IHllcw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQplbWFpbDogbGVvbmkucm9iZXJ0b0BhbWFuLmViLm1pbC5icg0KLS0tDQoNCiAgICBbRm9udGUgZG9zIGRhZG9zXToNCiAgICBodHRwczovL2dpdGh1Yi5jb20vQ1NTRUdJU2FuZERhdGEvQ09WSUQtMTkvdHJlZS9tYXN0ZXIvY3NzZV9jb3ZpZF8xOV9kYXRhL2Nzc2VfY292aWRfMTlfdGltZV9zZXJpZXMgDQogICAgaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS9lbi9jaGluYS9jaXRpZXMvaHViZWkvDQogICAgaHR0cHM6Ly93d3cud29ybGRvbWV0ZXJzLmluZm8vY29yb25hdmlydXMvI2NvdW50cmllcw0KICAgIGh0dHBzOi8vd3d3Lndvcmxkb21ldGVycy5pbmZvL2dlb2dyYXBoeS9jb3VudHJpZXMtb2YtdGhlLXdvcmxkLw0KICAgIGh0dHBzOi8vd3d3Lndvcmxkb21ldGVycy5pbmZvL3dvcmxkLXBvcHVsYXRpb24vcG9wdWxhdGlvbi1ieS1yZWdpb24vDQoNCmBgYHtyfQ0KI3ZhcmnDoXZlaXMNCiNCcmF6aWxfYwlDaGluYV9jCUZyYW5jZV9jCUdlcm1hbnlfYwlJcmFuX2MJSXRhbHlfYwlLb3JlYV9Tb3V0aF9jCVNwYWluX2MJU3dpdHplcmxhbmRfYwlVbml0ZWRfS2luZ2RvbV9jCVVTX2MgQnJhemlsX2NfMU1wb3AJQ2hpbmFfY18xTXBvcCBGcmFuY2VfY18xTXBvcAlHZXJtYW55X2NfMU1wb3AJSXJhbl9jXzFNcG9wCUl0YWx5X2NfMU1wb3AJS29yZWFfU291dGhfY18xTXBvcAlTcGFpbl9jXzFNcG9wCVN3aXR6ZXJsYW5kX2NfMU1wb3AJVW5pdGVkX0tpbmdkb21fY18xTXBvcAlVU19jXzFNcG9wIEJyYXppbF9jX2FjCUNoaW5hX2NfYWMJRnJhbmNlX2NfYWMJR2VybWFueV9jX2FjCUlyYW5fY19hYwlJdGFseV9jX2FjCUtvcmVhX1NvdXRoX2NfYWMJU3BhaW5fY19hYwlTd2l0emVybGFuZF9jX2FjCVVuaXRlZF9LaW5nZG9tX2NfYWMJVVNfY19hYyBCcmF6aWxfY19kCUNoaW5hX2NfZAlGcmFuY2VfY19kCUdlcm1hbnlfY19kCUlyYW5fY19kCUl0YWx5X2NfZAlLb3JlYV9Tb3V0aF9jX2QJU3BhaW5fY19kCVN3aXR6ZXJsYW5kX2NfZAlVbml0ZWRfS2luZ2RvbV9jX2QJVVNfY19kIEJyYXppbF9tCUNoaW5hX20JRnJhbmNlX20JR2VybWFueV9tCUlyYW5fbQlJdGFseV9tCUtvcmVhX1NvdXRoX20JU3BhaW5fbQlTd2l0emVybGFuZF9tCVVuaXRlZF9LaW5nZG9tX20JVVNfbSBCcmF6aWxfbV8xTXBvcAlDaGluYV9tXzFNcG9wCUZyYW5jZV9tXzFNcG9wCUdlcm1hbnlfbV8xTXBvcAlJcmFuX21fMU1wb3AJSXRhbHlfbV8xTXBvcAlLb3JlYV9Tb3V0aF9tXzFNcG9wCVNwYWluX21fMU1wb3AJU3dpdHplcmxhbmRfbV8xTXBvcAlVbml0ZWRfS2luZ2RvbV9tXzFNcG9wCVVTX21fMU1wb3AgQnJhemlsX21fYWMJQ2hpbmFfbV9hYwlGcmFuY2VfbV9hYwlHZXJtYW55X21fYWMJSXJhbl9tX2FjCUl0YWx5X21fYWMJS29yZWFfU291dGhfbV9hYwlTcGFpbl9tX2FjCVN3aXR6ZXJsYW5kX21fYWMJVW5pdGVkX0tpbmdkb21fbV9hYwlVU19tX2FjIEJyYXppbF9tX2QJQ2hpbmFfbV9kCUZyYW5jZV9tX2QJR2VybWFueV9tX2QJSXJhbl9tX2QJSXRhbHlfbV9kCUtvcmVhX1NvdXRoX21fZAlTcGFpbl9tX2QJU3dpdHplcmxhbmRfbV9kCVVuaXRlZF9LaW5nZG9tX21fZAlVU19tX2QNCiAgICANCiNMZWdlbmRhOiANCiMgICAgX2MJY29uZmlybWFkbw0KIyAgICBfY19hYwljb25maXJtYWRvIGFjdW11bGFkbw0KIyAgICBfbQltb3J0ZQ0KIyAgICBfbV9hYwltb3J0ZSBhY3VtdWxhZGENCiMgICAgX2NfZAljb25maXJtYWRvL2RlbnNpZGFkZQ0KIyAgICBfbV9kCW1vcnRlL2RlbnNpZGFkZQ0KIyAgICBfY18xTXBvcAljb25maXJtYWRvIGFjdW11bGFkbyBwb3IgTSBkZSBoYWIgKG9taXRpIF9hYyBwYXJhIHByZXNlcnZhciBvIHRhbWFuaG8gZGEgdmFyacOhdmVsKQkJCQkJDQojICAgIF9tXzFNcG9wCW1vcnRlIGFjdW11bGFkYSBwb3IgTSBkZSBoYWIgKG9taXRpIF9hYyBwYXJhIHByZXNlcnZhciBvIHRhbWFuaG8gZGEgdmFyacOhdmVsKQkJCQ0KIyAgICBfY2RfMU1wb3AgY29uZmlybWFkbyBwb3IgZGlhIHBvciBNIGRlIGhhYg0KDQojICAgUm90ZWlybzoNCiMgICAgMSkgVG9wIDEwICsgQnJhc2lsDQojICAgIDIpIEdyYWYgTm92b3MgY2Fzb3MgcG9yIGRpYSBlIE1vcnRvcyBwb3IgZGlhDQojICAgIDMpIE1hdHJpeg0KIyAgICBhKSBGYWl4YSBldMOhcmlhPyAoaWRhZGUgbcOpZGlhKQ0KIyAgICBiKSBkZW5zaWRhZGUgZGVtb2cuDQojICAgIGMpIGluw61jaW8gZG8gaXNvbGFtZW50byBzb2NpYWwNCiMgICAgZCkgcHJpbWVpcm8gY2FzbyBkZSBjb3JvbmEgY29uZmlybWFkbyAgIA0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkoZ2d0aGVtZXMpDQpsaWJyYXJ5KHJlc2hhcGUyKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHJlYWR4bCkNCmNvdmlkIDwtIHJlYWRfZXhjZWwoImNvdmlkMTkueGxzeCIsIHNoZWV0ID0gInIiKSANCg0KI2NvdmlkICU+JSBzbGljZSg4NikgJT4lIHNlbGVjdChjb250YWlucygiX2FjIikpDQoNCg0KYGBgDQogICMgQmFzZXMgVGhlIENlbnRlciBmb3IgU3lzdGVtcyBTY2llbmNlIGFuZCBFbmdpbmVlcmluZyAoQ1NTRSkgYXQgSm9obnMgSG9wa2lucyBVbml2ZXJzaXR5IC0gQmFsdGltb3JlLCBNRCANCiAgICANCiAgICBjb3ZpZDE5X2NvbmZpcm1lZF9nbG9iYWwNCiAgICBjb3ZpZDE5X2RlYXRoc19nbG9iYWwNCg0KIyBDYXNvcyBDb25maXJtYWRvcw0KYGBge3IgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9MTJ9DQojIEJyYXppbF9jCUNoaW5hX2MJRnJhbmNlX2MJR2VybWFueV9jCUlyYW5fYwlJdGFseV9jCUtvcmVhX1NvdXRoX2MJU3BhaW5fYwlTd2l0emVybGFuZF9jCVVuaXRlZF9LaW5nZG9tX2MJVVNfYw0KDQpnZ3Bsb3QoY292aWQsIGFlcyhhcy5EYXRlKERhdGEpKSkgKyAgDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkgICsgDQogIHRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE0LCkrIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSsgDQogIHlsYWIoImNvdmlkMTkgLSBDYXNvcyBDb25maXJtYWRvcyIpICsgeGxhYigiZGlhIikrDQogIGdlb21fcG9pbnQoYWVzKHkgPSBCcmF6aWxfYywgY29sb3IgPSAiQnJhemlsX2MiKSwgc2l6ZT0zKSsgDQogIGdlb21fbGluZShhZXMoeSA9IENoaW5hX2MsIGNvbG9yID0gIkNoaW5hX2MiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IEZyYW5jZV9jLCBjb2xvciA9ICJGcmFuY2VfYyIpKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IEdlcm1hbnlfYywgY29sb3IgPSAiR2VybWFueV9jIikpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gSXJhbl9jLCBjb2xvciA9ICJJcmFuX2MiKSkrDQogIGdlb21fbGluZShhZXMoeSA9IEl0YWx5X2MsIGNvbG9yID0gIkl0YWx5X2MiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gS29yZWFfU291dGhfYywgY29sb3IgPSAiS29yZWFfU291dGhfYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBTcGFpbl9jLCBjb2xvciA9ICJTcGFpbl9jIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBTd2l0emVybGFuZF9jLCBjb2xvciA9ICJTd2l0emVybGFuZF9jIikpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gVW5pdGVkX0tpbmdkb21fYywgY29sb3IgPSAiVW5pdGVkX0tpbmdkb21fYyIpKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gVVNfYywgY29sb3IgPSAiVVNfYyIpLCBzaXplPTEpKw0KICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJWQtJWItJVkiKSANCg0KDQogIA0KICANCmBgYA0KDQojIE1vcnRlcw0KDQpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD0xMn0NCg0KZ2dwbG90KGNvdmlkLCBhZXMoYXMuRGF0ZShEYXRhKSkpKyANCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGU9OTApKSArIHRoZW1lX2J3KCkrDQogIHlsYWIoImNvdmlkMTkgLSBNb3J0ZXMiKSArIHhsYWIoImRpYSIpKw0KICAgIHRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE2KSsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsNCiAgZ2VvbV9wb2ludChhZXMoeSA9IEJyYXppbF9tLCBjb2xvdXIgPSAiQnJhemlsX20iKSwgc2l6ZT0yKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gQ2hpbmFfbSwgY29sb3VyID0gIkNoaW5hX20iKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IEZyYW5jZV9tLCBjb2xvdXIgPSAiRnJhbmNlX20iKSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBHZXJtYW55X20sIGNvbG91ciA9ICJHZXJtYW55X20iKSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBJcmFuX20sIGNvbG91ciA9ICJJcmFuX20iKSkrDQogIGdlb21fbGluZShhZXMoeSA9IEl0YWx5X20sIGNvbG91ciA9ICJJdGFseV9tIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IEtvcmVhX1NvdXRoX20sIGNvbG91ciA9ICJLb3JlYV9Tb3V0aF9tIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IFNwYWluX20sIGNvbG91ciA9ICJTcGFpbl9tIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBTd2l0emVybGFuZF9tLCBjb2xvdXIgPSAiU3dpdHplcmxhbmRfbSIpKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IFVuaXRlZF9LaW5nZG9tX20sIGNvbG91ciA9ICJVbml0ZWRfS2luZ2RvbV9tIikpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBVU19tLCBjb2xvdXIgPSAiVVNfbSIpLCBzaXplPTEpKw0KICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJWQtJWItJVkiKSANCg0KYGBgDQoNCg0KIyBDYXNvcyBjb25maXJtYWRvcyAoYWN1bXVsYWRvKSBwb3IgTSBoYWINCg0KYGBge3IgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9MTJ9DQojIEJyYXppbF9jXzFNcG9wCUNoaW5hX2NfMU1wb3AJRnJhbmNlX2NfMU1wb3AJR2VybWFueV9jXzFNcG9wCUlyYW5fY18xTXBvcAlJdGFseV9jXzFNcG9wCUtvcmVhX1NvdXRoX2NfMU1wb3AJU3BhaW5fY18xTXBvcAlTd2l0emVybGFuZF9jXzFNcG9wCVVuaXRlZF9LaW5nZG9tX2NfMU1wb3AJVVNfY18xTXBvcA0KDQpnZ3Bsb3QoY292aWQsIGFlcyhhcy5EYXRlKERhdGEpKSkgKyANCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGU9OTApKSArIHRoZW1lX2J3KCkrDQogIHlsYWIoImNvdmlkMTkgLSBDYXNvcyBjb25maXJtYWRvcyAoYWN1bXVsYWRvKSBwb3IgTSBoYWIiKSArIHhsYWIoImRpYSIpKw0KICAgIHRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE2KSsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsNCiAgZ2VvbV9wb2ludChhZXMoeSA9IEJyYXppbF9jXzFNcG9wLCBjb2xvdXIgPSAiQnJhemlsX2NfMU1wb3AiKSwgc2l6ZT0yKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gQ2hpbmFfY18xTXBvcCwgY29sb3VyID0gIkNoaW5hX2NfMU1wb3AiKSwgc2l6ZT0xKSsNCiAjIGdlb21fbGluZShhZXMoeSA9IEZyYW5jZV9jXzFNcG9wLCBjb2xvdXIgPSAiRnJhbmNlX2NfMU1wb3AiKSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBHZXJtYW55X2NfMU1wb3AsIGNvbG91ciA9ICJHZXJtYW55X2NfMU1wb3AiKSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBJcmFuX2NfMU1wb3AsIGNvbG91ciA9ICJJcmFuX2NfMU1wb3AiKSkrDQogIGdlb21fbGluZShhZXMoeSA9IEl0YWx5X2NfMU1wb3AsIGNvbG91ciA9ICJJdGFseV9jXzFNcG9wIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IEtvcmVhX1NvdXRoX2NfMU1wb3AsIGNvbG91ciA9ICJLb3JlYV9Tb3V0aF9jXzFNcG9wIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IFNwYWluX2NfMU1wb3AsIGNvbG91ciA9ICJTcGFpbl9jXzFNcG9wIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBTd2l0emVybGFuZF9jXzFNcG9wLCBjb2xvdXIgPSAiU3dpdHplcmxhbmRfY18xTXBvcCIpKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IFVuaXRlZF9LaW5nZG9tX2NfMU1wb3AsIGNvbG91ciA9ICJVbml0ZWRfS2luZ2RvbV9jXzFNcG9wIikpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBVU19jXzFNcG9wLCBjb2xvdXIgPSAiVVNfY18xTXBvcCIpLCBzaXplPTEpKw0KICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJWQtJWItJVkiKSANCg0KYGBgDQoNCiMgQ2Fzb3MgY29uZmlybWFkb3MgKGFjdW11bGFkbykNCg0KYGBge3IgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9MTJ9DQojIEJyYXppbF9jX2FjCUNoaW5hX2NfYWMJRnJhbmNlX2NfYWMJR2VybWFueV9jX2FjCUlyYW5fY19hYwlJdGFseV9jX2FjCUtvcmVhX1NvdXRoX2NfYWMJU3BhaW5fY19hYwlTd2l0emVybGFuZF9jX2FjCVVuaXRlZF9LaW5nZG9tX2NfYWMJVVNfY19hYw0KDQoNCmdncGxvdChjb3ZpZCwgYWVzKGFzLkRhdGUoRGF0YSkpKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgICNzY2FsZV95X2xvZzEwICgpICsNCiAgeWxhYigiY292aWQxOSAtIENhc29zIGNvbmZpcm1hZG9zIChhY3VtdWxhZG8pIikgKyB4bGFiKCJkaWEiKSsgDQogIHRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE2KSsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsgDQogIGdlb21fcG9pbnQoYWVzKHkgPSBCcmF6aWxfY19hYywgY29sb3VyID0gIkJyYXppbF9jX2FjIiksIHNpemU9MikrDQogIGdlb21fbGluZShhZXMoeSA9IENoaW5hX2NfYWMsIGNvbG91ciA9ICJDaGluYV9jX2FjIiksIHNpemU9MSkrDQogIyBnZW9tX2xpbmUoYWVzKHkgPSBGcmFuY2VfY19hYywgY29sb3VyID0gIkZyYW5jZV9jX2FjIikpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gR2VybWFueV9jX2FjLCBjb2xvdXIgPSAiR2VybWFueV9jX2FjIikpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gSXJhbl9jX2FjLCBjb2xvdXIgPSAiSXJhbl9jX2FjIikpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBJdGFseV9jX2FjLCBjb2xvdXIgPSAiSXRhbHlfY19hYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBLb3JlYV9Tb3V0aF9jX2FjLCBjb2xvdXIgPSAiS29yZWFfU291dGhfY19hYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBTcGFpbl9jX2FjLCBjb2xvdXIgPSAiU3BhaW5fY19hYyIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gU3dpdHplcmxhbmRfY19hYywgY29sb3VyID0gIlN3aXR6ZXJsYW5kX2NfYWMiKSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBVbml0ZWRfS2luZ2RvbV9jX2FjLCBjb2xvdXIgPSAiVW5pdGVkX0tpbmdkb21fY19hYyIpKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gVVNfY19hYywgY29sb3VyID0gIlVTX2NfYWMiKSwgc2l6ZT0xKSsNCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiVkLSViLSVZIikgDQoNCmBgYA0KDQojIENhc29zIGNvbmZpcm1hZG9zIChhY3VtdWxhZG8pIC0gYSBwYXJ0aXIgZGUgbWFyw6dvIA0KDQpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD0xMn0NCiMgQnJhemlsX2NfYWMJQ2hpbmFfY19hYwlGcmFuY2VfY19hYwlHZXJtYW55X2NfYWMJSXJhbl9jX2FjCUl0YWx5X2NfYWMJS29yZWFfU291dGhfY19hYwlTcGFpbl9jX2FjCVN3aXR6ZXJsYW5kX2NfYWMJVW5pdGVkX0tpbmdkb21fY19hYwlVU19jX2FjDQpjb3ZpZF9zIDwtIHNsaWNlKGNvdmlkLCA0MDoxMDAwKQ0KDQpnZ3Bsb3QoY292aWRfcywgYWVzKGFzLkRhdGUoRGF0YSkpKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgdGhlbWVfYncoKSsjIHNjYWxlX3lfbG9nMTAgKCkgKw0KICB5bGFiKCJjb3ZpZDE5IC0gQ2Fzb3MgY29uZmlybWFkb3MgKGFjdW11bGFkbykiKSArIHhsYWIoImRpYSIpKw0KICB0aGVtZV9idyhiYXNlX3NpemUgPSAxNikrIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArDQogIGdlb21fcG9pbnQoYWVzKHkgPSBCcmF6aWxfY19hYywgY29sb3VyID0gIkJyYXppbF9jX2FjIiksIHNpemU9MykrDQogIGdlb21fbGluZShhZXMoeSA9IENoaW5hX2NfYWMsIGNvbG91ciA9ICJDaGluYV9jX2FjIiksIHNpemU9MSkrDQogIyBnZW9tX2xpbmUoYWVzKHkgPSBGcmFuY2VfY19hYywgY29sb3VyID0gIkZyYW5jZV9jX2FjIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBHZXJtYW55X2NfYWMsIGNvbG91ciA9ICJHZXJtYW55X2NfYWMiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IElyYW5fY19hYywgY29sb3VyID0gIklyYW5fY19hYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBJdGFseV9jX2FjLCBjb2xvdXIgPSAiSXRhbHlfY19hYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBLb3JlYV9Tb3V0aF9jX2FjLCBjb2xvdXIgPSAiS29yZWFfU291dGhfY19hYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBTcGFpbl9jX2FjLCBjb2xvdXIgPSAiU3BhaW5fY19hYyIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gU3dpdHplcmxhbmRfY19hYywgY29sb3VyID0gIlN3aXR6ZXJsYW5kX2NfYWMiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IFVuaXRlZF9LaW5nZG9tX2NfYWMsIGNvbG91ciA9ICJVbml0ZWRfS2luZ2RvbV9jX2FjIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IFVTX2NfYWMsIGNvbG91ciA9ICJVU19jX2FjIiksIHNpemU9MSkrDQogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlZC0lYi0lWSIpIA0KYGBgDQoNCg0KIyBDYXNvcyBDb25maXJtYWRvcyAtIGEgcGFydGlyIGRlIG1hcsOnbyANCmBgYHtyIGZpZy5oZWlnaHQ9NywgZmlnLndpZHRoPTEyfQ0KIyBCcmF6aWxfYwlDaGluYV9jCUZyYW5jZV9jCUdlcm1hbnlfYwlJcmFuX2MJSXRhbHlfYwlLb3JlYV9Tb3V0aF9jCVNwYWluX2MJU3dpdHplcmxhbmRfYwlVbml0ZWRfS2luZ2RvbV9jCVVTX2MNCg0KZ2dwbG90KGNvdmlkX3MsIGFlcyhhcy5EYXRlKERhdGEpKSkgKyAgDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkgKyB0aGVtZV9idygpICsjICBzY2FsZV95X2xvZzEwICgpICsNCiAgdGhlbWVfYncoYmFzZV9zaXplID0gMTQsKSsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpKyANCiAgeWxhYigiY292aWQxOSAtIENhc29zIENvbmZpcm1hZG9zIikgKyB4bGFiKCJkaWEiKSsNCiAgZ2VvbV9wb2ludChhZXMoeSA9IEJyYXppbF9jLCBjb2xvciA9ICJCcmF6aWxfYyIpLCBzaXplPTMpKyANCiAgZ2VvbV9saW5lKGFlcyh5ID0gQ2hpbmFfYywgY29sb3IgPSAiQ2hpbmFfYyIpLCBzaXplPTEpKw0KICMgZ2VvbV9saW5lKGFlcyh5ID0gRnJhbmNlX2MsIGNvbG9yID0gIkZyYW5jZV9jIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBHZXJtYW55X2MsIGNvbG9yID0gIkdlcm1hbnlfYyIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gSXJhbl9jLCBjb2xvciA9ICJJcmFuX2MiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gSXRhbHlfYywgY29sb3IgPSAiSXRhbHlfYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBLb3JlYV9Tb3V0aF9jLCBjb2xvciA9ICJLb3JlYV9Tb3V0aF9jIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IFNwYWluX2MsIGNvbG9yID0gIlNwYWluX2MiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IFN3aXR6ZXJsYW5kX2MsIGNvbG9yID0gIlN3aXR6ZXJsYW5kX2MiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IFVuaXRlZF9LaW5nZG9tX2MsIGNvbG9yID0gIlVuaXRlZF9LaW5nZG9tX2MiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gVVNfYywgY29sb3IgPSAiVVNfYyIpLCBzaXplPTEpKw0KICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJWQtJWItJVkiKSANCiAgDQojZ2dwbG90KGNvdmlkLCBhZXMoeD1EYXRhLCB5PUJyYXppbF9tKSkgKyAgZ2VvbV9wb2ludCgpK3N0YXRfc21vb3RoKG1ldGhvZD1sb2VzcykgKyAgdGhlbWVfYncoKSANCmBgYA0KDQoNCg0KIyBDYXNvcyBjb25maXJtYWRvcyAoZGnDoXJpbykgcG9yIE0gaGFiICAtIGEgcGFydGlyIGRlIG1hcsOnbw0KDQpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD0xMn0NCg0KDQoNCmNvdmlkX2QgPC0gc2xpY2UoY292aWQsIDQwOjEwMDApDQpnZ3Bsb3QoY292aWRfZCwgYWVzKGFzLkRhdGUoRGF0YSkpKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgdGhlbWVfYncoKSsNCiAgeWxhYigiY292aWQxOSAtIENhc29zIGNvbmZpcm1hZG9zIChkacOhcmlvKSBwb3IgTSBIYWIiKSArIHhsYWIoImRpYSIpKw0KICB0aGVtZV9idyhiYXNlX3NpemUgPSAxNCkrIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArDQogIGdlb21fcG9pbnQoYWVzKHkgPSBCcmF6aWxfY2RfMU1wb3AsIGNvbG91ciA9ICJCcmF6aWxfY2RfMU1wb3AiKSwgc2l6ZT00LCBzaGFwZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gQ2hpbmFfY2RfMU1wb3AsIGNvbG91ciA9ICJDaGluYV9jZF8xTXBvcCIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gRnJhbmNlX2NkXzFNcG9wLCBjb2xvdXIgPSAiRnJhbmNlX2NkXzFNcG9wIiksIHNpemU9MSkrDQogIyBnZW9tX2xpbmUoYWVzKHkgPSBHZXJtYW55X2NkXzFNcG9wLCBjb2xvdXIgPSAiR2VybWFueV9jZF8xTXBvcCIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gSXJhbl9jZF8xTXBvcCwgY29sb3VyID0gIklyYW5fY2RfMU1wb3AiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gSXRhbHlfY2RfMU1wb3AsIGNvbG91ciA9ICJJdGFseV9jZF8xTXBvcCIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBLb3JlYV9Tb3V0aF9jZF8xTXBvcCwgY29sb3VyID0gIktvcmVhX1NvdXRoX2NkXzFNcG9wIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IFNwYWluX2NkXzFNcG9wLCBjb2xvdXIgPSAiU3BhaW5fY2RfMU1wb3AiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IFN3aXR6ZXJsYW5kX2NkXzFNcG9wLCBjb2xvdXIgPSAiU3dpdHplcmxhbmRfY2RfMU1wb3AiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IFVuaXRlZF9LaW5nZG9tX2NkXzFNcG9wLCBjb2xvdXIgPSAiVW5pdGVkX0tpbmdkb21fY2RfMU1wb3AiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gVVNfY2RfMU1wb3AsIGNvbG91ciA9ICJVU19jZF8xTXBvcCIpLCBzaXplPTEpKw0KICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJWQtJWItJVkiKSANCmBgYA0KDQoNCg0KIyBDYXNvcyBjb25maXJtYWRvcyAoYWN1bXVsYWRvKSBhIHBhcnRpciBkbyAxwrogZGlhIGNvbSAxMDAgY2Fzb3MgDQoNCmBgYHtyIGZpZy5oZWlnaHQ9NywgZmlnLndpZHRoPTEyfQ0KIyBCcmF6aWxfY19hYwlDaGluYV9jX2FjCUZyYW5jZV9jX2FjCUdlcm1hbnlfY19hYwlJcmFuX2NfYWMJSXRhbHlfY19hYwlLb3JlYV9Tb3V0aF9jX2FjCVNwYWluX2NfYWMJU3dpdHplcmxhbmRfY19hYwlVbml0ZWRfS2luZ2RvbV9jX2FjCVVTX2NfYWMNCg0KDQojIGEgYXBhcnRpciBkZSAxMDAgY2Fzb3MgDQoNCmNvbmYgPC0gcmVhZF9leGNlbCgiY292aWQxOS54bHN4Iiwgc2hlZXQgPSAiY29uZl8xMDAiKSANCg0KDQpnZ3Bsb3QoY29uZiwgYWVzKGRpYXMpKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgdGhlbWVfYncoKSsNCiAgeWxhYigiY292aWQxOSAtIENhc29zIGNvbmZpcm1hZG9zIChhY3VtdWxhZG8pIikgKyB4bGFiKCJkaWEiKSsNCiAgdGhlbWVfYncoYmFzZV9zaXplID0gMTYpKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKw0KICBnZW9tX3BvaW50KGFlcyh5ID0gQnJhemlsX2MsIGNvbG91ciA9ICJCcmF6aWxfYyIpLCBzaXplPTEsIHNoYXBlPTEwKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gQ2hpbmFfYywgY29sb3VyID0gIkNoaW5hX2MiKSwgc2l6ZT0xKSsNCiAjIGdlb21fbGluZShhZXMoeSA9IEZyYW5jZV9jLCBjb2xvdXIgPSAiRnJhbmNlX2MiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IEdlcm1hbnlfYywgY29sb3VyID0gIkdlcm1hbnlfYyIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gSXJhbl9jLCBjb2xvdXIgPSAiSXJhbl9jIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IEl0YWx5X2MsIGNvbG91ciA9ICJJdGFseV9jIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IEtvcmVhX1NvdXRoX2MsIGNvbG91ciA9ICJLb3JlYV9Tb3V0aF9jIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IFNwYWluX2MsIGNvbG91ciA9ICJTcGFpbl9jIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBTd2l0emVybGFuZF9jLCBjb2xvdXIgPSAiU3dpdHplcmxhbmRfYyIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gVW5pdGVkX0tpbmdkb21fYywgY29sb3VyID0gIlVuaXRlZF9LaW5nZG9tX2MiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gVVNfYywgY29sb3VyID0gIlVTX2MiKSwgc2l6ZT0xKQ0KDQpgYGANCg0KDQoNCiMgTW9ydGUgYWN1bXVsYWRhIHBvciBNIGRlIGhhYiAgDQoNCmBgYHtyIGZpZy5oZWlnaHQ9NywgZmlnLndpZHRoPTEyfQ0KIyBCcmF6aWxfbV8xTXBvcAlDaGluYV9tXzFNcG9wCUZyYW5jZV9tXzFNcG9wCUdlcm1hbnlfbV8xTXBvcAlJcmFuX21fMU1wb3AJSXRhbHlfbV8xTXBvcAlLb3JlYV9Tb3V0aF9tXzFNcG9wCVNwYWluX21fMU1wb3AJU3dpdHplcmxhbmRfbV8xTXBvcAlVbml0ZWRfS2luZ2RvbV9tXzFNcG9wCVVTX21fMU1wb3ANCmdncGxvdChjb3ZpZCwgYWVzKGFzLkRhdGUoRGF0YSkpKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgdGhlbWVfYncoKSsNCiAgeWxhYigiY292aWQxOSAtIE1vcnRlIGFjdW11bGFkYSBwb3IgTSBkZSBoYWIgIikgKyB4bGFiKCJkaWEiKSsNCiAgZ2VvbV9wb2ludChhZXMoeSA9IEJyYXppbF9tXzFNcG9wLCBjb2xvdXIgPSAiQnJhemlsX21fMU1wb3AiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gQ2hpbmFfbV8xTXBvcCwgY29sb3VyID0gIkNoaW5hX21fMU1wb3AiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IEZyYW5jZV9tXzFNcG9wLCBjb2xvdXIgPSAiRnJhbmNlX21fMU1wb3AiKSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBHZXJtYW55X21fMU1wb3AsIGNvbG91ciA9ICJHZXJtYW55X21fMU1wb3AiKSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBJcmFuX21fMU1wb3AsIGNvbG91ciA9ICJJcmFuX21fMU1wb3AiKSkrDQogIGdlb21fbGluZShhZXMoeSA9IEl0YWx5X21fMU1wb3AsIGNvbG91ciA9ICJJdGFseV9tXzFNcG9wIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IEtvcmVhX1NvdXRoX21fMU1wb3AsIGNvbG91ciA9ICJLb3JlYV9Tb3V0aF9tXzFNcG9wIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IFNwYWluX21fMU1wb3AsIGNvbG91ciA9ICJTcGFpbl9tXzFNcG9wIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBTd2l0emVybGFuZF9tXzFNcG9wLCBjb2xvdXIgPSAiU3dpdHplcmxhbmRfbV8xTXBvcCIpKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IFVuaXRlZF9LaW5nZG9tX21fMU1wb3AsIGNvbG91ciA9ICJVbml0ZWRfS2luZ2RvbV9tXzFNcG9wIikpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBVU19tXzFNcG9wLCBjb2xvdXIgPSAiVVNfbV8xTXBvcCIpLCBzaXplPTEpKw0KICAgIHRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE2KSsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsNCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiVkLSViLSVZIikgDQpgYGANCg0KDQojIE1vcnRlIGFjdW11bGFkYSAgIA0KDQpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD0xMn0NCiMgQnJhemlsX21fYWMJQ2hpbmFfbV9hYwlGcmFuY2VfbV9hYwlHZXJtYW55X21fYWMJSXJhbl9tX2FjCUl0YWx5X21fYWMJS29yZWFfU291dGhfbV9hYwlTcGFpbl9tX2FjCVN3aXR6ZXJsYW5kX21fYWMJVW5pdGVkX0tpbmdkb21fbV9hYwlVU19tX2FjDQoNCmdncGxvdChjb3ZpZCwgYWVzKGFzLkRhdGUoRGF0YSkpKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgdGhlbWVfYncoKSsNCiAgeWxhYigiY292aWQxOSAtIE1vcnRlIGFjdW11bGFkYSIpICsgeGxhYigiZGlhIikrDQogIGdlb21fcG9pbnQoYWVzKHkgPSBCcmF6aWxfbV9hYywgY29sb3VyID0gIkJyYXppbF9tX2FjIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IENoaW5hX21fYWMsIGNvbG91ciA9ICJDaGluYV9tX2FjIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBGcmFuY2VfbV9hYywgY29sb3VyID0gIkZyYW5jZV9tX2FjIikpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gR2VybWFueV9tX2FjLCBjb2xvdXIgPSAiR2VybWFueV9tX2FjIikpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gSXJhbl9tX2FjLCBjb2xvdXIgPSAiSXJhbl9tX2FjIikpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBJdGFseV9tX2FjLCBjb2xvdXIgPSAiSXRhbHlfbV9hYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBLb3JlYV9Tb3V0aF9tX2FjLCBjb2xvdXIgPSAiS29yZWFfU291dGhfbV9hYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBTcGFpbl9tX2FjLCBjb2xvdXIgPSAiU3BhaW5fbV9hYyIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gU3dpdHplcmxhbmRfbV9hYywgY29sb3VyID0gIlN3aXR6ZXJsYW5kX21fYWMiKSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBVbml0ZWRfS2luZ2RvbV9tX2FjLCBjb2xvdXIgPSAiVW5pdGVkX0tpbmdkb21fbV9hYyIpKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gVVNfbV9hYywgY29sb3VyID0gIlVTX21fYWMiKSwgc2l6ZT0xKSsNCiAgICB0aGVtZV9idyhiYXNlX3NpemUgPSAxNikrIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArDQogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlZC0lYi0lWSIpIA0KYGBgDQoNCg0KIyBNb3J0ZSBwb3IgZGVuc2lkYWRlIGRlbW9ncsOhZmljYSAgIA0KDQpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD0xMn0NCiMgQnJhemlsX21fZAlDaGluYV9tX2QJRnJhbmNlX21fZAlHZXJtYW55X21fZAlJcmFuX21fZAlJdGFseV9tX2QJS29yZWFfU291dGhfbV9kCVNwYWluX21fZAlTd2l0emVybGFuZF9tX2QJVW5pdGVkX0tpbmdkb21fbV9kCVVTX21fZA0KZ2dwbG90KGNvdmlkLCBhZXMoYXMuRGF0ZShEYXRhKSkpICsgDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkgKyB0aGVtZV9idygpKw0KICB5bGFiKCJjb3ZpZDE5IC0gTW9ydGUgcG9yIGRlbnNpZGFkZSBkZW1vZ3LDoWZpY2EiKSArIHhsYWIoImRpYSIpKw0KICBnZW9tX3BvaW50KGFlcyh5ID0gQnJhemlsX21fZCwgY29sb3VyID0gIkJyYXppbF9tX2QiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gQ2hpbmFfbV9kLCBjb2xvdXIgPSAiQ2hpbmFfbV9kIiksIHNpemU9MSkrDQogIyBnZW9tX2xpbmUoYWVzKHkgPSBGcmFuY2VfbV9kLCBjb2xvdXIgPSAiRnJhbmNlX21fZCIpKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IEdlcm1hbnlfbV9kLCBjb2xvdXIgPSAiR2VybWFueV9tX2QiKSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBJcmFuX21fZCwgY29sb3VyID0gIklyYW5fbV9kIikpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBJdGFseV9tX2QsIGNvbG91ciA9ICJJdGFseV9tX2QiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gS29yZWFfU291dGhfbV9kLCBjb2xvdXIgPSAiS29yZWFfU291dGhfbV9kIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IFNwYWluX21fZCwgY29sb3VyID0gIlNwYWluX21fZCIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gU3dpdHplcmxhbmRfbV9kLCBjb2xvdXIgPSAiU3dpdHplcmxhbmRfbV9kIikpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gVW5pdGVkX0tpbmdkb21fbV9kLCBjb2xvdXIgPSAiVW5pdGVkX0tpbmdkb21fbV9kIikpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBVU19tX2QsIGNvbG91ciA9ICJVU19tX2QiKSwgc2l6ZT0xKSsNCiAgICB0aGVtZV9idyhiYXNlX3NpemUgPSAxNikrIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArDQogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlZC0lYi0lWSIpIA0KDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkocmVhZHhsKQ0KDQoNCg0KDQoNCmNvdmlkMyA8LSByZWFkX2V4Y2VsKCJjb3ZpZDE5Lnhsc3giLCBzaGVldCA9ICJyMiIsIA0KICAgIGNvbF90eXBlcyA9IGMoInRleHQiLCAibnVtZXJpYyIsICJkYXRlIiwgDQogICAgICAgICJkYXRlIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsICJ0ZXh0IiwgDQogICAgICAgICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsIA0KICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiKSkNCg0KDQoNCiNjb3ZpZDMNCmBgYA0KDQoNCmBgYHtyIGZpZy5oZWlnaHQ9NywgZmlnLndpZHRoPTEyfQ0KIyBUZW1wbyBkZSBJc29sYW1lbnRvIGFww7NzIHJlZ2lzdHJvIGRvIDHCuiBjYXNvIHggbW9ydG9zIHggZGVuc2lkYWRlDQojRm9udGUgZGUgZGFkb3M6IFtodHRwczovL3d3dy53b3JsZG9tZXRlcnMuaW5mby9jb3JvbmF2aXJ1cy8jY291bnRyaWVzXQ0KDQojY292aWQzIDwtbmEuZXhjbHVkZShjb3ZpZDMpDQojZ2dwbG90KGNvdmlkMywgYWVzKHg9cGFpcykpICsgDQojICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgdGhlbWVfaGMoKSsNCiMgIHlsYWIoImNvdmlkMTkgLSBUZW1wbyBkZSBJc29sYW1lbnRvIGFww7NzIHJlZ2lzdHJvIGRvIDHCuiBjYXNvIikgKyB4bGFiKCJQYcOtcyIpKw0KIyAgZ2VvbV9wb2ludChhZXMoeSA9IHRlbXBvXzFfY2Fzb19pc29sYW1lbnRvLCBzaXplID0gbW9ydG9zXzI4XzAzLCBjb2xvdXIgPSBwYWlzKSkNCiANCg0KI2dncGxvdChjb3ZpZDMsIGFlcyh4PXBhaXMpKSArIA0KIyAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGU9OTApKSArIHRoZW1lX2hjKCkrDQojICB5bGFiKCJjb3ZpZDE5IC0gVGVtcG8gZGUgSXNvbGFtZW50byBhcMOzcyByZWdpc3RybyBkbyAxwrogY2FzbyIpICsgeGxhYigiUGHDrXMiKSsgdGhlbWVfY2FsYygpKw0KIyAgZ2VvbV9wb2ludChhZXMoeSA9IHRlbXBvXzFfY2Fzb19pc29sYW1lbnRvLCBzaXplID0gbW9ydG9zXzI4XzAzLCBjb2xvdXIgPSBkZW5zaWRhZGUpKQ0KDQpgYGANCg0KDQojIENhc29zIGNvbmZpcm1hZG9zIChhY3VtdWxhZG8pIHggVGVtcG9zIGRlIElzb2xhbWVudG8gU29jaWFsDQpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD0xNn0NCiN4OiB0ZW1wbyBhY3VtdWxhZG8gZW0gaXNvbGFtZW50bw0KI3k6IGNhc29zIGNvbmYgYWN1bXVtIA0KDQojIFVTX3QJSXRhbHlfdAlDaGluYV90CVNwYWluX3QJR2VybWFueV90CUZyYW5jZV90CVVuaXRlZF9LaW5nZG9tX3QJS29yZWFfU291dGhfdAlCcmF6aWxfdA0KDQpnZ3Bsb3QoY292aWQsIGFlcyh4PUNoaW5hX3QpKSArICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgIA0KIyAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiQWNjZW50IikgKw0KICB0aGVtZV9idyhiYXNlX3NpemUgPSAxNCkrIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArDQogIHlsYWIoIkNvdmlkMTkgLSBDYXNvcyBjb25maXJtYWRvcyAoYWN1bXVsYWRvKSIpICsNCiAgZ2d0aXRsZSgiQSBsaW5oYSBwb250aWxoYWRhIGluZGljYSBxdWFuZG8gY2FkYSBwYcOtcyBpbmljaW91IG8gaXNvbGFtZW50byBzb2NpYWwiKSArDQogIHhsYWIoIlRlbXBvIGVtIGlzb2xhbWVudG8gZGEgQ2hpbmEiKSsNCiAgZ2VvbV9wb2ludChhZXMoeSA9IEJyYXppbF9jX2FjLCBjb2xvciA9ICJCcmF6aWxfY19hYyIpLCBzaGFwZT0wLCBzaXplPTIpICsgDQogIGdlb21fcG9pbnQoYWVzKHkgPSBDaGluYV9jX2FjLCBjb2xvdXIgPSAiQ2hpbmFfY19hYyIpLCBzaGFwZT0xLCBzaXplPTIpKyANCiMgIGdlb21fcG9pbnQoYWVzKHkgPSBGcmFuY2VfY19hYywgY29sb3VyID0gIkZyYW5jZV9jX2FjIiksIHNoYXBlPTIsIHNpemU9MikrDQojICBnZW9tX3BvaW50KGFlcyh5ID0gR2VybWFueV9jX2FjLCBjb2xvdXIgPSAiR2VybWFueV9jX2FjIiksIHNoYXBlPTMsIHNpemU9MikrDQogIGdlb21fcG9pbnQoYWVzKHkgPSBJdGFseV9jX2FjLCBjb2xvdXIgPSAiSXRhbHlfY19hYyIpLCBzaGFwZT00LCBzaXplPTIpKw0KICBnZW9tX3BvaW50KGFlcyh5ID0gS29yZWFfU291dGhfY19hYywgY29sb3VyID0gIktvcmVhX1NvdXRoX2NfYWMiKSwgc2hhcGU9NSwgc2l6ZT0yKSsNCiAgZ2VvbV9wb2ludChhZXMoeSA9IFNwYWluX2NfYWMsIGNvbG91ciA9ICJTcGFpbl9jX2FjIiksIHNoYXBlPTYsIHNpemU9MikrDQojICBnZW9tX3BvaW50KGFlcyh5ID0gVW5pdGVkX0tpbmdkb21fY19hYywgY29sb3VyID0gIlVuaXRlZF9LaW5nZG9tX2NfYWMiKSwgc2hhcGU9Nywgc2l6ZT0yKSsNCiAgZ2VvbV9wb2ludChhZXMoeSA9IFVTX2NfYWMsIGNvbG91ciA9ICJVU19jX2FjIiksIHNoYXBlPTgsIHNpemU9MikgKyAgZ2VvbV90ZXh0KGFlcyh4eCwgeXksIGxhYmVsPXBhaXMpKSsNCiAgZ2VvbV9zZWdtZW50KGFlcyh4PTMzLCB5PTAseWVuZD0xMDAwMDAseGVuZCA9MzMpLCBzaXplPTEsIGxpbmV0eXBlPTgpKw0KICBnZW9tX3NlZ21lbnQoYWVzKHg9MCwgeT0wICx5ZW5kPTEwMzAwMCx4ZW5kID0wKSwgc2l6ZT0xLCBsaW5ldHlwZT04KSsNCiAgICBnZW9tX3NlZ21lbnQoYWVzKHg9OSwgeT0wICx5ZW5kPTEwMDAwMCx4ZW5kID05KSwgc2l6ZT0xLCBsaW5ldHlwZT04KSsgDQogICAgZ2VvbV9zZWdtZW50KGFlcyh4PTUsIHk9MCAseWVuZD05NzAwMCAseGVuZCA9NSksIHNpemU9MSwgbGluZXR5cGU9OCkrDQogICAgZ2VvbV9zZWdtZW50KGFlcyh4PTEsIHk9MCAseWVuZD0xMDkwMDAseGVuZCA9MSksIHNpemU9MSwgbGluZXR5cGU9OCkrDQogICAgZ2VvbV9zZWdtZW50KGFlcyh4PS0yLCB5PTAseWVuZD0xMDAwMDAseGVuZCA9LTIpLCBzaXplPTEsIGxpbmV0eXBlPTgpKw0KICAgIGdlb21fc2VnbWVudChhZXMoeD0zLCB5PTAgLHllbmQ9MTE1MDAwLHhlbmQgPTMpLCBzaXplPTEsIGxpbmV0eXBlPTgpKw0KICAgIGdlb21fc2VnbWVudChhZXMoeD01NSwgeT0wLHllbmQ9MTAwMDAwLHhlbmQgPTU1KSwgc2l6ZT0xLCBsaW5ldHlwZT04KSsNCiAgICBnZW9tX3NlZ21lbnQoYWVzKHg9NDAsIHk9MCx5ZW5kPTEwMDAwMCx4ZW5kID00MCksIHNpemU9MSwgbGluZXR5cGU9OCkNCg0KDQpgYGANCg0KDQoNCg0KIyBDYXNvcyBjb25maXJtYWRvcyAoYWN1bXVsYWRvKSB4IFRlbXBvcyBkZSBJc29sYW1lbnRvIFNvY2lhbA0KYGBge3IgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTE2fQ0KI3g6IHRlbXBvIGFjdW11bGFkbyBlbSBpc29sYW1lbnRvDQojeTogY2Fzb3MgY29uZiBhY3VtdW0gDQoNCiMgVVNfdAlJdGFseV90CUNoaW5hX3QJU3BhaW5fdAlHZXJtYW55X3QJRnJhbmNlX3QJVW5pdGVkX0tpbmdkb21fdAlLb3JlYV9Tb3V0aF90CUJyYXppbF90DQoNCiMgQkFTRSBERSBEQURPUyBDSEFNQURBIGlzb2xhbSAtIENPTSBEQURPUyBTT01FTlRFIERPIElOw41DSU8gREUgSVNPTEFNIERFIENBREEgUEHDjVMNCg0KDQpncmFmaWNvX2lzb2xhbSA8LSByZWFkX2V4Y2VsKCJjb3ZpZDE5Lnhsc3giLCBzaGVldCA9ICJpc29sYW0iKSANCg0KZ2dwbG90KGdyYWZpY29faXNvbGFtLCBhZXMoeD1DaGluYV90KSkgKyAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGU9OTApKSArICANCiMgIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkFjY2VudCIpICsNCiAgdGhlbWVfYncoYmFzZV9zaXplID0gMTYpKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKw0KICB5bGFiKCJDb3ZpZDE5IC0gQ2Fzb3MgY29uZmlybWFkb3MgKGFjdW11bGFkbykiKSArDQogIGdndGl0bGUoIlRlbXBvIGFjdW11bGFkbyBlbSBpc29sYW1lbnRvIHNvY2lhbCB4IENhc29zIGNvbmZpcm1hZG9zIChhY3VtdWxhZG8pICIpICsNCiAgeGxhYigiVGVtcG8gYWN1bXVsYWRvIGVtIGlzb2xhbWVudG8gc29jaWFsIikrDQogIGdlb21fcG9pbnQoYWVzKHkgPSBCcmF6aWxfY19hYywgY29sb3IgPSAiQnJhemlsX2NfYWMiKSwgc2l6ZT00KSArIA0KICBnZW9tX2xpbmUoYWVzKHkgPSBDaGluYV9jX2FjLCBjb2xvdXIgPSAiQ2hpbmFfY19hYyIpLCBzaXplPTEpKyANCiMgIGdlb21fcG9pbnQoYWVzKHkgPSBGcmFuY2VfY19hYywgY29sb3VyID0gIkZyYW5jZV9jX2FjIiksIHNoYXBlPTIsIHNpemU9MikrDQojICBnZW9tX3BvaW50KGFlcyh5ID0gR2VybWFueV9jX2FjLCBjb2xvdXIgPSAiR2VybWFueV9jX2FjIiksIHNoYXBlPTMsIHNpemU9MikrDQogIGdlb21fbGluZShhZXMoeSA9IEl0YWx5X2NfYWMsIGNvbG91ciA9ICJJdGFseV9jX2FjIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IEtvcmVhX1NvdXRoX2NfYWMsIGNvbG91ciA9ICJLb3JlYV9Tb3V0aF9jX2FjIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IFNwYWluX2NfYWMsIGNvbG91ciA9ICJTcGFpbl9jX2FjIiksIHNpemU9MSkrDQojICBnZW9tX3BvaW50KGFlcyh5ID0gVW5pdGVkX0tpbmdkb21fY19hYywgY29sb3VyID0gIlVuaXRlZF9LaW5nZG9tX2NfYWMiKSwgc2hhcGU9Nywgc2l6ZT0yKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gVVNfY19hYywgY29sb3VyID0gIlVTX2NfYWMiKSwgc2l6ZT0xKQ0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KIyBNb3J0ZXMgLSBCb3gtcGxvdA0KDQpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD0xMiwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoc3RyaW5ncikNCmNvdmlkMiA8LWNvdmlkWyxjKDE6MTA5KV0NCmNvdmlkMiA8LSBzdGFjayhjb3ZpZDIpDQpjb3ZpZDIgPC1maWx0ZXIoY292aWQyLHN0cl9kZXRlY3QoaW5kLCAiX20iKSkNCmNvdmlkMiA8LWZpbHRlcihjb3ZpZDIsc3RyX2RldGVjdChpbmQsIl9tKD8hX2FjKSIpKQ0KY292aWQyIDwtZmlsdGVyKGNvdmlkMixzdHJfZGV0ZWN0KGluZCwiX20oPyFfMU1wb3ApIikpDQpjb3ZpZDIgPC1maWx0ZXIoY292aWQyLHN0cl9kZXRlY3QoaW5kLCJfbSg/IV9kKSIpKQ0KDQpjb3ZpZDIgPC0gYXJyYW5nZShjb3ZpZDIsdmFsdWVzKQ0KDQpnZ3Bsb3QoY292aWQyLCBhZXMoeCA9IGluZCwgeSA9IHZhbHVlcyApKSArIGdlb21fYm94cGxvdChhZXMoZmlsbCA9IGluZCkpKyB0aGVtZV9idygpKw0KICB5bGFiKCJjb3ZpZDE5IC0gTW9ydGVzIikgKyB4bGFiKCJQYcOtcyIpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGU9OTApKSArDQogdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpIA0KDQoNCmdncGxvdChjb3ZpZDIsIGFlcyh4ID0gaW5kLCB5ID0gdmFsdWVzICkpICsgDQogIGdlb21fZG90cGxvdChhZXMoY29sb3IgPSBpbmQpLCBiaW5heGlzPSJ5Iiwgc3RhY2tkaXI9J2NlbnRlcndob2xlJywgZmlsbCA9ICJ3aGl0ZSIsZG90c2l6ZT0wLjUpICsgdGhlbWVfYncoKSsNCiAgeWxhYigiY292aWQxOSAtIE1vcnRlcyIpICsgeGxhYigiUGHDrXMiKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkgKw0KIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSANCmBgYA0KDQojIENhc29zIENvbmZpcm1hZG9zIC0gQm94LXBsb3QNCg0KYGBge3IgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9MTIsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpsaWJyYXJ5KHN0cmluZ3IpDQpjb3ZpZDIgPC1jb3ZpZFssYygxOjEwOSldDQpjb3ZpZDIgPC0gc3RhY2soY292aWQyKQ0KY292aWQyIDwtZmlsdGVyKGNvdmlkMixzdHJfZGV0ZWN0KGluZCwgIl9jIikpDQpjb3ZpZDIgPC1maWx0ZXIoY292aWQyLHN0cl9kZXRlY3QoaW5kLCJfYyg/IV9hYykiKSkNCmNvdmlkMiA8LWZpbHRlcihjb3ZpZDIsc3RyX2RldGVjdChpbmQsIl9jKD8hXzFNcG9wKSIpKQ0KY292aWQyIDwtZmlsdGVyKGNvdmlkMixzdHJfZGV0ZWN0KGluZCwiX2MoPyFfZCkiKSkNCmNvdmlkMiA8LSBhcnJhbmdlKGNvdmlkMix2YWx1ZXMpDQoNCmdncGxvdChjb3ZpZDIsIGFlcyh4ID0gaW5kLCB5ID0gdmFsdWVzICkpICsgZ2VvbV9ib3hwbG90KGFlcyhmaWxsID0gaW5kKSkrIHRoZW1lX2J3KCkrDQogIHlsYWIoImNvdmlkMTkgLSBDYXNvcyBDb25maXJtYWRvcyIpICsgeGxhYigiUGHDrXMiKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkgKw0KIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSANCg0KZ2dwbG90KGNvdmlkMiwgYWVzKHggPSBpbmQsIHkgPSB2YWx1ZXMgKSkgKyANCiAgZ2VvbV9kb3RwbG90KGFlcyhjb2xvciA9IGluZCksIGJpbmF4aXM9InkiLCBzdGFja2Rpcj0nY2VudGVyd2hvbGUnLCBmaWxsID0gIndoaXRlIixkb3RzaXplPTAuNSkgKyB0aGVtZV9idygpKw0KICB5bGFiKCJjb3ZpZDE5IC0gQ2Fzb3MgQ29uZmlybWFkb3MiKSArIHhsYWIoIlBhw61zIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpIA0KYGBgDQoNCg0KIyBNb3J0ZXMgKGFjdW11bGFkYXMpIGRlc2RlIGEgMcK6IG1vcnRlIGVtIGNhZGEgcGHDrXMgIA0KYGBge3IgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9MTJ9DQoNCiNJdGFseV9tX2FjCVNwYWluX21fYWMJQ2hpbmFfbV9hYwlVU19tX2FjCUtvcmVhX1NvdXRoX21fYWMJQnJhemlsX21fYWMJZGlhDQoNCmRlc2NvbnRvPTMwMDANCng9NjUNCg0KY292aWRfMWRpYSA8LSByZWFkX2V4Y2VsKCJjb3ZpZDE5Lnhsc3giLCBzaGVldCA9ICIxbW9ydGUiKSANCg0KZ2dwbG90KGNvdmlkXzFkaWEsIGFlcyhEaWEpKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgdGhlbWVfYncoKSsNCiAgeWxhYigiY292aWQxOSAtIE1vcnRlcyAoYWN1bXVsYWRhKSIpICsgeGxhYigiZGlhIikrDQogIHRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE2KSsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsNCiAgZ2VvbV9wb2ludChhZXMoeSA9IEJyYXppbF9tX2FjLCBjb2xvdXIgPSAiQnJhemlsX21fYWMiKSwgc2l6ZT0yLCBzaGFwZT0xMCkrDQogIGdlb21fbGluZShhZXMoeSA9IENoaW5hX21fYWMsIGNvbG91ciA9ICJDaGluYV9tX2FjIiksIHNpemU9MSkrDQogIyBnZW9tX2xpbmUoYWVzKHkgPSBGcmFuY2VfbV9hYywgY29sb3VyID0gIkZyYW5jZV9tX2FjIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBHZXJtYW55X21fYWMsIGNvbG91ciA9ICJHZXJtYW55X21fYWMiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IElyYW5fbV9hYywgY29sb3VyID0gIklyYW5fbV9hYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBJdGFseV9tX2FjLCBjb2xvdXIgPSAiSXRhbHlfbV9hYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBLb3JlYV9Tb3V0aF9tX2FjLCBjb2xvdXIgPSAiS29yZWFfU291dGhfbV9hYyIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBTcGFpbl9tX2FjLCBjb2xvdXIgPSAiU3BhaW5fbV9hYyIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gU3dpdHplcmxhbmRfbV9hYywgY29sb3VyID0gIlN3aXR6ZXJsYW5kX21fYWMiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IFVuaXRlZF9LaW5nZG9tX21fYWMsIGNvbG91ciA9ICJVbml0ZWRfS2luZ2RvbV9tX2FjIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IFVTX21fYWMsIGNvbG91ciA9ICJVU19tX2FjIiksIHNpemU9MSkrDQogIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQ9MzApLHNpemU9MSxsaW5ldHlwZT0iZGFzaGVkIiwgY29sb3I9ImJsdWUiICkjKw0KIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY292aWRfMWRpYSRCcmF6aWxfbV9hY1szMF0sICAgICB4PXgrMjAsIHk9MTAwMDArZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcpKw0KIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY292aWRfMWRpYSRDaGluYV9tX2FjWzMwXSwgICAgICB4PXgrMjAsIHk9MTAwMDArMipkZXNjb250byksIGNvbG9yPSJibGFjayIsIHNpemU9NykrDQojICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb3ZpZF8xZGlhJEl0YWx5X21fYWNbMzBdLCAgICAgIHg9eCsyMCwgeT0xMDAwMCszKmRlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03KSsNCiMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvdmlkXzFkaWEkS29yZWFfU291dGhfbV9hY1szMF0seD14KzIwLCB5PTEwMDAwKzQqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcpKw0KIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY292aWRfMWRpYSRTcGFpbl9tX2FjWzMwXSwgICAgICB4PXgrMjAsIHk9MTAwMDArNSpkZXNjb250byksIGNvbG9yPSJibGFjayIsIHNpemU9NykrDQojICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb3ZpZF8xZGlhJFVTX21fYWNbMzBdLCAgICAgICAgIHg9eCsyMCwgeT0xMDAwMCs2KmRlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03KSsNCiAgI2dlb21fdGV4dChhZXMobGFiZWwgPSAiTW9ydGVzIG5vIDMwwrogRGlhIiwgICAgIHg9MTUsIHk9MTAwMDArNipkZXNjb250byksIGNvbG9yPSJibHVlIiwgc2l6ZT03KSsNCiAgI2dlb21fdGV4dChhZXMobGFiZWwgPSAiZGVzZGUgYSAxwrogbW9ydGUiLCAgICAgeD0xNSwgeT0xMDAwMCs2KmRlc2NvbnRvLTI1MDApLCBjb2xvcj0iYmx1ZSIsIHNpemU9NykrDQogICNnZW9tX3RleHQoYWVzKGxhYmVsID0gImVtIGNhZGEgcGHDrXMiLCAgICAgeD0xNSwgeT0xMDAwMCs2KmRlc2NvbnRvLTUwMDApLCBjb2xvcj0iYmx1ZSIsIHNpemU9NykrDQogIyAgIGdlb21fdGV4dChhZXMobGFiZWwgPSAiQnJhemlsIiwgICAgIHg9eCwgeT0xMDAwMCtkZXNjb250byksIGNvbG9yPSJibGFjayIsIHNpemU9NyxudWRnZV94PTApKw0KIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gIkNoaW5hIiwgICAgICB4PXgsIHk9MTAwMDArMipkZXNjb250byksIGNvbG9yPSJibGFjayIsIHNpemU9NyxudWRnZV94PTApKw0KICMgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gIkl0YWx5IiwgICAgICB4PXgsIHk9MTAwMDArMypkZXNjb250byksIGNvbG9yPSJibGFjayIsIHNpemU9NyxudWRnZV94PS0xKSsNCiMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9ICJLb3JlYV9Tb3V0aCIsIHg9eCwgeT0xMDAwMCs0KmRlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03LG51ZGdlX3g9NSkrDQogIyAgIGdlb21fdGV4dChhZXMobGFiZWwgPSAiU3BhaW4iLCAgICAgIHg9eCwgeT0xMDAwMCs1KmRlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03LG51ZGdlX3g9MCkrDQojICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSAiVVMiLCAgICAgICAgIHg9eCwgeT0xMDAwMCs2KmRlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03LG51ZGdlX3g9LTEpDQoNCmBgYA0KDQoNCg0KDQoNCiMgTW9ydGVzIChhY3VtdWxhZGFzKSBkZXNkZSBvIDHCuiBjYXNvIGNvbmZpcm1hZG8gZW0gY2FkYSBwYcOtcyAgDQpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD0xMn0NCg0KI0l0YWx5X21fYWMJU3BhaW5fbV9hYwlDaGluYV9tX2FjCVVTX21fYWMJS29yZWFfU291dGhfbV9hYwlCcmF6aWxfbV9hYwlkaWENCg0KY292aWRfMWRpYSA8LSByZWFkX2V4Y2VsKCJjb3ZpZDE5Lnhsc3giLCBzaGVldCA9ICIxY2FzbyIpIA0KDQpnZ3Bsb3QoY292aWRfMWRpYSwgYWVzKERpYSkpICsgDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkgKyB0aGVtZV9idygpKw0KICB5bGFiKCJjb3ZpZDE5IC0gTW9ydGVzIChhY3VtdWxhZGEpIikgKyB4bGFiKCJkaWEiKSsNCiAgdGhlbWVfYncoYmFzZV9zaXplID0gMTYpKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKw0KICBnZW9tX3BvaW50KGFlcyh5ID0gQnJhemlsX21fYWMsIGNvbG91ciA9ICJCcmF6aWxfbV9hYyIpLCBzaXplPTIsIHNoYXBlPTEwKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gQ2hpbmFfbV9hYywgY29sb3VyID0gIkNoaW5hX21fYWMiKSwgc2l6ZT0xKSsNCiAjIGdlb21fbGluZShhZXMoeSA9IEZyYW5jZV9tX2FjLCBjb2xvdXIgPSAiRnJhbmNlX21fYWMiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IEdlcm1hbnlfbV9hYywgY29sb3VyID0gIkdlcm1hbnlfbV9hYyIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gSXJhbl9tX2FjLCBjb2xvdXIgPSAiSXJhbl9tX2FjIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IEl0YWx5X21fYWMsIGNvbG91ciA9ICJJdGFseV9tX2FjIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IEtvcmVhX1NvdXRoX21fYWMsIGNvbG91ciA9ICJLb3JlYV9Tb3V0aF9tX2FjIiksIHNpemU9MSkrDQogIGdlb21fbGluZShhZXMoeSA9IFNwYWluX21fYWMsIGNvbG91ciA9ICJTcGFpbl9tX2FjIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBTd2l0emVybGFuZF9tX2FjLCBjb2xvdXIgPSAiU3dpdHplcmxhbmRfbV9hYyIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gVW5pdGVkX0tpbmdkb21fbV9hYywgY29sb3VyID0gIlVuaXRlZF9LaW5nZG9tX21fYWMiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gVVNfbV9hYywgY29sb3VyID0gIlVTX21fYWMiKSwgc2l6ZT0xKSsNCiBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0PTUwKSxzaXplPTEsbGluZXR5cGU9ImRhc2hlZCIsIGNvbG9yPSJibHVlIiApIysNCiMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvdmlkXzFkaWEkQnJhemlsX21fYWNbNTBdLCAgICAgeD14KzIwLCB5PTEwMDAwK2Rlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03KSsNCiMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvdmlkXzFkaWEkQ2hpbmFfbV9hY1s1MF0sICAgICAgeD14KzIwLCB5PTEwMDAwKzIqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcpKw0KIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY292aWRfMWRpYSRJdGFseV9tX2FjWzUwXSwgICAgICB4PXgrMjAsIHk9MTAwMDArMypkZXNjb250byksIGNvbG9yPSJibGFjayIsIHNpemU9NykrDQojICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb3ZpZF8xZGlhJEtvcmVhX1NvdXRoX21fYWNbNTBdLHg9eCsyMCwgeT0xMDAwMCs0KmRlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03KSsNCiMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvdmlkXzFkaWEkU3BhaW5fbV9hY1s1MF0sICAgICAgeD14KzIwLCB5PTEwMDAwKzUqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcpKw0KIyMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvdmlkXzFkaWEkVVNfbV9hY1s1MF0sICAgICAgICAgeD14KzIwLCB5PTEwMDAwKzYqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcpKw0KIyAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9ICJNb3J0ZXMgbm8gNTDCuiBEaWEiLCAgICAgeD0xNSwgeT0xMDAwMCs2KmRlc2NvbnRvKSwgY29sb3I9ImJsdWUiLCBzaXplPTcpKw0KIyAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9ICJkZXNkZSBvIDHCuiBjYXNvIiwgICAgIHg9MTUsIHk9MTAwMDArNipkZXNjb250by0yNTAwKSwgY29sb3I9ImJsdWUiLCBzaXplPTcpKw0KIyAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9ICJlbSBjYWRhIHBhw61zIiwgICAgIHg9MTUsIHk9MTAwMDArNipkZXNjb250by01MDAwKSwgY29sb3I9ImJsdWUiLCBzaXplPTcpKw0KIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gIkJyYXppbCIsICAgICB4PXgsIHk9MTAwMDArZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcsbnVkZ2VfeD0wKSsNCiMjICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSAiQ2hpbmEiLCAgICAgIHg9eCwgeT0xMDAwMCsyKmRlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03LG51ZGdlX3g9MCkrDQojICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSAiSXRhbHkiLCAgICAgIHg9eCwgeT0xMDAwMCszKmRlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03LG51ZGdlX3g9LTEpKw0KIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gIktvcmVhX1NvdXRoIiwgeD14LCB5PTEwMDAwKzQqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcsbnVkZ2VfeD0zKSsNCiMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9ICJTcGFpbiIsICAgICAgeD14LCB5PTEwMDAwKzUqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcsbnVkZ2VfeD0wKSsNCiMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9ICJVUyIsICAgICAgICAgeD14LCB5PTEwMDAwKzYqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcsbnVkZ2VfeD0tMSkNCg0KYGBgDQoNCg0KDQoNCiMgTW9ydGVzIChhY3VtdWxhZGFzKSBwb3IgTSBoYWIgZGVzZGUgbyAxwrogY2FzbyBjb25maXJtYWRvIGVtIGNhZGEgcGHDrXMgIA0KYGBge3IgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9MTJ9DQoNCiMgICBJdGFseV9tX2FjXzFNcG9wCVNwYWluX21fYWNfMU1wb3AJQ2hpbmFfbV9hY18xTXBvcAlVU19tX2FjXzFNcG9wCUtvcmVhX1NvdXRoX21fYWNfMU1wb3AJQnJhemlsX21fYWNfMU1wb3ANCg0KZGVzY29udG89NTANCng9NzUNCmNvdmlkXzFkaWEgPC0gcmVhZF9leGNlbCgiY292aWQxOS54bHN4Iiwgc2hlZXQgPSAiMWNhc28iKSANCg0KZ2dwbG90KGNvdmlkXzFkaWEsIGFlcyhEaWEpKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgdGhlbWVfYncoKSsNCiAgeWxhYigiY292aWQxOSAtIE1vcnRlcyAoYWN1bXVsYWRhKSBwb3IgTSBoYWIiKSArIHhsYWIoImRpYSIpKw0KICB0aGVtZV9idyhiYXNlX3NpemUgPSAxNikrIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArDQogIGdlb21fcG9pbnQoYWVzKHkgPSBCcmF6aWxfbV9hY18xTXBvcCwgY29sb3VyID0gIkJyYXppbF9tX2FjXzFNcG9wIiksIHNpemU9Miwgc2hhcGU9MTApKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBDaGluYV9tX2FjXzFNcG9wLCBjb2xvdXIgPSAiQ2hpbmFfbV9hY18xTXBvcCIpLCBzaXplPTEpKw0KICMgZ2VvbV9saW5lKGFlcyh5ID0gRnJhbmNlX21fYWNfMU1wb3AsIGNvbG91ciA9ICJGcmFuY2VfbV9hY18xTXBvcCIpLCBzaXplPTEpKw0KIyAgZ2VvbV9saW5lKGFlcyh5ID0gR2VybWFueV9tX2FjXzFNcG9wLCBjb2xvdXIgPSAiR2VybWFueV9tX2FjXzFNcG9wIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBJcmFuX21fYWNfMU1wb3AsIGNvbG91ciA9ICJJcmFuX21fYWNfMU1wb3AiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gSXRhbHlfbV9hY18xTXBvcCwgY29sb3VyID0gIkl0YWx5X21fYWNfMU1wb3AiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gS29yZWFfU291dGhfbV9hY18xTXBvcCwgY29sb3VyID0gIktvcmVhX1NvdXRoX21fYWNfMU1wb3AiKSwgc2l6ZT0xKSsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gU3BhaW5fbV9hY18xTXBvcCwgY29sb3VyID0gIlNwYWluX21fYWNfMU1wb3AiKSwgc2l6ZT0xKSsNCiMgIGdlb21fbGluZShhZXMoeSA9IFN3aXR6ZXJsYW5kX21fYWNfMU1wb3AsIGNvbG91ciA9ICJTd2l0emVybGFuZF9tX2FjXzFNcG9wIiksIHNpemU9MSkrDQojICBnZW9tX2xpbmUoYWVzKHkgPSBVbml0ZWRfS2luZ2RvbV9tX2FjXzFNcG9wLCBjb2xvdXIgPSAiVW5pdGVkX0tpbmdkb21fbV9hY18xTXBvcCIpLCBzaXplPTEpKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBVU19tX2FjXzFNcG9wLCBjb2xvdXIgPSAiVVNfbV9hY18xTXBvcCIpLCBzaXplPTEpKw0KIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQ9NTApLHNpemU9MSxsaW5ldHlwZT0iZGFzaGVkIiwgY29sb3I9ImJsdWUiICkjKw0KIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcm91bmQoY292aWRfMWRpYSRCcmF6aWxfbV9hY18xTXBvcFs1MF0sMiksICAgICB4PXgrMjUsIHk9MStkZXNjb250byksIGNvbG9yPSJibGFjayIsIHNpemU9NykrDQojICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSByb3VuZChjb3ZpZF8xZGlhJENoaW5hX21fYWNfMU1wb3BbNTBdLDIpLCAgICAgIHg9eCsyNSwgeT0xKzEuNSpkZXNjb250byksIGNvbG9yPSJibGFjayIsIHNpemU9NykrDQojICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSByb3VuZChjb3ZpZF8xZGlhJEl0YWx5X21fYWNfMU1wb3BbNTBdLDIpLCAgICAgIHg9eCsyNSwgeT0xKzIqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcpKw0KIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcm91bmQoY292aWRfMWRpYSRLb3JlYV9Tb3V0aF9tX2FjXzFNcG9wWzUwXSwyKSx4PXgrMjUsIHk9MSsyLjUqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcpKw0KIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcm91bmQoY292aWRfMWRpYSRTcGFpbl9tX2FjXzFNcG9wWzUwXSwyKSwgICAgICB4PXgrMjUsIHk9MSszKmRlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03KSsNCiMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHJvdW5kKGNvdmlkXzFkaWEkVVNfbV9hY18xTXBvcFs1MF0sMiksICAgICAgICAgeD14KzI1LCB5PTErMy41KmRlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03KSsNCiMgIGdlb21fdGV4dChhZXMobGFiZWwgPSAiTW9ydGVzIG5vIDUwwrogRGlhIiwgICAgIHg9MTUsIHk9MSs2KmRlc2NvbnRvKSwgY29sb3I9ImJsdWUiLCBzaXplPTcpKw0KIyAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9ICJkZXNkZSBvIDHCuiBjYXNvIiwgICAgIHg9MTUsIHk9MSs1KmRlc2NvbnRvKSwgY29sb3I9ImJsdWUiLCBzaXplPTcpKw0KIyAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9ICJwb3IgTSBIYWIgZW0gY2FkYSBwYcOtcyIsICAgICB4PTE1LCB5PTErNCpkZXNjb250byksIGNvbG9yPSJibHVlIiwgc2l6ZT03KSsNCiMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9ICJCcmF6aWwiLCAgICAgeD14LCB5PTErZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcsbnVkZ2VfeD0wKSsNCiMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9ICJDaGluYSIsICAgICAgeD14LCB5PTErMS41KmRlc2NvbnRvKSwgY29sb3I9ImJsYWNrIiwgc2l6ZT03LG51ZGdlX3g9MCkrDQojICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSAiSXRhbHkiLCAgICAgIHg9eCwgeT0xKzIqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcsbnVkZ2VfeD0tMSkrDQojICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSAiS29yZWFfU291dGgiLCB4PXgsIHk9MSsyLjUqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcsbnVkZ2VfeD0zKSsNCiMgICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9ICJTcGFpbiIsICAgICAgeD14LCB5PTErMypkZXNjb250byksIGNvbG9yPSJibGFjayIsIHNpemU9NyxudWRnZV94PTApKw0KIyAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gIlVTIiwgICAgICAgICB4PXgsIHk9MSszLjUqZGVzY29udG8pLCBjb2xvcj0iYmxhY2siLCBzaXplPTcsbnVkZ2VfeD0tMSkNCg0KDQpgYGANCg0KDQoNCg==