Licença

This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

License: CC BY-SA 4.0

Citação

Sugestão de citação: FIGUEIREDO, Adriano Marcos Rodrigues. Econometria: dummy e tendência: exercício Efeitos da Isenção de Impostos nas Taxas de Fertilidade. Campo Grande-MS,Brasil: RStudio/Rpubs, 2020. Disponível em http://www.rpubs.com/amrofi/ex_wooldridge_10_8_dummy_trend.

1 Introdução - Primeiros passos

Os primeiros passos são criar ou abrir um diretório de trabalho. Se optar por criar um novo projeto, haverá a possibilidade de criar em uma pasta vazia. Os dados básicos estão no pacote wooldridge, dataset fertil3.

Example 10.4 Effects of Personal exemption on fertility rates. The general fertility rate (gfr) is the number of children born to every 1,000 women of childbearing age. For the years 1913 through 1984, the equation, \[ gfr_t= \beta _0 + \beta _1 pe_t +\beta _2 ww2_t + \beta _3 pill_t + \mu _t ,\] explains gfr in terms of the average real dollar value of the personal tax exemption (pe) and two binary variables. The variable ww2 takes on the value unity during the years 1941 through 1945, when the United States was involved in World War II. The variable pill is unity from 1963 onward, when the birth control pill was made available for contraception. Using the data in FERTIL3, which were taken from the article by Whittington, Alm, and Peters (1990).

Enunciado do exemplo 10.4 da edição brasileira. Fonte: Wooldridge (2006, p.321)

Enunciado do exemplo 10.4 da edição brasileira. Fonte: Wooldridge (2006, p.321)

data(fertil3, package='wooldridge')

# exemplo 10.8 do livro do Wooldridge, Introdução a Econometria
# dados basicos de: 
# Wooldridge Source: L.A. Whittington, J. Alm, and H.E. Peters (1990), 
# “Fertility and the Personal Exemption: Implicit Pronatalist Policy in
# the United States,” American Economic Review 80, 545-556.

# data.frame with 72 observations on 24 variables:
  
# gfr: births per 1000 women 15-44 
#      [tgf = taxa geral de fertilidade]
# pe: real value pers. exemption, $ 
#      [ip = valor real da taxa de isenção de impostos]
# year: 1913 to 1984   [ano]
# t: time trend, t=1,...,72   [tendencia]
# tsq: t^2    [tendencia ao quadrado]
# pill: =1 if year >= 1963    
#      [pilula anticoncepcional]
# ww2: =1, 1941 to 1945  [world war dummy]
# tcu: t^3    [tendencia cubica]
# cgfr: change in gfr: gfr - gfr_1    
#      [mudanca na tx de fertilidade]
library(dynlm);library(stargazer)
data(fertil3, package='wooldridge') # chamo os dados de dentro do pacote "wooldridge"


# exemplo 10.8 do livro do Wooldridge, Introdução a Econometria
# dados basicos de: 
# Wooldridge Source: L.A. Whittington, J. Alm, and H.E. Peters (1990), 
# “Fertility and the Personal Exemption: Implicit Pronatalist Policy in
# the United States,” American Economic Review 80, 545-556.

# data.frame with 72 observations on 24 variables:
  
# gfr: births per 1000 women 15-44 [tgf]
# pe: real value pers. exemption, $ [ip]
# year: 1913 to 1984   [ano]
# t: time trend, t=1,...,72   [tendencia]
# tsq: t^2    [tendencia ao quadrado]
# pill: =1 if year >= 1963    [pilula anticoncepcional]
# ww2: =1, 1941 to 1945  [world war dummy]
# tcu: t^3    [tendencia cubica]
# cgfr: change in gfr: gfr - gfr_1    [mudanca na tx de fertilidade]

#View(fertil3)

#library(esquisse)
#esquisser(fertil3)

library(ggplot2)

ggplot(fertil3) +
 aes(x = pe, y = gfr, colour = pill) +
 geom_point(size = 3L) +
 scale_color_distiller(palette = "RdBu") +
 ggthemes::theme_foundation()

ggplot(fertil3) +
 aes(x = pe, y = gfr, colour = ww2) +
 geom_point(size = 3L) +
 scale_color_distiller(palette = "RdBu") +
 ggthemes::theme_foundation()

attach(fertil3)

O gráfico da variável dependente gfr (tgr - taxa geral de fertilidade) é:

require(fpp2)
autoplot(as.ts(gfr))

2 Resultados

2.1 Estimação

Vamos estimar o modelo linear múltipla fazendo a regressão inicial conforme o exemplo 10.4.

# Regressao Linear :
reg1.lm <- lm(gfr ~ pe + ww2 + pill, data = fertil3)
reg1.lm$AIC <- AIC(reg1.lm)  # Akaike
reg1.lm$BIC <- BIC(reg1.lm)  # Schwarz
stargazer::stargazer(reg1.lm, title = "Título: Resultado da Regressão OLS", type = "text", 
    style = "all", align = TRUE, keep.stat = c("AIC", "BIC", "rsq", "adj.rsq", "n"))

Título: Resultado da Regressão OLS
===============================================
                        Dependent variable:    
                    ---------------------------
                                gfr            
-----------------------------------------------
pe                           0.083***          
                              (0.030)          
                             t = 2.784         
                             p = 0.007         
ww2                         -24.238***         
                              (7.458)          
                            t = -3.250         
                             p = 0.002         
pill                        -31.594***         
                              (4.081)          
                            t = -7.742         
                             p = 0.000         
Constant                     98.682***         
                              (3.208)          
                            t = 30.760         
                             p = 0.000         
-----------------------------------------------
Observations                    72             
R2                             0.473           
Adjusted R2                    0.450           
Akaike Inf. Crit.             597.115          
Bayesian Inf. Crit.           608.499          
===============================================
Note:               *p<0.1; **p<0.05; ***p<0.01
library(equatiomatic)
equatiomatic::extract_eq(reg1.lm, use_coefs = TRUE, ital_vars = T, coef_digits = 3)
$$
gfr = 98.682 + 0.083(pe) - 24.238(ww2) - 31.594(pill) + \epsilon
$$
# $$ \operatorname{gfr} = 98.682 + 0.083(\operatorname{pe}) -
# 24.238(\operatorname{ww2}) - 31.594(\operatorname{pill}) + \epsilon $$

Portanto a equação estimada é

\[ gfr = 98.682 + 0.083(pe) - 24.238(ww2) - 31.594(pill) + \epsilon \]

Interpretação do exemplo 10.4 da edição brasileira. Fonte: Wooldridge (2006, p.321)

Interpretação do exemplo 10.4 da edição brasileira. Fonte: Wooldridge (2006, p.321)

Ou seja, para um aumento de 12 dólares em ip, o aumento em tgf será \(12*0.083 \approx +1\), ou 1 para cada 1000 mulheres em idade fértil.

Podemos colocar as equações assim:

sem guerra: \(ww2=0\)

antes da pílula: \(pill = 0\): \[ \begin{array}{l} gfr = 98.682 + 0.083(pe) - 24.238{\rm{ x 0}} - 31.594{\rm{ x 0}}\\ gfr = 98.682 + 0.083(pe) \end{array} \] depois da pílula: \(pill = 1\): \[ \begin{array}{l} gfr = 98.682 + 0.083(pe) - 24.238{\rm{ x 0}} - 31.594{\rm{ x 1}}\\ gfr = \left( {98.682 - 31.594} \right) + 0.083(pe)\\ gfr = \left( {67.088} \right) + 0.083(pe) \end{array} \]

com guerra: \(ww2=1\)

antes da pílula: \(pill = 0\): \[ \begin{array}{l} gfr = 98.682 + 0.083(pe) - 24.238{\rm{ x 1}} - 31.594{\rm{ x 0}}\\ gfr = \left( {98.682 - 24.238} \right) + 0.083(pe)\\ gfr = \left( {74.444 } \right) + 0.083(pe) \end{array} \] depois da pílula: \(pill = 1\): \[ \begin{array}{l} gfr = 98.682 + 0.083(pe) - 24.238{\rm{ x 1}} - 31.594{\rm{ x 1}}\\ gfr = \left( {98.682 -24.238 - 31.594} \right) + 0.083(pe)\\ gfr = \left( {42.850} \right) + 0.083(pe) \end{array} \]

2.2 Regressão com tendência

São realizados dois procedimentos, um com a variável \(year\) e outro com a variável \(t\) construída previamente, de modo que o leitor verá que ambos resultam no mesmo resultado, com exceção da constante que terá nível diferente para a equação com \(year\) por estar em anos (1913, 1914, …) invés de t=(1,2,…).

# Regressao exemplo 10.8 - incluindo tendencia
reg2 <- lm(gfr ~ pe + ww2 + pill + year, data = fertil3)
reg2.a <- lm(gfr ~ pe + ww2 + pill + t, data = fertil3)
reg2$AIC <- AIC(reg2)  # com tendencia 
reg2$BIC <- BIC(reg2)  # com tendencia 
reg2.a$AIC <- AIC(reg2.a)  # com tendencia 
reg2.a$BIC <- BIC(reg2.a)  # com tendencia 
stargazer(reg2, reg2.a, title = "Título: Resultados das Regressões OLS
          com tendência", 
    align = TRUE, type = "text", style = "all", keep.stat = c("AIC", "BIC", "rsq", 
        "adj.rsq", "n"))

Título: Resultados das Regressões OL
================================================
                        Dependent variable:     
                    ----------------------------
                                gfr             
                         (1)            (2)     
------------------------------------------------
pe                     0.279***      0.279***   
                       (0.040)        (0.040)   
                      t = 6.968      t = 6.968  
                      p = 0.000      p = 0.000  
ww2                   -35.592***    -35.592***  
                       (6.297)        (6.297)   
                      t = -5.652    t = -5.652  
                     p = 0.00000    p = 0.00000 
pill                    0.997          0.997    
                       (6.262)        (6.262)   
                      t = 0.159      t = 0.159  
                      p = 0.874      p = 0.874  
year                  -1.150***                 
                       (0.188)                  
                      t = -6.119                
                     p = 0.00000                
t                                    -1.150***  
                                      (0.188)   
                                    t = -6.119  
                                    p = 0.00000 
Constant             2,310.325***   111.769***  
                      (361.420)       (3.358)   
                      t = 6.392     t = 33.287  
                     p = 0.00000     p = 0.000  
------------------------------------------------
Observations              72            72      
R2                      0.662          0.662    
Adjusted R2             0.642          0.642    
Akaike Inf. Crit.      567.148        567.148   
Bayesian Inf. Crit.    580.808        580.808   
================================================
Note:                *p<0.1; **p<0.05; ***p<0.01

2.3 Regressão com a tendência quadrática

reg3 <- lm(gfr ~ pe + ww2 + pill + t + tsq, data = fertil3)
reg3$AIC <- AIC(reg3)  # com tendencia quadratica
reg3$BIC <- BIC(reg3)  # com tendencia quadratica

2.4 Regressão com a tendência Cúbica

reg4 <- lm(gfr ~ pe + ww2 + pill + t + tsq + tcu, data = fertil3)
reg4$AIC <- AIC(reg4)  # com tendencia cubica
reg4$BIC <- BIC(reg4)  # com tendencia cubica

Para a tabela, a função com tendência será a número (1 - reg2.a), a quadrática a (2 - reg3) e a cúbica a (3 - reg4).

# library(stargazer)
star.1 <- stargazer(reg2.a, reg3, reg4, title = "Título: Resultados das Regressões", 
    align = TRUE, type = "text", column.labels = c("linear", "quadrática", "cúbica"), 
    keep.stat = c("aic", "bic", "rsq", "adj.rsq", "n"))

Título: Resultados das Regressões
====================================================
                          Dependent variable:       
                    --------------------------------
                                  gfr               
                      linear   quadrática   cúbica  
                       (1)        (2)        (3)    
----------------------------------------------------
pe                   0.279***   0.348***   0.162*** 
                     (0.040)    (0.040)    (0.041)  
                                                    
ww2                 -35.592*** -35.880*** -19.047***
                     (6.297)    (5.708)    (5.042)  
                                                    
pill                  0.997     -10.120   -25.010***
                     (6.262)    (6.336)    (5.346)  
                                                    
t                   -1.150***  -2.531***  -5.612*** 
                     (0.188)    (0.389)    (0.543)  
                                                    
tsq                             0.020***   0.155*** 
                                (0.005)    (0.020)  
                                                    
tcu                                       -0.001*** 
                                           (0.0002) 
                                                    
Constant            111.769*** 124.092*** 142.795***
                     (3.358)    (4.361)    (4.338)  
                                                    
----------------------------------------------------
Observations            72         72         72    
R2                    0.662      0.727      0.840   
Adjusted R2           0.642      0.706      0.826   
Akaike Inf. Crit.    567.148    553.901    517.138  
Bayesian Inf. Crit.  580.808    569.838    535.351  
====================================================
Note:                    *p<0.1; **p<0.05; ***p<0.01

É possível observar que a expressão cúbica, (3), foi a de maiores valores de \(R^2\), \(R^2\) ajustado, e menores valores de Akaike (AIC) e Schwarz (Bayesian - BIC). Desta forma, a princípio, esta é a melhor expressão.

3 Referências

HEISS, Florian. Using R for Introductory Econometrics. 2.ed. Florian Heiss, 2020. Recurso online. Disponível em: http://www.urfie.net/.

WOOLDRIDGE, J.M. Introdução à Econometria: uma abordagem moderna. São Paulo: Pioneira Thomson Learning, 2006.(tradução da segunda edição americana).

LS0tDQp0aXRsZTogIkVjb25vbWV0cmlhOiBkdW1teSBlIHRlbmTDqm5jaWE6IGV4ZXJjw61jaW8gRWZlaXRvcyBkYSBJc2Vuw6fDo28gZGUgSW1wb3N0b3MgbmFzIFRheGFzIGRlIEZlcnRpbGlkYWRlIg0KYXV0aG9yOiAiQWRyaWFubyBNYXJjb3MgUm9kcmlndWVzIEZpZ3VlaXJlZG8iDQplLW1haWw6ICJhZHJpYW5vLmZpZ3VlaXJlZG9AdWZtcy5iciINCmFic3RyYWN0OiANCiAgV2UgYW5hbHlzZSBzcGVjaWZpY2F0aW9ucyBvZiBkdW1teSBhbmQgdHJlbmQgdmFyaWFibGVzIHRvIHRoZSBXb29sZHJpZGdlJ3MgZXhhbXBsZXMgMTAuNCBhbmQgMTAuOC4gVGhpcyBpcyBhbiBleGVyY2lzZSB1c2luZyBhIGxpbmVhciBtdWx0aXBsZSByZWdyZXNzaW9uLiANCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVkICVCICVZJylgIg0KYmlibGlvZ3JhcGh5OiBteWJpYmZpbGUuYmliDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRoZW1lOiBkZWZhdWx0DQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGZpZ19jYXB0aW9uOiB0cnVlDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KLS0tDQpgYGB7ciBrbml0cl9pbml0LCBlY2hvPUZBTFNFLCBjYWNoZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtYXJrZG93bikNCmxpYnJhcnkocm1kZm9ybWF0cykNCg0KIyMgR2xvYmFsIG9wdGlvbnMNCm9wdGlvbnMobWF4LnByaW50PSIxMDAiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1UUlVFLA0KCSAgICAgICAgICAgICBjYWNoZT1UUlVFLA0KICAgICAgICAgICAgICAgcHJvbXB0PUZBTFNFLA0KICAgICAgICAgICAgICAgdGlkeT1UUlVFLA0KICAgICAgICAgICAgICAgY29tbWVudD1OQSwNCiAgICAgICAgICAgICAgIG1lc3NhZ2U9RkFMU0UsDQogICAgICAgICAgICAgICB3YXJuaW5nPUZBTFNFKQ0Kb3B0c19rbml0JHNldCh3aWR0aD0xMDApDQpgYGANCg0KDQpMaWNlbsOnYSB7LSNMaWNlbsOnYX0NCj09PT09PT09PT09PT09PT09PT0NCg0KVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgNC4wIEludGVybmF0aW9uYWwgTGljZW5zZS4gVG8gdmlldyBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlLCB2aXNpdCA8aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLz4gb3Igc2VuZCBhIGxldHRlciB0byBDcmVhdGl2ZSBDb21tb25zLCBQTyBCb3ggMTg2NiwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDIsIFVTQS4NCg0KIVtMaWNlbnNlOiBDQyBCWS1TQSA0LjBdKGh0dHBzOi8vbWlycm9ycy5jcmVhdGl2ZWNvbW1vbnMub3JnL3ByZXNza2l0L2J1dHRvbnMvODh4MzEvcG5nL2J5LXNhLnBuZyl7IHdpZHRoPTI1JSB9DQoNCkNpdGHDp8OjbyB7LSNDaXRhw6fDo299DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpTdWdlc3TDo28gZGUgY2l0YcOnw6NvOg0KRklHVUVJUkVETywgQWRyaWFubyBNYXJjb3MgUm9kcmlndWVzLiBFY29ub21ldHJpYTogZHVtbXkgZSB0ZW5kw6puY2lhOiBleGVyY8OtY2lvIEVmZWl0b3MgZGEgSXNlbsOnw6NvIGRlIEltcG9zdG9zIG5hcyBUYXhhcyBkZSBGZXJ0aWxpZGFkZS4gQ2FtcG8gR3JhbmRlLU1TLEJyYXNpbDogUlN0dWRpby9ScHVicywgMjAyMC4gRGlzcG9uw612ZWwgZW0gPGh0dHA6Ly93d3cucnB1YnMuY29tL2Ftcm9maS9leF93b29sZHJpZGdlXzEwXzhfZHVtbXlfdHJlbmQ+LiANCg0KDQpJbnRyb2R1w6fDo28gLSBQcmltZWlyb3MgcGFzc29zDQo9PT09PT09PT09PT09PT09PT09DQoNCg0KT3MgcHJpbWVpcm9zIHBhc3NvcyBzw6NvIGNyaWFyIG91IGFicmlyIHVtIGRpcmV0w7NyaW8gZGUgdHJhYmFsaG8uIFNlIG9wdGFyIHBvciBjcmlhciB1bSBub3ZvIHByb2pldG8sIGhhdmVyw6EgYSBwb3NzaWJpbGlkYWRlIGRlIGNyaWFyIGVtIHVtYSBwYXN0YSB2YXppYS4gT3MgZGFkb3MgYsOhc2ljb3MgZXN0w6NvIG5vIHBhY290ZSBgd29vbGRyaWRnZWAsIGRhdGFzZXQgYGZlcnRpbDNgLg0KDQo+IEV4YW1wbGUgMTAuNCAgRWZmZWN0cyBvZiBQZXJzb25hbCBleGVtcHRpb24gb24gZmVydGlsaXR5IHJhdGVzLiBUaGUgZ2VuZXJhbCBmZXJ0aWxpdHkgcmF0ZSAoZ2ZyKSBpcyB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGJvcm4gdG8gZXZlcnkgMSwwMDAgd29tZW4gb2YgY2hpbGRiZWFyaW5nIGFnZS4gRm9yIHRoZSB5ZWFycyAxOTEzIHRocm91Z2ggMTk4NCwgdGhlIGVxdWF0aW9uLA0KJCQgZ2ZyX3Q9IFxiZXRhIF8wICsgXGJldGEgXzEgcGVfdCArXGJldGEgXzIgd3cyX3QgKyBcYmV0YSBfMyBwaWxsX3QgKyBcbXUgX3QgLCQkDQpleHBsYWlucyBnZnIgaW4gdGVybXMgb2YgdGhlIGF2ZXJhZ2UgcmVhbCBkb2xsYXIgdmFsdWUgb2YgdGhlIHBlcnNvbmFsIHRheCBleGVtcHRpb24gKHBlKSBhbmQgdHdvIGJpbmFyeSB2YXJpYWJsZXMuIFRoZSB2YXJpYWJsZSB3dzIgdGFrZXMgb24gdGhlIHZhbHVlIHVuaXR5IGR1cmluZyB0aGUgeWVhcnMgMTk0MSB0aHJvdWdoIDE5NDUsIHdoZW4gdGhlIFVuaXRlZCBTdGF0ZXMgd2FzIGludm9sdmVkIGluIFdvcmxkIFdhciBJSS4gVGhlIHZhcmlhYmxlIHBpbGwgaXMgdW5pdHkgZnJvbSAxOTYzIG9ud2FyZCwgd2hlbiB0aGUgYmlydGggY29udHJvbCBwaWxsIHdhcyBtYWRlIGF2YWlsYWJsZSBmb3IgY29udHJhY2VwdGlvbi4gVXNpbmcgdGhlIGRhdGEgaW4gRkVSVElMMywgd2hpY2ggd2VyZSB0YWtlbiBmcm9tIHRoZSBhcnRpY2xlIGJ5IFdoaXR0aW5ndG9uLCBBbG0sIGFuZCBQZXRlcnMgKDE5OTApLg0KDQpgYGB7ciBlbnVuY2lhZG8sZWNobz1GQUxTRSxmaWcuYWxpZ24gPSAiY2VudGVyIiwgb3V0LndpZHRoID0gIjkwJSIsZmlnLmNhcD0iRW51bmNpYWRvIGRvIGV4ZW1wbG8gMTAuNCBkYSBlZGnDp8OjbyBicmFzaWxlaXJhLiBGb250ZTogV29vbGRyaWRnZSAoMjAwNiwgcC4zMjEpIn0NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJJbWFnZW0xLnBuZyIpDQpgYGANCg0KYGBge3IgRXN0cnV0dXJhLCBmaWcuYWxpZ24gPSAiY2VudGVyIiwgb3V0LndpZHRoID0gIjkwJSIsIGZpZy5jYXAgPSAnRXN0cnV0dXJhIGRhIGFuw6FsaXNlIGVtcMOtcmljYSAtIG3DqXRvZG8uIEZvbnRlOiBlbGFib3Jhw6fDo28gcHLDs3ByaWEuJyxlY2hvPUZBTFNFfQ0KDQpgYGANCg0KYGBge3IsIGVjaG89RkFMU0V9DQojIGluY2x1ZGUgdGhpcyBjb2RlIGNodW5rIGFzLWlzIHRvIHNldCBvcHRpb25zDQprbml0cjo6b3B0c19jaHVuayRzZXQoY29tbWVudD1OQSwgcHJvbXB0PVRSVUUsIG91dC53aWR0aD03NTAsIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTgpDQpgYGANCg0KYGBge3IsIGV2YWw9VFJVRSwgbWVzc2FnZT1GLCB3YXJuaW5nPUZ9DQpkYXRhKGZlcnRpbDMsIHBhY2thZ2U9J3dvb2xkcmlkZ2UnKQ0KDQojIGV4ZW1wbG8gMTAuOCBkbyBsaXZybyBkbyBXb29sZHJpZGdlLCBJbnRyb2R1w6fDo28gYSBFY29ub21ldHJpYQ0KIyBkYWRvcyBiYXNpY29zIGRlOiANCiMgV29vbGRyaWRnZSBTb3VyY2U6IEwuQS4gV2hpdHRpbmd0b24sIEouIEFsbSwgYW5kIEguRS4gUGV0ZXJzICgxOTkwKSwgDQojIOKAnEZlcnRpbGl0eSBhbmQgdGhlIFBlcnNvbmFsIEV4ZW1wdGlvbjogSW1wbGljaXQgUHJvbmF0YWxpc3QgUG9saWN5IGluDQojIHRoZSBVbml0ZWQgU3RhdGVzLOKAnSBBbWVyaWNhbiBFY29ub21pYyBSZXZpZXcgODAsIDU0NS01NTYuDQoNCiMgZGF0YS5mcmFtZSB3aXRoIDcyIG9ic2VydmF0aW9ucyBvbiAyNCB2YXJpYWJsZXM6DQogIA0KIyBnZnI6IGJpcnRocyBwZXIgMTAwMCB3b21lbiAxNS00NCANCiMgICAgICBbdGdmID0gdGF4YSBnZXJhbCBkZSBmZXJ0aWxpZGFkZV0NCiMgcGU6IHJlYWwgdmFsdWUgcGVycy4gZXhlbXB0aW9uLCAkIA0KIyAgICAgIFtpcCA9IHZhbG9yIHJlYWwgZGEgdGF4YSBkZSBpc2Vuw6fDo28gZGUgaW1wb3N0b3NdDQojIHllYXI6IDE5MTMgdG8gMTk4NCAgIFthbm9dDQojIHQ6IHRpbWUgdHJlbmQsIHQ9MSwuLi4sNzIgICBbdGVuZGVuY2lhXQ0KIyB0c3E6IHReMiAgICBbdGVuZGVuY2lhIGFvIHF1YWRyYWRvXQ0KIyBwaWxsOiA9MSBpZiB5ZWFyID49IDE5NjMgICAgDQojICAgICAgW3BpbHVsYSBhbnRpY29uY2VwY2lvbmFsXQ0KIyB3dzI6ID0xLCAxOTQxIHRvIDE5NDUgIFt3b3JsZCB3YXIgZHVtbXldDQojIHRjdTogdF4zICAgIFt0ZW5kZW5jaWEgY3ViaWNhXQ0KIyBjZ2ZyOiBjaGFuZ2UgaW4gZ2ZyOiBnZnIgLSBnZnJfMSAgICANCiMgICAgICBbbXVkYW5jYSBuYSB0eCBkZSBmZXJ0aWxpZGFkZV0NCg0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShkeW5sbSk7bGlicmFyeShzdGFyZ2F6ZXIpDQpkYXRhKGZlcnRpbDMsIHBhY2thZ2U9J3dvb2xkcmlkZ2UnKSAjIGNoYW1vIG9zIGRhZG9zIGRlIGRlbnRybyBkbyBwYWNvdGUgIndvb2xkcmlkZ2UiDQoNCg0KIyBleGVtcGxvIDEwLjggZG8gbGl2cm8gZG8gV29vbGRyaWRnZSwgSW50cm9kdcOnw6NvIGEgRWNvbm9tZXRyaWENCiMgZGFkb3MgYmFzaWNvcyBkZTogDQojIFdvb2xkcmlkZ2UgU291cmNlOiBMLkEuIFdoaXR0aW5ndG9uLCBKLiBBbG0sIGFuZCBILkUuIFBldGVycyAoMTk5MCksIA0KIyDigJxGZXJ0aWxpdHkgYW5kIHRoZSBQZXJzb25hbCBFeGVtcHRpb246IEltcGxpY2l0IFByb25hdGFsaXN0IFBvbGljeSBpbg0KIyB0aGUgVW5pdGVkIFN0YXRlcyzigJ0gQW1lcmljYW4gRWNvbm9taWMgUmV2aWV3IDgwLCA1NDUtNTU2Lg0KDQojIGRhdGEuZnJhbWUgd2l0aCA3MiBvYnNlcnZhdGlvbnMgb24gMjQgdmFyaWFibGVzOg0KICANCiMgZ2ZyOiBiaXJ0aHMgcGVyIDEwMDAgd29tZW4gMTUtNDQgW3RnZl0NCiMgcGU6IHJlYWwgdmFsdWUgcGVycy4gZXhlbXB0aW9uLCAkIFtpcF0NCiMgeWVhcjogMTkxMyB0byAxOTg0ICAgW2Fub10NCiMgdDogdGltZSB0cmVuZCwgdD0xLC4uLiw3MiAgIFt0ZW5kZW5jaWFdDQojIHRzcTogdF4yICAgIFt0ZW5kZW5jaWEgYW8gcXVhZHJhZG9dDQojIHBpbGw6ID0xIGlmIHllYXIgPj0gMTk2MyAgICBbcGlsdWxhIGFudGljb25jZXBjaW9uYWxdDQojIHd3MjogPTEsIDE5NDEgdG8gMTk0NSAgW3dvcmxkIHdhciBkdW1teV0NCiMgdGN1OiB0XjMgICAgW3RlbmRlbmNpYSBjdWJpY2FdDQojIGNnZnI6IGNoYW5nZSBpbiBnZnI6IGdmciAtIGdmcl8xICAgIFttdWRhbmNhIG5hIHR4IGRlIGZlcnRpbGlkYWRlXQ0KDQojVmlldyhmZXJ0aWwzKQ0KDQojbGlicmFyeShlc3F1aXNzZSkNCiNlc3F1aXNzZXIoZmVydGlsMykNCg0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpnZ3Bsb3QoZmVydGlsMykgKw0KIGFlcyh4ID0gcGUsIHkgPSBnZnIsIGNvbG91ciA9IHBpbGwpICsNCiBnZW9tX3BvaW50KHNpemUgPSAzTCkgKw0KIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkQnUiKSArDQogZ2d0aGVtZXM6OnRoZW1lX2ZvdW5kYXRpb24oKQ0KDQpnZ3Bsb3QoZmVydGlsMykgKw0KIGFlcyh4ID0gcGUsIHkgPSBnZnIsIGNvbG91ciA9IHd3MikgKw0KIGdlb21fcG9pbnQoc2l6ZSA9IDNMKSArDQogc2NhbGVfY29sb3JfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRCdSIpICsNCiBnZ3RoZW1lczo6dGhlbWVfZm91bmRhdGlvbigpDQoNCmF0dGFjaChmZXJ0aWwzKQ0KDQpgYGANCg0KDQoNCk8gZ3LDoWZpY28gZGEgdmFyacOhdmVsIGRlcGVuZGVudGUgZ2ZyICh0Z3IgLSB0YXhhIGdlcmFsIGRlIGZlcnRpbGlkYWRlKSDDqToNCg0KYGBge3IsIG1lc3NhZ2U9Riwgd2FybmluZz1GfQ0KcmVxdWlyZShmcHAyKQ0KYXV0b3Bsb3QoYXMudHMoZ2ZyKSkNCmBgYA0KDQojIFJlc3VsdGFkb3MgDQoNCiMjIEVzdGltYcOnw6NvDQoNClZhbW9zIGVzdGltYXIgbyBtb2RlbG8gbGluZWFyIG3Dumx0aXBsYSBmYXplbmRvIGEgcmVncmVzc8OjbyBpbmljaWFsIGNvbmZvcm1lIG8gZXhlbXBsbyAxMC40Lg0KDQpgYGB7ciB9DQojIFJlZ3Jlc3NhbyBMaW5lYXIgOg0KcmVnMS5sbSA8LSBsbShnZnIgfiBwZSArIHd3MiArIHBpbGwsIGRhdGEgPSBmZXJ0aWwzKQ0KcmVnMS5sbSRBSUMgPC0gQUlDKHJlZzEubG0pICAjIEFrYWlrZQ0KcmVnMS5sbSRCSUMgPC0gQklDKHJlZzEubG0pICAjIFNjaHdhcnoNCnN0YXJnYXplcjo6c3RhcmdhemVyKHJlZzEubG0sIA0KICAgIHRpdGxlID0gIlTDrXR1bG86IFJlc3VsdGFkbyBkYSBSZWdyZXNzw6NvIE9MUyIsICANCiAgICB0eXBlID0gInRleHQiLCBzdHlsZSA9ICJhbGwiLCBhbGlnbiA9IFRSVUUsDQogICAga2VlcC5zdGF0ID0gYygiQUlDIiwgIkJJQyIsICJyc3EiLCAiYWRqLnJzcSIsIm4iKSkNCg0KDQpsaWJyYXJ5KGVxdWF0aW9tYXRpYykNCmVxdWF0aW9tYXRpYzo6ZXh0cmFjdF9lcShyZWcxLmxtLCB1c2VfY29lZnMgPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGl0YWxfdmFycyA9IFQsY29lZl9kaWdpdHMgPSAzKQ0KDQojICQkDQojIFxvcGVyYXRvcm5hbWV7Z2ZyfSA9IDk4LjY4MiArIDAuMDgzKFxvcGVyYXRvcm5hbWV7cGV9KSANCiMgLSAyNC4yMzgoXG9wZXJhdG9ybmFtZXt3dzJ9KSAtIDMxLjU5NChcb3BlcmF0b3JuYW1le3BpbGx9KSArIFxlcHNpbG9uDQojICQkDQpgYGANCg0KUG9ydGFudG8gYSBlcXVhw6fDo28gZXN0aW1hZGEgw6kNCg0KJCQNCmdmciA9IDk4LjY4MiArIDAuMDgzKHBlKSAtIDI0LjIzOCh3dzIpIC0gMzEuNTk0KHBpbGwpICsgXGVwc2lsb24NCiQkDQoNCmBgYHtyIGludGVycDEsZWNobz1GQUxTRSxmaWcuYWxpZ24gPSAiY2VudGVyIiwgb3V0LndpZHRoID0gIjkwJSIsZmlnLmNhcD0iSW50ZXJwcmV0YcOnw6NvIGRvIGV4ZW1wbG8gMTAuNCBkYSBlZGnDp8OjbyBicmFzaWxlaXJhLiBGb250ZTogV29vbGRyaWRnZSAoMjAwNiwgcC4zMjEpIn0NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJJbWFnZW0xXzEucG5nIikNCmBgYA0KDQpPdSBzZWphLCBwYXJhIHVtIGF1bWVudG8gZGUgMTIgZMOzbGFyZXMgZW0gaXAsIG8gYXVtZW50byBlbSB0Z2Ygc2Vyw6EgJDEyKjAuMDgzIFxhcHByb3ggKzEkLCBvdSAxIHBhcmEgY2FkYSAxMDAwIG11bGhlcmVzIGVtIGlkYWRlIGbDqXJ0aWwuICAgDQoNClBvZGVtb3MgY29sb2NhciBhcyBlcXVhw6fDtWVzIGFzc2ltOg0KDQpzZW0gZ3VlcnJhOiAkd3cyPTAkICAgICANCg0KYW50ZXMgZGEgcMOtbHVsYTogICRwaWxsID0gMCQ6DQpcWw0KXGJlZ2lue2FycmF5fXtsfQ0KZ2ZyID0gOTguNjgyICsgMC4wODMocGUpIC0gMjQuMjM4e1xybXsgeCAwfX0gLSAzMS41OTR7XHJteyB4IDB9fVxcDQpnZnIgPSA5OC42ODIgKyAwLjA4MyhwZSkNClxlbmR7YXJyYXl9DQpcXQ0KZGVwb2lzIGRhIHDDrWx1bGE6ICAkcGlsbCA9IDEkOg0KXFsNClxiZWdpbnthcnJheX17bH0NCmdmciA9IDk4LjY4MiArIDAuMDgzKHBlKSAtIDI0LjIzOHtccm17IHggMH19IC0gMzEuNTk0e1xybXsgeCAxfX1cXA0KZ2ZyID0gXGxlZnQoIHs5OC42ODIgLSAzMS41OTR9IFxyaWdodCkgKyAwLjA4MyhwZSlcXA0KZ2ZyID0gXGxlZnQoIHs2Ny4wODh9IFxyaWdodCkgKyAwLjA4MyhwZSkNClxlbmR7YXJyYXl9DQpcXQ0KDQpjb20gZ3VlcnJhOiAkd3cyPTEkICAgICANCg0KYW50ZXMgZGEgcMOtbHVsYTogICRwaWxsID0gMCQ6DQpcWw0KXGJlZ2lue2FycmF5fXtsfQ0KZ2ZyID0gOTguNjgyICsgMC4wODMocGUpIC0gMjQuMjM4e1xybXsgeCAxfX0gLSAzMS41OTR7XHJteyB4IDB9fVxcDQpnZnIgPSBcbGVmdCggezk4LjY4MiAtIDI0LjIzOH0gXHJpZ2h0KSArIDAuMDgzKHBlKVxcDQpnZnIgPSBcbGVmdCggezc0LjQ0NCB9IFxyaWdodCkgKyAwLjA4MyhwZSkNClxlbmR7YXJyYXl9DQpcXQ0KZGVwb2lzIGRhIHDDrWx1bGE6ICAkcGlsbCA9IDEkOg0KXFsNClxiZWdpbnthcnJheX17bH0NCmdmciA9IDk4LjY4MiArIDAuMDgzKHBlKSAtIDI0LjIzOHtccm17IHggMX19IC0gMzEuNTk0e1xybXsgeCAxfX1cXA0KZ2ZyID0gXGxlZnQoIHs5OC42ODIgLTI0LjIzOCAtIDMxLjU5NH0gXHJpZ2h0KSArIDAuMDgzKHBlKVxcDQpnZnIgPSBcbGVmdCggezQyLjg1MH0gXHJpZ2h0KSArIDAuMDgzKHBlKQ0KXGVuZHthcnJheX0NClxdDQoNCiMjIFJlZ3Jlc3PDo28gY29tIHRlbmTDqm5jaWENCg0KU8OjbyByZWFsaXphZG9zIGRvaXMgcHJvY2VkaW1lbnRvcywgdW0gY29tIGEgdmFyacOhdmVsICR5ZWFyJCBlIG91dHJvIGNvbSBhIHZhcmnDoXZlbCAkdCQgY29uc3RydcOtZGEgcHJldmlhbWVudGUsIGRlIG1vZG8gcXVlIG8gbGVpdG9yIHZlcsOhIHF1ZSBhbWJvcyByZXN1bHRhbSBubyBtZXNtbyByZXN1bHRhZG8sIGNvbSBleGNlw6fDo28gZGEgY29uc3RhbnRlIHF1ZSB0ZXLDoSBuw612ZWwgZGlmZXJlbnRlIHBhcmEgYSBlcXVhw6fDo28gY29tICR5ZWFyJCBwb3IgZXN0YXIgZW0gYW5vcyAoMTkxMywgMTkxNCwgLi4uKSBpbnbDqXMgZGUgdD0oMSwyLC4uLikuICAgIA0KDQpgYGB7cn0NCiMgUmVncmVzc2FvIGV4ZW1wbG8gMTAuOCAtIGluY2x1aW5kbyB0ZW5kZW5jaWENCnJlZzIgPC0gbG0oZ2ZyIH4gcGUgKyB3dzIgKyBwaWxsICsgeWVhciwgZGF0YT1mZXJ0aWwzKQ0KcmVnMi5hPC1sbShnZnIgfiBwZSArIHd3MiArIHBpbGwgKyB0LCBkYXRhPWZlcnRpbDMpDQpyZWcyJEFJQyA8LSBBSUMocmVnMikgICMgY29tIHRlbmRlbmNpYSANCnJlZzIkQklDIDwtIEJJQyhyZWcyKSAgIyBjb20gdGVuZGVuY2lhIA0KcmVnMi5hJEFJQyA8LSBBSUMocmVnMi5hKSAgIyBjb20gdGVuZGVuY2lhIA0KcmVnMi5hJEJJQyA8LSBCSUMocmVnMi5hKSAgIyBjb20gdGVuZGVuY2lhIA0Kc3RhcmdhemVyKHJlZzIscmVnMi5hLA0KICAgICAgICAgIHRpdGxlID0gIlTDrXR1bG86IFJlc3VsdGFkb3MgZGFzIFJlZ3Jlc3PDtWVzIE9MUw0KICAgICAgICAgIGNvbSB0ZW5kw6puY2lhIiwgDQogICAgICAgICAgYWxpZ24gPSBUUlVFLCB0eXBlID0gInRleHQiLCANCiAgICAgICAgICBzdHlsZSA9ICJhbGwiLCANCiAgICAgICAgICBrZWVwLnN0YXQgPSBjKCJBSUMiLCAiQklDIiwgInJzcSIsICJhZGoucnNxIiwgIm4iKSkNCmBgYA0KDQoNCiMjIFJlZ3Jlc3PDo28gY29tIGEgdGVuZMOqbmNpYSBxdWFkcsOhdGljYSANCg0KYGBge3J9DQpyZWczPC0gbG0oZ2ZyIH4gcGUgKyB3dzIgKyBwaWxsICsgDQogICAgICAgICAgICAgICAgICAgICAgdCt0c3EsIGRhdGE9ZmVydGlsMykNCnJlZzMkQUlDIDwtIEFJQyhyZWczKSAgICAjIGNvbSB0ZW5kZW5jaWEgcXVhZHJhdGljYQ0KcmVnMyRCSUMgPC0gQklDKHJlZzMpICAgICMgY29tIHRlbmRlbmNpYSBxdWFkcmF0aWNhDQpgYGANCg0KIyMgUmVncmVzc8OjbyBjb20gYSB0ZW5kw6puY2lhIEPDumJpY2EgDQoNCmBgYHtyfQ0KcmVnNDwtIGxtKGdmciB+IHBlICsgd3cyICsgcGlsbCArIA0KICAgICAgICAgICAgICAgdCt0c3ErdGN1LCBkYXRhPWZlcnRpbDMpDQpyZWc0JEFJQyA8LSBBSUMocmVnNCkgICAgIyBjb20gdGVuZGVuY2lhIGN1YmljYQ0KcmVnNCRCSUMgPC0gQklDKHJlZzQpICAgICMgY29tIHRlbmRlbmNpYSBjdWJpY2ENCmBgYA0KDQpQYXJhIGEgdGFiZWxhLCBhIGZ1bsOnw6NvIGNvbSB0ZW5kw6puY2lhIHNlcsOhIGEgbsO6bWVybyAoMSAtIHJlZzIuYSksIGEgcXVhZHLDoXRpY2EgYSAoMiAtIHJlZzMpIGUgYSBjw7piaWNhIGEgKDMgLSByZWc0KS4NCg0KYGBge3J9DQojbGlicmFyeShzdGFyZ2F6ZXIpDQpzdGFyLjEgPC0gc3RhcmdhemVyKHJlZzIuYSxyZWczLHJlZzQsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJUw610dWxvOiBSZXN1bHRhZG9zIGRhcyBSZWdyZXNzw7VlcyIsDQogICAgICAgICAgICAgICAgICAgIGFsaWduPVRSVUUsDQogICAgICAgICAgICAgICAgICAgIHR5cGUgPSAidGV4dCIsDQogICAgICAgICAgICAgICAgICAgIGNvbHVtbi5sYWJlbHMgPSBjKCJsaW5lYXIiLCJxdWFkcsOhdGljYSIsImPDumJpY2EiKSwNCiAgICAgICAgICAgICAgICAgICAga2VlcC5zdGF0PWMoImFpYyIsImJpYyIsInJzcSIsICJhZGoucnNxIiwibiIpDQopDQpgYGANCg0Kw4kgcG9zc8OtdmVsIG9ic2VydmFyIHF1ZSBhIGV4cHJlc3PDo28gY8O6YmljYSwgKDMpLCBmb2kgYSBkZSBtYWlvcmVzIHZhbG9yZXMgZGUgJFJeMiQsICRSXjIkIGFqdXN0YWRvLCBlIG1lbm9yZXMgdmFsb3JlcyBkZSBBa2Fpa2UgKEFJQykgZSBTY2h3YXJ6IChCYXllc2lhbiAtIEJJQykuIERlc3RhIGZvcm1hLCBhIHByaW5jw61waW8sIGVzdGEgw6kgYSBtZWxob3IgZXhwcmVzc8Ojby4NCg0KDQoNClJlZmVyw6puY2lhcw0KPT09PT09PT09PT09PT09PQ0KDQpIRUlTUywgRmxvcmlhbi4gKipVc2luZyBSIGZvciBJbnRyb2R1Y3RvcnkgRWNvbm9tZXRyaWNzKiouIDIuZWQuIEZsb3JpYW4gSGVpc3MsIDIwMjAuIFJlY3Vyc28gb25saW5lLiBEaXNwb27DrXZlbCBlbTogaHR0cDovL3d3dy51cmZpZS5uZXQvLiANCg0KV09PTERSSURHRSwgSi5NLiAqKkludHJvZHXDp8OjbyDDoCBFY29ub21ldHJpYTogdW1hIGFib3JkYWdlbSBtb2Rlcm5hKiouIFPDo28gUGF1bG86IFBpb25laXJhIFRob21zb24gTGVhcm5pbmcsIDIwMDYuKHRyYWR1w6fDo28gZGEgc2VndW5kYSBlZGnDp8OjbyBhbWVyaWNhbmEpLiANCg==