a) GERAL
● Gráfico 1.1: Percentuais de utilização por modos de deslocamento
por municípios da PMB
● Gráfico 1.2: Percentuais de utilização dos modos de deslocamento
por municípios da PMB e por sexo
● Gráfico 1.3: Percentuais de utilização dos modos de deslocamento
por municípios da PMB por sexo e faixa de idade
● Gráfico 1.4: Percentuais de utilização dos modos de deslocamento
por municípios da PMB por sexo e faixas de renda do trabalho principal
(em salários mínimos)
● Gráfico 1.5: Percentuais de utilização por modos de deslocamento
por Grupo da PMB
● Gráfico 1.6: Percentuais de utilização dos modos de deslocamento
por Grupo da PMB e por sexo
● Gráfico 1.7: Percentuais de utilização dos modos de deslocamento
por Grupo da PMB, por sexo e faixa de idade
● Gráfico 1.8: Percentuais de utilização dos modos de deslocamento
por Grupo da PMB, por sexo e faixas de renda do trabalho principal (em
salários mínimos) Puro
● Tabela 1.1: Percentuais de domicílios segundo posse de veículos por
município da PMB
● Tabela 1.2: Percentuais de domicílios segundo proximidade de
ciclovias ou ciclofaixas por município da PMB
● Tabela 1.3: Percepção da existência de ciclovia por município da
PMB
● Tabela 1.4: Percepção da existência de sinalização para pedestres
por município da PMB
● Tabela 1.5: Percepção da existência de arborização por município da
PMB
● Tabela 1.6: Percepção da existência de calçadas por município da
PMB Mais:
● Tabela A.1: Percentuais de utilização dos modos de deslocamento
entre Cisgênero e Transgênero por munícipios da PMB
● Tabela A.2: Percentuais de utilização dos modos de deslocamento por
Orientação Sexual por munícipios da PMB
● Tabela A.3: Percentuais de utilização dos modos de deslocamento
entre LGBTQIA+ por munícipios da PMB
● Tabela A.4: Percentuais de utilização dos modos de deslocamento por
Estado Civil por munícipios da PMB
● Tabela A.5: Percentuais de utilização dos modos de deslocamento por
Residentes com Cônjuge por munícipios da PMB
● Tabela A.6: Percentuais de utilização dos modos de deslocamento por
Classe do Critério Brasil por munícipios da PMB
● Tabela A.7: Percentuais de utilização dos modos de deslocamento por
Composição dos Domicílios por munícipios da PMB
b) TRABALHO
● Gráfico 2.1: Percentuais de utilização por modos de deslocamento
para o trabalho por municípios da PMB


● Gráfico 2.2: Percentuais de utilização dos modos de deslocamento
para o trabalho por sexo por Grupo da PMB


● Gráfico 2.3: Percentuais de utilização dos modos de deslocamento
para o trabalho por sexo e faixas de renda do trabalho principal (em
salários mínimos)


pdad2024$strata_faixaidade_trabalho
● Gráfico 2.4: Percentuais de utilização dos modos de deslocamento
para o trabalho por sexo e faixa de idade

● Gráfico 2.5: Percentuais de utilização dos modos de deslocamento
para o trabalho por tempo de deslocamento por Grupo da PMB
● Gráfico 2.6: Percentuais de utilização dos modos de deslocamento
para o trabalho por sexo e tempo de deslocamento
df$pergunta[str_detect(df$pergunta,"traba")] |> unique()
[1] "Res_trabalho_modal" "Res_trabalho_modal_ativa" "Res_trabalho_tempo_30min" "Resp_trabalho_destino"
df |> filter(filter=="PMB",pergunta=="Res_trabalho_modal_ativa",str_detect(strata_kind,"Res_trabalho"),str_detect(strata_kind,"sex")) |> #select(strata_kind) |> distinct()
ggplot(aes(pct*100,strata2))+geom_col()+facet_grid(strata1~resp)+theme_minimal()+geom_label(aes(label=pct_text))
Error in `combine_vars()`:
! Faceting variables must have at least one value.
Run `]8;;x-r-run:rlang::last_trace()rlang::last_trace()]8;;` to see where the error occurred.

● Gráfico 2.7: Percentuais de utilização dos modos de deslocamento
para o trabalho por sexo, tempo de deslocamento e cor/raça
pendente
● Tabela 2.1: Percentuais de utilização dos modos de deslocamento
para o trabalho por cor/raça # pendente
|> filter(filter=="PMB",pergunta=="Res_trabalho_modal_ativa",str_detect(strata_kind,"Res_trabalho"),str_detect(strata_kind,"cor"))
Erro: '|>' inesperado em " |>"
● Tabela 2.2: Percentual da população por cor/raça para cada modo de
deslocamento para o trabalho

● Tabela 2.3: Percentual da população por sexo e cor/raça para cada
modo de deslocamento para o trabalho

● Tabela 2.4: Percentuais da população que utilizam automóvel para ir
ao trabalho segundo posse de veículos no domicílio
Pendente

● Tabela 2.5: Percentuais da população que utilizam o modo a pé para
ir ao trabalho segundo posse de automóvel no domicílio ### Pendente

● Tabela 2.6: Percentuais de utilização de bicicletas por motivo de
trabalho


● Tabela 2.7: Percepção de ciclovia para aqueles que vão de bicicleta
para o trabalho
pendencia
● Tabela 2.8: Percentuais de utilização do modo a pé por motivo de
trabalho ### pendencia


● Tabela 2.9: Percepção da existência de sinalização para pedestres
para aqueles que vão a pé para o trabalho
pendente
● Tabela 2.10: Percepção da população que utiliza o modo a pé para o
trabalho sobre a existência de arborização
pendente
● Tabela 2.11: Percepção da população que utiliza o modo a pé para o
trabalho sobre a existência de calçadas
pendente
● Tabela 2.12: Percentuais de moradores segundo tempo de deslocamento
por motivo de trabalho por município da PMB
pendente
● Tabela 2.13: Percentuais de moradores segundo tempo de deslocamento
por motivo de trabalho por Grupo da PMB
pendente
● Tabela 2.14: Percentuais da população que utilizam ônibus para ir
ao trabalho segundo posse de automóvel no domicílio por município da
PMB
pendente
c) ESTUDO
● Gráfico 3.1: Percentuais de utilização por modos de deslocamento
para o estudo por municípios da PMB ● Gráfico 3.2: Percentuais da
população segundo modo de deslocamento por motivo de estudo por sexo




● Gráfico 3.3: Percentuais de utilização dos modos de deslocamento
por motivo de estudo por sexo e faixas de renda domiciliar per capita
(em salários mínimos)


● Gráfico 3.4: Percentuais de utilização dos modos de deslocamento
para a escola por tempo de deslocamento

● Gráfico 3.5: Percentuais da população segundo modo de deslocamento
por motivo de estudo, tempo de deslocamento e por sexo

● Gráfico 3.6: Percentuais da população segundo modo de deslocamento
por motivo de estudo por sexo, tempo de deslocamento e cor/raça

● Tabela 3.1: Percentual de utilização dos modos de deslocamento por
motivo de estudo por sexo e faixa de idade #### pendente
resp | 0 a 6 anos | 7 a 14 anos | 15 a 17 anos | 18 a 24 anos | 25 ou mais |
|---|
A pé | 21,96% | 55,78% | 16,94% | 3,86% | 1,45% |
Automóvel | 30,71% | 39,18% | 7,94% | 9,2% | 12,97% |
Bicicleta | 22,47% | 46,13% | 23,04% | 4,25*% | 4,11*% |
Escolar Privado | 29,77% | 53,62% | 10,57% | 4,72*% | 1,33*% |
Escolar Público | 18,5% | 53,87% | 21,56% | 4,43% | 1,64*% |
Motocicleta | 13,35*% | 31,8% | 8,51*% | 28,27% | 18,07*% |
Privado (empresa de aplicativo, táxi etc) | 12,76*% | 15,13*% | 10,73*% | 40,42*% | 20,96*% |
Ônibus | 7,14*% | 19,66% | 27,61% | 29,97% | 15,61% |
Mobilidade Ativa | 22,03% | 54,43% | 17,79% | 3,92% | 1,82% |
Motorizado Privado individual | 27,64% | 36,81% | 8,18% | 13,32% | 14,05% |
Trasnporte Coletivo (incluindo escolares) | 17,75% | 43,06% | 20,71% | 12,53% | 5,95% |
Motorizado Privado | 27,64% | 36,81% | 8,18% | 13,32% | 14,05% |
Trasnporte Coletivo | 7,14*% | 19,66% | 27,61% | 29,97% | 15,61% |
Trasnporte Escolares | 22,61% | 53,78% | 17,55% | 4,54% | 1,53*% |
● Tabela 3.2: Percentual da população segundo meio de deslocamento
por motivo de estudo, sexo e cor/raça
resp | Feminino | Masculino |
|---|
A pé | 69,4% | 66,42% |
Automóvel | 50,64% | 55,48% |
Bicicleta | 71,56% | 64,22% |
Escolar Privado | 55,68% | 59,02% |
Escolar Público | 72,92% | 69,75% |
Motocicleta | 58,02% | 74,54% |
Privado (empresa de aplicativo, táxi etc) | 60,52% | 91,51% |
Ônibus | 61,49% | 71,83% |
Mobilidade Ativa | 69,62% | 66,04% |
Motorizado Privado individual | 52,2% | 59,15% |
Trasnporte Coletivo (incluindo escolares) | 64,62% | 67,67% |
Motorizado Privado | 52,2% | 59,15% |
Trasnporte Coletivo | 61,49% | 71,83% |
Trasnporte Escolares | 66,32% | 66,13% |
resp | Feminino | Masculino |
|---|
A pé | 1,78*% | 1,47*% |
Automóvel | 1,82*% | 2,9*% |
Bicicleta | 2,06*% | 0,16*% |
Escolar Privado | 2,63*% | 0,75*% |
Escolar Público | 1,17*% | 1,3*% |
Motocicleta | 41,98*% | 2,25*% |
Privado (empresa de aplicativo, táxi etc) | 9*% | 8,49*% |
Ônibus | 0,39*% | 0,53*% |
Mobilidade Ativa | 1,81*% | 1,24*% |
Motorizado Privado individual | 2,41*% | 2,74*% |
Trasnporte Coletivo (incluindo escolares) | 1,26*% | 0,96*% |
Motorizado Privado | 2,41*% | 2,74*% |
Trasnporte Coletivo | 0,39*% | 0,53*% |
Trasnporte Escolares | 1,73*% | 1,11*% |
● Tabela 3.3: Percentual da população por cor/raça para cada modo de
deslocamento por motivo de estudo
resp | Amarela | Branca | Indígena | Parda | Preta |
|---|
A pé | 1,63% | 29,79% | 0,45*% | 59,93% | 8,2% |
Automóvel | 2,31*% | 44,76% |
| 47,22% | 5,71% |
Bicicleta | 0,79*% | 32,42% | 0,15*% | 60,37% | 6,28% |
Escolar Privado | 1,74*% | 41,03% |
| 51,09% | 6,14% |
Escolar Público | 1,17*% | 27,61% | 0,03*% | 59,11% | 12,07% |
Motocicleta | 1,42*% | 30,27% |
| 58,64% | 9,68*% |
Privado (empresa de aplicativo, táxi etc) | 7,71*% | 27,36*% |
| 52,72% | 12,22*% |
Ônibus | 0,45*% | 33,55% | 0,28*% | 55,04% | 10,67% |
Mobilidade Ativa | 1,52% | 30,16% | 0,41*% | 59,99% | 7,93% |
Motorizado Privado individual | 2,56*% | 42,04% |
| 48,84% | 6,56% |
Trasnporte Coletivo (incluindo escolares) | 1,09*% | 32,84% | 0,1*% | 55,83% | 10,15% |
Motorizado Privado | 2,56*% | 42,04% |
| 48,84% | 6,56% |
Trasnporte Coletivo | 0,45*% | 33,55% | 0,28*% | 55,04% | 10,67% |
Trasnporte Escolares | 1,38*% | 32,51% | 0,02*% | 56,18% | 9,91% |
● Tabela 3.4: Percentual da população por sexo e cor/raça por meio de
deslocamento por motivo de estudo
resp | strata1 | Negro | não Negra |
|---|
A pé | Feminino | 69,4% | 30,6% |
A pé | Masculino | 66,42% | 33,58% |
Automóvel | Feminino | 50,64% | 49,36% |
Automóvel | Masculino | 55,48% | 44,52% |
Bicicleta | Feminino | 71,56% | 28,44% |
Bicicleta | Masculino | 64,22% | 35,78% |
Escolar Privado | Feminino | 55,68% | 44,32% |
Escolar Privado | Masculino | 59,02% | 40,98% |
Escolar Público | Feminino | 72,92% | 27,08% |
Escolar Público | Masculino | 69,75% | 30,25% |
Motocicleta | Feminino | 58,02% | 41,98*% |
Motocicleta | Masculino | 74,54% | 25,46*% |
Privado (empresa de aplicativo, táxi etc) | Feminino | 60,52% | 39,48*% |
Privado (empresa de aplicativo, táxi etc) | Masculino | 91,51% | 8,49*% |
Ônibus | Feminino | 61,49% | 38,51% |
Ônibus | Masculino | 71,83% | 28,17% |
Mobilidade Ativa | Feminino | 69,62% | 30,38% |
Mobilidade Ativa | Masculino | 66,04% | 33,96% |
Motorizado Privado individual | Feminino | 52,2% | 47,8% |
Motorizado Privado individual | Masculino | 59,15% | 40,85% |
Trasnporte Coletivo (incluindo escolares) | Feminino | 64,62% | 35,38% |
Trasnporte Coletivo (incluindo escolares) | Masculino | 67,67% | 32,33% |
Motorizado Privado | Feminino | 52,2% | 47,8% |
Motorizado Privado | Masculino | 59,15% | 40,85% |
Trasnporte Coletivo | Feminino | 61,49% | 38,51% |
Trasnporte Coletivo | Masculino | 71,83% | 28,17% |
Trasnporte Escolares | Feminino | 66,32% | 33,68% |
Trasnporte Escolares | Masculino | 66,13% | 33,87% |
● Tabela 3.5: Percentual de utilização de bicicletas por motivo de
estudo
strata1 | A pé |
|---|
Alexânia | 1,54% |
Cidade Ocidental | 6,63% |
Cocalzinho de Goiás | 1,54% |
Cristalina | 3,88% |
Formosa | 6,33% |
Luziânia | 17,39% |
Novo Gama | 8,59% |
Padre Bernardo | 2,21% |
Planaltina | 9,67% |
Santo Antônio do Descoberto | 5,7% |
Valparaíso de Goiás | 13,48% |
Águas Lindas de Goiás | 23,04% |
● Tabela 3.6: Percepção da existência de ciclovias para aqueles que
utilizam bicicleta por motivo de estudo ### pendente
● Tabela 3.7: Percentuais de utilização do modo a pé por motivo de
estudo
strata1 | Bicicleta |
|---|
Alexânia | 3,64% |
Cidade Ocidental | 0,7*% |
Cocalzinho de Goiás | 1,63*% |
Cristalina | 10,8% |
Formosa | 22,37% |
Luziânia | 20,38% |
Novo Gama | 3,56*% |
Padre Bernardo | 1,91*% |
Planaltina | 11,72% |
Santo Antônio do Descoberto | 1,41*% |
Valparaíso de Goiás | 6,55*% |
Águas Lindas de Goiás | 15,32*% |
● Tabela 3.8: Percepção da existência de sinalização para pedestres
para aqueles que vão a pé para a escola ### pendente
● Tabela 3.9: Percepção da existência de arborização para aqueles que
vão a pé para a escola ### pendente
● Tabela 3.10: Percepção da existência de calçadas para aqueles que
vão a pé para a escola ### pendente
● Tabela 3.11: Percentuais de moradores segundo tempo de deslocamento
por motivo de estudo por Grupo da PMB
strata1 | A pé | Automóvel | Bicicleta | Escolar Privado | Escolar Público | Motocicleta | Privado (empresa de aplicativo, táxi etc) | Ônibus | Mobilidade Ativa | Motorizado Privado individual | Trasnporte Coletivo (incluindo escolares) | Motorizado Privado | Trasnporte Coletivo | Trasnporte Escolares |
|---|
PMB grupo 1 | 49,98% | 54,07% | 41,99% | 64,93% | 54,73% | 41,23% | 32,1*% | 57,39% | 48,87% | 51,23% | 58,12% | 51,23% | 57,39% | 58,45% |
PMB grupo 2 | 7,24% | 5,24% | 5,05% | 8,21% | 10,23% | 6,21*% | 0,82*% | 6,95% | 6,93% | 5,06% | 8,69% | 5,06% | 6,95% | 9,49% |
PMB grupo 3 | 26,79% | 19,48% | 18,86% | 15,88% | 26,91% | 8,5*% | 38,04*% | 23,3% | 25,68% | 19,48% | 23,01% | 19,48% | 23,3% | 22,88% |
PMB grupo 4 | 16% | 21,21% | 34,1% | 10,98% | 8,14% | 44,06% | 29,04*% | 12,36% | 18,51% | 24,24% | 10,18% | 24,24% | 12,36% | 9,17% |
● Tabela 3.12: Percentuais de modos de deslocamento por motivo de
estudo por Município da PMB
strata1 | A pé | Automóvel | Bicicleta | Escolar Privado | Escolar Público | Motocicleta | Privado (empresa de aplicativo, táxi etc) | Ônibus | Mobilidade Ativa | Motorizado Privado individual | Trasnporte Coletivo (incluindo escolares) | Motorizado Privado | Trasnporte Coletivo | Trasnporte Escolares |
|---|
Alexânia | 1,54% | 1,86% | 3,64% | 0,92*% | 2,21% | 2,52*% | 0,82*% | 0,82*% | 1,83% | 1,87% | 1,45% | 1,87% | 0,82*% | 1,74% |
Cidade Ocidental | 6,63% | 4,66% | 0,7*% | 6,46% | 17,43% | 3,92*% |
| 6,57% | 5,81% | 4,28% | 11,27% | 4,28% | 6,57% | 13,43% |
Cocalzinho de Goiás | 1,54% | 0,76*% | 1,63*% | 1,96% | 1,99% | 1,47*% | 0,85*% | 0,59*% | 1,56% | 0,85% | 1,55% | 0,85% | 0,59*% | 1,98% |
Cristalina | 3,88% | 5,42% | 10,8% | 3,06% | 5,27% | 4,82*% | 2,39*% | 2*% | 4,84% | 5,16% | 3,69% | 5,16% | 2*% | 4,46% |
Formosa | 6,33% | 13,17% | 22,37% | 5,14*% | 2,46*% | 22,94*% | 10,22*% | 2,71*% | 8,56% | 14,05% | 3,21% | 14,05% | 2,71*% | 3,44% |
Luziânia | 17,39% | 17,71% | 20,38% | 23,46% | 5,34% | 21,08% | 9,45*% | 14,14% | 17,81% | 17,54% | 12,64% | 17,54% | 14,14% | 11,95% |
Novo Gama | 8,59% | 6,32% | 3,56*% | 11,5% | 6,41% |
| 6,36*% | 17,56% | 7,89% | 5,63% | 11,19% | 5,63% | 17,56% | 8,27% |
Padre Bernardo | 2,21% | 1,68% | 1,91*% | 1,65% | 3,04% | 3,68*% | 1,11*% | 3,76% | 2,16% | 1,86% | 2,92% | 1,86% | 3,76% | 2,53% |
Planaltina | 9,67% | 8,05% | 11,72% | 5,84*% | 5,68% | 21,12*% | 18,81*% | 9,65% | 9,96% | 10,19% | 6,97% | 10,19% | 9,65% | 5,74% |
Santo Antônio do Descoberto | 5,7% | 3,38*% | 1,41*% | 7,29% | 8,01% | 3,69*% |
| 6,14% | 5,1% | 3,19*% | 7,24% | 3,19*% | 6,14% | 7,75% |
Valparaíso de Goiás | 13,48% | 19,96% | 6,55*% | 20,46% | 20,27% | 11,4*% | 13,9*% | 17,12% | 12,52% | 18,62% | 19,33% | 18,62% | 17,12% | 20,34% |
Águas Lindas de Goiás | 23,04% | 17,04% | 15,32*% | 12,26*% | 21,88% | 3,35*% | 36,09*% | 18,94% | 21,96% | 16,77% | 18,55% | 16,77% | 18,94% | 18,37% |
● Tabela C.1: Percentuais de modos de deslocamento por motivo de
estudo por Grupo da PMB
strata1 | A pé | Automóvel | Bicicleta | Escolar Privado | Escolar Público | Motocicleta | Privado (empresa de aplicativo, táxi etc) | Ônibus | Mobilidade Ativa | Motorizado Privado individual | Trasnporte Coletivo (incluindo escolares) | Motorizado Privado | Trasnporte Coletivo | Trasnporte Escolares |
|---|
PMB grupo 1 | 49,98% | 54,07% | 41,99% | 64,93% | 54,73% | 41,23% | 32,1*% | 57,39% | 48,87% | 51,23% | 58,12% | 51,23% | 57,39% | 58,45% |
PMB grupo 2 | 7,24% | 5,24% | 5,05% | 8,21% | 10,23% | 6,21*% | 0,82*% | 6,95% | 6,93% | 5,06% | 8,69% | 5,06% | 6,95% | 9,49% |
PMB grupo 3 | 26,79% | 19,48% | 18,86% | 15,88% | 26,91% | 8,5*% | 38,04*% | 23,3% | 25,68% | 19,48% | 23,01% | 19,48% | 23,3% | 22,88% |
PMB grupo 4 | 16% | 21,21% | 34,1% | 10,98% | 8,14% | 44,06% | 29,04*% | 12,36% | 18,51% | 24,24% | 10,18% | 24,24% | 12,36% | 9,17% |
● Tabela C.2: Percentuais de utilização dos modos de deslocamento por
motivo de estudo por Composição dos Domicílios ### pendente
d) SERVIÇOS DE SAÚDE E COMPRAS
● Gráfico 4.1: Percentuais de utilização por modos de deslocamento
para serviços de saúde por municípios da PMB
● Gráfico 4.2: Percentuais de utilização por modos de deslocamento
por motivos de compras por municípios da PMB ### pendente
● Tabela 4.1: Percentuais de utilização por modos de deslocamento
para serviços de saúde por Municípios da PMB ### pendente
● Tabela 4.2: Percentuais de utilização por modos de deslocamento por
motivos de compras por Municípios da PMB ### pendente
● Tabela D.1: Percentuais de modos de deslocamento por motivo de
compras por Município da PMB ### pendente
● Tabela D.2: Percentuais de modos de deslocamento por motivo de
compras por Grupo da PMB ### pendente
● Tabela D.3: Percentuais de modos de deslocamento por motivo de
utilização de serviços de saúde por Município da PMB ### pendente
● Tabela D.4: Percentuais de modos de deslocamento por motivo de
utilização de serviços de saúde por Grupo da PMB ### pendente
● Tabela D.5: Percentuais de utilização dos modos de deslocamento por
motivo de compras por gênero e faixa de idade ### pendente
● Tabela D.6: Percentuais de utilização dos modos de deslocamento por
motivo de acesso à serviços de saúde por gênero e faixa de idade ###
pendente
LS0tCnRpdGxlOiAiQ29tbyBBbmRhIGFvIMKyIC0gUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCmVkaXRvcl9vcHRpb25zOiAKICBtYXJrZG93bjogCiAgICB3cmFwOiA1MDAKLS0tCgojIGEpIEdFUkFMCgoK4pePIEdyw6FmaWNvIDEuMTogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIHBvciBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG11bmljw61waW9zIGRhIFBNQiAKCuKXjyBHcsOhZmljbyAxLjI6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtdW5pY8OtcGlvcyBkYSBQTUIgZSBwb3Igc2V4byAKCuKXjyBHcsOhZmljbyAxLjM6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtdW5pY8OtcGlvcyBkYSBQTUIgcG9yIHNleG8gZSBmYWl4YSBkZSBpZGFkZSAKCuKXjyBHcsOhZmljbyAxLjQ6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtdW5pY8OtcGlvcyBkYSBQTUIgcG9yIHNleG8gZSBmYWl4YXMgZGUgcmVuZGEgZG8gdHJhYmFsaG8gcHJpbmNpcGFsIChlbSBzYWzDoXJpb3MgbcOtbmltb3MpIAoK4pePIEdyw6FmaWNvIDEuNTogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIHBvciBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIEdydXBvIGRhIFBNQiAKCuKXjyBHcsOhZmljbyAxLjY6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBHcnVwbyBkYSBQTUIgZSBwb3Igc2V4byAKCuKXjyBHcsOhZmljbyAxLjc6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBHcnVwbyBkYSBQTUIsIHBvciBzZXhvIGUgZmFpeGEgZGUgaWRhZGUgCgril48gR3LDoWZpY28gMS44OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgR3J1cG8gZGEgUE1CLCBwb3Igc2V4byBlIGZhaXhhcyBkZSByZW5kYSBkbyB0cmFiYWxobyBwcmluY2lwYWwgKGVtIHNhbMOhcmlvcyBtw61uaW1vcykgUHVybyAKCuKXjyBUYWJlbGEgMS4xOiBQZXJjZW50dWFpcyBkZSBkb21pY8OtbGlvcyBzZWd1bmRvIHBvc3NlIGRlIHZlw61jdWxvcyBwb3IgbXVuaWPDrXBpbyBkYSBQTUIgCgril48gVGFiZWxhIDEuMjogUGVyY2VudHVhaXMgZGUgZG9taWPDrWxpb3Mgc2VndW5kbyBwcm94aW1pZGFkZSBkZSBjaWNsb3ZpYXMgb3UgY2ljbG9mYWl4YXMgcG9yIG11bmljw61waW8gZGEgUE1CIAoK4pePIFRhYmVsYSAxLjM6IFBlcmNlcMOnw6NvIGRhIGV4aXN0w6puY2lhIGRlIGNpY2xvdmlhIHBvciBtdW5pY8OtcGlvIGRhIFBNQiAKCuKXjyBUYWJlbGEgMS40OiBQZXJjZXDDp8OjbyBkYSBleGlzdMOqbmNpYSBkZSBzaW5hbGl6YcOnw6NvIHBhcmEgcGVkZXN0cmVzIHBvciBtdW5pY8OtcGlvIGRhIFBNQiAKCuKXjyBUYWJlbGEgMS41OiBQZXJjZXDDp8OjbyBkYSBleGlzdMOqbmNpYSBkZSBhcmJvcml6YcOnw6NvIHBvciBtdW5pY8OtcGlvIGRhIFBNQiAKCuKXjyBUYWJlbGEgMS42OiBQZXJjZXDDp8OjbyBkYSBleGlzdMOqbmNpYSBkZSBjYWzDp2FkYXMgcG9yIG11bmljw61waW8gZGEgUE1CIE1haXM6IAoK4pePIFRhYmVsYSBBLjE6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIGVudHJlIENpc2fDqm5lcm8gZSBUcmFuc2fDqm5lcm8gcG9yIG11bsOtY2lwaW9zIGRhIFBNQiAKCuKXjyBUYWJlbGEgQS4yOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgT3JpZW50YcOnw6NvIFNleHVhbCBwb3IgbXVuw61jaXBpb3MgZGEgUE1CIAoK4pePIFRhYmVsYSBBLjM6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIGVudHJlIExHQlRRSUErIHBvciBtdW7DrWNpcGlvcyBkYSBQTUIgCgril48gVGFiZWxhIEEuNDogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIEVzdGFkbyBDaXZpbCBwb3IgbXVuw61jaXBpb3MgZGEgUE1CIAoK4pePIFRhYmVsYSBBLjU6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBSZXNpZGVudGVzIGNvbSBDw7RuanVnZSBwb3IgbXVuw61jaXBpb3MgZGEgUE1CIAoK4pePIFRhYmVsYSBBLjY6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBDbGFzc2UgZG8gQ3JpdMOpcmlvIEJyYXNpbCBwb3IgbXVuw61jaXBpb3MgZGEgUE1CIAoK4pePIFRhYmVsYSBBLjc6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBDb21wb3Npw6fDo28gZG9zCkRvbWljw61saW9zIHBvciBtdW7DrWNpcGlvcyBkYSBQTUIKCiMgYikgIFRSQUJBTEhPCgril48gR3LDoWZpY28gMi4xOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gcG9yIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIG8gdHJhYmFsaG8gcG9yIG11bmljw61waW9zIGRhIFBNQgoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CmRmJHN0cmF0YV9raW5kIHw+IHVuaXF1ZSgpCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHBlcmd1bnRhPT0iUmVzX3RyYWJhbGhvX21vZGFsIixzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfbG9jYWxpZGFkZSIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGEpKStnZW9tX2NvbCgpK2ZhY2V0X2dyaWQofnJlc3Asc2NhbGVzID0gImZyZWUiKSt0aGVtZV9taW5pbWFsKCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKICAKYGBgCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KZGYkcGVyZ3VudGFbc3RyX2RldGVjdChkZiRwZXJndW50YSwidHJhYmEiKV0gfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWxfYXRpdmEiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9sb2NhbGlkYWRlIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIiAtICIpKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCiAgCmBgYAoK4pePIEdyw6FmaWNvIDIuMjogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcGFyYSBvIHRyYWJhbGhvIHBvciBzZXhvIHBvciBHcnVwbyBkYSBQTUIKCmBgYHtyIGZpZy5oZWlnaHQ9MTAsIGZpZy53aWR0aD0yMH0KZGYkc3RyYXRhX2tpbmQgfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWwiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9ncnVwb2xvY2FsIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIiAtICIpKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCiAgCmBgYAoKYGBge3IgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTIwfQpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2dydXBvbG9jYWwiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiIC0gIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKICAKYGBgCgril48gR3LDoWZpY28gMi4zOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIG8gdHJhYmFsaG8gcG9yIHNleG8gZSBmYWl4YXMgZGUgcmVuZGEgZG8gdHJhYmFsaG8gcHJpbmNpcGFsIChlbSBzYWzDoXJpb3MgbcOtbmltb3MpCgpgYGB7ciBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD0yMH0KZGYkc3RyYXRhX2tpbmQgfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWxfYXRpdmEiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9zZXhvIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX3JlbmRhc21pbmQiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGEyKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKHJlc3B+c3RyYXRhMSkrdGhlbWVfbWluaW1hbCgpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCiAgCmBgYAoKYGBge3IgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9MjB9CiNkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX3NleG8iKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiIC0gIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKICAKYGBgCgpgYGB7cn0KcGRhZDIwMjQkc3RyYXRhX2ZhaXhhaWRhZGVfdHJhYmFsaG8KYGBgCgril48gR3LDoWZpY28gMi40OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIG8gdHJhYmFsaG8gcG9yIHNleG8gZSBmYWl4YSBkZSBpZGFkZQoKYGBge3IgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTIwfQpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2ZhaXhhaWRhZGVfdHJhYmFsaG8iKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzZXgiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGEyKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKHJlc3B+c3RyYXRhMSkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCmBgYAoK4pePIEdyw6FmaWNvIDIuNTogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcGFyYSBvIHRyYWJhbGhvIHBvciB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gcG9yIEdydXBvIGRhIFBNQgoKYGBge3IgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTIwfQpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwiUmVzX3RyYWJhbGhvIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInNleCIpKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YTIpKStnZW9tX2NvbCgpK2ZhY2V0X2dyaWQoc3RyYXRhMX5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCgril48gR3LDoWZpY28gMi42OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIG8gdHJhYmFsaG8gcG9yIHNleG8gZSB0ZW1wbyBkZSBkZXNsb2NhbWVudG8KCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwiUmVzX3RyYWJhbGhvIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4IikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCgoKCmBgYAoK4pePIEdyw6FmaWNvIDIuNzogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcGFyYSBvIHRyYWJhbGhvIHBvciBzZXhvLCB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gZSBjb3IvcmHDp2EKCiMgcGVuZGVudGUKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQoKCmBgYAoK4pePIFRhYmVsYSAyLjE6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBhcmEgbyB0cmFiYWxobyBwb3IgY29yL3Jhw6dhIFwjIHBlbmRlbnRlCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KZGYkcGVyZ3VudGFbc3RyX2RldGVjdChkZiRwZXJndW50YSwidHJhYmEiKV0gfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWxfYXRpdmEiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIlJlc190cmFiYWxobyIpLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsImNvciIpKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgZ2dwbG90KGFlcyhwY3QqMTAwLHJlc3ApKStnZW9tX2NvbCgpK2ZhY2V0X2dyaWQoc3RyYXRhMX5zdHJhdGEyKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCgril48gVGFiZWxhIDIuMjogUGVyY2VudHVhbCBkYSBwb3B1bGHDp8OjbyBwb3IgY29yL3Jhw6dhIHBhcmEgY2FkYSBtb2RvIGRlIGRlc2xvY2FtZW50byBwYXJhIG8gdHJhYmFsaG8KCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIiAtIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwiY29yIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCmBgYAoK4pePIFRhYmVsYSAyLjM6IFBlcmNlbnR1YWwgZGEgcG9wdWxhw6fDo28gcG9yIHNleG8gZSBjb3IvcmHDp2EgcGFyYSBjYWRhIG1vZG8gZGUgZGVzbG9jYW1lbnRvIHBhcmEgbyB0cmFiYWxobwoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CgpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbCIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4Iiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwiY29yIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCgpgYGAKCuKXjyBUYWJlbGEgMi40OiBQZXJjZW50dWFpcyBkYSBwb3B1bGHDp8OjbyBxdWUgdXRpbGl6YW0gYXV0b23Ds3ZlbCBwYXJhIGlyIGFvIHRyYWJhbGhvIHNlZ3VuZG8gcG9zc2UgZGUgdmXDrWN1bG9zIG5vIGRvbWljw61saW8KCiMjIyBQZW5kZW50ZQoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CgpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbCIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4Iiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwiY29yIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCgpgYGAKCuKXjyBUYWJlbGEgMi41OiBQZXJjZW50dWFpcyBkYSBwb3B1bGHDp8OjbyBxdWUgdXRpbGl6YW0gbyBtb2RvIGEgcMOpIHBhcmEgaXIgYW8gdHJhYmFsaG8gc2VndW5kbyBwb3NzZSBkZSBhdXRvbcOzdmVsIG5vIGRvbWljw61saW8gXCMjIyBQZW5kZW50ZQoKYGBge3J9CgpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbCIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4Iiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwiY29yIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCgpgYGAKCuKXjyBUYWJlbGEgMi42OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZGUgYmljaWNsZXRhcyBwb3IgbW90aXZvIGRlIHRyYWJhbGhvCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KCmRmJHN0cmF0YV9raW5kW3N0cl9kZXRlY3QoZGYkc3RyYXRhX2tpbmQsImF1dG8iKV0gfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWwiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIlJlc3BfcG9zc2VfYXV0b23Ds3ZlbDIiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiLSAiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KCmRmJHN0cmF0YV9raW5kW3N0cl9kZXRlY3QoZGYkc3RyYXRhX2tpbmQsImF1dG8iKV0gfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWxfYXRpdmEiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIlJlc3BfcG9zc2VfYXV0b23Ds3ZlbDIiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiLSAiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCgril48gVGFiZWxhIDIuNzogUGVyY2Vww6fDo28gZGUgY2ljbG92aWEgcGFyYSBhcXVlbGVzIHF1ZSB2w6NvIGRlIGJpY2ljbGV0YSBwYXJhIG8gdHJhYmFsaG8KCiMjIyBwZW5kZW5jaWEKCuKXjyBUYWJlbGEgMi44OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG8gbW9kbyBhIHDDqSBwb3IgbW90aXZvIGRlIHRyYWJhbGhvIFwjIyMgcGVuZGVuY2lhCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KCmRmJHN0cmF0YV9raW5kW3N0cl9kZXRlY3QoZGYkc3RyYXRhX2tpbmQsImF1dG8iKV0gfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWwiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsImdydSIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCItICIpLHJlc3A9PSJBIHDDqSIpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCmBgYAoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CgpkZiRzdHJhdGFfa2luZFtzdHJfZGV0ZWN0KGRmJHN0cmF0YV9raW5kLCJsb2NhIildIHw+IHVuaXF1ZSgpCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHBlcmd1bnRhPT0iUmVzX3RyYWJhbGhvX21vZGFsIixzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfbG9jIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIi0gIikscmVzcD09IkEgcMOpIikgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCgoK4pePIFRhYmVsYSAyLjk6IFBlcmNlcMOnw6NvIGRhIGV4aXN0w6puY2lhIGRlIHNpbmFsaXphw6fDo28gcGFyYSBwZWRlc3RyZXMgcGFyYSBhcXVlbGVzIHF1ZSB2w6NvIGEgcMOpIHBhcmEgbyB0cmFiYWxobyAKCiMjIyBwZW5kZW50ZSAKCuKXjyBUYWJlbGEgMi4xMDogUGVyY2Vww6fDo28gZGEgcG9wdWxhw6fDo28gcXVlIHV0aWxpemEgbyBtb2RvIGEgcMOpIHBhcmEgbyB0cmFiYWxobyBzb2JyZSBhIGV4aXN0w6puY2lhIGRlIGFyYm9yaXphw6fDo28gCgojIyMgcGVuZGVudGUgCgril48gVGFiZWxhIDIuMTE6IFBlcmNlcMOnw6NvIGRhIHBvcHVsYcOnw6NvIHF1ZSB1dGlsaXphIG8gbW9kbyBhIHDDqSBwYXJhIG8gdHJhYmFsaG8gc29icmUgYSBleGlzdMOqbmNpYSBkZSBjYWzDp2FkYXMgCgojIyMgcGVuZGVudGUgCgril48gVGFiZWxhIDIuMTI6IFBlcmNlbnR1YWlzIGRlIG1vcmFkb3JlcyBzZWd1bmRvIHRlbXBvIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIHRyYWJhbGhvIHBvciBtdW5pY8OtcGlvIGRhIFBNQiAKCiMjIyBwZW5kZW50ZQoK4pePIFRhYmVsYSAyLjEzOiBQZXJjZW50dWFpcyBkZSBtb3JhZG9yZXMgc2VndW5kbyB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSB0cmFiYWxobyBwb3IgR3J1cG8gZGEgUE1CIAoKIyMjIHBlbmRlbnRlIAoK4pePIFRhYmVsYSAyLjE0OiBQZXJjZW50dWFpcyBkYSBwb3B1bGHDp8OjbyBxdWUgdXRpbGl6YW0gw7RuaWJ1cyBwYXJhIGlyIGFvIHRyYWJhbGhvIHNlZ3VuZG8gcG9zc2UgZGUgYXV0b23Ds3ZlbCBubyBkb21pY8OtbGlvIHBvciBtdW5pY8OtcGlvIGRhIFBNQiAKCiMjIyBwZW5kZW50ZQoKIyBjKSAgRVNUVURPCgoK4pePIEdyw6FmaWNvIDMuMTogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIHBvciBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcGFyYSBvIGVzdHVkbyBwb3IgbXVuaWPDrXBpb3MgZGEgUE1CIOKXjyBHcsOhZmljbyAzLjI6IFBlcmNlbnR1YWlzIGRhIHBvcHVsYcOnw6NvIHNlZ3VuZG8gbW9kbyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSBlc3R1ZG8gcG9yIHNleG8gCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQoKZGYkc3RyYXRhX2tpbmRbc3RyX2RldGVjdChkZiRzdHJhdGFfa2luZCwibG9jYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc19lc3R1ZG9fbW9kYWwiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9sb2MiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiLSAiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc19lc3R1ZG9fbW9kYWwiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9nIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIi0gIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCmBgYApgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KZGYgfD4gZmlsdGVyKHN0cl9kZXRlY3QocGVyZ3VudGEsIm9fbW9kYWwiKSkgfD4gc2VsZWN0KHBlcmd1bnRhKSB8PiBkaXN0aW5jdCgpCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHBlcmd1bnRhPT0iUmVzX2VzdHVkb19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2dyIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIi0gIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCmBgYAoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CmRmIHw+IGZpbHRlcihzdHJfZGV0ZWN0KHBlcmd1bnRhLCJvX21vZGFsIikpIHw+IHNlbGVjdChwZXJndW50YSkgfD4gZGlzdGluY3QoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc19lc3R1ZG9fbW9kYWxfYXRpdmEyIixzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfZ3IiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiLSAiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQpgYGAKCgoK4pePIEdyw6FmaWNvIDMuMzogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSBlc3R1ZG8gcG9yIHNleG8gZSBmYWl4YXMgZGUgcmVuZGEgZG9taWNpbGlhciBwZXIgY2FwaXRhIChlbSBzYWzDoXJpb3MgbcOtbmltb3MpIAoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CmRmIHw+IGZpbHRlcihzdHJfZGV0ZWN0KHBlcmd1bnRhLCJvX21vZGFsIikpIHw+IHNlbGVjdChwZXJndW50YSkgfD4gZGlzdGluY3QoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc19lc3R1ZG9fbW9kYWxfYXRpdmEyIixzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzZXgiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSBzdHJhdGFfciIpKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YTIpKStnZW9tX2NvbCgpK2ZhY2V0X2dyaWQoc3RyYXRhMX5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQpgYGAKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CmRmIHw+IGZpbHRlcihzdHJfZGV0ZWN0KHBlcmd1bnRhLCJvX21vZGFsIikpIHw+IHNlbGVjdChwZXJndW50YSkgfD4gZGlzdGluY3QoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc19lc3R1ZG9fbW9kYWxfYXRpdmEiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInNleCIpLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIiAtIHN0cmF0YV9yIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCmBgYAoK4pePIEdyw6FmaWNvIDMuNDogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcGFyYSBhIGVzY29sYSBwb3IgdGVtcG8gZGUgZGVzbG9jYW1lbnRvIAoKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQoKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwib19tb2RhbCIpLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInRlbXAiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4IikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChyZXNwfnN0cmF0YTEpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCmBgYAoKCgril48gR3LDoWZpY28gMy41OiBQZXJjZW50dWFpcyBkYSBwb3B1bGHDp8OjbyBzZWd1bmRvIG1vZG8gZGUgZGVzbG9jYW1lbnRvIHBvciBtb3Rpdm8gZGUgZXN0dWRvLCB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gZSBwb3Igc2V4byAKCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHN0cl9kZXRlY3QocGVyZ3VudGEsIm9fbW9kYWwiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJ0ZW1wIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4IikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChyZXNwfnN0cmF0YTEpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCmBgYAril48gR3LDoWZpY28gMy42OiBQZXJjZW50dWFpcyBkYSBwb3B1bGHDp8OjbyBzZWd1bmRvIG1vZG8gZGUgZGVzbG9jYW1lbnRvIHBvciBtb3Rpdm8gZGUgZXN0dWRvIHBvciBzZXhvLCB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gZSBjb3IvcmHDp2EKCgpgYGB7ciBmaWcuaGVpZ2h0PTEyLCBmaWcud2lkdGg9MjB9CgpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixzdHJfZGV0ZWN0KHBlcmd1bnRhLCJvX21vZGFsIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwiY29yIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4IikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCmBgYAoKCgril48gVGFiZWxhIDMuMTogUGVyY2VudHVhbCBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGVzdHVkbyBwb3Igc2V4byBlIGZhaXhhIGRlIGlkYWRlIAojIyMjIHBlbmRlbnRlCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNX0KCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHN0cl9kZXRlY3QocGVyZ3VudGEsIlJlc19lc3R1ZG9fbW9kYWwiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJmYWl4YSIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJtw7MiKQogICAgICAgICAgICAgKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgI2dncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQogIHVuZ3JvdXAoKSB8PiBzZWxlY3Qoc3RyYXRhMSxyZXNwLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1zdHJhdGExLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQpgYGAKCgoK4pePIFRhYmVsYSAzLjI6IFBlcmNlbnR1YWwgZGEgcG9wdWxhw6fDo28gc2VndW5kbyBtZWlvIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGVzdHVkbywgc2V4byBlIGNvci9yYcOnYSAKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE1fQoKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwiUmVzX2VzdHVkb19tb2RhbCIpLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInNleG8iKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yMiIpCiAgICAgICAgICAgICApIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICAjZ2dwbG90KGFlcyhwY3QqMTAwLHJlc3AsZmlsbD1zdHJhdGEyKSkrZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKStmYWNldF9ncmlkKH5zdHJhdGExKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQogIHVuZ3JvdXAoKSB8PiBzZWxlY3Qoc3RyYXRhMSxyZXNwLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1zdHJhdGExLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKYGBgCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNX0KCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHN0cl9kZXRlY3QocGVyZ3VudGEsIlJlc19lc3R1ZG9fbW9kYWwiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzZXhvIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9jb3IyIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvciIpLAogICAgICAgICAgICAgKSB8PiMgc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgICAjZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YTIpKStnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpK2ZhY2V0X2dyaWQoc3RyYXRhMX5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQogIHVuZ3JvdXAoKSB8PiBzZWxlY3Qoc3RyYXRhMSxyZXNwLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1zdHJhdGExLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKYGBgCgril48gVGFiZWxhIDMuMzogUGVyY2VudHVhbCBkYSBwb3B1bGHDp8OjbyBwb3IgY29yL3Jhw6dhIHBhcmEgY2FkYSBtb2RvIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGVzdHVkbyAKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE1fQoKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwiUmVzX2VzdHVkb19tb2RhbCIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvcjIiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yIiksCiAgICAgICAgICAgICApIHw+IyBzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICAgICNnZ3Bsb3QoYWVzKHBjdCoxMDAscmVzcCkpK2dlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikrZmFjZXRfZ3JpZCh+c3RyYXRhMSkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKICB1bmdyb3VwKCkgfD4gc2VsZWN0KHN0cmF0YTEscmVzcCxwY3RfdGV4dCkgfD4gcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9c3RyYXRhMSx2YWx1ZXNfZnJvbSA9cGN0X3RleHQsdmFsdWVzX2ZuID0gXCh4KSBmaXJzdCh4KSkgfD4gZmxleHRhYmxlKCkKCmBgYAoKCuKXjyBUYWJlbGEgMy40OiBQZXJjZW50dWFsIGRhIHBvcHVsYcOnw6NvIHBvciBzZXhvIGUgY29yL3Jhw6dhIHBvciBtZWlvIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGVzdHVkbyAKCgoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTV9CgpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixzdHJfZGV0ZWN0KHBlcmd1bnRhLCJSZXNfZXN0dWRvX21vZGFsIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvcjIiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzZXgiKSwjc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvciIpLAogICAgICAgICAgICAgKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgICAjZ2dwbG90KGFlcyhwY3QqMTAwLHJlc3ApKStnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpK2ZhY2V0X2dyaWQofnN0cmF0YTEpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCiAgdW5ncm91cCgpIHw+IHNlbGVjdCgsc3RyYXRhMixyZXNwLHN0cmF0YTEscGN0X3RleHQpIHw+IHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPXN0cmF0YTIsdmFsdWVzX2Zyb20gPXBjdF90ZXh0LHZhbHVlc19mbiA9IFwoeCkgZmlyc3QoeCkpIHw+IGZsZXh0YWJsZSgpCgoKYGBgCgril48gVGFiZWxhIDMuNTogUGVyY2VudHVhbCBkZSB1dGlsaXphw6fDo28gZGUgYmljaWNsZXRhcyBwb3IgbW90aXZvIGRlIGVzdHVkbyAKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE1fQoKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwiUmVzX2VzdHVkb19tb2RhbCIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfbG9jYWxpZGFkZSIpLHN0cl9kZXRlY3QocmVzcCwicMOpIikjc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvciIpLAogICAgICAgICAgICAgKSB8PiAKICAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgICAjZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YTEpKStnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpK2ZhY2V0X2dyaWQofnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpIHw+IAogICAgdW5ncm91cCgpIHw+IHNlbGVjdChyZXNwLHN0cmF0YTEscGN0X3RleHQpIHw+IHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPXJlc3AsdmFsdWVzX2Zyb20gPXBjdF90ZXh0LHZhbHVlc19mbiA9IFwoeCkgZmlyc3QoeCkpIHw+IGZsZXh0YWJsZSgpCgoKYGBgCgoK4pePIFRhYmVsYSAzLjY6IFBlcmNlcMOnw6NvIGRhIGV4aXN0w6puY2lhIGRlIGNpY2xvdmlhcyBwYXJhIGFxdWVsZXMgcXVlIHV0aWxpemFtIGJpY2ljbGV0YSBwb3IgbW90aXZvIGRlIGVzdHVkbyAKIyMjIHBlbmRlbnRlCgoK4pePIFRhYmVsYSAzLjc6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkbyBtb2RvIGEgcMOpIHBvciBtb3Rpdm8gZGUgZXN0dWRvIAoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTV9CgpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixzdHJfZGV0ZWN0KHBlcmd1bnRhLCJSZXNfZXN0dWRvX21vZGFsIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIiAtICIpLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9sb2NhbGlkYWRlIiksc3RyX2RldGVjdChyZXNwLCJpY2kiKSNzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yIiksCiAgICAgICAgICAgICApIHw+IAogICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICAgICNnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMSkpK2dlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkgCiAgICAgIHVuZ3JvdXAoKSB8PiBzZWxlY3QocmVzcCxzdHJhdGExLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1yZXNwLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKCmBgYAril48gVGFiZWxhIDMuODogUGVyY2Vww6fDo28gZGEgZXhpc3TDqm5jaWEgZGUgc2luYWxpemHDp8OjbyBwYXJhIHBlZGVzdHJlcyBwYXJhIGFxdWVsZXMgcXVlIHbDo28gYSBww6kgcGFyYSBhIGVzY29sYSAKIyMjIHBlbmRlbnRlCgoK4pePIFRhYmVsYSAzLjk6IFBlcmNlcMOnw6NvIGRhIGV4aXN0w6puY2lhIGRlIGFyYm9yaXphw6fDo28gcGFyYSBhcXVlbGVzIHF1ZSB2w6NvIGEgcMOpIHBhcmEgYSBlc2NvbGEgCiMjIyBwZW5kZW50ZQoK4pePIFRhYmVsYSAzLjEwOiBQZXJjZXDDp8OjbyBkYSBleGlzdMOqbmNpYSBkZSBjYWzDp2FkYXMgcGFyYSBhcXVlbGVzIHF1ZSB2w6NvIGEgcMOpIHBhcmEgYSBlc2NvbGEgCiMjIyBwZW5kZW50ZQoK4pePIFRhYmVsYSAzLjExOiBQZXJjZW50dWFpcyBkZSBtb3JhZG9yZXMgc2VndW5kbyB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSBlc3R1ZG8gcG9yIEdydXBvIGRhIFBNQiAKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE1fQoKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwiUmVzX2VzdHVkb19tb2RhbCIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfZ3IiKSwjc3RyX2RldGVjdChyZXNwLCJpY2kiKSNzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yIiksCiAgICAgICAgICAgICApIHw+IAogICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICAgICNnZ3Bsb3QoYWVzKHBjdCoxMDAscmVzcCkpK2dlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikrZmFjZXRfZ3JpZCh+c3RyYXRhMSkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKICAgIHVuZ3JvdXAoKSB8PiBzZWxlY3QocmVzcCxzdHJhdGExLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1yZXNwLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKCmBgYAoK4pePIFRhYmVsYSAzLjEyOiBQZXJjZW50dWFpcyBkZSBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSBlc3R1ZG8gcG9yIE11bmljw61waW8gZGEgUE1CCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNX0KCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHN0cl9kZXRlY3QocGVyZ3VudGEsIlJlc19lc3R1ZG9fbW9kYWwiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiIC0gIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2xvIiksI3N0cl9kZXRlY3QocmVzcCwiaWNpIikjc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvciIpLAogICAgICAgICAgICAgKSB8PiAKICAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgICAjZ2dwbG90KGFlcyhwY3QqMTAwLHJlc3ApKStnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpK2ZhY2V0X2dyaWQofnN0cmF0YTEpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCiAgICAgIHVuZ3JvdXAoKSB8PiBzZWxlY3QocmVzcCxzdHJhdGExLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1yZXNwLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKCmBgYAoK4pePIFRhYmVsYSBDLjE6IFBlcmNlbnR1YWlzIGRlIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGVzdHVkbyBwb3IgR3J1cG8gZGEgUE1CIApgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNX0KCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHN0cl9kZXRlY3QocGVyZ3VudGEsIlJlc19lc3R1ZG9fbW9kYWwiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiIC0gIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2dyIiksI3N0cl9kZXRlY3QocmVzcCwiaWNpIikjc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvciIpLAogICAgICAgICAgICAgKSB8PiAKICAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgICAjZ2dwbG90KGFlcyhwY3QqMTAwLHJlc3ApKStnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpK2ZhY2V0X2dyaWQofnN0cmF0YTEpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCiAgICAgIHVuZ3JvdXAoKSB8PiBzZWxlY3QocmVzcCxzdHJhdGExLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1yZXNwLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKCmBgYAoK4pePIFRhYmVsYSBDLjI6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtb3Rpdm8gZGUgZXN0dWRvIHBvciBDb21wb3Npw6fDo28gZG9zIERvbWljw61saW9zCiMjIyBwZW5kZW50ZQoKIyBkKSAgU0VSVknDh09TIERFIFNBw5pERSBFIENPTVBSQVMKCgril48gR3LDoWZpY28gNC4xOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gcG9yIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIHNlcnZpw6dvcyBkZSBzYcO6ZGUgcG9yIG11bmljw61waW9zIGRhIFBNQiAKCmBgYHtyfQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixzdHJfZGV0ZWN0KHBlcmd1bnRhLCJzYXVkZSIpKSB8PiAjLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfZ3IiKSkjc3RyX2RldGVjdChyZXNwLCJpY2kiKSNzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yIiksCiAgc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCgpgYGAKCgril48gR3LDoWZpY28gNC4yOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gcG9yIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvcyBkZSBjb21wcmFzIHBvciBtdW5pY8OtcGlvcyBkYSBQTUIKIyMjIHBlbmRlbnRlCgpgYGB7cn0KZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwiY29tcCIpKSB8PiAjLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfZ3IiKSkjc3RyX2RldGVjdChyZXNwLCJpY2kiKSNzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yIiksCiAgc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCmBgYAoKCuKXjyBUYWJlbGEgNC4xOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gcG9yIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIHNlcnZpw6dvcyBkZSBzYcO6ZGUgcG9yIE11bmljw61waW9zIGRhIFBNQiAKIyMjIHBlbmRlbnRlCgril48gVGFiZWxhIDQuMjogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIHBvciBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2b3MgZGUgY29tcHJhcyBwb3IgTXVuaWPDrXBpb3MgZGEgUE1CCiMjIyBwZW5kZW50ZQoKCgril48gVGFiZWxhIEQuMTogUGVyY2VudHVhaXMgZGUgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtb3Rpdm8gZGUgY29tcHJhcyBwb3IgTXVuaWPDrXBpbyBkYSBQTUIgCiMjIyBwZW5kZW50ZQoK4pePIFRhYmVsYSBELjI6IFBlcmNlbnR1YWlzIGRlIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGNvbXByYXMgcG9yIEdydXBvIGRhIFBNQiAKIyMjIHBlbmRlbnRlCgril48gVGFiZWxhIEQuMzogUGVyY2VudHVhaXMgZGUgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtb3Rpdm8gZGUgdXRpbGl6YcOnw6NvIGRlIHNlcnZpw6dvcyBkZSBzYcO6ZGUgcG9yIE11bmljw61waW8gZGEgUE1CIAojIyMgcGVuZGVudGUKCuKXjyBUYWJlbGEgRC40OiBQZXJjZW50dWFpcyBkZSBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSB1dGlsaXphw6fDo28gZGUgc2VydmnDp29zIGRlIHNhw7pkZSBwb3IgR3J1cG8gZGEgUE1CIAojIyMgcGVuZGVudGUKCuKXjyBUYWJlbGEgRC41OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGNvbXByYXMgcG9yIGfDqm5lcm8gZSBmYWl4YSBkZSBpZGFkZSAKIyMjIHBlbmRlbnRlCgril48gVGFiZWxhIEQuNjogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSBhY2Vzc28gw6Agc2VydmnDp29zIGRlIHNhw7pkZSBwb3IgZ8OqbmVybyBlIGZhaXhhIGRlIGlkYWRlCiMjIyBwZW5kZW50ZQoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo=