Relatório Atividade Econômica - Resultado de 2025 e Previsão para 2026

O relatório a seguir tem como objetivo analisar empiricamente o resultado da Atividade Econômica em 2025, bem como as projeções para esse ano de 2026.

Resultado - Atividade Econômica de 2025 em Comparação com 2024

O ano de 2025 foi marcado por uma alta taxa de juros, com a SELIC mantendo-se em 15% ao longo de todo ano, mas também com os estímulos fiscais e de crédito impulsionando o país. Dessa forma, ao se analisar o PIB Mensal e o IBC-Br do último ano em comparação ao de 2024, percebe-se que, apesar dos juros altos e de outros fatores desfavoráveis, houve sim um crescimento no ano de 2025 — 2,5% no IBC-Br e 2,5% no PIB — porém em um ritmo menor se comparado a 2024, tendência que ocorreu tanto com o PIB quanto com o Índice de Atividade Econômica. Apesar disso, em dados mais recentes o IBC-Br recuou 0.2%, evidenciando essa desacelaração da economia, com setores de grande peso na economia como Agropecuária, Serviços e Indústraia sendo impactados por esse recuo.

O crescimento do PIB, portanto, acompanhou o IBC-Br, repetindo o mesmo padrão de desaceleração em relação a 2024. Esse comportamento é explicado, principalmente, pela menor contribuição do setor de Serviços (que tem o maior peso na economia), somada a reduções no setor Industrial e no componente de Impostos. Apenas a Agropecuária aumentou sua participação, embora seu impacto seja inferior ao do setor de Serviços. No geral, o PIB iniciou o ano com forte crescimento e terminou com estabilidade, reflexo do aperto monetário e da imposição de tarifas no país.

Previsão para o ano de 2026

Para 2026, a projeção do PIB se aproxima de um cenário próximo de 1,7%, refletindo essa “queda controlada” da economia. Esse movimento é também um reflexo da sinalização da última reunião do Copom, que indicou um corte de juros até o final do ano, com a Selic devendo terminar entre 12% e 12,75% — um patamar inferior ao recente, porém ainda muito restritivo. Na prática, isso significa que, embora haja um alívio em relação aos 15% de 2025, o crédito e o consumo das famílias devem continuar operando sob restrição, ainda que em intensidade ligeiramente menor.

Esse cenário doméstico ocorre em meio a uma desaceleração da atividade global. Conforme projeções da OCDE, a economia mundial tem mostrado resiliência diante dos choques comerciais, com crescimento estimado em 3,2% para 2025, impulsionado por políticas macroeconômicas ainda favoráveis. No entanto, os impactos das tarifas implementadas pelos Estados Unidos ainda não se materializaram por completo e tendem a provocar uma desaceleração do crescimento global, que deve recuar para 2,9% em 2026.

Além disso, é importante considerar o componente político do ciclo econômico brasileiro, uma vez que 2026 será um ano de eleições presidenciais. Historicamente, períodos eleitorais costumam gerar maior volatilidade macroeconômica e mudanças de expectativas por parte de agentes econômicos e investidores. Um exemplo relevante ocorreu em 2014, quando o ambiente eleitoral foi acompanhado por deterioração das expectativas fiscais, aumento da incerteza política e redução do investimento privado. Naquele período, a taxa de crescimento do PIB desacelerou significativamente, passando de 3,0% em 2013 para apenas 0,5% em 2014, refletindo um cenário de incerteza econômica e ajuste de expectativas.

Esse padrão histórico sugere que anos eleitorais tendem a intensificar a cautela de empresas e investidores, especialmente em economias emergentes como o Brasil, onde mudanças na condução da política fiscal, monetária e regulatória podem alterar significativamente as perspectivas econômicas. Dessa forma, ainda que a política monetária esteja em trajetória de flexibilização moderada, a proximidade do ciclo eleitoral de 2026 pode contribuir para manter o ambiente de investimentos mais cauteloso, reforçando o cenário de crescimento moderado projetado para o período

Atividade Econômica nos Setores (Agropecuária/Indústria/Serviços)

Ao analisar diferentes setores da economia percebe-se o o mesmo aumento do Índice de Atividade Econômica agora em meio aos diferentes setores da economia nacional, as altas foram de 13,1% na agropecuária, 1,5% na indústria e 2,1% em serviços.

Apesar da desacelaração o setor de serviços se manteve aquecido ao longo do ano, com uma inflação persistente que impediu uma crescente maior nesse mercado. Os serviços de informação e comunicação cresceram 1.7% e aqueles prestados as famílias cresceram 1.1% O agronegócio permanece sendo um pilar fundamental para a economia do país, em um contexto de recuperação em culturas estratégicas com indicações de uma safra de grãos 2024/25 está em 350 milhões de toneladas. O desempenho do Agro tem efeito direto do PIB e na balança comercial com o IBC-Br contribuindo para a elaboração da política monetária. O setor industrial pode apresentar desafios em 2026 em relação aos estoques elevados e um câmbio médio especulado para R$ 5,50.

Cenário do crédito de consumo na atividade econômica brasileira

A dinâmica do crédito constitui um dos pilares da atividade econômica no Brasil, funcionando como mecanismo relevante de amplificação do ciclo doméstico. Ao facilitar o acesso a financiamento para famílias e empresas, o crédito sustenta o consumo, contribui para a expansão da demanda agregada e influencia diretamente o ritmo de crescimento econômico. O crédito atua como mecanismo de amplificação do ciclo econômico, em que afeta diretamente a capacidade de consumo das famílias.Em períodos de melhora do mercado de trabalho, a expansão das concessões reforça o crescimento da demanda doméstica; por outro lado, em momentos de desaceleração, o recuo do crédito tende a intensificar a contração da atividade. A análise conjunta da massa de rendimento real habitual das famílias e das concessões de crédito com recursos livres para pessoas físicas sugere que, em determinados momentos do ciclo econômico brasileiro, a dinâmica do crédito assume caráter antecedente em relação à evolução da renda agregada. Observa-se que períodos de aceleração nas concessões tendem a preceder movimentos mais intensos de recuperação da massa salarial, indicando que a expansão do financiamento pode atuar como um dos primeiros sinais de melhora na demanda doméstica. Entre 2017 e 2019, por exemplo, as concessões às famílias apresentaram trajetória de crescimento consistente, saindo de patamares próximos a R$ 110 bilhões mensais para níveis acima de R$ 150 bilhões, enquanto a massa salarial avançava de forma mais gradual. Esse comportamento sugere que a retomada do consumo ocorreu inicialmente por meio da ampliação do crédito, com a renda reagindo de maneira mais lenta ao longo do processo de recuperação econômica. Dinâmica semelhante pode ser observada no período posterior ao choque da pandemia. Após a forte contração de 2020, as concessões de crédito às pessoas físicas retomaram trajetória de alta de maneira relativamente rápida, ultrapassando R$ 200 bilhões mensais já em 2021 e alcançando níveis superiores a R$ 300 bilhões em 2025. A massa salarial real, por sua vez, apresentou recuperação mais gradual, avançando de cerca de R$ 273 bilhões em 2021 para aproximadamente R$ 367 bilhões ao final de 2025. Esse descompasso temporal reforça a hipótese de que o crédito pode atuar como mecanismo de antecipação do consumo, permitindo que famílias ajustem seus gastos antes da consolidação plena do crescimento da renda. Do ponto de vista econômico, esse comportamento pode ser explicado pela maior sensibilidade das concessões às condições financeiras e às expectativas. Alterações na percepção de risco, na liquidez do sistema financeiro ou nas expectativas em relação ao ciclo monetário tendem a impactar rapidamente a oferta e a demanda por crédito, enquanto a evolução do mercado de trabalho e da renda ocorre de forma mais gradual. Assim, a expansão do crédito não apenas reflete a atividade econômica corrente, mas também pode sinalizar mudanças futuras no ritmo da demanda doméstica. Dessa forma, os dados recentes sugerem que as concessões às famílias desempenham papel relevante como indicador antecedente do ciclo econômico brasileiro. Ao ampliar a capacidade de consumo em momentos de melhora das condições financeiras, o crédito atua como vetor de propagação da atividade, reforçando movimentos de expansão e contribuindo para a dinâmica observada na massa salarial ao longo do tempo. A análise da evolução conjunta da massa salarial real e das concessões de crédito às pessoas físicas evidencia o papel central do crédito na dinâmica recente da economia brasileira. Ao longo do ciclo, observa-se que a expansão das concessões não apenas acompanha a melhora do mercado de trabalho, mas, em determinados momentos, antecede a aceleração mais intensa da renda agregada, sugerindo que o crédito atua como mecanismo de antecipação do consumo e como amplificador da demanda doméstica.

Dessa forma, os dados analisados sugerem que o crédito não deve ser interpretado apenas como variável auxiliar, mas como componente estrutural da dinâmica macroeconômica brasileira, desempenhando papel determinante tanto na intensificação das fases de expansão quanto na propagação de períodos de desaceleração.

Análise do Mercado de Trabalho

A dinâmica do mercado de trabalho tem desempenhado papel central na trajetória recente da atividade econômica brasileira. A evolução da taxa de desocupação, da população na força de trabalho e da massa salarial real revela não apenas os efeitos dos diferentes ciclos econômicos enfrentados pelo país na última década, mas também os fundamentos que sustentam o momento atual da economia. Entre 2015 e 2017, a economia brasileira enfrentou forte contração, refletida na deterioração abrupta do mercado de trabalho. A taxa de desocupação avançou de aproximadamente 6,5% para patamar próximo de 14%, configurando uma duplicação do desemprego em curto intervalo de tempo. Esse movimento foi acompanhado por enfraquecimento da renda agregada e retração do consumo das famílias. Ainda que a população na força de trabalho tenha mantido tendência estrutural de crescimento, o choque recessivo se traduziu em incapacidade de absorção dessa força de trabalho, ampliando a ociosidade e reduzindo o dinamismo da economia doméstica. O mercado de trabalho, nesse período, atuou como canal de transmissão da recessão, reforçando o ciclo negativo. Nos anos subsequentes, observou-se estabilização do desemprego, porém ainda em níveis elevados, superiores a 11%. A recuperação econômica mostrou-se moderada e insuficiente para promover reabsorção rápida da mão de obra desempregada. A massa salarial apresentou crescimento limitado, restringindo a capacidade de aceleração do consumo. Esse período foi caracterizado por recuperação frágil, com elevado grau de ociosidade no mercado de trabalho.

A forte compressão do desemprego elevou a renda disponível das famílias e fortaleceu o consumo doméstico, componente central do PIB brasileiro. O mercado de trabalho deixou de atuar como restrição e passou a funcionar como mecanismo de propagação do crescimento.

Com desemprego em torno de 5%, o grau de ociosidade da economia encontra-se reduzido para padrões históricos nacionais. Esse cenário implica: Maior pressão potencial sobre salários, Redução da margem de crescimento via absorção adicional de trabalhadores,Dependência crescente de ganhos de produtividade para sustentar expansão futura

A evidência empírica sugere que o mercado de trabalho tem sido o principal vetor da retomada recente da atividade econômica brasileira. A forte compressão da taxa de desocupação que recuou para níveis historicamente baixos combinada à estabilização da população na força de trabalho e ao avanço consistente da massa salarial real, consolidou um ambiente favorável à expansão do consumo das famílias, principal componente da demanda agregada.

Contudo, a economia opera atualmente com grau reduzido de ociosidade. Com desemprego próximo de mínimas históricas e força de trabalho relativamente estabilizada, a margem de expansão via maior utilização do fator trabalho torna-se limitada. Nesse contexto, a continuidade do crescimento exigirá transição para um modelo mais intensivo em produtividade, investimento e eficiência alocativa.

Renda e Consumo das Famílias

Acerca do consumo e da renda das famílias, apesar de um cenário de juros elevados, o consumo doméstico manteve-se relativamente resiliente ao longo do período, sustentado principalmente por um mercado de trabalho ainda aquecido e por ganhos reais de renda. Dados recentes indicam que a taxa de desemprego no Brasil permaneceu em patamares historicamente baixos, próximos de 7% ao longo de 2025, segundo o IBGE, enquanto a massa de rendimento real habitual do trabalho apresentou crescimento consistente, refletindo tanto a expansão do emprego quanto a recuperação do poder de compra da população. Esse avanço da renda real tende a sustentar o consumo das famílias mesmo em um ambiente de crédito mais restritivo, uma vez que parte relevante do consumo no Brasil está associada à renda corrente.

Outro fator relevante foi o arrefecimento da inflação de alimentos, que contribuiu para reduzir pressões sobre o orçamento das famílias. A combinação de condições climáticas mais favoráveis para a produção agrícola, juntamente com um câmbio relativamente estável, ajudou a conter o custo de itens alimentícios ao longo do ano, liberando parcela maior da renda disponível para outros tipos de consumo. Esse movimento teve impacto direto sobre os indicadores de atividade ligados ao consumo, especialmente no varejo ampliado.

Como reflexo desses fatores, indicadores de consumo mostraram desempenho positivo no final do ano. Em dezembro, o consumo avançou 15,69%, registrando crescimento expressivo em comparação ao mesmo período de 2024, o que reforça a ideia de que a combinação entre expansão do emprego, recuperação da renda real e desaceleração inflacionária contribuiu para sustentar a demanda doméstica mesmo em um ambiente de política monetária ainda restritiva.

Contudo, é importante considerar que 2026 será um ano eleitoral, o que historicamente tende a elevar o grau de incerteza econômica no Brasil. Episódios passados ilustram esse padrão. Em 2014, por exemplo, o processo eleitoral foi acompanhado por deterioração das expectativas fiscais e aumento da volatilidade nos mercados financeiros, o que contribuiu para a desaceleração da atividade econômica, com o PIB crescendo apenas 0,5% naquele ano, após expansão de 3,0% em 2013. De forma semelhante, em 2018, o período eleitoral foi marcado por forte incerteza política e elevada volatilidade cambial, o que levou empresas e investidores a adotar uma postura mais cautelosa em relação a investimentos e decisões de consumo de maior valor.

Esse comportamento ocorre porque anos eleitorais aumentam a incerteza sobre a condução futura da política econômica, especialmente em relação à política fiscal, reformas estruturais e diretrizes regulatórias. Em economias emergentes como o Brasil, essa incerteza tende a impactar diretamente as expectativas de agentes econômicos, levando empresas a postergar investimentos e famílias a adotarem maior cautela em decisões de consumo de longo prazo.

Dessa forma, embora os fundamentos do mercado de trabalho e da renda ainda contribuam para sustentar o consumo das famílias, a proximidade do ciclo eleitoral de 2026 pode introduzir um grau adicional de cautela no comportamento de consumidores e investidores, o que reforça a expectativa de um crescimento econômico mais moderado ao longo do período.

REFERÊNCIAS

INFOMONEY. PIB 2026: o ano em que a economia não desaba, mas também não decola. São Paulo: InfoMoney, 2026. Disponível em: https://www.infomoney.com.br/economia/pib-2026-o-ano-em-que-a-economia-nao-desaba-mas-tambem-nao-decola/ . Acesso em: 05 mar. 2026.

INFOMONEY. Serviços: setor recua em dezembro de 2025, aponta IBGE, com impacto de juros elevados. São Paulo: InfoMoney, 2026. Disponível em: https://www.infomoney.com.br/economia/servicos-ibge-dezembro-2025-queda-juros/ . Acesso em: 05 mar. 2026.

EMPRESA BRASIL DE COMUNICAÇÃO. Prévia do PIB aponta crescimento de 2,5% da economia brasileira em 2025. Brasília, DF: Agência Brasil, 2026. Disponível em: https://agenciabrasil.ebc.com.br/economia/noticia/2026-02/previa-do-pib-aponta-crescimento-de-25-da-economia-brasileira-em-2025 . Acesso em: 05 mar. 2026.

FUNDAÇÃO GETULIO VARGAS. Economia cresceu 2,2% em 2025, segundo o Monitor do PIB-FGV. Rio de Janeiro: FGV IBRE, 2026. Disponível em: https://portalibre.fgv.br/noticias/economia-cresceu-22-em-2025-segundo-o-monitor-do-pib-fgv . Acesso em: 05 mar. 2026.

XP INVESTIMENTOS. Brasil Macro Mensal: crescimento mais forte e inflação mais baixa. São Paulo: XP Investimentos, 2026. Disponível em: https://conteudos.xpi.com.br/economia/brasil-macro-mensal-crescimento-mais-forte-inflacao-mais-baixa/ . Acesso em: 05 mar. 2026.

EDITORA ABRIL. Atividade econômica brasileira cresce 2,5% em 2025. São Paulo: Você S/A, 2026. Disponível em: https://vocesa.abril.com.br/economia/atividade-economica-brasileira-cresce-25-em-2025/ . Acesso em: 05 mar. 2026.

BANCO CENTRAL DO BRASIL. Índice de Atividade Econômica do Banco Central (IBC-Br). Brasília, DF: BCB, 2026. Disponível em: https://www.bcb.gov.br/estatisticas/ibc-br . Acesso em: 05 mar. 2026

INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Indicadores econômicos e sociais. Rio de Janeiro: IBGE, 2026. Disponível em: https://www.ibge.gov.br/indicadores . Acesso em: 05 mar. 2026.

LS0tDQp0aXRsZTogIlJlbGF0w7NyaW8gQXRpdmlkYWRlIEVjb27DtG1pY2EiDQphdXRob3I6ICJKb8OjbyBQZWRybyBHb2RpbmhvIGUgTHVpeiBSZXplbmRlIg0KZGF0ZTogIjIwMjYtMDItMTIiDQpvdXRwdXQ6IA0KIGh0bWxfZG9jdW1lbnQ6DQogIHRvYzogdHJ1ZQ0KICB0aGVtZTogbHVtZW4NCiAgaGlnaGxpZ2h0OiB0YW5nbw0KICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UpDQoNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KHNpZHJhcikNCmxpYnJhcnkoaXBlYWRhdGFyKQ0KbGlicmFyeShxdWFudG1vZCkNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHJiY2IpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkod3JpdGV4bCkNCmxpYnJhcnkoaHR0cikNCmxpYnJhcnkodGlkeXIpDQpgYGANCg0KIyMgKipSZWxhdMOzcmlvIEF0aXZpZGFkZSBFY29uw7RtaWNhIC0gUmVzdWx0YWRvIGRlIDIwMjUgZSBQcmV2aXPDo28gcGFyYSAyMDI2KioNCg0KTyByZWxhdMOzcmlvIGEgc2VndWlyIHRlbSBjb21vIG9iamV0aXZvIGFuYWxpc2FyIGVtcGlyaWNhbWVudGUgbyByZXN1bHRhZG8gZGEgQXRpdmlkYWRlIEVjb27DtG1pY2EgZW0gMjAyNSwgYmVtIGNvbW8gYXMgcHJvamXDp8O1ZXMgcGFyYSBlc3NlIGFubyBkZSAyMDI2Lg0KDQojIyAqUmVzdWx0YWRvIC0gQXRpdmlkYWRlIEVjb27DtG1pY2EgZGUgMjAyNSBlbSBDb21wYXJhw6fDo28gY29tIDIwMjQqDQoNCk8gYW5vIGRlIDIwMjUgZm9pIG1hcmNhZG8gcG9yIHVtYSBhbHRhIHRheGEgZGUganVyb3MsIGNvbSBhIFNFTElDIG1hbnRlbmRvLXNlIGVtIDE1JSBhbyBsb25nbyBkZSB0b2RvIGFubywgbWFzIHRhbWLDqW0gY29tIG9zIGVzdMOtbXVsb3MgZmlzY2FpcyBlIGRlIGNyw6lkaXRvIGltcHVsc2lvbmFuZG8gbyBwYcOtcy4gRGVzc2EgZm9ybWEsIGFvIHNlIGFuYWxpc2FyIG8gUElCIE1lbnNhbCBlIG8gSUJDLUJyIGRvIMO6bHRpbW8gYW5vIGVtIGNvbXBhcmHDp8OjbyBhbyBkZSAyMDI0LCBwZXJjZWJlLXNlIHF1ZSwgYXBlc2FyIGRvcyBqdXJvcyBhbHRvcyBlIGRlIG91dHJvcyBmYXRvcmVzIGRlc2Zhdm9yw6F2ZWlzLCBob3V2ZSBzaW0gdW0gY3Jlc2NpbWVudG8gbm8gYW5vIGRlIDIwMjUg4oCUIDIsNSUgbm8gSUJDLUJyIGUgMiw1JSBubyBQSUIg4oCUIHBvcsOpbSBlbSB1bSByaXRtbyBtZW5vciBzZSBjb21wYXJhZG8gYSAyMDI0LCB0ZW5kw6puY2lhIHF1ZSBvY29ycmV1IHRhbnRvIGNvbSBvIFBJQiBxdWFudG8gY29tIG8gw41uZGljZSBkZSBBdGl2aWRhZGUgRWNvbsO0bWljYS4gQXBlc2FyIGRpc3NvLCBlbSBkYWRvcyBtYWlzIHJlY2VudGVzIG8gSUJDLUJyIHJlY3VvdSAwLjIlLCBldmlkZW5jaWFuZG8gZXNzYSBkZXNhY2VsYXJhw6fDo28gZGEgZWNvbm9taWEsIGNvbSBzZXRvcmVzIGRlIGdyYW5kZSBwZXNvIG5hIGVjb25vbWlhIGNvbW8gQWdyb3BlY3XDoXJpYSwgU2VydmnDp29zIGUgSW5kw7pzdHJhaWEgc2VuZG8gaW1wYWN0YWRvcyBwb3IgZXNzZSByZWN1by4NCg0KTyBjcmVzY2ltZW50byBkbyBQSUIsIHBvcnRhbnRvLCBhY29tcGFuaG91IG8gSUJDLUJyLCByZXBldGluZG8gbyBtZXNtbyBwYWRyw6NvIGRlIGRlc2FjZWxlcmHDp8OjbyBlbSByZWxhw6fDo28gYSAyMDI0LiBFc3NlIGNvbXBvcnRhbWVudG8gw6kgZXhwbGljYWRvLCBwcmluY2lwYWxtZW50ZSwgcGVsYSBtZW5vciBjb250cmlidWnDp8OjbyBkbyBzZXRvciBkZSBTZXJ2acOnb3MgKHF1ZSB0ZW0gbyBtYWlvciBwZXNvIG5hIGVjb25vbWlhKSwgc29tYWRhIGEgcmVkdcOnw7VlcyBubyBzZXRvciBJbmR1c3RyaWFsIGUgbm8gY29tcG9uZW50ZSBkZSBJbXBvc3Rvcy4gQXBlbmFzIGEgQWdyb3BlY3XDoXJpYSBhdW1lbnRvdSBzdWEgcGFydGljaXBhw6fDo28sIGVtYm9yYSBzZXUgaW1wYWN0byBzZWphIGluZmVyaW9yIGFvIGRvIHNldG9yIGRlIFNlcnZpw6dvcy4gTm8gZ2VyYWwsIG8gUElCIGluaWNpb3UgbyBhbm8gY29tIGZvcnRlIGNyZXNjaW1lbnRvIGUgdGVybWlub3UgY29tIGVzdGFiaWxpZGFkZSwgcmVmbGV4byBkbyBhcGVydG8gbW9uZXTDoXJpbyBlIGRhIGltcG9zacOnw6NvIGRlIHRhcmlmYXMgbm8gcGHDrXMuDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCiMgQ29sZXRhciBkYWRvcyBkbyBQSUIgbWVuc2FsIChjw7NkaWdvIDQzODApIC0gZW0gUiQgbWlsaMO1ZXMNCmRhZG9zX3BpYiA8LSBnZXRfc2VyaWVzKDQzODAsIHN0YXJ0X2RhdGUgPSAiMjAyNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMjYtMDEtMzEiKSAlPiUgDQogIHJlbmFtZShQSUJfbWVuc2FsID0gYDQzODBgKQ0KDQojIENvbGV0YXIgZGFkb3MgZG8gSUJDLUJyIGNvbSBhanVzdGUgc2F6b25hbCAoY8OzZGlnbyAyNDM2NCkNCmRhZG9zX2liY2JyIDwtIGdldF9zZXJpZXMoMjQzNjQsIHN0YXJ0X2RhdGUgPSAiMjAyNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMjYtMDEtMzEiKSAlPiUgDQogIHJlbmFtZShJQkNCciA9IGAyNDM2NGApDQoNCiMgUHJlcGFyYXIgZGFkb3MgZG8gUElCIChjb252ZXJ0ZXIgcGFyYSB0cmlsaMO1ZXMpDQpkYWRvc19waWJfbWVuc2FsIDwtIGRhZG9zX3BpYiAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IHllYXIoZGF0ZSksDQogICAgbWVzID0gbW9udGgoZGF0ZSwgbGFiZWwgPSBUUlVFLCBhYmJyID0gRkFMU0UpLA0KICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChkYXRlKSwNCiAgICAjIENPUlJFw4fDg086IG1pbGjDtWVzIHBhcmEgdHJpbGjDtWVzID0gZGl2aWRpciBwb3IgMS4wMDAuMDAwIChuw6NvIDEwMC4wMDApDQogICAgUElCX3RyaWxob2VzID0gcm91bmQoUElCX21lbnNhbCAvIDEwMDAwMCwgMikNCiAgKSAlPiUNCiAgc2VsZWN0KGRhdGUsIHRpbWVzdGFtcCwgUElCX3RyaWxob2VzKQ0KDQojIFByZXBhcmFyIGRhZG9zIGRvIElCQy1Ccg0KZGFkb3NfaWJjYnJfbWVuc2FsIDwtIGRhZG9zX2liY2JyICU+JQ0KICBtdXRhdGUoDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGUpLA0KICAgIElCQ0JyX2FycmVkb25kYWRvID0gcm91bmQoSUJDQnIsIDEpDQogICkgJT4lDQogIHNlbGVjdChkYXRlLCB0aW1lc3RhbXAsIElCQ0JyX2FycmVkb25kYWRvKQ0KDQojIENvbWJpbmFyIGRhZG9zDQpkYWRvc19jb21iaW5hZG9zIDwtIGRhZG9zX3BpYl9tZW5zYWwgJT4lDQogIGxlZnRfam9pbihkYWRvc19pYmNicl9tZW5zYWwsIGJ5ID0gYygiZGF0ZSIsICJ0aW1lc3RhbXAiKSkgJT4lDQogIGFycmFuZ2UoZGF0ZSkNCg0KIyBWZXJpZmljYXIgZGFkb3MNCmlmKG5yb3coZGFkb3NfY29tYmluYWRvcykgPT0gMCkgew0KICBzdG9wKCJEYWRvcyBuw6NvIGVuY29udHJhZG9zLiBWZXJpZmlxdWUgb3MgY8OzZGlnb3MuIikNCn0NCg0KIyBDYWxjdWxhciBsaW1pdGVzIHBhcmEgZWl4b3MNCnBpYl9taW4gPC0gbWluKGRhZG9zX2NvbWJpbmFkb3MkUElCX3RyaWxob2VzLCBuYS5ybSA9IFRSVUUpDQpwaWJfbWF4IDwtIG1heChkYWRvc19jb21iaW5hZG9zJFBJQl90cmlsaG9lcywgbmEucm0gPSBUUlVFKQ0KaWJjX21pbiA8LSBtaW4oZGFkb3NfY29tYmluYWRvcyRJQkNCcl9hcnJlZG9uZGFkbywgbmEucm0gPSBUUlVFKQ0KaWJjX21heCA8LSBtYXgoZGFkb3NfY29tYmluYWRvcyRJQkNCcl9hcnJlZG9uZGFkbywgbmEucm0gPSBUUlVFKQ0KDQojIE1hcmdlbSBkZSA1JQ0KcGliX3JhbmdlIDwtIHBpYl9tYXggLSBwaWJfbWluDQppYmNfcmFuZ2UgPC0gaWJjX21heCAtIGliY19taW4NCg0KIyBDcmlhciBncsOhZmljbyBjb21iaW5hZG8NCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogICMgU8OpcmllIDE6IFBJQiAoY29sdW5hcykgLSBlaXhvIGVzcXVlcmRvDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIFBJQl90cmlsaG9lcykpLA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICBuYW1lID0gIlBJQiBNZW5zYWwgKFIkIHRyaWxow7VlcykiLA0KICAgIGNvbG9yID0gIiMwMjAyM2MiLA0KICAgIHlBeGlzID0gMCwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMiwgdmFsdWVTdWZmaXggPSAiIHRyaWxow7VlcyIpDQogICkgJT4lDQogICMgU8OpcmllIDI6IElCQy1CciAobGluaGEpIC0gZWl4byBkaXJlaXRvDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIElCQ0JyX2FycmVkb25kYWRvKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIklCQy1CciAow61uZGljZSkiLA0KICAgIGNvbG9yID0gIiNmZWI3MTIiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gNCksDQogICAgeUF4aXMgPSAxLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICAjIENvbmZpZ3VyYXIgZWl4b3MgWSBkdWFpcw0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlBJQiAoUiQgdHJpbGjDtWVzKSIpLA0KICAgICAgb3Bwb3NpdGUgPSBGQUxTRSwNCiAgICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0gdHJpIiksDQogICAgICBtaW4gPSBmbG9vcihwaWJfbWluIC0gMC4wNSAqIHBpYl9yYW5nZSksDQogICAgICBtYXggPSBjZWlsaW5nKHBpYl9tYXggKyAwLjA1ICogcGliX3JhbmdlKQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIklCQy1CciAow61uZGljZSAtIGJhc2UgMjAyMj0xMDApIiksDQogICAgICBvcHBvc2l0ZSA9IFRSVUUsDQogICAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICJ7dmFsdWV9IiksDQogICAgICBtaW4gPSBmbG9vcihpYmNfbWluIC0gMC4wNSAqIGliY19yYW5nZSksDQogICAgICBtYXggPSBjZWlsaW5nKGliY19tYXggKyAwLjA1ICogaWJjX3JhbmdlKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgdHlwZSA9ICdkYXRldGltZScsDQogICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAne3ZhbHVlOiViICVZfScpDQogICkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiUElCIHZzLiBJQkMtQnI6IEF0aXZpZGFkZSBFY29uw7RtaWNhIEJyYXNpbGVpcmEiKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJDb21wYXJhw6fDo28gZW50cmUgUElCIE1lbnNhbCAoUiQgdHJpbGjDtWVzKSBlIElCQy1CciAow61uZGljZSkgLSAyMDI0IGEgMjAyNiIpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLCANCiAgICB0ZXh0ID0gIkZvbnRlOiBCYW5jbyBDZW50cmFsIGRvIEJyYXNpbCAoU0dTIC0gQ8OzZGlnb3M6IDQzODAgZSAyNDM2NCkiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAnbW9udGgnLCBjb3VudCA9IDMsIHRleHQgPSAnM00nKSwNCiAgICAgIGxpc3QodHlwZSA9ICdtb250aCcsIGNvdW50ID0gNiwgdGV4dCA9ICc2TScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDEsIHRleHQgPSAnMVknKSwNCiAgICAgIGxpc3QodHlwZSA9ICdhbGwnLCB0ZXh0ID0gJ1RvZG8gcGVyw61vZG8nKQ0KICAgICksDQogICAgc2VsZWN0ZWQgPSAyDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBoZWFkZXJGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweCI+PGI+e3BvaW50LmtleX08L2I+PC9zcGFuPjxici8+JywNCiAgICBwb2ludEZvcm1hdCA9ICc8c3BhbiBzdHlsZT0iY29sb3I6e3Nlcmllcy5jb2xvcn0iPuKXjzwvc3Bhbj4ge3Nlcmllcy5uYW1lfTogPGI+e3BvaW50Lnk6LjFmfXtzZXJpZXMudG9vbHRpcE9wdGlvbnMudmFsdWVTdWZmaXh9PC9iPjxici8+Jw0KICApICU+JQ0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGNvbHVtbiA9IGxpc3QoDQogICAgICBwb2ludFBhZGRpbmcgPSAwLjEsDQogICAgICBncm91cFBhZGRpbmcgPSAwLjA1LA0KICAgICAgYm9yZGVyV2lkdGggPSAwLjUNCiAgICApLA0KICAgIGxpbmUgPSBsaXN0KA0KICAgICAgYW5pbWF0aW9uID0gVFJVRSwNCiAgICAgIGNvbm5lY3ROdWxscyA9IFRSVUUNCiAgICApDQogICkNCmBgYA0KDQojIyAqUHJldmlzw6NvIHBhcmEgbyBhbm8gZGUgMjAyNioNCg0KUGFyYSAyMDI2LCBhIHByb2plw6fDo28gZG8gUElCIHNlIGFwcm94aW1hIGRlIHVtIGNlbsOhcmlvIHByw7N4aW1vIGRlIDEsNyUsIHJlZmxldGluZG8gZXNzYSAicXVlZGEgY29udHJvbGFkYSIgZGEgZWNvbm9taWEuIEVzc2UgbW92aW1lbnRvIMOpIHRhbWLDqW0gdW0gcmVmbGV4byBkYSBzaW5hbGl6YcOnw6NvIGRhIMO6bHRpbWEgcmV1bmnDo28gZG8gQ29wb20sIHF1ZSBpbmRpY291IHVtIGNvcnRlIGRlIGp1cm9zIGF0w6kgbyBmaW5hbCBkbyBhbm8sIGNvbSBhIFNlbGljIGRldmVuZG8gdGVybWluYXIgZW50cmUgMTIlIGUgMTIsNzUlIOKAlCB1bSBwYXRhbWFyIGluZmVyaW9yIGFvIHJlY2VudGUsIHBvcsOpbSBhaW5kYSBtdWl0byByZXN0cml0aXZvLiBOYSBwcsOhdGljYSwgaXNzbyBzaWduaWZpY2EgcXVlLCBlbWJvcmEgaGFqYSB1bSBhbMOtdmlvIGVtIHJlbGHDp8OjbyBhb3MgMTUlIGRlIDIwMjUsIG8gY3LDqWRpdG8gZSBvIGNvbnN1bW8gZGFzIGZhbcOtbGlhcyBkZXZlbSBjb250aW51YXIgb3BlcmFuZG8gc29iIHJlc3RyacOnw6NvLCBhaW5kYSBxdWUgZW0gaW50ZW5zaWRhZGUgbGlnZWlyYW1lbnRlIG1lbm9yLg0KDQpFc3NlIGNlbsOhcmlvIGRvbcOpc3RpY28gb2NvcnJlIGVtIG1laW8gYSB1bWEgZGVzYWNlbGVyYcOnw6NvIGRhIGF0aXZpZGFkZSBnbG9iYWwuIENvbmZvcm1lIHByb2plw6fDtWVzIGRhIE9DREUsIGEgZWNvbm9taWEgbXVuZGlhbCB0ZW0gbW9zdHJhZG8gcmVzaWxpw6puY2lhIGRpYW50ZSBkb3MgY2hvcXVlcyBjb21lcmNpYWlzLCBjb20gY3Jlc2NpbWVudG8gZXN0aW1hZG8gZW0gMywyJSBwYXJhIDIwMjUsIGltcHVsc2lvbmFkbyBwb3IgcG9sw610aWNhcyBtYWNyb2Vjb27DtG1pY2FzIGFpbmRhIGZhdm9yw6F2ZWlzLiBObyBlbnRhbnRvLCBvcyBpbXBhY3RvcyBkYXMgdGFyaWZhcyBpbXBsZW1lbnRhZGFzIHBlbG9zIEVzdGFkb3MgVW5pZG9zIGFpbmRhIG7Do28gc2UgbWF0ZXJpYWxpemFyYW0gcG9yIGNvbXBsZXRvIGUgdGVuZGVtIGEgcHJvdm9jYXIgdW1hIGRlc2FjZWxlcmHDp8OjbyBkbyBjcmVzY2ltZW50byBnbG9iYWwsIHF1ZSBkZXZlIHJlY3VhciBwYXJhIDIsOSUgZW0gMjAyNi4NCg0KQWzDqW0gZGlzc28sIMOpIGltcG9ydGFudGUgY29uc2lkZXJhciBvIGNvbXBvbmVudGUgcG9sw610aWNvIGRvIGNpY2xvIGVjb27DtG1pY28gYnJhc2lsZWlybywgdW1hIHZleiBxdWUgMjAyNiBzZXLDoSB1bSBhbm8gZGUgZWxlacOnw7VlcyBwcmVzaWRlbmNpYWlzLiBIaXN0b3JpY2FtZW50ZSwgcGVyw61vZG9zIGVsZWl0b3JhaXMgY29zdHVtYW0gZ2VyYXIgbWFpb3Igdm9sYXRpbGlkYWRlIG1hY3JvZWNvbsO0bWljYSBlIG11ZGFuw6dhcyBkZSBleHBlY3RhdGl2YXMgcG9yIHBhcnRlIGRlIGFnZW50ZXMgZWNvbsO0bWljb3MgZSBpbnZlc3RpZG9yZXMuIFVtIGV4ZW1wbG8gcmVsZXZhbnRlIG9jb3JyZXUgZW0gMjAxNCwgcXVhbmRvIG8gYW1iaWVudGUgZWxlaXRvcmFsIGZvaSBhY29tcGFuaGFkbyBwb3IgZGV0ZXJpb3Jhw6fDo28gZGFzIGV4cGVjdGF0aXZhcyBmaXNjYWlzLCBhdW1lbnRvIGRhIGluY2VydGV6YSBwb2zDrXRpY2EgZSByZWR1w6fDo28gZG8gaW52ZXN0aW1lbnRvIHByaXZhZG8uIE5hcXVlbGUgcGVyw61vZG8sIGEgdGF4YSBkZSBjcmVzY2ltZW50byBkbyBQSUIgZGVzYWNlbGVyb3Ugc2lnbmlmaWNhdGl2YW1lbnRlLCBwYXNzYW5kbyBkZSAzLDAlIGVtIDIwMTMgcGFyYSBhcGVuYXMgMCw1JSBlbSAyMDE0LCByZWZsZXRpbmRvIHVtIGNlbsOhcmlvIGRlIGluY2VydGV6YSBlY29uw7RtaWNhIGUgYWp1c3RlIGRlIGV4cGVjdGF0aXZhcy4NCg0KRXNzZSBwYWRyw6NvIGhpc3TDs3JpY28gc3VnZXJlIHF1ZSBhbm9zIGVsZWl0b3JhaXMgdGVuZGVtIGEgaW50ZW5zaWZpY2FyIGEgY2F1dGVsYSBkZSBlbXByZXNhcyBlIGludmVzdGlkb3JlcywgZXNwZWNpYWxtZW50ZSBlbSBlY29ub21pYXMgZW1lcmdlbnRlcyBjb21vIG8gQnJhc2lsLCBvbmRlIG11ZGFuw6dhcyBuYSBjb25kdcOnw6NvIGRhIHBvbMOtdGljYSBmaXNjYWwsIG1vbmV0w6FyaWEgZSByZWd1bGF0w7NyaWEgcG9kZW0gYWx0ZXJhciBzaWduaWZpY2F0aXZhbWVudGUgYXMgcGVyc3BlY3RpdmFzIGVjb27DtG1pY2FzLiBEZXNzYSBmb3JtYSwgYWluZGEgcXVlIGEgcG9sw610aWNhIG1vbmV0w6FyaWEgZXN0ZWphIGVtIHRyYWpldMOzcmlhIGRlIGZsZXhpYmlsaXphw6fDo28gbW9kZXJhZGEsIGEgcHJveGltaWRhZGUgZG8gY2ljbG8gZWxlaXRvcmFsIGRlIDIwMjYgcG9kZSBjb250cmlidWlyIHBhcmEgbWFudGVyIG8gYW1iaWVudGUgZGUgaW52ZXN0aW1lbnRvcyBtYWlzIGNhdXRlbG9zbywgcmVmb3LDp2FuZG8gbyBjZW7DoXJpbyBkZSBjcmVzY2ltZW50byBtb2RlcmFkbyBwcm9qZXRhZG8gcGFyYSBvIHBlcsOtb2RvDQoNCiMjICpBdGl2aWRhZGUgRWNvbsO0bWljYSBub3MgU2V0b3JlcyAoQWdyb3BlY3XDoXJpYS9JbmTDunN0cmlhL1NlcnZpw6dvcykqDQoNCkFvIGFuYWxpc2FyIGRpZmVyZW50ZXMgc2V0b3JlcyBkYSBlY29ub21pYSBwZXJjZWJlLXNlIG8gbyBtZXNtbyBhdW1lbnRvIGRvIMONbmRpY2UgZGUgQXRpdmlkYWRlIEVjb27DtG1pY2EgYWdvcmEgZW0gbWVpbyBhb3MgZGlmZXJlbnRlcyBzZXRvcmVzIGRhIGVjb25vbWlhIG5hY2lvbmFsLCBhcyBhbHRhcyBmb3JhbSBkZSAxMywxJSBuYSBhZ3JvcGVjdcOhcmlhLCAxLDUlIG5hIGluZMO6c3RyaWEgZSAyLDElIGVtIHNlcnZpw6dvcy4gDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQojIENvbGV0YXIgZGFkb3MgZG9zIHNldG9yZXMgKElCQy1CciBzZXRvcmlhbCkgZGUgamFuZWlyby8yMDI0IGF0w6kgZGV6ZW1icm8vMjAyNQ0KIyBBVEVOw4fDg086IFPDo28gbsO6bWVyb3Mtw61uZGljZSBjb20gYmFzZSAyMDIyID0gMTAwLCBOw4NPIHPDo28gdmFsb3JlcyBlbSBSJCBtaWxow7Vlcw0KDQpkYWRvc19zZXJ2aWNvcyA8LSBnZXRfc2VyaWVzKDI5NjA2LCBzdGFydF9kYXRlID0gIjIwMjQtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDI1LTEyLTMwIikgJT4lIA0KICByZW5hbWUoU2Vydmljb3MgPSBgMjk2MDZgKSAgIyBJQkMtQnIgU2VydmnDp29zICjDrW5kaWNlKSAtIGNvbSBhanVzdGUgc2F6b25hbA0KDQpkYWRvc19hZ3JvIDwtIGdldF9zZXJpZXMoMjk2MDIsIHN0YXJ0X2RhdGUgPSAiMjAyNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMjUtMTItMzAiKSAlPiUgDQogIHJlbmFtZShBZ3JvcGVjdWFyaWEgPSBgMjk2MDJgKSAgIyBJQkMtQnIgQWdyb3BlY3XDoXJpYSAow61uZGljZSkgLSBjb20gYWp1c3RlIHNhem9uYWwNCg0KZGFkb3NfaW5kdXN0cmlhIDwtIGdldF9zZXJpZXMoMjk2MDQsIHN0YXJ0X2RhdGUgPSAiMjAyNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMjUtMTItMzAiKSAlPiUgDQogIHJlbmFtZShJbmR1c3RyaWEgPSBgMjk2MDRgKSAgIyBJQkMtQnIgSW5kw7pzdHJpYSAow61uZGljZSkgLSBjb20gYWp1c3RlIHNhem9uYWwNCg0KIyBDb21iaW5hciB0b2RvcyBvcyBkYWRvcw0KZGFkb3Nfc2V0b3JlcyA8LSBkYWRvc19zZXJ2aWNvcyAlPiUNCiAgbGVmdF9qb2luKGRhZG9zX2Fncm8sIGJ5ID0gImRhdGUiKSAlPiUNCiAgbGVmdF9qb2luKGRhZG9zX2luZHVzdHJpYSwgYnkgPSAiZGF0ZSIpICU+JQ0KICBtdXRhdGUoDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGUpLA0KICAgICMgTWFudGVyIHZhbG9yZXMgb3JpZ2luYWlzIGRvIMOtbmRpY2UgKGJhc2UgMjAyMiA9IDEwMCkNCiAgICBTZXJ2aWNvc19pbmRpY2UgPSBTZXJ2aWNvcywNCiAgICBBZ3JvcGVjdWFyaWFfaW5kaWNlID0gQWdyb3BlY3VhcmlhLA0KICAgIEluZHVzdHJpYV9pbmRpY2UgPSBJbmR1c3RyaWENCiAgKSAlPiUNCiAgc2VsZWN0KGRhdGUsIHRpbWVzdGFtcCwgU2Vydmljb3NfaW5kaWNlLCBBZ3JvcGVjdWFyaWFfaW5kaWNlLCBJbmR1c3RyaWFfaW5kaWNlKSAlPiUNCiAgYXJyYW5nZShkYXRlKQ0KDQojIFZlcmlmaWNhciBzZSBow6EgZGFkb3MNCmlmKG5yb3coZGFkb3Nfc2V0b3JlcykgPT0gMCkgew0KICBzdG9wKCJOw6NvIGZvcmFtIGVuY29udHJhZG9zIGRhZG9zIHBhcmEgbyBwZXLDrW9kbyBzZWxlY2lvbmFkby4gVmVyaWZpcXVlIHNlIG9zIGPDs2RpZ29zIGVzdMOjbyBjb3JyZXRvcyBlIHNlIG9zIGRhZG9zIGVzdMOjbyBkaXNwb27DrXZlaXMuIikNCn0NCg0KIyBDYWxjdWxhciBsaW1pdGVzIGRvIGVpeG8gWSBwYXJhIHpvb20gYXV0b23DoXRpY28NCnlfbWluIDwtIG1pbihjKGRhZG9zX3NldG9yZXMkU2Vydmljb3NfaW5kaWNlLCANCiAgICAgICAgICAgICAgIGRhZG9zX3NldG9yZXMkQWdyb3BlY3VhcmlhX2luZGljZSwgDQogICAgICAgICAgICAgICBkYWRvc19zZXRvcmVzJEluZHVzdHJpYV9pbmRpY2UpLCBuYS5ybSA9IFRSVUUpDQp5X21heCA8LSBtYXgoYyhkYWRvc19zZXRvcmVzJFNlcnZpY29zX2luZGljZSwgDQogICAgICAgICAgICAgICBkYWRvc19zZXRvcmVzJEFncm9wZWN1YXJpYV9pbmRpY2UsIA0KICAgICAgICAgICAgICAgZGFkb3Nfc2V0b3JlcyRJbmR1c3RyaWFfaW5kaWNlKSwgbmEucm0gPSBUUlVFKQ0KDQojIEFkaWNpb25hciB1bWEgbWFyZ2VtIGRlIDUlIHBhcmEgbWVsaG9yIHZpc3VhbGl6YcOnw6NvDQp5X3JhbmdlIDwtIHlfbWF4IC0geV9taW4NCnlfbWluX2FqdXN0YWRvIDwtIG1heCgwLCBmbG9vcih5X21pbiAtIDAuMDUgKiB5X3JhbmdlKSkNCnlfbWF4X2FqdXN0YWRvIDwtIGNlaWxpbmcoeV9tYXggKyAwLjA1ICogeV9yYW5nZSkNCg0KIyBDcmlhciBvIGdyw6FmaWNvIGNvbSBwb250b3MgKG1hcmtlcnMpIG5hcyBsaW5oYXMNCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogICMgU8OpcmllOiBTZXJ2acOnb3MNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3Nfc2V0b3JlcyAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgU2Vydmljb3NfaW5kaWNlKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIklCQy1CciBTZXJ2acOnb3MiLA0KICAgIGNvbG9yID0gIiM0NmIxZTEiLCAgIyBBenVsIGNsYXJvDQogICAgbGluZVdpZHRoID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KA0KICAgICAgZW5hYmxlZCA9IFRSVUUsICAgICAgICAjIEhBQklMSVRBIE9TIFBPTlRPUw0KICAgICAgcmFkaXVzID0gMywgICAgICAgICAgICAjIFRhbWFuaG8gZG8gcG9udG8NCiAgICAgIHN5bWJvbCA9ICJjaXJjbGUiLCAgICAgIyBGb3JtYXRvOiBjw61yY3Vsbw0KICAgICAgZmlsbENvbG9yID0gIiM0NmIxZTEiLCAjIENvciBkZSBwcmVlbmNoaW1lbnRvDQogICAgICBsaW5lV2lkdGggPSAxLCAgICAgICAgICMgQm9yZGEgZG8gcG9udG8NCiAgICAgIGxpbmVDb2xvciA9ICIjRkZGRkZGIiAgIyBDb3IgZGEgYm9yZGEgKGJyYW5jbyBwYXJhIGRlc3RhY2FyKQ0KICAgICksDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICAjIFPDqXJpZTogQWdyb3BlY3XDoXJpYQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19zZXRvcmVzICU+JSBzZWxlY3QodGltZXN0YW1wLCBBZ3JvcGVjdWFyaWFfaW5kaWNlKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIklCQy1CciBBZ3JvcGVjdcOhcmlhIiwNCiAgICBjb2xvciA9ICIjZmViNzEyIiwgICMgRG91cmFkbw0KICAgIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdCgNCiAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgcmFkaXVzID0gMywNCiAgICAgIHN5bWJvbCA9ICJjaXJjbGUiLA0KICAgICAgZmlsbENvbG9yID0gIiNmZWI3MTIiLA0KICAgICAgbGluZVdpZHRoID0gMSwNCiAgICAgIGxpbmVDb2xvciA9ICIjRkZGRkZGIg0KICAgICksDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICAjIFPDqXJpZTogSW5kw7pzdHJpYQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19zZXRvcmVzICU+JSBzZWxlY3QodGltZXN0YW1wLCBJbmR1c3RyaWFfaW5kaWNlKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIklCQy1CciBJbmTDunN0cmlhIiwNCiAgICBjb2xvciA9ICIjMDIwMjNjIiwgICMgQXp1bCBlc2N1cm8NCiAgICBsaW5lV2lkdGggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoDQogICAgICBlbmFibGVkID0gVFJVRSwNCiAgICAgIHJhZGl1cyA9IDMsDQogICAgICBzeW1ib2wgPSAiY2lyY2xlIiwNCiAgICAgIGZpbGxDb2xvciA9ICIjMDIwMjNjIiwNCiAgICAgIGxpbmVXaWR0aCA9IDEsDQogICAgICBsaW5lQ29sb3IgPSAiI0ZGRkZGRiINCiAgICApLA0KICAgIHlBeGlzID0gMCwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMSkNCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiw41uZGljZSAoYmFzZTogMjAyMiA9IDEwMCkiKSwNCiAgICBvcHBvc2l0ZSA9IEZBTFNFLA0KICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0iKSwNCiAgICBtaW4gPSB5X21pbl9hanVzdGFkbywNCiAgICBtYXggPSB5X21heF9hanVzdGFkbywNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCgNCiAgICAgICAgdmFsdWUgPSAxMDAsDQogICAgICAgIGNvbG9yID0gIiM2NjY2NjYiLA0KICAgICAgICBkYXNoU3R5bGUgPSAiZGFzaCIsDQogICAgICAgIHdpZHRoID0gMSwNCiAgICAgICAgbGFiZWwgPSBsaXN0KHRleHQgPSAiQmFzZSAoMjAyMiA9IDEwMCkiKQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgdHlwZSA9ICdkYXRldGltZScsDQogICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAne3ZhbHVlOiViICVZfScpDQogICkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiSUJDLUJyIHBvciBTZXRvciAtIEF0aXZpZGFkZSBFY29uw7RtaWNhIGNvbSBBanVzdGUgU2F6b25hbCIpICU+JQ0KICBoY19zdWJ0aXRsZSh0ZXh0ID0gIsONbmRpY2UgYmFzZTogMjAyMiA9IDEwMCAtIFBlcsOtb2RvOiBKYW4vMjAyNCBhIERlei8yMDI1IikgJT4lDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsIA0KICAgIHRleHQgPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsIChTR1MgLSBDw7NkaWdvczogMjk2MDYsIDI5NjAyLCAyOTYwNCkiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAnbW9udGgnLCBjb3VudCA9IDMsIHRleHQgPSAnM00nKSwNCiAgICAgIGxpc3QodHlwZSA9ICdtb250aCcsIGNvdW50ID0gNiwgdGV4dCA9ICc2TScpLA0KICAgICAgbGlzdCh0eXBlID0gJ2FsbCcsIHRleHQgPSAnVG9kbyBwZXLDrW9kbycpDQogICAgKSwNCiAgICBzZWxlY3RlZCA9IDINCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGhlYWRlckZvcm1hdCA9ICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4Ij48Yj57cG9pbnQua2V5fTwvYj48L3NwYW4+PGJyLz4nLA0KICAgIHBvaW50Rm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJjb2xvcjp7c2VyaWVzLmNvbG9yfSI+4pePPC9zcGFuPiB7c2VyaWVzLm5hbWV9OiA8Yj57cG9pbnQueTouMWZ9PC9iPjxici8+JywNCiAgICB2YWx1ZURlY2ltYWxzID0gMQ0KICApICU+JQ0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBUUlVFLA0KICAgICAgY29ubmVjdE51bGxzID0gVFJVRQ0KICAgICkNCiAgKQ0KYGBgDQpBcGVzYXIgZGEgZGVzYWNlbGFyYcOnw6NvIG8gc2V0b3IgZGUgc2VydmnDp29zIHNlIG1hbnRldmUgYXF1ZWNpZG8gYW8gbG9uZ28gZG8gYW5vLCBjb20gdW1hIGluZmxhw6fDo28gcGVyc2lzdGVudGUgcXVlIGltcGVkaXUgdW1hIGNyZXNjZW50ZSBtYWlvciBuZXNzZSBtZXJjYWRvLiBPcyBzZXJ2acOnb3MgZGUgaW5mb3JtYcOnw6NvIGUgY29tdW5pY2HDp8OjbyBjcmVzY2VyYW0gMS43JSBlIGFxdWVsZXMgcHJlc3RhZG9zIGFzIGZhbcOtbGlhcyBjcmVzY2VyYW0gMS4xJSBPIGFncm9uZWfDs2NpbyBwZXJtYW5lY2Ugc2VuZG8gdW0gcGlsYXIgZnVuZGFtZW50YWwgcGFyYSBhIGVjb25vbWlhIGRvIHBhw61zLCBlbSB1bSBjb250ZXh0byBkZSByZWN1cGVyYcOnw6NvIGVtIGN1bHR1cmFzIGVzdHJhdMOpZ2ljYXMgY29tIGluZGljYcOnw7VlcyBkZSB1bWEgc2FmcmEgZGUgZ3LDo29zIDIwMjQvMjUgZXN0w6EgZW0gMzUwIG1pbGjDtWVzIGRlIHRvbmVsYWRhcy4gTyBkZXNlbXBlbmhvIGRvIEFncm8gdGVtIGVmZWl0byBkaXJldG8gZG8gUElCIGUgbmEgYmFsYW7Dp2EgY29tZXJjaWFsIGNvbSBvIElCQy1CciBjb250cmlidWluZG8gcGFyYSBhIGVsYWJvcmHDp8OjbyBkYSBwb2zDrXRpY2EgbW9uZXTDoXJpYS4gTyBzZXRvciBpbmR1c3RyaWFsIHBvZGUgYXByZXNlbnRhciBkZXNhZmlvcyBlbSAyMDI2IGVtIHJlbGHDp8OjbyBhb3MgZXN0b3F1ZXMgZWxldmFkb3MgZSB1bSBjw6JtYmlvIG3DqWRpbyBlc3BlY3VsYWRvIHBhcmEgUiQgNSw1MC4gICANCg0KDQojIyAqQ2Vuw6FyaW8gZG8gY3LDqWRpdG8gZGUgY29uc3VtbyBuYSBhdGl2aWRhZGUgZWNvbsO0bWljYSBicmFzaWxlaXJhKg0KDQpBIGRpbsOibWljYSBkbyBjcsOpZGl0byBjb25zdGl0dWkgdW0gZG9zIHBpbGFyZXMgZGEgYXRpdmlkYWRlIGVjb27DtG1pY2Egbm8gQnJhc2lsLCBmdW5jaW9uYW5kbyBjb21vIG1lY2FuaXNtbyByZWxldmFudGUgZGUgYW1wbGlmaWNhw6fDo28gZG8gY2ljbG8gZG9tw6lzdGljby4gQW8gZmFjaWxpdGFyIG8gYWNlc3NvIGEgZmluYW5jaWFtZW50byBwYXJhIGZhbcOtbGlhcyBlIGVtcHJlc2FzLCBvIGNyw6lkaXRvIHN1c3RlbnRhIG8gY29uc3VtbywgY29udHJpYnVpIHBhcmEgYSBleHBhbnPDo28gZGEgZGVtYW5kYSBhZ3JlZ2FkYSBlIGluZmx1ZW5jaWEgZGlyZXRhbWVudGUgbyByaXRtbyBkZSBjcmVzY2ltZW50byBlY29uw7RtaWNvLg0KTyBjcsOpZGl0byBhdHVhIGNvbW8gbWVjYW5pc21vIGRlIGFtcGxpZmljYcOnw6NvIGRvIGNpY2xvIGVjb27DtG1pY28sIGVtIHF1ZSBhZmV0YSBkaXJldGFtZW50ZSBhIGNhcGFjaWRhZGUgZGUgY29uc3VtbyBkYXMgZmFtw61saWFzLkVtIHBlcsOtb2RvcyBkZSBtZWxob3JhIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8sIGEgZXhwYW5zw6NvIGRhcyBjb25jZXNzw7VlcyByZWZvcsOnYSBvIGNyZXNjaW1lbnRvIGRhIGRlbWFuZGEgZG9tw6lzdGljYTsgcG9yIG91dHJvIGxhZG8sIGVtIG1vbWVudG9zIGRlIGRlc2FjZWxlcmHDp8OjbywgbyByZWN1byBkbyBjcsOpZGl0byB0ZW5kZSBhIGludGVuc2lmaWNhciBhIGNvbnRyYcOnw6NvIGRhIGF0aXZpZGFkZS4NCkEgYW7DoWxpc2UgY29uanVudGEgZGEgbWFzc2EgZGUgcmVuZGltZW50byByZWFsIGhhYml0dWFsIGRhcyBmYW3DrWxpYXMgZSBkYXMgY29uY2Vzc8O1ZXMgZGUgY3LDqWRpdG8gY29tIHJlY3Vyc29zIGxpdnJlcyBwYXJhIHBlc3NvYXMgZsOtc2ljYXMgc3VnZXJlIHF1ZSwgZW0gZGV0ZXJtaW5hZG9zIG1vbWVudG9zIGRvIGNpY2xvIGVjb27DtG1pY28gYnJhc2lsZWlybywgYSBkaW7Dom1pY2EgZG8gY3LDqWRpdG8gYXNzdW1lIGNhcsOhdGVyIGFudGVjZWRlbnRlIGVtIHJlbGHDp8OjbyDDoCBldm9sdcOnw6NvIGRhIHJlbmRhIGFncmVnYWRhLiBPYnNlcnZhLXNlIHF1ZSBwZXLDrW9kb3MgZGUgYWNlbGVyYcOnw6NvIG5hcyBjb25jZXNzw7VlcyB0ZW5kZW0gYSBwcmVjZWRlciBtb3ZpbWVudG9zIG1haXMgaW50ZW5zb3MgZGUgcmVjdXBlcmHDp8OjbyBkYSBtYXNzYSBzYWxhcmlhbCwgaW5kaWNhbmRvIHF1ZSBhIGV4cGFuc8OjbyBkbyBmaW5hbmNpYW1lbnRvIHBvZGUgYXR1YXIgY29tbyB1bSBkb3MgcHJpbWVpcm9zIHNpbmFpcyBkZSBtZWxob3JhIG5hIGRlbWFuZGEgZG9tw6lzdGljYS4NCkVudHJlIDIwMTcgZSAyMDE5LCBwb3IgZXhlbXBsbywgYXMgY29uY2Vzc8O1ZXMgw6BzIGZhbcOtbGlhcyBhcHJlc2VudGFyYW0gdHJhamV0w7NyaWEgZGUgY3Jlc2NpbWVudG8gY29uc2lzdGVudGUsIHNhaW5kbyBkZSBwYXRhbWFyZXMgcHLDs3hpbW9zIGEgUiQgMTEwIGJpbGjDtWVzIG1lbnNhaXMgcGFyYSBuw612ZWlzIGFjaW1hIGRlIFIkIDE1MCBiaWxow7VlcywgZW5xdWFudG8gYSBtYXNzYSBzYWxhcmlhbCBhdmFuw6dhdmEgZGUgZm9ybWEgbWFpcyBncmFkdWFsLiBFc3NlIGNvbXBvcnRhbWVudG8gc3VnZXJlIHF1ZSBhIHJldG9tYWRhIGRvIGNvbnN1bW8gb2NvcnJldSBpbmljaWFsbWVudGUgcG9yIG1laW8gZGEgYW1wbGlhw6fDo28gZG8gY3LDqWRpdG8sIGNvbSBhIHJlbmRhIHJlYWdpbmRvIGRlIG1hbmVpcmEgbWFpcyBsZW50YSBhbyBsb25nbyBkbyBwcm9jZXNzbyBkZSByZWN1cGVyYcOnw6NvIGVjb27DtG1pY2EuDQpEaW7Dom1pY2Egc2VtZWxoYW50ZSBwb2RlIHNlciBvYnNlcnZhZGEgbm8gcGVyw61vZG8gcG9zdGVyaW9yIGFvIGNob3F1ZSBkYSBwYW5kZW1pYS4gQXDDs3MgYSBmb3J0ZSBjb250cmHDp8OjbyBkZSAyMDIwLCBhcyBjb25jZXNzw7VlcyBkZSBjcsOpZGl0byDDoHMgcGVzc29hcyBmw61zaWNhcyByZXRvbWFyYW0gdHJhamV0w7NyaWEgZGUgYWx0YSBkZSBtYW5laXJhIHJlbGF0aXZhbWVudGUgcsOhcGlkYSwgdWx0cmFwYXNzYW5kbyBSJCAyMDAgYmlsaMO1ZXMgbWVuc2FpcyBqw6EgZW0gMjAyMSBlIGFsY2Fuw6dhbmRvIG7DrXZlaXMgc3VwZXJpb3JlcyBhIFIkIDMwMCBiaWxow7VlcyBlbSAyMDI1LiBBIG1hc3NhIHNhbGFyaWFsIHJlYWwsIHBvciBzdWEgdmV6LCBhcHJlc2VudG91IHJlY3VwZXJhw6fDo28gbWFpcyBncmFkdWFsLCBhdmFuw6dhbmRvIGRlIGNlcmNhIGRlIFIkIDI3MyBiaWxow7VlcyBlbSAyMDIxIHBhcmEgYXByb3hpbWFkYW1lbnRlIFIkIDM2NyBiaWxow7VlcyBhbyBmaW5hbCBkZSAyMDI1LiBFc3NlIGRlc2NvbXBhc3NvIHRlbXBvcmFsIHJlZm9yw6dhIGEgaGlww7N0ZXNlIGRlIHF1ZSBvIGNyw6lkaXRvIHBvZGUgYXR1YXIgY29tbyBtZWNhbmlzbW8gZGUgYW50ZWNpcGHDp8OjbyBkbyBjb25zdW1vLCBwZXJtaXRpbmRvIHF1ZSBmYW3DrWxpYXMgYWp1c3RlbSBzZXVzIGdhc3RvcyBhbnRlcyBkYSBjb25zb2xpZGHDp8OjbyBwbGVuYSBkbyBjcmVzY2ltZW50byBkYSByZW5kYS4NCkRvIHBvbnRvIGRlIHZpc3RhIGVjb27DtG1pY28sIGVzc2UgY29tcG9ydGFtZW50byBwb2RlIHNlciBleHBsaWNhZG8gcGVsYSBtYWlvciBzZW5zaWJpbGlkYWRlIGRhcyBjb25jZXNzw7VlcyDDoHMgY29uZGnDp8O1ZXMgZmluYW5jZWlyYXMgZSDDoHMgZXhwZWN0YXRpdmFzLiBBbHRlcmHDp8O1ZXMgbmEgcGVyY2Vww6fDo28gZGUgcmlzY28sIG5hIGxpcXVpZGV6IGRvIHNpc3RlbWEgZmluYW5jZWlybyBvdSBuYXMgZXhwZWN0YXRpdmFzIGVtIHJlbGHDp8OjbyBhbyBjaWNsbyBtb25ldMOhcmlvIHRlbmRlbSBhIGltcGFjdGFyIHJhcGlkYW1lbnRlIGEgb2ZlcnRhIGUgYSBkZW1hbmRhIHBvciBjcsOpZGl0bywgZW5xdWFudG8gYSBldm9sdcOnw6NvIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8gZSBkYSByZW5kYSBvY29ycmUgZGUgZm9ybWEgbWFpcyBncmFkdWFsLiBBc3NpbSwgYSBleHBhbnPDo28gZG8gY3LDqWRpdG8gbsOjbyBhcGVuYXMgcmVmbGV0ZSBhIGF0aXZpZGFkZSBlY29uw7RtaWNhIGNvcnJlbnRlLCBtYXMgdGFtYsOpbSBwb2RlIHNpbmFsaXphciBtdWRhbsOnYXMgZnV0dXJhcyBubyByaXRtbyBkYSBkZW1hbmRhIGRvbcOpc3RpY2EuDQpEZXNzYSBmb3JtYSwgb3MgZGFkb3MgcmVjZW50ZXMgc3VnZXJlbSBxdWUgYXMgY29uY2Vzc8O1ZXMgw6BzIGZhbcOtbGlhcyBkZXNlbXBlbmhhbSBwYXBlbCByZWxldmFudGUgY29tbyBpbmRpY2Fkb3IgYW50ZWNlZGVudGUgZG8gY2ljbG8gZWNvbsO0bWljbyBicmFzaWxlaXJvLiBBbyBhbXBsaWFyIGEgY2FwYWNpZGFkZSBkZSBjb25zdW1vIGVtIG1vbWVudG9zIGRlIG1lbGhvcmEgZGFzIGNvbmRpw6fDtWVzIGZpbmFuY2VpcmFzLCBvIGNyw6lkaXRvIGF0dWEgY29tbyB2ZXRvciBkZSBwcm9wYWdhw6fDo28gZGEgYXRpdmlkYWRlLCByZWZvcsOnYW5kbyBtb3ZpbWVudG9zIGRlIGV4cGFuc8OjbyBlIGNvbnRyaWJ1aW5kbyBwYXJhIGEgZGluw6JtaWNhIG9ic2VydmFkYSBuYSBtYXNzYSBzYWxhcmlhbCBhbyBsb25nbyBkbyB0ZW1wby4NCkEgYW7DoWxpc2UgZGEgZXZvbHXDp8OjbyBjb25qdW50YSBkYSBtYXNzYSBzYWxhcmlhbCByZWFsIGUgZGFzIGNvbmNlc3PDtWVzIGRlIGNyw6lkaXRvIMOgcyBwZXNzb2FzIGbDrXNpY2FzIGV2aWRlbmNpYSBvIHBhcGVsIGNlbnRyYWwgZG8gY3LDqWRpdG8gbmEgZGluw6JtaWNhIHJlY2VudGUgZGEgZWNvbm9taWEgYnJhc2lsZWlyYS4gQW8gbG9uZ28gZG8gY2ljbG8sIG9ic2VydmEtc2UgcXVlIGEgZXhwYW5zw6NvIGRhcyBjb25jZXNzw7VlcyBuw6NvIGFwZW5hcyBhY29tcGFuaGEgYSBtZWxob3JhIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8sIG1hcywgZW0gZGV0ZXJtaW5hZG9zIG1vbWVudG9zLCBhbnRlY2VkZSBhIGFjZWxlcmHDp8OjbyBtYWlzIGludGVuc2EgZGEgcmVuZGEgYWdyZWdhZGEsIHN1Z2VyaW5kbyBxdWUgbyBjcsOpZGl0byBhdHVhIGNvbW8gbWVjYW5pc21vIGRlIGFudGVjaXBhw6fDo28gZG8gY29uc3VtbyBlIGNvbW8gYW1wbGlmaWNhZG9yIGRhIGRlbWFuZGEgZG9tw6lzdGljYS4NCg0KRGVzc2EgZm9ybWEsIG9zIGRhZG9zIGFuYWxpc2Fkb3Mgc3VnZXJlbSBxdWUgbyBjcsOpZGl0byBuw6NvIGRldmUgc2VyIGludGVycHJldGFkbyBhcGVuYXMgY29tbyB2YXJpw6F2ZWwgYXV4aWxpYXIsIG1hcyBjb21vIGNvbXBvbmVudGUgZXN0cnV0dXJhbCBkYSBkaW7Dom1pY2EgbWFjcm9lY29uw7RtaWNhIGJyYXNpbGVpcmEsIGRlc2VtcGVuaGFuZG8gcGFwZWwgZGV0ZXJtaW5hbnRlIHRhbnRvIG5hIGludGVuc2lmaWNhw6fDo28gZGFzIGZhc2VzIGRlIGV4cGFuc8OjbyBxdWFudG8gbmEgcHJvcGFnYcOnw6NvIGRlIHBlcsOtb2RvcyBkZSBkZXNhY2VsZXJhw6fDo28uDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCiMgQ29sZXRhciBkYWRvcw0KIyAyODU0NTogTWFzc2EgZGUgcmVuZGltZW50byByZWFsIGhhYml0dWFsIChSJCBtaWxow7VlcykNCmRhZG9zX3JlbmRhIDwtIGdldF9zZXJpZXMoMjg1NDUsIHN0YXJ0X2RhdGUgPSAiMjAyMC0wMS0wMSIsIGVuZF9kYXRlID0gU3lzLkRhdGUoKSkgJT4lIA0KICByZW5hbWUoTWFzc2FfcmVuZGEgPSBgMjg1NDVgKQ0KDQojIDI0NDQ0OiBDb25jZXNzw7VlcyBkZSBjcsOpZGl0byAtIHJlY3Vyc29zIGxpdnJlcyAtIHNhem9uYWxtZW50ZSBhanVzdGFkYXMgKFIkIG1pbGjDtWVzKQ0KZGFkb3NfY3JlZGl0byA8LSBnZXRfc2VyaWVzKDI0NDQ0LCBzdGFydF9kYXRlID0gIjIwMjAtMDEtMDEiLCBlbmRfZGF0ZSA9IFN5cy5EYXRlKCkpICU+JSANCiAgcmVuYW1lKENyZWRpdG8gPSBgMjQ0NDRgKQ0KDQojIENvbWJpbmFyIGRhZG9zDQpkYWRvc19jb21iaW5hZG9zIDwtIGRhZG9zX3JlbmRhICU+JQ0KICBsZWZ0X2pvaW4oZGFkb3NfY3JlZGl0bywgYnkgPSAiZGF0ZSIpICU+JQ0KICBtdXRhdGUoDQogICAgYW5vID0geWVhcihkYXRlKSwNCiAgICBtZXMgPSBtb250aChkYXRlLCBsYWJlbCA9IFRSVUUsIGFiYnIgPSBGQUxTRSksDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGUpLA0KICAgICMgQ29udmVydGVyIGFtYmFzIHBhcmEgYmlsaMO1ZXMgKHZpc3VhbGl6YcOnw6NvIG1haXMgbGltcGEpDQogICAgTWFzc2FfYmlsaG9lcyA9IHJvdW5kKE1hc3NhX3JlbmRhIC8gMTAwMCwgMSksDQogICAgQ3JlZGl0b19iaWxob2VzID0gcm91bmQoQ3JlZGl0byAvIDEwMDAsIDEpDQogICkgJT4lDQogIHNlbGVjdChkYXRlLCBhbm8sIG1lcywgdGltZXN0YW1wLCBNYXNzYV9iaWxob2VzLCBDcmVkaXRvX2JpbGhvZXMsIE1hc3NhX3JlbmRhLCBDcmVkaXRvKSAlPiUNCiAgYXJyYW5nZShkYXRlKQ0KDQojIFZlcmlmaWNhciBkYWRvcw0KaWYobnJvdyhkYWRvc19jb21iaW5hZG9zKSA9PSAwKSB7DQogIHN0b3AoIkRhZG9zIG7Do28gZW5jb250cmFkb3MuIFZlcmlmaXF1ZSBvcyBjw7NkaWdvcy4iKQ0KfQ0KDQojIENhbGN1bGFyIGxpbWl0ZXMgcGFyYSBlaXhvcw0KcmVuZGFfbWluIDwtIG1pbihkYWRvc19jb21iaW5hZG9zJE1hc3NhX2JpbGhvZXMsIG5hLnJtID0gVFJVRSkNCnJlbmRhX21heCA8LSBtYXgoZGFkb3NfY29tYmluYWRvcyRNYXNzYV9iaWxob2VzLCBuYS5ybSA9IFRSVUUpDQpjcmVkaXRvX21pbiA8LSBtaW4oZGFkb3NfY29tYmluYWRvcyRDcmVkaXRvX2JpbGhvZXMsIG5hLnJtID0gVFJVRSkNCmNyZWRpdG9fbWF4IDwtIG1heChkYWRvc19jb21iaW5hZG9zJENyZWRpdG9fYmlsaG9lcywgbmEucm0gPSBUUlVFKQ0KDQojIE1hcmdlbSBkZSA1JQ0KcmVuZGFfcmFuZ2UgPC0gcmVuZGFfbWF4IC0gcmVuZGFfbWluDQpjcmVkaXRvX3JhbmdlIDwtIGNyZWRpdG9fbWF4IC0gY3JlZGl0b19taW4NCg0KIyBDcmlhciBncsOhZmljbyBjb20gZHVhcyBzw6lyaWVzIGVtIGJpbGjDtWVzDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICAjIFPDqXJpZSAxOiBNYXNzYSBkZSByZW5kYSAoY29sdW5hcykgLSBlaXhvIGVzcXVlcmRvDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIE1hc3NhX2JpbGhvZXMpKSwNCiAgICB0eXBlID0gImNvbHVtbiIsDQogICAgbmFtZSA9ICJNYXNzYSBTYWxhcmlhbCAoUiQgYmlsaMO1ZXMpIiwNCiAgICBjb2xvciA9ICIjZmViNzEyIiwgICMgVmVyZGUNCiAgICB5QXhpcyA9IDAsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEsIHZhbHVlU3VmZml4ID0gIiBiaWxow7VlcyIpDQogICkgJT4lDQogICMgU8OpcmllIDI6IENvbmNlc3PDtWVzIGRlIGNyw6lkaXRvIChsaW5oYSkgLSBlaXhvIGRpcmVpdG8NCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfY29tYmluYWRvcyAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgQ3JlZGl0b19iaWxob2VzKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIkNvbmNlc3PDtWVzIGRlIENyw6lkaXRvIChSJCBiaWxow7VlcykiLA0KICAgIGNvbG9yID0gIiMwMjAyM2MiLCAgIyBBenVsDQogICAgbGluZVdpZHRoID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSAzKSwNCiAgICB5QXhpcyA9IDEsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEsIHZhbHVlU3VmZml4ID0gIiBiaWxow7VlcyIpDQogICkgJT4lDQogICMgQ29uZmlndXJhciBlaXhvcyBZIGR1YWlzIChhbWJvcyBlbSBiaWxow7VlcykNCiAgaGNfeUF4aXNfbXVsdGlwbGVzKA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJNYXNzYSBTYWxhcmlhbCAoUiQgYmlsaMO1ZXMpIiksDQogICAgICBvcHBvc2l0ZSA9IEZBTFNFLA0KICAgICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAie3ZhbHVlfSBiaSIpLA0KICAgICAgbWluID0gZmxvb3IocmVuZGFfbWluIC0gMC4wNSAqIHJlbmRhX3JhbmdlKSwNCiAgICAgIG1heCA9IGNlaWxpbmcocmVuZGFfbWF4ICsgMC4wNSAqIHJlbmRhX3JhbmdlKQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIkNvbmNlc3PDtWVzIGRlIENyw6lkaXRvIChSJCBiaWxow7VlcykiKSwNCiAgICAgIG9wcG9zaXRlID0gVFJVRSwNCiAgICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0gYmkiKSwNCiAgICAgIG1pbiA9IGZsb29yKGNyZWRpdG9fbWluIC0gMC4wNSAqIGNyZWRpdG9fcmFuZ2UpLA0KICAgICAgbWF4ID0gY2VpbGluZyhjcmVkaXRvX21heCArIDAuMDUgKiBjcmVkaXRvX3JhbmdlKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgdHlwZSA9ICdkYXRldGltZScsDQogICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAne3ZhbHVlOiViICVZfScpDQogICkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiUmVuZGEgdnMuIE1lcmNhZG8gZGUgQ3LDqWRpdG8iKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJNYXNzYSBTYWxhcmlhbCBlIENvbmNlc3PDtWVzIGRlIENyw6lkaXRvIChSJCBiaWxow7VlcykgLSBEYWRvcyBjb20gYWp1c3RlIHNhem9uYWwiKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBCYW5jbyBDZW50cmFsIGRvIEJyYXNpbCAoU0dTIC0gQ8OzZGlnb3M6IDI4NTQ1LCAyNDQ0NCkiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gMSwgdGV4dCA9ICcxWScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDIsIHRleHQgPSAnMlknKSwNCiAgICAgIGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSAzLCB0ZXh0ID0gJzNZJyksDQogICAgICBsaXN0KHR5cGUgPSAnYWxsJywgdGV4dCA9ICdUb2RvIHBlcsOtb2RvJykNCiAgICApLA0KICAgIHNlbGVjdGVkID0gMg0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgaGVhZGVyRm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHgiPjxiPntwb2ludC5rZXl9PC9iPjwvc3Bhbj48YnIvPicsDQogICAgcG9pbnRGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImNvbG9yOntzZXJpZXMuY29sb3J9Ij7il488L3NwYW4+IHtzZXJpZXMubmFtZX06IDxiPlIkIHtwb2ludC55Oi4xZn0gYmlsaMO1ZXM8L2I+PGJyLz4nDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCINCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMSwNCiAgICAgIGdyb3VwUGFkZGluZyA9IDAuMDUsDQogICAgICBib3JkZXJXaWR0aCA9IDAuNQ0KICAgICksDQogICAgbGluZSA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBUUlVFLA0KICAgICAgY29ubmVjdE51bGxzID0gVFJVRQ0KICAgICkNCiAgKQ0KYGBgDQojIyAqQW7DoWxpc2UgZG8gTWVyY2FkbyBkZSBUcmFiYWxobyoNCg0KQSBkaW7Dom1pY2EgZG8gbWVyY2FkbyBkZSB0cmFiYWxobyB0ZW0gZGVzZW1wZW5oYWRvIHBhcGVsIGNlbnRyYWwgbmEgdHJhamV0w7NyaWEgcmVjZW50ZSBkYSBhdGl2aWRhZGUgZWNvbsO0bWljYSBicmFzaWxlaXJhLiBBIGV2b2x1w6fDo28gZGEgdGF4YSBkZSBkZXNvY3VwYcOnw6NvLCBkYSBwb3B1bGHDp8OjbyBuYSBmb3LDp2EgZGUgdHJhYmFsaG8gZSBkYSBtYXNzYSBzYWxhcmlhbCByZWFsIHJldmVsYSBuw6NvIGFwZW5hcyBvcyBlZmVpdG9zIGRvcyBkaWZlcmVudGVzIGNpY2xvcyBlY29uw7RtaWNvcyBlbmZyZW50YWRvcyBwZWxvIHBhw61zIG5hIMO6bHRpbWEgZMOpY2FkYSwgbWFzIHRhbWLDqW0gb3MgZnVuZGFtZW50b3MgcXVlIHN1c3RlbnRhbSBvIG1vbWVudG8gYXR1YWwgZGEgZWNvbm9taWEuDQpFbnRyZSAyMDE1IGUgMjAxNywgYSBlY29ub21pYSBicmFzaWxlaXJhIGVuZnJlbnRvdSBmb3J0ZSBjb250cmHDp8OjbywgcmVmbGV0aWRhIG5hIGRldGVyaW9yYcOnw6NvIGFicnVwdGEgZG8gbWVyY2FkbyBkZSB0cmFiYWxoby4NCkEgdGF4YSBkZSBkZXNvY3VwYcOnw6NvIGF2YW7Dp291IGRlIGFwcm94aW1hZGFtZW50ZSA2LDUlIHBhcmEgcGF0YW1hciBwcsOzeGltbyBkZSAxNCUsIGNvbmZpZ3VyYW5kbyB1bWEgZHVwbGljYcOnw6NvIGRvIGRlc2VtcHJlZ28gZW0gY3VydG8gaW50ZXJ2YWxvIGRlIHRlbXBvLiBFc3NlIG1vdmltZW50byBmb2kgYWNvbXBhbmhhZG8gcG9yIGVuZnJhcXVlY2ltZW50byBkYSByZW5kYSBhZ3JlZ2FkYSBlIHJldHJhw6fDo28gZG8gY29uc3VtbyBkYXMgZmFtw61saWFzLg0KQWluZGEgcXVlIGEgcG9wdWxhw6fDo28gbmEgZm9yw6dhIGRlIHRyYWJhbGhvIHRlbmhhIG1hbnRpZG8gdGVuZMOqbmNpYSBlc3RydXR1cmFsIGRlIGNyZXNjaW1lbnRvLCBvIGNob3F1ZSByZWNlc3Npdm8gc2UgdHJhZHV6aXUgZW0gaW5jYXBhY2lkYWRlIGRlIGFic29yw6fDo28gZGVzc2EgZm9yw6dhIGRlIHRyYWJhbGhvLCBhbXBsaWFuZG8gYSBvY2lvc2lkYWRlIGUgcmVkdXppbmRvIG8gZGluYW1pc21vIGRhIGVjb25vbWlhIGRvbcOpc3RpY2EuDQpPIG1lcmNhZG8gZGUgdHJhYmFsaG8sIG5lc3NlIHBlcsOtb2RvLCBhdHVvdSBjb21vIGNhbmFsIGRlIHRyYW5zbWlzc8OjbyBkYSByZWNlc3PDo28sIHJlZm9yw6dhbmRvIG8gY2ljbG8gbmVnYXRpdm8uDQpOb3MgYW5vcyBzdWJzZXF1ZW50ZXMsIG9ic2Vydm91LXNlIGVzdGFiaWxpemHDp8OjbyBkbyBkZXNlbXByZWdvLCBwb3LDqW0gYWluZGEgZW0gbsOtdmVpcyBlbGV2YWRvcywgc3VwZXJpb3JlcyBhIDExJS4NCkEgcmVjdXBlcmHDp8OjbyBlY29uw7RtaWNhIG1vc3Ryb3Utc2UgbW9kZXJhZGEgZSBpbnN1ZmljaWVudGUgcGFyYSBwcm9tb3ZlciByZWFic29yw6fDo28gcsOhcGlkYSBkYSBtw6NvIGRlIG9icmEgZGVzZW1wcmVnYWRhLiBBIG1hc3NhIHNhbGFyaWFsIGFwcmVzZW50b3UgY3Jlc2NpbWVudG8gbGltaXRhZG8sIHJlc3RyaW5naW5kbyBhIGNhcGFjaWRhZGUgZGUgYWNlbGVyYcOnw6NvIGRvIGNvbnN1bW8uDQpFc3NlIHBlcsOtb2RvIGZvaSBjYXJhY3Rlcml6YWRvIHBvciByZWN1cGVyYcOnw6NvIGZyw6FnaWwsIGNvbSBlbGV2YWRvIGdyYXUgZGUgb2Npb3NpZGFkZSBubyBtZXJjYWRvIGRlIHRyYWJhbGhvLg0KDQpBIGZvcnRlIGNvbXByZXNzw6NvIGRvIGRlc2VtcHJlZ28gZWxldm91IGEgcmVuZGEgZGlzcG9uw612ZWwgZGFzIGZhbcOtbGlhcyBlIGZvcnRhbGVjZXUgbyBjb25zdW1vIGRvbcOpc3RpY28sIGNvbXBvbmVudGUgY2VudHJhbCBkbyBQSUIgYnJhc2lsZWlyby4NCk8gbWVyY2FkbyBkZSB0cmFiYWxobyBkZWl4b3UgZGUgYXR1YXIgY29tbyByZXN0cmnDp8OjbyBlIHBhc3NvdSBhIGZ1bmNpb25hciBjb21vIG1lY2FuaXNtbyBkZSBwcm9wYWdhw6fDo28gZG8gY3Jlc2NpbWVudG8uDQoNCkNvbSBkZXNlbXByZWdvIGVtIHRvcm5vIGRlIDUlLCBvIGdyYXUgZGUgb2Npb3NpZGFkZSBkYSBlY29ub21pYSBlbmNvbnRyYS1zZSByZWR1emlkbyBwYXJhIHBhZHLDtWVzIGhpc3TDs3JpY29zIG5hY2lvbmFpcy4NCkVzc2UgY2Vuw6FyaW8gaW1wbGljYTogTWFpb3IgcHJlc3PDo28gcG90ZW5jaWFsIHNvYnJlIHNhbMOhcmlvcywNClJlZHXDp8OjbyBkYSBtYXJnZW0gZGUgY3Jlc2NpbWVudG8gdmlhIGFic29yw6fDo28gYWRpY2lvbmFsIGRlIHRyYWJhbGhhZG9yZXMsRGVwZW5kw6puY2lhIGNyZXNjZW50ZSBkZSBnYW5ob3MgZGUgcHJvZHV0aXZpZGFkZSBwYXJhIHN1c3RlbnRhciBleHBhbnPDo28gZnV0dXJhDQoNCg0KQSBldmlkw6puY2lhIGVtcMOtcmljYSBzdWdlcmUgcXVlIG8gbWVyY2FkbyBkZSB0cmFiYWxobyB0ZW0gc2lkbyBvIHByaW5jaXBhbCB2ZXRvciBkYSByZXRvbWFkYSByZWNlbnRlIGRhIGF0aXZpZGFkZSBlY29uw7RtaWNhIGJyYXNpbGVpcmEuIEEgZm9ydGUgY29tcHJlc3PDo28gZGEgdGF4YSBkZSBkZXNvY3VwYcOnw6NvICBxdWUgcmVjdW91IHBhcmEgbsOtdmVpcyBoaXN0b3JpY2FtZW50ZSBiYWl4b3MgIGNvbWJpbmFkYSDDoCBlc3RhYmlsaXphw6fDo28gZGEgcG9wdWxhw6fDo28gbmEgZm9yw6dhIGRlIHRyYWJhbGhvIGUgYW8gYXZhbsOnbyBjb25zaXN0ZW50ZSBkYSBtYXNzYSBzYWxhcmlhbCByZWFsLCBjb25zb2xpZG91IHVtIGFtYmllbnRlIGZhdm9yw6F2ZWwgw6AgZXhwYW5zw6NvIGRvIGNvbnN1bW8gZGFzIGZhbcOtbGlhcywgcHJpbmNpcGFsIGNvbXBvbmVudGUgZGEgZGVtYW5kYSBhZ3JlZ2FkYS4NCg0KQ29udHVkbywgYSBlY29ub21pYSBvcGVyYSBhdHVhbG1lbnRlIGNvbSBncmF1IHJlZHV6aWRvIGRlIG9jaW9zaWRhZGUuIENvbSBkZXNlbXByZWdvIHByw7N4aW1vIGRlIG3DrW5pbWFzIGhpc3TDs3JpY2FzIGUgZm9yw6dhIGRlIHRyYWJhbGhvIHJlbGF0aXZhbWVudGUgZXN0YWJpbGl6YWRhLCBhIG1hcmdlbSBkZSBleHBhbnPDo28gdmlhIG1haW9yIHV0aWxpemHDp8OjbyBkbyBmYXRvciB0cmFiYWxobyB0b3JuYS1zZSBsaW1pdGFkYS4gTmVzc2UgY29udGV4dG8sIGEgY29udGludWlkYWRlIGRvIGNyZXNjaW1lbnRvIGV4aWdpcsOhIHRyYW5zacOnw6NvIHBhcmEgdW0gbW9kZWxvIG1haXMgaW50ZW5zaXZvIGVtIHByb2R1dGl2aWRhZGUsIGludmVzdGltZW50byBlIGVmaWNpw6puY2lhIGFsb2NhdGl2YS4NCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCiMgQ29sZXRhciBkYWRvcw0KIyBJQkMtQnIgKGF0aXZpZGFkZSBlY29uw7RtaWNhKSAtIGPDs2RpZ28gMjQzNjMNCmRhZG9zX2liYyA8LSBnZXRfc2VyaWVzKDI0MzYzLCBzdGFydF9kYXRlID0gIjIwMjAtMDEtMDEiLCBlbmRfZGF0ZSA9IFN5cy5EYXRlKCkpICU+JSANCiAgcmVuYW1lKElCQyA9IGAyNDM2M2ApDQoNCiMgVGF4YSBkZSBkZXNvY3VwYcOnw6NvIC0gUE5BREMgLSBjw7NkaWdvIDI0MzY5DQpkYWRvc19kZXNlbXByZWdvIDwtIGdldF9zZXJpZXMoMjQzNjksIHN0YXJ0X2RhdGUgPSAiMjAyMC0wMS0wMSIsIGVuZF9kYXRlID0gU3lzLkRhdGUoKSkgJT4lIA0KICByZW5hbWUoRGVzZW1wcmVnbyA9IGAyNDM2OWApDQoNCiMgQ29tYmluYXIgZGFkb3MNCmRhZG9zX2NvbWJpbmFkb3MgPC0gZGFkb3NfaWJjICU+JQ0KICBsZWZ0X2pvaW4oZGFkb3NfZGVzZW1wcmVnbywgYnkgPSAiZGF0ZSIpICU+JQ0KICBtdXRhdGUoDQogICAgYW5vID0geWVhcihkYXRlKSwNCiAgICBtZXMgPSBtb250aChkYXRlLCBsYWJlbCA9IFRSVUUsIGFiYnIgPSBGQUxTRSksDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGUpDQogICkgJT4lDQogIHNlbGVjdChkYXRlLCBhbm8sIG1lcywgdGltZXN0YW1wLCBJQkMsIERlc2VtcHJlZ28pICU+JQ0KICBhcnJhbmdlKGRhdGUpDQoNCiMgVmVyaWZpY2FyIGRhZG9zDQppZihucm93KGRhZG9zX2NvbWJpbmFkb3MpID09IDApIHsNCiAgc3RvcCgiRGFkb3MgbsOjbyBlbmNvbnRyYWRvcy4gVmVyaWZpcXVlIG9zIGPDs2RpZ29zLiIpDQp9DQoNCiMgQ2FsY3VsYXIgbGltaXRlcyBwYXJhIGVpeG9zDQppYmNfbWluIDwtIG1pbihkYWRvc19jb21iaW5hZG9zJElCQywgbmEucm0gPSBUUlVFKQ0KaWJjX21heCA8LSBtYXgoZGFkb3NfY29tYmluYWRvcyRJQkMsIG5hLnJtID0gVFJVRSkNCmRlc2VtcHJlZ29fbWluIDwtIG1pbihkYWRvc19jb21iaW5hZG9zJERlc2VtcHJlZ28sIG5hLnJtID0gVFJVRSkNCmRlc2VtcHJlZ29fbWF4IDwtIG1heChkYWRvc19jb21iaW5hZG9zJERlc2VtcHJlZ28sIG5hLnJtID0gVFJVRSkNCg0KIyBNYXJnZW0gZGUgNSUNCmliY19yYW5nZSA8LSBpYmNfbWF4IC0gaWJjX21pbg0KZGVzZW1wcmVnb19yYW5nZSA8LSBkZXNlbXByZWdvX21heCAtIGRlc2VtcHJlZ29fbWluDQoNCiMgQ3JpYXIgZ3LDoWZpY28NCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogICMgU8OpcmllIDE6IElCQy1CciAobGluaGEpIC0gZWl4byBlc3F1ZXJkbw0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19jb21iaW5hZG9zICU+JSBzZWxlY3QodGltZXN0YW1wLCBJQkMpKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiSUJDLUJyIChhdGl2aWRhZGUgZWNvbsO0bWljYSkiLA0KICAgIGNvbG9yID0gIiMwMjAyM2MiLCAgIyBBenVsDQogICAgbGluZVdpZHRoID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSksDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICAjIFPDqXJpZSAyOiBUYXhhIGRlIGRlc2VtcHJlZ28gKGxpbmhhKSAtIGVpeG8gZGlyZWl0bw0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19jb21iaW5hZG9zICU+JSBzZWxlY3QodGltZXN0YW1wLCBEZXNlbXByZWdvKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlRheGEgZGUgRGVzZW1wcmVnbyAoJSkiLA0KICAgIGNvbG9yID0gIiNmZWI3MTIiLA0KICAgIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gMiksDQogICAgeUF4aXMgPSAxLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIikNCiAgKSAlPiUNCiAgIyBDb25maWd1cmFyIGVpeG9zIFkgZHVhaXMgKGVpeG8gZG8gZGVzZW1wcmVnbyBpbnZlcnRpZG8pDQogIGhjX3lBeGlzX211bHRpcGxlcygNCiAgICBsaXN0KA0KICAgICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiSUJDLUJyICjDrW5kaWNlKSIpLA0KICAgICAgb3Bwb3NpdGUgPSBGQUxTRSwNCiAgICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0iKSwNCiAgICAgIG1pbiA9IGZsb29yKGliY19taW4gLSAwLjA1ICogaWJjX3JhbmdlKSwNCiAgICAgIG1heCA9IGNlaWxpbmcoaWJjX21heCArIDAuMDUgKiBpYmNfcmFuZ2UpDQogICAgKSwNCiAgICBsaXN0KA0KICAgICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiVGF4YSBkZSBEZXNlbXByZWdvICglKSIpLA0KICAgICAgb3Bwb3NpdGUgPSBUUlVFLA0KICAgICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAie3ZhbHVlfSUiKSwNCiAgICAgIG1pbiA9IGZsb29yKGRlc2VtcHJlZ29fbWluIC0gMC4wNSAqIGRlc2VtcHJlZ29fcmFuZ2UpLA0KICAgICAgbWF4ID0gY2VpbGluZyhkZXNlbXByZWdvX21heCArIDAuMDUgKiBkZXNlbXByZWdvX3JhbmdlKSwNCiAgICAgIHJldmVyc2VkID0gVFJVRSAgIyBJTlZFUlRFIE8gRUlYTzogZGVzZW1wcmVnbyBjYWluZG8gPSBsaW5oYSBzdWJpbmRvDQogICAgKQ0KICApICU+JQ0KICBoY194QXhpcygNCiAgICB0eXBlID0gJ2RhdGV0aW1lJywNCiAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICd7dmFsdWU6JWIgJVl9JykNCiAgKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJBdGl2aWRhZGUgRWNvbsO0bWljYSB2cy4gTWVyY2FkbyBkZSBUcmFiYWxobyIpICU+JQ0KICBoY19zdWJ0aXRsZSh0ZXh0ID0gIklCQy1CciAow61uZGljZSkgZSBUYXhhIGRlIERlc2VtcHJlZ28gKCUpIC0gRGFkb3MgbWVuc2FpcyIpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsIChjw7NkLiAyNDM2MykgZSBJQkdFL1BOQURDIChjw7NkLiAyNDM2OSkiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gMSwgdGV4dCA9ICcxWScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDIsIHRleHQgPSAnMlknKSwNCiAgICAgIGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSAzLCB0ZXh0ID0gJzNZJyksDQogICAgICBsaXN0KHR5cGUgPSAnYWxsJywgdGV4dCA9ICdUb2RvIHBlcsOtb2RvJykNCiAgICApLA0KICAgIHNlbGVjdGVkID0gMg0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgaGVhZGVyRm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHgiPjxiPntwb2ludC5rZXl9PC9iPjwvc3Bhbj48YnIvPicsDQogICAgcG9pbnRGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImNvbG9yOntzZXJpZXMuY29sb3J9Ij7il488L3NwYW4+IHtzZXJpZXMubmFtZX06IDxiPntwb2ludC55Oi4xZn17c2VyaWVzLnRvb2x0aXBPcHRpb25zLnZhbHVlU3VmZml4fTwvYj48YnIvPicNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIg0KICApICU+JQ0KICBoY19wbG90T3B0aW9ucygNCiAgICBsaW5lID0gbGlzdCgNCiAgICAgIGFuaW1hdGlvbiA9IFRSVUUsDQogICAgICBjb25uZWN0TnVsbHMgPSBUUlVFDQogICAgKQ0KICApDQpgYGANCiMjICpSZW5kYSBlIENvbnN1bW8gZGFzIEZhbcOtbGlhcyoNCg0KQWNlcmNhIGRvIGNvbnN1bW8gZSBkYSByZW5kYSBkYXMgZmFtw61saWFzLCBhcGVzYXIgZGUgdW0gY2Vuw6FyaW8gZGUganVyb3MgZWxldmFkb3MsIG8gY29uc3VtbyBkb23DqXN0aWNvIG1hbnRldmUtc2UgcmVsYXRpdmFtZW50ZSByZXNpbGllbnRlIGFvIGxvbmdvIGRvIHBlcsOtb2RvLCBzdXN0ZW50YWRvIHByaW5jaXBhbG1lbnRlIHBvciB1bSBtZXJjYWRvIGRlIHRyYWJhbGhvIGFpbmRhIGFxdWVjaWRvIGUgcG9yIGdhbmhvcyByZWFpcyBkZSByZW5kYS4gRGFkb3MgcmVjZW50ZXMgaW5kaWNhbSBxdWUgYSB0YXhhIGRlIGRlc2VtcHJlZ28gbm8gQnJhc2lsIHBlcm1hbmVjZXUgZW0gcGF0YW1hcmVzIGhpc3RvcmljYW1lbnRlIGJhaXhvcywgcHLDs3hpbW9zIGRlIDclIGFvIGxvbmdvIGRlIDIwMjUsIHNlZ3VuZG8gbyBJQkdFLCBlbnF1YW50byBhIG1hc3NhIGRlIHJlbmRpbWVudG8gcmVhbCBoYWJpdHVhbCBkbyB0cmFiYWxobyBhcHJlc2VudG91IGNyZXNjaW1lbnRvIGNvbnNpc3RlbnRlLCByZWZsZXRpbmRvIHRhbnRvIGEgZXhwYW5zw6NvIGRvIGVtcHJlZ28gcXVhbnRvIGEgcmVjdXBlcmHDp8OjbyBkbyBwb2RlciBkZSBjb21wcmEgZGEgcG9wdWxhw6fDo28uIEVzc2UgYXZhbsOnbyBkYSByZW5kYSByZWFsIHRlbmRlIGEgc3VzdGVudGFyIG8gY29uc3VtbyBkYXMgZmFtw61saWFzIG1lc21vIGVtIHVtIGFtYmllbnRlIGRlIGNyw6lkaXRvIG1haXMgcmVzdHJpdGl2bywgdW1hIHZleiBxdWUgcGFydGUgcmVsZXZhbnRlIGRvIGNvbnN1bW8gbm8gQnJhc2lsIGVzdMOhIGFzc29jaWFkYSDDoCByZW5kYSBjb3JyZW50ZS4NCg0KT3V0cm8gZmF0b3IgcmVsZXZhbnRlIGZvaSBvIGFycmVmZWNpbWVudG8gZGEgaW5mbGHDp8OjbyBkZSBhbGltZW50b3MsIHF1ZSBjb250cmlidWl1IHBhcmEgcmVkdXppciBwcmVzc8O1ZXMgc29icmUgbyBvcsOnYW1lbnRvIGRhcyBmYW3DrWxpYXMuIEEgY29tYmluYcOnw6NvIGRlIGNvbmRpw6fDtWVzIGNsaW3DoXRpY2FzIG1haXMgZmF2b3LDoXZlaXMgcGFyYSBhIHByb2R1w6fDo28gYWdyw61jb2xhLCBqdW50YW1lbnRlIGNvbSB1bSBjw6JtYmlvIHJlbGF0aXZhbWVudGUgZXN0w6F2ZWwsIGFqdWRvdSBhIGNvbnRlciBvIGN1c3RvIGRlIGl0ZW5zIGFsaW1lbnTDrWNpb3MgYW8gbG9uZ28gZG8gYW5vLCBsaWJlcmFuZG8gcGFyY2VsYSBtYWlvciBkYSByZW5kYSBkaXNwb27DrXZlbCBwYXJhIG91dHJvcyB0aXBvcyBkZSBjb25zdW1vLiBFc3NlIG1vdmltZW50byB0ZXZlIGltcGFjdG8gZGlyZXRvIHNvYnJlIG9zIGluZGljYWRvcmVzIGRlIGF0aXZpZGFkZSBsaWdhZG9zIGFvIGNvbnN1bW8sIGVzcGVjaWFsbWVudGUgbm8gdmFyZWpvIGFtcGxpYWRvLg0KDQpDb21vIHJlZmxleG8gZGVzc2VzIGZhdG9yZXMsIGluZGljYWRvcmVzIGRlIGNvbnN1bW8gbW9zdHJhcmFtIGRlc2VtcGVuaG8gcG9zaXRpdm8gbm8gZmluYWwgZG8gYW5vLiBFbSBkZXplbWJybywgbyBjb25zdW1vIGF2YW7Dp291IDE1LDY5JSwgcmVnaXN0cmFuZG8gY3Jlc2NpbWVudG8gZXhwcmVzc2l2byBlbSBjb21wYXJhw6fDo28gYW8gbWVzbW8gcGVyw61vZG8gZGUgMjAyNCwgbyBxdWUgcmVmb3LDp2EgYSBpZGVpYSBkZSBxdWUgYSBjb21iaW5hw6fDo28gZW50cmUgZXhwYW5zw6NvIGRvIGVtcHJlZ28sIHJlY3VwZXJhw6fDo28gZGEgcmVuZGEgcmVhbCBlIGRlc2FjZWxlcmHDp8OjbyBpbmZsYWNpb27DoXJpYSBjb250cmlidWl1IHBhcmEgc3VzdGVudGFyIGEgZGVtYW5kYSBkb23DqXN0aWNhIG1lc21vIGVtIHVtIGFtYmllbnRlIGRlIHBvbMOtdGljYSBtb25ldMOhcmlhIGFpbmRhIHJlc3RyaXRpdmEuDQoNCkNvbnR1ZG8sIMOpIGltcG9ydGFudGUgY29uc2lkZXJhciBxdWUgMjAyNiBzZXLDoSB1bSBhbm8gZWxlaXRvcmFsLCBvIHF1ZSBoaXN0b3JpY2FtZW50ZSB0ZW5kZSBhIGVsZXZhciBvIGdyYXUgZGUgaW5jZXJ0ZXphIGVjb27DtG1pY2Egbm8gQnJhc2lsLiBFcGlzw7NkaW9zIHBhc3NhZG9zIGlsdXN0cmFtIGVzc2UgcGFkcsOjby4gRW0gMjAxNCwgcG9yIGV4ZW1wbG8sIG8gcHJvY2Vzc28gZWxlaXRvcmFsIGZvaSBhY29tcGFuaGFkbyBwb3IgZGV0ZXJpb3Jhw6fDo28gZGFzIGV4cGVjdGF0aXZhcyBmaXNjYWlzIGUgYXVtZW50byBkYSB2b2xhdGlsaWRhZGUgbm9zIG1lcmNhZG9zIGZpbmFuY2Vpcm9zLCBvIHF1ZSBjb250cmlidWl1IHBhcmEgYSBkZXNhY2VsZXJhw6fDo28gZGEgYXRpdmlkYWRlIGVjb27DtG1pY2EsIGNvbSBvIFBJQiBjcmVzY2VuZG8gYXBlbmFzIDAsNSUgbmFxdWVsZSBhbm8sIGFww7NzIGV4cGFuc8OjbyBkZSAzLDAlIGVtIDIwMTMuIERlIGZvcm1hIHNlbWVsaGFudGUsIGVtIDIwMTgsIG8gcGVyw61vZG8gZWxlaXRvcmFsIGZvaSBtYXJjYWRvIHBvciBmb3J0ZSBpbmNlcnRlemEgcG9sw610aWNhIGUgZWxldmFkYSB2b2xhdGlsaWRhZGUgY2FtYmlhbCwgbyBxdWUgbGV2b3UgZW1wcmVzYXMgZSBpbnZlc3RpZG9yZXMgYSBhZG90YXIgdW1hIHBvc3R1cmEgbWFpcyBjYXV0ZWxvc2EgZW0gcmVsYcOnw6NvIGEgaW52ZXN0aW1lbnRvcyBlIGRlY2lzw7VlcyBkZSBjb25zdW1vIGRlIG1haW9yIHZhbG9yLg0KDQpFc3NlIGNvbXBvcnRhbWVudG8gb2NvcnJlIHBvcnF1ZSBhbm9zIGVsZWl0b3JhaXMgYXVtZW50YW0gYSBpbmNlcnRlemEgc29icmUgYSBjb25kdcOnw6NvIGZ1dHVyYSBkYSBwb2zDrXRpY2EgZWNvbsO0bWljYSwgZXNwZWNpYWxtZW50ZSBlbSByZWxhw6fDo28gw6AgcG9sw610aWNhIGZpc2NhbCwgcmVmb3JtYXMgZXN0cnV0dXJhaXMgZSBkaXJldHJpemVzIHJlZ3VsYXTDs3JpYXMuIEVtIGVjb25vbWlhcyBlbWVyZ2VudGVzIGNvbW8gbyBCcmFzaWwsIGVzc2EgaW5jZXJ0ZXphIHRlbmRlIGEgaW1wYWN0YXIgZGlyZXRhbWVudGUgYXMgZXhwZWN0YXRpdmFzIGRlIGFnZW50ZXMgZWNvbsO0bWljb3MsIGxldmFuZG8gZW1wcmVzYXMgYSBwb3N0ZXJnYXIgaW52ZXN0aW1lbnRvcyBlIGZhbcOtbGlhcyBhIGFkb3RhcmVtIG1haW9yIGNhdXRlbGEgZW0gZGVjaXPDtWVzIGRlIGNvbnN1bW8gZGUgbG9uZ28gcHJhem8uDQoNCkRlc3NhIGZvcm1hLCBlbWJvcmEgb3MgZnVuZGFtZW50b3MgZG8gbWVyY2FkbyBkZSB0cmFiYWxobyBlIGRhIHJlbmRhIGFpbmRhIGNvbnRyaWJ1YW0gcGFyYSBzdXN0ZW50YXIgbyBjb25zdW1vIGRhcyBmYW3DrWxpYXMsIGEgcHJveGltaWRhZGUgZG8gY2ljbG8gZWxlaXRvcmFsIGRlIDIwMjYgcG9kZSBpbnRyb2R1emlyIHVtIGdyYXUgYWRpY2lvbmFsIGRlIGNhdXRlbGEgbm8gY29tcG9ydGFtZW50byBkZSBjb25zdW1pZG9yZXMgZSBpbnZlc3RpZG9yZXMsIG8gcXVlIHJlZm9yw6dhIGEgZXhwZWN0YXRpdmEgZGUgdW0gY3Jlc2NpbWVudG8gZWNvbsO0bWljbyBtYWlzIG1vZGVyYWRvIGFvIGxvbmdvIGRvIHBlcsOtb2RvLg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQojIENvbGV0YXIgZGFkb3MgZG8gQ29uc3VtbyBkYXMgRmFtw61saWFzICgyMjEwMCkNCmRhZG9zX2NvbnN1bW8gPC0gZ2V0X3NlcmllcygyMjEwMCwgc3RhcnRfZGF0ZSA9ICIyMDIwLTAxLTAxIiwgZW5kX2RhdGUgPSBTeXMuRGF0ZSgpKSAlPiUgDQogIHJlbmFtZShDb25zdW1vX2ZhbWlsaWFzID0gYDIyMTAwYCkNCg0KIyBDb2xldGFyIGRhZG9zIGRhIFJlbmRhIGRhcyBGYW3DrWxpYXMgKDI5MDI4KQ0KZGFkb3NfcmVuZGEgPC0gZ2V0X3NlcmllcygyOTAyOCwgc3RhcnRfZGF0ZSA9ICIyMDIwLTAxLTAxIiwgZW5kX2RhdGUgPSBTeXMuRGF0ZSgpKSAlPiUgDQogIHJlbmFtZShSZW5kYV9mYW1pbGlhcyA9IGAyOTAyOGApDQoNCiMgUHJlcGFyYXIgZGFkb3MgZGUgQ09OU1VNTw0KZGFkb3NfY29uc3Vtb190cmltIDwtIGRhZG9zX2NvbnN1bW8gJT4lDQogIG11dGF0ZSgNCiAgICBhbm8gPSB5ZWFyKGRhdGUpLA0KICAgIHRyaW1lc3RyZSA9IHF1YXJ0ZXIoZGF0ZSwgd2l0aF95ZWFyID0gRkFMU0UpLA0KICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChkYXRlKSwNCiAgICBpbmRpY2VfY29uc3VtbyA9IHJvdW5kKDEwMCAqIENvbnN1bW9fZmFtaWxpYXMgLyBmaXJzdChDb25zdW1vX2ZhbWlsaWFzKSwgMSkNCiAgKSAlPiUNCiAgc2VsZWN0KGRhdGUsIHRpbWVzdGFtcCwgaW5kaWNlX2NvbnN1bW8pDQoNCiMgUHJlcGFyYXIgZGFkb3MgZGUgUkVOREENCmRhZG9zX3JlbmRhX3RyaW0gPC0gZGFkb3NfcmVuZGEgJT4lDQogIG11dGF0ZSgNCiAgICBhbm8gPSB5ZWFyKGRhdGUpLA0KICAgIHRyaW1lc3RyZSA9IHF1YXJ0ZXIoZGF0ZSwgd2l0aF95ZWFyID0gRkFMU0UpLA0KICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChkYXRlKSwNCiAgICBpbmRpY2VfcmVuZGEgPSByb3VuZCgxMDAgKiBSZW5kYV9mYW1pbGlhcyAvIGZpcnN0KFJlbmRhX2ZhbWlsaWFzKSwgMSkNCiAgKSAlPiUNCiAgc2VsZWN0KGRhdGUsIHRpbWVzdGFtcCwgaW5kaWNlX3JlbmRhKQ0KDQojIENvbWJpbmFyIGRhZG9zDQpkYWRvc19jb21iaW5hZG9zIDwtIGRhZG9zX2NvbnN1bW9fdHJpbSAlPiUNCiAgbGVmdF9qb2luKGRhZG9zX3JlbmRhX3RyaW0sIGJ5ID0gYygiZGF0ZSIsICJ0aW1lc3RhbXAiKSkNCg0KIyBWZXJpZmljYXIgZGFkb3MNCmlmKG5yb3coZGFkb3NfY29tYmluYWRvcykgPT0gMCkgew0KICBzdG9wKCJEYWRvcyBuw6NvIGVuY29udHJhZG9zLiBWZXJpZmlxdWUgb3MgY8OzZGlnb3MuIikNCn0NCg0KIyBDYWxjdWxhciBsaW1pdGVzIGRvIGVpeG8gWSAoY29uc2lkZXJhbmRvIGFtYmFzIGFzIHPDqXJpZXMpDQp5X21pbiA8LSBtaW4oYyhkYWRvc19jb21iaW5hZG9zJGluZGljZV9jb25zdW1vLCBkYWRvc19jb21iaW5hZG9zJGluZGljZV9yZW5kYSksIG5hLnJtID0gVFJVRSkNCnlfbWF4IDwtIG1heChjKGRhZG9zX2NvbWJpbmFkb3MkaW5kaWNlX2NvbnN1bW8sIGRhZG9zX2NvbWJpbmFkb3MkaW5kaWNlX3JlbmRhKSwgbmEucm0gPSBUUlVFKQ0KeV9yYW5nZSA8LSB5X21heCAtIHlfbWluDQp5X21pbl9hanVzdGFkbyA8LSBmbG9vcih5X21pbiAtIDAuMDUgKiB5X3JhbmdlKQ0KeV9tYXhfYWp1c3RhZG8gPC0gY2VpbGluZyh5X21heCArIDAuMDUgKiB5X3JhbmdlKQ0KDQojIENyaWFyIGdyw6FmaWNvIGNvbWJpbmFkbw0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgIyBTw6lyaWU6IENvbnN1bW8gKGNvbHVuYXMpIC0gQVpVTA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19jb21iaW5hZG9zICU+JSBzZWxlY3QodGltZXN0YW1wLCBpbmRpY2VfY29uc3VtbykpLA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICBuYW1lID0gIkNvbnN1bW8gZGFzIEZhbcOtbGlhcyIsDQogICAgY29sb3IgPSAiIzAyMDIzYyIsDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICAjIFPDqXJpZTogUmVuZGEgKGxpbmhhKSAtIERPVVJBRE8NCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfY29tYmluYWRvcyAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgaW5kaWNlX3JlbmRhKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlJlbmRhIGRhcyBGYW3DrWxpYXMiLA0KICAgIGNvbG9yID0gIiNmZWI3MTIiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gMyksDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICLDjW5kaWNlICgxwrogVHJpbS8yMDIwID0gMTAwKSIpLA0KICAgIG9wcG9zaXRlID0gRkFMU0UsDQogICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAie3ZhbHVlfSIpLA0KICAgIG1pbiA9IHlfbWluX2FqdXN0YWRvLA0KICAgIG1heCA9IHlfbWF4X2FqdXN0YWRvLA0KICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB2YWx1ZSA9IDEwMCwNCiAgICAgICAgY29sb3IgPSAiIzY2NjY2NiIsDQogICAgICAgIGRhc2hTdHlsZSA9ICJkYXNoIiwNCiAgICAgICAgd2lkdGggPSAxLA0KICAgICAgICBsYWJlbCA9IGxpc3QodGV4dCA9ICJCYXNlICgxwrogVHJpbS8yMDIwKSIpDQogICAgICApDQogICAgKQ0KICApICU+JQ0KICBoY194QXhpcygNCiAgICB0eXBlID0gJ2RhdGV0aW1lJywNCiAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICd7dmFsdWU6JVl9JykNCiAgKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJSZW5kYSB2cy4gQ29uc3VtbyBkYXMgRmFtw61saWFzIikgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiw41uZGljZSBCYXNlOiAxwrogVHJpbWVzdHJlLzIwMjAgPSAxMDAgLSBEYWRvcyBUcmltZXN0cmFpcyIpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsIChTR1MgLSBDw7NkaWdvczogMjIxMDAgZSAyOTAyOCkiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gMSwgdGV4dCA9ICcxWScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDIsIHRleHQgPSAnMlknKSwNCiAgICAgIGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSAzLCB0ZXh0ID0gJzNZJyksDQogICAgICBsaXN0KHR5cGUgPSAnYWxsJywgdGV4dCA9ICdUb2RvIHBlcsOtb2RvJykNCiAgICApLA0KICAgIHNlbGVjdGVkID0gMg0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgaGVhZGVyRm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHgiPjxiPntwb2ludC5rZXl9PC9iPjwvc3Bhbj48YnIvPicsDQogICAgcG9pbnRGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImNvbG9yOntzZXJpZXMuY29sb3J9Ij7il488L3NwYW4+IHtzZXJpZXMubmFtZX06IDxiPntwb2ludC55Oi4xZn08L2I+PGJyLz4nDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCINCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMSwNCiAgICAgIGdyb3VwUGFkZGluZyA9IDAuMDUsDQogICAgICBib3JkZXJXaWR0aCA9IDAuNQ0KICAgICksDQogICAgbGluZSA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBUUlVFLA0KICAgICAgY29ubmVjdE51bGxzID0gVFJVRQ0KICAgICkNCiAgKQ0KYGBgDQojIyBSRUZFUsOKTkNJQVMNCg0KSU5GT01PTkVZLiBQSUIgMjAyNjogbyBhbm8gZW0gcXVlIGEgZWNvbm9taWEgbsOjbyBkZXNhYmEsIG1hcyB0YW1iw6ltIG7Do28gZGVjb2xhLiBTw6NvIFBhdWxvOiBJbmZvTW9uZXksIDIwMjYuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly93d3cuaW5mb21vbmV5LmNvbS5ici9lY29ub21pYS9waWItMjAyNi1vLWFuby1lbS1xdWUtYS1lY29ub21pYS1uYW8tZGVzYWJhLW1hcy10YW1iZW0tbmFvLWRlY29sYS8+DQouIEFjZXNzbyBlbTogMDUgbWFyLiAyMDI2Lg0KDQpJTkZPTU9ORVkuIFNlcnZpw6dvczogc2V0b3IgcmVjdWEgZW0gZGV6ZW1icm8gZGUgMjAyNSwgYXBvbnRhIElCR0UsIGNvbSBpbXBhY3RvIGRlIGp1cm9zIGVsZXZhZG9zLiBTw6NvIFBhdWxvOiBJbmZvTW9uZXksIDIwMjYuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly93d3cuaW5mb21vbmV5LmNvbS5ici9lY29ub21pYS9zZXJ2aWNvcy1pYmdlLWRlemVtYnJvLTIwMjUtcXVlZGEtanVyb3MvPg0KLiBBY2Vzc28gZW06IDA1IG1hci4gMjAyNi4NCg0KRU1QUkVTQSBCUkFTSUwgREUgQ09NVU5JQ0HDh8ODTy4gUHLDqXZpYSBkbyBQSUIgYXBvbnRhIGNyZXNjaW1lbnRvIGRlIDIsNSUgZGEgZWNvbm9taWEgYnJhc2lsZWlyYSBlbSAyMDI1LiBCcmFzw61saWEsIERGOiBBZ8OqbmNpYSBCcmFzaWwsIDIwMjYuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly9hZ2VuY2lhYnJhc2lsLmViYy5jb20uYnIvZWNvbm9taWEvbm90aWNpYS8yMDI2LTAyL3ByZXZpYS1kby1waWItYXBvbnRhLWNyZXNjaW1lbnRvLWRlLTI1LWRhLWVjb25vbWlhLWJyYXNpbGVpcmEtZW0tMjAyNT4NCi4gQWNlc3NvIGVtOiAwNSBtYXIuIDIwMjYuDQoNCkZVTkRBw4fDg08gR0VUVUxJTyBWQVJHQVMuIEVjb25vbWlhIGNyZXNjZXUgMiwyJSBlbSAyMDI1LCBzZWd1bmRvIG8gTW9uaXRvciBkbyBQSUItRkdWLiBSaW8gZGUgSmFuZWlybzogRkdWIElCUkUsIDIwMjYuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly9wb3J0YWxpYnJlLmZndi5ici9ub3RpY2lhcy9lY29ub21pYS1jcmVzY2V1LTIyLWVtLTIwMjUtc2VndW5kby1vLW1vbml0b3ItZG8tcGliLWZndj4NCi4gQWNlc3NvIGVtOiAwNSBtYXIuIDIwMjYuDQoNClhQIElOVkVTVElNRU5UT1MuIEJyYXNpbCBNYWNybyBNZW5zYWw6IGNyZXNjaW1lbnRvIG1haXMgZm9ydGUgZSBpbmZsYcOnw6NvIG1haXMgYmFpeGEuIFPDo28gUGF1bG86IFhQIEludmVzdGltZW50b3MsIDIwMjYuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly9jb250ZXVkb3MueHBpLmNvbS5ici9lY29ub21pYS9icmFzaWwtbWFjcm8tbWVuc2FsLWNyZXNjaW1lbnRvLW1haXMtZm9ydGUtaW5mbGFjYW8tbWFpcy1iYWl4YS8+DQouIEFjZXNzbyBlbTogMDUgbWFyLiAyMDI2Lg0KDQpFRElUT1JBIEFCUklMLiBBdGl2aWRhZGUgZWNvbsO0bWljYSBicmFzaWxlaXJhIGNyZXNjZSAyLDUlIGVtIDIwMjUuIFPDo28gUGF1bG86IFZvY8OqIFMvQSwgMjAyNi4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3ZvY2VzYS5hYnJpbC5jb20uYnIvZWNvbm9taWEvYXRpdmlkYWRlLWVjb25vbWljYS1icmFzaWxlaXJhLWNyZXNjZS0yNS1lbS0yMDI1Lz4NCi4gQWNlc3NvIGVtOiAwNSBtYXIuIDIwMjYuDQoNCkJBTkNPIENFTlRSQUwgRE8gQlJBU0lMLiDDjW5kaWNlIGRlIEF0aXZpZGFkZSBFY29uw7RtaWNhIGRvIEJhbmNvIENlbnRyYWwgKElCQy1CcikuIEJyYXPDrWxpYSwgREY6IEJDQiwgMjAyNi4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3d3dy5iY2IuZ292LmJyL2VzdGF0aXN0aWNhcy9pYmMtYnI+DQouIEFjZXNzbyBlbTogMDUgbWFyLiAyMDI2DQoNCklOU1RJVFVUTyBCUkFTSUxFSVJPIERFIEdFT0dSQUZJQSBFIEVTVEFUw41TVElDQS4gSW5kaWNhZG9yZXMgZWNvbsO0bWljb3MgZSBzb2NpYWlzLiBSaW8gZGUgSmFuZWlybzogSUJHRSwgMjAyNi4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3d3dy5pYmdlLmdvdi5ici9pbmRpY2Fkb3Jlcz4NCi4gQWNlc3NvIGVtOiAwNSBtYXIuIDIwMjYuDQo=