Unemployment Forecast: 3.548072% Method: Bayesian AR6X forecast with external series Initial Unemployment Claims (ISCA) and Industrial Production Index (INDPRO))

Payrolls Forecast: 200.74 Method: AR6x with external series Initial Unemployment Claims (ISCA) and ADP payrolls Survey (NPPTTL)

Motivation

For my final unemployment forecast I chose a Bayesian AR6x model. The reason I chose this model is because it relies heavily on both quantitative and qualitative measures. Prior selection and external series both play a large part in developing a posterior predictive distribution that can accurately predict the unemployment rate. I faced a large series of challenges with the set of Bayesian models I had tested for my final forecast. These included Bayesian Vector Auto regression methods with Normal Wishart,Minnesota and Dirichlet priors. All of which were too computationally intensive to run on kaggle without waiting a very long time for results. The kaggle server even listed that some computations had non-zero exit status. After switching to computing the models in the actual R-Studio software was I even able to run the models efficiently. The selection of priors that I decided to test were based on the literature Volkan Sevin,2009, and Gómez-Rubio,2021. These articles outlined the best priors to use when estimating BVAR for the unemployment rate.

For all of my Bayesian models I used only a portion of the unemployment data past 2002. this was because Bayesian models perform best when there is only a small amount of data and their predictive power becomes less useful when there is a long and extensive history of data. Only testing the data’s rmse against the previous 5 months predictions I was able to achieve an rmse of .26 for my Bayesian AR6x model and all other sets of priors were >.35. Using the Bayesian model really tested my ability to understand what shaping a posterior predictive distribution that explains the data well takes. Experimenting with a variety of different priors was very stressful but also very fulfilling and interesting.

For the payroll forecast I went with a simpler approach. Throughout the semester forecasting the growth in non-farm payroll has been very difficult because of the large variation in the data. With this in mind I wanted to use a simple forecasting method that did not include a variety of complex assumptions and wasn’t too statistically rigorous. The regular ARIMAX model with the initial unemployment claims and ADP payroll Survey seemed to perform well in the past and therefore I thought it would do well for the month of April. My choice of external series was based on tests with a variety of external series used throughout the course.

From Month 1 to April my forecasts moved from simple arima models, the naive forecasts and VARs to Bayesian methods and arima models using external series. As I learned more about forecasting I became more comfortable branching out and trying new models.

library(tidyverse) # metapackage of all tidyverse packages
Warning: package ‘tidyverse’ was built under R version 4.0.5
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
-- Attaching packages ---------------------------------------------------------------------- tidyverse 1.3.1 --
√ ggplot2 3.3.6     √ purrr   0.3.4
√ tibble  3.1.6     √ dplyr   1.0.8
√ tidyr   1.2.0     √ stringr 1.4.0
√ readr   2.1.2     √ forcats 0.5.1
Warning: package ‘tibble’ was built under R version 4.0.5
Warning: package ‘tidyr’ was built under R version 4.0.5
Warning: package ‘readr’ was built under R version 4.0.5
Warning: package ‘dplyr’ was built under R version 4.0.5
Warning: package ‘forcats’ was built under R version 4.0.5
-- Conflicts ------------------------------------------------------------------------- tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
library(fpp2)
Warning: package ‘fpp2’ was built under R version 4.0.5
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 
-- Attaching packages ----------------------------------------------------------------------------- fpp2 2.4 --
√ forecast  8.16     √ expsmooth 2.3 
√ fma       2.4      
Warning: package ‘forecast’ was built under R version 4.0.5
Warning: package ‘fma’ was built under R version 4.0.5
Warning: package ‘expsmooth’ was built under R version 4.0.5
library(ggplot2)
library(dynlm)
Warning: package ‘dynlm’ was built under R version 4.0.5
Loading required package: zoo
Warning: package ‘zoo’ was built under R version 4.0.5

Attaching package: ‘zoo’

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

    as.Date, as.Date.numeric
library(glmnet)
Warning: package ‘glmnet’ was built under R version 4.0.5
Loading required package: Matrix

Attaching package: ‘Matrix’

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

    expand, pack, unpack

Loaded glmnet 4.1-4
library(rstanarm)
Warning: package ‘rstanarm’ was built under R version 4.0.5
Loading required package: Rcpp
Warning: package ‘Rcpp’ was built under R version 4.0.5
This is rstanarm version 2.21.3
- See https://mc-stan.org/rstanarm/articles/priors for changes to default priors!
- Default priors may change, so it's safest to specify priors, even if equivalent to the defaults.
- For execution on a local, multicore CPU with excess RAM we recommend calling
  options(mc.cores = parallel::detectCores())
library(fredr)
Warning: package ‘fredr’ was built under R version 4.0.5
library(quantreg)
Warning: package ‘quantreg’ was built under R version 4.0.5
Loading required package: SparseM
Warning: package ‘SparseM’ was built under R version 4.0.4

Attaching package: ‘SparseM’

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

    backsolve

Warning in .recacheSubclasses(def@className, def, env) :
  undefined subclass "packedMatrix" of class "replValueSp"; definition not updated
Warning in .recacheSubclasses(def@className, def, env) :
  undefined subclass "packedMatrix" of class "mMatrix"; definition not updated
library(vars)
Warning: package ‘vars’ was built under R version 4.0.5
Loading required package: MASS

Attaching package: ‘MASS’

The following object is masked _by_ ‘.GlobalEnv’:

    survey

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

    cement, housing, petrol

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

    select

Loading required package: strucchange
Warning: package ‘strucchange’ was built under R version 4.0.5
Loading required package: sandwich
Warning: package ‘sandwich’ was built under R version 4.0.5

Attaching package: ‘strucchange’

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

    boundary

Loading required package: urca
Warning: package ‘urca’ was built under R version 4.0.5
Loading required package: lmtest
Warning: package ‘lmtest’ was built under R version 4.0.5
library(prophet)
Warning: package ‘prophet’ was built under R version 4.0.5
Loading required package: rlang
Warning: package ‘rlang’ was built under R version 4.0.5

Attaching package: ‘rlang’

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

    %@%, as_function, flatten, flatten_chr, flatten_dbl, flatten_int, flatten_lgl, flatten_raw,
    invoke, splice
library(xts)
Warning: package ‘xts’ was built under R version 4.0.5

Attaching package: ‘xts’

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

    first, last
library(BVAR)
Warning: package ‘BVAR’ was built under R version 4.0.5

Attaching package: ‘BVAR’

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

    fevd, irf
library(Metrics)
Warning: package ‘Metrics’ was built under R version 4.0.5

Attaching package: ‘Metrics’

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

    ll

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

    se

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

    accuracy
library(forecast)
library(Boom)
Warning: package ‘Boom’ was built under R version 4.0.5

Attaching package: ‘Boom’

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

    rWishart
fredr_set_key("8782f247febb41f291821950cf9118b6")

UNRATE<-fredr(series_id = "UNRATE")

PAYEMS<-fredr(series_id = "PAYEMS",units="chg")

urate<-ts(UNRATE$value,frequency=12,start=c(1948,1),names="Unemployment")

payems<-ts(PAYEMS$value,frequency=12,start=c(1939,1),names="Payrolls")

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).

The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.

fredr_set_key("8782f247febb41f291821950cf9118b6") #Key I obtained for this class

#The unemployment rate reported in the BLS report has FRED ID "UNRATE" 
#Use vintage_dates to get vintage data
UNRATE<-fredr(series_id = "UNRATE",vintage_dates=as.Date("2022-4-25"))
#You can also download this series at https://fred.stlouisfed.org/series/UNRATE


#The jobs series has FRED ID "PAYEMS", for "Payroll Employment Survey" 
#Units="chg" ensures we get growth rather than level
#Use vintage_dates to get vintage data (works with changes)
PAYEMS<-fredr(series_id = "PAYEMS",units="chg",vintage_dates=as.Date("2022-4-25"))
#You can also download this series at https://fred.stlouisfed.org/series/PAYEMS


#Format the series as monthly time series objects, starting at the first date
urate<-ts(UNRATE$value,frequency=12,start=c(1948,1),names="Unemployment")
payems<-ts(PAYEMS$value,frequency=12,start=c(1939,1),names="Payrolls")
currentdate<-c(2022,3)
uratelags<-data.frame(
  window(urate,start=c(1948,7),end=currentdate),
  window(stats::lag(urate,-1),start=c(1948,7),end=currentdate),
  window(stats::lag(urate,-2),start=c(1948,7),end=currentdate),
  window(stats::lag(urate,-3),start=c(1948,7),end=currentdate),
  window(stats::lag(urate,-4),start=c(1948,7),end=currentdate),
  window(stats::lag(urate,-5),start=c(1948,7),end=currentdate),
  window(stats::lag(urate,-6),start=c(1948,7),end=currentdate)
                      )

colnames(uratelags)<-c("urate0","uratel1","uratel2","uratel3","uratel4",
                       "uratel5","uratel6")


ICSA<-fredr(series_id = "ICSA", vintage_dates=as.Date("2022-4-25")) #Initial Unemployment Claims, weekly
INDPRO <- fredr(series_id="INDPRO", units="chg",  vintage_dates=as.Date("2022-4-25"))



# ICSA is weekly data: to make monthly, need to aggregate to lower frequency
xtsICSA<-xts(ICSA$value,order.by = ICSA$date) #Convert to irregular time series
#apply.monthly aggregates within a month using a function, here, the mean
claimsmonthly<-apply.monthly(xtsICSA,mean) #Can replace mean by other functions like max, var, etc 
initialclaims<-ts(claimsmonthly,frequency=12,start=c(1967,1)) #convert back to monthly ts object
dinitialclaims<-diff(initialclaims) #Convert to month-over-month changes

indpro<-ts(INDPRO$value,frequency=12,start=c(1919,1),names="IndustrialProduction")
indprog<-window(diff(log(indpro)),start=c(1976,7))
Warning in log(indpro) : NaNs produced
xuratelags<-data.frame(
  window(urate,start=c(2002,5),end=currentdate),
  window(stats::lag(urate,-1),start=c(2002,5),end=currentdate),
  window(stats::lag(urate,-2),start=c(2002,5),end=currentdate),
  window(stats::lag(urate,-3),start=c(2002,5),end=currentdate),
  window(stats::lag(urate,-4),start=c(2002,5),end=currentdate),
  window(stats::lag(urate,-5),start=c(2002,5),end=currentdate),
  window(stats::lag(urate,-6),start=c(2002,5),end=currentdate),
  window(indprog,start=c(2002,5),end=currentdate),
  window(dinitialclaims/1000,start=c(2002,5),end=currentdate)
                      )
  
colnames(xuratelags)<-c("urate0","uratel1","uratel2","uratel3","uratel4",
                       "uratel5","uratel6","indprog","dinitialclaims")
set.seed(12345)
utoday<-length(uratelags$urate0) #Last observation
ictoday<-length(dinitialclaims)
iptoday<-length(indprog)
xutodayslags<-data.frame(uratelags$urate0[utoday],
    uratelags$uratel1[utoday],uratelags$uratel2[utoday],
    uratelags$uratel3[utoday],uratelags$uratel4[utoday],
    uratelags$uratel5[utoday],indprog[iptoday],dinitialclaims[ictoday]/1000)
names(xutodayslags)<-c("uratel1","uratel2","uratel3","uratel4","uratel5","uratel6","indprog","dinitialclaims")
maxorder<-6
defaultscale<-2.5
scalelist<-c(1,1,1,1,1,1,1,1) #6 lags, 2 external series
for (j in 1:maxorder){
  scalelist[j]<-defaultscale*scalelist[j]/j^2
}

URATEbayesARX<-stan_glm(urate0~uratel1+uratel2+uratel3+uratel4+uratel5+
                           uratel6+indprog+dinitialclaims,
                      family=gaussian(),prior=normal(location=c(1,0,0,0,0,0,0.1,0.1),scale=scalelist),
                      data=xuratelags)

SAMPLING FOR MODEL 'continuous' NOW (CHAIN 1).
Chain 1: 
Chain 1: Gradient evaluation took 0 seconds
Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 0 seconds.
Chain 1: Adjust your expectations accordingly!
Chain 1: 
Chain 1: 
Chain 1: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 1: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 1: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 1: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 1: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 1: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 1: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 1: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 1: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 1: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 1: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 1: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 1: 
Chain 1:  Elapsed Time: 4.386 seconds (Warm-up)
Chain 1:                0.954 seconds (Sampling)
Chain 1:                5.34 seconds (Total)
Chain 1: 

SAMPLING FOR MODEL 'continuous' NOW (CHAIN 2).
Chain 2: 
Chain 2: Gradient evaluation took 0 seconds
Chain 2: 1000 transitions using 10 leapfrog steps per transition would take 0 seconds.
Chain 2: Adjust your expectations accordingly!
Chain 2: 
Chain 2: 
Chain 2: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 2: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 2: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 2: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 2: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 2: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 2: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 2: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 2: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 2: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 2: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 2: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 2: 
Chain 2:  Elapsed Time: 3.799 seconds (Warm-up)
Chain 2:                0.992 seconds (Sampling)
Chain 2:                4.791 seconds (Total)
Chain 2: 

SAMPLING FOR MODEL 'continuous' NOW (CHAIN 3).
Chain 3: 
Chain 3: Gradient evaluation took 0.001 seconds
Chain 3: 1000 transitions using 10 leapfrog steps per transition would take 10 seconds.
Chain 3: Adjust your expectations accordingly!
Chain 3: 
Chain 3: 
Chain 3: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 3: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 3: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 3: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 3: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 3: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 3: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 3: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 3: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 3: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 3: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 3: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 3: 
Chain 3:  Elapsed Time: 3.2 seconds (Warm-up)
Chain 3:                0.894 seconds (Sampling)
Chain 3:                4.094 seconds (Total)
Chain 3: 

SAMPLING FOR MODEL 'continuous' NOW (CHAIN 4).
Chain 4: 
Chain 4: Gradient evaluation took 0 seconds
Chain 4: 1000 transitions using 10 leapfrog steps per transition would take 0 seconds.
Chain 4: Adjust your expectations accordingly!
Chain 4: 
Chain 4: 
Chain 4: Iteration:    1 / 2000 [  0%]  (Warmup)
Chain 4: Iteration:  200 / 2000 [ 10%]  (Warmup)
Chain 4: Iteration:  400 / 2000 [ 20%]  (Warmup)
Chain 4: Iteration:  600 / 2000 [ 30%]  (Warmup)
Chain 4: Iteration:  800 / 2000 [ 40%]  (Warmup)
Chain 4: Iteration: 1000 / 2000 [ 50%]  (Warmup)
Chain 4: Iteration: 1001 / 2000 [ 50%]  (Sampling)
Chain 4: Iteration: 1200 / 2000 [ 60%]  (Sampling)
Chain 4: Iteration: 1400 / 2000 [ 70%]  (Sampling)
Chain 4: Iteration: 1600 / 2000 [ 80%]  (Sampling)
Chain 4: Iteration: 1800 / 2000 [ 90%]  (Sampling)
Chain 4: Iteration: 2000 / 2000 [100%]  (Sampling)
Chain 4: 
Chain 4:  Elapsed Time: 3.531 seconds (Warm-up)
Chain 4:                0.999 seconds (Sampling)
Chain 4:                4.53 seconds (Total)
Chain 4: 
#Sample from posterior predictive distribution
URATEbayesARXpp<-rstanarm::posterior_predict(URATEbayesARX,newdata=xutodayslags) 
URATEbayesARXfcst<-mean(URATEbayesARXpp) #Forecast is posterior predictive mean
URATEbayesARXppint<-quantile(URATEbayesARXpp,c(0.025,0.975)) #Posterior predictive interval
plot(URATEbayesARX,"hist")
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ppdists<-data.frame(URATEbayesARXpp)

ggplot(data=ppdists)+geom_histogram(aes(x=X1))+
  xlab("April Unemployment")+ylab("Posterior Frequency")+
  ggtitle("Unemployment Posterior Predictions")
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

l1urate<-window(stats::lag(urate,-1),start=c(1949,1),end=c(2022,2))
l2urate<-window(stats::lag(urate,-2),start=c(1949,1),end=c(2022,2))
l3urate<-window(stats::lag(urate,-3),start=c(1949,1),end=c(2022,2))
l4urate<-window(stats::lag(urate,-4),start=c(1949,1),end=c(2022,2))
l5urate<-window(stats::lag(urate,-5),start=c(1949,1),end=c(2022,2))
l6urate<-window(stats::lag(urate,-6),start=c(1949,1),end=c(2022,2))
uraten<-window(urate,start=c(1949,1),end=c(2022,2))
udata<-data.frame(uraten,l1urate,l2urate,l3urate,l4urate,l5urate,l6urate)
udata12<-data.frame(uraten,l1urate)



options(mc.cores = parallel::detectCores())
mn <- bv_minnesota(lambda = bv_lambda(mode = 0.4), #tightness of prior covariance on coefficients
    alpha = bv_alpha(mode = 2), #rate of decline of variance with increasing lag order
    var = 1e06) #prior variance of constant term
mypriorsm <- bv_priors(hyper = c("lambda"), #Choose lambda by hierarchical method, leave others fixed
    mn = mn) #Set Minnesota prior as defined above

min6u <- BVAR::bvar(udata,6,priors = mypriorsm)
Optimisation concluded.
Posterior marginal likelihood: 10452
Hyperparameters: lambda = 5

  |                                                                                                           
  |                                                                                                     |   0%
  |                                                                                                           
  |=                                                                                                    |   0%
  |                                                                                                           
  |=                                                                                                    |   1%
  |                                                                                                           
  |==                                                                                                   |   1%
  |                                                                                                           
  |==                                                                                                   |   2%
  |                                                                                                           
  |===                                                                                                  |   2%
  |                                                                                                           
  |===                                                                                                  |   3%
  |                                                                                                           
  |====                                                                                                 |   3%
  |                                                                                                           
  |====                                                                                                 |   4%
  |                                                                                                           
  |=====                                                                                                |   4%
  |                                                                                                           
  |=====                                                                                                |   5%
  |                                                                                                           
  |======                                                                                               |   5%
  |                                                                                                           
  |======                                                                                               |   6%
  |                                                                                                           
  |=======                                                                                              |   6%
  |                                                                                                           
  |=======                                                                                              |   7%
  |                                                                                                           
  |========                                                                                             |   7%
  |                                                                                                           
  |========                                                                                             |   8%
  |                                                                                                           
  |=========                                                                                            |   8%
  |                                                                                                           
  |=========                                                                                            |   9%
  |                                                                                                           
  |==========                                                                                           |   9%
  |                                                                                                           
  |==========                                                                                           |  10%
  |                                                                                                           
  |===========                                                                                          |  10%
  |                                                                                                           
  |===========                                                                                          |  11%
  |                                                                                                           
  |============                                                                                         |  11%
  |                                                                                                           
  |============                                                                                         |  12%
  |                                                                                                           
  |=============                                                                                        |  12%
  |                                                                                                           
  |=============                                                                                        |  13%
  |                                                                                                           
  |==============                                                                                       |  13%
  |                                                                                                           
  |==============                                                                                       |  14%
  |                                                                                                           
  |===============                                                                                      |  14%
  |                                                                                                           
  |===============                                                                                      |  15%
  |                                                                                                           
  |================                                                                                     |  15%
  |                                                                                                           
  |================                                                                                     |  16%
  |                                                                                                           
  |=================                                                                                    |  16%
  |                                                                                                           
  |=================                                                                                    |  17%
  |                                                                                                           
  |==================                                                                                   |  17%
  |                                                                                                           
  |==================                                                                                   |  18%
  |                                                                                                           
  |===================                                                                                  |  18%
  |                                                                                                           
  |===================                                                                                  |  19%
  |                                                                                                           
  |====================                                                                                 |  19%
  |                                                                                                           
  |====================                                                                                 |  20%
  |                                                                                                           
  |=====================                                                                                |  20%
  |                                                                                                           
  |=====================                                                                                |  21%
  |                                                                                                           
  |======================                                                                               |  21%
  |                                                                                                           
  |======================                                                                               |  22%
  |                                                                                                           
  |=======================                                                                              |  22%
  |                                                                                                           
  |=======================                                                                              |  23%
  |                                                                                                           
  |========================                                                                             |  23%
  |                                                                                                           
  |========================                                                                             |  24%
  |                                                                                                           
  |=========================                                                                            |  24%
  |                                                                                                           
  |=========================                                                                            |  25%
  |                                                                                                           
  |==========================                                                                           |  25%
  |                                                                                                           
  |==========================                                                                           |  26%
  |                                                                                                           
  |===========================                                                                          |  26%
  |                                                                                                           
  |===========================                                                                          |  27%
  |                                                                                                           
  |============================                                                                         |  27%
  |                                                                                                           
  |============================                                                                         |  28%
  |                                                                                                           
  |=============================                                                                        |  28%
  |                                                                                                           
  |=============================                                                                        |  29%
  |                                                                                                           
  |==============================                                                                       |  29%
  |                                                                                                           
  |==============================                                                                       |  30%
  |                                                                                                           
  |===============================                                                                      |  30%
  |                                                                                                           
  |===============================                                                                      |  31%
  |                                                                                                           
  |================================                                                                     |  31%
  |                                                                                                           
  |================================                                                                     |  32%
  |                                                                                                           
  |=================================                                                                    |  32%
  |                                                                                                           
  |=================================                                                                    |  33%
  |                                                                                                           
  |==================================                                                                   |  33%
  |                                                                                                           
  |==================================                                                                   |  34%
  |                                                                                                           
  |===================================                                                                  |  34%
  |                                                                                                           
  |===================================                                                                  |  35%
  |                                                                                                           
  |====================================                                                                 |  35%
  |                                                                                                           
  |====================================                                                                 |  36%
  |                                                                                                           
  |=====================================                                                                |  36%
  |                                                                                                           
  |=====================================                                                                |  37%
  |                                                                                                           
  |======================================                                                               |  37%
  |                                                                                                           
  |======================================                                                               |  38%
  |                                                                                                           
  |=======================================                                                              |  38%
  |                                                                                                           
  |=======================================                                                              |  39%
  |                                                                                                           
  |========================================                                                             |  39%
  |                                                                                                           
  |========================================                                                             |  40%
  |                                                                                                           
  |=========================================                                                            |  40%
  |                                                                                                           
  |=========================================                                                            |  41%
  |                                                                                                           
  |==========================================                                                           |  41%
  |                                                                                                           
  |==========================================                                                           |  42%
  |                                                                                                           
  |===========================================                                                          |  42%
  |                                                                                                           
  |===========================================                                                          |  43%
  |                                                                                                           
  |============================================                                                         |  43%
  |                                                                                                           
  |============================================                                                         |  44%
  |                                                                                                           
  |=============================================                                                        |  44%
  |                                                                                                           
  |=============================================                                                        |  45%
  |                                                                                                           
  |==============================================                                                       |  45%
  |                                                                                                           
  |==============================================                                                       |  46%
  |                                                                                                           
  |===============================================                                                      |  46%
  |                                                                                                           
  |===============================================                                                      |  47%
  |                                                                                                           
  |================================================                                                     |  47%
  |                                                                                                           
  |================================================                                                     |  48%
  |                                                                                                           
  |=================================================                                                    |  48%
  |                                                                                                           
  |=================================================                                                    |  49%
  |                                                                                                           
  |==================================================                                                   |  49%
  |                                                                                                           
  |==================================================                                                   |  50%
  |                                                                                                           
  |===================================================                                                  |  50%
  |                                                                                                           
  |===================================================                                                  |  51%
  |                                                                                                           
  |====================================================                                                 |  51%
  |                                                                                                           
  |====================================================                                                 |  52%
  |                                                                                                           
  |=====================================================                                                |  52%
  |                                                                                                           
  |=====================================================                                                |  53%
  |                                                                                                           
  |======================================================                                               |  53%
  |                                                                                                           
  |======================================================                                               |  54%
  |                                                                                                           
  |=======================================================                                              |  54%
  |                                                                                                           
  |=======================================================                                              |  55%
  |                                                                                                           
  |========================================================                                             |  55%
  |                                                                                                           
  |========================================================                                             |  56%
  |                                                                                                           
  |=========================================================                                            |  56%
  |                                                                                                           
  |=========================================================                                            |  57%
  |                                                                                                           
  |==========================================================                                           |  57%
  |                                                                                                           
  |==========================================================                                           |  58%
  |                                                                                                           
  |===========================================================                                          |  58%
  |                                                                                                           
  |===========================================================                                          |  59%
  |                                                                                                           
  |============================================================                                         |  59%
  |                                                                                                           
  |============================================================                                         |  60%
  |                                                                                                           
  |=============================================================                                        |  60%
  |                                                                                                           
  |=============================================================                                        |  61%
  |                                                                                                           
  |==============================================================                                       |  61%
  |                                                                                                           
  |==============================================================                                       |  62%
  |                                                                                                           
  |===============================================================                                      |  62%
  |                                                                                                           
  |===============================================================                                      |  63%
  |                                                                                                           
  |================================================================                                     |  63%
  |                                                                                                           
  |================================================================                                     |  64%
  |                                                                                                           
  |=================================================================                                    |  64%
  |                                                                                                           
  |=================================================================                                    |  65%
  |                                                                                                           
  |==================================================================                                   |  65%
  |                                                                                                           
  |==================================================================                                   |  66%
  |                                                                                                           
  |===================================================================                                  |  66%
  |                                                                                                           
  |===================================================================                                  |  67%
  |                                                                                                           
  |====================================================================                                 |  67%
  |                                                                                                           
  |====================================================================                                 |  68%
  |                                                                                                           
  |=====================================================================                                |  68%
  |                                                                                                           
  |=====================================================================                                |  69%
  |                                                                                                           
  |======================================================================                               |  69%
  |                                                                                                           
  |======================================================================                               |  70%
  |                                                                                                           
  |=======================================================================                              |  70%
  |                                                                                                           
  |=======================================================================                              |  71%
  |                                                                                                           
  |========================================================================                             |  71%
  |                                                                                                           
  |========================================================================                             |  72%
  |                                                                                                           
  |=========================================================================                            |  72%
  |                                                                                                           
  |=========================================================================                            |  73%
  |                                                                                                           
  |==========================================================================                           |  73%
  |                                                                                                           
  |==========================================================================                           |  74%
  |                                                                                                           
  |===========================================================================                          |  74%
  |                                                                                                           
  |===========================================================================                          |  75%
  |                                                                                                           
  |============================================================================                         |  75%
  |                                                                                                           
  |============================================================================                         |  76%
  |                                                                                                           
  |=============================================================================                        |  76%
  |                                                                                                           
  |=============================================================================                        |  77%
  |                                                                                                           
  |==============================================================================                       |  77%
  |                                                                                                           
  |==============================================================================                       |  78%
  |                                                                                                           
  |===============================================================================                      |  78%
  |                                                                                                           
  |===============================================================================                      |  79%
  |                                                                                                           
  |================================================================================                     |  79%
  |                                                                                                           
  |================================================================================                     |  80%
  |                                                                                                           
  |=================================================================================                    |  80%
  |                                                                                                           
  |=================================================================================                    |  81%
  |                                                                                                           
  |==================================================================================                   |  81%
  |                                                                                                           
  |==================================================================================                   |  82%
  |                                                                                                           
  |===================================================================================                  |  82%
  |                                                                                                           
  |===================================================================================                  |  83%
  |                                                                                                           
  |====================================================================================                 |  83%
  |                                                                                                           
  |====================================================================================                 |  84%
  |                                                                                                           
  |=====================================================================================                |  84%
  |                                                                                                           
  |=====================================================================================                |  85%
  |                                                                                                           
  |======================================================================================               |  85%
  |                                                                                                           
  |======================================================================================               |  86%
  |                                                                                                           
  |=======================================================================================              |  86%
  |                                                                                                           
  |=======================================================================================              |  87%
  |                                                                                                           
  |========================================================================================             |  87%
  |                                                                                                           
  |========================================================================================             |  88%
  |                                                                                                           
  |=========================================================================================            |  88%
  |                                                                                                           
  |=========================================================================================            |  89%
  |                                                                                                           
  |==========================================================================================           |  89%
  |                                                                                                           
  |==========================================================================================           |  90%
  |                                                                                                           
  |===========================================================================================          |  90%
  |                                                                                                           
  |===========================================================================================          |  91%
  |                                                                                                           
  |============================================================================================         |  91%
  |                                                                                                           
  |============================================================================================         |  92%
  |                                                                                                           
  |=============================================================================================        |  92%
  |                                                                                                           
  |=============================================================================================        |  93%
  |                                                                                                           
  |==============================================================================================       |  93%
  |                                                                                                           
  |==============================================================================================       |  94%
  |                                                                                                           
  |===============================================================================================      |  94%
  |                                                                                                           
  |===============================================================================================      |  95%
  |                                                                                                           
  |================================================================================================     |  95%
  |                                                                                                           
  |================================================================================================     |  96%
  |                                                                                                           
  |=================================================================================================    |  96%
  |                                                                                                           
  |=================================================================================================    |  97%
  |                                                                                                           
  |==================================================================================================   |  97%
  |                                                                                                           
  |==================================================================================================   |  98%
  |                                                                                                           
  |===================================================================================================  |  98%
  |                                                                                                           
  |===================================================================================================  |  99%
  |                                                                                                           
  |==================================================================================================== |  99%
  |                                                                                                           
  |==================================================================================================== | 100%
  |                                                                                                           
  |=====================================================================================================| 100%
Finished MCMC after 20.96 secs.
bvar_preddu <- predict(min6u)

plot(bvar_preddu)

Y.sample1 <- window(uraten, end=c(2002, 12))
Y.sample2 <- window(uraten, start=c(2021,10))
end<-length(Y.sample2)
forecasts <- bvar_preddu[1]
forecastsw<-as.numeric(unlist(forecasts))[1:end]
rmse(Y.sample2, forecastsw)
[1] 0.367355
library(VARsignR)
Warning: package ‘VARsignR’ was built under R version 4.0.5
l1paymes2<-window(stats::lag(payems,-1),start=c(1949,1),end=c(2022,2))
l2paymes2<-window(stats::lag(payems,-2),start=c(1949,1),end=c(2022,2))
l3paymes2<-window(stats::lag(payems,-3),start=c(1949,1),end=c(2022,2))
l4paymes2<-window(stats::lag(payems,-4),start=c(1949,1),end=c(2022,2))
l5paymes2<-window(stats::lag(payems,-5),start=c(1949,1),end=c(2022,2))
l6paymes2<-window(stats::lag(payems,-6),start=c(1949,1),end=c(2022,2))
payemsn2<-window(payems,start=c(1949,1),end=c(2022,2))
pdata2<-data.frame(payemsn2,l1paymes2,l2paymes2,l3paymes2,l4paymes2,l5paymes2,l6paymes2)
jdat<-data.frame(udata,pdata2)
jdat<-ts(jdat)
jdata12<-data.frame(uraten,payemsn2)
jdata12<-ts(jdata12)
library(bvartools)
Warning: package ‘bvartools’ was built under R version 4.0.5
Loading required package: coda
Warning: package ‘coda’ was built under R version 4.0.5

Attaching package: ‘coda’

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

    thin

Registered S3 methods overwritten by 'bvartools':
  method       from
  plot.bvar    BVAR
  predict.bvar BVAR
  summary.bvar BVAR

Attaching package: ‘bvartools’

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

    bvar, fevd, irf

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

    fevd, irf
nwu<- gen_var(jdata12, p = 2, deterministic = "const",
                 iterations = 5000, burnin = 1000)

nwup <-add_priors(nwu,
            coef = list(v_i = 1, v_i_det = 0.1, shape = 3, rate = 1e-04, rate_det = 0.01),
coint = list(v_i = 0, p_tau_i = 1, shape = 3, rate = 1e-04, rho = 0.999),
sigma = list(df = "k", scale = 1, mu = 0, v_i = 0.01, sigma_h = 0.05),
ssvs = NULL,
bvs = NULL)
bvar_est <- draw_posterior(nwup)
Estimating model...
bvar_pred <- predict(bvar_est, n.ahead = 10, new_d = rep(1, 10))

plot(bvar_pred)

##dirichlet prior bvar omitted

ICSA<-fredr(series_id = "ICSA", vintage_dates=as.Date("2022-3-22")) #Initial Unemployment Claims, weekly
NPPTTL<-fredr(series_id = "NPPTTL",units="chg",vintage_dates=as.Date("2022-3-22")) #ADP Payrolls survey


# ICSA is weekly data: to make monthly, need to aggregate to lower frequency
xtsICSA<-xts(ICSA$value,order.by = ICSA$date) #Convert to irregular time series
#apply.monthly aggregates within a month using a function, here, the mean
claimsmonthly<-apply.monthly(xtsICSA,mean) #Can replace mean by other functions like max, var, etc 
initialclaims<-ts(claimsmonthly,frequency=12,start=c(1967,1)) #convert back to monthly ts object
dinitialclaims<-diff(initialclaims) #Convert to month-over-month changes

#Convert to ts object, get rid of initial NA values
nppttl<-window(ts(NPPTTL$value,frequency=12,start=c(2000,12)),start=c(2002,5)) 

payemslags<-data.frame(
  window(payems,start=c(1939,8),end=currentdate),
  window(stats::lag(payems,-1),start=c(1939,8),end=currentdate),
  window(stats::lag(payems,-2),start=c(1939,8),end=currentdate),
  window(stats::lag(payems,-3),start=c(1939,8),end=currentdate),
  window(stats::lag(payems,-4),start=c(1939,8),end=currentdate),
  window(stats::lag(payems,-5),start=c(1939,8),end=currentdate),
  window(stats::lag(payems,-6),start=c(1939,8),end=currentdate)
                      )
colnames(payemslags)<-c("payems0","payemsl1","payemsl2","payemsl3","payemsl4","payemsl5","payemsl6")  

xuratelags<-data.frame(
  window(urate,start=c(2002,6),end=currentdate),
  window(stats::lag(urate,-1),start=c(2002,6),end=currentdate),
  window(stats::lag(urate,-2),start=c(2002,6),end=currentdate),
  window(stats::lag(urate,-3),start=c(2002,6),end=currentdate),
  window(stats::lag(urate,-4),start=c(2002,6),end=currentdate),
  window(stats::lag(urate,-5),start=c(2002,6),end=currentdate),
  window(stats::lag(urate,-6),start=c(2002,6),end=currentdate),
  window(nppttl/100,start=c(2002,5),end=currentdate),
  window(dinitialclaims/1000,start=c(2002,6),end=currentdate)
                      )
Warning in window.default(x, ...) : 'end' value not changed
  
colnames(xuratelags)<-c("urate0","uratel1","uratel2","uratel3","uratel4",
                       "uratel5","uratel6","nppttl","dinitialclaims")

xpayemslags<-data.frame(
  window(payems,start=c(2002,6),end=currentdate),
  window(stats::lag(payems,-1),start=c(2002,6),end=currentdate),
  window(stats::lag(payems,-2),start=c(2002,6),end=currentdate),
  window(stats::lag(payems,-3),start=c(2002,6),end=currentdate),
  window(stats::lag(payems,-4),start=c(2002,6),end=currentdate),
  window(stats::lag(payems,-5),start=c(2002,6),end=currentdate),
  window(stats::lag(payems,-6),start=c(2002,6),end=currentdate),
  window(nppttl,start=c(2002,5),end=currentdate),
  window(dinitialclaims/1000,start=c(2002,6),end=currentdate)
                      )
Warning in window.default(x, ...) : 'end' value not changed
colnames(xpayemslags)<-c("payems0","payemsl1","payemsl2","payemsl3",
                        "payemsl4","payemsl5","payemsl6","nppttl","dinitialclaims")  

#Construct current month info to build predictions
utoday<-length(uratelags$urate0) #Last observation
adptoday<-length(nppttl)
ictoday<-length(dinitialclaims)
xutodayslags<-data.frame(uratelags$urate0[utoday],
    uratelags$uratel1[utoday],uratelags$uratel2[utoday],
    uratelags$uratel3[utoday],uratelags$uratel4[utoday],
    uratelags$uratel5[utoday],nppttl[adptoday]/100,dinitialclaims[ictoday]/1000)

ptoday<-length(payemslags$payems0) #Last observation
xptodayslags<-data.frame(payemslags$payems0[ptoday],payemslags$payemsl1[ptoday],
      payemslags$payemsl2[ptoday],payemslags$payemsl3[ptoday],payemslags$payemsl4[ptoday],
      payemslags$payemsl5[ptoday],nppttl[adptoday],dinitialclaims[ictoday]/1000)

#Rename everything
names(xutodayslags)<-c("uratel1","uratel2","uratel3","uratel4","uratel5","uratel6","nppttl","dinitialclaims")
names(xptodayslags)<-c("payemsl1","payemsl2","payemsl3","payemsl4","payemsl5","payemsl6","nppttl","dinitialclaims")

xmatrix<-as.matrix(data.frame( window(dinitialclaims,start=c(2002,6),end=currentdate)/1000,
                   window(nppttl,start=c(2002,5),end=currentdate)) ) 
Warning in window.default(x, ...) : 'end' value not changed
colnames(xmatrix)<-c("dinitclaims","nppttl")
uratec<-window(urate,start=c(2002,6))
payemsc<-window(payems,start=c(2002,6))
URATEARIMAX<-auto.arima(uratec,xreg=xmatrix,seasonal=FALSE)
PAYEMSARIMAX<-auto.arima(payemsc,xreg=xmatrix,seasonal=FALSE)
initctoday<-dinitialclaims[ictoday]/1000
nppttloday<-nppttl[adptoday]
xtoday=as.matrix(data.frame(initctoday,nppttloday))
colnames(xtoday)<-c("dinitclaims","nppttl")
URATEARIMAXfcst  <-forecast::forecast(URATEARIMAX,xreg=xtoday,h=1)
PAYEMSARIMAXfcst <-forecast::forecast(PAYEMSARIMAX,xreg=xtoday,h=1)
PAYEMSARIMAXfcst

PRevious and Baseline Forecasts

options(mc.cores = parallel::detectCores()) #speed up sampling
set.seed(123546) #make results reproducible
bayesuratec<-stan_glm(uraten~l1urate+l2urate+l3urate+l4urate+l5urate+l6urate,
    data=udata,
    family = gaussian(),
    prior=laplace(location=c(1,0,0,0,0,0),scale=c(2.5,2.5/(2^2),2.5/(3^2),2.5/(4^2),2.5/(5^2),2.5/(6^2))),
    prior_intercept=normal(location=0, scale=10)
)

l1paymes<-window(stats::lag(payems,-1),start=c(1940,1),end=c(2022,2))
l2paymes<-window(stats::lag(payems,-2),start=c(1940,1),end=c(2022,2))
l3paymes<-window(stats::lag(payems,-3),start=c(1940,1),end=c(2022,2))
l4paymes<-window(stats::lag(payems,-4),start=c(1940,1),end=c(2022,2))
l5paymes<-window(stats::lag(payems,-5),start=c(1940,1),end=c(2022,2))
l6paymes<-window(stats::lag(payems,-6),start=c(1940,1),end=c(2022,2))
payemsn<-window(payems,start=c(1940,1),end=c(2022,2))
pdata<-data.frame(payemsn,l1paymes,l2paymes,l3paymes,l4paymes,l5paymes,l6paymes)

min6p <- BVAR::bvar(pdata,6,priors = mypriorsm)
Optimisation concluded.
Posterior marginal likelihood: -6611.11
Hyperparameters: lambda = 5

  |                                                                                                  
  |                                                                                            |   0%
  |                                                                                                  
  |                                                                                            |   1%
  |                                                                                                  
  |=                                                                                           |   1%
  |                                                                                                  
  |=                                                                                           |   2%
  |                                                                                                  
  |==                                                                                          |   2%
  |                                                                                                  
  |==                                                                                          |   3%
  |                                                                                                  
  |===                                                                                         |   3%
  |                                                                                                  
  |===                                                                                         |   4%
  |                                                                                                  
  |====                                                                                        |   4%
  |                                                                                                  
  |====                                                                                        |   5%
  |                                                                                                  
  |=====                                                                                       |   5%
  |                                                                                                  
  |=====                                                                                       |   6%
  |                                                                                                  
  |======                                                                                      |   6%
  |                                                                                                  
  |======                                                                                      |   7%
  |                                                                                                  
  |=======                                                                                     |   7%
  |                                                                                                  
  |=======                                                                                     |   8%
  |                                                                                                  
  |========                                                                                    |   8%
  |                                                                                                  
  |========                                                                                    |   9%
  |                                                                                                  
  |=========                                                                                   |   9%
  |                                                                                                  
  |=========                                                                                   |  10%
  |                                                                                                  
  |==========                                                                                  |  10%
  |                                                                                                  
  |==========                                                                                  |  11%
  |                                                                                                  
  |===========                                                                                 |  11%
  |                                                                                                  
  |===========                                                                                 |  12%
  |                                                                                                  
  |============                                                                                |  12%
  |                                                                                                  
  |============                                                                                |  13%
  |                                                                                                  
  |============                                                                                |  14%
  |                                                                                                  
  |=============                                                                               |  14%
  |                                                                                                  
  |=============                                                                               |  15%
  |                                                                                                  
  |==============                                                                              |  15%
  |                                                                                                  
  |==============                                                                              |  16%
  |                                                                                                  
  |===============                                                                             |  16%
  |                                                                                                  
  |===============                                                                             |  17%
  |                                                                                                  
  |================                                                                            |  17%
  |                                                                                                  
  |================                                                                            |  18%
  |                                                                                                  
  |=================                                                                           |  18%
  |                                                                                                  
  |=================                                                                           |  19%
  |                                                                                                  
  |==================                                                                          |  19%
  |                                                                                                  
  |==================                                                                          |  20%
  |                                                                                                  
  |===================                                                                         |  20%
  |                                                                                                  
  |===================                                                                         |  21%
  |                                                                                                  
  |====================                                                                        |  21%
  |                                                                                                  
  |====================                                                                        |  22%
  |                                                                                                  
  |=====================                                                                       |  22%
  |                                                                                                  
  |=====================                                                                       |  23%
  |                                                                                                  
  |======================                                                                      |  23%
  |                                                                                                  
  |======================                                                                      |  24%
  |                                                                                                  
  |=======================                                                                     |  24%
  |                                                                                                  
  |=======================                                                                     |  25%
  |                                                                                                  
  |=======================                                                                     |  26%
  |                                                                                                  
  |========================                                                                    |  26%
  |                                                                                                  
  |========================                                                                    |  27%
  |                                                                                                  
  |=========================                                                                   |  27%
  |                                                                                                  
  |=========================                                                                   |  28%
  |                                                                                                  
  |==========================                                                                  |  28%
  |                                                                                                  
  |==========================                                                                  |  29%
  |                                                                                                  
  |===========================                                                                 |  29%
  |                                                                                                  
  |===========================                                                                 |  30%
  |                                                                                                  
  |============================                                                                |  30%
  |                                                                                                  
  |============================                                                                |  31%
  |                                                                                                  
  |=============================                                                               |  31%
  |                                                                                                  
  |=============================                                                               |  32%
  |                                                                                                  
  |==============================                                                              |  32%
  |                                                                                                  
  |==============================                                                              |  33%
  |                                                                                                  
  |===============================                                                             |  33%
  |                                                                                                  
  |===============================                                                             |  34%
  |                                                                                                  
  |================================                                                            |  34%
  |                                                                                                  
  |================================                                                            |  35%
  |                                                                                                  
  |=================================                                                           |  35%
  |                                                                                                  
  |=================================                                                           |  36%
  |                                                                                                  
  |==================================                                                          |  36%
  |                                                                                                  
  |==================================                                                          |  37%
  |                                                                                                  
  |==================================                                                          |  38%
  |                                                                                                  
  |===================================                                                         |  38%
  |                                                                                                  
  |===================================                                                         |  39%
  |                                                                                                  
  |====================================                                                        |  39%
  |                                                                                                  
  |====================================                                                        |  40%
  |                                                                                                  
  |=====================================                                                       |  40%
  |                                                                                                  
  |=====================================                                                       |  41%
  |                                                                                                  
  |======================================                                                      |  41%
  |                                                                                                  
  |======================================                                                      |  42%
  |                                                                                                  
  |=======================================                                                     |  42%
  |                                                                                                  
  |=======================================                                                     |  43%
  |                                                                                                  
  |========================================                                                    |  43%
  |                                                                                                  
  |========================================                                                    |  44%
  |                                                                                                  
  |=========================================                                                   |  44%
  |                                                                                                  
  |=========================================                                                   |  45%
  |                                                                                                  
  |==========================================                                                  |  45%
  |                                                                                                  
  |==========================================                                                  |  46%
  |                                                                                                  
  |===========================================                                                 |  46%
  |                                                                                                  
  |===========================================                                                 |  47%
  |                                                                                                  
  |============================================                                                |  47%
  |                                                                                                  
  |============================================                                                |  48%
  |                                                                                                  
  |=============================================                                               |  48%
  |                                                                                                  
  |=============================================                                               |  49%
  |                                                                                                  
  |==============================================                                              |  49%
  |                                                                                                  
  |==============================================                                              |  50%
  |                                                                                                  
  |==============================================                                              |  51%
  |                                                                                                  
  |===============================================                                             |  51%
  |                                                                                                  
  |===============================================                                             |  52%
  |                                                                                                  
  |================================================                                            |  52%
  |                                                                                                  
  |================================================                                            |  53%
  |                                                                                                  
  |=================================================                                           |  53%
  |                                                                                                  
  |=================================================                                           |  54%
  |                                                                                                  
  |==================================================                                          |  54%
  |                                                                                                  
  |==================================================                                          |  55%
  |                                                                                                  
  |===================================================                                         |  55%
  |                                                                                                  
  |===================================================                                         |  56%
  |                                                                                                  
  |====================================================                                        |  56%
  |                                                                                                  
  |====================================================                                        |  57%
  |                                                                                                  
  |=====================================================                                       |  57%
  |                                                                                                  
  |=====================================================                                       |  58%
  |                                                                                                  
  |======================================================                                      |  58%
  |                                                                                                  
  |======================================================                                      |  59%
  |                                                                                                  
  |=======================================================                                     |  59%
  |                                                                                                  
  |=======================================================                                     |  60%
  |                                                                                                  
  |========================================================                                    |  60%
  |                                                                                                  
  |========================================================                                    |  61%
  |                                                                                                  
  |=========================================================                                   |  61%
  |                                                                                                  
  |=========================================================                                   |  62%
  |                                                                                                  
  |==========================================================                                  |  62%
  |                                                                                                  
  |==========================================================                                  |  63%
  |                                                                                                  
  |==========================================================                                  |  64%
  |                                                                                                  
  |===========================================================                                 |  64%
  |                                                                                                  
  |===========================================================                                 |  65%
  |                                                                                                  
  |============================================================                                |  65%
  |                                                                                                  
  |============================================================                                |  66%
  |                                                                                                  
  |=============================================================                               |  66%
  |                                                                                                  
  |=============================================================                               |  67%
  |                                                                                                  
  |==============================================================                              |  67%
  |                                                                                                  
  |==============================================================                              |  68%
  |                                                                                                  
  |===============================================================                             |  68%
  |                                                                                                  
  |===============================================================                             |  69%
  |                                                                                                  
  |================================================================                            |  69%
  |                                                                                                  
  |================================================================                            |  70%
  |                                                                                                  
  |=================================================================                           |  70%
  |                                                                                                  
  |=================================================================                           |  71%
  |                                                                                                  
  |==================================================================                          |  71%
  |                                                                                                  
  |==================================================================                          |  72%
  |                                                                                                  
  |===================================================================                         |  72%
  |                                                                                                  
  |===================================================================                         |  73%
  |                                                                                                  
  |====================================================================                        |  73%
  |                                                                                                  
  |====================================================================                        |  74%
  |                                                                                                  
  |=====================================================================                       |  74%
  |                                                                                                  
  |=====================================================================                       |  75%
  |                                                                                                  
  |=====================================================================                       |  76%
  |                                                                                                  
  |======================================================================                      |  76%
  |                                                                                                  
  |======================================================================                      |  77%
  |                                                                                                  
  |=======================================================================                     |  77%
  |                                                                                                  
  |=======================================================================                     |  78%
  |                                                                                                  
  |========================================================================                    |  78%
  |                                                                                                  
  |========================================================================                    |  79%
  |                                                                                                  
  |=========================================================================                   |  79%
  |                                                                                                  
  |=========================================================================                   |  80%
  |                                                                                                  
  |==========================================================================                  |  80%
  |                                                                                                  
  |==========================================================================                  |  81%
  |                                                                                                  
  |===========================================================================                 |  81%
  |                                                                                                  
  |===========================================================================                 |  82%
  |                                                                                                  
  |============================================================================                |  82%
  |                                                                                                  
  |============================================================================                |  83%
  |                                                                                                  
  |=============================================================================               |  83%
  |                                                                                                  
  |=============================================================================               |  84%
  |                                                                                                  
  |==============================================================================              |  84%
  |                                                                                                  
  |==============================================================================              |  85%
  |                                                                                                  
  |===============================================================================             |  85%
  |                                                                                                  
  |===============================================================================             |  86%
  |                                                                                                  
  |================================================================================            |  86%
  |                                                                                                  
  |================================================================================            |  87%
  |                                                                                                  
  |================================================================================            |  88%
  |                                                                                                  
  |=================================================================================           |  88%
  |                                                                                                  
  |=================================================================================           |  89%
  |                                                                                                  
  |==================================================================================          |  89%
  |                                                                                                  
  |==================================================================================          |  90%
  |                                                                                                  
  |===================================================================================         |  90%
  |                                                                                                  
  |===================================================================================         |  91%
  |                                                                                                  
  |====================================================================================        |  91%
  |                                                                                                  
  |====================================================================================        |  92%
  |                                                                                                  
  |=====================================================================================       |  92%
  |                                                                                                  
  |=====================================================================================       |  93%
  |                                                                                                  
  |======================================================================================      |  93%
  |                                                                                                  
  |======================================================================================      |  94%
  |                                                                                                  
  |=======================================================================================     |  94%
  |                                                                                                  
  |=======================================================================================     |  95%
  |                                                                                                  
  |========================================================================================    |  95%
  |                                                                                                  
  |========================================================================================    |  96%
  |                                                                                                  
  |=========================================================================================   |  96%
  |                                                                                                  
  |=========================================================================================   |  97%
  |                                                                                                  
  |==========================================================================================  |  97%
  |                                                                                                  
  |==========================================================================================  |  98%
  |                                                                                                  
  |=========================================================================================== |  98%
  |                                                                                                  
  |=========================================================================================== |  99%
  |                                                                                                  
  |============================================================================================|  99%
  |                                                                                                  
  |============================================================================================| 100%
Finished MCMC after 19.86 secs.
#bvar_preddp<- stats::predict(min6p)

#plot(bvar_preddp)

INDPRO <- fredr(series_id = "INDPRO")
tIND <- ts(INDPRO$value,frequency=12,start=c(1959,1),end = c(2022,1),names="Industrial Production")
M1<-fredr(series_id = "M1SL")
m1<-ts(M1$value,frequency = 12,start=c(1959,1),names="M1 Growth")

jointdata2 <- ts(data.frame("urate" = window(urate, start = c(1959,3)),"payems" = window(payems, start = c(1959,3))))

varinc1<-VAR(jointdata2, p = 1)
varinc2<-VAR(jointdata2, p = 2)
varinc3<-VAR(jointdata2, p = 3)
varinc4<-VAR(jointdata2, p = 4)
varinc5<-VAR(jointdata2, p = 5)

jdvar1 <-forecast(varinc1, h = 4)
jdvar2 <-forecast(varinc2, h = 4)
jdvar3 <-forecast(varinc3, h = 4)
jdvar4 <-forecast(varinc4, h = 4)
jdvar5 <-forecast(varinc5, h = 4)

jdvar1
urate

payems
jdvar2
urate

payems
jdvar3
urate

payems
jdvar4
urate

payems
jdvar5
urate

payems
jdvar<-data.frame(jdvar1,jdvar2,jdvar3,jdvar4,jdvar5)

autoplot(jdvar1)

autoplot(jdvar2)

autoplot(jdvar3)

autoplot(jdvar4)

autoplot(jdvar5)


naive(payems)

unemAR1selection<-Arima(urate,order=c(1,0,0),include.mean=FALSE)
payemsAR1selection<-Arima(payems,order=c(1,0,0),include.mean=FALSE)

unemAR1<-forecast(unemAR1selection,h=1)
payemsAR1<-forecast(payemsAR1selection,h=1)

unemAR1
payemsAR1

plot(unemAR1)

plot(payemsAR1)


far1 <- function(x, h){forecast(Arima(x, order=c(1,0,0)), h=h)}
far2 <- function(x, h){forecast(Arima(x, order=c(2,0,0)), h=h)}
far3 <- function(x, h){forecast(Arima(x, order=c(3,0,0)), h=h)}
far4 <- function(x, h){forecast(Arima(x, order=c(4,0,0)), h=h)}
far5 <- function(x, h){forecast(Arima(x, order=c(5,0,0)), h=h)}


urateAR1<- far1(urate, 4)
urateAR2<- far2(urate, 4)
urateAR3<- far3(urate, 4)
urateAR4<- far4(urate, 4)
urateAR5<- far5(urate, 4)

urateAR1
urateAR2
urateAR3
urateAR4
urateAR5


autoplot(urateAR1)+
  ggtitle("AR1 forecast for unemployment") +
  xlab("Year") +
  ylab("Unemployment Rate")

autoplot(urateAR2)+
  ggtitle("AR2 forecast for unemployment") +
  xlab("Year") +
  ylab("Unemployment Rate")

autoplot(urateAR3)+
  ggtitle("AR3 forecast for unemployment") +
  xlab("Year") +
  ylab("Unemployment Rate")

autoplot(urateAR4)+
  ggtitle("AR4 forecast for unemployment") +
  xlab("Year") +
  ylab("Unemployment Rate")

autoplot(urateAR5)+
  ggtitle("AR5 forecast for unemployment") +
  xlab("Year") +
  ylab("Unemployment Rate")



payemsAR1 <- far1(payems, 4)
payemsAR2 <- far2(payems, 4)
payemsAR3 <- far3(payems, 4)
payemsAR4 <- far4(payems, 4)
payemsAR5 <- far4(payems, 4)

payemsAR1
payemsAR2
payemsAR3
payemsAR4
payemsAR5

autoplot(payemsAR1)+
  ggtitle("AR1 forecast fornon farm payroll growth") +
  xlab("Year") +
  ylab("Payroll Growth")
Warning: Removed 1 row(s) containing missing values (geom_path).

autoplot(payemsAR2)+
  ggtitle("AR2 forecast fornon farm payroll growth") +
  xlab("Year") +
  ylab("Payroll Growth")
Warning: Removed 1 row(s) containing missing values (geom_path).

autoplot(payemsAR3)+
  ggtitle("AR3 forecast fornon farm payroll growth") +
  xlab("Year") +
  ylab("Payroll Growth")
Warning: Removed 1 row(s) containing missing values (geom_path).

autoplot(payemsAR4)+
  ggtitle("AR4 forecast fornon farm payroll growth") +
  xlab("Year") +
  ylab("Payroll Growth")
Warning: Removed 1 row(s) containing missing values (geom_path).

autoplot(payemsAR5)+
  ggtitle("AR5 forecast fornon farm payroll growth") +
  xlab("Year") +
  ylab("Payroll Growth")
Warning: Removed 1 row(s) containing missing values (geom_path).

uratel1 <- window(diff(urate, lag = 1), start = c(1948,6))
uratel2 <- window(diff(urate, lag = 2), start = c(1948,6))
uratel3 <- window(diff(urate, lag = 3), start = c(1948,6))
uratel4 <- window(diff(urate, lag = 4), start = c(1948,6))
uratel5 <- window(diff(urate, lag = 5), start = c(1948,6))
uraten <- window(urate, start = c(1948,6))

Unemlag <- data.frame(cbind(uraten,uratel1,uratel2,uratel3,uratel4,uratel5))
rqu1 <- rq(uraten~uratel1)
rqu2 <- rq(uraten~uratel1 + uratel2)
rqu3 <- rq(uraten~uratel1 + uratel2 + uratel3)
rqu4 <- rq(uraten~uratel1 + uratel2 + uratel3 + uratel4)
rqu5 <- rq(uraten~uratel1 + uratel2 + uratel3 + uratel4 + uratel5)

uARf1<-predict(rqu1,Unemlag)
uARf2<-predict(rqu2,Unemlag)
uARf3<-predict(rqu3,Unemlag)
uARf4<-predict(rqu4,Unemlag)
uARf5<-predict(rqu5,Unemlag)

payemsl1 <- window(diff(payems, lag = 1), start = c(1948,6))
payemsl2 <- window(diff(payems, lag = 2), start = c(1948,6))
payemsl3 <- window(diff(payems, lag = 3), start = c(1948,6))
payemsl4 <- window(diff(payems, lag = 4), start = c(1948,6))
payemsl5 <- window(diff(payems, lag = 5), start = c(1948,6))
payemsn <- window(payems, start = c(1948,6))

Payemslag <- data.frame(cbind(payemsn,payemsl1,payemsl2,payemsl3,payemsl4,payemsl5))
rqp1 <- rq(payemsn~payemsl1)
rqp2 <- rq(payemsn~payemsl1 + payemsl2)
rqp3 <- rq(payemsn~payemsl1 + payemsl2 + payemsl3)
rqp4 <- rq(payemsn~payemsl1 + payemsl2 + payemsl3 + payemsl4)
rqp5 <- rq(payemsn~payemsl1 + payemsl2 + payemsl3 + payemsl4 + payemsl5)

pARf1<- predict(rqp1,Payemslag)
pARf2<-predict(rqp2,Payemslag)
pARf3<-predict(rqp3,Payemslag)
pARf4<-predict(rqp4,Payemslag)
pARf5<-predict(rqp5,Payemslag)

forecast::accuracy(urateAR1)[2]
[1] 0.4177033
forecast::accuracy(urateAR2)[2]
[1] 0.4170023
forecast::accuracy(urateAR3)[2]
[1] 0.4169268
forecast::accuracy(urateAR4)[2]
[1] 0.4166857
forecast::accuracy(urateAR5)[2]
[1] 0.4163575
forecast::accuracy(payemsAR1)[3]
[1] 192.002
forecast::accuracy(payemsAR2)[3]
[1] 202.2887
forecast::accuracy(payemsAR3)[3]
[1] 201.6351
forecast::accuracy(payemsAR4)[3]
[1] 203.7887
forecast::accuracy(payemsAR5)[3]
[1] 203.7887
mean(abs(uraten - uARf1))
[1] 1.293266
mean(abs(uraten - uARf2))
[1] 1.286682
mean(abs(uraten - uARf3))
[1] 1.278053
mean(abs(uraten - uARf4))
[1] 1.269127
mean(abs(uraten - uARf5))
[1] 1.259105
mean(abs(payemsn - pARf1))
[1] 169.5133
mean(abs(payemsn - pARf2))
[1] 158.3281
mean(abs(payemsn - pARf3))
[1] 150.873
mean(abs(payemsn - pARf4))
[1] 145.3968
mean(abs(payemsn - pARf5))
[1] 140.8658
forecast::accuracy(jdvar1, d=0,D = 0)
                               ME        RMSE         MAE        MPE       MAPE       MASE
urate Training set  -5.928105e-17   0.4311465   0.1630065 -0.3831136   2.637936 0.02729032
payems Training set  5.872287e-15 802.2704926 200.8587910 73.2644574 182.163661 0.79546996
                            ACF1
urate Training set  -0.004309431
payems Training set  0.006962061
forecast::accuracy(jdvar2, d=0,D = 0)
                               ME        RMSE         MAE        MPE       MAPE       MASE
urate Training set   2.886950e-17   0.4295283   0.1628046 -0.3726559   2.632027 0.02725652
payems Training set -4.730579e-16 795.0658943 208.0935341 88.3776064 202.000374 0.82412203
                            ACF1
urate Training set   0.002381700
payems Training set -0.003404134
forecast::accuracy(jdvar3, d=0,D = 0)
                               ME        RMSE         MAE        MPE       MAPE       MASE
urate Training set  -2.376761e-18   0.4289234   0.1644295 -0.3722356   2.661296 0.02752856
payems Training set  1.596755e-15 794.0064990 210.8322539 85.1072029 211.490746 0.83496830
                            ACF1
urate Training set  -0.000939372
payems Training set -0.002200142
forecast::accuracy(jdvar4, d=0,D = 0)
                               ME        RMSE         MAE        MPE       MAPE       MASE
urate Training set  -5.956309e-17   0.4270461   0.1658112 -0.3625076   2.686989 0.02775989
payems Training set  1.698630e-14 793.4365962 212.0268720 89.1909360 216.103299 0.83969940
                             ACF1
urate Training set  -0.0015806782
payems Training set -0.0005104153
forecast::accuracy(jdvar5, d=0,D = 0)
                               ME        RMSE         MAE        MPE       MAPE       MASE
urate Training set  -1.006239e-17   0.4267696   0.1657163 -0.3614512   2.688204 0.02774399
payems Training set -4.097181e-14 793.5520448 211.1353430 88.6947865 216.897871 0.83616864
                            ACF1
urate Training set  -0.002156346
payems Training set -0.000950823
uratenw<-window(uraten,start=c(1949,1),end=c(2022,2))

historyu <- data.frame(ds = seq(as.Date('1949-01-01'), as.Date('2022-02-01'), by = 'm'), y = uratenw)

myprophetmodelu<-prophet(
    df = historyu,
    growth = "linear",
    changepoints = NULL,
    n.changepoints = 25,
    changepoint.range = 0.8,
    yearly.seasonality = "auto",
    weekly.seasonality = "auto",
    daily.seasonality = "auto",
    holidays = NULL,
    seasonality.mode = "additive",
    seasonality.prior.scale = 10,
    holidays.prior.scale = 10,
    changepoint.prior.scale = 0.05,
    mcmc.samples = 0,
    interval.width = 0.8,
    uncertainty.samples = 1000,
    fit = TRUE
)
Disabling weekly seasonality. Run prophet with weekly.seasonality=TRUE to override this.
Disabling daily seasonality. Run prophet with daily.seasonality=TRUE to override this.
#Produce forecasts at monthly frequency
futureu <- make_future_dataframe(myprophetmodelu, periods = 4,freq = "month")
myprophetfcstu<-predict(myprophetmodelu,futureu)
#Command to plot forecast (uses both fit object and forecast object)
plot(myprophetmodelu,myprophetfcstu)


payemsnw<-window(payemsn,end=c(2022,2))

historyp <- data.frame(ds = seq(as.Date('1948-06-01'), as.Date('2022-02-01'), by = 'm'), y = payemsnw)

myprophetmodelp<-prophet(
    df = historyp,
    growth = "linear",
    changepoints = NULL,
    n.changepoints = 25,
    changepoint.range = 0.8,
    yearly.seasonality = "auto",
    weekly.seasonality = "auto",
    daily.seasonality = "auto",
    holidays = NULL,
    seasonality.mode = "additive",
    seasonality.prior.scale = 10,
    holidays.prior.scale = 10,
    changepoint.prior.scale = 0.05,
    mcmc.samples = 0,
    interval.width = 0.8,
    uncertainty.samples = 1000,
    fit = TRUE
)
Disabling weekly seasonality. Run prophet with weekly.seasonality=TRUE to override this.
Disabling daily seasonality. Run prophet with daily.seasonality=TRUE to override this.
#Produce forecasts at monthly frequency
futurep <- make_future_dataframe(myprophetmodelp, periods = 4,freq = "month")
myprophetfcstp<-predict(myprophetmodelp,futurep)
#Command to plot forecast (uses both fit object and forecast object)
plot(myprophetmodelp,myprophetfcstp)

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoqKlVuZW1wbG95bWVudCBGb3JlY2FzdCoqOiAzLjU0ODA3MiUNCk1ldGhvZDogQmF5ZXNpYW4gQVI2WCBmb3JlY2FzdCB3aXRoIGV4dGVybmFsIHNlcmllcyBJbml0aWFsIFVuZW1wbG95bWVudCBDbGFpbXMgKElTQ0EpIGFuZCBJbmR1c3RyaWFsIFByb2R1Y3Rpb24gSW5kZXggKElORFBSTykpDQoNCioqUGF5cm9sbHMgRm9yZWNhc3QqKjogMjAwLjc0DQpNZXRob2Q6IEFSNnggd2l0aCBleHRlcm5hbCBzZXJpZXMgSW5pdGlhbCBVbmVtcGxveW1lbnQgQ2xhaW1zIChJU0NBKSBhbmQgQURQIHBheXJvbGxzIFN1cnZleSAoTlBQVFRMKQ0KDQoqKk1vdGl2YXRpb24qKg0KDQpGb3IgbXkgZmluYWwgdW5lbXBsb3ltZW50IGZvcmVjYXN0IEkgY2hvc2UgYSBCYXllc2lhbiBBUjZ4IG1vZGVsLiBUaGUgcmVhc29uIEkgY2hvc2UgdGhpcyBtb2RlbCBpcyBiZWNhdXNlIGl0IHJlbGllcyBoZWF2aWx5IG9uIGJvdGggcXVhbnRpdGF0aXZlIGFuZCBxdWFsaXRhdGl2ZSBtZWFzdXJlcy4gUHJpb3Igc2VsZWN0aW9uIGFuZCBleHRlcm5hbCBzZXJpZXMgYm90aCBwbGF5IGEgbGFyZ2UgcGFydCBpbiBkZXZlbG9waW5nIGEgcG9zdGVyaW9yIHByZWRpY3RpdmUgZGlzdHJpYnV0aW9uIHRoYXQgY2FuIGFjY3VyYXRlbHkgcHJlZGljdCB0aGUgdW5lbXBsb3ltZW50IHJhdGUuIEkgZmFjZWQgYSBsYXJnZSBzZXJpZXMgb2YgY2hhbGxlbmdlcyB3aXRoIHRoZSBzZXQgb2YgQmF5ZXNpYW4gbW9kZWxzIEkgaGFkIHRlc3RlZCBmb3IgbXkgZmluYWwgZm9yZWNhc3QuIFRoZXNlIGluY2x1ZGVkIEJheWVzaWFuIFZlY3RvciBBdXRvIHJlZ3Jlc3Npb24gbWV0aG9kcyB3aXRoIE5vcm1hbCBXaXNoYXJ0LE1pbm5lc290YSBhbmQgRGlyaWNobGV0IHByaW9ycy4gQWxsIG9mIHdoaWNoIHdlcmUgdG9vIGNvbXB1dGF0aW9uYWxseSBpbnRlbnNpdmUgdG8gcnVuIG9uIGthZ2dsZSB3aXRob3V0IHdhaXRpbmcgYSB2ZXJ5IGxvbmcgdGltZSBmb3IgcmVzdWx0cy4gVGhlIGthZ2dsZSBzZXJ2ZXIgZXZlbiBsaXN0ZWQgdGhhdCBzb21lIGNvbXB1dGF0aW9ucyBoYWQgbm9uLXplcm8gZXhpdCBzdGF0dXMuIEFmdGVyIHN3aXRjaGluZyB0byBjb21wdXRpbmcgdGhlIG1vZGVscyBpbiB0aGUgYWN0dWFsIFItU3R1ZGlvIHNvZnR3YXJlIHdhcyBJIGV2ZW4gYWJsZSB0byBydW4gdGhlIG1vZGVscyBlZmZpY2llbnRseS4gVGhlIHNlbGVjdGlvbiBvZiBwcmlvcnMgdGhhdCBJIGRlY2lkZWQgdG8gdGVzdCB3ZXJlIGJhc2VkIG9uIHRoZSBsaXRlcmF0dXJlIFZvbGthbiBTZXZpbiwyMDA5LCBhbmQgR8OzbWV6LVJ1YmlvLDIwMjEuIFRoZXNlIGFydGljbGVzIG91dGxpbmVkIHRoZSBiZXN0IHByaW9ycyB0byB1c2Ugd2hlbiBlc3RpbWF0aW5nIEJWQVIgZm9yIHRoZSB1bmVtcGxveW1lbnQgcmF0ZS4gDQoNCkZvciBhbGwgb2YgbXkgQmF5ZXNpYW4gbW9kZWxzIEkgdXNlZCBvbmx5IGEgcG9ydGlvbiBvZiB0aGUgdW5lbXBsb3ltZW50IGRhdGEgcGFzdCAyMDAyLiB0aGlzIHdhcyBiZWNhdXNlIEJheWVzaWFuIG1vZGVscyBwZXJmb3JtIGJlc3Qgd2hlbiB0aGVyZSBpcyBvbmx5IGEgc21hbGwgYW1vdW50IG9mIGRhdGEgYW5kIHRoZWlyIHByZWRpY3RpdmUgcG93ZXIgYmVjb21lcyBsZXNzIHVzZWZ1bCB3aGVuIHRoZXJlIGlzIGEgbG9uZyBhbmQgZXh0ZW5zaXZlIGhpc3Rvcnkgb2YgZGF0YS4gT25seSB0ZXN0aW5nIHRoZSBkYXRhJ3Mgcm1zZSBhZ2FpbnN0IHRoZSBwcmV2aW91cyA1IG1vbnRocyBwcmVkaWN0aW9ucyBJIHdhcyBhYmxlIHRvIGFjaGlldmUgYW4gcm1zZSBvZiAuMjYgZm9yIG15IEJheWVzaWFuIEFSNnggbW9kZWwgYW5kIGFsbCBvdGhlciBzZXRzIG9mIHByaW9ycyB3ZXJlID4uMzUuIFVzaW5nIHRoZSBCYXllc2lhbiBtb2RlbCByZWFsbHkgdGVzdGVkIG15IGFiaWxpdHkgdG8gdW5kZXJzdGFuZCB3aGF0IHNoYXBpbmcgYSBwb3N0ZXJpb3IgcHJlZGljdGl2ZSBkaXN0cmlidXRpb24gdGhhdCBleHBsYWlucyB0aGUgZGF0YSB3ZWxsIHRha2VzLiBFeHBlcmltZW50aW5nIHdpdGggYSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwcmlvcnMgd2FzIHZlcnkgc3RyZXNzZnVsIGJ1dCBhbHNvIHZlcnkgZnVsZmlsbGluZyBhbmQgaW50ZXJlc3RpbmcuDQoNCkZvciB0aGUgcGF5cm9sbCBmb3JlY2FzdCBJIHdlbnQgd2l0aCBhIHNpbXBsZXIgYXBwcm9hY2guIFRocm91Z2hvdXQgdGhlIHNlbWVzdGVyIGZvcmVjYXN0aW5nIHRoZSBncm93dGggaW4gbm9uLWZhcm0gcGF5cm9sbCBoYXMgYmVlbiB2ZXJ5IGRpZmZpY3VsdCBiZWNhdXNlIG9mIHRoZSBsYXJnZSB2YXJpYXRpb24gaW4gdGhlIGRhdGEuIFdpdGggdGhpcyBpbiBtaW5kIEkgd2FudGVkIHRvIHVzZSBhIHNpbXBsZSBmb3JlY2FzdGluZyBtZXRob2QgdGhhdCBkaWQgbm90IGluY2x1ZGUgYSB2YXJpZXR5IG9mIGNvbXBsZXggYXNzdW1wdGlvbnMgYW5kIHdhc24ndCB0b28gc3RhdGlzdGljYWxseSByaWdvcm91cy4gVGhlIHJlZ3VsYXIgQVJJTUFYIG1vZGVsIHdpdGggdGhlIGluaXRpYWwgdW5lbXBsb3ltZW50IGNsYWltcyBhbmQgQURQIHBheXJvbGwgU3VydmV5IHNlZW1lZCB0byBwZXJmb3JtIHdlbGwgaW4gdGhlIHBhc3QgYW5kIHRoZXJlZm9yZSBJIHRob3VnaHQgaXQgd291bGQgZG8gd2VsbCBmb3IgdGhlIG1vbnRoIG9mIEFwcmlsLiBNeSBjaG9pY2Ugb2YgZXh0ZXJuYWwgc2VyaWVzIHdhcyBiYXNlZCBvbiB0ZXN0cyB3aXRoIGEgdmFyaWV0eSBvZiBleHRlcm5hbCBzZXJpZXMgdXNlZCB0aHJvdWdob3V0IHRoZSBjb3Vyc2UuIA0KDQpGcm9tIE1vbnRoIDEgdG8gQXByaWwgbXkgZm9yZWNhc3RzIG1vdmVkIGZyb20gc2ltcGxlIGFyaW1hIG1vZGVscywgdGhlIG5haXZlIGZvcmVjYXN0cyBhbmQgVkFScyB0byBCYXllc2lhbiBtZXRob2RzIGFuZCBhcmltYSBtb2RlbHMgdXNpbmcgZXh0ZXJuYWwgc2VyaWVzLiBBcyBJIGxlYXJuZWQgbW9yZSBhYm91dCBmb3JlY2FzdGluZyBJIGJlY2FtZSBtb3JlIGNvbWZvcnRhYmxlIGJyYW5jaGluZyBvdXQgYW5kIHRyeWluZyBuZXcgbW9kZWxzLg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKSAjIG1ldGFwYWNrYWdlIG9mIGFsbCB0aWR5dmVyc2UgcGFja2FnZXMNCmxpYnJhcnkoZnBwMikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHlubG0pDQpsaWJyYXJ5KGdsbW5ldCkNCmxpYnJhcnkocnN0YW5hcm0pDQpsaWJyYXJ5KGZyZWRyKQ0KbGlicmFyeShxdWFudHJlZykNCmxpYnJhcnkodmFycykNCmxpYnJhcnkocHJvcGhldCkNCmxpYnJhcnkoeHRzKQ0KbGlicmFyeShCVkFSKQ0KbGlicmFyeShNZXRyaWNzKQ0KbGlicmFyeShmb3JlY2FzdCkNCmxpYnJhcnkoQm9vbSkNCg0KZnJlZHJfc2V0X2tleSgiODc4MmYyNDdmZWJiNDFmMjkxODIxOTUwY2Y5MTE4YjYiKQ0KDQpVTlJBVEU8LWZyZWRyKHNlcmllc19pZCA9ICJVTlJBVEUiKQ0KDQpQQVlFTVM8LWZyZWRyKHNlcmllc19pZCA9ICJQQVlFTVMiLHVuaXRzPSJjaGciKQ0KDQp1cmF0ZTwtdHMoVU5SQVRFJHZhbHVlLGZyZXF1ZW5jeT0xMixzdGFydD1jKDE5NDgsMSksbmFtZXM9IlVuZW1wbG95bWVudCIpDQoNCnBheWVtczwtdHMoUEFZRU1TJHZhbHVlLGZyZXF1ZW5jeT0xMixzdGFydD1jKDE5MzksMSksbmFtZXM9IlBheXJvbGxzIikNCmBgYA0KDQpBZGQgYSBuZXcgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpJbnNlcnQgQ2h1bmsqIGJ1dHRvbiBvbiB0aGUgdG9vbGJhciBvciBieSBwcmVzc2luZyAqQ3RybCtBbHQrSSouDQoNCldoZW4geW91IHNhdmUgdGhlIG5vdGVib29rLCBhbiBIVE1MIGZpbGUgY29udGFpbmluZyB0aGUgY29kZSBhbmQgb3V0cHV0IHdpbGwgYmUgc2F2ZWQgYWxvbmdzaWRlIGl0IChjbGljayB0aGUgKlByZXZpZXcqIGJ1dHRvbiBvciBwcmVzcyAqQ3RybCtTaGlmdCtLKiB0byBwcmV2aWV3IHRoZSBIVE1MIGZpbGUpLg0KDQpUaGUgcHJldmlldyBzaG93cyB5b3UgYSByZW5kZXJlZCBIVE1MIGNvcHkgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBlZGl0b3IuIENvbnNlcXVlbnRseSwgdW5saWtlICpLbml0KiwgKlByZXZpZXcqIGRvZXMgbm90IHJ1biBhbnkgUiBjb2RlIGNodW5rcy4gSW5zdGVhZCwgdGhlIG91dHB1dCBvZiB0aGUgY2h1bmsgd2hlbiBpdCB3YXMgbGFzdCBydW4gaW4gdGhlIGVkaXRvciBpcyBkaXNwbGF5ZWQuDQoNCmBgYHtyfQ0KZnJlZHJfc2V0X2tleSgiODc4MmYyNDdmZWJiNDFmMjkxODIxOTUwY2Y5MTE4YjYiKSAjS2V5IEkgb2J0YWluZWQgZm9yIHRoaXMgY2xhc3MNCg0KI1RoZSB1bmVtcGxveW1lbnQgcmF0ZSByZXBvcnRlZCBpbiB0aGUgQkxTIHJlcG9ydCBoYXMgRlJFRCBJRCAiVU5SQVRFIiANCiNVc2UgdmludGFnZV9kYXRlcyB0byBnZXQgdmludGFnZSBkYXRhDQpVTlJBVEU8LWZyZWRyKHNlcmllc19pZCA9ICJVTlJBVEUiLHZpbnRhZ2VfZGF0ZXM9YXMuRGF0ZSgiMjAyMi00LTI1IikpDQojWW91IGNhbiBhbHNvIGRvd25sb2FkIHRoaXMgc2VyaWVzIGF0IGh0dHBzOi8vZnJlZC5zdGxvdWlzZmVkLm9yZy9zZXJpZXMvVU5SQVRFDQoNCg0KI1RoZSBqb2JzIHNlcmllcyBoYXMgRlJFRCBJRCAiUEFZRU1TIiwgZm9yICJQYXlyb2xsIEVtcGxveW1lbnQgU3VydmV5IiANCiNVbml0cz0iY2hnIiBlbnN1cmVzIHdlIGdldCBncm93dGggcmF0aGVyIHRoYW4gbGV2ZWwNCiNVc2UgdmludGFnZV9kYXRlcyB0byBnZXQgdmludGFnZSBkYXRhICh3b3JrcyB3aXRoIGNoYW5nZXMpDQpQQVlFTVM8LWZyZWRyKHNlcmllc19pZCA9ICJQQVlFTVMiLHVuaXRzPSJjaGciLHZpbnRhZ2VfZGF0ZXM9YXMuRGF0ZSgiMjAyMi00LTI1IikpDQojWW91IGNhbiBhbHNvIGRvd25sb2FkIHRoaXMgc2VyaWVzIGF0IGh0dHBzOi8vZnJlZC5zdGxvdWlzZmVkLm9yZy9zZXJpZXMvUEFZRU1TDQoNCg0KI0Zvcm1hdCB0aGUgc2VyaWVzIGFzIG1vbnRobHkgdGltZSBzZXJpZXMgb2JqZWN0cywgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGRhdGUNCnVyYXRlPC10cyhVTlJBVEUkdmFsdWUsZnJlcXVlbmN5PTEyLHN0YXJ0PWMoMTk0OCwxKSxuYW1lcz0iVW5lbXBsb3ltZW50IikNCnBheWVtczwtdHMoUEFZRU1TJHZhbHVlLGZyZXF1ZW5jeT0xMixzdGFydD1jKDE5MzksMSksbmFtZXM9IlBheXJvbGxzIikNCmN1cnJlbnRkYXRlPC1jKDIwMjIsMykNCnVyYXRlbGFnczwtZGF0YS5mcmFtZSgNCiAgd2luZG93KHVyYXRlLHN0YXJ0PWMoMTk0OCw3KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyh1cmF0ZSwtMSksc3RhcnQ9YygxOTQ4LDcpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHVyYXRlLC0yKSxzdGFydD1jKDE5NDgsNyksZW5kPWN1cnJlbnRkYXRlKSwNCiAgd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTMpLHN0YXJ0PWMoMTk0OCw3KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyh1cmF0ZSwtNCksc3RhcnQ9YygxOTQ4LDcpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHVyYXRlLC01KSxzdGFydD1jKDE5NDgsNyksZW5kPWN1cnJlbnRkYXRlKSwNCiAgd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTYpLHN0YXJ0PWMoMTk0OCw3KSxlbmQ9Y3VycmVudGRhdGUpDQogICAgICAgICAgICAgICAgICAgICAgKQ0KDQpjb2xuYW1lcyh1cmF0ZWxhZ3MpPC1jKCJ1cmF0ZTAiLCJ1cmF0ZWwxIiwidXJhdGVsMiIsInVyYXRlbDMiLCJ1cmF0ZWw0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgInVyYXRlbDUiLCJ1cmF0ZWw2IikNCg0KDQpJQ1NBPC1mcmVkcihzZXJpZXNfaWQgPSAiSUNTQSIsIHZpbnRhZ2VfZGF0ZXM9YXMuRGF0ZSgiMjAyMi00LTI1IikpICNJbml0aWFsIFVuZW1wbG95bWVudCBDbGFpbXMsIHdlZWtseQ0KSU5EUFJPIDwtIGZyZWRyKHNlcmllc19pZD0iSU5EUFJPIiwgdW5pdHM9ImNoZyIsICB2aW50YWdlX2RhdGVzPWFzLkRhdGUoIjIwMjItNC0yNSIpKQ0KDQoNCg0KIyBJQ1NBIGlzIHdlZWtseSBkYXRhOiB0byBtYWtlIG1vbnRobHksIG5lZWQgdG8gYWdncmVnYXRlIHRvIGxvd2VyIGZyZXF1ZW5jeQ0KeHRzSUNTQTwteHRzKElDU0EkdmFsdWUsb3JkZXIuYnkgPSBJQ1NBJGRhdGUpICNDb252ZXJ0IHRvIGlycmVndWxhciB0aW1lIHNlcmllcw0KI2FwcGx5Lm1vbnRobHkgYWdncmVnYXRlcyB3aXRoaW4gYSBtb250aCB1c2luZyBhIGZ1bmN0aW9uLCBoZXJlLCB0aGUgbWVhbg0KY2xhaW1zbW9udGhseTwtYXBwbHkubW9udGhseSh4dHNJQ1NBLG1lYW4pICNDYW4gcmVwbGFjZSBtZWFuIGJ5IG90aGVyIGZ1bmN0aW9ucyBsaWtlIG1heCwgdmFyLCBldGMgDQppbml0aWFsY2xhaW1zPC10cyhjbGFpbXNtb250aGx5LGZyZXF1ZW5jeT0xMixzdGFydD1jKDE5NjcsMSkpICNjb252ZXJ0IGJhY2sgdG8gbW9udGhseSB0cyBvYmplY3QNCmRpbml0aWFsY2xhaW1zPC1kaWZmKGluaXRpYWxjbGFpbXMpICNDb252ZXJ0IHRvIG1vbnRoLW92ZXItbW9udGggY2hhbmdlcw0KDQppbmRwcm88LXRzKElORFBSTyR2YWx1ZSxmcmVxdWVuY3k9MTIsc3RhcnQ9YygxOTE5LDEpLG5hbWVzPSJJbmR1c3RyaWFsUHJvZHVjdGlvbiIpDQppbmRwcm9nPC13aW5kb3coZGlmZihsb2coaW5kcHJvKSksc3RhcnQ9YygxOTc2LDcpKQ0KDQp4dXJhdGVsYWdzPC1kYXRhLmZyYW1lKA0KICB3aW5kb3codXJhdGUsc3RhcnQ9YygyMDAyLDUpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHVyYXRlLC0xKSxzdGFydD1jKDIwMDIsNSksZW5kPWN1cnJlbnRkYXRlKSwNCiAgd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTIpLHN0YXJ0PWMoMjAwMiw1KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyh1cmF0ZSwtMyksc3RhcnQ9YygyMDAyLDUpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHVyYXRlLC00KSxzdGFydD1jKDIwMDIsNSksZW5kPWN1cnJlbnRkYXRlKSwNCiAgd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTUpLHN0YXJ0PWMoMjAwMiw1KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyh1cmF0ZSwtNiksc3RhcnQ9YygyMDAyLDUpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhpbmRwcm9nLHN0YXJ0PWMoMjAwMiw1KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coZGluaXRpYWxjbGFpbXMvMTAwMCxzdGFydD1jKDIwMDIsNSksZW5kPWN1cnJlbnRkYXRlKQ0KICAgICAgICAgICAgICAgICAgICAgICkNCiAgDQpjb2xuYW1lcyh4dXJhdGVsYWdzKTwtYygidXJhdGUwIiwidXJhdGVsMSIsInVyYXRlbDIiLCJ1cmF0ZWwzIiwidXJhdGVsNCIsDQogICAgICAgICAgICAgICAgICAgICAgICJ1cmF0ZWw1IiwidXJhdGVsNiIsImluZHByb2ciLCJkaW5pdGlhbGNsYWltcyIpDQpzZXQuc2VlZCgxMjM0NSkNCmBgYA0KYGBge3J9DQp1dG9kYXk8LWxlbmd0aCh1cmF0ZWxhZ3MkdXJhdGUwKSAjTGFzdCBvYnNlcnZhdGlvbg0KaWN0b2RheTwtbGVuZ3RoKGRpbml0aWFsY2xhaW1zKQ0KaXB0b2RheTwtbGVuZ3RoKGluZHByb2cpDQp4dXRvZGF5c2xhZ3M8LWRhdGEuZnJhbWUodXJhdGVsYWdzJHVyYXRlMFt1dG9kYXldLA0KICAgIHVyYXRlbGFncyR1cmF0ZWwxW3V0b2RheV0sdXJhdGVsYWdzJHVyYXRlbDJbdXRvZGF5XSwNCiAgICB1cmF0ZWxhZ3MkdXJhdGVsM1t1dG9kYXldLHVyYXRlbGFncyR1cmF0ZWw0W3V0b2RheV0sDQogICAgdXJhdGVsYWdzJHVyYXRlbDVbdXRvZGF5XSxpbmRwcm9nW2lwdG9kYXldLGRpbml0aWFsY2xhaW1zW2ljdG9kYXldLzEwMDApDQpuYW1lcyh4dXRvZGF5c2xhZ3MpPC1jKCJ1cmF0ZWwxIiwidXJhdGVsMiIsInVyYXRlbDMiLCJ1cmF0ZWw0IiwidXJhdGVsNSIsInVyYXRlbDYiLCJpbmRwcm9nIiwiZGluaXRpYWxjbGFpbXMiKQ0KbWF4b3JkZXI8LTYNCmRlZmF1bHRzY2FsZTwtMi41DQpzY2FsZWxpc3Q8LWMoMSwxLDEsMSwxLDEsMSwxKSAjNiBsYWdzLCAyIGV4dGVybmFsIHNlcmllcw0KZm9yIChqIGluIDE6bWF4b3JkZXIpew0KICBzY2FsZWxpc3Rbal08LWRlZmF1bHRzY2FsZSpzY2FsZWxpc3Rbal0val4yDQp9DQoNClVSQVRFYmF5ZXNBUlg8LXN0YW5fZ2xtKHVyYXRlMH51cmF0ZWwxK3VyYXRlbDIrdXJhdGVsMyt1cmF0ZWw0K3VyYXRlbDUrDQogICAgICAgICAgICAgICAgICAgICAgICAgICB1cmF0ZWw2K2luZHByb2crZGluaXRpYWxjbGFpbXMsDQogICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PWdhdXNzaWFuKCkscHJpb3I9bm9ybWFsKGxvY2F0aW9uPWMoMSwwLDAsMCwwLDAsMC4xLDAuMSksc2NhbGU9c2NhbGVsaXN0KSwNCiAgICAgICAgICAgICAgICAgICAgICBkYXRhPXh1cmF0ZWxhZ3MpDQojU2FtcGxlIGZyb20gcG9zdGVyaW9yIHByZWRpY3RpdmUgZGlzdHJpYnV0aW9uDQpVUkFURWJheWVzQVJYcHA8LXJzdGFuYXJtOjpwb3N0ZXJpb3JfcHJlZGljdChVUkFURWJheWVzQVJYLG5ld2RhdGE9eHV0b2RheXNsYWdzKSANClVSQVRFYmF5ZXNBUlhmY3N0PC1tZWFuKFVSQVRFYmF5ZXNBUlhwcCkgI0ZvcmVjYXN0IGlzIHBvc3RlcmlvciBwcmVkaWN0aXZlIG1lYW4NClVSQVRFYmF5ZXNBUlhwcGludDwtcXVhbnRpbGUoVVJBVEViYXllc0FSWHBwLGMoMC4wMjUsMC45NzUpKSAjUG9zdGVyaW9yIHByZWRpY3RpdmUgaW50ZXJ2YWwNCmBgYA0KYGBge3J9DQpwbG90KFVSQVRFYmF5ZXNBUlgsImhpc3QiKQ0KcHBkaXN0czwtZGF0YS5mcmFtZShVUkFURWJheWVzQVJYcHApDQoNCmdncGxvdChkYXRhPXBwZGlzdHMpK2dlb21faGlzdG9ncmFtKGFlcyh4PVgxKSkrDQogIHhsYWIoIkFwcmlsIFVuZW1wbG95bWVudCIpK3lsYWIoIlBvc3RlcmlvciBGcmVxdWVuY3kiKSsNCiAgZ2d0aXRsZSgiVW5lbXBsb3ltZW50IFBvc3RlcmlvciBQcmVkaWN0aW9ucyIpDQpgYGANCmBgYHtyfQ0KbDF1cmF0ZTwtd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTEpLHN0YXJ0PWMoMTk0OSwxKSxlbmQ9YygyMDIyLDIpKQ0KbDJ1cmF0ZTwtd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTIpLHN0YXJ0PWMoMTk0OSwxKSxlbmQ9YygyMDIyLDIpKQ0KbDN1cmF0ZTwtd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTMpLHN0YXJ0PWMoMTk0OSwxKSxlbmQ9YygyMDIyLDIpKQ0KbDR1cmF0ZTwtd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTQpLHN0YXJ0PWMoMTk0OSwxKSxlbmQ9YygyMDIyLDIpKQ0KbDV1cmF0ZTwtd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTUpLHN0YXJ0PWMoMTk0OSwxKSxlbmQ9YygyMDIyLDIpKQ0KbDZ1cmF0ZTwtd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTYpLHN0YXJ0PWMoMTk0OSwxKSxlbmQ9YygyMDIyLDIpKQ0KdXJhdGVuPC13aW5kb3codXJhdGUsc3RhcnQ9YygxOTQ5LDEpLGVuZD1jKDIwMjIsMikpDQp1ZGF0YTwtZGF0YS5mcmFtZSh1cmF0ZW4sbDF1cmF0ZSxsMnVyYXRlLGwzdXJhdGUsbDR1cmF0ZSxsNXVyYXRlLGw2dXJhdGUpDQp1ZGF0YTEyPC1kYXRhLmZyYW1lKHVyYXRlbixsMXVyYXRlKQ0KDQoNCg0Kb3B0aW9ucyhtYy5jb3JlcyA9IHBhcmFsbGVsOjpkZXRlY3RDb3JlcygpKQ0KbW4gPC0gYnZfbWlubmVzb3RhKGxhbWJkYSA9IGJ2X2xhbWJkYShtb2RlID0gMC40KSwgI3RpZ2h0bmVzcyBvZiBwcmlvciBjb3ZhcmlhbmNlIG9uIGNvZWZmaWNpZW50cw0KICAgIGFscGhhID0gYnZfYWxwaGEobW9kZSA9IDIpLCAjcmF0ZSBvZiBkZWNsaW5lIG9mIHZhcmlhbmNlIHdpdGggaW5jcmVhc2luZyBsYWcgb3JkZXINCiAgICB2YXIgPSAxZTA2KSAjcHJpb3IgdmFyaWFuY2Ugb2YgY29uc3RhbnQgdGVybQ0KbXlwcmlvcnNtIDwtIGJ2X3ByaW9ycyhoeXBlciA9IGMoImxhbWJkYSIpLCAjQ2hvb3NlIGxhbWJkYSBieSBoaWVyYXJjaGljYWwgbWV0aG9kLCBsZWF2ZSBvdGhlcnMgZml4ZWQNCiAgICBtbiA9IG1uKSAjU2V0IE1pbm5lc290YSBwcmlvciBhcyBkZWZpbmVkIGFib3ZlDQoNCm1pbjZ1IDwtIEJWQVI6OmJ2YXIodWRhdGEsNixwcmlvcnMgPSBteXByaW9yc20pDQoNCg0KYnZhcl9wcmVkZHUgPC0gcHJlZGljdChtaW42dSkNCg0KcGxvdChidmFyX3ByZWRkdSkNCmBgYA0KDQpgYGB7cn0NClkuc2FtcGxlMSA8LSB3aW5kb3codXJhdGVuLCBlbmQ9YygyMDAyLCAxMikpDQpZLnNhbXBsZTIgPC0gd2luZG93KHVyYXRlbiwgc3RhcnQ9YygyMDIxLDEwKSkNCmVuZDwtbGVuZ3RoKFkuc2FtcGxlMikNCmZvcmVjYXN0cyA8LSBidmFyX3ByZWRkdVsxXQ0KZm9yZWNhc3RzdzwtYXMubnVtZXJpYyh1bmxpc3QoZm9yZWNhc3RzKSlbMTplbmRdDQpybXNlKFkuc2FtcGxlMiwgZm9yZWNhc3RzdykNCg0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShWQVJzaWduUikNCmBgYA0KDQpgYGB7cn0NCmwxcGF5bWVzMjwtd2luZG93KHN0YXRzOjpsYWcocGF5ZW1zLC0xKSxzdGFydD1jKDE5NDksMSksZW5kPWMoMjAyMiwyKSkNCmwycGF5bWVzMjwtd2luZG93KHN0YXRzOjpsYWcocGF5ZW1zLC0yKSxzdGFydD1jKDE5NDksMSksZW5kPWMoMjAyMiwyKSkNCmwzcGF5bWVzMjwtd2luZG93KHN0YXRzOjpsYWcocGF5ZW1zLC0zKSxzdGFydD1jKDE5NDksMSksZW5kPWMoMjAyMiwyKSkNCmw0cGF5bWVzMjwtd2luZG93KHN0YXRzOjpsYWcocGF5ZW1zLC00KSxzdGFydD1jKDE5NDksMSksZW5kPWMoMjAyMiwyKSkNCmw1cGF5bWVzMjwtd2luZG93KHN0YXRzOjpsYWcocGF5ZW1zLC01KSxzdGFydD1jKDE5NDksMSksZW5kPWMoMjAyMiwyKSkNCmw2cGF5bWVzMjwtd2luZG93KHN0YXRzOjpsYWcocGF5ZW1zLC02KSxzdGFydD1jKDE5NDksMSksZW5kPWMoMjAyMiwyKSkNCnBheWVtc24yPC13aW5kb3cocGF5ZW1zLHN0YXJ0PWMoMTk0OSwxKSxlbmQ9YygyMDIyLDIpKQ0KcGRhdGEyPC1kYXRhLmZyYW1lKHBheWVtc24yLGwxcGF5bWVzMixsMnBheW1lczIsbDNwYXltZXMyLGw0cGF5bWVzMixsNXBheW1lczIsbDZwYXltZXMyKQ0KamRhdDwtZGF0YS5mcmFtZSh1ZGF0YSxwZGF0YTIpDQpqZGF0PC10cyhqZGF0KQ0KamRhdGExMjwtZGF0YS5mcmFtZSh1cmF0ZW4scGF5ZW1zbjIpDQpqZGF0YTEyPC10cyhqZGF0YTEyKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShidmFydG9vbHMpDQpud3U8LSBnZW5fdmFyKGpkYXRhMTIsIHAgPSAyLCBkZXRlcm1pbmlzdGljID0gImNvbnN0IiwNCiAgICAgICAgICAgICAgICAgaXRlcmF0aW9ucyA9IDUwMDAsIGJ1cm5pbiA9IDEwMDApDQoNCm53dXAgPC1hZGRfcHJpb3JzKG53dSwNCiAgICAgICAgICAgIGNvZWYgPSBsaXN0KHZfaSA9IDEsIHZfaV9kZXQgPSAwLjEsIHNoYXBlID0gMywgcmF0ZSA9IDFlLTA0LCByYXRlX2RldCA9IDAuMDEpLA0KY29pbnQgPSBsaXN0KHZfaSA9IDAsIHBfdGF1X2kgPSAxLCBzaGFwZSA9IDMsIHJhdGUgPSAxZS0wNCwgcmhvID0gMC45OTkpLA0Kc2lnbWEgPSBsaXN0KGRmID0gImsiLCBzY2FsZSA9IDEsIG11ID0gMCwgdl9pID0gMC4wMSwgc2lnbWFfaCA9IDAuMDUpLA0Kc3N2cyA9IE5VTEwsDQpidnMgPSBOVUxMKQ0KYGBgDQoNCg0KYGBge3J9DQpidmFyX2VzdCA8LSBkcmF3X3Bvc3Rlcmlvcihud3VwKQ0KYnZhcl9wcmVkIDwtIHByZWRpY3QoYnZhcl9lc3QsIG4uYWhlYWQgPSAxMCwgbmV3X2QgPSByZXAoMSwgMTApKQ0KDQpwbG90KGJ2YXJfcHJlZCkNCg0KYGBgDQojI2RpcmljaGxldCBwcmlvciBidmFyIG9taXR0ZWQNCg0KYGBge3J9DQpJQ1NBPC1mcmVkcihzZXJpZXNfaWQgPSAiSUNTQSIsIHZpbnRhZ2VfZGF0ZXM9YXMuRGF0ZSgiMjAyMi0zLTIyIikpICNJbml0aWFsIFVuZW1wbG95bWVudCBDbGFpbXMsIHdlZWtseQ0KTlBQVFRMPC1mcmVkcihzZXJpZXNfaWQgPSAiTlBQVFRMIix1bml0cz0iY2hnIix2aW50YWdlX2RhdGVzPWFzLkRhdGUoIjIwMjItMy0yMiIpKSAjQURQIFBheXJvbGxzIHN1cnZleQ0KDQoNCiMgSUNTQSBpcyB3ZWVrbHkgZGF0YTogdG8gbWFrZSBtb250aGx5LCBuZWVkIHRvIGFnZ3JlZ2F0ZSB0byBsb3dlciBmcmVxdWVuY3kNCnh0c0lDU0E8LXh0cyhJQ1NBJHZhbHVlLG9yZGVyLmJ5ID0gSUNTQSRkYXRlKSAjQ29udmVydCB0byBpcnJlZ3VsYXIgdGltZSBzZXJpZXMNCiNhcHBseS5tb250aGx5IGFnZ3JlZ2F0ZXMgd2l0aGluIGEgbW9udGggdXNpbmcgYSBmdW5jdGlvbiwgaGVyZSwgdGhlIG1lYW4NCmNsYWltc21vbnRobHk8LWFwcGx5Lm1vbnRobHkoeHRzSUNTQSxtZWFuKSAjQ2FuIHJlcGxhY2UgbWVhbiBieSBvdGhlciBmdW5jdGlvbnMgbGlrZSBtYXgsIHZhciwgZXRjIA0KaW5pdGlhbGNsYWltczwtdHMoY2xhaW1zbW9udGhseSxmcmVxdWVuY3k9MTIsc3RhcnQ9YygxOTY3LDEpKSAjY29udmVydCBiYWNrIHRvIG1vbnRobHkgdHMgb2JqZWN0DQpkaW5pdGlhbGNsYWltczwtZGlmZihpbml0aWFsY2xhaW1zKSAjQ29udmVydCB0byBtb250aC1vdmVyLW1vbnRoIGNoYW5nZXMNCg0KI0NvbnZlcnQgdG8gdHMgb2JqZWN0LCBnZXQgcmlkIG9mIGluaXRpYWwgTkEgdmFsdWVzDQpucHB0dGw8LXdpbmRvdyh0cyhOUFBUVEwkdmFsdWUsZnJlcXVlbmN5PTEyLHN0YXJ0PWMoMjAwMCwxMikpLHN0YXJ0PWMoMjAwMiw1KSkgDQoNCnBheWVtc2xhZ3M8LWRhdGEuZnJhbWUoDQogIHdpbmRvdyhwYXllbXMsc3RhcnQ9YygxOTM5LDgpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHBheWVtcywtMSksc3RhcnQ9YygxOTM5LDgpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHBheWVtcywtMiksc3RhcnQ9YygxOTM5LDgpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHBheWVtcywtMyksc3RhcnQ9YygxOTM5LDgpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHBheWVtcywtNCksc3RhcnQ9YygxOTM5LDgpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHBheWVtcywtNSksc3RhcnQ9YygxOTM5LDgpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHBheWVtcywtNiksc3RhcnQ9YygxOTM5LDgpLGVuZD1jdXJyZW50ZGF0ZSkNCiAgICAgICAgICAgICAgICAgICAgICApDQpjb2xuYW1lcyhwYXllbXNsYWdzKTwtYygicGF5ZW1zMCIsInBheWVtc2wxIiwicGF5ZW1zbDIiLCJwYXllbXNsMyIsInBheWVtc2w0IiwicGF5ZW1zbDUiLCJwYXllbXNsNiIpICANCg0KeHVyYXRlbGFnczwtZGF0YS5mcmFtZSgNCiAgd2luZG93KHVyYXRlLHN0YXJ0PWMoMjAwMiw2KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyh1cmF0ZSwtMSksc3RhcnQ9YygyMDAyLDYpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHVyYXRlLC0yKSxzdGFydD1jKDIwMDIsNiksZW5kPWN1cnJlbnRkYXRlKSwNCiAgd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTMpLHN0YXJ0PWMoMjAwMiw2KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyh1cmF0ZSwtNCksc3RhcnQ9YygyMDAyLDYpLGVuZD1jdXJyZW50ZGF0ZSksDQogIHdpbmRvdyhzdGF0czo6bGFnKHVyYXRlLC01KSxzdGFydD1jKDIwMDIsNiksZW5kPWN1cnJlbnRkYXRlKSwNCiAgd2luZG93KHN0YXRzOjpsYWcodXJhdGUsLTYpLHN0YXJ0PWMoMjAwMiw2KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3cobnBwdHRsLzEwMCxzdGFydD1jKDIwMDIsNSksZW5kPWN1cnJlbnRkYXRlKSwNCiAgd2luZG93KGRpbml0aWFsY2xhaW1zLzEwMDAsc3RhcnQ9YygyMDAyLDYpLGVuZD1jdXJyZW50ZGF0ZSkNCiAgICAgICAgICAgICAgICAgICAgICApDQogIA0KY29sbmFtZXMoeHVyYXRlbGFncyk8LWMoInVyYXRlMCIsInVyYXRlbDEiLCJ1cmF0ZWwyIiwidXJhdGVsMyIsInVyYXRlbDQiLA0KICAgICAgICAgICAgICAgICAgICAgICAidXJhdGVsNSIsInVyYXRlbDYiLCJucHB0dGwiLCJkaW5pdGlhbGNsYWltcyIpDQoNCnhwYXllbXNsYWdzPC1kYXRhLmZyYW1lKA0KICB3aW5kb3cocGF5ZW1zLHN0YXJ0PWMoMjAwMiw2KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyhwYXllbXMsLTEpLHN0YXJ0PWMoMjAwMiw2KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyhwYXllbXMsLTIpLHN0YXJ0PWMoMjAwMiw2KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyhwYXllbXMsLTMpLHN0YXJ0PWMoMjAwMiw2KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyhwYXllbXMsLTQpLHN0YXJ0PWMoMjAwMiw2KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyhwYXllbXMsLTUpLHN0YXJ0PWMoMjAwMiw2KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coc3RhdHM6OmxhZyhwYXllbXMsLTYpLHN0YXJ0PWMoMjAwMiw2KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3cobnBwdHRsLHN0YXJ0PWMoMjAwMiw1KSxlbmQ9Y3VycmVudGRhdGUpLA0KICB3aW5kb3coZGluaXRpYWxjbGFpbXMvMTAwMCxzdGFydD1jKDIwMDIsNiksZW5kPWN1cnJlbnRkYXRlKQ0KICAgICAgICAgICAgICAgICAgICAgICkNCmNvbG5hbWVzKHhwYXllbXNsYWdzKTwtYygicGF5ZW1zMCIsInBheWVtc2wxIiwicGF5ZW1zbDIiLCJwYXllbXNsMyIsDQogICAgICAgICAgICAgICAgICAgICAgICAicGF5ZW1zbDQiLCJwYXllbXNsNSIsInBheWVtc2w2IiwibnBwdHRsIiwiZGluaXRpYWxjbGFpbXMiKSAgDQoNCiNDb25zdHJ1Y3QgY3VycmVudCBtb250aCBpbmZvIHRvIGJ1aWxkIHByZWRpY3Rpb25zDQp1dG9kYXk8LWxlbmd0aCh1cmF0ZWxhZ3MkdXJhdGUwKSAjTGFzdCBvYnNlcnZhdGlvbg0KYWRwdG9kYXk8LWxlbmd0aChucHB0dGwpDQppY3RvZGF5PC1sZW5ndGgoZGluaXRpYWxjbGFpbXMpDQp4dXRvZGF5c2xhZ3M8LWRhdGEuZnJhbWUodXJhdGVsYWdzJHVyYXRlMFt1dG9kYXldLA0KICAgIHVyYXRlbGFncyR1cmF0ZWwxW3V0b2RheV0sdXJhdGVsYWdzJHVyYXRlbDJbdXRvZGF5XSwNCiAgICB1cmF0ZWxhZ3MkdXJhdGVsM1t1dG9kYXldLHVyYXRlbGFncyR1cmF0ZWw0W3V0b2RheV0sDQogICAgdXJhdGVsYWdzJHVyYXRlbDVbdXRvZGF5XSxucHB0dGxbYWRwdG9kYXldLzEwMCxkaW5pdGlhbGNsYWltc1tpY3RvZGF5XS8xMDAwKQ0KDQpwdG9kYXk8LWxlbmd0aChwYXllbXNsYWdzJHBheWVtczApICNMYXN0IG9ic2VydmF0aW9uDQp4cHRvZGF5c2xhZ3M8LWRhdGEuZnJhbWUocGF5ZW1zbGFncyRwYXllbXMwW3B0b2RheV0scGF5ZW1zbGFncyRwYXllbXNsMVtwdG9kYXldLA0KICAgICAgcGF5ZW1zbGFncyRwYXllbXNsMltwdG9kYXldLHBheWVtc2xhZ3MkcGF5ZW1zbDNbcHRvZGF5XSxwYXllbXNsYWdzJHBheWVtc2w0W3B0b2RheV0sDQogICAgICBwYXllbXNsYWdzJHBheWVtc2w1W3B0b2RheV0sbnBwdHRsW2FkcHRvZGF5XSxkaW5pdGlhbGNsYWltc1tpY3RvZGF5XS8xMDAwKQ0KDQojUmVuYW1lIGV2ZXJ5dGhpbmcNCm5hbWVzKHh1dG9kYXlzbGFncyk8LWMoInVyYXRlbDEiLCJ1cmF0ZWwyIiwidXJhdGVsMyIsInVyYXRlbDQiLCJ1cmF0ZWw1IiwidXJhdGVsNiIsIm5wcHR0bCIsImRpbml0aWFsY2xhaW1zIikNCm5hbWVzKHhwdG9kYXlzbGFncyk8LWMoInBheWVtc2wxIiwicGF5ZW1zbDIiLCJwYXllbXNsMyIsInBheWVtc2w0IiwicGF5ZW1zbDUiLCJwYXllbXNsNiIsIm5wcHR0bCIsImRpbml0aWFsY2xhaW1zIikNCg0KeG1hdHJpeDwtYXMubWF0cml4KGRhdGEuZnJhbWUoIHdpbmRvdyhkaW5pdGlhbGNsYWltcyxzdGFydD1jKDIwMDIsNiksZW5kPWN1cnJlbnRkYXRlKS8xMDAwLA0KICAgICAgICAgICAgICAgICAgIHdpbmRvdyhucHB0dGwsc3RhcnQ9YygyMDAyLDUpLGVuZD1jdXJyZW50ZGF0ZSkpICkgDQpjb2xuYW1lcyh4bWF0cml4KTwtYygiZGluaXRjbGFpbXMiLCJucHB0dGwiKQ0KdXJhdGVjPC13aW5kb3codXJhdGUsc3RhcnQ9YygyMDAyLDYpKQ0KcGF5ZW1zYzwtd2luZG93KHBheWVtcyxzdGFydD1jKDIwMDIsNikpDQpVUkFURUFSSU1BWDwtYXV0by5hcmltYSh1cmF0ZWMseHJlZz14bWF0cml4LHNlYXNvbmFsPUZBTFNFKQ0KUEFZRU1TQVJJTUFYPC1hdXRvLmFyaW1hKHBheWVtc2MseHJlZz14bWF0cml4LHNlYXNvbmFsPUZBTFNFKQ0KaW5pdGN0b2RheTwtZGluaXRpYWxjbGFpbXNbaWN0b2RheV0vMTAwMA0KbnBwdHRsb2RheTwtbnBwdHRsW2FkcHRvZGF5XQ0KeHRvZGF5PWFzLm1hdHJpeChkYXRhLmZyYW1lKGluaXRjdG9kYXksbnBwdHRsb2RheSkpDQpjb2xuYW1lcyh4dG9kYXkpPC1jKCJkaW5pdGNsYWltcyIsIm5wcHR0bCIpDQpVUkFURUFSSU1BWGZjc3QgIDwtZm9yZWNhc3Q6OmZvcmVjYXN0KFVSQVRFQVJJTUFYLHhyZWc9eHRvZGF5LGg9MSkNClBBWUVNU0FSSU1BWGZjc3QgPC1mb3JlY2FzdDo6Zm9yZWNhc3QoUEFZRU1TQVJJTUFYLHhyZWc9eHRvZGF5LGg9MSkNCg0KDQpgYGANCmBgYHtyfQ0KUEFZRU1TQVJJTUFYZmNzdA0KYGBgDQoqKlBSZXZpb3VzIGFuZCBCYXNlbGluZSBGb3JlY2FzdHMqKg0KYGBge3J9DQpvcHRpb25zKG1jLmNvcmVzID0gcGFyYWxsZWw6OmRldGVjdENvcmVzKCkpICNzcGVlZCB1cCBzYW1wbGluZw0Kc2V0LnNlZWQoMTIzNTQ2KSAjbWFrZSByZXN1bHRzIHJlcHJvZHVjaWJsZQ0KYmF5ZXN1cmF0ZWM8LXN0YW5fZ2xtKHVyYXRlbn5sMXVyYXRlK2wydXJhdGUrbDN1cmF0ZStsNHVyYXRlK2w1dXJhdGUrbDZ1cmF0ZSwNCiAgICBkYXRhPXVkYXRhLA0KICAgIGZhbWlseSA9IGdhdXNzaWFuKCksDQogICAgcHJpb3I9bGFwbGFjZShsb2NhdGlvbj1jKDEsMCwwLDAsMCwwKSxzY2FsZT1jKDIuNSwyLjUvKDJeMiksMi41LygzXjIpLDIuNS8oNF4yKSwyLjUvKDVeMiksMi41Lyg2XjIpKSksDQogICAgcHJpb3JfaW50ZXJjZXB0PW5vcm1hbChsb2NhdGlvbj0wLCBzY2FsZT0xMCkNCikNCg0KbDFwYXltZXM8LXdpbmRvdyhzdGF0czo6bGFnKHBheWVtcywtMSksc3RhcnQ9YygxOTQwLDEpLGVuZD1jKDIwMjIsMikpDQpsMnBheW1lczwtd2luZG93KHN0YXRzOjpsYWcocGF5ZW1zLC0yKSxzdGFydD1jKDE5NDAsMSksZW5kPWMoMjAyMiwyKSkNCmwzcGF5bWVzPC13aW5kb3coc3RhdHM6OmxhZyhwYXllbXMsLTMpLHN0YXJ0PWMoMTk0MCwxKSxlbmQ9YygyMDIyLDIpKQ0KbDRwYXltZXM8LXdpbmRvdyhzdGF0czo6bGFnKHBheWVtcywtNCksc3RhcnQ9YygxOTQwLDEpLGVuZD1jKDIwMjIsMikpDQpsNXBheW1lczwtd2luZG93KHN0YXRzOjpsYWcocGF5ZW1zLC01KSxzdGFydD1jKDE5NDAsMSksZW5kPWMoMjAyMiwyKSkNCmw2cGF5bWVzPC13aW5kb3coc3RhdHM6OmxhZyhwYXllbXMsLTYpLHN0YXJ0PWMoMTk0MCwxKSxlbmQ9YygyMDIyLDIpKQ0KcGF5ZW1zbjwtd2luZG93KHBheWVtcyxzdGFydD1jKDE5NDAsMSksZW5kPWMoMjAyMiwyKSkNCnBkYXRhPC1kYXRhLmZyYW1lKHBheWVtc24sbDFwYXltZXMsbDJwYXltZXMsbDNwYXltZXMsbDRwYXltZXMsbDVwYXltZXMsbDZwYXltZXMpDQoNCm1pbjZwIDwtIEJWQVI6OmJ2YXIocGRhdGEsNixwcmlvcnMgPSBteXByaW9yc20pDQojYnZhcl9wcmVkZHA8LSBzdGF0czo6cHJlZGljdChtaW42cCkNCg0KI3Bsb3QoYnZhcl9wcmVkZHApDQoNCklORFBSTyA8LSBmcmVkcihzZXJpZXNfaWQgPSAiSU5EUFJPIikNCnRJTkQgPC0gdHMoSU5EUFJPJHZhbHVlLGZyZXF1ZW5jeT0xMixzdGFydD1jKDE5NTksMSksZW5kID0gYygyMDIyLDEpLG5hbWVzPSJJbmR1c3RyaWFsIFByb2R1Y3Rpb24iKQ0KTTE8LWZyZWRyKHNlcmllc19pZCA9ICJNMVNMIikNCm0xPC10cyhNMSR2YWx1ZSxmcmVxdWVuY3kgPSAxMixzdGFydD1jKDE5NTksMSksbmFtZXM9Ik0xIEdyb3d0aCIpDQoNCmpvaW50ZGF0YTIgPC0gdHMoZGF0YS5mcmFtZSgidXJhdGUiID0gd2luZG93KHVyYXRlLCBzdGFydCA9IGMoMTk1OSwzKSksInBheWVtcyIgPSB3aW5kb3cocGF5ZW1zLCBzdGFydCA9IGMoMTk1OSwzKSkpKQ0KDQp2YXJpbmMxPC1WQVIoam9pbnRkYXRhMiwgcCA9IDEpDQp2YXJpbmMyPC1WQVIoam9pbnRkYXRhMiwgcCA9IDIpDQp2YXJpbmMzPC1WQVIoam9pbnRkYXRhMiwgcCA9IDMpDQp2YXJpbmM0PC1WQVIoam9pbnRkYXRhMiwgcCA9IDQpDQp2YXJpbmM1PC1WQVIoam9pbnRkYXRhMiwgcCA9IDUpDQoNCmpkdmFyMSA8LWZvcmVjYXN0KHZhcmluYzEsIGggPSA0KQ0KamR2YXIyIDwtZm9yZWNhc3QodmFyaW5jMiwgaCA9IDQpDQpqZHZhcjMgPC1mb3JlY2FzdCh2YXJpbmMzLCBoID0gNCkNCmpkdmFyNCA8LWZvcmVjYXN0KHZhcmluYzQsIGggPSA0KQ0KamR2YXI1IDwtZm9yZWNhc3QodmFyaW5jNSwgaCA9IDQpDQoNCmpkdmFyMQ0KamR2YXIyDQpqZHZhcjMNCmpkdmFyNA0KamR2YXI1DQoNCmpkdmFyPC1kYXRhLmZyYW1lKGpkdmFyMSxqZHZhcjIsamR2YXIzLGpkdmFyNCxqZHZhcjUpDQoNCmF1dG9wbG90KGpkdmFyMSkNCmF1dG9wbG90KGpkdmFyMikNCmF1dG9wbG90KGpkdmFyMykNCmF1dG9wbG90KGpkdmFyNCkNCmF1dG9wbG90KGpkdmFyNSkNCg0KbmFpdmUocGF5ZW1zKQ0KDQp1bmVtQVIxc2VsZWN0aW9uPC1BcmltYSh1cmF0ZSxvcmRlcj1jKDEsMCwwKSxpbmNsdWRlLm1lYW49RkFMU0UpDQpwYXllbXNBUjFzZWxlY3Rpb248LUFyaW1hKHBheWVtcyxvcmRlcj1jKDEsMCwwKSxpbmNsdWRlLm1lYW49RkFMU0UpDQoNCnVuZW1BUjE8LWZvcmVjYXN0KHVuZW1BUjFzZWxlY3Rpb24saD0xKQ0KcGF5ZW1zQVIxPC1mb3JlY2FzdChwYXllbXNBUjFzZWxlY3Rpb24saD0xKQ0KDQp1bmVtQVIxDQpwYXllbXNBUjENCg0KcGxvdCh1bmVtQVIxKQ0KcGxvdChwYXllbXNBUjEpDQoNCmZhcjEgPC0gZnVuY3Rpb24oeCwgaCl7Zm9yZWNhc3QoQXJpbWEoeCwgb3JkZXI9YygxLDAsMCkpLCBoPWgpfQ0KZmFyMiA8LSBmdW5jdGlvbih4LCBoKXtmb3JlY2FzdChBcmltYSh4LCBvcmRlcj1jKDIsMCwwKSksIGg9aCl9DQpmYXIzIDwtIGZ1bmN0aW9uKHgsIGgpe2ZvcmVjYXN0KEFyaW1hKHgsIG9yZGVyPWMoMywwLDApKSwgaD1oKX0NCmZhcjQgPC0gZnVuY3Rpb24oeCwgaCl7Zm9yZWNhc3QoQXJpbWEoeCwgb3JkZXI9Yyg0LDAsMCkpLCBoPWgpfQ0KZmFyNSA8LSBmdW5jdGlvbih4LCBoKXtmb3JlY2FzdChBcmltYSh4LCBvcmRlcj1jKDUsMCwwKSksIGg9aCl9DQoNCg0KdXJhdGVBUjE8LSBmYXIxKHVyYXRlLCA0KQ0KdXJhdGVBUjI8LSBmYXIyKHVyYXRlLCA0KQ0KdXJhdGVBUjM8LSBmYXIzKHVyYXRlLCA0KQ0KdXJhdGVBUjQ8LSBmYXI0KHVyYXRlLCA0KQ0KdXJhdGVBUjU8LSBmYXI1KHVyYXRlLCA0KQ0KDQp1cmF0ZUFSMQ0KdXJhdGVBUjINCnVyYXRlQVIzDQp1cmF0ZUFSNA0KdXJhdGVBUjUNCg0KDQphdXRvcGxvdCh1cmF0ZUFSMSkrDQogIGdndGl0bGUoIkFSMSBmb3JlY2FzdCBmb3IgdW5lbXBsb3ltZW50IikgKw0KICB4bGFiKCJZZWFyIikgKw0KICB5bGFiKCJVbmVtcGxveW1lbnQgUmF0ZSIpDQphdXRvcGxvdCh1cmF0ZUFSMikrDQogIGdndGl0bGUoIkFSMiBmb3JlY2FzdCBmb3IgdW5lbXBsb3ltZW50IikgKw0KICB4bGFiKCJZZWFyIikgKw0KICB5bGFiKCJVbmVtcGxveW1lbnQgUmF0ZSIpDQphdXRvcGxvdCh1cmF0ZUFSMykrDQogIGdndGl0bGUoIkFSMyBmb3JlY2FzdCBmb3IgdW5lbXBsb3ltZW50IikgKw0KICB4bGFiKCJZZWFyIikgKw0KICB5bGFiKCJVbmVtcGxveW1lbnQgUmF0ZSIpDQphdXRvcGxvdCh1cmF0ZUFSNCkrDQogIGdndGl0bGUoIkFSNCBmb3JlY2FzdCBmb3IgdW5lbXBsb3ltZW50IikgKw0KICB4bGFiKCJZZWFyIikgKw0KICB5bGFiKCJVbmVtcGxveW1lbnQgUmF0ZSIpDQphdXRvcGxvdCh1cmF0ZUFSNSkrDQogIGdndGl0bGUoIkFSNSBmb3JlY2FzdCBmb3IgdW5lbXBsb3ltZW50IikgKw0KICB4bGFiKCJZZWFyIikgKw0KICB5bGFiKCJVbmVtcGxveW1lbnQgUmF0ZSIpDQoNCg0KcGF5ZW1zQVIxIDwtIGZhcjEocGF5ZW1zLCA0KQ0KcGF5ZW1zQVIyIDwtIGZhcjIocGF5ZW1zLCA0KQ0KcGF5ZW1zQVIzIDwtIGZhcjMocGF5ZW1zLCA0KQ0KcGF5ZW1zQVI0IDwtIGZhcjQocGF5ZW1zLCA0KQ0KcGF5ZW1zQVI1IDwtIGZhcjQocGF5ZW1zLCA0KQ0KDQpwYXllbXNBUjENCnBheWVtc0FSMg0KcGF5ZW1zQVIzDQpwYXllbXNBUjQNCnBheWVtc0FSNQ0KDQphdXRvcGxvdChwYXllbXNBUjEpKw0KICBnZ3RpdGxlKCJBUjEgZm9yZWNhc3QgZm9ybm9uIGZhcm0gcGF5cm9sbCBncm93dGgiKSArDQogIHhsYWIoIlllYXIiKSArDQogIHlsYWIoIlBheXJvbGwgR3Jvd3RoIikNCmF1dG9wbG90KHBheWVtc0FSMikrDQogIGdndGl0bGUoIkFSMiBmb3JlY2FzdCBmb3Jub24gZmFybSBwYXlyb2xsIGdyb3d0aCIpICsNCiAgeGxhYigiWWVhciIpICsNCiAgeWxhYigiUGF5cm9sbCBHcm93dGgiKQ0KYXV0b3Bsb3QocGF5ZW1zQVIzKSsNCiAgZ2d0aXRsZSgiQVIzIGZvcmVjYXN0IGZvcm5vbiBmYXJtIHBheXJvbGwgZ3Jvd3RoIikgKw0KICB4bGFiKCJZZWFyIikgKw0KICB5bGFiKCJQYXlyb2xsIEdyb3d0aCIpDQphdXRvcGxvdChwYXllbXNBUjQpKw0KICBnZ3RpdGxlKCJBUjQgZm9yZWNhc3QgZm9ybm9uIGZhcm0gcGF5cm9sbCBncm93dGgiKSArDQogIHhsYWIoIlllYXIiKSArDQogIHlsYWIoIlBheXJvbGwgR3Jvd3RoIikNCmF1dG9wbG90KHBheWVtc0FSNSkrDQogIGdndGl0bGUoIkFSNSBmb3JlY2FzdCBmb3Jub24gZmFybSBwYXlyb2xsIGdyb3d0aCIpICsNCiAgeGxhYigiWWVhciIpICsNCiAgeWxhYigiUGF5cm9sbCBHcm93dGgiKQ0KDQp1cmF0ZWwxIDwtIHdpbmRvdyhkaWZmKHVyYXRlLCBsYWcgPSAxKSwgc3RhcnQgPSBjKDE5NDgsNikpDQp1cmF0ZWwyIDwtIHdpbmRvdyhkaWZmKHVyYXRlLCBsYWcgPSAyKSwgc3RhcnQgPSBjKDE5NDgsNikpDQp1cmF0ZWwzIDwtIHdpbmRvdyhkaWZmKHVyYXRlLCBsYWcgPSAzKSwgc3RhcnQgPSBjKDE5NDgsNikpDQp1cmF0ZWw0IDwtIHdpbmRvdyhkaWZmKHVyYXRlLCBsYWcgPSA0KSwgc3RhcnQgPSBjKDE5NDgsNikpDQp1cmF0ZWw1IDwtIHdpbmRvdyhkaWZmKHVyYXRlLCBsYWcgPSA1KSwgc3RhcnQgPSBjKDE5NDgsNikpDQp1cmF0ZW4gPC0gd2luZG93KHVyYXRlLCBzdGFydCA9IGMoMTk0OCw2KSkNCg0KVW5lbWxhZyA8LSBkYXRhLmZyYW1lKGNiaW5kKHVyYXRlbix1cmF0ZWwxLHVyYXRlbDIsdXJhdGVsMyx1cmF0ZWw0LHVyYXRlbDUpKQ0KcnF1MSA8LSBycSh1cmF0ZW5+dXJhdGVsMSkNCnJxdTIgPC0gcnEodXJhdGVufnVyYXRlbDEgKyB1cmF0ZWwyKQ0KcnF1MyA8LSBycSh1cmF0ZW5+dXJhdGVsMSArIHVyYXRlbDIgKyB1cmF0ZWwzKQ0KcnF1NCA8LSBycSh1cmF0ZW5+dXJhdGVsMSArIHVyYXRlbDIgKyB1cmF0ZWwzICsgdXJhdGVsNCkNCnJxdTUgPC0gcnEodXJhdGVufnVyYXRlbDEgKyB1cmF0ZWwyICsgdXJhdGVsMyArIHVyYXRlbDQgKyB1cmF0ZWw1KQ0KDQp1QVJmMTwtcHJlZGljdChycXUxLFVuZW1sYWcpDQp1QVJmMjwtcHJlZGljdChycXUyLFVuZW1sYWcpDQp1QVJmMzwtcHJlZGljdChycXUzLFVuZW1sYWcpDQp1QVJmNDwtcHJlZGljdChycXU0LFVuZW1sYWcpDQp1QVJmNTwtcHJlZGljdChycXU1LFVuZW1sYWcpDQoNCnBheWVtc2wxIDwtIHdpbmRvdyhkaWZmKHBheWVtcywgbGFnID0gMSksIHN0YXJ0ID0gYygxOTQ4LDYpKQ0KcGF5ZW1zbDIgPC0gd2luZG93KGRpZmYocGF5ZW1zLCBsYWcgPSAyKSwgc3RhcnQgPSBjKDE5NDgsNikpDQpwYXllbXNsMyA8LSB3aW5kb3coZGlmZihwYXllbXMsIGxhZyA9IDMpLCBzdGFydCA9IGMoMTk0OCw2KSkNCnBheWVtc2w0IDwtIHdpbmRvdyhkaWZmKHBheWVtcywgbGFnID0gNCksIHN0YXJ0ID0gYygxOTQ4LDYpKQ0KcGF5ZW1zbDUgPC0gd2luZG93KGRpZmYocGF5ZW1zLCBsYWcgPSA1KSwgc3RhcnQgPSBjKDE5NDgsNikpDQpwYXllbXNuIDwtIHdpbmRvdyhwYXllbXMsIHN0YXJ0ID0gYygxOTQ4LDYpKQ0KDQpQYXllbXNsYWcgPC0gZGF0YS5mcmFtZShjYmluZChwYXllbXNuLHBheWVtc2wxLHBheWVtc2wyLHBheWVtc2wzLHBheWVtc2w0LHBheWVtc2w1KSkNCnJxcDEgPC0gcnEocGF5ZW1zbn5wYXllbXNsMSkNCnJxcDIgPC0gcnEocGF5ZW1zbn5wYXllbXNsMSArIHBheWVtc2wyKQ0KcnFwMyA8LSBycShwYXllbXNufnBheWVtc2wxICsgcGF5ZW1zbDIgKyBwYXllbXNsMykNCnJxcDQgPC0gcnEocGF5ZW1zbn5wYXllbXNsMSArIHBheWVtc2wyICsgcGF5ZW1zbDMgKyBwYXllbXNsNCkNCnJxcDUgPC0gcnEocGF5ZW1zbn5wYXllbXNsMSArIHBheWVtc2wyICsgcGF5ZW1zbDMgKyBwYXllbXNsNCArIHBheWVtc2w1KQ0KDQpwQVJmMTwtIHByZWRpY3QocnFwMSxQYXllbXNsYWcpDQpwQVJmMjwtcHJlZGljdChycXAyLFBheWVtc2xhZykNCnBBUmYzPC1wcmVkaWN0KHJxcDMsUGF5ZW1zbGFnKQ0KcEFSZjQ8LXByZWRpY3QocnFwNCxQYXllbXNsYWcpDQpwQVJmNTwtcHJlZGljdChycXA1LFBheWVtc2xhZykNCg0KZm9yZWNhc3Q6OmFjY3VyYWN5KHVyYXRlQVIxKVsyXQ0KZm9yZWNhc3Q6OmFjY3VyYWN5KHVyYXRlQVIyKVsyXQ0KZm9yZWNhc3Q6OmFjY3VyYWN5KHVyYXRlQVIzKVsyXQ0KZm9yZWNhc3Q6OmFjY3VyYWN5KHVyYXRlQVI0KVsyXQ0KZm9yZWNhc3Q6OmFjY3VyYWN5KHVyYXRlQVI1KVsyXQ0KZm9yZWNhc3Q6OmFjY3VyYWN5KHBheWVtc0FSMSlbM10NCmZvcmVjYXN0OjphY2N1cmFjeShwYXllbXNBUjIpWzNdDQpmb3JlY2FzdDo6YWNjdXJhY3kocGF5ZW1zQVIzKVszXQ0KZm9yZWNhc3Q6OmFjY3VyYWN5KHBheWVtc0FSNClbM10NCmZvcmVjYXN0OjphY2N1cmFjeShwYXllbXNBUjUpWzNdDQptZWFuKGFicyh1cmF0ZW4gLSB1QVJmMSkpDQptZWFuKGFicyh1cmF0ZW4gLSB1QVJmMikpDQptZWFuKGFicyh1cmF0ZW4gLSB1QVJmMykpDQptZWFuKGFicyh1cmF0ZW4gLSB1QVJmNCkpDQptZWFuKGFicyh1cmF0ZW4gLSB1QVJmNSkpDQptZWFuKGFicyhwYXllbXNuIC0gcEFSZjEpKQ0KbWVhbihhYnMocGF5ZW1zbiAtIHBBUmYyKSkNCm1lYW4oYWJzKHBheWVtc24gLSBwQVJmMykpDQptZWFuKGFicyhwYXllbXNuIC0gcEFSZjQpKQ0KbWVhbihhYnMocGF5ZW1zbiAtIHBBUmY1KSkNCmZvcmVjYXN0OjphY2N1cmFjeShqZHZhcjEsIGQ9MCxEID0gMCkNCmZvcmVjYXN0OjphY2N1cmFjeShqZHZhcjIsIGQ9MCxEID0gMCkNCmZvcmVjYXN0OjphY2N1cmFjeShqZHZhcjMsIGQ9MCxEID0gMCkNCmZvcmVjYXN0OjphY2N1cmFjeShqZHZhcjQsIGQ9MCxEID0gMCkNCmZvcmVjYXN0OjphY2N1cmFjeShqZHZhcjUsIGQ9MCxEID0gMCkNCg0KdXJhdGVudzwtd2luZG93KHVyYXRlbixzdGFydD1jKDE5NDksMSksZW5kPWMoMjAyMiwyKSkNCg0KaGlzdG9yeXUgPC0gZGF0YS5mcmFtZShkcyA9IHNlcShhcy5EYXRlKCcxOTQ5LTAxLTAxJyksIGFzLkRhdGUoJzIwMjItMDItMDEnKSwgYnkgPSAnbScpLCB5ID0gdXJhdGVudykNCg0KbXlwcm9waGV0bW9kZWx1PC1wcm9waGV0KA0KICAgIGRmID0gaGlzdG9yeXUsDQogICAgZ3Jvd3RoID0gImxpbmVhciIsDQogICAgY2hhbmdlcG9pbnRzID0gTlVMTCwNCiAgICBuLmNoYW5nZXBvaW50cyA9IDI1LA0KICAgIGNoYW5nZXBvaW50LnJhbmdlID0gMC44LA0KICAgIHllYXJseS5zZWFzb25hbGl0eSA9ICJhdXRvIiwNCiAgICB3ZWVrbHkuc2Vhc29uYWxpdHkgPSAiYXV0byIsDQogICAgZGFpbHkuc2Vhc29uYWxpdHkgPSAiYXV0byIsDQogICAgaG9saWRheXMgPSBOVUxMLA0KICAgIHNlYXNvbmFsaXR5Lm1vZGUgPSAiYWRkaXRpdmUiLA0KICAgIHNlYXNvbmFsaXR5LnByaW9yLnNjYWxlID0gMTAsDQogICAgaG9saWRheXMucHJpb3Iuc2NhbGUgPSAxMCwNCiAgICBjaGFuZ2Vwb2ludC5wcmlvci5zY2FsZSA9IDAuMDUsDQogICAgbWNtYy5zYW1wbGVzID0gMCwNCiAgICBpbnRlcnZhbC53aWR0aCA9IDAuOCwNCiAgICB1bmNlcnRhaW50eS5zYW1wbGVzID0gMTAwMCwNCiAgICBmaXQgPSBUUlVFDQopDQoNCiNQcm9kdWNlIGZvcmVjYXN0cyBhdCBtb250aGx5IGZyZXF1ZW5jeQ0KZnV0dXJldSA8LSBtYWtlX2Z1dHVyZV9kYXRhZnJhbWUobXlwcm9waGV0bW9kZWx1LCBwZXJpb2RzID0gNCxmcmVxID0gIm1vbnRoIikNCm15cHJvcGhldGZjc3R1PC1wcmVkaWN0KG15cHJvcGhldG1vZGVsdSxmdXR1cmV1KQ0KI0NvbW1hbmQgdG8gcGxvdCBmb3JlY2FzdCAodXNlcyBib3RoIGZpdCBvYmplY3QgYW5kIGZvcmVjYXN0IG9iamVjdCkNCnBsb3QobXlwcm9waGV0bW9kZWx1LG15cHJvcGhldGZjc3R1KQ0KDQpwYXllbXNudzwtd2luZG93KHBheWVtc24sZW5kPWMoMjAyMiwyKSkNCg0KaGlzdG9yeXAgPC0gZGF0YS5mcmFtZShkcyA9IHNlcShhcy5EYXRlKCcxOTQ4LTA2LTAxJyksIGFzLkRhdGUoJzIwMjItMDItMDEnKSwgYnkgPSAnbScpLCB5ID0gcGF5ZW1zbncpDQoNCm15cHJvcGhldG1vZGVscDwtcHJvcGhldCgNCiAgICBkZiA9IGhpc3RvcnlwLA0KICAgIGdyb3d0aCA9ICJsaW5lYXIiLA0KICAgIGNoYW5nZXBvaW50cyA9IE5VTEwsDQogICAgbi5jaGFuZ2Vwb2ludHMgPSAyNSwNCiAgICBjaGFuZ2Vwb2ludC5yYW5nZSA9IDAuOCwNCiAgICB5ZWFybHkuc2Vhc29uYWxpdHkgPSAiYXV0byIsDQogICAgd2Vla2x5LnNlYXNvbmFsaXR5ID0gImF1dG8iLA0KICAgIGRhaWx5LnNlYXNvbmFsaXR5ID0gImF1dG8iLA0KICAgIGhvbGlkYXlzID0gTlVMTCwNCiAgICBzZWFzb25hbGl0eS5tb2RlID0gImFkZGl0aXZlIiwNCiAgICBzZWFzb25hbGl0eS5wcmlvci5zY2FsZSA9IDEwLA0KICAgIGhvbGlkYXlzLnByaW9yLnNjYWxlID0gMTAsDQogICAgY2hhbmdlcG9pbnQucHJpb3Iuc2NhbGUgPSAwLjA1LA0KICAgIG1jbWMuc2FtcGxlcyA9IDAsDQogICAgaW50ZXJ2YWwud2lkdGggPSAwLjgsDQogICAgdW5jZXJ0YWludHkuc2FtcGxlcyA9IDEwMDAsDQogICAgZml0ID0gVFJVRQ0KKQ0KDQojUHJvZHVjZSBmb3JlY2FzdHMgYXQgbW9udGhseSBmcmVxdWVuY3kNCmZ1dHVyZXAgPC0gbWFrZV9mdXR1cmVfZGF0YWZyYW1lKG15cHJvcGhldG1vZGVscCwgcGVyaW9kcyA9IDQsZnJlcSA9ICJtb250aCIpDQpteXByb3BoZXRmY3N0cDwtcHJlZGljdChteXByb3BoZXRtb2RlbHAsZnV0dXJlcCkNCiNDb21tYW5kIHRvIHBsb3QgZm9yZWNhc3QgKHVzZXMgYm90aCBmaXQgb2JqZWN0IGFuZCBmb3JlY2FzdCBvYmplY3QpDQpwbG90KG15cHJvcGhldG1vZGVscCxteXByb3BoZXRmY3N0cCkNCg0KYGBgDQoNCg0KDQoNCg0KDQo=