1 Analysis of the international sample

1.1 Loading the dataset, required R packages and data wrangling

# The following packages might need to be installed onto your version 
# of R prior to the running of the code below.

# Package names
packages <- c("MASS", "lavaan", "processR", "corrplot", "tidytext", "tidyverse", "haven", "jmv", "Hmisc", "cluster", "kableExtra", "factoextra")

# Install packages not yet installed
installed_packages <- packages %in% rownames(installed.packages())
if (any(installed_packages == FALSE)) {
  install.packages(packages[!installed_packages])
}

# Packages loading
invisible(lapply(packages, library, character.only = TRUE))

# We load the original Czech dataset (in SPSS format) from a local directory.
data <- zap_labels(haven::read_sav(file = "INTERNATIONAL DATASET_12 Oct_final.sav"))

# For use in correlation analysis, we duplicate the dataset under name data_corr
data_corr <- data

# We also try to limit the decimals to three significant figures
options(digits = 3, scipen = 999)
# Calculating PH8

data <- data %>%
  mutate(Q49_1_rec = recode(Q49_1,
            `1` = 0,
            `2` = 1,
            `3` = 2,
            `4` = 3),
         Q49_2_rec = recode(Q49_2,
            `1` = 0,
            `2` = 1,
            `3` = 2,
            `4` = 3),
         Q49_3_rec = recode(Q49_3,
            `1` = 0,
            `2` = 1,
            `3` = 2,
            `4` = 3),
         Q49_4_rec = recode(Q49_4,
            `1` = 0,
            `2` = 1,
            `3` = 2,
            `4` = 3),
         Q49_5_rec = recode(Q49_5,
            `1` = 0,
            `2` = 1,
            `3` = 2,
            `4` = 3),
         Q49_6_rec = recode(Q49_6,
            `1` = 0,
            `2` = 1,
            `3` = 2,
            `4` = 3),
         Q49_7_rec = recode(Q49_7,
            `1` = 0,
            `2` = 1,
            `3` = 2,
            `4` = 3),
         Q49_8_rec = recode(Q49_8,
            `1` = 0,
            `2` = 1,
            `3` = 2,
            `4` = 3),
         PHQ8 = Q49_1_rec + Q49_2_rec + Q49_3_rec + Q49_4_rec + Q49_5_rec + Q49_6_rec + Q49_7_rec + Q49_8_rec)

# Renaming variables to identical ones as before
data_full <- data %>% 
  transmute(country = recode_factor(as_factor(Country),
            `1` = "IT",
            `2` = "FR",
            `3` = "PL",
            `4` = "UK",
            `5` = "CZ",
            `6` = "SW"),
            q01_gender = recode_factor(as_factor(Q3),
            `1` = "male",
            `2` = "female",
            `3` = "other"),
            q02_age = Q4,
            q02_age_group = recode_factor(as_factor(Q4_AGE_r),
            `1` = "16-29 years",
            `2` = "30-49 years",
            `3` = "50-64 years",
            `4` = "65+"),
            q03_relationship_type = recode_factor(as_factor(Q5),
            `1` = "single",
            `2` = "relationship",
            `3` = "married",
            `4` = "divorced",
            `5` = "widowed"),
            q04_children = recode_factor(as_factor(Q6),
            `1` = "yes",
            `2` = "no"),
            q11_education = recode_factor(as_factor(Q13R),
            `1` = "low",
            `2` = "medium",
            `3` = "high"),
            q18_02_soc_media = recode_factor(as_factor(replace_na(Q21_2, 0)),
            `0` = "no",
            `1` = "yes"),
            q20_public_info = recode_factor(as_factor(Q23),
            `1` = "yes",
            `2` = "no",
            `99` = "do_not_know"),
            q34_02_face_mask = recode_factor(as_factor(Q37_2),
            `1` = "yes",
            `2` = "no"),
            q34_07_hand_washing = recode_factor(as_factor(Q37_7),
            `1` = "yes",
            `2` = "no"),
            q35_01_contact_close_family = recode_factor(as_factor(Q38_1),
            `1` = "less_often",
            `2` = "as_before",
            `3` = "more_often"),
            q35_03_contact_friends = recode_factor(as_factor(Q38_3),
            `1` = "less_often",
            `2` = "as_before",
            `3` = "more_often"),
            q36_econ_worry = recode_factor(as_factor(Q39),
            `1` = "very_serious",
            `2` = "serious",
            `3` = "limited"),
            q38_alcohol = recode_factor(as_factor(Q42),
            `1` = "yes",
            `2` = "no"),
            q40_smoking = recode_factor(as_factor(Q44),
            `1` = "yes",
            `2` = "no"),
            q42_sport = recode_factor(as_factor(Q46),
            `1` = "yes",
            `2` = "no"),
            q47_self_reporting_health = recode_factor(as_factor(Q50),
            `1` = "excellent",
            `2` = "good",
            `3` = "neutral",
            `4` = "bad",
            `5` = "very_bad"),
            q48_chronic_illness = recode_factor(as_factor(Q51),
            `1` = "yes",
            `2` = "no"),
            q49_health_limitations = recode_factor(as_factor(Q52),
            `1` = "limits",
            `2` = "partially_limits",
            `3` = "no_limits"),
            q30_concern_infection_covid = Q33,
            q31_concern_infection_friends = Q34,
            q33_01_concern_situation = Q36_1,
            q33_02_concern_low_control = Q36_2,
            q33_03_concern_survival_covid = Q36_3,
            q33_04_concern_change_employment = Q36_4,
            q33_05_concern_infecting_others = Q36_5,
            PHQ8 = PHQ8) 

# Filtering out Czech sample for analyses
data <- data_full %>%
        filter(country != "CZ")

1.2 Descriptive statistics

1.2.1 Sample descriptive statistics

1.2.1.1 Population pyramid of the full sample

data_full[data_full$country %in% c("IT", "FR", "PL") & !is.na(data_full$q02_age),] %>%
  ggplot(aes(x = q02_age, 
             fill = q01_gender)) + 
  geom_bar(data = data_full[data_full$country %in% c("IT", "FR", "PL") & data_full$q01_gender == "female" & !is.na(data_full$q02_age),]) + 
  geom_bar(data = data_full[data_full$country %in% c("IT", "FR", "PL") & data_full$q01_gender == "male" & !is.na(data_full$q02_age),], 
           aes(y = ..count..*(-1))) + 
  scale_y_continuous(breaks = seq(-250, 250, 50), 
                     labels = abs(seq(-250, 250, 50)), 
                     limits = c(-100, 100)) + 
  scale_x_continuous(breaks = seq(15, 100, 5), 
                     labels = seq(15, 100, 5), 
                     limits = c(15, 100)) +
  coord_flip() +
  theme_bw() +
  theme(legend.title = element_blank()) +
  facet_grid(cols = vars(country)) + 
  scale_fill_manual(values = c("#E64B35CC", "#00A087CC")) +
  xlab("Age") +
  ylab("Count")

data_full[data_full$country %in% c("UK", "CZ", "SW") & !is.na(data_full$q02_age),]  %>%
  ggplot(aes(x = q02_age, 
             fill = q01_gender)) + 
  geom_bar(data = data_full[data_full$country %in% c("UK", "CZ", "SW") & data_full$q01_gender == "female" & !is.na(data_full$q02_age),]) + 
  geom_bar(data = data_full[data_full$country %in% c("UK", "CZ", "SW") & data_full$q01_gender == "male" & !is.na(data_full$q02_age),], 
           aes(y = ..count..*(-1))) + 
  scale_y_continuous(breaks = seq(-250, 250, 50), 
                     labels = abs(seq(-250, 250, 50)), 
                     limits = c(-100, 100)) + 
  scale_x_continuous(breaks = seq(15, 100, 5), 
                     labels = seq(15, 100, 5), 
                     limits = c(15, 100)) +
  coord_flip() +
  theme_bw() +
  theme(legend.title = element_blank()) +
  facet_grid(cols = vars(country)) + 
  scale_fill_manual(values = c("#E64B35CC", "#00A087CC")) +
  xlab("Age") +
  ylab("Count")

1.2.1.2 Descriptives of Depression index (PHQ8)

# To summarize the dependent continuous variable, we use the descriptives() 
# function from the jmv package.

descriptives <- jmv::descriptives(
    data = data,
    vars = "PHQ8",
    freq = TRUE,
    box = TRUE,
    median = FALSE,
    range = TRUE,
    sd = TRUE,
    pc = TRUE)

descriptives$descriptives

 Descriptives                   
 ────────────────────────────── 
                         PHQ8   
 ────────────────────────────── 
   N                     7804   
   Missing                187   
   Mean                  6.91   
   Standard deviation    5.45   
   Range                 24.0   
   Minimum               0.00   
   Maximum               24.0   
   25th percentile       3.00   
   50th percentile       6.00   
   75th percentile       10.0   
 ────────────────────────────── 

1.2.1.3 Plots of Depression index (PHQ8)

data %>%
  filter(PHQ8 != "NA") %>% 
  ggplot(aes(y = PHQ8)) +
         geom_boxplot(fill = "#4DBBD5CC") +
         theme_bw() +
         scale_y_continuous(breaks = seq(0, 24, 1), 
                            labels = seq(0, 24, 1), 
                            limits = c(0, 24)) +
         theme(legend.position = "none", 
               axis.title.x = element_blank(),
               axis.text.x = element_blank(), 
               axis.ticks.x = element_blank(), 
               axis.line.x = element_blank(), 
               panel.grid.major.x = element_blank(), 
               panel.grid.minor = element_blank())

data %>% 
  filter(PHQ8 != "NA") %>% 
  ggplot(aes(x = as_factor(PHQ8))) +
         geom_bar(fill = "#4DBBD5CC") +
         scale_y_continuous(breaks = seq(0, 700, 50), 
                            labels = seq(0, 700, 50), 
                            limits = c(0, 700)) +
         theme_bw() +
         theme(legend.position = "none") +
         xlab("PHQ8")

1.2.1.4 Descriptives of demographic variables

# To summarize the key demographic variables, we use the descriptives() 
# function from the jmv package.

demo_descriptives <- jmv::descriptives(
    data = data,
    vars = vars("q01_gender",
                "q02_age_group",
                "q03_relationship_type",
                "q04_children",
                "q11_education"),
    bar = TRUE,
    freq = TRUE,
    missing = FALSE,
    mean = FALSE,
    median = FALSE,
    sd = FALSE,
    min = FALSE,
    max = FALSE)

demo_descriptives$frequencies   
## 
##  FREQUENCIES
## 
##  Frequencies of q01_gender                          
##  ────────────────────────────────────────────────── 
##    Levels    Counts    % of Total    Cumulative %   
##  ────────────────────────────────────────────────── 
##    male        1738          21.8            21.8   
##    female      6242          78.2            99.9   
##    other          7       8.76e-4           100.0   
##  ────────────────────────────────────────────────── 
## 
## 
##  Frequencies of q02_age_group                            
##  ─────────────────────────────────────────────────────── 
##    Levels         Counts    % of Total    Cumulative %   
##  ─────────────────────────────────────────────────────── 
##    16-29 years      1655          20.7            20.7   
##    30-49 years      4177          52.3            73.0   
##    50-64 years      1683          21.1            94.1   
##    65+               471           5.9           100.0   
##  ─────────────────────────────────────────────────────── 
## 
## 
##  Frequencies of q03_relationship_type                     
##  ──────────────────────────────────────────────────────── 
##    Levels          Counts    % of Total    Cumulative %   
##  ──────────────────────────────────────────────────────── 
##    single            1816          22.8            22.8   
##    relationship      1930          24.2            46.9   
##    married           3490          43.7            90.7   
##    divorced           621           7.8            98.4   
##    widowed            125           1.6           100.0   
##  ──────────────────────────────────────────────────────── 
## 
## 
##  Frequencies of q04_children                        
##  ────────────────────────────────────────────────── 
##    Levels    Counts    % of Total    Cumulative %   
##  ────────────────────────────────────────────────── 
##    yes         4745          59.4            59.4   
##    no          3242          40.6           100.0   
##  ────────────────────────────────────────────────── 
## 
## 
##  Frequencies of q11_education                       
##  ────────────────────────────────────────────────── 
##    Levels    Counts    % of Total    Cumulative %   
##  ────────────────────────────────────────────────── 
##    low         1011          17.3            17.3   
##    medium      1712          29.3            46.6   
##    high        3116          53.4           100.0   
##  ──────────────────────────────────────────────────

1.2.1.5 Plots of demographic variables

data %>% 
  filter(q01_gender %in% c("male", "female"), 
         q02_age_group != "NA") %>% 
  ggplot(aes(x = q01_gender)) +
         geom_bar(aes(fill = q01_gender)) +
         scale_y_continuous(breaks = seq(0, 3500, 500), 
                            labels = seq(0, 3500, 500), 
                            limits = c(0, 3500)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.x = element_blank()) +
         facet_grid(cols = vars(q02_age_group)) +
         scale_fill_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC"))

data %>% 
  filter(q01_gender %in% c("male", "female"), 
         q03_relationship_type != "NA") %>% 
  ggplot(aes(x = q01_gender)) +
         geom_bar(aes(fill = q01_gender)) +
         scale_y_continuous(breaks = seq(0, 2500, 250), 
                            labels = seq(0, 2500, 250), 
                            limits = c(0, 2500)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.x = element_blank()) +
         facet_grid(cols = vars(q03_relationship_type), 
                    rows = vars(q04_children)) +
         scale_fill_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC"))

data %>% 
  filter(q01_gender %in% c("male", "female"), 
         q11_education != "NA", 
         q02_age_group != "NA") %>% 
  ggplot(aes(x = q01_gender)) +
         geom_bar(aes(fill = q01_gender)) +
         scale_y_continuous(breaks = seq(0, 1600, 250), 
                            labels = seq(0, 1600, 250), 
                            limits = c(0, 1600)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.x = element_blank()) +
         facet_grid(cols = vars(q11_education), 
                    rows = vars(q02_age_group)) +
         scale_fill_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC"))

1.2.2 Descriptives of PHQ8 and distinct groups

1.2.2.1 Depression by gender age and other demographics

data_full %>%
  filter(q01_gender != "other", 
         PHQ8 != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.x = element_blank()) +
         facet_grid(cols = vars(country)) +
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Countries") 

data %>% 
  filter(q01_gender != "other", 
         q02_age_group != "NA",
         PHQ8 != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.x = element_blank()) +
         facet_grid(cols = vars(q02_age_group)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Age groups")

# For reproducibility of results
set.seed(2021)

data %>% 
  filter(q01_gender != "other",
         q02_age_group != "NA",
         PHQ8 != "NA") %>% 
  ggplot(aes(x = q02_age, 
             y = PHQ8)) +
         geom_jitter(na.rm  = TRUE, 
                     size = 1, 
                     alpha = 0.1) +
         stat_smooth(method = "gam", 
                     formula = y ~ x, 
                     na.rm  = TRUE, 
                     aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.title = element_blank()) +
         scale_x_continuous(limits = c(16, 92), 
         breaks = seq(from = 16, 
                      to = 92, 
                      by = 8)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         xlab("Age") + 
         ggtitle("Age groups")

data %>% 
  filter(q01_gender != "other", 
         q03_relationship_type != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.x = element_blank()) +
         facet_grid(cols = vars(q03_relationship_type)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Relationship type")

data %>%
  filter(q01_gender != "other", 
         q11_education != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.x = element_blank()) +
         facet_grid(cols = vars(q11_education)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Educational attainment")

data %>%
  filter(q01_gender != "other") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.x = element_blank()) +
         facet_grid(cols = vars(q04_children)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Children")

1.2.2.3 Depression and lifestyle factors

data %>%
  filter(q01_gender != "other", 
         q35_01_contact_close_family != "NA",
         q02_age_group != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.y = element_blank()) +
         facet_grid(cols = vars(q35_01_contact_close_family), rows = vars(q02_age_group)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Frequency of physical contact - close family") + 
         coord_flip()

data %>%
  filter(q01_gender != "other", 
         q35_03_contact_friends != "NA",
         q02_age_group != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.y = element_blank()) +
         facet_grid(cols = vars(q35_03_contact_friends), rows = vars(q02_age_group)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Frequency of physical contact - friends") + 
         coord_flip()

data %>%
  filter(q01_gender != "other", 
         q38_alcohol != "NA",
         q02_age_group != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.y = element_blank()) +
         facet_grid(cols = vars(q38_alcohol), rows = vars(q02_age_group)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Alcohol") + 
         coord_flip()

data %>%
  filter(q01_gender != "other", 
         q40_smoking != "NA",
         q02_age_group != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.y = element_blank()) +
         facet_grid(cols = vars(q40_smoking), rows = vars(q02_age_group)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Smoking") + 
         coord_flip()

data %>%
  filter(q01_gender != "other", 
         q42_sport != "NA",
         q02_age_group != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.y = element_blank()) +
         facet_grid(cols = vars(q42_sport ), rows = vars(q02_age_group)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Sport") + 
         coord_flip()

1.2.2.4 Depression and health

data %>%
  filter(q01_gender != "other", 
         q47_self_reporting_health != "NA", 
         q02_age_group != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.y = element_blank()) +
         facet_grid(cols = vars(q47_self_reporting_health), rows = vars(q02_age_group)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Self-reported Health") + 
         coord_flip()

data %>%
  filter(q01_gender != "other", 
         q48_chronic_illness != "NA", 
         q02_age_group != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.y = element_blank()) +
         facet_grid(cols = vars(q48_chronic_illness), rows = vars(q02_age_group)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) +
         ggtitle("Chronic illness") + 
         coord_flip()

data %>%
  filter(q01_gender != "other", 
         q49_health_limitations != "NA", 
         q02_age_group != "NA") %>% 
  ggplot(aes(y = PHQ8, 
             x = q01_gender)) +
         geom_boxplot(na.rm = TRUE, 
                      aes(color = q01_gender)) +
         theme_bw() +
         theme(legend.position = "none", axis.title.y = element_blank()) +
         facet_grid(cols = vars(q49_health_limitations ), rows = vars(q02_age_group)) + 
         scale_color_manual(values = c("female" = "#E64B35CC", "male" = "#00A087CC")) + 
         ggtitle("Health limitations") + 
         coord_flip()

1.3 Overview of correlations between individual predictors and outcome

# While the dataset has been already imported, the values of factor variables 
# were changed from numerics to text strings, therefore that dataset is unsuitable
# for correlation analysis. To solve this, we create a parallel dataset, 
# again renaming the key variables to a more understandable form.

data_corr <- data_corr %>% 
             transmute(country = Country,
                        q01_gender = Q3, 
                        q02_age = Q4,
                        q03_relationship_type = Q5,
                        q04_children = Q6,
                        q11_education = Q13R,
                        q18_02_soc_media = replace_na(Q21_2, 0),
                        q20_public_info = Q23,
                        q34_02_face_mask = Q37_2,
                        q34_07_hand_washing = Q37_7,
                        q36_econ_worry = Q39,
                        q35_01_contact_close_family = Q38_1,
                        q35_03_contact_friends = Q38_3,
                        q38_alcohol = Q42,
                        q40_smoking = Q44,
                        q42_sport = Q46,
                        q47_self_reporting_health = Q50,
                        q48_chronic_illness = Q51,
                        q49_health_limitations = Q52) %>% 
              filter(country != 5) %>% 
              select(-country)

data_corr <- cbind(data_corr, PHQ8_t)

res1 <- cor.mtest(data_corr, conf.level = .95)

#Correlation matrix using Spearman coefficient (values with p > 0.05 are crossed)
corrplot(cor(data_corr, 
             method = "spearman", 
             use = "complete.obs"), 
             method = "circle", 
             title = "Correlation Matrix - Spearman Coefficient", 
             type = "lower", 
             p.mat = res1$p, 
             sig.level = .05, 
             mar = c(0,0,1,0))

linreg_theory <- jmv::linReg(
    data = data,
    dep = "PHQ8_t",
    covs = "q02_age",
    factors = vars("q01_gender",
                   "q03_relationship_type",
                   "q04_children",
                   # "q11_education",
                   "q18_02_soc_media",
                   "q20_public_info",
                   "q34_02_face_mask",
                   "q34_07_hand_washing",
                   "q35_01_contact_close_family",
                   "q35_03_contact_friends",
                   "q36_econ_worry",
                   "q38_alcohol",
                   "q40_smoking",
                   "q42_sport",
                   "q47_self_reporting_health",
                   "q48_chronic_illness",
                   "q49_health_limitations"),
    blocks = list(
        list(
            "q01_gender",
            "q02_age",
            "q03_relationship_type",
            "q04_children"),
            # "q11_education"),
        list(
            "q18_02_soc_media",
            "q20_public_info",
            "q34_02_face_mask",
            "q34_07_hand_washing",
            "q36_econ_worry"),
        list(
            "q40_smoking",
            "q42_sport",
            "q38_alcohol",
            "q35_01_contact_close_family",
            "q35_03_contact_friends"),
        list(
            "q47_self_reporting_health",
            "q48_chronic_illness",
            "q49_health_limitations")),
    refLevels = list(
        list(
            var = "q01_gender",
            ref = "female"),
        list(
            var = "q04_children",
            ref = "no"),
         list(
            var = "q20_public_info",
            ref = "no"),
        list(
            var = "q34_02_face_mask",
            ref = "no"),
        list(
            var = "q34_07_hand_washing",
            ref = "no"),
        list(
            var = "q36_econ_worry",
            ref = "very_serious"),
        list(
            var = "q42_sport",
            ref = "no"),
        list(
            var = "q40_smoking",
            ref = "yes"),
        list(
            var = "q38_alcohol",
            ref = "yes"),
        list(
            var = "q35_01_contact_close_family",
            ref = "less_often"),
        list(
            var = "q35_03_contact_friends",
            ref = "less_often"),
        list(
            var = "q18_02_soc_media",
            ref = "yes"),
        list(
            var = "q03_relationship_type",
            ref = "single"),
        list(
            var = "q47_self_reporting_health",
            ref = "very_bad"),
        list(
            var = "q49_health_limitations",
            ref = "limits"),
        # list(
        #     var = "q11_education",
        #     ref = "low"),
        list(
            var = "q48_chronic_illness",
            ref = "yes")),
    r2Adj = TRUE,
    aic = TRUE,
    bic = TRUE,
    rmse = TRUE,
    modelTest = TRUE,
    anova = TRUE,
    ci = TRUE,
    stdEst = TRUE,
    ciStdEst = TRUE,
    durbin = TRUE,
    collin = TRUE)

1.3.1 Regression model performance

1.3.1.1 Model fit measures

linreg_theory$modelFit

 Model Fit Measures                                                                                     
 ────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Model    R        R²        Adjusted R²    AIC      BIC      RMSE    F       df1    df2     p        
 ────────────────────────────────────────────────────────────────────────────────────────────────────── 
       1    0.274    0.0749         0.0740    27219    27289    1.43    77.3      8    7633    < .001   
       2    0.356    0.1267         0.1249    26794    26912    1.39    73.7     15    7626    < .001   
       3    0.369    0.1362         0.1337    26724    26891    1.39    54.6     22    7619    < .001   
       4    0.488    0.2384         0.2355    25775    25990    1.30    82.2     29    7612    < .001   
 ────────────────────────────────────────────────────────────────────────────────────────────────────── 

1.3.1.2 Model comparisons

linreg_theory$modelComp                 

 Model Comparisons                                                    
 ──────────────────────────────────────────────────────────────────── 
   Model         Model    ΔR²        F        df1    df2     p        
 ──────────────────────────────────────────────────────────────────── 
       1    -        2    0.05173     64.5      7    7626    < .001   
       2    -        3    0.00951     12.0      7    7619    < .001   
       3    -        4    0.10228    146.0      7    7612    < .001   
 ──────────────────────────────────────────────────────────────────── 

1.3.1.3 Model specific results

linreg_theory$models                

 MODEL SPECIFIC RESULTS

 MODEL 1

 Omnibus ANOVA Test                                                                     
 ────────────────────────────────────────────────────────────────────────────────────── 
                            Sum of Squares    df      Mean Square    F         p        
 ────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                       393.14       2         196.57     95.44    < .001   
   q02_age                          579.47       1         579.47    281.35    < .001   
   q03_relationship_type             59.23       4          14.81      7.19    < .001   
   q04_children                       4.12       1           4.12      2.00     0.157   
   Residuals                      15720.82    7633           2.06                       
 ────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                             
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                   Estimate    SE         Lower      Upper      t          p         Stand. Estimate    Lower      Upper     
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept              ᵃ      3.9502    0.05909     3.8344     4.0661     66.851    < .001                                            
   q01_gender:                                                                                                                           
   male – female                -0.5557    0.04049    -0.6351    -0.4763    -13.725    < .001            -0.3726    -0.4258    -0.3194   
   other – female                0.9239    0.64223    -0.3351     2.1829      1.439     0.150             0.6195    -0.2247     1.4637   
   q02_age                      -0.0238    0.00142    -0.0266    -0.0210    -16.774    < .001            -0.2129    -0.2378    -0.1880   
   q03_relationship_type:                                                                                                                
   relationship – single        -0.1705    0.05057    -0.2696    -0.0714     -3.371    < .001            -0.1143    -0.1808    -0.0479   
   married – single             -0.1534    0.05337    -0.2580    -0.0488     -2.874     0.004            -0.1028    -0.1730    -0.0327   
   divorced – single             0.0992    0.07715    -0.0521     0.2504      1.285     0.199             0.0665    -0.0349     0.1679   
   widowed – single              0.0817    0.14991    -0.2122     0.3756      0.545     0.586             0.0548    -0.1423     0.2518   
   q04_children:                                                                                                                         
   yes – no                     -0.0585    0.04135    -0.1396     0.0225     -1.415     0.157            -0.0392    -0.0936     0.0151   
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation       
 ──────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p       
 ──────────────────────────────────────────── 
            0.0325            1.93    0.008   
 ──────────────────────────────────────────── 


 Collinearity Statistics                        
 ────────────────────────────────────────────── 
                            VIF     Tolerance   
 ────────────────────────────────────────────── 
   q01_gender               1.01        0.992   
   q02_age                  1.15        0.867   
   q03_relationship_type    1.08        0.930   
   q04_children             1.24        0.808   
 ────────────────────────────────────────────── 


 MODEL 2

 Omnibus ANOVA Test                                                                        
 ───────────────────────────────────────────────────────────────────────────────────────── 
                            Sum of Squares    df      Mean Square    F            p        
 ───────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                    333.56504       2      166.78252     85.69636    < .001   
   q02_age                       435.39966       1      435.39966    223.71749    < .001   
   q03_relationship_type          45.57174       4       11.39293      5.85393    < .001   
   q04_children                    9.08554       1        9.08554      4.66834     0.031   
   q18_02_soc_media               54.79480       1       54.79480     28.15472    < .001   
   q20_public_info               132.17343       2       66.08671     33.95674    < .001   
   q34_02_face_mask                0.00213       1        0.00213      0.00109     0.974   
   q34_07_hand_washing            20.29233       1       20.29233     10.42663     0.001   
   q36_econ_worry                578.14533       2      289.07266    148.53161    < .001   
   Residuals                   14841.74441    7626        1.94620                          
 ───────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                                
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                   Estimate    SE         Lower      Upper       t           p         Stand. Estimate    Lower      Upper      
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept              ᵃ     4.21742    0.11257     3.9967     4.43809     37.4644    < .001                                             
   q01_gender:                                                                                                                              
   male – female               -0.51516    0.03966    -0.5929    -0.43741    -12.9887    < .001           -0.34544    -0.3976    -0.29330   
   other – female               0.95339    0.62457    -0.2709     2.17773      1.5265     0.127            0.63929    -0.1817     1.46026   
   q02_age                     -0.02095    0.00140    -0.0237    -0.01820    -14.9572    < .001           -0.18728    -0.2118    -0.16274   
   q03_relationship_type:                                                                                                                   
   relationship – single       -0.17703    0.04920    -0.2735    -0.08058     -3.5981    < .001           -0.11870    -0.1834    -0.05403   
   married – single            -0.12680    0.05199    -0.2287    -0.02489     -2.4391     0.015           -0.08503    -0.1534    -0.01669   
   divorced – single            0.06902    0.07504    -0.0781     0.21611      0.9198     0.358            0.04628    -0.0524     0.14491   
   widowed – single            -0.00889    0.14585    -0.2948     0.27702     -0.0610     0.951           -0.00596    -0.1977     0.18575   
   q04_children:                                                                                                                            
   yes – no                    -0.08694    0.04024    -0.1658    -0.00806     -2.1606     0.031           -0.05830    -0.1112    -0.00541   
   q18_02_soc_media:                                                                                                                        
   no – yes                    -0.18010    0.03394    -0.2466    -0.11357     -5.3061    < .001           -0.12077    -0.1654    -0.07615   
   q20_public_info:                                                                                                                         
   yes – no                    -0.27747    0.03528    -0.3466    -0.20832     -7.8653    < .001           -0.18606    -0.2324    -0.13969   
   do_not_know – no            -0.03903    0.05864    -0.1540     0.07592     -0.6656     0.506           -0.02617    -0.1032     0.05091   
   q34_02_face_mask:                                                                                                                        
   yes – no                    -0.00115    0.03486    -0.0695     0.06718     -0.0331     0.974           -7.73e-4    -0.0466     0.04504   
   q34_07_hand_washing:                                                                                                                     
   yes – no                     0.30711    0.09511     0.1207     0.49355      3.2290     0.001            0.20593     0.0809     0.33095   
   q36_econ_worry:                                                                                                                          
   serious – very_serious      -0.31430    0.04251    -0.3976    -0.23095     -7.3926    < .001           -0.21075    -0.2666    -0.15487   
   limited – very_serious      -0.72547    0.04344    -0.8106    -0.64031    -16.6990    < .001           -0.48646    -0.5436    -0.42935   
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation        
 ───────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p        
 ───────────────────────────────────────────── 
            0.0359            1.93    < .001   
 ───────────────────────────────────────────── 


 Collinearity Statistics                        
 ────────────────────────────────────────────── 
                            VIF     Tolerance   
 ────────────────────────────────────────────── 
   q01_gender               1.01        0.988   
   q02_age                  1.17        0.855   
   q03_relationship_type    1.08        0.928   
   q04_children             1.24        0.808   
   q18_02_soc_media         1.02        0.982   
   q20_public_info          1.01        0.992   
   q34_02_face_mask         1.02        0.982   
   q34_07_hand_washing      1.01        0.986   
   q36_econ_worry           1.01        0.991   
 ────────────────────────────────────────────── 


 MODEL 3

 Omnibus ANOVA Test                                                                            
 ───────────────────────────────────────────────────────────────────────────────────────────── 
                                  Sum of Squares    df      Mean Square    F          p        
 ───────────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                            309.977       2        154.988     80.440    < .001   
   q02_age                               411.513       1        411.513    213.577    < .001   
   q03_relationship_type                  44.404       4         11.101      5.761    < .001   
   q04_children                            7.994       1          7.994      4.149     0.042   
   q18_02_soc_media                       55.925       1         55.925     29.025    < .001   
   q20_public_info                       128.831       2         64.415     33.432    < .001   
   q34_02_face_mask                        0.267       1          0.267      0.139     0.710   
   q34_07_hand_washing                    12.984       1         12.984      6.739     0.009   
   q36_econ_worry                        519.640       2        259.820    134.848    < .001   
   q40_smoking                             8.914       1          8.914      4.627     0.032   
   q42_sport                              23.841       1         23.841     12.374    < .001   
   q38_alcohol                             0.348       1          0.348      0.181     0.671   
   q35_01_contact_close_family            98.680       2         49.340     25.608    < .001   
   q35_03_contact_friends                 21.667       2         10.833      5.623     0.004   
   Residuals                           14680.048    7619          1.927                        
 ───────────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                                      
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                         Estimate    SE         Lower      Upper       t           p         Stand. Estimate    Lower      Upper      
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept                    ᵃ      4.4676    0.11994     4.2325     4.70274     37.2482    < .001                                             
   q01_gender:                                                                                                                                    
   male – female                      -0.5013    0.03977    -0.5793    -0.42335    -12.6045    < .001           -0.33616    -0.3884    -0.28388   
   other – female                      0.8139    0.62170    -0.4048     2.03255      1.3091     0.191            0.54572    -0.2715     1.36291   
   q02_age                            -0.0207    0.00142    -0.0235    -0.01794    -14.6143    < .001           -0.18524    -0.2101    -0.16039   
   q03_relationship_type:                                                                                                                         
   relationship – single              -0.1828    0.04914    -0.2791    -0.08645     -3.7196    < .001           -0.12256    -0.1872    -0.05797   
   married – single                   -0.1302    0.05202    -0.2322    -0.02820     -2.5024     0.012           -0.08729    -0.1557    -0.01891   
   divorced – single                   0.0556    0.07472    -0.0909     0.20205      0.7436     0.457            0.03726    -0.0610     0.13548   
   widowed – single                   -0.0283    0.14524    -0.3130     0.25646     -0.1946     0.846           -0.01895    -0.2099     0.17196   
   q04_children:                                                                                                                                  
   yes – no                           -0.0822    0.04033    -0.1612    -0.00309     -2.0369     0.042           -0.05509    -0.1081    -0.00207   
   q18_02_soc_media:                                                                                                                              
   no – yes                           -0.1823    0.03383    -0.2486    -0.11595     -5.3875    < .001           -0.12222    -0.1667    -0.07775   
   q20_public_info:                                                                                                                               
   yes – no                           -0.2746    0.03514    -0.3435    -0.20575     -7.8158    < .001           -0.18415    -0.2303    -0.13797   
   do_not_know – no                   -0.0411    0.05838    -0.1555     0.07338     -0.7032     0.482           -0.02753    -0.1043     0.04921   
   q34_02_face_mask:                                                                                                                              
   yes – no                           -0.0131    0.03505    -0.0818     0.05565     -0.3724     0.710           -0.00875    -0.0548     0.03732   
   q34_07_hand_washing:                                                                                                                           
   yes – no                            0.2479    0.09550     0.0607     0.43512      2.5959     0.009            0.16624     0.0407     0.29177   
   q36_econ_worry:                                                                                                                                
   serious – very_serious             -0.3011    0.04243    -0.3843    -0.21790     -7.0954    < .001           -0.20189    -0.2577    -0.14611   
   limited – very_serious             -0.6937    0.04358    -0.7791    -0.60824    -15.9159    < .001           -0.46514    -0.5224    -0.40785   
   q40_smoking:                                                                                                                                   
   no – yes                           -0.0835    0.03884    -0.1597    -0.00740     -2.1509     0.032           -0.05601    -0.1071    -0.00497   
   q42_sport:                                                                                                                                     
   yes – no                           -0.1140    0.03241    -0.1776    -0.05048     -3.5176    < .001           -0.07645    -0.1191    -0.03385   
   q38_alcohol:                                                                                                                                   
   no – yes                           -0.0145    0.03406    -0.0812     0.05230     -0.4249     0.671           -0.00970    -0.0545     0.03507   
   q35_01_contact_close_family:                                                                                                                   
   as_before – less_often             -0.1982    0.03490    -0.2667    -0.12982     -5.6795    < .001           -0.13293    -0.1788    -0.08705   
   more_often – less_often             0.1040    0.05265    7.94e-4     0.20721      1.9754     0.048            0.06974    5.33e-4     0.13895   
   q35_03_contact_friends:                                                                                                                        
   as_before – less_often             -0.2596    0.07753    -0.4116    -0.10760     -3.3481    < .001           -0.17407    -0.2760    -0.07215   
   more_often – less_often             0.0138    0.17948    -0.3381     0.36560      0.0767     0.939            0.00923    -0.2267     0.24515   
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation       
 ──────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p       
 ──────────────────────────────────────────── 
            0.0331            1.93    0.006   
 ──────────────────────────────────────────── 


 Collinearity Statistics                              
 ──────────────────────────────────────────────────── 
                                  VIF     Tolerance   
 ──────────────────────────────────────────────────── 
   q01_gender                     1.02        0.984   
   q02_age                        1.19        0.840   
   q03_relationship_type          1.08        0.924   
   q04_children                   1.25        0.802   
   q18_02_soc_media               1.02        0.980   
   q20_public_info                1.01        0.991   
   q34_02_face_mask               1.03        0.971   
   q34_07_hand_washing            1.02        0.977   
   q36_econ_worry                 1.01        0.986   
   q40_smoking                    1.03        0.972   
   q42_sport                      1.02        0.981   
   q38_alcohol                    1.02        0.979   
   q35_01_contact_close_family    1.02        0.978   
   q35_03_contact_friends         1.02        0.983   
 ──────────────────────────────────────────────────── 


 MODEL 4

 Omnibus ANOVA Test                                                                             
 ────────────────────────────────────────────────────────────────────────────────────────────── 
                                  Sum of Squares    df      Mean Square    F           p        
 ────────────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                           250.5010       2       125.2505     73.6681    < .001   
   q02_age                              683.5154       1       683.5154    402.0204    < .001   
   q03_relationship_type                 36.5492       4         9.1373      5.3742    < .001   
   q04_children                           2.5845       1         2.5845      1.5201     0.218   
   q18_02_soc_media                      36.6038       1        36.6038     21.5291    < .001   
   q20_public_info                       76.5542       2        38.2771     22.5133    < .001   
   q34_02_face_mask                       0.0257       1         0.0257      0.0151     0.902   
   q34_07_hand_washing                   10.7997       1        10.7997      6.3520     0.012   
   q36_econ_worry                       366.1595       2       183.0797    107.6812    < .001   
   q40_smoking                            2.6140       1         2.6140      1.5375     0.215   
   q42_sport                              1.4776       1         1.4776      0.8690     0.351   
   q38_alcohol                           13.3845       1        13.3845      7.8723     0.005   
   q35_01_contact_close_family           80.7180       2        40.3590     23.7378    < .001   
   q35_03_contact_friends                20.4692       2        10.2346      6.0196     0.002   
   q47_self_reporting_health           1144.1397       4       286.0349    168.2360    < .001   
   q48_chronic_illness                    1.1393       1         1.1393      0.6701     0.413   
   q49_health_limitations                66.7325       2        33.3663     19.6249    < .001   
   Residuals                          12941.9291    7612         1.7002                         
 ────────────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                                     
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                         Estimate    SE         Lower      Upper       t          p         Stand. Estimate    Lower      Upper      
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept                    ᵃ     6.36415    0.24142     5.8909     6.83739     26.362    < .001                                             
   q01_gender:                                                                                                                                   
   male – female                     -0.45310    0.03741    -0.5264    -0.37976    -12.111    < .001           -0.30382    -0.3530     -0.2546   
   other – female                     0.42854    0.58586    -0.7199     1.57699      0.731     0.465            0.28735    -0.4827      1.0574   
   q02_age                           -0.02735    0.00136    -0.0300    -0.02468    -20.050    < .001           -0.24453    -0.2684     -0.2206   
   q03_relationship_type:                                                                                                                        
   relationship – single             -0.14746    0.04619    -0.2380    -0.05690     -3.192     0.001           -0.09888    -0.1596     -0.0382   
   married – single                  -0.06930    0.04894    -0.1652     0.02663     -1.416     0.157           -0.04647    -0.1108      0.0179   
   divorced – single                  0.11024    0.07023    -0.0274     0.24792      1.570     0.117            0.07392    -0.0184      0.1662   
   widowed – single                  -0.02409    0.13651    -0.2917     0.24352     -0.176     0.860           -0.01615    -0.1956      0.1633   
   q04_children:                                                                                                                                 
   yes – no                          -0.04687    0.03801    -0.1214     0.02765     -1.233     0.218           -0.03143    -0.0814      0.0185   
   q18_02_soc_media:                                                                                                                             
   no – yes                          -0.14764    0.03182    -0.2100    -0.08527     -4.640    < .001           -0.09900    -0.1408     -0.0572   
   q20_public_info:                                                                                                                              
   yes – no                          -0.21014    0.03310    -0.2750    -0.14526     -6.349    < .001           -0.14091    -0.1844     -0.0974   
   do_not_know – no                  -0.02047    0.05491    -0.1281     0.08718     -0.373     0.709           -0.01372    -0.0859      0.0585   
   q34_02_face_mask:                                                                                                                             
   yes – no                           0.00407    0.03310    -0.0608     0.06895      0.123     0.902            0.00273    -0.0408      0.0462   
   q34_07_hand_washing:                                                                                                                          
   yes – no                           0.22636    0.08981     0.0503     0.40242      2.520     0.012            0.15178     0.0337      0.2698   
   q36_econ_worry:                                                                                                                               
   serious – very_serious            -0.28713    0.03989    -0.3653    -0.20893     -7.198    < .001           -0.19253    -0.2450     -0.1401   
   limited – very_serious            -0.59292    0.04108    -0.6734    -0.51239    -14.434    < .001           -0.39758    -0.4516     -0.3436   
   q40_smoking:                                                                                                                                  
   no – yes                          -0.04532    0.03655    -0.1170     0.02633     -1.240     0.215           -0.03039    -0.0784      0.0177   
   q42_sport:                                                                                                                                    
   yes – no                           0.02873    0.03081    -0.0317     0.08913      0.932     0.351            0.01926    -0.0212      0.0598   
   q38_alcohol:                                                                                                                                  
   no – yes                          -0.09008    0.03211    -0.1530    -0.02714     -2.806     0.005           -0.06040    -0.1026     -0.0182   
   q35_01_contact_close_family:                                                                                                                  
   as_before – less_often            -0.18729    0.03281    -0.2516    -0.12298     -5.709    < .001           -0.12559    -0.1687     -0.0825   
   more_often – less_often            0.07432    0.04948    -0.0227     0.17132      1.502     0.133            0.04984    -0.0152      0.1149   
   q35_03_contact_friends:                                                                                                                       
   as_before – less_often            -0.25137    0.07289    -0.3943    -0.10850     -3.449    < .001           -0.16856    -0.2644     -0.0728   
   more_often – less_often            0.04463    0.16879    -0.2862     0.37550      0.264     0.791            0.02993    -0.1919      0.2518   
   q47_self_reporting_health:                                                                                                                    
   excellent – very_bad              -2.14982    0.22440    -2.5897    -1.70994     -9.580    < .001           -1.44154    -1.7365     -1.1466   
   good – very_bad                   -1.60660    0.22207    -2.0419    -1.17129     -7.235    < .001           -1.07730    -1.3692     -0.7854   
   neutral – very_bad                -1.00010    0.22224    -1.4358    -0.56444     -4.500    < .001           -0.67061    -0.9627     -0.3785   
   bad – very_bad                    -0.44890    0.22843    -0.8967    -0.00112     -1.965     0.049           -0.30101    -0.6013    -7.53e-4   
   q48_chronic_illness:                                                                                                                          
   no – yes                           0.03105    0.03793    -0.0433     0.10539      0.819     0.413            0.02082    -0.0290      0.0707   
   q49_health_limitations:                                                                                                                       
   partially_limits – limits         -0.27710    0.07033    -0.4150    -0.13923     -3.940    < .001           -0.18581    -0.2783     -0.0934   
   no_limits – limits                -0.41416    0.06857    -0.5486    -0.27975     -6.040    < .001           -0.27771    -0.3678     -0.1876   
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation       
 ──────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p       
 ──────────────────────────────────────────── 
            0.0261            1.95    0.020   
 ──────────────────────────────────────────── 


 Collinearity Statistics                              
 ──────────────────────────────────────────────────── 
                                  VIF     Tolerance   
 ──────────────────────────────────────────────────── 
   q01_gender                     1.02        0.982   
   q02_age                        1.22        0.820   
   q03_relationship_type          1.08        0.924   
   q04_children                   1.25        0.799   
   q18_02_soc_media               1.02        0.979   
   q20_public_info                1.01        0.990   
   q34_02_face_mask               1.03        0.966   
   q34_07_hand_washing            1.02        0.976   
   q36_econ_worry                 1.02        0.983   
   q40_smoking                    1.03        0.970   
   q42_sport                      1.03        0.969   
   q38_alcohol                    1.02        0.976   
   q35_01_contact_close_family    1.02        0.978   
   q35_03_contact_friends         1.02        0.982   
   q47_self_reporting_health      1.05        0.951   
   q48_chronic_illness            1.19        0.838   
   q49_health_limitations         1.12        0.897   
 ──────────────────────────────────────────────────── 
linreg_stepwise2 <- jmv::linReg(
    data = data,
    dep = "PHQ8_t",
    covs = "q02_age",
    factors = vars("q01_gender",
                   "q03_relationship_type",
                   "q04_children", 
                   "q18_02_soc_media", 
                   "q20_public_info",
                   "q34_02_face_mask",
                   "q36_econ_worry",
                   "q38_alcohol", 
                   "q40_smoking", 
                   "q47_self_reporting_health", 
                   "q48_chronic_illness",
                   "q49_health_limitations"),
    blocks = list(
        list(
            "q01_gender",
            "q02_age",
            "q04_children",
            "q36_econ_worry",
            "q18_02_soc_media",
            "q47_self_reporting_health",
            "q49_health_limitations"),
          list(
            "q03_relationship_type",
            "q20_public_info",
            "q34_02_face_mask",
            "q38_alcohol",
            "q40_smoking",
            "q48_chronic_illness")),
    refLevels = list(
        list(
            var = "q01_gender",
            ref = "female"),
        list(
            var = "q04_children",
            ref = "no"),
         list(
            var = "q20_public_info",
            ref = "no"),
        list(
            var = "q34_02_face_mask",
            ref = "no"),
        list(
            var = "q36_econ_worry",
            ref = "very_serious"),
        list(
            var = "q40_smoking",
            ref = "yes"),
        list(
            var = "q38_alcohol",
            ref = "yes"),
        list(
            var = "q18_02_soc_media",
            ref = "yes"),
        list(
            var = "q03_relationship_type",
            ref = "single"),
        list(
            var = "q47_self_reporting_health",
            ref = "very_bad"),
        list(
            var = "q49_health_limitations",
            ref = "limits"),
        list(
            var = "q48_chronic_illness",
            ref = "yes")),
    r2Adj = TRUE,
    aic = TRUE,
    bic = TRUE,
    rmse = TRUE,
    modelTest = TRUE,
    anova = TRUE,
    ci = TRUE,
    stdEst = TRUE,
    ciStdEst = TRUE,
    durbin = TRUE,
    collin = TRUE)

1.3.2 Stepwise model performance

1.3.2.1 Stepwise model fit measures

linreg_stepwise2$modelFit

 Model Fit Measures                                                                                   
 ──────────────────────────────────────────────────────────────────────────────────────────────────── 
   Model    R        R²       Adjusted R²    AIC      BIC      RMSE    F      df1    df2     p        
 ──────────────────────────────────────────────────────────────────────────────────────────────────── 
       1    0.472    0.223          0.222    26085    26190    1.31    170     13    7684    < .001   
       2    0.481    0.231          0.229    26027    26200    1.31    100     23    7674    < .001   
 ──────────────────────────────────────────────────────────────────────────────────────────────────── 

1.3.2.2 Stepwise model comparisons

linreg_stepwise2$modelComp                  

 Model Comparisons                                                   
 ─────────────────────────────────────────────────────────────────── 
   Model         Model    ΔR²        F       df1    df2     p        
 ─────────────────────────────────────────────────────────────────── 
       1    -        2    0.00791    7.90     10    7674    < .001   
 ─────────────────────────────────────────────────────────────────── 

1.3.2.3 Stepwise model specific results

linreg_stepwise2$models             

 MODEL SPECIFIC RESULTS

 MODEL 1

 Omnibus ANOVA Test                                                                         
 ────────────────────────────────────────────────────────────────────────────────────────── 
                                Sum of Squares    df      Mean Square    F         p        
 ────────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                           282.57       2         141.29     81.63    < .001   
   q02_age                              838.16       1         838.16    484.24    < .001   
   q04_children                           8.79       1           8.79      5.08     0.024   
   q36_econ_worry                       451.29       2         225.65    130.36    < .001   
   q18_02_soc_media                      38.98       1          38.98     22.52    < .001   
   q47_self_reporting_health           1273.34       4         318.34    183.91    < .001   
   q49_health_limitations                69.10       2          34.55     19.96    < .001   
   Residuals                          13300.19    7684           1.73                       
 ────────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                                   
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                       Estimate    SE         Lower      Upper       t          p         Stand. Estimate    Lower      Upper      
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept                  ᵃ      6.3406    0.22475     5.9000     6.78116     28.212    < .001                                             
   q01_gender:                                                                                                                                 
   male – female                    -0.4706    0.03696    -0.5430    -0.39813    -12.733    < .001            -0.3155    -0.3641    -0.26696   
   other – female                    0.5513    0.59053    -0.6063     1.70894      0.934     0.351             0.3697    -0.4065     1.14591   
   q02_age                          -0.0268    0.00122    -0.0292    -0.02445    -22.005    < .001            -0.2404    -0.2618    -0.21896   
   q04_children:                                                                                                                               
   yes – no                         -0.0738    0.03276    -0.1381    -0.00962     -2.254     0.024            -0.0495    -0.0926    -0.00645   
   q36_econ_worry:                                                                                                                             
   serious – very_serious           -0.3098    0.03985    -0.3879    -0.23169     -7.774    < .001            -0.2077    -0.2601    -0.15536   
   limited – very_serious           -0.6423    0.04050    -0.7217    -0.56289    -15.860    < .001            -0.4307    -0.4839    -0.37744   
   q18_02_soc_media:                                                                                                                           
   no – yes                         -0.1510    0.03182    -0.2134    -0.08863     -4.745    < .001            -0.1013    -0.1431    -0.05943   
   q47_self_reporting_health:                                                                                                                  
   excellent – very_bad             -2.1832    0.22508    -2.6244    -1.74199     -9.700    < .001            -1.4639    -1.7598    -1.16807   
   good – very_bad                  -1.6334    0.22307    -2.0707    -1.19617     -7.323    < .001            -1.0953    -1.3885    -0.80208   
   neutral – very_bad               -1.0295    0.22358    -1.4678    -0.59121     -4.605    < .001            -0.6903    -0.9842    -0.39643   
   bad – very_bad                   -0.4859    0.22983    -0.9364    -0.03538     -2.114     0.035            -0.3258    -0.6279    -0.02372   
   q49_health_limitations:                                                                                                                     
   partially_limits – limits        -0.2810    0.07025    -0.4187    -0.14330     -4.000    < .001            -0.1884    -0.2808    -0.09609   
   no_limits – limits               -0.4063    0.06722    -0.5380    -0.27449     -6.044    < .001            -0.2724    -0.3608    -0.18406   
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation       
 ──────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p       
 ──────────────────────────────────────────── 
            0.0289            1.94    0.004   
 ──────────────────────────────────────────── 


 Collinearity Statistics                            
 ────────────────────────────────────────────────── 
                                VIF     Tolerance   
 ────────────────────────────────────────────────── 
   q01_gender                   1.01        0.991   
   q02_age                      1.09        0.921   
   q04_children                 1.07        0.932   
   q36_econ_worry               1.01        0.994   
   q18_02_soc_media             1.02        0.984   
   q47_self_reporting_health    1.04        0.965   
   q49_health_limitations       1.07        0.932   
 ────────────────────────────────────────────────── 


 MODEL 2

 Omnibus ANOVA Test                                                                          
 ─────────────────────────────────────────────────────────────────────────────────────────── 
                                Sum of Squares    df      Mean Square    F          p        
 ─────────────────────────────────────────────────────────────────────────────────────────── 
   q01_gender                          284.252       2        142.126     82.848    < .001   
   q02_age                             686.861       1        686.861    400.386    < .001   
   q04_children                          4.143       1          4.143      2.415     0.120   
   q36_econ_worry                      399.464       2        199.732    116.428    < .001   
   q18_02_soc_media                     31.564       1         31.564     18.400    < .001   
   q47_self_reporting_health          1181.145       4        295.286    172.129    < .001   
   q49_health_limitations               66.702       2         33.351     19.441    < .001   
   q03_relationship_type                42.350       4         10.587      6.172    < .001   
   q20_public_info                      77.084       2         38.542     22.467    < .001   
   q34_02_face_mask                      1.246       1          1.246      0.726     0.394   
   q38_alcohol                          17.978       1         17.978     10.480     0.001   
   q40_smoking                           0.704       1          0.704      0.410     0.522   
   q48_chronic_illness                   0.923       1          0.923      0.538     0.463   
   Residuals                         13164.721    7674          1.715                        
 ─────────────────────────────────────────────────────────────────────────────────────────── 
   Note. Type 3 sum of squares


 Model Coefficients - PHQ8_t                                                                                                                   
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Predictor                       Estimate    SE         Lower       Upper      t          p         Stand. Estimate    Lower       Upper     
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Intercept                  ᵃ      6.4542    0.22777     6.00775     6.9007     28.337    < .001                                             
   q01_gender:                                                                                                                                 
   male – female                    -0.4747    0.03700    -0.54729    -0.4022    -12.830    < .001            -0.3183    -0.36698    -0.2697   
   other – female                    0.5557    0.58825    -0.59746     1.7088      0.945     0.345             0.3726    -0.40062     1.1458   
   q02_age                          -0.0268    0.00134    -0.02941    -0.0242    -20.010    < .001            -0.2400    -0.26346    -0.2164   
   q04_children:                                                                                                                               
   yes – no                         -0.0588    0.03782    -0.13292     0.0154     -1.554     0.120            -0.0394    -0.08913     0.0103   
   q36_econ_worry:                                                                                                                             
   serious – very_serious           -0.2970    0.03974    -0.37491    -0.2191     -7.475    < .001            -0.1992    -0.25139    -0.1469   
   limited – very_serious           -0.6136    0.04085    -0.69363    -0.5335    -15.019    < .001            -0.4114    -0.46511    -0.3577   
   q18_02_soc_media:                                                                                                                           
   no – yes                         -0.1365    0.03182    -0.19887    -0.0741     -4.289    < .001            -0.0915    -0.13335    -0.0497   
   q47_self_reporting_health:                                                                                                                  
   excellent – very_bad             -2.1392    0.22501    -2.58024    -1.6981     -9.507    < .001            -1.4344    -1.73015    -1.1386   
   good – very_bad                  -1.5847    0.22272    -2.02129    -1.1481     -7.115    < .001            -1.0626    -1.35536    -0.7699   
   neutral – very_bad               -0.9846    0.22292    -1.42160    -0.5476     -4.417    < .001            -0.6602    -0.95324    -0.3672   
   bad – very_bad                   -0.4319    0.22906    -0.88091     0.0171     -1.885     0.059            -0.2896    -0.59069     0.0115   
   q49_health_limitations:                                                                                                                     
   partially_limits – limits        -0.2769    0.07011    -0.41431    -0.1394     -3.949    < .001            -0.1857    -0.27781    -0.0935   
   no_limits – limits               -0.4119    0.06836    -0.54592    -0.2779     -6.025    < .001            -0.2762    -0.36606    -0.1863   
   q03_relationship_type:                                                                                                                      
   relationship – single            -0.1507    0.04606    -0.24096    -0.0604     -3.271     0.001            -0.1010    -0.16157    -0.0405   
   married – single                 -0.0633    0.04878    -0.15888     0.0324     -1.297     0.195            -0.0424    -0.10654     0.0217   
   divorced – single                 0.1300    0.07002    -0.00727     0.2673      1.856     0.063             0.0872    -0.00488     0.1792   
   widowed – single                  0.0150    0.13537    -0.25034     0.2804      0.111     0.912             0.0101    -0.16786     0.1880   
   q20_public_info:                                                                                                                            
   yes – no                         -0.2100    0.03310    -0.27487    -0.1451     -6.344    < .001            -0.1408    -0.18431    -0.0973   
   do_not_know – no                 -0.0204    0.05500    -0.12818     0.0875     -0.370     0.711            -0.0137    -0.08595     0.0586   
   q34_02_face_mask:                                                                                                                           
   yes – no                          0.0280    0.03287    -0.03642     0.0924      0.852     0.394             0.0188    -0.02442     0.0620   
   q38_alcohol:                                                                                                                                
   no – yes                         -0.1035    0.03196    -0.16613    -0.0408     -3.237     0.001            -0.0694    -0.11140    -0.0274   
   q40_smoking:                                                                                                                                
   no – yes                         -0.0232    0.03627    -0.09434     0.0479     -0.641     0.522            -0.0156    -0.06326     0.0321   
   q48_chronic_illness:                                                                                                                        
   no – yes                          0.0278    0.03793    -0.04653     0.1022      0.734     0.463             0.0187    -0.03120     0.0685   
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   ᵃ Represents reference level


 ASSUMPTION CHECKS

 Durbin–Watson Test for Autocorrelation       
 ──────────────────────────────────────────── 
   Autocorrelation    DW Statistic    p       
 ──────────────────────────────────────────── 
            0.0288            1.94    0.014   
 ──────────────────────────────────────────── 


 Collinearity Statistics                            
 ────────────────────────────────────────────────── 
                                VIF     Tolerance   
 ────────────────────────────────────────────────── 
   q01_gender                   1.01        0.988   
   q02_age                      1.20        0.835   
   q04_children                 1.24        0.804   
   q36_econ_worry               1.01        0.986   
   q18_02_soc_media             1.02        0.980   
   q47_self_reporting_health    1.05        0.955   
   q49_health_limitations       1.11        0.898   
   q03_relationship_type        1.08        0.925   
   q20_public_info              1.01        0.990   
   q34_02_face_mask             1.03        0.975   
   q38_alcohol                  1.02        0.980   
   q40_smoking                  1.02        0.979   
   q48_chronic_illness          1.19        0.839   
 ────────────────────────────────────────────────── 

1.4 Creation of the Covid-19 concern index, step 3: Reliability Analysis of the index items

Secondly, we conduct a Reliability Analysis of the Covid-19 concern factor. We use a cutoff value of 0.7 for both McDonald’s Omega and Cronbach’s Alpha. The scale passes this cutoff and the statistics would not be improved if any of the items were dropped.

# To conduct the reliability analysis, we use the reliability() function from the 
#  jmv package on the "test" data set (as opposed to the "train" dataset used for EFA).

jmv::reliability(
    data = data,
    vars = vars("q30_concern_infection_covid", 
                "q31_concern_infection_friends", 
                "q33_01_concern_situation", 
                "q33_02_concern_low_control", 
                "q33_03_concern_survival_covid", 
                "q33_05_concern_infecting_others"),
    omegaScale = TRUE,
    alphaItems = TRUE,
    omegaItems = TRUE)

 RELIABILITY ANALYSIS

 Scale Reliability Statistics              
 ───────────────────────────────────────── 
            Cronbach's α    McDonald's ω   
 ───────────────────────────────────────── 
   scale           0.801           0.815   
 ───────────────────────────────────────── 


 Item Reliability Statistics                                         
 ─────────────────────────────────────────────────────────────────── 
                                      Cronbach's α    McDonald's ω   
 ─────────────────────────────────────────────────────────────────── 
   q30_concern_infection_covid               0.738           0.750   
   q31_concern_infection_friends             0.751           0.768   
   q33_01_concern_situation                  0.745           0.766   
   q33_02_concern_low_control                0.820           0.833   
   q33_03_concern_survival_covid             0.763           0.784   
   q33_05_concern_infecting_others           0.794           0.811   
 ─────────────────────────────────────────────────────────────────── 

1.5 Creation of the Covid-19 concern index, step 4: Confirmatory Factor Analysis of the index items

# To conduct the CFA, we use the cfa() function from the jmv package on the "test" 
# data set (as opposed to the "train" dataset used for EFA).

jmv::cfa(
    data = data,
    factors = list(
        list(
            label = "Concern",
            vars = c("q30_concern_infection_covid",
                     "q31_concern_infection_friends",
                     "q33_01_concern_situation",
                     "q33_02_concern_low_control",
                     "q33_03_concern_survival_covid",
                     "q33_05_concern_infecting_others"))),
    resCov = list(),
    ci = TRUE,
    stdEst = TRUE,
    factCovEst = FALSE,
    fitMeasures = c("cfi", "tli", "rmsea", "srmr"),
    corRes = TRUE)

 CONFIRMATORY FACTOR ANALYSIS

 Factor Loadings                                                                                                             
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Factor     Indicator                          Estimate    SE        Lower    Upper    Z       p         Stand. Estimate   
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   Concern    q30_concern_infection_covid           2.270    0.0255    2.220    2.321    88.9    < .001              0.862   
              q31_concern_infection_friends         1.862    0.0256    1.812    1.912    72.6    < .001              0.755   
              q33_01_concern_situation              2.059    0.0282    2.004    2.114    72.9    < .001              0.746   
              q33_02_concern_low_control            0.855    0.0317    0.793    0.917    26.9    < .001              0.319   
              q33_03_concern_survival_covid         1.847    0.0291    1.790    1.904    63.4    < .001              0.672   
              q33_05_concern_infecting_others       1.419    0.0352    1.350    1.488    40.3    < .001              0.467   
 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 


 MODEL FIT

 Test for Exact Fit       
 ──────────────────────── 
   χ²      df    p        
 ──────────────────────── 
   1194     9    < .001   
 ──────────────────────── 


 Fit Measures                                            
 ─────────────────────────────────────────────────────── 
   CFI      TLI      SRMR      RMSEA    Lower    Upper   
 ─────────────────────────────────────────────────────── 
   0.926    0.877    0.0432    0.129    0.122    0.135   
 ─────────────────────────────────────────────────────── 


 POST-HOC MODEL PERFORMANCE

 Residuals for Observed Correlation Matrix                                                                                                                                                                                         
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
                                      q30_concern_infection_covid    q31_concern_infection_friends    q33_01_concern_situation    q33_02_concern_low_control    q33_03_concern_survival_covid    q33_05_concern_infecting_others   
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
   q30_concern_infection_covid                                                               0.017                      -0.007                        -0.055                            0.036                             -0.073   
   q31_concern_infection_friends                                                                                        -0.007                        -0.041                           -0.078                              0.103   
   q33_01_concern_situation                                                                                                                            0.058                           -0.003                              0.027   
   q33_02_concern_low_control                                                                                                                                                           0.064                              0.116   
   q33_03_concern_survival_covid                                                                                                                                                                                          -0.012   
   q33_05_concern_infecting_others                                                                                                                                                                                                 
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
# Creating the Covid-19-related concern/anxiety index, consisting of the average of 
# the values of the multiple variables selected through factor analysis to
# represent the underlying construct.

concern_index <- apply(cbind(data$q30_concern_infection_covid,
                             data$q31_concern_infection_friends,
                             data$q33_01_concern_situation,
                             data$q33_02_concern_low_control,
                             data$q33_03_concern_survival_covid,
                             data$q33_05_concern_infecting_others), 1, mean)

#Adding the vector as an column to the existing dataset.

data <- cbind(data, concern_index)
data_corr <- cbind(data_corr, concern_index)


#To summarize the concern_index variable, we use the descriptives() 
# function from the jmv package.

anx_index_descriptives <- jmv::descriptives(data = data,
                                            missing = TRUE,
                                            vars = "concern_index",
                                            sd = TRUE,
                                            median = FALSE,
                                            pc = TRUE,
                                            range = TRUE,
                                            box = TRUE)

# Function to get the result from the correlation matrix into a data frame
flattenCorrMatrix <- function(cormat, pmat) {
  ut <- upper.tri(cormat)
  data.frame(
    row = rownames(cormat)[row(cormat)[ut]],
    column = rownames(cormat)[col(cormat)[ut]],
    cor = (cormat)[ut],
    p = pmat[ut]
    )
}

#Correlation matrix using Spearman coefficient 
corr_mtx <- rcorr(as.matrix(data_corr), type = "spearman")
 
# Selecting only significant correlates for PHQ8 (values with p>0.05 are excluded)
flattenCorrMatrix(corr_mtx$r, corr_mtx$P) %>% filter(p <= 0.05,
                                                     column %in% c("PHQ8_t")) %>% 
                                              arrange(desc(abs(cor)))
                         row column     cor               p
1  q47_self_reporting_health PHQ8_t  0.3090 0.0000000000000
2                    q02_age PHQ8_t -0.2162 0.0000000000000
3             q36_econ_worry PHQ8_t -0.2121 0.0000000000000
4     q49_health_limitations PHQ8_t -0.1651 0.0000000000000
5                 q01_gender PHQ8_t  0.1460 0.0000000000000
6            q20_public_info PHQ8_t  0.1340 0.0000000000000
7           q18_02_soc_media PHQ8_t  0.1123 0.0000000000000
8      q03_relationship_type PHQ8_t -0.0998 0.0000000000000
9        q48_chronic_illness PHQ8_t -0.0949 0.0000000000000
10              q04_children PHQ8_t  0.0783 0.0000000000044
11                 q42_sport PHQ8_t  0.0630 0.0000000256406
12             q11_education PHQ8_t -0.0546 0.0000383164221
13               q40_smoking PHQ8_t -0.0536 0.0000021447198
14    q35_03_contact_friends PHQ8_t -0.0392 0.0005412876720
15          q34_02_face_mask PHQ8_t -0.0337 0.0029777622136
# Selecting only significant correlates for concern index (values with p>0.05 are excluded)
flattenCorrMatrix(corr_mtx$r, corr_mtx$P) %>% filter(p <= 0.05,
                                                     column %in% c("concern_index")) %>% 
                                              arrange(desc(abs(cor)))
                           row        column     cor                   p
1                       PHQ8_t concern_index  0.3296 0.00000000000000000
2    q47_self_reporting_health concern_index  0.2600 0.00000000000000000
3                   q01_gender concern_index  0.1922 0.00000000000000000
4       q49_health_limitations concern_index -0.1483 0.00000000000000000
5          q34_07_hand_washing concern_index -0.1483 0.00000000000000000
6          q48_chronic_illness concern_index -0.1410 0.00000000000000000
7              q20_public_info concern_index  0.1237 0.00000000000000000
8       q35_03_contact_friends concern_index -0.1215 0.00000000000000000
9               q36_econ_worry concern_index -0.1131 0.00000000000000000
10            q34_02_face_mask concern_index -0.0911 0.00000000000000488
11                   q42_sport concern_index  0.0770 0.00000000003795764
12               q11_education concern_index  0.0684 0.00000057803401488
13                 q38_alcohol concern_index  0.0548 0.00000255020021722
14                q04_children concern_index -0.0520 0.00000783470995414
15            q18_02_soc_media concern_index  0.0454 0.00009800170357166
16 q35_01_contact_close_family concern_index -0.0453 0.00010456661621516
17       q03_relationship_type concern_index  0.0296 0.01110354779772171

1.5.1 Covid-19 concern index results

1.5.1.1 Plots

data %>%
  filter(concern_index != "NA") %>% 
  ggplot(aes(y = concern_index)) +
         geom_boxplot(fill = "#4DBBD5CC") +
         theme_bw() +
         scale_y_continuous(breaks = seq(0, 10, 1), 
                            labels = seq(0, 10, 1), 
                            limits = c(0, 10)) +
         theme(legend.position = "none", 
               axis.title.x = element_blank(),
               axis.text.x = element_blank(), 
               axis.ticks.x = element_blank(), 
               axis.line.x = element_blank(), 
               panel.grid.major.x = element_blank(), 
               panel.grid.minor = element_blank()) + 
         ylab("Concern Index")

data %>% 
   filter(concern_index != "NA") %>% 
   ggplot(aes(x = concern_index)) +
        geom_density(fill = "#4DBBD5CC") +
        scale_x_continuous(breaks = seq(0, 10, 1), 
                           labels = seq(0, 10, 1), 
                           limits = c(0, 10)) +
         theme_bw() +
         theme(legend.position = "none") + 
         xlab("Concern Index")

1.5.1.2 Descriptives

anx_index_descriptives$descriptives 

 Descriptives                            
 ─────────────────────────────────────── 
                         concern_index   
 ─────────────────────────────────────── 
   N                              7371   
   Missing                         620   
   Mean                           5.47   
   Standard deviation             1.92   
   Range                          9.00   
   Minimum                        1.00   
   Maximum                        10.0   
   25th percentile                4.17   
   50th percentile                5.50   
   75th percentile                6.83   
 ─────────────────────────────────────── 

2 Path analysis with a simplified model

2.1 Moderated mediation model diagrams and pre-processing

# Before running the model, we need to transform the social media string 
# dummy (yes/no) back to its numeric form, with similar operation for gender.

levels(data$q18_02_soc_media) <- list("1" = "yes", "0" = "no")
levels(data$q01_gender) <- list("0" = "male", "1" = "female", "2" = "other")
data$q01_gender <- as.numeric(as.character(data$q01_gender))
data$q18_02_soc_media <- as.numeric(as.character(data$q18_02_soc_media))

# Centering continuous variables with scaling
data_sem <- data %>% 
            filter(q01_gender != 2, !is.na(concern_index)) %>% 
            mutate(concern_index.c = scale(concern_index, scale = TRUE),
                   PHQ8.c = scale(PHQ8_t, scale = TRUE),
                   q02_age.c = scale(q02_age, scale = TRUE))

# Labels for diagrams
labels_H76 <- list(X = "Social Media", 
                   M = "Concern", 
                   Y = "Depression", 
                   W = "Age", 
                   Z = "Gender")

2.1.1 Path analysis model structure

2.1.1.1 Conceptual diagram

pmacroModel(no = 76,
            labels = labels_H76,
            xmargin = 0,
            rady = 0.047,
            radx = 0.09,
            ylim = c(0.15, 0.8))

2.1.1.2 Statistical diagram with path names

statisticalDiagram(no = 76,
                   labels = labels_H76,
                   whatLabel = "name",
                   xmargin = 0.01,
                   rady = 0.03,
                   radx = 0.11,
                   ylim = c(0.06, 0.95),
                   xlim = c(0.01, 1))

2.2 Moderated mediation model specification and results

In the second step, we specify the key pathways and run the analysis, while bootstrapping the confidence intervals.

# Mediation-moderation analysis (path analysis framework, SEM) using lavaan package.

# First, we specify the model pathways
spec_mod <- "
# Regressions
concern_index.c ~ a1*q18_02_soc_media + a2*q02_age.c + a3*q01_gender + a4*q18_02_soc_media:q02_age.c + a5*q18_02_soc_media:q01_gender

PHQ8.c ~ c1*q18_02_soc_media + c2*q02_age.c + c3*q01_gender + c4*q18_02_soc_media:q02_age.c + c5*q18_02_soc_media:q01_gender + b1*concern_index.c + b2*concern_index.c:q02_age.c + b3*concern_index.c:q01_gender

#Mean and variance of age and gender moderators
q02_age.c ~ q02_age.c.mean*1
q02_age.c ~~ q02_age.c.var*q02_age.c
q01_gender ~ q01_gender.mean*1
q01_gender ~~ q01_gender.var*q01_gender

# Effect specifications
XonM := a1 + a4*q02_age.c.mean + a5*q01_gender.mean
MonY := b1 + b2*q02_age.c.mean + b3*q01_gender.mean
indirect := (a1 + a4*q02_age.c.mean + a5*q01_gender.mean)*(b1 + b2*q02_age.c.mean + b3*q01_gender.mean)
direct := c1 + c4*q02_age.c.mean + c5*q01_gender.mean
total := direct + indirect
prop.mediated := indirect / total

# Component effects conditional on moderators (X = Social Media, M = Concern, Y = Depression, W = Age, Z = Gender)
XonM.mean.male := a1 + a4*q02_age.c.mean + a5*0
XonM.mean.female := a1 + a4*q02_age.c.mean + a5*1

XonM.blw.male := a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*0
XonM.blw.female := a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*1
XonM.blw.avg := a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*q01_gender.mean

XonM.abv.male := a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*0
XonM.abv.female := a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*1
XonM.abv.avg := a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*q01_gender.mean

MonY.mean.male := b1 + b2*q02_age.c.mean + b3*0
MonY.mean.female := b1 + b2*q02_age.c.mean + b3*1

MonY.blw.male := b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*0
MonY.blw.female := b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*1
MonY.blw.avg := b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*q01_gender.mean

MonY.abv.male := b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*0
MonY.abv.female := b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*1
MonY.abv.avg := b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*q01_gender.mean

# Indirect effects conditional on moderators
indirect.mean.male := (a1 + a4*q02_age.c.mean + a5*0)*(b1 + b2*q02_age.c.mean + b3*0)
indirect.mean.female := (a1 + a4*q02_age.c.mean + a5*1)*(b1 + b2*q02_age.c.mean + b3*1)

indirect.blw.male := (a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*0)*(b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*0)
indirect.blw.female := (a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*1)*(b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*1)
indirect.blw.avg := (a1 + a4*(q02_age.c.mean - sqrt(q02_age.c.var)) + a5*q01_gender.mean)*(b1 + b2*(q02_age.c.mean - sqrt(q02_age.c.var)) + b3*q01_gender.mean)

indirect.abv.male := (a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*0)*(b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*0)
indirect.abv.female := (a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*1)*(b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*1)
indirect.abv.avg := (a1 + a4*(q02_age.c.mean + sqrt(q02_age.c.var)) + a5*q01_gender.mean)*(b1 + b2*(q02_age.c.mean + sqrt(q02_age.c.var)) + b3*q01_gender.mean)

# Direct effects conditional on moderators
direct.mean.male := c1 + c4*q02_age.c.mean + c5*0
direct.mean.female := c1 + c4*q02_age.c.mean + c5*1

direct.blw.male := c1 + c4*(q02_age.c.mean - sqrt(q02_age.c.var)) + c5*0
direct.blw.female := c1 + c4*(q02_age.c.mean - sqrt(q02_age.c.var)) + c5*1
direct.blw.avg := c1 + c4*(q02_age.c.mean - sqrt(q02_age.c.var)) + c5*q01_gender.mean

direct.abv.male := c1 + c4*(q02_age.c.mean + sqrt(q02_age.c.var)) + c5*0
direct.abv.female := c1 + c4*(q02_age.c.mean + sqrt(q02_age.c.var)) + c5*1
direct.abv.avg := c1 + c4*(q02_age.c.mean + sqrt(q02_age.c.var)) + c5*q01_gender.mean

# Total effects conditional on moderators
total.mean.male := direct.mean.male + indirect.mean.male
total.mean.female := direct.mean.female + indirect.mean.female

total.blw.male := direct.blw.male + indirect.blw.male
total.blw.female := direct.blw.female + indirect.blw.female
total.blw.avg := direct.blw.avg + indirect.blw.avg

total.abv.male := direct.abv.male + indirect.abv.male
total.abv.female := direct.abv.female + indirect.abv.female
total.abv.avg := direct.abv.avg + indirect.abv.avg

# Proportion mediated conditional on moderators
prop.med.mean.male := indirect.mean.male / total.mean.male
prop.med.mean.female := indirect.mean.female / total.mean.female

prop.med.blw.male := indirect.blw.male / total.blw.male
prop.med.blw.female := indirect.blw.female / total.blw.female
prop.med.blw.avg := indirect.blw.avg / total.blw.avg

prop.med.abv.male := indirect.abv.male / total.abv.male
prop.med.abv.female := indirect.abv.female / total.abv.male
prop.med.abv.avg := indirect.abv.avg / total.abv.avg"

# For reproducibility of results (using bootstrap)
set.seed(2021)

# Secondly, we fit/estimate the model and we use bootstrap for robustness.
fit_mod <- lavaan::sem(model = spec_mod,
               data = data_sem,
               se = "bootstrap",
               bootstrap = 1000)

# Labels for statistical diagrams
labels_stats_H76 <- list(X = "q18_02_soc_media",
                         M = "concern_index.c",
                         Y = "PHQ8.c",
                         W = "q02_age.c",
                         Z = "q01_gender")

2.2.1 Path analysis model summary, estimates and statistical diagram

2.2.1.1 Diagram with unstandardized coefficients

statisticalDiagram(no = 76,
                   labels = labels_stats_H76,
                   fit = fit_mod,
                   whatLabel = "est",
                   xmargin = 0.01,
                   rady = 0.03,
                   radx = 0.158,
                   ylim = c(0.06, 0.95),
                   xlim = c(0.01, 1))

2.2.1.2 Diagram with standardized coefficients

statisticalDiagram(no = 76,
                   labels = labels_stats_H76,
                   fit = fit_mod,
                   whatLabel = "std",
                   xmargin = 0.01,
                   rady = 0.03,
                   radx = 0.158,
                   ylim = c(0.06, 0.95),
                   xlim = c(0.01, 1))

2.2.1.3 Detailed model summary

lavaan::summary(fit_mod, 
                rsquare = TRUE, 
                ci = TRUE,
                fit.measures = TRUE,
                standardize = TRUE)
lavaan 0.6-9 ended normally after 44 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        21
                                                      
                                                  Used       Total
  Number of observations                          7239        7365
                                                                  
Model Test User Model:
                                                       
  Test statistic                              18410.525
  Degrees of freedom                                 13
  P-value (Chi-square)                            0.000

Model Test Baseline Model:

  Test statistic                             20100.115
  Degrees of freedom                                26
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.084
  Tucker-Lewis Index (TLI)                      -0.833

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -33838.618
  Loglikelihood unrestricted model (H1)     -24633.356
                                                      
  Akaike (AIC)                               67719.236
  Bayesian (BIC)                             67863.868
  Sample-size adjusted Bayesian (BIC)        67797.135

Root Mean Square Error of Approximation:

  RMSEA                                          0.442
  90 Percent confidence interval - lower         0.437
  90 Percent confidence interval - upper         0.448
  P-value RMSEA <= 0.05                          0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.162

Parameter Estimates:

  Standard errors                            Bootstrap
  Number of requested bootstrap draws             1000
  Number of successful bootstrap draws            1000

Regressions:
                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
  concern_index.c ~                                                      
    q18_02_s_ (a1)    -0.027    0.050   -0.552    0.581   -0.128    0.070
    q02_age.c (a2)     0.010    0.014    0.708    0.479   -0.017    0.038
    q01_gendr (a3)     0.397    0.032   12.448    0.000    0.332    0.457
    q18_02__: (a4)     0.023    0.026    0.879    0.379   -0.030    0.072
    q18_02__: (a5)     0.160    0.056    2.865    0.004    0.051    0.269
  PHQ8.c ~                                                               
    q18_02_s_ (c1)     0.145    0.050    2.883    0.004    0.046    0.240
    q02_age.c (c2)    -0.204    0.014  -14.813    0.000   -0.230   -0.176
    q01_gendr (c3)     0.201    0.033    6.152    0.000    0.136    0.269
    q18_02__: (c4)    -0.032    0.024   -1.341    0.180   -0.079    0.018
    q18_02__: (c5)    -0.024    0.056   -0.424    0.671   -0.135    0.090
    cncrn_nd. (b1)     0.328    0.026   12.525    0.000    0.275    0.377
    cn_.:02_. (b2)     0.026    0.012    2.226    0.026    0.003    0.047
    cnc_.:01_ (b3)    -0.009    0.029   -0.326    0.745   -0.065    0.045
   Std.lv  Std.all
                  
   -0.027   -0.013
    0.010    0.010
    0.397    0.166
    0.023    0.014
    0.160    0.072
                  
    0.145    0.070
   -0.204   -0.204
    0.201    0.083
   -0.032   -0.019
   -0.024   -0.011
    0.328    0.327
    0.026    0.026
   -0.009   -0.008

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
    q02_g.c (q02_)   -0.001    0.012   -0.049    0.961   -0.023    0.023
    q01_gnd (q01_)    0.780    0.005  156.255    0.000    0.769    0.789
   .cncrn_.          -0.341    0.028  -12.069    0.000   -0.395   -0.283
   .PHQ8.c           -0.204    0.029   -7.162    0.000   -0.264   -0.147
   Std.lv  Std.all
   -0.001   -0.001
    0.780    1.880
   -0.341   -0.343
   -0.204   -0.205

Variances:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
    q02_g.c (q02_)    0.997    0.015   67.692    0.000    0.969    1.026
    q01_gnd (q01_)    0.172    0.003   61.727    0.000    0.167    0.177
   .cncrn_.           0.956    0.014   69.225    0.000    0.928    0.981
   .PHQ8.c            0.824    0.012   66.280    0.000    0.799    0.848
   Std.lv  Std.all
    0.997    1.000
    0.172    1.000
    0.956    0.969
    0.824    0.830

R-Square:
                   Estimate
    concern_indx.c    0.031
    PHQ8.c            0.170

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
    XonM              0.097    0.025    3.825    0.000    0.047    0.148
    MonY              0.321    0.012   27.188    0.000    0.298    0.344
    indirect          0.031    0.008    3.782    0.000    0.015    0.048
    direct            0.126    0.022    5.620    0.000    0.083    0.173
    total             0.157    0.024    6.608    0.000    0.110    0.205
    prop.mediated     0.198    0.052    3.792    0.000    0.101    0.310
    XonM.mean.male   -0.027    0.050   -0.552    0.581   -0.128    0.069
    XonM.mean.feml    0.132    0.029    4.634    0.000    0.076    0.187
    XonM.blw.male    -0.050    0.051   -0.977    0.329   -0.152    0.050
    XonM.blw.femal    0.109    0.035    3.159    0.002    0.039    0.177
    XonM.blw.avg      0.074    0.031    2.366    0.018    0.011    0.137
    XonM.abv.male    -0.005    0.060   -0.077    0.939   -0.130    0.110
    XonM.abv.femal    0.155    0.042    3.678    0.000    0.071    0.234
    XonM.abv.avg      0.120    0.041    2.949    0.003    0.040    0.196
    MonY.mean.male    0.328    0.026   12.518    0.000    0.275    0.377
    MonY.mean.feml    0.319    0.013   24.703    0.000    0.294    0.344
    MonY.blw.male     0.302    0.029   10.451    0.000    0.247    0.356
    MonY.blw.femal    0.293    0.018   16.526    0.000    0.258    0.326
    MonY.blw.avg      0.295    0.017   17.410    0.000    0.263    0.327
    MonY.abv.male     0.354    0.029   12.423    0.000    0.298    0.410
    MonY.abv.femal    0.345    0.017   20.128    0.000    0.311    0.380
    MonY.abv.avg      0.347    0.016   21.269    0.000    0.314    0.378
    indirect.mn.ml   -0.009    0.016   -0.552    0.581   -0.041    0.023
    indirct.mn.fml    0.042    0.009    4.542    0.000    0.024    0.060
    indirct.blw.ml   -0.015    0.016   -0.969    0.333   -0.046    0.016
    indrct.blw.fml    0.032    0.010    3.071    0.002    0.011    0.053
    indirct.blw.vg    0.022    0.009    2.330    0.020    0.003    0.041
    indirect.bv.ml   -0.002    0.021   -0.077    0.939   -0.043    0.040
    indirct.bv.fml    0.053    0.015    3.642    0.000    0.024    0.081
    indirect.bv.vg    0.042    0.014    2.935    0.003    0.013    0.067
    direct.mean.ml    0.145    0.050    2.882    0.004    0.047    0.240
    direct.men.fml    0.121    0.025    4.820    0.000    0.073    0.173
    direct.blw.mal    0.177    0.053    3.343    0.001    0.072    0.281
    direct.blw.fml    0.153    0.033    4.643    0.000    0.087    0.213
    direct.blw.avg    0.158    0.030    5.213    0.000    0.095    0.217
    direct.abv.mal    0.113    0.058    1.931    0.053    0.002    0.225
    direct.abv.fml    0.089    0.036    2.438    0.015    0.020    0.163
    direct.abv.avg    0.094    0.035    2.670    0.008    0.027    0.165
    total.mean.mal    0.136    0.054    2.535    0.011    0.035    0.241
    total.mean.fml    0.163    0.027    6.132    0.000    0.111    0.216
    total.blw.male    0.162    0.056    2.887    0.004    0.057    0.270
    total.blw.feml    0.185    0.035    5.360    0.000    0.114    0.248
    total.blw.avg     0.180    0.032    5.656    0.000    0.114    0.241
    total.abv.male    0.111    0.063    1.770    0.077   -0.005    0.231
    total.abv.feml    0.142    0.039    3.652    0.000    0.064    0.222
    total.abv.avg     0.136    0.038    3.600    0.000    0.065    0.213
    prop.med.mn.ml   -0.066    1.150   -0.058    0.954   -0.640    0.156
    prop.md.mn.fml    0.258    0.061    4.247    0.000    0.146    0.389
    prop.md.blw.ml   -0.094    0.484   -0.194    0.846   -0.505    0.091
    prp.md.blw.fml    0.173    0.060    2.878    0.004    0.070    0.312
    prop.md.blw.vg    0.121    0.053    2.303    0.021    0.020    0.238
    prop.med.bv.ml   -0.015    1.938   -0.008    0.994   -1.877    0.558
    prop.md.bv.fml    0.482    3.956    0.122    0.903   -1.201    4.940
    prop.med.bv.vg    0.307    0.134    2.281    0.023    0.105    0.630
   Std.lv  Std.all
    0.097    0.123
    0.321    0.312
    0.031    0.038
    0.126    0.049
    0.157    0.088
    0.198    0.437
   -0.027   -0.013
    0.132    0.059
   -0.050   -0.027
    0.109    0.046
    0.074    0.109
   -0.005    0.000
    0.155    0.073
    0.120    0.136
    0.328    0.327
    0.319    0.319
    0.302    0.301
    0.293    0.293
    0.295    0.285
    0.354    0.353
    0.345    0.345
    0.347    0.338
   -0.009   -0.004
    0.042    0.019
   -0.015   -0.008
    0.032    0.013
    0.022    0.031
   -0.002    0.000
    0.053    0.025
    0.042    0.046
    0.145    0.070
    0.121    0.059
    0.177    0.089
    0.153    0.078
    0.158    0.068
    0.113    0.051
    0.089    0.040
    0.094    0.030
    0.136    0.065
    0.163    0.078
    0.162    0.081
    0.185    0.091
    0.180    0.100
    0.111    0.051
    0.142    0.065
    0.136    0.076
   -0.066   -0.066
    0.258    0.243
   -0.094   -0.100
    0.173    0.146
    0.121    0.313
   -0.015    0.002
    0.482    0.495
    0.307    0.603

2.2.1.4 Table of model estimates

estimates <- parameterEstimates(fit_mod, standardized = TRUE) %>% 
                    filter(op == "~") %>% 
                    select(-c(std.nox))

p_adj <- p.adjust(estimates$pvalue, method = "holm")

estimates <- cbind(estimates, p_adj)

kbl(estimates) %>%
kable_classic(full_width = FALSE, lightable_options = c("striped")) %>%
                    row_spec(row = which(estimates$p_adj < 0.05), bold = TRUE)
lhs op rhs label est se z pvalue ci.lower ci.upper std.lv std.all p_adj
concern_index.c ~ q18_02_soc_media a1 -0.027 0.050 -0.552 0.581 -0.128 0.070 -0.027 -0.013 1.000
concern_index.c ~ q02_age.c a2 0.010 0.014 0.708 0.479 -0.017 0.038 0.010 0.010 1.000
concern_index.c ~ q01_gender a3 0.397 0.032 12.448 0.000 0.332 0.457 0.397 0.166 0.000
concern_index.c ~ q18_02_soc_media:q02_age.c a4 0.023 0.026 0.879 0.379 -0.030 0.072 0.023 0.014 1.000
concern_index.c ~ q18_02_soc_media:q01_gender a5 0.160 0.056 2.865 0.004 0.051 0.269 0.160 0.072 0.035
PHQ8.c ~ q18_02_soc_media c1 0.145 0.050 2.883 0.004 0.046 0.240 0.145 0.070 0.035
PHQ8.c ~ q02_age.c c2 -0.204 0.014 -14.813 0.000 -0.230 -0.176 -0.204 -0.204 0.000
PHQ8.c ~ q01_gender c3 0.201 0.033 6.152 0.000 0.136 0.269 0.201 0.083 0.000
PHQ8.c ~ q18_02_soc_media:q02_age.c c4 -0.032 0.024 -1.341 0.180 -0.079 0.018 -0.032 -0.019 1.000
PHQ8.c ~ q18_02_soc_media:q01_gender c5 -0.024 0.056 -0.424 0.671 -0.135 0.090 -0.024 -0.011 1.000
PHQ8.c ~ concern_index.c b1 0.328 0.026 12.525 0.000 0.275 0.377 0.328 0.327 0.000
PHQ8.c ~ concern_index.c:q02_age.c b2 0.026 0.012 2.226 0.026 0.003 0.047 0.026 0.026 0.182
PHQ8.c ~ concern_index.c:q01_gender b3 -0.009 0.029 -0.326 0.745 -0.065 0.045 -0.009 -0.008 1.000

2.2.1.5 Table of defined parameters

parameters <- parameterEstimates(fit_mod, standardized = TRUE) %>% 
                    filter(op == ":=") %>% 
                    select(-c(op, lhs, rhs, std.nox))

p_adj <- p.adjust(parameters$pvalue, method = "holm")

parameters <- cbind(parameters, p_adj)

kbl(parameters) %>%
kable_classic(full_width = FALSE, lightable_options = c("striped")) %>%
                    row_spec(row = which(parameters$p_adj < 0.05), bold = TRUE)
label est se z pvalue ci.lower ci.upper std.lv std.all p_adj
XonM 0.097 0.025 3.825 0.000 0.047 0.148 0.097 0.123 0.004
MonY 0.321 0.012 27.188 0.000 0.298 0.344 0.321 0.312 0.000
indirect 0.031 0.008 3.782 0.000 0.015 0.048 0.031 0.038 0.005
direct 0.126 0.022 5.620 0.000 0.083 0.173 0.126 0.049 0.000
total 0.157 0.024 6.608 0.000 0.110 0.205 0.157 0.088 0.000
prop.mediated 0.198 0.052 3.792 0.000 0.101 0.310 0.198 0.437 0.005
XonM.mean.male -0.027 0.050 -0.552 0.581 -0.128 0.069 -0.027 -0.013 1.000
XonM.mean.female 0.132 0.029 4.634 0.000 0.076 0.187 0.132 0.059 0.000
XonM.blw.male -0.050 0.051 -0.977 0.329 -0.152 0.050 -0.050 -0.027 1.000
XonM.blw.female 0.109 0.035 3.159 0.002 0.039 0.177 0.109 0.046 0.041
XonM.blw.avg 0.074 0.031 2.366 0.018 0.011 0.137 0.074 0.109 0.288
XonM.abv.male -0.005 0.060 -0.077 0.939 -0.130 0.110 -0.005 0.000 1.000
XonM.abv.female 0.155 0.042 3.678 0.000 0.071 0.234 0.155 0.073 0.007
XonM.abv.avg 0.120 0.041 2.949 0.003 0.040 0.196 0.120 0.136 0.076
MonY.mean.male 0.328 0.026 12.518 0.000 0.275 0.377 0.328 0.327 0.000
MonY.mean.female 0.319 0.013 24.703 0.000 0.294 0.344 0.319 0.319 0.000
MonY.blw.male 0.302 0.029 10.451 0.000 0.247 0.356 0.302 0.301 0.000
MonY.blw.female 0.293 0.018 16.526 0.000 0.258 0.326 0.293 0.293 0.000
MonY.blw.avg 0.295 0.017 17.410 0.000 0.263 0.327 0.295 0.285 0.000
MonY.abv.male 0.354 0.029 12.423 0.000 0.298 0.410 0.354 0.353 0.000
MonY.abv.female 0.345 0.017 20.128 0.000 0.311 0.380 0.345 0.345 0.000
MonY.abv.avg 0.347 0.016 21.269 0.000 0.314 0.378 0.347 0.338 0.000
indirect.mean.male -0.009 0.016 -0.552 0.581 -0.041 0.023 -0.009 -0.004 1.000
indirect.mean.female 0.042 0.009 4.542 0.000 0.024 0.060 0.042 0.019 0.000
indirect.blw.male -0.015 0.016 -0.969 0.333 -0.046 0.016 -0.015 -0.008 1.000
indirect.blw.female 0.032 0.010 3.071 0.002 0.011 0.053 0.032 0.013 0.053
indirect.blw.avg 0.022 0.009 2.330 0.020 0.003 0.041 0.022 0.031 0.297
indirect.abv.male -0.002 0.021 -0.077 0.939 -0.043 0.040 -0.002 0.000 1.000
indirect.abv.female 0.053 0.015 3.642 0.000 0.024 0.081 0.053 0.025 0.008
indirect.abv.avg 0.042 0.014 2.935 0.003 0.013 0.067 0.042 0.046 0.077
direct.mean.male 0.145 0.050 2.882 0.004 0.047 0.240 0.145 0.070 0.085
direct.mean.female 0.121 0.025 4.820 0.000 0.073 0.173 0.121 0.059 0.000
direct.blw.male 0.177 0.053 3.343 0.001 0.072 0.281 0.177 0.089 0.022
direct.blw.female 0.153 0.033 4.643 0.000 0.087 0.213 0.153 0.078 0.000
direct.blw.avg 0.158 0.030 5.213 0.000 0.095 0.217 0.158 0.068 0.000
direct.abv.male 0.113 0.058 1.931 0.053 0.002 0.225 0.113 0.051 0.641
direct.abv.female 0.089 0.036 2.438 0.015 0.020 0.163 0.089 0.040 0.251
direct.abv.avg 0.094 0.035 2.670 0.008 0.027 0.165 0.094 0.030 0.144
total.mean.male 0.136 0.054 2.535 0.011 0.035 0.241 0.136 0.065 0.203
total.mean.female 0.163 0.027 6.132 0.000 0.111 0.216 0.163 0.078 0.000
total.blw.male 0.162 0.056 2.887 0.004 0.057 0.270 0.162 0.081 0.085
total.blw.female 0.185 0.035 5.360 0.000 0.114 0.248 0.185 0.091 0.000
total.blw.avg 0.180 0.032 5.656 0.000 0.114 0.241 0.180 0.100 0.000
total.abv.male 0.111 0.063 1.770 0.077 -0.005 0.231 0.111 0.051 0.844
total.abv.female 0.142 0.039 3.652 0.000 0.064 0.222 0.142 0.065 0.008
total.abv.avg 0.136 0.038 3.600 0.000 0.065 0.213 0.136 0.076 0.009
prop.med.mean.male -0.066 1.150 -0.058 0.954 -0.640 0.156 -0.066 -0.066 1.000
prop.med.mean.female 0.258 0.061 4.247 0.000 0.146 0.389 0.258 0.243 0.001
prop.med.blw.male -0.094 0.484 -0.194 0.846 -0.505 0.091 -0.094 -0.100 1.000
prop.med.blw.female 0.173 0.060 2.878 0.004 0.070 0.312 0.173 0.146 0.085
prop.med.blw.avg 0.121 0.053 2.303 0.021 0.020 0.238 0.121 0.313 0.298
prop.med.abv.male -0.015 1.938 -0.008 0.994 -1.877 0.558 -0.015 0.002 1.000
prop.med.abv.female 0.482 3.956 0.122 0.903 -1.201 4.940 0.482 0.495 1.000
prop.med.abv.avg 0.307 0.134 2.281 0.023 0.105 0.630 0.307 0.603 0.298

3 Clustering (K-Medoids)

We are conducting clustering with the K-Medoids algorithm to find distinct groups in our dataset. We are only using a subset of the dataset, which contains values that we used in the previous step within the path model - age, gender, social media, concern index and PHQ8. The reasoning is to supplement the insights from the path model, while also limiting ourselves only to the core variables, most of them showing relatively strong effects in the regression models.

data_scaled <- data %>% 
  select(q01_gender, q02_age, q18_02_soc_media, PHQ8, concern_index) %>% 
  na.omit() %>% 
  scale()


set.seed(2021)

pam3 <- pam(data_scaled, 3)

# res3 <- hcut(data_scaled, k = 3, stand = TRUE, method = "median")
# fviz_dend(res3, rect = TRUE, cex = 0.5,
#           k_colors = "simpsons")



# cluster_sum <- as_tibble(data_scaled) %>%
#   mutate(cluster = as_factor(pam3$clustering)) %>%
#   group_by(cluster) %>%
#   summarise_all("mean")

3.0.1 Clustering visualisations

3.0.1.1 Visualisation of the clusters

fviz_cluster(pam3, data = data_scaled, ellipse.type = "norm", palette = c("#E64B3599", "#4DBBD599", "#00A08799"), ggtheme = theme_bw(), main = "Cluster plot - K-Medoids algorithm")

3.0.1.2 Mean values of the distinct groups

data_scaled_df <- as_tibble(data_scaled)
data_scaled_df$cluster <- as_factor(pam3$clustering)
data_scaled_df_long <- data_scaled_df %>% pivot_longer(cols = q01_gender:concern_index, names_to = "variable", values_to = "value")

ggplot(data_scaled_df_long, aes(x = variable, y = value, group = cluster, colour = cluster)) + 
       stat_summary(fun = mean, geom = "pointrange", size = 1, aes(shape = cluster)) +
       stat_summary(geom = "line") +
       scale_color_manual(values = c("#E64B35CC", "#4DBBD5CC", "#00A087CC")) + 
       ggtitle("Average value of selected variables per cluster") + 
       theme_bw() +
       ylab("relative value")

LS0tCnRpdGxlOiAiUHJlZGljdG9ycyBvZiBEZXByZXNzaW9uIER1cmluZyB0aGUgQ292aWQtMTkgUGFuZGVtaWMiIApzdWJ0aXRsZTogIkludGVybmF0aW9uYWwgc2FtcGxlIHJlcG9ydCB2MC4xIgphdXRob3I6ICJTYXJrYSBUZXNhcm92YSwgT25kcmVqIFBla2FjZWssIEFsZXNzYW5kcm8gUG9ycm92ZWNjaGlvIgpkYXRlOiAiTGFzdCBlZGl0ZWQgYHIgZm9ybWF0IChTeXMudGltZSgpLCclZC4gJW0uICVZJylgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiAyCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgdGhlbWU6IHJlYWRhYmxlCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGluY2x1ZGVzOgogICAgICBpbl9oZWFkZXI6IGhlYWRlci5odG1sCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChvdXQud2lkdGggPSAiOTAlIiwgZWNobyA9IFRSVUUpCmBgYAoKYGBge2NzcywgZWNobz1GQUxTRX0KcHJlIGNvZGUsIHByZSwgY29kZSB7CiAgd2hpdGUtc3BhY2U6IHByZSAhaW1wb3J0YW50OwogIG92ZXJmbG93LXg6IHNjcm9sbCAhaW1wb3J0YW50OwogIHdvcmQtYnJlYWs6IGtlZXAtYWxsICFpbXBvcnRhbnQ7CiAgd29yZC13cmFwOiBpbml0aWFsICFpbXBvcnRhbnQ7CiAgbWF4LWhlaWdodDogNjAwcHg7CiAgb3ZlcmZsb3cteTogYXV0bzsKfQojVE9DIHsKICBmb250LXNpemU6IDEycHg7Cn0KaDEudGl0bGUgewogIGZvbnQtc2l6ZTogMjhweDsKfQpoMSB7CiAgZm9udC1zaXplOiAyM3B4Owp9CmgyIHsKICBmb250LXNpemU6IDE4cHg7Cn0KaDMgewogIGZvbnQtc2l6ZTogMTZweDsKfQpoNCB7CiAgZm9udC1zaXplOiAxMnB4Owp9Cmg0LmF1dGhvciB7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtc2l6ZTogMTZweDsKfQpoNC5kYXRlIHsKICBmb250LXNpemU6IDE2cHg7Cn0KYGBgCgojIEFuYWx5c2lzIG9mIHRoZSBpbnRlcm5hdGlvbmFsIHNhbXBsZQoKIyMgTG9hZGluZyB0aGUgZGF0YXNldCwgcmVxdWlyZWQgUiBwYWNrYWdlcyBhbmQgZGF0YSB3cmFuZ2xpbmcKCmBgYHtyIGxvYWRpbmcgcGFja2FnZXMgYW5kIGRhdGFzZXQsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBtaWdodCBuZWVkIHRvIGJlIGluc3RhbGxlZCBvbnRvIHlvdXIgdmVyc2lvbiAKIyBvZiBSIHByaW9yIHRvIHRoZSBydW5uaW5nIG9mIHRoZSBjb2RlIGJlbG93LgoKIyBQYWNrYWdlIG5hbWVzCnBhY2thZ2VzIDwtIGMoIk1BU1MiLCAibGF2YWFuIiwgInByb2Nlc3NSIiwgImNvcnJwbG90IiwgInRpZHl0ZXh0IiwgInRpZHl2ZXJzZSIsICJoYXZlbiIsICJqbXYiLCAiSG1pc2MiLCAiY2x1c3RlciIsICJrYWJsZUV4dHJhIiwgImZhY3RvZXh0cmEiKQoKIyBJbnN0YWxsIHBhY2thZ2VzIG5vdCB5ZXQgaW5zdGFsbGVkCmluc3RhbGxlZF9wYWNrYWdlcyA8LSBwYWNrYWdlcyAlaW4lIHJvd25hbWVzKGluc3RhbGxlZC5wYWNrYWdlcygpKQppZiAoYW55KGluc3RhbGxlZF9wYWNrYWdlcyA9PSBGQUxTRSkpIHsKICBpbnN0YWxsLnBhY2thZ2VzKHBhY2thZ2VzWyFpbnN0YWxsZWRfcGFja2FnZXNdKQp9CgojIFBhY2thZ2VzIGxvYWRpbmcKaW52aXNpYmxlKGxhcHBseShwYWNrYWdlcywgbGlicmFyeSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKSkKCiMgV2UgbG9hZCB0aGUgb3JpZ2luYWwgQ3plY2ggZGF0YXNldCAoaW4gU1BTUyBmb3JtYXQpIGZyb20gYSBsb2NhbCBkaXJlY3RvcnkuCmRhdGEgPC0gemFwX2xhYmVscyhoYXZlbjo6cmVhZF9zYXYoZmlsZSA9ICJJTlRFUk5BVElPTkFMIERBVEFTRVRfMTIgT2N0X2ZpbmFsLnNhdiIpKQoKIyBGb3IgdXNlIGluIGNvcnJlbGF0aW9uIGFuYWx5c2lzLCB3ZSBkdXBsaWNhdGUgdGhlIGRhdGFzZXQgdW5kZXIgbmFtZSBkYXRhX2NvcnIKZGF0YV9jb3JyIDwtIGRhdGEKCiMgV2UgYWxzbyB0cnkgdG8gbGltaXQgdGhlIGRlY2ltYWxzIHRvIHRocmVlIHNpZ25pZmljYW50IGZpZ3VyZXMKb3B0aW9ucyhkaWdpdHMgPSAzLCBzY2lwZW4gPSA5OTkpCgpgYGAKCmBgYHtyfQojIENhbGN1bGF0aW5nIFBIOAoKZGF0YSA8LSBkYXRhICU+JQogIG11dGF0ZShRNDlfMV9yZWMgPSByZWNvZGUoUTQ5XzEsCiAgICAgICAgICAgIGAxYCA9IDAsCiAgICAgICAgICAgIGAyYCA9IDEsCiAgICAgICAgICAgIGAzYCA9IDIsCiAgICAgICAgICAgIGA0YCA9IDMpLAogICAgICAgICBRNDlfMl9yZWMgPSByZWNvZGUoUTQ5XzIsCiAgICAgICAgICAgIGAxYCA9IDAsCiAgICAgICAgICAgIGAyYCA9IDEsCiAgICAgICAgICAgIGAzYCA9IDIsCiAgICAgICAgICAgIGA0YCA9IDMpLAogICAgICAgICBRNDlfM19yZWMgPSByZWNvZGUoUTQ5XzMsCiAgICAgICAgICAgIGAxYCA9IDAsCiAgICAgICAgICAgIGAyYCA9IDEsCiAgICAgICAgICAgIGAzYCA9IDIsCiAgICAgICAgICAgIGA0YCA9IDMpLAogICAgICAgICBRNDlfNF9yZWMgPSByZWNvZGUoUTQ5XzQsCiAgICAgICAgICAgIGAxYCA9IDAsCiAgICAgICAgICAgIGAyYCA9IDEsCiAgICAgICAgICAgIGAzYCA9IDIsCiAgICAgICAgICAgIGA0YCA9IDMpLAogICAgICAgICBRNDlfNV9yZWMgPSByZWNvZGUoUTQ5XzUsCiAgICAgICAgICAgIGAxYCA9IDAsCiAgICAgICAgICAgIGAyYCA9IDEsCiAgICAgICAgICAgIGAzYCA9IDIsCiAgICAgICAgICAgIGA0YCA9IDMpLAogICAgICAgICBRNDlfNl9yZWMgPSByZWNvZGUoUTQ5XzYsCiAgICAgICAgICAgIGAxYCA9IDAsCiAgICAgICAgICAgIGAyYCA9IDEsCiAgICAgICAgICAgIGAzYCA9IDIsCiAgICAgICAgICAgIGA0YCA9IDMpLAogICAgICAgICBRNDlfN19yZWMgPSByZWNvZGUoUTQ5XzcsCiAgICAgICAgICAgIGAxYCA9IDAsCiAgICAgICAgICAgIGAyYCA9IDEsCiAgICAgICAgICAgIGAzYCA9IDIsCiAgICAgICAgICAgIGA0YCA9IDMpLAogICAgICAgICBRNDlfOF9yZWMgPSByZWNvZGUoUTQ5XzgsCiAgICAgICAgICAgIGAxYCA9IDAsCiAgICAgICAgICAgIGAyYCA9IDEsCiAgICAgICAgICAgIGAzYCA9IDIsCiAgICAgICAgICAgIGA0YCA9IDMpLAogICAgICAgICBQSFE4ID0gUTQ5XzFfcmVjICsgUTQ5XzJfcmVjICsgUTQ5XzNfcmVjICsgUTQ5XzRfcmVjICsgUTQ5XzVfcmVjICsgUTQ5XzZfcmVjICsgUTQ5XzdfcmVjICsgUTQ5XzhfcmVjKQoKIyBSZW5hbWluZyB2YXJpYWJsZXMgdG8gaWRlbnRpY2FsIG9uZXMgYXMgYmVmb3JlCmRhdGFfZnVsbCA8LSBkYXRhICU+JSAKICB0cmFuc211dGUoY291bnRyeSA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKENvdW50cnkpLAogICAgICAgICAgICBgMWAgPSAiSVQiLAogICAgICAgICAgICBgMmAgPSAiRlIiLAogICAgICAgICAgICBgM2AgPSAiUEwiLAogICAgICAgICAgICBgNGAgPSAiVUsiLAogICAgICAgICAgICBgNWAgPSAiQ1oiLAogICAgICAgICAgICBgNmAgPSAiU1ciKSwKICAgICAgICAgICAgcTAxX2dlbmRlciA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKFEzKSwKICAgICAgICAgICAgYDFgID0gIm1hbGUiLAogICAgICAgICAgICBgMmAgPSAiZmVtYWxlIiwKICAgICAgICAgICAgYDNgID0gIm90aGVyIiksCiAgICAgICAgICAgIHEwMl9hZ2UgPSBRNCwKICAgICAgICAgICAgcTAyX2FnZV9ncm91cCA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKFE0X0FHRV9yKSwKICAgICAgICAgICAgYDFgID0gIjE2LTI5IHllYXJzIiwKICAgICAgICAgICAgYDJgID0gIjMwLTQ5IHllYXJzIiwKICAgICAgICAgICAgYDNgID0gIjUwLTY0IHllYXJzIiwKICAgICAgICAgICAgYDRgID0gIjY1KyIpLAogICAgICAgICAgICBxMDNfcmVsYXRpb25zaGlwX3R5cGUgPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihRNSksCiAgICAgICAgICAgIGAxYCA9ICJzaW5nbGUiLAogICAgICAgICAgICBgMmAgPSAicmVsYXRpb25zaGlwIiwKICAgICAgICAgICAgYDNgID0gIm1hcnJpZWQiLAogICAgICAgICAgICBgNGAgPSAiZGl2b3JjZWQiLAogICAgICAgICAgICBgNWAgPSAid2lkb3dlZCIpLAogICAgICAgICAgICBxMDRfY2hpbGRyZW4gPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihRNiksCiAgICAgICAgICAgIGAxYCA9ICJ5ZXMiLAogICAgICAgICAgICBgMmAgPSAibm8iKSwKICAgICAgICAgICAgcTExX2VkdWNhdGlvbiA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKFExM1IpLAogICAgICAgICAgICBgMWAgPSAibG93IiwKICAgICAgICAgICAgYDJgID0gIm1lZGl1bSIsCiAgICAgICAgICAgIGAzYCA9ICJoaWdoIiksCiAgICAgICAgICAgIHExOF8wMl9zb2NfbWVkaWEgPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihyZXBsYWNlX25hKFEyMV8yLCAwKSksCiAgICAgICAgICAgIGAwYCA9ICJubyIsCiAgICAgICAgICAgIGAxYCA9ICJ5ZXMiKSwKICAgICAgICAgICAgcTIwX3B1YmxpY19pbmZvID0gcmVjb2RlX2ZhY3Rvcihhc19mYWN0b3IoUTIzKSwKICAgICAgICAgICAgYDFgID0gInllcyIsCiAgICAgICAgICAgIGAyYCA9ICJubyIsCiAgICAgICAgICAgIGA5OWAgPSAiZG9fbm90X2tub3ciKSwKICAgICAgICAgICAgcTM0XzAyX2ZhY2VfbWFzayA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKFEzN18yKSwKICAgICAgICAgICAgYDFgID0gInllcyIsCiAgICAgICAgICAgIGAyYCA9ICJubyIpLAogICAgICAgICAgICBxMzRfMDdfaGFuZF93YXNoaW5nID0gcmVjb2RlX2ZhY3Rvcihhc19mYWN0b3IoUTM3XzcpLAogICAgICAgICAgICBgMWAgPSAieWVzIiwKICAgICAgICAgICAgYDJgID0gIm5vIiksCiAgICAgICAgICAgIHEzNV8wMV9jb250YWN0X2Nsb3NlX2ZhbWlseSA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKFEzOF8xKSwKICAgICAgICAgICAgYDFgID0gImxlc3Nfb2Z0ZW4iLAogICAgICAgICAgICBgMmAgPSAiYXNfYmVmb3JlIiwKICAgICAgICAgICAgYDNgID0gIm1vcmVfb2Z0ZW4iKSwKICAgICAgICAgICAgcTM1XzAzX2NvbnRhY3RfZnJpZW5kcyA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKFEzOF8zKSwKICAgICAgICAgICAgYDFgID0gImxlc3Nfb2Z0ZW4iLAogICAgICAgICAgICBgMmAgPSAiYXNfYmVmb3JlIiwKICAgICAgICAgICAgYDNgID0gIm1vcmVfb2Z0ZW4iKSwKICAgICAgICAgICAgcTM2X2Vjb25fd29ycnkgPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihRMzkpLAogICAgICAgICAgICBgMWAgPSAidmVyeV9zZXJpb3VzIiwKICAgICAgICAgICAgYDJgID0gInNlcmlvdXMiLAogICAgICAgICAgICBgM2AgPSAibGltaXRlZCIpLAogICAgICAgICAgICBxMzhfYWxjb2hvbCA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKFE0MiksCiAgICAgICAgICAgIGAxYCA9ICJ5ZXMiLAogICAgICAgICAgICBgMmAgPSAibm8iKSwKICAgICAgICAgICAgcTQwX3Ntb2tpbmcgPSByZWNvZGVfZmFjdG9yKGFzX2ZhY3RvcihRNDQpLAogICAgICAgICAgICBgMWAgPSAieWVzIiwKICAgICAgICAgICAgYDJgID0gIm5vIiksCiAgICAgICAgICAgIHE0Ml9zcG9ydCA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKFE0NiksCiAgICAgICAgICAgIGAxYCA9ICJ5ZXMiLAogICAgICAgICAgICBgMmAgPSAibm8iKSwKICAgICAgICAgICAgcTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aCA9IHJlY29kZV9mYWN0b3IoYXNfZmFjdG9yKFE1MCksCiAgICAgICAgICAgIGAxYCA9ICJleGNlbGxlbnQiLAogICAgICAgICAgICBgMmAgPSAiZ29vZCIsCiAgICAgICAgICAgIGAzYCA9ICJuZXV0cmFsIiwKICAgICAgICAgICAgYDRgID0gImJhZCIsCiAgICAgICAgICAgIGA1YCA9ICJ2ZXJ5X2JhZCIpLAogICAgICAgICAgICBxNDhfY2hyb25pY19pbGxuZXNzID0gcmVjb2RlX2ZhY3Rvcihhc19mYWN0b3IoUTUxKSwKICAgICAgICAgICAgYDFgID0gInllcyIsCiAgICAgICAgICAgIGAyYCA9ICJubyIpLAogICAgICAgICAgICBxNDlfaGVhbHRoX2xpbWl0YXRpb25zID0gcmVjb2RlX2ZhY3Rvcihhc19mYWN0b3IoUTUyKSwKICAgICAgICAgICAgYDFgID0gImxpbWl0cyIsCiAgICAgICAgICAgIGAyYCA9ICJwYXJ0aWFsbHlfbGltaXRzIiwKICAgICAgICAgICAgYDNgID0gIm5vX2xpbWl0cyIpLAogICAgICAgICAgICBxMzBfY29uY2Vybl9pbmZlY3Rpb25fY292aWQgPSBRMzMsCiAgICAgICAgICAgIHEzMV9jb25jZXJuX2luZmVjdGlvbl9mcmllbmRzID0gUTM0LAogICAgICAgICAgICBxMzNfMDFfY29uY2Vybl9zaXR1YXRpb24gPSBRMzZfMSwKICAgICAgICAgICAgcTMzXzAyX2NvbmNlcm5fbG93X2NvbnRyb2wgPSBRMzZfMiwKICAgICAgICAgICAgcTMzXzAzX2NvbmNlcm5fc3Vydml2YWxfY292aWQgPSBRMzZfMywKICAgICAgICAgICAgcTMzXzA0X2NvbmNlcm5fY2hhbmdlX2VtcGxveW1lbnQgPSBRMzZfNCwKICAgICAgICAgICAgcTMzXzA1X2NvbmNlcm5faW5mZWN0aW5nX290aGVycyA9IFEzNl81LAogICAgICAgICAgICBQSFE4ID0gUEhROCkgCgojIEZpbHRlcmluZyBvdXQgQ3plY2ggc2FtcGxlIGZvciBhbmFseXNlcwpkYXRhIDwtIGRhdGFfZnVsbCAlPiUKICAgICAgICBmaWx0ZXIoY291bnRyeSAhPSAiQ1oiKQoKYGBgCgojIyBEZXNjcmlwdGl2ZSBzdGF0aXN0aWNzCgojIyMgU2FtcGxlIGRlc2NyaXB0aXZlIHN0YXRpc3RpY3Mgey50YWJzZXQgLnRhYnNldC1waWxsc30KCiMjIyMgUG9wdWxhdGlvbiBweXJhbWlkIG9mIHRoZSBmdWxsIHNhbXBsZQoKYGBge3J9CmRhdGFfZnVsbFtkYXRhX2Z1bGwkY291bnRyeSAlaW4lIGMoIklUIiwgIkZSIiwgIlBMIikgJiAhaXMubmEoZGF0YV9mdWxsJHEwMl9hZ2UpLF0gJT4lCiAgZ2dwbG90KGFlcyh4ID0gcTAyX2FnZSwgCiAgICAgICAgICAgICBmaWxsID0gcTAxX2dlbmRlcikpICsgCiAgZ2VvbV9iYXIoZGF0YSA9IGRhdGFfZnVsbFtkYXRhX2Z1bGwkY291bnRyeSAlaW4lIGMoIklUIiwgIkZSIiwgIlBMIikgJiBkYXRhX2Z1bGwkcTAxX2dlbmRlciA9PSAiZmVtYWxlIiAmICFpcy5uYShkYXRhX2Z1bGwkcTAyX2FnZSksXSkgKyAKICBnZW9tX2JhcihkYXRhID0gZGF0YV9mdWxsW2RhdGFfZnVsbCRjb3VudHJ5ICVpbiUgYygiSVQiLCAiRlIiLCAiUEwiKSAmIGRhdGFfZnVsbCRxMDFfZ2VuZGVyID09ICJtYWxlIiAmICFpcy5uYShkYXRhX2Z1bGwkcTAyX2FnZSksXSwgCiAgICAgICAgICAgYWVzKHkgPSAuLmNvdW50Li4qKC0xKSkpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMjUwLCAyNTAsIDUwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGFicyhzZXEoLTI1MCwgMjUwLCA1MCkpLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMTAwLCAxMDApKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTUsIDEwMCwgNSksIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBzZXEoMTUsIDEwMCwgNSksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDE1LCAxMDApKSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpICsKICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKGNvdW50cnkpKSArIAogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNFNjRCMzVDQyIsICIjMDBBMDg3Q0MiKSkgKwogIHhsYWIoIkFnZSIpICsKICB5bGFiKCJDb3VudCIpCgpkYXRhX2Z1bGxbZGF0YV9mdWxsJGNvdW50cnkgJWluJSBjKCJVSyIsICJDWiIsICJTVyIpICYgIWlzLm5hKGRhdGFfZnVsbCRxMDJfYWdlKSxdICAlPiUKICBnZ3Bsb3QoYWVzKHggPSBxMDJfYWdlLCAKICAgICAgICAgICAgIGZpbGwgPSBxMDFfZ2VuZGVyKSkgKyAKICBnZW9tX2JhcihkYXRhID0gZGF0YV9mdWxsW2RhdGFfZnVsbCRjb3VudHJ5ICVpbiUgYygiVUsiLCAiQ1oiLCAiU1ciKSAmIGRhdGFfZnVsbCRxMDFfZ2VuZGVyID09ICJmZW1hbGUiICYgIWlzLm5hKGRhdGFfZnVsbCRxMDJfYWdlKSxdKSArIAogIGdlb21fYmFyKGRhdGEgPSBkYXRhX2Z1bGxbZGF0YV9mdWxsJGNvdW50cnkgJWluJSBjKCJVSyIsICJDWiIsICJTVyIpICYgZGF0YV9mdWxsJHEwMV9nZW5kZXIgPT0gIm1hbGUiICYgIWlzLm5hKGRhdGFfZnVsbCRxMDJfYWdlKSxdLCAKICAgICAgICAgICBhZXMoeSA9IC4uY291bnQuLiooLTEpKSkgKyAKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0yNTAsIDI1MCwgNTApLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYWJzKHNlcSgtMjUwLCAyNTAsIDUwKSksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0xMDAsIDEwMCkpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgxNSwgMTAwLCA1KSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNlcSgxNSwgMTAwLCA1KSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMTUsIDEwMCkpICsKICBjb29yZF9mbGlwKCkgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoY291bnRyeSkpICsgCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI0U2NEIzNUNDIiwgIiMwMEEwODdDQyIpKSArCiAgeGxhYigiQWdlIikgKwogIHlsYWIoIkNvdW50IikKCmBgYAoKIyMjIyBEZXNjcmlwdGl2ZXMgb2YgRGVwcmVzc2lvbiBpbmRleCAoUEhROCkKCmBgYHtyLCBjb21tZW50ID0gIiJ9CiMgVG8gc3VtbWFyaXplIHRoZSBkZXBlbmRlbnQgY29udGludW91cyB2YXJpYWJsZSwgd2UgdXNlIHRoZSBkZXNjcmlwdGl2ZXMoKSAKIyBmdW5jdGlvbiBmcm9tIHRoZSBqbXYgcGFja2FnZS4KCmRlc2NyaXB0aXZlcyA8LSBqbXY6OmRlc2NyaXB0aXZlcygKICAgIGRhdGEgPSBkYXRhLAogICAgdmFycyA9ICJQSFE4IiwKICAgIGZyZXEgPSBUUlVFLAogICAgYm94ID0gVFJVRSwKICAgIG1lZGlhbiA9IEZBTFNFLAogICAgcmFuZ2UgPSBUUlVFLAogICAgc2QgPSBUUlVFLAogICAgcGMgPSBUUlVFKQoKZGVzY3JpcHRpdmVzJGRlc2NyaXB0aXZlcwpgYGAKCiMjIyMgUGxvdHMgb2YgRGVwcmVzc2lvbiBpbmRleCAoUEhROCkKCmBgYHtyLCBjb21tZW50ID0gIiJ9CmRhdGEgJT4lCiAgZmlsdGVyKFBIUTggIT0gIk5BIikgJT4lIAogIGdncGxvdChhZXMoeSA9IFBIUTgpKSArCiAgICAgICAgIGdlb21fYm94cGxvdChmaWxsID0gIiM0REJCRDVDQyIpICsKICAgICAgICAgdGhlbWVfYncoKSArCiAgICAgICAgIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMjQsIDEpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNlcSgwLCAyNCwgMSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCAyNCkpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCAKICAgICAgICAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgICAgICAgIGF4aXMubGluZS54ID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSkKCmRhdGEgJT4lIAogIGZpbHRlcihQSFE4ICE9ICJOQSIpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBhc19mYWN0b3IoUEhROCkpKSArCiAgICAgICAgIGdlb21fYmFyKGZpbGwgPSAiIzREQkJENUNDIikgKwogICAgICAgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDcwMCwgNTApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNlcSgwLCA3MDAsIDUwKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDAsIDcwMCkpICsKICAgICAgICAgdGhlbWVfYncoKSArCiAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogICAgICAgICB4bGFiKCJQSFE4IikKCmBgYAoKIyMjIyBEZXNjcmlwdGl2ZXMgb2YgZGVtb2dyYXBoaWMgdmFyaWFibGVzCgpgYGB7ciBzYW1wbGUgZGVtb2dyYXBoeSBkZXNjcmlwdGl2ZXN9CiMgVG8gc3VtbWFyaXplIHRoZSBrZXkgZGVtb2dyYXBoaWMgdmFyaWFibGVzLCB3ZSB1c2UgdGhlIGRlc2NyaXB0aXZlcygpIAojIGZ1bmN0aW9uIGZyb20gdGhlIGptdiBwYWNrYWdlLgoKZGVtb19kZXNjcmlwdGl2ZXMgPC0gam12OjpkZXNjcmlwdGl2ZXMoCiAgICBkYXRhID0gZGF0YSwKICAgIHZhcnMgPSB2YXJzKCJxMDFfZ2VuZGVyIiwKICAgICAgICAgICAgICAgICJxMDJfYWdlX2dyb3VwIiwKICAgICAgICAgICAgICAgICJxMDNfcmVsYXRpb25zaGlwX3R5cGUiLAogICAgICAgICAgICAgICAgInEwNF9jaGlsZHJlbiIsCiAgICAgICAgICAgICAgICAicTExX2VkdWNhdGlvbiIpLAogICAgYmFyID0gVFJVRSwKICAgIGZyZXEgPSBUUlVFLAogICAgbWlzc2luZyA9IEZBTFNFLAogICAgbWVhbiA9IEZBTFNFLAogICAgbWVkaWFuID0gRkFMU0UsCiAgICBzZCA9IEZBTFNFLAogICAgbWluID0gRkFMU0UsCiAgICBtYXggPSBGQUxTRSkKCmRlbW9fZGVzY3JpcHRpdmVzJGZyZXF1ZW5jaWVzCQoKYGBgCgojIyMjIFBsb3RzIG9mIGRlbW9ncmFwaGljIHZhcmlhYmxlcwoKYGBge3IsIGNvbW1lbnQgPSAiIn0KZGF0YSAlPiUgCiAgZmlsdGVyKHEwMV9nZW5kZXIgJWluJSBjKCJtYWxlIiwgImZlbWFsZSIpLCAKICAgICAgICAgcTAyX2FnZV9ncm91cCAhPSAiTkEiKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgZ2VvbV9iYXIoYWVzKGZpbGwgPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDM1MDAsIDUwMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2VxKDAsIDM1MDAsIDUwMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCAzNTAwKSkgKwogICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCkpICsKICAgICAgICAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhxMDJfYWdlX2dyb3VwKSkgKwogICAgICAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJmZW1hbGUiID0gIiNFNjRCMzVDQyIsICJtYWxlIiA9ICIjMDBBMDg3Q0MiKSkKCmRhdGEgJT4lIAogIGZpbHRlcihxMDFfZ2VuZGVyICVpbiUgYygibWFsZSIsICJmZW1hbGUiKSwgCiAgICAgICAgIHEwM19yZWxhdGlvbnNoaXBfdHlwZSAhPSAiTkEiKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgZ2VvbV9iYXIoYWVzKGZpbGwgPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDI1MDAsIDI1MCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2VxKDAsIDI1MDAsIDI1MCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCAyNTAwKSkgKwogICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCkpICsKICAgICAgICAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhxMDNfcmVsYXRpb25zaGlwX3R5cGUpLCAKICAgICAgICAgICAgICAgICAgICByb3dzID0gdmFycyhxMDRfY2hpbGRyZW4pKSArCiAgICAgICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImZlbWFsZSIgPSAiI0U2NEIzNUNDIiwgIm1hbGUiID0gIiMwMEEwODdDQyIpKQoKZGF0YSAlPiUgCiAgZmlsdGVyKHEwMV9nZW5kZXIgJWluJSBjKCJtYWxlIiwgImZlbWFsZSIpLCAKICAgICAgICAgcTExX2VkdWNhdGlvbiAhPSAiTkEiLCAKICAgICAgICAgcTAyX2FnZV9ncm91cCAhPSAiTkEiKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgZ2VvbV9iYXIoYWVzKGZpbGwgPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDE2MDAsIDI1MCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2VxKDAsIDE2MDAsIDI1MCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCAxNjAwKSkgKwogICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCkpICsKICAgICAgICAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhxMTFfZWR1Y2F0aW9uKSwgCiAgICAgICAgICAgICAgICAgICAgcm93cyA9IHZhcnMocTAyX2FnZV9ncm91cCkpICsKICAgICAgICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiZmVtYWxlIiA9ICIjRTY0QjM1Q0MiLCAibWFsZSIgPSAiIzAwQTA4N0NDIikpCgpgYGAKCgojIyMgRGVzY3JpcHRpdmVzIG9mIFBIUTggYW5kIGRpc3RpbmN0IGdyb3VwcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKIyMjIyBEZXByZXNzaW9uIGJ5IGdlbmRlciBhZ2UgYW5kIG90aGVyIGRlbW9ncmFwaGljcwpgYGB7cn0KZGF0YV9mdWxsICU+JQogIGZpbHRlcihxMDFfZ2VuZGVyICE9ICJvdGhlciIsIAogICAgICAgICBQSFE4ICE9ICJOQSIpICU+JSAKICBnZ3Bsb3QoYWVzKHkgPSBQSFE4LCAKICAgICAgICAgICAgIHggPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICBnZW9tX2JveHBsb3QobmEucm0gPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgIGFlcyhjb2xvciA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIHRoZW1lX2J3KCkgKwogICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSkgKwogICAgICAgICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKGNvdW50cnkpKSArCiAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJmZW1hbGUiID0gIiNFNjRCMzVDQyIsICJtYWxlIiA9ICIjMDBBMDg3Q0MiKSkgKwogICAgICAgICBnZ3RpdGxlKCJDb3VudHJpZXMiKSAKCmRhdGEgJT4lIAogIGZpbHRlcihxMDFfZ2VuZGVyICE9ICJvdGhlciIsIAogICAgICAgICBxMDJfYWdlX2dyb3VwICE9ICJOQSIsCiAgICAgICAgIFBIUTggIT0gIk5BIikgJT4lIAogIGdncGxvdChhZXMoeSA9IFBIUTgsIAogICAgICAgICAgICAgeCA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIGdlb21fYm94cGxvdChhZXMoY29sb3IgPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCkpICsKICAgICAgICAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhxMDJfYWdlX2dyb3VwKSkgKyAKICAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImZlbWFsZSIgPSAiI0U2NEIzNUNDIiwgIm1hbGUiID0gIiMwMEEwODdDQyIpKSArCiAgICAgICAgIGdndGl0bGUoIkFnZSBncm91cHMiKQoKIyBGb3IgcmVwcm9kdWNpYmlsaXR5IG9mIHJlc3VsdHMKc2V0LnNlZWQoMjAyMSkKCmRhdGEgJT4lIAogIGZpbHRlcihxMDFfZ2VuZGVyICE9ICJvdGhlciIsCiAgICAgICAgIHEwMl9hZ2VfZ3JvdXAgIT0gIk5BIiwKICAgICAgICAgUEhROCAhPSAiTkEiKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gcTAyX2FnZSwgCiAgICAgICAgICAgICB5ID0gUEhROCkpICsKICAgICAgICAgZ2VvbV9qaXR0ZXIobmEucm0JPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDEsIAogICAgICAgICAgICAgICAgICAgICBhbHBoYSA9IDAuMSkgKwogICAgICAgICBzdGF0X3Ntb290aChtZXRob2QgPSAiZ2FtIiwgCiAgICAgICAgICAgICAgICAgICAgIGZvcm11bGEgPSB5IH4geCwgCiAgICAgICAgICAgICAgICAgICAgIG5hLnJtCT0gVFJVRSwgCiAgICAgICAgICAgICAgICAgICAgIGFlcyhjb2xvciA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIHRoZW1lX2J3KCkgKwogICAgICAgICB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpICsKICAgICAgICAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMTYsIDkyKSwgCiAgICAgICAgIGJyZWFrcyA9IHNlcShmcm9tID0gMTYsIAogICAgICAgICAgICAgICAgICAgICAgdG8gPSA5MiwgCiAgICAgICAgICAgICAgICAgICAgICBieSA9IDgpKSArIAogICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZmVtYWxlIiA9ICIjRTY0QjM1Q0MiLCAibWFsZSIgPSAiIzAwQTA4N0NDIikpICsKICAgICAgICAgeGxhYigiQWdlIikgKyAKICAgICAgICAgZ2d0aXRsZSgiQWdlIGdyb3VwcyIpCgpkYXRhICU+JSAKICBmaWx0ZXIocTAxX2dlbmRlciAhPSAib3RoZXIiLCAKICAgICAgICAgcTAzX3JlbGF0aW9uc2hpcF90eXBlICE9ICJOQSIpICU+JSAKICBnZ3Bsb3QoYWVzKHkgPSBQSFE4LCAKICAgICAgICAgICAgIHggPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICBnZW9tX2JveHBsb3QobmEucm0gPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgIGFlcyhjb2xvciA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIHRoZW1lX2J3KCkgKwogICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSkgKwogICAgICAgICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKHEwM19yZWxhdGlvbnNoaXBfdHlwZSkpICsgCiAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJmZW1hbGUiID0gIiNFNjRCMzVDQyIsICJtYWxlIiA9ICIjMDBBMDg3Q0MiKSkgKwogICAgICAgICBnZ3RpdGxlKCJSZWxhdGlvbnNoaXAgdHlwZSIpCgpkYXRhICU+JQogIGZpbHRlcihxMDFfZ2VuZGVyICE9ICJvdGhlciIsIAogICAgICAgICBxMTFfZWR1Y2F0aW9uICE9ICJOQSIpICU+JSAKICBnZ3Bsb3QoYWVzKHkgPSBQSFE4LCAKICAgICAgICAgICAgIHggPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICBnZW9tX2JveHBsb3QobmEucm0gPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgIGFlcyhjb2xvciA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIHRoZW1lX2J3KCkgKwogICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSkgKwogICAgICAgICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKHExMV9lZHVjYXRpb24pKSArIAogICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZmVtYWxlIiA9ICIjRTY0QjM1Q0MiLCAibWFsZSIgPSAiIzAwQTA4N0NDIikpICsKICAgICAgICAgZ2d0aXRsZSgiRWR1Y2F0aW9uYWwgYXR0YWlubWVudCIpCgpkYXRhICU+JQogIGZpbHRlcihxMDFfZ2VuZGVyICE9ICJvdGhlciIpICU+JSAKICBnZ3Bsb3QoYWVzKHkgPSBQSFE4LCAKICAgICAgICAgICAgIHggPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICBnZW9tX2JveHBsb3QobmEucm0gPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgIGFlcyhjb2xvciA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIHRoZW1lX2J3KCkgKwogICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSkgKwogICAgICAgICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKHEwNF9jaGlsZHJlbikpICsgCiAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJmZW1hbGUiID0gIiNFNjRCMzVDQyIsICJtYWxlIiA9ICIjMDBBMDg3Q0MiKSkgKwogICAgICAgICBnZ3RpdGxlKCJDaGlsZHJlbiIpCmBgYAoKIyMjIyBEZXByZXNzaW9uIGFuZCBDb3ZpZC1yZWxhdGVkIGNpcmN1bXN0YW5jZXMKYGBge3J9CmRhdGEgJT4lCiAgZmlsdGVyKHEwMV9nZW5kZXIgIT0gIm90aGVyIiwgCiAgICAgICAgIHExOF8wMl9zb2NfbWVkaWEgIT0gIk5BIiwKICAgICAgICAgcTAyX2FnZV9ncm91cCAhPSAiTkEiKSAlPiUgCiAgZ2dwbG90KGFlcyh5ID0gUEhROCwgCiAgICAgICAgICAgICB4ID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgZ2VvbV9ib3hwbG90KG5hLnJtID0gVFJVRSwgCiAgICAgICAgICAgICAgICAgICAgICBhZXMoY29sb3IgPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCkpICsKICAgICAgICAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhxMThfMDJfc29jX21lZGlhKSwgcm93cyA9IHZhcnMocTAyX2FnZV9ncm91cCkpICsgCiAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJmZW1hbGUiID0gIiNFNjRCMzVDQyIsICJtYWxlIiA9ICIjMDBBMDg3Q0MiKSkgKwogICAgICAgICBnZ3RpdGxlKCJTb2NpYWwgbWVkaWEiKSArIAogICAgICAgICBjb29yZF9mbGlwKCkKCmRhdGEgJT4lCiAgZmlsdGVyKHEwMV9nZW5kZXIgIT0gIm90aGVyIiwgCiAgICAgICAgIHEyMF9wdWJsaWNfaW5mbyAhPSAiTkEiLAogICAgICAgICBxMDJfYWdlX2dyb3VwICE9ICJOQSIpICU+JSAKICBnZ3Bsb3QoYWVzKHkgPSBQSFE4LCAKICAgICAgICAgICAgIHggPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICBnZW9tX2JveHBsb3QobmEucm0gPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgIGFlcyhjb2xvciA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIHRoZW1lX2J3KCkgKwogICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSkgKwogICAgICAgICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKHEyMF9wdWJsaWNfaW5mbyksIHJvd3MgPSB2YXJzKHEwMl9hZ2VfZ3JvdXApKSArIAogICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZmVtYWxlIiA9ICIjRTY0QjM1Q0MiLCAibWFsZSIgPSAiIzAwQTA4N0NDIikpICsKICAgICAgICAgZ2d0aXRsZSgiRW5vdWdoIGluZm9ybWF0aW9uIikgKyAKICAgICAgICAgY29vcmRfZmxpcCgpCgpkYXRhICU+JQogIGZpbHRlcihxMDFfZ2VuZGVyICE9ICJvdGhlciIsIAogICAgICAgICBxMzRfMDJfZmFjZV9tYXNrICE9ICJOQSIsCiAgICAgICAgIHEwMl9hZ2VfZ3JvdXAgIT0gIk5BIikgJT4lIAogIGdncGxvdChhZXMoeSA9IFBIUTgsIAogICAgICAgICAgICAgeCA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIGdlb21fYm94cGxvdChuYS5ybSA9IFRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgYWVzKGNvbG9yID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgdGhlbWVfYncoKSArCiAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpKSArCiAgICAgICAgIGZhY2V0X2dyaWQoY29scyA9IHZhcnMocTM0XzAyX2ZhY2VfbWFzayksIHJvd3MgPSB2YXJzKHEwMl9hZ2VfZ3JvdXApKSArIAogICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZmVtYWxlIiA9ICIjRTY0QjM1Q0MiLCAibWFsZSIgPSAiIzAwQTA4N0NDIikpICsKICAgICAgICAgZ2d0aXRsZSgiRmFjZSBtYXNrIHdlYXJpbmciKSArIAogICAgICAgICBjb29yZF9mbGlwKCkKCmRhdGEgJT4lCiAgZmlsdGVyKHEwMV9nZW5kZXIgIT0gIm90aGVyIiwgCiAgICAgICAgIHEzNF8wN19oYW5kX3dhc2hpbmcgIT0gIk5BIiwKICAgICAgICAgcTAyX2FnZV9ncm91cCAhPSAiTkEiKSAlPiUgCiAgZ2dwbG90KGFlcyh5ID0gUEhROCwgCiAgICAgICAgICAgICB4ID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgZ2VvbV9ib3hwbG90KG5hLnJtID0gVFJVRSwgCiAgICAgICAgICAgICAgICAgICAgICBhZXMoY29sb3IgPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCkpICsKICAgICAgICAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhxMzRfMDdfaGFuZF93YXNoaW5nKSwgcm93cyA9IHZhcnMocTAyX2FnZV9ncm91cCkpICsgCiAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJmZW1hbGUiID0gIiNFNjRCMzVDQyIsICJtYWxlIiA9ICIjMDBBMDg3Q0MiKSkgKwogICAgICAgICBnZ3RpdGxlKCJJbmNyZWFzZWQgaGFuZCB3YXNoaW5nIikgKyAKICAgICAgICAgY29vcmRfZmxpcCgpCmRhdGEgJT4lCiAgZmlsdGVyKHEwMV9nZW5kZXIgIT0gIm90aGVyIiwgCiAgICAgICAgIHEzNl9lY29uX3dvcnJ5ICE9ICJOQSIsCiAgICAgICAgIHEwMl9hZ2VfZ3JvdXAgIT0gIk5BIikgJT4lIAogIGdncGxvdChhZXMoeSA9IFBIUTgsIAogICAgICAgICAgICAgeCA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIGdlb21fYm94cGxvdChuYS5ybSA9IFRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgYWVzKGNvbG9yID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgdGhlbWVfYncoKSArCiAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpKSArCiAgICAgICAgIGZhY2V0X2dyaWQoY29scyA9IHZhcnMocTM2X2Vjb25fd29ycnkpLCByb3dzID0gdmFycyhxMDJfYWdlX2dyb3VwKSkgKyAKICAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImZlbWFsZSIgPSAiI0U2NEIzNUNDIiwgIm1hbGUiID0gIiMwMEEwODdDQyIpKSArCiAgICAgICAgIGdndGl0bGUoIlBlcmNlaXZlZCBlY29ub21pYyBpbXBhY3Qgb2YgQ292aWQiKSArIAogICAgICAgICBjb29yZF9mbGlwKCkKCmBgYAoKIyMjIyBEZXByZXNzaW9uIGFuZCBsaWZlc3R5bGUgZmFjdG9ycwpgYGB7cn0KZGF0YSAlPiUKICBmaWx0ZXIocTAxX2dlbmRlciAhPSAib3RoZXIiLCAKICAgICAgICAgcTM1XzAxX2NvbnRhY3RfY2xvc2VfZmFtaWx5ICE9ICJOQSIsCiAgICAgICAgIHEwMl9hZ2VfZ3JvdXAgIT0gIk5BIikgJT4lIAogIGdncGxvdChhZXMoeSA9IFBIUTgsIAogICAgICAgICAgICAgeCA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIGdlb21fYm94cGxvdChuYS5ybSA9IFRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgYWVzKGNvbG9yID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgdGhlbWVfYncoKSArCiAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpKSArCiAgICAgICAgIGZhY2V0X2dyaWQoY29scyA9IHZhcnMocTM1XzAxX2NvbnRhY3RfY2xvc2VfZmFtaWx5KSwgcm93cyA9IHZhcnMocTAyX2FnZV9ncm91cCkpICsgCiAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJmZW1hbGUiID0gIiNFNjRCMzVDQyIsICJtYWxlIiA9ICIjMDBBMDg3Q0MiKSkgKwogICAgICAgICBnZ3RpdGxlKCJGcmVxdWVuY3kgb2YgcGh5c2ljYWwgY29udGFjdCAtIGNsb3NlIGZhbWlseSIpICsgCiAgICAgICAgIGNvb3JkX2ZsaXAoKQoKZGF0YSAlPiUKICBmaWx0ZXIocTAxX2dlbmRlciAhPSAib3RoZXIiLCAKICAgICAgICAgcTM1XzAzX2NvbnRhY3RfZnJpZW5kcyAhPSAiTkEiLAogICAgICAgICBxMDJfYWdlX2dyb3VwICE9ICJOQSIpICU+JSAKICBnZ3Bsb3QoYWVzKHkgPSBQSFE4LCAKICAgICAgICAgICAgIHggPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICBnZW9tX2JveHBsb3QobmEucm0gPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgIGFlcyhjb2xvciA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIHRoZW1lX2J3KCkgKwogICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSkgKwogICAgICAgICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKHEzNV8wM19jb250YWN0X2ZyaWVuZHMpLCByb3dzID0gdmFycyhxMDJfYWdlX2dyb3VwKSkgKyAKICAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImZlbWFsZSIgPSAiI0U2NEIzNUNDIiwgIm1hbGUiID0gIiMwMEEwODdDQyIpKSArCiAgICAgICAgIGdndGl0bGUoIkZyZXF1ZW5jeSBvZiBwaHlzaWNhbCBjb250YWN0IC0gZnJpZW5kcyIpICsgCiAgICAgICAgIGNvb3JkX2ZsaXAoKQoKZGF0YSAlPiUKICBmaWx0ZXIocTAxX2dlbmRlciAhPSAib3RoZXIiLCAKICAgICAgICAgcTM4X2FsY29ob2wgIT0gIk5BIiwKICAgICAgICAgcTAyX2FnZV9ncm91cCAhPSAiTkEiKSAlPiUgCiAgZ2dwbG90KGFlcyh5ID0gUEhROCwgCiAgICAgICAgICAgICB4ID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgZ2VvbV9ib3hwbG90KG5hLnJtID0gVFJVRSwgCiAgICAgICAgICAgICAgICAgICAgICBhZXMoY29sb3IgPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCkpICsKICAgICAgICAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhxMzhfYWxjb2hvbCksIHJvd3MgPSB2YXJzKHEwMl9hZ2VfZ3JvdXApKSArIAogICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZmVtYWxlIiA9ICIjRTY0QjM1Q0MiLCAibWFsZSIgPSAiIzAwQTA4N0NDIikpICsKICAgICAgICAgZ2d0aXRsZSgiQWxjb2hvbCIpICsgCiAgICAgICAgIGNvb3JkX2ZsaXAoKQoKZGF0YSAlPiUKICBmaWx0ZXIocTAxX2dlbmRlciAhPSAib3RoZXIiLCAKICAgICAgICAgcTQwX3Ntb2tpbmcgIT0gIk5BIiwKICAgICAgICAgcTAyX2FnZV9ncm91cCAhPSAiTkEiKSAlPiUgCiAgZ2dwbG90KGFlcyh5ID0gUEhROCwgCiAgICAgICAgICAgICB4ID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgZ2VvbV9ib3hwbG90KG5hLnJtID0gVFJVRSwgCiAgICAgICAgICAgICAgICAgICAgICBhZXMoY29sb3IgPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCkpICsKICAgICAgICAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhxNDBfc21va2luZyksIHJvd3MgPSB2YXJzKHEwMl9hZ2VfZ3JvdXApKSArIAogICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZmVtYWxlIiA9ICIjRTY0QjM1Q0MiLCAibWFsZSIgPSAiIzAwQTA4N0NDIikpICsKICAgICAgICAgZ2d0aXRsZSgiU21va2luZyIpICsgCiAgICAgICAgIGNvb3JkX2ZsaXAoKQoKZGF0YSAlPiUKICBmaWx0ZXIocTAxX2dlbmRlciAhPSAib3RoZXIiLCAKICAgICAgICAgcTQyX3Nwb3J0ICE9ICJOQSIsCiAgICAgICAgIHEwMl9hZ2VfZ3JvdXAgIT0gIk5BIikgJT4lIAogIGdncGxvdChhZXMoeSA9IFBIUTgsIAogICAgICAgICAgICAgeCA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIGdlb21fYm94cGxvdChuYS5ybSA9IFRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgYWVzKGNvbG9yID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgdGhlbWVfYncoKSArCiAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpKSArCiAgICAgICAgIGZhY2V0X2dyaWQoY29scyA9IHZhcnMocTQyX3Nwb3J0ICksIHJvd3MgPSB2YXJzKHEwMl9hZ2VfZ3JvdXApKSArIAogICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZmVtYWxlIiA9ICIjRTY0QjM1Q0MiLCAibWFsZSIgPSAiIzAwQTA4N0NDIikpICsKICAgICAgICAgZ2d0aXRsZSgiU3BvcnQiKSArIAogICAgICAgICBjb29yZF9mbGlwKCkKYGBgCgojIyMjIERlcHJlc3Npb24gYW5kIGhlYWx0aApgYGB7cn0KZGF0YSAlPiUKICBmaWx0ZXIocTAxX2dlbmRlciAhPSAib3RoZXIiLCAKICAgICAgICAgcTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aCAhPSAiTkEiLCAKICAgICAgICAgcTAyX2FnZV9ncm91cCAhPSAiTkEiKSAlPiUgCiAgZ2dwbG90KGFlcyh5ID0gUEhROCwgCiAgICAgICAgICAgICB4ID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgZ2VvbV9ib3hwbG90KG5hLnJtID0gVFJVRSwgCiAgICAgICAgICAgICAgICAgICAgICBhZXMoY29sb3IgPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCkpICsKICAgICAgICAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhxNDdfc2VsZl9yZXBvcnRpbmdfaGVhbHRoKSwgcm93cyA9IHZhcnMocTAyX2FnZV9ncm91cCkpICsgCiAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJmZW1hbGUiID0gIiNFNjRCMzVDQyIsICJtYWxlIiA9ICIjMDBBMDg3Q0MiKSkgKwogICAgICAgICBnZ3RpdGxlKCJTZWxmLXJlcG9ydGVkIEhlYWx0aCIpICsgCiAgICAgICAgIGNvb3JkX2ZsaXAoKQoKZGF0YSAlPiUKICBmaWx0ZXIocTAxX2dlbmRlciAhPSAib3RoZXIiLCAKICAgICAgICAgcTQ4X2Nocm9uaWNfaWxsbmVzcyAhPSAiTkEiLCAKICAgICAgICAgcTAyX2FnZV9ncm91cCAhPSAiTkEiKSAlPiUgCiAgZ2dwbG90KGFlcyh5ID0gUEhROCwgCiAgICAgICAgICAgICB4ID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgZ2VvbV9ib3hwbG90KG5hLnJtID0gVFJVRSwgCiAgICAgICAgICAgICAgICAgICAgICBhZXMoY29sb3IgPSBxMDFfZ2VuZGVyKSkgKwogICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCkpICsKICAgICAgICAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhxNDhfY2hyb25pY19pbGxuZXNzKSwgcm93cyA9IHZhcnMocTAyX2FnZV9ncm91cCkpICsgCiAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJmZW1hbGUiID0gIiNFNjRCMzVDQyIsICJtYWxlIiA9ICIjMDBBMDg3Q0MiKSkgKwogICAgICAgICBnZ3RpdGxlKCJDaHJvbmljIGlsbG5lc3MiKSArIAogICAgICAgICBjb29yZF9mbGlwKCkKCmRhdGEgJT4lCiAgZmlsdGVyKHEwMV9nZW5kZXIgIT0gIm90aGVyIiwgCiAgICAgICAgIHE0OV9oZWFsdGhfbGltaXRhdGlvbnMgIT0gIk5BIiwgCiAgICAgICAgIHEwMl9hZ2VfZ3JvdXAgIT0gIk5BIikgJT4lIAogIGdncGxvdChhZXMoeSA9IFBIUTgsIAogICAgICAgICAgICAgeCA9IHEwMV9nZW5kZXIpKSArCiAgICAgICAgIGdlb21fYm94cGxvdChuYS5ybSA9IFRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgYWVzKGNvbG9yID0gcTAxX2dlbmRlcikpICsKICAgICAgICAgdGhlbWVfYncoKSArCiAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpKSArCiAgICAgICAgIGZhY2V0X2dyaWQoY29scyA9IHZhcnMocTQ5X2hlYWx0aF9saW1pdGF0aW9ucyApLCByb3dzID0gdmFycyhxMDJfYWdlX2dyb3VwKSkgKyAKICAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImZlbWFsZSIgPSAiI0U2NEIzNUNDIiwgIm1hbGUiID0gIiMwMEEwODdDQyIpKSArIAogICAgICAgICBnZ3RpdGxlKCJIZWFsdGggbGltaXRhdGlvbnMiKSArIAogICAgICAgICBjb29yZF9mbGlwKCkKCmBgYAoKYGBge3IgUEhROCB0cmFuc2Zvcm1hdGlvbiwgaW5jbHVkZT1GQUxTRX0KIyBOb3JtYWxpdHkgdHJhbnNmb3JtYXRpb246IGZpbmRpbmcgbGFtYmRhIGZvciBlbnRpcmUgbW9kZWwgdGhhdCAKIyBpbmNsdWRlcyBQSFE4IGFzIGEgZGVwZW5kZW50IHZhcmlhYmxlCllKIDwtIGNhcjo6cG93ZXJUcmFuc2Zvcm0obG0oUEhROCB+IHEwMV9nZW5kZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHEwMl9hZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHEwM19yZWxhdGlvbnNoaXBfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTA0X2NoaWxkcmVuIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTExX2VkdWNhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTE4XzAyX3NvY19tZWRpYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTIwX3B1YmxpY19pbmZvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxMzRfMDJfZmFjZV9tYXNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxMzRfMDdfaGFuZF93YXNoaW5nIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTM1XzAxX2NvbnRhY3RfY2xvc2VfZmFtaWx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxMzVfMDNfY29udGFjdF9mcmllbmRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBxMzhfYWxjb2hvbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTQwX3Ntb2tpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHE0Ml9zcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTQ4X2Nocm9uaWNfaWxsbmVzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcTQ5X2hlYWx0aF9saW1pdGF0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZGF0YSA9IGRhdGEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBmYW1pbHkgPSAieWpQb3dlciIpCihsYW1iZGFZSiA8LSBZSiRsYW1iZGEpCgojIFllby1Kb2huc29uIHRyYW5zZm9ybWF0aW9uIG9mIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUKUEhROF90IDwtIGNhcjo6eWpQb3dlcihVID0gZGF0YSRQSFE4LCBsYW1iZGEgPSBsYW1iZGFZSikKCiMgQWRkaW5nIHRoZSBuZXdseSBjcmVhdGVkIHZhcmlhYmxlIHRvIHRoZSBkYXRhc2V0CmRhdGEgPC0gY2JpbmQoZGF0YSwgUEhROF90KQpgYGAKCiMjIE92ZXJ2aWV3IG9mIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGluZGl2aWR1YWwgcHJlZGljdG9ycyBhbmQgb3V0Y29tZQoKYGBge3IgY29ycmVsYXRpb24gbWF0cml4LCBmaWcuaGVpZ2h0PTksIGZpZy53aWR0aD05fQojIFdoaWxlIHRoZSBkYXRhc2V0IGhhcyBiZWVuIGFscmVhZHkgaW1wb3J0ZWQsIHRoZSB2YWx1ZXMgb2YgZmFjdG9yIHZhcmlhYmxlcyAKIyB3ZXJlIGNoYW5nZWQgZnJvbSBudW1lcmljcyB0byB0ZXh0IHN0cmluZ3MsIHRoZXJlZm9yZSB0aGF0IGRhdGFzZXQgaXMgdW5zdWl0YWJsZQojIGZvciBjb3JyZWxhdGlvbiBhbmFseXNpcy4gVG8gc29sdmUgdGhpcywgd2UgY3JlYXRlIGEgcGFyYWxsZWwgZGF0YXNldCwgCiMgYWdhaW4gcmVuYW1pbmcgdGhlIGtleSB2YXJpYWJsZXMgdG8gYSBtb3JlIHVuZGVyc3RhbmRhYmxlIGZvcm0uCgpkYXRhX2NvcnIgPC0gZGF0YV9jb3JyICU+JSAKICAgICAgICAgICAgIHRyYW5zbXV0ZShjb3VudHJ5ID0gQ291bnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgcTAxX2dlbmRlciA9IFEzLCAKICAgICAgICAgICAgICAgICAgICAgICAgcTAyX2FnZSA9IFE0LAogICAgICAgICAgICAgICAgICAgICAgICBxMDNfcmVsYXRpb25zaGlwX3R5cGUgPSBRNSwKICAgICAgICAgICAgICAgICAgICAgICAgcTA0X2NoaWxkcmVuID0gUTYsCiAgICAgICAgICAgICAgICAgICAgICAgIHExMV9lZHVjYXRpb24gPSBRMTNSLAogICAgICAgICAgICAgICAgICAgICAgICBxMThfMDJfc29jX21lZGlhID0gcmVwbGFjZV9uYShRMjFfMiwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgIHEyMF9wdWJsaWNfaW5mbyA9IFEyMywKICAgICAgICAgICAgICAgICAgICAgICAgcTM0XzAyX2ZhY2VfbWFzayA9IFEzN18yLAogICAgICAgICAgICAgICAgICAgICAgICBxMzRfMDdfaGFuZF93YXNoaW5nID0gUTM3XzcsCiAgICAgICAgICAgICAgICAgICAgICAgIHEzNl9lY29uX3dvcnJ5ID0gUTM5LAogICAgICAgICAgICAgICAgICAgICAgICBxMzVfMDFfY29udGFjdF9jbG9zZV9mYW1pbHkgPSBRMzhfMSwKICAgICAgICAgICAgICAgICAgICAgICAgcTM1XzAzX2NvbnRhY3RfZnJpZW5kcyA9IFEzOF8zLAogICAgICAgICAgICAgICAgICAgICAgICBxMzhfYWxjb2hvbCA9IFE0MiwKICAgICAgICAgICAgICAgICAgICAgICAgcTQwX3Ntb2tpbmcgPSBRNDQsCiAgICAgICAgICAgICAgICAgICAgICAgIHE0Ml9zcG9ydCA9IFE0NiwKICAgICAgICAgICAgICAgICAgICAgICAgcTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aCA9IFE1MCwKICAgICAgICAgICAgICAgICAgICAgICAgcTQ4X2Nocm9uaWNfaWxsbmVzcyA9IFE1MSwKICAgICAgICAgICAgICAgICAgICAgICAgcTQ5X2hlYWx0aF9saW1pdGF0aW9ucyA9IFE1MikgJT4lIAogICAgICAgICAgICAgIGZpbHRlcihjb3VudHJ5ICE9IDUpICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoLWNvdW50cnkpCgpkYXRhX2NvcnIgPC0gY2JpbmQoZGF0YV9jb3JyLCBQSFE4X3QpCgpyZXMxIDwtIGNvci5tdGVzdChkYXRhX2NvcnIsIGNvbmYubGV2ZWwgPSAuOTUpCgojQ29ycmVsYXRpb24gbWF0cml4IHVzaW5nIFNwZWFybWFuIGNvZWZmaWNpZW50ICh2YWx1ZXMgd2l0aCBwID4gMC4wNSBhcmUgY3Jvc3NlZCkKY29ycnBsb3QoY29yKGRhdGFfY29yciwgCiAgICAgICAgICAgICBtZXRob2QgPSAic3BlYXJtYW4iLCAKICAgICAgICAgICAgIHVzZSA9ICJjb21wbGV0ZS5vYnMiKSwgCiAgICAgICAgICAgICBtZXRob2QgPSAiY2lyY2xlIiwgCiAgICAgICAgICAgICB0aXRsZSA9ICJDb3JyZWxhdGlvbiBNYXRyaXggLSBTcGVhcm1hbiBDb2VmZmljaWVudCIsIAogICAgICAgICAgICAgdHlwZSA9ICJsb3dlciIsIAogICAgICAgICAgICAgcC5tYXQgPSByZXMxJHAsIAogICAgICAgICAgICAgc2lnLmxldmVsID0gLjA1LCAKICAgICAgICAgICAgIG1hciA9IGMoMCwwLDEsMCkpCmBgYAoKYGBge3IgdGhlb3J5LWRyaXZlbiByZWdyZXNzaW9uIG1vZGVsLCBjb21tZW50ID0gIiJ9CgpsaW5yZWdfdGhlb3J5IDwtIGptdjo6bGluUmVnKAogICAgZGF0YSA9IGRhdGEsCiAgICBkZXAgPSAiUEhROF90IiwKICAgIGNvdnMgPSAicTAyX2FnZSIsCiAgICBmYWN0b3JzID0gdmFycygicTAxX2dlbmRlciIsCiAgICAgICAgICAgICAgICAgICAicTAzX3JlbGF0aW9uc2hpcF90eXBlIiwKICAgICAgICAgICAgICAgICAgICJxMDRfY2hpbGRyZW4iLAogICAgICAgICAgICAgICAgICAgIyAicTExX2VkdWNhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAicTE4XzAyX3NvY19tZWRpYSIsCiAgICAgICAgICAgICAgICAgICAicTIwX3B1YmxpY19pbmZvIiwKICAgICAgICAgICAgICAgICAgICJxMzRfMDJfZmFjZV9tYXNrIiwKICAgICAgICAgICAgICAgICAgICJxMzRfMDdfaGFuZF93YXNoaW5nIiwKICAgICAgICAgICAgICAgICAgICJxMzVfMDFfY29udGFjdF9jbG9zZV9mYW1pbHkiLAogICAgICAgICAgICAgICAgICAgInEzNV8wM19jb250YWN0X2ZyaWVuZHMiLAogICAgICAgICAgICAgICAgICAgInEzNl9lY29uX3dvcnJ5IiwKICAgICAgICAgICAgICAgICAgICJxMzhfYWxjb2hvbCIsCiAgICAgICAgICAgICAgICAgICAicTQwX3Ntb2tpbmciLAogICAgICAgICAgICAgICAgICAgInE0Ml9zcG9ydCIsCiAgICAgICAgICAgICAgICAgICAicTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aCIsCiAgICAgICAgICAgICAgICAgICAicTQ4X2Nocm9uaWNfaWxsbmVzcyIsCiAgICAgICAgICAgICAgICAgICAicTQ5X2hlYWx0aF9saW1pdGF0aW9ucyIpLAogICAgYmxvY2tzID0gbGlzdCgKICAgICAgICBsaXN0KAogICAgICAgICAgICAicTAxX2dlbmRlciIsCiAgICAgICAgICAgICJxMDJfYWdlIiwKICAgICAgICAgICAgInEwM19yZWxhdGlvbnNoaXBfdHlwZSIsCiAgICAgICAgICAgICJxMDRfY2hpbGRyZW4iKSwKICAgICAgICAgICAgIyAicTExX2VkdWNhdGlvbiIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgICJxMThfMDJfc29jX21lZGlhIiwKICAgICAgICAgICAgInEyMF9wdWJsaWNfaW5mbyIsCiAgICAgICAgICAgICJxMzRfMDJfZmFjZV9tYXNrIiwKICAgICAgICAgICAgInEzNF8wN19oYW5kX3dhc2hpbmciLAogICAgICAgICAgICAicTM2X2Vjb25fd29ycnkiKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICAicTQwX3Ntb2tpbmciLAogICAgICAgICAgICAicTQyX3Nwb3J0IiwKICAgICAgICAgICAgInEzOF9hbGNvaG9sIiwKICAgICAgICAgICAgInEzNV8wMV9jb250YWN0X2Nsb3NlX2ZhbWlseSIsCiAgICAgICAgICAgICJxMzVfMDNfY29udGFjdF9mcmllbmRzIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgInE0N19zZWxmX3JlcG9ydGluZ19oZWFsdGgiLAogICAgICAgICAgICAicTQ4X2Nocm9uaWNfaWxsbmVzcyIsCiAgICAgICAgICAgICJxNDlfaGVhbHRoX2xpbWl0YXRpb25zIikpLAogICAgcmVmTGV2ZWxzID0gbGlzdCgKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTAxX2dlbmRlciIsCiAgICAgICAgICAgIHJlZiA9ICJmZW1hbGUiKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTA0X2NoaWxkcmVuIiwKICAgICAgICAgICAgcmVmID0gIm5vIiksCiAgICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMjBfcHVibGljX2luZm8iLAogICAgICAgICAgICByZWYgPSAibm8iKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTM0XzAyX2ZhY2VfbWFzayIsCiAgICAgICAgICAgIHJlZiA9ICJubyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMzRfMDdfaGFuZF93YXNoaW5nIiwKICAgICAgICAgICAgcmVmID0gIm5vIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEzNl9lY29uX3dvcnJ5IiwKICAgICAgICAgICAgcmVmID0gInZlcnlfc2VyaW91cyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxNDJfc3BvcnQiLAogICAgICAgICAgICByZWYgPSAibm8iKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTQwX3Ntb2tpbmciLAogICAgICAgICAgICByZWYgPSAieWVzIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEzOF9hbGNvaG9sIiwKICAgICAgICAgICAgcmVmID0gInllcyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMzVfMDFfY29udGFjdF9jbG9zZV9mYW1pbHkiLAogICAgICAgICAgICByZWYgPSAibGVzc19vZnRlbiIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMzVfMDNfY29udGFjdF9mcmllbmRzIiwKICAgICAgICAgICAgcmVmID0gImxlc3Nfb2Z0ZW4iKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTE4XzAyX3NvY19tZWRpYSIsCiAgICAgICAgICAgIHJlZiA9ICJ5ZXMiKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTAzX3JlbGF0aW9uc2hpcF90eXBlIiwKICAgICAgICAgICAgcmVmID0gInNpbmdsZSIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxNDdfc2VsZl9yZXBvcnRpbmdfaGVhbHRoIiwKICAgICAgICAgICAgcmVmID0gInZlcnlfYmFkIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInE0OV9oZWFsdGhfbGltaXRhdGlvbnMiLAogICAgICAgICAgICByZWYgPSAibGltaXRzIiksCiAgICAgICAgIyBsaXN0KAogICAgICAgICMgICAgIHZhciA9ICJxMTFfZWR1Y2F0aW9uIiwKICAgICAgICAjICAgICByZWYgPSAibG93IiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInE0OF9jaHJvbmljX2lsbG5lc3MiLAogICAgICAgICAgICByZWYgPSAieWVzIikpLAogICAgcjJBZGogPSBUUlVFLAogICAgYWljID0gVFJVRSwKICAgIGJpYyA9IFRSVUUsCiAgICBybXNlID0gVFJVRSwKICAgIG1vZGVsVGVzdCA9IFRSVUUsCiAgICBhbm92YSA9IFRSVUUsCiAgICBjaSA9IFRSVUUsCiAgICBzdGRFc3QgPSBUUlVFLAogICAgY2lTdGRFc3QgPSBUUlVFLAogICAgZHVyYmluID0gVFJVRSwKICAgIGNvbGxpbiA9IFRSVUUpCgpgYGAKCiMjIyBSZWdyZXNzaW9uIG1vZGVsIHBlcmZvcm1hbmNlIHsudGFic2V0IC50YWJzZXQtcGlsbHN9CgojIyMjIE1vZGVsIGZpdCBtZWFzdXJlcwoKYGBge3IsIGNvbW1lbnQgPSAiIn0KbGlucmVnX3RoZW9yeSRtb2RlbEZpdApgYGAKCiMjIyMgTW9kZWwgY29tcGFyaXNvbnMKCmBgYHtyLCBjb21tZW50ID0gIiJ9CmxpbnJlZ190aGVvcnkkbW9kZWxDb21wCQkJCQkKYGBgCgojIyMjIE1vZGVsIHNwZWNpZmljIHJlc3VsdHMKCmBgYHtyLCBjb21tZW50ID0gIiJ9CmxpbnJlZ190aGVvcnkkbW9kZWxzCQkJCQpgYGAKCmBgYHtyIGF1dG9tYXRpYyBzdGVwd2lzZSByZWdyZXNzaW9uIG1vZGVsLCBjb21tZW50ID0gIiJ9CgpsaW5yZWdfc3RlcHdpc2UyIDwtIGptdjo6bGluUmVnKAogICAgZGF0YSA9IGRhdGEsCiAgICBkZXAgPSAiUEhROF90IiwKICAgIGNvdnMgPSAicTAyX2FnZSIsCiAgICBmYWN0b3JzID0gdmFycygicTAxX2dlbmRlciIsCiAgICAgICAgICAgICAgICAgICAicTAzX3JlbGF0aW9uc2hpcF90eXBlIiwKICAgICAgICAgICAgICAgICAgICJxMDRfY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICJxMThfMDJfc29jX21lZGlhIiwgCiAgICAgICAgICAgICAgICAgICAicTIwX3B1YmxpY19pbmZvIiwKICAgICAgICAgICAgICAgICAgICJxMzRfMDJfZmFjZV9tYXNrIiwKICAgICAgICAgICAgICAgICAgICJxMzZfZWNvbl93b3JyeSIsCiAgICAgICAgICAgICAgICAgICAicTM4X2FsY29ob2wiLCAKICAgICAgICAgICAgICAgICAgICJxNDBfc21va2luZyIsIAogICAgICAgICAgICAgICAgICAgInE0N19zZWxmX3JlcG9ydGluZ19oZWFsdGgiLCAKICAgICAgICAgICAgICAgICAgICJxNDhfY2hyb25pY19pbGxuZXNzIiwKICAgICAgICAgICAgICAgICAgICJxNDlfaGVhbHRoX2xpbWl0YXRpb25zIiksCiAgICBibG9ja3MgPSBsaXN0KAogICAgICAgIGxpc3QoCiAgICAgICAgICAgICJxMDFfZ2VuZGVyIiwKICAgICAgICAgICAgInEwMl9hZ2UiLAogICAgICAgICAgICAicTA0X2NoaWxkcmVuIiwKICAgICAgICAgICAgInEzNl9lY29uX3dvcnJ5IiwKICAgICAgICAgICAgInExOF8wMl9zb2NfbWVkaWEiLAogICAgICAgICAgICAicTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aCIsCiAgICAgICAgICAgICJxNDlfaGVhbHRoX2xpbWl0YXRpb25zIiksCiAgICAgICAgICBsaXN0KAogICAgICAgICAgICAicTAzX3JlbGF0aW9uc2hpcF90eXBlIiwKICAgICAgICAgICAgInEyMF9wdWJsaWNfaW5mbyIsCiAgICAgICAgICAgICJxMzRfMDJfZmFjZV9tYXNrIiwKICAgICAgICAgICAgInEzOF9hbGNvaG9sIiwKICAgICAgICAgICAgInE0MF9zbW9raW5nIiwKICAgICAgICAgICAgInE0OF9jaHJvbmljX2lsbG5lc3MiKSksCiAgICByZWZMZXZlbHMgPSBsaXN0KAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMDFfZ2VuZGVyIiwKICAgICAgICAgICAgcmVmID0gImZlbWFsZSIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMDRfY2hpbGRyZW4iLAogICAgICAgICAgICByZWYgPSAibm8iKSwKICAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEyMF9wdWJsaWNfaW5mbyIsCiAgICAgICAgICAgIHJlZiA9ICJubyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxMzRfMDJfZmFjZV9tYXNrIiwKICAgICAgICAgICAgcmVmID0gIm5vIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEzNl9lY29uX3dvcnJ5IiwKICAgICAgICAgICAgcmVmID0gInZlcnlfc2VyaW91cyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxNDBfc21va2luZyIsCiAgICAgICAgICAgIHJlZiA9ICJ5ZXMiKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTM4X2FsY29ob2wiLAogICAgICAgICAgICByZWYgPSAieWVzIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInExOF8wMl9zb2NfbWVkaWEiLAogICAgICAgICAgICByZWYgPSAieWVzIiksCiAgICAgICAgbGlzdCgKICAgICAgICAgICAgdmFyID0gInEwM19yZWxhdGlvbnNoaXBfdHlwZSIsCiAgICAgICAgICAgIHJlZiA9ICJzaW5nbGUiKSwKICAgICAgICBsaXN0KAogICAgICAgICAgICB2YXIgPSAicTQ3X3NlbGZfcmVwb3J0aW5nX2hlYWx0aCIsCiAgICAgICAgICAgIHJlZiA9ICJ2ZXJ5X2JhZCIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxNDlfaGVhbHRoX2xpbWl0YXRpb25zIiwKICAgICAgICAgICAgcmVmID0gImxpbWl0cyIpLAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHZhciA9ICJxNDhfY2hyb25pY19pbGxuZXNzIiwKICAgICAgICAgICAgcmVmID0gInllcyIpKSwKICAgIHIyQWRqID0gVFJVRSwKICAgIGFpYyA9IFRSVUUsCiAgICBiaWMgPSBUUlVFLAogICAgcm1zZSA9IFRSVUUsCiAgICBtb2RlbFRlc3QgPSBUUlVFLAogICAgYW5vdmEgPSBUUlVFLAogICAgY2kgPSBUUlVFLAogICAgc3RkRXN0ID0gVFJVRSwKICAgIGNpU3RkRXN0ID0gVFJVRSwKICAgIGR1cmJpbiA9IFRSVUUsCiAgICBjb2xsaW4gPSBUUlVFKQoKYGBgCgojIyMgU3RlcHdpc2UgbW9kZWwgcGVyZm9ybWFuY2Ugey50YWJzZXQgLnRhYnNldC1waWxsc30KCiMjIyMgU3RlcHdpc2UgbW9kZWwgZml0IG1lYXN1cmVzCgpgYGB7ciwgY29tbWVudCA9ICIifQpsaW5yZWdfc3RlcHdpc2UyJG1vZGVsRml0CmBgYAoKIyMjIyBTdGVwd2lzZSBtb2RlbCBjb21wYXJpc29ucwoKYGBge3IsIGNvbW1lbnQgPSAiIn0KbGlucmVnX3N0ZXB3aXNlMiRtb2RlbENvbXAJCQkJCQpgYGAKCiMjIyMgU3RlcHdpc2UgbW9kZWwgc3BlY2lmaWMgcmVzdWx0cwoKYGBge3IsIGNvbW1lbnQgPSAiIn0KbGlucmVnX3N0ZXB3aXNlMiRtb2RlbHMJCQkJCmBgYAoKIyMgQ3JlYXRpb24gb2YgdGhlIENvdmlkLTE5IGNvbmNlcm4gaW5kZXgsIHN0ZXAgMzogUmVsaWFiaWxpdHkgQW5hbHlzaXMgb2YgdGhlIGluZGV4IGl0ZW1zCgpTZWNvbmRseSwgd2UgY29uZHVjdCBhIFJlbGlhYmlsaXR5IEFuYWx5c2lzIG9mIHRoZSBDb3ZpZC0xOSBjb25jZXJuIGZhY3Rvci4gV2UgdXNlIGEgY3V0b2ZmIHZhbHVlIG9mIDAuNyBmb3IgYm90aCBNY0RvbmFsZCdzIE9tZWdhIGFuZCBDcm9uYmFjaCdzIEFscGhhLiBUaGUgc2NhbGUgcGFzc2VzIHRoaXMgY3V0b2ZmIGFuZCB0aGUgc3RhdGlzdGljcyB3b3VsZCBub3QgYmUgaW1wcm92ZWQgaWYgYW55IG9mIHRoZSBpdGVtcyB3ZXJlIGRyb3BwZWQuCgpgYGB7ciBjb25jZXJuIGluZGV4IHJlbGlhYmlsaXR5IGFuYWx5c2lzLCBjb21tZW50ID0gIiJ9CiMgVG8gY29uZHVjdCB0aGUgcmVsaWFiaWxpdHkgYW5hbHlzaXMsIHdlIHVzZSB0aGUgcmVsaWFiaWxpdHkoKSBmdW5jdGlvbiBmcm9tIHRoZSAKIyAgam12IHBhY2thZ2Ugb24gdGhlICJ0ZXN0IiBkYXRhIHNldCAoYXMgb3Bwb3NlZCB0byB0aGUgInRyYWluIiBkYXRhc2V0IHVzZWQgZm9yIEVGQSkuCgpqbXY6OnJlbGlhYmlsaXR5KAogICAgZGF0YSA9IGRhdGEsCiAgICB2YXJzID0gdmFycygicTMwX2NvbmNlcm5faW5mZWN0aW9uX2NvdmlkIiwgCiAgICAgICAgICAgICAgICAicTMxX2NvbmNlcm5faW5mZWN0aW9uX2ZyaWVuZHMiLCAKICAgICAgICAgICAgICAgICJxMzNfMDFfY29uY2Vybl9zaXR1YXRpb24iLCAKICAgICAgICAgICAgICAgICJxMzNfMDJfY29uY2Vybl9sb3dfY29udHJvbCIsIAogICAgICAgICAgICAgICAgInEzM18wM19jb25jZXJuX3N1cnZpdmFsX2NvdmlkIiwgCiAgICAgICAgICAgICAgICAicTMzXzA1X2NvbmNlcm5faW5mZWN0aW5nX290aGVycyIpLAogICAgb21lZ2FTY2FsZSA9IFRSVUUsCiAgICBhbHBoYUl0ZW1zID0gVFJVRSwKICAgIG9tZWdhSXRlbXMgPSBUUlVFKQpgYGAKCgojIyBDcmVhdGlvbiBvZiB0aGUgQ292aWQtMTkgY29uY2VybiBpbmRleCwgc3RlcCA0OiBDb25maXJtYXRvcnkgRmFjdG9yIEFuYWx5c2lzIG9mIHRoZSBpbmRleCBpdGVtcwoKYGBge3IgY29uY2VybiBpbmRleCBDb25maXJtYXRvcnkgRmFjdG9yIEFuYWx5c2lzLCBjb21tZW50ID0gIiJ9CiMgVG8gY29uZHVjdCB0aGUgQ0ZBLCB3ZSB1c2UgdGhlIGNmYSgpIGZ1bmN0aW9uIGZyb20gdGhlIGptdiBwYWNrYWdlIG9uIHRoZSAidGVzdCIgCiMgZGF0YSBzZXQgKGFzIG9wcG9zZWQgdG8gdGhlICJ0cmFpbiIgZGF0YXNldCB1c2VkIGZvciBFRkEpLgoKam12OjpjZmEoCiAgICBkYXRhID0gZGF0YSwKICAgIGZhY3RvcnMgPSBsaXN0KAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIGxhYmVsID0gIkNvbmNlcm4iLAogICAgICAgICAgICB2YXJzID0gYygicTMwX2NvbmNlcm5faW5mZWN0aW9uX2NvdmlkIiwKICAgICAgICAgICAgICAgICAgICAgInEzMV9jb25jZXJuX2luZmVjdGlvbl9mcmllbmRzIiwKICAgICAgICAgICAgICAgICAgICAgInEzM18wMV9jb25jZXJuX3NpdHVhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICJxMzNfMDJfY29uY2Vybl9sb3dfY29udHJvbCIsCiAgICAgICAgICAgICAgICAgICAgICJxMzNfMDNfY29uY2Vybl9zdXJ2aXZhbF9jb3ZpZCIsCiAgICAgICAgICAgICAgICAgICAgICJxMzNfMDVfY29uY2Vybl9pbmZlY3Rpbmdfb3RoZXJzIikpKSwKICAgIHJlc0NvdiA9IGxpc3QoKSwKICAgIGNpID0gVFJVRSwKICAgIHN0ZEVzdCA9IFRSVUUsCiAgICBmYWN0Q292RXN0ID0gRkFMU0UsCiAgICBmaXRNZWFzdXJlcyA9IGMoImNmaSIsICJ0bGkiLCAicm1zZWEiLCAic3JtciIpLAogICAgY29yUmVzID0gVFJVRSkKYGBgCgpgYGB7ciBjb25jZXJuIGluZGV4IGNyZWF0aW9uIGFuZCBkZXNjcmlwdGl2ZXMsIGNvbW1lbnQgPSAiIn0KIyBDcmVhdGluZyB0aGUgQ292aWQtMTktcmVsYXRlZCBjb25jZXJuL2FueGlldHkgaW5kZXgsIGNvbnNpc3Rpbmcgb2YgdGhlIGF2ZXJhZ2Ugb2YgCiMgdGhlIHZhbHVlcyBvZiB0aGUgbXVsdGlwbGUgdmFyaWFibGVzIHNlbGVjdGVkIHRocm91Z2ggZmFjdG9yIGFuYWx5c2lzIHRvCiMgcmVwcmVzZW50IHRoZSB1bmRlcmx5aW5nIGNvbnN0cnVjdC4KCmNvbmNlcm5faW5kZXggPC0gYXBwbHkoY2JpbmQoZGF0YSRxMzBfY29uY2Vybl9pbmZlY3Rpb25fY292aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSRxMzFfY29uY2Vybl9pbmZlY3Rpb25fZnJpZW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhJHEzM18wMV9jb25jZXJuX3NpdHVhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhJHEzM18wMl9jb25jZXJuX2xvd19jb250cm9sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEkcTMzXzAzX2NvbmNlcm5fc3Vydml2YWxfY292aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSRxMzNfMDVfY29uY2Vybl9pbmZlY3Rpbmdfb3RoZXJzKSwgMSwgbWVhbikKCiNBZGRpbmcgdGhlIHZlY3RvciBhcyBhbiBjb2x1bW4gdG8gdGhlIGV4aXN0aW5nIGRhdGFzZXQuCgpkYXRhIDwtIGNiaW5kKGRhdGEsIGNvbmNlcm5faW5kZXgpCmRhdGFfY29yciA8LSBjYmluZChkYXRhX2NvcnIsIGNvbmNlcm5faW5kZXgpCgoKI1RvIHN1bW1hcml6ZSB0aGUgY29uY2Vybl9pbmRleCB2YXJpYWJsZSwgd2UgdXNlIHRoZSBkZXNjcmlwdGl2ZXMoKSAKIyBmdW5jdGlvbiBmcm9tIHRoZSBqbXYgcGFja2FnZS4KCmFueF9pbmRleF9kZXNjcmlwdGl2ZXMgPC0gam12OjpkZXNjcmlwdGl2ZXMoZGF0YSA9IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFycyA9ICJjb25jZXJuX2luZGV4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFuID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGMgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBUUlVFKQoKIyBGdW5jdGlvbiB0byBnZXQgdGhlIHJlc3VsdCBmcm9tIHRoZSBjb3JyZWxhdGlvbiBtYXRyaXggaW50byBhIGRhdGEgZnJhbWUKZmxhdHRlbkNvcnJNYXRyaXggPC0gZnVuY3Rpb24oY29ybWF0LCBwbWF0KSB7CiAgdXQgPC0gdXBwZXIudHJpKGNvcm1hdCkKICBkYXRhLmZyYW1lKAogICAgcm93ID0gcm93bmFtZXMoY29ybWF0KVtyb3coY29ybWF0KVt1dF1dLAogICAgY29sdW1uID0gcm93bmFtZXMoY29ybWF0KVtjb2woY29ybWF0KVt1dF1dLAogICAgY29yID0gKGNvcm1hdClbdXRdLAogICAgcCA9IHBtYXRbdXRdCiAgICApCn0KCiNDb3JyZWxhdGlvbiBtYXRyaXggdXNpbmcgU3BlYXJtYW4gY29lZmZpY2llbnQgCmNvcnJfbXR4IDwtIHJjb3JyKGFzLm1hdHJpeChkYXRhX2NvcnIpLCB0eXBlID0gInNwZWFybWFuIikKIAojIFNlbGVjdGluZyBvbmx5IHNpZ25pZmljYW50IGNvcnJlbGF0ZXMgZm9yIFBIUTggKHZhbHVlcyB3aXRoIHA+MC4wNSBhcmUgZXhjbHVkZWQpCmZsYXR0ZW5Db3JyTWF0cml4KGNvcnJfbXR4JHIsIGNvcnJfbXR4JFApICU+JSBmaWx0ZXIocCA8PSAwLjA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiAlaW4lIGMoIlBIUThfdCIpKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJhbmdlKGRlc2MoYWJzKGNvcikpKQoKIyBTZWxlY3Rpbmcgb25seSBzaWduaWZpY2FudCBjb3JyZWxhdGVzIGZvciBjb25jZXJuIGluZGV4ICh2YWx1ZXMgd2l0aCBwPjAuMDUgYXJlIGV4Y2x1ZGVkKQpmbGF0dGVuQ29yck1hdHJpeChjb3JyX210eCRyLCBjb3JyX210eCRQKSAlPiUgZmlsdGVyKHAgPD0gMC4wNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gJWluJSBjKCJjb25jZXJuX2luZGV4IikpICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UoZGVzYyhhYnMoY29yKSkpCmBgYAoKIyMjIENvdmlkLTE5IGNvbmNlcm4gaW5kZXggcmVzdWx0cyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKIyMjIyBQbG90cwoKYGBge3IgYW54IGluZGV4IHBsb3QsIGNvbW1lbnQgPSAiIn0KCmRhdGEgJT4lCiAgZmlsdGVyKGNvbmNlcm5faW5kZXggIT0gIk5BIikgJT4lIAogIGdncGxvdChhZXMoeSA9IGNvbmNlcm5faW5kZXgpKSArCiAgICAgICAgIGdlb21fYm94cGxvdChmaWxsID0gIiM0REJCRDVDQyIpICsKICAgICAgICAgdGhlbWVfYncoKSArCiAgICAgICAgIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTAsIDEpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNlcSgwLCAxMCwgMSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCAxMCkpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCAKICAgICAgICAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgICAgICAgIGF4aXMubGluZS54ID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSkgKyAKICAgICAgICAgeWxhYigiQ29uY2VybiBJbmRleCIpCgpkYXRhICU+JSAKICAgZmlsdGVyKGNvbmNlcm5faW5kZXggIT0gIk5BIikgJT4lIAogICBnZ3Bsb3QoYWVzKHggPSBjb25jZXJuX2luZGV4KSkgKwogICAgICAgIGdlb21fZGVuc2l0eShmaWxsID0gIiM0REJCRDVDQyIpICsKICAgICAgICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEwLCAxKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNlcSgwLCAxMCwgMSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDAsIDEwKSkgKwogICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArIAogICAgICAgICB4bGFiKCJDb25jZXJuIEluZGV4IikKYGBgCgojIyMjIERlc2NyaXB0aXZlcwoKYGBge3IgYW54IGluZGV4IHJlc3VsdHMsIGNvbW1lbnQgPSAiIn0KYW54X2luZGV4X2Rlc2NyaXB0aXZlcyRkZXNjcmlwdGl2ZXMJCmBgYAoKIyBQYXRoIGFuYWx5c2lzIHdpdGggYSBzaW1wbGlmaWVkIG1vZGVsCgojIyBNb2RlcmF0ZWQgbWVkaWF0aW9uIG1vZGVsIGRpYWdyYW1zIGFuZCBwcmUtcHJvY2Vzc2luZwoKYGBge3IgSGF5ZXMgbW9kZWwgNzYgcHJlLXByb2Nlc3Npbmd9CiMgQmVmb3JlIHJ1bm5pbmcgdGhlIG1vZGVsLCB3ZSBuZWVkIHRvIHRyYW5zZm9ybSB0aGUgc29jaWFsIG1lZGlhIHN0cmluZyAKIyBkdW1teSAoeWVzL25vKSBiYWNrIHRvIGl0cyBudW1lcmljIGZvcm0sIHdpdGggc2ltaWxhciBvcGVyYXRpb24gZm9yIGdlbmRlci4KCmxldmVscyhkYXRhJHExOF8wMl9zb2NfbWVkaWEpIDwtIGxpc3QoIjEiID0gInllcyIsICIwIiA9ICJubyIpCmxldmVscyhkYXRhJHEwMV9nZW5kZXIpIDwtIGxpc3QoIjAiID0gIm1hbGUiLCAiMSIgPSAiZmVtYWxlIiwgIjIiID0gIm90aGVyIikKZGF0YSRxMDFfZ2VuZGVyIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKGRhdGEkcTAxX2dlbmRlcikpCmRhdGEkcTE4XzAyX3NvY19tZWRpYSA8LSBhcy5udW1lcmljKGFzLmNoYXJhY3RlcihkYXRhJHExOF8wMl9zb2NfbWVkaWEpKQoKIyBDZW50ZXJpbmcgY29udGludW91cyB2YXJpYWJsZXMgd2l0aCBzY2FsaW5nCmRhdGFfc2VtIDwtIGRhdGEgJT4lIAogICAgICAgICAgICBmaWx0ZXIocTAxX2dlbmRlciAhPSAyLCAhaXMubmEoY29uY2Vybl9pbmRleCkpICU+JSAKICAgICAgICAgICAgbXV0YXRlKGNvbmNlcm5faW5kZXguYyA9IHNjYWxlKGNvbmNlcm5faW5kZXgsIHNjYWxlID0gVFJVRSksCiAgICAgICAgICAgICAgICAgICBQSFE4LmMgPSBzY2FsZShQSFE4X3QsIHNjYWxlID0gVFJVRSksCiAgICAgICAgICAgICAgICAgICBxMDJfYWdlLmMgPSBzY2FsZShxMDJfYWdlLCBzY2FsZSA9IFRSVUUpKQoKIyBMYWJlbHMgZm9yIGRpYWdyYW1zCmxhYmVsc19INzYgPC0gbGlzdChYID0gIlNvY2lhbCBNZWRpYSIsIAogICAgICAgICAgICAgICAgICAgTSA9ICJDb25jZXJuIiwgCiAgICAgICAgICAgICAgICAgICBZID0gIkRlcHJlc3Npb24iLCAKICAgICAgICAgICAgICAgICAgIFcgPSAiQWdlIiwgCiAgICAgICAgICAgICAgICAgICBaID0gIkdlbmRlciIpCmBgYAoKIyMjIFBhdGggYW5hbHlzaXMgbW9kZWwgc3RydWN0dXJlIHsudGFic2V0IC50YWJzZXQtcGlsbHN9CgojIyMjIENvbmNlcHR1YWwgZGlhZ3JhbQoKYGBge3IgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9OX0KcG1hY3JvTW9kZWwobm8gPSA3NiwKICAgICAgICAgICAgbGFiZWxzID0gbGFiZWxzX0g3NiwKICAgICAgICAgICAgeG1hcmdpbiA9IDAsCiAgICAgICAgICAgIHJhZHkgPSAwLjA0NywKICAgICAgICAgICAgcmFkeCA9IDAuMDksCiAgICAgICAgICAgIHlsaW0gPSBjKDAuMTUsIDAuOCkpCmBgYAoKIyMjIyBTdGF0aXN0aWNhbCBkaWFncmFtIHdpdGggcGF0aCBuYW1lcwoKYGBge3IgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9OX0Kc3RhdGlzdGljYWxEaWFncmFtKG5vID0gNzYsCiAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsYWJlbHNfSDc2LAogICAgICAgICAgICAgICAgICAgd2hhdExhYmVsID0gIm5hbWUiLAogICAgICAgICAgICAgICAgICAgeG1hcmdpbiA9IDAuMDEsCiAgICAgICAgICAgICAgICAgICByYWR5ID0gMC4wMywKICAgICAgICAgICAgICAgICAgIHJhZHggPSAwLjExLAogICAgICAgICAgICAgICAgICAgeWxpbSA9IGMoMC4wNiwgMC45NSksCiAgICAgICAgICAgICAgICAgICB4bGltID0gYygwLjAxLCAxKSkKYGBgCgojIyBNb2RlcmF0ZWQgbWVkaWF0aW9uIG1vZGVsIHNwZWNpZmljYXRpb24gYW5kIHJlc3VsdHMKCkluIHRoZSBzZWNvbmQgc3RlcCwgd2Ugc3BlY2lmeSB0aGUga2V5IHBhdGh3YXlzIGFuZCBydW4gdGhlIGFuYWx5c2lzLCB3aGlsZSBib290c3RyYXBwaW5nIHRoZSBjb25maWRlbmNlIGludGVydmFscy4KCmBgYHtyIEhheWVzIG1vZGVsIDc2LCB3YXJuaW5nPUZBTFNFLCBjb21tZW50ID0gIiJ9CiMgTWVkaWF0aW9uLW1vZGVyYXRpb24gYW5hbHlzaXMgKHBhdGggYW5hbHlzaXMgZnJhbWV3b3JrLCBTRU0pIHVzaW5nIGxhdmFhbiBwYWNrYWdlLgoKIyBGaXJzdCwgd2Ugc3BlY2lmeSB0aGUgbW9kZWwgcGF0aHdheXMKc3BlY19tb2QgPC0gIgojIFJlZ3Jlc3Npb25zCmNvbmNlcm5faW5kZXguYyB+IGExKnExOF8wMl9zb2NfbWVkaWEgKyBhMipxMDJfYWdlLmMgKyBhMypxMDFfZ2VuZGVyICsgYTQqcTE4XzAyX3NvY19tZWRpYTpxMDJfYWdlLmMgKyBhNSpxMThfMDJfc29jX21lZGlhOnEwMV9nZW5kZXIKClBIUTguYyB+IGMxKnExOF8wMl9zb2NfbWVkaWEgKyBjMipxMDJfYWdlLmMgKyBjMypxMDFfZ2VuZGVyICsgYzQqcTE4XzAyX3NvY19tZWRpYTpxMDJfYWdlLmMgKyBjNSpxMThfMDJfc29jX21lZGlhOnEwMV9nZW5kZXIgKyBiMSpjb25jZXJuX2luZGV4LmMgKyBiMipjb25jZXJuX2luZGV4LmM6cTAyX2FnZS5jICsgYjMqY29uY2Vybl9pbmRleC5jOnEwMV9nZW5kZXIKCiNNZWFuIGFuZCB2YXJpYW5jZSBvZiBhZ2UgYW5kIGdlbmRlciBtb2RlcmF0b3JzCnEwMl9hZ2UuYyB+IHEwMl9hZ2UuYy5tZWFuKjEKcTAyX2FnZS5jIH5+IHEwMl9hZ2UuYy52YXIqcTAyX2FnZS5jCnEwMV9nZW5kZXIgfiBxMDFfZ2VuZGVyLm1lYW4qMQpxMDFfZ2VuZGVyIH5+IHEwMV9nZW5kZXIudmFyKnEwMV9nZW5kZXIKCiMgRWZmZWN0IHNwZWNpZmljYXRpb25zClhvbk0gOj0gYTEgKyBhNCpxMDJfYWdlLmMubWVhbiArIGE1KnEwMV9nZW5kZXIubWVhbgpNb25ZIDo9IGIxICsgYjIqcTAyX2FnZS5jLm1lYW4gKyBiMypxMDFfZ2VuZGVyLm1lYW4KaW5kaXJlY3QgOj0gKGExICsgYTQqcTAyX2FnZS5jLm1lYW4gKyBhNSpxMDFfZ2VuZGVyLm1lYW4pKihiMSArIGIyKnEwMl9hZ2UuYy5tZWFuICsgYjMqcTAxX2dlbmRlci5tZWFuKQpkaXJlY3QgOj0gYzEgKyBjNCpxMDJfYWdlLmMubWVhbiArIGM1KnEwMV9nZW5kZXIubWVhbgp0b3RhbCA6PSBkaXJlY3QgKyBpbmRpcmVjdApwcm9wLm1lZGlhdGVkIDo9IGluZGlyZWN0IC8gdG90YWwKCiMgQ29tcG9uZW50IGVmZmVjdHMgY29uZGl0aW9uYWwgb24gbW9kZXJhdG9ycyAoWCA9IFNvY2lhbCBNZWRpYSwgTSA9IENvbmNlcm4sIFkgPSBEZXByZXNzaW9uLCBXID0gQWdlLCBaID0gR2VuZGVyKQpYb25NLm1lYW4ubWFsZSA6PSBhMSArIGE0KnEwMl9hZ2UuYy5tZWFuICsgYTUqMApYb25NLm1lYW4uZmVtYWxlIDo9IGExICsgYTQqcTAyX2FnZS5jLm1lYW4gKyBhNSoxCgpYb25NLmJsdy5tYWxlIDo9IGExICsgYTQqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBhNSowClhvbk0uYmx3LmZlbWFsZSA6PSBhMSArIGE0KihxMDJfYWdlLmMubWVhbiAtIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMQpYb25NLmJsdy5hdmcgOj0gYTEgKyBhNCoocTAyX2FnZS5jLm1lYW4gLSBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGE1KnEwMV9nZW5kZXIubWVhbgoKWG9uTS5hYnYubWFsZSA6PSBhMSArIGE0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMApYb25NLmFidi5mZW1hbGUgOj0gYTEgKyBhNCoocTAyX2FnZS5jLm1lYW4gKyBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGE1KjEKWG9uTS5hYnYuYXZnIDo9IGExICsgYTQqKHEwMl9hZ2UuYy5tZWFuICsgc3FydChxMDJfYWdlLmMudmFyKSkgKyBhNSpxMDFfZ2VuZGVyLm1lYW4KCk1vblkubWVhbi5tYWxlIDo9IGIxICsgYjIqcTAyX2FnZS5jLm1lYW4gKyBiMyowCk1vblkubWVhbi5mZW1hbGUgOj0gYjEgKyBiMipxMDJfYWdlLmMubWVhbiArIGIzKjEKCk1vblkuYmx3Lm1hbGUgOj0gYjEgKyBiMioocTAyX2FnZS5jLm1lYW4gLSBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGIzKjAKTW9uWS5ibHcuZmVtYWxlIDo9IGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyoxCk1vblkuYmx3LmF2ZyA6PSBiMSArIGIyKihxMDJfYWdlLmMubWVhbiAtIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYjMqcTAxX2dlbmRlci5tZWFuCgpNb25ZLmFidi5tYWxlIDo9IGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuICsgc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyowCk1vblkuYWJ2LmZlbWFsZSA6PSBiMSArIGIyKihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYjMqMQpNb25ZLmFidi5hdmcgOj0gYjEgKyBiMioocTAyX2FnZS5jLm1lYW4gKyBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGIzKnEwMV9nZW5kZXIubWVhbgoKIyBJbmRpcmVjdCBlZmZlY3RzIGNvbmRpdGlvbmFsIG9uIG1vZGVyYXRvcnMKaW5kaXJlY3QubWVhbi5tYWxlIDo9IChhMSArIGE0KnEwMl9hZ2UuYy5tZWFuICsgYTUqMCkqKGIxICsgYjIqcTAyX2FnZS5jLm1lYW4gKyBiMyowKQppbmRpcmVjdC5tZWFuLmZlbWFsZSA6PSAoYTEgKyBhNCpxMDJfYWdlLmMubWVhbiArIGE1KjEpKihiMSArIGIyKnEwMl9hZ2UuYy5tZWFuICsgYjMqMSkKCmluZGlyZWN0LmJsdy5tYWxlIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiAtIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMCkqKGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyowKQppbmRpcmVjdC5ibHcuZmVtYWxlIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiAtIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMSkqKGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyoxKQppbmRpcmVjdC5ibHcuYXZnIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiAtIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqcTAxX2dlbmRlci5tZWFuKSooYjEgKyBiMioocTAyX2FnZS5jLm1lYW4gLSBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGIzKnEwMV9nZW5kZXIubWVhbikKCmluZGlyZWN0LmFidi5tYWxlIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMCkqKGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuICsgc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyowKQppbmRpcmVjdC5hYnYuZmVtYWxlIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqMSkqKGIxICsgYjIqKHEwMl9hZ2UuYy5tZWFuICsgc3FydChxMDJfYWdlLmMudmFyKSkgKyBiMyoxKQppbmRpcmVjdC5hYnYuYXZnIDo9IChhMSArIGE0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYTUqcTAxX2dlbmRlci5tZWFuKSooYjEgKyBiMioocTAyX2FnZS5jLm1lYW4gKyBzcXJ0KHEwMl9hZ2UuYy52YXIpKSArIGIzKnEwMV9nZW5kZXIubWVhbikKCiMgRGlyZWN0IGVmZmVjdHMgY29uZGl0aW9uYWwgb24gbW9kZXJhdG9ycwpkaXJlY3QubWVhbi5tYWxlIDo9IGMxICsgYzQqcTAyX2FnZS5jLm1lYW4gKyBjNSowCmRpcmVjdC5tZWFuLmZlbWFsZSA6PSBjMSArIGM0KnEwMl9hZ2UuYy5tZWFuICsgYzUqMQoKZGlyZWN0LmJsdy5tYWxlIDo9IGMxICsgYzQqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBjNSowCmRpcmVjdC5ibHcuZmVtYWxlIDo9IGMxICsgYzQqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBjNSoxCmRpcmVjdC5ibHcuYXZnIDo9IGMxICsgYzQqKHEwMl9hZ2UuYy5tZWFuIC0gc3FydChxMDJfYWdlLmMudmFyKSkgKyBjNSpxMDFfZ2VuZGVyLm1lYW4KCmRpcmVjdC5hYnYubWFsZSA6PSBjMSArIGM0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYzUqMApkaXJlY3QuYWJ2LmZlbWFsZSA6PSBjMSArIGM0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYzUqMQpkaXJlY3QuYWJ2LmF2ZyA6PSBjMSArIGM0KihxMDJfYWdlLmMubWVhbiArIHNxcnQocTAyX2FnZS5jLnZhcikpICsgYzUqcTAxX2dlbmRlci5tZWFuCgojIFRvdGFsIGVmZmVjdHMgY29uZGl0aW9uYWwgb24gbW9kZXJhdG9ycwp0b3RhbC5tZWFuLm1hbGUgOj0gZGlyZWN0Lm1lYW4ubWFsZSArIGluZGlyZWN0Lm1lYW4ubWFsZQp0b3RhbC5tZWFuLmZlbWFsZSA6PSBkaXJlY3QubWVhbi5mZW1hbGUgKyBpbmRpcmVjdC5tZWFuLmZlbWFsZQoKdG90YWwuYmx3Lm1hbGUgOj0gZGlyZWN0LmJsdy5tYWxlICsgaW5kaXJlY3QuYmx3Lm1hbGUKdG90YWwuYmx3LmZlbWFsZSA6PSBkaXJlY3QuYmx3LmZlbWFsZSArIGluZGlyZWN0LmJsdy5mZW1hbGUKdG90YWwuYmx3LmF2ZyA6PSBkaXJlY3QuYmx3LmF2ZyArIGluZGlyZWN0LmJsdy5hdmcKCnRvdGFsLmFidi5tYWxlIDo9IGRpcmVjdC5hYnYubWFsZSArIGluZGlyZWN0LmFidi5tYWxlCnRvdGFsLmFidi5mZW1hbGUgOj0gZGlyZWN0LmFidi5mZW1hbGUgKyBpbmRpcmVjdC5hYnYuZmVtYWxlCnRvdGFsLmFidi5hdmcgOj0gZGlyZWN0LmFidi5hdmcgKyBpbmRpcmVjdC5hYnYuYXZnCgojIFByb3BvcnRpb24gbWVkaWF0ZWQgY29uZGl0aW9uYWwgb24gbW9kZXJhdG9ycwpwcm9wLm1lZC5tZWFuLm1hbGUgOj0gaW5kaXJlY3QubWVhbi5tYWxlIC8gdG90YWwubWVhbi5tYWxlCnByb3AubWVkLm1lYW4uZmVtYWxlIDo9IGluZGlyZWN0Lm1lYW4uZmVtYWxlIC8gdG90YWwubWVhbi5mZW1hbGUKCnByb3AubWVkLmJsdy5tYWxlIDo9IGluZGlyZWN0LmJsdy5tYWxlIC8gdG90YWwuYmx3Lm1hbGUKcHJvcC5tZWQuYmx3LmZlbWFsZSA6PSBpbmRpcmVjdC5ibHcuZmVtYWxlIC8gdG90YWwuYmx3LmZlbWFsZQpwcm9wLm1lZC5ibHcuYXZnIDo9IGluZGlyZWN0LmJsdy5hdmcgLyB0b3RhbC5ibHcuYXZnCgpwcm9wLm1lZC5hYnYubWFsZSA6PSBpbmRpcmVjdC5hYnYubWFsZSAvIHRvdGFsLmFidi5tYWxlCnByb3AubWVkLmFidi5mZW1hbGUgOj0gaW5kaXJlY3QuYWJ2LmZlbWFsZSAvIHRvdGFsLmFidi5tYWxlCnByb3AubWVkLmFidi5hdmcgOj0gaW5kaXJlY3QuYWJ2LmF2ZyAvIHRvdGFsLmFidi5hdmciCgojIEZvciByZXByb2R1Y2liaWxpdHkgb2YgcmVzdWx0cyAodXNpbmcgYm9vdHN0cmFwKQpzZXQuc2VlZCgyMDIxKQoKIyBTZWNvbmRseSwgd2UgZml0L2VzdGltYXRlIHRoZSBtb2RlbCBhbmQgd2UgdXNlIGJvb3RzdHJhcCBmb3Igcm9idXN0bmVzcy4KZml0X21vZCA8LSBsYXZhYW46OnNlbShtb2RlbCA9IHNwZWNfbW9kLAogICAgICAgICAgICAgICBkYXRhID0gZGF0YV9zZW0sCiAgICAgICAgICAgICAgIHNlID0gImJvb3RzdHJhcCIsCiAgICAgICAgICAgICAgIGJvb3RzdHJhcCA9IDEwMDApCgojIExhYmVscyBmb3Igc3RhdGlzdGljYWwgZGlhZ3JhbXMKbGFiZWxzX3N0YXRzX0g3NiA8LSBsaXN0KFggPSAicTE4XzAyX3NvY19tZWRpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBNID0gImNvbmNlcm5faW5kZXguYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBZID0gIlBIUTguYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBXID0gInEwMl9hZ2UuYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBaID0gInEwMV9nZW5kZXIiKQpgYGAKCiMjIyBQYXRoIGFuYWx5c2lzIG1vZGVsIHN1bW1hcnksIGVzdGltYXRlcyBhbmQgc3RhdGlzdGljYWwgZGlhZ3JhbSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKIyMjIyBEaWFncmFtIHdpdGggdW5zdGFuZGFyZGl6ZWQgY29lZmZpY2llbnRzCgpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD05fQpzdGF0aXN0aWNhbERpYWdyYW0obm8gPSA3NiwKICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGxhYmVsc19zdGF0c19INzYsCiAgICAgICAgICAgICAgICAgICBmaXQgPSBmaXRfbW9kLAogICAgICAgICAgICAgICAgICAgd2hhdExhYmVsID0gImVzdCIsCiAgICAgICAgICAgICAgICAgICB4bWFyZ2luID0gMC4wMSwKICAgICAgICAgICAgICAgICAgIHJhZHkgPSAwLjAzLAogICAgICAgICAgICAgICAgICAgcmFkeCA9IDAuMTU4LAogICAgICAgICAgICAgICAgICAgeWxpbSA9IGMoMC4wNiwgMC45NSksCiAgICAgICAgICAgICAgICAgICB4bGltID0gYygwLjAxLCAxKSkKYGBgCgojIyMjIERpYWdyYW0gd2l0aCBzdGFuZGFyZGl6ZWQgY29lZmZpY2llbnRzCgpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD05fQpzdGF0aXN0aWNhbERpYWdyYW0obm8gPSA3NiwKICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGxhYmVsc19zdGF0c19INzYsCiAgICAgICAgICAgICAgICAgICBmaXQgPSBmaXRfbW9kLAogICAgICAgICAgICAgICAgICAgd2hhdExhYmVsID0gInN0ZCIsCiAgICAgICAgICAgICAgICAgICB4bWFyZ2luID0gMC4wMSwKICAgICAgICAgICAgICAgICAgIHJhZHkgPSAwLjAzLAogICAgICAgICAgICAgICAgICAgcmFkeCA9IDAuMTU4LAogICAgICAgICAgICAgICAgICAgeWxpbSA9IGMoMC4wNiwgMC45NSksCiAgICAgICAgICAgICAgICAgICB4bGltID0gYygwLjAxLCAxKSkKYGBgCgojIyMjIERldGFpbGVkIG1vZGVsIHN1bW1hcnkKCmBgYHtyLCAgY29tbWVudCA9ICIifQpsYXZhYW46OnN1bW1hcnkoZml0X21vZCwgCiAgICAgICAgICAgICAgICByc3F1YXJlID0gVFJVRSwgCiAgICAgICAgICAgICAgICBjaSA9IFRSVUUsCiAgICAgICAgICAgICAgICBmaXQubWVhc3VyZXMgPSBUUlVFLAogICAgICAgICAgICAgICAgc3RhbmRhcmRpemUgPSBUUlVFKQpgYGAKCiMjIyMgVGFibGUgb2YgbW9kZWwgZXN0aW1hdGVzCgpgYGB7cn0KZXN0aW1hdGVzIDwtIHBhcmFtZXRlckVzdGltYXRlcyhmaXRfbW9kLCBzdGFuZGFyZGl6ZWQgPSBUUlVFKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKG9wID09ICJ+IikgJT4lIAogICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtYyhzdGQubm94KSkKCnBfYWRqIDwtIHAuYWRqdXN0KGVzdGltYXRlcyRwdmFsdWUsIG1ldGhvZCA9ICJob2xtIikKCmVzdGltYXRlcyA8LSBjYmluZChlc3RpbWF0ZXMsIHBfYWRqKQoKa2JsKGVzdGltYXRlcykgJT4lCmthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEZBTFNFLCBsaWdodGFibGVfb3B0aW9ucyA9IGMoInN0cmlwZWQiKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgcm93X3NwZWMocm93ID0gd2hpY2goZXN0aW1hdGVzJHBfYWRqIDwgMC4wNSksIGJvbGQgPSBUUlVFKQpgYGAKCiMjIyMgVGFibGUgb2YgZGVmaW5lZCBwYXJhbWV0ZXJzCgpgYGB7cn0KcGFyYW1ldGVycyA8LSBwYXJhbWV0ZXJFc3RpbWF0ZXMoZml0X21vZCwgc3RhbmRhcmRpemVkID0gVFJVRSkgJT4lIAogICAgICAgICAgICAgICAgICAgIGZpbHRlcihvcCA9PSAiOj0iKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1jKG9wLCBsaHMsIHJocywgc3RkLm5veCkpCgpwX2FkaiA8LSBwLmFkanVzdChwYXJhbWV0ZXJzJHB2YWx1ZSwgbWV0aG9kID0gImhvbG0iKQoKcGFyYW1ldGVycyA8LSBjYmluZChwYXJhbWV0ZXJzLCBwX2FkaikKCmtibChwYXJhbWV0ZXJzKSAlPiUKa2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRkFMU0UsIGxpZ2h0YWJsZV9vcHRpb25zID0gYygic3RyaXBlZCIpKSAlPiUKICAgICAgICAgICAgICAgICAgICByb3dfc3BlYyhyb3cgPSB3aGljaChwYXJhbWV0ZXJzJHBfYWRqIDwgMC4wNSksIGJvbGQgPSBUUlVFKQpgYGAKCgojIENsdXN0ZXJpbmcgKEstTWVkb2lkcykKCldlIGFyZSBjb25kdWN0aW5nIGNsdXN0ZXJpbmcgd2l0aCB0aGUgSy1NZWRvaWRzIGFsZ29yaXRobSB0byBmaW5kIGRpc3RpbmN0IGdyb3VwcyBpbiBvdXIgZGF0YXNldC4gV2UgYXJlIG9ubHkgdXNpbmcgYSBzdWJzZXQgb2YgdGhlIGRhdGFzZXQsIHdoaWNoIGNvbnRhaW5zIHZhbHVlcyB0aGF0IHdlIHVzZWQgaW4gdGhlIHByZXZpb3VzIHN0ZXAgd2l0aGluIHRoZSBwYXRoIG1vZGVsIC0gYWdlLCBnZW5kZXIsIHNvY2lhbCBtZWRpYSwgY29uY2VybiBpbmRleCBhbmQgUEhROC4gVGhlIHJlYXNvbmluZyBpcyB0byBzdXBwbGVtZW50IHRoZSBpbnNpZ2h0cyBmcm9tIHRoZSBwYXRoIG1vZGVsLCB3aGlsZSBhbHNvIGxpbWl0aW5nIG91cnNlbHZlcyBvbmx5IHRvIHRoZSBjb3JlIHZhcmlhYmxlcywgbW9zdCBvZiB0aGVtIHNob3dpbmcgcmVsYXRpdmVseSBzdHJvbmcgZWZmZWN0cyBpbiB0aGUgcmVncmVzc2lvbiBtb2RlbHMuCgpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQoKbGlicmFyeShmcGMpCmxpYnJhcnkoTmJDbHVzdCkKCmRhdGFfc2NhbGVkIDwtIGRhdGEgJT4lCiBzZWxlY3QocTAxX2dlbmRlciwgcTAyX2FnZSwgcTE4XzAyX3NvY19tZWRpYSwgUEhROCwgY29uY2Vybl9pbmRleCkgJT4lCiBuYS5vbWl0KCkgJT4lCiBzY2FsZSgpCmRhdGFfc2NhbGVkIDwtIG5hLm9taXQoc2NhbGUoZGF0YV9jb3JyKSkKCiMgQ2FsY3VsYXRlIHRoZSBtYXRyaXggb2YgZGlzdGFuY2UsIHdlIGNhbiBjaG9vc2UgZnJvbSBtYW55IG1ldGhvZHMKCm0uZGlzdGFuY2UgPC0gZ2V0X2Rpc3QoZGF0YV9zY2FsZWQsIG1ldGhvZCA9ICJrZW5kYWxsIikKZnZpel9kaXN0KG0uZGlzdGFuY2UsIGdyYWRpZW50ID0gbGlzdChsb3cgPSAiYmx1ZSIsIG1pZCA9ICJ3aGl0ZSIsIGhpZ2ggPSAicmVkIikpCmZ2aXpfbmJjbHVzdChkYXRhX3NjYWxlZCwgcGFtLCBtZXRob2QgPSAid3NzIikKZnZpel9uYmNsdXN0KGRhdGFfc2NhbGVkLCBwYW0sIG1ldGhvZCA9ICJzaWxob3VldHRlIikKZnZpel9uYmNsdXN0KGRhdGFfc2NhbGVkLCBwYW0sIG1ldGhvZCA9ICJnYXBfc3RhdCIpCnJlc251bWNsdXN0IDwtIE5iQ2x1c3QoZGF0YV9zY2FsZWQsIGRpc3RhbmNlID0gImV1Y2xpZGVhbiIsIG1pbi5uYyA9IDIsIG1heC5uYyA9IDEwLCBtZXRob2QgPSAibWVkaWFuIiwgaW5kZXggPSAiYWxsbG9uZyIpCgpyZXNudW1jbHVzdAoKZnZpel9uYmNsdXN0KHJlc251bWNsdXN0KQoKIyAzIHNlZW1zIHRvIGJlIHRoZSBzdWdnZXN0ZWQgbnVtYmVyIG9mIGNsdXN0ZXJzCgpgYGAKCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQoKZGF0YV9zY2FsZWQgPC0gZGF0YSAlPiUgCiAgc2VsZWN0KHEwMV9nZW5kZXIsIHEwMl9hZ2UsIHExOF8wMl9zb2NfbWVkaWEsIFBIUTgsIGNvbmNlcm5faW5kZXgpICU+JSAKICBuYS5vbWl0KCkgJT4lIAogIHNjYWxlKCkKCgpzZXQuc2VlZCgyMDIxKQoKcGFtMyA8LSBwYW0oZGF0YV9zY2FsZWQsIDMpCgojIHJlczMgPC0gaGN1dChkYXRhX3NjYWxlZCwgayA9IDMsIHN0YW5kID0gVFJVRSwgbWV0aG9kID0gIm1lZGlhbiIpCiMgZnZpel9kZW5kKHJlczMsIHJlY3QgPSBUUlVFLCBjZXggPSAwLjUsCiMgICAgICAgICAgIGtfY29sb3JzID0gInNpbXBzb25zIikKCgoKIyBjbHVzdGVyX3N1bSA8LSBhc190aWJibGUoZGF0YV9zY2FsZWQpICU+JQojICAgbXV0YXRlKGNsdXN0ZXIgPSBhc19mYWN0b3IocGFtMyRjbHVzdGVyaW5nKSkgJT4lCiMgICBncm91cF9ieShjbHVzdGVyKSAlPiUKIyAgIHN1bW1hcmlzZV9hbGwoIm1lYW4iKQoKYGBgCgojIyMgQ2x1c3RlcmluZyB2aXN1YWxpc2F0aW9ucyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQoKIyMjIyBWaXN1YWxpc2F0aW9uIG9mIHRoZSBjbHVzdGVycwoKYGBge3J9CmZ2aXpfY2x1c3RlcihwYW0zLCBkYXRhID0gZGF0YV9zY2FsZWQsIGVsbGlwc2UudHlwZSA9ICJub3JtIiwgcGFsZXR0ZSA9IGMoIiNFNjRCMzU5OSIsICIjNERCQkQ1OTkiLCAiIzAwQTA4Nzk5IiksIGdndGhlbWUgPSB0aGVtZV9idygpLCBtYWluID0gIkNsdXN0ZXIgcGxvdCAtIEstTWVkb2lkcyBhbGdvcml0aG0iKQpgYGAKCiMjIyMgTWVhbiB2YWx1ZXMgb2YgdGhlIGRpc3RpbmN0IGdyb3VwcwoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZGF0YV9zY2FsZWRfZGYgPC0gYXNfdGliYmxlKGRhdGFfc2NhbGVkKQpkYXRhX3NjYWxlZF9kZiRjbHVzdGVyIDwtIGFzX2ZhY3RvcihwYW0zJGNsdXN0ZXJpbmcpCmRhdGFfc2NhbGVkX2RmX2xvbmcgPC0gZGF0YV9zY2FsZWRfZGYgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gcTAxX2dlbmRlcjpjb25jZXJuX2luZGV4LCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpCgpnZ3Bsb3QoZGF0YV9zY2FsZWRfZGZfbG9uZywgYWVzKHggPSB2YXJpYWJsZSwgeSA9IHZhbHVlLCBncm91cCA9IGNsdXN0ZXIsIGNvbG91ciA9IGNsdXN0ZXIpKSArIAogICAgICAgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGdlb20gPSAicG9pbnRyYW5nZSIsIHNpemUgPSAxLCBhZXMoc2hhcGUgPSBjbHVzdGVyKSkgKwogICAgICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAibGluZSIpICsKICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjRTY0QjM1Q0MiLCAiIzREQkJENUNDIiwgIiMwMEEwODdDQyIpKSArIAogICAgICAgZ2d0aXRsZSgiQXZlcmFnZSB2YWx1ZSBvZiBzZWxlY3RlZCB2YXJpYWJsZXMgcGVyIGNsdXN0ZXIiKSArIAogICAgICAgdGhlbWVfYncoKSArCiAgICAgICB5bGFiKCJyZWxhdGl2ZSB2YWx1ZSIpCgpgYGAKCg==