Relatório como parte da disciplina AGM5710 Meteorologia da Poluição do Ar
Prof.a Maria de Fátima Andrade


Alejandro Herman Delgado Peralta \(^{(a)}\), Leandro Alex Moreira Viscardi \(^{(b)}\)

\(^{(a)}\) IAG-USP, Nº USP: 11340504,
\(^{(b)}\) IF-USP, Nº USP: 8624459,


Introdução

A estação São José do Rio Preto (SJRP) registra poluentes atmosféricos, os quais estão disponíveis no endereço web (https://cetesb.sp.gov.br/ar/qualar/) da Companhia Ambiental do Estado de São Paulo (CETESB). De todos os poluentes registrados, e como parte do alcance do presente trabalho, foram baixados dados para o ano 2018 (janeiro até dezembro) de ozônio (\(O_3\)), dióxido de nitrogênio (\(NO_2\)) e material particulado menor que 2,5 \(\mu\)m (\(PM_{2,5}\)) como diâmetro aerodinâmico. Os gráficos foram feitos para cada poluente com o fim de fazer comparações com o limite da Organização Mundial da Saude (OMS) e os padrões de qualidade do ar da CETESB. As atividades feitas para o desenvolmento do presente trabalho são listados:

  1. Faça o gráfico da série temporal de todos os poluentes baixados.
  2. Calcule as médias e compare com os Padrões Estaduais/Nacionais e as recomendações da Organização Mundial de Saúde (que é o padrão final do decreto e da resolução CONAMA)
  3. Calcule o número de ultrapassagens dos padrões/recomendações.
  4. Calcule as médias horárias do \(PM_{2,5}\), \(O_3\) e \(NO_2\) e esboce os gráficos do ciclo diário médio (24 horas) para cada um dos meses.
  5. Discuta o comportamento diário dos poluentes (tente relacionar com as variáveis de radiação, temperatura, chuva/umidade).
  6. Prepare uma pequena apresentação contendo os resultados para discutirmos na próxima aula.
  7. Fazer um relatório para entregar pra Fátima (próxima semana).

Desenvolvimento do trabalho

1. Faça o gráfico da série temporal de todos os poluentes baixados

Primeiro descarregamos os dados da CETESB do endereço web. Depois usamos o pacote openair de R no programa R Studio. Com isso foi possível achar o estado da série temporal de todos os poluentes baixados.

Como mostra a Figura 1, as concentrações de O\(_3\) atingem mais de 100 \(\mu\)g/m3 nos dias entre os meses de setembro e novembro. Igualmente, nestes meses as concentrações de NO\(_2\) e PM\(_{2,5}\) são altas. No entanto, as concentrações de PM\(_{2,5}\) incrementa-se durante o inverno, tempo onde acontece estagnamento do ar onde a camada de mistura é baixa, principalmente durante a noite onde poderia acontecer resfriamento radiativo (Falta citar esto).

2. Calcule as médias e compare com os Padrões Estaduais/Nacionais e as recomendações da Organização Mundial de Saúde (que é o padrão final do decreto e da resolução CONAMA).

As médias foram calculadas para cada poluente de acordo com as médias dos padrões de qualidade do ar nacional e da Organização Mundial de Saúde (OMS). Na Tabela 1 mostra-se os padrões de qualidade do ar. Estes padrões são usados na comparação com as médias calculadas para a estação SJRP. Segundo a CETESB, as Metas Intermediárias (MI) são padrões temporários por enquanto se desenvolvem melhoras na qualidade do ar no Estado de São Paulo. Os Padrões Finais (PF) são aqueles que protejem a saúde da população ao máximo.

Tabela 1 Padrões de qualidade do ar (CETESB Decreto Estadual nº 59113 de 23/04/2013)
Poluente Tempo de Amostragem MI\(_1\) MI\(_2\) MI\(_3\) PF
PM\(_{2,5}\) 24 horas (média) 60 50 37 25
NO\(_2\) 1 hora (média) 260 240 220 200
O\(_3\) 8 horas (máxima média movil diaria) 140 130 120 100

Para o cálculo das médias segundo cada poluente, usamos o pacote openair do R. As opções timePlot, rollingMean e aggregate foram usados como mostrado abaixo. A opção timePlot permite fazer médias diárias; importante para obter médias de 24 horas para o PM\(_{2,5}\). O rollingMean é uma função do openair que permite calcular as médias móveis para cada 8 horas que tenham ao menos 75% de dados (pelo menos 6 horas). Esta opção foi usada para processar as concentrações horárias de O\(_3\). Finalmente, as máximas diarias das médias móveis foram consideradas para o análise.

A Figura 2 mostra a média diária do PM\(_{2,5}\) comparado com os padrões de qualidade do ar. No inverno acontecem ultrapassagens dos padrões. A influência no aumento das concentrações é por causa de uma menor altura do mezclado (citar esto).

Especificamente, o principal fator é o enfraquecimento do turbulência térmica devido à disminução das temperaturas (citar esto)

Na Figura 3 mostra-se a comparação das concentrações médias horárias do NO\(_2\), mas não acontecem ultrapasagens dos padrões para este poluente.

A Figura 4 mostra as concentrações máximas diárias das médias móveis para o O\(_3\) troposférico. Durante o verão a nubosidade reduze a irradiância solar que é un fator determinante nas reações químicas de formação do O\(_3\); na primavera, em ausência de nuvens, há um maior número de horas de irradiância solar (citar esto).

3. Calcule o número de ultrapassagens dos padrões/recomendações.

A Tabela 2 mostra o número de ultrapassagens dos padrões de qualidade do ar para os poluentes. As opções timeAverage foi usado para calcular a média diária do PM2,5.

Tabela 2 Número de ultrapassagens dos padrões de qualidade do ar (CETESB, 2019)
Poluente MI\(_1\) MI\(_2\) MI\(_3\) PF
PM\(_{2,5}\) 1 2 8 48
NO\(_2\) 0 0 0 0
O\(_3\) 0 2 3 22

Para entender que aconteceu, as datas com ultrapassagens foram contados para cada poluente mediante o programa R. Além disso, a função calendarPlot do pacote openair foi usado para visualizar com melhor facilidade os dias que excederam os padrões de qualidade do ar para o PM\(_{2,5}\) (Figura 5) e o O\(_3\) (Figura 6).

Julho apresenta mais dias de ultrapassagens dos padrões de qualidade do ar. Este mês apresenta baixas temperaturas e condições de estagnamento da camada de mistura (citar esto). O segundo mês com mais dias de ultrapasagens é setembro. Neste mês tambem acontece os maiores dias com concentrações altas de O\(_3\).

Neste sentido, a Figura 5 mostra claramente que os meses de agosto e setembro apresentam os maiores dias com ultrapasagens dos padrões de qualidade do ar para o O\(_3\). Principalmente, setembro tem mais dias assim como as concentrações mais altas.

4. Calcule as médias horárias do PM2,5, O3 e NO2 e esboce os gráficos do ciclo diário médio (24 horas) para cada um dos meses.

As médias horárias foram calculadas para cada poluente. A Figura 7 mostra a variação das concentrações do PM2,5. Julho é o mês que tem máximas concentrações durante o ciclo diário médio de 24 horas.

A Figura 8 mostra ciclos diários de 24 horas para cada mês das concentrações de NO2. Altas concentrações estão presentes no inverno e baixas durante o verão. Além disso, também há concentrações altas durante a manhã (07:00 h - 09:00 h) e a noite (19:00 h - 22:00 h). Por outro lado, aproximadamente entre as 14:00 horas e as 17:00 horas acontece uma diminução das concentrações de NO2; sendo quasi constante ao longo do ano.

A Figura 9 mostra ciclos diários de 24 horas para cada mês das concentrações de O3. Perto das 12:00 horas acontece as máximas concentrações de O3 devido que nesta hora é máxima os valores de irradiância solar. Durante a noite há pequenos incrementos; os quais poderiam estar relacionados com o transporte como sugere (citar esto).

5. Discuta o comportamento diário dos poluentes (tente relacionar com as variáveis de radiação, temperatura, chuva/umidade).

6. Prepare uma pequena apresentação contendo os resultados para discutirmos na próxima aula.

A apresentação mostra as figuras e referências de estudos de qualidade do ar para São Paulo assim como referência de livros relacionados com o tema de poluição do ar.

Referência

LS0tCnRpdGxlOiBBbsOhbGlzZSBkb3MgcG9sdWVudGVzIGRlIHF1YWxpZGFkZSBkbyBhciBwYXJhIGEgZXN0YcOnw6NvIFPDo28gSm9zw6kgZG8gUmlvIFByZXRvCiAgbG9jYWxpemFkYSBuYSBjaWRhZGUgZGUgU8OjbyBQYXVsbwpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAogIHdvcmRfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCiMjIyMjIFJlbGF0w7NyaW8gY29tbyBwYXJ0ZSBkYSBkaXNjaXBsaW5hIEFHTTU3MTAgTWV0ZW9yb2xvZ2lhIGRhIFBvbHVpY8ynYcyDbyBkbyBBcgoKIyMjIyMgUHJvZi5eYV4gTWFyaWEgZGUgRmHMgXRpbWEgQW5kcmFkZQpcCgojIyMjIyBBbGVqYW5kcm8gSGVybWFuIERlbGdhZG8gUGVyYWx0YSAkXnsoYSl9JCwgTGVhbmRybyBBbGV4IE1vcmVpcmEgVmlzY2FyZGkgJF57KGIpfSQKCiReeyhhKX0kIElBRy1VU1AsIE7CuiBVU1A6ICoqMTEzNDA1MDQqKiwgYWRlbGdhZG9AaWFnLnVzcC5iciBcCiReeyhiKX0kIElGLVVTUCwgTsK6IFVTUDogKio4NjI0NDU5KiosIGxlYW5kcm8udmlzY2FyZGlAdXNwLmJyClwKCioqKgoKCiMjIyBJbnRyb2R1w6fDo28KQSBlc3Rhw6fDo28gU8OjbyBKb3PDqSBkbyBSaW8gUHJldG8gKFNKUlApIHJlZ2lzdHJhIHBvbHVlbnRlcyBhdG1vc2bDqXJpY29zLCBvcyBxdWFpcyBlc3TDo28gZGlzcG9uw612ZWlzIG5vIGVuZGVyZcOnbyB3ZWIgKCpodHRwczovL2NldGVzYi5zcC5nb3YuYnIvYXIvcXVhbGFyLyopIGRhIENvbXBhbmhpYSBBbWJpZW50YWwgZG8gRXN0YWRvIGRlIFPDo28gUGF1bG8gKENFVEVTQikuIERlIHRvZG9zIG9zIHBvbHVlbnRlcyByZWdpc3RyYWRvcywgZSBjb21vIHBhcnRlIGRvIGFsY2FuY2UgZG8gcHJlc2VudGUgdHJhYmFsaG8sIGZvcmFtIGJhaXhhZG9zIGRhZG9zIHBhcmEgbyBhbm8gMjAxOCAoamFuZWlybyBhdMOpIGRlemVtYnJvKSBkZSBvesO0bmlvICgkT18zJCksIGRpw7N4aWRvIGRlIG5pdHJvZ8OqbmlvICgkTk9fMiQpIGUgbWF0ZXJpYWwgcGFydGljdWxhZG8gbWVub3IgcXVlIDIsNSAkXG11JG0gKCRQTV97Miw1fSQpIGNvbW8gZGnDom1ldHJvIGFlcm9kaW7Dom1pY28uIE9zIGdyw6FmaWNvcyBmb3JhbSBmZWl0b3MgcGFyYSBjYWRhIHBvbHVlbnRlIGNvbSBvIGZpbSBkZSBmYXplciBjb21wYXJhw6fDtWVzIGNvbSBvIGxpbWl0ZSBkYSBPcmdhbml6YcOnw6NvIE11bmRpYWwgZGEgU2F1ZGUgKE9NUykgZSBvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIgZGEgQ0VURVNCLiBBcyBhdGl2aWRhZGVzIGZlaXRhcyBwYXJhIG8gZGVzZW52b2xtZW50byBkbyBwcmVzZW50ZSB0cmFiYWxobyBzw6NvIGxpc3RhZG9zOgoKMSkgRmHDp2EgbyBncsOhZmljbyBkYSBzw6lyaWUgdGVtcG9yYWwgZGUgdG9kb3Mgb3MgcG9sdWVudGVzIGJhaXhhZG9zLgoyKSBDYWxjdWxlIGFzIG3DqWRpYXMgZSBjb21wYXJlIGNvbSBvcyBQYWRyw7VlcyBFc3RhZHVhaXMvTmFjaW9uYWlzIGUgYXMgcmVjb21lbmRhw6fDtWVzIGRhIE9yZ2FuaXphw6fDo28gTXVuZGlhbCBkZSBTYcO6ZGUgKHF1ZSDDqSBvIHBhZHLDo28gZmluYWwgZG8gZGVjcmV0byBlIGRhIHJlc29sdcOnw6NvIENPTkFNQSkKMykgQ2FsY3VsZSBvIG7Dum1lcm8gZGUgdWx0cmFwYXNzYWdlbnMgZG9zIHBhZHLDtWVzL3JlY29tZW5kYcOnw7Vlcy4KNCkgQ2FsY3VsZSBhcyBtw6lkaWFzIGhvcsOhcmlhcyBkbyAkUE1fezIsNX0kLCAkT18zJCBlICROT18yJCBlIGVzYm9jZSBvcyBncsOhZmljb3MgZG8gY2ljbG8gZGnDoXJpbyBtw6lkaW8gKDI0IGhvcmFzKSBwYXJhIGNhZGEgdW0gZG9zIG1lc2VzLgo1KSBEaXNjdXRhIG8gY29tcG9ydGFtZW50byBkacOhcmlvIGRvcyBwb2x1ZW50ZXMgKHRlbnRlIHJlbGFjaW9uYXIgY29tIGFzIHZhcmnDoXZlaXMgZGUgcmFkaWHDp8OjbywgdGVtcGVyYXR1cmEsIGNodXZhL3VtaWRhZGUpLgo2KSBQcmVwYXJlIHVtYSBwZXF1ZW5hIGFwcmVzZW50YcOnw6NvIGNvbnRlbmRvIG9zIHJlc3VsdGFkb3MgcGFyYSBkaXNjdXRpcm1vcyBuYSBwcsOzeGltYSBhdWxhLgo3KSBGYXplciB1bSByZWxhdMOzcmlvIHBhcmEgZW50cmVnYXIgcHJhIEbDoXRpbWEgKHByw7N4aW1hIHNlbWFuYSkuIAoKIyMjIERlc2Vudm9sdmltZW50byBkbyB0cmFiYWxobwoqKjEuIEZhw6dhIG8gZ3LDoWZpY28gZGEgc8OpcmllIHRlbXBvcmFsIGRlIHRvZG9zIG9zIHBvbHVlbnRlcyBiYWl4YWRvcyoqCgpQcmltZWlybyBkZXNjYXJyZWdhbW9zIG9zIGRhZG9zIGRhIENFVEVTQiBkbyBlbmRlcmXDp28gd2ViLiBEZXBvaXMgdXNhbW9zIG8gcGFjb3RlIGBvcGVuYWlyYCBkZSBgUmAgbm8gcHJvZ3JhbWEgUiBTdHVkaW8uIENvbSBpc3NvIGZvaSBwb3Nzw612ZWwgYWNoYXIgbyBlc3RhZG8gZGEgc8OpcmllIHRlbXBvcmFsIGRlIHRvZG9zIG9zIHBvbHVlbnRlcyBiYWl4YWRvcy4KYGBge3IgZWNobyA9IEZBTFNFfQpsaWJyYXJ5KG9wZW5haXIpICMgdG8gcHJvY2VzcyBhaXIgcXVhbGl0eSBkYXRhIGluIG9yZGVyIHRvIGdldCBncmFwaHMKbGlicmFyeShsdWJyaWRhdGUpICMgdG8gZXh0cmFjdCBtb250aCBhbmQgeWVhciBlYXNpbHkgZnJvbSBjb2x1bW4gY2FsbGVkICJkYXRlIgpsaWJyYXJ5KGxhdHRpY2UpOyBsaWJyYXJ5KFJDb2xvckJyZXdlcikgO2xpYnJhcnkobGF0dGljZUV4dHJhKQojIEltcG9ydCBkYXRhIGZyb20gcGF0aApybShsaXN0PWxzKCkpICMgcmVtb3ZlIGRhdGEgaW4gR2xvYmFsIEVudmlyb25tZW50CnNqcl9ubzIgPC0gcmVhZC5jc3YoIn4vRG9jdW1lbnRzL1IvYWlyX3BvbGx1dGlvbi9zanJfbm8yLmNzdiIsIHNlcD0iOyIpCnNqcl9vMyA8LSByZWFkLmNzdigifi9Eb2N1bWVudHMvUi9haXJfcG9sbHV0aW9uL3Nqcl9vMy5jc3YiLCBzZXA9IjsiKQpzanJfcG0yNSA8LSByZWFkLmNzdigifi9Eb2N1bWVudHMvUi9haXJfcG9sbHV0aW9uL3Nqcl9wbTI1LmNzdiIsIHNlcD0iOyIpCgojIENyZWF0ZSBhIGRhdGFmcmFtZQpzdGFydCA8LSBhcy5QT1NJWGN0KCcyMDE4LTAxLTAxIDAwOjAwJywgdHogPSAiR01UIikKZW5kICA8LSBhcy5QT1NJWGN0KCcyMDE4LTEyLTMxIDIzOjAwJywgdHogPSAiR01UIikKZGF0ZXMgPC0gZGF0YS5mcmFtZShkYXRlID0gc2VxKHN0YXJ0LCBlbmQsIGJ5ID0gJ2hvdXJzJykpICMgZXJyb3JzIGluIHNvbWUgaG91cnMKCnNqcl9ubzIkZGF0ZSA8LSBwYXN0ZShzanJfbm8yJGRhdGUyLCBzanJfbm8yJGhvdXIpCnNqcl9ubzIkZGF0ZSA8LSBhcy5QT1NJWGN0KHN0cnB0aW1lKHNqcl9ubzIkZGF0ZSwgZm9ybWF0ID0gJyVkLyVtLyVZICVIOiVNJyksIHR6ID0gIkdNVCIpCm5vMiA8LSBtZXJnZShkYXRlcywgc2pyX25vMiwgYWxsID0gVCkKbm8yIDwtIG5vMlstODc2MSxdICMgcmV0aXJhbW9zIDIwMTkKbm8yIDwtIHN1YnNldChubzIsIHNlbGVjdCA9IGMoZGF0ZSwgbm8yKSkKCnNqcl9vMyRkYXRlIDwtIHBhc3RlKHNqcl9vMyRkYXRlMiwgc2pyX28zJGhvdXIpCnNqcl9vMyRkYXRlIDwtIGFzLlBPU0lYY3Qoc3RycHRpbWUoc2pyX28zJGRhdGUsIGZvcm1hdCA9ICclZC8lbS8lWSAlSDolTScpLCB0eiA9ICJHTVQiKQpvMyA8LSBtZXJnZShkYXRlcywgc2pyX28zLCBhbGwgPSBUKQpvMyA8LSBvM1stODc2MSxdICMgcmV0aXJhbW9zIDIwMTkKbzMgPC0gc3Vic2V0KG8zLCBzZWxlY3QgPSBjKGRhdGUsIG8zKSkKCnNqcl9wbTI1JGRhdGUgPC0gcGFzdGUoc2pyX3BtMjUkZGF0ZTIsIHNqcl9wbTI1JGhvdXIpCnNqcl9wbTI1JGRhdGUgPC0gYXMuUE9TSVhjdChzdHJwdGltZShzanJfcG0yNSRkYXRlLCBmb3JtYXQgPSAnJWQvJW0vJVkgJUg6JU0nKSwgdHogPSAiR01UIikKcG0yNSA8LSBtZXJnZShkYXRlcywgc2pyX3BtMjUsIGFsbCA9IFQpCnBtMjUgPC0gcG0yNVstODc2MSxdICMgcmV0aXJhbW9zIDIwMTkKcG0yNSA8LSBzdWJzZXQocG0yNSwgc2VsZWN0ID0gYyhkYXRlLCBwbTI1KSkKCnNqciA8LSBkYXRhLmZyYW1lKGRhdGVzLCBwbTI1JHBtMjUsIG5vMiRubzIsIG8zJG8zKQpuYW1lcyhzanIpIDwtIGMoImRhdGUiLCJwbTI1Iiwibm8yIiwibzMiKQpzanIkbW9udGggPC0gbW9udGgoc2pyJGRhdGUpIApzanIgPC0gc2pyWy1ucm93KHNqciksXQpybShkYXRlcywgbm8yLCBvMywgcG0yNSwgc2pyX25vMiwgc2pyX28zLCBzanJfcG0yNSwgZW5kLCBzdGFydCkKCnNqciRtb250aCA8LSBhcy5mYWN0b3IoZm9ybWF0KHNqciRkYXRlLCAiJW0iKSkgIyBnZW5lcmF0ZSBhbm90aGVyIGNvbHVtbgp0aW1lUGxvdChzanIsIHBvbGx1dGFudCA9IGMoIm8zIiwgIm5vMiIsInBtMjUiKSwgbWFpbiA9ICIgRmlndXJhIDEgXCAKICAgICAgICAgUmVzdW1vIGRlIGRhZG9zIGRhIGVzdGHDp8OjbyBTw6NvIEpvc8OpIGRvIFJpbyBQcmV0byAtIEFubyAyMDE4IiwgCiAgICAgICAgIHhsYWIgPSAiTcOqcyIsIGRhdGUuYnJlYWtzID0gMTIsIGtleSA9IEYsCiAgICAgICAgIHlsYWIgPSBleHByZXNzaW9uKCIgIiptdSoiZy8iKm1eezN9KiIgIiksIGF1dG8udGV4dCA9IFQpCmBgYApDb21vIG1vc3RyYSBhICoqRmlndXJhIDEqKiwgYXMgY29uY2VudHJhw6fDtWVzIGRlIE8kXzMkIGF0aW5nZW0gbWFpcyBkZSAxMDAgJFxtdSRnL21eM14gbm9zIGRpYXMgZW50cmUgb3MgbWVzZXMgZGUgc2V0ZW1icm8gZSBub3ZlbWJyby4gSWd1YWxtZW50ZSwgbmVzdGVzIG1lc2VzIGFzIGNvbmNlbnRyYcOnw7VlcyBkZSBOTyRfMiQgZSBQTSRfezIsNX0kIHPDo28gYWx0YXMuIE5vIGVudGFudG8sIGFzIGNvbmNlbnRyYcOnw7VlcyBkZSBQTSRfezIsNX0kIGluY3JlbWVudGEtc2UgZHVyYW50ZSBvIGludmVybm8sIHRlbXBvIG9uZGUgYWNvbnRlY2UgZXN0YWduYW1lbnRvIGRvIGFyIG9uZGUgYSBjYW1hZGEgZGUgbWlzdHVyYSDDqSBiYWl4YSwgcHJpbmNpcGFsbWVudGUgZHVyYW50ZSBhIG5vaXRlIG9uZGUgcG9kZXJpYSBhY29udGVjZXIgcmVzZnJpYW1lbnRvIHJhZGlhdGl2byAoKipGYWx0YSBjaXRhciBlc3RvKiopLgoKKioyLiBDYWxjdWxlIGFzIG3DqWRpYXMgZSBjb21wYXJlIGNvbSBvcyBQYWRyw7VlcyBFc3RhZHVhaXMvTmFjaW9uYWlzIGUgYXMgcmVjb21lbmRhw6fDtWVzIGRhIE9yZ2FuaXphw6fDo28gTXVuZGlhbCBkZSBTYcO6ZGUgKHF1ZSDDqSBvIHBhZHLDo28gZmluYWwgZG8gZGVjcmV0byBlIGRhIHJlc29sdcOnw6NvIENPTkFNQSkuKioKCkFzIG3DqWRpYXMgZm9yYW0gY2FsY3VsYWRhcyBwYXJhIGNhZGEgcG9sdWVudGUgZGUgYWNvcmRvIGNvbSBhcyBtw6lkaWFzIGRvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIgbmFjaW9uYWwgZSBkYSBPcmdhbml6YcOnw6NvIE11bmRpYWwgZGUgU2HDumRlIChPTVMpLiBOYSAqKlRhYmVsYSAxKiogbW9zdHJhLXNlIG9zIHBhZHLDtWVzIGRlIHF1YWxpZGFkZSBkbyBhci4gRXN0ZXMgcGFkcsO1ZXMgc8OjbyB1c2Fkb3MgbmEgY29tcGFyYcOnw6NvIGNvbSBhcyBtw6lkaWFzIGNhbGN1bGFkYXMgcGFyYSBhIGVzdGHDp8OjbyBTSlJQLiBTZWd1bmRvIGEgQ0VURVNCLCBhcyBNZXRhcyBJbnRlcm1lZGnDoXJpYXMgKE1JKSBzw6NvIHBhZHLDtWVzIHRlbXBvcsOhcmlvcyBwb3IgZW5xdWFudG8gc2UgZGVzZW52b2x2ZW0gbWVsaG9yYXMgbmEgcXVhbGlkYWRlIGRvIGFyIG5vIEVzdGFkbyBkZSBTw6NvIFBhdWxvLiBPcyBQYWRyw7VlcyBGaW5haXMgKFBGKSBzw6NvIGFxdWVsZXMgcXVlIHByb3RlamVtIGEgc2HDumRlIGRhIHBvcHVsYcOnw6NvIGFvIG3DoXhpbW8uIAoKLS0tCm91dHB1dDogcGRmX2RvY3VtZW50Ci0tLQoKVGFibGU6IFRhYmVsYSAxIFBhZHLDtWVzIGRlIHF1YWxpZGFkZSBkbyBhciAoQ0VURVNCIERlY3JldG8gRXN0YWR1YWwgbsK6IDU5MTEzIGRlIDIzLzA0LzIwMTMpCgpQb2x1ZW50ZSB8IFRlbXBvIGRlIEFtb3N0cmFnZW0gfCBNSSRfMSQgfCBNSSRfMiQgfCBNSSRfMyQgfCBQRiAKLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tClBNJF97Miw1fSQgfCAyNCBob3JhcyAobcOpZGlhKSB8IDYwIHwgNTAgfCAzNyB8IDI1Ck5PJF8yJHwgMSBob3JhIChtw6lkaWEpIHwgMjYwIHwgMjQwIHwgMjIwIHwgMjAwCk8kXzMkIHwgOCBob3JhcyAobcOheGltYSBtw6lkaWEgbW92aWwgZGlhcmlhKSB8IDE0MCB8IDEzMCB8IDEyMCB8IDEwMAoKClBhcmEgbyBjw6FsY3VsbyBkYXMgbcOpZGlhcyBzZWd1bmRvIGNhZGEgcG9sdWVudGUsIHVzYW1vcyBvIHBhY290ZSBgb3BlbmFpciBgIGRvIGBSYC4gQXMgb3DDp8O1ZXMgYHRpbWVQbG90YCwgYHJvbGxpbmdNZWFuYCBlIGBhZ2dyZWdhdGVgIGZvcmFtIHVzYWRvcyBjb21vIG1vc3RyYWRvIGFiYWl4by4gQSBvcMOnw6NvIGB0aW1lUGxvdGAgcGVybWl0ZSBmYXplciBtw6lkaWFzIGRpw6FyaWFzOyBpbXBvcnRhbnRlIHBhcmEgb2J0ZXIgbcOpZGlhcyBkZSAyNCBob3JhcyBwYXJhIG8gUE0kX3syLDV9JC4gTyBgcm9sbGluZ01lYW5gIMOpIHVtYSBmdW7Dp8OjbyBkbyBgb3BlbmFpcmAgcXVlIHBlcm1pdGUgY2FsY3VsYXIgYXMgbcOpZGlhcyBtw7N2ZWlzIHBhcmEgY2FkYSA4IGhvcmFzIHF1ZSB0ZW5oYW0gYW8gbWVub3MgNzUlIGRlIGRhZG9zIChwZWxvIG1lbm9zIDYgaG9yYXMpLiBFc3RhIG9ww6fDo28gZm9pIHVzYWRhIHBhcmEgcHJvY2Vzc2FyIGFzIGNvbmNlbnRyYcOnw7VlcyBob3LDoXJpYXMgZGUgTyRfMyQuIEZpbmFsbWVudGUsIGFzIG3DoXhpbWFzIGRpYXJpYXMgZGFzIG3DqWRpYXMgbcOzdmVpcyBmb3JhbSBjb25zaWRlcmFkYXMgcGFyYSBvIGFuw6FsaXNlLgoKYGBge3IgZWNobyA9IEZBTFNFfQojIE9idGFpbiByb2xsaW5nIG1lYW5zIG9mIDggaG91cnMgZm9yIG96b25lCm8zXzhoIDwtIHJvbGxpbmdNZWFuKHNqciwgcG9sbHV0YW50ID0gIm8zIiwgaG91cnMgPSA4LCBuZXcubmFtZSA9ICJyb2xsaW5nbzMiLCBkYXRhLnRocmVzaCA9IDc1LCBuYS5ybSA9IFQpCm1heF9vM19kYXkgPC0gYWdncmVnYXRlKG8zXzhoWydyb2xsaW5nbzMnXSwgZm9ybWF0KG8zXzhoWydkYXRlJ10sICclWS0lbS0lZCcpLCBtYXgsIG5hLnJtID0gRikKbWF4X28zX2RheSRkYXRlIDwtIHNlcShtaW4obzNfOGgkZGF0ZSksIG1heChvM184aCRkYXRlKSwgYnkgPSAnZGF5JywgdHogPSAiR01UIikKbWF4X28zX2RheSA8LSBtYXhfbzNfZGF5Wy0zNjYsXQpuYW1lcyhtYXhfbzNfZGF5KVsyXSA9ICJvMyIKCiMgUGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyIGRhIENFVEVTQgpwYV9wbTI1ID0gYygyNSwzNyw1MCw2MCk7IHBhX25vMiA9IGMoMjAwLDIyMCwyNDAsMjcwKTsgcGFfbzMgPSBjKDEwMCwxMjAsMTMwLDE0MCkKYGBgCkEgKipGaWd1cmEgMioqIG1vc3RyYSBhIG3DqWRpYSBkacOhcmlhIGRvIFBNJF97Miw1fSQgY29tcGFyYWRvIGNvbSBvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIuIE5vIGludmVybm8gYWNvbnRlY2VtIHVsdHJhcGFzc2FnZW5zIGRvcyBwYWRyw7Vlcy4gQSBpbmZsdcOqbmNpYSBubyBhdW1lbnRvIGRhcyBjb25jZW50cmHDp8O1ZXMgw6kgcG9yIGNhdXNhIGRlIHVtYSBtZW5vciBhbHR1cmEgZG8gbWV6Y2xhZG8gKCoqY2l0YXIgZXN0byoqKS4KYGBge3IgaW5jbHVkZSA9IEZBTFNFfQojIEZpZ3VyZXMKdGltZVBsb3Qoc2pyLCBwb2xsdXRhbnQgPSAicG0yNSIsIGF2Zy50aW1lID0gImRheSIsIHlsYWIgPSBleHByZXNzaW9uKFBNWyIyLDUiXX4iWyIqbXUqImcvIiptXnszfSoiXSIpLCBkYXRlLmJyZWFrcyA9IDEyLCBtYWluID0gIkZpZ3VyYSAyIFwgTcOpZGlhIGRpw6FyaWEgZG8gUE0yLDUiLCBzbW9vdGggPSBGLCByZWYueSA9IGxpc3QoaCA9IHBhX3BtMjUsIGx0eSA9IGMoMiwyLDIsMikpKQpgYGAKRXNwZWNpZmljYW1lbnRlLCBvIHByaW5jaXBhbCBmYXRvciDDqSBvIGVuZnJhcXVlY2ltZW50byBkbyB0dXJidWzDqm5jaWEgdMOpcm1pY2EgZGV2aWRvIMOgIGRpc21pbnXDp8OjbyBkYXMgdGVtcGVyYXR1cmFzICgqKmNpdGFyIGVzdG8qKikKYGBge3IgZWNobyA9IEZBTFNFfQp0cmVsbGlzLmxhc3Qub2JqZWN0KCkgKyAKICBsYXllcihsdGV4dCh4ID0gYXMuUE9TSVhjdCgiMjAxOC0wMS0xNSIpLCB5ID0gcGFfcG0yNSszLCAKICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJQRiIsIGV4cHJlc3Npb24oIk1JIlszXSksIGV4cHJlc3Npb24oIk1JIlsyXSksCiAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uKCJNSSJbMV0pKSwgY2V4ID0gMC43NSksIHJvd3MgPSAxKQpgYGAKTmEgKipGaWd1cmEgMyoqIG1vc3RyYS1zZSBhIGNvbXBhcmHDp8OjbyBkYXMgY29uY2VudHJhw6fDtWVzIG3DqWRpYXMgaG9yw6FyaWFzIGRvIE5PJF8yJCwgbWFzIG7Do28gYWNvbnRlY2VtIHVsdHJhcGFzYWdlbnMgZG9zIHBhZHLDtWVzIHBhcmEgZXN0ZSBwb2x1ZW50ZS4KYGBge3IgaW5jbHVkZSA9IEZBTFNFfQp0aW1lUGxvdChzanIsIHBvbGx1dGFudCA9ICJubzIiLCBkYXRlLmJyZWFrcyA9IDEyLCBtYWluID0gIkZpZ3VyYSAzIFwgTcOpZGlhIGhvcsOhcmlhIGRvIE5PMiIsIGNvbHMgPSAiYmx1ZSIsIHlsYWIgPSBleHByZXNzaW9uKE5PWzJdfiJbIiptdSoiZy8iKm1eezN9KiJdIiksIHlsaW09IDA6MjgwLCAgcmVmLnkgPSBsaXN0KGggPSBwYV9ubzIsIGx0eSA9IGMoMiwyLDIsMikpKQpgYGAKYGBge3IgZWNobyA9IEZBTFNFfQp0cmVsbGlzLmxhc3Qub2JqZWN0KCkgKyAKICBsYXllcihsdGV4dCh4ID0gYXMuUE9TSVhjdCgiMjAxOC0wMS0xNSIpLCB5ID0gcGFfbm8yKzUsIAogICAgICAgICAgICAgIGxhYmVscyA9IGMoIlBGIiwgZXhwcmVzc2lvbigiTUkiWzNdKSwgZXhwcmVzc2lvbigiTUkiWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24oIk1JIlsxXSkpLCBjZXggPSAwLjUpLCByb3dzID0gMSkKYGBgCkEgKipGaWd1cmEgNCoqIG1vc3RyYSBhcyBjb25jZW50cmHDp8O1ZXMgbcOheGltYXMgZGnDoXJpYXMgZGFzIG3DqWRpYXMgbcOzdmVpcyBwYXJhIG8gTyRfMyQgdHJvcG9zZsOpcmljby4gRHVyYW50ZSBvIHZlcsOjbyBhIG51Ym9zaWRhZGUgcmVkdXplIGEgaXJyYWRpw6JuY2lhIHNvbGFyIHF1ZSDDqSB1biBmYXRvciBkZXRlcm1pbmFudGUgbmFzIHJlYcOnw7VlcyBxdcOtbWljYXMgZGUgZm9ybWHDp8OjbyBkbyBPJF8zJDsgbmEgcHJpbWF2ZXJhLCBlbSBhdXPDqm5jaWEgZGUgbnV2ZW5zLCBow6EgdW0gbWFpb3IgbsO6bWVybyBkZSBob3JhcyBkZSBpcnJhZGnDom5jaWEgc29sYXIgKCoqY2l0YXIgZXN0byoqKS4KCmBgYHtyIGluY2x1ZGUgPSBGQUxTRX0KdGltZVBsb3QobWF4X28zX2RheSwgcG9sbHV0YW50ID0gIm8zIiwgZGF0ZS5icmVha3MgPSAxMiwgbWFpbiA9ICJGaWd1cmEgNCBcIE3DqWRpYSBtw7N2ZWwgZGUgOCBob3JhcyBtw6F4aW1hIGRpYXJpYSAoYW5vIDIwMTgpIiwgY29scyA9ICJkYXJrZ3JlZW4iLCB5bGFiID0gZXhwcmVzc2lvbihPWzNdfiJbIiptdSoiZy8iKm1eezN9KiJdIiksIHlsaW09IDA6MTYwLCAgcmVmLnkgPSBsaXN0KGggPSBwYV9vMywgbHR5ID0gYygyLDIsMiwyKSkpCmBgYApgYGB7ciBlY2hvID0gRkFMU0V9CnRyZWxsaXMubGFzdC5vYmplY3QoKSArIAogIGxheWVyKGx0ZXh0KHggPSBhcy5QT1NJWGN0KCIyMDE4LTAxLTE1IiksIHkgPSBwYV9vMys1LCAKICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJQRiIsIGV4cHJlc3Npb24oIk1JIlszXSksIGV4cHJlc3Npb24oIk1JIlsyXSksCiAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uKCJNSSJbMV0pKSwgY2V4ID0gMC41KSwgcm93cyA9IDEpCmBgYAoKKiozLiBDYWxjdWxlIG8gbsO6bWVybyBkZSB1bHRyYXBhc3NhZ2VucyBkb3MgcGFkcsO1ZXMvcmVjb21lbmRhw6fDtWVzLioqCgpBICoqVGFiZWxhIDIqKiBtb3N0cmEgbyBuw7ptZXJvIGRlIHVsdHJhcGFzc2FnZW5zIGRvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIgcGFyYSBvcyBwb2x1ZW50ZXMuIEFzIG9ww6fDtWVzIGB0aW1lQXZlcmFnZWAgZm9pIHVzYWRvIHBhcmEgY2FsY3VsYXIgYSBtw6lkaWEgZGnDoXJpYSBkbyBQTX4yLDV+LgpgYGB7ciBlY2hvID0gRkFMU0V9CnBtMjVfZGF5ID0gdGltZUF2ZXJhZ2Uoc3Vic2V0KHNqciwgc2VsZWN0ID0gYyhkYXRlLCBtb250aCwgcG0yNSkpLAogICAgICAgICAgICAgICAgICAgICAgIGF2Zy50aW1lID0gImRheSIsIHN0YXRpc3RpYyA9ICJtZWFuIikKCnVsdHJfcG0yNSA8LSBzdWJzZXQocG0yNV9kYXksIHBtMjUgPj0gMjUsIHNlbGVjdCA9IGMoZGF0ZSwgcG0yNSkpCmNvdW50X3BtMjUgPC0gZGF0YS5mcmFtZShQb2x1ZW50ZSA9ICJQTTI1IiwKICAgICAgICAgICAgICAgICAgICAgICAgIE1JMSA9IGxlbmd0aCh3aGljaChwbTI1X2RheVsyXSA+PSA2MCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgTUkyID0gbGVuZ3RoKHdoaWNoKHBtMjVfZGF5WzJdID49IDUwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBNSTMgPSBsZW5ndGgod2hpY2gocG0yNV9kYXlbMl0gPj0gMzcpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFBGID0gbGVuZ3RoKHdoaWNoKHBtMjVfZGF5WzJdID49IDI1KSkpCgp1bHRyX25vMiA8LSBzdWJzZXQoc2pyLCBubzIgPj0gMjAwLCBzZWxlY3QgPSBjKGRhdGUsIG5vMikpCmNvdW50X25vMiA8LSBkYXRhLmZyYW1lKFBvbHVlbnRlID0gIk5PMiIsCiAgICAgICAgICAgICAgICAgICAgICAgIE1JMSA9IGxlbmd0aCh3aGljaChzanJbM10gPj0gMjYwKSksCiAgICAgICAgICAgICAgICAgICAgICAgIE1JMiA9IGxlbmd0aCh3aGljaChzanJbM10gPj0gMjQwKSksCiAgICAgICAgICAgICAgICAgICAgICAgIE1JMyA9IGxlbmd0aCh3aGljaChzanJbM10gPj0gMjIwKSksCiAgICAgICAgICAgICAgICAgICAgICAgIFBGID0gbGVuZ3RoKHdoaWNoKHNqclszXSA+PSAyMDApKSkKCnVsdHJfbzMgPC0gc3Vic2V0KG1heF9vM19kYXksIG8zID49IDEwMCwgc2VsZWN0ID0gYyhkYXRlLCBvMykpCgpjb3VudF9vMyA8LSBkYXRhLmZyYW1lKFBvbHVlbnRlID0gIk8zIiwKICAgICAgICAgICAgICAgICAgICAgICBNSTEgPSBsZW5ndGgod2hpY2gobWF4X28zX2RheVsyXSA+PSAxNDApKSwKICAgICAgICAgICAgICAgICAgICAgICBNSTIgPSBsZW5ndGgod2hpY2gobWF4X28zX2RheVsyXSA+PSAxMzApKSwKICAgICAgICAgICAgICAgICAgICAgICBNSTMgPSBsZW5ndGgod2hpY2gobWF4X28zX2RheVsyXSA+PSAxMjApKSwKICAgICAgICAgICAgICAgICAgICAgICBQRiA9IGxlbmd0aCh3aGljaChtYXhfbzNfZGF5WzJdICA+PSAxMDApKSkKCnVsdHIgPC0gUmVkdWNlKGZ1bmN0aW9uKHgsIHkpIG1lcmdlKHgsIHksIGFsbD1UUlVFKSwgbGlzdCh1bHRyX3BtMjUsIHVsdHJfbm8yLCB1bHRyX28zKSkKdWx0ciA8LSBkYXRhLmZyYW1lKHVsdHJbMV0sIHJvdW5kKHVsdHJbMjo0XSwgZGlnaXRzID0gMikpCgpjb3VudCA8LSBSZWR1Y2UoZnVuY3Rpb24oeCwgeSkgbWVyZ2UoeCwgeSwgYWxsPVRSVUUpLCBsaXN0KGNvdW50X3BtMjUsIGNvdW50X25vMiwgY291bnRfbzMpKSAKCnJtKGNvdW50X25vMiwgY291bnRfbzMsIGNvdW50X3BtMjUsIHVsdHJfbm8yLCB1bHRyX28zLCB1bHRyX3BtMjUpCmBgYAoKLS0tCm91dHB1dDogcGRmX2RvY3VtZW50Ci0tLQoKVGFibGU6IFRhYmVsYSAyIE7Dum1lcm8gZGUgdWx0cmFwYXNzYWdlbnMgZG9zIHBhZHLDtWVzIGRlIHF1YWxpZGFkZSBkbyBhciAoQ0VURVNCLCAyMDE5KQoKUG9sdWVudGUgICAgICB8IE1JJF8xJCAgICAgICAgIHwgTUkkXzIkICAgICAgICB8IE1JJF8zJCAgICAgICAgfCBQRiAKLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0gClBNJF97Miw1fSQgICAgfCAxICAgICAgICAgICAgIHwgMiAgICAgICAgICAgICB8IDggICAgICAgICAgICAgfCA0OApOTyRfMiQgICAgICAgIHwgMCAgICAgICAgICAgICB8IDAgICAgICAgICAgICAgfCAwICAgICAgICAgICAgIHwgMApPJF8zJCAgICAgICAgIHwgMCAgICAgICAgICAgICB8IDIgICAgICAgICAgICAgfCAzICAgICAgICAgICAgIHwgMjIKCmBgYHtyIGluY2x1ZGUgPSBGQUxTRX0KbGlicmFyeShrbml0cik7IGxpYnJhcnkoa2FibGVFeHRyYSkgIyB0byBtYWtlIHRhYmxlcwoKY291bnQgJT4lCiAga2FibGUoY2FwdGlvbiA9ICJUYWJlbGEgMiAgXCAgTsO6bWVybyBkZSB1bHRyYXBhc3NhZ2VucyBkb3MgcGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyIikgJT4lCiAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMikgJT4lCiAgZm9vdG5vdGUoZ2VuZXJhbF90aXRsZSA9ICJOb3RhOiIsIGdlbmVyYWwgPSAiQmFzZWFkbyBub3MgZGFkb3MgZGEgQ0VURVNCICgyMDE5KS4iKQpgYGAKUGFyYSBlbnRlbmRlciBxdWUgYWNvbnRlY2V1LCBhcyBkYXRhcyBjb20gdWx0cmFwYXNzYWdlbnMgZm9yYW0gY29udGFkb3MgcGFyYSBjYWRhIHBvbHVlbnRlIG1lZGlhbnRlIG8gcHJvZ3JhbWEgYFJgLiBBbMOpbSBkaXNzbywgYSBmdW7Dp8OjbyBgY2FsZW5kYXJQbG90YCBkbyBwYWNvdGUgYG9wZW5haXJgIGZvaSB1c2FkbyBwYXJhIHZpc3VhbGl6YXIgY29tIG1lbGhvciBmYWNpbGlkYWRlIG9zIGRpYXMgcXVlIGV4Y2VkZXJhbSBvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIgcGFyYSBvIFBNJF97Miw1fSQgKCoqRmlndXJhIDUqKikgZSBvIE8kXzMkICgqKkZpZ3VyYSA2KiopLgoKSnVsaG8gYXByZXNlbnRhIG1haXMgZGlhcyBkZSB1bHRyYXBhc3NhZ2VucyBkb3MgcGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyLiBFc3RlIG3DqnMgYXByZXNlbnRhIGJhaXhhcyB0ZW1wZXJhdHVyYXMgZSBjb25kacOnw7VlcyBkZSBlc3RhZ25hbWVudG8gZGEgY2FtYWRhIGRlIG1pc3R1cmEgKCoqY2l0YXIgZXN0byoqKS4gTyBzZWd1bmRvIG3DqnMgY29tIG1haXMgZGlhcyBkZSB1bHRyYXBhc2FnZW5zIMOpIHNldGVtYnJvLiBOZXN0ZSBtw6pzIHRhbWJlbSBhY29udGVjZSBvcyBtYWlvcmVzIGRpYXMgY29tIGNvbmNlbnRyYcOnw7VlcyBhbHRhcyBkZSBPJF8zJC4KCmBgYHtyIGVjaG8gPSBGQUxTRX0KY2FsZW5kYXJQbG90KHVsdHIscG9sbHV0YW50ID0gInBtMjUiLCBtYWluID0gZXhwcmVzc2lvbigiRmlndXJhIDUgXCBEaWFzIGNvbSB1bHRyYXBhc3NhZ2VucyBwYXJhIG8gUE0iWyIyLDUiXSksIGtleS5oZWFkZXIgPSAidWcvbTMiLCBhdXRvLnRleHQgPSBUKQpgYGAKTmVzdGUgc2VudGlkbywgYSAqKkZpZ3VyYSA1KiogbW9zdHJhIGNsYXJhbWVudGUgcXVlIG9zIG1lc2VzIGRlIGFnb3N0byBlIHNldGVtYnJvIGFwcmVzZW50YW0gb3MgbWFpb3JlcyBkaWFzIGNvbSB1bHRyYXBhc2FnZW5zIGRvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIgcGFyYSBvIE8kXzMkLiBQcmluY2lwYWxtZW50ZSwgc2V0ZW1icm8gdGVtIG1haXMgZGlhcyBhc3NpbSBjb21vIGFzIGNvbmNlbnRyYcOnw7VlcyBtYWlzIGFsdGFzLgpgYGB7ciBlY2hvID0gRkFMU0V9CmNhbGVuZGFyUGxvdCh1bHRyLHBvbGx1dGFudCA9ICJvMyIsIG1haW4gPSBleHByZXNzaW9uKCJGaWd1cmEgNiBcIERpYXMgY29tIHVsdHJhcGFzc2FnZW5zIHBhcmEgbyBPIlszXSksIGtleS5oZWFkZXIgPSAidWcvbTMiLCBhdXRvLnRleHQgPSBUKQpgYGAKCioqNC4gQ2FsY3VsZSBhcyBtw6lkaWFzIGhvcsOhcmlhcyBkbyBQTX4yLDV+LCBPfjN+IGUgTk9+Mn4gZSBlc2JvY2Ugb3MgZ3LDoWZpY29zIGRvIGNpY2xvIGRpw6FyaW8gbcOpZGlvICgyNCBob3JhcykgcGFyYSBjYWRhIHVtIGRvcyBtZXNlcy4qKgoKQXMgbcOpZGlhcyBob3LDoXJpYXMgZm9yYW0gY2FsY3VsYWRhcyBwYXJhIGNhZGEgcG9sdWVudGUuIEEgKipGaWd1cmEgNyoqIG1vc3RyYSBhIHZhcmlhw6fDo28gZGFzIGNvbmNlbnRyYcOnw7VlcyBkbyBQTX4yLDV+LiBKdWxobyDDqSBvIG3DqnMgcXVlIHRlbSBtw6F4aW1hcyBjb25jZW50cmHDp8O1ZXMgZHVyYW50ZSBvIGNpY2xvIGRpw6FyaW8gbcOpZGlvIGRlIDI0IGhvcmFzLgoKYGBge3IgZWNobyA9IEZBTFNFfQpzanIkaG91ciA8LSBob3VyKHNqciRkYXRlKQptZWFucyA8LSBhZ2dyZWdhdGUoc2pyWyJwbTI1Il0sIGZvcm1hdChzanJbImRhdGUiXSwiJW0tJUgiKSwgbWVhbiwgbmEucm0gPSBUUlVFKQogICAgICAgICAgICAgICAgICAgICAgCnBsb3QobWVhbnMkcG0yNSwgeGF4dCA9ICJuIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJIb3JhIiwgY2V4LmF4aXMgPSAwLjc1LCB5bGFiID0gZXhwcmVzc2lvbihQTVsiMiw1Il1+IlsiKm11KiJnLyIqbV57M30qIl0iKSApCmF4aXMoMSwgYXQgPSBzZXEoMSwgMjg4LCAyNCksIGxhYmVscyA9IEZBTFNFKSAjIGFkZCBzb21lIHRpY2sgbWFya3MgYXQgMjQgaHIgaW50ZXJ2YWxzCm1vbnRocyA9IGMoIkphbiIsICJGZWIiLCAiTWFyIiwgIkFiciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBZ28iLCAiU2V0IiwgIk91dCIsICJOb3YiLCAiRGV6IikgIyBhZGQgc29tZSBsYWJlbHMgdG8geC1heGlzCmxvYy5tb250aHMgPSBzZXEoMTIsIDI3NiwgMjQpICMgbG9jYXRpb24gb2YgbGFiZWxzIG9uIHgtYXhpcwptdGV4dChtb250aHMsIHNpZGUgPSAxLCBsaW5lID0gMiwgYXQgPSBsb2MubW9udGhzKSAjIHdyaXRlIHRleHQgaW4gbWFyZ2luCmxpbmVzKG1lYW5zJHBtMjUsIGNvbCA9ICJvcmFuZ2UiLCBsd2QgPSAyKSAjIGFkZCB0aGUgbGluZQpheGlzKDEsIGF0ID0gc2VxKDEsIDI4OCwgMTIpLCBsYWJlbHMgPSBGQUxTRSkKaG91ciA9IHJlcGxpY2F0ZSgxMiwgIjEyOjAwIiwgc2ltcGxpZnkgPSBGQUxTRSkgIyBhZGQgc29tZSBsYWJlbHMgdG8geC1heGlzCm10ZXh0KGhvdXIsIHNpZGUgPSAxLCBsaW5lID0gMSwgYXQgPSBsb2MubW9udGhzLCBjZXggPSAwLjc1KSAjIHdyaXRlIHRleHQgaW4gbWFyZ2luCmFibGluZSh2ID0gc2VxKDEsIDI4OCwgMTIpLCBjb2wgPSAiZ3JleTgwIiwgbHR5ID0gNCkKYWJsaW5lKHYgPSBzZXEoMSwgMjg4LCAyNCksIGNvbCA9ICJncmV5NzAiKSAjIGFkZCBzb21lIGdyaWQgbGluZXMKdGl0bGUoZXhwcmVzc2lvbigiRmlndXJhIDcgXCBWYXJpYcOnw6NvIG3DqWRpYSBob3LDoXJpYSBwb3IgbcOqcyBkbyBQTSJbIjIsNSJdKSwgc3ViID0gIk3DqnMiLAogICAgICBjZXgubWFpbiA9IDEuMjUsICAgZm9udC5tYWluPSA0LCBjb2wubWFpbj0gImJsYWNrIiwKICAgICAgY2V4LnN1YiA9IDAuNzUsIGZvbnQuc3ViID0gMywgY29sLnN1YiA9ICJibGFjayIpCgpgYGAKQSAqKkZpZ3VyYSA4KiogbW9zdHJhIGNpY2xvcyBkacOhcmlvcyBkZSAyNCBob3JhcyBwYXJhIGNhZGEgbcOqcyBkYXMgY29uY2VudHJhw6fDtWVzIGRlIE5PfjJ+LiBBbHRhcyBjb25jZW50cmHDp8O1ZXMgZXN0w6NvIHByZXNlbnRlcyBubyBpbnZlcm5vIGUgYmFpeGFzIGR1cmFudGUgbyB2ZXLDo28uIEFsw6ltIGRpc3NvLCB0YW1iw6ltIGjDoSBjb25jZW50cmHDp8O1ZXMgYWx0YXMgZHVyYW50ZSBhIG1hbmjDoyAoMDc6MDAgaCAtIDA5OjAwIGgpIGUgYSBub2l0ZSAoMTk6MDAgaCAtIDIyOjAwIGgpLiBQb3Igb3V0cm8gbGFkbywgYXByb3hpbWFkYW1lbnRlIGVudHJlIGFzIDE0OjAwIGhvcmFzIGUgYXMgMTc6MDAgaG9yYXMgYWNvbnRlY2UgdW1hIGRpbWludcOnw6NvIGRhcyBjb25jZW50cmHDp8O1ZXMgZGUgTk9+Mn47IHNlbmRvIHF1YXNpIGNvbnN0YW50ZSBhbyBsb25nbyBkbyBhbm8uCgpgYGB7ciBlY2hvID0gRkFMU0V9Cm1lYW5zIDwtIGFnZ3JlZ2F0ZShzanJbIm5vMiJdLCBmb3JtYXQoc2pyWyJkYXRlIl0sIiVtLSVIIiksIG1lYW4sIG5hLnJtID0gVFJVRSkKICAgICAgICAgICAgICAgICAgICAgIApwbG90KG1lYW5zJG5vMiwgeGF4dCA9ICJuIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJIb3JhIiwgeWxhYiA9IGV4cHJlc3Npb24oTk9bMl1+IlsiKm11KiJnLyIqbV57M30qIl0iKSApCmF4aXMoMSwgYXQgPSBzZXEoMSwgMjg4LCAyNCksIGxhYmVscyA9IEZBTFNFKSAjIGFkZCBzb21lIHRpY2sgbWFya3MgYXQgMjQgaHIgaW50ZXJ2YWxzCm1vbnRocyA9IGMoIkphbiIsICJGZWIiLCAiTWFyIiwgIkFiciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBZ28iLCAiU2V0IiwgIk91dCIsICJOb3YiLCAiRGV6IikgIyBhZGQgc29tZSBsYWJlbHMgdG8geC1heGlzCmxvYy5tb250aHMgPSBzZXEoMTIsIDI3NiwgMjQpICMgbG9jYXRpb24gb2YgbGFiZWxzIG9uIHgtYXhpcwptdGV4dChtb250aHMsIHNpZGUgPSAxLCBsaW5lID0gMiwgYXQgPSBsb2MubW9udGhzKSAjIHdyaXRlIHRleHQgaW4gbWFyZ2luCmxpbmVzKG1lYW5zJG5vMiwgY29sID0gInJlZCIsIGx3ZCA9IDIpICMgYWRkIHRoZSBsaW5lCmF4aXMoMSwgYXQgPSBzZXEoMSwgMjg4LCAxMiksIGxhYmVscyA9IEZBTFNFKQpob3VyID0gcmVwbGljYXRlKDEyLCAiMTI6MDAiLCBzaW1wbGlmeSA9IEZBTFNFKSAjIGFkZCBzb21lIGxhYmVscyB0byB4LWF4aXMKbXRleHQoaG91ciwgc2lkZSA9IDEsIGxpbmUgPSAxLCBhdCA9IGxvYy5tb250aHMsIGNleCA9IDAuNzUpICMgd3JpdGUgdGV4dCBpbiBtYXJnaW4KYWJsaW5lKHYgPSBzZXEoMSwgMjg4LCAxMiksIGNvbCA9ICJncmV5ODAiLCBsdHkgPSA0KQphYmxpbmUodiA9IHNlcSgxLCAyODgsIDI0KSwgY29sID0gImdyZXk3MCIpICMgYWRkIHNvbWUgZ3JpZCBsaW5lcwp0aXRsZShleHByZXNzaW9uKCJGaWd1cmEgOCBcIFZhcmlhw6fDo28gbcOpZGlhIGhvcsOhcmlhIHBvciBtw6pzIGRvIE5PIlsyXSksIHN1YiA9ICJNw6pzIiwKICAgICAgY2V4Lm1haW4gPSAxLjI1LCAgIGZvbnQubWFpbj0gNCwgY29sLm1haW49ICJibGFjayIsCiAgICAgIGNleC5zdWIgPSAwLjc1LCBmb250LnN1YiA9IDMsIGNvbC5zdWIgPSAiYmxhY2siKQpgYGAKQSAqKkZpZ3VyYSA5KiogbW9zdHJhIGNpY2xvcyBkacOhcmlvcyBkZSAyNCBob3JhcyBwYXJhIGNhZGEgbcOqcyBkYXMgY29uY2VudHJhw6fDtWVzIGRlIE9+M34uIFBlcnRvIGRhcyAxMjowMCBob3JhcyBhY29udGVjZSBhcyBtw6F4aW1hcyBjb25jZW50cmHDp8O1ZXMgZGUgT34zfiBkZXZpZG8gcXVlIG5lc3RhIGhvcmEgw6kgbcOheGltYSBvcyB2YWxvcmVzIGRlIGlycmFkacOibmNpYSBzb2xhci4gRHVyYW50ZSBhIG5vaXRlIGjDoSBwZXF1ZW5vcyBpbmNyZW1lbnRvczsgb3MgcXVhaXMgcG9kZXJpYW0gZXN0YXIgcmVsYWNpb25hZG9zIGNvbSBvIHRyYW5zcG9ydGUgY29tbyBzdWdlcmUgKCoqY2l0YXIgZXN0byoqKS4KYGBge3IgZWNobyA9IEZBTFNFfQptZWFucyA8LSBhZ2dyZWdhdGUoc2pyWyJvMyJdLCBmb3JtYXQoc2pyWyJkYXRlIl0sIiVtLSVIIiksIG1lYW4sIG5hLnJtID0gVFJVRSkKICAgICAgICAgICAgICAgICAgICAgIApwbG90KG1lYW5zJG8zLCB4YXh0ID0gIm4iLCB0eXBlID0gIm4iLCB4bGFiID0gIkhvcmEiLCB5bGFiID0gZXhwcmVzc2lvbihPWzNdfiJbIiptdSoiZy8iKm1eezN9KiJdIikgKQpheGlzKDEsIGF0ID0gc2VxKDEsIDI4OCwgMTIpLCBjb2wgPSAiYmxhY2siICxsYWJlbHMgPSBGQUxTRSkKYXhpcygxLCBhdCA9IHNlcSgxLCAyODgsIDI0KSwgY29sID0gImJsYWNrIixsYWJlbHMgPSBGQUxTRSkgIyBhZGQgc29tZSB0aWNrIG1hcmtzIGF0IDI0IGhyIGludGVydmFscwptb250aHMgPSBjKCJKYW4iLCAiRmViIiwgIk1hciIsICJBYnIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQWdvIiwgIlNldCIsICJPdXQiLCAiTm92IiwgIkRleiIpICMgYWRkIHNvbWUgbGFiZWxzIHRvIHgtYXhpcwpsb2MubW9udGhzID0gc2VxKDEyLCAyNzYsIDI0KSAjIGxvY2F0aW9uIG9mIGxhYmVscyBvbiB4LWF4aXMKbXRleHQobW9udGhzLCBzaWRlID0gMSwgbGluZSA9IDIsIGF0ID0gbG9jLm1vbnRocykgIyB3cml0ZSB0ZXh0IGluIG1hcmdpbgpsaW5lcyhtZWFucyRvMywgY29sID0gImJsdWUiLCBsd2QgPSAyKSAjIGFkZCB0aGUgbGluZQpob3VyID0gcmVwbGljYXRlKDEyLCAiMTI6MDAiLCBzaW1wbGlmeSA9IEZBTFNFKSAjIGFkZCBzb21lIGxhYmVscyB0byB4LWF4aXMKbXRleHQoaG91ciwgc2lkZSA9IDEsIGxpbmUgPSAxLCBhdCA9IGxvYy5tb250aHMsIGNleCA9IDAuNzUpICMgd3JpdGUgdGV4dCBpbiBtYXJnaW4KYWJsaW5lKHYgPSBzZXEoMSwgMjg4LCAxMiksIGNvbCA9ICJncmV5ODAiLCBsdHkgPSA0KQphYmxpbmUodiA9IHNlcSgxLCAyODgsIDI0KSwgY29sID0gImdyZXk3MCIpICMgYWRkIHNvbWUgZ3JpZCBsaW5lcwp0aXRsZShleHByZXNzaW9uKCJGaWd1cmEgOSBcIFZhcmlhw6fDo28gbcOpZGlhIGhvcsOhcmlhIHBvciBtw6pzIGRvIE8iWzNdKSwgc3ViID0gIk3DqnMiLAogICAgICBjZXgubWFpbiA9IDEuMjUsICAgZm9udC5tYWluPSA0LCBjb2wubWFpbj0gImJsYWNrIiwKICAgICAgY2V4LnN1YiA9IDAuNzUsIGZvbnQuc3ViID0gMywgY29sLnN1YiA9ICJibGFjayIpCgpgYGAKKio1LiBEaXNjdXRhIG8gY29tcG9ydGFtZW50byBkacOhcmlvIGRvcyBwb2x1ZW50ZXMgKHRlbnRlIHJlbGFjaW9uYXIgY29tIGFzIHZhcmnDoXZlaXMgZGUgcmFkaWHDp8OjbywgdGVtcGVyYXR1cmEsIGNodXZhL3VtaWRhZGUpLioqCgoqIFBhcmEgbyBwb2x1ZW50ZSBQTX4yLDV+LCBkdXJhbnRlIG9zIG1lc2VzIGNvbSBjaHV2YSAoZW50cmUgbm92ZW1icm8gZSBtYXLDp28pICgqKiB2ZXJpZmljYXIgZXN0byBlIGNpdGFyKiopIGEgYXRtb3NmZXJhIMOpIGxpbXBhIHBlbG8gaW1wYWN0byBkYXMgZ290YXMgZGUgY2h1dmEgY29tIGFzIHBhcnTDrWN1bGFzLgoqIEEgZXhjZcOnw6NvIAoKKio2LiBQcmVwYXJlIHVtYSBwZXF1ZW5hIGFwcmVzZW50YcOnw6NvIGNvbnRlbmRvIG9zIHJlc3VsdGFkb3MgcGFyYSBkaXNjdXRpcm1vcyBuYSBwcsOzeGltYSBhdWxhLioqCgpBIGFwcmVzZW50YcOnw6NvIG1vc3RyYSBhcyBmaWd1cmFzIGUgcmVmZXLDqm5jaWFzIGRlIGVzdHVkb3MgZGUgcXVhbGlkYWRlIGRvIGFyIHBhcmEgU8OjbyBQYXVsbyBhc3NpbSBjb21vIHJlZmVyw6puY2lhIGRlIGxpdnJvcyByZWxhY2lvbmFkb3MgY29tIG8gdGVtYSBkZSBwb2x1acOnw6NvIGRvIGFyLgoKIyMjIFJlZmVyw6puY2lhCgoqIHh4eHgKKiB4eHh4CgoKCgo=