Os arquivos em eviews wage1.wf1 bwght.wf1, aula4, dados simulados.xlsx, returns.wf1 seguem anexos para quem for utilizar eviews, quem optar por utilizar r instalar o pacote wooldridge e usar as mesmas bases.

library(wooldridge)
library(tidyverse)

data("wage1")
data("bwght")
data("return")

1) A planilha aula4 anexa simula 50 observações de um processo y=2+0,5*x+u.Assim, temos 50 realizações de u.

library(readxl)
dados_simulados <- read_excel("dados_simulados.xlsx")

dados_simulados

•Calcule os estimadores dos coeficientes para cada processo. (Utilize a formula de Bo e B1 para duas séries e nas seguintes use a função correlação x e y dividido por variância x.)

# Processo 1
# Cálculo da média de x e y
x_medio <- mean(dados_simulados$x1)
y_medio <- mean(dados_simulados$y1)

# Cálculo da soma dos produtos e quadrados dos desvios de x e y
soma_prod_xy <- sum((dados_simulados$x1 - x_medio) * (dados_simulados$y1 - y_medio))
soma_quad_desv_x <- sum((dados_simulados$x1 - x_medio)^2)

# Cálculo dos coeficientes Bo e B1
b1_processo_1 <- soma_prod_xy / soma_quad_desv_x
bo_processo_1 <- y_medio - b1_processo_1 * x_medio

# Processo 2
# Cálculo da correlação e variância de x
correlacao_xy <- cor(dados_simulados$x1, dados_simulados$y1)
variancia_x <- var(dados_simulados$x1)

# Cálculo do coeficiente B1
b1_processo_2 <- correlacao_xy / variancia_x
cat("Processo 1:", "\n")
Processo 1: 
cat("Bo:", bo_processo_1, "\n")
Bo: 1.510523 
cat("B1:", b1_processo_1, "\n")
B1: 1.106429 
cat("Processo 2:", "\n")
Processo 2: 
cat("B1:", b1_processo_2, "\n")
B1: 0.004689226 

•Faça um histograma com os diversos coeficientes estimados (para b1 e b2), calcule média, variância, mínimo, máximo e primeiro e terceiro quartis dos b1_hat´s.

•Multiplique o valor de x por 10 e recalcule o b1_hat, o que acontece com o estimador?

•Calcule para cada observação média de u_hat e correlação de x e u_uhat

•Estime o R2 para as 5 primeiras séries. Calcule a soma dos resíduos, soma dos quadrados explicados.

2) A partir da base de dados Wage1, vamos estimar a seguinte equação:

wage=β_0+ β_1 educ+u

lm(wage~educ,wage1)->mod
mod %>% summary()

Call:
lm(formula = wage ~ educ, data = wage1)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.3396 -2.1501 -0.9674  1.1921 16.6085 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.90485    0.68497  -1.321    0.187    
educ         0.54136    0.05325  10.167   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.378 on 524 degrees of freedom
Multiple R-squared:  0.1648,    Adjusted R-squared:  0.1632 
F-statistic: 103.4 on 1 and 524 DF,  p-value: < 2.2e-16

a) Qual a interpretação do coeficiente β_1? Explique o que é o p-valor e verifique se o coeficiente é estatisticamente significante? Calcule o intervalo de confiança para o mesmo coeficiente.

O coeficiente β₁ na equação fornecida representa o efeito da variável independente “educ” (anos de educação) no salário (wage), mantendo todas as outras variáveis constantes. Nesse caso, o coeficiente de 0.5414 sugere que, em média, para cada aumento de uma unidade no número de anos de educação, o salário aumenta em 0.5414 unidades, assumindo que outros fatores permaneçam constantes. O p-valor é uma medida estatística que indica a probabilidade de observar o resultado sob a hipótese nula de que o coeficiente associado à variável explicativa é zero (ou seja, não há efeito). Um p-valor baixo (geralmente abaixo de 0.05) sugere que a variável é estatisticamente significativa. Segue o Intervalo de Confiança para β₁:

confint(mod)[2,]
    2.5 %    97.5 % 
0.4367534 0.6459651 

b)Vamos agora estimar o seguinte modelo:

log⁡(wage)=β_0+ β_1 educ+u

mod<-lm(lwage~educ,wage1)
mod%>% summary()

Call:
lm(formula = lwage ~ educ, data = wage1)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.21158 -0.36393 -0.07263  0.29712  1.52339 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.583773   0.097336   5.998 3.74e-09 ***
educ        0.082744   0.007567  10.935  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4801 on 524 degrees of freedom
Multiple R-squared:  0.1858,    Adjusted R-squared:  0.1843 
F-statistic: 119.6 on 1 and 524 DF,  p-value: < 2.2e-16

Qual a interpretação do coeficiente β_1 neste modelo? Calcule o intervalo de confiança para o mesmo coeficiente e faça um teste de hipótese sobre o coeficiente.

No modelo logarítmico, o coeficiente β₁ representa a variação percentual esperada no salário (wage) para um aumento de uma unidade na variável independente “educ” (anos de educação), mantendo todas as outras variáveis constantes. Neste caso, o coeficiente de 0.0827 sugere que, em média, um aumento de um ano na educação está associado a um aumento de aproximadamente 8.27% no salário, assumindo que outros fatores permaneçam constantes.

confint(mod)[2,]
     2.5 %     97.5 % 
0.06787958 0.09760915 
p_value <- summary(mod)$coefficients[2, 4]
cat(p_value)
3.270644e-25

Calcule o R2 Estime novamente o modelo com uma restrição para a amostra até a observação 50. Qual a mudança nos resultados?

r_squared <- summary(mod)$r.squared
mod_50<- lm(log(wage) ~ educ, data = wage1[1:50, ])
r_squared50 <- summary(mod_50)$r.squared

cat("R2 1º Modelo:",r_squared,"\n",
    "R2 2º Modelo:",r_squared50)
R2 1º Modelo: 0.1858065 
 R2 2º Modelo: 0.2057024

Isso indica que o modelo restrito até a observação 50 explica uma maior proporção da variabilidade na variável dependente em comparação com o modelo completo. Em outras palavras, o modelo restrito tem um melhor ajuste aos dados até a observação 50 do que o modelo completo. Isso não necessariamente significa que esse modelo é melhor que o primeiro. Isso ocorre porque o �2R2 é uma medida de quão bem o modelo se ajusta aos dados observados em relação à média da variável dependente. No entanto, o segundo modelo, por ser restrito até a observação 50, está sendo avaliado em um conjunto de dados menor, representando um universo menor.

c)Estime agora um novo modelo:

log⁡(wage)=β_0+ β_1 educ+ β_2 tenure+β_3 exper+u Estime os coeficientes desta equação e qual a interpretação deles? Qual a diferença em relação ao itemanterior?

mod<-lm(lwage~educ+tenure+exper,wage1)
mod%>% summary()

Call:
lm(formula = lwage ~ educ + tenure + exper, data = wage1)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.05802 -0.29645 -0.03265  0.28788  1.42809 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.284360   0.104190   2.729  0.00656 ** 
educ        0.092029   0.007330  12.555  < 2e-16 ***
tenure      0.022067   0.003094   7.133 3.29e-12 ***
exper       0.004121   0.001723   2.391  0.01714 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4409 on 522 degrees of freedom
Multiple R-squared:  0.316, Adjusted R-squared:  0.3121 
F-statistic: 80.39 on 3 and 522 DF,  p-value: < 2.2e-16
options(scipen=20)
summary(mod)$coefficients[,4]
 (Intercept)         educ       tenure        exper 
6.562466e-03 8.824197e-32 3.294407e-12 1.713562e-02 
coef(mod)
(Intercept)        educ      tenure       exper 
0.284359541 0.092028988 0.022067218 0.004121109 
confint(mod)
                   2.5 %     97.5 %
(Intercept) 0.0796755675 0.48904351
educ        0.0776292151 0.10642876
tenure      0.0159896854 0.02814475
exper       0.0007356984 0.00750652

d.Calcule o salário esperado de um trabalhador que tenha exatamente a média da amostra nas variáveis anos estudos (educ), experiência e tempo de trabalho na empresa (tenure) Qual o valor do resíduo u ̂?

df<-data.frame(educ=mean(wage1$educ),
               tenure=mean(wage1$tenure),
               exper=mean(wage1$exper))
df
df$pred_lwage<-predict(mod,newdata = df)
df$pred_lwage
[1] 1.623268

e)Crie uma nova variável exper2=exper2. Estime agora a seguinte equação: log⁡(wage)=β_0+ β_1 educ+ β_2 tenure+β_3 exper+ 〖β_4 exper〗^2 +u

wage1$exper2<-wage1$exper^2
mod<-lm(lwage~educ+tenure+exper+exper2,wage1)
mod %>% summary

Call:
lm(formula = lwage ~ educ + tenure + exper + exper2, data = wage1)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.97087 -0.26809 -0.03463  0.27663  1.28678 

Coefficients:
              Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  0.1983445  0.1019556   1.945               0.0523 .  
educ         0.0853489  0.0071885  11.873 < 0.0000000000000002 ***
tenure       0.0208413  0.0030037   6.938      0.0000000000118 ***
exper        0.0328542  0.0051135   6.425      0.0000000002979 ***
exper2      -0.0006606  0.0001111  -5.945      0.0000000050775 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.427 on 521 degrees of freedom
Multiple R-squared:  0.3595,    Adjusted R-squared:  0.3545 
F-statistic: 73.09 on 4 and 521 DF,  p-value: < 0.00000000000000022

Qual o valor esperado de β_4 ?

coef(mod)[5]
       exper2 
-0.0006606217 

Compare com o valor estimado na equação. Faça um teste de hipótese de que β_4 é estatisticamente diferente de zero ao nível de significância de 5%. Teste agora a hipótese conjunta de que β_3 e β_4 são conjuntamente iguais zero, ao nível de significância de 5%.

confint(mod)
                    2.5 %        97.5 %
(Intercept) -0.0019501294  0.3986391885
educ         0.0712269695  0.0994709042
tenure       0.0149403804  0.0267422450
exper        0.0228084888  0.0428999042
exper2      -0.0008789367 -0.0004423066

Qual sua conclusão sobre a inclusão da variável exper? incluido a variavel o modelo obteve melhor R², e gerou um beta 4 negativo significativo e estatisticamente diferente de 0.o que indica retornos decrescentes para a influencia da experiencia.

3) A partir de um modelo teórico definido

por:

y= β_0+β_1 x+u

a) Explique o que é o estimador de mínimos quadrados para estimar o modelo:

ŷ= ( β_0 ) ̂+(β_1* ) ̂*x

Quais são as hipóteses necessárias para que o estimador de mínimos quadrados seja não viesado?

O estimador de mínimos quadrados é uma técnica utilizada para estimar os coeficientes de um modelo de regressão. No caso do modelo linear simples os estimadores de mínimos quadrados são encontrados minimizando a soma dos quadrados dos resíduos (diferenças entre os valores observados e os valores previstos pela reta de regressão). Para que o estimador de mínimos quadrados seja não viesado, é necessário que os erros (u) tenham média zero condicionalmente aos valores de x, ou seja, E(u∣x)=0. Isso implica que não deve haver correlação sistemática entre os erros e as variáveis explicativas.

b) O que representa a reta de regressão e como interpretar cada coeficiente?

A reta de regressão representa a relação linear entre a variável independente (x) e a variável dependente (y). O coeficiente β1 indica a mudança esperada em y para uma mudança unitária em x, mantendo todas as outras variáveis constantes. O coeficiente β0 representa o valor esperado de y quando x é zero.

c) O que é o R2, como ele é calculado e como interpretá-lo?

O R2 é uma medida de quão bem o modelo de regressão se ajusta aos dados. Ele varia de 0 a 1 e indica a proporção da variabilidade na variável dependente que é explicada pelo modelo. É calculado como a proporção da soma dos quadrados explicada pela regressão dividida pela soma total dos quadrados.

d) O que representa o termo u? Se houver uma variável relevante omitida, por exemplo, x´, positivamente correlacionada com x e supondo que β_2 , o coeficiente associado a x´ é também positivo, qual o impacto sobre a estimativa de MQO de β_1?

Se houver uma variável relevante omitida que é positivamente correlacionada com x, e supondo que o coeficiente associado a x’ também seja positivo, isso pode causar um problema de endogeneidade no modelo. Especificamente, pode ocorrer viés de simultaneidade se estiver correlacionado com o erro Isso pode afetar as estimativas de MQO, tornando os coeficientes enviesados e inconsistentes. O viés resultante dependerá da natureza exata da correlação entre x e u.

e) Neste modelo de regressão linear simples, y= β_0+β_1 x+u, imagine que E(u)≠0. Sabendo que E(u) = α0, mostre que o modelo de regressão pode ser reescrito com a mesma inclinação, mas com um novo intercepto e erro, em que o novo erro tem valor esperado igual a 0.

se: E(u)≠0, e E(u) = α0 então: y= β_0+β_1 x+ α0 -> y= (β_0+ α0) +β_1 x Nesta nova forma, (β_0+ α0) representa o novo intercepto β0’ e β1 permanece como a inclinação original. Assim, o modelo de regressão pode ser reescrito com a mesma inclinação, mas com um novo intercepto e um novo erro. onde o novo erro tem E(ϵ)=0.

4) Uma estimativa de demanda mensal por combustíveis das famílias de um país é dada por:

log⁡(q)= β_0+β_1 log⁡(preço)+u

a) Qual o sinal esperado de β_0 e β_1? Qual a interpretação dos coeficientes?

O sinal esperado para β_0 é positivo, pois representa o valor da quantidade demandada quando o preço é zero. Isso sugere que mesmo quando o preço é zero, ainda existe uma quantidade mínima de combustíveis demandada pelas famílias. Já para b_1 o sinal esperado é negativo. Pois, indica que um aumento no preço dos combustíveis esperaria-se em uma redução na quantidade demandada. Esse é um padrão comum em modelos de demanda de bens onde a elasticidade-preço da demanda é negativa.

A partir de dados coletados, um pesquisador estima a demanda para combustíveis e obtém o seguinte resultado:

(log⁡(q) ) ̂= 10,5 -0,51 log⁡(preço29) N=150 R2=0,56 (4,2) (0,19)

N=150 R2=0,56 Entre parênteses o erro-padrão dos coeficientes.

b) Calcule o intervalo de confiança para o parâmetro (β_1 ) ̂, ao nível de confiança de 95%. Qual a interpretação deste intervalo?

beta1 <- -0.51
SE_beta1 <- 0.19
N<-150 
R2<-0.56
uppCI<-beta1+SE_beta1*1.96
lowCI<-beta1-SE_beta1*1.96
cat(uppCI,beta1,lowCI)
-0.1376 -0.51 -0.8824
Isso significa que estamos 95% confiantes de que o verdadeiro valor do coeficiente está dentro desse intervalo. Como o intervalo não inclui zero, podemos concluir que o preço tem um efeito significativo na demanda por combustíveis.
Erro: unexpected symbol em "Isso significa"

Isso significa que estamos 95% confiantes de que o verdadeiro valor do coeficiente está dentro desse intervalo. Como o intervalo não inclui zero, podemos concluir que o preço tem um efeito significativo na demanda por combustíveis.

c) Faça um teste de hipótese, a 1% de significância, que o coeficiente do preço (β_1 ) ̂ =1 é igual a -1, a hipótes alternativa, ou seja, (β_1 ) ̂ <1.


H0 <- -1
t_stat <- (beta1 - H0) / SE_beta1
df <- N - 2
t_critico <- qt(0.01, df, lower.tail = FALSE)

t_stat < t_critico
[1] FALSE
cat(t_stat,t_critico)
2.578947 2.351808

Como a estatística t é maior que o valor crítico, não rejeitamos a hipótese nula. Isso sugere que não temos evidências suficientes para afirmar que o coeficiente estimado é significativamente menor que -1 ao nível de significância de 1%.

d) Suponha agora que o pesquisador deseja incluir um bem substituto nessa equação, de modo que a equação passa a serescrita como:

log⁡(q)= β_0+β_1 log⁡(preço)+β_2 log⁡(preço do bem substituto)+u

Com a introdução dessa nova variável, há alteração na interpretação de (β_1 ),? Qual o sinal esperado de (β_2 ) ̂, ? Com a introdução da nova variável a interpretação de β_1 permanece a mesma. Ele ainda representa a elasticidade-preço da demanda por combustíveis.No entanto, a introdução do preço do bem substituto na equação significa que agora estamos tentando capturar o efeito do preço do bem substituto na demanda por combustíveis.O sinal esperado de β_2 dependerá da relação entre o preço do bem substituto e a demanda por combustíveis. Se o bem substituto for um substituto próximo aos combustíveis, espera-se que um aumento no preço do bem substituto resulte em um aumento na demanda por combustíveis, o que implicaria um sinal positivo para β_2 .

e) Supondo que o preço do bem e do bem substituto são positivamente correlacionados, qual o impacto da omissão do preço do

bem substituo na estimativa de (β_1 ) ̂,? Se o preço do bem e do bem substituto forem positivamente correlacionados e o preço do bem substituto for omitido do modelo, isso pode levar a um viés na estimativa do coeficiente associado ao preço do combustível.

5) Explique em poucas palavras qual o impacto sobre as estimativas do estimador de mínimos quadrados em cada uma das

seguintes situações:

a. Heterocedasticidade

Heterocedasticidade ocorre quando a variabilidade dos erros não é constante em todos os níveis da variável independente. Isso pode levar a estimativas de mínimos quadrados ineficientes e imprecisas para os coeficientes do modelo. Os erros tendem a ser mais dispersos em alguns níveis da variável independente do que em outros, levando a estimativas de erro padrão imprecisas e estimativas de coeficientes enviesadas.

b. A amostra selecionada não é aleatória, de forma que E(u|x}≠0.

Se os erros do modelo não têm média zero condicionalmente aos valores da variável independente, isso viola uma das hipóteses fundamentais do estimador de mínimos quadrados ordinários (MQO), levando a estimativas enviesadas dos coeficientes. Isso ocorre quando há algum tipo de viés de seleção na amostra, e os erros sistemáticos estão correlacionados com os valores da variável independente.

c. Um coeficiente de correlação amostral de 0,95 entre duas variáveis independentes incluídas no modelo.

Quando há uma alta correlação entre duas variáveis independentes incluídas no modelo, pode ocorrer multicolinearidade, o que pode dificultar a interpretação dos coeficientes e tornar as estimativas menos precisas. Isso ocorre porque as variáveis independentes se tornam altamente correlacionadas, tornando difícil para o modelo distinguir entre os efeitos específicos de cada variável independente sobre a variável dependente.

d. Aumento do número de observações da amostra.

Aumentar o número de observações na amostra geralmente resulta em estimativas de MQO mais precisas e confiáveis dos coeficientes do modelo. Isso porque um maior número de observações reduz a variabilidade das estimativas e aumenta a precisão das estimativas dos coeficientes e seus erros padrão.

e. Mantendo o mesmo tamanho da amostra, aumento na variabilidade de x, ou seja, os valores das variáveis

independentes ficam mais dispersos.

Se a variabilidade da variável independente x aumenta, os pontos de dados estarão mais dispersos em torno da reta de regressão. Isso pode resultar em uma redução da precisão das estimativas dos coeficientes do modelo, especialmente se a variabilidade de x estiver relacionada à variabilidade da variável dependente y. Isso pode levar a estimativas menos confiáveis dos coeficientes e maiores erros padrão.

6) Vamos fazer um teste para a eficiência do mercado, isto é, se o mercado usa eficientemente as informações ao avaliar as ações.

A base return.wf1 lista o retorno de 142 ações entre 1990 e 1994, com uma série de variáveis sobre o desempenho da empresa. Vamos estimar um primeiro modelo:

return=β_0+ β_1 dkr+ β_2 eps+β_3 netinc+β_4 salary+u Dkc: divida/capital; dividendos por ação em 1990; netinc: receita líquida em 1990; salary: remuneração do CEO Interprete os coeficientes da regressão. Os sinais da regressão são os esperados? Faça um teste de hipótese, a um nível de 5%, que cada coeficiente é estaticamente significante. A hipótese a ser testada é a de que conjuntamente todos os coeficientes de inclinação β_1, β_2, β_3, β_4 são estatisticamente iguais zero. Explique como realizar este teste. Faça o teste diretamente no software e compare calcule com os valores comparando os modelos restritos e irrestritos. Mostre como é definida a regra de decisão sobre a rejeição ou não da hipótese e explique o que é o p-valor. Vamos agora incluir alterar a especificação: return=β_0+ β_1 dkr+ β_2 eps+β_3 log⁡(netinc)+β_4 salary+u Como esse modificação alteração a interpretação do β_3.

# Interpretar os coeficientes da regressão
summary(mod)

Call:
lm(formula = return ~ dkr + eps + netinc + salary, data = return)

Residuals:
    Min      1Q  Median      3Q     Max 
-88.629 -25.421  -4.215  18.326 124.627 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)  
(Intercept) -14.370216   6.893616  -2.085    0.039 *
dkr           0.320544   0.200911   1.595    0.113  
eps           0.042699   0.078138   0.546    0.586  
netinc       -0.005109   0.004675  -1.093    0.276  
salary        0.003499   0.002194   1.595    0.113  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 39.19 on 137 degrees of freedom
Multiple R-squared:  0.03948,   Adjusted R-squared:  0.01143 
F-statistic: 1.408 on 4 and 137 DF,  p-value: 0.2347

Os coeficientes da regressão indicam como o retorno está relacionado com as variáveis independentes. O intercepto representa o retorno esperado quando todas as outras variáveis são zero. No entanto, seu valor pode não ter uma interpretação prática direta neste contexto.

Para as variáveis independentes (dkr, eps, netinc e salary), seus coeficientes representam a mudança esperada no retorno para uma unidade de mudança em cada variável, mantendo todas as outras constantes. Um valor positivo indica que um aumento na variável está associado a um aumento no retorno, enquanto um valor negativo indica uma relação inversa.

No entanto, ao olhar para os resultados, notamos que apenas o intercepto é estatisticamente significativo. Isso significa que, ao nível de significância de 5%, não temos evidências suficientes para afirmar que os coeficientes das outras variáveis são diferentes de zero. Isso sugere que essas variáveis podem não ser boas preditoras do retorno neste modelo.

anova_irrestrito
Analysis of Variance Table

Model 1: return ~ 1
Model 2: return ~ dkr + eps + netinc + salary
  Res.Df    RSS Df Sum of Sq      F Pr(>F)
1    141 219096                           
2    137 210447  4    8649.3 1.4077 0.2347
# Extrair o valor-p associado ao teste F
p_value <- anova_irrestrito$`Pr(>F)`[1]

# Comparar os modelos restrito e irrestrito
cat("Valor-p associado ao teste F:", p_value, "\n")
Valor-p associado ao teste F: NA 

Não rejeitamos a hipótese nula. Não há evidências suficientes para concluir que pelo menos um dos coeficientes é diferente de zero.

# Interpretar o coeficiente beta_3 na nova especificação
summary(mod_modificado)

Call:
lm(formula = return ~ dkr + eps + log(netinc) + salary, data = return)

Residuals:
    Min      1Q  Median      3Q     Max 
-87.678 -27.165  -3.532  18.052 128.110 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)  
(Intercept)  4.885509  17.234365   0.283   0.7772  
dkr          0.337494   0.201711   1.673   0.0966 .
eps          0.060670   0.080107   0.757   0.4501  
log(netinc) -4.017062   3.068515  -1.309   0.1927  
salary       0.003660   0.002201   1.663   0.0986 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 39.12 on 137 degrees of freedom
Multiple R-squared:  0.04307,   Adjusted R-squared:  0.01514 
F-statistic: 1.542 on 4 and 137 DF,  p-value: 0.1936

. Agora, o coeficiente β3​ indica o efeito esperado no retorno para uma mudança unitária no logaritmo natural da receita líquida (netinc), mantendo todas as outras variáveis constantes. Sendo negativo sugeriria que um aumento na receita líquida está associado a uma redução no retorno, porém o resultado não parece estatisticamente significativo.

7) Vamos agora utilizar a base excel anexa, do arquivo dados_simulados:

São dois modelos: Modelo 1: y_1=β_0 + β_1 x_1+β_2 x_2+ u

onde β_0=2; β_1=0,5; β_2=0,3, x_2=2*x_1+v com v ~N(0,9)

Modelo2: y_(1_)=β_0+ β_1 x_1+ 〖β´〗_2 x_3+u onde β_0=2; β_1=0,5; β_2 = 0,3 x_1 e x_3 são indepdentes

#dados_simulados %>% head
mod1<- lm(y1~x1+x2,data =dados_simulados)
colnames(dados_simulados)<-c( "x1",
                              "x2",
                              "x3",
                              "y1",
                              "y2")
mod2<- lm(y2~x1+x3,data =dados_simulados)

a) Estime os modelos 1 e 2, verifique a significância dos modelos e calcule o intervalo de confiança dos coeficientes. Os valores verdadeiros estão dentro do intervalo de confiança? Qual o modelo que apresenta uma estimativa mais precisa? Por que isso acontece?

mod1 %>% summary()

Call:
lm(formula = y1 ~ x1 + x2, data = dados_simulados)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0547 -0.7720  0.0733  0.7595  1.9703 

Coefficients:
            Estimate Std. Error t value    Pr(>|t|)    
(Intercept)  1.98397    0.31626   6.273 0.000000104 ***
x1           0.50300    0.10525   4.779 0.000017690 ***
x2           0.29349    0.05094   5.761 0.000000617 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.064 on 47 degrees of freedom
Multiple R-squared:  0.9959,    Adjusted R-squared:  0.9957 
F-statistic:  5651 on 2 and 47 DF,  p-value: < 0.00000000000000022
mod2 %>% summary()

Call:
lm(formula = y2 ~ x1 + x3, data = dados_simulados)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0547 -0.7720  0.0733  0.7595  1.9703 

Coefficients:
            Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  1.98397    0.31626   6.273          0.000000104 ***
x1           0.48998    0.01081  45.340 < 0.0000000000000002 ***
x3           0.29349    0.05094   5.761          0.000000617 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.064 on 47 degrees of freedom
Multiple R-squared:  0.9807,    Adjusted R-squared:  0.9799 
F-statistic:  1197 on 2 and 47 DF,  p-value: < 0.00000000000000022

mod1 %>% confint()
                2.5 %    97.5 %
(Intercept) 1.3477332 2.6202009
x1          0.2912567 0.7147434
x2          0.1910111 0.3959707
mod2 %>% confint()
                2.5 %    97.5 %
(Intercept) 1.3477332 2.6202009
x1          0.4682410 0.5117226
x3          0.1910111 0.3959707

Os coeficientes tem seu paramentro verdadeiro dentro do intervalo de confiança, porém o X1 do modelo 1 está bem menos preciso.Isso acontece porque o modelo 2 inclui uma variável x3 que é uma função linear de x1, o que faz com que haja multicolinearidade entre eles. Isso pode levar a estimativas enviesadas e menos precisas para os coeficientes do modelo. O aumento da colinearidade pode inflar os coeficientes e suas estimativas padrão, tornando-os menos precisos. Portanto, mesmo que o ajuste do modelo (R-squared) permaneça inalterado, a interpretação dos coeficientes pode ser afetada pela multicolinearidade.

b) Vamos agora estimar os dois modelos somente tendo com variável independente apenas x1. Compare os resultados obtidos com o modelo anterior e entre os dois novos modelos. Há algum viés e em caso positivo como explicar esse viés?

# Modelo 1 apenas com x1 como variável independente
mod1_x1 <- lm(y1 ~ x1, data = dados_simulados)

# Modelo 2 apenas com x1 como variável independente
mod2_x1 <- lm(y2 ~ x1, data = dados_simulados)

# Comparar os resultados com os modelos anteriores
summary(mod1_x1)

Call:
lm(formula = y1 ~ x1, data = dados_simulados)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.2007 -0.7743  0.0901  0.7851  2.6654 

Coefficients:
            Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  1.51052    0.39474   3.827             0.000375 ***
x1           1.10643    0.01347  82.125 < 0.0000000000000002 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.375 on 48 degrees of freedom
Multiple R-squared:  0.9929,    Adjusted R-squared:  0.9928 
F-statistic:  6745 on 1 and 48 DF,  p-value: < 0.00000000000000022
summary(mod2_x1)

Call:
lm(formula = y2 ~ x1, data = dados_simulados)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.2007 -0.7743  0.0901  0.7851  2.6654 

Coefficients:
            Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  1.51052    0.39474   3.827             0.000375 ***
x1           0.50643    0.01347  37.590 < 0.0000000000000002 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.375 on 48 degrees of freedom
Multiple R-squared:  0.9671,    Adjusted R-squared:  0.9665 
F-statistic:  1413 on 1 and 48 DF,  p-value: < 0.00000000000000022
confint(mod1_x1)
               2.5 %   97.5 %
(Intercept) 0.716837 2.304210
x1          1.079341 1.133517
confint(mod2_x1)
                2.5 %    97.5 %
(Intercept) 0.7168370 2.3042099
x1          0.4793409 0.5335171

c) Vamos agora fazer o seguinte exercício, estimar uma regressão de x_2 e x_1 (sem constante). Estime os resíduos

dessa regressão, vamos denomina-lo v_hat (na aba de estimação, vá em proc/make residual serie, esse comando irá gerar uma série de resíduos estimados na base). Faça agora uma estimativa do modelo 1 com a seguinte especificação: y_1=β_0+ β_1 x_1+ β_2 v_hat+ u Qual o valor do coeficiente β_2? Qual o valor do erro-padrão? Compare com o modelo calculado no item a.

regressao_x2_x1 <- lm(x2 ~ x1 - 1, data = dados_simulados)
v_hat <- resid(regressao_x2_x1)
dados_simulados$v_hat <- v_hat


mod1_v_hat <- lm(y1 ~ x1 + v_hat, data = dados_simulados)
summary(regressao_x2_x1)

Call:
lm(formula = x2 ~ x1 - 1, data = dados_simulados)

Residuals:
    Min      1Q  Median      3Q     Max 
-8.8772 -2.2163 -0.2649  1.4566  7.8007 

Coefficients:
   Estimate Std. Error t value            Pr(>|t|)    
x1  2.00812    0.01491   134.7 <0.0000000000000002 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.089 on 49 degrees of freedom
Multiple R-squared:  0.9973,    Adjusted R-squared:  0.9973 
F-statistic: 1.814e+04 on 1 and 49 DF,  p-value: < 0.00000000000000022
summary(mod1_v_hat)

Call:
lm(formula = y1 ~ x1 + v_hat, data = dados_simulados)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0547 -0.7720  0.0733  0.7595  1.9703 

Coefficients:
            Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  1.98397    0.31626   6.273          0.000000104 ***
x1           1.09237    0.01071 102.042 < 0.0000000000000002 ***
v_hat        0.29349    0.05094   5.761          0.000000617 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.064 on 47 degrees of freedom
Multiple R-squared:  0.9959,    Adjusted R-squared:  0.9957 
F-statistic:  5651 on 2 and 47 DF,  p-value: < 0.00000000000000022

β_2 é igual a 0.29349 e o erro padrão é 0.05094. O valor do coeficiente β2 e do erro padrão é o mesmo em ambos os modelos.

8) Vamos agora fazer um exercício de replicar alguns modelos de regressão apresentados em aula: Com a base bwgt.wf1, a variável apresenta o peso dos bebês, e série de variáveis de variáveis para tentar explicar a variação do peso dos recém-nascidos. Vamos usar duas variáveis a renda familiar e a quantidade de cigarros que a mulher fumou durante a gravidez: Estime o seguinte modelo:

bwght=β_0+ β_1 cigs+ β_2 faminc+ u

summary(mod)

Call:
lm(formula = bwght ~ cigs + faminc, data = bwght)

Residuals:
    Min      1Q  Median      3Q     Max 
-96.061 -11.543   0.638  13.126 150.083 

Coefficients:
             Estimate Std. Error t value             Pr(>|t|)    
(Intercept) 116.97413    1.04898 111.512 < 0.0000000000000002 ***
cigs         -0.46341    0.09158  -5.060          0.000000475 ***
faminc        0.09276    0.02919   3.178              0.00151 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 20.06 on 1385 degrees of freedom
Multiple R-squared:  0.0298,    Adjusted R-squared:  0.0284 
F-statistic: 21.27 on 2 and 1385 DF,  p-value: 0.0000000007942

a)Qual a interpretação dos coeficientes? Calcule o intervalo de confiança a 99% dos coeficientes.

No modelo de regressão estimado, o coeficiente para a variável cigarros oi estimado em -0.46341, sugerindo que um aumento de uma unidade na quantidade de cigarros fumados durante a gravidez está associado a uma redução média de 0.46341 unidades no peso do bebê ao nascer, mantendo todas as outras variáveis constantes. Além disso, o coeficiente estimado para a variável renda de 0.09276, indicando que um aumento de uma unidade na renda familiar está associado a um aumento médio de 0.09276 unidades no peso do bebê ao nascer, mantendo todas as outras variáveis constantes.

# Intervalo de confiança a 99% para o coeficiente de cigs
confint(mod, level = 0.99)["cigs", ]
     0.5 %     99.5 % 
-0.6996193 -0.2271958 
# Intervalo de confiança a 99% para o coeficiente de faminc
confint(mod, level = 0.99)["faminc", ]
     0.5 %     99.5 % 
0.01747802 0.16805145 

b)Calcule agora uma nova variável para o peso dos bebes, considerando que uma 1 libra (lbs) é igual a 453,6 g. Assim,multiplique a variável bwghtlbs por 453,6, criando uma nova variável bwghtkg. (para criar a nova variável na aba de estimativa e na opção genr construa a variável bwghtkg=453,6*bwghtlbs). Faça estatísticas descritivas dessa nova variável. Qual a média? Há ouliers? Reestime o modelo acima e interprete os resultados. Quais alterações em relação ao modelo anterior?

bwght$bwghtkg <- 453.6 * bwght$bwghtlbs
summary(bwght$bwghtkg)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    652    3033    3402    3365    3742    7683 

model_bwt <- lm(bwghtkg ~ cigs + faminc, data = bwght)

summary(model_bwt)

Call:
lm(formula = bwghtkg ~ cigs + faminc, data = bwght)

Residuals:
    Min      1Q  Median      3Q     Max 
-2723.3  -327.3    18.1   372.1  4254.9 

Coefficients:
             Estimate Std. Error t value             Pr(>|t|)    
(Intercept) 3316.2166    29.7387 111.512 < 0.0000000000000002 ***
cigs         -13.1376     2.5962  -5.060          0.000000475 ***
faminc         2.6299     0.8275   3.178              0.00151 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 568.8 on 1385 degrees of freedom
Multiple R-squared:  0.0298,    Adjusted R-squared:  0.0284 
F-statistic: 21.27 on 2 and 1385 DF,  p-value: 0.0000000007942

No modelo anterior, onde o peso dos bebês estava em libras, os coeficientes foram estimados em termos de libras. No novo modelo, onde o peso dos bebês está em quilogramas, os coeficientes foram estimados em termos de quilogramas. não havendo outra alteração no resultado

c)Ainda utilizando a variável bwghtkg, vamos agora alterar a forma de medir a quantidade de cigarros consumidos durantea gravidez, alterando para a quantidade de maços (variável packs) no lugar de unidades de cigarros. Tire estatísticas descritivas de cigs e packs, faça um histograma e analise os resultados. Agora reestime o modelo anterior substituindo cigs por packs. Como os resultados foram alterados?

summary(mod)

Call:
lm(formula = bwght ~ packs + faminc, data = bwght)

Residuals:
    Min      1Q  Median      3Q     Max 
-96.061 -11.543   0.638  13.126 150.083 

Coefficients:
             Estimate Std. Error t value             Pr(>|t|)    
(Intercept) 116.97413    1.04898 111.512 < 0.0000000000000002 ***
packs        -9.26815    1.83154  -5.060          0.000000475 ***
faminc        0.09276    0.02919   3.178              0.00151 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 20.06 on 1385 degrees of freedom
Multiple R-squared:  0.0298,    Adjusted R-squared:  0.0284 
F-statistic: 21.27 on 2 and 1385 DF,  p-value: 0.0000000007942
9.2681/0.46341
[1] 19.99978

considerando que um pack tem 20 cigarros houve, aproximadamente apenas uma mudança de escala.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpDVVJTTzogTWVzdHJhZG8gUHJvZmlzc2lvbmFsIGVtIEVjb25vbWlhDQpESVNDSVBMSU5BOiAgRWNvbm9tZXRyaWENClBST0ZFU1NPUjogQnJ1bm8gZGUgT2xpdmVpcmEgQ3J1eg0KTU9OSVRPUkE6IExhcmlzc2EgTm9ja28NCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB0cnVlDQplZGl0b3Jfb3B0aW9uczogDQogIG1hcmtkb3duOiANCiAgICB3cmFwOiAxMjANCi0tLQ0KDQpPcyBhcnF1aXZvcyBlbSBldmlld3Mgd2FnZTEud2YxIGJ3Z2h0LndmMSwgYXVsYTQsIGRhZG9zIHNpbXVsYWRvcy54bHN4LCByZXR1cm5zLndmMSBzZWd1ZW0gYW5leG9zIHBhcmEgcXVlbSBmb3IgdXRpbGl6YXINCmV2aWV3cywgcXVlbSBvcHRhciBwb3IgdXRpbGl6YXIgciBpbnN0YWxhciBvIHBhY290ZSB3b29sZHJpZGdlIGUgdXNhciBhcyBtZXNtYXMgYmFzZXMuDQoNCmBgYHtyfQ0KbGlicmFyeSh3b29sZHJpZGdlKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQoNCmRhdGEoIndhZ2UxIikNCmRhdGEoImJ3Z2h0IikNCmRhdGEoInJldHVybiIpDQoNCmBgYA0KDQojIyAxKSBBIHBsYW5pbGhhIGF1bGE0IGFuZXhhIHNpbXVsYSA1MCBvYnNlcnZhw6fDtWVzIGRlIHVtIHByb2Nlc3NvIHk9MiswLDVcKngrdS5Bc3NpbSwgdGVtb3MgNTAgcmVhbGl6YcOnw7VlcyBkZSB1Lg0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHhsKQ0KZGFkb3Nfc2ltdWxhZG9zIDwtIHJlYWRfZXhjZWwoImRhZG9zX3NpbXVsYWRvcy54bHN4IikNCg0KZGFkb3Nfc2ltdWxhZG9zDQpgYGANCg0K4oCiQ2FsY3VsZSBvcyBlc3RpbWFkb3JlcyBkb3MgY29lZmljaWVudGVzIHBhcmEgY2FkYSBwcm9jZXNzby4gKFV0aWxpemUgYSBmb3JtdWxhIGRlIEJvIGUgQjEgcGFyYSBkdWFzIHPDqXJpZXMgZSBuYXMNCnNlZ3VpbnRlcyB1c2UgYSBmdW7Dp8OjbyBjb3JyZWxhw6fDo28geCBlIHkgZGl2aWRpZG8gcG9yIHZhcmnDom5jaWEgeC4pDQoNCmBgYHtyfQ0KIyBQcm9jZXNzbyAxDQojIEPDoWxjdWxvIGRhIG3DqWRpYSBkZSB4IGUgeQ0KeF9tZWRpbyA8LSBtZWFuKGRhZG9zX3NpbXVsYWRvcyR4MSkNCnlfbWVkaW8gPC0gbWVhbihkYWRvc19zaW11bGFkb3MkeTEpDQoNCiMgQ8OhbGN1bG8gZGEgc29tYSBkb3MgcHJvZHV0b3MgZSBxdWFkcmFkb3MgZG9zIGRlc3Zpb3MgZGUgeCBlIHkNCnNvbWFfcHJvZF94eSA8LSBzdW0oKGRhZG9zX3NpbXVsYWRvcyR4MSAtIHhfbWVkaW8pICogKGRhZG9zX3NpbXVsYWRvcyR5MSAtIHlfbWVkaW8pKQ0Kc29tYV9xdWFkX2Rlc3ZfeCA8LSBzdW0oKGRhZG9zX3NpbXVsYWRvcyR4MSAtIHhfbWVkaW8pXjIpDQoNCiMgQ8OhbGN1bG8gZG9zIGNvZWZpY2llbnRlcyBCbyBlIEIxDQpiMV9wcm9jZXNzb18xIDwtIHNvbWFfcHJvZF94eSAvIHNvbWFfcXVhZF9kZXN2X3gNCmJvX3Byb2Nlc3NvXzEgPC0geV9tZWRpbyAtIGIxX3Byb2Nlc3NvXzEgKiB4X21lZGlvDQoNCiMgUHJvY2Vzc28gMg0KIyBDw6FsY3VsbyBkYSBjb3JyZWxhw6fDo28gZSB2YXJpw6JuY2lhIGRlIHgNCmNvcnJlbGFjYW9feHkgPC0gY29yKGRhZG9zX3NpbXVsYWRvcyR4MSwgZGFkb3Nfc2ltdWxhZG9zJHkxKQ0KdmFyaWFuY2lhX3ggPC0gdmFyKGRhZG9zX3NpbXVsYWRvcyR4MSkNCg0KIyBDw6FsY3VsbyBkbyBjb2VmaWNpZW50ZSBCMQ0KYjFfcHJvY2Vzc29fMiA8LSBjb3JyZWxhY2FvX3h5IC8gdmFyaWFuY2lhX3gNCmNhdCgiUHJvY2Vzc28gMToiLCAiXG4iKQ0KY2F0KCJCbzoiLCBib19wcm9jZXNzb18xLCAiXG4iKQ0KY2F0KCJCMToiLCBiMV9wcm9jZXNzb18xLCAiXG4iKQ0KDQpjYXQoIlByb2Nlc3NvIDI6IiwgIlxuIikNCmNhdCgiQjE6IiwgYjFfcHJvY2Vzc29fMiwgIlxuIikNCg0KYGBgDQoNCuKAokZhw6dhIHVtIGhpc3RvZ3JhbWEgY29tIG9zIGRpdmVyc29zIGNvZWZpY2llbnRlcyBlc3RpbWFkb3MgKHBhcmEgYjEgZSBiMiksIGNhbGN1bGUgbcOpZGlhLCB2YXJpw6JuY2lhLCBtw61uaW1vLCBtw6F4aW1vIGUNCnByaW1laXJvIGUgdGVyY2Vpcm8gcXVhcnRpcyBkb3MgYjFfaGF0wrRzLg0KDQrigKJNdWx0aXBsaXF1ZSBvIHZhbG9yIGRlIHggcG9yIDEwIGUgcmVjYWxjdWxlIG8gYjFfaGF0LCBvIHF1ZSBhY29udGVjZSBjb20gbyBlc3RpbWFkb3I/DQoNCuKAokNhbGN1bGUgcGFyYSBjYWRhIG9ic2VydmHDp8OjbyBtw6lkaWEgZGUgdV9oYXQgZSBjb3JyZWxhw6fDo28gZGUgeCBlIHVfdWhhdA0KDQrigKJFc3RpbWUgbyBSMiBwYXJhIGFzIDUgcHJpbWVpcmFzIHPDqXJpZXMuIENhbGN1bGUgYSBzb21hIGRvcyByZXPDrWR1b3MsIHNvbWEgZG9zIHF1YWRyYWRvcyBleHBsaWNhZG9zLg0KDQojIyAyKSBBIHBhcnRpciBkYSBiYXNlIGRlIGRhZG9zIFdhZ2UxLCB2YW1vcyBlc3RpbWFyIGEgc2VndWludGUgZXF1YcOnw6NvOg0KDQp3YWdlPc6yXzArIM6yXzEgZWR1Yyt1DQoNCmBgYHtyfQ0KbG0od2FnZX5lZHVjLHdhZ2UxKS0+bW9kDQptb2QgJT4lIHN1bW1hcnkoKQ0KYGBgDQoNCiMjIyBhKSBRdWFsIGEgaW50ZXJwcmV0YcOnw6NvIGRvIGNvZWZpY2llbnRlIM6yXzE/IEV4cGxpcXVlIG8gcXVlIMOpIG8gcC12YWxvciBlIHZlcmlmaXF1ZSBzZSBvIGNvZWZpY2llbnRlIMOpIGVzdGF0aXN0aWNhbWVudGUgc2lnbmlmaWNhbnRlPyBDYWxjdWxlIG8gaW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EgcGFyYSBvIG1lc21vIGNvZWZpY2llbnRlLg0KDQpPIGNvZWZpY2llbnRlIM6y4oKBIG5hIGVxdWHDp8OjbyBmb3JuZWNpZGEgcmVwcmVzZW50YSBvIGVmZWl0byBkYSB2YXJpw6F2ZWwgaW5kZXBlbmRlbnRlICJlZHVjIiAoYW5vcyBkZSBlZHVjYcOnw6NvKSBubyBzYWzDoXJpbw0KKHdhZ2UpLCBtYW50ZW5kbyB0b2RhcyBhcyBvdXRyYXMgdmFyacOhdmVpcyBjb25zdGFudGVzLiBOZXNzZSBjYXNvLCBvIGNvZWZpY2llbnRlIGRlIDAuNTQxNCBzdWdlcmUgcXVlLCBlbSBtw6lkaWEsIHBhcmENCmNhZGEgYXVtZW50byBkZSB1bWEgdW5pZGFkZSBubyBuw7ptZXJvIGRlIGFub3MgZGUgZWR1Y2HDp8OjbywgbyBzYWzDoXJpbyBhdW1lbnRhIGVtIDAuNTQxNCB1bmlkYWRlcywgYXNzdW1pbmRvIHF1ZSBvdXRyb3MNCmZhdG9yZXMgcGVybWFuZcOnYW0gY29uc3RhbnRlcy4gTyBwLXZhbG9yIMOpIHVtYSBtZWRpZGEgZXN0YXTDrXN0aWNhIHF1ZSBpbmRpY2EgYSBwcm9iYWJpbGlkYWRlIGRlIG9ic2VydmFyIG8gcmVzdWx0YWRvIHNvYg0KYSBoaXDDs3Rlc2UgbnVsYSBkZSBxdWUgbyBjb2VmaWNpZW50ZSBhc3NvY2lhZG8gw6AgdmFyacOhdmVsIGV4cGxpY2F0aXZhIMOpIHplcm8gKG91IHNlamEsIG7Do28gaMOhIGVmZWl0bykuIFVtIHAtdmFsb3IgYmFpeG8NCihnZXJhbG1lbnRlIGFiYWl4byBkZSAwLjA1KSBzdWdlcmUgcXVlIGEgdmFyacOhdmVsIMOpIGVzdGF0aXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2YS4gU2VndWUgbyBJbnRlcnZhbG8gZGUgQ29uZmlhbsOnYSBwYXJhDQrOsuKCgToNCg0KYGBge3J9DQpjb25maW50KG1vZClbMixdDQpgYGANCg0KIyMjIGIpVmFtb3MgYWdvcmEgZXN0aW1hciBvIHNlZ3VpbnRlIG1vZGVsbzoNCg0KbG9n4oGhKHdhZ2UpPc6yXzArIM6yXzEgZWR1Yyt1DQoNCmBgYHtyfQ0KbW9kPC1sbShsd2FnZX5lZHVjLHdhZ2UxKQ0KbW9kJT4lIHN1bW1hcnkoKQ0KDQpgYGANCg0KUXVhbCBhIGludGVycHJldGHDp8OjbyBkbyBjb2VmaWNpZW50ZSDOsl8xIG5lc3RlIG1vZGVsbz8gQ2FsY3VsZSBvIGludGVydmFsbyBkZSBjb25maWFuw6dhIHBhcmEgbyBtZXNtbyBjb2VmaWNpZW50ZSBlIGZhw6dhDQp1bSB0ZXN0ZSBkZSBoaXDDs3Rlc2Ugc29icmUgbyBjb2VmaWNpZW50ZS4NCg0KTm8gbW9kZWxvIGxvZ2Fyw610bWljbywgbyBjb2VmaWNpZW50ZSDOsuKCgSByZXByZXNlbnRhIGEgdmFyaWHDp8OjbyBwZXJjZW50dWFsIGVzcGVyYWRhIG5vIHNhbMOhcmlvICh3YWdlKSBwYXJhIHVtIGF1bWVudG8gZGUNCnVtYSB1bmlkYWRlIG5hIHZhcmnDoXZlbCBpbmRlcGVuZGVudGUgImVkdWMiIChhbm9zIGRlIGVkdWNhw6fDo28pLCBtYW50ZW5kbyB0b2RhcyBhcyBvdXRyYXMgdmFyacOhdmVpcyBjb25zdGFudGVzLiBOZXN0ZQ0KY2FzbywgbyBjb2VmaWNpZW50ZSBkZSAwLjA4Mjcgc3VnZXJlIHF1ZSwgZW0gbcOpZGlhLCB1bSBhdW1lbnRvIGRlIHVtIGFubyBuYSBlZHVjYcOnw6NvIGVzdMOhIGFzc29jaWFkbyBhIHVtIGF1bWVudG8gZGUNCmFwcm94aW1hZGFtZW50ZSA4LjI3JSBubyBzYWzDoXJpbywgYXNzdW1pbmRvIHF1ZSBvdXRyb3MgZmF0b3JlcyBwZXJtYW5lw6dhbSBjb25zdGFudGVzLg0KDQpgYGB7cn0NCmNvbmZpbnQobW9kKVsyLF0NCg0KYGBgDQoNCmBgYHtyfQ0KcF92YWx1ZSA8LSBzdW1tYXJ5KG1vZCkkY29lZmZpY2llbnRzWzIsIDRdDQpjYXQocF92YWx1ZSkNCmBgYA0KDQpDYWxjdWxlIG8gUjIgRXN0aW1lIG5vdmFtZW50ZSBvIG1vZGVsbyBjb20gdW1hIHJlc3RyacOnw6NvIHBhcmEgYSBhbW9zdHJhIGF0w6kgYSBvYnNlcnZhw6fDo28gNTAuIFF1YWwgYSBtdWRhbsOnYSBub3MNCnJlc3VsdGFkb3M/DQoNCmBgYHtyfQ0Kcl9zcXVhcmVkIDwtIHN1bW1hcnkobW9kKSRyLnNxdWFyZWQNCm1vZF81MDwtIGxtKGxvZyh3YWdlKSB+IGVkdWMsIGRhdGEgPSB3YWdlMVsxOjUwLCBdKQ0Kcl9zcXVhcmVkNTAgPC0gc3VtbWFyeShtb2RfNTApJHIuc3F1YXJlZA0KDQpjYXQoIlIyIDHCuiBNb2RlbG86IixyX3NxdWFyZWQsIlxuIiwNCiAgICAiUjIgMsK6IE1vZGVsbzoiLHJfc3F1YXJlZDUwKQ0KYGBgDQoNCklzc28gaW5kaWNhIHF1ZSBvIG1vZGVsbyByZXN0cml0byBhdMOpIGEgb2JzZXJ2YcOnw6NvIDUwIGV4cGxpY2EgdW1hIG1haW9yIHByb3BvcsOnw6NvIGRhIHZhcmlhYmlsaWRhZGUgbmEgdmFyacOhdmVsDQpkZXBlbmRlbnRlIGVtIGNvbXBhcmHDp8OjbyBjb20gbyBtb2RlbG8gY29tcGxldG8uIEVtIG91dHJhcyBwYWxhdnJhcywgbyBtb2RlbG8gcmVzdHJpdG8gdGVtIHVtIG1lbGhvciBhanVzdGUgYW9zIGRhZG9zIGF0w6kNCmEgb2JzZXJ2YcOnw6NvIDUwIGRvIHF1ZSBvIG1vZGVsbyBjb21wbGV0by4gSXNzbyBuw6NvIG5lY2Vzc2FyaWFtZW50ZSBzaWduaWZpY2EgcXVlIGVzc2UgbW9kZWxvIMOpIG1lbGhvciBxdWUgbyBwcmltZWlyby4NCklzc28gb2NvcnJlIHBvcnF1ZSBvIO+/vTJSMiDDqSB1bWEgbWVkaWRhIGRlIHF1w6NvIGJlbSBvIG1vZGVsbyBzZSBhanVzdGEgYW9zIGRhZG9zIG9ic2VydmFkb3MgZW0gcmVsYcOnw6NvIMOgIG3DqWRpYSBkYQ0KdmFyacOhdmVsIGRlcGVuZGVudGUuIE5vIGVudGFudG8sIG8gc2VndW5kbyBtb2RlbG8sIHBvciBzZXIgcmVzdHJpdG8gYXTDqSBhIG9ic2VydmHDp8OjbyA1MCwgZXN0w6Egc2VuZG8gYXZhbGlhZG8gZW0gdW0NCmNvbmp1bnRvIGRlIGRhZG9zIG1lbm9yLCByZXByZXNlbnRhbmRvIHVtIHVuaXZlcnNvIG1lbm9yLg0KDQojIyMgYylFc3RpbWUgYWdvcmEgdW0gbm92byBtb2RlbG86DQoNCmxvZ+KBoSh3YWdlKT3Osl8wKyDOsl8xIGVkdWMrIM6yXzIgdGVudXJlK86yXzMgZXhwZXIrdSBFc3RpbWUgb3MgY29lZmljaWVudGVzIGRlc3RhIGVxdWHDp8OjbyBlIHF1YWwgYSBpbnRlcnByZXRhw6fDo28gZGVsZXM/IFF1YWwNCmEgZGlmZXJlbsOnYSBlbSByZWxhw6fDo28gYW8gaXRlbWFudGVyaW9yPw0KDQpgYGB7cn0NCm1vZDwtbG0obHdhZ2V+ZWR1Yyt0ZW51cmUrZXhwZXIsd2FnZTEpDQptb2QlPiUgc3VtbWFyeSgpDQpvcHRpb25zKHNjaXBlbj0yMCkNCnN1bW1hcnkobW9kKSRjb2VmZmljaWVudHNbLDRdDQpjb2VmKG1vZCkNCmNvbmZpbnQobW9kKQ0KYGBgDQoNCiMjIyBkLkNhbGN1bGUgbyBzYWzDoXJpbyBlc3BlcmFkbyBkZSB1bSB0cmFiYWxoYWRvciBxdWUgdGVuaGEgZXhhdGFtZW50ZSBhIG3DqWRpYSBkYSBhbW9zdHJhIG5hcyB2YXJpw6F2ZWlzIGFub3MgZXN0dWRvcyAoZWR1YyksIGV4cGVyacOqbmNpYSBlIHRlbXBvIGRlIHRyYWJhbGhvIG5hIGVtcHJlc2EgKHRlbnVyZSkgUXVhbCBvIHZhbG9yIGRvIHJlc8OtZHVvIHUgzII/DQoNCmBgYHtyfQ0KZGY8LWRhdGEuZnJhbWUoZWR1Yz1tZWFuKHdhZ2UxJGVkdWMpLA0KICAgICAgICAgICAgICAgdGVudXJlPW1lYW4od2FnZTEkdGVudXJlKSwNCiAgICAgICAgICAgICAgIGV4cGVyPW1lYW4od2FnZTEkZXhwZXIpKQ0KZGYNCmRmJHByZWRfbHdhZ2U8LXByZWRpY3QobW9kLG5ld2RhdGEgPSBkZikNCmRmJHByZWRfbHdhZ2UNCmBgYA0KDQojIyMgZSlDcmllIHVtYSBub3ZhIHZhcmnDoXZlbCBleHBlcjI9ZXhwZXIyLiBFc3RpbWUgYWdvcmEgYSBzZWd1aW50ZSBlcXVhw6fDo286IGxvZ+KBoSh3YWdlKT3Osl8wKyDOsl8xIGVkdWMrIM6yXzIgdGVudXJlK86yXzMgZXhwZXIrIOOAls6yXzQgZXhwZXLjgJdcXjIgK3UNCg0KYGBge3J9DQp3YWdlMSRleHBlcjI8LXdhZ2UxJGV4cGVyXjINCm1vZDwtbG0obHdhZ2V+ZWR1Yyt0ZW51cmUrZXhwZXIrZXhwZXIyLHdhZ2UxKQ0KbW9kICU+JSBzdW1tYXJ5DQpgYGANCg0KUXVhbCBvIHZhbG9yIGVzcGVyYWRvIGRlIM6yXzQgPw0KDQpgYGB7cn0NCmNvZWYobW9kKVs1XQ0KYGBgDQoNCkNvbXBhcmUgY29tIG8gdmFsb3IgZXN0aW1hZG8gbmEgZXF1YcOnw6NvLiBGYcOnYSB1bSB0ZXN0ZSBkZSBoaXDDs3Rlc2UgZGUgcXVlIM6yXzQgw6kgZXN0YXRpc3RpY2FtZW50ZSBkaWZlcmVudGUgZGUgemVybyBhbw0KbsOtdmVsIGRlIHNpZ25pZmljw6JuY2lhIGRlIDUlLiBUZXN0ZSBhZ29yYSBhIGhpcMOzdGVzZSBjb25qdW50YSBkZSBxdWUgzrJfMyBlIM6yXzQgc8OjbyBjb25qdW50YW1lbnRlIGlndWFpcyB6ZXJvLCBhbyBuw612ZWwNCmRlIHNpZ25pZmljw6JuY2lhIGRlIDUlLg0KDQpgYGB7cn0NCmNvbmZpbnQobW9kKQ0KYGBgDQoNClF1YWwgc3VhIGNvbmNsdXPDo28gc29icmUgYSBpbmNsdXPDo28gZGEgdmFyacOhdmVsIGV4cGVyPyBpbmNsdWlkbyBhIHZhcmlhdmVsIG8gbW9kZWxvIG9idGV2ZSBtZWxob3IgUsKyLCBlIGdlcm91IHVtIGJldGEgNA0KbmVnYXRpdm8gc2lnbmlmaWNhdGl2byBlIGVzdGF0aXN0aWNhbWVudGUgZGlmZXJlbnRlIGRlIDAubyBxdWUgaW5kaWNhIHJldG9ybm9zIGRlY3Jlc2NlbnRlcyBwYXJhIGEgaW5mbHVlbmNpYSBkYQ0KZXhwZXJpZW5jaWEuDQoNCiMjIDMpIEEgcGFydGlyIGRlIHVtIG1vZGVsbyB0ZcOzcmljbyBkZWZpbmlkbw0KDQpwb3I6DQoNCnk9IM6yXzArzrJfMSB4K3UNCg0KIyMjIGEpIEV4cGxpcXVlIG8gcXVlIMOpIG8gZXN0aW1hZG9yIGRlIG3DrW5pbW9zIHF1YWRyYWRvcyBwYXJhIGVzdGltYXIgbyBtb2RlbG86DQoNCnnMgj0gKCDOsl8wICkgzIIrKM6yXzFcKiApIMyCXCp4DQoNClF1YWlzIHPDo28gYXMgaGlww7N0ZXNlcyBuZWNlc3PDoXJpYXMgcGFyYSBxdWUgbyBlc3RpbWFkb3IgZGUgbcOtbmltb3MgcXVhZHJhZG9zIHNlamEgbsOjbyB2aWVzYWRvPw0KDQpPIGVzdGltYWRvciBkZSBtw61uaW1vcyBxdWFkcmFkb3Mgw6kgdW1hIHTDqWNuaWNhIHV0aWxpemFkYSBwYXJhIGVzdGltYXIgb3MgY29lZmljaWVudGVzIGRlIHVtIG1vZGVsbyBkZSByZWdyZXNzw6NvLiBObyBjYXNvDQpkbyBtb2RlbG8gbGluZWFyIHNpbXBsZXMgb3MgZXN0aW1hZG9yZXMgZGUgbcOtbmltb3MgcXVhZHJhZG9zIHPDo28gZW5jb250cmFkb3MgbWluaW1pemFuZG8gYSBzb21hIGRvcyBxdWFkcmFkb3MgZG9zDQpyZXPDrWR1b3MgKGRpZmVyZW7Dp2FzIGVudHJlIG9zIHZhbG9yZXMgb2JzZXJ2YWRvcyBlIG9zIHZhbG9yZXMgcHJldmlzdG9zIHBlbGEgcmV0YSBkZSByZWdyZXNzw6NvKS4gUGFyYSBxdWUgbyBlc3RpbWFkb3IgZGUNCm3DrW5pbW9zIHF1YWRyYWRvcyBzZWphIG7Do28gdmllc2Fkbywgw6kgbmVjZXNzw6FyaW8gcXVlIG9zIGVycm9zICh1KSB0ZW5oYW0gbcOpZGlhIHplcm8gY29uZGljaW9uYWxtZW50ZSBhb3MgdmFsb3JlcyBkZSB4LA0Kb3Ugc2VqYSwgRSh14oijeCk9MC4gSXNzbyBpbXBsaWNhIHF1ZSBuw6NvIGRldmUgaGF2ZXIgY29ycmVsYcOnw6NvIHNpc3RlbcOhdGljYSBlbnRyZSBvcyBlcnJvcyBlIGFzIHZhcmnDoXZlaXMgZXhwbGljYXRpdmFzLg0KDQojIyMgYikgTyBxdWUgcmVwcmVzZW50YSBhIHJldGEgZGUgcmVncmVzc8OjbyBlIGNvbW8gaW50ZXJwcmV0YXIgY2FkYSBjb2VmaWNpZW50ZT8NCg0KQSByZXRhIGRlIHJlZ3Jlc3PDo28gcmVwcmVzZW50YSBhIHJlbGHDp8OjbyBsaW5lYXIgZW50cmUgYSB2YXJpw6F2ZWwgaW5kZXBlbmRlbnRlICh4KSBlIGEgdmFyacOhdmVsIGRlcGVuZGVudGUgKHkpLiBPDQpjb2VmaWNpZW50ZSDOsjEgaW5kaWNhIGEgbXVkYW7Dp2EgZXNwZXJhZGEgZW0geSBwYXJhIHVtYSBtdWRhbsOnYSB1bml0w6FyaWEgZW0geCwgbWFudGVuZG8gdG9kYXMgYXMgb3V0cmFzIHZhcmnDoXZlaXMNCmNvbnN0YW50ZXMuIE8gY29lZmljaWVudGUgzrIwIHJlcHJlc2VudGEgbyB2YWxvciBlc3BlcmFkbyBkZSB5IHF1YW5kbyB4IMOpIHplcm8uDQoNCiMjIyBjKSBPIHF1ZSDDqSBvIFIyLCBjb21vIGVsZSDDqSBjYWxjdWxhZG8gZSBjb21vIGludGVycHJldMOhLWxvPw0KDQpPIFIyIMOpIHVtYSBtZWRpZGEgZGUgcXXDo28gYmVtIG8gbW9kZWxvIGRlIHJlZ3Jlc3PDo28gc2UgYWp1c3RhIGFvcyBkYWRvcy4gRWxlIHZhcmlhIGRlIDAgYSAxIGUgaW5kaWNhIGEgcHJvcG9yw6fDo28gZGENCnZhcmlhYmlsaWRhZGUgbmEgdmFyacOhdmVsIGRlcGVuZGVudGUgcXVlIMOpIGV4cGxpY2FkYSBwZWxvIG1vZGVsby4gw4kgY2FsY3VsYWRvIGNvbW8gYSBwcm9wb3LDp8OjbyBkYSBzb21hIGRvcyBxdWFkcmFkb3MNCmV4cGxpY2FkYSBwZWxhIHJlZ3Jlc3PDo28gZGl2aWRpZGEgcGVsYSBzb21hIHRvdGFsIGRvcyBxdWFkcmFkb3MuDQoNCiMjIyBkKSBPIHF1ZSByZXByZXNlbnRhIG8gdGVybW8gdT8gU2UgaG91dmVyIHVtYSB2YXJpw6F2ZWwgcmVsZXZhbnRlIG9taXRpZGEsIHBvciBleGVtcGxvLCB4wrQsIHBvc2l0aXZhbWVudGUgY29ycmVsYWNpb25hZGEgY29tIHggZSBzdXBvbmRvIHF1ZSDOsl8yICwgbyBjb2VmaWNpZW50ZSBhc3NvY2lhZG8gYSB4wrQgw6kgdGFtYsOpbSBwb3NpdGl2bywgcXVhbCBvIGltcGFjdG8gc29icmUgYSBlc3RpbWF0aXZhIGRlIE1RTyBkZSDOsl8xPw0KDQpTZSBob3V2ZXIgdW1hIHZhcmnDoXZlbCByZWxldmFudGUgb21pdGlkYSBxdWUgw6kgcG9zaXRpdmFtZW50ZSBjb3JyZWxhY2lvbmFkYSBjb20geCwgZSBzdXBvbmRvIHF1ZSBvIGNvZWZpY2llbnRlIGFzc29jaWFkbw0KYSB4JyB0YW1iw6ltIHNlamEgcG9zaXRpdm8sIGlzc28gcG9kZSBjYXVzYXIgdW0gcHJvYmxlbWEgZGUgZW5kb2dlbmVpZGFkZSBubyBtb2RlbG8uIEVzcGVjaWZpY2FtZW50ZSwgcG9kZSBvY29ycmVyIHZpw6lzDQpkZSBzaW11bHRhbmVpZGFkZSBzZSBlc3RpdmVyIGNvcnJlbGFjaW9uYWRvIGNvbSBvIGVycm8gSXNzbyBwb2RlIGFmZXRhciBhcyBlc3RpbWF0aXZhcyBkZSBNUU8sIHRvcm5hbmRvIG9zIGNvZWZpY2llbnRlcw0KZW52aWVzYWRvcyBlIGluY29uc2lzdGVudGVzLiBPIHZpw6lzIHJlc3VsdGFudGUgZGVwZW5kZXLDoSBkYSBuYXR1cmV6YSBleGF0YSBkYSBjb3JyZWxhw6fDo28gZW50cmUgeCBlIHUuDQoNCiMjIyBlKSBOZXN0ZSBtb2RlbG8gZGUgcmVncmVzc8OjbyBsaW5lYXIgc2ltcGxlcywgeT0gzrJfMCvOsl8xIHgrdSwgaW1hZ2luZSBxdWUgRSh1KeKJoDAuIFNhYmVuZG8gcXVlIEUodSkgPSDOsTAsIG1vc3RyZSBxdWUgbyBtb2RlbG8gZGUgcmVncmVzc8OjbyBwb2RlIHNlciByZWVzY3JpdG8gY29tIGEgbWVzbWEgaW5jbGluYcOnw6NvLCBtYXMgY29tIHVtIG5vdm8gaW50ZXJjZXB0byBlIGVycm8sIGVtIHF1ZSBvIG5vdm8gZXJybyB0ZW0gdmFsb3IgZXNwZXJhZG8gaWd1YWwgYSAwLg0KDQpzZTogRSh1KeKJoDAsIGUgRSh1KSA9IM6xMCBlbnTDo286IHk9IM6yXzArzrJfMSB4KyDOsTAgLVw+IHk9ICjOsl8wKyDOsTApICvOsl8xIHggTmVzdGEgbm92YSBmb3JtYSwgKM6yXzArIM6xMCkgcmVwcmVzZW50YSBvIG5vdm8NCmludGVyY2VwdG8gzrIwJyBlIM6yMSBwZXJtYW5lY2UgY29tbyBhIGluY2xpbmHDp8OjbyBvcmlnaW5hbC4gQXNzaW0sIG8gbW9kZWxvIGRlIHJlZ3Jlc3PDo28gcG9kZSBzZXIgcmVlc2NyaXRvIGNvbSBhIG1lc21hDQppbmNsaW5hw6fDo28sIG1hcyBjb20gdW0gbm92byBpbnRlcmNlcHRvIGUgdW0gbm92byBlcnJvLiBvbmRlIG8gbm92byBlcnJvIHRlbSBFKM+1KT0wLg0KDQojIyAqKjQpIFVtYSBlc3RpbWF0aXZhIGRlIGRlbWFuZGEgbWVuc2FsIHBvciBjb21idXN0w612ZWlzIGRhcyBmYW3DrWxpYXMgZGUgdW0gcGHDrXMgw6kgZGFkYSBwb3I6KioNCg0KbG9n4oGhKHEpPSDOsl8wK86yXzEgbG9n4oGhKHByZcOnbykrdQ0KDQojIyMgYSkgUXVhbCBvIHNpbmFsIGVzcGVyYWRvIGRlIM6yXzAgZSDOsl8xPyBRdWFsIGEgaW50ZXJwcmV0YcOnw6NvIGRvcyBjb2VmaWNpZW50ZXM/DQoNCk8gc2luYWwgZXNwZXJhZG8gcGFyYSDOsl8wIMOpIHBvc2l0aXZvLCBwb2lzIHJlcHJlc2VudGEgbyB2YWxvciBkYSBxdWFudGlkYWRlIGRlbWFuZGFkYSBxdWFuZG8gbyBwcmXDp28gw6kgemVyby4gSXNzbyBzdWdlcmUNCnF1ZSBtZXNtbyBxdWFuZG8gbyBwcmXDp28gw6kgemVybywgYWluZGEgZXhpc3RlIHVtYSBxdWFudGlkYWRlIG3DrW5pbWEgZGUgY29tYnVzdMOtdmVpcyBkZW1hbmRhZGEgcGVsYXMgZmFtw61saWFzLiBKw6EgcGFyYQ0KYl8xIG8gc2luYWwgZXNwZXJhZG8gw6kgbmVnYXRpdm8uIFBvaXMsIGluZGljYSBxdWUgdW0gYXVtZW50byBubyBwcmXDp28gZG9zIGNvbWJ1c3TDrXZlaXMgZXNwZXJhcmlhLXNlIGVtIHVtYSByZWR1w6fDo28gbmENCnF1YW50aWRhZGUgZGVtYW5kYWRhLiBFc3NlIMOpIHVtIHBhZHLDo28gY29tdW0gZW0gbW9kZWxvcyBkZSBkZW1hbmRhIGRlIGJlbnMgb25kZSBhIGVsYXN0aWNpZGFkZS1wcmXDp28gZGEgZGVtYW5kYSDDqQ0KbmVnYXRpdmEuDQoNCkEgcGFydGlyIGRlIGRhZG9zIGNvbGV0YWRvcywgdW0gcGVzcXVpc2Fkb3IgZXN0aW1hIGEgZGVtYW5kYSBwYXJhIGNvbWJ1c3TDrXZlaXMgZSBvYnTDqW0gbyBzZWd1aW50ZSByZXN1bHRhZG86DQoNCihsb2figaEocSkgKSDMgj0gMTAsNSAtMCw1MSBsb2figaEocHJlw6dvMjkpIE49MTUwIFIyPTAsNTYgKDQsMikgKDAsMTkpDQoNCk49MTUwIFIyPTAsNTYgRW50cmUgcGFyw6pudGVzZXMgbyBlcnJvLXBhZHLDo28gZG9zIGNvZWZpY2llbnRlcy4NCg0KIyMjICoqYikgQ2FsY3VsZSBvIGludGVydmFsbyBkZSBjb25maWFuw6dhIHBhcmEgbyBwYXLDom1ldHJvICjOsl8xICkgzIIsIGFvIG7DrXZlbCBkZSBjb25maWFuw6dhIGRlIDk1JS4gUXVhbCBhIGludGVycHJldGHDp8OjbyBkZXN0ZSBpbnRlcnZhbG8/KioNCg0KYGBge3J9DQpiZXRhMSA8LSAtMC41MQ0KU0VfYmV0YTEgPC0gMC4xOQ0KTjwtMTUwIA0KUjI8LTAuNTYNCnVwcENJPC1iZXRhMStTRV9iZXRhMSoxLjk2DQpsb3dDSTwtYmV0YTEtU0VfYmV0YTEqMS45Ng0KY2F0KHVwcENJLGJldGExLGxvd0NJKQ0KDQoNCg0KYGBgDQoNCklzc28gc2lnbmlmaWNhIHF1ZSBlc3RhbW9zIDk1JSBjb25maWFudGVzIGRlIHF1ZSBvIHZlcmRhZGVpcm8gdmFsb3IgZG8gY29lZmljaWVudGUgZXN0w6EgZGVudHJvIGRlc3NlIGludGVydmFsby4gQ29tbyBvDQppbnRlcnZhbG8gbsOjbyBpbmNsdWkgemVybywgcG9kZW1vcyBjb25jbHVpciBxdWUgbyBwcmXDp28gdGVtIHVtIGVmZWl0byBzaWduaWZpY2F0aXZvIG5hIGRlbWFuZGEgcG9yIGNvbWJ1c3TDrXZlaXMuDQoNCiMjIyBjKSBGYcOnYSB1bSB0ZXN0ZSBkZSBoaXDDs3Rlc2UsIGEgMSUgZGUgc2lnbmlmaWPDom5jaWEsIHF1ZSBvIGNvZWZpY2llbnRlIGRvIHByZcOnbyAozrJfMSApIMyCID0xIMOpIGlndWFsIGEgLTEsIGEgaGlww7N0ZXMgYWx0ZXJuYXRpdmEsIG91IHNlamEsICjOsl8xICkgzIIgXDwxLg0KDQpgYGB7cn0NCg0KSDAgPC0gLTENCnRfc3RhdCA8LSAoYmV0YTEgLSBIMCkgLyBTRV9iZXRhMQ0KZGYgPC0gTiAtIDINCnRfY3JpdGljbyA8LSBxdCgwLjAxLCBkZiwgbG93ZXIudGFpbCA9IEZBTFNFKQ0KDQp0X3N0YXQgPCB0X2NyaXRpY28NCg0KY2F0KHRfc3RhdCx0X2NyaXRpY28pDQpgYGANCg0KQ29tbyBhIGVzdGF0w61zdGljYSB0IMOpIG1haW9yIHF1ZSBvIHZhbG9yIGNyw610aWNvLCBuw6NvIHJlamVpdGFtb3MgYSBoaXDDs3Rlc2UgbnVsYS4gSXNzbyBzdWdlcmUgcXVlIG7Do28gdGVtb3MgZXZpZMOqbmNpYXMNCnN1ZmljaWVudGVzIHBhcmEgYWZpcm1hciBxdWUgbyBjb2VmaWNpZW50ZSBlc3RpbWFkbyDDqSBzaWduaWZpY2F0aXZhbWVudGUgbWVub3IgcXVlIC0xIGFvIG7DrXZlbCBkZSBzaWduaWZpY8OibmNpYSBkZSAxJS4NCg0KIyMjIGQpIFN1cG9uaGEgYWdvcmEgcXVlIG8gcGVzcXVpc2Fkb3IgZGVzZWphIGluY2x1aXIgdW0gYmVtIHN1YnN0aXR1dG8gbmVzc2EgZXF1YcOnw6NvLCBkZSBtb2RvIHF1ZSBhIGVxdWHDp8OjbyBwYXNzYSBhIHNlcmVzY3JpdGEgY29tbzoNCg0KbG9n4oGhKHEpPSDOsl8wK86yXzEgbG9n4oGhKHByZcOnbykrzrJfMiBsb2figaEocHJlw6dvIGRvIGJlbSBzdWJzdGl0dXRvKSt1DQoNCkNvbSBhIGludHJvZHXDp8OjbyBkZXNzYSBub3ZhIHZhcmnDoXZlbCwgaMOhIGFsdGVyYcOnw6NvIG5hIGludGVycHJldGHDp8OjbyBkZSAozrJfMSApLD8gUXVhbCBvIHNpbmFsIGVzcGVyYWRvIGRlICjOsl8yICkgzIIsID8gQ29tDQphIGludHJvZHXDp8OjbyBkYSBub3ZhIHZhcmnDoXZlbCBhIGludGVycHJldGHDp8OjbyBkZSDOsl8xIHBlcm1hbmVjZSBhIG1lc21hLiBFbGUgYWluZGEgcmVwcmVzZW50YSBhIGVsYXN0aWNpZGFkZS1wcmXDp28gZGENCmRlbWFuZGEgcG9yIGNvbWJ1c3TDrXZlaXMuTm8gZW50YW50bywgYSBpbnRyb2R1w6fDo28gZG8gcHJlw6dvIGRvIGJlbSBzdWJzdGl0dXRvIG5hIGVxdWHDp8OjbyBzaWduaWZpY2EgcXVlIGFnb3JhIGVzdGFtb3MNCnRlbnRhbmRvIGNhcHR1cmFyIG8gZWZlaXRvIGRvIHByZcOnbyBkbyBiZW0gc3Vic3RpdHV0byBuYSBkZW1hbmRhIHBvciBjb21idXN0w612ZWlzLk8gc2luYWwgZXNwZXJhZG8gZGUgzrJfMiBkZXBlbmRlcsOhIGRhDQpyZWxhw6fDo28gZW50cmUgbyBwcmXDp28gZG8gYmVtIHN1YnN0aXR1dG8gZSBhIGRlbWFuZGEgcG9yIGNvbWJ1c3TDrXZlaXMuIFNlIG8gYmVtIHN1YnN0aXR1dG8gZm9yIHVtIHN1YnN0aXR1dG8gcHLDs3hpbW8gYW9zDQpjb21idXN0w612ZWlzLCBlc3BlcmEtc2UgcXVlIHVtIGF1bWVudG8gbm8gcHJlw6dvIGRvIGJlbSBzdWJzdGl0dXRvIHJlc3VsdGUgZW0gdW0gYXVtZW50byBuYSBkZW1hbmRhIHBvciBjb21idXN0w612ZWlzLCBvDQpxdWUgaW1wbGljYXJpYSB1bSBzaW5hbCBwb3NpdGl2byBwYXJhIM6yXzIgLg0KDQojIyMgZSkgU3Vwb25kbyBxdWUgbyBwcmXDp28gZG8gYmVtIGUgZG8gYmVtIHN1YnN0aXR1dG8gc8OjbyBwb3NpdGl2YW1lbnRlIGNvcnJlbGFjaW9uYWRvcywgcXVhbCBvIGltcGFjdG8gZGEgb21pc3PDo28gZG8gcHJlw6dvIGRvDQoNCmJlbSBzdWJzdGl0dW8gbmEgZXN0aW1hdGl2YSBkZSAozrJfMSApIMyCLD8gU2UgbyBwcmXDp28gZG8gYmVtIGUgZG8gYmVtIHN1YnN0aXR1dG8gZm9yZW0gcG9zaXRpdmFtZW50ZSBjb3JyZWxhY2lvbmFkb3MgZSBvDQpwcmXDp28gZG8gYmVtIHN1YnN0aXR1dG8gZm9yIG9taXRpZG8gZG8gbW9kZWxvLCBpc3NvIHBvZGUgbGV2YXIgYSB1bSB2acOpcyBuYSBlc3RpbWF0aXZhIGRvIGNvZWZpY2llbnRlIGFzc29jaWFkbyBhbyBwcmXDp28NCmRvIGNvbWJ1c3TDrXZlbC4NCg0KIyMgNSkgRXhwbGlxdWUgZW0gcG91Y2FzIHBhbGF2cmFzIHF1YWwgbyBpbXBhY3RvIHNvYnJlIGFzIGVzdGltYXRpdmFzIGRvIGVzdGltYWRvciBkZSBtw61uaW1vcyBxdWFkcmFkb3MgZW0gY2FkYSB1bWEgZGFzDQoNCnNlZ3VpbnRlcyBzaXR1YcOnw7VlczoNCg0KIyMjIGEuIEhldGVyb2NlZGFzdGljaWRhZGUgDQoNCkhldGVyb2NlZGFzdGljaWRhZGUgb2NvcnJlIHF1YW5kbyBhIHZhcmlhYmlsaWRhZGUgZG9zIGVycm9zIG7Do28gw6kgY29uc3RhbnRlIGVtIHRvZG9zIG9zIG7DrXZlaXMgZGEgdmFyacOhdmVsIGluZGVwZW5kZW50ZS4NCklzc28gcG9kZSBsZXZhciBhIGVzdGltYXRpdmFzIGRlIG3DrW5pbW9zIHF1YWRyYWRvcyBpbmVmaWNpZW50ZXMgZSBpbXByZWNpc2FzIHBhcmEgb3MgY29lZmljaWVudGVzIGRvIG1vZGVsby4gT3MgZXJyb3MNCnRlbmRlbSBhIHNlciBtYWlzIGRpc3BlcnNvcyBlbSBhbGd1bnMgbsOtdmVpcyBkYSB2YXJpw6F2ZWwgaW5kZXBlbmRlbnRlIGRvIHF1ZSBlbSBvdXRyb3MsIGxldmFuZG8gYSBlc3RpbWF0aXZhcyBkZSBlcnJvDQpwYWRyw6NvIGltcHJlY2lzYXMgZSBlc3RpbWF0aXZhcyBkZSBjb2VmaWNpZW50ZXMgZW52aWVzYWRhcy4NCg0KIyMjIGIuIEEgYW1vc3RyYSBzZWxlY2lvbmFkYSBuw6NvIMOpIGFsZWF0w7NyaWEsIGRlIGZvcm1hIHF1ZSBFKHVcfHh94omgMC4NCg0KU2Ugb3MgZXJyb3MgZG8gbW9kZWxvIG7Do28gdMOqbSBtw6lkaWEgemVybyBjb25kaWNpb25hbG1lbnRlIGFvcyB2YWxvcmVzIGRhIHZhcmnDoXZlbCBpbmRlcGVuZGVudGUsIGlzc28gdmlvbGEgdW1hIGRhcw0KaGlww7N0ZXNlcyBmdW5kYW1lbnRhaXMgZG8gZXN0aW1hZG9yIGRlIG3DrW5pbW9zIHF1YWRyYWRvcyBvcmRpbsOhcmlvcyAoTVFPKSwgbGV2YW5kbyBhIGVzdGltYXRpdmFzIGVudmllc2FkYXMgZG9zDQpjb2VmaWNpZW50ZXMuIElzc28gb2NvcnJlIHF1YW5kbyBow6EgYWxndW0gdGlwbyBkZSB2acOpcyBkZSBzZWxlw6fDo28gbmEgYW1vc3RyYSwgZSBvcyBlcnJvcyBzaXN0ZW3DoXRpY29zIGVzdMOjbw0KY29ycmVsYWNpb25hZG9zIGNvbSBvcyB2YWxvcmVzIGRhIHZhcmnDoXZlbCBpbmRlcGVuZGVudGUuDQoNCiMjIyBjLiBVbSBjb2VmaWNpZW50ZSBkZSBjb3JyZWxhw6fDo28gYW1vc3RyYWwgZGUgMCw5NSBlbnRyZSBkdWFzIHZhcmnDoXZlaXMgaW5kZXBlbmRlbnRlcyBpbmNsdcOtZGFzIG5vIG1vZGVsby4NCg0KUXVhbmRvIGjDoSB1bWEgYWx0YSBjb3JyZWxhw6fDo28gZW50cmUgZHVhcyB2YXJpw6F2ZWlzIGluZGVwZW5kZW50ZXMgaW5jbHXDrWRhcyBubyBtb2RlbG8sIHBvZGUgb2NvcnJlciBtdWx0aWNvbGluZWFyaWRhZGUsIG8NCnF1ZSBwb2RlIGRpZmljdWx0YXIgYSBpbnRlcnByZXRhw6fDo28gZG9zIGNvZWZpY2llbnRlcyBlIHRvcm5hciBhcyBlc3RpbWF0aXZhcyBtZW5vcyBwcmVjaXNhcy4gSXNzbyBvY29ycmUgcG9ycXVlIGFzDQp2YXJpw6F2ZWlzIGluZGVwZW5kZW50ZXMgc2UgdG9ybmFtIGFsdGFtZW50ZSBjb3JyZWxhY2lvbmFkYXMsIHRvcm5hbmRvIGRpZsOtY2lsIHBhcmEgbyBtb2RlbG8gZGlzdGluZ3VpciBlbnRyZSBvcyBlZmVpdG9zDQplc3BlY8OtZmljb3MgZGUgY2FkYSB2YXJpw6F2ZWwgaW5kZXBlbmRlbnRlIHNvYnJlIGEgdmFyacOhdmVsIGRlcGVuZGVudGUuDQoNCiMjIyBkLiBBdW1lbnRvIGRvIG7Dum1lcm8gZGUgb2JzZXJ2YcOnw7VlcyBkYSBhbW9zdHJhLg0KDQpBdW1lbnRhciBvIG7Dum1lcm8gZGUgb2JzZXJ2YcOnw7VlcyBuYSBhbW9zdHJhIGdlcmFsbWVudGUgcmVzdWx0YSBlbSBlc3RpbWF0aXZhcyBkZSBNUU8gbWFpcyBwcmVjaXNhcyBlIGNvbmZpw6F2ZWlzIGRvcw0KY29lZmljaWVudGVzIGRvIG1vZGVsby4gSXNzbyBwb3JxdWUgdW0gbWFpb3IgbsO6bWVybyBkZSBvYnNlcnZhw6fDtWVzIHJlZHV6IGEgdmFyaWFiaWxpZGFkZSBkYXMgZXN0aW1hdGl2YXMgZSBhdW1lbnRhIGENCnByZWNpc8OjbyBkYXMgZXN0aW1hdGl2YXMgZG9zIGNvZWZpY2llbnRlcyBlIHNldXMgZXJyb3MgcGFkcsOjby4NCg0KIyMjIGUuIE1hbnRlbmRvIG8gbWVzbW8gdGFtYW5obyBkYSBhbW9zdHJhLCBhdW1lbnRvIG5hIHZhcmlhYmlsaWRhZGUgZGUgeCwgb3Ugc2VqYSwgb3MgdmFsb3JlcyBkYXMgdmFyacOhdmVpcw0KDQpgYGAgICAgICAgICANCmluZGVwZW5kZW50ZXMgZmljYW0gbWFpcyBkaXNwZXJzb3MuDQpgYGANCg0KU2UgYSB2YXJpYWJpbGlkYWRlIGRhIHZhcmnDoXZlbCBpbmRlcGVuZGVudGUgeCBhdW1lbnRhLCBvcyBwb250b3MgZGUgZGFkb3MgZXN0YXLDo28gbWFpcyBkaXNwZXJzb3MgZW0gdG9ybm8gZGEgcmV0YSBkZQ0KcmVncmVzc8Ojby4gSXNzbyBwb2RlIHJlc3VsdGFyIGVtIHVtYSByZWR1w6fDo28gZGEgcHJlY2lzw6NvIGRhcyBlc3RpbWF0aXZhcyBkb3MgY29lZmljaWVudGVzIGRvIG1vZGVsbywgZXNwZWNpYWxtZW50ZSBzZSBhDQp2YXJpYWJpbGlkYWRlIGRlIHggZXN0aXZlciByZWxhY2lvbmFkYSDDoCB2YXJpYWJpbGlkYWRlIGRhIHZhcmnDoXZlbCBkZXBlbmRlbnRlIHkuIElzc28gcG9kZSBsZXZhciBhIGVzdGltYXRpdmFzIG1lbm9zDQpjb25macOhdmVpcyBkb3MgY29lZmljaWVudGVzIGUgbWFpb3JlcyBlcnJvcyBwYWRyw6NvLg0KDQojIyA2KSBWYW1vcyBmYXplciB1bSB0ZXN0ZSBwYXJhIGEgZWZpY2nDqm5jaWEgZG8gbWVyY2FkbywgaXN0byDDqSwgc2UgbyBtZXJjYWRvIHVzYSBlZmljaWVudGVtZW50ZSBhcyBpbmZvcm1hw6fDtWVzIGFvIGF2YWxpYXIgYXMgYcOnw7Vlcy4NCg0KQSBiYXNlIHJldHVybi53ZjEgbGlzdGEgbyByZXRvcm5vIGRlIDE0MiBhw6fDtWVzIGVudHJlIDE5OTAgZSAxOTk0LCBjb20gdW1hIHPDqXJpZSBkZSB2YXJpw6F2ZWlzIHNvYnJlIG8gZGVzZW1wZW5obyBkYQ0KZW1wcmVzYS4gVmFtb3MgZXN0aW1hciB1bSBwcmltZWlybyBtb2RlbG86DQoNCnJldHVybj3Osl8wKyDOsl8xIGRrcisgzrJfMiBlcHMrzrJfMyBuZXRpbmMrzrJfNCBzYWxhcnkrdSBEa2M6IGRpdmlkYS9jYXBpdGFsOyBkaXZpZGVuZG9zIHBvciBhw6fDo28gZW0gMTk5MDsgbmV0aW5jOiByZWNlaXRhDQpsw61xdWlkYSBlbSAxOTkwOyBzYWxhcnk6IHJlbXVuZXJhw6fDo28gZG8gQ0VPIEludGVycHJldGUgb3MgY29lZmljaWVudGVzIGRhIHJlZ3Jlc3PDo28uIE9zIHNpbmFpcyBkYSByZWdyZXNzw6NvIHPDo28gb3MNCmVzcGVyYWRvcz8gRmHDp2EgdW0gdGVzdGUgZGUgaGlww7N0ZXNlLCBhIHVtIG7DrXZlbCBkZSA1JSwgcXVlIGNhZGEgY29lZmljaWVudGUgw6kgZXN0YXRpY2FtZW50ZSBzaWduaWZpY2FudGUuIEEgaGlww7N0ZXNlIGENCnNlciB0ZXN0YWRhIMOpIGEgZGUgcXVlIGNvbmp1bnRhbWVudGUgdG9kb3Mgb3MgY29lZmljaWVudGVzIGRlIGluY2xpbmHDp8OjbyDOsl8xLCDOsl8yLCDOsl8zLCDOsl80IHPDo28gZXN0YXRpc3RpY2FtZW50ZSBpZ3VhaXMNCnplcm8uIEV4cGxpcXVlIGNvbW8gcmVhbGl6YXIgZXN0ZSB0ZXN0ZS4gRmHDp2EgbyB0ZXN0ZSBkaXJldGFtZW50ZSBubyBzb2Z0d2FyZSBlIGNvbXBhcmUgY2FsY3VsZSBjb20gb3MgdmFsb3Jlcw0KY29tcGFyYW5kbyBvcyBtb2RlbG9zIHJlc3RyaXRvcyBlIGlycmVzdHJpdG9zLiBNb3N0cmUgY29tbyDDqSBkZWZpbmlkYSBhIHJlZ3JhIGRlIGRlY2lzw6NvIHNvYnJlIGEgcmVqZWnDp8OjbyBvdSBuw6NvIGRhDQpoaXDDs3Rlc2UgZSBleHBsaXF1ZSBvIHF1ZSDDqSBvIHAtdmFsb3IuIFZhbW9zIGFnb3JhIGluY2x1aXIgYWx0ZXJhciBhIGVzcGVjaWZpY2HDp8OjbzogcmV0dXJuPc6yXzArIM6yXzEgZGtyKyDOsl8yIGVwcyvOsl8zDQpsb2figaEobmV0aW5jKSvOsl80IHNhbGFyeSt1IENvbW8gZXNzZSBtb2RpZmljYcOnw6NvIGFsdGVyYcOnw6NvIGEgaW50ZXJwcmV0YcOnw6NvIGRvIM6yXzMuDQoNCmBgYHtyfQ0KIyBFc3RpbWFyIG8gbW9kZWxvDQptb2QgPC0gbG0ocmV0dXJuIH4gZGtyICsgZXBzICsgbmV0aW5jICsgc2FsYXJ5LCBkYXRhID0gcmV0dXJuKQ0KDQojIEludGVycHJldGFyIG9zIGNvZWZpY2llbnRlcyBkYSByZWdyZXNzw6NvDQpzdW1tYXJ5KG1vZCkNCg0KYGBgDQoNCk9zIGNvZWZpY2llbnRlcyBkYSByZWdyZXNzw6NvIGluZGljYW0gY29tbyBvIHJldG9ybm8gZXN0w6EgcmVsYWNpb25hZG8gY29tIGFzIHZhcmnDoXZlaXMgaW5kZXBlbmRlbnRlcy4gTyBpbnRlcmNlcHRvDQpyZXByZXNlbnRhIG8gcmV0b3JubyBlc3BlcmFkbyBxdWFuZG8gdG9kYXMgYXMgb3V0cmFzIHZhcmnDoXZlaXMgc8OjbyB6ZXJvLiBObyBlbnRhbnRvLCBzZXUgdmFsb3IgcG9kZSBuw6NvIHRlciB1bWENCmludGVycHJldGHDp8OjbyBwcsOhdGljYSBkaXJldGEgbmVzdGUgY29udGV4dG8uDQoNClBhcmEgYXMgdmFyacOhdmVpcyBpbmRlcGVuZGVudGVzIChka3IsIGVwcywgbmV0aW5jIGUgc2FsYXJ5KSwgc2V1cyBjb2VmaWNpZW50ZXMgcmVwcmVzZW50YW0gYSBtdWRhbsOnYSBlc3BlcmFkYSBubyByZXRvcm5vDQpwYXJhIHVtYSB1bmlkYWRlIGRlIG11ZGFuw6dhIGVtIGNhZGEgdmFyacOhdmVsLCBtYW50ZW5kbyB0b2RhcyBhcyBvdXRyYXMgY29uc3RhbnRlcy4gVW0gdmFsb3IgcG9zaXRpdm8gaW5kaWNhIHF1ZSB1bQ0KYXVtZW50byBuYSB2YXJpw6F2ZWwgZXN0w6EgYXNzb2NpYWRvIGEgdW0gYXVtZW50byBubyByZXRvcm5vLCBlbnF1YW50byB1bSB2YWxvciBuZWdhdGl2byBpbmRpY2EgdW1hIHJlbGHDp8OjbyBpbnZlcnNhLg0KDQpObyBlbnRhbnRvLCBhbyBvbGhhciBwYXJhIG9zIHJlc3VsdGFkb3MsIG5vdGFtb3MgcXVlIGFwZW5hcyBvIGludGVyY2VwdG8gw6kgZXN0YXRpc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvLiBJc3NvDQpzaWduaWZpY2EgcXVlLCBhbyBuw612ZWwgZGUgc2lnbmlmaWPDom5jaWEgZGUgNSUsIG7Do28gdGVtb3MgZXZpZMOqbmNpYXMgc3VmaWNpZW50ZXMgcGFyYSBhZmlybWFyIHF1ZSBvcyBjb2VmaWNpZW50ZXMgZGFzDQpvdXRyYXMgdmFyacOhdmVpcyBzw6NvIGRpZmVyZW50ZXMgZGUgemVyby4gSXNzbyBzdWdlcmUgcXVlIGVzc2FzIHZhcmnDoXZlaXMgcG9kZW0gbsOjbyBzZXIgYm9hcyBwcmVkaXRvcmFzIGRvIHJldG9ybm8gbmVzdGUNCm1vZGVsby4NCg0KYGBge3J9DQoNCiMgUmVhbGl6YXIgbyB0ZXN0ZSBGIHBhcmEgdmVyaWZpY2FyIGEgc2lnbmlmaWPDom5jaWEgY29uanVudGEgZG9zIGNvZWZpY2llbnRlcw0KYW5vdmFfcmVzdHJpdG8gPC0gbG0ocmV0dXJuIH4gMSwgZGF0YSA9IHJldHVybikgIyBNb2RlbG8gcmVzdHJpdG8gc2VtIHZhcmnDoXZlaXMgaW5kZXBlbmRlbnRlcw0KYW5vdmFfaXJyZXN0cml0byA8LSBhbm92YShhbm92YV9yZXN0cml0byxtb2QpICMgTW9kZWxvIGlycmVzdHJpdG8gY29tIHZhcmnDoXZlaXMgaW5kZXBlbmRlbnRlcw0KYW5vdmFfaXJyZXN0cml0bw0KIyBFeHRyYWlyIG8gdmFsb3ItcCBhc3NvY2lhZG8gYW8gdGVzdGUgRg0KcF92YWx1ZSA8LSBhbm92YV9pcnJlc3RyaXRvJGBQcig+RilgWzFdDQoNCiMgQ29tcGFyYXIgb3MgbW9kZWxvcyByZXN0cml0byBlIGlycmVzdHJpdG8NCmNhdCgiVmFsb3ItcCBhc3NvY2lhZG8gYW8gdGVzdGUgRjoiLCBwX3ZhbHVlLCAiXG4iKQ0KDQoNCmBgYA0KDQpOw6NvIHJlamVpdGFtb3MgYSBoaXDDs3Rlc2UgbnVsYS4gTsOjbyBow6EgZXZpZMOqbmNpYXMgc3VmaWNpZW50ZXMgcGFyYSBjb25jbHVpciBxdWUgcGVsbyBtZW5vcyB1bSBkb3MgY29lZmljaWVudGVzIMOpDQpkaWZlcmVudGUgZGUgemVyby4NCg0KYGBge3J9DQojIE1vZGlmaWNhciBhIGVzcGVjaWZpY2HDp8OjbyBkbyBtb2RlbG8NCm1vZF9tb2RpZmljYWRvIDwtIGxtKHJldHVybiB+IGRrciArIGVwcyArIGxvZyhuZXRpbmMpICsgc2FsYXJ5LCBkYXRhID0gcmV0dXJuKQ0KDQojIEludGVycHJldGFyIG8gY29lZmljaWVudGUgYmV0YV8zIG5hIG5vdmEgZXNwZWNpZmljYcOnw6NvDQpzdW1tYXJ5KG1vZF9tb2RpZmljYWRvKQ0KDQpgYGANCg0KLiBBZ29yYSwgbyBjb2VmaWNpZW50ZSDOsjPigIsgaW5kaWNhIG8gZWZlaXRvIGVzcGVyYWRvIG5vIHJldG9ybm8gcGFyYSB1bWEgbXVkYW7Dp2EgdW5pdMOhcmlhIG5vIGxvZ2FyaXRtbyBuYXR1cmFsIGRhIHJlY2VpdGENCmzDrXF1aWRhIChuZXRpbmMpLCBtYW50ZW5kbyB0b2RhcyBhcyBvdXRyYXMgdmFyacOhdmVpcyBjb25zdGFudGVzLiBTZW5kbyBuZWdhdGl2byBzdWdlcmlyaWEgcXVlIHVtIGF1bWVudG8gbmEgcmVjZWl0YQ0KbMOtcXVpZGEgZXN0w6EgYXNzb2NpYWRvIGEgdW1hIHJlZHXDp8OjbyBubyByZXRvcm5vLCBwb3LDqW0gbyByZXN1bHRhZG8gbsOjbyBwYXJlY2UgZXN0YXRpc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvLg0KDQojIyA3KSBWYW1vcyBhZ29yYSB1dGlsaXphciBhIGJhc2UgZXhjZWwgYW5leGEsIGRvIGFycXVpdm8gZGFkb3Nfc2ltdWxhZG9zOg0KDQpTw6NvIGRvaXMgbW9kZWxvczogTW9kZWxvIDE6IHlfMT3Osl8wICsgzrJfMSB4XzErzrJfMiB4XzIrIHUNCg0Kb25kZSDOsl8wPTI7IM6yXzE9MCw1OyDOsl8yPTAsMywgeF8yPTJcKnhfMSt2IGNvbSB2IFx+TigwLDkpDQoNCk1vZGVsbzI6IHlcXygxXF8pPc6yXzArIM6yXzEgeF8xKyDjgJbOssK044CXXF8yIHhfMyt1IG9uZGUgzrJfMD0yOyDOsl8xPTAsNTsgzrJfMiA9IDAsMyB4XzEgZSB4XzMgc8OjbyBpbmRlcGRlbnRlcw0KDQpgYGB7cn0NCiNkYWRvc19zaW11bGFkb3MgJT4lIGhlYWQNCm1vZDE8LSBsbSh5MX54MSt4MixkYXRhID1kYWRvc19zaW11bGFkb3MpDQpjb2xuYW1lcyhkYWRvc19zaW11bGFkb3MpPC1jKCAieDEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIngyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4MyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieTEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInkyIikNCm1vZDI8LSBsbSh5Mn54MSt4MyxkYXRhID1kYWRvc19zaW11bGFkb3MpDQoNCmBgYA0KDQojIyMgYSkgRXN0aW1lIG9zIG1vZGVsb3MgMSBlIDIsIHZlcmlmaXF1ZSBhIHNpZ25pZmljw6JuY2lhIGRvcyBtb2RlbG9zIGUgY2FsY3VsZSBvIGludGVydmFsbyBkZSBjb25maWFuw6dhIGRvcyBjb2VmaWNpZW50ZXMuIE9zIHZhbG9yZXMgdmVyZGFkZWlyb3MgZXN0w6NvIGRlbnRybyBkbyBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYT8gUXVhbCBvIG1vZGVsbyBxdWUgYXByZXNlbnRhIHVtYSBlc3RpbWF0aXZhIG1haXMgcHJlY2lzYT8gUG9yIHF1ZSBpc3NvIGFjb250ZWNlPw0KDQpgYGB7cn0NCm1vZDEgJT4lIHN1bW1hcnkoKQ0KbW9kMiAlPiUgc3VtbWFyeSgpDQoNCmBgYA0KDQpgYGB7cn0NCg0KbW9kMSAlPiUgY29uZmludCgpDQptb2QyICU+JSBjb25maW50KCkNCg0KYGBgDQoNCk9zIGNvZWZpY2llbnRlcyB0ZW0gc2V1IHBhcmFtZW50cm8gdmVyZGFkZWlybyBkZW50cm8gZG8gaW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EsIHBvcsOpbSBvIFgxIGRvIG1vZGVsbyAxIGVzdMOhIGJlbSBtZW5vcw0KcHJlY2lzby5Jc3NvIGFjb250ZWNlIHBvcnF1ZSBvIG1vZGVsbyAyIGluY2x1aSB1bWEgdmFyacOhdmVsIHgzIHF1ZSDDqSB1bWEgZnVuw6fDo28gbGluZWFyIGRlIHgxLCBvIHF1ZSBmYXogY29tIHF1ZSBoYWphDQptdWx0aWNvbGluZWFyaWRhZGUgZW50cmUgZWxlcy4gSXNzbyBwb2RlIGxldmFyIGEgZXN0aW1hdGl2YXMgZW52aWVzYWRhcyBlIG1lbm9zIHByZWNpc2FzIHBhcmEgb3MgY29lZmljaWVudGVzIGRvIG1vZGVsby4NCk8gYXVtZW50byBkYSBjb2xpbmVhcmlkYWRlIHBvZGUgaW5mbGFyIG9zIGNvZWZpY2llbnRlcyBlIHN1YXMgZXN0aW1hdGl2YXMgcGFkcsOjbywgdG9ybmFuZG8tb3MgbWVub3MgcHJlY2lzb3MuIFBvcnRhbnRvLA0KbWVzbW8gcXVlIG8gYWp1c3RlIGRvIG1vZGVsbyAoUi1zcXVhcmVkKSBwZXJtYW5lw6dhIGluYWx0ZXJhZG8sIGEgaW50ZXJwcmV0YcOnw6NvIGRvcyBjb2VmaWNpZW50ZXMgcG9kZSBzZXIgYWZldGFkYSBwZWxhDQptdWx0aWNvbGluZWFyaWRhZGUuDQoNCiMjIyBiKSBWYW1vcyBhZ29yYSBlc3RpbWFyIG9zIGRvaXMgbW9kZWxvcyBzb21lbnRlIHRlbmRvIGNvbSB2YXJpw6F2ZWwgaW5kZXBlbmRlbnRlIGFwZW5hcyB4MS4gQ29tcGFyZSBvcyByZXN1bHRhZG9zIG9idGlkb3MgY29tIG8gbW9kZWxvIGFudGVyaW9yIGUgZW50cmUgb3MgZG9pcyBub3ZvcyBtb2RlbG9zLiBIw6EgYWxndW0gdmnDqXMgZSBlbSBjYXNvIHBvc2l0aXZvIGNvbW8gZXhwbGljYXIgZXNzZSB2acOpcz8NCg0KYGBge3J9DQojIE1vZGVsbyAxIGFwZW5hcyBjb20geDEgY29tbyB2YXJpw6F2ZWwgaW5kZXBlbmRlbnRlDQptb2QxX3gxIDwtIGxtKHkxIH4geDEsIGRhdGEgPSBkYWRvc19zaW11bGFkb3MpDQoNCiMgTW9kZWxvIDIgYXBlbmFzIGNvbSB4MSBjb21vIHZhcmnDoXZlbCBpbmRlcGVuZGVudGUNCm1vZDJfeDEgPC0gbG0oeTIgfiB4MSwgZGF0YSA9IGRhZG9zX3NpbXVsYWRvcykNCg0KIyBDb21wYXJhciBvcyByZXN1bHRhZG9zIGNvbSBvcyBtb2RlbG9zIGFudGVyaW9yZXMNCnN1bW1hcnkobW9kMV94MSkNCnN1bW1hcnkobW9kMl94MSkNCg0KY29uZmludChtb2QxX3gxKQ0KY29uZmludChtb2QyX3gxKQ0KDQpgYGANCg0KIyMjIGMpIFZhbW9zIGFnb3JhIGZhemVyIG8gc2VndWludGUgZXhlcmPDrWNpbywgZXN0aW1hciB1bWEgcmVncmVzc8OjbyBkZSB4XzIgZSB4XzEgKHNlbSBjb25zdGFudGUpLiBFc3RpbWUgb3MgcmVzw61kdW9zDQoNCmRlc3NhIHJlZ3Jlc3PDo28sIHZhbW9zIGRlbm9taW5hLWxvIHZfaGF0IChuYSBhYmEgZGUgZXN0aW1hw6fDo28sIHbDoSBlbSBwcm9jL21ha2UgcmVzaWR1YWwgc2VyaWUsIGVzc2UgY29tYW5kbyBpcsOhIGdlcmFyDQp1bWEgc8OpcmllIGRlIHJlc8OtZHVvcyBlc3RpbWFkb3MgbmEgYmFzZSkuIEZhw6dhIGFnb3JhIHVtYSBlc3RpbWF0aXZhIGRvIG1vZGVsbyAxIGNvbSBhIHNlZ3VpbnRlIGVzcGVjaWZpY2HDp8OjbzogeV8xPc6yXzArDQrOsl8xIHhfMSsgzrJfMiB2X2hhdCsgdSBRdWFsIG8gdmFsb3IgZG8gY29lZmljaWVudGUgzrJfMj8gUXVhbCBvIHZhbG9yIGRvIGVycm8tcGFkcsOjbz8gQ29tcGFyZSBjb20gbyBtb2RlbG8gY2FsY3VsYWRvIG5vDQppdGVtIGEuDQoNCmBgYHtyfQ0KcmVncmVzc2FvX3gyX3gxIDwtIGxtKHgyIH4geDEgLSAxLCBkYXRhID0gZGFkb3Nfc2ltdWxhZG9zKQ0Kdl9oYXQgPC0gcmVzaWQocmVncmVzc2FvX3gyX3gxKQ0KZGFkb3Nfc2ltdWxhZG9zJHZfaGF0IDwtIHZfaGF0DQoNCg0KbW9kMV92X2hhdCA8LSBsbSh5MSB+IHgxICsgdl9oYXQsIGRhdGEgPSBkYWRvc19zaW11bGFkb3MpDQpzdW1tYXJ5KHJlZ3Jlc3Nhb194Ml94MSkNCg0Kc3VtbWFyeShtb2QxX3ZfaGF0KQ0KDQpgYGANCg0KzrJfMiDDqSBpZ3VhbCBhIDAuMjkzNDkgZSBvIGVycm8gcGFkcsOjbyDDqSAwLjA1MDk0LiBPIHZhbG9yIGRvIGNvZWZpY2llbnRlIM6yMiBlIGRvIGVycm8gcGFkcsOjbyDDqSBvIG1lc21vIGVtIGFtYm9zIG9zDQptb2RlbG9zLg0KDQojIyA4KSBWYW1vcyBhZ29yYSBmYXplciB1bSBleGVyY8OtY2lvIGRlIHJlcGxpY2FyIGFsZ3VucyBtb2RlbG9zIGRlIHJlZ3Jlc3PDo28gYXByZXNlbnRhZG9zIGVtIGF1bGE6IENvbSBhIGJhc2UgYndndC53ZjEsIGEgdmFyacOhdmVsIGFwcmVzZW50YSBvIHBlc28gZG9zIGJlYsOqcywgZSBzw6lyaWUgZGUgdmFyacOhdmVpcyBkZSB2YXJpw6F2ZWlzIHBhcmEgdGVudGFyIGV4cGxpY2FyIGEgdmFyaWHDp8OjbyBkbyBwZXNvIGRvcyByZWPDqW0tbmFzY2lkb3MuIFZhbW9zIHVzYXIgZHVhcyB2YXJpw6F2ZWlzIGEgcmVuZGEgZmFtaWxpYXIgZSBhIHF1YW50aWRhZGUgZGUgY2lnYXJyb3MgcXVlIGEgbXVsaGVyIGZ1bW91IGR1cmFudGUgYSBncmF2aWRlejogRXN0aW1lIG8gc2VndWludGUgbW9kZWxvOg0KDQpid2dodD3Osl8wKyDOsl8xIGNpZ3MrIM6yXzIgZmFtaW5jKyB1DQoNCmBgYHtyfQ0KbW9kIDwtIGxtKGJ3Z2h0IH4gY2lncyArIGZhbWluYywgZGF0YSA9IGJ3Z2h0KQ0Kc3VtbWFyeShtb2QpDQpgYGANCg0KIyMjIGEpUXVhbCBhIGludGVycHJldGHDp8OjbyBkb3MgY29lZmljaWVudGVzPyBDYWxjdWxlIG8gaW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EgYSA5OSUgZG9zIGNvZWZpY2llbnRlcy4NCg0KTm8gbW9kZWxvIGRlIHJlZ3Jlc3PDo28gZXN0aW1hZG8sIG8gY29lZmljaWVudGUgcGFyYSBhIHZhcmnDoXZlbCBjaWdhcnJvcyBvaSBlc3RpbWFkbyBlbSAtMC40NjM0MSwgc3VnZXJpbmRvIHF1ZSB1bQ0KYXVtZW50byBkZSB1bWEgdW5pZGFkZSBuYSBxdWFudGlkYWRlIGRlIGNpZ2Fycm9zIGZ1bWFkb3MgZHVyYW50ZSBhIGdyYXZpZGV6IGVzdMOhIGFzc29jaWFkbyBhIHVtYSByZWR1w6fDo28gbcOpZGlhIGRlDQowLjQ2MzQxIHVuaWRhZGVzIG5vIHBlc28gZG8gYmViw6ogYW8gbmFzY2VyLCBtYW50ZW5kbyB0b2RhcyBhcyBvdXRyYXMgdmFyacOhdmVpcyBjb25zdGFudGVzLiBBbMOpbSBkaXNzbywgbyBjb2VmaWNpZW50ZQ0KZXN0aW1hZG8gcGFyYSBhIHZhcmnDoXZlbCByZW5kYSBkZSAwLjA5Mjc2LCBpbmRpY2FuZG8gcXVlIHVtIGF1bWVudG8gZGUgdW1hIHVuaWRhZGUgbmEgcmVuZGEgZmFtaWxpYXIgZXN0w6EgYXNzb2NpYWRvIGEgdW0NCmF1bWVudG8gbcOpZGlvIGRlIDAuMDkyNzYgdW5pZGFkZXMgbm8gcGVzbyBkbyBiZWLDqiBhbyBuYXNjZXIsIG1hbnRlbmRvIHRvZGFzIGFzIG91dHJhcyB2YXJpw6F2ZWlzIGNvbnN0YW50ZXMuDQoNCmBgYHtyfQ0KIyBJbnRlcnZhbG8gZGUgY29uZmlhbsOnYSBhIDk5JSBwYXJhIG8gY29lZmljaWVudGUgZGUgY2lncw0KY29uZmludChtb2QsIGxldmVsID0gMC45OSlbImNpZ3MiLCBdDQoNCiMgSW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EgYSA5OSUgcGFyYSBvIGNvZWZpY2llbnRlIGRlIGZhbWluYw0KY29uZmludChtb2QsIGxldmVsID0gMC45OSlbImZhbWluYyIsIF0NCg0KYGBgDQoNCiMjIyBiKUNhbGN1bGUgYWdvcmEgdW1hIG5vdmEgdmFyacOhdmVsIHBhcmEgbyBwZXNvIGRvcyBiZWJlcywgY29uc2lkZXJhbmRvIHF1ZSB1bWEgMSBsaWJyYSAobGJzKSDDqSBpZ3VhbCBhIDQ1Myw2IGcuIEFzc2ltLG11bHRpcGxpcXVlIGEgdmFyacOhdmVsIGJ3Z2h0bGJzIHBvciA0NTMsNiwgY3JpYW5kbyB1bWEgbm92YSB2YXJpw6F2ZWwgYndnaHRrZy4gKHBhcmEgY3JpYXIgYSBub3ZhIHZhcmnDoXZlbCBuYSBhYmEgZGUgZXN0aW1hdGl2YSBlIG5hIG9ww6fDo28gZ2VuciBjb25zdHJ1YSBhIHZhcmnDoXZlbCBid2dodGtnPTQ1Myw2XCpid2dodGxicykuIEZhw6dhIGVzdGF0w61zdGljYXMgZGVzY3JpdGl2YXMgZGVzc2Egbm92YSB2YXJpw6F2ZWwuIFF1YWwgYSBtw6lkaWE/IEjDoSBvdWxpZXJzPyBSZWVzdGltZSBvIG1vZGVsbyBhY2ltYSBlIGludGVycHJldGUgb3MgcmVzdWx0YWRvcy4gUXVhaXMgYWx0ZXJhw6fDtWVzIGVtIHJlbGHDp8OjbyBhbyBtb2RlbG8gYW50ZXJpb3I/DQoNCmBgYHtyfQ0KYndnaHQkYndnaHRrZyA8LSA0NTMuNiAqIGJ3Z2h0JGJ3Z2h0bGJzDQpzdW1tYXJ5KGJ3Z2h0JGJ3Z2h0a2cpDQoNCg0KYGBgDQoNCmBgYHtyfQ0KYm94cGxvdChid2dodCRid2dodGtnKQ0KDQpgYGANCg0KYGBge3J9DQptb2RlbF9id3QgPC0gbG0oYndnaHRrZyB+IGNpZ3MgKyBmYW1pbmMsIGRhdGEgPSBid2dodCkNCg0Kc3VtbWFyeShtb2RlbF9id3QpDQoNCmBgYA0KDQpObyBtb2RlbG8gYW50ZXJpb3IsIG9uZGUgbyBwZXNvIGRvcyBiZWLDqnMgZXN0YXZhIGVtIGxpYnJhcywgb3MgY29lZmljaWVudGVzIGZvcmFtIGVzdGltYWRvcyBlbSB0ZXJtb3MgZGUgbGlicmFzLiBObyBub3ZvDQptb2RlbG8sIG9uZGUgbyBwZXNvIGRvcyBiZWLDqnMgZXN0w6EgZW0gcXVpbG9ncmFtYXMsIG9zIGNvZWZpY2llbnRlcyBmb3JhbSBlc3RpbWFkb3MgZW0gdGVybW9zIGRlIHF1aWxvZ3JhbWFzLiBuw6NvIGhhdmVuZG8NCm91dHJhIGFsdGVyYcOnw6NvIG5vIHJlc3VsdGFkbw0KDQojIyMgYylBaW5kYSB1dGlsaXphbmRvIGEgdmFyacOhdmVsIGJ3Z2h0a2csIHZhbW9zIGFnb3JhIGFsdGVyYXIgYSBmb3JtYSBkZSBtZWRpciBhIHF1YW50aWRhZGUgZGUgY2lnYXJyb3MgY29uc3VtaWRvcyBkdXJhbnRlYSBncmF2aWRleiwgYWx0ZXJhbmRvIHBhcmEgYSBxdWFudGlkYWRlIGRlIG1hw6dvcyAodmFyacOhdmVsIHBhY2tzKSBubyBsdWdhciBkZSB1bmlkYWRlcyBkZSBjaWdhcnJvcy4gVGlyZSBlc3RhdMOtc3RpY2FzIGRlc2NyaXRpdmFzIGRlIGNpZ3MgZSBwYWNrcywgZmHDp2EgdW0gaGlzdG9ncmFtYSBlIGFuYWxpc2Ugb3MgcmVzdWx0YWRvcy4gQWdvcmEgcmVlc3RpbWUgbyBtb2RlbG8gYW50ZXJpb3Igc3Vic3RpdHVpbmRvIGNpZ3MgcG9yIHBhY2tzLiBDb21vIG9zIHJlc3VsdGFkb3MgZm9yYW0gYWx0ZXJhZG9zPw0KDQpgYGB7cn0NCm1vZCA8LSBsbShid2dodCB+IHBhY2tzICsgZmFtaW5jLCBkYXRhID0gYndnaHQpDQpzdW1tYXJ5KG1vZCkNCmBgYA0KDQpgYGB7cn0NCjkuMjY4MS8wLjQ2MzQxDQpgYGANCg0KY29uc2lkZXJhbmRvIHF1ZSB1bSBwYWNrIHRlbSAyMCBjaWdhcnJvcyBob3V2ZSwgYXByb3hpbWFkYW1lbnRlIGFwZW5hcyB1bWEgbXVkYW7Dp2EgZGUgZXNjYWxhLg0K