Prefácio
Este relatório foi planejado para gerar informações e contribuir para um melhor planejamento das Unidades Educacionais(centros DE Ensino Superior, faculdades e universidades), visando à melhoria de desempenho dos estudantes nas edições futuras do ENADE. Os conteúdos e resultados são oriundos dos documentos oficiais constantes nos microdados divulgados pelo Inep, que podem ser baixados do endereço (INEP, 2018).
No presente estudo, busca-se, modelar a probabilidade de acertos das questões (itens) que compõem a prova, considerando-se a proficiência do estudante a partir da dificuldade e capacidade de discriminação dos itens e da probabilidade de acerto casual. Por permitir uma avaliação do conhecimento efetivamente dominado pelo estudante em cada item, esta iniciativa possibilita intervenções e ações pontuais de correção no processo de ensino-aprendizagem, de modo a identificar lacunas que compreendam possíveis deficiências de aprendizagem.
Espera-se, portanto, contribuir com a área de educação em diversos cursos com a busca de instrumentos alternativos para aferição da situação atual do ensino superior no Pará, consubstanciada na avaliação do desempenho acadêmico dos estudantes (proficiência), de modo a avaliar, detalhadamente, a situação encontrada em cada tipo de conhecimento que integra os componentes dos cursos em análise.
Exame Nacional de Desempenho dos Estudantes (ENADE)
O Que é o ENADE?
O Exame Nacional de Desempenho dos Estudantes (ENADE) é um dos pilares da avaliação do sistema Nacional de Avaliação da Educação Superior (SINAES), criado pela Lei n°10.861, de 14 de abril 2004. Além do ENADE, os processos de avaliação de Cursos de graduação e de Avaliação Institucional constituem o tripé avaliativo do SINAES, os resultado desses instrumentos avaliativos, reunidos, permitem conhecer, em profundidade, o modo de funcionamento e a qualidade dos cursos e instituições de Educação Superior(IES) de todo o Brasil.
O ENADE é uma prova aplicada anualmente aos alunos (ingressantes e concluintes) de cursos de graduação, em areas definidas pelo Ministério da Educação(MEC) e é realizado pelo INEP.
O objetivo do ENADE e avaliar o desempenho dos estudantes com relação aos conteúdos programáticos das diretrizes curriculares dos curso de graduação e o desenvolvimento de competências e habilidades necessárias à formação geral e profissional.
A prova do ENADE/2018 de acordo com o art. 6° da Portaria Inep n°444, com duração de 4 horas, apresentou um componente de avaliação na Formação Geral(FG), comum aos cursos de todas as áreas e um Componente Específico(CE) de acada área.
A parte referente ao CE contribui com 75% da nora final, equanto a parcela, referente a FG, contribui com 25%, em consonância com o número de questões da prova, 30 e 10, respectivamente. Os conceitos utilizados no ENADE variam de 1 a 5, e, à medida que esse valor aumenta, melhor terá sido o desempenho no exame.
Componentes do ENADE
- A nota final do estudante é obtida pela média ponderada das notas em cada componentes.
Conhecimento Específico(CE)
- 27 (vinte e sete) questões objetivas, com peso idêntico. Assim, a nota das questões de conhecimento específico é a proporção de acertos destas questões.
- 3 (três) questões discursivas nas quais 100% da nota referem-se ao conteúdo. A nota das questões discursivas de conhecimento específico é a média simples das notas dessas 3 questões.
As notas dos dois componentes, de Formação Geral e de Conhecimento Específico, são então arredondadas à primeira casa decimal. Para a obtenção da nota final do estudante, as notas dos dois componentes foram ponderadas por pesos proporcionais ao número de questões: 25% para FG e 75% para CE. esta nota foi também arredondada a uma casa decimal.
TRI em Avaliação Educacional
Referencial Teórico
No brasil, alguns trabalhos abordaram a Teoria da Resposta ao Item (TRI) para avaliação da proficiência com microdados do ENADE.
Francisco(2005), realizou um estudo de caso por meio da aplicação da TRI, com a finalidade de verificar o desempenho dos alunos formandos do curso de Matemática da Universidade Estadual do Centro-Oeste (UNICENTRO), em Guarapuava-PR, no período de 2000 até 2003, no Exame Nacional de Cursos (ENC);1
Oliveira(2006), utilizou a TRI para proceder a uma anÁlise das propriedades psicométricas da prova do ENADE de 2004, aplicada aos alunos dos cursos de medicina;2
Nogueira (2008), aplicou a TRI para avaliar as questões da prova de formação geral (FG) do ENADE, em especial aquelas que envolvem conceitos estatísticos, visando estimar a proficiência dos estudantes nos conteúdos avaliados e o ajuste dos itens ao modelo de Rasch;3
Primi et al.(2010), aplicaram a TRI aos dados do ENADE de psicologia de 2006, para determinar os pontos de corte, formamando grupos de competências requeridas para a resolução de itens;4
Coelho et al.(2014), utilizaram três conjuntos de dados, dentre eles respostas do curso de estatística do ENADE de 2009 via TRI;5
Scher et al.(2014), analisaram a prova do ENADE de 2009 do curso de Administração por meio da TRI;6
Lopes e Vendramini (2015), avaliaram as propriedades psicométricas da prova de Pedagogia do ENADE, aplicada em 2005, com o modelo de Rasch da TRI;7
Camargo et al.(2016), mensuraram a proficiência dos estudantes do curso de Ciências Contábeis no ENADE utilizando TRI;8
Spenassato e Tezza (2019), apresentaram as vantagens da utilização da TRI, em conjunto com a análise das questões objetivas do ENADE 2014 para o curso de Engenharia da Computação, comparando a dificuldade com os índices de facilidade dos itens divulgado no relatório da área pelo INEP(2016).9
Escala e Interpretação da TRI
A especificação das habilidades na matriz de cada área possibilita realizar interpretações mais precisas sobre o desempenho dos avaliados. Para isso, é fundamental explicitar qual a magnitude e/ou escalados resultados, escolhendo alguns intervalos de proficiência para identificar as habilidades cognitivas absorvidas pelos candidatos naquele intervalo.
O termo “item”, em substituição ao “questão”, é o padrão em avaliações e estudos educacionais. Especificamente, um item deve ser preparado para avaliar uma única habilidade(em outras situações, denominada de tópico ou descritor).Portanto, os itens estão intrinsecamente ligados à matriz de referência do exame.
Assim como nas principais avaliações do Brasil e exterior, os resultados de desempenho dos avaliados no ENADE são obtidos apartir da utilização da Teoria da Resposta ao Item (TRI).
Essa teoria surgiu da necessidade de superar as limitações presentes na apresentação de resultados somente através de percentuais de acertos e médias desses percentuais, medidas adotadas na denominada Teoria Clássica dos Testes(TCT).
O foco na TRI passa a ser os itens,e não simplesmente o número ou percentual de acertos.Cada item do ENADE, além de medir uma única habilidade, deve ter características estatísticas boas, deforma que possam realmente mensurar melhor as proficiências dos examinados.
Também é importante explicitar que as respostas aos itens são dicotomizadas(certo/errado) para aplicação da TRI no ENAD, de forma que não faz diferença qual alternativa incorreta o candidato marque,o resultado será sempre o mesmo.
O Que é a TRI?
É uma metodologia estatística que modela a probabilidade(um valor entre zero e um) de um particular indivíduo responder corretamente a um determinado item, através de uma função em forma de “S”(denominada de função Logística).
Cada item tem suas próprias características, que denominaremos parâmetros; cada indivíduo tem um certo “valor” de proficiência na área avaliada,que será a sua nota TRI.
Assume-se basicamente que, quanto maior a proficiência, maior a probabilidade de acerto do item.
Modelo Estatístico da TRI
- Neste estudo, é utilizado um modelo logístico unidimensional de 3 parâmetros (3pl), representado pelo traço latente Conhecimento em Curso de Graduação, considera-s euma única população, isto é, os alunos de graduação que realizará, a prova do ENADE/2018.
\[ P(Y_{ij}=1|\theta_{j}, \varsigma_{i})= c_{i}+(1-c_{i})\frac{1}{1+e^{-Da_{i}}(\theta_{j}-b_{i})}\] Com \(i=1,2,...,n\) onde:
\(Y_{ij}\): variável dicotômica que assume os valore 1(um), quando o indivíduo \(j\), no estudo em questão, responde corretamente o item, ou assume 0 (zero) caso contrário.
\(\theta_{j}\): representa o traço latente (parâmetro de habilidade) do j-ésimo aluno pesquisado;
Parâmetro de Discriminação(\(a_{1}\)): mede a capacidade que cada item possui para diferenciar aqueles participantes que sabem o conteúdo do item daqueles participantes que não o dominam, e está associado à inclinação da curva.
Parâmetro de Dificuldade(\(b_{i}\)): mede a dificuldade associada ao conteúdo do item, e quanto maior seu valor, mais difícil será o conteúdo do item. Ele é expresso na mesma escala da proficiência(habilidade). E muma prova de qualidade devemos ter itens de diferentes níveis de dificuldade para avaliar adequadamente os participantes em todos os níveis de conhecimento. Para valores de proficiência dos alunos apartir do valor de “\(b_{i}\)” do item, a probabilidade de acertar o item é maior do que a probabilidade de errar;
Parâmetro de Acerto Casual(\(c_{i}\)): em provas de múltipla escolha, um participante que não domina o conteúdo de um determinado item da prova pode responder corretamente a esse item por acerto casual. Com isso,esse parâmetro representa a probabilidade de um participante de baixa proficiência acertar o item de forma casual.
(\(D_{i}\)): é um faor de escala. igual a 1 se os parâmetros dos itens estimados na métrica da logística, igual a 1,7 se os paraâmetros dos itens são estimados na métrica da ogiva normal.
Etapas de Análise dos Dados
- Obtenção da base pública (microdados) do ENADE/2018 no sítio do INEP;
- Seleção dos Atributos (colunas);
- Verificação dos dados, a fim de identificar dados nulos ou inválidos;
- Remoção dos dados nulos ou considerados inválidos;
- Análise dos dados, incluindo as estatísticas;
- Geração de Gráficos e Mapas;
Desempenho do Curso de Direito
Objetivo Geral
Mensurar o Desempenho (proficiência) dos Estudantes do curso de DIREITO no ENADE por meio da Teoria da Resposta ao Item (TRI), indicando perspectivas de uso dos resultados para o aprimoramento do Projeto Político Pedagógico do CESUPA.
Objetivos Específicos
- Identificar qual o conhecimento especificamente em Direito, dominado pelos alunos;
- Comparar a dificuldade da prova em relação ao conhecimento (proficiência) do grupo de estudantes;
- Comprar os Resultados do ENADE/2018 do curso de Direito CESUPA versus Brasil;
- Discutir as contribuições da Avaliação em Larga Escala para o processo de formação dos estudantes dos cursos de graduação do CESUPA.
Participantes
A população do estudo é constituída pelos alunos concluintes do curso de graduação em Direito do CESUPA no Pará. Foram inscritos para aprova do ENADE/2018 um total de 250 estudantes, sendo a prova resolvida por 245 estudantes concluintes.
Instrumento Avaliativo
Para o estudo foram consideradas, exclusivamente, as questões objetivas, ou seja 35(trinta e cinco) questões, (oito de formação geral e vinte e sete de conhecimento específico).
Os microdados coletados forma dicotomizados, ou seja, como as resposta dos microdados disponibilizados pelo INEP são apresentados na forma de alternativas A, B, C, D ou E, estas foram comparadas ao gabarito. Assim, as respostas corretas receberam o valor 1(um) e as respostas erradas foram sisbustituídas por 0(zero).
Recursos Computacionais
Para mensuração do desempenho (proficiência) dos estudantes no ENADE foi implementada um script no software R-Project versão 4.0 e um ambiente de desenvolvimento integrado chamado Rstudio versão 1.1.5 com uso dos pacotes:
Carregando os Pacotes
Pacotes para TRI
Para Mensuração do Desempenho (proficiência via TRI) dos estudantes de Direito matriculados no CESUPA que fizeram a prova do ENADE EM 2018, foi necessário os seguintes pacotes.
library(mirt) # Multidimensional Item Response Theory
library(ltm) # Latent Trait Models under IRT
library(irtoys) # A Collection of Functions Related to Item Response Theory (IRT)
library(psych) # Procedures for Psychological, Psychometric, and Personality Research
Para o desenvolvimento de um ambiente de viasualização dos resultados, foi utilizado os recursos do pacote RMarkdown com alguns recuros extras.
Pacotes para RMarkdown
library(dplyr) # A Grammar of Data Manipulation
library(DT) # A Wrapper of the JavaScript Library 'DataTables'
library(rstatix) # Pipe-Friendly Framework for Basic Statistical Tests
library(tinytex) # Fazer Fórmulas via Latex
library(knitr) # A General-Purpose Package for Dynamic Report
library(kableExtra) # Construct Complex Table with 'kable' and Pipe Syntax
library(formattable) # Create 'Formattable' Data Structures
library(htmltools) # Tools for HTML
library(rmarkdown) # Dynamic Documents for R
library(distill) # RMarkdown Format for Scientific and Technical Writing
Pacotes para Viasualização Gráfica
Para a visualização gráfica dos microdados sobre o Enade 2018, serão utilizados vários pacotes combinados.
library(ggplot2)
library(plotly)
library(ggpubr)
library(gridExtra)
library(ggthemes)
Visualização Gráfica Nacional
- A distribuição das notas dos alunos matriculados nos cursos de Direito em 2018, referentes aos microdados do Enade para todas as unidades de federação no Brasil, estão disstribuídos por Raça e Região.
Análise das Notas dos Alunos por Raças
Calibração dos Itens
A estimação dos parâmetros dos modelos baseados na Teoria da Resposta ao Item foi realizada pelo Método de Máxima Verossimilhança Marginal, com a aplicação conjunta de um processo interativo chamado de algoritmo Newton-Raphson ou Scoring de Fisher, conforme ANDRADE et al. 2000.
Para a comparações entre os modelos gerados utilizou-se o Teste da Razão de Verossimilhança por meio da Anova e os critérios AIC (Akaike Information Criterion) e BIC (Bayesian Information Criterion), além de serem produzidos os gráficos com as Curvas Características do Item, Curvas de Informação do Item e Função de Informação Total do Teste.
Aplicação: Enade 2018 no CESUPA
Análise dos Itens via TCT
Em avaliação educacional, TCT tem como elemento central a prova como um todo e seus resultados são expressos em escores bruto, ou seja, no número total ou no percentual de itens respondidos corretamente. As propriedades psicométricas dos itens de uma prova realacionam-se aos parâmetros a segui: índice de dificuldade, índice de discriminação e corelação biserrial BOTGATTO e ANDRADE, 2012
A análise do funcionamento de cada questão(item) em relação ao grupo de alunos respondentes, possibilitam:
- Medir a qualidade e o funcionamento do item;
- Verificar problemas teóricos-técnicos da avaliação/questões;
- Traçar um perfil do aprendizado do grupo
- Verificar o nível de dificuldade da questão em relação aqueles grupos
Apresenta-se alguns resultados importantes para a compreenção da posterior análise da prova do ENADE/2018 para o curso de graduação em Direito do CESUPA, de acordo com a tabela abaixo.
Tabela 01. Percentual de Resposta por Tipo de Alternativa na Prova do ENADE/2018 do curso de Direito.
01-C |
1.3 |
7.7 |
81.2 |
9.0 |
0.9 |
02-A |
81.68 |
12.7 |
1.6 |
3.3 |
0.8 |
03-C |
8.6 |
1.2 |
77.6 |
4.9 |
7.8 |
04-B |
5.3 |
68.6 |
12.7 |
6.5 |
6.9 |
05-E |
|
|
|
|
|
| … |
… |
… |
… |
… |
… |
35-E |
|
|
|
|
|
Tabela 02. Percentual de acertos por Tipo de Alternativa na Prova do ENADE/2018 do curso de Direito.
Q01 |
22.4 |
55 |
77,6 |
190 |
Q02 |
18,4 |
45 |
81,6 |
200 |
Q03 |
22,4 |
55 |
77,6 |
190 |
Q04 |
31,4 |
77 |
68,6 |
168 |
Q05 |
34,3 |
84 |
65,7 |
161 |
| … |
… |
… |
… |
… |
Q32 |
78,8 |
193 |
21,2 |
52 |
Q33 |
47,8 |
117 |
52,2 |
128 |
Q34 |
77,6 |
190 |
22,4 |
55 |
Q35 |
65,3 |
160 |
34,7 |
85 |
- Nos resultados obtidos pelos respondentes (tabela 03), observa-se notas variando entre 9 a 27 acertos, de um total de 35 itens. Destaca-se que não ocorreu escore nulo (nenhum acerto), como também não existiram respondente que obtiveram escore total. A maioria acertou entre 16 e 21 questões.
Tabela 03. Descrição dos Escores Brutos para os itens na Prova do ENADE/2018 do curso de Direito.
Nº de Itens |
8 |
27 |
35 |
Média |
6.1 |
12.3 |
18.4 |
Moda |
7 |
12 |
16 |
Mínimo |
1(12.8%) |
4(14.8%) |
9(27.5%) |
Máximo |
8(100%) |
19(70.4%) |
27(77.1%) |
1º Quartil |
5(62.5%) |
10(37%) |
16(45.7%) |
2º Quartil |
7(87.5%) |
14(51.9%) |
21(60%) |
- As questõs aplicadas na prova do ENADE são avaliadas inicialmente quanto ao nível de facilidade. Para isso, verifica-se o percentual de acertos de cada questão da prova. A tabela 04 apresenta as classificações de questões segundo o percentual de acertos, considerando como Ìndide de Facilidade.
Tabela 04. Distribuição dos itens por Ìndice de Facilidade na Prova do ENADE/2018 do curso de Direito.
Muito Fácil |
0.91 ou mais |
9 |
1 (2.9%) |
Fácil |
0.71 a 0.90 |
1,2,3,6,7,8,12,13,25 |
9 (25.7%) |
Moderado |
0.31 a 0.70 |
4,5,10,14,15,16,17,20,21,24,27,30,31,33,35 |
15 (42.9%) |
Difícil |
0.11 a 0.30 |
11,18,19,23,26,28,29,32,34 |
9(27.5%) |
Muito Difícil |
0.00 a 0.10 |
22 |
1(2.9%) |
- As questões objetivas aplicadas na prova do ENADE devem ter um nível mínimo de poder de discriminação. Para ser considerada apta a avaliar os alunos
Tabela 05. Distribuição dos itens por Ìndice de Discriminação na Prova do ENADE/2018 do curso de Direito.
Muito Bom |
0.40 ou mais |
15 |
1 (2.9%) |
Bom |
0.30 a 0.39 |
1,2,4,5,7,11,17,20,24,25,28 |
11 (31.43%) |
Médio |
0.20 a 0.29 |
3,12,13,14,27,29,31,33,34 |
9 (25.71%) |
Fraco |
$ < 0.19$ |
6,8,9,10,16,18,19,22,23,26,32,35 |
12(34,29%) |
Análise dos Itens via TRI
Correlação Bisserial/Alpha de Cronbach
São apresentados os dados de correlação bisserial, sendo uma medida estatística da capacidade de discriminação do item, na medida em que verificar se um determinado item binário apresenta correlação significativa com o escore bruto resultante do conjunto dos itens do ENADE.
Para avaliar a qualidade do instrumento de medida (fidedignidade), foi aplicado o coeficiente alpha de Cronbach.
Tabela 06. Correlação Bisserial e Alpha de Cronbch para os itens na Prova do ENADE/2018 do curso de Direito.
Q01 |
0.30 |
0.62 |
Q02 |
0.34 |
0.61 |
Q03 |
0.22 |
0.62 |
Q04 |
0.38 |
0.61 |
Q05 |
0.35 |
0.62 |
| … |
….. |
…… |
Q32 |
0.14 |
0.62 |
Q33 |
0.28 |
0.62 |
Q34 |
0.23 |
0.62 |
Q35 |
0.17 |
0.63 |
- Foram eliminados 2 dos 35 itens analisados, que apresentaram coeficientes de correlação bisserial muito baixos, impossibilitando a convergência na estimação do modelo, ou seja, não permitiram a realização da calibração de parâmetros da TRI.
Unidimensionalidade dos Itens
Os modelos da TRI pressupõem-se que todos os itens medem uma única habilidade. Apesar do desempenho humano ser multi-determinado, uma vez que mais de uma habilidade participa da execução de qualquer tarefa, para satisfazer o postulado da unidimensionalidade do teste, é suficiente admitir que haja um fator dominante responsável pelo desempenho de todos os itens do teste no ENADE (LORD e HAMBLETON, 1982).
A evidência de validade psicométrica de construto para a prova doi ENADE/2018, foi obtida a partir da Análise Fatorial(AF) dos 35 itens que compõem a prova. A medida de adequação da amostra de kaiser-Meyer-Olkin(KMO) para a AF, igual a 0.76, indicou um resultado satisfatório.
Tabela 07. Teste de Confiabilidade para os itens na Prova do ENADE/2018 do curso de Direito.
Alpha de Crombach |
0.71 |
0.78 |
0.76 |
Teste de KMO |
0.72 |
0.73 |
0.76 |
Teste de bartlett |
P-valor=0.001 |
P-valor=0.001 |
P-valor=0.001 |
MSA |
> 0.70 |
> 0.70 |
> 0.70 |
O teste de esfericidade de Bartlett que permite avaliar a hipótese de igualdade de variância-covariância no grupo estudado, isto é, que a matriz de correlação é uma matriz identidade, revelou que existe correlação entre as variáveis estudadas (HAIR et al, 2005)
A partir dos dados, análise da dimensionalidade do conjunto de itens foi realizada através da Análise Fatorial de Informação Completa (MATOS e RODRIGUES, 2019).
Visualização Gráficas dos Itens
Curva Característica dos Itens
- A Figura abaixo mostra as curvas características dos itens, uma representação das relações entre a habilidade (ou traço latente) e a probabilidade de apresentar habilidade para cada item.

Referências Bibliográficas
Books
ANDRADE, D. F., TAVARES, H. R., VALLE, R. C. Teoria da resposta ao item: conceitos e aplicações. São Paulo, 2000. https://docs.ufpr.br/~aanjos/CE095/LivroTRI_DALTON.pdf
BAKER, F. B. The Basics of Item Response Theory. 2 ed. USA, 2001. https://eric.ed.gov/?id=ED458219
Yihui Xie, J. J. Allaire, Garrett Grolemund. R Markdown: The Definitive Guide. https://bookdown.org/yihui/rmarkdown/.
Yihui Xie. Dynamic Documents with R and knitr,(Chapman & Hall/CRC The R Series) 2nd Edition. https://yihui.org/knitr/.
Field, A. P., Miles, J., & Field, Z. (2012). Discovering statistics using R. https://aedmoodle.ufpa.br/pluginfile.php/401852/mod_resource/content/5/Material_PDF/1.Discovering%20Statistics%20Using%20R.pdf
Considerações Finais
- Este estudo teve como objetivo mensurar o desempenho(proficiência) no ENDE/2018, dos estudantes de Direito matriculados no CESUPA, por meio TRI. Apartir da estimação realizada com o modelo logistico de 2 parâmetros nos 35 itens da prova objetiva, verificou-se que, a prova não apresentou nem op domínio cognitivo compreendido pela escala. Este Resultado corrobora o baixo desempenho dos estudantes, apontado aspectos de fragilidades de aprendizagem.
Sugestão Pedagógica
Os resultados das avaliações somativas como a Aplicação de Simulado dará base de como a gestão acadêmica irá retornar aos alunos as devolutivas de um resultado não observado em uma prova até alcançar aprendizagem plea.
Os objetivos disciplinares e interdisciplinares devem estar presentes nas habilidades dos professores, assim como, a Taxonomia de Bloom, mobilizando competências aos alunos.
Créditos
FATTOR CONSULTORIA EM ANÁLISE DE DADOS 2022.
LS0tDQp0aXRsZTogJyoqRU5BREUtMjAxOCAoQ0VTVVBBKTogRGlhZ27Ds3N0aWNvIGRlIERlc2VtcGVuaG8gZW0gRGlyZWl0byB2aWEgVFJJKionDQphdXRob3I6DQotIG5hbWU6IE3DgVJJTyBWQUxFTlRFDQotIG5hbWU6IENBUkxPUyBQQUlYw4NPDQotIG5hbWU6IEJFQVRSSVogU0FMSU0NCi0gbmFtZTogQVVSRUxJQU5PIFNBTlRPUw0KLSBuYW1lOiBIRUxJVE9OIFRBVkFSRVMNCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBoaWdobGlnaHQ6IHRleHRtYXRlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0aGVtZTogY2VydWxlYW4NCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNQ0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogeWVzDQogICAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiAnNScNCmluc3RpdHV0ZTogRkFDVFRPUiBDT05TVUxUT1JJQSAyMDIxDQphYnN0cmFjdDogIiBGb2kgUmVhbGl6YWRvIHVtYSBhdmFpYcOnw6NvIGRlIERlc2VtcGVuaG8gZG9zIGFsdW5vcyBubyBDdXJzbyBkZSBEaXJlaXRvIG1hdHJpY3VsYWRvcyBubyBDRVNVUEEgZW0gMjAxOC4gT3MgY29udGXDumRvcyBlIHJlc3VsdGFkb3Mgc8OjbyBvcml1bmRvcyBkb3MgZG9jdW1lbnRvcyBvZmljaWFpcyBjb25zdGFudGVzIG5vcyBtaWNyb2RhZG9zIGRpdnVsZ2Fkb3MgcGVsbyBJTkVQLiBPIHJlbGF0w7NyaW8gdGVtIHBvciBvYmpldGl2byBhIGFwcmVzZW50YcOnw6NvIGRlIGluZm9ybWHDp8O1ZXMgYsOhc2ljYSwgbWFzIHF1ZSBwb3NzYW0gc2VyIHVzYWRhcyBwYXJhIGlkZW50aWZpY2FyIHBvbnRvcyBhIGFwcmltb3JhciBuYSBmb3JtYcOnw6NvIGRlIHNldXMgYWx1bm9zLiBQb3IgZmltLCBzw6NvIGFwcmVzZW50YWRhcyBhcyBpbmZvcm1hw6fDtWVzIHJlbGF0aXZhcyBhbyBkZXNlbXBlbmhvIGdlcmFsIGRvcyBlc3R1ZGFudGVzIGVtIG7DrXZlbCBCcmFzaWwgZSB0YW1iw6ltIG5hIHVuaWRhZGUgZXNjb2xhciwgdGFudG8gdXNhbmRvIG8gKipFc2NvcmUqKiBjb21vIGEgbm90YSB2aWEgKipUZW9yaWEgZGEgUmVzcG9zdGEgYW8gSXRlbSoqLCBkZW5vbWluYWRhIGRlICoqUHJvZmljacOqbmNpYSoqLCBlIGFzIHByb3BvcsOnw7VlcyBkZSBhY2VydG9zIHBvciBoYWJpbGlkYWRlIGUgY29tcGV0w6puY2lhcy4iDQotLS0NCg0KIyBQcmVmw6FjaW8NCg0KPGJyPg0KDQpFc3RlIHJlbGF0w7NyaW8gZm9pIHBsYW5lamFkbyBwYXJhIGdlcmFyIGluZm9ybWHDp8O1ZXMgZSBjb250cmlidWlyIHBhcmEgdW0gbWVsaG9yIHBsYW5lamFtZW50byBkYXMgVW5pZGFkZXMgRWR1Y2FjaW9uYWlzKGNlbnRyb3MgREUgRW5zaW5vIFN1cGVyaW9yLCBmYWN1bGRhZGVzIGUgdW5pdmVyc2lkYWRlcyksIHZpc2FuZG8gw6AgbWVsaG9yaWEgZGUgZGVzZW1wZW5obyBkb3MgZXN0dWRhbnRlcyBuYXMgZWRpw6fDtWVzIGZ1dHVyYXMgZG8gRU5BREUuIE9zIGNvbnRlw7pkb3MgZSByZXN1bHRhZG9zIHPDo28gb3JpdW5kb3MgZG9zIGRvY3VtZW50b3Mgb2ZpY2lhaXMgY29uc3RhbnRlcyBub3MgbWljcm9kYWRvcyBkaXZ1bGdhZG9zIHBlbG8gSW5lcCwgcXVlIHBvZGVtIHNlciBiYWl4YWRvcyBkbyBlbmRlcmXDp28gWyhJTkVQLCAyMDE4KV0oaHR0cHM6Ly93d3cuZ292LmJyL2luZXAvcHQtYnIvYWNlc3NvLWEtaW5mb3JtYWNhby9kYWRvcy1hYmVydG9zL21pY3JvZGFkb3MvZW5hZGUpLg0KDQo8YnI+DQoNCk5vIHByZXNlbnRlIGVzdHVkbywgYnVzY2Etc2UsIG1vZGVsYXIgYSBwcm9iYWJpbGlkYWRlIGRlIGFjZXJ0b3MgZGFzIHF1ZXN0w7VlcyAoaXRlbnMpIHF1ZSBjb21ww7VlbSBhIHByb3ZhLCBjb25zaWRlcmFuZG8tc2UgYSBwcm9maWNpw6puY2lhIGRvIGVzdHVkYW50ZSBhIHBhcnRpciBkYSBkaWZpY3VsZGFkZSBlIGNhcGFjaWRhZGUgZGUgZGlzY3JpbWluYcOnw6NvIGRvcyBpdGVucyBlIGRhIHByb2JhYmlsaWRhZGUgZGUgYWNlcnRvIGNhc3VhbC4gUG9yIHBlcm1pdGlyIHVtYSBhdmFsaWHDp8OjbyBkbyBjb25oZWNpbWVudG8gZWZldGl2YW1lbnRlIGRvbWluYWRvIHBlbG8gZXN0dWRhbnRlIGVtIGNhZGEgaXRlbSwgZXN0YSBpbmljaWF0aXZhIHBvc3NpYmlsaXRhIGludGVydmVuw6fDtWVzIGUgYcOnw7VlcyBwb250dWFpcyBkZSBjb3JyZcOnw6NvIG5vIHByb2Nlc3NvIGRlIGVuc2luby1hcHJlbmRpemFnZW0sIGRlIG1vZG8gYSBpZGVudGlmaWNhciBsYWN1bmFzIHF1ZSBjb21wcmVlbmRhbSBwb3Nzw612ZWlzIGRlZmljacOqbmNpYXMgZGUgYXByZW5kaXphZ2VtLg0KDQo8YnI+DQoNCkVzcGVyYS1zZSwgcG9ydGFudG8sIGNvbnRyaWJ1aXIgY29tIGEgw6FyZWEgZGUgZWR1Y2HDp8OjbyBlbSBkaXZlcnNvcyBjdXJzb3MgY29tIGEgYnVzY2EgZGUgaW5zdHJ1bWVudG9zIGFsdGVybmF0aXZvcyBwYXJhIGFmZXJpw6fDo28gZGEgc2l0dWHDp8OjbyBhdHVhbCBkbyBlbnNpbm8gc3VwZXJpb3Igbm8gUGFyw6EsIGNvbnN1YnN0YW5jaWFkYSBuYSBhdmFsaWHDp8OjbyBkbyBkZXNlbXBlbmhvIGFjYWTDqm1pY28gZG9zIGVzdHVkYW50ZXMgKHByb2ZpY2nDqm5jaWEpLCBkZSBtb2RvIGEgYXZhbGlhciwgZGV0YWxoYWRhbWVudGUsIGEgc2l0dWHDp8OjbyBlbmNvbnRyYWRhIGVtIGNhZGEgdGlwbyBkZSBjb25oZWNpbWVudG8gcXVlIGludGVncmEgb3MgY29tcG9uZW50ZXMgZG9zIGN1cnNvcyBlbSBhbsOhbGlzZS4gIA0KDQoNCiMgKipFeGFtZSBOYWNpb25hbCBkZSBEZXNlbXBlbmhvIGRvcyBFc3R1ZGFudGVzIChFTkFERSkqKiB7LnRhYnNldCAudGFic2V0LWZhZGV9DQojIyBPIFF1ZSDDqSBvIEVOQURFPw0KDQo8YnI+DQoNCk8gRXhhbWUgTmFjaW9uYWwgZGUgRGVzZW1wZW5obyBkb3MgRXN0dWRhbnRlcyAoRU5BREUpIMOpIHVtIGRvcyBwaWxhcmVzIGRhIGF2YWxpYcOnw6NvIGRvIHNpc3RlbWEgTmFjaW9uYWwgZGUgQXZhbGlhw6fDo28gZGEgRWR1Y2HDp8OjbyBTdXBlcmlvciAoU0lOQUVTKSwgY3JpYWRvIHBlbGEgKipMZWkgbsKwMTAuODYxKiosIGRlIDE0IGRlIGFicmlsIDIwMDQuIEFsw6ltIGRvIEVOQURFLCBvcyBwcm9jZXNzb3MgZGUgYXZhbGlhw6fDo28gZGUgQ3Vyc29zIGRlIGdyYWR1YcOnw6NvIGUgZGUgQXZhbGlhw6fDo28gSW5zdGl0dWNpb25hbCBjb25zdGl0dWVtIG8gdHJpcMOpIGF2YWxpYXRpdm8gZG8gU0lOQUVTLCBvcyByZXN1bHRhZG8gZGVzc2VzIGluc3RydW1lbnRvcyBhdmFsaWF0aXZvcywgcmV1bmlkb3MsIHBlcm1pdGVtIGNvbmhlY2VyLCBlbSBwcm9mdW5kaWRhZGUsIG8gbW9kbyBkZSBmdW5jaW9uYW1lbnRvIGUgYSBxdWFsaWRhZGUgZG9zIGN1cnNvcyBlIGluc3RpdHVpw6fDtWVzIGRlIEVkdWNhw6fDo28gU3VwZXJpb3IoSUVTKSBkZSB0b2RvIG8gQnJhc2lsLg0KDQotIE8gRU5BREUgw6kgdW1hIHByb3ZhIGFwbGljYWRhIGFudWFsbWVudGUgYW9zIGFsdW5vcyAoaW5ncmVzc2FudGVzIGUgY29uY2x1aW50ZXMpIGRlIGN1cnNvcyBkZSBncmFkdWHDp8OjbywgZW0gYXJlYXMgZGVmaW5pZGFzIHBlbG8gTWluaXN0w6lyaW8gZGEgRWR1Y2HDp8OjbyhNRUMpIGUgw6kgcmVhbGl6YWRvIHBlbG8gSU5FUC4NCg0KLSBPIG9iamV0aXZvIGRvIEVOQURFIGUgYXZhbGlhciBvIGRlc2VtcGVuaG8gZG9zIGVzdHVkYW50ZXMgY29tIHJlbGHDp8OjbyBhb3MgY29udGXDumRvcyBwcm9ncmFtw6F0aWNvcyBkYXMgZGlyZXRyaXplcyBjdXJyaWN1bGFyZXMgZG9zIGN1cnNvIGRlIGdyYWR1YcOnw6NvIGUgbyBkZXNlbnZvbHZpbWVudG8gZGUgY29tcGV0w6puY2lhcyBlIGhhYmlsaWRhZGVzIG5lY2Vzc8OhcmlhcyDDoCBmb3JtYcOnw6NvIGdlcmFsIGUgcHJvZmlzc2lvbmFsLg0KDQotIEEgcHJvdmEgZG8gRU5BREUvMjAxOCBkZSBhY29yZG8gY29tIG8gYXJ0LiA2wrAgZGEgUG9ydGFyaWEgSW5lcCBuwrA0NDQsIGNvbSBkdXJhw6fDo28gZGUgNCBob3JhcywgYXByZXNlbnRvdSB1bSBjb21wb25lbnRlIGRlIGF2YWxpYcOnw6NvIG5hICoqRm9ybWHDp8OjbyBHZXJhbChGRykqKiwgY29tdW0gYW9zIGN1cnNvcyBkZSB0b2RhcyBhcyDDoXJlYXMgZSB1bSAqKkNvbXBvbmVudGUgRXNwZWPDrWZpY28oQ0UpKiogZGUgYWNhZGEgw6FyZWEuDQoNCi0gQSBwYXJ0ZSByZWZlcmVudGUgYW8gKipDRSoqIGNvbnRyaWJ1aSBjb20gKio3NSUqKiBkYSBub3JhIGZpbmFsLCBlcXVhbnRvIGEgcGFyY2VsYSwgcmVmZXJlbnRlIGEgRkcsIGNvbnRyaWJ1aSBjb20gKioyNSUqKiwgZW0gY29uc29uw6JuY2lhIGNvbSBvIG7Dum1lcm8gZGUgcXVlc3TDtWVzIGRhIHByb3ZhLCAzMCBlIDEwLCByZXNwZWN0aXZhbWVudGUuIE9zIGNvbmNlaXRvcyB1dGlsaXphZG9zIG5vIEVOQURFIHZhcmlhbSBkZSAxIGEgNSwgZSwgw6AgbWVkaWRhIHF1ZSBlc3NlIHZhbG9yIGF1bWVudGEsIG1lbGhvciB0ZXLDoSBzaWRvIG8gZGVzZW1wZW5obyBubyBleGFtZS4gDQoNCg0KIyMgQ29tcG9uZW50ZXMgZG8gRU5BREUNCg0KLSBBIG5vdGEgZmluYWwgZG8gZXN0dWRhbnRlIMOpIG9idGlkYSBwZWxhIG3DqWRpYSBwb25kZXJhZGEgZGFzIG5vdGFzIGVtIGNhZGEgY29tcG9uZW50ZXMuDQoNCiMjIyBGb3JtYcOnw6NvIEdlcmFsKEZHKQ0KDQotIDggKG9pdG8pIHF1ZXN0w7VlcyBvYmpldGl2YXMgY29tIHBlc28gaWTDqm50aWNvLCBwZXJmYXplbmRvIDEwMCUuIEFzc2ltLCBhIG5vdGEgYnJ1dGEgZGFzIHF1ZXN0w7VlcyBvYmpldGl2YXMgZGUgRkcgw6kgYSBwcm9wb3LDp8OjbyBkZSBhY2VydG9zIGRlc3NhcyBxdWVzdMO1ZXMuDQoNCi0gMiAoZHVhcykgcXVlc3TDtWVzIGRpc2N1cnNpdmFzLCBjdWphIGNvcnJlw6fDo28gbGV2YSBlbSBjb25zaWRlcmHDp8OjbyBvIGNvbnRlw7pkbywgY29tIHBlc28gZGUgODAlLCBlIGFzcGVjdG9zIHJlZmVyZW50ZXMgw6AgTGluZ3VhIFBvcnR1Z3Vlc2EgY29tIHBlc28gZGUgMjAlIGRpc3RyaWJ1w61kb3Mgc2Egc2VndWludGUgbWFuZWlyYTogQXNwZWN0b3MgT3J0b2dyw6FmaWNvcyAoMzAlKSwgQXNwZWN0b3MgVGV4dHVhaXMgKDIwJSksIEFzcGVjdG9zIE1vcmZvc3NpbnTDoXRpY29zIGUgVm9jYWJ1bGFyZXMgKDUwJSkuIEEgbm90YSBkYXMgcXVlc3TDtWVzIGRpc2N1cnNpdmFzIGRlIEZvcm1hw6fDo28gZ2VyYWwgw6kgYSBtw6lkaWEgc2ltcGxlcyBkYXMgbm90YXMgZGFzIGR1YXMgcXVlc3TDtWVzIGRpc2N1cnNpdmFzLg0KDQoNCiMjIyBDb25oZWNpbWVudG8gRXNwZWPDrWZpY28oQ0UpDQoNCi0gMjcgKHZpbnRlIGUgc2V0ZSkgcXVlc3TDtWVzIG9iamV0aXZhcywgY29tIHBlc28gaWTDqm50aWNvLiBBc3NpbSwgYSBub3RhIGRhcyBxdWVzdMO1ZXMgZGUgY29uaGVjaW1lbnRvIGVzcGVjw61maWNvIMOpIGEgcHJvcG9yw6fDo28gZGUgYWNlcnRvcyBkZXN0YXMgcXVlc3TDtWVzLg0KLSAzICh0csOqcykgcXVlc3TDtWVzIGRpc2N1cnNpdmFzIG5hcyBxdWFpcyAxMDAlIGRhIG5vdGEgcmVmZXJlbS1zZSBhbyBjb250ZcO6ZG8uIEEgbm90YSBkYXMgcXVlc3TDtWVzIGRpc2N1cnNpdmFzIGRlIGNvbmhlY2ltZW50byBlc3BlY8OtZmljbyDDqSBhIG3DqWRpYSBzaW1wbGVzIGRhcyBub3RhcyBkZXNzYXMgMyBxdWVzdMO1ZXMuDQoNCg0KQXMgbm90YXMgZG9zIGRvaXMgY29tcG9uZW50ZXMsIGRlIEZvcm1hw6fDo28gR2VyYWwgZSBkZSBDb25oZWNpbWVudG8gRXNwZWPDrWZpY28sIHPDo28gZW50w6NvIGFycmVkb25kYWRhcyDDoCBwcmltZWlyYSBjYXNhIGRlY2ltYWwuIFBhcmEgYSBvYnRlbsOnw6NvIGRhIG5vdGEgZmluYWwgZG8gZXN0dWRhbnRlLCBhcyBub3RhcyBkb3MgZG9pcyBjb21wb25lbnRlcyBmb3JhbSBwb25kZXJhZGFzIHBvciBwZXNvcyBwcm9wb3JjaW9uYWlzIGFvIG7Dum1lcm8gZGUgcXVlc3TDtWVzOiAyNSUgcGFyYSBGRyBlIDc1JSBwYXJhIENFLiBlc3RhIG5vdGEgZm9pIHRhbWLDqW0gYXJyZWRvbmRhZGEgYSB1bWEgY2FzYSBkZWNpbWFsLg0KDQoNCiMgKipUUkkgZW0gQXZhbGlhw6fDo28gRWR1Y2FjaW9uYWwqKiANCiMjIFJlZmVyZW5jaWFsIFRlw7NyaWNvDQoNCk5vIGJyYXNpbCwgYWxndW5zIHRyYWJhbGhvcyBhYm9yZGFyYW0gYSBUZW9yaWEgZGEgUmVzcG9zdGEgYW8gSXRlbSAoVFJJKSBwYXJhDQphdmFsaWHDp8OjbyBkYSBwcm9maWNpw6puY2lhIGNvbSBtaWNyb2RhZG9zIGRvIEVOQURFLg0KDQotIEZyYW5jaXNjbygyMDA1KSwgcmVhbGl6b3UgdW0gZXN0dWRvIGRlIGNhc28gcG9yIG1laW8gZGEgYXBsaWNhw6fDo28gZGEgVFJJLCBjb20gYSBmaW5hbGlkYWRlIGRlDQp2ZXJpZmljYXIgbyBkZXNlbXBlbmhvIGRvcyBhbHVub3MgZm9ybWFuZG9zIGRvIGN1cnNvIGRlIE1hdGVtw6F0aWNhIGRhIFVuaXZlcnNpZGFkZQ0KRXN0YWR1YWwgZG8gQ2VudHJvLU9lc3RlIChVTklDRU5UUk8pLCBlbSBHdWFyYXB1YXZhLVBSLCBubyBwZXLDrW9kbyBkZSAyMDAwIGF0w6kgMjAwMywNCm5vIEV4YW1lIE5hY2lvbmFsIGRlIEN1cnNvcyAoRU5DKTtbMV0oaHR0cHM6Ly9hY2Vydm9kaWdpdGFsLnVmcHIuYnIvYml0c3RyZWFtL2hhbmRsZS8xODg0LzIzNDkvVFJJX0ZJTkFMLnBkZj9zZXF1ZW5jZT0xJmlzQWxsb3dlZD15KQ0KDQotIE9saXZlaXJhKDIwMDYpLCB1dGlsaXpvdSBhIFRSSSBwYXJhIHByb2NlZGVyIGEgdW1hIGFuw4FsaXNlIGRhcyBwcm9wcmllZGFkZXMgcHNpY29tw6l0cmljYXMNCmRhIHByb3ZhIGRvIEVOQURFIGRlIDIwMDQsIGFwbGljYWRhIGFvcyBhbHVub3MgZG9zIGN1cnNvcyBkZSBtZWRpY2luYTtbMl0oKQ0KDQoNCi0gTm9ndWVpcmEgKDIwMDgpLCBhcGxpY291IGEgVFJJIHBhcmEgYXZhbGlhciBhcyBxdWVzdMO1ZXMgZGEgcHJvdmEgZGUgZm9ybWHDp8OjbyBnZXJhbCAoRkcpDQpkbyBFTkFERSwgZW0gZXNwZWNpYWwgYXF1ZWxhcyBxdWUgZW52b2x2ZW0gY29uY2VpdG9zIGVzdGF0w61zdGljb3MsIHZpc2FuZG8gZXN0aW1hciBhIHByb2ZpY2nDqm5jaWEgZG9zIGVzdHVkYW50ZXMgbm9zIGNvbnRlw7pkb3MgYXZhbGlhZG9zIGUgbyBhanVzdGUgZG9zIGl0ZW5zIGFvIG1vZGVsbyBkZSBSYXNjaDtbM10oKQ0KDQoNCi0gUHJpbWkgZXQgYWwuKDIwMTApLCBhcGxpY2FyYW0gYSBUUkkgYW9zIGRhZG9zIGRvIEVOQURFIGRlIHBzaWNvbG9naWEgZGUgMjAwNiwgcGFyYSBkZXRlcm1pbmFyIG9zIHBvbnRvcyBkZSBjb3J0ZSwgZm9ybWFtYW5kbyBncnVwb3MgZGUgY29tcGV0w6puY2lhcyByZXF1ZXJpZGFzIHBhcmEgYSByZXNvbHXDp8OjbyBkZSBpdGVucztbNF0oKQ0KDQoNCi0gQ29lbGhvIGV0IGFsLigyMDE0KSwgdXRpbGl6YXJhbSB0csOqcyBjb25qdW50b3MgZGUgZGFkb3MsIGRlbnRyZSBlbGVzIHJlc3Bvc3RhcyBkbyBjdXJzbyBkZSBlc3RhdMOtc3RpY2EgZG8gRU5BREUgZGUgMjAwOSB2aWEgVFJJO1s1XSgpDQoNCi0gU2NoZXIgZXQgYWwuKDIwMTQpLCBhbmFsaXNhcmFtIGEgcHJvdmEgZG8gRU5BREUgZGUgMjAwOSBkbyBjdXJzbyBkZSBBZG1pbmlzdHJhw6fDo28gcG9yIG1laW8gZGEgVFJJO1s2XShodHRwczovL2NvcmUuYWMudWsvZG93bmxvYWQvcGRmLzMwNDA4MjQ3LnBkZikNCg0KDQotIExvcGVzIGUgVmVuZHJhbWluaSAoMjAxNSksIGF2YWxpYXJhbSBhcyBwcm9wcmllZGFkZXMgcHNpY29tw6l0cmljYXMgZGEgcHJvdmEgZGUgUGVkYWdvZ2lhIGRvIEVOQURFLCBhcGxpY2FkYSBlbSAyMDA1LCBjb20gbyBtb2RlbG8gZGUgUmFzY2ggZGEgVFJJO1s3XShodHRwczovL3d3dy5zY2llbG8uYnIvcGRmL2F2YWwvdjIwbjEvMTQxNC00MDc3LWF2YWwtMjAtMDEtMDAwMjcucGRmKQ0KDQoNCi0gQ2FtYXJnbyBldCBhbC4oMjAxNiksIG1lbnN1cmFyYW0gYSBwcm9maWNpw6puY2lhIGRvcyBlc3R1ZGFudGVzIGRvIGN1cnNvIGRlIENpw6puY2lhcyBDb250w6FiZWlzIG5vIEVOQURFIHV0aWxpemFuZG8gVFJJO1s4XShodHRwOi8vd3d3LnJlcGVjLm9yZy5ici9yZXBlYy9hcnRpY2xlL3ZpZXcvMTQwMS8xMTgzKQ0KDQotIFNwZW5hc3NhdG8gZSBUZXp6YSAoMjAxOSksIGFwcmVzZW50YXJhbSAgYXMgIHZhbnRhZ2VucyBkYSB1dGlsaXphw6fDo28gZGEgVFJJLCBlbSBjb25qdW50byBjb20gYSBhbsOhbGlzZSBkYXMgcXVlc3TDtWVzIG9iamV0aXZhcyBkbyBFTkFERSAyMDE0IHBhcmEgbyAgIGN1cnNvICAgZGUgRW5nZW5oYXJpYSAgIGRhICAgQ29tcHV0YcOnw6NvLCBjb21wYXJhbmRvIGEgZGlmaWN1bGRhZGUgY29tIG9zIMOtbmRpY2VzIGRlIGZhY2lsaWRhZGUgZG9zIGl0ZW5zIGRpdnVsZ2FkbyBubyByZWxhdMOzcmlvIGRhIMOhcmVhIHBlbG8gSU5FUCgyMDE2KS5bOV0oaHR0cHM6Ly9zZWVyLnVzY3MuZWR1LmJyL2luZGV4LnBocC9yZXZpc3RhX2luZm9ybWF0aWNhX2FwbGljYWRhL2FydGljbGUvdmlldy82OTg0LzMwNDkpDQoNCg0KIyMgRXNjYWxhIGUgSW50ZXJwcmV0YcOnw6NvIGRhIFRSSQ0KDQotIEEgZXNwZWNpZmljYcOnw6NvIGRhcyBoYWJpbGlkYWRlcyBuYSBtYXRyaXogZGUgY2FkYSDDoXJlYSBwb3NzaWJpbGl0YSByZWFsaXphciBpbnRlcnByZXRhw6fDtWVzIG1haXMgcHJlY2lzYXMgc29icmUgbyBkZXNlbXBlbmhvIGRvcyBhdmFsaWFkb3MuIFBhcmEgaXNzbywgw6kgZnVuZGFtZW50YWwgZXhwbGljaXRhciBxdWFsIGEgbWFnbml0dWRlIGUvb3UgZXNjYWxhZG9zIHJlc3VsdGFkb3MsIGVzY29saGVuZG8gYWxndW5zIGludGVydmFsb3MgZGUgcHJvZmljacOqbmNpYSBwYXJhIGlkZW50aWZpY2FyIGFzIGhhYmlsaWRhZGVzIGNvZ25pdGl2YXMgYWJzb3J2aWRhcyBwZWxvcyBjYW5kaWRhdG9zIG5hcXVlbGUgaW50ZXJ2YWxvLg0KDQotIE8gdGVybW8gIml0ZW0iLCBlbSBzdWJzdGl0dWnDp8OjbyBhbyAicXVlc3TDo28iLCDDqSBvIHBhZHLDo28gZW0gYXZhbGlhw6fDtWVzIGUgZXN0dWRvcyBlZHVjYWNpb25haXMuIEVzcGVjaWZpY2FtZW50ZSwgdW0gaXRlbSBkZXZlIHNlciBwcmVwYXJhZG8gcGFyYSBhdmFsaWFyIHVtYSDDum5pY2EgaGFiaWxpZGFkZShlbSBvdXRyYXMgc2l0dWHDp8O1ZXMsIGRlbm9taW5hZGEgZGUgdMOzcGljbyBvdSBkZXNjcml0b3IpLlBvcnRhbnRvLCBvcyBpdGVucyBlc3TDo28gaW50cmluc2VjYW1lbnRlIGxpZ2Fkb3Mgw6AgbWF0cml6IGRlIHJlZmVyw6puY2lhIGRvIGV4YW1lLg0KDQotIEFzc2ltIGNvbW8gbmFzIHByaW5jaXBhaXMgYXZhbGlhw6fDtWVzIGRvIEJyYXNpbCBlIGV4dGVyaW9yLCBvcyByZXN1bHRhZG9zIGRlIGRlc2VtcGVuaG8gZG9zIGF2YWxpYWRvcyBubyBFTkFERSBzw6NvIG9idGlkb3MgYXBhcnRpciBkYSB1dGlsaXphw6fDo28gZGEgKipUZW9yaWEgZGEgUmVzcG9zdGEgYW8gSXRlbSAoVFJJKSoqLg0KDQotIEVzc2EgdGVvcmlhIHN1cmdpdSBkYSBuZWNlc3NpZGFkZSBkZSBzdXBlcmFyIGFzIGxpbWl0YcOnw7VlcyBwcmVzZW50ZXMgbmEgYXByZXNlbnRhw6fDo28gZGUgcmVzdWx0YWRvcyBzb21lbnRlIGF0cmF2w6lzIGRlIHBlcmNlbnR1YWlzIGRlIGFjZXJ0b3MgZSBtw6lkaWFzIGRlc3NlcyBwZXJjZW50dWFpcywgbWVkaWRhcyBhZG90YWRhcyBuYSBkZW5vbWluYWRhICoqVGVvcmlhIENsw6Fzc2ljYSBkb3MgVGVzdGVzKFRDVCkqKi4NCg0KLSBPIGZvY28gbmEgVFJJIHBhc3NhIGEgc2VyIG9zIGl0ZW5zLGUgbsOjbyBzaW1wbGVzbWVudGUgbyBuw7ptZXJvIG91IHBlcmNlbnR1YWwgZGUgYWNlcnRvcy5DYWRhIGl0ZW0gZG8gRU5BREUsIGFsw6ltIGRlIG1lZGlyIHVtYSDDum5pY2EgaGFiaWxpZGFkZSwgZGV2ZSB0ZXIgY2FyYWN0ZXLDrXN0aWNhcyBlc3RhdMOtc3RpY2FzIGJvYXMsIGRlZm9ybWEgcXVlIHBvc3NhbSByZWFsbWVudGUgbWVuc3VyYXIgbWVsaG9yIGFzIHByb2ZpY2nDqm5jaWFzIGRvcyBleGFtaW5hZG9zLg0KDQoNCi0gVGFtYsOpbSDDqSBpbXBvcnRhbnRlIGV4cGxpY2l0YXIgcXVlIGFzIHJlc3Bvc3RhcyBhb3MgaXRlbnMgc8OjbyBkaWNvdG9taXphZGFzKGNlcnRvL2VycmFkbykgcGFyYSBhcGxpY2HDp8OjbyBkYSBUUkkgbm8gRU5BRCwgZGUgZm9ybWEgcXVlIG7Do28gZmF6IGRpZmVyZW7Dp2EgcXVhbCBhbHRlcm5hdGl2YSBpbmNvcnJldGEgbyBjYW5kaWRhdG8gbWFycXVlLG8gcmVzdWx0YWRvIHNlcsOhIHNlbXByZSBvIG1lc21vLg0KDQoNCiMjIE8gUXVlIMOpIGEgVFJJPw0KDQotIMOJIHVtYSBtZXRvZG9sb2dpYSBlc3RhdMOtc3RpY2EgcXVlIG1vZGVsYSBhIHByb2JhYmlsaWRhZGUodW0gdmFsb3IgZW50cmUgemVybyBlIHVtKSBkZSB1bSBwYXJ0aWN1bGFyIGluZGl2w61kdW8gcmVzcG9uZGVyIGNvcnJldGFtZW50ZSBhIHVtIGRldGVybWluYWRvIGl0ZW0sIGF0cmF2w6lzIGRlIHVtYSBmdW7Dp8OjbyBlbSBmb3JtYSBkZSAiUyIoZGVub21pbmFkYSBkZSBmdW7Dp8OjbyBMb2fDrXN0aWNhKS4NCg0KLSBDYWRhIGl0ZW0gdGVtIHN1YXMgcHLDs3ByaWFzIGNhcmFjdGVyw61zdGljYXMsIHF1ZSBkZW5vbWluYXJlbW9zIHBhcsOibWV0cm9zOyBjYWRhIGluZGl2w61kdW8gdGVtIHVtIGNlcnRvICJ2YWxvciIgZGUgcHJvZmljacOqbmNpYSBuYSDDoXJlYSBhdmFsaWFkYSxxdWUgc2Vyw6EgYSBzdWEgbm90YSBUUkkuDQoNCi0gQXNzdW1lLXNlIGJhc2ljYW1lbnRlIHF1ZSwgcXVhbnRvIG1haW9yIGEgcHJvZmljacOqbmNpYSwgbWFpb3IgYSBwcm9iYWJpbGlkYWRlIGRlIGFjZXJ0byBkbyBpdGVtLg0KDQojIyBNb2RlbG8gRXN0YXTDrXN0aWNvIGRhIFRSSSANCg0KLSBOZXN0ZSBlc3R1ZG8sIMOpIHV0aWxpemFkbyB1bSBtb2RlbG8gbG9nw61zdGljbyB1bmlkaW1lbnNpb25hbCBkZSAzIHBhcsOibWV0cm9zICgzcGwpLCByZXByZXNlbnRhZG8gcGVsbyB0cmHDp28gbGF0ZW50ZSAqKkNvbmhlY2ltZW50byBlbSBDdXJzbyBkZSBHcmFkdWHDp8OjbyoqLCBjb25zaWRlcmEtcyBldW1hIMO6bmljYSBwb3B1bGHDp8OjbywgaXN0byDDqSwgb3MgYWx1bm9zIGRlIGdyYWR1YcOnw6NvIHF1ZSByZWFsaXphcsOhLCBhIHByb3ZhIGRvIEVOQURFLzIwMTguIA0KDQoNCiQkIFAoWV97aWp9PTF8XHRoZXRhX3tqfSwgXHZhcnNpZ21hX3tpfSk9IGNfe2l9KygxLWNfe2l9KVxmcmFjezF9ezErZV57LURhX3tpfX0oXHRoZXRhX3tqfS1iX3tpfSl9JCQNCkNvbSAkaT0xLDIsLi4uLG4kIG9uZGU6DQoNCi0gKiokWV97aWp9JCoqOiB2YXJpw6F2ZWwgZGljb3TDtG1pY2EgcXVlIGFzc3VtZSBvcyB2YWxvcmUgMSh1bSksIHF1YW5kbyBvIGluZGl2w61kdW8gJGokLCBubyBlc3R1ZG8gZW0gcXVlc3TDo28sIHJlc3BvbmRlIGNvcnJldGFtZW50ZSBvIGl0ZW0sIG91IGFzc3VtZSAwICh6ZXJvKSBjYXNvIGNvbnRyw6FyaW8uIA0KDQotICoqJFx0aGV0YV97an0kOioqIHJlcHJlc2VudGEgbyB0cmHDp28gbGF0ZW50ZSAocGFyw6JtZXRybyBkZSBoYWJpbGlkYWRlKSBkbyBqLcOpc2ltbyBhbHVubyBwZXNxdWlzYWRvOw0KDQotICoqUGFyw6JtZXRybyBkZSBEaXNjcmltaW5hw6fDo28oJGFfezF9JCkqKjogbWVkZSBhIGNhcGFjaWRhZGUgcXVlIGNhZGEgaXRlbSBwb3NzdWkgcGFyYSBkaWZlcmVuY2lhciBhcXVlbGVzIHBhcnRpY2lwYW50ZXMgcXVlIHNhYmVtIG8gY29udGXDumRvIGRvIGl0ZW0gZGFxdWVsZXMgcGFydGljaXBhbnRlcyBxdWUgbsOjbyBvIGRvbWluYW0sIGUgZXN0w6EgYXNzb2NpYWRvIMOgIGluY2xpbmHDp8OjbyBkYSBjdXJ2YS4NCg0KLSAqKlBhcsOibWV0cm8gZGUgRGlmaWN1bGRhZGUoJGJfe2l9JCkqKjogbWVkZSBhIGRpZmljdWxkYWRlIGFzc29jaWFkYSBhbyBjb250ZcO6ZG8gZG8gaXRlbSwgZSBxdWFudG8gbWFpb3Igc2V1IHZhbG9yLCBtYWlzIGRpZsOtY2lsIHNlcsOhIG8gY29udGXDumRvIGRvIGl0ZW0uIEVsZSDDqSBleHByZXNzbyBuYSBtZXNtYSBlc2NhbGEgZGEgcHJvZmljacOqbmNpYShoYWJpbGlkYWRlKS4gRSBtdW1hIHByb3ZhIGRlIHF1YWxpZGFkZSBkZXZlbW9zIHRlciBpdGVucyBkZSBkaWZlcmVudGVzIG7DrXZlaXMgZGUgZGlmaWN1bGRhZGUgcGFyYSBhdmFsaWFyIGFkZXF1YWRhbWVudGUgb3MgcGFydGljaXBhbnRlcyBlbSB0b2RvcyBvcyBuw612ZWlzIGRlIGNvbmhlY2ltZW50by4gUGFyYSB2YWxvcmVzIGRlIHByb2ZpY2nDqm5jaWEgZG9zIGFsdW5vcyBhcGFydGlyIGRvIHZhbG9yIGRlICIkYl97aX0kIiBkbyBpdGVtLCBhIHByb2JhYmlsaWRhZGUgZGUgYWNlcnRhciBvIGl0ZW0gw6kgbWFpb3IgZG8gcXVlIGEgcHJvYmFiaWxpZGFkZSBkZSBlcnJhcjsNCg0KLSAqKlBhcsOibWV0cm8gZGUgQWNlcnRvIENhc3VhbCgkY197aX0kKSoqOiBlbSBwcm92YXMgZGUgbcO6bHRpcGxhIGVzY29saGEsIHVtIHBhcnRpY2lwYW50ZSBxdWUgbsOjbyBkb21pbmEgbyBjb250ZcO6ZG8gZGUgdW0gZGV0ZXJtaW5hZG8gaXRlbSBkYSBwcm92YSBwb2RlIHJlc3BvbmRlciBjb3JyZXRhbWVudGUgYSBlc3NlIGl0ZW0gcG9yIGFjZXJ0byBjYXN1YWwuIENvbSBpc3NvLGVzc2UgcGFyw6JtZXRybyByZXByZXNlbnRhIGEgcHJvYmFiaWxpZGFkZSBkZSB1bSBwYXJ0aWNpcGFudGUgZGUgYmFpeGEgcHJvZmljacOqbmNpYSBhY2VydGFyIG8gaXRlbSBkZSBmb3JtYSBjYXN1YWwuDQoNCi0gKiooJERfe2l9JCkqKjogw6kgdW0gZmFvciBkZSBlc2NhbGEuIGlndWFsIGEgMSBzZSBvcyBwYXLDom1ldHJvcyBkb3MgaXRlbnMgZXN0aW1hZG9zIG5hIG3DqXRyaWNhIGRhIGxvZ8Otc3RpY2EsIGlndWFsIGEgMSw3IHNlIG9zIHBhcmHDom1ldHJvcyBkb3MgaXRlbnMgc8OjbyBlc3RpbWFkb3MgbmEgbcOpdHJpY2EgZGEgb2dpdmEgbm9ybWFsLg0KDQoNCiMjIEV0YXBhcyBkZSBBbsOhbGlzZSBkb3MgRGFkb3MNCg0KLSBPYnRlbsOnw6NvIGRhIGJhc2UgcMO6YmxpY2EgKG1pY3JvZGFkb3MpIGRvIEVOQURFLzIwMTggbm8gc8OtdGlvIGRvIElORVA7DQotIFNlbGXDp8OjbyBkb3MgQXRyaWJ1dG9zIChjb2x1bmFzKTsNCi0gVmVyaWZpY2HDp8OjbyBkb3MgZGFkb3MsIGEgZmltIGRlIGlkZW50aWZpY2FyIGRhZG9zIG51bG9zIG91IGludsOhbGlkb3M7DQotIFJlbW/Dp8OjbyBkb3MgZGFkb3MgbnVsb3Mgb3UgY29uc2lkZXJhZG9zIGludsOhbGlkb3M7DQotIEFuw6FsaXNlIGRvcyBkYWRvcywgaW5jbHVpbmRvIGFzIGVzdGF0w61zdGljYXM7DQotIEdlcmHDp8OjbyBkZSBHcsOhZmljb3MgZSBNYXBhczsNCg0KIyAqKkRlc2VtcGVuaG8gZG8gQ3Vyc28gZGUgRGlyZWl0byoqIA0KIyMgT2JqZXRpdm8gR2VyYWwNCg0KTWVuc3VyYXIgbyBEZXNlbXBlbmhvIChwcm9maWNpw6puY2lhKSBkb3MgRXN0dWRhbnRlcyBkbyBjdXJzbyBkZSBESVJFSVRPIG5vIEVOQURFIHBvciBtZWlvIGRhIFRlb3JpYSBkYSBSZXNwb3N0YSBhbyBJdGVtIChUUkkpLCBpbmRpY2FuZG8gcGVyc3BlY3RpdmFzIGRlIHVzbyBkb3MgcmVzdWx0YWRvcyBwYXJhIG8gYXByaW1vcmFtZW50byBkbyBQcm9qZXRvIFBvbMOtdGljbyBQZWRhZ8OzZ2ljbyBkbyBDRVNVUEEuDQoNCiMjIE9iamV0aXZvcyBFc3BlY8OtZmljb3MNCg0KLSBJZGVudGlmaWNhciBxdWFsIG8gY29uaGVjaW1lbnRvIGVzcGVjaWZpY2FtZW50ZSBlbSBEaXJlaXRvLCBkb21pbmFkbyBwZWxvcyBhbHVub3M7DQotIENvbXBhcmFyIGEgZGlmaWN1bGRhZGUgZGEgcHJvdmEgZW0gcmVsYcOnw6NvIGFvIGNvbmhlY2ltZW50byAocHJvZmljacOqbmNpYSkgZG8gZ3J1cG8gZGUgZXN0dWRhbnRlczsNCi0gQ29tcHJhciBvcyBSZXN1bHRhZG9zIGRvIEVOQURFLzIwMTggZG8gY3Vyc28gZGUgRGlyZWl0byBDRVNVUEEgdmVyc3VzIEJyYXNpbDsNCi0gRGlzY3V0aXIgYXMgY29udHJpYnVpw6fDtWVzIGRhIEF2YWxpYcOnw6NvIGVtIExhcmdhIEVzY2FsYSBwYXJhIG8gcHJvY2Vzc28gZGUgZm9ybWHDp8OjbyBkb3MgZXN0dWRhbnRlcyBkb3MgY3Vyc29zIGRlIGdyYWR1YcOnw6NvIGRvIENFU1VQQS4NCg0KDQojIyBQYXJ0aWNpcGFudGVzDQpBIHBvcHVsYcOnw6NvIGRvIGVzdHVkbyDDqSBjb25zdGl0dcOtZGEgcGVsb3MgYWx1bm9zIGNvbmNsdWludGVzIGRvIGN1cnNvIGRlIGdyYWR1YcOnw6NvIGVtIERpcmVpdG8gZG8gQ0VTVVBBIG5vIFBhcsOhLiBGb3JhbSBpbnNjcml0b3MgcGFyYSBhcHJvdmEgZG8gRU5BREUvMjAxOCB1bSB0b3RhbCBkZSAyNTAgZXN0dWRhbnRlcywgc2VuZG8gYSBwcm92YSByZXNvbHZpZGEgcG9yIDI0NSBlc3R1ZGFudGVzIGNvbmNsdWludGVzLg0KDQojIyBJbnN0cnVtZW50byBBdmFsaWF0aXZvDQoNCi0gUGFyYSBvIGVzdHVkbyBmb3JhbSBjb25zaWRlcmFkYXMsIGV4Y2x1c2l2YW1lbnRlLCBhcyBxdWVzdMO1ZXMgb2JqZXRpdmFzLCBvdSBzZWphIDM1KHRyaW50YSBlIGNpbmNvKSBxdWVzdMO1ZXMsIChvaXRvIGRlIGZvcm1hw6fDo28gZ2VyYWwgZSB2aW50ZSBlIHNldGUgZGUgY29uaGVjaW1lbnRvIGVzcGVjw61maWNvKS4NCg0KLSBPcyBtaWNyb2RhZG9zIGNvbGV0YWRvcyBmb3JtYSBkaWNvdG9taXphZG9zLCBvdSBzZWphLCBjb21vIGFzIHJlc3Bvc3RhIGRvcyBtaWNyb2RhZG9zIGRpc3BvbmliaWxpemFkb3MgcGVsbyBJTkVQIHPDo28gYXByZXNlbnRhZG9zIG5hIGZvcm1hIGRlIGFsdGVybmF0aXZhcyBBLCBCLCBDLCBEIG91IEUsIGVzdGFzIGZvcmFtIGNvbXBhcmFkYXMgYW8gZ2FiYXJpdG8uIEFzc2ltLCBhcyByZXNwb3N0YXMgY29ycmV0YXMgcmVjZWJlcmFtIG8gdmFsb3IgMSh1bSkgZSBhcyByZXNwb3N0YXMgZXJyYWRhcyBmb3JhbSBzaXNidXN0aXR1w61kYXMgcG9yIDAoemVybykuDQoNCiMjIFJlY3Vyc29zIENvbXB1dGFjaW9uYWlzDQoNClBhcmEgbWVuc3VyYcOnw6NvIGRvIGRlc2VtcGVuaG8gKHByb2ZpY2nDqm5jaWEpIGRvcyBlc3R1ZGFudGVzIG5vIEVOQURFIGZvaSBpbXBsZW1lbnRhZGEgdW0gc2NyaXB0IG5vIHNvZnR3YXJlIFItUHJvamVjdCB2ZXJzw6NvIDQuMCBlIHVtIGFtYmllbnRlIGRlIGRlc2Vudm9sdmltZW50byBpbnRlZ3JhZG8gY2hhbWFkbyBSc3R1ZGlvIHZlcnPDo28gMS4xLjUgY29tIHVzbyBkb3MgcGFjb3RlczoNCg0KDQojIyMgQ2FycmVnYW5kbyBvcyBQYWNvdGVzDQojIyMjIFBhY290ZXMgcGFyYSBUUkkNCg0KUGFyYSBNZW5zdXJhw6fDo28gZG8gRGVzZW1wZW5obyAocHJvZmljacOqbmNpYSB2aWEgVFJJKSBkb3MgZXN0dWRhbnRlcyBkZSBEaXJlaXRvIG1hdHJpY3VsYWRvcyBubyBDRVNVUEEgcXVlIGZpemVyYW0gYSBwcm92YSBkbyBFTkFERSBFTSAyMDE4LCBmb2kgbmVjZXNzw6FyaW8gb3Mgc2VndWludGVzIHBhY290ZXMuDQoNCmBgYHtyIFBhY290ZXMxLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShtaXJ0KSAgICAjIE11bHRpZGltZW5zaW9uYWwgSXRlbSBSZXNwb25zZSBUaGVvcnkgDQpsaWJyYXJ5KGx0bSkgICAgICMgTGF0ZW50IFRyYWl0IE1vZGVscyB1bmRlciBJUlQNCmxpYnJhcnkoaXJ0b3lzKSAgIyBBIENvbGxlY3Rpb24gb2YgRnVuY3Rpb25zIFJlbGF0ZWQgdG8gSXRlbSBSZXNwb25zZSBUaGVvcnkgKElSVCkNCmxpYnJhcnkocHN5Y2gpICAgIyBQcm9jZWR1cmVzIGZvciBQc3ljaG9sb2dpY2FsLCBQc3ljaG9tZXRyaWMsIGFuZCBQZXJzb25hbGl0eSBSZXNlYXJjaA0KYGBgDQoNClBhcmEgbyBkZXNlbnZvbHZpbWVudG8gZGUgdW0gYW1iaWVudGUgZGUgdmlhc3VhbGl6YcOnw6NvIGRvcyByZXN1bHRhZG9zLCBmb2kgdXRpbGl6YWRvIG9zIHJlY3Vyc29zIGRvIHBhY290ZSBSTWFya2Rvd24gY29tIGFsZ3VucyByZWN1cm9zIGV4dHJhcy4NCg0KIyMjIyBQYWNvdGVzIHBhcmEgUk1hcmtkb3duDQpgYGB7ciBQYWNvdGVzMiwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoZHBseXIpICAgICAgICMgQSBHcmFtbWFyIG9mIERhdGEgTWFuaXB1bGF0aW9uIA0KbGlicmFyeShEVCkgICAgICAgICAgIyBBIFdyYXBwZXIgb2YgdGhlIEphdmFTY3JpcHQgTGlicmFyeSAnRGF0YVRhYmxlcycgDQpsaWJyYXJ5KHJzdGF0aXgpICAgICAjIFBpcGUtRnJpZW5kbHkgRnJhbWV3b3JrIGZvciBCYXNpYyBTdGF0aXN0aWNhbCBUZXN0cyANCmxpYnJhcnkodGlueXRleCkgICAgICMgRmF6ZXIgRsOzcm11bGFzIHZpYSBMYXRleCAgDQpsaWJyYXJ5KGtuaXRyKSAgICAgICAjIEEgR2VuZXJhbC1QdXJwb3NlIFBhY2thZ2UgZm9yIER5bmFtaWMgUmVwb3J0IA0KbGlicmFyeShrYWJsZUV4dHJhKSAgIyBDb25zdHJ1Y3QgQ29tcGxleCBUYWJsZSB3aXRoICdrYWJsZScgYW5kIFBpcGUgU3ludGF4IA0KbGlicmFyeShmb3JtYXR0YWJsZSkgIyBDcmVhdGUgJ0Zvcm1hdHRhYmxlJyBEYXRhIFN0cnVjdHVyZXMgDQpsaWJyYXJ5KGh0bWx0b29scykgICAjIFRvb2xzIGZvciBIVE1MIA0KbGlicmFyeShybWFya2Rvd24pICAgIyBEeW5hbWljIERvY3VtZW50cyBmb3IgUg0KbGlicmFyeShkaXN0aWxsKSAgICAgIyBSTWFya2Rvd24gRm9ybWF0IGZvciBTY2llbnRpZmljIGFuZCBUZWNobmljYWwgV3JpdGluZyANCmBgYA0KDQoNCiMjIyMgUGFjb3RlcyBwYXJhIFZpYXN1YWxpemHDp8OjbyBHcsOhZmljYQ0KDQpQYXJhIGEgdmlzdWFsaXphw6fDo28gZ3LDoWZpY2EgZG9zIG1pY3JvZGFkb3Mgc29icmUgbyBFbmFkZSAyMDE4LCBzZXLDo28gdXRpbGl6YWRvcyB2w6FyaW9zIHBhY290ZXMgY29tYmluYWRvcy4NCg0KYGBge3IgUGFjb3RlczMsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGdncGxvdDIpICAgIA0KbGlicmFyeShwbG90bHkpIA0KbGlicmFyeShnZ3B1YnIpIA0KbGlicmFyeShncmlkRXh0cmEpDQpsaWJyYXJ5KGdndGhlbWVzKQ0KYGBgDQoNCg0KDQpgYGB7ciBMZWl0dXJhLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpzZXR3ZCgiQzovVXNlcnMvbWFyaW8gRGhpZWdvL0RvY3VtZW50cy9FTkFERV8yMDE4X1JNYXJrZG93biIpDQpCYXNlX0NvbXBsZXRhPXJlYWQudGFibGUoIm1pY3JvZGFkb3NfZW5hZGVfMjAxOC50eHQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI9VFJVRSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgc2VwPSI7IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgZGVjPSIsIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgY29sQ2xhc3Nlcz1jKE5UX09CSl9GRz0ibnVtZXJpYyIpKQ0KYGBgDQoNCg0KYGBge3IgRmlsdHJvLCBlY2hvPSBGQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCkJhc2UgPSBCYXNlX0NvbXBsZXRhICU+JSBkcGx5cjo6c2VsZWN0IChOVF9PQkpfRkcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09fR1JVUE8sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09fUkVHSUFPX0NVUlNPLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFX0kwMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT19UVVJOT19HUkFEVUFDQU8sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQX1NFWE8sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVfSURBREUpDQpESVJFSVRPID0gQmFzZSAlPiUgZmlsdGVyIChDT19HUlVQTyA9PSAyKQ0KRElSRUlUTyA9IERJUkVJVE8gJT4lIG11dGF0ZShDVVJTTyA9IGNhc2Vfd2hlbihDT19HUlVQTz09IDIgfiAiRGlyZWl0byIpKQ0KYGBgDQoNCg0KDQoNCmBgYHtyIFRyYW5zb3JtYWNhbywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCkRJUkVJVE8gPSBESVJFSVRPICU+JSBtdXRhdGUoUkVHSUFPID0gY2FzZV93aGVuKENPX1JFR0lBT19DVVJTTyA9PSAxIH4gIk5vcnRlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPX1JFR0lBT19DVVJTTyA9PSAyIH4gIk5vcmRlc3RlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPX1JFR0lBT19DVVJTTyA9PSAzIH4gIlN1ZGVzdGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09fUkVHSUFPX0NVUlNPID09IDQgfiAiU3VsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPX1JFR0lBT19DVVJTTyA9PSA1IH4gIkNlbnRyby1PZXN0ZSIpKQ0KDQpESVJFSVRPID0gRElSRUlUTyAlPiUgbXV0YXRlKFJBQ0EgPSBjYXNlX3doZW4oUUVfSTAyID09ICJBIiB+ICJCcmFuY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFX0kwMiA9PSAiQiIgfiAiUHJldGEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFX0kwMiA9PSAiQyIgfiAiQW1hcmVsYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUVfSTAyID09ICJEIiB+ICJJbmRpZ2VuYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUVfSTAyID09ICJFIiB+ICJORCIpKQ0KDQpESVJFSVRPID0gRElSRUlUTyAlPiUgbXV0YXRlKFRVUk5PID0gY2FzZV93aGVuKENPX1RVUk5PX0dSQURVQUNBTyA9PSAiMSIgfiAiTWF0dXRpbm8iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT19UVVJOT19HUkFEVUFDQU8gPT0gIjIiIH4gIlZlc3BlcnRpbm8iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT19UVVJOT19HUkFEVUFDQU8gPT0gIjMiIH4gIkludGVncmFsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09fVFVSTk9fR1JBRFVBQ0FPID09ICI0IiB+ICJOb3R1cm5vIikpDQoNCkRJUkVJVE8gPSBESVJFSVRPICU+JSBtdXRhdGUoU0VYTyA9IGNhc2Vfd2hlbihUUF9TRVhPID09ICJGIiB+ICJGZW1pbmlubyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBfU0VYTyA9PSAiTSIgfiAiTWFzY3VsaW5vIikpDQpgYGANCg0KDQpgYGB7ciBSZW1vdmVuZG8sIGluY2x1ZGU9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCkRJUkVJVE8gPSBESVJFSVRPWywtYygyLDMsNCw1LDYpXQ0KbmFtZXMoRElSRUlUTylbMV0gPSAiTk9UQVMiDQoNCkRJUkVJVE8gJT4lIA0KICBzZWxlY3QoTk9UQVMpICU+JSANCiAgZ3JvdXBfYnkoTk9UQVMpICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsID0gbigpKQ0KDQpESVJFSVRPICU+JSANCiAgc2VsZWN0KFJFR0lBTykgJT4lIA0KICBncm91cF9ieShSRUdJQU8pICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsID0gbigpKQ0KDQpESVJFSVRPICU+JSANCiAgc2VsZWN0KFJBQ0EpICU+JSANCiAgZ3JvdXBfYnkoUkFDQSkgJT4lIA0KICBzdW1tYXJpc2UodG90YWwgPSBuKCkpDQoNCkRJUkVJVE8gJT4lIA0KICBzZWxlY3QoVFVSTk8pICU+JSANCiAgZ3JvdXBfYnkoVFVSTk8pICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsID0gbigpKQ0KDQpESVJFSVRPICU+JSANCiAgc2VsZWN0KFNFWE8pICU+JSANCiAgZ3JvdXBfYnkoU0VYTykgJT4lIA0KICBzdW1tYXJpc2UodG90YWwgPSBuKCkpDQpgYGANCg0KDQoNCiMjIFZpc3VhbGl6YcOnw6NvIEdyw6FmaWNhIE5hY2lvbmFsDQoNCi0gQSBkaXN0cmlidWnDp8OjbyBkYXMgbm90YXMgZG9zIGFsdW5vcyBtYXRyaWN1bGFkb3Mgbm9zIGN1cnNvcyBkZSBEaXJlaXRvIGVtIDIwMTgsIHJlZmVyZW50ZXMgYW9zIG1pY3JvZGFkb3MgZG8gRW5hZGUgcGFyYSB0b2RhcyBhcyB1bmlkYWRlcyBkZSBmZWRlcmHDp8OjbyBubyBCcmFzaWwsIGVzdMOjbyBkaXNzdHJpYnXDrWRvcyBwb3IgUmHDp2EgZSBSZWdpw6NvLg0KDQoNCiMjIyBBbsOhbGlzZSBkYXMgTm90YXMgZG9zIEFsdW5vcyBwb3IgKipSYcOnYXMqKg0KDQoNCmBgYHtyIGdyYWZpY28xLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZGFkb3M9RElSRUlUTw0KZ3JhZmljb19nZW9tX2RlbnNpdHkxPWdncGxvdChkYWRvcyxhZXMoTk9UQVMsZmlsbD1SQUNBKSkrDQogIGdlb21fZGVuc2l0eShhbHBoYT0wLjYpKw0KICB4bGFiKCJOb3RhIGRvcyBBbHVub3MiKSsNCiAgeWxhYigiRGVuc2lkYWRlIikrDQogIGdndGl0bGUoIkRlbnNpZGFkZSBkYXMgTm90YXMgZG9zIEFsdW5vcyBwb3IgUmHDp2FzIGUgUmVnacO1ZXMiKSsNCiAgZmFjZXRfZ3JpZCh+UkVHSUFPKQ0KZ2dwbG90bHkoZ3JhZmljb19nZW9tX2RlbnNpdHkxKQ0KYGBgDQoNCg0KDQoNCmBgYHtyIGdyYWZpY28yLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZGFkb3M9RElSRUlUTw0KZ3JhZmljb19oaXN0b2dyYW1hMSA9IGdncGxvdChkYWRvcywgYWVzKHg9Tk9UQVMsZmlsbD1SQUNBKSkrIA0KICBnZW9tX2hpc3RvZ3JhbSgpICsNCiAgZ2d0aXRsZSgiSGlzdG9ncmFtYSBkYXMgTm90YXMgZG9zIEFsdW5vcyBwb3IgUmHDp2FzIGUgUmVnacO1ZXMtRnJlcXXDqm5jaWEgU2ltcGxlcyIpKw0KICB4bGFiKCJOb3RhcyIpICsNCiAgeWxhYigiRnJlcXXDqm5jaWEgc2ltcGxlcyIpICsNCiAgZmFjZXRfZ3JpZCh+UkVHSUFPKQ0KZ2dwbG90bHkoZ3JhZmljb19oaXN0b2dyYW1hMSkNCmBgYA0KDQoNCg0KDQpgYGB7ciBncmFmaWNvMywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmRhZG9zPURJUkVJVE8NCmdyYWZpY29fYm94cGxvdDEgPSBnZ3Bsb3QoZGFkb3MsIGFlcyh4PVJBQ0EseT1OT1RBUyxmaWxsPVJBQ0EpKSArIA0KICBnZW9tX2JveHBsb3QoKSArDQogIGdndGl0bGUoIkJveC1wbG90IGRhcyBOb3RhcyBkb3MgQWx1bm9zIHBvciBSYcOnYXMgZSBSZWdpw7VlcyIpICsNCiAgeGxhYigiUmHDp2EiKSArDQogIHlsYWIoIk5vdGFzIikgKw0KICBmYWNldF9ncmlkKH5SRUdJQU8pDQpnZ3Bsb3RseShncmFmaWNvX2JveHBsb3QxKQ0KYGBgDQoNCg0KDQoNCg0KDQojIyBDYWxpYnJhw6fDo28gZG9zIEl0ZW5zDQoNCi0gQSBlc3RpbWHDp8OjbyBkb3MgcGFyw6JtZXRyb3MgZG9zIG1vZGVsb3MgYmFzZWFkb3MgbmEgVGVvcmlhIGRhIFJlc3Bvc3RhIGFvIEl0ZW0gZm9pIHJlYWxpemFkYSBwZWxvIE3DqXRvZG8gZGUgKipNw6F4aW1hIFZlcm9zc2ltaWxoYW7Dp2EgTWFyZ2luYWwqKiwgY29tIGEgYXBsaWNhw6fDo28gY29uanVudGEgZGUgdW0gcHJvY2Vzc28gaW50ZXJhdGl2byBjaGFtYWRvIGRlIGFsZ29yaXRtbyAqKk5ld3Rvbi1SYXBoc29uIG91IFNjb3JpbmcgZGUgRmlzaGVyKiosIGNvbmZvcm1lIFtBTkRSQURFIGV0IGFsLiAyMDAwXShodHRwczovL2RvY3MudWZwci5ici9+YWFuam9zL0NFMDk1L0xpdnJvVFJJX0RBTFRPTi5wZGYpLg0KDQotIFBhcmEgYSBjb21wYXJhw6fDtWVzIGVudHJlIG9zIG1vZGVsb3MgZ2VyYWRvcyB1dGlsaXpvdS1zZSBvIFRlc3RlIGRhIFJhesOjbyBkZSBWZXJvc3NpbWlsaGFuw6dhIHBvciBtZWlvIGRhICoqQW5vdmEqKiBlIG9zIGNyaXTDqXJpb3MgKipBSUMgKEFrYWlrZSBJbmZvcm1hdGlvbiBDcml0ZXJpb24pKiogZSAqKkJJQyAoQmF5ZXNpYW4gSW5mb3JtYXRpb24gQ3JpdGVyaW9uKSoqLCBhbMOpbSBkZSBzZXJlbSBwcm9kdXppZG9zIG9zIGdyw6FmaWNvcyBjb20gYXMgQ3VydmFzIENhcmFjdGVyw61zdGljYXMgZG8gSXRlbSwgQ3VydmFzIGRlIEluZm9ybWHDp8OjbyBkbyBJdGVtIGUgRnVuw6fDo28gZGUgSW5mb3JtYcOnw6NvIFRvdGFsIGRvIFRlc3RlLg0KDQoNCiMjIEFwbGljYcOnw6NvOiBFbmFkZSAyMDE4IG5vIENFU1VQQQ0KIyMjIEFuw6FsaXNlIGRvcyBJdGVucyB2aWEgVENUDQoNCi0gRW0gYXZhbGlhw6fDo28gZWR1Y2FjaW9uYWwsIFRDVCB0ZW0gY29tbyBlbGVtZW50byBjZW50cmFsIGEgcHJvdmEgY29tbyB1bSB0b2RvIGUgc2V1cyByZXN1bHRhZG9zIHPDo28gZXhwcmVzc29zIGVtIGVzY29yZXMgYnJ1dG8sIG91IHNlamEsIG5vIG7Dum1lcm8gdG90YWwgb3Ugbm8gcGVyY2VudHVhbCBkZSBpdGVucyByZXNwb25kaWRvcyBjb3JyZXRhbWVudGUuIEFzIHByb3ByaWVkYWRlcyBwc2ljb23DqXRyaWNhcyBkb3MgaXRlbnMgZGUgdW1hIHByb3ZhIHJlYWxhY2lvbmFtLXNlIGFvcyBwYXLDom1ldHJvcyBhIHNlZ3VpOiDDrW5kaWNlIGRlIGRpZmljdWxkYWRlLCDDrW5kaWNlIGRlIGRpc2NyaW1pbmHDp8OjbyBlIGNvcmVsYcOnw6NvIGJpc2VycmlhbCBbQk9UR0FUVE8gZSBBTkRSQURFLCAyMDEyXShodHRwOi8vd3d3LmZjYy5vcmcuYnIvcGVzcXVpc2EvcHVibGljYWNvZXMvZWFlL2FycXVpdm9zLzE3MzMvMTczMy5wZGYpDQoNCi0gQSBhbsOhbGlzZSBkbyBmdW5jaW9uYW1lbnRvIGRlIGNhZGEgcXVlc3TDo28oaXRlbSkgZW0gcmVsYcOnw6NvIGFvIGdydXBvIGRlIGFsdW5vcyByZXNwb25kZW50ZXMsIHBvc3NpYmlsaXRhbToNCiAgICAtICoqTWVkaXIgYSBxdWFsaWRhZGUgZSBvIGZ1bmNpb25hbWVudG8gZG8gaXRlbSoqOyANCiAgICAtICoqVmVyaWZpY2FyIHByb2JsZW1hcyB0ZcOzcmljb3MtdMOpY25pY29zIGRhIGF2YWxpYcOnw6NvL3F1ZXN0w7VlcyoqOyANCiAgICAtICoqVHJhw6dhciB1bSBwZXJmaWwgZG8gYXByZW5kaXphZG8gZG8gZ3J1cG8qKg0KICAgIC0gKipWZXJpZmljYXIgbyBuw612ZWwgZGUgZGlmaWN1bGRhZGUgZGEgcXVlc3TDo28gZW0gcmVsYcOnw6NvIGFxdWVsZXMgZ3J1cG9zKioNCg0KLSBBcHJlc2VudGEtc2UgYWxndW5zIHJlc3VsdGFkb3MgaW1wb3J0YW50ZXMgcGFyYSBhIGNvbXByZWVuw6fDo28gZGEgcG9zdGVyaW9yIGFuw6FsaXNlIGRhIHByb3ZhIGRvIEVOQURFLzIwMTggcGFyYSBvIGN1cnNvIGRlIGdyYWR1YcOnw6NvIGVtIERpcmVpdG8gZG8gQ0VTVVBBLCBkZSBhY29yZG8gY29tIGEgdGFiZWxhIGFiYWl4by4NCg0KDQoqKlRhYmVsYSAwMSoqLiBQZXJjZW50dWFsIGRlIFJlc3Bvc3RhIHBvciBUaXBvIGRlIEFsdGVybmF0aXZhIG5hIFByb3ZhIGRvIEVOQURFLzIwMTggZG8gY3Vyc28gZGUgRGlyZWl0by4NCg0KDQotLS0NCg0KIHwgKipJdGVucy9HYWJhcml0byAqKiB8ICoqQSoqICAgICAgfCAqKkIqKiAgICAgfCAqKkMqKiAgICAgfCAgICAgICoqRCoqIHwgICAgICoqRSoqIHwgDQogfCA6LS0tLTogICAgICAgICAgICAgIHwgOi0tLS06ICAgICB8Oi0tLS06ICAgICB8IDotLS0tOiAgICB8IDotLS0tOiAgICAgfCA6LS0tLTogICAgfA0KIHwgICAgYDAxLUNgICAgICAgICAgICB8ICAxLjMgICAgICAgfCAgNy43ICAgICAgfCAgKio4MS4yKiogfCAgIDkuMCAgICAgIHwgICAwLjkgICAgIHwNCiB8ICAgIGAwMi1BYCAgICAgICAgICAgfCAgKio4MS42OCoqIHwgIDEyLjcgICAgIHwgIDEuNiAgICAgIHwgICAzLjMgICAgICB8ICAgMC44ICAgICB8ICAgIA0KIHwgICAgYDAzLUNgICAgICAgICAgICB8ICA4LjYgICAgICAgfCAgMS4yICAgICAgfCAgKio3Ny42KiogfCAgIDQuOSAgICAgIHwgICA3LjggICAgIHwgDQogfCAgICBgMDQtQmAgICAgICAgICAgIHwgIDUuMyAgICAgICB8ICAqKjY4LjYqKiB8ICAxMi43ICAgICB8ICAgNi41ICAgICAgfCAgIDYuOSAgICAgfCANCiB8ICAgIGAwNS1FYCAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICB8IA0KIHwgICAgICAuLi4gICAgICAgICAgICB8ICAuLi4gICAgICAgfCAgLi4uICAgICAgfCAgLi4uICAgICAgfCAuLi4gICAgICAgIHwgLi4uICAgICAgIHwNCiB8ICAgIGAzNS1FYCAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICB8IA0KDQotLS0NCg0KKipUYWJlbGEgMDIqKi4gUGVyY2VudHVhbCBkZSBhY2VydG9zIHBvciBUaXBvIGRlIEFsdGVybmF0aXZhIG5hIFByb3ZhIGRvIEVOQURFLzIwMTggZG8gY3Vyc28gZGUgRGlyZWl0by4NCg0KLS0tDQoNCiB8ICoqSXRlbnMqKiAgICAgICAgICB8ICoqRXJyb3MqKiAgICAgfCAqKigkbl97MX0kKSoqIHwgKipBY2VydG9zKiogICAgfCAqKigkbl97Mn0kKSoqIHwgDQogfCA6LS0tLS0tLS0tLS0tOiAgICAgfCA6LS0tLS0tLS0tLS06IHw6LS0tLS0tLS0tLS0tOiB8IDotLS0tLS0tLS0tLS06IHwgOi0tLS0tLS0tLS0tLTp8IA0KIHwgICAgYFEwMWAgICAgICAgICAgIHwgICAgICAyMi40ICAgICB8ICA1NSAgICAgICAgICAgfCAgNzcsNiAgICAgICAgICB8ICAgMTkwICAgICAgICAgfA0KIHwgICAgYFEwMmAgICAgICAgICAgIHwgICAgICAxOCw0ICAgICB8ICA0NSAgICAgICAgICAgfCAgODEsNiAgICAgICAgICB8ICAgMjAwICAgICAgICAgfCAgICAgICAgICANCiB8ICAgIGBRMDNgICAgICAgICAgICB8ICAgICAgMjIsNCAgICAgfCA1NSAgICAgICAgICAgIHwgIDc3LDYgICAgICAgICAgfCAgIDE5MCAgICAgICAgIHwgICANCiB8ICAgIGBRMDRgICAgICAgICAgICB8ICAgICAgMzEsNCAgICAgfCA3NyAgICAgICAgICAgIHwgNjgsNiAgICAgICAgICAgfCAgIDE2OCAgICAgICAgIHwgICANCiB8ICAgIGBRMDVgICAgICAgICAgICB8ICAgICAgMzQsMyAgICAgfCA4NCAgICAgICAgICAgIHwgNjUsNyAgICAgICAgICAgfCAgIDE2MSAgICAgICAgIHwgICAgDQogfCAgICAgIC4uLiAgICAgICAgICAgfCAgLi4uICAgICAgICAgIHwgIC4uLiAgICAgICAgICB8ICAuLi4gICAgICAgICAgIHwgLi4uICAgICAgICAgICB8IA0KIHwgICAgYFEzMmAgICAgICAgICAgIHwgICAgICA3OCw4ICAgICB8IDE5MyAgICAgICAgICAgfCAyMSwyICAgICAgICAgICB8ICAgNTIgICAgICAgICAgfCAgICAgICAgICAgICAgIA0KIHwgICAgYFEzM2AgICAgICAgICAgIHwgICAgIDQ3LDggICAgICB8IDExNyAgICAgICAgICAgfCA1MiwyICAgICAgICAgICB8ICAxMjggICAgICAgICAgfCAgICAgICAgICAgICAgIA0KIHwgICAgYFEzNGAgICAgICAgICAgIHwgICAgIDc3LDYgICAgICB8IDE5MCAgICAgICAgICAgfCAyMiw0ICAgICAgICAgICB8ICAgNTUgICAgICAgICAgfCAgICAgICAgICAgICAgDQogfCAgICBgUTM1YCAgICAgICAgICAgfCAgICAgNjUsMyAgICAgIHwgMTYwICAgICAgICAgICB8IDM0LDcgICAgICAgICAgIHwgICA4NSAgICAgICAgICB8ICAgICAgICAgICAgICANCi0tLQ0KDQoNCi0gTm9zIHJlc3VsdGFkb3Mgb2J0aWRvcyBwZWxvcyByZXNwb25kZW50ZXMgKHRhYmVsYSAwMyksIG9ic2VydmEtc2Ugbm90YXMgdmFyaWFuZG8gZW50cmUgOSBhIDI3IGFjZXJ0b3MsIGRlIHVtIHRvdGFsIGRlIDM1IGl0ZW5zLiBEZXN0YWNhLXNlIHF1ZSBuw6NvIG9jb3JyZXUgZXNjb3JlIG51bG8gKG5lbmh1bSBhY2VydG8pLCBjb21vIHRhbWLDqW0gbsOjbyBleGlzdGlyYW0gcmVzcG9uZGVudGUgcXVlIG9idGl2ZXJhbSBlc2NvcmUgdG90YWwuIEEgbWFpb3JpYSBhY2VydG91IGVudHJlIDE2IGUgMjEgcXVlc3TDtWVzLiANCg0KKipUYWJlbGEgMDMqKi4gRGVzY3Jpw6fDo28gZG9zIEVzY29yZXMgQnJ1dG9zIHBhcmEgb3MgaXRlbnMgbmEgUHJvdmEgZG8gRU5BREUvMjAxOCBkbyBjdXJzbyBkZSBEaXJlaXRvLg0KDQotLS0NCg0KIHwgKipFc3RhdMOtc3RpY2EgKiogICAgfCAqKkZvcm1hw6fDo28gR2VyYWwqKiB8ICoqQ29tcG9uZW50ZSBFc3BlY8OtZmljbyoqIHwgKipOb3RhIEJydXRhKiogfCANCiB8IDotLS0tOiAgICAgICAgICAgICAgfCAgICAgICAgIDotLS0tOiAgICAgfCAgICAgICAgICAgOi0tLS06ICAgICAgICAgIHwgICAgICA6LS0tLTogICAgfCAgICAgIA0KIHwgICAgYE7CuiBkZSBJdGVuc2AgICAgfCAgICAgICAgIDggICAgICAgICAgfCAgICAgICAgICAgICAyNyAgICAgICAgICAgIHwgICAgICAzNSAgICAgICAgfCAgIA0KIHwgICAgYE3DqWRpYWAgICAgICAgICAgfCAgICAgICAgNi4xICAgICAgICAgfCAgICAgICAgICAgIDEyLjMgICAgICAgICAgIHwgICAgICAxOC40ICAgICAgfCAgICAgICANCiB8ICAgIGBNb2RhYCAgICAgICAgICAgfCAgICAgICAgIDcgICAgICAgICAgfCAgICAgICAgICAgIDEyICAgICAgICAgICAgIHwgICAgICAxNiAgICAgICAgfCANCiB8ICAgIGBNw61uaW1vYCAgICAgICAgIHwgICAgICAgIDEoMTIuOCUpICAgIHwgICAgICAgICAgICA0KDE0LjglKSAgICAgICB8ICAgICAgOSgyNy41JSkgIHwgDQogfCAgICBgTcOheGltb2AgICAgICAgICB8ICAgICAgICA4KDEwMCUpICAgICB8ICAgICAgICAgICAgMTkoNzAuNCUpICAgICAgfCAgICAgIDI3KDc3LjElKSB8IA0KIHwgICAgYDHCuiBRdWFydGlsYCAgICAgfCAgICAgICAgNSg2Mi41JSkgICAgfCAgICAgICAgICAgIDEwKDM3JSkgICAgICAgIHwgICAgICAxNig0NS43JSkgfCANCiB8ICAgIGAywrogUXVhcnRpbGAgICAgIHwgICAgICAgIDcoODcuNSUpICAgIHwgICAgICAgICAgICAxNCg1MS45JSkgICAgICB8ICAgICAgMjEoNjAlKSAgIHwgDQoNCi0tLQ0KDQotIEFzIHF1ZXN0w7VzIGFwbGljYWRhcyBuYSBwcm92YSBkbyBFTkFERSBzw6NvIGF2YWxpYWRhcyBpbmljaWFsbWVudGUgcXVhbnRvIGFvIG7DrXZlbCBkZSBmYWNpbGlkYWRlLiBQYXJhIGlzc28sIHZlcmlmaWNhLXNlIG8gcGVyY2VudHVhbCBkZSBhY2VydG9zIGRlIGNhZGEgcXVlc3TDo28gZGEgcHJvdmEuIEEgdGFiZWxhIDA0IGFwcmVzZW50YSBhcyBjbGFzc2lmaWNhw6fDtWVzIGRlIHF1ZXN0w7VlcyBzZWd1bmRvIG8gcGVyY2VudHVhbCBkZSBhY2VydG9zLCBjb25zaWRlcmFuZG8gY29tbyAqKsOMbmRpZGUgZGUgRmFjaWxpZGFkZSoqLiANCg0KKipUYWJlbGEgMDQqKi4gRGlzdHJpYnVpw6fDo28gZG9zIGl0ZW5zIHBvciDDjG5kaWNlIGRlIEZhY2lsaWRhZGUgbmEgUHJvdmEgZG8gRU5BREUvMjAxOCBkbyBjdXJzbyBkZSBEaXJlaXRvLg0KIA0KIC0tLQ0KIA0KIHwgKipDbGFzc2lmaWNhw6fDo28gKiogfCAqKkluZGljZSBkZSBGYWNpbGlkYWRlKiogfCAqKk7CuiBkbyBJdGVucyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqTsK6IGRlIEFtb3N0cmEqKiB8IA0KIHwgOi0tLS0tLS0tLS0tLTogICAgIHwgICA6LS0tLS0tLS0tLS0tOiAgICAgICAgIHwgICAgIDotLS0tLS0tLS0tLS06ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA6LS0tLS0tLS0tLS0tOiAgIHwgICAgICANCiB8ICAgIGBNdWl0byBGw6FjaWxgICAgfCAgICAgMC45MSBvdSBtYWlzICAgICAgICAgfCAgICAgICAgOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAxICgyLjklKSAgICAgfCAgIA0KIHwgICAgYEbDoWNpbGAgICAgICAgICB8ICAgICAwLjcxIGEgMC45MCAgICAgICAgICB8ICAxLDIsMyw2LDcsOCwxMiwxMywyNSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIDkgKDI1LjclKSAgICB8ICAgICAgIA0KIHwgICAgYE1vZGVyYWRvYCAgICAgIHwgICAgIDAuMzEgYSAwLjcwICAgICAgICAgIHwgIDQsNSwxMCwxNCwxNSwxNiwxNywyMCwyMSwyNCwyNywzMCwzMSwzMywzNSB8ICAgICAgMTUgKDQyLjklKSAgIHwgDQogfCAgICBgRGlmw61jaWxgICAgICAgIHwgICAgIDAuMTEgYSAwLjMwICAgICAgICAgIHwgIDExLDE4LDE5LDIzLDI2LDI4LDI5LDMyLDM0ICAgICAgICAgICAgICAgICB8ICAgICAgOSgyNy41JSkgICAgIHwgDQogfCAgICBgTXVpdG8gRGlmw61jaWxgIHwgICAgIDAuMDAgYSAwLjEwICAgICAgICAgIHwgICAgICAgICAgICAyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgMSgyLjklKSAgICAgIHwgDQoNCi0tLQ0KDQotIEFzIHF1ZXN0w7VlcyBvYmpldGl2YXMgYXBsaWNhZGFzIG5hIHByb3ZhIGRvIEVOQURFIGRldmVtIHRlciB1bSBuw612ZWwgbcOtbmltbyBkZSBwb2RlciBkZSBkaXNjcmltaW5hw6fDo28uIFBhcmEgc2VyIGNvbnNpZGVyYWRhIGFwdGEgYSBhdmFsaWFyIG9zIGFsdW5vcw0KDQoNCg0KKipUYWJlbGEgMDUqKi4gRGlzdHJpYnVpw6fDo28gZG9zIGl0ZW5zIHBvciDDjG5kaWNlIGRlIERpc2NyaW1pbmHDp8OjbyBuYSBQcm92YSBkbyBFTkFERS8yMDE4IGRvIGN1cnNvIGRlIERpcmVpdG8uDQoNCi0tLQ0KDQogfCAqKkNsYXNzaWZpY2HDp8OjbyAqKiB8ICoqSW5kaWNlIGRlIERpc2NyaW1uYcOnw6NvKiogfCAqKk7CuiBkbyBJdGVucyoqICAgICAgICAgICAgICAgICAgICB8ICoqTsK6IGRlIEFtb3N0cmEqKiB8IA0KIHwgOi0tLS0tLS0tLS0tLTogICAgIHwgICA6LS0tLS0tLS0tLS0tOiAgICAgICAgICAgfCAgICAgOi0tLS0tLS0tLS0tLTogICAgICAgICAgICAgICAgIHwgIDotLS0tLS0tLS0tLS06ICAgfCAgICAgIA0KIHwgICAgYE11aXRvIEJvbWAgICAgIHwgICAgIDAuNDAgb3UgbWFpcyAgICAgICAgICAgfCAgICAgICAgMTUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAxICgyLjklKSAgICAgfCAgIA0KIHwgICAgYEJvbWAgICAgICAgICAgIHwgICAgIDAuMzAgYSAwLjM5ICAgICAgICAgICAgfCAgMSwyLDQsNSw3LDExLDE3LDIwLDI0LDI1LDI4ICAgICAgIHwgICAgIDExICgzMS40MyUpICAgfCAgICAgICANCiB8ICAgIGBNw6lkaW9gICAgICAgICAgfCAgICAgMC4yMCBhIDAuMjkgICAgICAgICAgICB8ICAzLDEyLDEzLDE0LDI3LDI5LDMxLDMzLDM0ICAgICAgICAgfCAgICAgIDkgKDI1LjcxJSkgICB8IA0KIHwgICAgYEZyYWNvYCAgICAgICAgIHwgICAgICQgPCAwLjE5JCAgICAgICAgICAgICAgfCAgNiw4LDksMTAsMTYsMTgsMTksMjIsMjMsMjYsMzIsMzUgIHwgICAgICAxMigzNCwyOSUpICAgfCANCg0KLS0tDQoNCg0KDQojIyMgQW7DoWxpc2UgZG9zIEl0ZW5zIHZpYSBUUkkNCiMjIyMgQ29ycmVsYcOnw6NvIEJpc3NlcmlhbC9BbHBoYSBkZSBDcm9uYmFjaA0KDQotIFPDo28gYXByZXNlbnRhZG9zIG9zIGRhZG9zIGRlIGNvcnJlbGHDp8OjbyBiaXNzZXJpYWwsIHNlbmRvIHVtYSBtZWRpZGEgZXN0YXTDrXN0aWNhIGRhIGNhcGFjaWRhZGUgZGUgZGlzY3JpbWluYcOnw6NvIGRvIGl0ZW0sIG5hIG1lZGlkYSBlbSBxdWUgdmVyaWZpY2FyIHNlIHVtIGRldGVybWluYWRvIGl0ZW0gYmluw6FyaW8gYXByZXNlbnRhIGNvcnJlbGHDp8OjbyBzaWduaWZpY2F0aXZhIGNvbSBvIGVzY29yZSBicnV0byByZXN1bHRhbnRlIGRvIGNvbmp1bnRvIGRvcyBpdGVucyBkbyBFTkFERS4NCg0KLSBQYXJhIGF2YWxpYXIgYSBxdWFsaWRhZGUgZG8gaW5zdHJ1bWVudG8gZGUgbWVkaWRhIChmaWRlZGlnbmlkYWRlKSwgZm9pIGFwbGljYWRvIG8gY29lZmljaWVudGUgYWxwaGEgZGUgQ3JvbmJhY2guIA0KDQoNCioqVGFiZWxhIDA2KiouIENvcnJlbGHDp8OjbyBCaXNzZXJpYWwgZSBBbHBoYSBkZSBDcm9uYmNoIHBhcmEgb3MgaXRlbnMgbmEgUHJvdmEgZG8gRU5BREUvMjAxOCBkbyBjdXJzbyBkZSBEaXJlaXRvLg0KDQogfCAqKkl0ZW5zKiogICAgfCAqKkNvcnJlbGHDp8OjbyBCaXNzZXJpYWwgJChyX3twYn0pJCoqIHwgICoqQWxwaGEgZGUgQ3JvbmJhY2ggJChcYWxwaGFfe2l9KSQqKiB8IA0KIHw6LS0tLS0tLS0tLS0tOnwgICAgICAgICAgOi0tLS0tLS0tLS0tOiAgICAgICAgICAgIHwgICAgICAgICAgICAgOi0tLS0tLS0tLS0tLTogICAgICAgICAgfA0KIHwgICAgICAgIGBRMDFgIHwgICAgICAgICAgIDAuMzAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgMC42MiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIA0KIHwgICAgICAgIGBRMDJgIHwgICAgICAgICAgIDAuMzQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgMC42MSAgICAgICAgICAgICAgICAgICAgfCAgICAgICANCiB8ICAgICAgICBgUTAzYCB8ICAgICAgICAgICAwLjIyICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIDAuNjIgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIA0KIHwgICAgICAgIGBRMDRgIHwgICAgICAgICAgIDAuMzggICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgMC42MSAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIA0KIHwgICAgICAgIGBRMDVgIHwgICAgICAgICAgIDAuMzUgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgMC42MiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgDQogfCAgICAgICAgICAuLi4gfCAgICAgICAgICAgLi4uLi4gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAuLi4uLi4gICAgICAgICAgICAgICAgICB8DQogfCAgICAgICAgYFEzMmAgfCAgICAgICAgICAgMC4xNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAwLjYyICAgICAgICAgICAgICAgICAgICB8IA0KIHwgICAgICAgIGBRMzNgIHwgICAgICAgICAgIDAuMjggICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgMC42MiAgICAgICAgICAgICAgICAgICAgfA0KIHwgICAgICAgIGBRMzRgIHwgICAgICAgICAgIDAuMjMgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgMC42MiAgICAgICAgICAgICAgICAgICAgfA0KIHwgICAgICAgIGBRMzVgIHwgICAgICAgICAgIDAuMTcgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgMC42MyAgICAgICAgICAgICAgICAgICAgfA0KDQotIEZvcmFtIGVsaW1pbmFkb3MgMiBkb3MgMzUgaXRlbnMgYW5hbGlzYWRvcywgcXVlIGFwcmVzZW50YXJhbSBjb2VmaWNpZW50ZXMgZGUgY29ycmVsYcOnw6NvIGJpc3NlcmlhbCBtdWl0byBiYWl4b3MsIGltcG9zc2liaWxpdGFuZG8gYSBjb252ZXJnw6puY2lhIG5hIGVzdGltYcOnw6NvIGRvIG1vZGVsbywgb3Ugc2VqYSwgbsOjbyBwZXJtaXRpcmFtIGEgcmVhbGl6YcOnw6NvIGRhIGNhbGlicmHDp8OjbyBkZSBwYXLDom1ldHJvcyBkYSBUUkkuDQoNCiMjIyMgVW5pZGltZW5zaW9uYWxpZGFkZSBkb3MgSXRlbnMNCg0KLSBPcyBtb2RlbG9zIGRhIFRSSSBwcmVzc3Vww7VlbS1zZSBxdWUgdG9kb3Mgb3MgaXRlbnMgbWVkZW0gdW1hIMO6bmljYSBoYWJpbGlkYWRlLiBBcGVzYXIgZG8gZGVzZW1wZW5obyBodW1hbm8gc2VyIG11bHRpLWRldGVybWluYWRvLCB1bWEgdmV6IHF1ZSBtYWlzIGRlIHVtYSBoYWJpbGlkYWRlIHBhcnRpY2lwYSBkYSBleGVjdcOnw6NvIGRlIHF1YWxxdWVyIHRhcmVmYSwgcGFyYSBzYXRpc2ZhemVyIG8gcG9zdHVsYWRvIGRhIHVuaWRpbWVuc2lvbmFsaWRhZGUgZG8gdGVzdGUsIMOpIHN1ZmljaWVudGUgYWRtaXRpciBxdWUgaGFqYSB1bSBmYXRvciBkb21pbmFudGUgcmVzcG9uc8OhdmVsIHBlbG8gZGVzZW1wZW5obyBkZSB0b2RvcyBvcyBpdGVucyBkbyB0ZXN0ZSBubyBFTkFERSBbKExPUkQgZSBIQU1CTEVUT04sIDE5ODIpXShodHRwczovL2NvcmUuYWMudWsvZG93bmxvYWQvcGRmLzMxMTUzOTM3LnBkZikuDQoNCg0KLSBBIGV2aWTDqm5jaWEgZGUgdmFsaWRhZGUgcHNpY29tw6l0cmljYSBkZSBjb25zdHJ1dG8gcGFyYSBhIHByb3ZhIGRvaSBFTkFERS8yMDE4LCBmb2kgb2J0aWRhIGEgcGFydGlyIGRhICoqQW7DoWxpc2UgRmF0b3JpYWwoQUYpKiogZG9zIDM1IGl0ZW5zIHF1ZSBjb21ww7VlbSBhIHByb3ZhLiBBIG1lZGlkYSBkZSBhZGVxdWHDp8OjbyBkYSBhbW9zdHJhIGRlIGthaXNlci1NZXllci1PbGtpbihLTU8pIHBhcmEgYSBBRiwgaWd1YWwgYSAwLjc2LCBpbmRpY291IHVtIHJlc3VsdGFkbyBzYXRpc2ZhdMOzcmlvLg0KDQoNCg0KKipUYWJlbGEgMDcqKi4gVGVzdGUgZGUgQ29uZmlhYmlsaWRhZGUgcGFyYSBvcyBpdGVucyBuYSBQcm92YSBkbyBFTkFERS8yMDE4IGRvIGN1cnNvIGRlIERpcmVpdG8uDQoNCiB8ICAgICoqVGVzdGVzKiogICAgICAgICAgIHwgKipGb3JtYcOnw6NvIEdlcmFsKiogIHwgICAqKkNvbXBvbmVudGUgRXNwZWPDrWZpY28qKiB8ICAqKk5vdGEgQnJ1cmEqKiAgfA0KIHwgICAgOi0tLS0tLS0tLS0tLTogICAgICAgfCAgOi0tLS0tLS0tLS0tOiAgICAgIHwgICAgICAgIDotLS0tLS0tLS0tLS06ICAgICAgIHwgICA6LS0tLS0tLS0tLS0tOiB8DQogfCAgYEFscGhhIGRlIENyb21iYWNoYCAgICB8ICAgICAgICAgICAwLjcxICAgICAgfCAgICAgICAgICAgICAwLjc4ICAgICAgICAgICAgfCAgICAgICAwLjc2ICAgICAgIHwgDQogfCAgIGBUZXN0ZSBkZSBLTU9gICAgICAgICB8ICAgICAgICAgICAwLjcyICAgICAgfCAgICAgICAgICAgICAwLjczICAgICAgICAgICAgfCAgICAgICAwLjc2ICAgICAgIHwNCiB8ICAgYFRlc3RlIGRlIGJhcnRsZXR0YCAgIHwgICAgUC12YWxvcj0wLjAwMSAgICB8ICAgICAgIFAtdmFsb3I9MC4wMDEgICAgICAgICB8ICBQLXZhbG9yPTAuMDAxICAgfCAgDQogfCAgIGBNU0FgICAgICAgICAgICAgICAgICB8ICAgICAgICAgID4gMC43MCAgICAgfCAgICAgICAgICAgID4gMC43MCAgICAgICAgICAgfCAgICAgICAgPiAwLjcwICAgIHwNCiAgICANCg0KLSBPIHRlc3RlIGRlIGVzZmVyaWNpZGFkZSBkZSBCYXJ0bGV0dCBxdWUgcGVybWl0ZSBhdmFsaWFyIGEgaGlww7N0ZXNlIGRlIGlndWFsZGFkZSBkZSB2YXJpw6JuY2lhLWNvdmFyacOibmNpYSBubyBncnVwbyBlc3R1ZGFkbywgaXN0byDDqSwgcXVlIGEgbWF0cml6IGRlIGNvcnJlbGHDp8OjbyDDqSB1bWEgbWF0cml6IGlkZW50aWRhZGUsIHJldmVsb3UgcXVlIGV4aXN0ZSBjb3JyZWxhw6fDo28gZW50cmUgYXMgdmFyacOhdmVpcyBlc3R1ZGFkYXMgWyhIQUlSIGV0IGFsLCAyMDA1KV0oaHR0cHM6Ly9kbHNjcmliLmNvbS9kb3dubG9hZC9oYWlyLWotZi1hbi1hYWN1dGUtbGlzZS1tdWx0aXZhcmlhZGEtZGUtZGFkb3MtNi1vcmRmLWVkaS1jY2VkaWwtYXRpbGRlLW8tcGRmXzU4ZTY3NTNkZGMwZDYwMzAzNWRhOTdmOF9wZGYpDQoNCg0KLSBBIHBhcnRpciBkb3MgZGFkb3MsIGFuw6FsaXNlIGRhIGRpbWVuc2lvbmFsaWRhZGUgZG8gY29uanVudG8gZGUgaXRlbnMgZm9pIHJlYWxpemFkYSBhdHJhdsOpcyBkYSAqKkFuw6FsaXNlIEZhdG9yaWFsIGRlIEluZm9ybWHDp8OjbyBDb21wbGV0YSoqIFsoTUFUT1MgZSBST0RSSUdVRVMsIDIwMTkpXShodHRwczovL3JlcG9zaXRvcmlvLmVuYXAuZ292LmJyL2JpdHN0cmVhbS8xLzQ3OTAvMS9MaXZybyUyMEFuJUMzJUExbGlzZSUyMEZhdG9yaWFsLnBkZikuIA0KDQoNCg0KYGBge3IgTGVpdHVyYXRyaSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0Kc2V0d2QoIkM6L1VzZXJzL21hcmlvIERoaWVnby9Eb2N1bWVudHMvRU5BREVfMjAxOF9STWFya2Rvd24iKQ0KQmFuY29fRGlyZWl0b19UUkk9cmVhZC5jc3YoIlByb3ZhX0RpcmVpdG9fMjAxOC5jc3YiLGhlYWRlcj1UUlVFLHNlcD0iOyIpDQpgYGANCg0KDQoNCmBgYHtyIGVzdGltYWNhbywgZWNobz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCm1pcnRfMnBsIDwtIG1pcnQoQmFuY29fRGlyZWl0b19UUkksIDEsIGl0ZW10eXBlID0gIjJQTCIsIHNlPSBUUlVFLCBzZS50eXBlID0gIkJMIikgDQpjb2VmKG1pcnRfMnBsLCBJUlRwYXJzID0gVFJVRSwgc2ltcGxpZnkgPSBUUlVFKSAjIHBhcmFtZXRyb3MgZG9zIGl0ZW5zDQpgYGANCg0KDQojIyMjIFZpc3VhbGl6YcOnw6NvIEdyw6FmaWNhcyBkb3MgSXRlbnMNCiMjIyMjIEZ1bsOnw6NvIGRlIEluZm9ybWHDp8OjbyBkbyBUZXN0ZQ0KDQotIEEgRmlndXJhIGFiYWl4byBtb3N0cmEgYSBDdXJ2YSBkZSBJbmZvcm1hw6fDo28gZG8gVGVzdGUsIHF1ZSDDqSB1bWEgcmVwcmVzZW50YcOnw6NvIGdyw6FmaWNhIGRhIEZ1bsOnw6NvIGRlIEluZm9ybWHDp8OjbyBkbyBUZXN0ZS4gRXN0YSBmdW7Dp8OjbyDDqSByZXByZXNlbnRhZGEgcGVsYSBzb21hIGRvIGdydXBvIGRlIGl0ZW5zIHF1ZSBjb21ww7VlIG8gdGVzdGUsIGRlIG1vZG8gcXVlIHJlc3VtZSBhIGNvbnRyaWJ1acOnw6NvIGRlIGNhZGEgaXRlbSBkZXN0ZSBwYXJhIGEgaW5mb3JtYcOnw6NvIHRvdGFsLiANCg0KLSBBIHF1YW50aWRhZGUgdG90YWwgZGUgaW5mb3JtYcOnw6NvIGZvcm5lY2lkYSBwb3IgdW0gZ3J1cG8gZGUgaXRlbnMgcGFyYSBjYWRhIG7DrXZlbCBkbyB0cmHDp28gbGF0ZW50ZSBlc3TDoSBpbnZlcnNhbWVudGUgcmVsYWNpb25hZGEgYW8gZXJybyBwYWRyw6NvIGFzc29jaWFkbyBjb20gYSBlc3RpbWF0aXZhIGRvIG1lc21vLiBBdHJhdsOpcyBkYSBDdXJ2YSBkZSBJbmZvcm1hw6fDo28gZG8gVGVzdGUgcG9kZS1zZSB2ZXJpZmljYXIgcGFyYSBxdWFsIGludGVydmFsbyBkbyB0cmHDp28gbGF0ZW50ZSBvIHRlc3RlIGZ1bmNpb25hIG1lbGhvci4gDQoNCg0KYGBge3IgcGxvdDEsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpwbG90KG1pcnRfMnBsLCB0eXBlID0iaW5mbyIgKQ0KYGBgDQoNCg0KIyMjIyMgQ3VydmEgQ2FyYWN0ZXLDrXN0aWNhIGRvcyBJdGVucw0KDQotIEEgRmlndXJhIGFiYWl4byBtb3N0cmEgYXMgY3VydmFzIGNhcmFjdGVyw61zdGljYXMgZG9zIGl0ZW5zLCB1bWEgcmVwcmVzZW50YcOnw6NvIGRhcyByZWxhw6fDtWVzIGVudHJlIGEgaGFiaWxpZGFkZSAob3UgdHJhw6dvIGxhdGVudGUpIGUgYSBwcm9iYWJpbGlkYWRlIGRlIGFwcmVzZW50YXIgaGFiaWxpZGFkZSBwYXJhIGNhZGEgaXRlbS4gDQoNCg0KYGBge3IgcGxvdDIsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpwbG90KG1pcnRfMnBsLCB0eXBlID0gInRyYWNlIikNCmBgYA0KDQoNCiMjIyMgQ3VydmEgZGUgSW5mb3JtYcOnw6NvIGRvcyBJdGVucw0KDQoNCi0gQSBGaWd1cmEgYWJhaXhvIG1vc3RyYSBhcyBjdXJ2YXMgZGUgSW5mb3JtYcOnw6NvIGRvcyBpdGVucywgcGFyYSBhdmFsaWFyIHF1YWlzIGludGVucyB0cmF6ZW0gbWFpcyBpbmZvcm1hw6fDo28gcGFyYSBlc3RpbWFyIGEgaGFiaWxpZGFkZSBubyBjdXJzbyBkZSBEaXJlaXRvIGVtIDIwMTguIA0KDQoNCmBgYHtyIHBsb3QzLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KcGxvdChtaXJ0XzJwbCwgdHlwZSA9ICJpbmZvdHJhY2UiKQ0KYGBgDQoNCg0KDQoNCiMjIyMjIENhbGlicmHDp8OjbyBlIEVxdWFsaXphw6fDo28gZG9zIEl0ZW5zDQoNCi0gTyBwcm9jZXNzbyBkZSBlc3RpbWHDp8OjbyBkb3MgaXRlbnMgZm9pIHJlYWxpemFkbyBlbSB2w6FyaW9zIHBhc3NvcywgZXN0cmF0w6lnaWEgdXRpbGl6YWRhIHBhcmEgbWFudGVyIG8gbWFpb3IgbsO6bWVybyBwb3Nzw612ZWwgZGUgaXRlbnMgbmEgcHJvdmEgZG8gRU5BREUuIEEgcXVhbGlkYWRlIGRvcyBpdGVucyBmb2kgYXZhbGlhZGEgY29uc2lkZXJhbmRvLXNlLCBwcmluY2lwYWxtZW50ZSwgb3MgdmFsb3JlcyByZWZlcmVudGVzIMOgcyBlc3RpbWF0aXZhcyBkb3MgcGFyw6NtZXRyb3MgZGUgZGlzY3JpbWluYcOnw6NvIGUgZGUgZGlmaWN1bGRhZGUuDQoNCg0KDQotIGEgdGFiZWxhIDA2IGFwcmVzZW50YSBvcyBwYXLDom1ldHJvcyBkZSBkaXNjcmltaW5hw6fDo28gJGFfe2l9JCwgZGlmaWN1bGRhZGUgJGJfe2l9JCBkb3MgaXRlbnMgYXZhbGlhZG9zLiBUYWlzIHBhcsOibWV0cm9zIGZvcmFtIGVzdGltYWRvcyB1dGlsaXphbmRvIGEgVFJJLCBjb20gbyBtw6l0b2RvIGRlIE3DoXhpbWEgdmVyb3NzaW1pbGhhbsOnYSBNYXJnaW5hbCBlIGEgY29udmVyZ8OqbmNpYSBkb3MgZGFkb3MgZm9pIHRlc3RhZGEgcGVsbyBhbGdvcml0bW8gKipFTShFeHBlY3Rpb24gTWF4aW1pemF0aW9uKSoqIGUgKipOZXd0b24gUmFwaHNvbioqLiANCg0KKipUYWJlbGEgMDgqKi4gRXN0aW1hw6fDo28gZG9zIHBhcsOibWV0cm9zIGRvcyBpdGVucyBwYXJhIG8gTW9kZWxvIGxvZ8Otc3RpY28gKDNwbCkgZGEgcHJvdmEgZG8gRU5BREUvMjAxOCBubyBjdXJzbyBkZSBEaXJlaXRvLg0KDQogfCAqKkl0ZW5zKiogICAgfCAqKkRpc2NyaW1pbmHDp8OjbyAkYV97aX0kKiogfCAgKipEaWZpY3VsZGFkZSAkYl97aX0kKiogfCANCiB8Oi0tLS0tLS0tLS0tLTp8IDotLS0tLS0tLS0tLTogICAgICAgICAgfDotLS0tLS0tLS0tLS06ICAgICAgICAgIHwNCiB8ICAgICAgICBgUTAxYCB8ICAgICAgICAgICAwLjY4MiAgICAgICAgfCAgICAgICAgICAtMS45OTQgICAgICAgIHwgICAgICAgICANCiB8ICAgICAgICBgUTAyYCB8ICAgICAgICAgICAxLjAxOCAgICAgICAgfCAgICAgICAgICAtMS43NTAgICAgICAgIHwgICAgICAgDQogfCAgICAgICAgYFEwM2AgfCAgICAgICAgICAgMC40NzEgICAgICAgIHwgICAgICAgICAgLTMuMDg0ICAgICAgICB8ICAgICAgICANCiB8ICAgICAgICBgUTA0YCB8ICAgICAgICAgICAxLjE4NCAgICAgICAgfCAgICAgICAgICAtMS4wOTQgICAgICAgIHwgICAgICAgICANCiB8ICAgICAgICBgUTA1YCB8ICAgICAgICAgICAwLjY5MCAgICAgICAgfCAgICAgICAgICAtMS4wNDIgICAgICAgIHwgICAgICAgIA0KIHwgICAgICAgICAgLi4uIHwgICAgICAgICAgIC4uLi4uICAgICAgICB8ICAgICAgICAgIC4uLi4uLiAgICAgICAgfA0KIHwgICAgICAgIGBRMzJgIHwgICAgICAgICAgIDAuMDg1ICAgICAgICB8ICAgICAgICAgICoqMTUuNDMzKiogICAgfCANCiB8ICAgICAgICBgUTMzYCB8ICAgICAgICAgICAwLjQzMiAgICAgICAgfCAgICAgICAgICAtMC4yMTcgICAgICAgIHwNCiB8ICAgICAgICBgUTM0YCB8ICAgICAgICAgICAwLjQ1MyAgICAgICAgfCAgICAgICAgICAgMi44NTcgICAgICAgIHwNCiB8ICAgICAgICBgUTM1YCB8ICAgICAgICAgICAwLjI0MCAgICAgICAgfCAgICAgICAgICAyLjY2NyAgICAgICAgIHwNCg0KDQotIE9zIGl0ZW5zIGVtIHF1ZSBvcyBhbHVub3MgbmVjZXNzaXRhbSBkZSBtYWlzIGNvbmhlY2ltZW50byAoKipkaWZpY3VsZGFkZSAkYl97aX0kKiopIGFkcXVpcmlkb3MgcGFyYSBzb2x1Y2lvbmFyIG9zIHByb2JsZW1hcyBpbmRpY2Fkb3MgbmFzIHNpdHVhw6fDtWVzIHByb2JsZW1hcyBuYSBwYXJ0ZSBlc3BlY8OtZmljYSBkYSBwcm92YSBkZSBEaXJlaXRvLg0KICAgIC0gKipJdGVtIDMyIChEaXJlaXRvIFByb2Nlc3N1YWwgUGVuYWwpKioNCiAgICAtICoqSXRlbSAyNiAoRGlyZWl0byBkbyBUcmFiYWxobykqKg0KICAgIC0gKipJdGVtIDIyIChEaXJlaXRvIEVtcHJlc2FyaWFsICsgRGlyZWl0byBBZGltaXN0cmF0aXZvKSoqDQogICAgLSAqKkl0ZW0gMTggKFRlb3JpYSBHZXJhbCBkbyBFc3RhZG8pKioNCiAgICAtICoqSXRlbSAxOSAoRGlyZWl0byBBbWJpZW50YWwgKyBEaXJlaXRvIFByb2Nlc3N1YWwgQ2l2aWwpKioNCiAgICANCi0gT3MgaXRlbnMgcXVlIGNvbnNlZ3VlbSBzZXBhcmFyICgqKmRpc2NyaW1pbmHDp8OjbyAkYV97aX0kKiopIG9zIGFsdW5vcyBxdWUgcG9zc3VlbSBtYWlzIGhhYmlsaWRhZXMgZGVudHJvIGRvIGVzdHVkbyBkbyBEaXJlaXRvLg0KICAgIC0gKipJdGVtIDE1IChEaXJlaXRvIENvbnN0aXR1Y2lvbmFsKSoqDQogICAgLSAqKkl0ZW0gMTEgKERpcmVpdG8gSHVtYW5vcykqKg0KDQoqKlRhYmVsYSAwOSoqLiBDb21wYXJhdGl2byBkb3MgRXNjb3JlcyBkYSBUUkkgcGFyYSA1IGFsdW5vcyBjb20gMjMgYWNlcnRvcyBuYSBwcm92YSBkbyBFTkFERS8yMDE4IG5vIGN1cnNvIGRlIERpcmVpdG8uDQoNCiB8ICoqSXRlbnMqKiAgICAgICAgICB8IENvbnRlw7pkbyAgICAgICAgICAgfCoqQWx1bm8gJDAxJCoqIHwgKipBbHVubyAkMDIkKiogfCAqKkFsdW5vICQwMyQqKiB8ICoqQWx1bm8gJDA0JCoqIHwgKipBbHVubyAkMDUkKiogfA0KIHw6LS0tLS06ICAgICAgICAgICAgIHwgOi0tLS0tOiAgICAgICAgICAgIHw6LS0tLS0tLS0tLS0tOiB8IDotLS0tLS0tLS0tLS06IHwgOi0tLS0tLS0tLS0tLTogfCA6LS0tLS0tLS0tLS0tOiB8IDotLS0tLS0tLS0tLS06IHwNCiB8IGBRMDFgICAgICAgICAgICAgICB8IFRyYW5zZ8Oqbmljb3MgICAgICAgfCBBY2VydG91ICAgICAgIHwgQWNlcnRvdSAgICAgICAgfCBBY2VydG91ICAgICAgICB8IEFjZXJ0b3UgICAgICAgIHwgRXJyb3UgICAgICAgICAgfA0KIHwgYFEwMmAgICAgICAgICAgICAgIHwgRWNvbm9taWEgICAgICAgICAgIHwgQWNlcnRvdSAgICAgICB8IEFjZXJ0b3UgICAgICAgIHwgQWNlcnRvdSAgICAgICAgfCBBY2VydG91ICAgICAgICB8IEFjZXJ0b3UgICAgICAgIHwNCiB8IGBRMDNgICAgICAgICAgICAgICB8IEFydGUvQ2nDqm5jaWEgICAgICAgfCBBY2VydG91ICAgICAgIHwgQWNlcnRvdSAgICAgICAgfCBBY2VydG91ICAgICAgICB8IEFjZXJ0b3UgICAgICAgIHwgQWNlcnRvdSAgICAgICAgfA0KIHwgYFEwNGAgICAgICAgICAgICAgIHwgSW1pZ3Jhw6fDo28gICAgICAgICAgfCBBY2VydG91ICAgICAgIHwgQWNlcnRvdSAgICAgICAgfCBBY2VydG91ICAgICAgICB8IEFjZXJ0b3UgICAgICAgIHwgQWNlcnRvdSAgICAgICAgfA0KIHwgYFEwNWAgICAgICAgICAgICAgIHwgw4BmcmljYSAgICAgICAgICAgICB8IEVycm8gICAgICAgICAgfCBBY2VydG91ICAgICAgICB8IEVycm91ICAgICAgICAgIHwgQWNlcnRvdSAgICAgICAgfCBBY2VydG91ICAgICAgICB8DQogfCAgLi4uLiAgICAgICAgICAgICAgfCAuLi4uICAgICAgICAgICAgICAgfCAgLi4uLi4gICAgICAgIHwgIC4uLi4uICAgICAgICAgfCAgIC4uLi4uICAgICAgICB8ICAuLi4uLiAgICAgICAgIHwgLi4uLi4gICAgICAgICAgfA0KIHwgYFEzMmAgICAgICAgICAgICAgIHwgUHJvY2Vzc3VhbCBQZW5hbCAgIHwgRXJyb3UgICAgICAgICB8IEVycm8gICAgICAgICAgIHwgQWNlcnRvdSAgICAgICAgfCBFcnJvdSAgICAgICAgICB8IEVycm91ICAgICAgICAgIHwNCiB8IGBRMzNgICAgICAgICAgICAgICB8IERpcmVpdG8gIFBlbmFsICAgICB8IEFjZXJ0b3UgICAgICAgfCBBY2VydG91ICAgICAgICB8IEVycm91ICAgICAgICAgIHwgQWNlcnRvdSAgICAgICAgfCBBY2VydG91ICAgICAgICB8DQogfCBgUTM0YCAgICAgICAgICAgICAgfCBDb25zdGl0dWNpb25hbCAgICAgfCBFcnJvdSAgICAgICAgIHwgRXJyb3UgICAgICAgICAgfCBBY2VydG91ICAgICAgICB8IEFjZXJ0b3UgICAgICAgIHwgRXJyb3UgICAgICAgICAgfA0KIHwgYFEzNWAgICAgICAgICAgICAgIHwgQ29uc3RpdHVjaW9uYWwgK1BQIHwgRXJyb3UgICAgICAgICB8IEFjZXJ0b3UgICAgICAgIHwgRXJyb3UgICAgICAgICAgfCBFcnJvdSAgICAgICAgICB8IEVycm91ICAgICAgICAgIHwNCiB8IGBTY29yZSBCcnV0b2AgICAgICB8ICAgICAgICAgICAgICAgICAgICB8IDIzICAgICAgICAgICAgfCAyMyAgICAgICAgICAgICB8IDIzICAgICAgICAgICAgIHwgMjMgICAgICAgICAgICAgfCAyMyAgICAgICAgICAgICB8IA0KIHwgYFNjb3JlIFRSSSg1MCwxMClgIHwgICAgICAgICAgICAgICAgICAgIHwgMzQuNTggICAgICAgICB8IDY1LjQ4ICAgICAgICAgIHwgMzUuMTcgICAgICAgICAgfCA2MC4zNyAgICAgICAgICB8IDQxLjIwICAgICAgICAgIHwgDQoNCg0KDQoNCg0KDQojIyBSZWZlcsOqbmNpYXMgQmlibGlvZ3LDoWZpY2FzDQojIyMgU29mdHdhcmUncw0KDQotIFIgREVWRUxPUE1FTlQgQ09SRSBURUFNLiBSNC4wOiBBIGxhbmd1YWdlIGFuZCBFbnZpb3JubWVudCBmb3IgU3RhdGlzdGljYWwgQ29tcHV0aW5nLCAyMDIwLiBodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy9iaW4vd2luZG93cy9iYXNlIA0KLSBSU1RVRElPLiBSc3R1ZGlvOiBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IGZvciBSICh2ZXJzw6NvIDEuMi41KS4NCmh0dHBzOi8vcnN0dWRpby5jb20vcHJvZHVjdHMvcnN0dWRpby9kb3dubG9hZC8jZG93bmxvYWQNCg0KDQojIyMgUGFja2FnZXMNCg0KLSBBbGxhaXJlLCBKSiwgUmljaCBJYW5ub25lLCBBbGlzb24gUHJlc21hbmVzIEhpbGwsIGFuZCBZaWh1aSBYaWUuIDIwMjAuICoqRGlzdGlsbDogUiBNYXJrZG93biBGb3JtYXQgZm9yIFNjaWVudGlmaWMgYW5kIFRlY2huaWNhbCBXcml0aW5nKiouIGh0dHBzOi8vQ1JBTi5SLXByb2plY3Qub3JnL3BhY2thZ2U9ZGlzdGlsbC4NCg0KLSBaaHUsIEhhby4gMjAyMC4gKiprYWJsZUV4dHJhOiBDb25zdHJ1Y3QgQ29tcGxleCBUYWJsZSB3aXRoIEthYmxlIGFuZCBQaXBlIFN5bnRheCoqLiBodHRwczovL0NSQU4uUi1wcm9qZWN0Lm9yZy9wYWNrYWdlPWthYmxlRXh0cmEuDQoNCg0KLSBIYWRsZXkgV2lja2hhbTsgUm9tYWluIEZyYW7Dp29pcztMaW9uZWwgSGVucnk7IEtpcmlsbCBNw7xsbGVyLiAqKmRwbHlyOiBBIEdyYW1tYXIgb2YgRGF0YSBNYW5pcHVsYXRpb24qKg0KaHR0cHM6Ly9jbG91ZC5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9kcGx5ci9pbmRleC5odG1sLg0KDQoNCi0gQWxib3VrYWRlbCBLYXNzYW1iYXJhLiAqKnJzdGF0aXg6IFBpcGUtRnJpZW5kbHkgRnJhbWV3b3JrIGZvciBCYXNpYyBTdGF0aXN0aWNhbCBUZXN0cyoqDQpodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvcnN0YXRpeC9pbmRleC5odG1sLg0KDQoNCi0gSm9lIENoZW5nOyBDYXJzb24gU2lldmVydDsgV2luc3RvbiBDaGFuZzsgWWlodWkgWGllOyBKZWZmIEFsbGVuLiAqKmh0bWx0b29sczogVG9vbHMgZm9yIEhUTUwqKg0KaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2h0bWx0b29scy9pbmRleC5odG1sLg0KDQoNCi0gUGhpbCBDaGFsbWVyczsgSm9zaHVhIFByaXRpa2luOyBBbGV4YW5kZXIgUm9iaXR6c2NoOyBNYXRldXN6IFpvbHRhazsgS3dvbkh5dW4gS2ltOyBDYXJsIEYuIEZhbGs7IEFkYW0gTWVhZGU7IExlbm5hcnQgU2NobmVpZGVyOyBEYXZpZCBLaW5nOyBDaGVuLVdlaSBMaXU7IE9ncmVkZW4gT2d1emhhbi4gKiptaXJ0OiBNdWx0aWRpbWVuc2lvbmFsIEl0ZW0gUmVzcG9uc2UgVGhlb3J5KiogaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL21pcnQvaW5kZXguaHRtbC4NCg0KLSBEaW1pdHJpcyBSaXpvcG91bG9zLioqbHRtOiBMYXRlbnQgVHJhaXQgTW9kZWxzIHVuZGVyIElSVCoqDQpodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvbHRtL2luZGV4Lmh0bWwuDQoNCi0gV2lsbGlhbSBSZXZlbGxlLiAqKnBzeWNoOiBQcm9jZWR1cmVzIGZvciBQc3ljaG9sb2dpY2FsLCBQc3ljaG9tZXRyaWMsIGFuZCBQZXJzb25hbGl0eSBSZXNlYXJjaCoqDQpodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvcHN5Y2gvaW5kZXguaHRtbC4NCg0KLSBJdmFpbG8gUGFydGNoZXY7IEd1bnRlciBNYXJpczsgVGFtYWtpIEhhdHRvcmkuICoqaXJ0b3lzOiBBIENvbGxlY3Rpb24gb2YgRnVuY3Rpb25zIFJlbGF0ZWQgdG8gSXRlbSBSZXNwb25zZSBUaGVvcnkgKElSVCkqKiBodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvaXJ0b3lzL2luZGV4Lmh0bWwuDQoNCiMjIyBCb29rcw0KDQotIEFORFJBREUsIEQuIEYuLCBUQVZBUkVTLCBILiBSLiwgVkFMTEUsIFIuIEMuICoqVGVvcmlhIGRhIHJlc3Bvc3RhIGFvIGl0ZW06IGNvbmNlaXRvcw0KZSBhcGxpY2HDp8O1ZXMqKi4gU8OjbyBQYXVsbywgMjAwMC4gaHR0cHM6Ly9kb2NzLnVmcHIuYnIvfmFhbmpvcy9DRTA5NS9MaXZyb1RSSV9EQUxUT04ucGRmDQogIA0KLSBCQUtFUiwgRi4gQi4gKipUaGUgQmFzaWNzIG9mIEl0ZW0gUmVzcG9uc2UgVGhlb3J5KiouIDIgZWQuIFVTQSwgMjAwMS4gaHR0cHM6Ly9lcmljLmVkLmdvdi8/aWQ9RUQ0NTgyMTkNCg0KLSBZaWh1aSBYaWUsIEouIEouIEFsbGFpcmUsIEdhcnJldHQgR3JvbGVtdW5kLiAqKlIgTWFya2Rvd246IFRoZSBEZWZpbml0aXZlIEd1aWRlKiouIGh0dHBzOi8vYm9va2Rvd24ub3JnL3lpaHVpL3JtYXJrZG93bi8uDQoNCi0gWWlodWkgWGllLiAqKkR5bmFtaWMgRG9jdW1lbnRzIHdpdGggUiBhbmQga25pdHIqKiwoQ2hhcG1hbiAmIEhhbGwvQ1JDIFRoZSBSIFNlcmllcykgMm5kIEVkaXRpb24uDQpodHRwczovL3lpaHVpLm9yZy9rbml0ci8uDQoNCi0gRmllbGQsIEEuIFAuLCBNaWxlcywgSi4sICYgRmllbGQsIFouICgyMDEyKS4gRGlzY292ZXJpbmcgc3RhdGlzdGljcyB1c2luZyBSLiBodHRwczovL2FlZG1vb2RsZS51ZnBhLmJyL3BsdWdpbmZpbGUucGhwLzQwMTg1Mi9tb2RfcmVzb3VyY2UvY29udGVudC81L01hdGVyaWFsX1BERi8xLkRpc2NvdmVyaW5nJTIwU3RhdGlzdGljcyUyMFVzaW5nJTIwUi5wZGYNCg0KDQojIENvbnNpZGVyYcOnw7VlcyBGaW5haXMNCg0KLSBFc3RlIGVzdHVkbyB0ZXZlIGNvbW8gb2JqZXRpdm8gbWVuc3VyYXIgbyBkZXNlbXBlbmhvKHByb2ZpY2nDqm5jaWEpIG5vIEVOREUvMjAxOCwgZG9zIGVzdHVkYW50ZXMgZGUgRGlyZWl0byBtYXRyaWN1bGFkb3Mgbm8gQ0VTVVBBLCBwb3IgbWVpbyBUUkkuIEFwYXJ0aXIgZGEgZXN0aW1hw6fDo28gcmVhbGl6YWRhIGNvbSBvIG1vZGVsbyBsb2dpc3RpY28gZGUgMiBwYXLDom1ldHJvcyBub3MgMzUgaXRlbnMgZGEgcHJvdmEgb2JqZXRpdmEsIHZlcmlmaWNvdS1zZSBxdWUsIGEgcHJvdmEgbsOjbyBhcHJlc2VudG91IG5lbSBvcCBkb23DrW5pbyBjb2duaXRpdm8gY29tcHJlZW5kaWRvIHBlbGEgZXNjYWxhLiBFc3RlIFJlc3VsdGFkbyBjb3Jyb2JvcmEgbyBiYWl4byBkZXNlbXBlbmhvIGRvcyBlc3R1ZGFudGVzLCBhcG9udGFkbyBhc3BlY3RvcyBkZSBmcmFnaWxpZGFkZXMgZGUgYXByZW5kaXphZ2VtLiANCg0KDQojIFN1Z2VzdMOjbyBQZWRhZ8OzZ2ljYSANCg0KLSBPcyByZXN1bHRhZG9zIGRhcyBhdmFsaWHDp8O1ZXMgc29tYXRpdmFzIGNvbW8gYSBBcGxpY2HDp8OjbyBkZSAqKlNpbXVsYWRvKiogZGFyw6EgYmFzZSBkZSBjb21vIGEgZ2VzdMOjbyBhY2Fkw6ptaWNhIGlyw6EgcmV0b3JuYXIgYW9zIGFsdW5vcyBhcyBkZXZvbHV0aXZhcyBkZSB1bSByZXN1bHRhZG8gbsOjbyBvYnNlcnZhZG8gZW0gdW1hIHByb3ZhIGF0w6kgYWxjYW7Dp2FyIGFwcmVuZGl6YWdlbSBwbGVhLg0KDQotIE9zIG9iamV0aXZvcyBkaXNjaXBsaW5hcmVzIGUgaW50ZXJkaXNjaXBsaW5hcmVzIGRldmVtIGVzdGFyIHByZXNlbnRlcyBuYXMgaGFiaWxpZGFkZXMgZG9zIHByb2Zlc3NvcmVzLCBhc3NpbSBjb21vLCBhICoqVGF4b25vbWlhIGRlIEJsb29tKiosIG1vYmlsaXphbmRvIGNvbXBldMOqbmNpYXMgYW9zIGFsdW5vcy4gIA0KDQoNCiMgQ3LDqWRpdG9zDQoNCioqRkFUVE9SIENPTlNVTFRPUklBIEVNIEFOw4FMSVNFIERFIERBRE9TIDIwMjIqKi4NCg0KDQoqIFtTaXRlXShodHRwczovL1dXVy5mYXR0b3Jjb25zdWx0b3JpYS5jb20uYnIpDQoqIFtmYWNlYm9va10oaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2ZhdHRvcmNvbnN1bHRvcmlhKQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==