library(tidyverse)
library(corrr)
library(plotly)
library(ggplot2)
library(dplyr)
library(reshape2)
library(gplots)
library(data.table)
library(ggpubr)
library(xtable)
library(corrplot)
library(corrgram)

A survey was conducted examining how different subsets of people view vaccinations for children. The groups were organized based on sex, age, education levels, whether or not they had children, location(state); whether or not they believed in vaccinating; credible data from various sources; links between autism and MMR vaccination; their concern for side-effects in various areas. Survey was conducted via a link that participants responded to which means that they voluntered to take the survey. The were not compensated.

The link is listed below in correspondence with the import of the data.

survey <- read_csv("https://docs.google.com/spreadsheets/d/138AJq8uaPl0XlF3Bjj3q0g_Pb3RbmBQLFazj4hhJalw/export?format=csv")
Parsed with column specification:
cols(
  Timestamp = col_character(),
  `What is your sex?` = col_character(),
  `What is your age?` = col_character(),
  `What is your highest education completed?` = col_character(),
  `If you went to college, what was your major?` = col_character(),
  `Do you have children?` = col_character(),
  `What state are you from?` = col_character(),
  `Are you religious?` = col_double(),
  `I believe children should be vaccinated.` = col_double(),
  `I trust the information I receive about shots.` = col_double(),
  `I believe that there could be a link between the MMR vaccination and autism.` = col_double(),
  `I worry about possible side effects of vaccinations.` = col_double(),
  `I believe the media exaggerates reports about disease outbreak and vaccinations.` = col_double(),
  `If I were to have a child today, I would want them to have all of the recommended vaccinations.` = col_double(),
  `Healthy children should be required to be vaccinated to attend school because of potential risks to others.` = col_double(),
  `If you wish to expand on any of your answers above, do so here:` = col_character()
)

This glimpse provides a overview of the data in its raw form. As participants were given the option of filling in data it is not formatted in a way that allows an examination of individuals as they were meant to be grouped.

glimpse(survey)
Observations: 305
Variables: 16
$ Timestamp                                                                                                     <chr> …
$ `What is your sex?`                                                                                           <chr> …
$ `What is your age?`                                                                                           <chr> …
$ `What is your highest education completed?`                                                                   <chr> …
$ `If you went to college, what was your major?`                                                                <chr> …
$ `Do you have children?`                                                                                       <chr> …
$ `What state are you from?`                                                                                    <chr> …
$ `Are you religious?`                                                                                          <dbl> …
$ `I believe children should be vaccinated.`                                                                    <dbl> …
$ `I trust the information I receive about shots.`                                                              <dbl> …
$ `I believe that there could be a link between the MMR vaccination and autism.`                                <dbl> …
$ `I worry about possible side effects of vaccinations.`                                                        <dbl> …
$ `I believe the media exaggerates reports about disease outbreak and vaccinations.`                            <dbl> …
$ `If I were to have a child today, I would want them to have all of the recommended vaccinations.`             <dbl> …
$ `Healthy children should be required to be vaccinated to attend school because of potential risks to others.` <dbl> …
$ `If you wish to expand on any of your answers above, do so here:`                                             <chr> …

Category response questions were simplified to better analyze the data and code.

survey <- survey %>%
  rename(Sex = `What is your sex?`,
         Age = `What is your age?`,
         CollegeEducation = `What is your highest education completed?`,
         CollegeMajor = `If you went to college, what was your major?`,
         Children = `Do you have children?`,
         HomeState = `What state are you from?`,
         Religious = `Are you religious?`,
         VaccinationBeliefs = `I believe children should be vaccinated.`,
         TrustIt = `I trust the information I receive about shots.`,
         AutismLink = `I believe that there could be a link between the MMR vaccination and autism.`,
         SideEffectsWorry = `I worry about possible side effects of vaccinations.`,
         Exaggeration = `I believe the media exaggerates reports about disease outbreak and vaccinations.`,
         WantVaccinations = `If I were to have a child today, I would want them to have all of the recommended vaccinations.`,
         RequiredVaccinations = `Healthy children should be required to be vaccinated to attend school because of potential risks to others.`,
         Expansion = `If you wish to expand on any of your answers above, do so here:`)

A review of data in altered form.

glimpse(survey)
Observations: 305
Variables: 16
$ Timestamp            <chr> "2/19/2019 19:39:42", "2/19/2019 20…
$ Sex                  <chr> "female", "Female", "Female", "Fema…
$ Age                  <chr> "21", "26", "40", "41", "31", "55",…
$ CollegeEducation     <chr> "Some college", "Some college", "So…
$ CollegeMajor         <chr> "criminal justice", "Psychology and…
$ Children             <chr> "No", "Yes", "Yes", "Yes", "No", "N…
$ HomeState            <chr> "montana", "Missouri", "Montana", "…
$ Religious            <dbl> 1, 4, 4, 2, 3, 3, 3, 2, 1, 2, 4, 4,…
$ VaccinationBeliefs   <dbl> 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1,…
$ TrustIt              <dbl> 2, 1, 4, 2, 2, 1, 2, 1, 1, 3, 2, 1,…
$ AutismLink           <dbl> 5, 5, 5, 3, 3, 3, 5, 5, 5, 3, 5, 5,…
$ SideEffectsWorry     <dbl> 5, 5, 2, 4, 3, 3, 3, 5, 4, 3, 4, 4,…
$ Exaggeration         <dbl> 1, 3, 2, 4, 4, 3, 4, 5, 1, 3, 3, 1,…
$ WantVaccinations     <dbl> 1, 1, 2, 1, 2, 1, 1, 1, 1, 3, 1, 1,…
$ RequiredVaccinations <dbl> 1, 1, 2, 1, 2, 1, 1, 1, 1, 3, 1, 1,…
$ Expansion            <chr> NA, NA, NA, NA, "I would do my rese…

Count of sex. Note the variations that exist.

survey %>%
  count(Sex)

As a way to correct and properly categorize the data, categories were merged into their appropriate designation. For example “F” or Female for female was

survey <- survey %>%
  mutate(Sex = str_to_lower(Sex))
survey$Sex <- recode(survey$Sex, "m" = "male",
                                 "f" = "female", 
                                 "F" = "female", 
                                 "femail" = "female", 
                                 "femal" = "female", 
                                 "feme" = "female",
                                 "gemale" = "female",
                                 "girl" = "female",
                                 "replace sex with gender! female" = "female",
                                 "republican ( male)" = "male",
                                 "mucho" = "male",
                                 "apache attack helicopter" = "other",
                                 "californian" = "other",
                                 "not enough" = "other",
                                 "snap-on tool box" = "other",
                                 "the rough, passionate kind" = "other")

Count of the different sex categories

survey %>%
  count(Sex)

Table reflecting the data on each gender and their views on vaccination

tbl = table(survey$Sex, survey$VaccinationBeliefs) 
tbl
        
           1   2   3   4   5
  female 192  21  12   5  18
  male    36   3   6   1   3
  other    4   1   0   0   0
glimpse(survey)
Observations: 305
Variables: 16
$ Timestamp            <chr> "2/19/2019 19:39:42", "2/19/2019 20…
$ Sex                  <chr> "female", "female", "female", "fema…
$ Age                  <chr> "21", "26", "40", "41", "31", "55",…
$ CollegeEducation     <chr> "Some college", "Some college", "So…
$ CollegeMajor         <chr> "criminal justice", "Psychology and…
$ Children             <chr> "No", "Yes", "Yes", "Yes", "No", "N…
$ HomeState            <chr> "montana", "Missouri", "Montana", "…
$ Religious            <dbl> 1, 4, 4, 2, 3, 3, 3, 2, 1, 2, 4, 4,…
$ VaccinationBeliefs   <dbl> 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1,…
$ TrustIt              <dbl> 2, 1, 4, 2, 2, 1, 2, 1, 1, 3, 2, 1,…
$ AutismLink           <dbl> 5, 5, 5, 3, 3, 3, 5, 5, 5, 3, 5, 5,…
$ SideEffectsWorry     <dbl> 5, 5, 2, 4, 3, 3, 3, 5, 4, 3, 4, 4,…
$ Exaggeration         <dbl> 1, 3, 2, 4, 4, 3, 4, 5, 1, 3, 3, 1,…
$ WantVaccinations     <dbl> 1, 1, 2, 1, 2, 1, 1, 1, 1, 3, 1, 1,…
$ RequiredVaccinations <dbl> 1, 1, 2, 1, 2, 1, 1, 1, 1, 3, 1, 1,…
$ Expansion            <chr> NA, NA, NA, NA, "I would do my rese…

x-squared testing to determine significance.

chisq.test(tbl) 
Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  tbl
X-squared = 5.8045, df = 8, p-value = 0.6691

In order to be statistically significant the p-value must not exceed .05. In this scenario the sex categories in comparison to their view points do not have significant differences as the p-value was 0.6691. Sex is not a contributing factor to the way individuals view vaccinations.

The following is an analysis of age versus beliefs on vaccination:

survey<-survey%>%
  mutate(Age = as.numeric(Age)) %>%
  mutate(Children = as_factor(Children))
NAs introduced by coercion

Mean vaccination agreement of group based on yes or no answer.

survey %>%
  drop_na(Children, VaccinationBeliefs) %>%
  group_by(Children) %>%
  summarize(VaccinationBeliefs = mean(VaccinationBeliefs))

A breakdown of each of the age categories.

survey %>%
  drop_na(Age, RequiredVaccinations) %>%
  group_by(Age) %>%
  summarize(RequiredVaccinations = mean(RequiredVaccinations))

X squared ananlysis if age is determining factor in a person’s beliefs on vaccinating children.

tbl = table(survey$Age, survey$VaccinationBeliefs) 
chisq.test(tbl)
Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  tbl
X-squared = 41.257, df = 16, p-value = 0.0005088

P-value is less than .05 therefor age is a contributing factor to their beliefs on vaccinations.

Different age groups are established.

setDT(survey)
survey[Age <20, Age := "under 20"]
survey[Age >19 & Age <30, Age := "20-29"]
survey[Age >29 & Age <40, Age := "30-39"]
survey[Age >39 & Age <50, Age := "40-49"]
survey[Age >49 & Age <60, Age := "50-59"]
survey[Age >59, Age := "above 60"]

survey %>%
  drop_na(Age, VaccinationBeliefs) %>%
  count(Age, VaccinationBeliefs)

Visual Representation of age groups that believe in childhood vaccinations.

survey %>% 
  drop_na(Age, VaccinationBeliefs) %>% 
  ggplot(aes(x = VaccinationBeliefs, fill = Age)) +
  scale_fill_viridis_d() +
  coord_flip() +
  geom_bar(position = "fill")+
  labs(title = "Difference in beliefs based off of different age categories")

5 denotes Strongly agree where as 1 denotes disagreement.

Individuals in the 20-29 and 50-59 age range tend to agree more with vaccinations.

An analysis on whether or not having children makes a difference in beliefs on vaccinating.

survey %>%
  drop_na(Children, VaccinationBeliefs) %>%
  group_by(Children) %>%
  summarize(VaccinationBeliefs = mean(VaccinationBeliefs)) %>%
  ggplot(aes(x = Children, y = VaccinationBeliefs)) +
  geom_col()

Individuals with children arwe more likely, although not by a large measure, to agree with vaccinations.

t.test(survey$VaccinationBeliefs~survey$Children)

    Welch Two Sample t-test

data:  survey$VaccinationBeliefs by survey$Children
t = -2.7542, df = 237.19, p-value = 0.00634
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.6365902 -0.1056679
sample estimates:
 mean in group No mean in group Yes 
         1.366460          1.737589 

Contrary to the above graph: T-test shows that participants who have children are less likely to agree with vaccinating children based off of their t-score in comparison to those who do not. Alpha .05

Analysis of Vaccination beliefs and their effects on autism spectrum disorder

cor.test(survey$VaccinationBeliefs, survey$AutismLink, method = "pearson")

    Pearson's product-moment correlation

data:  survey$VaccinationBeliefs and survey$AutismLink
t = -13.857, df = 300, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.6889943 -0.5506707
sample estimates:
      cor 
-0.624709 

As there is a negative correlation between vaccination beliefs and the participants linking the disorder with the vaccination indicates thats individuals are less likely to vaccinate their children when they believe that it could lead to autism spectrum disorder.

ggscatter(survey, x = "VaccinationBeliefs", y = "AutismLink",
          color = "black",shape = 1, size = 1,
          add = "reg.line",
          add.params = list(color = "blue", fill = "light blue"),
          conf.int = TRUE,
          cor.coef = TRUE, 
          cor.method = "pearson",
          xlab = "Believe in childhood vaccinations", 
          ylab = "MMR vaccination is linked to Autism",
          caption="Note:1=Strongly agree; 5=Strongly disagree")

An analysis of whether or not being religious has an impact on agreement with vaccinations

cor.test(survey$VaccinationBeliefs, survey$Religious,  method = "pearson")

    Pearson's product-moment correlation

data:  survey$VaccinationBeliefs and survey$Religious
t = 0.47608, df = 302, p-value = 0.6344
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.0853704  0.1394476
sample estimates:
       cor 
0.02738489 

This sample indicates that religion has no impact on their beliefs in vaccinating.

Data seperated by region/ State

survey$HomeState <- recode(survey$HomeState, "montana" = "Montana",
                                 "Missouri" = "Missouri", 
                                 "406" = "Montana", 
                                 "Ca" = "California", 
                                 "CA" = "California", 
                                 "Calif" = "California",
                                 "California" = "California",
                                 "Co" = "Colorado",
                                 "Co Down" = "Colorado",
                                 "Colrado" = "Colorado",
                                 "Hard to say. MT I guess" = "Montana",
                                 "Grew up in Illinois" = "Illinois",
                                 "From Bulgaria actually" = "International",
                                 "IL" = "Illinois",
                                 "illinois/now living in california." = "Illinois",
                                 "International Student" = "International",
                                 "Mont9" = "Montana",
                                 "Va" = "Virginia",
                                 "VA" = "Virginia",
                                 "wa" = "Washington",
                                 "Wa" = "Washington",
                                 "WA" = "Washington",
                                 "Wa." = "WAshington",
                                 "TX" = "Texas",
                                 "WAshington" = "Washington",
                                 "province of Ontario, in Canada" = "International",
                                 "OR" = "Oregon",
                                 "PA" = "Pennsylvania",
                                 "ID" = "Idaho",
                                 "Md" = "Maryland",
                                 "MN" = "Minnesota",
                                 "MO" = "Missouri",
                                 "MONTANA" = "Montana",
                                 "mt" = "Montana",
                                 "Mt" = "Montana", 
                                 "MT" = "Montana",
                                 "N.Y." = "New York",
                                 "Omaha" = "Nebraska",
                                 "SC" = "South Carolina",
                                 "SD" = "South Dakota",
                                 "Switzerland" = "International",
                                 "Not" = "International",
                                 "WAshington" = "Washington")

Counts of location table.

survey %>%
  count(HomeState) %>%
  drop_na()

Education as an impacting factor on beliefs on vaccinations.

survey %>% 
  drop_na(CollegeEducation, VaccinationBeliefs) %>% 
  count(CollegeEducation, VaccinationBeliefs) 

Seperating group by education.

survey%>%
count(VaccinationBeliefs, CollegeEducation) %>%
group_by(CollegeEducation) %>%
mutate(prop = n / sum(n)) %>%
spread(key = VaccinationBeliefs, value = prop)

Graph of level of education and the beliefs on vaccination.

survey %>% 
  drop_na(CollegeEducation, VaccinationBeliefs) %>% 
  ggplot(aes(x = VaccinationBeliefs, fill = CollegeEducation)) +
  scale_fill_viridis_d() +
  coord_flip() +
  geom_bar(position = "fill")+
  labs(title = "Vaccination beliefs based off of level of education")+
    theme(axis.text.x = element_text(angle = 45, hjust = 1))

Some college make up the majority of the belief scale categories. It appears that associate’s degrees or technical degrees tend to be most likely to vaccinate.

Table of level of education and vaccination beliefs.

tbl1 = table(survey$CollegeEducation, survey$VaccinationBeliefs) 
tbl1
                                 
                                   1  2  3  4  5
  Associate's or technical degree 22  1  2  2  3
  Bachelor's degree               45  5  1  0  5
  Graduate degree                 32  3  0  0  3
  High school degree              30  5  4  1  5
  No high school degree            4  0  1  0  0
  Some college                    81 10 10  3  5
  Some graduate school            19  1  0  0  0
chisq.test(tbl1) 
Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  tbl1
X-squared = 23.989, df = 24, p-value = 0.4622

Education has no impact on vaccination beliefs as the p-value was greater than 0.4622

survey %>% 
  drop_na(CollegeEducation, VaccinationBeliefs) %>% 
  count(CollegeEducation, VaccinationBeliefs) 
NA
survey1 <- survey %>%
  mutate(CollegeEducation_simple = fct_collapse(CollegeEducation,
                                         degree = 
                                           c("Associate's or technical degree",
                                             "Bachelor's degree",
                                             "Some graduate school",
                                             "Graduate degree"),
                                         no_degree = 
                                           c("No high school degree",
                                             "High school degree",
                                             "Some college")))

survey1 %>%
  drop_na(CollegeEducation_simple, VaccinationBeliefs) %>%
  count(CollegeEducation_simple, VaccinationBeliefs)

Dividing the groups between college education and non-college educated.

 survey1 %>% 
  drop_na(CollegeEducation_simple, VaccinationBeliefs) %>% 
  ggplot(aes(x = VaccinationBeliefs, fill = CollegeEducation_simple)) +
  scale_fill_viridis_d() +
  coord_flip() +
  geom_bar(position = "fill")+
  labs(title = "Difference in belief in vaccination based on college education")

Limitations: While there was an N of over 300 indivuals who participate, the study does not specifically spell out what might be an impacting variable as the N within each subset was too small to be certain. As a preliminary study, however, there is useful data that could be explored later. Whereas, this was a volunteer basis participation there could be bias to either prove or disprove based off of what the individual promoting the study might have indicated as their preference or hypothesis. The method for distributing the study was not controlled.

LS0tCnRpdGxlOiAiU3VydmV5IEFuYWx5c2lzIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmBgYAoKYGBge3J9CmxpYnJhcnkoY29ycnIpCmxpYnJhcnkocGxvdGx5KQoKYGBgCgpgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHJlc2hhcGUyKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGdwbG90cykKYGBgCmBgYHtyfQpsaWJyYXJ5KGRhdGEudGFibGUpCmBgYAoKCmBgYHtyfQpsaWJyYXJ5KGdncHVicikKYGBgCgpgYGB7cn0KbGlicmFyeSh4dGFibGUpCmxpYnJhcnkoY29ycnBsb3QpCgpgYGAKCmBgYHtyfQpsaWJyYXJ5KGNvcnJncmFtKQpgYGAKCkEgc3VydmV5IHdhcyBjb25kdWN0ZWQgZXhhbWluaW5nIGhvdyBkaWZmZXJlbnQgc3Vic2V0cyBvZiBwZW9wbGUgdmlldyB2YWNjaW5hdGlvbnMgZm9yIGNoaWxkcmVuLiBUaGUgZ3JvdXBzIHdlcmUgb3JnYW5pemVkIGJhc2VkIG9uIHNleCwgYWdlLCBlZHVjYXRpb24gbGV2ZWxzLCB3aGV0aGVyIG9yIG5vdCB0aGV5IGhhZCBjaGlsZHJlbiwgbG9jYXRpb24oc3RhdGUpOyB3aGV0aGVyIG9yIG5vdCB0aGV5IGJlbGlldmVkIGluIHZhY2NpbmF0aW5nOyBjcmVkaWJsZSBkYXRhIGZyb20gdmFyaW91cyBzb3VyY2VzOyBsaW5rcyBiZXR3ZWVuIGF1dGlzbSBhbmQgTU1SIHZhY2NpbmF0aW9uOyB0aGVpciBjb25jZXJuIGZvciBzaWRlLWVmZmVjdHMgaW4gIHZhcmlvdXMgYXJlYXMuIApTdXJ2ZXkgd2FzIGNvbmR1Y3RlZCB2aWEgYSBsaW5rIHRoYXQgcGFydGljaXBhbnRzIHJlc3BvbmRlZCB0byB3aGljaCBtZWFucyB0aGF0IHRoZXkgdm9sdW50ZXJlZCB0byB0YWtlIHRoZSBzdXJ2ZXkuIFRoZSB3ZXJlIG5vdCBjb21wZW5zYXRlZC4gCgpUaGUgbGluayBpcyBsaXN0ZWQgYmVsb3cgaW4gY29ycmVzcG9uZGVuY2Ugd2l0aCB0aGUgaW1wb3J0IG9mIHRoZSBkYXRhLgoKYGBge3J9CnN1cnZleSA8LSByZWFkX2NzdigiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMTM4QUpxOHVhUGwwWGxGM0JqajNxMGdfUGIzUmJtQlFMRmF6ajRoaEphbHcvZXhwb3J0P2Zvcm1hdD1jc3YiKQpgYGAKClRoaXMgZ2xpbXBzZSBwcm92aWRlcyBhIG92ZXJ2aWV3IG9mIHRoZSBkYXRhIGluIGl0cyByYXcgZm9ybS4gQXMgcGFydGljaXBhbnRzIHdlcmUgZ2l2ZW4gdGhlIG9wdGlvbiBvZiBmaWxsaW5nIGluIGRhdGEgaXQgaXMgbm90IGZvcm1hdHRlZCBpbiBhIHdheSB0aGF0IGFsbG93cyBhbiBleGFtaW5hdGlvbiBvZiBpbmRpdmlkdWFscyBhcyB0aGV5IHdlcmUgbWVhbnQgdG8gYmUgZ3JvdXBlZC4gCgpgYGB7cn0KZ2xpbXBzZShzdXJ2ZXkpCmBgYAoKQ2F0ZWdvcnkgcmVzcG9uc2UgcXVlc3Rpb25zIHdlcmUgc2ltcGxpZmllZCB0byBiZXR0ZXIgYW5hbHl6ZSB0aGUgZGF0YSBhbmQgY29kZS4KICAgCgpgYGB7cn0Kc3VydmV5IDwtIHN1cnZleSAlPiUKICByZW5hbWUoU2V4ID0gYFdoYXQgaXMgeW91ciBzZXg/YCwKICAgICAgICAgQWdlID0gYFdoYXQgaXMgeW91ciBhZ2U/YCwKICAgICAgICAgQ29sbGVnZUVkdWNhdGlvbiA9IGBXaGF0IGlzIHlvdXIgaGlnaGVzdCBlZHVjYXRpb24gY29tcGxldGVkP2AsCiAgICAgICAgIENvbGxlZ2VNYWpvciA9IGBJZiB5b3Ugd2VudCB0byBjb2xsZWdlLCB3aGF0IHdhcyB5b3VyIG1ham9yP2AsCiAgICAgICAgIENoaWxkcmVuID0gYERvIHlvdSBoYXZlIGNoaWxkcmVuP2AsCiAgICAgICAgIEhvbWVTdGF0ZSA9IGBXaGF0IHN0YXRlIGFyZSB5b3UgZnJvbT9gLAogICAgICAgICBSZWxpZ2lvdXMgPSBgQXJlIHlvdSByZWxpZ2lvdXM/YCwKICAgICAgICAgVmFjY2luYXRpb25CZWxpZWZzID0gYEkgYmVsaWV2ZSBjaGlsZHJlbiBzaG91bGQgYmUgdmFjY2luYXRlZC5gLAogICAgICAgICBUcnVzdEl0ID0gYEkgdHJ1c3QgdGhlIGluZm9ybWF0aW9uIEkgcmVjZWl2ZSBhYm91dCBzaG90cy5gLAogICAgICAgICBBdXRpc21MaW5rID0gYEkgYmVsaWV2ZSB0aGF0IHRoZXJlIGNvdWxkIGJlIGEgbGluayBiZXR3ZWVuIHRoZSBNTVIgdmFjY2luYXRpb24gYW5kIGF1dGlzbS5gLAogICAgICAgICBTaWRlRWZmZWN0c1dvcnJ5ID0gYEkgd29ycnkgYWJvdXQgcG9zc2libGUgc2lkZSBlZmZlY3RzIG9mIHZhY2NpbmF0aW9ucy5gLAogICAgICAgICBFeGFnZ2VyYXRpb24gPSBgSSBiZWxpZXZlIHRoZSBtZWRpYSBleGFnZ2VyYXRlcyByZXBvcnRzIGFib3V0IGRpc2Vhc2Ugb3V0YnJlYWsgYW5kIHZhY2NpbmF0aW9ucy5gLAogICAgICAgICBXYW50VmFjY2luYXRpb25zID0gYElmIEkgd2VyZSB0byBoYXZlIGEgY2hpbGQgdG9kYXksIEkgd291bGQgd2FudCB0aGVtIHRvIGhhdmUgYWxsIG9mIHRoZSByZWNvbW1lbmRlZCB2YWNjaW5hdGlvbnMuYCwKICAgICAgICAgUmVxdWlyZWRWYWNjaW5hdGlvbnMgPSBgSGVhbHRoeSBjaGlsZHJlbiBzaG91bGQgYmUgcmVxdWlyZWQgdG8gYmUgdmFjY2luYXRlZCB0byBhdHRlbmQgc2Nob29sIGJlY2F1c2Ugb2YgcG90ZW50aWFsIHJpc2tzIHRvIG90aGVycy5gLAogICAgICAgICBFeHBhbnNpb24gPSBgSWYgeW91IHdpc2ggdG8gZXhwYW5kIG9uIGFueSBvZiB5b3VyIGFuc3dlcnMgYWJvdmUsIGRvIHNvIGhlcmU6YCkKYGBgCgoKQSByZXZpZXcgb2YgZGF0YSBpbiBhbHRlcmVkIGZvcm0uIApgYGB7cn0KZ2xpbXBzZShzdXJ2ZXkpCmBgYAoKCgpDb3VudCBvZiBzZXguICBOb3RlIHRoZSB2YXJpYXRpb25zIHRoYXQgZXhpc3QuIAoKYGBge3J9CnN1cnZleSAlPiUKICBjb3VudChTZXgpCmBgYAoKQXMgYSB3YXkgdG8gY29ycmVjdCBhbmQgcHJvcGVybHkgY2F0ZWdvcml6ZSB0aGUgZGF0YSwgY2F0ZWdvcmllcyB3ZXJlIG1lcmdlZCBpbnRvIHRoZWlyIGFwcHJvcHJpYXRlIGRlc2lnbmF0aW9uLiBGb3IgZXhhbXBsZSAiRiIgb3IgRmVtYWxlIGZvciBmZW1hbGUgd2FzCgpgYGB7cn0Kc3VydmV5IDwtIHN1cnZleSAlPiUKICBtdXRhdGUoU2V4ID0gc3RyX3RvX2xvd2VyKFNleCkpCmBgYAoKYGBge3J9CnN1cnZleSRTZXggPC0gcmVjb2RlKHN1cnZleSRTZXgsICJtIiA9ICJtYWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImYiID0gImZlbWFsZSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRiIgPSAiZmVtYWxlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZW1haWwiID0gImZlbWFsZSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVtYWwiID0gImZlbWFsZSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVtZSIgPSAiZmVtYWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdlbWFsZSIgPSAiZmVtYWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdpcmwiID0gImZlbWFsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXBsYWNlIHNleCB3aXRoIGdlbmRlciEgZmVtYWxlIiA9ICJmZW1hbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVwdWJsaWNhbiAoIG1hbGUpIiA9ICJtYWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11Y2hvIiA9ICJtYWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwYWNoZSBhdHRhY2sgaGVsaWNvcHRlciIgPSAib3RoZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FsaWZvcm5pYW4iID0gIm90aGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2giID0gIm90aGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNuYXAtb24gdG9vbCBib3giID0gIm90aGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSByb3VnaCwgcGFzc2lvbmF0ZSBraW5kIiA9ICJvdGhlciIpCgpgYGAKCkNvdW50IG9mIHRoZSBkaWZmZXJlbnQgc2V4IGNhdGVnb3JpZXMKYGBge3J9CnN1cnZleSAlPiUKICBjb3VudChTZXgpCmBgYAoKVGFibGUgcmVmbGVjdGluZyB0aGUgZGF0YSBvbiBlYWNoIGdlbmRlciBhbmQgdGhlaXIgdmlld3Mgb24gdmFjY2luYXRpb24KYGBge3J9CnRibCA9IHRhYmxlKHN1cnZleSRTZXgsIHN1cnZleSRWYWNjaW5hdGlvbkJlbGllZnMpIAp0YmwKYGBgCgoKCmBgYHtyfQpnbGltcHNlKHN1cnZleSkKYGBgCgoKeC1zcXVhcmVkIHRlc3RpbmcgdG8gZGV0ZXJtaW5lIHNpZ25pZmljYW5jZS4gCgpgYGB7cn0KY2hpc3EudGVzdCh0YmwpIApgYGAKSW4gb3JkZXIgdG8gYmUgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCB0aGUgcC12YWx1ZSBtdXN0IG5vdCBleGNlZWQgLjA1LiBJbiB0aGlzIHNjZW5hcmlvIHRoZSBzZXggY2F0ZWdvcmllcyBpbiBjb21wYXJpc29uIHRvIHRoZWlyIHZpZXcgcG9pbnRzIGRvIG5vdCBoYXZlIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGFzIHRoZSBwLXZhbHVlIHdhcyAwLjY2OTEuIFNleCBpcyBub3QgYSBjb250cmlidXRpbmcgZmFjdG9yIHRvIHRoZSB3YXkgaW5kaXZpZHVhbHMgdmlldyB2YWNjaW5hdGlvbnMuCgoKCgoKClRoZSBmb2xsb3dpbmcgaXMgYW4gYW5hbHlzaXMgb2YgYWdlIHZlcnN1cyBiZWxpZWZzIG9uIHZhY2NpbmF0aW9uOgoKCmBgYHtyfQpzdXJ2ZXk8LXN1cnZleSU+JQogIG11dGF0ZShBZ2UgPSBhcy5udW1lcmljKEFnZSkpICU+JQogIG11dGF0ZShDaGlsZHJlbiA9IGFzX2ZhY3RvcihDaGlsZHJlbikpCmBgYAoKCk1lYW4gdmFjY2luYXRpb24gYWdyZWVtZW50IG9mIGdyb3VwIGJhc2VkIG9uIHllcyBvciBubyBhbnN3ZXIuCmBgYHtyfQpzdXJ2ZXkgJT4lCiAgZHJvcF9uYShDaGlsZHJlbiwgVmFjY2luYXRpb25CZWxpZWZzKSAlPiUKICBncm91cF9ieShDaGlsZHJlbikgJT4lCiAgc3VtbWFyaXplKFZhY2NpbmF0aW9uQmVsaWVmcyA9IG1lYW4oVmFjY2luYXRpb25CZWxpZWZzKSkKYGBgCgpBIGJyZWFrZG93biBvZiBlYWNoIG9mIHRoZSBhZ2UgY2F0ZWdvcmllcy4KYGBge3J9CnN1cnZleSAlPiUKICBkcm9wX25hKEFnZSwgUmVxdWlyZWRWYWNjaW5hdGlvbnMpICU+JQogIGdyb3VwX2J5KEFnZSkgJT4lCiAgc3VtbWFyaXplKFJlcXVpcmVkVmFjY2luYXRpb25zID0gbWVhbihSZXF1aXJlZFZhY2NpbmF0aW9ucykpCmBgYAoKCgpYIHNxdWFyZWQgYW5hbmx5c2lzIGlmIGFnZSBpcyBkZXRlcm1pbmluZyBmYWN0b3IgaW4gYSBwZXJzb24ncyBiZWxpZWZzIG9uIHZhY2NpbmF0aW5nIGNoaWxkcmVuLgoKCmBgYHtyfQp0YmwgPSB0YWJsZShzdXJ2ZXkkQWdlLCBzdXJ2ZXkkVmFjY2luYXRpb25CZWxpZWZzKSAKY2hpc3EudGVzdCh0YmwpCmBgYAoKUC12YWx1ZSBpcyBsZXNzIHRoYW4gLjA1IHRoZXJlZm9yIGFnZSBpcyBhIGNvbnRyaWJ1dGluZyBmYWN0b3IgdG8gdGhlaXIgYmVsaWVmcyBvbiB2YWNjaW5hdGlvbnMuCgoKRGlmZmVyZW50IGFnZSBncm91cHMgYXJlIGVzdGFibGlzaGVkLgpgYGB7cn0Kc2V0RFQoc3VydmV5KQpzdXJ2ZXlbQWdlIDwyMCwgQWdlIDo9ICJ1bmRlciAyMCJdCnN1cnZleVtBZ2UgPjE5ICYgQWdlIDwzMCwgQWdlIDo9ICIyMC0yOSJdCnN1cnZleVtBZ2UgPjI5ICYgQWdlIDw0MCwgQWdlIDo9ICIzMC0zOSJdCnN1cnZleVtBZ2UgPjM5ICYgQWdlIDw1MCwgQWdlIDo9ICI0MC00OSJdCnN1cnZleVtBZ2UgPjQ5ICYgQWdlIDw2MCwgQWdlIDo9ICI1MC01OSJdCnN1cnZleVtBZ2UgPjU5LCBBZ2UgOj0gImFib3ZlIDYwIl0KCnN1cnZleSAlPiUKICBkcm9wX25hKEFnZSwgVmFjY2luYXRpb25CZWxpZWZzKSAlPiUKICBjb3VudChBZ2UsIFZhY2NpbmF0aW9uQmVsaWVmcykKYGBgCgoKVmlzdWFsIFJlcHJlc2VudGF0aW9uIG9mIGFnZSBncm91cHMgdGhhdCBiZWxpZXZlIGluIGNoaWxkaG9vZCB2YWNjaW5hdGlvbnMuCgpgYGB7cn0Kc3VydmV5ICU+JSAKICBkcm9wX25hKEFnZSwgVmFjY2luYXRpb25CZWxpZWZzKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gVmFjY2luYXRpb25CZWxpZWZzLCBmaWxsID0gQWdlKSkgKwogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpKwogIGxhYnModGl0bGUgPSAiRGlmZmVyZW5jZSBpbiBiZWxpZWZzIGJhc2VkIG9mZiBvZiBkaWZmZXJlbnQgYWdlIGNhdGVnb3JpZXMiKQpgYGAKCjUgZGVub3RlcyBTdHJvbmdseSBhZ3JlZSB3aGVyZSBhcyAxIGRlbm90ZXMgZGlzYWdyZWVtZW50LiAKCkluZGl2aWR1YWxzIGluIHRoZSAyMC0yOSBhbmQgNTAtNTkgYWdlIHJhbmdlIHRlbmQgdG8gYWdyZWUgbW9yZSB3aXRoIHZhY2NpbmF0aW9ucy4KCgoKQW4gYW5hbHlzaXMgb24gd2hldGhlciBvciBub3QgaGF2aW5nIGNoaWxkcmVuIG1ha2VzIGEgZGlmZmVyZW5jZSBpbiBiZWxpZWZzIG9uIHZhY2NpbmF0aW5nLgoKCgpgYGB7cn0Kc3VydmV5ICU+JQogIGRyb3BfbmEoQ2hpbGRyZW4sIFZhY2NpbmF0aW9uQmVsaWVmcykgJT4lCiAgZ3JvdXBfYnkoQ2hpbGRyZW4pICU+JQogIHN1bW1hcml6ZShWYWNjaW5hdGlvbkJlbGllZnMgPSBtZWFuKFZhY2NpbmF0aW9uQmVsaWVmcykpICU+JQogIGdncGxvdChhZXMoeCA9IENoaWxkcmVuLCB5ID0gVmFjY2luYXRpb25CZWxpZWZzKSkgKwogIGdlb21fY29sKCkKCmBgYApJbmRpdmlkdWFscyB3aXRoIGNoaWxkcmVuIGFyd2UgbW9yZSBsaWtlbHksIGFsdGhvdWdoIG5vdCBieSBhIGxhcmdlIG1lYXN1cmUsIHRvIGFncmVlIHdpdGggdmFjY2luYXRpb25zLgoKCgoKYGBge3J9CnQudGVzdChzdXJ2ZXkkVmFjY2luYXRpb25CZWxpZWZzfnN1cnZleSRDaGlsZHJlbikKYGBgCkNvbnRyYXJ5IHRvIHRoZSBhYm92ZSBncmFwaDogVC10ZXN0IHNob3dzIHRoYXQgcGFydGljaXBhbnRzIHdobyBoYXZlIGNoaWxkcmVuIGFyZSBsZXNzIGxpa2VseSB0byBhZ3JlZSB3aXRoIHZhY2NpbmF0aW5nIGNoaWxkcmVuIGJhc2VkIG9mZiBvZiB0aGVpciB0LXNjb3JlIGluIGNvbXBhcmlzb24gdG8gdGhvc2Ugd2hvIGRvIG5vdC4KQWxwaGEgLjA1CgoKCgoKQW5hbHlzaXMgb2YgVmFjY2luYXRpb24gYmVsaWVmcyBhbmQgdGhlaXIgZWZmZWN0cyBvbiBhdXRpc20gc3BlY3RydW0gZGlzb3JkZXIKCgpgYGB7cn0KY29yLnRlc3Qoc3VydmV5JFZhY2NpbmF0aW9uQmVsaWVmcywgc3VydmV5JEF1dGlzbUxpbmssIG1ldGhvZCA9ICJwZWFyc29uIikKCmBgYApBcyB0aGVyZSBpcyBhIG5lZ2F0aXZlIGNvcnJlbGF0aW9uIGJldHdlZW4gdmFjY2luYXRpb24gYmVsaWVmcyBhbmQgdGhlIHBhcnRpY2lwYW50cyBsaW5raW5nIHRoZSBkaXNvcmRlciB3aXRoIHRoZSB2YWNjaW5hdGlvbiBpbmRpY2F0ZXMgdGhhdHMgaW5kaXZpZHVhbHMgYXJlIGxlc3MgbGlrZWx5IHRvIHZhY2NpbmF0ZSB0aGVpciBjaGlsZHJlbiB3aGVuIHRoZXkgYmVsaWV2ZSB0aGF0IGl0IGNvdWxkIGxlYWQgdG8gYXV0aXNtIHNwZWN0cnVtIGRpc29yZGVyLgoKCgpgYGB7cn0KZ2dzY2F0dGVyKHN1cnZleSwgeCA9ICJWYWNjaW5hdGlvbkJlbGllZnMiLCB5ID0gIkF1dGlzbUxpbmsiLAogICAgICAgICAgY29sb3IgPSAiYmxhY2siLHNoYXBlID0gMSwgc2l6ZSA9IDEsCiAgICAgICAgICBhZGQgPSAicmVnLmxpbmUiLAogICAgICAgICAgYWRkLnBhcmFtcyA9IGxpc3QoY29sb3IgPSAiYmx1ZSIsIGZpbGwgPSAibGlnaHQgYmx1ZSIpLAogICAgICAgICAgY29uZi5pbnQgPSBUUlVFLAogICAgICAgICAgY29yLmNvZWYgPSBUUlVFLCAKICAgICAgICAgIGNvci5tZXRob2QgPSAicGVhcnNvbiIsCiAgICAgICAgICB4bGFiID0gIkJlbGlldmUgaW4gY2hpbGRob29kIHZhY2NpbmF0aW9ucyIsIAogICAgICAgICAgeWxhYiA9ICJNTVIgdmFjY2luYXRpb24gaXMgbGlua2VkIHRvIEF1dGlzbSIsCiAgICAgICAgICBjYXB0aW9uPSJOb3RlOjE9U3Ryb25nbHkgYWdyZWU7IDU9U3Ryb25nbHkgZGlzYWdyZWUiKQpgYGAKCgoKCkFuIGFuYWx5c2lzIG9mIHdoZXRoZXIgb3Igbm90IGJlaW5nIHJlbGlnaW91cyBoYXMgYW4gaW1wYWN0IG9uIGFncmVlbWVudCB3aXRoIHZhY2NpbmF0aW9ucwoKCgpgYGB7cn0KY29yLnRlc3Qoc3VydmV5JFZhY2NpbmF0aW9uQmVsaWVmcywgc3VydmV5JFJlbGlnaW91cywgIG1ldGhvZCA9ICJwZWFyc29uIikKYGBgCgpUaGlzIHNhbXBsZSBpbmRpY2F0ZXMgdGhhdCByZWxpZ2lvbiBoYXMgbm8gaW1wYWN0IG9uIHRoZWlyIGJlbGllZnMgaW4gdmFjY2luYXRpbmcuCgoKCgpEYXRhIHNlcGVyYXRlZCBieSByZWdpb24vIFN0YXRlCmBgYHtyfQpzdXJ2ZXkkSG9tZVN0YXRlIDwtIHJlY29kZShzdXJ2ZXkkSG9tZVN0YXRlLCAibW9udGFuYSIgPSAiTW9udGFuYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNaXNzb3VyaSIgPSAiTWlzc291cmkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQwNiIgPSAiTW9udGFuYSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2EiID0gIkNhbGlmb3JuaWEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNBIiA9ICJDYWxpZm9ybmlhIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYWxpZiIgPSAiQ2FsaWZvcm5pYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYWxpZm9ybmlhIiA9ICJDYWxpZm9ybmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvIiA9ICJDb2xvcmFkbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDbyBEb3duIiA9ICJDb2xvcmFkbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb2xyYWRvIiA9ICJDb2xvcmFkbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIYXJkIHRvIHNheS4gTVQgSSBndWVzcyIgPSAiTW9udGFuYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHcmV3IHVwIGluIElsbGlub2lzIiA9ICJJbGxpbm9pcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGcm9tIEJ1bGdhcmlhIGFjdHVhbGx5IiA9ICJJbnRlcm5hdGlvbmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklMIiA9ICJJbGxpbm9pcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbGxpbm9pcy9ub3cgbGl2aW5nIGluIGNhbGlmb3JuaWEuIiA9ICJJbGxpbm9pcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcm5hdGlvbmFsIFN0dWRlbnQiID0gIkludGVybmF0aW9uYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW9udDkiID0gIk1vbnRhbmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmEiID0gIlZpcmdpbmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZBIiA9ICJWaXJnaW5pYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YSIgPSAiV2FzaGluZ3RvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXYSIgPSAiV2FzaGluZ3RvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXQSIgPSAiV2FzaGluZ3RvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXYS4iID0gIldBc2hpbmd0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVFgiID0gIlRleGFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldBc2hpbmd0b24iID0gIldhc2hpbmd0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmluY2Ugb2YgT250YXJpbywgaW4gQ2FuYWRhIiA9ICJJbnRlcm5hdGlvbmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9SIiA9ICJPcmVnb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEEiID0gIlBlbm5zeWx2YW5pYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJRCIgPSAiSWRhaG8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWQiID0gIk1hcnlsYW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1OIiA9ICJNaW5uZXNvdGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTU8iID0gIk1pc3NvdXJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1PTlRBTkEiID0gIk1vbnRhbmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXQiID0gIk1vbnRhbmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTXQiID0gIk1vbnRhbmEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1UIiA9ICJNb250YW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk4uWS4iID0gIk5ldyBZb3JrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9tYWhhIiA9ICJOZWJyYXNrYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTQyIgPSAiU291dGggQ2Fyb2xpbmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0QiID0gIlNvdXRoIERha290YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTd2l0emVybGFuZCIgPSAiSW50ZXJuYXRpb25hbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3QiID0gIkludGVybmF0aW9uYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0FzaGluZ3RvbiIgPSAiV2FzaGluZ3RvbiIpCmBgYAoKCkNvdW50cyBvZiBsb2NhdGlvbiB0YWJsZS4KYGBge3J9CnN1cnZleSAlPiUKICBjb3VudChIb21lU3RhdGUpICU+JQogIGRyb3BfbmEoKQpgYGAKCgoKCkVkdWNhdGlvbiBhcyBhbiBpbXBhY3RpbmcgZmFjdG9yIG9uIGJlbGllZnMgb24gdmFjY2luYXRpb25zLgoKYGBge3J9CnN1cnZleSAlPiUgCiAgZHJvcF9uYShDb2xsZWdlRWR1Y2F0aW9uLCBWYWNjaW5hdGlvbkJlbGllZnMpICU+JSAKICBjb3VudChDb2xsZWdlRWR1Y2F0aW9uLCBWYWNjaW5hdGlvbkJlbGllZnMpIApgYGAKCgpTZXBlcmF0aW5nIGdyb3VwIGJ5IGVkdWNhdGlvbi4gCgpgYGB7cn0Kc3VydmV5JT4lCmNvdW50KFZhY2NpbmF0aW9uQmVsaWVmcywgQ29sbGVnZUVkdWNhdGlvbikgJT4lCmdyb3VwX2J5KENvbGxlZ2VFZHVjYXRpb24pICU+JQptdXRhdGUocHJvcCA9IG4gLyBzdW0obikpICU+JQpzcHJlYWQoa2V5ID0gVmFjY2luYXRpb25CZWxpZWZzLCB2YWx1ZSA9IHByb3ApCmBgYAoKR3JhcGggb2YgbGV2ZWwgb2YgZWR1Y2F0aW9uIGFuZCB0aGUgYmVsaWVmcyBvbiB2YWNjaW5hdGlvbi4KCmBgYHtyfQpzdXJ2ZXkgJT4lIAogIGRyb3BfbmEoQ29sbGVnZUVkdWNhdGlvbiwgVmFjY2luYXRpb25CZWxpZWZzKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gVmFjY2luYXRpb25CZWxpZWZzLCBmaWxsID0gQ29sbGVnZUVkdWNhdGlvbikpICsKICBzY2FsZV9maWxsX3ZpcmlkaXNfZCgpICsKICBjb29yZF9mbGlwKCkgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSsKICBsYWJzKHRpdGxlID0gIlZhY2NpbmF0aW9uIGJlbGllZnMgYmFzZWQgb2ZmIG9mIGxldmVsIG9mIGVkdWNhdGlvbiIpKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKYGBgClNvbWUgY29sbGVnZSBtYWtlIHVwIHRoZSBtYWpvcml0eSBvZiB0aGUgYmVsaWVmIHNjYWxlIGNhdGVnb3JpZXMuICBJdCBhcHBlYXJzIHRoYXQgYXNzb2NpYXRlJ3MgZGVncmVlcyBvciB0ZWNobmljYWwgZGVncmVlcyB0ZW5kIHRvIGJlIG1vc3QgbGlrZWx5IHRvIHZhY2NpbmF0ZS4gCgoKClRhYmxlIG9mIGxldmVsIG9mIGVkdWNhdGlvbiBhbmQgdmFjY2luYXRpb24gYmVsaWVmcy4gCmBgYHtyfQp0YmwxID0gdGFibGUoc3VydmV5JENvbGxlZ2VFZHVjYXRpb24sIHN1cnZleSRWYWNjaW5hdGlvbkJlbGllZnMpIAp0YmwxCmBgYAoKCmBgYHtyfQpjaGlzcS50ZXN0KHRibDEpIApgYGAKRWR1Y2F0aW9uIGhhcyBubyBpbXBhY3Qgb24gdmFjY2luYXRpb24gYmVsaWVmcyBhcyB0aGUgcC12YWx1ZSB3YXMgZ3JlYXRlciB0aGFuIDAuNDYyMgoKCgpgYGB7cn0Kc3VydmV5ICU+JSAKICBkcm9wX25hKENvbGxlZ2VFZHVjYXRpb24sIFZhY2NpbmF0aW9uQmVsaWVmcykgJT4lIAogIGNvdW50KENvbGxlZ2VFZHVjYXRpb24sIFZhY2NpbmF0aW9uQmVsaWVmcykgCgpgYGAKCmBgYHtyfQpzdXJ2ZXkxIDwtIHN1cnZleSAlPiUKICBtdXRhdGUoQ29sbGVnZUVkdWNhdGlvbl9zaW1wbGUgPSBmY3RfY29sbGFwc2UoQ29sbGVnZUVkdWNhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWdyZWUgPSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIkFzc29jaWF0ZSdzIG9yIHRlY2huaWNhbCBkZWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFjaGVsb3IncyBkZWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU29tZSBncmFkdWF0ZSBzY2hvb2wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR3JhZHVhdGUgZGVncmVlIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fZGVncmVlID0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJObyBoaWdoIHNjaG9vbCBkZWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGlnaCBzY2hvb2wgZGVncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvbWUgY29sbGVnZSIpKSkKCnN1cnZleTEgJT4lCiAgZHJvcF9uYShDb2xsZWdlRWR1Y2F0aW9uX3NpbXBsZSwgVmFjY2luYXRpb25CZWxpZWZzKSAlPiUKICBjb3VudChDb2xsZWdlRWR1Y2F0aW9uX3NpbXBsZSwgVmFjY2luYXRpb25CZWxpZWZzKQpgYGAKCkRpdmlkaW5nIHRoZSBncm91cHMgYmV0d2VlbiBjb2xsZWdlIGVkdWNhdGlvbiBhbmQgbm9uLWNvbGxlZ2UgZWR1Y2F0ZWQuCgoKYGBge3J9CiBzdXJ2ZXkxICU+JSAKICBkcm9wX25hKENvbGxlZ2VFZHVjYXRpb25fc2ltcGxlLCBWYWNjaW5hdGlvbkJlbGllZnMpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBWYWNjaW5hdGlvbkJlbGllZnMsIGZpbGwgPSBDb2xsZWdlRWR1Y2F0aW9uX3NpbXBsZSkpICsKICBzY2FsZV9maWxsX3ZpcmlkaXNfZCgpICsKICBjb29yZF9mbGlwKCkgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSsKICBsYWJzKHRpdGxlID0gIkRpZmZlcmVuY2UgaW4gYmVsaWVmIGluIHZhY2NpbmF0aW9uIGJhc2VkIG9uIGNvbGxlZ2UgZWR1Y2F0aW9uIikKCmBgYAoKCgoKCkxpbWl0YXRpb25zOiBXaGlsZSB0aGVyZSB3YXMgYW4gTiBvZiBvdmVyIDMwMCBpbmRpdnVhbHMgd2hvIHBhcnRpY2lwYXRlLCB0aGUgc3R1ZHkgZG9lcyBub3Qgc3BlY2lmaWNhbGx5IHNwZWxsIG91dCB3aGF0IG1pZ2h0IGJlIGFuIGltcGFjdGluZyB2YXJpYWJsZSBhcyB0aGUgTiB3aXRoaW4gZWFjaCBzdWJzZXQgd2FzIHRvbyBzbWFsbCB0byBiZSBjZXJ0YWluLiBBcyBhIHByZWxpbWluYXJ5IHN0dWR5LCBob3dldmVyLCB0aGVyZSBpcyB1c2VmdWwgZGF0YSB0aGF0IGNvdWxkIGJlIGV4cGxvcmVkIGxhdGVyLiBXaGVyZWFzLCB0aGlzIHdhcyBhIHZvbHVudGVlciBiYXNpcyBwYXJ0aWNpcGF0aW9uIHRoZXJlIGNvdWxkIGJlIGJpYXMgdG8gZWl0aGVyIHByb3ZlIG9yIGRpc3Byb3ZlIGJhc2VkIG9mZiBvZiB3aGF0IHRoZSBpbmRpdmlkdWFsIHByb21vdGluZyB0aGUgc3R1ZHkgbWlnaHQgaGF2ZSBpbmRpY2F0ZWQgYXMgdGhlaXIgcHJlZmVyZW5jZSBvciBoeXBvdGhlc2lzLiBUaGUgbWV0aG9kIGZvciBkaXN0cmlidXRpbmcgdGhlIHN0dWR5IHdhcyBub3QgY29udHJvbGxlZC4K