climas = read_csv(here::here("data/clima_cg_jp-semanal.csv"),
col_types = "cTdddddd")
glimpse(climas)
Rows: 2,748
Columns: 8
$ cidade <chr> "Campina Grande", "Campina Grande", "Campina Grande", "Campina Grande", "C…
$ semana <dttm> 1992-12-27, 1993-01-03, 1993-01-10, 1993-01-31, 1993-02-07, 1993-02-14, 1…
$ tmedia <dbl> 26.13333, 26.11905, 25.76667, 25.74000, 26.31429, 26.28571, 26.47143, 26.5…
$ tmax <dbl> 30.4, 32.4, 32.2, 32.0, 32.7, 32.7, 32.3, 32.3, 32.1, 31.2, 32.2, 31.7, 32…
$ tmin <dbl> 20.7, 19.3, 19.7, 19.9, 19.6, 20.0, 20.4, 21.2, 19.0, 19.0, 19.3, 19.9, 19…
$ chuva <dbl> 0.0, 0.0, 0.0, 0.4, 0.3, 0.0, 4.9, 0.0, 0.0, 6.1, 0.4, 1.2, 0.0, 1.6, 0.0,…
$ mes <dbl> 12, 1, 1, 1, 2, 2, 2, 2, 10, 11, 11, 11, 11, 12, 12, 12, 12, 1, 1, 1, 1, 1…
$ ano <dbl> 1992, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 19…
Calcular a temperatura da semana anterior em cada linha
climas = climas %>%
mutate(tanterior = lag(tmedia, n = 1))
Q1: Qual a cidade é mais quente? Isso muda se considerarmos apenas o
período de janeiro e fevereiro (pico do verão)?
climas %>%
group_by(cidade) %>%
ggplot(aes(x = cidade, y = tmedia)) +
geom_boxplot()

Utilizando boxplots para uma visualização geral de máximos, mínimos,
mediana e quartis, pudemos observar que pelo menos 75% das amostras de
temperatura média para a cidade de João Pessoa durante todo o período
são maiores do que pelo menos 75% das amostras de temperatura média para
a cidade de Campina Grande, o que nos leva a concluir que João Pessoa é
a cidade mais quente.
Já se considerarmos apenas o período de Janeiro e Fevereiro:
climas %>%
filter(mes %in% c("1", "2")) %>%
group_by(cidade) %>%
ggplot(aes(x = cidade, y = tmedia)) +
geom_boxplot()

Para este caso, o resultado fica ainda mais ainda mais consagrado,
tendo em vista que 100% dos valores de temperatura (desconsiderando os
outliers) para a cidade de João Pessoa são maiores que pelo menos 75%
dos valores de temperatura para a cidade de Campina Grande. Outra
métrica é que 75% dos valores de temperatura média para a cidade de João
Pessoa são maiores que todos os dados de temperatura média para a cidade
de Campina Grande.
Q2: Quais os meses mais quentes e mais frios? Como você descreveria
a temperatura das festas juninas das cidades nos últimos anos?
climas %>%
mutate(mes = as.character(mes)) %>%
group_by(mes) %>%
ggplot(aes(x = reorder(mes, tmedia, median), y = tmedia)) +
geom_boxplot()

Utilizando boxplots para visualização descritiva dos dados, ordenando
pela mediana, percebe-se que o mês mais quente do ano é Fevereiro e o
mês mais frio é Julho. A temperatura nas festas juninas são as menos
registradas, visto que as festas geralmente ocorrem nos meses Junho e
Julho, os mesmos que apresentam as medianas mais baixas.
Q3: Quanto chove por semana em JP e CG? Descreva a distribuição do
volume de chuvas para as cidades?
Utilizando histograma para uma melhor análise da distribuição:
hist_chuva_cg = climas %>%
filter(cidade == "Campina Grande") %>%
ggplot(aes(x = chuva)) +
ggtitle("Chuvas em Campina Grande") +
geom_histogram(binwidth = 10, color = "#F6511D", fill = "white")
hist_chuva_jp = climas %>%
filter(cidade == "João Pessoa") %>%
ggplot(aes(x = chuva)) +
ggtitle("Chuvas em João Pessoa") +
geom_histogram(binwidth = 10, color = "#F6511D", fill = "white")
grid.arrange(hist_chuva_cg, hist_chuva_jp, ncol = 2)

Vemos que a chuva segue uma distribuição normal assimétrica a direita
com viés positivo para as duas cidades. Em média, quanto chove nas
cidades é:
Campina Grande:
climas %>% filter(cidade == "Campina Grande") %>% .$chuva %>% mean()
[1] 13.9973
João Pessoa:
climas %>% filter(cidade == "João Pessoa") %>% .$chuva %>% mean()
[1] 32.64849
Q4: Qual a relação entre a temperatura de uma semana e a temperatura
da semana anterior (descreva para as duas cidades)?
Campina Grande
Primeiro vamos observar a distribuição da temperatura e o
comportamento:
hist_temp_cg = climas %>%
filter(cidade == "Campina Grande") %>%
ggplot(aes(x = tmedia)) +
ggtitle("Histograma temperatura CG") +
geom_histogram(binwidth = .5, color = "#F6511D", fill = "white")
temp_cg = climas %>%
filter(cidade == "Campina Grande") %>%
ggplot(aes(x=semana, y=tmedia)) +
ggtitle("Temperatura média em CG") +
geom_point() +
theme_void()
grid.arrange(hist_temp_cg, temp_cg, ncol = 2)

Observamos que apesar dos dados seguirem uma distribuição semelhante
a normal com assimetria, os dados possuem característica não-linear, o
que torna o uso de Pearson para correlação não recomendado. Sendo assim,
utilizando Spearman e Kendall:
climas %>% filter(cidade == "Campina Grande") %>% summarise(
spearman = cor(tmedia, tanterior, method = "spearman", use="complete.obs"),
kendall = cor(tmedia, tanterior, method = "kendall", use="complete.obs")
)
Utilizando o coeficiente de spearman temos uma relação forte e
utilizando Kendall temos uma relação moderada.
João Pessoa
Primeiro vamos observar a distribuição da temperatura e o
comportamento:
hist_temp_jp = climas %>%
filter(cidade == "João Pessoa") %>%
ggplot(aes(x = tmedia)) +
ggtitle("Histograma temperatura JP") +
geom_histogram(binwidth = .5, color = "#F6511D", fill = "white")
temp_jp = climas %>%
filter(cidade == "João Pessoa") %>%
ggplot(aes(x=semana, y=tmedia)) +
ggtitle("Temperatura média em JP") +
geom_point() +
theme_void()
grid.arrange(hist_temp_jp, temp_jp, ncol = 2)

Observamos que apesar dos dados seguirem uma distribuição semelhante
a normal com assimetria, os dados possuem característica não-linear, o
que torna o uso de Pearson para correlação não recomendado. Sendo assim,
utilizando Spearman e Kendall:
climas %>% filter(cidade == "João Pessoa") %>% summarise(
spearman = cor(tmedia, tanterior, method = "spearman", use="complete.obs"),
kendall = cor(tmedia, tanterior, method = "kendall", use="complete.obs")
)
O resultado foi semelhante ao de Campina Grande. Utilizando o
coeficiente de spearman temos uma relação forte e utilizando Kendall
temos uma relação moderada.
Q5: Qual a relação entre temperatura e chuvas nas semanas em que
choveu (descreva para as duas cidades)?
Campina Grande
Primeiro vamos plotar a curva temperatura x chuva:
climas %>% filter(cidade == "Campina Grande" & chuva > 0) %>%
ggplot(aes(x=chuva, y=tmedia)) +
geom_point()

Devido a característica não-linear, utilizaremos os métodos de
correlação de Spearman e Kendall:
climas %>% filter(cidade == "Campina Grande" & chuva > 0) %>% summarise(
spearman = cor(tmedia, chuva, method = "spearman", use="complete.obs"),
kendall = cor(tmedia, chuva, method = "kendall", use="complete.obs")
)
A relação entre temperatura e chuvas para a cidade de Campina Grande
é fraca.
João Pessoa
Primeiro vamos plotar a curva temperatura x chuva:
climas %>% filter(cidade == "João Pessoa" & chuva > 0) %>%
ggplot(aes(x=chuva, y=tmedia)) +
geom_point()

Devido a característica não-linear, utilizaremos os métodos de
correlação de Spearman e Kendall:
climas %>% filter(cidade == "João Pessoa" & chuva > 0) %>% summarise(
spearman = cor(tmedia, chuva, method = "spearman", use="complete.obs"),
kendall = cor(tmedia, chuva, method = "kendall", use="complete.obs")
)
A relação entre temperatura e chuvas para a cidade de João Pessoa é
fraca.
LS0tCnRpdGxlOiAiVGVtcGVyYXR1cmEgSlAgeCBDRyIKYXV0aG9yOiAiUGxhdGVueSBQb25jaGV0IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKdGhlbWU6IHNhbmRzdG9uZQotLS0KCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGhlcmUpCmxpYnJhcnkobHVicmlkYXRlKQpsaWJyYXJ5KGdnYmVlc3dhcm0pCnRoZW1lX3NldCh0aGVtZV9idygpKQpgYGAKCmBgYHtyIHJlYWR9CmNsaW1hcyA9IHJlYWRfY3N2KGhlcmU6OmhlcmUoImRhdGEvY2xpbWFfY2dfanAtc2VtYW5hbC5jc3YiKSwgCiAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9ICJjVGRkZGRkZCIpCgpnbGltcHNlKGNsaW1hcykKYGBgCgpDYWxjdWxhciBhIHRlbXBlcmF0dXJhIGRhIHNlbWFuYSBhbnRlcmlvciBlbSBjYWRhIGxpbmhhCgpgYGB7cn0KY2xpbWFzID0gY2xpbWFzICU+JSAKICBtdXRhdGUodGFudGVyaW9yID0gbGFnKHRtZWRpYSwgbiA9IDEpKSAKYGBgCgojIyMgUTE6IFF1YWwgYSBjaWRhZGUgw6kgbWFpcyBxdWVudGU/IElzc28gbXVkYSBzZSBjb25zaWRlcmFybW9zIGFwZW5hcyBvIHBlcsOtb2RvIGRlIGphbmVpcm8gZSBmZXZlcmVpcm8gKHBpY28gZG8gdmVyw6NvKT8KCmBgYHtyIHExfQpjbGltYXMgJT4lIAogIGdyb3VwX2J5KGNpZGFkZSkgJT4lIAogIGdncGxvdChhZXMoeCA9IGNpZGFkZSwgeSA9IHRtZWRpYSkpICsgCiAgZ2VvbV9ib3hwbG90KCkKYGBgCgpVdGlsaXphbmRvIGJveHBsb3RzIHBhcmEgdW1hIHZpc3VhbGl6YcOnw6NvIGdlcmFsIGRlIG3DoXhpbW9zLCBtw61uaW1vcywgbWVkaWFuYSBlIHF1YXJ0aXMsIHB1ZGVtb3Mgb2JzZXJ2YXIgcXVlIHBlbG8gbWVub3MgNzUlIGRhcyBhbW9zdHJhcyBkZSB0ZW1wZXJhdHVyYSBtw6lkaWEgcGFyYSBhIGNpZGFkZSBkZSBKb8OjbyBQZXNzb2EgZHVyYW50ZSB0b2RvIG8gcGVyw61vZG8gc8OjbyBtYWlvcmVzIGRvIHF1ZSBwZWxvIG1lbm9zIDc1JSBkYXMgYW1vc3RyYXMgZGUgdGVtcGVyYXR1cmEgbcOpZGlhIHBhcmEgYSBjaWRhZGUgZGUgQ2FtcGluYSBHcmFuZGUsIG8gcXVlIG5vcyBsZXZhIGEgY29uY2x1aXIgcXVlIEpvw6NvIFBlc3NvYSDDqSBhIGNpZGFkZSBtYWlzIHF1ZW50ZS4KCkrDoSBzZSBjb25zaWRlcmFybW9zIGFwZW5hcyBvIHBlcsOtb2RvIGRlIEphbmVpcm8gZSBGZXZlcmVpcm86CmBgYHtyfQpjbGltYXMgJT4lCiAgICBmaWx0ZXIobWVzICVpbiUgYygiMSIsICIyIikpICU+JQogICAgZ3JvdXBfYnkoY2lkYWRlKSAlPiUKICAgIGdncGxvdChhZXMoeCA9IGNpZGFkZSwgeSA9IHRtZWRpYSkpICsgCiAgICBnZW9tX2JveHBsb3QoKQpgYGAKClBhcmEgZXN0ZSBjYXNvLCBvIHJlc3VsdGFkbyBmaWNhIGFpbmRhIG1haXMgYWluZGEgbWFpcyBjb25zYWdyYWRvLCB0ZW5kbyBlbSB2aXN0YSBxdWUgMTAwJSBkb3MgdmFsb3JlcyBkZSB0ZW1wZXJhdHVyYSAoZGVzY29uc2lkZXJhbmRvIG9zIG91dGxpZXJzKSBwYXJhIGEgY2lkYWRlIGRlIEpvw6NvIFBlc3NvYSBzw6NvIG1haW9yZXMgcXVlIHBlbG8gbWVub3MgNzUlIGRvcyB2YWxvcmVzIGRlIHRlbXBlcmF0dXJhIHBhcmEgYSBjaWRhZGUgZGUgQ2FtcGluYSBHcmFuZGUuIE91dHJhIG3DqXRyaWNhIMOpIHF1ZSA3NSUgZG9zIHZhbG9yZXMgZGUgdGVtcGVyYXR1cmEgbcOpZGlhIHBhcmEgYSBjaWRhZGUgZGUgSm/Do28gUGVzc29hIHPDo28gbWFpb3JlcyBxdWUgdG9kb3Mgb3MgZGFkb3MgZGUgdGVtcGVyYXR1cmEgbcOpZGlhIHBhcmEgYSBjaWRhZGUgZGUgQ2FtcGluYSBHcmFuZGUuCgojIyMgUTI6IFF1YWlzIG9zIG1lc2VzIG1haXMgcXVlbnRlcyBlIG1haXMgZnJpb3M/IENvbW8gdm9jw6ogZGVzY3JldmVyaWEgYSB0ZW1wZXJhdHVyYSBkYXMgZmVzdGFzIGp1bmluYXMgZGFzIGNpZGFkZXMgbm9zIMO6bHRpbW9zIGFub3M/CmBgYHtyfQpjbGltYXMgJT4lIAogICAgbXV0YXRlKG1lcyA9IGFzLmNoYXJhY3RlcihtZXMpKSAlPiUKICAgIGdyb3VwX2J5KG1lcykgJT4lIAogICAgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihtZXMsIHRtZWRpYSwgbWVkaWFuKSwgeSA9IHRtZWRpYSkpICsgCiAgICBnZW9tX2JveHBsb3QoKQpgYGAKVXRpbGl6YW5kbyBib3hwbG90cyBwYXJhIHZpc3VhbGl6YcOnw6NvIGRlc2NyaXRpdmEgZG9zIGRhZG9zLCBvcmRlbmFuZG8gcGVsYSBtZWRpYW5hLCBwZXJjZWJlLXNlIHF1ZSBvIG3DqnMgbWFpcyBxdWVudGUgZG8gYW5vIMOpIEZldmVyZWlybyBlIG8gbcOqcyBtYWlzIGZyaW8gw6kgSnVsaG8uIEEgdGVtcGVyYXR1cmEgbmFzIGZlc3RhcyBqdW5pbmFzIHPDo28gYXMgbWVub3MgcmVnaXN0cmFkYXMsIHZpc3RvIHF1ZSBhcyBmZXN0YXMgZ2VyYWxtZW50ZSBvY29ycmVtIG5vcyBtZXNlcyBKdW5obyBlIEp1bGhvLCBvcyBtZXNtb3MgcXVlIGFwcmVzZW50YW0gYXMgbWVkaWFuYXMgbWFpcyBiYWl4YXMuCgojIyMgUTM6IFF1YW50byBjaG92ZSBwb3Igc2VtYW5hIGVtIEpQIGUgQ0c/IERlc2NyZXZhIGEgZGlzdHJpYnVpw6fDo28gZG8gdm9sdW1lIGRlIGNodXZhcyBwYXJhIGFzIGNpZGFkZXM/CgpVdGlsaXphbmRvIGhpc3RvZ3JhbWEgcGFyYSB1bWEgbWVsaG9yIGFuw6FsaXNlIGRhIGRpc3RyaWJ1acOnw6NvOgoKYGBge3J9Cmhpc3RfY2h1dmFfY2cgPSBjbGltYXMgJT4lCiAgICBmaWx0ZXIoY2lkYWRlID09ICJDYW1waW5hIEdyYW5kZSIpICU+JSAKICAgIGdncGxvdChhZXMoeCA9IGNodXZhKSkgKyAKICAgIGdndGl0bGUoIkNodXZhcyBlbSBDYW1waW5hIEdyYW5kZSIpICsgCiAgICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDEwLCBjb2xvciA9ICIjRjY1MTFEIiwgZmlsbCA9ICJ3aGl0ZSIpCgoKaGlzdF9jaHV2YV9qcCA9IGNsaW1hcyAlPiUKICAgIGZpbHRlcihjaWRhZGUgPT0gIkpvw6NvIFBlc3NvYSIpICU+JSAKICAgIGdncGxvdChhZXMoeCA9IGNodXZhKSkgKyAKICAgIGdndGl0bGUoIkNodXZhcyBlbSBKb8OjbyBQZXNzb2EiKSArCiAgICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDEwLCBjb2xvciA9ICIjRjY1MTFEIiwgZmlsbCA9ICJ3aGl0ZSIpCgpncmlkLmFycmFuZ2UoaGlzdF9jaHV2YV9jZywgaGlzdF9jaHV2YV9qcCwgbmNvbCA9IDIpCmBgYAoKVmVtb3MgcXVlIGEgY2h1dmEgc2VndWUgdW1hIGRpc3RyaWJ1acOnw6NvIG5vcm1hbCBhc3NpbcOpdHJpY2EgYSBkaXJlaXRhIGNvbSB2acOpcyBwb3NpdGl2byBwYXJhIGFzIGR1YXMgY2lkYWRlcy4gRW0gbcOpZGlhLCBxdWFudG8gY2hvdmUgbmFzIGNpZGFkZXMgw6k6CgpDYW1waW5hIEdyYW5kZToKYGBge3J9CmNsaW1hcyAlPiUgZmlsdGVyKGNpZGFkZSA9PSAiQ2FtcGluYSBHcmFuZGUiKSAlPiUgLiRjaHV2YSAlPiUgbWVhbigpCmBgYApKb8OjbyBQZXNzb2E6CmBgYHtyfQpjbGltYXMgJT4lIGZpbHRlcihjaWRhZGUgPT0gIkpvw6NvIFBlc3NvYSIpICU+JSAuJGNodXZhICU+JSBtZWFuKCkKYGBgCgojIyMgUTQ6IFF1YWwgYSByZWxhw6fDo28gZW50cmUgYSB0ZW1wZXJhdHVyYSBkZSB1bWEgc2VtYW5hIGUgYSB0ZW1wZXJhdHVyYSBkYSBzZW1hbmEgYW50ZXJpb3IgKGRlc2NyZXZhIHBhcmEgYXMgZHVhcyBjaWRhZGVzKT8KCiMjIyMgQ2FtcGluYSBHcmFuZGUKUHJpbWVpcm8gdmFtb3Mgb2JzZXJ2YXIgYSBkaXN0cmlidWnDp8OjbyBkYSB0ZW1wZXJhdHVyYSBlIG8gY29tcG9ydGFtZW50bzoKCmBgYHtyfQpoaXN0X3RlbXBfY2cgPSBjbGltYXMgJT4lCiAgICBmaWx0ZXIoY2lkYWRlID09ICJDYW1waW5hIEdyYW5kZSIpICU+JSAKICAgIGdncGxvdChhZXMoeCA9IHRtZWRpYSkpICsgCiAgICBnZ3RpdGxlKCJIaXN0b2dyYW1hIHRlbXBlcmF0dXJhIENHIikgKyAKICAgIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gLjUsIGNvbG9yID0gIiNGNjUxMUQiLCBmaWxsID0gIndoaXRlIikKCnRlbXBfY2cgPSBjbGltYXMgJT4lCiAgICBmaWx0ZXIoY2lkYWRlID09ICJDYW1waW5hIEdyYW5kZSIpICU+JSAKICAgIGdncGxvdChhZXMoeD1zZW1hbmEsIHk9dG1lZGlhKSkgKyAKICAgIGdndGl0bGUoIlRlbXBlcmF0dXJhIG3DqWRpYSBlbSBDRyIpICsKICAgIGdlb21fcG9pbnQoKSArCiAgICB0aGVtZV92b2lkKCkKCmdyaWQuYXJyYW5nZShoaXN0X3RlbXBfY2csIHRlbXBfY2csIG5jb2wgPSAyKQpgYGAKT2JzZXJ2YW1vcyBxdWUgYXBlc2FyIGRvcyBkYWRvcyBzZWd1aXJlbSB1bWEgZGlzdHJpYnVpw6fDo28gc2VtZWxoYW50ZSBhIG5vcm1hbCBjb20gYXNzaW1ldHJpYSwgb3MgZGFkb3MgcG9zc3VlbSBjYXJhY3RlcsOtc3RpY2EgbsOjby1saW5lYXIsIG8gcXVlIHRvcm5hIG8gdXNvIGRlIFBlYXJzb24gcGFyYSBjb3JyZWxhw6fDo28gbsOjbyByZWNvbWVuZGFkby4gU2VuZG8gYXNzaW0sIHV0aWxpemFuZG8gU3BlYXJtYW4gZSBLZW5kYWxsOgoKYGBge3J9CmNsaW1hcyAlPiUgZmlsdGVyKGNpZGFkZSA9PSAiQ2FtcGluYSBHcmFuZGUiKSAlPiUgc3VtbWFyaXNlKAogICAgc3BlYXJtYW4gPSBjb3IodG1lZGlhLCB0YW50ZXJpb3IsIG1ldGhvZCA9ICJzcGVhcm1hbiIsIHVzZT0iY29tcGxldGUub2JzIiksIAogICAga2VuZGFsbCA9IGNvcih0bWVkaWEsIHRhbnRlcmlvciwgbWV0aG9kID0gImtlbmRhbGwiLCB1c2U9ImNvbXBsZXRlLm9icyIpCikKYGBgCgpVdGlsaXphbmRvIG8gY29lZmljaWVudGUgZGUgc3BlYXJtYW4gdGVtb3MgdW1hIHJlbGHDp8OjbyBmb3J0ZSBlIHV0aWxpemFuZG8gS2VuZGFsbCB0ZW1vcyB1bWEgcmVsYcOnw6NvIG1vZGVyYWRhLgoKIyMjIyBKb8OjbyBQZXNzb2EKUHJpbWVpcm8gdmFtb3Mgb2JzZXJ2YXIgYSBkaXN0cmlidWnDp8OjbyBkYSB0ZW1wZXJhdHVyYSBlIG8gY29tcG9ydGFtZW50bzoKCmBgYHtyfQpoaXN0X3RlbXBfanAgPSBjbGltYXMgJT4lCiAgICBmaWx0ZXIoY2lkYWRlID09ICJKb8OjbyBQZXNzb2EiKSAlPiUgCiAgICBnZ3Bsb3QoYWVzKHggPSB0bWVkaWEpKSArIAogICAgZ2d0aXRsZSgiSGlzdG9ncmFtYSB0ZW1wZXJhdHVyYSBKUCIpICsgCiAgICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IC41LCBjb2xvciA9ICIjRjY1MTFEIiwgZmlsbCA9ICJ3aGl0ZSIpCgp0ZW1wX2pwID0gY2xpbWFzICU+JQogICAgZmlsdGVyKGNpZGFkZSA9PSAiSm/Do28gUGVzc29hIikgJT4lIAogICAgZ2dwbG90KGFlcyh4PXNlbWFuYSwgeT10bWVkaWEpKSArIAogICAgZ2d0aXRsZSgiVGVtcGVyYXR1cmEgbcOpZGlhIGVtIEpQIikgKwogICAgZ2VvbV9wb2ludCgpICsKICAgIHRoZW1lX3ZvaWQoKQoKZ3JpZC5hcnJhbmdlKGhpc3RfdGVtcF9qcCwgdGVtcF9qcCwgbmNvbCA9IDIpCmBgYAoKT2JzZXJ2YW1vcyBxdWUgYXBlc2FyIGRvcyBkYWRvcyBzZWd1aXJlbSB1bWEgZGlzdHJpYnVpw6fDo28gc2VtZWxoYW50ZSBhIG5vcm1hbCBjb20gYXNzaW1ldHJpYSwgb3MgZGFkb3MgcG9zc3VlbSBjYXJhY3RlcsOtc3RpY2EgbsOjby1saW5lYXIsIG8gcXVlIHRvcm5hIG8gdXNvIGRlIFBlYXJzb24gcGFyYSBjb3JyZWxhw6fDo28gbsOjbyByZWNvbWVuZGFkby4gU2VuZG8gYXNzaW0sIHV0aWxpemFuZG8gU3BlYXJtYW4gZSBLZW5kYWxsOgoKYGBge3J9CmNsaW1hcyAlPiUgZmlsdGVyKGNpZGFkZSA9PSAiSm/Do28gUGVzc29hIikgJT4lIHN1bW1hcmlzZSgKICAgIHNwZWFybWFuID0gY29yKHRtZWRpYSwgdGFudGVyaW9yLCBtZXRob2QgPSAic3BlYXJtYW4iLCB1c2U9ImNvbXBsZXRlLm9icyIpLCAKICAgIGtlbmRhbGwgPSBjb3IodG1lZGlhLCB0YW50ZXJpb3IsIG1ldGhvZCA9ICJrZW5kYWxsIiwgdXNlPSJjb21wbGV0ZS5vYnMiKQopCmBgYAoKTyByZXN1bHRhZG8gZm9pIHNlbWVsaGFudGUgYW8gZGUgQ2FtcGluYSBHcmFuZGUuIFV0aWxpemFuZG8gbyBjb2VmaWNpZW50ZSBkZSBzcGVhcm1hbiB0ZW1vcyB1bWEgcmVsYcOnw6NvIGZvcnRlIGUgdXRpbGl6YW5kbyBLZW5kYWxsIHRlbW9zIHVtYSByZWxhw6fDo28gbW9kZXJhZGEuCgojIyMgUTU6IFF1YWwgYSByZWxhw6fDo28gZW50cmUgdGVtcGVyYXR1cmEgZSBjaHV2YXMgbmFzIHNlbWFuYXMgZW0gcXVlIGNob3ZldSAoZGVzY3JldmEgcGFyYSBhcyBkdWFzIGNpZGFkZXMpPwoKIyMjIyBDYW1waW5hIEdyYW5kZQpQcmltZWlybyB2YW1vcyBwbG90YXIgYSBjdXJ2YSB0ZW1wZXJhdHVyYSB4IGNodXZhOgoKYGBge3J9CmNsaW1hcyAlPiUgZmlsdGVyKGNpZGFkZSA9PSAiQ2FtcGluYSBHcmFuZGUiICYgY2h1dmEgPiAwKSAlPiUKICAgIGdncGxvdChhZXMoeD1jaHV2YSwgeT10bWVkaWEpKSArCiAgICBnZW9tX3BvaW50KCkKYGBgCkRldmlkbyBhIGNhcmFjdGVyw61zdGljYSBuw6NvLWxpbmVhciwgdXRpbGl6YXJlbW9zIG9zIG3DqXRvZG9zIGRlIGNvcnJlbGHDp8OjbyBkZSBTcGVhcm1hbiBlIEtlbmRhbGw6CmBgYHtyfQpjbGltYXMgJT4lIGZpbHRlcihjaWRhZGUgPT0gIkNhbXBpbmEgR3JhbmRlIiAmIGNodXZhID4gMCkgJT4lIHN1bW1hcmlzZSgKICAgIHNwZWFybWFuID0gY29yKHRtZWRpYSwgY2h1dmEsIG1ldGhvZCA9ICJzcGVhcm1hbiIsIHVzZT0iY29tcGxldGUub2JzIiksIAogICAga2VuZGFsbCA9IGNvcih0bWVkaWEsIGNodXZhLCBtZXRob2QgPSAia2VuZGFsbCIsIHVzZT0iY29tcGxldGUub2JzIikKKQpgYGAKQSByZWxhw6fDo28gZW50cmUgdGVtcGVyYXR1cmEgZSBjaHV2YXMgcGFyYSBhIGNpZGFkZSBkZSBDYW1waW5hIEdyYW5kZSDDqSBmcmFjYS4KCiMjIyMgSm/Do28gUGVzc29hClByaW1laXJvIHZhbW9zIHBsb3RhciBhIGN1cnZhIHRlbXBlcmF0dXJhIHggY2h1dmE6CgpgYGB7cn0KY2xpbWFzICU+JSBmaWx0ZXIoY2lkYWRlID09ICJKb8OjbyBQZXNzb2EiICYgY2h1dmEgPiAwKSAlPiUKICAgIGdncGxvdChhZXMoeD1jaHV2YSwgeT10bWVkaWEpKSArCiAgICBnZW9tX3BvaW50KCkKYGBgCkRldmlkbyBhIGNhcmFjdGVyw61zdGljYSBuw6NvLWxpbmVhciwgdXRpbGl6YXJlbW9zIG9zIG3DqXRvZG9zIGRlIGNvcnJlbGHDp8OjbyBkZSBTcGVhcm1hbiBlIEtlbmRhbGw6CmBgYHtyfQpjbGltYXMgJT4lIGZpbHRlcihjaWRhZGUgPT0gIkpvw6NvIFBlc3NvYSIgJiBjaHV2YSA+IDApICU+JSBzdW1tYXJpc2UoCiAgICBzcGVhcm1hbiA9IGNvcih0bWVkaWEsIGNodXZhLCBtZXRob2QgPSAic3BlYXJtYW4iLCB1c2U9ImNvbXBsZXRlLm9icyIpLCAKICAgIGtlbmRhbGwgPSBjb3IodG1lZGlhLCBjaHV2YSwgbWV0aG9kID0gImtlbmRhbGwiLCB1c2U9ImNvbXBsZXRlLm9icyIpCikKYGBgCkEgcmVsYcOnw6NvIGVudHJlIHRlbXBlcmF0dXJhIGUgY2h1dmFzIHBhcmEgYSBjaWRhZGUgZGUgSm/Do28gUGVzc29hIMOpIGZyYWNhLg==