1 Load data

1.1 Modify ACE Score to take into account that all are institutionalized

2 Typo in ASCQ

3 Typo in Age

3.1 Minore transformations to Data

4 Desc CESD

5 Desc SCARED

6 GCIC

Data_gci <- Data[, c(sprintf("gci_%d", 1:14), "OpenC", "CloseC", "centru")]

labels_gci <- 
  c("Foarte neadevărat",
  "Neadevărat",
  "Un pic neadevărat / Un pic adevărat",
  "Adevărat",
  "Foarte adevărat")

itemtext_gci <-
  c("1. Oamenii de la centru se poartă frumos cu mine.",
  "2. Am încredere în oamenii din centru.",
  "3. Oamenii de la centru mă înţeleg.",
  "4. Atunci când mă plâng de ceva, oamenii din centru mă iau în serios.",
  "5. Oamenii de la centru sunt corecți.",
  "6. Simt că aici, la centru, lucrez la îndeplinirea scopurilor mele.",
  "7. În acest centru sunt întotdeauna destui oameni care să mă ajute.",
  "8. Oamenii din centru se țin de cuvânt.",
  "9. Pot să cer ajutor de la oamenii din centru atunci când am nevoie.",
  "10. În acest centru, copiii au încredere unii în alții. (R)",
  "11. Aici, poți să ai încredere în toată lumea. (R)",
  "12. Haosul și gălăgia din centru mă înnebunesc.",
  "13. Sunt prea mulți copii aici.",
  "14. Oamenii de la centru sunt adesea prea ocupați ca să mă ajute.")

Data_gci <-
  Data_gci %>%
  mutate_at(vars(sprintf("gci_%d", 1:14)), ~as.factor(as.character(.))) %>%
  rename_at(vars(sprintf("gci_%d", 1:14)), ~itemtext_gci) %>%
  rename_at(vars("OpenC", "CloseC"), ~c("Climat deschis", "Climat închis")) %>%
  dplyr::rename(Centru = centru)

# Plots  # library(likert)
Likertobj_gci <- likert::likert(Data_gci[, 1:14], nlevels = 5)   # here are percentages

p_gcic_1 <-
  plot(Likertobj_gci, type = "bar", 
       centered = TRUE, center = 3, include.center = TRUE,              # "3" is neutral
       wrap = 40, low.color = 'burlywood', high.color = 'maroon',
       group.order = names(Data_gci[, 1:14])) +
    ylab("Procent") + 
    guides(fill = guide_legend(nrow = 1, title = "Răspuns")) +
    geom_vline(xintercept = 5.51) +
    labs(title = "Climatul de grup din centrul rezidential",
         caption = "Raspunsurile la itemii 10 si 11 au fost cotate invers.")

 
Data_gci %>%
  select("Climat deschis", "Climat închis") %>%
  gather() %>%
  rename_at(vars("key", "value"), ~c("Var", "Scor")) %>%
    ggpubr::ggviolin("Var", "Scor", fill = "Var",
      palette = c("#00AFBB", "#FC4E07"),
      add = "boxplot", add.params = list(fill = "white"),
      xlab = "", legend = "none") +
  stat_summary(fun.data = mean_se,  colour = "darkred")

ggsave(plot = p_gcic_1, filename = "p_gcic_1.png", width = 10, height = 10, units = "in", dpi = 500)

7 Mediation

7.1 Adol


Call:
lm(formula = CESD ~ OpenC + CloseC, data = Data_adol_standardized)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.2953 -0.6849 -0.0908  0.5795  3.2962 

Coefficients:
             Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  0.000231   0.028182   0.008                0.993    
OpenC       -0.177514   0.033525  -5.295          0.000000146 ***
CloseC       0.309068   0.033000   9.366 < 0.0000000000000002 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9044 on 1027 degrees of freedom
  (15 observations deleted due to missingness)
Multiple R-squared:  0.1839,    Adjusted R-squared:  0.1824 
F-statistic: 115.7 on 2 and 1027 DF,  p-value: < 0.00000000000000022

Call:
lm(formula = GAD ~ OpenC + CloseC, data = Data_adol_standardized)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.3076 -0.7273 -0.1250  0.5807  3.0347 

Coefficients:
            Estimate Std. Error t value            Pr(>|t|)    
(Intercept)  0.00046    0.03018   0.015               0.988    
OpenC        0.05007    0.03587   1.396               0.163    
CloseC       0.35479    0.03521  10.077 <0.0000000000000002 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9436 on 975 degrees of freedom
  (67 observations deleted due to missingness)
Multiple R-squared:  0.1121,    Adjusted R-squared:  0.1102 
F-statistic: 61.53 on 2 and 975 DF,  p-value: < 0.00000000000000022

Call: psych::mediate(y = CESD + GAD ~ OpenC + CloseC + (CYRM_a), data = Data_adol_standardized)

Direct effect estimates (traditional regression)    (c') 

R = 0.49 R2 = 0.24   F = 109.68 on 3 and 1041 DF   p-value:  0.000000000000000000000000000000000000000000000000000000000000103 

R = 0.35 R2 = 0.12   F = 47.09 on 3 and 1041 DF   p-value:  0.000000000000000000000000000153 

 Total effect estimates (c) 

 'a'  effect estimates 

 'b'  effect estimates 

 'ab'  effect estimates (through mediators)
             [,1]       [,2]         [,3]         [,4]        [,5]       [,6]         [,7]         [,8]
2.5%  -0.14548215 0.01104065 -0.066631435 0.0007907931 -0.14548215 0.01104065 -0.066631435 0.0007907931
97.5% -0.08305958 0.04997896 -0.003989529 0.0198466558 -0.08305958 0.04997896 -0.003989529 0.0198466558

7.2 Child


Call:
lm(formula = CESD ~ OpenC + CloseC, data = Data_child_standardized)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.6203 -0.5811 -0.1272  0.5067  2.7556 

Coefficients:
             Estimate Std. Error t value        Pr(>|t|)    
(Intercept) -0.002541   0.053237  -0.048        0.961968    
OpenC       -0.232169   0.063279  -3.669        0.000304 ***
CloseC       0.438460   0.062916   6.969 0.0000000000349 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8038 on 225 degrees of freedom
  (2 observations deleted due to missingness)
Multiple R-squared:  0.3561,    Adjusted R-squared:  0.3504 
F-statistic: 62.23 on 2 and 225 DF,  p-value: < 0.00000000000000022

Call:
lm(formula = GAD ~ OpenC + CloseC, data = Data_child_standardized)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.5765 -0.6724 -0.1850  0.4993  4.0651 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.002605   0.062437   0.042 0.966760    
OpenC       -0.173376   0.074503  -2.327 0.020869 *  
CloseC       0.253914   0.075269   3.373 0.000877 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9321 on 220 degrees of freedom
  (7 observations deleted due to missingness)
Multiple R-squared:  0.1343,    Adjusted R-squared:  0.1265 
F-statistic: 17.07 on 2 and 220 DF,  p-value: 0.0000001286

Call: psych::mediate(y = CESD + GAD ~ OpenC + CloseC + (CYRM_k), data = Data_child_standardized)

Direct effect estimates (traditional regression)    (c') 

R = 0.65 R2 = 0.42   F = 54.97 on 3 and 226 DF   p-value:  0.0000000000000000000000000101 

R = 0.36 R2 = 0.13   F = 11.12 on 3 and 226 DF   p-value:  0.000000781 

 Total effect estimates (c) 

 'a'  effect estimates 

 'b'  effect estimates 

 'ab'  effect estimates (through mediators)
            [,1]      [,2]        [,3]        [,4]       [,5]      [,6]        [,7]        [,8]
2.5%  -0.1268604 0.0356824 -0.03366688 -0.04257002 -0.1268604 0.0356824 -0.03366688 -0.04257002
97.5% -0.0267708 0.1430005  0.04075252  0.04015818 -0.0267708 0.1430005  0.04075252  0.04015818

–>

8 lavvan Adol

9 lavvan Adol & Child

–>


10 Session Info

R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8.1 x64 (build 9600)

Matrix products: default

locale:
[1] LC_COLLATE=Romanian_Romania.1250  LC_CTYPE=Romanian_Romania.1250    LC_MONETARY=Romanian_Romania.1250 LC_NUMERIC=C                     
[5] LC_TIME=Romanian_Romania.1250    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] patchwork_1.1.1            semPlot_1.1                semTools_0.5-4             lavaan_0.6-8               medmod_1.0.0              
 [6] car_3.0-10                 carData_3.0-2              RColorBrewer_1.1-2         corrplot_0.84              GGally_1.4.0              
[11] Hmisc_4.1-1                Formula_1.2-3              survival_2.44-1.1          lattice_0.20-38            rio_0.5.26                
[16] scales_1.1.1               ggpubr_0.4.0               PerformanceAnalytics_1.5.2 xts_0.11-2                 zoo_1.8-4                 
[21] tadaatoolbox_0.16.1        summarytools_0.8.8         broom_0.7.6                psycho_0.6.1               psych_2.0.12              
[26] plyr_1.8.6                 forcats_0.5.1              stringr_1.4.0              dplyr_1.0.6                purrr_0.3.4               
[31] readr_1.4.0                tidyr_1.1.3                tibble_3.1.1               ggplot2_3.3.3              tidyverse_1.3.1           
[36] papaja_0.1.0.9997          kableExtra_1.3.4           knitr_1.31                 pacman_0.5.1              

loaded via a namespace (and not attached):
  [1] estimability_1.3          coda_0.19-2               acepack_1.4.1             multcomp_1.4-8            wesanderson_0.3.6        
  [6] data.table_1.14.0         rpart_4.1-15              RCurl_1.95-4.11           generics_0.1.0            TH.data_1.0-9            
 [11] correlation_0.6.1         webshot_0.5.1             xml2_1.3.2                lubridate_1.7.10          assertthat_0.2.1         
 [16] d3Network_0.5.2.1         viridis_0.5.1             WRS2_1.1-1                xfun_0.22                 hms_1.0.0                
 [21] evaluate_0.14             fansi_0.4.2               dbplyr_2.1.1              readxl_1.3.1              igraph_1.2.6             
 [26] DBI_1.0.0                 tmvnsim_1.0-2             htmlwidgets_1.5.3         reshape_0.8.8             kSamples_1.2-9           
 [31] stats4_3.6.1              paletteer_1.3.0           Rmpfr_0.7-1               ellipsis_0.3.2            backports_1.2.1          
 [36] pbivnorm_0.6.0            insight_0.14.2            prismatic_1.0.0           rapportools_1.0           pwr_1.2-2                
 [41] jmvcore_1.2.23            vctrs_0.3.8               abind_1.4-5               withr_2.4.1               pryr_0.1.4               
 [46] checkmate_1.8.5           emmeans_1.5.4             sna_2.4                   fdrtool_1.2.15            mnormt_2.0.2             
 [51] svglite_1.2.1             cluster_2.1.1             mi_1.0                    crayon_1.4.1              ellipse_0.4.1            
 [56] labeling_0.4.2            SuppDists_1.1-9.4         pkgconfig_2.0.3           statsExpressions_1.1.0    nlme_3.1-140             
 [61] ggm_2.3                   nnet_7.3-12               rlang_0.4.11              lifecycle_1.0.0           MatrixModels_0.4-1       
 [66] sandwich_2.5-0            kutils_1.70               modelr_0.1.8              cellranger_1.1.0          matrixStats_0.54.0       
 [71] Matrix_1.2-17             mc2d_0.1-18               boot_1.3-22               reprex_2.0.0              base64enc_0.1-3          
 [76] whisker_0.3-2             png_0.1-7                 viridisLite_0.3.0         rjson_0.2.20              PMCMRplus_1.9.0          
 [81] parameters_0.14.0         rootSolve_1.8.2.1         bitops_1.0-6              pander_0.6.3              multcompView_0.1-7       
 [86] arm_1.10-1                jpeg_0.1-8                rockchalk_1.8.129         rstatix_0.7.0             ggsignif_0.6.1           
 [91] memoise_1.1.0             magrittr_2.0.1            compiler_3.6.1            lme4_1.1-26               cli_2.5.0                
 [96] pbapply_1.3-4             htmlTable_1.12            MASS_7.3-51.4             tidyselect_1.1.0          stringi_1.5.3            
[101] lisrelToR_0.1.4           sem_3.1-9                 pixiedust_0.9.1           OpenMx_2.11.5             latticeExtra_0.6-28      
[106] ggrepel_0.9.1             grid_3.6.1                tools_3.6.1               lmom_2.8                  parallel_3.6.1           
[111] matrixcalc_1.0-3          rstudioapi_0.13           foreign_0.8-71            gridExtra_2.3             ipmisc_6.0.2             
[116] gld_2.6.2                 pairwiseComparisons_3.1.6 farver_2.1.0              BDgraph_2.53              digest_0.6.27            
[121] BWStest_0.2.2             nortest_1.0-4             quadprog_1.5-5            Rcpp_1.0.6                BayesFactor_0.9.12-4.2   
[126] performance_0.7.2         httr_1.4.2                gdtools_0.1.7             likert_1.3.5              effectsize_0.4.5         
[131] colorspace_2.0-0          rvest_1.0.0               XML_3.98-1.16             fs_1.5.0                  splines_3.6.1            
[136] statmod_1.4.35            rematch2_2.1.2            expm_0.999-3              Exact_2.1                 xtable_1.8-4             
[141] gmp_0.5-13.2              jsonlite_1.7.2            nloptr_1.2.2.2            corpcor_1.6.9             glasso_1.10              
[146] zeallot_0.1.0             R6_2.5.0                  pillar_1.6.1              htmltools_0.5.1.1         glue_1.4.2               
[151] minqa_1.2.4               class_7.3-15              codetools_0.2-16          mvtnorm_1.1-1             utf8_1.2.1               
[156] network_1.13.0.1          huge_1.2.7                curl_4.3                  DescTools_0.99.40         gtools_3.8.1             
[161] zip_1.0.0                 openxlsx_4.1.0            rmarkdown_2.7             qgraph_1.5                statnet.common_4.1.4     
[166] munsell_0.5.0             e1071_1.7-0               ggstatsplot_0.8.0         haven_2.4.1               reshape2_1.4.4           
[171] gtable_0.3.0              bayestestR_0.10.0        
 

A work by Claudiu Papasteri

 

LS0tDQp0aXRsZTogIjxicj4gUmV6aWRlbnRpYWwiIA0Kc3VidGl0bGU6ICJJbmZlcmVudGlhbCBTdGF0aXN0aWNzIg0KYXV0aG9yOiAiPGJyPiBDbGF1ZGl1IFBhcGFzdGVyaSINCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVtICVZJylgIg0Kb3V0cHV0OiANCiAgICBodG1sX25vdGVib29rOg0KICAgICAgICAgICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgICAgICAgICB0b2M6IHRydWUNCiAgICAgICAgICAgIHRvY19kZXB0aDogMg0KICAgICAgICAgICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgICAgICAgICB0aGVtZTogc3BhY2VsYWINCiAgICAgICAgICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbA0KICAgICAgICAgICAgZmlnX3dpZHRoOiAxMA0KICAgICAgICAgICAgZmlnX2hlaWdodDogOQ0KICAgICMgcGRmX2RvY3VtZW50OiANCiAgICAjICAgICAgICAgdG9jOiB0cnVlDQogICAgIyAgICAgICAgIHRvY19kZXB0aDogMg0KICAgICMgICAgICAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICAgICAgICAgICMgZm9udHNpemU6IDExcHQNCiAgICAgICAgICAgICMgZ2VvbWV0cnk6IG1hcmdpbj0xaW4NCiAgICAgICAgICAgICMgZmlnX3dpZHRoOiA3DQogICAgICAgICAgICAjIGZpZ19oZWlnaHQ6IDYNCiAgICAgICAgICAgICMgZmlnX2NhcHRpb246IHRydWUNCiAgICAjIGdpdGh1Yl9kb2N1bWVudDogDQogICAgICAgICAgICAjIHRvYzogdHJ1ZQ0KICAgICAgICAgICAgIyB0b2NfZGVwdGg6IDINCiAgICAgICAgICAgICMgaHRtbF9wcmV2aWV3OiBmYWxzZQ0KICAgICAgICAgICAgIyBmaWdfd2lkdGg6IDUNCiAgICAgICAgICAgICMgZmlnX2hlaWdodDogNQ0KICAgICAgICAgICAgIyBkZXY6IGpwZWcNCi0tLQ0KDQoNCjwhLS0gU2V0dXAgLS0+DQoNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCiMga2ludHIgb3B0aW9ucw0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBjb21tZW50ID0gIiMiLA0KICBjb2xsYXBzZSA9IFRSVUUsDQogIGVjaG8gPSBUUlVFLCANCiAgY2FjaGUgPSBUUlVFLCANCiAgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UgICAjIFdIRU4gTk9URUJPT0sgSVMgRklOSVNIRUQgLi4uIHVudGlsIHRoZW4gbGVhdmU6IHdhcm5pbmcgPSBUUlVFLCBtZXNzYWdlID0gVFJVRSAgICAgICAgDQopDQoNCiMgR2VuZXJhbCBSIG9wdGlvbnMgYW5kIGluZm8NCnNldC5zZWVkKDExMSkgICAgICAgICAgICAgICAjIGluIGNhc2Ugd2UgdXNlIHJhbmRvbWl6ZWQgcHJvY2VkdXJlcyAgICAgICANCm9wdGlvbnMoc2NpcGVuID0gOTk5KSAgICAgICAjIHBvc2l0aXZlIHZhbHVlcyBiaWFzIHRvd2FyZHMgZml4ZWQgYW5kIG5lZ2F0aXZlIHRvd2FyZHMgc2NpZW50aWZpYyBub3RhdGlvbg0KDQojIExvYWQgcGFja2FnZXMNCmlmICghcmVxdWlyZSgicGFjbWFuIikpIGluc3RhbGwucGFja2FnZXMoInBhY21hbiIpDQpwYWNrYWdlcyA8LSBjKA0KICAia25pdHIiLCAia2FibGVFeHRyYSIsICJwYXBhamEiLCAgDQogICJ0aWR5dmVyc2UiLCAicGx5ciIsICAgICAgDQogICJwc3ljaCIsICJwc3ljaG8iLCAgICAgICAgICAgDQogICJicm9vbSIsICJzdW1tYXJ5dG9vbHMiLCAidGFkYWF0b29sYm94IiwgIlBlcmZvcm1hbmNlQW5hbHl0aWNzIiwgICAgICAgICAgDQogICJnZ3Bsb3QyIiwgImdncHViciIsICJzY2FsZXMiLCAgICAgICAgDQogICJyaW8iLA0KICAiSG1pc2MiLCANCiAgIkdHYWxseSIsICJjb3JycGxvdCIsICJSQ29sb3JCcmV3ZXIiLCANCiAgImNhciIsDQogICJtZWRtb2QiLCANCiAgImxhdmFhbiIsICJzZW1Ub29scyIsICJzZW1QbG90Ig0KICAjICwgLi4uDQopDQppZiAoIXJlcXVpcmUoInBhY21hbiIpKSBpbnN0YWxsLnBhY2thZ2VzKCJwYWNtYW4iKQ0KcGFjbWFuOjpwX2xvYWQoY2hhciA9IHBhY2thZ2VzKQ0KDQojIFRoZW1lcyBmb3IgZ2dwbG90MiBwbG90aW5nIChoZXJlIHVzZWQgQVBBIHN0eWxlKQ0KdGhlbWVfc2V0KHRoZW1lX2FwYSgpKQ0KYGBgDQoNCmBgYHtyIHdvcmtpbmdfZGlyZWN0b3J5LCBpbmNsdWRlID0gRkFMU0V9DQojIGlmIG5lZWRlZA0KIyB3ZCA9ICIuL1JlemlkZW50aWFsIg0KIyBzZXR3ZCh3ZCkNCmBgYA0KDQoNCjwhLS0gUkVQT1JUIC0tPg0KDQoNCiMgTG9hZCBkYXRhDQoNCmBgYHtyIHJkc19kYXRhLCByZXN1bHRzID0gJ2hpZGUnLCBjYWNoZS5leHRyYSA9IGZpbGUuaW5mbygiRGF0YV9SZXppZGVudGlhbC5SRFMiKX0NCiMjIFJlYWQNCmZpbGVuYW1lIDwtICJEYXRhX1JlemlkZW50aWFsLlJEUyIgICANCg0KRGF0YSA8LSByZWFkUkRTKGZpbGVuYW1lKSAgDQpgYGANCg0KDQojIyBNb2RpZnkgQUNFIFNjb3JlIHRvIHRha2UgaW50byBhY2NvdW50IHRoYXQgYWxsIGFyZSBpbnN0aXR1dGlvbmFsaXplZA0KDQpgYGB7ciBkZXJpdmVkX2RhdGEsIGNhY2hlID0gVFJVRSwgZGVwZW5kc29uID0gInJkc19kYXRhIn0NCkRhdGEkQ1lXIDwtIGlmZWxzZShEYXRhJENZVyA9PSAwLCAwLCBEYXRhJENZVyAtIDEpIA0KYGBgDQoNCg0KIyBUeXBvIGluIEFTQ1ENCmBgYHtyIHR5cG9zfQ0KRGF0YSRBQXZvaWRbd2hpY2goRGF0YSRhc2NfMTIgPT0gMTEpXSA8LSBEYXRhJEFBdm9pZFt3aGljaChEYXRhJGFzY18xMiA9PSAxMSldIC0gMTANCkRhdGEkYXNjXzEyW3doaWNoKERhdGEkYXNjXzEyID09IDExKV0gPC0gMSAgICMgIkFTQ1FfZiIgIkFTQ1FfZCIgcmVtYWluIHVuY29ycmVjdGVkDQoNCmBgYA0KDQojIFR5cG8gaW4gQWdlDQpgYGB7ciB0eXBvX2Fkb2xfYWdlfQ0KRGF0YVtEYXRhJElEID09IDUwNSwgXSR2YXJzdGEgPC0gMTUgICAjIGFnZSAxNSBpbnN0ZWFkIG9mIDUNCmBgYA0KDQoNCiMjIE1pbm9yZSB0cmFuc2Zvcm1hdGlvbnMgdG8gRGF0YQ0KDQpgYGB7ciB0cmFuc2Zvcm1fZGF0YSwgZWNobz1GQUxTRX0NCkRhdGEgPC0gDQogIERhdGEgJT4lDQogIGRwbHlyOjptdXRhdGUoQVNDUV9kID0gYXMuZmFjdG9yKGlmZWxzZShBU0NRX2QgPT0gMCwgIlNlY3VyIiwgIlVuc2VjdXIiKSkpICU+JQ0KICBkcGx5cjo6bXV0YXRlKGdlbiA9IGZvcmNhdHM6OmZjdF9yZWNvZGUoZ2VuLCBGZXRlID0gImYiLCBCYWlldGkgPSAibSIpKSAlPiUNCiAgZHBseXI6Om11dGF0ZSh0aXBfY2hlc3Rpb25hcjIgPSBmb3JjYXRzOjpmY3RfY29sbGFwc2UodGlwX2NoZXN0aW9uYXIsICI1LThhbmkiID0gYygiNS04YW5pIiwgIjUtOGludGFyemllcmUiKSkpICU+JQ0KICBkcGx5cjo6bXV0YXRlKENFU0RfZCA9IGZhY3RvcihDRVNEX2QsIGxldmVscyA9IGMoIjAiLCAiMSIpKSkgJT4lDQogIGRwbHlyOjptdXRhdGUoU0NBUkVEX2QgPSBmYWN0b3IoaWZlbHNlKERhdGEkU0NBUkVEID49IDI1LCAxLCAwKSwgbGV2ZWxzID0gYygiMCIsICIxIikpKSAlPiUgICMgdGhpcyB3YXMgY2FsY3VsYXRlZCB3cm9uZ2x5DQogIGRwbHlyOjptdXRhdGUoUERfZCA9IGZhY3RvcihQRF9kLCBsZXZlbHMgPSBjKCIwIiwgIjEiKSksDQogICAgICAgICAgICAgICAgR0FEX2QgPSBmYWN0b3IoR0FEX2QsIGxldmVscyA9IGMoIjAiLCAiMSIpKSwNCiAgICAgICAgICAgICAgICBTZXBBX2Q9IGZhY3RvcihTZXBBX2QsIGxldmVscyA9IGMoIjAiLCAiMSIpKSwNCiAgICAgICAgICAgICAgICBTQURfZCA9IGZhY3RvcihTQURfZCwgbGV2ZWxzID0gYygiMCIsICIxIikpLA0KICAgICAgICAgICAgICAgIFNjaEFfZCA9IGZhY3RvcihTY2hBX2QsIGxldmVscyA9IGMoIjAiLCAiMSIpKSkNCiAgICANCkRhdGFfY2hpbGQgPC0NCiAgRGF0YSAlPiUNCiAgZmlsdGVyKHRpcF9jaGVzdGlvbmFyICVpbiUgYygiNS04YW5pIiwgIjUtOGludGFyemllcmUiKSkNCiAgDQpEYXRhX2Fkb2wgPC0NCiAgRGF0YSAlPiUNCiAgZmlsdGVyKHRpcF9jaGVzdGlvbmFyID09ICI5LTE4YW5pIikgJT4lDQogIGRwbHlyOjptdXRhdGUoaW50YXJ6aWVyZSA9IHRpZHlyOjpyZXBsYWNlX25hKGludGFyemllcmUsIDApKQ0KYGBgDQoNCg0KDQojIERlc2MgQ0VTRA0KDQpgYGB7cn0NCmxpYnJhcnkocGF0Y2h3b3JrKQ0KDQpEYXRhICU+JQ0KICBkcGx5cjo6Z3JvdXBfYnkoQ0VTRCkgJT4lDQogIGRwbHlyOjpzdW1tYXJpc2UobiA9IG4oKSkgJT4lDQogIGRwbHlyOjptdXRhdGUoZnJlcSA9IG4gLyBzdW0obikpICU+JQ0KICBwcmludChuID0gSW5mKQ0KDQpwX2Nlc2RfMSA8LQ0KICBEYXRhICU+JQ0KICAgIGdncGxvdChhZXMoeCA9IENFU0QsIGZpbGwgPSBDRVNEX2QpKSArDQogICAgICBnZW9tX2hpc3RvZ3JhbShiaW5zID0gNTUsIGNvbG9yID0gImJsYWNrIikgKyAgDQogICAgICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAxNSwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMS4yKSArDQogICAgICBzY2FsZV95X2NvbnRpbnVvdXMoDQogICAgICAgIHNlYy5heGlzID0gc2VjX2F4aXModHJhbnMgPSB+Li9ucm93KERhdGEpLCBsYWJlbHMgPSBwZXJjZW50LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gIlByb3BvcnRpZSAoJSkiKSkgKw0KICAgICAgc2NhbGVfZmlsbF9tYW51YWwoYnJlYWtzID0gYygiMCIsICIxIiksIA0KICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHdlc2FuZGVyc29uOjp3ZXNfcGFsZXR0ZSgiUm95YWwxIilbMToyXSkgKw0KICAgICAgeWxhYigiRnJlY3ZlbnRhIikgKw0KICAgICAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA1NSwgYnkgPSA1KSkgKw0KICAgICAgZ3VpZGVzKGZpbGwgPSBGQUxTRSkgKw0KICAgICAgZmFjZXRfd3JhcCh+dGlwX2NoZXN0aW9uYXIyKSArDQogICAgICBnZ3RpdGxlKCJOaXZlbHVyaSBkZSBkZXByZXNpZSIpDQoNCnBfY2VzZF8yIDwtDQogIERhdGFfY2hpbGQgJT4lDQogICAgZHBseXI6Om11dGF0ZShDRVNEX2QgPSBmb3JjYXRzOjpmY3RfcmV2KENFU0RfZCkpICU+JQ0KICAgIGdnc3RhdHNwbG90OjpnZ3BpZXN0YXRzKA0KICAgICAgeCA9IENFU0RfZCwNCiAgICAgIHkgPSBnZW4sDQogICAgICB0eXBlID0gInBhcmFtZXRyaWMiLCANCiAgICAgIGJmLm1lc3NhZ2UgPSBGQUxTRSwNCiAgICAgIHBhY2thZ2UgPSAid2VzYW5kZXJzb24iLA0KICAgICAgcGFsZXR0ZSA9ICJSb3lhbDEiLA0KICAgICAgdGl0bGUgPSAiQ29waWkgKDUtOCBhbmkpIikNCg0KcF9jZXNkXzMgPC0NCiAgRGF0YV9hZG9sICU+JQ0KICAgIGRwbHlyOjptdXRhdGUoQ0VTRF9kID0gZm9yY2F0czo6ZmN0X3JldihDRVNEX2QpKSAlPiUNCiAgICBnZ3N0YXRzcGxvdDo6Z2dwaWVzdGF0cygNCiAgICAgIHggPSBDRVNEX2QsDQogICAgICB5ID0gZ2VuLA0KICAgICAgdHlwZSA9ICJwYXJhbWV0cmljIiwgDQogICAgICBiZi5tZXNzYWdlID0gRkFMU0UsDQogICAgICBwYWNrYWdlID0gIndlc2FuZGVyc29uIiwNCiAgICAgIHBhbGV0dGUgPSAiUm95YWwxIiwNCiAgICAgIHRpdGxlID0gIlByZWFkb2xlc2NlbnRpIHNpIGFkb2xlc2NlbnRpICg5LTE4IGFuaSkiKQ0KDQoNCg0KcF9jZXNkXzEgLyAocF9jZXNkXzIgfCBwX2Nlc2RfMykgIA0KDQojIGdnc2F2ZShwbG90ID0gcF9jZXNkXzEsIGZpbGVuYW1lID0gInBfY2VzZF8xLnBuZyIsIHdpZHRoID0gMTAsIGhlaWdodCA9IDgsIHVuaXRzID0gImluIiwgZHBpID0gNTAwKQ0KIyBnZ3NhdmUocGxvdCA9IHBfY2VzZF8yLCBmaWxlbmFtZSA9ICJwX2Nlc2RfMi5wbmciLCB3aWR0aCA9IDcsIGhlaWdodCA9IDcsIHVuaXRzID0gImluIiwgZHBpID0gNTAwKQ0KIyBnZ3NhdmUocGxvdCA9IHBfY2VzZF8zLCBmaWxlbmFtZSA9ICJwX2Nlc2RfMy5wbmciLCB3aWR0aCA9IDcsIGhlaWdodCA9IDcsIHVuaXRzID0gImluIiwgZHBpID0gNTAwKQ0KYGBgDQoNCg0KIyBEZXNjIFNDQVJFRA0KDQpgYGB7cn0NCmxpYnJhcnkocGF0Y2h3b3JrKQ0KDQpEYXRhICU+JQ0KICBkcGx5cjo6Z3JvdXBfYnkoU0NBUkVEKSAlPiUNCiAgZHBseXI6OnN1bW1hcmlzZShuID0gbigpKSAlPiUNCiAgZHBseXI6Om11dGF0ZShmcmVxID0gbiAvIHN1bShuKSkgJT4lDQogIHByaW50KG4gPSBJbmYpDQoNCnBfc2NhcmVkXzEgPC0NCiAgRGF0YSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gU0NBUkVELCBmaWxsID0gU0NBUkVEX2QpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbnMgPSA4NSwgY29sb3IgPSAiYmxhY2siKSArICANCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMjUsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDEuMikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoDQogICAgc2VjLmF4aXMgPSBzZWNfYXhpcyh0cmFucyA9IH4uL25yb3coRGF0YSksIGxhYmVscyA9IHBlcmNlbnQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJQcm9wb3J0aWUgKCUpIikpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwoYnJlYWtzID0gYygiMCIsICIxIiksIA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB3ZXNhbmRlcnNvbjo6d2VzX3BhbGV0dGUoIlJveWFsMSIpWzE6Ml0pICsNCiAgeWxhYigiRnJlY3ZlbnRhIikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDg1LCBieSA9IDUpKSArDQogIGd1aWRlcyhmaWxsID0gRkFMU0UpICsNCiAgZmFjZXRfd3JhcCh+dGlwX2NoZXN0aW9uYXIyKSArDQogIGdndGl0bGUoIk5pdmVsdXJpIGRlIGFueGlldGF0ZSIpDQoNCnBfc2NhcmVkXzIgPC0NCiAgRGF0YV9jaGlsZCAlPiUNCiAgZHBseXI6Om11dGF0ZShTQ0FSRURfZCA9IGZvcmNhdHM6OmZjdF9yZXYoU0NBUkVEX2QpKSAlPiUNCiAgZ2dzdGF0c3Bsb3Q6OmdncGllc3RhdHMoDQogICAgeCA9IFNDQVJFRF9kLA0KICAgIHkgPSBnZW4sDQogICAgdHlwZSA9ICJwYXJhbWV0cmljIiwgDQogICAgYmYubWVzc2FnZSA9IEZBTFNFLA0KICAgIHBhY2thZ2UgPSAid2VzYW5kZXJzb24iLA0KICAgIHBhbGV0dGUgPSAiUm95YWwxIiwNCiAgICB0aXRsZSA9ICJDb3BpaSAoNS04IGFuaSkiKQ0KDQpwX3NjYXJlZF8zIDwtDQogIERhdGFfYWRvbCAlPiUNCiAgZHBseXI6Om11dGF0ZShTQ0FSRURfZCA9IGZvcmNhdHM6OmZjdF9yZXYoU0NBUkVEX2QpKSAlPiUNCiAgZ2dzdGF0c3Bsb3Q6OmdncGllc3RhdHMoDQogICAgeCA9IFNDQVJFRF9kLA0KICAgIHkgPSBnZW4sDQogICAgdHlwZSA9ICJwYXJhbWV0cmljIiwgDQogICAgYmYubWVzc2FnZSA9IEZBTFNFLA0KICAgIHBhY2thZ2UgPSAid2VzYW5kZXJzb24iLA0KICAgIHBhbGV0dGUgPSAiUm95YWwxIiwNCiAgICB0aXRsZSA9ICJQcmVhZG9sZXNjZW50aSBzaSBhZG9sZXNjZW50aSAoOS0xOCBhbmkpIikNCg0KDQoNCnBfc2NhcmVkXzEgLyAocF9zY2FyZWRfMiB8IHBfc2NhcmVkXzMpICANCg0KIyBnZ3NhdmUocGxvdCA9IHBfc2NhcmVkXzEsIGZpbGVuYW1lID0gInBfc2NhcmVkXzEucG5nIiwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gOCwgdW5pdHMgPSAiaW4iLCBkcGkgPSA1MDApDQojIGdnc2F2ZShwbG90ID0gcF9zY2FyZWRfMiwgZmlsZW5hbWUgPSAicF9zY2FyZWRfMi5wbmciLCB3aWR0aCA9IDcsIGhlaWdodCA9IDcsIHVuaXRzID0gImluIiwgZHBpID0gNTAwKQ0KIyBnZ3NhdmUocGxvdCA9IHBfc2NhcmVkXzMsIGZpbGVuYW1lID0gInBfc2NhcmVkXzMucG5nIiwgd2lkdGggPSA3LCBoZWlnaHQgPSA3LCB1bml0cyA9ICJpbiIsIGRwaSA9IDUwMCkNCmBgYA0KDQoNCiMgR0NJQw0KDQpgYGB7cn0NCkRhdGFfZ2NpIDwtIERhdGFbLCBjKHNwcmludGYoImdjaV8lZCIsIDE6MTQpLCAiT3BlbkMiLCAiQ2xvc2VDIiwgImNlbnRydSIpXQ0KDQpsYWJlbHNfZ2NpIDwtIA0KICBjKCJGb2FydGUgbmVhZGV2xINyYXQiLA0KICAiTmVhZGV2xINyYXQiLA0KICAiVW4gcGljIG5lYWRldsSDcmF0IC8gVW4gcGljIGFkZXbEg3JhdCIsDQogICJBZGV2xINyYXQiLA0KICAiRm9hcnRlIGFkZXbEg3JhdCIpDQoNCml0ZW10ZXh0X2djaSA8LQ0KICBjKCIxLiBPYW1lbmlpIGRlIGxhIGNlbnRydSBzZSBwb2FydMSDIGZydW1vcyBjdSBtaW5lLiIsDQogICIyLiBBbSDDrm5jcmVkZXJlIMOubiBvYW1lbmlpIGRpbiBjZW50cnUuIiwNCiAgIjMuIE9hbWVuaWkgZGUgbGEgY2VudHJ1IG3EgyDDrm7Fo2VsZWcuIiwNCiAgIjQuIEF0dW5jaSBjw6JuZCBtxIMgcGzDom5nIGRlIGNldmEsIG9hbWVuaWkgZGluIGNlbnRydSBtxIMgaWF1IMOubiBzZXJpb3MuIiwNCiAgIjUuIE9hbWVuaWkgZGUgbGEgY2VudHJ1IHN1bnQgY29yZWPIm2kuIiwNCiAgIjYuIFNpbXQgY8SDIGFpY2ksIGxhIGNlbnRydSwgbHVjcmV6IGxhIMOubmRlcGxpbmlyZWEgc2NvcHVyaWxvciBtZWxlLiIsDQogICI3LiDDjm4gYWNlc3QgY2VudHJ1IHN1bnQgw65udG90ZGVhdW5hIGRlc3R1aSBvYW1lbmkgY2FyZSBzxIMgbcSDIGFqdXRlLiIsDQogICI4LiBPYW1lbmlpIGRpbiBjZW50cnUgc2UgyJtpbiBkZSBjdXbDom50LiIsDQogICI5LiBQb3Qgc8SDIGNlciBhanV0b3IgZGUgbGEgb2FtZW5paSBkaW4gY2VudHJ1IGF0dW5jaSBjw6JuZCBhbSBuZXZvaWUuIiwNCiAgIjEwLiDDjm4gYWNlc3QgY2VudHJ1LCBjb3BpaWkgYXUgw65uY3JlZGVyZSB1bmlpIMOubiBhbMibaWkuIChSKSIsDQogICIxMS4gQWljaSwgcG/Im2kgc8SDIGFpIMOubmNyZWRlcmUgw65uIHRvYXTEgyBsdW1lYS4gKFIpIiwNCiAgIjEyLiBIYW9zdWwgyJlpIGfEg2zEg2dpYSBkaW4gY2VudHJ1IG3EgyDDrm5uZWJ1bmVzYy4iLA0KICAiMTMuIFN1bnQgcHJlYSBtdWzIm2kgY29waWkgYWljaS4iLA0KICAiMTQuIE9hbWVuaWkgZGUgbGEgY2VudHJ1IHN1bnQgYWRlc2VhIHByZWEgb2N1cGHIm2kgY2Egc8SDIG3EgyBhanV0ZS4iKQ0KDQpEYXRhX2djaSA8LQ0KICBEYXRhX2djaSAlPiUNCiAgbXV0YXRlX2F0KHZhcnMoc3ByaW50ZigiZ2NpXyVkIiwgMToxNCkpLCB+YXMuZmFjdG9yKGFzLmNoYXJhY3RlciguKSkpICU+JQ0KICByZW5hbWVfYXQodmFycyhzcHJpbnRmKCJnY2lfJWQiLCAxOjE0KSksIH5pdGVtdGV4dF9nY2kpICU+JQ0KICByZW5hbWVfYXQodmFycygiT3BlbkMiLCAiQ2xvc2VDIiksIH5jKCJDbGltYXQgZGVzY2hpcyIsICJDbGltYXQgw65uY2hpcyIpKSAlPiUNCiAgZHBseXI6OnJlbmFtZShDZW50cnUgPSBjZW50cnUpDQoNCiMgUGxvdHMgICMgbGlicmFyeShsaWtlcnQpDQpMaWtlcnRvYmpfZ2NpIDwtIGxpa2VydDo6bGlrZXJ0KERhdGFfZ2NpWywgMToxNF0sIG5sZXZlbHMgPSA1KSAgICMgaGVyZSBhcmUgcGVyY2VudGFnZXMNCg0KcF9nY2ljXzEgPC0NCiAgcGxvdChMaWtlcnRvYmpfZ2NpLCB0eXBlID0gImJhciIsIA0KICAgICAgIGNlbnRlcmVkID0gVFJVRSwgY2VudGVyID0gMywgaW5jbHVkZS5jZW50ZXIgPSBUUlVFLCAgICAgICAgICAgICAgIyAiMyIgaXMgbmV1dHJhbA0KICAgICAgIHdyYXAgPSA0MCwgbG93LmNvbG9yID0gJ2J1cmx5d29vZCcsIGhpZ2guY29sb3IgPSAnbWFyb29uJywNCiAgICAgICBncm91cC5vcmRlciA9IG5hbWVzKERhdGFfZ2NpWywgMToxNF0pKSArDQogICAgeWxhYigiUHJvY2VudCIpICsgDQogICAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQobnJvdyA9IDEsIHRpdGxlID0gIlLEg3NwdW5zIikpICsNCiAgICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSA1LjUxKSArDQogICAgbGFicyh0aXRsZSA9ICJDbGltYXR1bCBkZSBncnVwIGRpbiBjZW50cnVsIHJlemlkZW50aWFsIiwNCiAgICAgICAgIGNhcHRpb24gPSAiUmFzcHVuc3VyaWxlIGxhIGl0ZW1paSAxMCBzaSAxMSBhdSBmb3N0IGNvdGF0ZSBpbnZlcnMuIikNCg0KIA0KRGF0YV9nY2kgJT4lDQogIHNlbGVjdCgiQ2xpbWF0IGRlc2NoaXMiLCAiQ2xpbWF0IMOubmNoaXMiKSAlPiUNCiAgZ2F0aGVyKCkgJT4lDQogIHJlbmFtZV9hdCh2YXJzKCJrZXkiLCAidmFsdWUiKSwgfmMoIlZhciIsICJTY29yIikpICU+JQ0KICAgIGdncHVicjo6Z2d2aW9saW4oIlZhciIsICJTY29yIiwgZmlsbCA9ICJWYXIiLA0KICAgICAgcGFsZXR0ZSA9IGMoIiMwMEFGQkIiLCAiI0ZDNEUwNyIpLA0KICAgICAgYWRkID0gImJveHBsb3QiLCBhZGQucGFyYW1zID0gbGlzdChmaWxsID0gIndoaXRlIiksDQogICAgICB4bGFiID0gIiIsIGxlZ2VuZCA9ICJub25lIikgKw0KICBzdGF0X3N1bW1hcnkoZnVuLmRhdGEgPSBtZWFuX3NlLCAgY29sb3VyID0gImRhcmtyZWQiKQ0KDQpnZ3NhdmUocGxvdCA9IHBfZ2NpY18xLCBmaWxlbmFtZSA9ICJwX2djaWNfMS5wbmciLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSAxMCwgdW5pdHMgPSAiaW4iLCBkcGkgPSA1MDApDQpgYGANCg0KDQpgYGB7cn0NCkRhdGFfYWRvbCAlPiUNCiAgZHBseXI6OnNlbGVjdCgiT3BlbkMiLCAiQ2xvc2VDIiwgIkNFU0QiLCAiU0NBUkVEIiwgIlJfSW5kX2EiLCAiUl9DYXJlX2EiLCAiUl9Db250X2EiLCAiQ1lSTV9hIikgJT4lDQogIFBlcmZvcm1hbmNlQW5hbHl0aWNzOjpjaGFydC5Db3JyZWxhdGlvbigpDQpgYGANCg0KIyBNZWRpYXRpb24NCiMjIEFkb2wNCg0KYGBge3J9DQpEYXRhX2Fkb2xfc3RhbmRhcmRpemVkIDwtIA0KICBEYXRhX2Fkb2wgJT4lDQogIGRwbHlyOjpzZWxlY3QoIk9wZW5DIiwgIkNsb3NlQyIsICJDRVNEIiwgIlNDQVJFRCIsICJDWVJNX2EiLCAiUEQiLCAiR0FEIiwgICJTZXBBIiwgIlNBRCIpICU+JQ0KICBtdXRhdGVfYWxsKH4oc2NhbGUoLikgJT4lIGFzLnZlY3RvcikpDQoNCiMgcHN5Y2g6Om1lZGlhdGUoQ0VTRCB+IE9wZW5DICsgQ2xvc2VDICsgKENZUk1fYSksIGRhdGEgPSBEYXRhX2Fkb2wsIHplcm8gPSBUUlVFKQ0KIyBwc3ljaDo6bWVkaWF0ZShTQ0FSRUQgfiBPcGVuQyArIENsb3NlQyArIChDWVJNX2EpLCBkYXRhID0gRGF0YV9hZG9sKQ0KDQojIHBzeWNoOjptZWRpYXRlKENFU0QgKyBTQ0FSRUQgfiBPcGVuQyArIENsb3NlQyArIChDWVJNX2EpLCBkYXRhID0gRGF0YV9hZG9sKSAjICU+JSBzdW1tYXJ5KCkNCg0KIyBTQ0FSRUQNCiMgbW9kX2Fkb2wgPC0gcHN5Y2g6Om1lZGlhdGUoQ0VTRCArIFNDQVJFRCB+IE9wZW5DICsgQ2xvc2VDICsgKENZUk1fYSksIGRhdGEgPSBEYXRhX2Fkb2xfc3RhbmRhcmRpemVkKSANCiMgbW9kX2Fkb2wgJT4lIHN1bW1hcnkoKQ0KIyBtb2RfYWRvbCRib290JGNpLmFiDQoNCiMgR0FEDQpzdW1tYXJ5KGxtKENFU0QgfiBPcGVuQyArIENsb3NlQywgZGF0YSA9IERhdGFfYWRvbF9zdGFuZGFyZGl6ZWQpKTsgIyBnZ3N0YXRzcGxvdDo6Z2djb2Vmc3RhdHMobG0oQ0VTRCB+IE9wZW5DICsgQ2xvc2VDLCBkYXRhID0gRGF0YV9hZG9sX3N0YW5kYXJkaXplZCkpDQpzdW1tYXJ5KGxtKEdBRCB+IE9wZW5DICsgQ2xvc2VDLCBkYXRhID0gRGF0YV9hZG9sX3N0YW5kYXJkaXplZCkpOyAjIGdnc3RhdHNwbG90OjpnZ2NvZWZzdGF0cyhsbShHQUQgfiBPcGVuQyArIENsb3NlQywgZGF0YSA9IERhdGFfYWRvbF9zdGFuZGFyZGl6ZWQpKQ0KIyBRdWFudFBzeWM6OmxtLmJldGEobG0oR0FEIH4gT3BlbkMgKyBDbG9zZUMsIGRhdGEgPSBEYXRhX2Fkb2xfc3RhbmRhcmRpemVkKSkNCg0KbW9kX2Fkb2wgPC0gcHN5Y2g6Om1lZGlhdGUoQ0VTRCArIEdBRCB+IE9wZW5DICsgQ2xvc2VDICsgKENZUk1fYSksIGRhdGEgPSBEYXRhX2Fkb2xfc3RhbmRhcmRpemVkKSANCm1vZF9hZG9sICU+JSBzdW1tYXJ5KCkNCm1vZF9hZG9sJGJvb3QkY2kuYWINCmBgYA0KDQoNCiMjIENoaWxkDQoNCmBgYHtyfQ0KRGF0YV9jaGlsZF9zdGFuZGFyZGl6ZWQgPC0gDQogIERhdGFfY2hpbGQgJT4lDQogIGRwbHlyOjpzZWxlY3QoIk9wZW5DIiwgIkNsb3NlQyIsICJDRVNEIiwgIlNDQVJFRCIsICJDWVJNX2siLCAiUEQiLCAiR0FEIiwgICJTZXBBIiwgIlNBRCIpICU+JQ0KICBtdXRhdGVfYWxsKH4oc2NhbGUoLikgJT4lIGFzLnZlY3RvcikpDQoNCiMgU0NBUkVEDQojIG1vZF9jaGlsZCA8LSBwc3ljaDo6bWVkaWF0ZShDRVNEICsgU0NBUkVEIH4gT3BlbkMgKyBDbG9zZUMgKyAoQ1lSTV9rKSwgZGF0YSA9IERhdGFfY2hpbGRfc3RhbmRhcmRpemVkKSAgDQojIG1vZF9jaGlsZCAlPiUgc3VtbWFyeSgpIA0KIyBtb2RfY2hpbGQkYm9vdCRjaS5hYg0KDQojIEdBRA0KIyBEYXRhX2NoaWxkX3N0YW5kYXJkaXplZF9nYWQgPC0NCiMgICBEYXRhX2NoaWxkX3N0YW5kYXJkaXplZCAlPiUNCiMgICBkcGx5cjo6c2VsZWN0KCJPcGVuQyIsICJDbG9zZUMiLCAiQ0VTRCIsICJHQUQiLCAiQ1lSTV9rIikgJT4lDQojICAgdGlkeXI6OmRyb3BfbmEoKQ0KDQpzdW1tYXJ5KGxtKENFU0QgfiBPcGVuQyArIENsb3NlQywgZGF0YSA9IERhdGFfY2hpbGRfc3RhbmRhcmRpemVkKSk7ICMgZ2dzdGF0c3Bsb3Q6OmdnY29lZnN0YXRzKGxtKENFU0QgfiBPcGVuQyArIENsb3NlQywgZGF0YSA9IERhdGFfY2hpbGRfc3RhbmRhcmRpemVkKSkNCnN1bW1hcnkobG0oR0FEIH4gT3BlbkMgKyBDbG9zZUMsIGRhdGEgPSBEYXRhX2NoaWxkX3N0YW5kYXJkaXplZCkpOyAjIGdnc3RhdHNwbG90OjpnZ2NvZWZzdGF0cyhsbShHQUQgfiBPcGVuQyArIENsb3NlQywgZGF0YSA9IERhdGFfY2hpbGRfc3RhbmRhcmRpemVkKSkNCg0KbW9kX2NoaWxkIDwtIHBzeWNoOjptZWRpYXRlKENFU0QgKyBHQUQgfiBPcGVuQyArIENsb3NlQyArIChDWVJNX2spLCBkYXRhID0gRGF0YV9jaGlsZF9zdGFuZGFyZGl6ZWQpICANCm1vZF9jaGlsZCAlPiUgc3VtbWFyeSgpIA0KbW9kX2NoaWxkJGJvb3QkY2kuYWINCg0KYGBgDQoNCjwhLS0NCiMjIEFkb2wgJiBDaGlsZCANCg0KYGBge3J9DQpEYXRhX3N0YW5kYXJkaXplZCA8LSANCiAgRGF0YSAlPiUNCiAgZHBseXI6OnNlbGVjdCgiQ1lXIiwgIk9wZW5DIiwgIkNsb3NlQyIsICJDRVNEIiwgIlNDQVJFRCIsICJDWVJNX2EiLCAiQ1lSTV9rIiwgIlBEIiwgIkdBRCIsICAiU2VwQSIsICJTQUQiKSAlPiUNCiAgZHBseXI6Om11dGF0ZShDWVJNID0gZHBseXI6OmNvYWxlc2NlKENZUk1fYSwgQ1lSTV9rKSkgJT4lDQogIGRwbHlyOjpzZWxlY3QoLUNZUk1fYSwgLUNZUk1faykgJT4lIA0KICBtdXRhdGVfYWxsKH4oc2NhbGUoLikgJT4lIGFzLnZlY3RvcikpDQpEYXRhX3N0YW5kYXJkaXplZCA8LSBjYmluZChEYXRhX3N0YW5kYXJkaXplZCwgZ2VuID0gRGF0YSRnZW4pDQoNCg0KI3BzeWNoOjptZWRpYXRlKENFU0QgKyBTQ0FSRUQgfiBDWVcgKyBDbG9zZUMgKyAoQ1lSTSksIGRhdGEgPSBEYXRhX3N0YW5kYXJkaXplZCkgDQptb2RfYWRvbGNoaWxkIDwtIHBzeWNoOjptZWRpYXRlKENFU0QgKyBTQ0FSRUQgfiBPcGVuQyArIENsb3NlQyArIChDWVJNKSwgZGF0YSA9IERhdGFfc3RhbmRhcmRpemVkKSANCm1vZF9hZG9sY2hpbGQgJT4lIHN1bW1hcnkoKQ0KbW9kX2Fkb2xjaGlsZCRib290JGNpLmFiDQoNCmJsYSA8LSANCiAgRGF0YV9zdGFuZGFyZGl6ZWQgJT4lDQogIGRwbHlyOjpzZWxlY3QoIk9wZW5DIiwgIkNsb3NlQyIsICJDRVNEIiwgQ1lSTSwgR0FEKSAlPiUNCiAgZHJvcF9uYSgpDQpgYGANCi0tPg0KDQoNCiMgbGF2dmFuIEFkb2wNCjwhLS0NCmBgYHtyfQ0KcGF0aF9tb2RlbCA8LSAnDQpPcGVuQyB+fiBDbG9zZUMNCkNFU0Qgfn4gU0NBUkVEDQojIENZUk1fYSB+IGdlbg0KDQojIGRpcmVjdCBlZmZlY3QNCiBDRVNEIH4gYzEqT3BlbkMNCiBDRVNEIH4gYzIqQ2xvc2VDDQogDQogU0NBUkVEIH4gYzMqT3BlbkMNCiBTQ0FSRUQgfiBjNCpDbG9zZUMNCiANCiMgbWVkaWF0b3INCiBDWVJNX2EgfiBhMSpPcGVuQw0KIENZUk1fYSB+IGEyKkNsb3NlQw0KIA0KIENFU0QgfiBiMSpDWVJNX2ENCiBTQ0FSRUQgfiBiMipDWVJNX2ENCiANCiMgaW5kaXJlY3QgZWZmZWN0IChhKmIpDQogYWIxIDo9IGExKmIxICAgIyBmb3IgYzE6IE9wZW4tQ0VTRA0KIGFiMiA6PSBhMipiMSAgICMgZm9yIGMyOiBDbG9zZS1DRVNEDQogDQogYWIzIDo9IGExKmIyICAgIyBmb3IgYzM6IE9wZW4tU0NBUkVEDQogYWI0IDo9IGEyKmIyICAgIyBmb3IgYzQ6IENsb3NlLVNDQVJFRA0KIA0KIyB0b3RhbCBlZmZlY3QNCiB0b3RhbDEgOj0gYzEgKyAoYTEqYjEpDQogdG90YWwyIDo9IGMyICsgKGEyKmIxKQ0KIA0KIHRvdGFsMyA6PSBjMyArIChhMSpiMikNCiB0b3RhbDQgOj0gYzQgKyAoYTIqYjIpDQonDQoNCmZpdF9wYXRoX21vZGVsIDwtIGxhdmFhbjo6c2VtKG1vZGVsID0gcGF0aF9tb2RlbCwgZGF0YSA9IERhdGFfYWRvbCwgZXN0aW1hdG9yID0gIm1sIiwgc2UgPSAiYm9vdHN0cmFwIikgIyBzZSA9ICJib290c3RyYXAiDQpzdW1tYXJ5KGZpdF9wYXRoX21vZGVsLCBmaXQubWVhc3VyZXMgPSBUUlVFLCBzdGFuZGFyZGl6ZWQgPSBUUlVFLCByc3F1YXJlID0gVFJVRSkNCnNlbVBhdGhzKGZpdF9wYXRoX21vZGVsLCB3aGF0ID0gInN0ZCIsIHRpdGxlID0gVFJVRSwgY3VydmVQaXZvdCA9IFRSVUUsIGxheW91dCA9ICJ0cmVlIikNCg0KIyBzaWduaWZpY2FudCBzdGFuZGFyZGl6ZWQgcGF0aHMgb25seQ0KbGF2YWFuUGxvdDo6bGF2YWFuUGxvdChtb2RlbCA9IGZpdF9wYXRoX21vZGVsLCANCiAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhfb3B0aW9ucyA9IGxpc3QobGF5b3V0ID0gImRvdCIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgbm9kZV9vcHRpb25zID0gbGlzdChzaGFwZSA9ICJib3giLCBmb250bmFtZSA9ICJIZWx2ZXRpY2EiKSwgDQogICAgICAgICAgICAgICAgICAgICAgIGVkZ2Vfb3B0aW9ucyA9IGxpc3QoY29sb3IgPSAiZ3JleSIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgY29lZnMgPSBUUlVFLCBzdGFuZCA9IFRSVUUsIGNvdnMgPSBUUlVFLCANCiAgICAgICAgICAgICAgICAgICAgICAgc2lnID0gMC4wNSwgc3RhcnMgPSBjKCJyZWdyZXNzIiwgImNvdiIpKSAgIyB1bnN0YW5kYXJkaXplZDogc2lnID0gMS4wMA0KYGBgDQoNCg0KIyBsYXZ2YW4gQWRvbCAmIENoaWxkDQoNCmBgYHtyfQ0KcGF0aF9tb2RlbCA8LSAnDQpPcGVuQyB+fiBDbG9zZUMNCkNFU0Qgfn4gU0NBUkVEDQoNCiMgQ1lSTSB+IENZVw0KIyBDRVNEIH4gQ1lXDQojIFNDQVJFRCB+IENZVw0KDQojIGRpcmVjdCBlZmZlY3QNCiBDRVNEIH4gYzEqT3BlbkMNCiBDRVNEIH4gYzIqQ2xvc2VDDQogDQogU0NBUkVEIH4gYzMqT3BlbkMNCiBTQ0FSRUQgfiBjNCpDbG9zZUMNCiANCiMgbWVkaWF0b3INCiBDWVJNIH4gYTEqT3BlbkMNCiBDWVJNIH4gYTIqQ2xvc2VDDQogDQogQ0VTRCB+IGIxKkNZUk0NCiBTQ0FSRUQgfiBiMipDWVJNDQogDQojIGluZGlyZWN0IGVmZmVjdCAoYSpiKQ0KIGFiMSA6PSBhMSpiMSAgICMgZm9yIGMxOiBPcGVuLUNFU0QNCiBhYjIgOj0gYTIqYjEgICAjIGZvciBjMjogQ2xvc2UtQ0VTRA0KIA0KIGFiMyA6PSBhMSpiMiAgICMgZm9yIGMzOiBPcGVuLVNDQVJFRA0KIGFiNCA6PSBhMipiMiAgICMgZm9yIGM0OiBDbG9zZS1TQ0FSRUQNCiANCiMgdG90YWwgZWZmZWN0DQogdG90YWwxIDo9IGMxICsgKGExKmIxKQ0KIHRvdGFsMiA6PSBjMiArIChhMipiMSkNCiANCiB0b3RhbDMgOj0gYzMgKyAoYTEqYjIpDQogdG90YWw0IDo9IGM0ICsgKGEyKmIyKQ0KJw0KDQpmaXRfcGF0aF9tb2RlbCA8LSBsYXZhYW46OnNlbShtb2RlbCA9IHBhdGhfbW9kZWwsIGRhdGEgPSBEYXRhX3N0YW5kYXJkaXplZCwgZXN0aW1hdG9yID0gIm1sIiwgc2UgPSAiYm9vdHN0cmFwIiwgdGVzdCA9ICJib290IikgIyBzZSA9ICJib290c3RyYXAiDQpzdW1tYXJ5KGZpdF9wYXRoX21vZGVsLCBmaXQubWVhc3VyZXMgPSBUUlVFLCBzdGFuZGFyZGl6ZWQgPSBUUlVFLCByc3F1YXJlID0gVFJVRSkNCnBhcmFtZXRlckVzdGltYXRlcyhmaXRfcGF0aF9tb2RlbCwgY2kgPSBUUlVFLCBsZXZlbCA9IDAuOTUsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIiwgc3RhbmRhcmRpemVkID0gVFJVRSkNCiAgICAgICAgICAgICAgICAgICANCg0KIyBzaWduaWZpY2FudCBzdGFuZGFyZGl6ZWQgcGF0aHMgb25seQ0KbGF2YWFuUGxvdDo6bGF2YWFuUGxvdChtb2RlbCA9IGZpdF9wYXRoX21vZGVsLCANCiAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhfb3B0aW9ucyA9IGxpc3QobGF5b3V0ID0gImRvdCIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgbm9kZV9vcHRpb25zID0gbGlzdChzaGFwZSA9ICJib3giLCBmb250bmFtZSA9ICJIZWx2ZXRpY2EiKSwgDQogICAgICAgICAgICAgICAgICAgICAgIGVkZ2Vfb3B0aW9ucyA9IGxpc3QoY29sb3IgPSAiZ3JleSIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgY29lZnMgPSBUUlVFLCBzdGFuZCA9IFRSVUUsIGNvdnMgPSBUUlVFLCANCiAgICAgICAgICAgICAgICAgICAgICAgc2lnID0gMC4wNSwgc3RhcnMgPSBjKCJyZWdyZXNzIiwgImNvdiIpKSAgIyB1bnN0YW5kYXJkaXplZDogc2lnID0gMS4wMA0KYGBgDQotLT4NCg0KDQoNCjwhLS0gU2Vzc2lvbiBJbmZvIGFuZCBMaWNlbnNlIC0tPg0KDQo8YnI+DQoNCiMgU2Vzc2lvbiBJbmZvDQpgYGB7ciBzZXNzaW9uX2luZm8sIGVjaG8gPSBGQUxTRSwgcmVzdWx0cyA9ICdtYXJrdXAnfQ0Kc2Vzc2lvbkluZm8oKSAgICANCmBgYA0KDQo8IS0tIEZvb3RlciAtLT4NCiZuYnNwOw0KPGhyIC8+DQo8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+QSB3b3JrIGJ5IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9DbGF1ZGl1UGFwYXN0ZXJpLyI+Q2xhdWRpdSBQYXBhc3Rlcmk8L2E+PC9wPg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJjb2xvcjogIzgwODA4MDsiPjxlbT5jbGF1ZGl1LnBhcGFzdGVyaUBnbWFpbC5jb208L2VtPjwvc3Bhbj48L3A+DQombmJzcDsNCg==