First Steps

Overall Project Stuff

  • Data File: master.xlsx
  • Gold: #EED311
  • Blue: #112CEE
  • Green: #11EE65
  • Red: #EE119A

Read in required libraries

Loading required package: readxl
Loading required package: tidyverse
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
-- Attaching packages ---------------------------------------------------------------------------------------------------------------------------------------------------------- tidyverse 1.3.1 --
v ggplot2 3.3.5     v purrr   0.3.4
v tibble  3.1.6     v dplyr   1.0.7
v tidyr   1.1.4     v stringr 1.4.0
v readr   2.1.1     v forcats 0.5.1
-- Conflicts ------------------------------------------------------------------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
Loading required package: janitor

Attaching package: ‘janitor’

The following objects are masked from ‘package:stats’:

    chisq.test, fisher.test

Loading required package: kableExtra

Attaching package: ‘kableExtra’

The following object is masked from ‘package:dplyr’:

    group_rows

Loading required package: stargazer

Please cite as: 

 Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
 R package version 5.2.3. https://CRAN.R-project.org/package=stargazer 

Loading required package: plm

Attaching package: ‘plm’

The following objects are masked from ‘package:dplyr’:

    between, lag, lead

Loading required package: lmtest
Loading required package: zoo

Attaching package: ‘zoo’

The following objects are masked from ‘package:base’:

    as.Date, as.Date.numeric

Read in Data

  • original df was cleaned wholly in Excel and produced “X1.csv”
  • we recreated X1 as X2 with thru data manipulation through R
  • the df “DirtyD” was an attempt to recreate a dataset ran by Prof K from master.xlsx, R don’t like it
# attempting 540 observations
#DirtyD <- read_excel("C:\\Users\\hisjo\\OneDrive\\Documents\\Sac State\\ECON 145 Economic Research Methods\\Data\\master.xlsx") %>% 
#  clean_names() %>% #piping prevents an umlaut over the i
#  select(-c(l1_inf_gdpd)) %>% #Extranious data, just in case         
#  #transform(cbc = as.numeric(cbc)) %>% #cbc had some char, convert and coerce NAs
#  filter(time1!=2020) %>%  #Remove 2020 Entries
#  drop_na()
#N = 546
  
X2 <- read_excel("C:\\Users\\hisjo\\OneDrive\\Documents\\Sac State\\ECON 145 Economic Research Methods\\Data\\master.xlsx") %>% 
  clean_names() %>% 
  transform(cbc = as.numeric(cbc)) %>% #cbc had some char, convert and coerce NAs
  filter(time1 != 2020) %>% # Remove 2020 from our dataset
  select(-c(l1_inf_gdpd)) %>% #Extraneous data dropped (lagged gdpd)
  drop_na() # remove NA
Warning in eval(substitute(list(...)), `_data`, parent.frame()) :
  NAs introduced by coercion
#N=357, nCol=12 

#Tell R and PLM that X2 is panel data with time1=time and location1=id
#creates a new data frame with index column, moving forward I think this is
#the correct way to handle this with PLM
P_data <- pdata.frame(X2, index = c("location1", "time1"))
# display to show transformation
X2
P_data

Variables Descriptions and Source

VarTable <- data.frame(
  Variable = c("hur", "taxcorp","ud","cbc","brr1y","pslm","epl","wsc","ttr","inf_gdpd"),
  Description = c("Annual Harmonized Unemployment Rate, %",
                  "Tax on Corporate Profits, % GDP",
                  "Union Density Ratio",
                  "Collective Bargaining Coverage, %",
                  "Benefit Replacement Rate at 1 year, %",
                  "Public Spending on Labor Markets, %GDP",
                  "Employment Protection Legislation, Instrumented",
                  "Wage Setting Coordination, Instrumented",
                  "Total Tax Revenue, %GDP",
                  "Change in Inflation with GDP Deflator, %"),
  Source = c("OECD 2022a","OECD 2022b","OECD 2022f","OECD 2022g","OECD 2022d",
             "OECD 2022e","OECD 2022c","OECD 2022h","OECD 2022i","World Bank 2022")
)
# create the object to output in plots 
VarTable_V <- kbl(VarTable, caption = "Table 1: Variables") %>% 
  kable_styling(bootstrap_options = c("striped", "hover","condensed"))
VarTable_V
Table 1: Variables
Variable Description Source
hur Annual Harmonized Unemployment Rate, % OECD 2022a
taxcorp Tax on Corporate Profits, % GDP OECD 2022b
ud Union Density Ratio OECD 2022f
cbc Collective Bargaining Coverage, % OECD 2022g
brr1y Benefit Replacement Rate at 1 year, % OECD 2022d
pslm Public Spending on Labor Markets, %GDP OECD 2022e
epl Employment Protection Legislation, Instrumented OECD 2022c
wsc Wage Setting Coordination, Instrumented OECD 2022h
ttr Total Tax Revenue, %GDP OECD 2022i
inf_gdpd Change in Inflation with GDP Deflator, % World Bank 2022

Overall Summary Statistics

#stargazer wont make a table if there are NA or type char
# I don't like the way it outputs, even in html. Using Kable
#stargazer(X2, title = "Table 2: Summary Statistics", type = "html", omit = c("time1") )

Descriptive1 <- matrix( 
  c(
      c("hur"),nrow(X2), round(mean(X2$hur),3),round(sd(X2$hur),3),round(min(X2$hur),3),
      round(max(X2$hur),3),
      
      c("taxcorp"),nrow(X2),round(mean(X2$taxcorp),3),  round(sd(X2$taxcorp),3), 
      round(min(X2$taxcorp),3),round(max(X2$taxcorp),3),
      
      c("ud"),nrow(X2),round(mean(X2$ud),3),round(sd(X2$ud),3), round(min(X2$ud),3),
      round(max(X2$ud),3),
      
      c("pslm"),nrow(X2),round(mean(X2$pslm),3),round(sd(X2$pslm),3),round(min(X2$pslm),3),
      round(max(X2$pslm),3),
      
      c("epl"),nrow(X2),round(mean(X2$epl),3), round(sd(X2$epl),3),
      round(min(X2$epl),3),round(max(X2$epl),3),
      
      c("wsc"),nrow(X2),round(mean(X2$wsc),3), round(sd(X2$wsc),3),
      round(min(X2$wsc),3),round(max(X2$wsc),3),
      
      c("cbc"),nrow(X2),round(mean(X2$cbc),3),
      round(sd(X2$cbc),3),round(min(X2$cbc),3),round(max(X2$cbc),3),
      
      c("brr1y"),nrow(X2), round(mean(X2$brr1y),3), round(sd(X2$brr1y),3),
      round(min(X2$brr1y),3),round(max(X2$brr1y),3),
      
      c("ttr"),nrow(X2), round(mean(X2$ttr),3), round(sd(X2$ttr),3), round(min(X2$ttr),3),
      round(max(X2$ttr),3),
      
      c("inf_gdpd"),nrow(X2),round(mean(X2$inf_gdpd),3),round(sd(X2$inf_gdpd),3),
      round(min(X2$inf_gdpd),3),round(max(X2$inf_gdpd),3)
    ),
  ncol = 6, byrow = T)

colnames(Descriptive1) <- c("Statistic","N", "Mean", "SD","Min","Max")
#rownames(Descriptive1) <- c("hur","taxcorp","ud","pslm","epl","wsc","cbc","brr1y","ttr","inf_gdpd")

Descriptive1_V <- kbl(Descriptive1, caption = "Table 2: Variable Summary Statistics, All Observations") %>% 
  kable_styling(bootstrap_options = c("striped", "hover","condensed")) 
Descriptive1_V
Table 2: Variable Summary Statistics, All Observations
Statistic N Mean SD Min Max
hur 357 7.348 3.575 2.267 26.117
taxcorp 357 3.022 1.347 0.583 11.992
ud 357 28.066 18.819 4.5 78
pslm 357 1.488 0.986 0.24 4.3
epl 357 2.117 0.901 0.093 4.583
wsc 357 2.672 1.366 1 5
cbc 357 55.636 31.007 6.1 100
brr1y 357 46.947 24.117 0 86
ttr 357 34.776 6.54 19.613 48.531
inf_gdpd 357 1.834 1.679 -4.62 11.047

Figures 3 and 4, HUR vs. Taxcorp, by year

HVTAM <- X2 %>% select(time1, hur, taxcorp) %>% 
  group_by(time1) %>% 
  drop_na() %>% 
  summarize(hur_mean=mean(hur), taxcorp_mean = mean(taxcorp))

colors <- c("hur" = "#EE119A", "taxcorp" = "#11EE65")

HVTAMV <- ggplot(HVTAM, aes(x=time1))+
  geom_line(aes(y=hur_mean, color = "hur"), show.legend = T)+
  geom_line(aes(y=taxcorp_mean, color = "taxcorp"), show.legend = T)+
  labs(x="Year", y="Mean, %", 
       title = "Figure 2: hur and taxcorp, means by year",
       color = "Legend", caption = "32 OECD Countries from 2001-2019 N = 357")+
  ylim(0,10)
HVTAMV # Fix Legend and colors

X3 <- X2
X3$time1 <- as.factor(X3$time1)
HVTAMV1 <- ggplot(data = X3, aes(x=time1))+
  geom_boxplot(aes(y=hur, color="hur"), show.legend = T)+
  geom_boxplot(aes(y=taxcorp, color="taxcorp"), show.legend = T)+
  theme(axis.text.x = element_text(angle = 90, size = 7))+
  labs(title = "Figure 3: Time Factor hur and taxcorp boxplots", x="Year", y="Percent" )
HVTAMV1

Figures 5 and 6: HUR vs. taxcorp, by country

HVTAM <- X2 %>% select(time1, hur, taxcorp) %>% 
  group_by(time1) %>% 
  drop_na() %>% 
  summarize(hur_mean=mean(hur), taxcorp_mean = mean(taxcorp))

colors <- c("hur" = "#EE119A", "taxcorp" = "#11EE65")

HVTAMV <- ggplot(HVTAM, aes(x=time1))+
  geom_line(aes(y=hur_mean, color = "hur"), show.legend = T)+
  geom_line(aes(y=taxcorp_mean, color = "taxcorp"), show.legend = T)+
  labs(x="Year", y="Mean, %", 
       title = "Figure 2: hur and taxcorp, means by year",
       color = "Legend", caption = "32 OECD Countries from 2001-2019 N = 357")+
  ylim(0,10)
HVTAMV # Fix Legend and colors


X3 <- X2
X3$time1 <- as.factor(X3$time1)
HVTAMV1 <- ggplot(data = X3, aes(x=time1))+
  geom_boxplot(aes(y=hur, color="hur"), show.legend = T)+
  geom_boxplot(aes(y=taxcorp, color="taxcorp"), show.legend = T)+
  theme(axis.text.x = element_text(angle = 90, size = 7))+
  labs(title = "Figure 3: Time Factor hur and taxcorp boxplots", x="Year", y="Percent" )
HVTAMV1

Figures 7 and 8

  • Histograms showing distribution of instruments
  • geom_bar counts the number of occurence of each instrumented value through the dataset.
epl_bar <- ggplot(data = X2)+
  geom_bar(aes(epl), width = 0.1, fill = "#112CEE", show.legend = F)+
  labs(x= "epl Instrument", y="Count",title = "Figure 6: Employment Protection Legislation, occurence of levels", caption = "N=357")
wsc_bar <- ggplot(data=X2)+
  geom_bar(aes(wsc), fill = "#112CEE", show.legend = F)+
  labs(x="wsc Instrument", y="Count", title = "Figure 7: Wage Setting Coordination, occurence of type", caption = "N=357")

epl_bar;wsc_bar
Warning: position_stack requires non-overlapping x intervals

Figures 8-14: Facet Wrapped Charts for paper

  • check figure numbers
#Facet charts
#hur vs taxcorp by year
FW1 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=taxcorp,y=hur), color = "#EED311" ) + 
  geom_smooth(mapping=aes(x=taxcorp,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~time1) + labs(x = "taxcorp", y="hur", title = "Figure 8: hur vs taxcorp time factor")
FW11 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=taxcorp,y=hur), color = "#EED311" ) + 
  geom_smooth(mapping=aes(x=taxcorp,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~location1) + labs(x = "taxcorp", y="hur", title = "Figure 8: hur vs taxcorp location factor")

#hur vs ud
FW2 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=ud,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=ud,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~time1)+ labs(x = "ud", y="hur", title = "Figure 9: hur vs ud time factor")
FW21 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=ud,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=ud,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~location1)+ labs(x = "ud", y="hur", title = "Figure 9: hur vs ud location factor")

#hur vs cbc
FW3 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=cbc,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=cbc,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~time1)+ labs(x = "cbc", y="hur", title = "Figure 10: hur vs cbc time factor")
FW31 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=cbc,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=cbc,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~location1)+ labs(x = "cbc", y="hur", title = "Figure 10: hur vs cbc location factor")

#hur vs brr
FW4 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=brr1y,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=brr1y,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~time1)+ labs(x = "brr", y="hur", title = "Figure 11: hur vs brr1y time factor")
FW41 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=brr1y,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=brr1y,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~location1)+ labs(x = "brr", y="hur", title = "Figure 11: hur vs brr1y location factor")

#hur vs pslm
FW5 <- ggplot(data=X2)+
  geom_point(mapping= aes(x=pslm,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=pslm, y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~time1)+ labs(x="pslm", y="hur", title = "Figure 12: ur vs pslm time factor")
FW51 <- ggplot(data=X2)+
  geom_point(mapping= aes(x=pslm,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=pslm, y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~location1)+ labs(x="pslm", y="hur", title = "Figure 12: ur vs pslm location factor")


#hur vs ttr
FW7 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=ttr,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=ttr,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~time1)+ labs(x = "ttr", y="hur", title = "Figure 13: hur vs ttr time factor")
FW71 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=ttr,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=ttr,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~location1)+ labs(x = "ttr", y="hur", title = "Figure 13: hur vs ttr location factor")

#hur vs delta_i
FW8 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=inf_gdpd,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=inf_gdpd,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~time1)+ labs(x = "inf_gdpd", y="hur", title = "Figure 14: hur vs inf_gdpd time factor")
FW81 <- ggplot(data=X2)+
  geom_point(mapping=aes(x=inf_gdpd,y=hur), color = "#EED311")+
  geom_smooth(mapping=aes(x=inf_gdpd,y=hur), method = lm, se=F, color = "#112CEE")+
  facet_wrap(~location1)+ labs(x = "inf_gdpd", y="hur", title = "Figure 14: hur vs inf_gdpd location factor")

FW1; FW11;FW2;FW21;FW3;FW31;FW4;FW41;FW5;FW51;FW7;FW71;FW8;FW81
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'
`geom_smooth()` using formula 'y ~ x'

Data Analysis, with experiments and tests

#P_data created in step 1
# Experiments with lm and plm
#OLS per "getting started"
#require(car)
# ols <- lm(hur~taxcorp, data = P_data)
# yhat <- ols$fitted
# Plot1 <- ggplot(data=P_data, aes(x=taxcorp))+
#   geom_point(mapping=aes(x=taxcorp,y=hur), color = "#EED311" ) + 
#   geom_smooth(mapping=aes(x=taxcorp,y=hur), method = lm, se=F, color = "#112CEE")
# fixed.dum <- lm(hur~taxcorp + factor(location1)-1, data=P_data)
# yhat1 <- fixed.dum$fitted
# Plot2 <- sp(yhat1~P_data$taxcorp|P_data$location1, xlab="taxcorp", ylab=yhat,
#            boxplot=F, smooth=F)

# Plot3 <- scatterplot(data=P_data,hur~time1|location1)
#OLS with LM, no instruments from X2
Reg01 <- lm(hur~taxcorp + ud + cbc + brr1y + pslm +ttr + inf_gdpd, data=X2)
#OLS with plm, no instruments from P_data
Reg02 <- plm(hur~taxcorp + ud + cbc + brr1y + pslm + ttr + inf_gdpd, data=P_data)
#OLS with lm, instruments, from P_data - include as baseline
Reg03 <- lm(hur~taxcorp + ud + cbc + brr1y + pslm +wsc +epl +ttr + inf_gdpd, data=P_data)
#OLS with plm, instruments from P_data
Reg04 <- plm(hur~taxcorp + ud + cbc + brr1y + pslm +wsc +epl +ttr + inf_gdpd, data=P_data)
#Pooled, preferred model (clean)
P2SLS <- plm(hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm
                |.-taxcorp + epl + wsc, 
                data = P_data, model = "pooling")
#Pooled Experiment, verified all the same as P2SLS
P2SLS_1 <- plm(hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm
                 |. -taxcorp + epl + wsc, 
                 data = X2, model = "pooling")
P2SLS_2 <- plm(hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm
                 | + ud + cbc + brr1y + ttr + inf_gdpd + pslm + epl + wsc, 
                 data = P_data, model = "pooling")
#Between estimator 
B2SLS <- update(P2SLS, model="between") #this is bad
#FE or within estimator
FE2SLS <- update(P2SLS, model="within")
#Random estimator
RE2SLS <- update(P2SLS, model="random")
#Check output - looks bad lol
# stargazer(Reg01,Reg02,Reg03,Reg04,P2SLS,B2SLS, type = "text")


#Time Fixed Effects and experiments
#Original Form - best fit model
FE2SLS_T <- plm(hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd +pslm
                +factor(time1)
                |. -taxcorp + epl + wsc, 
                data = P_data, model = "within")
#added "time" effect to arguments
FE2SLS_T1 <- plm(hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd +pslm
                +factor(time1)
                |. -taxcorp + epl + wsc, 
                data = P_data, model = "within", effect = "time")
#Streamlined
TFE2SLS1 <- update(P2SLS, model="within", effect = "time")

#check output
#stargazer(FE2SLS_T,FE2SLS_T1,TFE2SLS1, type = "text")

#Individual FE and Experiments
#Original model - all are exact same
FE2SLS_L <- plm(hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm
                +factor(location1)
                |. -taxcorp + epl + wsc, 
                data = P_data, model = "within")
# added "individual" effect to arguments - specifying effect prevents same results as_TL regs
FE2SLS_L1 <- plm(hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm
                +factor(location1)
                |. -taxcorp + epl + wsc, 
                data = P_data, model = "within", effect = "individual")
# streamlined, yes same as above
FE2SLS_L2 <- update(P2SLS, model="within", effect="individual")
#check output
#stargazer(FE2SLS_L, FE2SLS_L1, FE2SLS_L2, type = "text")

#Time and Individual FE
#Original model
FE2SLS_TL <- plm(hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm
                 +factor(time1) +factor(location1)
                 |. -taxcorp + epl + wsc, 
                 data = P_data, model = "within", effect = "twoways")
# removed twoways effect from argument - best fit
FE2SLS_TL1 <- plm(hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm
                 +factor(time1) +factor(location1)
                 |. -taxcorp + epl + wsc, 
                 data = P_data, model = "within")
#streamlined1, added back effect
FE2SLS_TL2 <- update(P2SLS, model="within", effect="twoways")
#streamlined2, removed effect from update 
FE2SLS_TL3 <- update(P2SLS, model="within")
#check output
#stargazer(FE2SLS_TL, FE2SLS_TL1, FE2SLS_TL2, FE2SLS_TL3, type = "text")

#LM for random effects vs OLS
PX1 <- plmtest(P2SLS)
##BP LM for random effects, null is no panel effect, include
PX11 <- plmtest(P2SLS, type=c("bp"))

# Testing time-fixed effects, null is no FTE
PX12 <- plmtest(FE2SLS, c("time"), type=c("bp"))

#LM for fixed effects vs OLS, generic 
PX2 <- pFtest(FE2SLS,P2SLS)
#LM for fixed effectsw vs OLS, Time specific
PX21 <- pFtest(TFE2SLS1, FE2SLS)
Warning in pf(stat, df1, df2, lower.tail = FALSE) : NaNs produced
#hausman test for fixed vs random effects, null=random preferred
PX6 <- phtest(RE2SLS,FE2SLS)

#Cross sectional dependance, null is that residuals across entities are not
#correlated. Used to test whether residuals are correlated across entities. CS dep 
#can lead to bias in test results
#BPLM for cross sectional dependence in panels
PX7 <- pcdtest(FE2SLS, test=c("lm"))
Warning in pcdres(tres = tres, n = n, w = w, form = paste(deparse(x$formula)),  :
  Some pairs of individuals (20 percent) do not have any or just one time period in common and have been omitted from calculation
# Pesaran cross sectional dependence
PX71 <- pcdtest(FE2SLS, test=c("cd"))
Warning in pcdres(tres = tres, n = n, w = w, form = paste(deparse(x$formula)),  :
  Some pairs of individuals (20 percent) do not have any or just one time period in common and have been omitted from calculation
# Breusch Godfrey for SC in panels. Null is no SC. May not matter as a relativily 
# short study period T=19
PX8 <- pbgtest(FE2SLS)
#ADF for stochastic trends, Null- series has unit root.
require(tseries)
Loading required package: tseries
Warning: package ‘tseries’ was built under R version 4.0.5
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 

    ‘tseries’ version: 0.10-50

    ‘tseries’ is a package for time series analysis and computational finance.

    See ‘library(help="tseries")’ for details.
PX9 <- adf.test(P_data$hur, k=2)
Warning in adf.test(P_data$hur, k = 2) :
  p-value smaller than printed p-value
#BP null is homoskedasticity, alternative: heteroskadasticity
PX0 <- bptest(hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm
                +factor(location1), data=P_data, studentize = F)

PX11;PX2;PX6;PX7;PX71;PX8;PX9;PX0

    Lagrange Multiplier Test - (Breusch-Pagan) for unbalanced panels

data:  hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm | . -  ...
chisq = 571.15, df = 1, p-value < 2.2e-16
alternative hypothesis: significant effects


    F test for individual effects

data:  hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm | . -  ...
F = 378.68, df1 = 31, df2 = 318, p-value < 2.2e-16
alternative hypothesis: significant effects


    Hausman Test

data:  hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm | . -  ...
chisq = 3.5086, df = 7, p-value = 0.8343
alternative hypothesis: one model is inconsistent


    Breusch-Pagan LM test for cross-sectional dependence in panels

data:  hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm | . -     taxcorp + epl + wsc
chisq = 926.79, df = 447, p-value < 2.2e-16
alternative hypothesis: cross-sectional dependence


    Pesaran CD test for cross-sectional dependence in panels

data:  hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm | . -     taxcorp + epl + wsc
z = 4.1856, p-value = 2.844e-05
alternative hypothesis: cross-sectional dependence


    Breusch-Godfrey/Wooldridge test for serial correlation in panel models

data:  hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm | . -  ...
chisq = 188.9, df = 1, p-value < 2.2e-16
alternative hypothesis: serial correlation in idiosyncratic errors


    Augmented Dickey-Fuller Test

data:  P_data$hur
Dickey-Fuller = -4.7542, Lag order = 2, p-value = 0.01
alternative hypothesis: stationary


    Breusch-Pagan test

data:  hur ~ taxcorp + ud + cbc + brr1y + ttr + inf_gdpd + pslm + factor(location1)
BP = 474.14, df = 38, p-value < 2.2e-16

Final Output Table 3

*NOTE: the p values at the bottom of the table have to be fixed in the output document, with code (to copypasta): * to replace asterisks that cause bolding

FOutput <- stargazer(Reg03, P2SLS,  FE2SLS_T1, FE2SLS_L1,  FE2SLS_TL, RE2SLS,
          type = "html", title = "Table 3: Regressions to Explain the Unemployment Rate", 
          model.names = F,
          keep = c("taxcorp", "ud","cbc","brr1y", "ttr","inf_gdpd", "hur", "pslm", "epl","wsc", "Constant"),
          column.labels = c("OLS", "2SLS Pooled", 
                            "2SLS Time Fixed Effects", "2SLS Individual Fixed Effects", "2SLS Time and Individual Fixed Effects", "2SLS Random Effects")
          )
# run in console, it's messy
Table 3: Regressions to Explain the Unemployment Rate
Dependent variable:
hur
OLS 2SLS Pooled 2SLS Time Fixed Effects 2SLS Individual Fixed Effects 2SLS Time and Individual Fixed Effects 2SLS Random Effects
(1) (2) (3) (4) (5) (6)
taxcorp -0.501*** -12.904 -3.267 -3.752* -1.992 -3.208
(0.134) (14.516) (4.088) (2.026) (1.930) (2.238)
ud -0.004 0.263 0.033 0.011 0.119 -0.001
(0.014) (0.351) (0.102) (0.068) (0.129) (0.052)
cbc 0.042*** 0.158 0.054 0.057 0.075** -0.002
(0.011) (0.160) (0.044) (0.049) (0.037) (0.038)
brr1y -0.006 0.246 0.038 0.039** 0.036*** 0.039***
(0.010) (0.321) (0.091) (0.016) (0.013) (0.014)
pslm 1.727*** -9.934 -0.885 1.457* 2.180*** 1.637**
(0.320) (13.666) (3.725) (0.779) (0.558) (0.825)
wsc -1.306***
(0.174)
epl 0.543***
(0.202)
ttr -0.137*** -0.700 -0.260 0.518 0.220 0.322
(0.048) (0.704) (0.229) (0.343) (0.356) (0.331)
inf_gdpd -0.207** 2.078 0.526 0.156 0.019 0.123
(0.102) (2.461) (0.649) (0.279) (0.198) (0.304)
Constant 11.818*** 53.930 2.135
(1.309) (50.013) (4.595)
Observations 357 357 357 357 357 357
R2 0.367 0.049 0.103 0.189 0.264 0.202
Adjusted R2 0.350 0.030 0.035 0.092 0.127 0.186
Residual Std. Error 2.881 (df = 347)
F Statistic 22.338*** (df = 9; 347) 5.469 43.285*** 96.725*** 144.909*** 113.648***
Note: *p<0.1; **p<0.05; ***p<0.01
LS0tDQp0aXRsZTogIkVDT04gMTQ1IERhdGEgUHJvamVjdCBGaW5hbCINCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCiAgYWx3YXlzX2FsbG93X2h0bWw6IHRydWUNCi0tLQ0KDQojIyBGaXJzdCBTdGVwcw0KIyMjIE92ZXJhbGwgUHJvamVjdCBTdHVmZg0KKiBEYXRhIEZpbGU6IG1hc3Rlci54bHN4DQoqIEdvbGQ6ICNFRUQzMTENCiogQmx1ZTogIzExMkNFRQ0KKiBHcmVlbjogIzExRUU2NQ0KKiBSZWQ6ICNFRTExOUENCg0KIyMjIFJlYWQgaW4gcmVxdWlyZWQgbGlicmFyaWVzDQpgYGB7ciBwYWNrYWdlcywgZWNobz1GLCB3YXJuaW5nPUZ9DQpyZXF1aXJlKHJlYWR4bCkNCnJlcXVpcmUodGlkeXZlcnNlKSAjIGkgdGhpbmsgdGhpcyBnaXZlcyBtZSBkcGx5ciBhbmQgdGlkeXINCnJlcXVpcmUoamFuaXRvcikgIyBjbGVhbiBuYW1lcw0KcmVxdWlyZShnZ3Bsb3QyKSAjIGRhdGEgdml6DQpyZXF1aXJlKGthYmxlRXh0cmEpICNTdGF0IHRhYmxlcw0KcmVxdWlyZShzdGFyZ2F6ZXIpICNSZWdyZXNzaW9uIHRhYmxlcw0KIyByZXF1aXJlKGl2cmVnKSAjTWF5YmUgaW4gdGhlIGZ1dHVyZQ0KcmVxdWlyZShwbG0pICNwYW5lbCBsaW5lYXIgbW9kZWxzDQpyZXF1aXJlKGxtdGVzdCkNCg0KDQpgYGANCg0KIyMjIFJlYWQgaW4gRGF0YQ0KKiBvcmlnaW5hbCBkZiB3YXMgY2xlYW5lZCB3aG9sbHkgaW4gRXhjZWwgYW5kIHByb2R1Y2VkICJYMS5jc3YiDQoqIHdlIHJlY3JlYXRlZCBYMSBhcyBYMiB3aXRoIHRocnUgZGF0YSBtYW5pcHVsYXRpb24gdGhyb3VnaCBSDQoqIHRoZSBkZiAiRGlydHlEIiB3YXMgYW4gYXR0ZW1wdCB0byByZWNyZWF0ZSBhIGRhdGFzZXQgcmFuIGJ5IFByb2YgSyBmcm9tIG1hc3Rlci54bHN4LCBSIGRvbid0IGxpa2UgaXQNCmBgYHtyIGRhdGEgcmVhZCBpbn0NCiMgYXR0ZW1wdGluZyA1NDAgb2JzZXJ2YXRpb25zDQojRGlydHlEIDwtIHJlYWRfZXhjZWwoIkM6XFxVc2Vyc1xcaGlzam9cXE9uZURyaXZlXFxEb2N1bWVudHNcXFNhYyBTdGF0ZVxcRUNPTiAxNDUgRWNvbm9taWMgUmVzZWFyY2ggTWV0aG9kc1xcRGF0YVxcbWFzdGVyLnhsc3giKSAlPiUgDQojICBjbGVhbl9uYW1lcygpICU+JSAjcGlwaW5nIHByZXZlbnRzIGFuIHVtbGF1dCBvdmVyIHRoZSBpDQojICBzZWxlY3QoLWMobDFfaW5mX2dkcGQpKSAlPiUgI0V4dHJhbmlvdXMgZGF0YSwganVzdCBpbiBjYXNlICAgICAgICAgDQojICAjdHJhbnNmb3JtKGNiYyA9IGFzLm51bWVyaWMoY2JjKSkgJT4lICNjYmMgaGFkIHNvbWUgY2hhciwgY29udmVydCBhbmQgY29lcmNlIE5Bcw0KIyAgZmlsdGVyKHRpbWUxIT0yMDIwKSAlPiUgICNSZW1vdmUgMjAyMCBFbnRyaWVzDQojICBkcm9wX25hKCkNCiNOID0gNTQ2DQogIA0KWDIgPC0gcmVhZF9leGNlbCgiQzpcXFVzZXJzXFxoaXNqb1xcT25lRHJpdmVcXERvY3VtZW50c1xcU2FjIFN0YXRlXFxFQ09OIDE0NSBFY29ub21pYyBSZXNlYXJjaCBNZXRob2RzXFxEYXRhXFxtYXN0ZXIueGxzeCIpICU+JSANCiAgY2xlYW5fbmFtZXMoKSAlPiUgDQogIHRyYW5zZm9ybShjYmMgPSBhcy5udW1lcmljKGNiYykpICU+JSAjY2JjIGhhZCBzb21lIGNoYXIsIGNvbnZlcnQgYW5kIGNvZXJjZSBOQXMNCiAgZmlsdGVyKHRpbWUxICE9IDIwMjApICU+JSAjIFJlbW92ZSAyMDIwIGZyb20gb3VyIGRhdGFzZXQNCiAgc2VsZWN0KC1jKGwxX2luZl9nZHBkKSkgJT4lICNFeHRyYW5lb3VzIGRhdGEgZHJvcHBlZCAobGFnZ2VkIGdkcGQpDQogIGRyb3BfbmEoKSAjIHJlbW92ZSBOQQ0KI049MzU3LCBuQ29sPTEyIA0KDQojVGVsbCBSIGFuZCBQTE0gdGhhdCBYMiBpcyBwYW5lbCBkYXRhIHdpdGggdGltZTE9dGltZSBhbmQgbG9jYXRpb24xPWlkDQojY3JlYXRlcyBhIG5ldyBkYXRhIGZyYW1lIHdpdGggaW5kZXggY29sdW1uLCBtb3ZpbmcgZm9yd2FyZCBJIHRoaW5rIHRoaXMgaXMNCiN0aGUgY29ycmVjdCB3YXkgdG8gaGFuZGxlIHRoaXMgd2l0aCBQTE0NClBfZGF0YSA8LSBwZGF0YS5mcmFtZShYMiwgaW5kZXggPSBjKCJsb2NhdGlvbjEiLCAidGltZTEiKSkNCiMgZGlzcGxheSB0byBzaG93IHRyYW5zZm9ybWF0aW9uDQpYMg0KUF9kYXRhDQpgYGANCg0KIyMjIFZhcmlhYmxlcyBEZXNjcmlwdGlvbnMgYW5kIFNvdXJjZQ0KYGBge3IgVmFyaWFibGVzIFRhYmxlfQ0KVmFyVGFibGUgPC0gZGF0YS5mcmFtZSgNCiAgVmFyaWFibGUgPSBjKCJodXIiLCAidGF4Y29ycCIsInVkIiwiY2JjIiwiYnJyMXkiLCJwc2xtIiwiZXBsIiwid3NjIiwidHRyIiwiaW5mX2dkcGQiKSwNCiAgRGVzY3JpcHRpb24gPSBjKCJBbm51YWwgSGFybW9uaXplZCBVbmVtcGxveW1lbnQgUmF0ZSwgJSIsDQogICAgICAgICAgICAgICAgICAiVGF4IG9uIENvcnBvcmF0ZSBQcm9maXRzLCAlIEdEUCIsDQogICAgICAgICAgICAgICAgICAiVW5pb24gRGVuc2l0eSBSYXRpbyIsDQogICAgICAgICAgICAgICAgICAiQ29sbGVjdGl2ZSBCYXJnYWluaW5nIENvdmVyYWdlLCAlIiwNCiAgICAgICAgICAgICAgICAgICJCZW5lZml0IFJlcGxhY2VtZW50IFJhdGUgYXQgMSB5ZWFyLCAlIiwNCiAgICAgICAgICAgICAgICAgICJQdWJsaWMgU3BlbmRpbmcgb24gTGFib3IgTWFya2V0cywgJUdEUCIsDQogICAgICAgICAgICAgICAgICAiRW1wbG95bWVudCBQcm90ZWN0aW9uIExlZ2lzbGF0aW9uLCBJbnN0cnVtZW50ZWQiLA0KICAgICAgICAgICAgICAgICAgIldhZ2UgU2V0dGluZyBDb29yZGluYXRpb24sIEluc3RydW1lbnRlZCIsDQogICAgICAgICAgICAgICAgICAiVG90YWwgVGF4IFJldmVudWUsICVHRFAiLA0KICAgICAgICAgICAgICAgICAgIkNoYW5nZSBpbiBJbmZsYXRpb24gd2l0aCBHRFAgRGVmbGF0b3IsICUiKSwNCiAgU291cmNlID0gYygiT0VDRCAyMDIyYSIsIk9FQ0QgMjAyMmIiLCJPRUNEIDIwMjJmIiwiT0VDRCAyMDIyZyIsIk9FQ0QgMjAyMmQiLA0KICAgICAgICAgICAgICJPRUNEIDIwMjJlIiwiT0VDRCAyMDIyYyIsIk9FQ0QgMjAyMmgiLCJPRUNEIDIwMjJpIiwiV29ybGQgQmFuayAyMDIyIikNCikNCiMgY3JlYXRlIHRoZSBvYmplY3QgdG8gb3V0cHV0IGluIHBsb3RzIA0KVmFyVGFibGVfViA8LSBrYmwoVmFyVGFibGUsIGNhcHRpb24gPSAiVGFibGUgMTogVmFyaWFibGVzIikgJT4lIA0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsImNvbmRlbnNlZCIpKQ0KVmFyVGFibGVfVg0KYGBgDQoNCg0KIyMjIE92ZXJhbGwgU3VtbWFyeSBTdGF0aXN0aWNzDQpgYGB7ciBzdW1tYXJ5IHN0YXRzIH0NCiNzdGFyZ2F6ZXIgd29udCBtYWtlIGEgdGFibGUgaWYgdGhlcmUgYXJlIE5BIG9yIHR5cGUgY2hhcg0KIyBJIGRvbid0IGxpa2UgdGhlIHdheSBpdCBvdXRwdXRzLCBldmVuIGluIGh0bWwuIFVzaW5nIEthYmxlDQojc3RhcmdhemVyKFgyLCB0aXRsZSA9ICJUYWJsZSAyOiBTdW1tYXJ5IFN0YXRpc3RpY3MiLCB0eXBlID0gImh0bWwiLCBvbWl0ID0gYygidGltZTEiKSApDQoNCkRlc2NyaXB0aXZlMSA8LSBtYXRyaXgoIA0KICBjKA0KICAgICAgYygiaHVyIiksbnJvdyhYMiksIHJvdW5kKG1lYW4oWDIkaHVyKSwzKSxyb3VuZChzZChYMiRodXIpLDMpLHJvdW5kKG1pbihYMiRodXIpLDMpLA0KICAgICAgcm91bmQobWF4KFgyJGh1ciksMyksDQogICAgICANCiAgICAgIGMoInRheGNvcnAiKSxucm93KFgyKSxyb3VuZChtZWFuKFgyJHRheGNvcnApLDMpLCAgcm91bmQoc2QoWDIkdGF4Y29ycCksMyksIA0KICAgICAgcm91bmQobWluKFgyJHRheGNvcnApLDMpLHJvdW5kKG1heChYMiR0YXhjb3JwKSwzKSwNCiAgICAgIA0KICAgICAgYygidWQiKSxucm93KFgyKSxyb3VuZChtZWFuKFgyJHVkKSwzKSxyb3VuZChzZChYMiR1ZCksMyksIHJvdW5kKG1pbihYMiR1ZCksMyksDQogICAgICByb3VuZChtYXgoWDIkdWQpLDMpLA0KICAgICAgDQogICAgICBjKCJwc2xtIiksbnJvdyhYMikscm91bmQobWVhbihYMiRwc2xtKSwzKSxyb3VuZChzZChYMiRwc2xtKSwzKSxyb3VuZChtaW4oWDIkcHNsbSksMyksDQogICAgICByb3VuZChtYXgoWDIkcHNsbSksMyksDQogICAgICANCiAgICAgIGMoImVwbCIpLG5yb3coWDIpLHJvdW5kKG1lYW4oWDIkZXBsKSwzKSwgcm91bmQoc2QoWDIkZXBsKSwzKSwNCiAgICAgIHJvdW5kKG1pbihYMiRlcGwpLDMpLHJvdW5kKG1heChYMiRlcGwpLDMpLA0KICAgICAgDQogICAgICBjKCJ3c2MiKSxucm93KFgyKSxyb3VuZChtZWFuKFgyJHdzYyksMyksIHJvdW5kKHNkKFgyJHdzYyksMyksDQogICAgICByb3VuZChtaW4oWDIkd3NjKSwzKSxyb3VuZChtYXgoWDIkd3NjKSwzKSwNCiAgICAgIA0KICAgICAgYygiY2JjIiksbnJvdyhYMikscm91bmQobWVhbihYMiRjYmMpLDMpLA0KICAgICAgcm91bmQoc2QoWDIkY2JjKSwzKSxyb3VuZChtaW4oWDIkY2JjKSwzKSxyb3VuZChtYXgoWDIkY2JjKSwzKSwNCiAgICAgIA0KICAgICAgYygiYnJyMXkiKSxucm93KFgyKSwgcm91bmQobWVhbihYMiRicnIxeSksMyksIHJvdW5kKHNkKFgyJGJycjF5KSwzKSwNCiAgICAgIHJvdW5kKG1pbihYMiRicnIxeSksMykscm91bmQobWF4KFgyJGJycjF5KSwzKSwNCiAgICAgIA0KICAgICAgYygidHRyIiksbnJvdyhYMiksIHJvdW5kKG1lYW4oWDIkdHRyKSwzKSwgcm91bmQoc2QoWDIkdHRyKSwzKSwgcm91bmQobWluKFgyJHR0ciksMyksDQogICAgICByb3VuZChtYXgoWDIkdHRyKSwzKSwNCiAgICAgIA0KICAgICAgYygiaW5mX2dkcGQiKSxucm93KFgyKSxyb3VuZChtZWFuKFgyJGluZl9nZHBkKSwzKSxyb3VuZChzZChYMiRpbmZfZ2RwZCksMyksDQogICAgICByb3VuZChtaW4oWDIkaW5mX2dkcGQpLDMpLHJvdW5kKG1heChYMiRpbmZfZ2RwZCksMykNCiAgICApLA0KICBuY29sID0gNiwgYnlyb3cgPSBUKQ0KDQpjb2xuYW1lcyhEZXNjcmlwdGl2ZTEpIDwtIGMoIlN0YXRpc3RpYyIsIk4iLCAiTWVhbiIsICJTRCIsIk1pbiIsIk1heCIpDQojcm93bmFtZXMoRGVzY3JpcHRpdmUxKSA8LSBjKCJodXIiLCJ0YXhjb3JwIiwidWQiLCJwc2xtIiwiZXBsIiwid3NjIiwiY2JjIiwiYnJyMXkiLCJ0dHIiLCJpbmZfZ2RwZCIpDQoNCkRlc2NyaXB0aXZlMV9WIDwtIGtibChEZXNjcmlwdGl2ZTEsIGNhcHRpb24gPSAiVGFibGUgMjogVmFyaWFibGUgU3VtbWFyeSBTdGF0aXN0aWNzLCBBbGwgT2JzZXJ2YXRpb25zIikgJT4lIA0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsImNvbmRlbnNlZCIpKSANCkRlc2NyaXB0aXZlMV9WDQpgYGANCg0KIyMjICBGaWd1cmVzIDMgYW5kIDQsIEhVUiB2cy4gVGF4Y29ycCwgYnkgeWVhcg0KYGBge3IsIEhVUiB2IHRheGNvcnAgYW5udWFsIEZpZ3VyZSAyfQ0KSFZUQU0gPC0gWDIgJT4lIHNlbGVjdCh0aW1lMSwgaHVyLCB0YXhjb3JwKSAlPiUgDQogIGdyb3VwX2J5KHRpbWUxKSAlPiUgDQogIGRyb3BfbmEoKSAlPiUgDQogIHN1bW1hcml6ZShodXJfbWVhbj1tZWFuKGh1ciksIHRheGNvcnBfbWVhbiA9IG1lYW4odGF4Y29ycCkpDQoNCmNvbG9ycyA8LSBjKCJodXIiID0gIiNFRTExOUEiLCAidGF4Y29ycCIgPSAiIzExRUU2NSIpDQoNCkhWVEFNViA8LSBnZ3Bsb3QoSFZUQU0sIGFlcyh4PXRpbWUxKSkrDQogIGdlb21fbGluZShhZXMoeT1odXJfbWVhbiwgY29sb3IgPSAiaHVyIiksIHNob3cubGVnZW5kID0gVCkrDQogIGdlb21fbGluZShhZXMoeT10YXhjb3JwX21lYW4sIGNvbG9yID0gInRheGNvcnAiKSwgc2hvdy5sZWdlbmQgPSBUKSsNCiAgbGFicyh4PSJZZWFyIiwgeT0iTWVhbiwgJSIsIA0KICAgICAgIHRpdGxlID0gIkZpZ3VyZSAyOiBodXIgYW5kIHRheGNvcnAsIG1lYW5zIGJ5IHllYXIiLA0KICAgICAgIGNvbG9yID0gIkxlZ2VuZCIsIGNhcHRpb24gPSAiMzIgT0VDRCBDb3VudHJpZXMgZnJvbSAyMDAxLTIwMTkgTiA9IDM1NyIpKw0KICB5bGltKDAsMTApDQpIVlRBTVYgIyBGaXggTGVnZW5kIGFuZCBjb2xvcnMNCg0KWDMgPC0gWDINClgzJHRpbWUxIDwtIGFzLmZhY3RvcihYMyR0aW1lMSkNCkhWVEFNVjEgPC0gZ2dwbG90KGRhdGEgPSBYMywgYWVzKHg9dGltZTEpKSsNCiAgZ2VvbV9ib3hwbG90KGFlcyh5PWh1ciwgY29sb3I9Imh1ciIpLCBzaG93LmxlZ2VuZCA9IFQpKw0KICBnZW9tX2JveHBsb3QoYWVzKHk9dGF4Y29ycCwgY29sb3I9InRheGNvcnAiKSwgc2hvdy5sZWdlbmQgPSBUKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgc2l6ZSA9IDcpKSsNCiAgbGFicyh0aXRsZSA9ICJGaWd1cmUgMzogVGltZSBGYWN0b3IgaHVyIGFuZCB0YXhjb3JwIGJveHBsb3RzIiwgeD0iWWVhciIsIHk9IlBlcmNlbnQiICkNCkhWVEFNVjENCmBgYA0KDQojIyMgRmlndXJlcyA1IGFuZCA2OiBIVVIgdnMuIHRheGNvcnAsIGJ5IGNvdW50cnkNCmBgYHtyfQ0KSFZUSU0gPC0gWDIgJT4lIHNlbGVjdChsb2NhdGlvbjEsIGh1ciwgdGF4Y29ycCwgd3NjLCBlcGwpICU+JSANCiAgZ3JvdXBfYnkobG9jYXRpb24xKSAlPiUgDQogIGRyb3BfbmEoKSAlPiUgDQogIHN1bW1hcmlzZShodXJfbWVhbjE9bWVhbihodXIpLCB0YXhjb3JwX21lYW4xPSBtZWFuKHRheGNvcnApLCB3c2NfbWVhbj1tZWFuKHdzYyksDQogICAgICAgICAgICBlcGxfbWVhbj1tZWFuKGVwbCkpDQoNCkhWVElNViA8LSBnZ3Bsb3QoSFZUSU0sIGFlcyh4PWxvY2F0aW9uMSwgZ3JvdXA9MSkpKw0KICBnZW9tX2xpbmUoYWVzKHk9aHVyX21lYW4xLCBjb2xvciA9ICJodXIiKSwgc2hvdy5sZWdlbmQgPSBUKSsNCiAgZ2VvbV9saW5lKGFlcyh5PXRheGNvcnBfbWVhbjEsIGNvbG9yPSAidGF4Y29ycCIpLCBzaG93LmxlZ2VuZCA9IFQpKw0KICAjZ2VvbV9jb2woYWVzKHk9d3NjX21lYW4sIGNvbG9yID0gIndzYyIpLCBhbHBoYSA9IDAuMiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIocHJlc2VydmUgPSAic2luZ2xlIiksIHNob3cubGVnZW5kID0gVCkrDQogIGdlb21fY29sKGFlcyh5PWVwbF9tZWFuLCBjb2xvciA9ICJlcGwiKSwgY29sb3I9ICIjMkNFRTExIiwgYWxwaGEgPSAwLjUpKw0KICBsYWJzKHg9IkxvY2F0aW9uIC8gSW5kaXZpZHVhbCIsIHk9Ik1lYW4sICUiLCANCiAgICAgICB0aXRsZSA9ICJGaWd1cmUgNDogaHVyIGFuZCB0YXhjb3JwLCBtZWFucyBieSBsb2NhdGlvbiIsDQogICAgICAgc3VidGl0bGUgPSAid2l0aCBtZWFuIG9mIHdzYyBpbnN0cnVtZW50IGZvciBsb2NhdGlvbiIsDQogICAgICAgY29sb3IgPSAiTGVnZW5kIixjYXB0aW9uID0gIjMyIE9FQ0QgQ291bnRyaWVzIGZyb20gMjAwMS0yMDE5IE4gPSAzNTciKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgc2l6ZSA9IDcpKQ0KSFZUSU1WDQoNClgzJGxvY2F0aW9uMSA8LSBhcy5mYWN0b3IoWDMkbG9jYXRpb24xKQ0KSFZUSU1WMSA8LSBnZ3Bsb3QoZGF0YSA9IFgzLCBhZXMoeD1sb2NhdGlvbjEpKSsNCiAgZ2VvbV9ib3hwbG90KGFlcyh5PWh1ciwgY29sb3I9Imh1ciIpLCBzaG93LmxlZ2VuZCA9IFQpKw0KICBnZW9tX2JveHBsb3QoYWVzKHk9dGF4Y29ycCwgY29sb3I9InRheGNvcnAiKSwgc2hvdy5sZWdlbmQgPSBUKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgc2l6ZSA9IDcpKSsNCiAgbGFicyh0aXRsZSA9ICJGaWd1cmUgNTogTG9jYXRpb24gRmFjdG9yIGh1ciBhbmQgdGF4Y29ycCIsIHg9IkxvY2F0aW9uIiwgeT0iUGVyY2VudCIgKQ0KSFZUSU1WMQ0KYGBgDQojIyMgRmlndXJlcyA3IGFuZCA4DQoqIEhpc3RvZ3JhbXMgc2hvd2luZyBkaXN0cmlidXRpb24gb2YgaW5zdHJ1bWVudHMNCiogZ2VvbV9iYXIgY291bnRzIHRoZSBudW1iZXIgb2Ygb2NjdXJlbmNlIG9mIGVhY2ggaW5zdHJ1bWVudGVkIHZhbHVlIHRocm91Z2ggdGhlIGRhdGFzZXQuDQpgYGB7ciBXU0MgYmFyIGNoYXJ0fQ0KZXBsX2JhciA8LSBnZ3Bsb3QoZGF0YSA9IFgyKSsNCiAgZ2VvbV9iYXIoYWVzKGVwbCksIHdpZHRoID0gMC4xLCBmaWxsID0gIiMxMTJDRUUiLCBzaG93LmxlZ2VuZCA9IEYpKw0KICBsYWJzKHg9ICJlcGwgSW5zdHJ1bWVudCIsIHk9IkNvdW50Iix0aXRsZSA9ICJGaWd1cmUgNjogRW1wbG95bWVudCBQcm90ZWN0aW9uIExlZ2lzbGF0aW9uLCBvY2N1cmVuY2Ugb2YgbGV2ZWxzIiwgY2FwdGlvbiA9ICJOPTM1NyIpDQp3c2NfYmFyIDwtIGdncGxvdChkYXRhPVgyKSsNCiAgZ2VvbV9iYXIoYWVzKHdzYyksIGZpbGwgPSAiIzExMkNFRSIsIHNob3cubGVnZW5kID0gRikrDQogIGxhYnMoeD0id3NjIEluc3RydW1lbnQiLCB5PSJDb3VudCIsIHRpdGxlID0gIkZpZ3VyZSA3OiBXYWdlIFNldHRpbmcgQ29vcmRpbmF0aW9uLCBvY2N1cmVuY2Ugb2YgdHlwZSIsIGNhcHRpb24gPSAiTj0zNTciKQ0KDQplcGxfYmFyO3dzY19iYXINCg0KYGBgDQoNCg0KIyMjIEZpZ3VyZXMgOC0xNDogRmFjZXQgV3JhcHBlZCBDaGFydHMgZm9yIHBhcGVyDQoqIGNoZWNrIGZpZ3VyZSBudW1iZXJzDQpgYGB7ciBGYWNldCB3cmFwcGVkIGNoYXJ0c30NCiNGYWNldCBjaGFydHMNCiNodXIgdnMgdGF4Y29ycCBieSB5ZWFyDQpGVzEgPC0gZ2dwbG90KGRhdGE9WDIpKw0KICBnZW9tX3BvaW50KG1hcHBpbmc9YWVzKHg9dGF4Y29ycCx5PWh1ciksIGNvbG9yID0gIiNFRUQzMTEiICkgKyANCiAgZ2VvbV9zbW9vdGgobWFwcGluZz1hZXMoeD10YXhjb3JwLHk9aHVyKSwgbWV0aG9kID0gbG0sIHNlPUYsIGNvbG9yID0gIiMxMTJDRUUiKSsNCiAgZmFjZXRfd3JhcCh+dGltZTEpICsgbGFicyh4ID0gInRheGNvcnAiLCB5PSJodXIiLCB0aXRsZSA9ICJGaWd1cmUgODogaHVyIHZzIHRheGNvcnAgdGltZSBmYWN0b3IiKQ0KRlcxMSA8LSBnZ3Bsb3QoZGF0YT1YMikrDQogIGdlb21fcG9pbnQobWFwcGluZz1hZXMoeD10YXhjb3JwLHk9aHVyKSwgY29sb3IgPSAiI0VFRDMxMSIgKSArIA0KICBnZW9tX3Ntb290aChtYXBwaW5nPWFlcyh4PXRheGNvcnAseT1odXIpLCBtZXRob2QgPSBsbSwgc2U9RiwgY29sb3IgPSAiIzExMkNFRSIpKw0KICBmYWNldF93cmFwKH5sb2NhdGlvbjEpICsgbGFicyh4ID0gInRheGNvcnAiLCB5PSJodXIiLCB0aXRsZSA9ICJGaWd1cmUgODogaHVyIHZzIHRheGNvcnAgbG9jYXRpb24gZmFjdG9yIikNCg0KI2h1ciB2cyB1ZA0KRlcyIDwtIGdncGxvdChkYXRhPVgyKSsNCiAgZ2VvbV9wb2ludChtYXBwaW5nPWFlcyh4PXVkLHk9aHVyKSwgY29sb3IgPSAiI0VFRDMxMSIpKw0KICBnZW9tX3Ntb290aChtYXBwaW5nPWFlcyh4PXVkLHk9aHVyKSwgbWV0aG9kID0gbG0sIHNlPUYsIGNvbG9yID0gIiMxMTJDRUUiKSsNCiAgZmFjZXRfd3JhcCh+dGltZTEpKyBsYWJzKHggPSAidWQiLCB5PSJodXIiLCB0aXRsZSA9ICJGaWd1cmUgOTogaHVyIHZzIHVkIHRpbWUgZmFjdG9yIikNCkZXMjEgPC0gZ2dwbG90KGRhdGE9WDIpKw0KICBnZW9tX3BvaW50KG1hcHBpbmc9YWVzKHg9dWQseT1odXIpLCBjb2xvciA9ICIjRUVEMzExIikrDQogIGdlb21fc21vb3RoKG1hcHBpbmc9YWVzKHg9dWQseT1odXIpLCBtZXRob2QgPSBsbSwgc2U9RiwgY29sb3IgPSAiIzExMkNFRSIpKw0KICBmYWNldF93cmFwKH5sb2NhdGlvbjEpKyBsYWJzKHggPSAidWQiLCB5PSJodXIiLCB0aXRsZSA9ICJGaWd1cmUgOTogaHVyIHZzIHVkIGxvY2F0aW9uIGZhY3RvciIpDQoNCiNodXIgdnMgY2JjDQpGVzMgPC0gZ2dwbG90KGRhdGE9WDIpKw0KICBnZW9tX3BvaW50KG1hcHBpbmc9YWVzKHg9Y2JjLHk9aHVyKSwgY29sb3IgPSAiI0VFRDMxMSIpKw0KICBnZW9tX3Ntb290aChtYXBwaW5nPWFlcyh4PWNiYyx5PWh1ciksIG1ldGhvZCA9IGxtLCBzZT1GLCBjb2xvciA9ICIjMTEyQ0VFIikrDQogIGZhY2V0X3dyYXAofnRpbWUxKSsgbGFicyh4ID0gImNiYyIsIHk9Imh1ciIsIHRpdGxlID0gIkZpZ3VyZSAxMDogaHVyIHZzIGNiYyB0aW1lIGZhY3RvciIpDQpGVzMxIDwtIGdncGxvdChkYXRhPVgyKSsNCiAgZ2VvbV9wb2ludChtYXBwaW5nPWFlcyh4PWNiYyx5PWh1ciksIGNvbG9yID0gIiNFRUQzMTEiKSsNCiAgZ2VvbV9zbW9vdGgobWFwcGluZz1hZXMoeD1jYmMseT1odXIpLCBtZXRob2QgPSBsbSwgc2U9RiwgY29sb3IgPSAiIzExMkNFRSIpKw0KICBmYWNldF93cmFwKH5sb2NhdGlvbjEpKyBsYWJzKHggPSAiY2JjIiwgeT0iaHVyIiwgdGl0bGUgPSAiRmlndXJlIDEwOiBodXIgdnMgY2JjIGxvY2F0aW9uIGZhY3RvciIpDQoNCiNodXIgdnMgYnJyDQpGVzQgPC0gZ2dwbG90KGRhdGE9WDIpKw0KICBnZW9tX3BvaW50KG1hcHBpbmc9YWVzKHg9YnJyMXkseT1odXIpLCBjb2xvciA9ICIjRUVEMzExIikrDQogIGdlb21fc21vb3RoKG1hcHBpbmc9YWVzKHg9YnJyMXkseT1odXIpLCBtZXRob2QgPSBsbSwgc2U9RiwgY29sb3IgPSAiIzExMkNFRSIpKw0KICBmYWNldF93cmFwKH50aW1lMSkrIGxhYnMoeCA9ICJicnIiLCB5PSJodXIiLCB0aXRsZSA9ICJGaWd1cmUgMTE6IGh1ciB2cyBicnIxeSB0aW1lIGZhY3RvciIpDQpGVzQxIDwtIGdncGxvdChkYXRhPVgyKSsNCiAgZ2VvbV9wb2ludChtYXBwaW5nPWFlcyh4PWJycjF5LHk9aHVyKSwgY29sb3IgPSAiI0VFRDMxMSIpKw0KICBnZW9tX3Ntb290aChtYXBwaW5nPWFlcyh4PWJycjF5LHk9aHVyKSwgbWV0aG9kID0gbG0sIHNlPUYsIGNvbG9yID0gIiMxMTJDRUUiKSsNCiAgZmFjZXRfd3JhcCh+bG9jYXRpb24xKSsgbGFicyh4ID0gImJyciIsIHk9Imh1ciIsIHRpdGxlID0gIkZpZ3VyZSAxMTogaHVyIHZzIGJycjF5IGxvY2F0aW9uIGZhY3RvciIpDQoNCiNodXIgdnMgcHNsbQ0KRlc1IDwtIGdncGxvdChkYXRhPVgyKSsNCiAgZ2VvbV9wb2ludChtYXBwaW5nPSBhZXMoeD1wc2xtLHk9aHVyKSwgY29sb3IgPSAiI0VFRDMxMSIpKw0KICBnZW9tX3Ntb290aChtYXBwaW5nPWFlcyh4PXBzbG0sIHk9aHVyKSwgbWV0aG9kID0gbG0sIHNlPUYsIGNvbG9yID0gIiMxMTJDRUUiKSsNCiAgZmFjZXRfd3JhcCh+dGltZTEpKyBsYWJzKHg9InBzbG0iLCB5PSJodXIiLCB0aXRsZSA9ICJGaWd1cmUgMTI6IHVyIHZzIHBzbG0gdGltZSBmYWN0b3IiKQ0KRlc1MSA8LSBnZ3Bsb3QoZGF0YT1YMikrDQogIGdlb21fcG9pbnQobWFwcGluZz0gYWVzKHg9cHNsbSx5PWh1ciksIGNvbG9yID0gIiNFRUQzMTEiKSsNCiAgZ2VvbV9zbW9vdGgobWFwcGluZz1hZXMoeD1wc2xtLCB5PWh1ciksIG1ldGhvZCA9IGxtLCBzZT1GLCBjb2xvciA9ICIjMTEyQ0VFIikrDQogIGZhY2V0X3dyYXAofmxvY2F0aW9uMSkrIGxhYnMoeD0icHNsbSIsIHk9Imh1ciIsIHRpdGxlID0gIkZpZ3VyZSAxMjogdXIgdnMgcHNsbSBsb2NhdGlvbiBmYWN0b3IiKQ0KDQoNCiNodXIgdnMgdHRyDQpGVzcgPC0gZ2dwbG90KGRhdGE9WDIpKw0KICBnZW9tX3BvaW50KG1hcHBpbmc9YWVzKHg9dHRyLHk9aHVyKSwgY29sb3IgPSAiI0VFRDMxMSIpKw0KICBnZW9tX3Ntb290aChtYXBwaW5nPWFlcyh4PXR0cix5PWh1ciksIG1ldGhvZCA9IGxtLCBzZT1GLCBjb2xvciA9ICIjMTEyQ0VFIikrDQogIGZhY2V0X3dyYXAofnRpbWUxKSsgbGFicyh4ID0gInR0ciIsIHk9Imh1ciIsIHRpdGxlID0gIkZpZ3VyZSAxMzogaHVyIHZzIHR0ciB0aW1lIGZhY3RvciIpDQpGVzcxIDwtIGdncGxvdChkYXRhPVgyKSsNCiAgZ2VvbV9wb2ludChtYXBwaW5nPWFlcyh4PXR0cix5PWh1ciksIGNvbG9yID0gIiNFRUQzMTEiKSsNCiAgZ2VvbV9zbW9vdGgobWFwcGluZz1hZXMoeD10dHIseT1odXIpLCBtZXRob2QgPSBsbSwgc2U9RiwgY29sb3IgPSAiIzExMkNFRSIpKw0KICBmYWNldF93cmFwKH5sb2NhdGlvbjEpKyBsYWJzKHggPSAidHRyIiwgeT0iaHVyIiwgdGl0bGUgPSAiRmlndXJlIDEzOiBodXIgdnMgdHRyIGxvY2F0aW9uIGZhY3RvciIpDQoNCiNodXIgdnMgZGVsdGFfaQ0KRlc4IDwtIGdncGxvdChkYXRhPVgyKSsNCiAgZ2VvbV9wb2ludChtYXBwaW5nPWFlcyh4PWluZl9nZHBkLHk9aHVyKSwgY29sb3IgPSAiI0VFRDMxMSIpKw0KICBnZW9tX3Ntb290aChtYXBwaW5nPWFlcyh4PWluZl9nZHBkLHk9aHVyKSwgbWV0aG9kID0gbG0sIHNlPUYsIGNvbG9yID0gIiMxMTJDRUUiKSsNCiAgZmFjZXRfd3JhcCh+dGltZTEpKyBsYWJzKHggPSAiaW5mX2dkcGQiLCB5PSJodXIiLCB0aXRsZSA9ICJGaWd1cmUgMTQ6IGh1ciB2cyBpbmZfZ2RwZCB0aW1lIGZhY3RvciIpDQpGVzgxIDwtIGdncGxvdChkYXRhPVgyKSsNCiAgZ2VvbV9wb2ludChtYXBwaW5nPWFlcyh4PWluZl9nZHBkLHk9aHVyKSwgY29sb3IgPSAiI0VFRDMxMSIpKw0KICBnZW9tX3Ntb290aChtYXBwaW5nPWFlcyh4PWluZl9nZHBkLHk9aHVyKSwgbWV0aG9kID0gbG0sIHNlPUYsIGNvbG9yID0gIiMxMTJDRUUiKSsNCiAgZmFjZXRfd3JhcCh+bG9jYXRpb24xKSsgbGFicyh4ID0gImluZl9nZHBkIiwgeT0iaHVyIiwgdGl0bGUgPSAiRmlndXJlIDE0OiBodXIgdnMgaW5mX2dkcGQgbG9jYXRpb24gZmFjdG9yIikNCg0KRlcxOyBGVzExO0ZXMjtGVzIxO0ZXMztGVzMxO0ZXNDtGVzQxO0ZXNTtGVzUxO0ZXNztGVzcxO0ZXODtGVzgxDQpgYGANCiMjIERhdGEgQW5hbHlzaXMsIHdpdGggZXhwZXJpbWVudHMgYW5kIHRlc3RzDQoNCiogZGV0YWlscyBvZiB1c2Ugb2YgdGhlIHBsbSBwYWNrYWdlIGFyZSBmb3VuZCBoZXJlIDxodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvcGxtL3BsbS5wZGY+DQoqICJnZXR0aW5nIHN0YXJ0ZWQgaW4gRml4ZWQvUmFuZG9tIGVmZmVjdHMgbW9kZWxzIHVzaW5nIFIiDQo8aHR0cHM6Ly9yc3R1ZGlvLXB1YnMtc3RhdGljLnMzLmFtYXpvbmF3cy5jb20vMzcyNDkyXzNlMDVmMzhkZDNmMjQ4ZTg5Y2RlZGQzMTdkNjAzYjlhLmh0bWw+DQoNCmBgYHtyIERhdGEgQW5hbHlzaXMgd2l0aCB0ZXN0cyBhbmQgRXhwZXJpbWVudHN9DQojUF9kYXRhIGNyZWF0ZWQgaW4gc3RlcCAxDQojIEV4cGVyaW1lbnRzIHdpdGggbG0gYW5kIHBsbQ0KI09MUyBwZXIgImdldHRpbmcgc3RhcnRlZCINCiNyZXF1aXJlKGNhcikNCiMgb2xzIDwtIGxtKGh1cn50YXhjb3JwLCBkYXRhID0gUF9kYXRhKQ0KIyB5aGF0IDwtIG9scyRmaXR0ZWQNCiMgUGxvdDEgPC0gZ2dwbG90KGRhdGE9UF9kYXRhLCBhZXMoeD10YXhjb3JwKSkrDQojICAgZ2VvbV9wb2ludChtYXBwaW5nPWFlcyh4PXRheGNvcnAseT1odXIpLCBjb2xvciA9ICIjRUVEMzExIiApICsgDQojICAgZ2VvbV9zbW9vdGgobWFwcGluZz1hZXMoeD10YXhjb3JwLHk9aHVyKSwgbWV0aG9kID0gbG0sIHNlPUYsIGNvbG9yID0gIiMxMTJDRUUiKQ0KIyBmaXhlZC5kdW0gPC0gbG0oaHVyfnRheGNvcnAgKyBmYWN0b3IobG9jYXRpb24xKS0xLCBkYXRhPVBfZGF0YSkNCiMgeWhhdDEgPC0gZml4ZWQuZHVtJGZpdHRlZA0KIyBQbG90MiA8LSBzcCh5aGF0MX5QX2RhdGEkdGF4Y29ycHxQX2RhdGEkbG9jYXRpb24xLCB4bGFiPSJ0YXhjb3JwIiwgeWxhYj15aGF0LA0KIyAgICAgICAgICAgIGJveHBsb3Q9Riwgc21vb3RoPUYpDQoNCiMgUGxvdDMgPC0gc2NhdHRlcnBsb3QoZGF0YT1QX2RhdGEsaHVyfnRpbWUxfGxvY2F0aW9uMSkNCiNPTFMgd2l0aCBMTSwgbm8gaW5zdHJ1bWVudHMgZnJvbSBYMg0KUmVnMDEgPC0gbG0oaHVyfnRheGNvcnAgKyB1ZCArIGNiYyArIGJycjF5ICsgcHNsbSArdHRyICsgaW5mX2dkcGQsIGRhdGE9WDIpDQojT0xTIHdpdGggcGxtLCBubyBpbnN0cnVtZW50cyBmcm9tIFBfZGF0YQ0KUmVnMDIgPC0gcGxtKGh1cn50YXhjb3JwICsgdWQgKyBjYmMgKyBicnIxeSArIHBzbG0gKyB0dHIgKyBpbmZfZ2RwZCwgZGF0YT1QX2RhdGEpDQojT0xTIHdpdGggbG0sIGluc3RydW1lbnRzLCBmcm9tIFBfZGF0YSAtIGluY2x1ZGUgYXMgYmFzZWxpbmUNClJlZzAzIDwtIGxtKGh1cn50YXhjb3JwICsgdWQgKyBjYmMgKyBicnIxeSArIHBzbG0gK3dzYyArZXBsICt0dHIgKyBpbmZfZ2RwZCwgZGF0YT1QX2RhdGEpDQojT0xTIHdpdGggcGxtLCBpbnN0cnVtZW50cyBmcm9tIFBfZGF0YQ0KUmVnMDQgPC0gcGxtKGh1cn50YXhjb3JwICsgdWQgKyBjYmMgKyBicnIxeSArIHBzbG0gK3dzYyArZXBsICt0dHIgKyBpbmZfZ2RwZCwgZGF0YT1QX2RhdGEpDQojUG9vbGVkLCBwcmVmZXJyZWQgbW9kZWwgKGNsZWFuKQ0KUDJTTFMgPC0gcGxtKGh1ciB+IHRheGNvcnAgKyB1ZCArIGNiYyArIGJycjF5ICsgdHRyICsgaW5mX2dkcGQgKyBwc2xtDQogICAgICAgICAgICAgICAgfC4tdGF4Y29ycCArIGVwbCArIHdzYywgDQogICAgICAgICAgICAgICAgZGF0YSA9IFBfZGF0YSwgbW9kZWwgPSAicG9vbGluZyIpDQojUG9vbGVkIEV4cGVyaW1lbnQsIHZlcmlmaWVkIGFsbCB0aGUgc2FtZSBhcyBQMlNMUw0KUDJTTFNfMSA8LSBwbG0oaHVyIH4gdGF4Y29ycCArIHVkICsgY2JjICsgYnJyMXkgKyB0dHIgKyBpbmZfZ2RwZCArIHBzbG0NCiAgICAgICAgICAgICAgICAgfC4gLXRheGNvcnAgKyBlcGwgKyB3c2MsIA0KICAgICAgICAgICAgICAgICBkYXRhID0gWDIsIG1vZGVsID0gInBvb2xpbmciKQ0KUDJTTFNfMiA8LSBwbG0oaHVyIH4gdGF4Y29ycCArIHVkICsgY2JjICsgYnJyMXkgKyB0dHIgKyBpbmZfZ2RwZCArIHBzbG0NCiAgICAgICAgICAgICAgICAgfCArIHVkICsgY2JjICsgYnJyMXkgKyB0dHIgKyBpbmZfZ2RwZCArIHBzbG0gKyBlcGwgKyB3c2MsIA0KICAgICAgICAgICAgICAgICBkYXRhID0gUF9kYXRhLCBtb2RlbCA9ICJwb29saW5nIikNCiNCZXR3ZWVuIGVzdGltYXRvciANCkIyU0xTIDwtIHVwZGF0ZShQMlNMUywgbW9kZWw9ImJldHdlZW4iKSAjdGhpcyBpcyBiYWQNCiNGRSBvciB3aXRoaW4gZXN0aW1hdG9yDQpGRTJTTFMgPC0gdXBkYXRlKFAyU0xTLCBtb2RlbD0id2l0aGluIikNCiNSYW5kb20gZXN0aW1hdG9yDQpSRTJTTFMgPC0gdXBkYXRlKFAyU0xTLCBtb2RlbD0icmFuZG9tIikNCiNDaGVjayBvdXRwdXQgLSBsb29rcyBiYWQgbG9sDQojIHN0YXJnYXplcihSZWcwMSxSZWcwMixSZWcwMyxSZWcwNCxQMlNMUyxCMlNMUywgdHlwZSA9ICJ0ZXh0IikNCg0KDQojVGltZSBGaXhlZCBFZmZlY3RzIGFuZCBleHBlcmltZW50cw0KI09yaWdpbmFsIEZvcm0gLSBiZXN0IGZpdCBtb2RlbA0KRkUyU0xTX1QgPC0gcGxtKGh1ciB+IHRheGNvcnAgKyB1ZCArIGNiYyArIGJycjF5ICsgdHRyICsgaW5mX2dkcGQgK3BzbG0NCiAgICAgICAgICAgICAgICArZmFjdG9yKHRpbWUxKQ0KICAgICAgICAgICAgICAgIHwuIC10YXhjb3JwICsgZXBsICsgd3NjLCANCiAgICAgICAgICAgICAgICBkYXRhID0gUF9kYXRhLCBtb2RlbCA9ICJ3aXRoaW4iKQ0KI2FkZGVkICJ0aW1lIiBlZmZlY3QgdG8gYXJndW1lbnRzDQpGRTJTTFNfVDEgPC0gcGxtKGh1ciB+IHRheGNvcnAgKyB1ZCArIGNiYyArIGJycjF5ICsgdHRyICsgaW5mX2dkcGQgK3BzbG0NCiAgICAgICAgICAgICAgICArZmFjdG9yKHRpbWUxKQ0KICAgICAgICAgICAgICAgIHwuIC10YXhjb3JwICsgZXBsICsgd3NjLCANCiAgICAgICAgICAgICAgICBkYXRhID0gUF9kYXRhLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQojU3RyZWFtbGluZWQNClRGRTJTTFMxIDwtIHVwZGF0ZShQMlNMUywgbW9kZWw9IndpdGhpbiIsIGVmZmVjdCA9ICJ0aW1lIikNCg0KI2NoZWNrIG91dHB1dA0KI3N0YXJnYXplcihGRTJTTFNfVCxGRTJTTFNfVDEsVEZFMlNMUzEsIHR5cGUgPSAidGV4dCIpDQoNCiNJbmRpdmlkdWFsIEZFIGFuZCBFeHBlcmltZW50cw0KI09yaWdpbmFsIG1vZGVsIC0gYWxsIGFyZSBleGFjdCBzYW1lDQpGRTJTTFNfTCA8LSBwbG0oaHVyIH4gdGF4Y29ycCArIHVkICsgY2JjICsgYnJyMXkgKyB0dHIgKyBpbmZfZ2RwZCArIHBzbG0NCiAgICAgICAgICAgICAgICArZmFjdG9yKGxvY2F0aW9uMSkNCiAgICAgICAgICAgICAgICB8LiAtdGF4Y29ycCArIGVwbCArIHdzYywgDQogICAgICAgICAgICAgICAgZGF0YSA9IFBfZGF0YSwgbW9kZWwgPSAid2l0aGluIikNCiMgYWRkZWQgImluZGl2aWR1YWwiIGVmZmVjdCB0byBhcmd1bWVudHMgLSBzcGVjaWZ5aW5nIGVmZmVjdCBwcmV2ZW50cyBzYW1lIHJlc3VsdHMgYXNfVEwgcmVncw0KRkUyU0xTX0wxIDwtIHBsbShodXIgfiB0YXhjb3JwICsgdWQgKyBjYmMgKyBicnIxeSArIHR0ciArIGluZl9nZHBkICsgcHNsbQ0KICAgICAgICAgICAgICAgICtmYWN0b3IobG9jYXRpb24xKQ0KICAgICAgICAgICAgICAgIHwuIC10YXhjb3JwICsgZXBsICsgd3NjLCANCiAgICAgICAgICAgICAgICBkYXRhID0gUF9kYXRhLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAiaW5kaXZpZHVhbCIpDQojIHN0cmVhbWxpbmVkLCB5ZXMgc2FtZSBhcyBhYm92ZQ0KRkUyU0xTX0wyIDwtIHVwZGF0ZShQMlNMUywgbW9kZWw9IndpdGhpbiIsIGVmZmVjdD0iaW5kaXZpZHVhbCIpDQojY2hlY2sgb3V0cHV0DQojc3RhcmdhemVyKEZFMlNMU19MLCBGRTJTTFNfTDEsIEZFMlNMU19MMiwgdHlwZSA9ICJ0ZXh0IikNCg0KI1RpbWUgYW5kIEluZGl2aWR1YWwgRkUNCiNPcmlnaW5hbCBtb2RlbA0KRkUyU0xTX1RMIDwtIHBsbShodXIgfiB0YXhjb3JwICsgdWQgKyBjYmMgKyBicnIxeSArIHR0ciArIGluZl9nZHBkICsgcHNsbQ0KICAgICAgICAgICAgICAgICArZmFjdG9yKHRpbWUxKSArZmFjdG9yKGxvY2F0aW9uMSkNCiAgICAgICAgICAgICAgICAgfC4gLXRheGNvcnAgKyBlcGwgKyB3c2MsIA0KICAgICAgICAgICAgICAgICBkYXRhID0gUF9kYXRhLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidHdvd2F5cyIpDQojIHJlbW92ZWQgdHdvd2F5cyBlZmZlY3QgZnJvbSBhcmd1bWVudCAtIGJlc3QgZml0DQpGRTJTTFNfVEwxIDwtIHBsbShodXIgfiB0YXhjb3JwICsgdWQgKyBjYmMgKyBicnIxeSArIHR0ciArIGluZl9nZHBkICsgcHNsbQ0KICAgICAgICAgICAgICAgICArZmFjdG9yKHRpbWUxKSArZmFjdG9yKGxvY2F0aW9uMSkNCiAgICAgICAgICAgICAgICAgfC4gLXRheGNvcnAgKyBlcGwgKyB3c2MsIA0KICAgICAgICAgICAgICAgICBkYXRhID0gUF9kYXRhLCBtb2RlbCA9ICJ3aXRoaW4iKQ0KI3N0cmVhbWxpbmVkMSwgYWRkZWQgYmFjayBlZmZlY3QNCkZFMlNMU19UTDIgPC0gdXBkYXRlKFAyU0xTLCBtb2RlbD0id2l0aGluIiwgZWZmZWN0PSJ0d293YXlzIikNCiNzdHJlYW1saW5lZDIsIHJlbW92ZWQgZWZmZWN0IGZyb20gdXBkYXRlIA0KRkUyU0xTX1RMMyA8LSB1cGRhdGUoUDJTTFMsIG1vZGVsPSJ3aXRoaW4iKQ0KI2NoZWNrIG91dHB1dA0KI3N0YXJnYXplcihGRTJTTFNfVEwsIEZFMlNMU19UTDEsIEZFMlNMU19UTDIsIEZFMlNMU19UTDMsIHR5cGUgPSAidGV4dCIpDQoNCiNMTSBmb3IgcmFuZG9tIGVmZmVjdHMgdnMgT0xTDQpQWDEgPC0gcGxtdGVzdChQMlNMUykNCiMjQlAgTE0gZm9yIHJhbmRvbSBlZmZlY3RzLCBudWxsIGlzIG5vIHBhbmVsIGVmZmVjdCwgaW5jbHVkZQ0KUFgxMSA8LSBwbG10ZXN0KFAyU0xTLCB0eXBlPWMoImJwIikpDQoNCiMgVGVzdGluZyB0aW1lLWZpeGVkIGVmZmVjdHMsIG51bGwgaXMgbm8gRlRFDQpQWDEyIDwtIHBsbXRlc3QoRkUyU0xTLCBjKCJ0aW1lIiksIHR5cGU9YygiYnAiKSkNCg0KI0xNIGZvciBmaXhlZCBlZmZlY3RzIHZzIE9MUywgZ2VuZXJpYyANClBYMiA8LSBwRnRlc3QoRkUyU0xTLFAyU0xTKQ0KI0xNIGZvciBmaXhlZCBlZmZlY3RzdyB2cyBPTFMsIFRpbWUgc3BlY2lmaWMNClBYMjEgPC0gcEZ0ZXN0KFRGRTJTTFMxLCBGRTJTTFMpDQojaGF1c21hbiB0ZXN0IGZvciBmaXhlZCB2cyByYW5kb20gZWZmZWN0cywgbnVsbD1yYW5kb20gcHJlZmVycmVkDQpQWDYgPC0gcGh0ZXN0KFJFMlNMUyxGRTJTTFMpDQoNCiNDcm9zcyBzZWN0aW9uYWwgZGVwZW5kYW5jZSwgbnVsbCBpcyB0aGF0IHJlc2lkdWFscyBhY3Jvc3MgZW50aXRpZXMgYXJlIG5vdA0KI2NvcnJlbGF0ZWQuIFVzZWQgdG8gdGVzdCB3aGV0aGVyIHJlc2lkdWFscyBhcmUgY29ycmVsYXRlZCBhY3Jvc3MgZW50aXRpZXMuIENTIGRlcCANCiNjYW4gbGVhZCB0byBiaWFzIGluIHRlc3QgcmVzdWx0cw0KI0JQTE0gZm9yIGNyb3NzIHNlY3Rpb25hbCBkZXBlbmRlbmNlIGluIHBhbmVscw0KUFg3IDwtIHBjZHRlc3QoRkUyU0xTLCB0ZXN0PWMoImxtIikpDQojIFBlc2FyYW4gY3Jvc3Mgc2VjdGlvbmFsIGRlcGVuZGVuY2UNClBYNzEgPC0gcGNkdGVzdChGRTJTTFMsIHRlc3Q9YygiY2QiKSkNCg0KIyBCcmV1c2NoIEdvZGZyZXkgZm9yIFNDIGluIHBhbmVscy4gTnVsbCBpcyBubyBTQy4gTWF5IG5vdCBtYXR0ZXIgYXMgYSByZWxhdGl2aWx5IA0KIyBzaG9ydCBzdHVkeSBwZXJpb2QgVD0xOQ0KUFg4IDwtIHBiZ3Rlc3QoRkUyU0xTKQ0KI0FERiBmb3Igc3RvY2hhc3RpYyB0cmVuZHMsIE51bGwtIHNlcmllcyBoYXMgdW5pdCByb290Lg0KcmVxdWlyZSh0c2VyaWVzKQ0KUFg5IDwtIGFkZi50ZXN0KFBfZGF0YSRodXIsIGs9MikNCiNCUCBudWxsIGlzIGhvbW9za2VkYXN0aWNpdHksIGFsdGVybmF0aXZlOiBoZXRlcm9za2FkYXN0aWNpdHkNClBYMCA8LSBicHRlc3QoaHVyIH4gdGF4Y29ycCArIHVkICsgY2JjICsgYnJyMXkgKyB0dHIgKyBpbmZfZ2RwZCArIHBzbG0NCiAgICAgICAgICAgICAgICArZmFjdG9yKGxvY2F0aW9uMSksIGRhdGE9UF9kYXRhLCBzdHVkZW50aXplID0gRikNCg0KUFgxMTtQWDI7UFg2O1BYNztQWDcxO1BYODtQWDk7UFgwDQpgYGANCg0KDQojIyMgRmluYWwgT3V0cHV0IFRhYmxlIDMNCipOT1RFOiB0aGUgcCB2YWx1ZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUgaGF2ZSB0byBiZSBmaXhlZCBpbiB0aGUgb3V0cHV0IGRvY3VtZW50LCB3aXRoIGNvZGUgKHRvIGNvcHlwYXN0YSk6IA0KPHNwYW4+JiM0Mjs8L3NwYW4+IHRvIHJlcGxhY2UgYXN0ZXJpc2tzIHRoYXQgY2F1c2UgYm9sZGluZw0KYGBge3IgUmVncmVzc2lvbiBPdXRwdXR9DQpGT3V0cHV0IDwtIHN0YXJnYXplcihSZWcwMywgUDJTTFMsICBGRTJTTFNfVDEsIEZFMlNMU19MMSwgIEZFMlNMU19UTCwgUkUyU0xTLA0KICAgICAgICAgIHR5cGUgPSAiaHRtbCIsIHRpdGxlID0gIlRhYmxlIDM6IFJlZ3Jlc3Npb25zIHRvIEV4cGxhaW4gdGhlIFVuZW1wbG95bWVudCBSYXRlIiwgDQogICAgICAgICAgbW9kZWwubmFtZXMgPSBGLA0KICAgICAgICAgIGtlZXAgPSBjKCJ0YXhjb3JwIiwgInVkIiwiY2JjIiwiYnJyMXkiLCAidHRyIiwiaW5mX2dkcGQiLCAiaHVyIiwgInBzbG0iLCAiZXBsIiwid3NjIiwgIkNvbnN0YW50IiksDQogICAgICAgICAgY29sdW1uLmxhYmVscyA9IGMoIk9MUyIsICIyU0xTIFBvb2xlZCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyU0xTIFRpbWUgRml4ZWQgRWZmZWN0cyIsICIyU0xTIEluZGl2aWR1YWwgRml4ZWQgRWZmZWN0cyIsICIyU0xTIFRpbWUgYW5kIEluZGl2aWR1YWwgRml4ZWQgRWZmZWN0cyIsICIyU0xTIFJhbmRvbSBFZmZlY3RzIikNCiAgICAgICAgICApDQojIHJ1biBpbiBjb25zb2xlLCBpdCdzIG1lc3N5DQpgYGANCjx0YWJsZSBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPjxjYXB0aW9uPjxzdHJvbmc+VGFibGUgMzogUmVncmVzc2lvbnMgdG8gRXhwbGFpbiB0aGUgVW5lbXBsb3ltZW50IFJhdGU8L3N0cm9uZz48L2NhcHRpb24+DQo8dHI+PHRkIGNvbHNwYW49IjciIHN0eWxlPSJib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2siPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvdGQ+PHRkIGNvbHNwYW49IjYiPjxlbT5EZXBlbmRlbnQgdmFyaWFibGU6PC9lbT48L3RkPjwvdHI+DQo8dHI+PHRkPjwvdGQ+PHRkIGNvbHNwYW49IjYiIHN0eWxlPSJib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2siPjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC90ZD48dGQgY29sc3Bhbj0iNiI+aHVyPC90ZD48L3RyPg0KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48L3RkPjx0ZD5PTFM8L3RkPjx0ZD4yU0xTIFBvb2xlZDwvdGQ+PHRkPjJTTFMgVGltZSBGaXhlZCBFZmZlY3RzPC90ZD48dGQ+MlNMUyBJbmRpdmlkdWFsIEZpeGVkIEVmZmVjdHM8L3RkPjx0ZD4yU0xTIFRpbWUgYW5kIEluZGl2aWR1YWwgRml4ZWQgRWZmZWN0czwvdGQ+PHRkPjJTTFMgUmFuZG9tIEVmZmVjdHM8L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvdGQ+PHRkPigxKTwvdGQ+PHRkPigyKTwvdGQ+PHRkPigzKTwvdGQ+PHRkPig0KTwvdGQ+PHRkPig1KTwvdGQ+PHRkPig2KTwvdGQ+PC90cj4NCjx0cj48dGQgY29sc3Bhbj0iNyIgc3R5bGU9ImJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjayI+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+dGF4Y29ycDwvdGQ+PHRkPi0wLjUwMTxzdXA+KioqPC9zdXA+PC90ZD48dGQ+LTEyLjkwNDwvdGQ+PHRkPi0zLjI2NzwvdGQ+PHRkPi0zLjc1MjxzdXA+Kjwvc3VwPjwvdGQ+PHRkPi0xLjk5MjwvdGQ+PHRkPi0zLjIwODwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC90ZD48dGQ+KDAuMTM0KTwvdGQ+PHRkPigxNC41MTYpPC90ZD48dGQ+KDQuMDg4KTwvdGQ+PHRkPigyLjAyNik8L3RkPjx0ZD4oMS45MzApPC90ZD48dGQ+KDIuMjM4KTwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPg0KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij51ZDwvdGQ+PHRkPi0wLjAwNDwvdGQ+PHRkPjAuMjYzPC90ZD48dGQ+MC4wMzM8L3RkPjx0ZD4wLjAxMTwvdGQ+PHRkPjAuMTE5PC90ZD48dGQ+LTAuMDAxPC90ZD48L3RyPg0KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48L3RkPjx0ZD4oMC4wMTQpPC90ZD48dGQ+KDAuMzUxKTwvdGQ+PHRkPigwLjEwMik8L3RkPjx0ZD4oMC4wNjgpPC90ZD48dGQ+KDAuMTI5KTwvdGQ+PHRkPigwLjA1Mik8L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+Y2JjPC90ZD48dGQ+MC4wNDI8c3VwPioqKjwvc3VwPjwvdGQ+PHRkPjAuMTU4PC90ZD48dGQ+MC4wNTQ8L3RkPjx0ZD4wLjA1NzwvdGQ+PHRkPjAuMDc1PHN1cD4qKjwvc3VwPjwvdGQ+PHRkPi0wLjAwMjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC90ZD48dGQ+KDAuMDExKTwvdGQ+PHRkPigwLjE2MCk8L3RkPjx0ZD4oMC4wNDQpPC90ZD48dGQ+KDAuMDQ5KTwvdGQ+PHRkPigwLjAzNyk8L3RkPjx0ZD4oMC4wMzgpPC90ZD48L3RyPg0KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPmJycjF5PC90ZD48dGQ+LTAuMDA2PC90ZD48dGQ+MC4yNDY8L3RkPjx0ZD4wLjAzODwvdGQ+PHRkPjAuMDM5PHN1cD4qKjwvc3VwPjwvdGQ+PHRkPjAuMDM2PHN1cD4qKio8L3N1cD48L3RkPjx0ZD4wLjAzOTxzdXA+KioqPC9zdXA+PC90ZD48L3RyPg0KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48L3RkPjx0ZD4oMC4wMTApPC90ZD48dGQ+KDAuMzIxKTwvdGQ+PHRkPigwLjA5MSk8L3RkPjx0ZD4oMC4wMTYpPC90ZD48dGQ+KDAuMDEzKTwvdGQ+PHRkPigwLjAxNCk8L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+cHNsbTwvdGQ+PHRkPjEuNzI3PHN1cD4qKio8L3N1cD48L3RkPjx0ZD4tOS45MzQ8L3RkPjx0ZD4tMC44ODU8L3RkPjx0ZD4xLjQ1NzxzdXA+Kjwvc3VwPjwvdGQ+PHRkPjIuMTgwPHN1cD4qKio8L3N1cD48L3RkPjx0ZD4xLjYzNzxzdXA+Kio8L3N1cD48L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvdGQ+PHRkPigwLjMyMCk8L3RkPjx0ZD4oMTMuNjY2KTwvdGQ+PHRkPigzLjcyNSk8L3RkPjx0ZD4oMC43NzkpPC90ZD48dGQ+KDAuNTU4KTwvdGQ+PHRkPigwLjgyNSk8L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+d3NjPC90ZD48dGQ+LTEuMzA2PHN1cD4qKio8L3N1cD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvdGQ+PHRkPigwLjE3NCk8L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+ZXBsPC90ZD48dGQ+MC41NDM8c3VwPioqKjwvc3VwPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC90ZD48dGQ+KDAuMjAyKTwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPg0KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij50dHI8L3RkPjx0ZD4tMC4xMzc8c3VwPioqKjwvc3VwPjwvdGQ+PHRkPi0wLjcwMDwvdGQ+PHRkPi0wLjI2MDwvdGQ+PHRkPjAuNTE4PC90ZD48dGQ+MC4yMjA8L3RkPjx0ZD4wLjMyMjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC90ZD48dGQ+KDAuMDQ4KTwvdGQ+PHRkPigwLjcwNCk8L3RkPjx0ZD4oMC4yMjkpPC90ZD48dGQ+KDAuMzQzKTwvdGQ+PHRkPigwLjM1Nik8L3RkPjx0ZD4oMC4zMzEpPC90ZD48L3RyPg0KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPmluZl9nZHBkPC90ZD48dGQ+LTAuMjA3PHN1cD4qKjwvc3VwPjwvdGQ+PHRkPjIuMDc4PC90ZD48dGQ+MC41MjY8L3RkPjx0ZD4wLjE1NjwvdGQ+PHRkPjAuMDE5PC90ZD48dGQ+MC4xMjM8L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvdGQ+PHRkPigwLjEwMik8L3RkPjx0ZD4oMi40NjEpPC90ZD48dGQ+KDAuNjQ5KTwvdGQ+PHRkPigwLjI3OSk8L3RkPjx0ZD4oMC4xOTgpPC90ZD48dGQ+KDAuMzA0KTwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPg0KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij5Db25zdGFudDwvdGQ+PHRkPjExLjgxODxzdXA+KioqPC9zdXA+PC90ZD48dGQ+NTMuOTMwPC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+Mi4xMzU8L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvdGQ+PHRkPigxLjMwOSk8L3RkPjx0ZD4oNTAuMDEzKTwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPig0LjU5NSk8L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj4NCjx0cj48dGQgY29sc3Bhbj0iNyIgc3R5bGU9ImJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjayI+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+T2JzZXJ2YXRpb25zPC90ZD48dGQ+MzU3PC90ZD48dGQ+MzU3PC90ZD48dGQ+MzU3PC90ZD48dGQ+MzU3PC90ZD48dGQ+MzU3PC90ZD48dGQ+MzU3PC90ZD48L3RyPg0KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij5SPHN1cD4yPC9zdXA+PC90ZD48dGQ+MC4zNjc8L3RkPjx0ZD4wLjA0OTwvdGQ+PHRkPjAuMTAzPC90ZD48dGQ+MC4xODk8L3RkPjx0ZD4wLjI2NDwvdGQ+PHRkPjAuMjAyPC90ZD48L3RyPg0KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij5BZGp1c3RlZCBSPHN1cD4yPC9zdXA+PC90ZD48dGQ+MC4zNTA8L3RkPjx0ZD4wLjAzMDwvdGQ+PHRkPjAuMDM1PC90ZD48dGQ+MC4wOTI8L3RkPjx0ZD4wLjEyNzwvdGQ+PHRkPjAuMTg2PC90ZD48L3RyPg0KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij5SZXNpZHVhbCBTdGQuIEVycm9yPC90ZD48dGQ+Mi44ODEgKGRmID0gMzQ3KTwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+RiBTdGF0aXN0aWM8L3RkPjx0ZD4yMi4zMzg8c3VwPioqKjwvc3VwPiAoZGYgPSA5OyAzNDcpPC90ZD48dGQ+NS40Njk8L3RkPjx0ZD40My4yODU8c3VwPioqKjwvc3VwPjwvdGQ+PHRkPjk2LjcyNTxzdXA+KioqPC9zdXA+PC90ZD48dGQ+MTQ0LjkwOTxzdXA+KioqPC9zdXA+PC90ZD48dGQ+MTEzLjY0ODxzdXA+KioqPC9zdXA+PC90ZD48L3RyPg0KPHRyPjx0ZCBjb2xzcGFuPSI3IiBzdHlsZT0iYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrIj48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48ZW0+Tm90ZTo8L2VtPjwvdGQ+PHRkIGNvbHNwYW49IjYiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48c3VwPjxzcGFuPiYjNDI7PC9zcGFuPjwvc3VwPnA8MC4xOyA8c3VwPjxzcGFuPiYjNDI7PC9zcGFuPjxzcGFuPiYjNDI7PC9zcGFuPjwvc3VwPnA8MC4wNTsgPHN1cD48c3Bhbj4mIzQyOzwvc3Bhbj48c3Bhbj4mIzQyOzwvc3Bhbj48c3Bhbj4mIzQyOzwvc3Bhbj48L3N1cD5wPDAuMDE8L3RkPjwvdHI+DQo8L3RhYmxlPg==