Library

library(formr)
library(effects)
## Lade nötiges Paket: carData
## lattice theme set by effectsTheme()
## See ?effectsTheme for details.
library(effectsize)
library(lme4)
## Lade nötiges Paket: Matrix
library(sjstats)
## 
## Attache Paket: 'sjstats'
## Die folgenden Objekte sind maskiert von 'package:effectsize':
## 
##     cohens_f, cramers_v, phi
library(lmerTest)
## 
## Attache Paket: 'lmerTest'
## Das folgende Objekt ist maskiert 'package:lme4':
## 
##     lmer
## Das folgende Objekt ist maskiert 'package:stats':
## 
##     step
library(ggplot2)
library(tidyr)
## 
## Attache Paket: 'tidyr'
## Die folgenden Objekte sind maskiert von 'package:Matrix':
## 
##     expand, pack, unpack
library(ggpubr)
library(RColorBrewer)
library(coefplot)
library(tibble)
library(purrr) # for running multiple regression
library(broom)
## 
## Attache Paket: 'broom'
## Das folgende Objekt ist maskiert 'package:sjstats':
## 
##     bootstrap
library(mvmeta)
## This is mvmeta 1.0.3. For an overview type: help('mvmeta-package').
library(lm.beta)
library(dplyr)
## 
## Attache Paket: 'dplyr'
## Die folgenden Objekte sind maskiert von 'package:formr':
## 
##     first, last
## Die folgenden Objekte sind maskiert von 'package:stats':
## 
##     filter, lag
## Die folgenden Objekte sind maskiert von 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stringr)
library(tidyr)
library(knitr)

apatheme = theme_bw() +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        axis.line = element_line(),
        legend.title = element_blank(),
        plot.title = element_text(hjust = 0.5))

Data

Load selected data based on 03_codebook

data_included_documented = read.csv(file = "data_included_documented.csv")[,-1]

Inclusion of Data

countries = as.data.frame(table(data_included_documented$country)) %>%
  arrange(-Freq)

kable(countries)
Var1 Freq
France 2013
Germany 1846
United States of America 1254
Mexico 1157
Italy 968
Brazil 806
Spain 562
United Kingdom 499
Denmark 395
Colombia 387
Canada 338
Japan 290
Switzerland 280
Argentina 217
Austria 197
Russia 155
Chile 154
Australia 133
Peru 119
Belgium 102
Ecuador 102
China 90
Venezuela 67
Guatemala 61
Ireland 59
Portugal 51
Costa Rica 47
India 45
Netherlands 44
Dominican Republic 41
Philippines 36
New Zealand 34
Finland 31
South Africa 29
Sweden 27
El Salvador 26
Singapore 26
Romania 24
Uruguay 24
Bolivia 23
Ukraine 21
Honduras 18
Indonesia 18
Malaysia 17
Morocco 16
Nicaragua 15
Panama 15
United Arab Emirates 14
Belarus 13
Israel 13
Luxembourg 13
Estonia 12
Norway 12
Czechia 11
Paraguay 11
Bulgaria 9
Hungary 9
Kazakhstan 9
Hong Kong 8
Latvia 8
Pakistan 8
Trinidad and Tobago 8
Turkey 8
Algeria 7
Iran 7
Poland 7
Taiwan 7
Tunisia 7
Andorra 6
Bosnia and Herzegovina 6
Croatia 6
Jamaica 6
Kenya 6
Nigeria 6
Saudi Arabia 6
Iceland 5
Senegal 5
Serbia 5
South Korea 5
Greece 4
Haiti 4
Namibia 4
Thailand 4
Bahrain 3
Cameroon 3
Egypt 3
Georgia 3
Ghana 3
Guyana 3
Lebanon 3
Lithuania 3
Slovakia 3
Slovenia 3
Sri Lanka 3
Albania 2
Antigua and Barbuda 2
Armenia 2
Benin 2
Central African Republic 2
Dominica 2
Jordan 2
Kyrgyzstan 2
Mali 2
Malta 2
Mauritius 2
Palestinian Territories 2
Qatar 2
Saint Lucia 2
Turkmenistan 2
Vietnam 2
Afghanistan 1
Aruba 1
Bahamas, The 1
Barbados 1
Belize 1
Botswana 1
Burma 1
Cote d’Ivoire 1
Cuba 1
East Timor (see Timor-Leste) 1
Ethiopia 1
Fiji 1
Grenada 1
Guinea-Bissau 1
Iraq 1
Kuwait 1
Liechtenstein 1
Macedonia 1
Madagascar 1
Maldives 1
Marshall Islands 1
Mauritania 1
Micronesia 1
Monaco 1
Montenegro 1
Nepal 1
Saint Vincent and the Grenadines 1
Sint Maarten 1
South Sudan 1
Swaziland 1
Syria 1
Tanzania 1
Uganda 1
Zimbabwe 1

We will include all countries with more than 500 participants. This allows us to show effect sizes for a diverse range of countries. Diversity of countries is indicated by:

  • location: European (France, Germany, Italy, Spain); North American (United States of America); South American (Mexico, Brazil)
  • language: French (France); German (Germany); English (United States of America); Spanish (Mexico, Spain); Italian (Italy); Portuguese (Brazil)
  • culture: Western (France, Germany, Italy, Spain, United States of America); Non-Western (Mexico, Brazil)

Sample sizes of other countries are too small (n < 500) to reach any conclusions.

seven_countries = countries %>% filter(Freq > 500)
data_included_documented_rescon = data_included_documented %>%
  filter(country %in% seven_countries$Var1)
countries_rescon =
  data_included_documented_rescon %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)


countries_rescon
## # A tibble: 7 × 2
##   country                   Freq
##   <fct>                    <int>
## 1 France                    2013
## 2 Germany                   1846
## 3 United States of America  1254
## 4 Mexico                    1157
## 5 Italy                      968
## 6 Brazil                     806
## 7 Spain                      562

Analyses

Political, Ethnic, and Religious Similarity

H1a Preference for Similarity in Political Beliefs
H1a(1) Linear Effect
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(pref_politicalsim, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_pref_politicalsim = data_included_documented_rescon_wide %>%
  select(-pref_politicalsim) %>%
  map(~lm(scale(data_included_documented_rescon_wide$pref_politicalsim) ~ scale(.x),
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_pref_politicalsim_lin_coef = models_pref_politicalsim %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname == "scale(.x)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_pref_politicalsim_lin_se = models_pref_politicalsim %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_pref_politicalsim_lin_analyses = left_join(models_pref_politicalsim_lin_coef,
                                            models_pref_politicalsim_lin_se,
                                            by = "name") %>%
  mutate(outcome = "H2a) Prefered Political Similarity - Linear Effect")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(pref_politicalsim)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_pref_politicalsim_lin_analyses$n = countries_rescon$Freq
data_included_documented_rescon %>% filter(!is.na(pref_politicalsim)) %>% nrow()
## [1] 8405
model = mvmeta(mean ~ 1, data = models_pref_politicalsim_lin_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_pref_politicalsim_lin_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error         z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)   -0.1144      0.0103  -11.0926    0.0000   -0.1346   -0.0942  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 73.6827 (df = 6), p-value = 0.0000
## I-square statistic = 91.9%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
## -18.4545   38.9091   38.8550
H1a(2) Quadratic Effect: Regression 1 (x <= breaking_point)
data_included_documented_rescon_wide_reg1 = data_included_documented_rescon %>%
  dplyr::filter(political_orientation <= 3) %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(pref_politicalsim, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_pref_politicalsim_reg1 = data_included_documented_rescon_wide_reg1 %>%
  select(-pref_politicalsim) %>%
  map(~lm(scale(data_included_documented_rescon_wide_reg1$pref_politicalsim) ~
            scale(.x),
          data = data_included_documented_rescon_wide_reg1)) %>%
  map(lm.beta)

models_pref_politicalsim_quad_coef_reg1 = models_pref_politicalsim_reg1 %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname == "scale(.x)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)


models_pref_politicalsim_quad_se_reg1 = models_pref_politicalsim_reg1 %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_pref_politicalsim_quad_analyses_reg1 = left_join(models_pref_politicalsim_quad_coef_reg1,
                                            models_pref_politicalsim_quad_se_reg1,
                                            by = "name") %>%
  mutate(outcome = "H2a(1)) Preferred Political Similarity - Quadratic Effect Regression 1")

models_pref_politicalsim_quad_analyses_reg1$n = countries_rescon$Freq

data_included_documented_rescon %>% filter(political_orientation <= 3, !is.na(pref_politicalsim)) %>% nrow()
## [1] 6907
model = mvmeta(mean ~ 1, data = models_pref_politicalsim_quad_analyses_reg1, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_pref_politicalsim_quad_analyses_reg1, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error         z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)   -0.2570      0.0111  -23.2080    0.0000   -0.2787   -0.2353  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 43.9753 (df = 6), p-value = 0.0000
## I-square statistic = 86.4%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##  logLik      AIC      BIC  
## -4.1612  10.3223  10.2682
H1a(2) Quadratic Effect: Regression 2 (x >= breaking_point)
data_included_documented_rescon_wide_reg2 = data_included_documented_rescon %>%
  dplyr::filter(political_orientation >= 3) %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(pref_politicalsim, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_pref_politicalsim_reg2 = data_included_documented_rescon_wide_reg2 %>%
  select(-pref_politicalsim) %>%
  map(~lm(scale(data_included_documented_rescon_wide_reg2$pref_politicalsim) ~
            scale(.x),
          data = data_included_documented_rescon_wide_reg2)) %>%
  map(lm.beta)

models_pref_politicalsim_quad_coef_reg2 = models_pref_politicalsim_reg2 %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname == "scale(.x)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)


models_pref_politicalsim_quad_se_reg2 = models_pref_politicalsim_reg1 %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_pref_politicalsim_quad_analyses_reg2 = left_join(models_pref_politicalsim_quad_coef_reg2,
                                            models_pref_politicalsim_quad_se_reg2,
                                            by = "name") %>%
  mutate(outcome = "H2a(1)) Preferred Political Similarity - Quadratic Effect Regression 2")

models_pref_politicalsim_quad_analyses_reg2$n = countries_rescon$Freq

data_included_documented_rescon %>% filter(political_orientation >= 3, !is.na(pref_politicalsim)) %>% nrow()
## [1] 4643
model = mvmeta(mean ~ 1, data = models_pref_politicalsim_quad_analyses_reg2, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_pref_politicalsim_quad_analyses_reg2, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error        z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)    0.1877      0.0111  16.9462    0.0000    0.1660    0.2094  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 99.7921 (df = 6), p-value = 0.0000
## I-square statistic = 94.0%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
## -32.0696   66.1392   66.0851
H1b Preference for Similarity in Ethnicity/Race
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(pref_ethnicalsim, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_pref_ethnicalsim = data_included_documented_rescon_wide %>%
  select(-pref_ethnicalsim) %>%
  map(~lm(data_included_documented_rescon_wide$pref_ethnicalsim ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_pref_ethnicalsim_coef = models_pref_ethnicalsim %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_pref_ethnicalsim_se = models_pref_ethnicalsim %>%
 map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_pref_ethnicalsim_analyses = left_join(models_pref_ethnicalsim_coef,
                                            models_pref_ethnicalsim_se,
                                            by = "name") %>%
  mutate(outcome = "H2b) Preferred Ethnic Similarity")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(pref_ethnicalsim)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_pref_ethnicalsim_analyses$n = countries_rescon$Freq
sum(models_pref_ethnicalsim_analyses$n)
## [1] 5680
model = mvmeta(mean ~ 1, data = models_pref_ethnicalsim_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_pref_ethnicalsim_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error        z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)    0.1573      0.0143  10.9657    0.0000    0.1291    0.1854  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 33.3460 (df = 6), p-value = 0.0000
## I-square statistic = 82.0%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##  logLik      AIC      BIC  
## -0.4393   2.8786   2.8245
H1c Preference for Similarity in Religion
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(pref_religioussim, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_pref_religioussim = data_included_documented_rescon_wide %>%
  select(-pref_religioussim) %>%
  map(~lm(data_included_documented_rescon_wide$pref_religioussim ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_pref_religioussim_coef = models_pref_religioussim %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_pref_religioussim_se = models_pref_religioussim %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_pref_religioussim_analyses = left_join(models_pref_religioussim_coef,
                                            models_pref_religioussim_se,
                                            by = "name") %>%
  mutate(outcome = "H2c) Preferred Religious Similarity")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(pref_religioussim)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_pref_religioussim_analyses$n = countries_rescon$Freq
sum(models_pref_religioussim_analyses$n)
## [1] 8396
model = mvmeta(mean ~ 1, data = models_pref_religioussim_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_pref_religioussim_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error       z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)    0.1439      0.0171  8.4172    0.0000    0.1104    0.1773  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 15.7427 (df = 6), p-value = 0.0152
## I-square statistic = 61.9%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
##   7.2453  -12.4906  -12.5446

Ideal Partner Preferences

H2a Preference for the Level of Financial Security- Successfulness
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(pref_level_financially_secure_successful_ambitious, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_pref_level_financially_secure_successful_ambitious = data_included_documented_rescon_wide %>%
  select(-pref_level_financially_secure_successful_ambitious) %>%
  map(~lm(data_included_documented_rescon_wide$pref_level_financially_secure_successful_ambitious ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_pref_level_financially_secure_successful_ambitious_coef = models_pref_level_financially_secure_successful_ambitious %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_pref_level_financially_secure_successful_ambitious_se = models_pref_level_financially_secure_successful_ambitious %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))

models_pref_level_financially_secure_successful_ambitious_analyses = left_join(models_pref_level_financially_secure_successful_ambitious_coef,
                                            models_pref_level_financially_secure_successful_ambitious_se,
                                            by = "name") %>%
  mutate(outcome = "H3a) Financial Security-Successfulness")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(pref_level_financially_secure_successful_ambitious)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_pref_level_financially_secure_successful_ambitious_analyses$n = countries_rescon$Freq
sum(models_pref_level_financially_secure_successful_ambitious_analyses$n)
## [1] 8139
model = mvmeta(mean ~ 1, data = models_pref_level_financially_secure_successful_ambitious_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_pref_level_financially_secure_successful_ambitious_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error        z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)    0.1426      0.0069  20.6251    0.0000    0.1291    0.1562  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 16.1524 (df = 6), p-value = 0.0130
## I-square statistic = 62.9%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
##  13.2641  -24.5282  -24.5823
H2b Preference for the Level of Confidence-Assertiveness
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(pref_level_confident_assertive , France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_pref_level_confident_assertive = data_included_documented_rescon_wide %>%
  select(-pref_level_confident_assertive) %>%
  map(~lm(data_included_documented_rescon_wide$pref_level_confident_assertive ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_pref_level_confident_assertive_coef = models_pref_level_confident_assertive %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_pref_level_confident_assertive_se = models_pref_level_confident_assertive %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_pref_level_confident_assertive_analyses = left_join(models_pref_level_confident_assertive_coef,
                                            models_pref_level_confident_assertive_se,
                                            by = "name") %>%
  mutate(outcome = "H3d) Confidence-Assertiveness")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(pref_level_confident_assertive)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_pref_level_confident_assertive_analyses$n = countries_rescon$Freq
sum(models_pref_level_confident_assertive_analyses$n)
## [1] 8292
model = mvmeta(mean ~ 1, data = models_pref_level_confident_assertive_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_pref_level_confident_assertive_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error        z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)    0.0734      0.0060  12.2476    0.0000    0.0617    0.0852  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 107.7961 (df = 6), p-value = 0.0000
## I-square statistic = 94.4%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
## -31.4557   64.9114   64.8573
H2c Preference for the Level of Education-Intelligence
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(pref_level_intelligence_educated, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_pref_level_intelligence_educated = data_included_documented_rescon_wide %>%
  select(-pref_level_intelligence_educated) %>%
  map(~lm(data_included_documented_rescon_wide$pref_level_intelligence_educated ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_pref_level_intelligence_educated_coef = models_pref_level_intelligence_educated %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_pref_level_intelligence_educated_se = models_pref_level_intelligence_educated %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_pref_level_intelligence_educated_analyses = left_join(models_pref_level_intelligence_educated_coef,
                                            models_pref_level_intelligence_educated_se,
                                            by = "name") %>%
  mutate(outcome = "H3e) Education-Intelligence")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(pref_level_intelligence_educated)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_pref_level_intelligence_educated_analyses$n = countries_rescon$Freq
sum(models_pref_level_intelligence_educated_analyses$n)
## [1] 8280
model = mvmeta(mean ~ 1, data = models_pref_level_intelligence_educated_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_pref_level_intelligence_educated_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error       z  Pr(>|z|)  95%ci.lb  95%ci.ub   
## (Intercept)    0.0124      0.0062  1.9872    0.0469    0.0002    0.0246  *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 93.7652 (df = 6), p-value = 0.0000
## I-square statistic = 93.6%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
## -24.7569   51.5138   51.4597
H2d Preference for the Level of Kindness-Supportiveness
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(pref_level_kind_supportive , France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_pref_level_kind_supportive = data_included_documented_rescon_wide %>%
  select(-pref_level_kind_supportive) %>%
  map(~lm(data_included_documented_rescon_wide$pref_level_kind_supportive ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_pref_level_kind_supportive_coef = models_pref_level_kind_supportive %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_pref_level_kind_supportive_se = models_pref_level_kind_supportive %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_pref_level_kind_supportive_analyses = left_join(models_pref_level_kind_supportive_coef,
                                            models_pref_level_kind_supportive_se,
                                            by = "name") %>%
  mutate(outcome = "H3b) Kindness-Supportiveness")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(pref_level_kind_supportive)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_pref_level_kind_supportive_analyses$n = countries_rescon$Freq
sum(models_pref_level_kind_supportive_analyses$n)
## [1] 8261
model = mvmeta(mean ~ 1, data = models_pref_level_kind_supportive_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_pref_level_kind_supportive_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error       z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)    0.0238      0.0055  4.3523    0.0000    0.0131    0.0345  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 36.0962 (df = 6), p-value = 0.0000
## I-square statistic = 83.4%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##  logLik      AIC      BIC  
##  4.9736  -7.9472  -8.0013
H2e Preference for the Level of Attractiveness
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(pref_level_attractiveness , France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_pref_level_attractiveness = data_included_documented_rescon_wide %>%
  select(-pref_level_attractiveness) %>%
  map(~lm(data_included_documented_rescon_wide$pref_level_attractiveness ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_pref_level_attractiveness_coef = models_pref_level_attractiveness %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_pref_level_attractiveness_se = models_pref_level_attractiveness %>%
 map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_pref_level_attractiveness_analyses = left_join(models_pref_level_attractiveness_coef,
                                            models_pref_level_attractiveness_se,
                                            by = "name") %>%
  mutate(outcome = "H3c) Attractiveness")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(pref_level_attractiveness)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_pref_level_attractiveness_analyses$n = countries_rescon$Freq
sum(models_pref_level_attractiveness_analyses$n)
## [1] 8153
model = mvmeta(mean ~ 1, data = models_pref_level_attractiveness_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_pref_level_attractiveness_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error       z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)    0.0715      0.0073  9.7341    0.0000    0.0571    0.0859  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 22.7699 (df = 6), p-value = 0.0009
## I-square statistic = 73.6%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
##   9.5856  -17.1712  -17.2253

Ideal Age and Height

H3a(1) Ideal Age (Importance)
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(imp_age, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_imp_age = data_included_documented_rescon_wide %>%
  select(-imp_age) %>%
  map(~lm(data_included_documented_rescon_wide$imp_age ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_imp_age_coef = models_imp_age %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_imp_age_se = models_imp_age %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_imp_age_analyses = left_join(models_imp_age_coef,
                                            models_imp_age_se,
                                            by = "name") %>%
  mutate(outcome = "H4a(1)) Ideal Age (Importance)")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(imp_age)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_imp_age_analyses$n = countries_rescon$Freq
sum(models_imp_age_analyses$n)
## [1] 8517
model = mvmeta(mean ~ 1, data = models_imp_age_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_imp_age_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error       z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)    0.0944      0.0111  8.5071    0.0000    0.0726    0.1161  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 19.3271 (df = 6), p-value = 0.0036
## I-square statistic = 69.0%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
##   8.4613  -14.9226  -14.9767
H3a(2) Ideal Age (Level)
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(ideal_age_rel, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_ideal_age_rel = data_included_documented_rescon_wide %>%
  select(-ideal_age_rel) %>%
  map(~lm(data_included_documented_rescon_wide$ideal_age_rel ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_ideal_age_rel_coef = models_ideal_age_rel %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_ideal_age_rel_se = models_ideal_age_rel %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_ideal_age_rel_analyses = left_join(models_ideal_age_rel_coef,
                                            models_ideal_age_rel_se,
                                            by = "name") %>%
  mutate(outcome = "H4a(2)) Ideal Age (Level)")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(ideal_age_rel)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_ideal_age_rel_analyses$n = countries_rescon$Freq
sum(models_ideal_age_rel_analyses$n)
## [1] 7771
model = mvmeta(mean ~ 1, data = models_ideal_age_rel_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_ideal_age_rel_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error       z  Pr(>|z|)  95%ci.lb  95%ci.ub   
## (Intercept)    0.0044      0.0246  0.1780    0.8587   -0.0438    0.0526   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 2.2741 (df = 6), p-value = 0.8928
## I-square statistic = 1.0%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
##  11.2587  -20.5174  -20.5715
H3b(1) Ideal Height (Importance)
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(imp_height, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_imp_height = data_included_documented_rescon_wide %>%
  select(-imp_height) %>%
  map(~lm(data_included_documented_rescon_wide$imp_height ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_imp_height_coef = models_imp_height %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_imp_height_se = models_imp_height %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_imp_height_analyses = left_join(models_imp_height_coef,
                                            models_imp_height_se,
                                            by = "name") %>%
  mutate(outcome = "H4b(1)) Ideal Height (Importance)")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(imp_height)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_imp_height_analyses$n = countries_rescon$Freq
sum(models_imp_height_analyses$n)
## [1] 8459
model = mvmeta(mean ~ 1, data = models_imp_height_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_imp_height_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error       z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)    0.1147      0.0118  9.7572    0.0000    0.0917    0.1378  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 5.7811 (df = 6), p-value = 0.4481
## I-square statistic = 1.0%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
##  14.8191  -27.6381  -27.6922
H3b(2) Ideal Height (Level)
data_included_documented_rescon_wide = data_included_documented_rescon %>%
  pivot_wider(names_from = country, values_from = political_orientation) %>%
  select(ideal_height, France, Germany, `United States of America`, Mexico,
         Italy, Brazil, Spain)

models_ideal_height = data_included_documented_rescon_wide %>%
  select(-ideal_height) %>%
  map(~lm(data_included_documented_rescon_wide$ideal_height ~ .x,
      data = data_included_documented_rescon_wide)) %>%
  map(lm.beta)

models_ideal_height_coef = models_ideal_height %>%
  map(coef) %>%
  as.data.frame() %>%
  rownames_to_column(var = "rowname") %>%
  filter(rowname != "(Intercept)") %>%
  pivot_longer(cols = -rowname) %>%
  select(-rowname) %>%
  rename(mean = value)

models_ideal_height_se = models_ideal_height %>%
  map(tidy) %>%
  tibble(models_pref_politicalsim_lin_se = ., Names = names(.)) %>%
  hoist(models_pref_politicalsim_lin_se, coefficients = "std.error") %>%
  select(-models_pref_politicalsim_lin_se) %>%
  unnest_wider(., coefficients, names_sep = "_") %>%
  select(coefficients_2, Names) %>%
  rename("name" = "Names",
         "se" = "coefficients_2") %>%
  mutate(name = ifelse(name == "United States of America",
                       "United.States.of.America", name))


models_ideal_height_analyses = left_join(models_ideal_height_coef,
                                            models_ideal_height_se,
                                            by = "name") %>%
  mutate(outcome = "H4b(2)) Ideal Height (Level)")

countries_rescon =
  data_included_documented_rescon %>%
  filter(!is.na(ideal_height)) %>%
  select(country) %>%
  table() %>%
  as.data.frame() %>%
  arrange(-Freq)

models_ideal_height_analyses$n = countries_rescon$Freq
sum(models_ideal_height_analyses$n)
## [1] 8112
model = mvmeta(mean ~ 1, data = models_ideal_height_analyses, S = se^2,
               method = "fixed")
summary(model)
## Call:  mvmeta(formula = mean ~ 1, S = se^2, data = models_ideal_height_analyses, 
##     method = "fixed")
## 
## Univariate fixed-effects meta-analysis
## Dimension: 1
## 
## Fixed-effects coefficients
##              Estimate  Std. Error       z  Pr(>|z|)  95%ci.lb  95%ci.ub     
## (Intercept)    0.0125      0.0036  3.5174    0.0004    0.0055    0.0195  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Univariate Cochran Q-test for heterogeneity:
## Q = 89.4342 (df = 6), p-value = 0.0000
## I-square statistic = 93.3%
## 
## 7 studies, 7 observations, 1 fixed and 0 random-effects parameters
##   logLik       AIC       BIC  
## -18.6924   39.3848   39.3307
LS0tDQp0aXRsZTogPGZvbnQgY29sb3I9IiM2NkMyQTUiPkV4cGxvcmF0b3J5IEFuYWx5c2VzPC9mb250Pg0KY3NsOiBhcGEtY3VzdG9tLW5vLWlzc3VlLmNzbA0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KZWRpdG9yX29wdGlvbnM6IA0KICBjaHVua19vdXRwdXRfdHlwZTogY29uc29sZQ0KLS0tDQoNCiMjIHsudGFic2V0fQ0KDQojIyMgTGlicmFyeQ0KYGBge3IgTGlicmFyeX0NCmxpYnJhcnkoZm9ybXIpDQpsaWJyYXJ5KGVmZmVjdHMpDQpsaWJyYXJ5KGVmZmVjdHNpemUpDQpsaWJyYXJ5KGxtZTQpDQpsaWJyYXJ5KHNqc3RhdHMpDQpsaWJyYXJ5KGxtZXJUZXN0KQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoZ2dwdWJyKQ0KbGlicmFyeShSQ29sb3JCcmV3ZXIpDQpsaWJyYXJ5KGNvZWZwbG90KQ0KbGlicmFyeSh0aWJibGUpDQpsaWJyYXJ5KHB1cnJyKSAjIGZvciBydW5uaW5nIG11bHRpcGxlIHJlZ3Jlc3Npb24NCmxpYnJhcnkoYnJvb20pDQpsaWJyYXJ5KG12bWV0YSkNCmxpYnJhcnkobG0uYmV0YSkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShrbml0cikNCg0KYXBhdGhlbWUgPSB0aGVtZV9idygpICsNCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCmBgYA0KDQojIyMgRGF0YQ0KTG9hZCBzZWxlY3RlZCBkYXRhIGJhc2VkIG9uIDAzX2NvZGVib29rDQpgYGB7cn0NCmRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZCA9IHJlYWQuY3N2KGZpbGUgPSAiZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkLmNzdiIpWywtMV0NCmBgYA0KDQojIyMgSW5jbHVzaW9uIG9mIERhdGENCmBgYHtyfQ0KY291bnRyaWVzID0gYXMuZGF0YS5mcmFtZSh0YWJsZShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQkY291bnRyeSkpICU+JQ0KICBhcnJhbmdlKC1GcmVxKQ0KDQprYWJsZShjb3VudHJpZXMpDQpgYGANCldlIHdpbGwgaW5jbHVkZSBhbGwgY291bnRyaWVzIHdpdGggbW9yZSB0aGFuIDUwMCBwYXJ0aWNpcGFudHMuIFRoaXMgYWxsb3dzIHVzIHRvIHNob3cgZWZmZWN0IHNpemVzIGZvciBhIGRpdmVyc2UgcmFuZ2Ugb2YgY291bnRyaWVzLg0KRGl2ZXJzaXR5IG9mIGNvdW50cmllcyBpcyBpbmRpY2F0ZWQgYnk6DQoNCiogbG9jYXRpb246IEV1cm9wZWFuIChGcmFuY2UsIEdlcm1hbnksIEl0YWx5LCBTcGFpbik7IE5vcnRoIEFtZXJpY2FuIChVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EpOyBTb3V0aCBBbWVyaWNhbiAoTWV4aWNvLCBCcmF6aWwpDQoqIGxhbmd1YWdlOiBGcmVuY2ggKEZyYW5jZSk7IEdlcm1hbiAoR2VybWFueSk7IEVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSk7IFNwYW5pc2ggKE1leGljbywgU3BhaW4pOyBJdGFsaWFuIChJdGFseSk7IFBvcnR1Z3Vlc2UgKEJyYXppbCkNCiogY3VsdHVyZTogV2VzdGVybiAoRnJhbmNlLCBHZXJtYW55LCBJdGFseSwgU3BhaW4sIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSk7IE5vbi1XZXN0ZXJuIChNZXhpY28sIEJyYXppbCkNCg0KU2FtcGxlIHNpemVzIG9mIG90aGVyIGNvdW50cmllcyBhcmUgdG9vIHNtYWxsIChuIDwgNTAwKSB0byByZWFjaCBhbnkgY29uY2x1c2lvbnMuDQoNCmBgYHtyfQ0Kc2V2ZW5fY291bnRyaWVzID0gY291bnRyaWVzICU+JSBmaWx0ZXIoRnJlcSA+IDUwMCkNCmRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb24gPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWQgJT4lDQogIGZpbHRlcihjb3VudHJ5ICVpbiUgc2V2ZW5fY291bnRyaWVzJFZhcjEpDQpgYGANCg0KYGBge3J9DQpjb3VudHJpZXNfcmVzY29uID0NCiAgZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgc2VsZWN0KGNvdW50cnkpICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIGFycmFuZ2UoLUZyZXEpDQoNCg0KY291bnRyaWVzX3Jlc2Nvbg0KYGBgDQoNCg0KIyMjIEFuYWx5c2VzIHsudGFic2V0IC5hY3RpdmV9DQojIyMjIFBvbGl0aWNhbCwgRXRobmljLCBhbmQgUmVsaWdpb3VzIFNpbWlsYXJpdHkgey50YWJzZXR9DQojIyMjIyBIMWEgUHJlZmVyZW5jZSBmb3IgU2ltaWxhcml0eSBpbiBQb2xpdGljYWwgQmVsaWVmcyB7LnRhYnNldH0NCiMjIyMjIyBIMWEoMSkgTGluZWFyIEVmZmVjdA0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY291bnRyeSwgdmFsdWVzX2Zyb20gPSBwb2xpdGljYWxfb3JpZW50YXRpb24pICU+JQ0KICBzZWxlY3QocHJlZl9wb2xpdGljYWxzaW0sIEZyYW5jZSwgR2VybWFueSwgYFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYWAsIE1leGljbywNCiAgICAgICAgIEl0YWx5LCBCcmF6aWwsIFNwYWluKQ0KDQptb2RlbHNfcHJlZl9wb2xpdGljYWxzaW0gPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgJT4lDQogIHNlbGVjdCgtcHJlZl9wb2xpdGljYWxzaW0pICU+JQ0KICBtYXAofmxtKHNjYWxlKGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSRwcmVmX3BvbGl0aWNhbHNpbSkgfiBzY2FsZSgueCksDQogICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX2NvZWYgPSBtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW0gJT4lDQogIG1hcChjb2VmKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICByb3duYW1lc190b19jb2x1bW4odmFyID0gInJvd25hbWUiKSAlPiUNCiAgZmlsdGVyKHJvd25hbWUgPT0gInNjYWxlKC54KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSA9IG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbSAlPiUNCiAgbWFwKHRpZHkpICU+JQ0KICB0aWJibGUobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSA9IC4sIE5hbWVzID0gbmFtZXMoLikpICU+JQ0KICBob2lzdChtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlLCBjb2VmZmljaWVudHMgPSAic3RkLmVycm9yIikgJT4lDQogIHNlbGVjdCgtbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSkgJT4lDQogIHVubmVzdF93aWRlciguLCBjb2VmZmljaWVudHMsIG5hbWVzX3NlcCA9ICJfIikgJT4lDQogIHNlbGVjdChjb2VmZmljaWVudHNfMiwgTmFtZXMpICU+JQ0KICByZW5hbWUoIm5hbWUiID0gIk5hbWVzIiwNCiAgICAgICAgICJzZSIgPSAiY29lZmZpY2llbnRzXzIiKSAlPiUNCiAgbXV0YXRlKG5hbWUgPSBpZmVsc2UobmFtZSA9PSAiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIlVuaXRlZC5TdGF0ZXMub2YuQW1lcmljYSIsIG5hbWUpKQ0KDQoNCm1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fYW5hbHlzZXMgPSBsZWZ0X2pvaW4obW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9jb2VmLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICJuYW1lIikgJT4lDQogIG11dGF0ZShvdXRjb21lID0gIkgyYSkgUHJlZmVyZWQgUG9saXRpY2FsIFNpbWlsYXJpdHkgLSBMaW5lYXIgRWZmZWN0IikNCg0KY291bnRyaWVzX3Jlc2NvbiA9DQogIGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb24gJT4lDQogIGZpbHRlcighaXMubmEocHJlZl9wb2xpdGljYWxzaW0pKSAlPiUNCiAgc2VsZWN0KGNvdW50cnkpICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIGFycmFuZ2UoLUZyZXEpDQoNCm1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fYW5hbHlzZXMkbiA9IGNvdW50cmllc19yZXNjb24kRnJlcQ0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUgZmlsdGVyKCFpcy5uYShwcmVmX3BvbGl0aWNhbHNpbSkpICU+JSBucm93KCkNCg0KbW9kZWwgPSBtdm1ldGEobWVhbiB+IDEsIGRhdGEgPSBtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX2FuYWx5c2VzLCBTID0gc2VeMiwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJmaXhlZCIpDQpzdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCiMjIyMjIyBIMWEoMikgUXVhZHJhdGljIEVmZmVjdDogUmVncmVzc2lvbiAxICh4IDw9IGJyZWFraW5nX3BvaW50KQ0KDQpgYGB7cn0NCmRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZV9yZWcxID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgZHBseXI6OmZpbHRlcihwb2xpdGljYWxfb3JpZW50YXRpb24gPD0gMykgJT4lDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBjb3VudHJ5LCB2YWx1ZXNfZnJvbSA9IHBvbGl0aWNhbF9vcmllbnRhdGlvbikgJT4lDQogIHNlbGVjdChwcmVmX3BvbGl0aWNhbHNpbSwgRnJhbmNlLCBHZXJtYW55LCBgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhYCwgTWV4aWNvLA0KICAgICAgICAgSXRhbHksIEJyYXppbCwgU3BhaW4pDQoNCm1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9yZWcxID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlX3JlZzEgJT4lDQogIHNlbGVjdCgtcHJlZl9wb2xpdGljYWxzaW0pICU+JQ0KICBtYXAofmxtKHNjYWxlKGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZV9yZWcxJHByZWZfcG9saXRpY2Fsc2ltKSB+DQogICAgICAgICAgICBzY2FsZSgueCksDQogICAgICAgICAgZGF0YSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZV9yZWcxKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fcXVhZF9jb2VmX3JlZzEgPSBtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fcmVnMSAlPiUNCiAgbWFwKGNvZWYpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAicm93bmFtZSIpICU+JQ0KICBmaWx0ZXIocm93bmFtZSA9PSAic2NhbGUoLngpIikgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gLXJvd25hbWUpICU+JQ0KICBzZWxlY3QoLXJvd25hbWUpICU+JQ0KICByZW5hbWUobWVhbiA9IHZhbHVlKQ0KDQoNCm1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9xdWFkX3NlX3JlZzEgPSBtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fcmVnMSAlPiUNCiAgbWFwKHRpZHkpICU+JQ0KICB0aWJibGUobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSA9IC4sIE5hbWVzID0gbmFtZXMoLikpICU+JQ0KICBob2lzdChtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlLCBjb2VmZmljaWVudHMgPSAic3RkLmVycm9yIikgJT4lDQogIHNlbGVjdCgtbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSkgJT4lDQogIHVubmVzdF93aWRlciguLCBjb2VmZmljaWVudHMsIG5hbWVzX3NlcCA9ICJfIikgJT4lDQogIHNlbGVjdChjb2VmZmljaWVudHNfMiwgTmFtZXMpICU+JQ0KICByZW5hbWUoIm5hbWUiID0gIk5hbWVzIiwNCiAgICAgICAgICJzZSIgPSAiY29lZmZpY2llbnRzXzIiKSAlPiUNCiAgbXV0YXRlKG5hbWUgPSBpZmVsc2UobmFtZSA9PSAiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIlVuaXRlZC5TdGF0ZXMub2YuQW1lcmljYSIsIG5hbWUpKQ0KDQoNCm1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9xdWFkX2FuYWx5c2VzX3JlZzEgPSBsZWZ0X2pvaW4obW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX3F1YWRfY29lZl9yZWcxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fcXVhZF9zZV9yZWcxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICJuYW1lIikgJT4lDQogIG11dGF0ZShvdXRjb21lID0gIkgyYSgxKSkgUHJlZmVycmVkIFBvbGl0aWNhbCBTaW1pbGFyaXR5IC0gUXVhZHJhdGljIEVmZmVjdCBSZWdyZXNzaW9uIDEiKQ0KDQptb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fcXVhZF9hbmFseXNlc19yZWcxJG4gPSBjb3VudHJpZXNfcmVzY29uJEZyZXENCg0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUgZmlsdGVyKHBvbGl0aWNhbF9vcmllbnRhdGlvbiA8PSAzLCAhaXMubmEocHJlZl9wb2xpdGljYWxzaW0pKSAlPiUgbnJvdygpDQoNCm1vZGVsID0gbXZtZXRhKG1lYW4gfiAxLCBkYXRhID0gbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX3F1YWRfYW5hbHlzZXNfcmVnMSwgUyA9IHNlXjIsDQogICAgICAgICAgICAgICBtZXRob2QgPSAiZml4ZWQiKQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQojIyMjIyMgSDFhKDIpIFF1YWRyYXRpYyBFZmZlY3Q6IFJlZ3Jlc3Npb24gMiAoeCA+PSBicmVha2luZ19wb2ludCkNCmBgYHtyfQ0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlX3JlZzIgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBkcGx5cjo6ZmlsdGVyKHBvbGl0aWNhbF9vcmllbnRhdGlvbiA+PSAzKSAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNvdW50cnksIHZhbHVlc19mcm9tID0gcG9saXRpY2FsX29yaWVudGF0aW9uKSAlPiUNCiAgc2VsZWN0KHByZWZfcG9saXRpY2Fsc2ltLCBGcmFuY2UsIEdlcm1hbnksIGBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2FgLCBNZXhpY28sDQogICAgICAgICBJdGFseSwgQnJhemlsLCBTcGFpbikNCg0KbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX3JlZzIgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGVfcmVnMiAlPiUNCiAgc2VsZWN0KC1wcmVmX3BvbGl0aWNhbHNpbSkgJT4lDQogIG1hcCh+bG0oc2NhbGUoZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlX3JlZzIkcHJlZl9wb2xpdGljYWxzaW0pIH4NCiAgICAgICAgICAgIHNjYWxlKC54KSwNCiAgICAgICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlX3JlZzIpKSAlPiUNCiAgbWFwKGxtLmJldGEpDQoNCm1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9xdWFkX2NvZWZfcmVnMiA9IG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9yZWcyICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lID09ICJzY2FsZSgueCkiKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtcm93bmFtZSkgJT4lDQogIHNlbGVjdCgtcm93bmFtZSkgJT4lDQogIHJlbmFtZShtZWFuID0gdmFsdWUpDQoNCg0KbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX3F1YWRfc2VfcmVnMiA9IG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9yZWcxICU+JQ0KICBtYXAodGlkeSkgJT4lDQogIHRpYmJsZShtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlID0gLiwgTmFtZXMgPSBuYW1lcyguKSkgJT4lDQogIGhvaXN0KG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UsIGNvZWZmaWNpZW50cyA9ICJzdGQuZXJyb3IiKSAlPiUNCiAgc2VsZWN0KC1tb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlKSAlPiUNCiAgdW5uZXN0X3dpZGVyKC4sIGNvZWZmaWNpZW50cywgbmFtZXNfc2VwID0gIl8iKSAlPiUNCiAgc2VsZWN0KGNvZWZmaWNpZW50c18yLCBOYW1lcykgJT4lDQogIHJlbmFtZSgibmFtZSIgPSAiTmFtZXMiLA0KICAgICAgICAgInNlIiA9ICJjb2VmZmljaWVudHNfMiIpICU+JQ0KICBtdXRhdGUobmFtZSA9IGlmZWxzZShuYW1lID09ICJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAiVW5pdGVkLlN0YXRlcy5vZi5BbWVyaWNhIiwgbmFtZSkpDQoNCg0KbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX3F1YWRfYW5hbHlzZXNfcmVnMiA9IGxlZnRfam9pbihtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fcXVhZF9jb2VmX3JlZzIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9xdWFkX3NlX3JlZzIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gIm5hbWUiKSAlPiUNCiAgbXV0YXRlKG91dGNvbWUgPSAiSDJhKDEpKSBQcmVmZXJyZWQgUG9saXRpY2FsIFNpbWlsYXJpdHkgLSBRdWFkcmF0aWMgRWZmZWN0IFJlZ3Jlc3Npb24gMiIpDQoNCm1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9xdWFkX2FuYWx5c2VzX3JlZzIkbiA9IGNvdW50cmllc19yZXNjb24kRnJlcQ0KDQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JSBmaWx0ZXIocG9saXRpY2FsX29yaWVudGF0aW9uID49IDMsICFpcy5uYShwcmVmX3BvbGl0aWNhbHNpbSkpICU+JSBucm93KCkNCg0KbW9kZWwgPSBtdm1ldGEobWVhbiB+IDEsIGRhdGEgPSBtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fcXVhZF9hbmFseXNlc19yZWcyLCBTID0gc2VeMiwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJmaXhlZCIpDQpzdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCiMjIyMjIEgxYiBQcmVmZXJlbmNlIGZvciBTaW1pbGFyaXR5IGluIEV0aG5pY2l0eS9SYWNlIHsudGFic2V0fQ0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY291bnRyeSwgdmFsdWVzX2Zyb20gPSBwb2xpdGljYWxfb3JpZW50YXRpb24pICU+JQ0KICBzZWxlY3QocHJlZl9ldGhuaWNhbHNpbSwgRnJhbmNlLCBHZXJtYW55LCBgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhYCwgTWV4aWNvLA0KICAgICAgICAgSXRhbHksIEJyYXppbCwgU3BhaW4pDQoNCm1vZGVsc19wcmVmX2V0aG5pY2Fsc2ltID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlICU+JQ0KICBzZWxlY3QoLXByZWZfZXRobmljYWxzaW0pICU+JQ0KICBtYXAofmxtKGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSRwcmVmX2V0aG5pY2Fsc2ltIH4gLngsDQogICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfcHJlZl9ldGhuaWNhbHNpbV9jb2VmID0gbW9kZWxzX3ByZWZfZXRobmljYWxzaW0gJT4lDQogIG1hcChjb2VmKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICByb3duYW1lc190b19jb2x1bW4odmFyID0gInJvd25hbWUiKSAlPiUNCiAgZmlsdGVyKHJvd25hbWUgIT0gIihJbnRlcmNlcHQpIikgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gLXJvd25hbWUpICU+JQ0KICBzZWxlY3QoLXJvd25hbWUpICU+JQ0KICByZW5hbWUobWVhbiA9IHZhbHVlKQ0KDQptb2RlbHNfcHJlZl9ldGhuaWNhbHNpbV9zZSA9IG1vZGVsc19wcmVmX2V0aG5pY2Fsc2ltICU+JQ0KIG1hcCh0aWR5KSAlPiUNCiAgdGliYmxlKG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UgPSAuLCBOYW1lcyA9IG5hbWVzKC4pKSAlPiUNCiAgaG9pc3QobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSwgY29lZmZpY2llbnRzID0gInN0ZC5lcnJvciIpICU+JQ0KICBzZWxlY3QoLW1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UpICU+JQ0KICB1bm5lc3Rfd2lkZXIoLiwgY29lZmZpY2llbnRzLCBuYW1lc19zZXAgPSAiXyIpICU+JQ0KICBzZWxlY3QoY29lZmZpY2llbnRzXzIsIE5hbWVzKSAlPiUNCiAgcmVuYW1lKCJuYW1lIiA9ICJOYW1lcyIsDQogICAgICAgICAic2UiID0gImNvZWZmaWNpZW50c18yIikgJT4lDQogIG11dGF0ZShuYW1lID0gaWZlbHNlKG5hbWUgPT0gIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICJVbml0ZWQuU3RhdGVzLm9mLkFtZXJpY2EiLCBuYW1lKSkNCg0KDQptb2RlbHNfcHJlZl9ldGhuaWNhbHNpbV9hbmFseXNlcyA9IGxlZnRfam9pbihtb2RlbHNfcHJlZl9ldGhuaWNhbHNpbV9jb2VmLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbHNfcHJlZl9ldGhuaWNhbHNpbV9zZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAibmFtZSIpICU+JQ0KICBtdXRhdGUob3V0Y29tZSA9ICJIMmIpIFByZWZlcnJlZCBFdGhuaWMgU2ltaWxhcml0eSIpDQoNCmNvdW50cmllc19yZXNjb24gPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHByZWZfZXRobmljYWxzaW0pKSAlPiUNCiAgc2VsZWN0KGNvdW50cnkpICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIGFycmFuZ2UoLUZyZXEpDQoNCm1vZGVsc19wcmVmX2V0aG5pY2Fsc2ltX2FuYWx5c2VzJG4gPSBjb3VudHJpZXNfcmVzY29uJEZyZXENCnN1bShtb2RlbHNfcHJlZl9ldGhuaWNhbHNpbV9hbmFseXNlcyRuKQ0KDQptb2RlbCA9IG12bWV0YShtZWFuIH4gMSwgZGF0YSA9IG1vZGVsc19wcmVmX2V0aG5pY2Fsc2ltX2FuYWx5c2VzLCBTID0gc2VeMiwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJmaXhlZCIpDQpzdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCiMjIyMjIEgxYyBQcmVmZXJlbmNlIGZvciBTaW1pbGFyaXR5IGluIFJlbGlnaW9uIHsudGFic2V0fQ0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY291bnRyeSwgdmFsdWVzX2Zyb20gPSBwb2xpdGljYWxfb3JpZW50YXRpb24pICU+JQ0KICBzZWxlY3QocHJlZl9yZWxpZ2lvdXNzaW0sIEZyYW5jZSwgR2VybWFueSwgYFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYWAsIE1leGljbywNCiAgICAgICAgIEl0YWx5LCBCcmF6aWwsIFNwYWluKQ0KDQptb2RlbHNfcHJlZl9yZWxpZ2lvdXNzaW0gPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgJT4lDQogIHNlbGVjdCgtcHJlZl9yZWxpZ2lvdXNzaW0pICU+JQ0KICBtYXAofmxtKGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSRwcmVmX3JlbGlnaW91c3NpbSB+IC54LA0KICAgICAgZGF0YSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSkpICU+JQ0KICBtYXAobG0uYmV0YSkNCg0KbW9kZWxzX3ByZWZfcmVsaWdpb3Vzc2ltX2NvZWYgPSBtb2RlbHNfcHJlZl9yZWxpZ2lvdXNzaW0gJT4lDQogIG1hcChjb2VmKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICByb3duYW1lc190b19jb2x1bW4odmFyID0gInJvd25hbWUiKSAlPiUNCiAgZmlsdGVyKHJvd25hbWUgIT0gIihJbnRlcmNlcHQpIikgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gLXJvd25hbWUpICU+JQ0KICBzZWxlY3QoLXJvd25hbWUpICU+JQ0KICByZW5hbWUobWVhbiA9IHZhbHVlKQ0KDQptb2RlbHNfcHJlZl9yZWxpZ2lvdXNzaW1fc2UgPSBtb2RlbHNfcHJlZl9yZWxpZ2lvdXNzaW0gJT4lDQogIG1hcCh0aWR5KSAlPiUNCiAgdGliYmxlKG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UgPSAuLCBOYW1lcyA9IG5hbWVzKC4pKSAlPiUNCiAgaG9pc3QobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSwgY29lZmZpY2llbnRzID0gInN0ZC5lcnJvciIpICU+JQ0KICBzZWxlY3QoLW1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UpICU+JQ0KICB1bm5lc3Rfd2lkZXIoLiwgY29lZmZpY2llbnRzLCBuYW1lc19zZXAgPSAiXyIpICU+JQ0KICBzZWxlY3QoY29lZmZpY2llbnRzXzIsIE5hbWVzKSAlPiUNCiAgcmVuYW1lKCJuYW1lIiA9ICJOYW1lcyIsDQogICAgICAgICAic2UiID0gImNvZWZmaWNpZW50c18yIikgJT4lDQogIG11dGF0ZShuYW1lID0gaWZlbHNlKG5hbWUgPT0gIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICJVbml0ZWQuU3RhdGVzLm9mLkFtZXJpY2EiLCBuYW1lKSkNCg0KDQptb2RlbHNfcHJlZl9yZWxpZ2lvdXNzaW1fYW5hbHlzZXMgPSBsZWZ0X2pvaW4obW9kZWxzX3ByZWZfcmVsaWdpb3Vzc2ltX2NvZWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsc19wcmVmX3JlbGlnaW91c3NpbV9zZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAibmFtZSIpICU+JQ0KICBtdXRhdGUob3V0Y29tZSA9ICJIMmMpIFByZWZlcnJlZCBSZWxpZ2lvdXMgU2ltaWxhcml0eSIpDQoNCmNvdW50cmllc19yZXNjb24gPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHByZWZfcmVsaWdpb3Vzc2ltKSkgJT4lDQogIHNlbGVjdChjb3VudHJ5KSAlPiUNCiAgdGFibGUoKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICBhcnJhbmdlKC1GcmVxKQ0KDQptb2RlbHNfcHJlZl9yZWxpZ2lvdXNzaW1fYW5hbHlzZXMkbiA9IGNvdW50cmllc19yZXNjb24kRnJlcQ0Kc3VtKG1vZGVsc19wcmVmX3JlbGlnaW91c3NpbV9hbmFseXNlcyRuKQ0KDQptb2RlbCA9IG12bWV0YShtZWFuIH4gMSwgZGF0YSA9IG1vZGVsc19wcmVmX3JlbGlnaW91c3NpbV9hbmFseXNlcywgUyA9IHNlXjIsDQogICAgICAgICAgICAgICBtZXRob2QgPSAiZml4ZWQiKQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQojIyMjIElkZWFsIFBhcnRuZXIgUHJlZmVyZW5jZXMgey50YWJzZXR9DQojIyMjIyBIMmEgUHJlZmVyZW5jZSBmb3IgdGhlIExldmVsIG9mIEZpbmFuY2lhbCBTZWN1cml0eS0gU3VjY2Vzc2Z1bG5lc3Mgey50YWJzZXR9DQpgYGB7cn0NCmRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb24gJT4lDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBjb3VudHJ5LCB2YWx1ZXNfZnJvbSA9IHBvbGl0aWNhbF9vcmllbnRhdGlvbikgJT4lDQogIHNlbGVjdChwcmVmX2xldmVsX2ZpbmFuY2lhbGx5X3NlY3VyZV9zdWNjZXNzZnVsX2FtYml0aW91cywgRnJhbmNlLCBHZXJtYW55LCBgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhYCwgTWV4aWNvLA0KICAgICAgICAgSXRhbHksIEJyYXppbCwgU3BhaW4pDQoNCm1vZGVsc19wcmVmX2xldmVsX2ZpbmFuY2lhbGx5X3NlY3VyZV9zdWNjZXNzZnVsX2FtYml0aW91cyA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSAlPiUNCiAgc2VsZWN0KC1wcmVmX2xldmVsX2ZpbmFuY2lhbGx5X3NlY3VyZV9zdWNjZXNzZnVsX2FtYml0aW91cykgJT4lDQogIG1hcCh+bG0oZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlJHByZWZfbGV2ZWxfZmluYW5jaWFsbHlfc2VjdXJlX3N1Y2Nlc3NmdWxfYW1iaXRpb3VzIH4gLngsDQogICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfcHJlZl9sZXZlbF9maW5hbmNpYWxseV9zZWN1cmVfc3VjY2Vzc2Z1bF9hbWJpdGlvdXNfY29lZiA9IG1vZGVsc19wcmVmX2xldmVsX2ZpbmFuY2lhbGx5X3NlY3VyZV9zdWNjZXNzZnVsX2FtYml0aW91cyAlPiUNCiAgbWFwKGNvZWYpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAicm93bmFtZSIpICU+JQ0KICBmaWx0ZXIocm93bmFtZSAhPSAiKEludGVyY2VwdCkiKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtcm93bmFtZSkgJT4lDQogIHNlbGVjdCgtcm93bmFtZSkgJT4lDQogIHJlbmFtZShtZWFuID0gdmFsdWUpDQoNCm1vZGVsc19wcmVmX2xldmVsX2ZpbmFuY2lhbGx5X3NlY3VyZV9zdWNjZXNzZnVsX2FtYml0aW91c19zZSA9IG1vZGVsc19wcmVmX2xldmVsX2ZpbmFuY2lhbGx5X3NlY3VyZV9zdWNjZXNzZnVsX2FtYml0aW91cyAlPiUNCiAgbWFwKHRpZHkpICU+JQ0KICB0aWJibGUobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSA9IC4sIE5hbWVzID0gbmFtZXMoLikpICU+JQ0KICBob2lzdChtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlLCBjb2VmZmljaWVudHMgPSAic3RkLmVycm9yIikgJT4lDQogIHNlbGVjdCgtbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSkgJT4lDQogIHVubmVzdF93aWRlciguLCBjb2VmZmljaWVudHMsIG5hbWVzX3NlcCA9ICJfIikgJT4lDQogIHNlbGVjdChjb2VmZmljaWVudHNfMiwgTmFtZXMpICU+JQ0KICByZW5hbWUoIm5hbWUiID0gIk5hbWVzIiwNCiAgICAgICAgICJzZSIgPSAiY29lZmZpY2llbnRzXzIiKSAlPiUNCiAgbXV0YXRlKG5hbWUgPSBpZmVsc2UobmFtZSA9PSAiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIlVuaXRlZC5TdGF0ZXMub2YuQW1lcmljYSIsIG5hbWUpKQ0KDQptb2RlbHNfcHJlZl9sZXZlbF9maW5hbmNpYWxseV9zZWN1cmVfc3VjY2Vzc2Z1bF9hbWJpdGlvdXNfYW5hbHlzZXMgPSBsZWZ0X2pvaW4obW9kZWxzX3ByZWZfbGV2ZWxfZmluYW5jaWFsbHlfc2VjdXJlX3N1Y2Nlc3NmdWxfYW1iaXRpb3VzX2NvZWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsc19wcmVmX2xldmVsX2ZpbmFuY2lhbGx5X3NlY3VyZV9zdWNjZXNzZnVsX2FtYml0aW91c19zZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAibmFtZSIpICU+JQ0KICBtdXRhdGUob3V0Y29tZSA9ICJIM2EpIEZpbmFuY2lhbCBTZWN1cml0eS1TdWNjZXNzZnVsbmVzcyIpDQoNCmNvdW50cmllc19yZXNjb24gPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHByZWZfbGV2ZWxfZmluYW5jaWFsbHlfc2VjdXJlX3N1Y2Nlc3NmdWxfYW1iaXRpb3VzKSkgJT4lDQogIHNlbGVjdChjb3VudHJ5KSAlPiUNCiAgdGFibGUoKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICBhcnJhbmdlKC1GcmVxKQ0KDQptb2RlbHNfcHJlZl9sZXZlbF9maW5hbmNpYWxseV9zZWN1cmVfc3VjY2Vzc2Z1bF9hbWJpdGlvdXNfYW5hbHlzZXMkbiA9IGNvdW50cmllc19yZXNjb24kRnJlcQ0Kc3VtKG1vZGVsc19wcmVmX2xldmVsX2ZpbmFuY2lhbGx5X3NlY3VyZV9zdWNjZXNzZnVsX2FtYml0aW91c19hbmFseXNlcyRuKQ0KDQptb2RlbCA9IG12bWV0YShtZWFuIH4gMSwgZGF0YSA9IG1vZGVsc19wcmVmX2xldmVsX2ZpbmFuY2lhbGx5X3NlY3VyZV9zdWNjZXNzZnVsX2FtYml0aW91c19hbmFseXNlcywgUyA9IHNlXjIsDQogICAgICAgICAgICAgICBtZXRob2QgPSAiZml4ZWQiKQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQoNCiMjIyMjIEgyYiBQcmVmZXJlbmNlIGZvciB0aGUgTGV2ZWwgb2YgQ29uZmlkZW5jZS1Bc3NlcnRpdmVuZXNzIHsudGFic2V0fQ0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY291bnRyeSwgdmFsdWVzX2Zyb20gPSBwb2xpdGljYWxfb3JpZW50YXRpb24pICU+JQ0KICBzZWxlY3QocHJlZl9sZXZlbF9jb25maWRlbnRfYXNzZXJ0aXZlICwgRnJhbmNlLCBHZXJtYW55LCBgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhYCwgTWV4aWNvLA0KICAgICAgICAgSXRhbHksIEJyYXppbCwgU3BhaW4pDQoNCm1vZGVsc19wcmVmX2xldmVsX2NvbmZpZGVudF9hc3NlcnRpdmUgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgJT4lDQogIHNlbGVjdCgtcHJlZl9sZXZlbF9jb25maWRlbnRfYXNzZXJ0aXZlKSAlPiUNCiAgbWFwKH5sbShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUkcHJlZl9sZXZlbF9jb25maWRlbnRfYXNzZXJ0aXZlIH4gLngsDQogICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfcHJlZl9sZXZlbF9jb25maWRlbnRfYXNzZXJ0aXZlX2NvZWYgPSBtb2RlbHNfcHJlZl9sZXZlbF9jb25maWRlbnRfYXNzZXJ0aXZlICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX3ByZWZfbGV2ZWxfY29uZmlkZW50X2Fzc2VydGl2ZV9zZSA9IG1vZGVsc19wcmVmX2xldmVsX2NvbmZpZGVudF9hc3NlcnRpdmUgJT4lDQogIG1hcCh0aWR5KSAlPiUNCiAgdGliYmxlKG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UgPSAuLCBOYW1lcyA9IG5hbWVzKC4pKSAlPiUNCiAgaG9pc3QobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSwgY29lZmZpY2llbnRzID0gInN0ZC5lcnJvciIpICU+JQ0KICBzZWxlY3QoLW1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UpICU+JQ0KICB1bm5lc3Rfd2lkZXIoLiwgY29lZmZpY2llbnRzLCBuYW1lc19zZXAgPSAiXyIpICU+JQ0KICBzZWxlY3QoY29lZmZpY2llbnRzXzIsIE5hbWVzKSAlPiUNCiAgcmVuYW1lKCJuYW1lIiA9ICJOYW1lcyIsDQogICAgICAgICAic2UiID0gImNvZWZmaWNpZW50c18yIikgJT4lDQogIG11dGF0ZShuYW1lID0gaWZlbHNlKG5hbWUgPT0gIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICJVbml0ZWQuU3RhdGVzLm9mLkFtZXJpY2EiLCBuYW1lKSkNCg0KDQptb2RlbHNfcHJlZl9sZXZlbF9jb25maWRlbnRfYXNzZXJ0aXZlX2FuYWx5c2VzID0gbGVmdF9qb2luKG1vZGVsc19wcmVmX2xldmVsX2NvbmZpZGVudF9hc3NlcnRpdmVfY29lZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxzX3ByZWZfbGV2ZWxfY29uZmlkZW50X2Fzc2VydGl2ZV9zZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAibmFtZSIpICU+JQ0KICBtdXRhdGUob3V0Y29tZSA9ICJIM2QpIENvbmZpZGVuY2UtQXNzZXJ0aXZlbmVzcyIpDQoNCmNvdW50cmllc19yZXNjb24gPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHByZWZfbGV2ZWxfY29uZmlkZW50X2Fzc2VydGl2ZSkpICU+JQ0KICBzZWxlY3QoY291bnRyeSkgJT4lDQogIHRhYmxlKCkgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgYXJyYW5nZSgtRnJlcSkNCg0KbW9kZWxzX3ByZWZfbGV2ZWxfY29uZmlkZW50X2Fzc2VydGl2ZV9hbmFseXNlcyRuID0gY291bnRyaWVzX3Jlc2NvbiRGcmVxDQpzdW0obW9kZWxzX3ByZWZfbGV2ZWxfY29uZmlkZW50X2Fzc2VydGl2ZV9hbmFseXNlcyRuKQ0KDQptb2RlbCA9IG12bWV0YShtZWFuIH4gMSwgZGF0YSA9IG1vZGVsc19wcmVmX2xldmVsX2NvbmZpZGVudF9hc3NlcnRpdmVfYW5hbHlzZXMsIFMgPSBzZV4yLA0KICAgICAgICAgICAgICAgbWV0aG9kID0gImZpeGVkIikNCnN1bW1hcnkobW9kZWwpDQpgYGANCg0KDQojIyMjIyBIMmMgUHJlZmVyZW5jZSBmb3IgdGhlIExldmVsIG9mIEVkdWNhdGlvbi1JbnRlbGxpZ2VuY2Ugey50YWJzZXR9DQpgYGB7cn0NCmRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb24gJT4lDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBjb3VudHJ5LCB2YWx1ZXNfZnJvbSA9IHBvbGl0aWNhbF9vcmllbnRhdGlvbikgJT4lDQogIHNlbGVjdChwcmVmX2xldmVsX2ludGVsbGlnZW5jZV9lZHVjYXRlZCwgRnJhbmNlLCBHZXJtYW55LCBgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhYCwgTWV4aWNvLA0KICAgICAgICAgSXRhbHksIEJyYXppbCwgU3BhaW4pDQoNCm1vZGVsc19wcmVmX2xldmVsX2ludGVsbGlnZW5jZV9lZHVjYXRlZCA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSAlPiUNCiAgc2VsZWN0KC1wcmVmX2xldmVsX2ludGVsbGlnZW5jZV9lZHVjYXRlZCkgJT4lDQogIG1hcCh+bG0oZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlJHByZWZfbGV2ZWxfaW50ZWxsaWdlbmNlX2VkdWNhdGVkIH4gLngsDQogICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfcHJlZl9sZXZlbF9pbnRlbGxpZ2VuY2VfZWR1Y2F0ZWRfY29lZiA9IG1vZGVsc19wcmVmX2xldmVsX2ludGVsbGlnZW5jZV9lZHVjYXRlZCAlPiUNCiAgbWFwKGNvZWYpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAicm93bmFtZSIpICU+JQ0KICBmaWx0ZXIocm93bmFtZSAhPSAiKEludGVyY2VwdCkiKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtcm93bmFtZSkgJT4lDQogIHNlbGVjdCgtcm93bmFtZSkgJT4lDQogIHJlbmFtZShtZWFuID0gdmFsdWUpDQoNCm1vZGVsc19wcmVmX2xldmVsX2ludGVsbGlnZW5jZV9lZHVjYXRlZF9zZSA9IG1vZGVsc19wcmVmX2xldmVsX2ludGVsbGlnZW5jZV9lZHVjYXRlZCAlPiUNCiAgbWFwKHRpZHkpICU+JQ0KICB0aWJibGUobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSA9IC4sIE5hbWVzID0gbmFtZXMoLikpICU+JQ0KICBob2lzdChtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlLCBjb2VmZmljaWVudHMgPSAic3RkLmVycm9yIikgJT4lDQogIHNlbGVjdCgtbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSkgJT4lDQogIHVubmVzdF93aWRlciguLCBjb2VmZmljaWVudHMsIG5hbWVzX3NlcCA9ICJfIikgJT4lDQogIHNlbGVjdChjb2VmZmljaWVudHNfMiwgTmFtZXMpICU+JQ0KICByZW5hbWUoIm5hbWUiID0gIk5hbWVzIiwNCiAgICAgICAgICJzZSIgPSAiY29lZmZpY2llbnRzXzIiKSAlPiUNCiAgbXV0YXRlKG5hbWUgPSBpZmVsc2UobmFtZSA9PSAiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIlVuaXRlZC5TdGF0ZXMub2YuQW1lcmljYSIsIG5hbWUpKQ0KDQoNCm1vZGVsc19wcmVmX2xldmVsX2ludGVsbGlnZW5jZV9lZHVjYXRlZF9hbmFseXNlcyA9IGxlZnRfam9pbihtb2RlbHNfcHJlZl9sZXZlbF9pbnRlbGxpZ2VuY2VfZWR1Y2F0ZWRfY29lZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxzX3ByZWZfbGV2ZWxfaW50ZWxsaWdlbmNlX2VkdWNhdGVkX3NlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICJuYW1lIikgJT4lDQogIG11dGF0ZShvdXRjb21lID0gIkgzZSkgRWR1Y2F0aW9uLUludGVsbGlnZW5jZSIpDQoNCmNvdW50cmllc19yZXNjb24gPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHByZWZfbGV2ZWxfaW50ZWxsaWdlbmNlX2VkdWNhdGVkKSkgJT4lDQogIHNlbGVjdChjb3VudHJ5KSAlPiUNCiAgdGFibGUoKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICBhcnJhbmdlKC1GcmVxKQ0KDQptb2RlbHNfcHJlZl9sZXZlbF9pbnRlbGxpZ2VuY2VfZWR1Y2F0ZWRfYW5hbHlzZXMkbiA9IGNvdW50cmllc19yZXNjb24kRnJlcQ0Kc3VtKG1vZGVsc19wcmVmX2xldmVsX2ludGVsbGlnZW5jZV9lZHVjYXRlZF9hbmFseXNlcyRuKQ0KDQptb2RlbCA9IG12bWV0YShtZWFuIH4gMSwgZGF0YSA9IG1vZGVsc19wcmVmX2xldmVsX2ludGVsbGlnZW5jZV9lZHVjYXRlZF9hbmFseXNlcywgUyA9IHNlXjIsDQogICAgICAgICAgICAgICBtZXRob2QgPSAiZml4ZWQiKQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQojIyMjIyBIMmQgUHJlZmVyZW5jZSBmb3IgdGhlIExldmVsIG9mIEtpbmRuZXNzLVN1cHBvcnRpdmVuZXNzIHsudGFic2V0fQ0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY291bnRyeSwgdmFsdWVzX2Zyb20gPSBwb2xpdGljYWxfb3JpZW50YXRpb24pICU+JQ0KICBzZWxlY3QocHJlZl9sZXZlbF9raW5kX3N1cHBvcnRpdmUgLCBGcmFuY2UsIEdlcm1hbnksIGBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2FgLCBNZXhpY28sDQogICAgICAgICBJdGFseSwgQnJhemlsLCBTcGFpbikNCg0KbW9kZWxzX3ByZWZfbGV2ZWxfa2luZF9zdXBwb3J0aXZlID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlICU+JQ0KICBzZWxlY3QoLXByZWZfbGV2ZWxfa2luZF9zdXBwb3J0aXZlKSAlPiUNCiAgbWFwKH5sbShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUkcHJlZl9sZXZlbF9raW5kX3N1cHBvcnRpdmUgfiAueCwNCiAgICAgIGRhdGEgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUpKSAlPiUNCiAgbWFwKGxtLmJldGEpDQoNCm1vZGVsc19wcmVmX2xldmVsX2tpbmRfc3VwcG9ydGl2ZV9jb2VmID0gbW9kZWxzX3ByZWZfbGV2ZWxfa2luZF9zdXBwb3J0aXZlICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX3ByZWZfbGV2ZWxfa2luZF9zdXBwb3J0aXZlX3NlID0gbW9kZWxzX3ByZWZfbGV2ZWxfa2luZF9zdXBwb3J0aXZlICU+JQ0KICBtYXAodGlkeSkgJT4lDQogIHRpYmJsZShtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlID0gLiwgTmFtZXMgPSBuYW1lcyguKSkgJT4lDQogIGhvaXN0KG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UsIGNvZWZmaWNpZW50cyA9ICJzdGQuZXJyb3IiKSAlPiUNCiAgc2VsZWN0KC1tb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlKSAlPiUNCiAgdW5uZXN0X3dpZGVyKC4sIGNvZWZmaWNpZW50cywgbmFtZXNfc2VwID0gIl8iKSAlPiUNCiAgc2VsZWN0KGNvZWZmaWNpZW50c18yLCBOYW1lcykgJT4lDQogIHJlbmFtZSgibmFtZSIgPSAiTmFtZXMiLA0KICAgICAgICAgInNlIiA9ICJjb2VmZmljaWVudHNfMiIpICU+JQ0KICBtdXRhdGUobmFtZSA9IGlmZWxzZShuYW1lID09ICJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAiVW5pdGVkLlN0YXRlcy5vZi5BbWVyaWNhIiwgbmFtZSkpDQoNCg0KbW9kZWxzX3ByZWZfbGV2ZWxfa2luZF9zdXBwb3J0aXZlX2FuYWx5c2VzID0gbGVmdF9qb2luKG1vZGVsc19wcmVmX2xldmVsX2tpbmRfc3VwcG9ydGl2ZV9jb2VmLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbHNfcHJlZl9sZXZlbF9raW5kX3N1cHBvcnRpdmVfc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gIm5hbWUiKSAlPiUNCiAgbXV0YXRlKG91dGNvbWUgPSAiSDNiKSBLaW5kbmVzcy1TdXBwb3J0aXZlbmVzcyIpDQoNCmNvdW50cmllc19yZXNjb24gPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHByZWZfbGV2ZWxfa2luZF9zdXBwb3J0aXZlKSkgJT4lDQogIHNlbGVjdChjb3VudHJ5KSAlPiUNCiAgdGFibGUoKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICBhcnJhbmdlKC1GcmVxKQ0KDQptb2RlbHNfcHJlZl9sZXZlbF9raW5kX3N1cHBvcnRpdmVfYW5hbHlzZXMkbiA9IGNvdW50cmllc19yZXNjb24kRnJlcQ0Kc3VtKG1vZGVsc19wcmVmX2xldmVsX2tpbmRfc3VwcG9ydGl2ZV9hbmFseXNlcyRuKQ0KDQptb2RlbCA9IG12bWV0YShtZWFuIH4gMSwgZGF0YSA9IG1vZGVsc19wcmVmX2xldmVsX2tpbmRfc3VwcG9ydGl2ZV9hbmFseXNlcywgUyA9IHNlXjIsDQogICAgICAgICAgICAgICBtZXRob2QgPSAiZml4ZWQiKQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQojIyMjIyBIMmUgUHJlZmVyZW5jZSBmb3IgdGhlIExldmVsIG9mIEF0dHJhY3RpdmVuZXNzIHsudGFic2V0fQ0KYGBge3J9DQpkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY291bnRyeSwgdmFsdWVzX2Zyb20gPSBwb2xpdGljYWxfb3JpZW50YXRpb24pICU+JQ0KICBzZWxlY3QocHJlZl9sZXZlbF9hdHRyYWN0aXZlbmVzcyAsIEZyYW5jZSwgR2VybWFueSwgYFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYWAsIE1leGljbywNCiAgICAgICAgIEl0YWx5LCBCcmF6aWwsIFNwYWluKQ0KDQptb2RlbHNfcHJlZl9sZXZlbF9hdHRyYWN0aXZlbmVzcyA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSAlPiUNCiAgc2VsZWN0KC1wcmVmX2xldmVsX2F0dHJhY3RpdmVuZXNzKSAlPiUNCiAgbWFwKH5sbShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUkcHJlZl9sZXZlbF9hdHRyYWN0aXZlbmVzcyB+IC54LA0KICAgICAgZGF0YSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSkpICU+JQ0KICBtYXAobG0uYmV0YSkNCg0KbW9kZWxzX3ByZWZfbGV2ZWxfYXR0cmFjdGl2ZW5lc3NfY29lZiA9IG1vZGVsc19wcmVmX2xldmVsX2F0dHJhY3RpdmVuZXNzICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX3ByZWZfbGV2ZWxfYXR0cmFjdGl2ZW5lc3Nfc2UgPSBtb2RlbHNfcHJlZl9sZXZlbF9hdHRyYWN0aXZlbmVzcyAlPiUNCiBtYXAodGlkeSkgJT4lDQogIHRpYmJsZShtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlID0gLiwgTmFtZXMgPSBuYW1lcyguKSkgJT4lDQogIGhvaXN0KG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UsIGNvZWZmaWNpZW50cyA9ICJzdGQuZXJyb3IiKSAlPiUNCiAgc2VsZWN0KC1tb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlKSAlPiUNCiAgdW5uZXN0X3dpZGVyKC4sIGNvZWZmaWNpZW50cywgbmFtZXNfc2VwID0gIl8iKSAlPiUNCiAgc2VsZWN0KGNvZWZmaWNpZW50c18yLCBOYW1lcykgJT4lDQogIHJlbmFtZSgibmFtZSIgPSAiTmFtZXMiLA0KICAgICAgICAgInNlIiA9ICJjb2VmZmljaWVudHNfMiIpICU+JQ0KICBtdXRhdGUobmFtZSA9IGlmZWxzZShuYW1lID09ICJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAiVW5pdGVkLlN0YXRlcy5vZi5BbWVyaWNhIiwgbmFtZSkpDQoNCg0KbW9kZWxzX3ByZWZfbGV2ZWxfYXR0cmFjdGl2ZW5lc3NfYW5hbHlzZXMgPSBsZWZ0X2pvaW4obW9kZWxzX3ByZWZfbGV2ZWxfYXR0cmFjdGl2ZW5lc3NfY29lZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxzX3ByZWZfbGV2ZWxfYXR0cmFjdGl2ZW5lc3Nfc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gIm5hbWUiKSAlPiUNCiAgbXV0YXRlKG91dGNvbWUgPSAiSDNjKSBBdHRyYWN0aXZlbmVzcyIpDQoNCmNvdW50cmllc19yZXNjb24gPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHByZWZfbGV2ZWxfYXR0cmFjdGl2ZW5lc3MpKSAlPiUNCiAgc2VsZWN0KGNvdW50cnkpICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIGFycmFuZ2UoLUZyZXEpDQoNCm1vZGVsc19wcmVmX2xldmVsX2F0dHJhY3RpdmVuZXNzX2FuYWx5c2VzJG4gPSBjb3VudHJpZXNfcmVzY29uJEZyZXENCnN1bShtb2RlbHNfcHJlZl9sZXZlbF9hdHRyYWN0aXZlbmVzc19hbmFseXNlcyRuKQ0KDQptb2RlbCA9IG12bWV0YShtZWFuIH4gMSwgZGF0YSA9IG1vZGVsc19wcmVmX2xldmVsX2F0dHJhY3RpdmVuZXNzX2FuYWx5c2VzLCBTID0gc2VeMiwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJmaXhlZCIpDQpzdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCiMjIyMgSWRlYWwgQWdlIGFuZCBIZWlnaHQgey50YWJzZXR9DQojIyMjIyBIM2EoMSkgSWRlYWwgQWdlIChJbXBvcnRhbmNlKSB7LnRhYnNldH0NCmBgYHtyfQ0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNvdW50cnksIHZhbHVlc19mcm9tID0gcG9saXRpY2FsX29yaWVudGF0aW9uKSAlPiUNCiAgc2VsZWN0KGltcF9hZ2UsIEZyYW5jZSwgR2VybWFueSwgYFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYWAsIE1leGljbywNCiAgICAgICAgIEl0YWx5LCBCcmF6aWwsIFNwYWluKQ0KDQptb2RlbHNfaW1wX2FnZSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSAlPiUNCiAgc2VsZWN0KC1pbXBfYWdlKSAlPiUNCiAgbWFwKH5sbShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUkaW1wX2FnZSB+IC54LA0KICAgICAgZGF0YSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSkpICU+JQ0KICBtYXAobG0uYmV0YSkNCg0KbW9kZWxzX2ltcF9hZ2VfY29lZiA9IG1vZGVsc19pbXBfYWdlICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX2ltcF9hZ2Vfc2UgPSBtb2RlbHNfaW1wX2FnZSAlPiUNCiAgbWFwKHRpZHkpICU+JQ0KICB0aWJibGUobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSA9IC4sIE5hbWVzID0gbmFtZXMoLikpICU+JQ0KICBob2lzdChtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlLCBjb2VmZmljaWVudHMgPSAic3RkLmVycm9yIikgJT4lDQogIHNlbGVjdCgtbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSkgJT4lDQogIHVubmVzdF93aWRlciguLCBjb2VmZmljaWVudHMsIG5hbWVzX3NlcCA9ICJfIikgJT4lDQogIHNlbGVjdChjb2VmZmljaWVudHNfMiwgTmFtZXMpICU+JQ0KICByZW5hbWUoIm5hbWUiID0gIk5hbWVzIiwNCiAgICAgICAgICJzZSIgPSAiY29lZmZpY2llbnRzXzIiKSAlPiUNCiAgbXV0YXRlKG5hbWUgPSBpZmVsc2UobmFtZSA9PSAiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIlVuaXRlZC5TdGF0ZXMub2YuQW1lcmljYSIsIG5hbWUpKQ0KDQoNCm1vZGVsc19pbXBfYWdlX2FuYWx5c2VzID0gbGVmdF9qb2luKG1vZGVsc19pbXBfYWdlX2NvZWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsc19pbXBfYWdlX3NlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICJuYW1lIikgJT4lDQogIG11dGF0ZShvdXRjb21lID0gIkg0YSgxKSkgSWRlYWwgQWdlIChJbXBvcnRhbmNlKSIpDQoNCmNvdW50cmllc19yZXNjb24gPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGltcF9hZ2UpKSAlPiUNCiAgc2VsZWN0KGNvdW50cnkpICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIGFycmFuZ2UoLUZyZXEpDQoNCm1vZGVsc19pbXBfYWdlX2FuYWx5c2VzJG4gPSBjb3VudHJpZXNfcmVzY29uJEZyZXENCnN1bShtb2RlbHNfaW1wX2FnZV9hbmFseXNlcyRuKQ0KDQptb2RlbCA9IG12bWV0YShtZWFuIH4gMSwgZGF0YSA9IG1vZGVsc19pbXBfYWdlX2FuYWx5c2VzLCBTID0gc2VeMiwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJmaXhlZCIpDQpzdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCiMjIyMjIEgzYSgyKSBJZGVhbCBBZ2UgKExldmVsKSB7LnRhYnNldH0NCmBgYHtyfQ0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNvdW50cnksIHZhbHVlc19mcm9tID0gcG9saXRpY2FsX29yaWVudGF0aW9uKSAlPiUNCiAgc2VsZWN0KGlkZWFsX2FnZV9yZWwsIEZyYW5jZSwgR2VybWFueSwgYFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYWAsIE1leGljbywNCiAgICAgICAgIEl0YWx5LCBCcmF6aWwsIFNwYWluKQ0KDQptb2RlbHNfaWRlYWxfYWdlX3JlbCA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSAlPiUNCiAgc2VsZWN0KC1pZGVhbF9hZ2VfcmVsKSAlPiUNCiAgbWFwKH5sbShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUkaWRlYWxfYWdlX3JlbCB+IC54LA0KICAgICAgZGF0YSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSkpICU+JQ0KICBtYXAobG0uYmV0YSkNCg0KbW9kZWxzX2lkZWFsX2FnZV9yZWxfY29lZiA9IG1vZGVsc19pZGVhbF9hZ2VfcmVsICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX2lkZWFsX2FnZV9yZWxfc2UgPSBtb2RlbHNfaWRlYWxfYWdlX3JlbCAlPiUNCiAgbWFwKHRpZHkpICU+JQ0KICB0aWJibGUobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSA9IC4sIE5hbWVzID0gbmFtZXMoLikpICU+JQ0KICBob2lzdChtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlLCBjb2VmZmljaWVudHMgPSAic3RkLmVycm9yIikgJT4lDQogIHNlbGVjdCgtbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSkgJT4lDQogIHVubmVzdF93aWRlciguLCBjb2VmZmljaWVudHMsIG5hbWVzX3NlcCA9ICJfIikgJT4lDQogIHNlbGVjdChjb2VmZmljaWVudHNfMiwgTmFtZXMpICU+JQ0KICByZW5hbWUoIm5hbWUiID0gIk5hbWVzIiwNCiAgICAgICAgICJzZSIgPSAiY29lZmZpY2llbnRzXzIiKSAlPiUNCiAgbXV0YXRlKG5hbWUgPSBpZmVsc2UobmFtZSA9PSAiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIlVuaXRlZC5TdGF0ZXMub2YuQW1lcmljYSIsIG5hbWUpKQ0KDQoNCm1vZGVsc19pZGVhbF9hZ2VfcmVsX2FuYWx5c2VzID0gbGVmdF9qb2luKG1vZGVsc19pZGVhbF9hZ2VfcmVsX2NvZWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsc19pZGVhbF9hZ2VfcmVsX3NlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICJuYW1lIikgJT4lDQogIG11dGF0ZShvdXRjb21lID0gIkg0YSgyKSkgSWRlYWwgQWdlIChMZXZlbCkiKQ0KDQpjb3VudHJpZXNfcmVzY29uID0NCiAgZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgZmlsdGVyKCFpcy5uYShpZGVhbF9hZ2VfcmVsKSkgJT4lDQogIHNlbGVjdChjb3VudHJ5KSAlPiUNCiAgdGFibGUoKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICBhcnJhbmdlKC1GcmVxKQ0KDQptb2RlbHNfaWRlYWxfYWdlX3JlbF9hbmFseXNlcyRuID0gY291bnRyaWVzX3Jlc2NvbiRGcmVxDQpzdW0obW9kZWxzX2lkZWFsX2FnZV9yZWxfYW5hbHlzZXMkbikNCg0KbW9kZWwgPSBtdm1ldGEobWVhbiB+IDEsIGRhdGEgPSBtb2RlbHNfaWRlYWxfYWdlX3JlbF9hbmFseXNlcywgUyA9IHNlXjIsDQogICAgICAgICAgICAgICBtZXRob2QgPSAiZml4ZWQiKQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQojIyMjIyBIM2IoMSkgSWRlYWwgSGVpZ2h0IChJbXBvcnRhbmNlKSB7LnRhYnNldH0NCmBgYHtyfQ0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNvdW50cnksIHZhbHVlc19mcm9tID0gcG9saXRpY2FsX29yaWVudGF0aW9uKSAlPiUNCiAgc2VsZWN0KGltcF9oZWlnaHQsIEZyYW5jZSwgR2VybWFueSwgYFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYWAsIE1leGljbywNCiAgICAgICAgIEl0YWx5LCBCcmF6aWwsIFNwYWluKQ0KDQptb2RlbHNfaW1wX2hlaWdodCA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSAlPiUNCiAgc2VsZWN0KC1pbXBfaGVpZ2h0KSAlPiUNCiAgbWFwKH5sbShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUkaW1wX2hlaWdodCB+IC54LA0KICAgICAgZGF0YSA9IGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb25fd2lkZSkpICU+JQ0KICBtYXAobG0uYmV0YSkNCg0KbW9kZWxzX2ltcF9oZWlnaHRfY29lZiA9IG1vZGVsc19pbXBfaGVpZ2h0ICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX2ltcF9oZWlnaHRfc2UgPSBtb2RlbHNfaW1wX2hlaWdodCAlPiUNCiAgbWFwKHRpZHkpICU+JQ0KICB0aWJibGUobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSA9IC4sIE5hbWVzID0gbmFtZXMoLikpICU+JQ0KICBob2lzdChtb2RlbHNfcHJlZl9wb2xpdGljYWxzaW1fbGluX3NlLCBjb2VmZmljaWVudHMgPSAic3RkLmVycm9yIikgJT4lDQogIHNlbGVjdCgtbW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSkgJT4lDQogIHVubmVzdF93aWRlciguLCBjb2VmZmljaWVudHMsIG5hbWVzX3NlcCA9ICJfIikgJT4lDQogIHNlbGVjdChjb2VmZmljaWVudHNfMiwgTmFtZXMpICU+JQ0KICByZW5hbWUoIm5hbWUiID0gIk5hbWVzIiwNCiAgICAgICAgICJzZSIgPSAiY29lZmZpY2llbnRzXzIiKSAlPiUNCiAgbXV0YXRlKG5hbWUgPSBpZmVsc2UobmFtZSA9PSAiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIlVuaXRlZC5TdGF0ZXMub2YuQW1lcmljYSIsIG5hbWUpKQ0KDQoNCm1vZGVsc19pbXBfaGVpZ2h0X2FuYWx5c2VzID0gbGVmdF9qb2luKG1vZGVsc19pbXBfaGVpZ2h0X2NvZWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsc19pbXBfaGVpZ2h0X3NlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICJuYW1lIikgJT4lDQogIG11dGF0ZShvdXRjb21lID0gIkg0YigxKSkgSWRlYWwgSGVpZ2h0IChJbXBvcnRhbmNlKSIpDQoNCmNvdW50cmllc19yZXNjb24gPQ0KICBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGltcF9oZWlnaHQpKSAlPiUNCiAgc2VsZWN0KGNvdW50cnkpICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIGFycmFuZ2UoLUZyZXEpDQoNCm1vZGVsc19pbXBfaGVpZ2h0X2FuYWx5c2VzJG4gPSBjb3VudHJpZXNfcmVzY29uJEZyZXENCnN1bShtb2RlbHNfaW1wX2hlaWdodF9hbmFseXNlcyRuKQ0KDQptb2RlbCA9IG12bWV0YShtZWFuIH4gMSwgZGF0YSA9IG1vZGVsc19pbXBfaGVpZ2h0X2FuYWx5c2VzLCBTID0gc2VeMiwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJmaXhlZCIpDQpzdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCiMjIyMjIEgzYigyKSBJZGVhbCBIZWlnaHQgKExldmVsKSB7LnRhYnNldH0NCmBgYHtyfQ0KZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2NvbiAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNvdW50cnksIHZhbHVlc19mcm9tID0gcG9saXRpY2FsX29yaWVudGF0aW9uKSAlPiUNCiAgc2VsZWN0KGlkZWFsX2hlaWdodCwgRnJhbmNlLCBHZXJtYW55LCBgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhYCwgTWV4aWNvLA0KICAgICAgICAgSXRhbHksIEJyYXppbCwgU3BhaW4pDQoNCm1vZGVsc19pZGVhbF9oZWlnaHQgPSBkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUgJT4lDQogIHNlbGVjdCgtaWRlYWxfaGVpZ2h0KSAlPiUNCiAgbWFwKH5sbShkYXRhX2luY2x1ZGVkX2RvY3VtZW50ZWRfcmVzY29uX3dpZGUkaWRlYWxfaGVpZ2h0IH4gLngsDQogICAgICBkYXRhID0gZGF0YV9pbmNsdWRlZF9kb2N1bWVudGVkX3Jlc2Nvbl93aWRlKSkgJT4lDQogIG1hcChsbS5iZXRhKQ0KDQptb2RlbHNfaWRlYWxfaGVpZ2h0X2NvZWYgPSBtb2RlbHNfaWRlYWxfaGVpZ2h0ICU+JQ0KICBtYXAoY29lZikgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJyb3duYW1lIikgJT4lDQogIGZpbHRlcihyb3duYW1lICE9ICIoSW50ZXJjZXB0KSIpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IC1yb3duYW1lKSAlPiUNCiAgc2VsZWN0KC1yb3duYW1lKSAlPiUNCiAgcmVuYW1lKG1lYW4gPSB2YWx1ZSkNCg0KbW9kZWxzX2lkZWFsX2hlaWdodF9zZSA9IG1vZGVsc19pZGVhbF9oZWlnaHQgJT4lDQogIG1hcCh0aWR5KSAlPiUNCiAgdGliYmxlKG1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UgPSAuLCBOYW1lcyA9IG5hbWVzKC4pKSAlPiUNCiAgaG9pc3QobW9kZWxzX3ByZWZfcG9saXRpY2Fsc2ltX2xpbl9zZSwgY29lZmZpY2llbnRzID0gInN0ZC5lcnJvciIpICU+JQ0KICBzZWxlY3QoLW1vZGVsc19wcmVmX3BvbGl0aWNhbHNpbV9saW5fc2UpICU+JQ0KICB1bm5lc3Rfd2lkZXIoLiwgY29lZmZpY2llbnRzLCBuYW1lc19zZXAgPSAiXyIpICU+JQ0KICBzZWxlY3QoY29lZmZpY2llbnRzXzIsIE5hbWVzKSAlPiUNCiAgcmVuYW1lKCJuYW1lIiA9ICJOYW1lcyIsDQogICAgICAgICAic2UiID0gImNvZWZmaWNpZW50c18yIikgJT4lDQogIG11dGF0ZShuYW1lID0gaWZlbHNlKG5hbWUgPT0gIlVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSIsDQogICAgICAgICAgICAgICAgICAgICAgICJVbml0ZWQuU3RhdGVzLm9mLkFtZXJpY2EiLCBuYW1lKSkNCg0KDQptb2RlbHNfaWRlYWxfaGVpZ2h0X2FuYWx5c2VzID0gbGVmdF9qb2luKG1vZGVsc19pZGVhbF9oZWlnaHRfY29lZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxzX2lkZWFsX2hlaWdodF9zZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAibmFtZSIpICU+JQ0KICBtdXRhdGUob3V0Y29tZSA9ICJINGIoMikpIElkZWFsIEhlaWdodCAoTGV2ZWwpIikNCg0KY291bnRyaWVzX3Jlc2NvbiA9DQogIGRhdGFfaW5jbHVkZWRfZG9jdW1lbnRlZF9yZXNjb24gJT4lDQogIGZpbHRlcighaXMubmEoaWRlYWxfaGVpZ2h0KSkgJT4lDQogIHNlbGVjdChjb3VudHJ5KSAlPiUNCiAgdGFibGUoKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICBhcnJhbmdlKC1GcmVxKQ0KDQptb2RlbHNfaWRlYWxfaGVpZ2h0X2FuYWx5c2VzJG4gPSBjb3VudHJpZXNfcmVzY29uJEZyZXENCnN1bShtb2RlbHNfaWRlYWxfaGVpZ2h0X2FuYWx5c2VzJG4pDQoNCm1vZGVsID0gbXZtZXRhKG1lYW4gfiAxLCBkYXRhID0gbW9kZWxzX2lkZWFsX2hlaWdodF9hbmFseXNlcywgUyA9IHNlXjIsDQogICAgICAgICAgICAgICBtZXRob2QgPSAiZml4ZWQiKQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0K