This website is a replication package for the paper “Exposure to Asylum Seekers and Changing Support for the Radical Right: A Natural Experiment in the Netherlands” by Tolsma, Laméris, and Savelkoul (n.d.). It contains R code to replicate all Tables in the manuscript.

Use the top menu to navigate to the section of interest. The section replicates the Appendix of the manuscript.

To copy the code click the button in the upper right corner of the code-chunks.


Data

All data and scripts can be found on Github


Contact

Questions can be addressed to the first author of the corresponding article, Jochem Tolsma.


additional dataprep

We start with a datafile in long format we obtained after performing our dataprep, see here.

  • We delete observations of respondents where respondents were not allowed to vote or did not give an answer.
  • We delete observations with missing values on zipcode information.
  • We delete respondents with only one observation.
  • We construct the dichotomous dependent variable.
  • We construct the multinomial dependent variable.
  • We decided to perform additional robustness checks and need to match more raw data on crisis ASC.
rm(list = ls())

library(haven)

dataset <- read_stata("data/evazc v22122017.dta")

# dependent variable. delete not allowed to vote
table(dataset$vote, useNA = "always")
sum(table(dataset$vote, useNA = "always"))
dataset <- dataset[dataset$vote != 16, ]
dataset <- dataset[dataset$vote != 17, ]
# add 'VNL' to other party
dataset$vote[dataset$vote == 12] <- 18
#'1'='vvd', '2'='pvda', '3'='pvv', '4'='cda', '5'='sp'
#'6'='d66', '7'='gl', '8'='cu', '9'='sgp', '10'='dier'
#'11'='50plus', '12'='vnl','13='blanco','14'='dontknow','15='no vote', '18'='other'
# define dichotomous dependent variable
dataset$y_pvv <- ifelse(dataset$vote == 3, 1, 0)
# define multinomial dependent variable
dataset$vote_rwsp <- NA
dataset$vote_rwsp[dataset$vote == 2 | dataset$vote == 6 | dataset$vote == 7 | dataset$vote == 8 | dataset$vote == 
    10 | dataset$vote == 11 | dataset$vote == 12 | dataset$vote == 18] <- 0  #other
dataset$vote_rwsp[dataset$vote == 1 | dataset$vote == 4 | dataset$vote == 9] <- 1  # right-wing
dataset$vote_rwsp[dataset$vote == 5] <- 2  # anti-establishment 
dataset$vote_rwsp[dataset$vote == 13 | dataset$vote == 14 | dataset$vote == 15] <- 3  #demobilized
dataset$vote_rwsp[dataset$vote == 3] <- 4
# 1: right-wing; 2: anti-establishment; 3: demobilized; 0: other; 4: PVV

# delete respondents with missing data on zipcode
sum(is.na(dataset$pc4))
dataset <- dataset[!is.na(dataset$pc4), ]

# delete respondents with only one observation.
dataset$one <- 1
test <- aggregate(dataset$one, by = list(dataset$PanelistIdQuestion), FUN = sum)
names(test) <- c("PanelistIdQuestion", "ncases")
dataset <- merge(dataset, test)
table(dataset$ncases)
dataset <- dataset[dataset$ncases != 1, ]

# recode tijd/time variable
table(dataset$tijd, useNA = "always")
dataset$tijd <- dataset$tijd - 1

# capacity of ASC s1 is regular, s2=temporary, s3=crisis, s123=total
dataset$s1pc4 <- ifelse(dataset$tijd == 0, dataset$s1cap_pc4t1rel, dataset$s1cap_pc4t2rel)
dataset$s2pc4 <- ifelse(dataset$tijd == 0, dataset$s2cap_pc4t1rel, dataset$s2cap_pc4t2rel)
dataset$s3pc4 <- ifelse(dataset$tijd == 0, dataset$s3cap_pc4t1rel, dataset$s3cap_pc4t2rel)
dataset$s123pc4 <- dataset$s1pc4 + dataset$s2pc4 + dataset$s3pc4

# compute variables for hybrid model: within individual means (between vars) and deviations from mean
# (within vars).
test <- aggregate(dataset[, c("contactnw", "threat", "s123pc4", "s1pc4", "s2pc4", "s3pc4", "y_pvv", "vote_rwsp")], 
    by = list(dataset$PanelistIdQuestion), FUN = mean)
names(test) <- c("PanelistIdQuestion", "contactnw_mean", "threat_mean", "s123pc4_mean", "s1pc4_mean", 
    "s2pc4_mean", "s3pc4_mean", "y_pvv_mean", "vote_rwsp_mean")
dataset <- merge(dataset, test)
dataset$contactnw_afw = dataset$contactnw - dataset$contactnw_mean
dataset$threat_afw = dataset$threat - dataset$threat_mean
dataset$s123pc4_afw = dataset$s123pc4 - dataset$s123pc4_mean
dataset$s1pc4_afw = dataset$s1pc4 - dataset$s1pc4_mean
dataset$s2pc4_afw = dataset$s2pc4 - dataset$s2pc4_mean
dataset$s3pc4_afw = dataset$s3pc4 - dataset$s3pc4_mean

# create filter vars for analyses: fe is fixed effects, fem is fixed effects multinomial
dataset$sel_fe = (dataset$y_pvv != dataset$y_pvv_mean)
dataset$sel_fem = (dataset$vote_rwsp != dataset$vote_rwsp_mean)
dataset$sel_s123pc4 = (dataset$s123pc4 != dataset$s123pc4_mean)

# match additional data on crisis ASC these data have been added in a later phase
duur <- read.csv2("data/Adressen alle AZCs_17022017.csv")
names(duur)
duur <- duur[, c("PC4", "Soort", "Cap_Gem", "Duur.tot.4.11")]
names(duur) <- c("pc4", "soort", "cap", "duur")
duur <- duur[duur$soort == 3, ]
sort(unique(duur$pc4[duur$cap > 0]))

# we are multiplying length of stay with number of AS
duur$s3_altop <- duur$duur * duur$cap
duur2 <- aggregate(duur[, c("cap", "duur", "s3_altop")], by = list(duur$pc4), FUN = sum)
# duur2
names(duur2)[1] <- c("pc4")

dataset <- merge(dataset, duur2, all.x = T)
dataset$duur[is.na(dataset$duur)] <- 0
dataset$s3_altop[is.na(dataset$s3_altop)] <- 0
dataset$cap[is.na(dataset$cap)] <- 0

# asylum seekers in crisis centers per 1000 inhabitants weighted by length of stay
dataset$s3_altop2 <- 1000 * dataset$s3_altop/(dataset$inw2014_pc4 * dataset$pauto2014_pc4)
dataset$cap2 <- 1000 * dataset$cap/(dataset$inw2014_pc4 * dataset$pauto2014_pc4)
dataset$s3_altop <- 1000 * dataset$s3_altop/dataset$inw2014_pc4
dataset$cap <- 1000 * dataset$cap/dataset$inw2014_pc4

Appendix A1

In our manuscript we exploit the panel design of our sample and analyze native Dutch respondents who participated in wave 1 and wave 2. (In our fixed effects models we further select on respondents who changed voting intention). Following the suggestion of reviewer#1 We investigated the possibility that PVV supporters in wave 1 are more motivated to accept the invitation to the 2nd survey than non-PVV supporters. We would like to point out that if this type of selection occurred our results will be biased against our findings, because we are then less likely to observe an increase in PVV support between wave 1 and wave 2.

# this is our data in long format, before we select on panel members
data_attrition <- haven::read_dta("data\\evazc attrition v12042017.dta")

table(data_attrition$tijd)
#> 
#>     1     2 
#> 26064 28434
# we check whether respondents of wave1 also participated in wave2
data_attrition$w2_participation <- NA
data_attrition$w2_participation[data_attrition$tijd == 1] <- data_attrition$PanelistIdQuestion[data_attrition$tijd == 
    1] %in% data_attrition$PanelistIdQuestion[data_attrition$tijd == 2]

# we check whether zipcodes will experience increase in ASC
data_attrition$s1cap_pc4difrel <- data_attrition$s1cap_pc4t2rel - data_attrition$s1cap_pc4t1rel
data_attrition$s2cap_pc4difrel <- data_attrition$s2cap_pc4t2rel - data_attrition$s2cap_pc4t1rel
data_attrition$s3cap_pc4difrel <- data_attrition$s3cap_pc4t2rel - data_attrition$s3cap_pc4t1rel
data_attrition$s123cap_pc4difrel <- (data_attrition$s1cap_pc4t2rel + data_attrition$s2cap_pc4t2rel + 
    data_attrition$s3cap_pc4t2rel) - (data_attrition$s1cap_pc4t1rel + data_attrition$s2cap_pc4t1rel + 
    data_attrition$s3cap_pc4t1rel)


data_at_t1 <- data_attrition[data_attrition$tijd == 1, ]
data_at_t2 <- data_attrition[data_attrition$tijd == 2, ]

Model 1

Is support for PVV in wave1 related to participation in wave 2?

m1 <- glm(w2_participation ~ PVV, family = binomial, data = data_at_t1)
summary(m1)
#> 
#> Call:
#> glm(formula = w2_participation ~ PVV, family = binomial, data = data_at_t1)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.7826   0.6758   0.7385   0.7385   0.7385  
#> 
#> Coefficients:
#>             Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)  1.15997    0.01586  73.126  < 2e-16 ***
#> PVV          0.20058    0.04147   4.837 1.32e-06 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 28306  on 26063  degrees of freedom
#> Residual deviance: 28282  on 26062  degrees of freedom
#> AIC: 28286
#> 
#> Number of Fisher Scoring iterations: 4
logLik(m1)
#> 'log Lik.' -14141.17 (df=2)

The results of this test indeed shows that PVV supporters in wave 1 are more likely to participate in wave 2 than non-PVV supporters in wave 1. We hence conclude that we are likely to underestimate the positive relationship between an increase in local exposure to asylum seekers and support for the PVV.


Model 2

Perhaps more importantly, we would like to investigate whether respondents of Wave 1 who are going to experience an increase in local experience are more likely to participate in Wave 2.

m2 <- glm(w2_participation ~ s1cap_pc4difrel + s2cap_pc4difrel + s3cap_pc4difrel, family = binomial, 
    data = data_at_t1)
summary(m2)
#> 
#> Call:
#> glm(formula = w2_participation ~ s1cap_pc4difrel + s2cap_pc4difrel + 
#>     s3cap_pc4difrel, family = binomial, data = data_at_t1)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.9392   0.7175   0.7277   0.7277   0.8132  
#> 
#> Coefficients:
#>                  Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)      1.193718   0.015086  79.125   <2e-16 ***
#> s1cap_pc4difrel -0.000445   0.001347  -0.330    0.741    
#> s2cap_pc4difrel -0.001026   0.001192  -0.861    0.389    
#> s3cap_pc4difrel  0.001967   0.002707   0.727    0.467    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 27552  on 25404  degrees of freedom
#> Residual deviance: 27550  on 25401  degrees of freedom
#>   (659 observations deleted due to missingness)
#> AIC: 27558
#> 
#> Number of Fisher Scoring iterations: 4
logLik(m2)
#> 'log Lik.' -13775.13 (df=4)

The answer is NO. There is no selectivity with respect to our ‘treatment’, increased exposure to asylum seekers. Not in general, and not among the PVV supporters in wave 1.


Model 3

And in particular if this is the case for PVV supporters in Wave 1.

m3 <- glm(w2_participation ~ s1cap_pc4difrel * PVV + s2cap_pc4difrel * PVV + s3cap_pc4difrel * PVV, family = binomial, 
    data = data_at_t1)
summary(m3)
#> 
#> Call:
#> glm(formula = w2_participation ~ s1cap_pc4difrel * PVV + s2cap_pc4difrel * 
#>     PVV + s3cap_pc4difrel * PVV, family = binomial, data = data_at_t1)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.9803   0.6781   0.7369   0.7369   0.8256  
#> 
#> Coefficients:
#>                       Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)          1.1647791  0.0163214  71.365  < 2e-16 ***
#> s1cap_pc4difrel     -0.0004059  0.0013610  -0.298    0.766    
#> PVV                  0.1881509  0.0429038   4.385 1.16e-05 ***
#> s2cap_pc4difrel     -0.0010531  0.0012648  -0.833    0.405    
#> s3cap_pc4difrel      0.0010852  0.0028119   0.386    0.700    
#> s1cap_pc4difrel:PVV -0.0006326  0.0088767  -0.071    0.943    
#> PVV:s2cap_pc4difrel  0.0005045  0.0038195   0.132    0.895    
#> PVV:s3cap_pc4difrel  0.0084162  0.0092573   0.909    0.363    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 27552  on 25404  degrees of freedom
#> Residual deviance: 27527  on 25397  degrees of freedom
#>   (659 observations deleted due to missingness)
#> AIC: 27543
#> 
#> Number of Fisher Scoring iterations: 4
logLik(m3)
#> 'log Lik.' -13763.69 (df=8)

Appendix A2

Unfortunately, in R it is not possible to estimate a fixed effects multinomial logit model. we have to switch to STATA. I will use R to call Stata.

To replicate this part, please make sure to have Stata installed and within stata the package femlogit.

Party labels:

  • 1: right-wing
  • 2: anti-establishment
  • 3: demobilized
  • 0: other
  • 4: PVV (ref.cat.)

Table A1.

Set your stata path with chooseStataBin()

require(RStata)
dataset_sel <- dataset[dataset$sel_fe == 1, ]
dataset_selfem <- dataset[dataset$sel_fem == 1, ]

stata_src <- "
femlogit vote_rwsp s1pc4 s2pc4 s3pc4 tijd threat contactnw, group(PanelistIdQuestion) base(4) 
"
stata(stata_src, data.in = dataset_selfem, stata.version = 15, stata.path = "\"C:\\Program Files (x86)\\Stata15\\StataSE-64\"")
#> . 
#> . femlogit vote_rwsp s1pc4 s2pc4 s3pc4 tijd threat contactnw, group(PanelistIdQ
#> > uestion) base(4) 
#> 
#> Iteration 0:   log likelihood = -2624.4138  
#> Iteration 1:   log likelihood = -2562.8586  
#> Iteration 2:   log likelihood =    -2545.3  
#> Iteration 3:   log likelihood = -2545.2376  
#> Iteration 4:   log likelihood = -2545.2362  
#> Iteration 5:   log likelihood = -2545.2362  
#> 
#> Fixed-effects multinomial logistic regression   Number of obs     =      8,466
#>                                                 LR chi2(24)       =     777.71
#>                                                 Prob > chi2       =     0.0000
#> Log likelihood = -2545.2362                     Pseudo R2         =     0.1325
#> 
#> ------------------------------------------------------------------------------
#>    vote_rwsp |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
#> -------------+----------------------------------------------------------------
#> _0           |
#>        s1pc4 |  -.0183711   .0168844    -1.09   0.277    -.0514639    .0147217
#>        s2pc4 |  -.0654326   .0706959    -0.93   0.355     -.203994    .0731287
#>        s3pc4 |  -.0338523   .0187038    -1.81   0.070    -.0705111    .0028065
#>         tijd |  -.8722234   .0734109   -11.88   0.000    -1.016106   -.7283406
#>       threat |  -.3237684   .0663498    -4.88   0.000    -.4538117   -.1937252
#>    contactnw |  -.0562277   .0335763    -1.67   0.094     -.122036    .0095806
#> -------------+----------------------------------------------------------------
#> _1           |
#>        s1pc4 |   -.003719     .01596    -0.23   0.816        -.035     .027562
#>        s2pc4 |  -.0801347   .0769849    -1.04   0.298    -.2310223    .0707529
#>        s3pc4 |  -.0372031   .0196402    -1.89   0.058    -.0756972     .001291
#>         tijd |  -.9072487   .0814028   -11.15   0.000    -1.066795   -.7477021
#>       threat |  -.2071291   .0732672    -2.83   0.005    -.3507303    -.063528
#>    contactnw |    .002693   .0380905     0.07   0.944    -.0719631    .0773491
#> -------------+----------------------------------------------------------------
#> _2           |
#>        s1pc4 |  -.0049259   .0157157    -0.31   0.754    -.0357281    .0258762
#>        s2pc4 |    -.07914   .0727013    -1.09   0.276     -.221632     .063352
#>        s3pc4 |  -.0274022   .0191666    -1.43   0.153     -.064968    .0101637
#>         tijd |  -2.069922   .0922435   -22.44   0.000    -2.250716   -1.889128
#>       threat |  -.3650243   .0876528    -4.16   0.000    -.5368208   -.1932279
#>    contactnw |  -.0619441   .0445424    -1.39   0.164    -.1492456    .0253574
#> -------------+----------------------------------------------------------------
#> _3           |
#>        s1pc4 |  -.0073686   .0157294    -0.47   0.639    -.0381977    .0234605
#>        s2pc4 |  -.0644874   .0706524    -0.91   0.361    -.2029636    .0739888
#>        s3pc4 |  -.0223896   .0187887    -1.19   0.233    -.0592148    .0144356
#>         tijd |  -.8945652   .0730327   -12.25   0.000    -1.037707   -.7514237
#>       threat |  -.1908516   .0655231    -2.91   0.004    -.3192744   -.0624287
#>    contactnw |  -.0690404   .0331943    -2.08   0.038       -.1341   -.0039808
#> -------------+----------------------------------------------------------------
#> _4           |  (base outcome)
#> ------------------------------------------------------------------------------

Constraints

We tested whether effects were significantly different across choices with setting constraints. An example of how we did this is given below.

stata_src <- "
cons 7 [0=1]: s2pc4 
cons 8 [1=2]: s2pc4
cons 9 [2=3]: s2pc4

femlogit vote_rwsp s1pc4 s2pc4 s3pc4 tijd threat contactnw, group(PanelistIdQuestion) base(4)

estimates store m1

femlogit vote_rwsp s1pc4 s2pc4 s3pc4 tijd threat contactnw, group(PanelistIdQuestion) base(4) const(7/11)

estimates store m2

lrtest m2 m1

"


stata(stata_src, data.in = dataset_selfem, stata.version = 15, stata.path = "\"C:\\Program Files (x86)\\Stata15\\StataSE-64\"")

Appendix A3

original results

require(survival)
ev_sel <- dataset[dataset$sel_fe == 1, ]
ev_sel2 <- ev_sel[ev_sel$tijd == 1, ]

# need to multiply _afw with 2 (thus becomes t2-t1 (First difference design), instead of t2 -
# mean(t2,t1) (fixed effects design)
ev_sel2$s123pc4_afw <- 2 * ev_sel2$s123pc4_afw
ev_sel2$s1pc4_afw <- 2 * ev_sel2$s1pc4_afw
ev_sel2$s2pc4_afw <- 2 * ev_sel2$s2pc4_afw
ev_sel2$s3pc4_afw <- 2 * ev_sel2$s3pc4_afw
ev_sel2$threat_afw <- 2 * ev_sel2$threat_afw
ev_sel2$contactnw_afw <- 2 * ev_sel2$contactnw_afw

# robustness check with newly matched crisis data.
m1_alt1e <- glm(y_pvv ~ s123pc4_afw, data = ev_sel2, family = binomial)
m1_alt2e <- glm(y_pvv ~ s1pc4_afw + s2pc4_afw + cap, data = ev_sel2, family = binomial)
m1_alt3e <- glm(y_pvv ~ s1pc4_afw + s2pc4_afw + cap + contactnw_afw + threat_afw, data = ev_sel2, family = binomial)
# summary(m1_alt1e) summary(m1_alt2e)
summary(m1_alt3e)
# very small changes, due to 3 additional matched zipcodes
#> 
#> Call:
#> glm(formula = y_pvv ~ s1pc4_afw + s2pc4_afw + cap + contactnw_afw + 
#>     threat_afw, family = binomial, data = ev_sel2)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -2.1826   0.4360   0.6895   0.7633   1.1679  
#> 
#> Coefficients:
#>               Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)   1.084221   0.064792  16.734  < 2e-16 ***
#> s1pc4_afw     0.007373   0.013654   0.540   0.5892    
#> s2pc4_afw     0.061345   0.066965   0.916   0.3596    
#> cap           0.027678   0.016781   1.649   0.0991 .  
#> contactnw_afw 0.034183   0.029355   1.164   0.2442    
#> threat_afw    0.265453   0.058505   4.537  5.7e-06 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 1534.7  on 1388  degrees of freedom
#> Residual deviance: 1504.6  on 1383  degrees of freedom
#> AIC: 1516.6
#> 
#> Number of Fisher Scoring iterations: 7

time heterogeneity in exposure

  • Conclusion: it is not exposure (number of asylum seekers multiplied by days in zipcode) that increases support.
# robustness check with time heterogeneity
m1_alt1c <- glm(y_pvv ~ s123pc4_afw, data = ev_sel2, family = binomial)
m1_alt2c <- glm(y_pvv ~ s1pc4_afw + s2pc4_afw + s3_altop, data = ev_sel2, family = binomial)
m1_alt3c <- glm(y_pvv ~ s1pc4_afw + s2pc4_afw + s3_altop + contactnw_afw + threat_afw, data = ev_sel2, 
    family = binomial)
# summary(m1_alt1c) summary(m1_alt2c)
summary(m1_alt3c)
#> 
#> Call:
#> glm(formula = y_pvv ~ s1pc4_afw + s2pc4_afw + s3_altop + contactnw_afw + 
#>     threat_afw, family = binomial, data = ev_sel2)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -2.0320   0.4773   0.7002   0.7580   1.1608  
#> 
#> Coefficients:
#>               Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)   1.100081   0.064642  17.018  < 2e-16 ***
#> s1pc4_afw     0.007528   0.013889   0.542    0.588    
#> s2pc4_afw     0.060322   0.066525   0.907    0.365    
#> s3_altop      0.001513   0.002318   0.653    0.514    
#> contactnw_afw 0.032986   0.029300   1.126    0.260    
#> threat_afw    0.265221   0.058424   4.540 5.64e-06 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 1534.7  on 1388  degrees of freedom
#> Residual deviance: 1507.6  on 1383  degrees of freedom
#> AIC: 1519.6
#> 
#> Number of Fisher Scoring iterations: 7

controlling for days crisis ASC were used

  • Conclusion 1: the longer crisis ASC were used, the less likely that PVV support increased.
  • Conclusion 2: the larger the crisis ASC, the more likely that PVV support increased.
  • Conclusion 3: brief and large influx of asylum seekers in crisis ASC increase support for PVV
# robustness check with time only, not shown in manuscript
m1_alt3c2 <- glm(y_pvv ~ s1pc4_afw + s2pc4_afw + duur + contactnw_afw + threat_afw, data = ev_sel2, family = binomial)

# controlling for days crisis ASC were used.
m1_alt4c2 <- glm(y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw + duur + contactnw_afw + threat_afw, data = ev_sel2, 
    family = binomial)

# summary(m1_alt3c2)
summary(m1_alt4c2)
#> 
#> Call:
#> glm(formula = y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw + duur + 
#>     contactnw_afw + threat_afw, family = binomial, data = ev_sel2)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -2.3398   0.3127   0.6930   0.7584   1.1591  
#> 
#> Coefficients:
#>               Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)    1.09907    0.06525  16.843  < 2e-16 ***
#> s1pc4_afw      0.01014    0.01625   0.624  0.53264    
#> s2pc4_afw      0.06014    0.06639   0.906  0.36501    
#> s3pc4_afw      0.06390    0.02468   2.589  0.00962 ** 
#> duur          -0.11347    0.04277  -2.653  0.00797 ** 
#> contactnw_afw  0.02939    0.02954   0.995  0.31982    
#> threat_afw     0.26393    0.05862   4.502 6.73e-06 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 1534.7  on 1388  degrees of freedom
#> Residual deviance: 1495.7  on 1382  degrees of freedom
#> AIC: 1509.7
#> 
#> Number of Fisher Scoring iterations: 7

binarization of exposure (treatment effect)

  • Conclusion: It is not whether there was an influx. The size of the influx matters.
ev_sel2$treatment <- ev_sel2$s123pc4_afw > 0
ev_sel2$treatments1 <- ev_sel2$s1pc4_afw > 0
ev_sel2$treatments2 <- ev_sel2$s2pc4_afw > 0
ev_sel2$treatments3 <- ev_sel2$s3pc4_afw > 0
m1_alt1b <- glm(y_pvv ~ treatment, data = ev_sel2, family = binomial)
m1_alt2b <- glm(y_pvv ~ treatments1 + treatments2 + treatments3, data = ev_sel2, family = binomial)
m1_alt3b <- glm(y_pvv ~ treatments1 + treatments2 + treatments3 + contactnw_afw + threat_afw, data = ev_sel2, 
    family = binomial)
# summary(m1_alt1b) summary(m1_alt2b)
summary(m1_alt3b)
#> 
#> Call:
#> glm(formula = y_pvv ~ treatments1 + treatments2 + treatments3 + 
#>     contactnw_afw + threat_afw, family = binomial, data = ev_sel2)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -2.0392   0.5090   0.7018   0.7542   1.1588  
#> 
#> Coefficients:
#>                 Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)      1.11183    0.06616  16.805  < 2e-16 ***
#> treatments1TRUE -0.41549    0.51173  -0.812    0.417    
#> treatments2TRUE  0.50267    0.64165   0.783    0.433    
#> treatments3TRUE  0.12041    0.28623   0.421    0.674    
#> contactnw_afw    0.03279    0.02936   1.117    0.264    
#> threat_afw       0.26699    0.05843   4.569  4.9e-06 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 1534.7  on 1388  degrees of freedom
#> Residual deviance: 1509.9  on 1383  degrees of freedom
#> AIC: 1521.9
#> 
#> Number of Fisher Scoring iterations: 4

exposure at municipality level

This one is not shown in manuscript. There is a discussion in the literature at which geographical scale we could expect ‘context effects’. The crisis centers were a very local phenomenon. We thus do not expect effects at municipality level. Most residents will not be aware of crisis centers. At the municipality level the discussion was more focused on new temporary centers.

  • Conclusion: At the municipality-level an increase in asylum seekers in temporary centers increases support for the PVV.
# robustness check with exposure on municipality level
ev_sel2$s123gc_afw <- 1000 * (ev_sel2$s1cap_gct2 + ev_sel2$s2cap_gct2 + ev_sel2$s3cap_gct2 - ev_sel2$s1cap_gct1 - 
    ev_sel2$s2cap_gct1 - ev_sel2$s3cap_gct1)/ev_sel2$inw2014_gc
ev_sel2$s1gc_afw <- 1000 * (ev_sel2$s1cap_gct2 - ev_sel2$s1cap_gct1)/ev_sel2$inw2014_gc
ev_sel2$s2gc_afw <- 1000 * (ev_sel2$s2cap_gct2 - ev_sel2$s2cap_gct1)/ev_sel2$inw2014_gc
ev_sel2$s3gc_afw <- 1000 * (ev_sel2$s3cap_gct2 - ev_sel2$s3cap_gct1)/ev_sel2$inw2014_gc


m1_alt1d <- glm(y_pvv ~ s123gc_afw, data = ev_sel2, family = binomial)
m1_alt2d <- glm(y_pvv ~ s1gc_afw + s2gc_afw + s3gc_afw, data = ev_sel2, family = binomial)
m1_alt3d <- glm(y_pvv ~ s1gc_afw + s2gc_afw + s3gc_afw + contactnw_afw + threat_afw, data = ev_sel2, 
    family = binomial)
# summary(m1_alt1d) summary(m1_alt2d)
summary(m1_alt3d)
#> 
#> Call:
#> glm(formula = y_pvv ~ s1gc_afw + s2gc_afw + s3gc_afw + contactnw_afw + 
#>     threat_afw, family = binomial, data = ev_sel2)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -2.1231   0.4447   0.6912   0.7671   1.1763  
#> 
#> Coefficients:
#>               Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)    1.07278    0.07449  14.403  < 2e-16 ***
#> s1gc_afw      -0.01145    0.03202  -0.358   0.7207    
#> s2gc_afw       0.08222    0.04624   1.778   0.0754 .  
#> s3gc_afw       0.01125    0.03037   0.370   0.7111    
#> contactnw_afw  0.03025    0.02923   1.035   0.3008    
#> threat_afw     0.26756    0.05860   4.566 4.98e-06 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 1534.7  on 1388  degrees of freedom
#> Residual deviance: 1506.8  on 1383  degrees of freedom
#> AIC: 1518.8
#> 
#> Number of Fisher Scoring iterations: 5

weighted sample

Let us construct sample weights for the fixed effects sample. We show descriptive statistics pre- and post-weighting in Appendix 4.

require(anesrake)
ev_sel <- dataset[dataset$sel_fe == 1, ]
ev_sel2 <- ev_sel[ev_sel$tijd == 1, ]

# need to multiply _afw with 2 (thus becomes t2-t1 (First difference design), instead of t2 -
# mean(t2,t1) (fixed effects design)
ev_sel2$s123pc4_afw <- 2 * ev_sel2$s123pc4_afw
ev_sel2$s1pc4_afw <- 2 * ev_sel2$s1pc4_afw
ev_sel2$s2pc4_afw <- 2 * ev_sel2$s2pc4_afw
ev_sel2$s3pc4_afw <- 2 * ev_sel2$s3pc4_afw
ev_sel2$threat_afw <- 2 * ev_sel2$threat_afw
ev_sel2$contactnw_afw <- 2 * ev_sel2$contactnw_afw


# ADD WEIGHTS TO Data make caseidn
ev_sel2$caseidn <- 1:length(ev_sel2[, 1])

N <- length(ev_sel2[, 1])

# MAKE TARGET VALUES Geslacht
gender_w <- c(0.503, 0.497)  # vrouw - man

# Age: 3cats
age_w <- c(0.238, 0.344, 0.418)  #18-35,35-55,55+
names(age_w) <- c("age1", "age2", "age3")

# Opl: 3cats
educ_w <- c(0.323, 0.393, 0.284)  #basis/vmbo/mbo1,mbo2-4/HV/VWO,HBO/WO 
names(educ_w) <- c("opl1", "opl2", "opl3")

targets <- list(gender_w, age_w, educ_w)
names(targets) <- c("gender_w", "age_w", "educ_w")

# check variables in data table(ev_sel2$gender, useNA='always') #man=1
ev_sel2$gender_w <- as.logical(ev_sel2$gender)
# table(ev_sel2$gender_w, useNA='always')

# age: 3cats table(ev_sel2$age, useNA='always') #18-35,35-55,55+
ev_sel2$age_w <- NA
ev_sel2$age_w[ev_sel2$age <= 35] <- 1
ev_sel2$age_w[ev_sel2$age > 35 & ev_sel2$age <= 55] <- 2
ev_sel2$age_w[ev_sel2$age > 55] <- 3
ev_sel2$age_w <- as.factor(ev_sel2$age_w)
levels(ev_sel2$age_w) <- c("age1", "age2", "age3")
# table(ev_sel2$age_w, useNA='always')

# Opl: 3cats table(ev_sel2$educ, useNA='always')
ev_sel2$educ_w <- NA
ev_sel2$educ_w[ev_sel2$educ <= 8] <- 1
ev_sel2$educ_w[ev_sel2$educ > 8 & ev_sel2$educ <= 12] <- 2
ev_sel2$educ_w[ev_sel2$educ > 12] <- 3
ev_sel2$educ_w <- as.factor(ev_sel2$educ_w)
levels(ev_sel2$educ_w) <- c("opl1", "opl2", "opl3")
# table(ev_sel2$educ_w, useNA='always')

# Education (years of education that constitute the shortest route to obtain a university degree.
# (After this coding, all values are subtracted from the maximum years of schooling necessary to
# obtain a university grade)) (opl1) 5 lagere school not finished (4yrs) /lagere school (6yrs) (opl1)
# 7 lbo, vmbo-kb/bbl (6,5yrs) /mavo, vmbo-tl (8yrs) (opl2) 11 havo (10yrs) / vwo/gymnasium (12yrs)
# (opl2) 9,5 mbo-kort (kmbo) (8,5yrs) /mbo-tussen/lang (mbo) (10,5yrs) (opl3) 14 hbo (14yrs) (opl3)
# 16,5 universiteit (bachelormaster, doctoraal)(16,5)

# make weights
weighted <- anesrake(inputter = targets, dataframe = ev_sel2, choosemethod = "total", caseid = ev_sel2$caseidn, 
    cap = 3, pctlim = 5, verbose = FALSE)
test <- weightassess(targets, ev_sel2, weighted$weightvec)
# test

# table(ev_sel2$educ) oplp <- test$educ_w[c(1:3),1]*N oplw <- test$educ_w[c(1:3),4] opls <-
# table(ev_sel2$educ_w) test2 <- matrix(c(oplp, oplw, opls), byrow=T, nrow=3) dimnames(test2) <-
# list(weightype=c('population','weighted sample', 'original sample'),opl=c('low','medium','high'))
# test2 chisq.test(test2[1:2,]) agep <- test$age_w[c(1:3),1]*N agew <- test$age_w[c(1:3),4] test2 <-
# matrix(c(agep, agew), byrow=T, nrow=2) dimnames(test2) <-
# list(weightype=c('p','w'),age=c('1','2','3')) test2 chisq.test(test2) geslp <-
# test$gender_w[c(1:2),1]*N geslw <- test$gender_w[c(1:2),4] test2 <- matrix(c(geslp, geslw),
# byrow=T, nrow=2) dimnames(test2) <- list(weightype=c('p','w'),age=c('v','m')) test2
# chisq.test(test2)

ev_sel2 <- cbind(ev_sel2, weighted$weightvec)
names(ev_sel2)[names(ev_sel2) == "weighted$weightvec"] <- "weightvec3"
#> [1] "raking achieved only partial convergence, please check the results to ensure that sufficient convergence was achieved."
#> [1] "no improvement was apparent after 85 iterations"
#> [1] "current total change in the iteration is: 0.0396851187449571 average change per weight is: 2.85709998163838e-05"

And let us perform a robustness check on the weighted sample.

require(survey)

des2 <- svydesign(id = ~1, weights = ~weightvec3, data = ev_sel2)

# check if weighing gives correct mean svymean(~gender, des2) yes it does.

glm.sampling.weights1 <- svyglm(y_pvv ~ s123pc4_afw, family = quasibinomial(), design = des2)
glm.sampling.weights2 <- svyglm(y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw, family = quasibinomial(), 
    design = des2)
glm.sampling.weights3 <- svyglm(y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw + contactnw_afw + threat_afw, 
    family = quasibinomial(), design = des2)

summary(glm.sampling.weights3)
#> 
#> Call:
#> svyglm(formula = y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw + 
#>     contactnw_afw + threat_afw, design = des2, family = quasibinomial())
#> 
#> Survey design:
#> svydesign(id = ~1, weights = ~weightvec3, data = ev_sel2)
#> 
#> Coefficients:
#>               Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)    1.15674    0.10111  11.440  < 2e-16 ***
#> s1pc4_afw      0.03683    0.05262   0.700   0.4841    
#> s2pc4_afw      0.15215    0.08602   1.769   0.0771 .  
#> s3pc4_afw      0.03675    0.01986   1.850   0.0645 .  
#> contactnw_afw  0.09457    0.04758   1.988   0.0470 *  
#> threat_afw     0.42119    0.08623   4.885 1.16e-06 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for quasibinomial family taken to be 0.9809453)
#> 
#> Number of Fisher Scoring iterations: 9

matched sample

We analyze whether persons are more likely to have voted in Time1 for PVV than at Time0. Although we use a fixed effects model (thus focus on within person changes) and thereby control for time-stable heterogeneity, we cannot control for time-varying heterogeneity. Because of possible pre-treatment differences among individuals (both measured, and unmeasured), the causal effect may also differ across individuals.

The idea with pre-processing our data with a matching procedure is that our treated group is as similar as possible to the control group after matching and that the treatment is closer to being independent to (unmeasured time-varying) covariates. After matching we can be more confidant that we have ‘no ommitted variable bias’.

“Recall that under the usual econometric conditions for omitted variable bias, a variable Xi must be controlled for if it is causally prior to Ti, empirically related to Ti, and affects Yi conditional on Ti. If instead one or more of the three conditions do not hold, then Xi may be omitted without any resulting bias (although the variance may increase).”

Ho et al. (2007)

We define the treatment as zipcodes that experienced in increase in asylum seekers in ASC. Although we define a binary treatment variable, in the model we use the continuous ‘treatment’ (i.e. the increase in asylum seekers per 1000 neigbhorhood residents) as predictor.

  • Conclusion 1: the binary treatment is not significant.
  • Conclusion 2: in a matched sample the originally reported estimates become stronger.
require("MatchIt")
require(optmatch)

ev_sel2 <- ev_sel[ev_sel$tijd == 1, ]

# start preprocessing data (matching) because we also want to match on ethnic density of NB and SES
# of NB need to remove missing values. table(ev_sel2$pnwal2014_pc4, useNA='always')
ev_sel2 <- ev_sel2[!is.na(ev_sel2$pnwal2014_pc4), ]
# lost 3 respondents, no treated table(ev_sel2$woz2012_pc4, useNA='always')
ev_sel2 <- ev_sel2[!(ev_sel2$woz2012_pc4 == 0), ]
# lost 1 respondents, no treated take log of NBses
ev_sel2$LNwoz <- log(ev_sel2$woz2012_pc4)
summary(ev_sel2$LNwoz)

# define treatment variable: whether there has been an increase in total asylum seekers.
ev_sel2$treatment <- ev_sel2$s123pc4_afw > 0
table(ev_sel2$treatment, useNA = "always")
# 111 treated

# define treatment variable2: whether there has been an increase in asylum seekers in crisis centers.
ev_sel2$treatment2 <- ev_sel2$s3pc4_afw > 0
table(ev_sel2$treatment2, useNA = "always")
# 75 treated

ev_sel2$threat_t1 <- ev_sel2$threat_mean - ev_sel2$threat_afw
ev_sel2$contactnw_t1 <- ev_sel2$contactnw_mean - ev_sel2$contactnw_afw

# let use smaller dataset (to remove missing values in non relevant vars)
ev_sel2 <- ev_sel2[, c("y_pvv", "treatment", "treatment2", "s123pc4_afw", "s1pc4_afw", "s2pc4_afw", "s3pc4_afw", 
    "gender", "age", "educ", "contactnw_afw", "threat_afw", "contactnw_t1", "threat_t1", "pnwal2014_pc4", 
    "woz2012_pc4", "LNwoz")]


m.out <- matchit(treatment ~ gender + scale(age) + scale(educ) + scale(contactnw_t1) + scale(threat_t1) + 
    scale(pnwal2014_pc4) + scale(LNwoz), data = ev_sel2)
data_matched <- match.data(m.out)

# quickly see effect of matching
prop.table(table(ev_sel2$treatment, ev_sel2$y_pvv), margin = 1)
prop.table(table(data_matched$treatment, data_matched$y_pvv), margin = 1)
# conclusion: treated areas less likely to see increase in support for PVV
summary(glm(y_pvv ~ treatment, data = data_matched, family = binomial))
# but not significant

# m1_alt_matched1 <- glm(y_pvv ~ s123pc4_afw , data=data_matched, family=binomial) m1_alt_matched2 <-
# glm(y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw , data=data_matched, family=binomial)
m1_alt_matched3 <- glm(y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw + contactnw_afw + threat_afw, data = data_matched, 
    family = binomial)

# summary(m1_alt_matched1) summary(m1_alt_matched2)
summary(m1_alt_matched3)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   3.746   5.092   5.281   5.270   5.444   6.849 
#> 
#> FALSE  TRUE  <NA> 
#>  1274   111     0 
#> 
#> FALSE  TRUE  <NA> 
#>  1310    75     0 
#>        
#>                 0         1
#>   FALSE 0.2417582 0.7582418
#>   TRUE  0.2342342 0.7657658
#>        
#>                 0         1
#>   FALSE 0.2252252 0.7747748
#>   TRUE  0.2342342 0.7657658
#> 
#> Call:
#> glm(formula = y_pvv ~ treatment, family = binomial, data = data_matched)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.7267   0.7144   0.7144   0.7306   0.7306  
#> 
#> Coefficients:
#>               Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)    1.23547    0.22722   5.437 5.41e-08 ***
#> treatmentTRUE -0.05092    0.31915  -0.160    0.873    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 239.29  on 221  degrees of freedom
#> Residual deviance: 239.27  on 220  degrees of freedom
#> AIC: 243.27
#> 
#> Number of Fisher Scoring iterations: 4
#> 
#> 
#> Call:
#> glm(formula = y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw + contactnw_afw + 
#>     threat_afw, family = binomial, data = data_matched)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -2.1647   0.1668   0.6346   0.7872   1.4076  
#> 
#> Coefficients:
#>                Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)    1.012934   0.192592   5.259 1.44e-07 ***
#> s1pc4_afw      0.007049   0.015234   0.463   0.6436    
#> s2pc4_afw      0.129256   0.139715   0.925   0.3549    
#> s3pc4_afw      0.065414   0.038936   1.680   0.0929 .  
#> contactnw_afw -0.006188   0.147258  -0.042   0.9665    
#> threat_afw     0.769756   0.304061   2.532   0.0114 *  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 239.29  on 221  degrees of freedom
#> Residual deviance: 225.25  on 216  degrees of freedom
#> AIC: 237.25
#> 
#> Number of Fisher Scoring iterations: 8

matched sample (alternative treatment)

This one is not shown in manuscript. We now define a binary treatment based on an increase in crisis centers.

# ## lets match on crisis centers
m.out2 <- matchit(treatment2 ~ scale(gender) + scale(age) + scale(educ) + scale(contactnw_t1) + scale(threat_t1) + 
    scale(pnwal2014_pc4) + scale(LNwoz), data = ev_sel2)
summary(m.out2)
data_matched2 <- match.data(m.out2)

# #quickly see effect of matching
prop.table(table(ev_sel2$treatment2, ev_sel2$y_pvv), margin = 1)
prop.table(table(data_matched2$treatment2, data_matched2$y_pvv), margin = 1)
# #conclusion: in treated zipcodes stronger increase in support for PVV
summary(glm(y_pvv ~ treatment2, data = data_matched2, family = binomial))
# but not significant.

m1_alt_matched1b <- glm(y_pvv ~ s123pc4_afw, data = data_matched2, family = binomial)
m1_alt_matched2b <- glm(y_pvv ~ s3pc4_afw, data = data_matched2, family = binomial)
m1_alt_matched3b <- glm(y_pvv ~ s3pc4_afw + contactnw_afw + threat_afw, data = data_matched2, family = binomial)

# summary(m1_alt_matched2b)
summary(m1_alt_matched3b)
# #conclusion: matching makes effect stronger
#> 
#> Call:
#> matchit(formula = treatment2 ~ scale(gender) + scale(age) + scale(educ) + 
#>     scale(contactnw_t1) + scale(threat_t1) + scale(pnwal2014_pc4) + 
#>     scale(LNwoz), data = ev_sel2)
#> 
#> Summary of Balance for All Data:
#>                      Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean eCDF Max
#> distance                    0.0609        0.0538          0.3617     0.8503    0.1193   0.2312
#> scale(gender)              -0.0629        0.0036         -0.0633     1.1095    0.0133   0.0267
#> scale(age)                  0.0385       -0.0022          0.0404     1.0201    0.0157   0.0674
#> scale(educ)                 0.1023       -0.0059          0.1107     0.9528    0.0290   0.0754
#> scale(contactnw_t1)        -0.0031        0.0002         -0.0031     1.1137    0.0180   0.0453
#> scale(threat_t1)           -0.0582        0.0033         -0.0647     0.8985    0.0279   0.0583
#> scale(pnwal2014_pc4)       -0.0846        0.0048         -0.1009     0.7762    0.0656   0.1367
#> scale(LNwoz)                0.3466       -0.0198          0.4196     0.7574    0.1192   0.2375
#> 
#> 
#> Summary of Balance for Matched Data:
#>                      Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean eCDF Max
#> distance                    0.0609        0.0608          0.0023     1.0078    0.0008   0.0267
#> scale(gender)              -0.0629       -0.1626          0.0949     0.8964    0.0200   0.0400
#> scale(age)                  0.0385       -0.0332          0.0711     1.2220    0.0236   0.0800
#> scale(educ)                 0.1023        0.0347          0.0693     0.9196    0.0400   0.1333
#> scale(contactnw_t1)        -0.0031       -0.0217          0.0176     1.0471    0.0362   0.0667
#> scale(threat_t1)           -0.0582        0.0934         -0.1595     0.8572    0.0560   0.1200
#> scale(pnwal2014_pc4)       -0.0846        0.0037         -0.0997     0.6341    0.0482   0.1333
#> scale(LNwoz)                0.3466        0.3600         -0.0154     0.7971    0.0312   0.0800
#>                      Std. Pair Dist.
#> distance                      0.0035
#> scale(gender)                 0.8541
#> scale(age)                    0.9673
#> scale(educ)                   1.1253
#> scale(contactnw_t1)           1.0993
#> scale(threat_t1)              1.1411
#> scale(pnwal2014_pc4)          0.9312
#> scale(LNwoz)                  0.3998
#> 
#> Percent Balance Improvement:
#>                      Std. Mean Diff. Var. Ratio eCDF Mean eCDF Max
#> distance                        99.4       95.2      99.4     88.5
#> scale(gender)                  -50.0       -5.3     -50.0    -50.0
#> scale(age)                     -76.1     -906.7     -49.8    -18.7
#> scale(educ)                     37.4      -73.3     -38.1    -76.8
#> scale(contactnw_t1)           -461.4       57.3    -101.5    -47.2
#> scale(threat_t1)              -146.5      -44.0    -100.7   -105.8
#> scale(pnwal2014_pc4)             1.2      -79.8      26.5      2.5
#> scale(LNwoz)                    96.3       18.4      73.8     66.3
#> 
#> Sample Sizes:
#>           Control Treated
#> All          1310      75
#> Matched        75      75
#> Unmatched    1235       0
#> Discarded       0       0
#> 
#>        
#>                 0         1
#>   FALSE 0.2419847 0.7580153
#>   TRUE  0.2266667 0.7733333
#>        
#>                 0         1
#>   FALSE 0.2666667 0.7333333
#>   TRUE  0.2266667 0.7733333
#> 
#> Call:
#> glm(formula = y_pvv ~ treatment2, family = binomial, data = data_matched2)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.7229   0.7170   0.7170   0.7876   0.7876  
#> 
#> Coefficients:
#>                Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)      1.0116     0.2611   3.874 0.000107 ***
#> treatment2TRUE   0.2156     0.3798   0.568 0.570208    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 167.59  on 149  degrees of freedom
#> Residual deviance: 167.27  on 148  degrees of freedom
#> AIC: 171.27
#> 
#> Number of Fisher Scoring iterations: 4
#> 
#> 
#> Call:
#> glm(formula = y_pvv ~ s3pc4_afw + contactnw_afw + threat_afw, 
#>     family = binomial, data = data_matched2)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -2.5076   0.1407   0.6372   0.7994   1.2257  
#> 
#> Coefficients:
#>               Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)    0.77855    0.23509   3.312 0.000927 ***
#> s3pc4_afw      0.09363    0.04389   2.133 0.032915 *  
#> contactnw_afw  0.29595    0.18900   1.566 0.117382    
#> threat_afw     0.39704    0.35489   1.119 0.263236    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 167.59  on 149  degrees of freedom
#> Residual deviance: 157.77  on 146  degrees of freedom
#> AIC: 165.77
#> 
#> Number of Fisher Scoring iterations: 5

Appendix A4

The weighing statistics.

test
#> $gender_w
#>       Target Unweighted N Unweighted %     Wtd N     Wtd % Change in %  Resid. Disc. Orig. Disc.
#> FALSE  0.497          279    0.2008639  690.2131 0.4969137   0.2960497  8.632599e-05   0.2961361
#> TRUE   0.503         1110    0.7991361  698.7869 0.5030863  -0.2960497 -8.632599e-05  -0.2961361
#> Total  1.000         1389    1.0000000 1389.0000 1.0000000   0.5920995  1.726520e-04   0.5922721
#> 
#> $age_w
#>       Target Unweighted N Unweighted %     Wtd N      Wtd % Change in % Resid. Disc. Orig. Disc.
#> age1   0.238           39   0.02807775  117.0038 0.08423599  0.05615824   0.15376401   0.2099222
#> age2   0.344          266   0.19150468  574.1759 0.41337356  0.22186888  -0.06937356   0.1524953
#> age3   0.418         1084   0.78041757  697.8203 0.50239045 -0.27802712  -0.08439045  -0.3624176
#> Total  1.000         1389   1.00000000 1389.0000 1.00000000  0.55605424   0.30752801   0.7248351
#> 
#> $educ_w
#>       Target Unweighted N Unweighted %     Wtd N     Wtd % Change in % Resid. Disc. Orig. Disc.
#> opl1   0.323          300    0.2159827  524.7036 0.3777564  0.16177365  -0.05475637  0.10701728
#> opl2   0.393          520    0.3743701  577.0288 0.4154275  0.04105744  -0.02242749  0.01862995
#> opl3   0.284          569    0.4096472  287.2676 0.2068161 -0.20283109   0.07718386 -0.12564723
#> Total  1.000         1389    1.0000000 1389.0000 1.0000000  0.40566218   0.15436772  0.25129446

Appendix A5

The balance statistics.

summary(m.out)
#> 
#> Call:
#> matchit(formula = treatment ~ gender + scale(age) + scale(educ) + 
#>     scale(contactnw_t1) + scale(threat_t1) + scale(pnwal2014_pc4) + 
#>     scale(LNwoz), data = ev_sel2)
#> 
#> Summary of Balance for All Data:
#>                      Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean eCDF Max
#> distance                    0.0847        0.0797          0.2521     1.0158    0.0809   0.1476
#> gender                      0.7838        0.7998         -0.0390          .    0.0161   0.0161
#> scale(age)                  0.1081       -0.0094          0.1254     0.8700    0.0210   0.0697
#> scale(educ)                 0.0630       -0.0055          0.0709     0.9291    0.0178   0.0388
#> scale(contactnw_t1)         0.0638       -0.0056          0.0681     1.0399    0.0230   0.0701
#> scale(threat_t1)           -0.0402        0.0035         -0.0467     0.8687    0.0274   0.0596
#> scale(pnwal2014_pc4)       -0.0243        0.0021         -0.0308     0.7150    0.0524   0.1506
#> scale(LNwoz)                0.1810       -0.0158          0.2063     0.9054    0.0539   0.1211
#> 
#> 
#> Summary of Balance for Matched Data:
#>                      Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean eCDF Max
#> distance                    0.0847        0.0847          0.0007     1.0037    0.0008   0.0180
#> gender                      0.7838        0.8649         -0.1970          .    0.0811   0.0811
#> scale(age)                  0.1081        0.0514          0.0605     0.9344    0.0175   0.0811
#> scale(educ)                 0.0630        0.0730         -0.0103     1.0861    0.0165   0.0450
#> scale(contactnw_t1)         0.0638        0.0638          0.0000     1.0433    0.0180   0.0631
#> scale(threat_t1)           -0.0402        0.0938         -0.1430     0.9087    0.0523   0.1081
#> scale(pnwal2014_pc4)       -0.0243       -0.0924          0.0796     0.9119    0.0460   0.1351
#> scale(LNwoz)                0.1810        0.3225         -0.1482     0.9139    0.0501   0.1712
#>                      Std. Pair Dist.
#> distance                      0.0029
#> gender                        0.5909
#> scale(age)                    0.9495
#> scale(educ)                   0.9978
#> scale(contactnw_t1)           0.9616
#> scale(threat_t1)              1.1185
#> scale(pnwal2014_pc4)          0.9692
#> scale(LNwoz)                  0.7542
#> 
#> Percent Balance Improvement:
#>                      Std. Mean Diff. Var. Ratio eCDF Mean eCDF Max
#> distance                        99.7       76.2      99.1     87.8
#> gender                        -404.9          .    -404.9   -404.9
#> scale(age)                      51.8       51.2      16.9    -16.4
#> scale(educ)                     85.4      -12.3       7.0    -16.1
#> scale(contactnw_t1)            100.0       -8.5      21.5     10.0
#> scale(threat_t1)              -206.4       32.0     -90.9    -81.5
#> scale(pnwal2014_pc4)          -158.2       72.5      12.2     10.3
#> scale(LNwoz)                    28.2        9.4       7.0    -41.4
#> 
#> Sample Sizes:
#>           Control Treated
#> All          1274     111
#> Matched       111     111
#> Unmatched    1163       0
#> Discarded       0       0

Appendix A6

To obtain DiD estimators, we estimate our dichotomous outcome variable with a Linear Probability Model. We use “identity” as link function set the variance to “mu(1-mu)” (as in the binomial distribution) and we allow for (possible) overdispersion. We report cluster corrected standard errors, with individuals as clusters. The DiD model is estimated on the ‘hybrid sample’.

require(sandwich)
require(lmtest)
ev <- dataset


# Because we include ethnic density of NB and SES of NB need as time-constant covariates we have to
# remove missing values. Similar to our analyses reported in the main text.

sum(is.na(ev$pnwal2014_pc4))
#> [1] 90
ev_sel4 <- ev[!is.na(ev$pnwal2014_pc4), ]
# lost 90 respondents

ev_sel4 <- ev_sel4[!(ev_sel4$woz2012_pc4 == 0), ]
# lost 22 respondents
ev_sel4 <- ev_sel4[!is.na(ev_sel4$woz2012_pc4), ]
# lost 3 respondents

# center variables!
ev_sel4$age_c <- ev_sel4$age - mean(ev_sel4$age)
ev_sel4$educ_c <- ev_sel4$educ - mean(ev_sel4$educ)
ev_sel4$pnwal2014_pc4_c <- ev_sel4$pnwal2014_pc4 - mean(ev_sel4$pnwal2014_pc4)
ev_sel4$woz2012_pc4_c <- ev_sel4$woz2012_pc4 - mean(ev_sel4$woz2012_pc4)

# divide to help estimation
ev_sel4$woz2012_pc4_c <- ev_sel4$woz2012_pc4_c/100

ev <- ev_sel4

# define treatments! for continuous treatment vars we multiple the deviations from mean exposure with
# 2

# treatment (total - binary)
ev$treatment_did1b <- ifelse((ev$s123pc4_afw > 0 & ev$tijd == 1) | (ev$s123pc4_afw < 0 & ev$tijd == 0), 
    1, 0)

# treatment (crisis - continuous)
ev$treatment_did1c <- 2 * ifelse(ev$tijd == 1, ev$s123pc4_afw, -ev$s123pc4_afw)

# treatment (crisis - binary)
ev$treatment_did2b <- ifelse((ev$s3pc4_afw > 0 & ev$tijd == 1) | (ev$s3pc4_afw < 0 & ev$tijd == 0), 1, 
    0)

# treatment (crisis - continuous)
ev$treatment_did2c <- 2 * ifelse(ev$tijd == 1, ev$s3pc4_afw, -ev$s3pc4_afw)

treatment ‘total exposure’ (binary)

# summary(ev$woz2012_pc4_c)
did_lm <- lm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b + gender + age_c + educ_c + pnwal2014_pc4_c + 
    woz2012_pc4_c, data = ev)
# summary(did_lm) round(coeftest(did_lm, vcov = vcovCL(did_lm, cluster = ~ PanelistIdQuestion)), 3)
# coef(did_lm)

# did_lpm <- glm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b + gender + age_c + educ_c +
# pnwal2014_pc4_c + woz2012_pc4_c, family=binomial(link='identity'), data=ev,
# start=round(coef(did_lm),2)) summary(did_lpm) round(coeftest(did_lpm_het, vcov =
# vcovCL(did_lpm_het, cluster = ~ PanelistIdQuestion)), 3)

did_lpm_het <- glm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b + gender + age_c + educ_c + 
    pnwal2014_pc4_c + woz2012_pc4_c, family = quasi(link = "identity", variance = "mu(1-mu)"), data = ev, 
    start = round(coef(did_lm), 2))

# summary(did_lpm_het)
round(coeftest(did_lpm_het, vcov = vcovCL(did_lpm_het, cluster = ~PanelistIdQuestion)), 3)
#> 
#> z test of coefficients:
#> 
#>                      Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)             0.117      0.004  31.028   <2e-16 ***
#> treatment_did1b         0.010      0.011   0.933    0.351    
#> tijd                    0.035      0.002  15.849   <2e-16 ***
#> gender                  0.073      0.005  16.124   <2e-16 ***
#> age_c                  -0.001      0.000  -4.268   <2e-16 ***
#> educ_c                 -0.020      0.001 -28.850   <2e-16 ***
#> pnwal2014_pc4_c         0.085      0.033   2.568    0.010 ** 
#> woz2012_pc4_c          -0.001      0.000  -6.190   <2e-16 ***
#> treatment_did1b:tijd    0.000      0.009  -0.042    0.966    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

repeat without covariates

did_lm <- lm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b, data = ev)
# summary(did_lm) round(coeftest(did_lm, vcov = vcovCL(did_lm, cluster = ~ PanelistIdQuestion)), 3)
# coef(did_lm)

# did_lpm <- glm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b + gender + age_c + educ_c +
# pnwal2014_pc4_c + woz2012_pc4_c, family=binomial(link='identity'), data=ev,
# start=round(coef(did_lm),2)) summary(did_lpm) round(coeftest(did_lpm_het, vcov =
# vcovCL(did_lpm_het, cluster = ~ PanelistIdQuestion)), 3)

did_lpm_het <- glm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b, family = quasi(link = "identity", 
    variance = "mu(1-mu)"), data = ev, start = round(coef(did_lm), 2))

# summary(did_lpm_het)
round(coeftest(did_lpm_het, vcov = vcovCL(did_lpm_het, cluster = ~PanelistIdQuestion)), 3)
#> 
#> z test of coefficients:
#> 
#>                      Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)             0.167      0.003  59.562   <2e-16 ***
#> treatment_did1b         0.001      0.010   0.142    0.887    
#> tijd                    0.037      0.002  18.614   <2e-16 ***
#> treatment_did1b:tijd    0.005      0.008   0.620    0.535    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

treatment ‘total exposure’ (continuous)

did_lm <- lm(y_pvv ~ treatment_did1c + tijd + tijd:treatment_did1c + gender + age_c + educ_c + pnwal2014_pc4_c + 
    woz2012_pc4_c, data = ev)
# summary(did_lm) round(coeftest(did_lm, vcov = vcovCL(did_lm, cluster = ~ PanelistIdQuestion)), 3)
# coef(did_lm)

# did_lpm <- glm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b + gender + age_c + educ_c +
# pnwal2014_pc4_c + woz2012_pc4_c, family=binomial(link='identity'), data=ev,
# start=round(coef(did_lm),2)) summary(did_lpm) round(coeftest(did_lpm_het, vcov =
# vcovCL(did_lpm_het, cluster = ~ PanelistIdQuestion)), 3)

did_lpm_het <- glm(y_pvv ~ treatment_did1c + tijd + tijd:treatment_did1c + gender + age_c + educ_c + 
    pnwal2014_pc4_c + woz2012_pc4_c, family = quasi(link = "identity", variance = "mu(1-mu)"), data = ev, 
    start = round(coef(did_lm), 2))

summary(did_lpm_het)
#> 
#> Call:
#> glm(formula = y_pvv ~ treatment_did1c + tijd + tijd:treatment_did1c + 
#>     gender + age_c + educ_c + pnwal2014_pc4_c + woz2012_pc4_c, 
#>     family = quasi(link = "identity", variance = "mu(1-mu)"), 
#>     data = ev, start = round(coef(did_lm), 2))
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.0041  -0.7094  -0.5682  -0.4093   3.3616  
#> 
#> Coefficients:
#>                        Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)           1.201e-01  3.151e-03  38.103  < 2e-16 ***
#> treatment_did1c       1.709e-05  1.467e-04   0.117   0.9073    
#> tijd                  3.286e-02  3.620e-03   9.077  < 2e-16 ***
#> gender                7.005e-02  3.563e-03  19.661  < 2e-16 ***
#> age_c                -8.311e-04  1.377e-04  -6.035 1.61e-09 ***
#> educ_c               -2.054e-02  5.740e-04 -35.776  < 2e-16 ***
#> pnwal2014_pc4_c       7.678e-02  2.596e-02   2.957   0.0031 ** 
#> woz2012_pc4_c        -4.122e-04  1.812e-03  -0.228   0.8200    
#> treatment_did1c:tijd  6.818e-05  2.264e-04   0.301   0.7633    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for quasi family taken to be 1.003036)
#> 
#>     Null deviance: 36681  on 38181  degrees of freedom
#> Residual deviance: 34985  on 38173  degrees of freedom
#> AIC: NA
#> 
#> Number of Fisher Scoring iterations: 25
round(coeftest(did_lpm_het, vcov = vcovCL(did_lpm_het, cluster = ~PanelistIdQuestion)), 3)
#> 
#> z test of coefficients:
#> 
#>                      Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)             0.120      0.004  29.624   <2e-16 ***
#> treatment_did1c         0.000      0.000   0.105    0.916    
#> tijd                    0.033      0.002  15.833   <2e-16 ***
#> gender                  0.070      0.005  14.428   <2e-16 ***
#> age_c                  -0.001      0.000  -4.308   <2e-16 ***
#> educ_c                 -0.021      0.001 -26.257   <2e-16 ***
#> pnwal2014_pc4_c         0.077      0.035   2.203    0.028 *  
#> woz2012_pc4_c           0.000      0.003  -0.142    0.887    
#> treatment_did1c:tijd    0.000      0.000   0.530    0.596    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

repeat without covariates

did_lm <- lm(y_pvv ~ treatment_did1c + tijd + tijd:treatment_did1c, data = ev)
# summary(did_lm) round(coeftest(did_lm, vcov = vcovCL(did_lm, cluster = ~ PanelistIdQuestion)), 3)
# coef(did_lm)

# did_lpm <- glm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b + gender + age_c + educ_c +
# pnwal2014_pc4_c + woz2012_pc4_c, family=binomial(link='identity'), data=ev,
# start=round(coef(did_lm),2)) summary(did_lpm) round(coeftest(did_lpm_het, vcov =
# vcovCL(did_lpm_het, cluster = ~ PanelistIdQuestion)), 3)

did_lpm_het <- glm(y_pvv ~ treatment_did1c + tijd + tijd:treatment_did1c, family = quasi(link = "identity", 
    variance = "mu(1-mu)"), data = ev, start = round(coef(did_lm), 2))

# summary(did_lpm_het)
round(coeftest(did_lpm_het, vcov = vcovCL(did_lpm_het, cluster = ~PanelistIdQuestion)), 4)
#> 
#> z test of coefficients:
#> 
#>                      Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)            0.1675     0.0027 61.6763   <2e-16 ***
#> treatment_did1c       -0.0002     0.0001 -1.3256   0.1850    
#> tijd                   0.0371     0.0019 19.0460   <2e-16 ***
#> treatment_did1c:tijd   0.0002     0.0001  1.9531   0.0508 .  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

treatment ‘crisis exposure’ (binary)

did_lm <- lm(y_pvv ~ treatment_did2b + tijd + tijd:treatment_did2b + gender + age_c + educ_c + pnwal2014_pc4_c + 
    woz2012_pc4_c, data = ev)
# summary(did_lm) round(coeftest(did_lm, vcov = vcovCL(did_lm, cluster = ~ PanelistIdQuestion)), 3)
# coef(did_lm)

# did_lpm <- glm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b + gender + age_c + educ_c +
# pnwal2014_pc4_c + woz2012_pc4_c, family=binomial(link='identity'), data=ev,
# start=round(coef(did_lm),2)) summary(did_lpm) round(coeftest(did_lpm_het, vcov =
# vcovCL(did_lpm_het, cluster = ~ PanelistIdQuestion)), 3)

did_lpm_het <- glm(y_pvv ~ treatment_did2b + tijd + tijd:treatment_did2b + gender + age_c + educ_c + 
    pnwal2014_pc4_c + woz2012_pc4_c, family = quasi(link = "identity", variance = "mu(1-mu)"), data = ev, 
    start = round(coef(did_lm), 2))

# summary(did_lpm_het)
round(coeftest(did_lpm_het, vcov = vcovCL(did_lpm_het, cluster = ~PanelistIdQuestion)), 3)
#> 
#> z test of coefficients:
#> 
#>                      Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)             0.120      0.004  28.740   <2e-16 ***
#> treatment_did2b         0.002      0.013   0.120    0.904    
#> tijd                    0.033      0.002  15.406   <2e-16 ***
#> gender                  0.070      0.005  14.161   <2e-16 ***
#> age_c                  -0.001      0.000  -3.897   <2e-16 ***
#> educ_c                 -0.021      0.001 -25.575   <2e-16 ***
#> pnwal2014_pc4_c         0.077      0.035   2.187    0.029 *  
#> woz2012_pc4_c          -0.001      0.003  -0.155    0.877    
#> treatment_did2b:tijd    0.008      0.011   0.757    0.449    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

repeat without covariates

did_lm <- lm(y_pvv ~ treatment_did2b + tijd + tijd:treatment_did2b, data = ev)
# summary(did_lm) round(coeftest(did_lm, vcov = vcovCL(did_lm, cluster = ~ PanelistIdQuestion)), 3)
# coef(did_lm)

# did_lpm <- glm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b + gender + age_c + educ_c +
# pnwal2014_pc4_c + woz2012_pc4_c, family=binomial(link='identity'), data=ev,
# start=round(coef(did_lm),2)) summary(did_lpm) round(coeftest(did_lpm_het, vcov =
# vcovCL(did_lpm_het, cluster = ~ PanelistIdQuestion)), 3)

did_lpm_het <- glm(y_pvv ~ treatment_did2b + tijd + tijd:treatment_did2b, family = quasi(link = "identity", 
    variance = "mu(1-mu)"), data = ev, start = round(coef(did_lm), 2))

# summary(did_lpm_het)
round(coeftest(did_lpm_het, vcov = vcovCL(did_lpm_het, cluster = ~PanelistIdQuestion)), 3)
#> 
#> z test of coefficients:
#> 
#>                      Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)             0.167      0.003  60.452   <2e-16 ***
#> treatment_did2b        -0.004      0.013  -0.289    0.772    
#> tijd                    0.037      0.002  18.858   <2e-16 ***
#> treatment_did2b:tijd    0.008      0.010   0.820    0.412    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

treatment ‘crisis exposure’ (continuous)

did_lm <- lm(y_pvv ~ treatment_did2c + tijd + tijd:treatment_did2c + gender + age_c + educ_c + pnwal2014_pc4_c + 
    woz2012_pc4_c, data = ev)
# summary(did_lm) round(coeftest(did_lm, vcov = vcovCL(did_lm, cluster = ~ PanelistIdQuestion)), 3)
# coef(did_lm)

# did_lpm <- glm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b + gender + age_c + educ_c +
# pnwal2014_pc4_c + woz2012_pc4_c, family=binomial(link='identity'), data=ev,
# start=round(coef(did_lm),2)) summary(did_lpm) round(coeftest(did_lpm_het, vcov =
# vcovCL(did_lpm_het, cluster = ~ PanelistIdQuestion)), 3)

did_lpm_het <- glm(y_pvv ~ treatment_did2c + tijd + tijd:treatment_did2c + gender + age_c + educ_c + 
    pnwal2014_pc4_c + woz2012_pc4_c, family = quasi(link = "identity", variance = "mu(1-mu)"), data = ev, 
    start = round(coef(did_lm), 2))

# summary(did_lpm_het)
round(coeftest(did_lpm_het, vcov = vcovCL(did_lpm_het, cluster = ~PanelistIdQuestion)), 3)
#> 
#> z test of coefficients:
#> 
#>                      Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)             0.118      0.004  29.423   <2e-16 ***
#> treatment_did2c         0.000      0.001   0.358    0.720    
#> tijd                    0.034      0.002  16.506   <2e-16 ***
#> gender                  0.072      0.005  15.112   <2e-16 ***
#> age_c                  -0.001      0.000  -3.795   <2e-16 ***
#> educ_c                 -0.020      0.001 -26.682   <2e-16 ***
#> pnwal2014_pc4_c         0.083      0.034   2.423    0.015 *  
#> woz2012_pc4_c          -0.001      0.003  -0.327    0.744    
#> treatment_did2c:tijd    0.000      0.000   0.503    0.615    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

repeat without covariates

did_lm <- lm(y_pvv ~ treatment_did2c + tijd + tijd:treatment_did2c, data = ev)
# summary(did_lm) round(coeftest(did_lm, vcov = vcovCL(did_lm, cluster = ~ PanelistIdQuestion)), 3)
# coef(did_lm)

# did_lpm <- glm(y_pvv ~ treatment_did1b + tijd + tijd:treatment_did1b + gender + age_c + educ_c +
# pnwal2014_pc4_c + woz2012_pc4_c, family=binomial(link='identity'), data=ev,
# start=round(coef(did_lm),2)) summary(did_lpm) round(coeftest(did_lpm_het, vcov =
# vcovCL(did_lpm_het, cluster = ~ PanelistIdQuestion)), 3)

did_lpm_het <- glm(y_pvv ~ treatment_did2c + tijd + tijd:treatment_did2c, family = quasi(link = "identity", 
    variance = "mu(1-mu)"), data = ev, start = round(coef(did_lm), 2))

# summary(did_lpm_het)
round(coeftest(did_lpm_het, vcov = vcovCL(did_lpm_het, cluster = ~PanelistIdQuestion)), 3)
#> 
#> z test of coefficients:
#> 
#>                      Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)             0.167      0.003  61.175   <2e-16 ***
#> treatment_did2c         0.000      0.000  -0.017    0.986    
#> tijd                    0.037      0.002  19.011   <2e-16 ***
#> treatment_did2c:tijd    0.001      0.000   1.744    0.081 .  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1


Ho, Daniel E., Kosuke Imai, Gary King, and Elizabeth A. Stuart. 2007. “Matching as Nonparametric Preprocessing for Reducing Model Dependence in Parametric Causal Inference.” Political Analysis 15 (3): 199–236. https://doi.org/10.1093/pan/mpl013.

Tolsma, Jochem, Joran Laméris, and Michael Savelkoul. n.d. “Exposure to Asylum Seekers and Changing Support for the Radical Right: A Natural Experiment in the Netherlands.” PLOS ONE - (-): –. https://journals.plos.org/plosone/.

LS0tDQp0aXRsZTogIkV4cG9zdXJlIHRvIEFzeWx1bSBTZWVrZXJzIg0KYXV0aG9yOiAnW0pvY2hlbSBUb2xzbWFdKGh0dHBzOi8vd3d3LmpvY2hlbXRvbHNtYS5ubCkgLSBSYWRib3VkIFVuaXZlcnNpdHksIHRoZSBOZXRoZXJsYW5kcycNCmJpYmxpb2dyYXBoeTogcmVmZXJlbmNlcy5iaWINCmRhdGU6ICJMYXN0IGNvbXBpbGVkIG9uIGByIGZvcm1hdChTeXMudGltZSgpLCAnJUIsICVZJylgIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6ICB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQ0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KLS0tDQoNCmBgYHtyLCBnbG9iYWxzZXR0aW5ncywgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpvcHRzX2NodW5rJHNldCh0aWR5Lm9wdHM9bGlzdCh3aWR0aC5jdXRvZmY9MTAwKSx0aWR5PVRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLGNvbW1lbnQgPSAiIz4iLCBjYWNoZT1UUlVFLCBjbGFzcy5zb3VyY2U9YygidGVzdCIpLCBjbGFzcy5vdXRwdXQ9YygidGVzdDIiKSkNCm9wdGlvbnMod2lkdGggPSAxMDApDQpyZ2w6OnNldHVwS25pdHIoKQ0KDQoNCmNvbG9yaXplIDwtIGZ1bmN0aW9uKHgsIGNvbG9yKSB7DQogIGlmIChrbml0cjo6aXNfbGF0ZXhfb3V0cHV0KCkpIHsNCiAgICBzcHJpbnRmKCJcXHRleHRjb2xvcnslc317JXN9IiwgY29sb3IsIHgpDQogIH0gZWxzZSBpZiAoa25pdHI6OmlzX2h0bWxfb3V0cHV0KCkpIHsNCiAgICBzcHJpbnRmKCI8c3BhbiBzdHlsZT0nY29sb3I6ICVzOyc+JXM8L3NwYW4+IiwgY29sb3IsIA0KICAgICAgeCkNCiAgfSBlbHNlIHgNCn0NCg0KYGBgDQoNCmBgYHtyIGtsaXBweSwgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0Ka2xpcHB5OjprbGlwcHkocG9zaXRpb24gPSBjKCd0b3AnLCAncmlnaHQnKSkNCiNrbGlwcHk6OmtsaXBweShjb2xvciA9ICdkYXJrcmVkJykNCiNrbGlwcHk6OmtsaXBweSh0b29sdGlwX21lc3NhZ2UgPSAnQ2xpY2sgdG8gY29weScsIHRvb2x0aXBfc3VjY2VzcyA9ICdEb25lJykNCmBgYA0KDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KcHJlLnRlc3Qgew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCiAgb3ZlcmZsb3cteDogYXV0bzsNCiAgbWFyZ2luOiAwcHg7DQp9DQoNCnByZS50ZXN0MiB7DQogIG1heC1oZWlnaHQ6IDMwMHB4Ow0KICBvdmVyZmxvdy15OiBhdXRvOw0KICBvdmVyZmxvdy14OiBhdXRvOw0KICBtYXJnaW46IDBweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUNCn0NCg0KDQpoMSwgLmgxLCBoMiwgLmgyLCBoMywgLmgzIHsNCiAgICBtYXJnaW4tdG9wOiAyNHB4Ow0KfQ0KDQoNCmBgYA0KDQotLS0tDQoNClRoaXMgd2Vic2l0ZSBpcyBhIHJlcGxpY2F0aW9uIHBhY2thZ2UgZm9yIHRoZSBwYXBlciAiRXhwb3N1cmUgdG8gQXN5bHVtIFNlZWtlcnMgYW5kIENoYW5naW5nIFN1cHBvcnQgZm9yIHRoZSBSYWRpY2FsIFJpZ2h0OiBBIE5hdHVyYWwgRXhwZXJpbWVudCBpbiB0aGUgTmV0aGVybGFuZHMiIGJ5IEBUb2xzbWEyMDIwLiBJdCBjb250YWlucyBSIGNvZGUgdG8gcmVwbGljYXRlIGFsbCBUYWJsZXMgaW4gdGhlIG1hbnVzY3JpcHQuIA0KDQpVc2UgdGhlIHRvcCBtZW51IHRvIG5hdmlnYXRlIHRvIHRoZSBzZWN0aW9uIG9mIGludGVyZXN0LiBUaGUgc2VjdGlvbiByZXBsaWNhdGVzIHRoZSAqKkFwcGVuZGl4Kiogb2YgdGhlIG1hbnVzY3JpcHQuIA0KDQpUbyBjb3B5IHRoZSBjb2RlIGNsaWNrIHRoZSBidXR0b24gaW4gdGhlIHVwcGVyIHJpZ2h0IGNvcm5lciBvZiB0aGUgY29kZS1jaHVua3MuIA0KDQoNCi0tLS0NCg0KIyMgRGF0YQ0KQWxsIGRhdGEgYW5kIHNjcmlwdHMgY2FuIGJlIGZvdW5kIG9uIFtHaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9Kb2NoZW1Ub2xzbWEvRXhwb3N1cmVBU0MyMDIwKQ0KDQotLS0tDQoNCiMjIENvbnRhY3QNClF1ZXN0aW9ucyBjYW4gYmUgYWRkcmVzc2VkIHRvIHRoZSBmaXJzdCBhdXRob3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcgYXJ0aWNsZSwgW0pvY2hlbSBUb2xzbWFdKG1haWx0bzpqLnRvbHNtYUBydS5ubCkuIA0KDQotLS0tICANCg0KIyMgYWRkaXRpb25hbCBkYXRhcHJlcCAgDQoNCldlIHN0YXJ0IHdpdGggYSBkYXRhZmlsZSBpbiBsb25nIGZvcm1hdCB3ZSBvYnRhaW5lZCBhZnRlciBwZXJmb3JtaW5nIG91ciBkYXRhcHJlcCwgc2VlIFtoZXJlXShkYXRhL2V2YXpjIHYyMjEyMjAxNy5kdGEpLiAgDQoNCi0gV2UgZGVsZXRlIG9ic2VydmF0aW9ucyBvZiByZXNwb25kZW50cyB3aGVyZSByZXNwb25kZW50cyB3ZXJlIG5vdCBhbGxvd2VkIHRvIHZvdGUgb3IgZGlkIG5vdCBnaXZlIGFuIGFuc3dlci4gIA0KLSBXZSBkZWxldGUgb2JzZXJ2YXRpb25zIHdpdGggbWlzc2luZyB2YWx1ZXMgb24gemlwY29kZSBpbmZvcm1hdGlvbi4gIA0KLSBXZSBkZWxldGUgcmVzcG9uZGVudHMgd2l0aCBvbmx5IG9uZSBvYnNlcnZhdGlvbi4gIA0KLSBXZSBjb25zdHJ1Y3QgdGhlIGRpY2hvdG9tb3VzIGRlcGVuZGVudCB2YXJpYWJsZS4gIA0KLSBXZSBjb25zdHJ1Y3QgdGhlIG11bHRpbm9taWFsIGRlcGVuZGVudCB2YXJpYWJsZS4gDQotIFdlIGRlY2lkZWQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHJvYnVzdG5lc3MgY2hlY2tzIGFuZCBuZWVkIHRvIG1hdGNoIG1vcmUgcmF3IGRhdGEgb24gY3Jpc2lzIEFTQy4gDQoNCg0KDQoNCmBgYHtyLCByZXN1bHRzPSdoaWRlJ30NCnJtKGxpc3Q9bHMoKSkNCg0KbGlicmFyeShoYXZlbikNCg0KZGF0YXNldCA8LSByZWFkX3N0YXRhKCJkYXRhL2V2YXpjIHYyMjEyMjAxNy5kdGEiKQ0KDQojZGVwZW5kZW50IHZhcmlhYmxlLg0KI2RlbGV0ZSBub3QgYWxsb3dlZCB0byB2b3RlDQp0YWJsZShkYXRhc2V0JHZvdGUsIHVzZU5BID0gImFsd2F5cyIpDQpzdW0odGFibGUoZGF0YXNldCR2b3RlLCB1c2VOQSA9ICJhbHdheXMiKSkNCmRhdGFzZXQgPC0gZGF0YXNldFtkYXRhc2V0JHZvdGUhPTE2LF0NCmRhdGFzZXQgPC0gZGF0YXNldFtkYXRhc2V0JHZvdGUhPTE3LF0NCiNhZGQgJ1ZOTCcgdG8gb3RoZXIgcGFydHkNCmRhdGFzZXQkdm90ZVtkYXRhc2V0JHZvdGU9PTEyXSA8LSAxOA0KIyIxIj0idnZkIiwgIjIiPSJwdmRhIiwgIjMiPSJwdnYiLCAiNCI9ImNkYSIsICI1Ij0ic3AiDQojIjYiPSJkNjYiLCAiNyI9ImdsIiwgIjgiPSJjdSIsICI5Ij0ic2dwIiwgIjEwIj0iZGllciINCiMiMTEiPSI1MHBsdXMiLCAiMTIiPSJ2bmwiLCIxMz0iYmxhbmNvIiwiMTQiPSJkb250a25vdyIsIjE1PSJubyB2b3RlIiwgIjE4Ij0ib3RoZXIiDQojZGVmaW5lIGRpY2hvdG9tb3VzIGRlcGVuZGVudCB2YXJpYWJsZQ0KZGF0YXNldCR5X3B2diA8LSBpZmVsc2UoZGF0YXNldCR2b3RlPT0zLCAxLCAwKQ0KI2RlZmluZSBtdWx0aW5vbWlhbCBkZXBlbmRlbnQgdmFyaWFibGUNCmRhdGFzZXQkdm90ZV9yd3NwIDwtIE5BDQpkYXRhc2V0JHZvdGVfcndzcFtkYXRhc2V0JHZvdGU9PTIgfCBkYXRhc2V0JHZvdGU9PTYgfCBkYXRhc2V0JHZvdGU9PTcgfCBkYXRhc2V0JHZvdGU9PTggfCBkYXRhc2V0JHZvdGU9PTEwIHwgZGF0YXNldCR2b3RlPT0xMSB8IGRhdGFzZXQkdm90ZT09MTIgfCBkYXRhc2V0JHZvdGU9PTE4XSA8LSAwICNvdGhlcg0KZGF0YXNldCR2b3RlX3J3c3BbZGF0YXNldCR2b3RlPT0xIHwgZGF0YXNldCR2b3RlPT00IHwgZGF0YXNldCR2b3RlPT05XSA8LSAxICMgcmlnaHQtd2luZw0KZGF0YXNldCR2b3RlX3J3c3BbZGF0YXNldCR2b3RlPT01XSA8LSAyICMgYW50aS1lc3RhYmxpc2htZW50IA0KZGF0YXNldCR2b3RlX3J3c3BbZGF0YXNldCR2b3RlPT0xMyB8IGRhdGFzZXQkdm90ZT09MTQgfCBkYXRhc2V0JHZvdGU9PTE1XSA8LSAzICNkZW1vYmlsaXplZA0KZGF0YXNldCR2b3RlX3J3c3BbZGF0YXNldCR2b3RlPT0zXSA8LSA0DQojIDE6IHJpZ2h0LXdpbmc7IDI6IGFudGktZXN0YWJsaXNobWVudDsgMzogZGVtb2JpbGl6ZWQ7IDA6IG90aGVyOyA0OiBQVlYNCg0KI2RlbGV0ZSByZXNwb25kZW50cyB3aXRoIG1pc3NpbmcgZGF0YSBvbiB6aXBjb2RlDQpzdW0oaXMubmEoZGF0YXNldCRwYzQpKQ0KZGF0YXNldCA8LSBkYXRhc2V0WyFpcy5uYShkYXRhc2V0JHBjNCksXQ0KDQojZGVsZXRlIHJlc3BvbmRlbnRzIHdpdGggb25seSBvbmUgb2JzZXJ2YXRpb24uDQpkYXRhc2V0JG9uZSA8LSAxIA0KdGVzdCA8LSBhZ2dyZWdhdGUoZGF0YXNldCRvbmUsIGJ5PWxpc3QoZGF0YXNldCRQYW5lbGlzdElkUXVlc3Rpb24pLCBGVU49c3VtKQ0KbmFtZXModGVzdCkgPC0gYygiUGFuZWxpc3RJZFF1ZXN0aW9uIiwgIm5jYXNlcyIpDQpkYXRhc2V0IDwtIG1lcmdlKGRhdGFzZXQsIHRlc3QpDQp0YWJsZShkYXRhc2V0JG5jYXNlcykNCmRhdGFzZXQgPC0gZGF0YXNldFtkYXRhc2V0JG5jYXNlcyE9MSxdDQoNCiNyZWNvZGUgdGlqZC90aW1lIHZhcmlhYmxlDQp0YWJsZShkYXRhc2V0JHRpamQsIHVzZU5BID0gImFsd2F5cyIpDQpkYXRhc2V0JHRpamQgPC0gZGF0YXNldCR0aWpkIC0gMQ0KDQojY2FwYWNpdHkgb2YgQVNDDQojczEgaXMgcmVndWxhciwgczI9dGVtcG9yYXJ5LCBzMz1jcmlzaXMsIHMxMjM9dG90YWwNCmRhdGFzZXQkczFwYzQgPC0gaWZlbHNlKGRhdGFzZXQkdGlqZD09MCwgZGF0YXNldCRzMWNhcF9wYzR0MXJlbCxkYXRhc2V0JHMxY2FwX3BjNHQycmVsKQ0KZGF0YXNldCRzMnBjNCA8LSBpZmVsc2UoZGF0YXNldCR0aWpkPT0wLCBkYXRhc2V0JHMyY2FwX3BjNHQxcmVsLGRhdGFzZXQkczJjYXBfcGM0dDJyZWwpDQpkYXRhc2V0JHMzcGM0IDwtIGlmZWxzZShkYXRhc2V0JHRpamQ9PTAsIGRhdGFzZXQkczNjYXBfcGM0dDFyZWwsZGF0YXNldCRzM2NhcF9wYzR0MnJlbCkNCmRhdGFzZXQkczEyM3BjNCA8LSBkYXRhc2V0JHMxcGM0ICsgZGF0YXNldCRzMnBjNCArIGRhdGFzZXQkczNwYzQNCg0KI2NvbXB1dGUgdmFyaWFibGVzIGZvciBoeWJyaWQgbW9kZWw6IHdpdGhpbiBpbmRpdmlkdWFsIG1lYW5zIChiZXR3ZWVuIHZhcnMpIGFuZCBkZXZpYXRpb25zIGZyb20gbWVhbiAod2l0aGluIHZhcnMpLiANCnRlc3QgPC0gYWdncmVnYXRlKGRhdGFzZXRbLGMoImNvbnRhY3RudyIsICJ0aHJlYXQiLCAiczEyM3BjNCIsICJzMXBjNCIsICJzMnBjNCIsICJzM3BjNCIsICJ5X3B2diIsICJ2b3RlX3J3c3AiICldLCBieT1saXN0KGRhdGFzZXQkUGFuZWxpc3RJZFF1ZXN0aW9uKSwgRlVOPW1lYW4pDQpuYW1lcyh0ZXN0KSA8LSBjKCJQYW5lbGlzdElkUXVlc3Rpb24iLCAiY29udGFjdG53X21lYW4iLCAidGhyZWF0X21lYW4iLCAgICAiczEyM3BjNF9tZWFuIiAsICAiczFwYzRfbWVhbiIgLCAgICAiczJwYzRfbWVhbiIgLCAgICAiczNwYzRfbWVhbiIgLCAgICAieV9wdnZfbWVhbiIsICJ2b3RlX3J3c3BfbWVhbiIpDQpkYXRhc2V0IDwtIG1lcmdlKGRhdGFzZXQsIHRlc3QpDQpkYXRhc2V0JGNvbnRhY3Rud19hZncgPSBkYXRhc2V0JGNvbnRhY3RudyAtIGRhdGFzZXQkY29udGFjdG53X21lYW4NCmRhdGFzZXQkdGhyZWF0X2FmdyA9IGRhdGFzZXQkdGhyZWF0IC0gZGF0YXNldCR0aHJlYXRfbWVhbg0KZGF0YXNldCRzMTIzcGM0X2FmdyA9IGRhdGFzZXQkczEyM3BjNCAtIGRhdGFzZXQkczEyM3BjNF9tZWFuDQpkYXRhc2V0JHMxcGM0X2FmdyA9IGRhdGFzZXQkczFwYzQgLSBkYXRhc2V0JHMxcGM0X21lYW4NCmRhdGFzZXQkczJwYzRfYWZ3ID0gZGF0YXNldCRzMnBjNCAtIGRhdGFzZXQkczJwYzRfbWVhbg0KZGF0YXNldCRzM3BjNF9hZncgPSBkYXRhc2V0JHMzcGM0IC0gZGF0YXNldCRzM3BjNF9tZWFuDQoNCiNjcmVhdGUgZmlsdGVyIHZhcnMgZm9yIGFuYWx5c2VzOiBmZSBpcyBmaXhlZCBlZmZlY3RzLCBmZW0gaXMgZml4ZWQgZWZmZWN0cyBtdWx0aW5vbWlhbA0KZGF0YXNldCRzZWxfZmUgPSAoZGF0YXNldCR5X3B2diAhPSBkYXRhc2V0JHlfcHZ2X21lYW4pDQpkYXRhc2V0JHNlbF9mZW0gPSAoZGF0YXNldCR2b3RlX3J3c3AgIT0gZGF0YXNldCR2b3RlX3J3c3BfbWVhbikNCmRhdGFzZXQkc2VsX3MxMjNwYzQgPSAoZGF0YXNldCRzMTIzcGM0ICE9IGRhdGFzZXQkczEyM3BjNF9tZWFuKQ0KDQojbWF0Y2ggYWRkaXRpb25hbCBkYXRhIG9uIGNyaXNpcyBBU0MNCiN0aGVzZSBkYXRhIGhhdmUgYmVlbiBhZGRlZCBpbiBhIGxhdGVyIHBoYXNlIA0KZHV1ciA8LSByZWFkLmNzdjIoImRhdGEvQWRyZXNzZW4gYWxsZSBBWkNzXzE3MDIyMDE3LmNzdiIpDQpuYW1lcyhkdXVyKQ0KZHV1ciA8LSBkdXVyWyxjKCJQQzQiLCAiU29vcnQiLCAiQ2FwX0dlbSIsICJEdXVyLnRvdC40LjExIildDQpuYW1lcyhkdXVyKSA8LSBjKCJwYzQiLCAic29vcnQiLCAiY2FwIiwgImR1dXIiKQ0KZHV1ciA8LSBkdXVyW2R1dXIkc29vcnQ9PTMsXQ0Kc29ydCh1bmlxdWUoZHV1ciRwYzRbZHV1ciRjYXA+MF0pKQ0KDQojd2UgYXJlIG11bHRpcGx5aW5nIGxlbmd0aCBvZiBzdGF5IHdpdGggbnVtYmVyIG9mIEFTDQpkdXVyJHMzX2FsdG9wIDwtIGR1dXIkZHV1ciAqIGR1dXIkY2FwDQpkdXVyMiA8LSBhZ2dyZWdhdGUoZHV1clssYygiY2FwIiwgImR1dXIiLCAiczNfYWx0b3AiKV0sIGJ5PWxpc3QoZHV1ciRwYzQpLCBGVU49c3VtKQ0KI2R1dXIyDQpuYW1lcyhkdXVyMilbMV0gPC0gYygicGM0IikNCg0KZGF0YXNldCA8LSBtZXJnZShkYXRhc2V0LCBkdXVyMiwgYWxsLng9VCkNCmRhdGFzZXQkZHV1cltpcy5uYShkYXRhc2V0JGR1dXIpXSA8LSAwDQpkYXRhc2V0JHMzX2FsdG9wW2lzLm5hKGRhdGFzZXQkczNfYWx0b3ApXSA8LSAwDQpkYXRhc2V0JGNhcFtpcy5uYShkYXRhc2V0JGNhcCldIDwtIDANCg0KI2FzeWx1bSBzZWVrZXJzIGluIGNyaXNpcyBjZW50ZXJzIHBlciAxMDAwIGluaGFiaXRhbnRzIHdlaWdodGVkIGJ5IGxlbmd0aCBvZiBzdGF5DQpkYXRhc2V0JHMzX2FsdG9wMiA8LSAxMDAwICogZGF0YXNldCRzM19hbHRvcCAvIChkYXRhc2V0JGludzIwMTRfcGM0ICogZGF0YXNldCRwYXV0bzIwMTRfcGM0KQ0KZGF0YXNldCRjYXAyIDwtIDEwMDAgKiBkYXRhc2V0JGNhcCAvIChkYXRhc2V0JGludzIwMTRfcGM0ICogZGF0YXNldCRwYXV0bzIwMTRfcGM0KQ0KZGF0YXNldCRzM19hbHRvcCA8LSAxMDAwICogZGF0YXNldCRzM19hbHRvcCAvIGRhdGFzZXQkaW53MjAxNF9wYzQNCmRhdGFzZXQkY2FwIDwtIDEwMDAgKiBkYXRhc2V0JGNhcCAvIGRhdGFzZXQkaW53MjAxNF9wYzQNCg0KDQpgYGANCg0KDQotLS0gIA0KDQojIyBBcHBlbmRpeCBBMSB7LnRhYnNldCAudGFic2V0LWZhZGV9DQoNCg0KSW4gb3VyIG1hbnVzY3JpcHQgd2UgZXhwbG9pdCB0aGUgcGFuZWwgZGVzaWduIG9mIG91ciBzYW1wbGUgYW5kIGFuYWx5emUgbmF0aXZlIER1dGNoIHJlc3BvbmRlbnRzIHdobyBwYXJ0aWNpcGF0ZWQgaW4gd2F2ZSAxICphbmQqIHdhdmUgMi4gKEluIG91ciBmaXhlZCBlZmZlY3RzIG1vZGVscyB3ZSBmdXJ0aGVyIHNlbGVjdCBvbiByZXNwb25kZW50cyB3aG8gY2hhbmdlZCB2b3RpbmcgaW50ZW50aW9uKS4gRm9sbG93aW5nIHRoZSBzdWdnZXN0aW9uIG9mIHJldmlld2VyIzEgV2UgaW52ZXN0aWdhdGVkIHRoZSBwb3NzaWJpbGl0eSB0aGF0IFBWViBzdXBwb3J0ZXJzIGluIHdhdmUgMSBhcmUgbW9yZSBtb3RpdmF0ZWQgdG8gYWNjZXB0IHRoZSBpbnZpdGF0aW9uIHRvIHRoZSAybmQgc3VydmV5IHRoYW4gbm9uLVBWViBzdXBwb3J0ZXJzLiBXZSB3b3VsZCBsaWtlIHRvIHBvaW50IG91dCB0aGF0IGlmIHRoaXMgdHlwZSBvZiBzZWxlY3Rpb24gb2NjdXJyZWQgb3VyIHJlc3VsdHMgd2lsbCBiZSBiaWFzZWQgKiphZ2FpbnN0Kiogb3VyIGZpbmRpbmdzLCBiZWNhdXNlIHdlIGFyZSB0aGVuIGxlc3MgbGlrZWx5IHRvIG9ic2VydmUgYW4gaW5jcmVhc2UgaW4gUFZWIHN1cHBvcnQgYmV0d2VlbiB3YXZlIDEgYW5kIHdhdmUgMi4gDQoNCg0KYGBge3J9DQojdGhpcyBpcyBvdXIgZGF0YSBpbiBsb25nIGZvcm1hdCwgYmVmb3JlIHdlIHNlbGVjdCBvbiBwYW5lbCBtZW1iZXJzDQpkYXRhX2F0dHJpdGlvbiA8LSBoYXZlbjo6cmVhZF9kdGEoJ2RhdGFcXGV2YXpjIGF0dHJpdGlvbiB2MTIwNDIwMTcuZHRhJykNCg0KdGFibGUoZGF0YV9hdHRyaXRpb24kdGlqZCkNCg0KI3dlIGNoZWNrIHdoZXRoZXIgcmVzcG9uZGVudHMgb2Ygd2F2ZTEgYWxzbyBwYXJ0aWNpcGF0ZWQgaW4gd2F2ZTINCmRhdGFfYXR0cml0aW9uJHcyX3BhcnRpY2lwYXRpb24gPC0gTkENCmRhdGFfYXR0cml0aW9uJHcyX3BhcnRpY2lwYXRpb25bZGF0YV9hdHRyaXRpb24kdGlqZD09MV0gPC0gZGF0YV9hdHRyaXRpb24kUGFuZWxpc3RJZFF1ZXN0aW9uW2RhdGFfYXR0cml0aW9uJHRpamQ9PTFdICVpbiUgZGF0YV9hdHRyaXRpb24kUGFuZWxpc3RJZFF1ZXN0aW9uW2RhdGFfYXR0cml0aW9uJHRpamQ9PTJdDQoNCiN3ZSBjaGVjayB3aGV0aGVyIHppcGNvZGVzIHdpbGwgZXhwZXJpZW5jZSBpbmNyZWFzZSBpbiBBU0MNCmRhdGFfYXR0cml0aW9uJHMxY2FwX3BjNGRpZnJlbCA8LSBkYXRhX2F0dHJpdGlvbiRzMWNhcF9wYzR0MnJlbCAtIGRhdGFfYXR0cml0aW9uJHMxY2FwX3BjNHQxcmVsDQpkYXRhX2F0dHJpdGlvbiRzMmNhcF9wYzRkaWZyZWwgPC0gZGF0YV9hdHRyaXRpb24kczJjYXBfcGM0dDJyZWwgLSBkYXRhX2F0dHJpdGlvbiRzMmNhcF9wYzR0MXJlbA0KZGF0YV9hdHRyaXRpb24kczNjYXBfcGM0ZGlmcmVsIDwtICBkYXRhX2F0dHJpdGlvbiRzM2NhcF9wYzR0MnJlbCAtIGRhdGFfYXR0cml0aW9uJHMzY2FwX3BjNHQxcmVsDQpkYXRhX2F0dHJpdGlvbiRzMTIzY2FwX3BjNGRpZnJlbCA8LSAgKGRhdGFfYXR0cml0aW9uJHMxY2FwX3BjNHQycmVsICsgZGF0YV9hdHRyaXRpb24kczJjYXBfcGM0dDJyZWwgKyBkYXRhX2F0dHJpdGlvbiRzM2NhcF9wYzR0MnJlbCkgLSAoZGF0YV9hdHRyaXRpb24kczFjYXBfcGM0dDFyZWwgKyBkYXRhX2F0dHJpdGlvbiRzMmNhcF9wYzR0MXJlbCArIGRhdGFfYXR0cml0aW9uJHMzY2FwX3BjNHQxcmVsKQ0KDQoNCmRhdGFfYXRfdDEgPC0gZGF0YV9hdHRyaXRpb25bZGF0YV9hdHRyaXRpb24kdGlqZD09MSxdDQpkYXRhX2F0X3QyIDwtIGRhdGFfYXR0cml0aW9uW2RhdGFfYXR0cml0aW9uJHRpamQ9PTIsXQ0KDQpgYGANCg0KIyMjIE1vZGVsIDEgIA0KDQpJcyBzdXBwb3J0IGZvciBQVlYgaW4gd2F2ZTEgcmVsYXRlZCB0byBwYXJ0aWNpcGF0aW9uIGluIHdhdmUgMj8gIA0KDQpgYGB7cn0NCm0xIDwtIGdsbSh3Ml9wYXJ0aWNpcGF0aW9uIH4gUFZWICwgZmFtaWx5PWJpbm9taWFsLCBkYXRhPWRhdGFfYXRfdDEpDQpzdW1tYXJ5KG0xKQ0KbG9nTGlrKG0xKQ0KYGBgDQoNClRoZSByZXN1bHRzIG9mIHRoaXMgdGVzdCBpbmRlZWQgc2hvd3MgdGhhdCBQVlYgc3VwcG9ydGVycyBpbiB3YXZlIDEgYXJlIG1vcmUgbGlrZWx5IHRvIHBhcnRpY2lwYXRlIGluIHdhdmUgMiB0aGFuIG5vbi1QVlYgc3VwcG9ydGVycyBpbiB3YXZlIDEuIFdlIGhlbmNlIGNvbmNsdWRlIHRoYXQgd2UgYXJlIGxpa2VseSB0byAqKnVuZGVyZXN0aW1hdGUqKiB0aGUgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gYW4gaW5jcmVhc2UgaW4gbG9jYWwgZXhwb3N1cmUgdG8gYXN5bHVtIHNlZWtlcnMgYW5kIHN1cHBvcnQgZm9yIHRoZSBQVlYuIA0KDQotLS0gIA0KDQojIyMgTW9kZWwgMiAgDQoNClBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgd2Ugd291bGQgbGlrZSB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHJlc3BvbmRlbnRzIG9mIFdhdmUgMSB3aG8gYXJlIGdvaW5nIHRvIGV4cGVyaWVuY2UgYW4gaW5jcmVhc2UgaW4gbG9jYWwgZXhwZXJpZW5jZSBhcmUgbW9yZSBsaWtlbHkgdG8gcGFydGljaXBhdGUgaW4gV2F2ZSAyLiANCg0KYGBge3J9DQoNCm0yIDwtIGdsbSh3Ml9wYXJ0aWNpcGF0aW9uIH4gczFjYXBfcGM0ZGlmcmVsICsgczJjYXBfcGM0ZGlmcmVsICsgczNjYXBfcGM0ZGlmcmVsLCBmYW1pbHk9Ymlub21pYWwsIGRhdGE9ZGF0YV9hdF90MSkNCnN1bW1hcnkobTIpDQpsb2dMaWsobTIpDQoNCmBgYA0KDQpUaGUgYW5zd2VyIGlzIE5PLiBUaGVyZSBpcyBubyBzZWxlY3Rpdml0eSB3aXRoIHJlc3BlY3QgdG8gb3VyICd0cmVhdG1lbnQnLCBpbmNyZWFzZWQgZXhwb3N1cmUgdG8gYXN5bHVtIHNlZWtlcnMuIE5vdCBpbiBnZW5lcmFsLCBhbmQgbm90IGFtb25nIHRoZSBQVlYgc3VwcG9ydGVycyBpbiB3YXZlIDEuIA0KDQoNCi0tLSAgDQoNCiMjIyBNb2RlbCAzIA0KDQpBbmQgaW4gcGFydGljdWxhciBpZiB0aGlzIGlzIHRoZSBjYXNlIGZvciBQVlYgc3VwcG9ydGVycyBpbiBXYXZlIDEuIA0KDQpgYGB7cn0NCg0KbTMgPC0gZ2xtKHcyX3BhcnRpY2lwYXRpb24gfiBzMWNhcF9wYzRkaWZyZWwqUFZWICsgczJjYXBfcGM0ZGlmcmVsKlBWViArIHMzY2FwX3BjNGRpZnJlbCpQVlYsIGZhbWlseT1iaW5vbWlhbCwgZGF0YT1kYXRhX2F0X3QxKQ0Kc3VtbWFyeShtMykNCmxvZ0xpayhtMykNCg0KYGBgDQoNCi0tLSAgDQoNCg0KDQoNCiMjIEFwcGVuZGl4IEEyIHsudGFic2V0IC50YWJzZXQtZmFkZX0NCg0KVW5mb3J0dW5hdGVseSwgaW4gUiBpdCBpcyBub3QgcG9zc2libGUgdG8gZXN0aW1hdGUgYSBmaXhlZCBlZmZlY3RzIG11bHRpbm9taWFsIGxvZ2l0IG1vZGVsLiANCndlIGhhdmUgdG8gc3dpdGNoIHRvIFNUQVRBLiBJIHdpbGwgdXNlIFIgdG8gY2FsbCBTdGF0YS4gDQoNClRvIHJlcGxpY2F0ZSB0aGlzIHBhcnQsIHBsZWFzZSBtYWtlIHN1cmUgdG8gaGF2ZSBTdGF0YSBpbnN0YWxsZWQgYW5kIHdpdGhpbiBzdGF0YSB0aGUgcGFja2FnZSBgZmVtbG9naXRgLg0KDQpQYXJ0eSBsYWJlbHM6ICANCg0KKiAxOiByaWdodC13aW5nICANCiogMjogYW50aS1lc3RhYmxpc2htZW50ICANCiogMzogZGVtb2JpbGl6ZWQgIA0KKiAwOiBvdGhlciAgDQoqIDQ6IFBWViAocmVmLmNhdC4pICANCg0KDQoNCiMjIyBUYWJsZSBBMS4gIA0KDQpTZXQgeW91ciBzdGF0YSBwYXRoIHdpdGggYGNob29zZVN0YXRhQmluKClgDQpgYGB7cn0NCnJlcXVpcmUoUlN0YXRhKQ0KZGF0YXNldF9zZWwgPC0gZGF0YXNldFtkYXRhc2V0JHNlbF9mZT09MSxdDQpkYXRhc2V0X3NlbGZlbSA8LSBkYXRhc2V0W2RhdGFzZXQkc2VsX2ZlbT09MSxdDQoNCnN0YXRhX3NyYyA8LSAnDQpmZW1sb2dpdCB2b3RlX3J3c3AgczFwYzQgczJwYzQgczNwYzQgdGlqZCB0aHJlYXQgY29udGFjdG53LCBncm91cChQYW5lbGlzdElkUXVlc3Rpb24pIGJhc2UoNCkgDQonDQpzdGF0YShzdGF0YV9zcmMsIGRhdGEuaW4gPSBkYXRhc2V0X3NlbGZlbSwgc3RhdGEudmVyc2lvbiA9IDE1LCBzdGF0YS5wYXRoID0gIlwiQzpcXFByb2dyYW0gRmlsZXMgKHg4NilcXFN0YXRhMTVcXFN0YXRhU0UtNjRcIiIpDQoNCg0KYGBgDQoNCi0tLSAgDQoNCiMjIyBDb25zdHJhaW50cw0KDQpXZSB0ZXN0ZWQgd2hldGhlciBlZmZlY3RzIHdlcmUgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgYWNyb3NzIGNob2ljZXMgd2l0aCBzZXR0aW5nIGNvbnN0cmFpbnRzLiBBbiBleGFtcGxlIG9mIGhvdyB3ZSBkaWQgdGhpcyBpcyBnaXZlbiBiZWxvdy4gDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0Kc3RhdGFfc3JjIDwtICcNCmNvbnMgNyBbMD0xXTogczJwYzQgDQpjb25zIDggWzE9Ml06IHMycGM0DQpjb25zIDkgWzI9M106IHMycGM0DQoNCmZlbWxvZ2l0IHZvdGVfcndzcCBzMXBjNCBzMnBjNCBzM3BjNCB0aWpkIHRocmVhdCBjb250YWN0bncsIGdyb3VwKFBhbmVsaXN0SWRRdWVzdGlvbikgYmFzZSg0KQ0KDQplc3RpbWF0ZXMgc3RvcmUgbTENCg0KZmVtbG9naXQgdm90ZV9yd3NwIHMxcGM0IHMycGM0IHMzcGM0IHRpamQgdGhyZWF0IGNvbnRhY3RudywgZ3JvdXAoUGFuZWxpc3RJZFF1ZXN0aW9uKSBiYXNlKDQpIGNvbnN0KDcvMTEpDQoNCmVzdGltYXRlcyBzdG9yZSBtMg0KDQpscnRlc3QgbTIgbTENCg0KJw0KDQoNCnN0YXRhKHN0YXRhX3NyYywgZGF0YS5pbiA9IGRhdGFzZXRfc2VsZmVtLCBzdGF0YS52ZXJzaW9uID0gMTUsIHN0YXRhLnBhdGggPSAiXCJDOlxcUHJvZ3JhbSBGaWxlcyAoeDg2KVxcU3RhdGExNVxcU3RhdGFTRS02NFwiIikNCg0KDQpgYGANCi0tLSAgDQoNCg0KIyMgQXBwZW5kaXggQTMgey50YWJzZXQgLnRhYnNldC1mYWRlfQ0KDQojIyMgb3JpZ2luYWwgcmVzdWx0cw0KDQpgYGB7ciwgcmVzdWx0cz0iaG9sZCJ9DQpyZXF1aXJlKHN1cnZpdmFsKQ0KZXZfc2VsIDwtIGRhdGFzZXRbZGF0YXNldCRzZWxfZmU9PTEsXQ0KZXZfc2VsMiA8LSBldl9zZWxbZXZfc2VsJHRpamQ9PTEsXQ0KDQojbmVlZCB0byBtdWx0aXBseSBfYWZ3IHdpdGggMiAodGh1cyBiZWNvbWVzIHQyLXQxIChGaXJzdCBkaWZmZXJlbmNlIGRlc2lnbiksIGluc3RlYWQgb2YgdDIgLSBtZWFuKHQyLHQxKSAoZml4ZWQgZWZmZWN0cyBkZXNpZ24pDQpldl9zZWwyJHMxMjNwYzRfYWZ3IDwtIDIqZXZfc2VsMiRzMTIzcGM0X2Fmdw0KZXZfc2VsMiRzMXBjNF9hZncgPC0gMipldl9zZWwyJHMxcGM0X2Fmdw0KZXZfc2VsMiRzMnBjNF9hZncgPC0gMipldl9zZWwyJHMycGM0X2Fmdw0KZXZfc2VsMiRzM3BjNF9hZncgPC0gMipldl9zZWwyJHMzcGM0X2Fmdw0KZXZfc2VsMiR0aHJlYXRfYWZ3IDwtIDIqZXZfc2VsMiR0aHJlYXRfYWZ3DQpldl9zZWwyJGNvbnRhY3Rud19hZncgPC0gMipldl9zZWwyJGNvbnRhY3Rud19hZncNCg0KI3JvYnVzdG5lc3MgY2hlY2sgd2l0aCBuZXdseSBtYXRjaGVkIGNyaXNpcyBkYXRhLiANCm0xX2FsdDFlIDwtIGdsbSh5X3B2diB+IHMxMjNwYzRfYWZ3ICwgZGF0YT1ldl9zZWwyLCBmYW1pbHk9Ymlub21pYWwpDQptMV9hbHQyZSA8LSBnbG0oeV9wdnYgfiBzMXBjNF9hZncgKyBzMnBjNF9hZncgKyBjYXAgLCBkYXRhPWV2X3NlbDIsIGZhbWlseT1iaW5vbWlhbCkNCm0xX2FsdDNlIDwtIGdsbSh5X3B2diB+IHMxcGM0X2FmdyArIHMycGM0X2FmdyArIGNhcCArIGNvbnRhY3Rud19hZncgKyB0aHJlYXRfYWZ3ICwgZGF0YT1ldl9zZWwyLCBmYW1pbHk9Ymlub21pYWwpDQojc3VtbWFyeShtMV9hbHQxZSkNCiNzdW1tYXJ5KG0xX2FsdDJlKQ0Kc3VtbWFyeShtMV9hbHQzZSkNCiN2ZXJ5IHNtYWxsIGNoYW5nZXMsIGR1ZSB0byAzIGFkZGl0aW9uYWwgbWF0Y2hlZCB6aXBjb2Rlcw0KDQpgYGANCg0KLS0tICANCg0KIyMjIHRpbWUgaGV0ZXJvZ2VuZWl0eSBpbiBleHBvc3VyZQ0KDQotIENvbmNsdXNpb246IGl0IGlzIG5vdCBleHBvc3VyZSAobnVtYmVyIG9mIGFzeWx1bSBzZWVrZXJzIG11bHRpcGxpZWQgYnkgZGF5cyBpbiB6aXBjb2RlKSB0aGF0IGluY3JlYXNlcyBzdXBwb3J0LiANCmBgYHtyfQ0KI3JvYnVzdG5lc3MgY2hlY2sgd2l0aCB0aW1lIGhldGVyb2dlbmVpdHkNCm0xX2FsdDFjIDwtIGdsbSh5X3B2diB+IHMxMjNwYzRfYWZ3ICwgZGF0YT1ldl9zZWwyLCBmYW1pbHk9Ymlub21pYWwpDQptMV9hbHQyYyA8LSBnbG0oeV9wdnYgfiBzMXBjNF9hZncgICsgczJwYzRfYWZ3ICArIHMzX2FsdG9wICwgZGF0YT1ldl9zZWwyLCBmYW1pbHk9Ymlub21pYWwpDQptMV9hbHQzYyA8LSBnbG0oeV9wdnYgfiBzMXBjNF9hZncgICsgczJwYzRfYWZ3ICArIHMzX2FsdG9wICsgY29udGFjdG53X2FmdyArIHRocmVhdF9hZncgLCBkYXRhPWV2X3NlbDIsIGZhbWlseT1iaW5vbWlhbCkNCiNzdW1tYXJ5KG0xX2FsdDFjKQ0KI3N1bW1hcnkobTFfYWx0MmMpDQpzdW1tYXJ5KG0xX2FsdDNjKQ0KYGBgDQoNCi0tLSAgDQoNCiMjIyBjb250cm9sbGluZyBmb3IgZGF5cyBjcmlzaXMgQVNDIHdlcmUgdXNlZCAgDQoNCi0gQ29uY2x1c2lvbiAxOiB0aGUgbG9uZ2VyIGNyaXNpcyBBU0Mgd2VyZSB1c2VkLCB0aGUgbGVzcyBsaWtlbHkgdGhhdCBQVlYgc3VwcG9ydCBpbmNyZWFzZWQuICANCi0gQ29uY2x1c2lvbiAyOiB0aGUgbGFyZ2VyIHRoZSBjcmlzaXMgQVNDLCB0aGUgbW9yZSBsaWtlbHkgdGhhdCBQVlYgc3VwcG9ydCBpbmNyZWFzZWQuICANCi0gQ29uY2x1c2lvbiAzOiBicmllZiBhbmQgbGFyZ2UgaW5mbHV4IG9mIGFzeWx1bSBzZWVrZXJzIGluIGNyaXNpcyBBU0MgaW5jcmVhc2Ugc3VwcG9ydCBmb3IgUFZWICANCg0KYGBge3J9DQojcm9idXN0bmVzcyBjaGVjayB3aXRoIHRpbWUgb25seSwgbm90IHNob3duIGluIG1hbnVzY3JpcHQNCm0xX2FsdDNjMiA8LSBnbG0oeV9wdnYgfiBzMXBjNF9hZncgICsgczJwYzRfYWZ3ICArIGR1dXIgKyBjb250YWN0bndfYWZ3ICsgdGhyZWF0X2FmdyAsIGRhdGE9ZXZfc2VsMiwgZmFtaWx5PWJpbm9taWFsKQ0KDQojY29udHJvbGxpbmcgZm9yIGRheXMgY3Jpc2lzIEFTQyB3ZXJlIHVzZWQuIA0KbTFfYWx0NGMyIDwtIGdsbSh5X3B2diB+IHMxcGM0X2FmdyAgKyBzMnBjNF9hZncgKyBzM3BjNF9hZncgICsgZHV1ciArIGNvbnRhY3Rud19hZncgKyB0aHJlYXRfYWZ3ICwgZGF0YT1ldl9zZWwyLCBmYW1pbHk9Ymlub21pYWwpDQoNCiNzdW1tYXJ5KG0xX2FsdDNjMikNCnN1bW1hcnkobTFfYWx0NGMyKQ0KDQpgYGANCg0KDQotLS0gIA0KDQojIyMgYmluYXJpemF0aW9uIG9mIGV4cG9zdXJlICh0cmVhdG1lbnQgZWZmZWN0KSAgDQoNCi0gQ29uY2x1c2lvbjogSXQgaXMgbm90IHdoZXRoZXIgdGhlcmUgd2FzIGFuIGluZmx1eC4gVGhlIHNpemUgb2YgdGhlIGluZmx1eCBtYXR0ZXJzLiAgICANCg0KYGBge3J9DQpldl9zZWwyJHRyZWF0bWVudCA8LSBldl9zZWwyJHMxMjNwYzRfYWZ3PjANCmV2X3NlbDIkdHJlYXRtZW50czEgPC0gZXZfc2VsMiRzMXBjNF9hZnc+MA0KZXZfc2VsMiR0cmVhdG1lbnRzMiA8LSBldl9zZWwyJHMycGM0X2Fmdz4wDQpldl9zZWwyJHRyZWF0bWVudHMzIDwtIGV2X3NlbDIkczNwYzRfYWZ3PjANCm0xX2FsdDFiIDwtIGdsbSh5X3B2diB+IHRyZWF0bWVudCAsIGRhdGE9ZXZfc2VsMiwgZmFtaWx5PWJpbm9taWFsKQ0KbTFfYWx0MmIgPC0gZ2xtKHlfcHZ2IH4gdHJlYXRtZW50czEgKyB0cmVhdG1lbnRzMiArIHRyZWF0bWVudHMzICwgZGF0YT1ldl9zZWwyLCBmYW1pbHk9Ymlub21pYWwpDQptMV9hbHQzYiA8LSBnbG0oeV9wdnYgfiB0cmVhdG1lbnRzMSArIHRyZWF0bWVudHMyICsgdHJlYXRtZW50czMgKyBjb250YWN0bndfYWZ3ICsgdGhyZWF0X2FmdyAsIGRhdGE9ZXZfc2VsMiwgZmFtaWx5PWJpbm9taWFsKQ0KI3N1bW1hcnkobTFfYWx0MWIpDQojc3VtbWFyeShtMV9hbHQyYikNCnN1bW1hcnkobTFfYWx0M2IpDQoNCmBgYA0KDQotLS0gIA0KDQoNCiMjIyBleHBvc3VyZSBhdCBtdW5pY2lwYWxpdHkgbGV2ZWwgIA0KDQpUaGlzIG9uZSBpcyBub3Qgc2hvd24gaW4gbWFudXNjcmlwdC4gVGhlcmUgaXMgYSBkaXNjdXNzaW9uIGluIHRoZSBsaXRlcmF0dXJlIGF0IHdoaWNoIGdlb2dyYXBoaWNhbCBzY2FsZSB3ZSBjb3VsZCBleHBlY3QgJ2NvbnRleHQgZWZmZWN0cycuIFRoZSBjcmlzaXMgY2VudGVycyB3ZXJlIGEgdmVyeSBsb2NhbCBwaGVub21lbm9uLiBXZSB0aHVzIGRvIG5vdCBleHBlY3QgZWZmZWN0cyBhdCBtdW5pY2lwYWxpdHkgbGV2ZWwuIE1vc3QgcmVzaWRlbnRzIHdpbGwgbm90IGJlIGF3YXJlIG9mIGNyaXNpcyBjZW50ZXJzLiBBdCB0aGUgbXVuaWNpcGFsaXR5IGxldmVsIHRoZSBkaXNjdXNzaW9uIHdhcyBtb3JlIGZvY3VzZWQgb24gbmV3IHRlbXBvcmFyeSBjZW50ZXJzLiAgDQogIA0KLSBDb25jbHVzaW9uOiBBdCB0aGUgbXVuaWNpcGFsaXR5LWxldmVsIGFuIGluY3JlYXNlIGluIGFzeWx1bSBzZWVrZXJzIGluIHRlbXBvcmFyeSBjZW50ZXJzIGluY3JlYXNlcyBzdXBwb3J0IGZvciB0aGUgUFZWLiAgDQoNCg0KYGBge3J9DQoNCiNyb2J1c3RuZXNzIGNoZWNrIHdpdGggZXhwb3N1cmUgb24gbXVuaWNpcGFsaXR5IGxldmVsIA0KZXZfc2VsMiRzMTIzZ2NfYWZ3IDwtIDEwMDAgKiAoZXZfc2VsMiRzMWNhcF9nY3QyICsgZXZfc2VsMiRzMmNhcF9nY3QyICsgZXZfc2VsMiRzM2NhcF9nY3QyIC0gZXZfc2VsMiRzMWNhcF9nY3QxIC0gZXZfc2VsMiRzMmNhcF9nY3QxIC0gZXZfc2VsMiRzM2NhcF9nY3QxKS9ldl9zZWwyJGludzIwMTRfZ2MNCmV2X3NlbDIkczFnY19hZncgPC0gMTAwMCAqIChldl9zZWwyJHMxY2FwX2djdDIgLSBldl9zZWwyJHMxY2FwX2djdDEpL2V2X3NlbDIkaW53MjAxNF9nYw0KZXZfc2VsMiRzMmdjX2FmdyA8LSAxMDAwICogKGV2X3NlbDIkczJjYXBfZ2N0MiAtIGV2X3NlbDIkczJjYXBfZ2N0MSkvZXZfc2VsMiRpbncyMDE0X2djDQpldl9zZWwyJHMzZ2NfYWZ3IDwtIDEwMDAgKiAoZXZfc2VsMiRzM2NhcF9nY3QyIC0gZXZfc2VsMiRzM2NhcF9nY3QxKS9ldl9zZWwyJGludzIwMTRfZ2MNCg0KDQptMV9hbHQxZCA8LSBnbG0oeV9wdnYgfiBzMTIzZ2NfYWZ3ICwgZGF0YT1ldl9zZWwyLCBmYW1pbHk9Ymlub21pYWwpDQptMV9hbHQyZCA8LSBnbG0oeV9wdnYgfiBzMWdjX2FmdyAgKyBzMmdjX2FmdyAgKyBzM2djX2FmdyAsIGRhdGE9ZXZfc2VsMiwgZmFtaWx5PWJpbm9taWFsKQ0KbTFfYWx0M2QgPC0gZ2xtKHlfcHZ2IH4gczFnY19hZncgICsgczJnY19hZncgICsgczNnY19hZncgKyBjb250YWN0bndfYWZ3ICsgdGhyZWF0X2FmdyAsIGRhdGE9ZXZfc2VsMiwgZmFtaWx5PWJpbm9taWFsKQ0KI3N1bW1hcnkobTFfYWx0MWQpDQojc3VtbWFyeShtMV9hbHQyZCkNCnN1bW1hcnkobTFfYWx0M2QpDQpgYGANCiANCi0tLSAgDQoNCiMjIyB3ZWlnaHRlZCBzYW1wbGUNCg0KTGV0IHVzIGNvbnN0cnVjdCBzYW1wbGUgd2VpZ2h0cyBmb3IgdGhlIGZpeGVkIGVmZmVjdHMgc2FtcGxlLiBXZSBzaG93IGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgcHJlLSBhbmQgcG9zdC13ZWlnaHRpbmcgaW4gQXBwZW5kaXggNC4gDQoNCmBgYHtyLCByZXN1bHRzPSAnaG9sZCd9DQpyZXF1aXJlKGFuZXNyYWtlKQ0KZXZfc2VsIDwtIGRhdGFzZXRbZGF0YXNldCRzZWxfZmU9PTEsXQ0KZXZfc2VsMiA8LSBldl9zZWxbZXZfc2VsJHRpamQ9PTEsXQ0KDQojbmVlZCB0byBtdWx0aXBseSBfYWZ3IHdpdGggMiAodGh1cyBiZWNvbWVzIHQyLXQxIChGaXJzdCBkaWZmZXJlbmNlIGRlc2lnbiksIGluc3RlYWQgb2YgdDIgLSBtZWFuKHQyLHQxKSAoZml4ZWQgZWZmZWN0cyBkZXNpZ24pDQpldl9zZWwyJHMxMjNwYzRfYWZ3IDwtIDIqZXZfc2VsMiRzMTIzcGM0X2Fmdw0KZXZfc2VsMiRzMXBjNF9hZncgPC0gMipldl9zZWwyJHMxcGM0X2Fmdw0KZXZfc2VsMiRzMnBjNF9hZncgPC0gMipldl9zZWwyJHMycGM0X2Fmdw0KZXZfc2VsMiRzM3BjNF9hZncgPC0gMipldl9zZWwyJHMzcGM0X2Fmdw0KZXZfc2VsMiR0aHJlYXRfYWZ3IDwtIDIqZXZfc2VsMiR0aHJlYXRfYWZ3DQpldl9zZWwyJGNvbnRhY3Rud19hZncgPC0gMipldl9zZWwyJGNvbnRhY3Rud19hZncNCg0KDQojQUREIFdFSUdIVFMgVE8gRGF0YQ0KI21ha2UgY2FzZWlkbg0KZXZfc2VsMiRjYXNlaWRuIDwtIDE6bGVuZ3RoKGV2X3NlbDJbLDFdKQ0KDQpOIDwtIGxlbmd0aChldl9zZWwyWywxXSkNCg0KI01BS0UgVEFSR0VUIFZBTFVFUw0KI0dlc2xhY2h0DQpnZW5kZXJfdyA8LSBjKDAuNTAzLDAuNDk3KSAjIHZyb3V3IC0gbWFuDQoNCiNBZ2U6IDNjYXRzDQphZ2VfdyA8LSBjKDAuMjM4LDAuMzQ0LDAuNDE4KSAjMTgtMzUsMzUtNTUsNTUrDQpuYW1lcyhhZ2VfdykgPC0gYygiYWdlMSIsICJhZ2UyIiwgImFnZTMiKQ0KDQojT3BsOiAzY2F0cw0KZWR1Y193IDwtIGMoMC4zMjMsMC4zOTMsMC4yODQpICNiYXNpcy92bWJvL21ibzEsbWJvMi00L0hWL1ZXTyxIQk8vV08gDQpuYW1lcyhlZHVjX3cpIDwtIGMoIm9wbDEiLCAib3BsMiIsICJvcGwzIikNCg0KdGFyZ2V0cyA8LSBsaXN0KGdlbmRlcl93LGFnZV93LCBlZHVjX3cpIA0KbmFtZXModGFyZ2V0cykgPC0gYygiZ2VuZGVyX3ciLCJhZ2VfdyIsICJlZHVjX3ciKSANCg0KI2NoZWNrIHZhcmlhYmxlcyBpbiBkYXRhDQojdGFibGUoZXZfc2VsMiRnZW5kZXIsIHVzZU5BPSJhbHdheXMiKSAjbWFuPTENCmV2X3NlbDIkZ2VuZGVyX3cgPC0gYXMubG9naWNhbChldl9zZWwyJGdlbmRlcikNCiN0YWJsZShldl9zZWwyJGdlbmRlcl93LCB1c2VOQT0iYWx3YXlzIikNCg0KI2FnZTogM2NhdHMNCiN0YWJsZShldl9zZWwyJGFnZSwgdXNlTkE9ImFsd2F5cyIpICMxOC0zNSwzNS01NSw1NSsNCmV2X3NlbDIkYWdlX3cgPC0gTkENCmV2X3NlbDIkYWdlX3dbZXZfc2VsMiRhZ2U8PTM1XSA8LSAxDQpldl9zZWwyJGFnZV93W2V2X3NlbDIkYWdlPjM1ICYgZXZfc2VsMiRhZ2U8PTU1XSA8LSAyDQpldl9zZWwyJGFnZV93W2V2X3NlbDIkYWdlPjU1XSA8LSAzIA0KZXZfc2VsMiRhZ2VfdyA8LSBhcy5mYWN0b3IoZXZfc2VsMiRhZ2VfdykNCmxldmVscyhldl9zZWwyJGFnZV93KSA8LSBjKCJhZ2UxIiwgImFnZTIiLCAiYWdlMyIpDQojdGFibGUoZXZfc2VsMiRhZ2VfdywgdXNlTkE9ImFsd2F5cyIpDQoNCiNPcGw6IDNjYXRzDQojdGFibGUoZXZfc2VsMiRlZHVjLCB1c2VOQT0iYWx3YXlzIikgDQpldl9zZWwyJGVkdWNfdyA8LSBOQQ0KZXZfc2VsMiRlZHVjX3dbZXZfc2VsMiRlZHVjPD04XSA8LSAxDQpldl9zZWwyJGVkdWNfd1tldl9zZWwyJGVkdWM+IDggJiBldl9zZWwyJGVkdWM8PTEyXSA8LSAyDQpldl9zZWwyJGVkdWNfd1tldl9zZWwyJGVkdWM+MTJdIDwtIDMNCmV2X3NlbDIkZWR1Y193IDwtICBhcy5mYWN0b3IoZXZfc2VsMiRlZHVjX3cpDQpsZXZlbHMoZXZfc2VsMiRlZHVjX3cpIDwtIGMoIm9wbDEiLCAib3BsMiIsICJvcGwzIikNCiN0YWJsZShldl9zZWwyJGVkdWNfdywgdXNlTkE9ImFsd2F5cyIpIA0KDQojIEVkdWNhdGlvbiAoeWVhcnMgb2YgZWR1Y2F0aW9uIHRoYXQgY29uc3RpdHV0ZSB0aGUgc2hvcnRlc3Qgcm91dGUgdG8gb2J0YWluIGEgdW5pdmVyc2l0eSBkZWdyZWUuIChBZnRlciB0aGlzIGNvZGluZywgYWxsIHZhbHVlcyBhcmUgc3VidHJhY3RlZCBmcm9tIHRoZSBtYXhpbXVtIHllYXJzIG9mIHNjaG9vbGluZyBuZWNlc3NhcnkgdG8gb2J0YWluIGEgdW5pdmVyc2l0eSBncmFkZSkpDQojKG9wbDEpIDUgbGFnZXJlIHNjaG9vbCBub3QgZmluaXNoZWQgKDR5cnMpIC9sYWdlcmUgc2Nob29sICg2eXJzKSANCiMob3BsMSkgNyBsYm8sIHZtYm8ta2IvYmJsICg2LDV5cnMpIC9tYXZvLCB2bWJvLXRsICg4eXJzKSANCiMob3BsMikgMTEgaGF2byAoMTB5cnMpIC8gdndvL2d5bW5hc2l1bSAoMTJ5cnMpDQojKG9wbDIpIDksNSBtYm8ta29ydCAoa21ibykgKDgsNXlycykgL21iby10dXNzZW4vbGFuZyAobWJvKSAoMTAsNXlycykgDQojKG9wbDMpIDE0IGhibyAoMTR5cnMpIA0KIyhvcGwzKSAxNiw1IHVuaXZlcnNpdGVpdCAoYmFjaGVsb3JtYXN0ZXIsIGRvY3RvcmFhbCkoMTYsNSkNCg0KI21ha2Ugd2VpZ2h0cyANCndlaWdodGVkIDwtIGFuZXNyYWtlKGlucHV0dGVyPXRhcmdldHMsIGRhdGFmcmFtZT1ldl9zZWwyLCBjaG9vc2VtZXRob2Q9InRvdGFsIixjYXNlaWQ9ZXZfc2VsMiRjYXNlaWRuLGNhcCA9IDMsIHBjdGxpbT01LCB2ZXJib3NlPUZBTFNFKQ0KdGVzdCA8LSB3ZWlnaHRhc3Nlc3ModGFyZ2V0cywgZXZfc2VsMiwgd2VpZ2h0ZWQkd2VpZ2h0dmVjKQ0KI3Rlc3QNCg0KIyB0YWJsZShldl9zZWwyJGVkdWMpDQojIG9wbHAgPC0gdGVzdCRlZHVjX3dbYygxOjMpLDFdKk4NCiMgb3BsdyA8LSB0ZXN0JGVkdWNfd1tjKDE6MyksNF0NCiMgb3BscyA8LSB0YWJsZShldl9zZWwyJGVkdWNfdykNCiMgdGVzdDIgPC0gbWF0cml4KGMob3BscCwgb3Bsdywgb3BscyksIGJ5cm93PVQsIG5yb3c9MykNCiMgZGltbmFtZXModGVzdDIpIDwtIGxpc3Qod2VpZ2h0eXBlPWMoInBvcHVsYXRpb24iLCJ3ZWlnaHRlZCBzYW1wbGUiLCAib3JpZ2luYWwgc2FtcGxlIiksb3BsPWMoImxvdyIsIm1lZGl1bSIsImhpZ2giKSkNCiMgdGVzdDINCiMgY2hpc3EudGVzdCh0ZXN0MlsxOjIsXSkNCiMgDQojIGFnZXAgPC0gdGVzdCRhZ2Vfd1tjKDE6MyksMV0qTg0KIyBhZ2V3IDwtIHRlc3QkYWdlX3dbYygxOjMpLDRdDQojIHRlc3QyIDwtIG1hdHJpeChjKGFnZXAsIGFnZXcpLCBieXJvdz1ULCBucm93PTIpDQojIGRpbW5hbWVzKHRlc3QyKSA8LSBsaXN0KHdlaWdodHlwZT1jKCJwIiwidyIpLGFnZT1jKCIxIiwiMiIsIjMiKSkNCiMgdGVzdDINCiMgY2hpc3EudGVzdCh0ZXN0MikNCiMgDQojIGdlc2xwIDwtIHRlc3QkZ2VuZGVyX3dbYygxOjIpLDFdKk4NCiMgZ2VzbHcgPC0gdGVzdCRnZW5kZXJfd1tjKDE6MiksNF0NCiMgdGVzdDIgPC0gbWF0cml4KGMoZ2VzbHAsIGdlc2x3KSwgYnlyb3c9VCwgbnJvdz0yKQ0KIyBkaW1uYW1lcyh0ZXN0MikgPC0gbGlzdCh3ZWlnaHR5cGU9YygicCIsInciKSxhZ2U9YygidiIsIm0iKSkNCiMgdGVzdDINCiMgY2hpc3EudGVzdCh0ZXN0MikNCg0KZXZfc2VsMiA8LSBjYmluZChldl9zZWwyLCB3ZWlnaHRlZCR3ZWlnaHR2ZWMpDQpuYW1lcyhldl9zZWwyKVtuYW1lcyhldl9zZWwyKT09IndlaWdodGVkJHdlaWdodHZlYyJdIDwtICJ3ZWlnaHR2ZWMzIg0KDQpgYGANCg0KQW5kIGxldCB1cyBwZXJmb3JtIGEgcm9idXN0bmVzcyBjaGVjayBvbiB0aGUgd2VpZ2h0ZWQgc2FtcGxlLiANCg0KYGBge3J9DQpyZXF1aXJlKHN1cnZleSkNCg0KZGVzMiA8LSBzdnlkZXNpZ24oaWQgPSB+MSwgIHdlaWdodHMgPSB+d2VpZ2h0dmVjMywgZGF0YSA9IGV2X3NlbDIpDQoNCiMgY2hlY2sgaWYgd2VpZ2hpbmcgZ2l2ZXMgY29ycmVjdCBtZWFuDQojIHN2eW1lYW4ofmdlbmRlciwgZGVzMikNCiMgeWVzIGl0IGRvZXMuIA0KDQpnbG0uc2FtcGxpbmcud2VpZ2h0czEgPC0gc3Z5Z2xtKHlfcHZ2IH4gczEyM3BjNF9hZncgLCBmYW1pbHkgPSBxdWFzaWJpbm9taWFsKCksIGRlc2lnbj1kZXMyKQ0KZ2xtLnNhbXBsaW5nLndlaWdodHMyIDwtIHN2eWdsbSh5X3B2diB+IHMxcGM0X2FmdyArIHMycGM0X2FmdyArIHMzcGM0X2FmdyAsIGZhbWlseSA9IHF1YXNpYmlub21pYWwoKSwgZGVzaWduPWRlczIpDQpnbG0uc2FtcGxpbmcud2VpZ2h0czMgPC0gc3Z5Z2xtKHlfcHZ2IH4gczFwYzRfYWZ3ICsgczJwYzRfYWZ3ICsgczNwYzRfYWZ3ICsgY29udGFjdG53X2FmdyArIHRocmVhdF9hZncsIGZhbWlseSA9IHF1YXNpYmlub21pYWwoKSwgZGVzaWduPWRlczIpDQoNCnN1bW1hcnkoZ2xtLnNhbXBsaW5nLndlaWdodHMzKQ0KDQoNCg0KYGBgDQoNCg0KLS0tIA0KDQojIyMgbWF0Y2hlZCBzYW1wbGUgIA0KDQpXZSBhbmFseXplIHdoZXRoZXIgcGVyc29ucyBhcmUgbW9yZSBsaWtlbHkgdG8gaGF2ZSB2b3RlZCBpbiBUaW1lMSBmb3IgUFZWIHRoYW4gYXQgVGltZTAuIEFsdGhvdWdoIHdlIHVzZSBhIGZpeGVkIGVmZmVjdHMgbW9kZWwgKHRodXMgZm9jdXMgb24gd2l0aGluIHBlcnNvbiBjaGFuZ2VzKSBhbmQgdGhlcmVieSBjb250cm9sIGZvciB0aW1lLXN0YWJsZSBoZXRlcm9nZW5laXR5LCB3ZSBjYW5ub3QgY29udHJvbCBmb3IgdGltZS12YXJ5aW5nIGhldGVyb2dlbmVpdHkuIEJlY2F1c2Ugb2YgcG9zc2libGUgcHJlLXRyZWF0bWVudCBkaWZmZXJlbmNlcyBhbW9uZyBpbmRpdmlkdWFscyAoYm90aCBtZWFzdXJlZCwgYW5kIHVubWVhc3VyZWQpLCB0aGUgY2F1c2FsIGVmZmVjdCBtYXkgYWxzbyBkaWZmZXIgYWNyb3NzIGluZGl2aWR1YWxzLg0KICANClRoZSBpZGVhIHdpdGggcHJlLXByb2Nlc3Npbmcgb3VyIGRhdGEgd2l0aCBhIG1hdGNoaW5nIHByb2NlZHVyZSBpcyB0aGF0IG91ciB0cmVhdGVkIGdyb3VwIGlzIGFzIHNpbWlsYXIgYXMgcG9zc2libGUgdG8gdGhlIGNvbnRyb2wgZ3JvdXAgYWZ0ZXIgbWF0Y2hpbmcgYW5kIHRoYXQgdGhlIHRyZWF0bWVudCBpcyBjbG9zZXIgdG8gYmVpbmcgaW5kZXBlbmRlbnQgdG8gKHVubWVhc3VyZWQgdGltZS12YXJ5aW5nKSBjb3ZhcmlhdGVzLiBBZnRlciBtYXRjaGluZyB3ZSBjYW4gYmUgbW9yZSBjb25maWRhbnQgdGhhdCB3ZSBoYXZlICdubyBvbW1pdHRlZCB2YXJpYWJsZSBiaWFzJy4gDQoNCg0KPiAiUmVjYWxsIHRoYXQgdW5kZXIgdGhlIHVzdWFsIGVjb25vbWV0cmljIGNvbmRpdGlvbnMgZm9yIG9taXR0ZWQgdmFyaWFibGUgYmlhcywgYSB2YXJpYWJsZSBYaSBtdXN0IGJlIGNvbnRyb2xsZWQgZm9yIGlmIGl0IGlzIGNhdXNhbGx5DQpwcmlvciB0byBUaSwgZW1waXJpY2FsbHkgcmVsYXRlZCB0byBUaSwgYW5kIGFmZmVjdHMgWWkgY29uZGl0aW9uYWwgb24gVGkuIElmIGluc3RlYWQgb25lIG9yIG1vcmUNCm9mIHRoZSB0aHJlZSBjb25kaXRpb25zIGRvIG5vdCBob2xkLCB0aGVuIFhpIG1heSBiZSBvbWl0dGVkIHdpdGhvdXQgYW55IHJlc3VsdGluZyBiaWFzDQooYWx0aG91Z2ggdGhlIHZhcmlhbmNlIG1heSBpbmNyZWFzZSkuIiAgDQoNCkBob19pbWFpX2tpbmdfc3R1YXJ0XzIwMDcgDQogIA0KV2UgZGVmaW5lIHRoZSB0cmVhdG1lbnQgYXMgemlwY29kZXMgdGhhdCBleHBlcmllbmNlZCBpbiBpbmNyZWFzZSBpbiBhc3lsdW0gc2Vla2VycyBpbiBBU0MuICBBbHRob3VnaCB3ZSBkZWZpbmUgYSBiaW5hcnkgdHJlYXRtZW50IHZhcmlhYmxlLCBpbiB0aGUgbW9kZWwgd2UgdXNlIHRoZSBjb250aW51b3VzICd0cmVhdG1lbnQnIChpLmUuIHRoZSBpbmNyZWFzZSBpbiBhc3lsdW0gc2Vla2VycyBwZXIgMTAwMCBuZWlnYmhvcmhvb2QgcmVzaWRlbnRzKSBhcyBwcmVkaWN0b3IuICAgDQoNCi0gQ29uY2x1c2lvbiAxOiB0aGUgYmluYXJ5IHRyZWF0bWVudCBpcyBub3Qgc2lnbmlmaWNhbnQuICANCi0gQ29uY2x1c2lvbiAyOiBpbiBhIG1hdGNoZWQgc2FtcGxlIHRoZSBvcmlnaW5hbGx5IHJlcG9ydGVkIGVzdGltYXRlcyBiZWNvbWUgc3Ryb25nZXIuIA0KDQpgYGB7ciwgcmVzdWx0cz0iaG9sZCJ9DQpyZXF1aXJlKCJNYXRjaEl0IikNCnJlcXVpcmUob3B0bWF0Y2gpDQoNCmV2X3NlbDIgPC0gZXZfc2VsW2V2X3NlbCR0aWpkPT0xLF0NCg0KI3N0YXJ0IHByZXByb2Nlc3NpbmcgZGF0YSAobWF0Y2hpbmcpDQojYmVjYXVzZSB3ZSBhbHNvIHdhbnQgdG8gbWF0Y2ggb24gZXRobmljIGRlbnNpdHkgb2YgTkIgYW5kIFNFUyBvZiBOQiBuZWVkIHRvIHJlbW92ZSBtaXNzaW5nIHZhbHVlcy4NCiN0YWJsZShldl9zZWwyJHBud2FsMjAxNF9wYzQsIHVzZU5BPSJhbHdheXMiKQ0KZXZfc2VsMiA8LSBldl9zZWwyWyFpcy5uYShldl9zZWwyJHBud2FsMjAxNF9wYzQpLF0NCiNsb3N0IDMgcmVzcG9uZGVudHMsIG5vIHRyZWF0ZWQNCiN0YWJsZShldl9zZWwyJHdvejIwMTJfcGM0LCB1c2VOQT0iYWx3YXlzIikNCmV2X3NlbDIgPC0gZXZfc2VsMlshKGV2X3NlbDIkd296MjAxMl9wYzQ9PTApLF0NCiNsb3N0IDEgcmVzcG9uZGVudHMsIG5vIHRyZWF0ZWQNCiN0YWtlIGxvZyBvZiBOQnNlcw0KZXZfc2VsMiRMTndveiA8LSBsb2coZXZfc2VsMiR3b3oyMDEyX3BjNCkNCnN1bW1hcnkoZXZfc2VsMiRMTndveikNCg0KI2RlZmluZSB0cmVhdG1lbnQgdmFyaWFibGU6IHdoZXRoZXIgdGhlcmUgaGFzIGJlZW4gYW4gaW5jcmVhc2UgaW4gdG90YWwgYXN5bHVtIHNlZWtlcnMuICANCmV2X3NlbDIkdHJlYXRtZW50IDwtIGV2X3NlbDIkczEyM3BjNF9hZnc+MA0KdGFibGUoZXZfc2VsMiR0cmVhdG1lbnQsIHVzZU5BPSJhbHdheXMiKQ0KIzExMSB0cmVhdGVkDQoNCiNkZWZpbmUgdHJlYXRtZW50IHZhcmlhYmxlMjogd2hldGhlciB0aGVyZSBoYXMgYmVlbiBhbiBpbmNyZWFzZSBpbiBhc3lsdW0gc2Vla2VycyBpbiBjcmlzaXMgY2VudGVycy4gIA0KZXZfc2VsMiR0cmVhdG1lbnQyIDwtIGV2X3NlbDIkczNwYzRfYWZ3PjANCnRhYmxlKGV2X3NlbDIkdHJlYXRtZW50MiwgdXNlTkE9ImFsd2F5cyIpDQojNzUgdHJlYXRlZA0KDQpldl9zZWwyJHRocmVhdF90MSA8LSBldl9zZWwyJHRocmVhdF9tZWFuIC0gZXZfc2VsMiR0aHJlYXRfYWZ3DQpldl9zZWwyJGNvbnRhY3Rud190MSA8LSBldl9zZWwyJGNvbnRhY3Rud19tZWFuIC0gZXZfc2VsMiRjb250YWN0bndfYWZ3DQoNCiNsZXQgdXNlIHNtYWxsZXIgZGF0YXNldCAodG8gcmVtb3ZlIG1pc3NpbmcgdmFsdWVzIGluIG5vbiByZWxldmFudCB2YXJzKQ0KZXZfc2VsMiA8LSBldl9zZWwyWyxjKCJ5X3B2diIsICJ0cmVhdG1lbnQiLCJ0cmVhdG1lbnQyIiwgInMxMjNwYzRfYWZ3IiwgInMxcGM0X2FmdyIsICJzMnBjNF9hZnciICwgInMzcGM0X2FmdyIgLCAiZ2VuZGVyIiwgImFnZSIsICJlZHVjIiwgImNvbnRhY3Rud19hZnciLCAidGhyZWF0X2FmdyIsICJjb250YWN0bndfdDEiICwgInRocmVhdF90MSIgLCAicG53YWwyMDE0X3BjNCIgLCAid296MjAxMl9wYzQiLCAiTE53b3oiKV0NCg0KDQptLm91dCA8LSBtYXRjaGl0KHRyZWF0bWVudCB+IGdlbmRlciArIHNjYWxlKGFnZSkgKyBzY2FsZShlZHVjKSArIHNjYWxlKGNvbnRhY3Rud190MSkgKyBzY2FsZSh0aHJlYXRfdDEpICsgc2NhbGUocG53YWwyMDE0X3BjNCkgKyBzY2FsZShMTndveiksIGRhdGE9ZXZfc2VsMikNCmRhdGFfbWF0Y2hlZCA8LSBtYXRjaC5kYXRhKG0ub3V0KQ0KDQojcXVpY2tseSBzZWUgZWZmZWN0IG9mIG1hdGNoaW5nDQpwcm9wLnRhYmxlKHRhYmxlKGV2X3NlbDIkdHJlYXRtZW50LCBldl9zZWwyJHlfcHZ2KSwgbWFyZ2luPTEpDQpwcm9wLnRhYmxlKHRhYmxlKGRhdGFfbWF0Y2hlZCR0cmVhdG1lbnQsIGRhdGFfbWF0Y2hlZCR5X3B2diksIG1hcmdpbj0xKQ0KI2NvbmNsdXNpb246IHRyZWF0ZWQgYXJlYXMgbGVzcyBsaWtlbHkgdG8gc2VlIGluY3JlYXNlIGluIHN1cHBvcnQgZm9yIFBWVg0Kc3VtbWFyeShnbG0oeV9wdnYgfiB0cmVhdG1lbnQsIGRhdGE9ZGF0YV9tYXRjaGVkLCBmYW1pbHk9Ymlub21pYWwpKQ0KIyBidXQgbm90IHNpZ25pZmljYW50DQoNCiNtMV9hbHRfbWF0Y2hlZDEgPC0gZ2xtKHlfcHZ2IH4gczEyM3BjNF9hZncgLCBkYXRhPWRhdGFfbWF0Y2hlZCwgZmFtaWx5PWJpbm9taWFsKQ0KI20xX2FsdF9tYXRjaGVkMiA8LSBnbG0oeV9wdnYgfiBzMXBjNF9hZncgKyBzMnBjNF9hZncgKyBzM3BjNF9hZncgLCBkYXRhPWRhdGFfbWF0Y2hlZCwgZmFtaWx5PWJpbm9taWFsKQ0KbTFfYWx0X21hdGNoZWQzIDwtIGdsbSh5X3B2diB+IHMxcGM0X2FmdyArIHMycGM0X2FmdyArIHMzcGM0X2FmdyArIGNvbnRhY3Rud19hZncgKyB0aHJlYXRfYWZ3LCBkYXRhPWRhdGFfbWF0Y2hlZCwgZmFtaWx5PWJpbm9taWFsKQ0KDQojc3VtbWFyeShtMV9hbHRfbWF0Y2hlZDEpDQojc3VtbWFyeShtMV9hbHRfbWF0Y2hlZDIpDQpzdW1tYXJ5KG0xX2FsdF9tYXRjaGVkMykNCmBgYA0KDQotLS0gIA0KDQoNCiMjIyBtYXRjaGVkIHNhbXBsZSAoYWx0ZXJuYXRpdmUgdHJlYXRtZW50KSAgDQoNClRoaXMgb25lIGlzIG5vdCBzaG93biBpbiBtYW51c2NyaXB0LiBXZSBub3cgZGVmaW5lIGEgYmluYXJ5IHRyZWF0bWVudCBiYXNlZCBvbiBhbiBpbmNyZWFzZSBpbiBjcmlzaXMgY2VudGVycy4gDQoNCmBgYHtyLCByZXN1bHRzPSJob2xkIn0NCg0KIyAjIyBsZXRzIG1hdGNoIG9uIGNyaXNpcyBjZW50ZXJzDQogbS5vdXQyIDwtIG1hdGNoaXQodHJlYXRtZW50MiB+IHNjYWxlKGdlbmRlcikgKyAgc2NhbGUoYWdlKSArIHNjYWxlKGVkdWMpICsgc2NhbGUoY29udGFjdG53X3QxKSArIHNjYWxlKHRocmVhdF90MSkgKyBzY2FsZShwbndhbDIwMTRfcGM0KSArIHNjYWxlKExOd296KSwgZGF0YT1ldl9zZWwyKQ0Kc3VtbWFyeShtLm91dDIpDQogZGF0YV9tYXRjaGVkMiA8LSBtYXRjaC5kYXRhKG0ub3V0MikNCg0KIyAjcXVpY2tseSBzZWUgZWZmZWN0IG9mIG1hdGNoaW5nDQogcHJvcC50YWJsZSh0YWJsZShldl9zZWwyJHRyZWF0bWVudDIsIGV2X3NlbDIkeV9wdnYpLCBtYXJnaW49MSkNCiBwcm9wLnRhYmxlKHRhYmxlKGRhdGFfbWF0Y2hlZDIkdHJlYXRtZW50MiwgZGF0YV9tYXRjaGVkMiR5X3B2diksIG1hcmdpbj0xKQ0KIyAjY29uY2x1c2lvbjogaW4gdHJlYXRlZCB6aXBjb2RlcyBzdHJvbmdlciBpbmNyZWFzZSBpbiBzdXBwb3J0IGZvciBQVlYNCiBzdW1tYXJ5KGdsbSh5X3B2diB+IHRyZWF0bWVudDIsIGRhdGE9ZGF0YV9tYXRjaGVkMiwgZmFtaWx5PWJpbm9taWFsKSkNCiNidXQgbm90IHNpZ25pZmljYW50LiANCiANCm0xX2FsdF9tYXRjaGVkMWIgPC0gZ2xtKHlfcHZ2IH4gczEyM3BjNF9hZncgLCBkYXRhPWRhdGFfbWF0Y2hlZDIsIGZhbWlseT1iaW5vbWlhbCkNCm0xX2FsdF9tYXRjaGVkMmIgPC0gZ2xtKHlfcHZ2IH4gczNwYzRfYWZ3ICwgZGF0YT1kYXRhX21hdGNoZWQyLCBmYW1pbHk9Ymlub21pYWwpDQptMV9hbHRfbWF0Y2hlZDNiIDwtIGdsbSh5X3B2diB+IHMzcGM0X2FmdyArIGNvbnRhY3Rud19hZncgKyB0aHJlYXRfYWZ3LCBkYXRhPWRhdGFfbWF0Y2hlZDIsIGZhbWlseT1iaW5vbWlhbCkNCiANCiNzdW1tYXJ5KG0xX2FsdF9tYXRjaGVkMmIpDQpzdW1tYXJ5KG0xX2FsdF9tYXRjaGVkM2IpDQojICNjb25jbHVzaW9uOiBtYXRjaGluZyBtYWtlcyBlZmZlY3Qgc3Ryb25nZXINCg0KDQpgYGANCg0KLS0tICANCg0KIyMgQXBwZW5kaXggQTQNCg0KVGhlIHdlaWdoaW5nIHN0YXRpc3RpY3MuIA0KDQpgYGB7cn0NCnRlc3QNCmBgYA0KLS0tICANCg0KDQojIyBBcHBlbmRpeCBBNSAgDQoNClRoZSBiYWxhbmNlIHN0YXRpc3RpY3MuDQoNCmBgYHtyfQ0Kc3VtbWFyeShtLm91dCkNCmBgYA0KDQotLS0gIA0KDQoNCiMjIEFwcGVuZGl4IEE2IHsudGFic2V0IC50YWJzZXQtZmFkZX0NCg0KVG8gb2J0YWluIERpRCBlc3RpbWF0b3JzLCB3ZSBlc3RpbWF0ZSBvdXIgZGljaG90b21vdXMgb3V0Y29tZSB2YXJpYWJsZSB3aXRoIGEgTGluZWFyIFByb2JhYmlsaXR5IE1vZGVsLiANCldlIHVzZSAiaWRlbnRpdHkiIGFzIGxpbmsgZnVuY3Rpb24gc2V0IHRoZSB2YXJpYW5jZSB0byAibXUoMS1tdSkiIChhcyBpbiB0aGUgYmlub21pYWwgZGlzdHJpYnV0aW9uKSBhbmQgd2UgYWxsb3cgZm9yIChwb3NzaWJsZSkgb3ZlcmRpc3BlcnNpb24uIFdlIHJlcG9ydCBjbHVzdGVyIGNvcnJlY3RlZCBzdGFuZGFyZCBlcnJvcnMsIHdpdGggaW5kaXZpZHVhbHMgYXMgY2x1c3RlcnMuIFRoZSBEaUQgbW9kZWwgaXMgZXN0aW1hdGVkIG9uIHRoZSAnaHlicmlkIHNhbXBsZScuIA0KDQoNCmBgYHtyfQ0KcmVxdWlyZShzYW5kd2ljaCkNCnJlcXVpcmUobG10ZXN0KQ0KZXYgPC0gZGF0YXNldA0KDQoNCiNCZWNhdXNlIHdlIGluY2x1ZGUgZXRobmljIGRlbnNpdHkgb2YgTkIgYW5kIFNFUyBvZiBOQiBuZWVkIGFzIHRpbWUtY29uc3RhbnQgY292YXJpYXRlcyB3ZSBoYXZlIHRvIHJlbW92ZSBtaXNzaW5nIHZhbHVlcy4gU2ltaWxhciB0byBvdXIgYW5hbHlzZXMgcmVwb3J0ZWQgaW4gdGhlIG1haW4gdGV4dC4gDQoNCnN1bShpcy5uYShldiRwbndhbDIwMTRfcGM0KSkNCmV2X3NlbDQgPC0gZXZbIWlzLm5hKGV2JHBud2FsMjAxNF9wYzQpLF0NCiNsb3N0IDkwIHJlc3BvbmRlbnRzDQoNCmV2X3NlbDQgPC0gZXZfc2VsNFshKGV2X3NlbDQkd296MjAxMl9wYzQ9PTApLF0NCiNsb3N0IDIyIHJlc3BvbmRlbnRzDQpldl9zZWw0IDwtIGV2X3NlbDRbIWlzLm5hKGV2X3NlbDQkd296MjAxMl9wYzQpLF0NCiNsb3N0IDMgcmVzcG9uZGVudHMNCg0KI2NlbnRlciB2YXJpYWJsZXMhIA0KZXZfc2VsNCRhZ2VfYyA8LSBldl9zZWw0JGFnZSAtIG1lYW4oZXZfc2VsNCRhZ2UpDQpldl9zZWw0JGVkdWNfYyA8LSBldl9zZWw0JGVkdWMgLSBtZWFuKGV2X3NlbDQkZWR1YykNCmV2X3NlbDQkcG53YWwyMDE0X3BjNF9jIDwtIGV2X3NlbDQkcG53YWwyMDE0X3BjNCAtIG1lYW4oZXZfc2VsNCRwbndhbDIwMTRfcGM0KQ0KZXZfc2VsNCR3b3oyMDEyX3BjNF9jIDwtIGV2X3NlbDQkd296MjAxMl9wYzQgLSBtZWFuKGV2X3NlbDQkd296MjAxMl9wYzQpDQoNCiNkaXZpZGUgdG8gaGVscCBlc3RpbWF0aW9uDQpldl9zZWw0JHdvejIwMTJfcGM0X2MgPC0gZXZfc2VsNCR3b3oyMDEyX3BjNF9jLzEwMA0KDQpldiA8LSBldl9zZWw0DQoNCiNkZWZpbmUgdHJlYXRtZW50cyENCiNmb3IgY29udGludW91cyB0cmVhdG1lbnQgdmFycyB3ZSBtdWx0aXBsZSB0aGUgZGV2aWF0aW9ucyBmcm9tIG1lYW4gZXhwb3N1cmUgd2l0aCAyDQoNCiN0cmVhdG1lbnQgKHRvdGFsIC0gYmluYXJ5KQ0KZXYkdHJlYXRtZW50X2RpZDFiIDwtIGlmZWxzZSgoZXYkczEyM3BjNF9hZnc+MCAmIGV2JHRpamQ9PTEpIHwgKGV2JHMxMjNwYzRfYWZ3PDAgJiBldiR0aWpkPT0wKSwgMSwgMCkNCg0KI3RyZWF0bWVudCAoY3Jpc2lzIC0gY29udGludW91cykNCmV2JHRyZWF0bWVudF9kaWQxYyA8LSAyICogaWZlbHNlKGV2JHRpamQ9PTEsIGV2JHMxMjNwYzRfYWZ3LCAtZXYkczEyM3BjNF9hZncpDQoNCiN0cmVhdG1lbnQgKGNyaXNpcyAtIGJpbmFyeSkNCmV2JHRyZWF0bWVudF9kaWQyYiA8LSBpZmVsc2UoKGV2JHMzcGM0X2Fmdz4wICYgZXYkdGlqZD09MSkgfCAoZXYkczNwYzRfYWZ3PDAgJiBldiR0aWpkPT0wKSwgMSwgMCkNCg0KI3RyZWF0bWVudCAoY3Jpc2lzIC0gY29udGludW91cykNCmV2JHRyZWF0bWVudF9kaWQyYyA8LSAyICogaWZlbHNlKGV2JHRpamQ9PTEsIGV2JHMzcGM0X2FmdywgLWV2JHMzcGM0X2FmdykNCg0KYGBgDQoNCg0KIyMjIHRyZWF0bWVudCAndG90YWwgZXhwb3N1cmUnIChiaW5hcnkpDQoNCmBgYHtyfQ0KDQojc3VtbWFyeShldiR3b3oyMDEyX3BjNF9jKQ0KZGlkX2xtIDwtIGxtKHlfcHZ2IH4gdHJlYXRtZW50X2RpZDFiICsgdGlqZCArIHRpamQ6dHJlYXRtZW50X2RpZDFiICsgZ2VuZGVyICsgYWdlX2MgKyBlZHVjX2MgKyBwbndhbDIwMTRfcGM0X2MgKyB3b3oyMDEyX3BjNF9jLCBkYXRhPWV2KSANCiNzdW1tYXJ5KGRpZF9sbSkNCiNyb3VuZChjb2VmdGVzdChkaWRfbG0sIHZjb3YgPSB2Y292Q0woZGlkX2xtLCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKSwgMykNCiNjb2VmKGRpZF9sbSkNCg0KI2RpZF9scG0gPC0gZ2xtKHlfcHZ2IH4gdHJlYXRtZW50X2RpZDFiICsgdGlqZCArIHRpamQ6dHJlYXRtZW50X2RpZDFiICsgZ2VuZGVyICsgYWdlX2MgKyBlZHVjX2MgKyBwbndhbDIwMTRfcGM0X2MgKyB3b3oyMDEyX3BjNF9jLCBmYW1pbHk9Ymlub21pYWwobGluaz0iaWRlbnRpdHkiKSwgZGF0YT1ldiwgc3RhcnQ9cm91bmQoY29lZihkaWRfbG0pLDIpKQ0KI3N1bW1hcnkoZGlkX2xwbSkNCiNyb3VuZChjb2VmdGVzdChkaWRfbHBtX2hldCwgdmNvdiA9IHZjb3ZDTChkaWRfbHBtX2hldCwgY2x1c3RlciA9IH4gUGFuZWxpc3RJZFF1ZXN0aW9uKSksIDMpDQoNCmRpZF9scG1faGV0IDwtIGdsbSh5X3B2diB+IHRyZWF0bWVudF9kaWQxYiArIHRpamQgKyB0aWpkOnRyZWF0bWVudF9kaWQxYiArIGdlbmRlciArIGFnZV9jICsgZWR1Y19jICsgcG53YWwyMDE0X3BjNF9jICsgd296MjAxMl9wYzRfYywgZmFtaWx5PXF1YXNpKGxpbms9ImlkZW50aXR5IiwgdmFyaWFuY2UgPSAibXUoMS1tdSkiKSwgZGF0YT1ldiwgIHN0YXJ0PXJvdW5kKGNvZWYoZGlkX2xtKSwyKSkgDQoNCiNzdW1tYXJ5KGRpZF9scG1faGV0KQ0Kcm91bmQoY29lZnRlc3QoZGlkX2xwbV9oZXQsIHZjb3YgPSB2Y292Q0woZGlkX2xwbV9oZXQsIGNsdXN0ZXIgPSB+IFBhbmVsaXN0SWRRdWVzdGlvbikpLCAzKQ0KYGBgDQoNCiMjIyMgcmVwZWF0IHdpdGhvdXQgY292YXJpYXRlcw0KDQpgYGB7cn0NCg0KZGlkX2xtIDwtIGxtKHlfcHZ2IH4gdHJlYXRtZW50X2RpZDFiICsgdGlqZCArIHRpamQ6dHJlYXRtZW50X2RpZDFiLCBkYXRhPWV2KSANCiNzdW1tYXJ5KGRpZF9sbSkNCiNyb3VuZChjb2VmdGVzdChkaWRfbG0sIHZjb3YgPSB2Y292Q0woZGlkX2xtLCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKSwgMykNCiNjb2VmKGRpZF9sbSkNCg0KI2RpZF9scG0gPC0gZ2xtKHlfcHZ2IH4gdHJlYXRtZW50X2RpZDFiICsgdGlqZCArIHRpamQ6dHJlYXRtZW50X2RpZDFiICsgZ2VuZGVyICsgYWdlX2MgKyBlZHVjX2MgKyBwbndhbDIwMTRfcGM0X2MgKyB3b3oyMDEyX3BjNF9jLCBmYW1pbHk9Ymlub21pYWwobGluaz0iaWRlbnRpdHkiKSwgZGF0YT1ldiwgc3RhcnQ9cm91bmQoY29lZihkaWRfbG0pLDIpKQ0KI3N1bW1hcnkoZGlkX2xwbSkNCiNyb3VuZChjb2VmdGVzdChkaWRfbHBtX2hldCwgdmNvdiA9IHZjb3ZDTChkaWRfbHBtX2hldCwgY2x1c3RlciA9IH4gUGFuZWxpc3RJZFF1ZXN0aW9uKSksIDMpDQoNCmRpZF9scG1faGV0IDwtIGdsbSh5X3B2diB+IHRyZWF0bWVudF9kaWQxYiArIHRpamQgKyB0aWpkOnRyZWF0bWVudF9kaWQxYiwgZmFtaWx5PXF1YXNpKGxpbms9ImlkZW50aXR5IiwgdmFyaWFuY2UgPSAibXUoMS1tdSkiKSwgZGF0YT1ldiwgIHN0YXJ0PXJvdW5kKGNvZWYoZGlkX2xtKSwyKSkgDQoNCiNzdW1tYXJ5KGRpZF9scG1faGV0KQ0Kcm91bmQoY29lZnRlc3QoZGlkX2xwbV9oZXQsIHZjb3YgPSB2Y292Q0woZGlkX2xwbV9oZXQsIGNsdXN0ZXIgPSB+IFBhbmVsaXN0SWRRdWVzdGlvbikpLCAzKQ0KYGBgDQoNCi0tLSAgDQoNCiMjIyB0cmVhdG1lbnQgJ3RvdGFsIGV4cG9zdXJlJyAoY29udGludW91cykNCg0KYGBge3J9DQoNCmRpZF9sbSA8LSBsbSh5X3B2diB+IHRyZWF0bWVudF9kaWQxYyArIHRpamQgKyB0aWpkOnRyZWF0bWVudF9kaWQxYyArIGdlbmRlciArIGFnZV9jICsgZWR1Y19jICsgcG53YWwyMDE0X3BjNF9jICsgd296MjAxMl9wYzRfYywgZGF0YT1ldikgDQojc3VtbWFyeShkaWRfbG0pDQojcm91bmQoY29lZnRlc3QoZGlkX2xtLCB2Y292ID0gdmNvdkNMKGRpZF9sbSwgY2x1c3RlciA9IH4gUGFuZWxpc3RJZFF1ZXN0aW9uKSksIDMpDQojY29lZihkaWRfbG0pDQoNCiNkaWRfbHBtIDwtIGdsbSh5X3B2diB+IHRyZWF0bWVudF9kaWQxYiArIHRpamQgKyB0aWpkOnRyZWF0bWVudF9kaWQxYiArIGdlbmRlciArIGFnZV9jICsgZWR1Y19jICsgcG53YWwyMDE0X3BjNF9jICsgd296MjAxMl9wYzRfYywgZmFtaWx5PWJpbm9taWFsKGxpbms9ImlkZW50aXR5IiksIGRhdGE9ZXYsIHN0YXJ0PXJvdW5kKGNvZWYoZGlkX2xtKSwyKSkNCiNzdW1tYXJ5KGRpZF9scG0pDQojcm91bmQoY29lZnRlc3QoZGlkX2xwbV9oZXQsIHZjb3YgPSB2Y292Q0woZGlkX2xwbV9oZXQsIGNsdXN0ZXIgPSB+IFBhbmVsaXN0SWRRdWVzdGlvbikpLCAzKQ0KDQpkaWRfbHBtX2hldCA8LSBnbG0oeV9wdnYgfiB0cmVhdG1lbnRfZGlkMWMgKyB0aWpkICsgdGlqZDp0cmVhdG1lbnRfZGlkMWMgKyBnZW5kZXIgKyBhZ2VfYyArIGVkdWNfYyArIHBud2FsMjAxNF9wYzRfYyArIHdvejIwMTJfcGM0X2MsIGZhbWlseT1xdWFzaShsaW5rPSJpZGVudGl0eSIsIHZhcmlhbmNlID0gIm11KDEtbXUpIiksIGRhdGE9ZXYsICBzdGFydD1yb3VuZChjb2VmKGRpZF9sbSksMikpIA0KDQpzdW1tYXJ5KGRpZF9scG1faGV0KQ0Kcm91bmQoY29lZnRlc3QoZGlkX2xwbV9oZXQsIHZjb3YgPSB2Y292Q0woZGlkX2xwbV9oZXQsIGNsdXN0ZXIgPSB+IFBhbmVsaXN0SWRRdWVzdGlvbikpLCAzKQ0KYGBgDQoNCiMjIyMgcmVwZWF0IHdpdGhvdXQgY292YXJpYXRlcw0KDQpgYGB7cn0NCg0KZGlkX2xtIDwtIGxtKHlfcHZ2IH4gdHJlYXRtZW50X2RpZDFjICsgdGlqZCArIHRpamQ6dHJlYXRtZW50X2RpZDFjLCBkYXRhPWV2KSANCiNzdW1tYXJ5KGRpZF9sbSkNCiNyb3VuZChjb2VmdGVzdChkaWRfbG0sIHZjb3YgPSB2Y292Q0woZGlkX2xtLCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKSwgMykNCiNjb2VmKGRpZF9sbSkNCg0KI2RpZF9scG0gPC0gZ2xtKHlfcHZ2IH4gdHJlYXRtZW50X2RpZDFiICsgdGlqZCArIHRpamQ6dHJlYXRtZW50X2RpZDFiICsgZ2VuZGVyICsgYWdlX2MgKyBlZHVjX2MgKyBwbndhbDIwMTRfcGM0X2MgKyB3b3oyMDEyX3BjNF9jLCBmYW1pbHk9Ymlub21pYWwobGluaz0iaWRlbnRpdHkiKSwgZGF0YT1ldiwgc3RhcnQ9cm91bmQoY29lZihkaWRfbG0pLDIpKQ0KI3N1bW1hcnkoZGlkX2xwbSkNCiNyb3VuZChjb2VmdGVzdChkaWRfbHBtX2hldCwgdmNvdiA9IHZjb3ZDTChkaWRfbHBtX2hldCwgY2x1c3RlciA9IH4gUGFuZWxpc3RJZFF1ZXN0aW9uKSksIDMpDQoNCmRpZF9scG1faGV0IDwtIGdsbSh5X3B2diB+IHRyZWF0bWVudF9kaWQxYyArIHRpamQgKyB0aWpkOnRyZWF0bWVudF9kaWQxYywgZmFtaWx5PXF1YXNpKGxpbms9ImlkZW50aXR5IiwgdmFyaWFuY2UgPSAibXUoMS1tdSkiKSwgZGF0YT1ldiwgIHN0YXJ0PXJvdW5kKGNvZWYoZGlkX2xtKSwyKSkgDQoNCiNzdW1tYXJ5KGRpZF9scG1faGV0KQ0Kcm91bmQoY29lZnRlc3QoZGlkX2xwbV9oZXQsIHZjb3YgPSB2Y292Q0woZGlkX2xwbV9oZXQsIGNsdXN0ZXIgPSB+IFBhbmVsaXN0SWRRdWVzdGlvbikpLCA0KQ0KYGBgDQoNCi0tLSAgDQoNCiMjIyB0cmVhdG1lbnQgJ2NyaXNpcyBleHBvc3VyZScgKGJpbmFyeSkNCg0KYGBge3J9DQoNCmRpZF9sbSA8LSBsbSh5X3B2diB+IHRyZWF0bWVudF9kaWQyYiArIHRpamQgKyB0aWpkOnRyZWF0bWVudF9kaWQyYiArIGdlbmRlciArIGFnZV9jICsgZWR1Y19jICsgcG53YWwyMDE0X3BjNF9jICsgd296MjAxMl9wYzRfYywgZGF0YT1ldikgDQojc3VtbWFyeShkaWRfbG0pDQojcm91bmQoY29lZnRlc3QoZGlkX2xtLCB2Y292ID0gdmNvdkNMKGRpZF9sbSwgY2x1c3RlciA9IH4gUGFuZWxpc3RJZFF1ZXN0aW9uKSksIDMpDQojY29lZihkaWRfbG0pDQoNCiNkaWRfbHBtIDwtIGdsbSh5X3B2diB+IHRyZWF0bWVudF9kaWQxYiArIHRpamQgKyB0aWpkOnRyZWF0bWVudF9kaWQxYiArIGdlbmRlciArIGFnZV9jICsgZWR1Y19jICsgcG53YWwyMDE0X3BjNF9jICsgd296MjAxMl9wYzRfYywgZmFtaWx5PWJpbm9taWFsKGxpbms9ImlkZW50aXR5IiksIGRhdGE9ZXYsIHN0YXJ0PXJvdW5kKGNvZWYoZGlkX2xtKSwyKSkNCiNzdW1tYXJ5KGRpZF9scG0pDQojcm91bmQoY29lZnRlc3QoZGlkX2xwbV9oZXQsIHZjb3YgPSB2Y292Q0woZGlkX2xwbV9oZXQsIGNsdXN0ZXIgPSB+IFBhbmVsaXN0SWRRdWVzdGlvbikpLCAzKQ0KDQpkaWRfbHBtX2hldCA8LSBnbG0oeV9wdnYgfiB0cmVhdG1lbnRfZGlkMmIgKyB0aWpkICsgdGlqZDp0cmVhdG1lbnRfZGlkMmIgKyBnZW5kZXIgKyBhZ2VfYyArIGVkdWNfYyArIHBud2FsMjAxNF9wYzRfYyArIHdvejIwMTJfcGM0X2MsIGZhbWlseT1xdWFzaShsaW5rPSJpZGVudGl0eSIsIHZhcmlhbmNlID0gIm11KDEtbXUpIiksIGRhdGE9ZXYsICBzdGFydD1yb3VuZChjb2VmKGRpZF9sbSksMikpIA0KDQojc3VtbWFyeShkaWRfbHBtX2hldCkNCnJvdW5kKGNvZWZ0ZXN0KGRpZF9scG1faGV0LCB2Y292ID0gdmNvdkNMKGRpZF9scG1faGV0LCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKSwgMykNCmBgYA0KDQojIyMjIHJlcGVhdCB3aXRob3V0IGNvdmFyaWF0ZXMNCg0KYGBge3J9DQoNCmRpZF9sbSA8LSBsbSh5X3B2diB+IHRyZWF0bWVudF9kaWQyYiArIHRpamQgKyB0aWpkOnRyZWF0bWVudF9kaWQyYiwgZGF0YT1ldikgDQojc3VtbWFyeShkaWRfbG0pDQojcm91bmQoY29lZnRlc3QoZGlkX2xtLCB2Y292ID0gdmNvdkNMKGRpZF9sbSwgY2x1c3RlciA9IH4gUGFuZWxpc3RJZFF1ZXN0aW9uKSksIDMpDQojY29lZihkaWRfbG0pDQoNCiNkaWRfbHBtIDwtIGdsbSh5X3B2diB+IHRyZWF0bWVudF9kaWQxYiArIHRpamQgKyB0aWpkOnRyZWF0bWVudF9kaWQxYiArIGdlbmRlciArIGFnZV9jICsgZWR1Y19jICsgcG53YWwyMDE0X3BjNF9jICsgd296MjAxMl9wYzRfYywgZmFtaWx5PWJpbm9taWFsKGxpbms9ImlkZW50aXR5IiksIGRhdGE9ZXYsIHN0YXJ0PXJvdW5kKGNvZWYoZGlkX2xtKSwyKSkNCiNzdW1tYXJ5KGRpZF9scG0pDQojcm91bmQoY29lZnRlc3QoZGlkX2xwbV9oZXQsIHZjb3YgPSB2Y292Q0woZGlkX2xwbV9oZXQsIGNsdXN0ZXIgPSB+IFBhbmVsaXN0SWRRdWVzdGlvbikpLCAzKQ0KDQpkaWRfbHBtX2hldCA8LSBnbG0oeV9wdnYgfiB0cmVhdG1lbnRfZGlkMmIgKyB0aWpkICsgdGlqZDp0cmVhdG1lbnRfZGlkMmIsIGZhbWlseT1xdWFzaShsaW5rPSJpZGVudGl0eSIsIHZhcmlhbmNlID0gIm11KDEtbXUpIiksIGRhdGE9ZXYsICBzdGFydD1yb3VuZChjb2VmKGRpZF9sbSksMikpIA0KDQojc3VtbWFyeShkaWRfbHBtX2hldCkNCnJvdW5kKGNvZWZ0ZXN0KGRpZF9scG1faGV0LCB2Y292ID0gdmNvdkNMKGRpZF9scG1faGV0LCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKSwgMykNCmBgYA0KDQotLS0gIA0KDQojIyMgdHJlYXRtZW50ICdjcmlzaXMgZXhwb3N1cmUnIChjb250aW51b3VzKQ0KDQpgYGB7cn0NCg0KZGlkX2xtIDwtIGxtKHlfcHZ2IH4gdHJlYXRtZW50X2RpZDJjICsgdGlqZCArIHRpamQ6dHJlYXRtZW50X2RpZDJjICsgZ2VuZGVyICsgYWdlX2MgKyBlZHVjX2MgKyBwbndhbDIwMTRfcGM0X2MgKyB3b3oyMDEyX3BjNF9jLCBkYXRhPWV2KSANCiNzdW1tYXJ5KGRpZF9sbSkNCiNyb3VuZChjb2VmdGVzdChkaWRfbG0sIHZjb3YgPSB2Y292Q0woZGlkX2xtLCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKSwgMykNCiNjb2VmKGRpZF9sbSkNCg0KI2RpZF9scG0gPC0gZ2xtKHlfcHZ2IH4gdHJlYXRtZW50X2RpZDFiICsgdGlqZCArIHRpamQ6dHJlYXRtZW50X2RpZDFiICsgZ2VuZGVyICsgYWdlX2MgKyBlZHVjX2MgKyBwbndhbDIwMTRfcGM0X2MgKyB3b3oyMDEyX3BjNF9jLCBmYW1pbHk9Ymlub21pYWwobGluaz0iaWRlbnRpdHkiKSwgZGF0YT1ldiwgc3RhcnQ9cm91bmQoY29lZihkaWRfbG0pLDIpKQ0KI3N1bW1hcnkoZGlkX2xwbSkNCiNyb3VuZChjb2VmdGVzdChkaWRfbHBtX2hldCwgdmNvdiA9IHZjb3ZDTChkaWRfbHBtX2hldCwgY2x1c3RlciA9IH4gUGFuZWxpc3RJZFF1ZXN0aW9uKSksIDMpDQoNCmRpZF9scG1faGV0IDwtIGdsbSh5X3B2diB+IHRyZWF0bWVudF9kaWQyYyArIHRpamQgKyB0aWpkOnRyZWF0bWVudF9kaWQyYyArIGdlbmRlciArIGFnZV9jICsgZWR1Y19jICsgcG53YWwyMDE0X3BjNF9jICsgd296MjAxMl9wYzRfYywgZmFtaWx5PXF1YXNpKGxpbms9ImlkZW50aXR5IiwgdmFyaWFuY2UgPSAibXUoMS1tdSkiKSwgZGF0YT1ldiwgIHN0YXJ0PXJvdW5kKGNvZWYoZGlkX2xtKSwyKSkgDQoNCiNzdW1tYXJ5KGRpZF9scG1faGV0KQ0Kcm91bmQoY29lZnRlc3QoZGlkX2xwbV9oZXQsIHZjb3YgPSB2Y292Q0woZGlkX2xwbV9oZXQsIGNsdXN0ZXIgPSB+IFBhbmVsaXN0SWRRdWVzdGlvbikpLCAzKQ0KYGBgDQoNCiMjIyMgcmVwZWF0IHdpdGhvdXQgY292YXJpYXRlcw0KDQoNCmBgYHtyfQ0KDQpkaWRfbG0gPC0gbG0oeV9wdnYgfiB0cmVhdG1lbnRfZGlkMmMgKyB0aWpkICsgdGlqZDp0cmVhdG1lbnRfZGlkMmMsIGRhdGE9ZXYpIA0KI3N1bW1hcnkoZGlkX2xtKQ0KI3JvdW5kKGNvZWZ0ZXN0KGRpZF9sbSwgdmNvdiA9IHZjb3ZDTChkaWRfbG0sIGNsdXN0ZXIgPSB+IFBhbmVsaXN0SWRRdWVzdGlvbikpLCAzKQ0KI2NvZWYoZGlkX2xtKQ0KDQojZGlkX2xwbSA8LSBnbG0oeV9wdnYgfiB0cmVhdG1lbnRfZGlkMWIgKyB0aWpkICsgdGlqZDp0cmVhdG1lbnRfZGlkMWIgKyBnZW5kZXIgKyBhZ2VfYyArIGVkdWNfYyArIHBud2FsMjAxNF9wYzRfYyArIHdvejIwMTJfcGM0X2MsIGZhbWlseT1iaW5vbWlhbChsaW5rPSJpZGVudGl0eSIpLCBkYXRhPWV2LCBzdGFydD1yb3VuZChjb2VmKGRpZF9sbSksMikpDQojc3VtbWFyeShkaWRfbHBtKQ0KI3JvdW5kKGNvZWZ0ZXN0KGRpZF9scG1faGV0LCB2Y292ID0gdmNvdkNMKGRpZF9scG1faGV0LCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKSwgMykNCg0KZGlkX2xwbV9oZXQgPC0gZ2xtKHlfcHZ2IH4gdHJlYXRtZW50X2RpZDJjICsgdGlqZCArIHRpamQ6dHJlYXRtZW50X2RpZDJjLCBmYW1pbHk9cXVhc2kobGluaz0iaWRlbnRpdHkiLCB2YXJpYW5jZSA9ICJtdSgxLW11KSIpLCBkYXRhPWV2LCAgc3RhcnQ9cm91bmQoY29lZihkaWRfbG0pLDIpKSANCg0KI3N1bW1hcnkoZGlkX2xwbV9oZXQpDQpyb3VuZChjb2VmdGVzdChkaWRfbHBtX2hldCwgdmNvdiA9IHZjb3ZDTChkaWRfbHBtX2hldCwgY2x1c3RlciA9IH4gUGFuZWxpc3RJZFF1ZXN0aW9uKSksIDMpDQpgYGANCg0KLS0tICANCg0KDQotLS0gIA0KDQoNCg==

Copyright © 2020 Jochem Tolsma