library("haven")
library("tidyverse")
library("dplyr")
library("foreign")
library("survey")
library("ggplot2")
library("car")
library("rms")
library("SciViews")

#list variable

Fulldat_Pheno <- Falldat_Pheno
colnames(Fulldat_Pheno)

#Perfluorohexane_sulfonic_acid_comment #Perfluorononanoic_acid_comment #perfluorooctanoic_acid_comment #perfluorooctane_sulfonic_acid_comment

#check effect modifiers Subgroup analysis for gender, race, BMI, income, smoking and cancer #for subgroup analysis by gender

#for subgroup analysis by Race

##for subgroup analysis by BMI

#for subgroup analysis by income

#for subgroup analysis by cancer

#for subgroup analysis by smoking

#sensitivity analysis without cancer patient only for pfas

#subset cancer
cancer <- Fulldat_Pheno[Fulldat_Pheno$had_cancer == 1, ]
cancer$had_cancer[is.na(cancer$had_cancer)] <- 0
cancer <- cancer[cancer$had_cancer != 0, , drop = FALSE]

non_cancer <- Fulldat_Pheno[Fulldat_Pheno$had_cancer == 2, ]
non_cancer$had_cancer[is.na(non_cancer$had_cancer)] <- 0
non_cancer <- non_cancer[non_cancer$had_cancer != 0, , drop = FALSE]

des_cancer <- svydesign(id =~ psu, strata =~ Strata, weights =~ weight_2, nest = TRUE, data = cancer) 
des_non_cancer <- svydesign(id =~ psu, strata =~ Strata, weights =~ weight_2, nest = TRUE, data = non_cancer) 

#sensitivity Perfluorohexane_sulfonic_acid


Call:
svyglm(formula = Phenotypic_Age ~ Perfluorohexane_sulfonic_acid_comment, 
    design = des_non_cancer, family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)                            44.6245     0.2667 167.301   <2e-16 ***
Perfluorohexane_sulfonic_acid_comment   4.8407     2.0529   2.358   0.0198 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 332.6811)

Number of Fisher Scoring iterations: 2

                                          2.5 %    97.5 %
(Intercept)                           44.096876 45.152048
Perfluorohexane_sulfonic_acid_comment  0.780117  8.901293

Call:
svyglm(formula = Phenotypic_Age ~ Perfluorohexane_sulfonic_acid_comment + 
    Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)                           47.83787    1.37179  34.872  < 2e-16 ***
Perfluorohexane_sulfonic_acid_comment  5.55320    2.11376   2.627  0.00965 ** 
Gender                                 0.04351    0.40657   0.107  0.91495    
Race                                   1.14035    0.17980   6.342 3.51e-09 ***
Marital_Status                        -2.54217    0.34874  -7.290 2.77e-11 ***
Ratio_income_poverty                  -0.39227    0.16804  -2.334  0.02112 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 306.415)

Number of Fisher Scoring iterations: 2

                                           2.5 %      97.5 %
(Intercept)                           45.1237386 50.55199385
Perfluorohexane_sulfonic_acid_comment  1.3710780  9.73531365
Gender                                -0.7608969  0.84790758
Race                                   0.7846059  1.49608745
Marital_Status                        -3.2321619 -1.85218772
Ratio_income_poverty                  -0.7247400 -0.05980344

Call:
svyglm(formula = Phenotypic_Age ~ Perfluorohexane_sulfonic_acid_comment + 
    Gender + Race + Marital_Status + Ratio_income_poverty + BMI + 
    sleep_disorders + Smoked_days + now_smoke + quit_smoking + 
    Avg_alcohol_drinks + had_cancer, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients: (3 not defined because of singularities)
                                        Estimate Std. Error t value Pr(>|t|)    
(Intercept)                            4.742e+01  5.174e+00   9.166 1.00e-14 ***
Perfluorohexane_sulfonic_acid_comment  1.558e+01  3.553e+00   4.385 2.99e-05 ***
Gender                                -8.189e-02  1.116e+00  -0.073 0.941634    
Race                                   1.509e+00  3.901e-01   3.867 0.000202 ***
Marital_Status                        -3.002e+00  3.904e-01  -7.689 1.35e-11 ***
Ratio_income_poverty                  -8.517e-01  4.413e-01  -1.930 0.056587 .  
BMI                                    2.188e-01  8.455e-02   2.588 0.011182 *  
sleep_disorders                       -3.892e+00  1.263e+00  -3.080 0.002703 ** 
quit_smoking                           3.628e-04  3.184e-05  11.395  < 2e-16 ***
Avg_alcohol_drinks                     6.103e+00  1.332e+00   4.580 1.41e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 307.1396)

Number of Fisher Scoring iterations: 2

                                             2.5 %        97.5 %
(Intercept)                           37.148486566 57.6899416270
Perfluorohexane_sulfonic_acid_comment  8.527776239 22.6351898716
Gender                                -2.296491768  2.1327107901
Race                                   0.734150359  2.2831598604
Marital_Status                        -3.777281718 -2.2270057290
Ratio_income_poverty                  -1.727711751  0.0243707648
BMI                                    0.050924375  0.3866347360
sleep_disorders                       -6.399543048 -1.3835739254
quit_smoking                           0.000299598  0.0004260178
Avg_alcohol_drinks                     3.457734609  8.7480314979

Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorohexane_sulfonic_acid), 
    design = des_non_cancer, family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)                        44.1631     0.2746 160.838  < 2e-16 ***
ln(Perfluorohexane_sulfonic_acid)   1.5232     0.2572   5.923 2.55e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 330.9378)

Number of Fisher Scoring iterations: 2

                                      2.5 %    97.5 %
(Intercept)                       43.619957 44.706181
ln(Perfluorohexane_sulfonic_acid)  1.014574  2.031878

Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorohexane_sulfonic_acid) + 
    Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)                        46.1855     1.3801  33.466  < 2e-16 ***
ln(Perfluorohexane_sulfonic_acid)   1.8568     0.2816   6.595 9.94e-10 ***
Gender                              1.1405     0.4457   2.559  0.01165 *  
Race                                1.0963     0.1711   6.408 2.53e-09 ***
Marital_Status                     -2.5622     0.3502  -7.317 2.40e-11 ***
Ratio_income_poverty               -0.5316     0.1698  -3.130  0.00216 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 304.0731)

Number of Fisher Scoring iterations: 2

                                       2.5 %     97.5 %
(Intercept)                       43.4550043 48.9160862
ln(Perfluorohexane_sulfonic_acid)  1.2996920  2.4138232
Gender                             0.2587302  2.0223196
Race                               0.7578093  1.4347333
Marital_Status                    -3.2551073 -1.8693883
Ratio_income_poverty              -0.8675985 -0.1955677

Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorohexane_sulfonic_acid) + 
    Gender + Race + Marital_Status + Ratio_income_poverty + BMI + 
    sleep_disorders + Smoked_days + now_smoke + quit_smoking + 
    Avg_alcohol_drinks + had_cancer, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients: (3 not defined because of singularities)
                                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)                        4.412e+01  5.391e+00   8.185 1.23e-12 ***
ln(Perfluorohexane_sulfonic_acid)  3.033e+00  7.845e-01   3.867 0.000202 ***
Gender                             1.527e+00  1.230e+00   1.241 0.217721    
Race                               1.309e+00  3.871e-01   3.381 0.001049 ** 
Marital_Status                    -2.959e+00  3.833e-01  -7.720 1.17e-11 ***
Ratio_income_poverty              -9.898e-01  4.272e-01  -2.317 0.022655 *  
BMI                                2.460e-01  8.304e-02   2.963 0.003854 ** 
sleep_disorders                   -4.074e+00  1.265e+00  -3.222 0.001743 ** 
quit_smoking                       3.492e-04  3.221e-05  10.842  < 2e-16 ***
Avg_alcohol_drinks                 6.344e+00  1.368e+00   4.638 1.12e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 302.7751)

Number of Fisher Scoring iterations: 2

                                         2.5 %        97.5 %
(Intercept)                       33.417934749 54.8213604517
ln(Perfluorohexane_sulfonic_acid)  1.475940598  4.5906066145
Gender                            -0.915816707  3.9689045302
Race                               0.540269531  2.0770653247
Marital_Status                    -3.720068796 -2.1981281084
Ratio_income_poverty              -1.837824144 -0.1416952778
BMI                                0.081163854  0.4108765925
sleep_disorders                   -6.584857357 -1.5641029625
quit_smoking                       0.000285278  0.0004131744
Avg_alcohol_drinks                 3.628730652  9.0595277075

#sensitivity “Perfluorononanoic_acid” “Perfluorononanoic_acid_comment”


Call:
svyglm(formula = Phenotypic_Age ~ Perfluorononanoic_acid_comment, 
    design = des_non_cancer, family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                               Estimate Std. Error t value Pr(>|t|)    
(Intercept)                     44.6663     0.2648 168.688   <2e-16 ***
Perfluorononanoic_acid_comment   1.1880     2.6807   0.443    0.658    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 332.9529)

Number of Fisher Scoring iterations: 2

                                   2.5 %    97.5 %
(Intercept)                    44.142540 45.190011
Perfluorononanoic_acid_comment -4.114385  6.490335

Call:
svyglm(formula = Phenotypic_Age ~ Perfluorononanoic_acid_comment + 
    Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                               Estimate Std. Error t value Pr(>|t|)    
(Intercept)                    47.96844    1.36894  35.041  < 2e-16 ***
Perfluorononanoic_acid_comment -0.54634    2.55638  -0.214   0.8311    
Gender                          0.07089    0.40506   0.175   0.8614    
Race                            1.13497    0.17821   6.369 3.08e-09 ***
Marital_Status                 -2.54354    0.34880  -7.292 2.73e-11 ***
Ratio_income_poverty           -0.41820    0.16749  -2.497   0.0138 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 306.7814)

Number of Fisher Scoring iterations: 2

                                    2.5 %      97.5 %
(Intercept)                    45.2599719 50.67691678
Perfluorononanoic_acid_comment -5.6042017  4.51152640
Gender                         -0.7305384  0.87230973
Race                            0.7823703  1.48757454
Marital_Status                 -3.2336439 -1.85342950
Ratio_income_poverty           -0.7495801 -0.08682529

Call:
svyglm(formula = Phenotypic_Age ~ Perfluorononanoic_acid_comment + 
    Gender + Race + Marital_Status + Ratio_income_poverty + BMI + 
    sleep_disorders + Smoked_days + now_smoke + quit_smoking + 
    Avg_alcohol_drinks + had_cancer, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients: (3 not defined because of singularities)
                                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)                     4.710e+01  5.141e+00   9.162 1.02e-14 ***
Perfluorononanoic_acid_comment -7.793e+00  5.212e+00  -1.495 0.138145    
Gender                          6.156e-02  1.095e+00   0.056 0.955276    
Race                            1.427e+00  3.877e-01   3.680 0.000386 ***
Marital_Status                 -3.056e+00  3.809e-01  -8.023 2.69e-12 ***
Ratio_income_poverty           -9.208e-01  4.392e-01  -2.097 0.038679 *  
BMI                             2.360e-01  8.534e-02   2.766 0.006828 ** 
sleep_disorders                -3.793e+00  1.266e+00  -2.997 0.003481 ** 
quit_smoking                    3.665e-04  3.362e-05  10.900  < 2e-16 ***
Avg_alcohol_drinks              6.367e+00  1.373e+00   4.639 1.12e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 308.2944)

Number of Fisher Scoring iterations: 2

                                       2.5 %        97.5 %
(Intercept)                     36.891707662 57.3022904321
Perfluorononanoic_acid_comment -18.139404305  2.5533216819
Gender                          -2.111959935  2.2350873006
Race                             0.657264298  2.1967635773
Marital_Status                  -3.811967581 -2.2996545491
Ratio_income_poverty            -1.792726348 -0.0489397302
BMI                              0.066590377  0.4054362591
sleep_disorders                 -6.304927196 -1.2801494135
quit_smoking                     0.000299724  0.0004332221
Avg_alcohol_drinks               3.642423234  9.0922434957

Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorononanoic_acid), 
    design = des_non_cancer, family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                           Estimate Std. Error t value Pr(>|t|)    
(Intercept)                 44.9033     0.2669 168.268   <2e-16 ***
ln(Perfluorononanoic_acid)   1.0188     0.3216   3.168   0.0019 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 332.3029)

Number of Fisher Scoring iterations: 2

                                2.5 %    97.5 %
(Intercept)                44.3754437 45.431107
ln(Perfluorononanoic_acid)  0.3827299  1.654808

Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorononanoic_acid) + 
    Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                           Estimate Std. Error t value Pr(>|t|)    
(Intercept)                 48.4186     1.3770  35.163  < 2e-16 ***
ln(Perfluorononanoic_acid)   1.4180     0.3194   4.439 1.92e-05 ***
Gender                       0.3409     0.4078   0.836  0.40478    
Race                         1.0443     0.1797   5.812 4.57e-08 ***
Marital_Status              -2.5693     0.3520  -7.300 2.63e-11 ***
Ratio_income_poverty        -0.4966     0.1703  -2.917  0.00418 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 305.5234)

Number of Fisher Scoring iterations: 2

                                2.5 %     97.5 %
(Intercept)                45.6941722 51.1429897
ln(Perfluorononanoic_acid)  0.7860387  2.0499562
Gender                     -0.4659615  1.1476630
Race                        0.6887773  1.3997519
Marital_Status             -3.2656669 -1.8728755
Ratio_income_poverty       -0.8334882 -0.1597213

Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorononanoic_acid) + 
    Gender + Race + Marital_Status + Ratio_income_poverty + BMI + 
    sleep_disorders + Smoked_days + now_smoke + quit_smoking + 
    Avg_alcohol_drinks + had_cancer, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients: (3 not defined because of singularities)
                             Estimate Std. Error t value Pr(>|t|)    
(Intercept)                 4.799e+01  5.105e+00   9.401 3.15e-15 ***
ln(Perfluorononanoic_acid)  1.997e+00  9.115e-01   2.191  0.03089 *  
Gender                      2.157e-01  1.129e+00   0.191  0.84890    
Race                        1.247e+00  3.868e-01   3.225  0.00173 ** 
Marital_Status             -3.004e+00  3.868e-01  -7.767 9.27e-12 ***
Ratio_income_poverty       -9.505e-01  4.409e-01  -2.156  0.03364 *  
BMI                         2.433e-01  8.306e-02   2.930  0.00425 ** 
sleep_disorders            -3.943e+00  1.285e+00  -3.069  0.00280 ** 
quit_smoking                3.640e-04  3.264e-05  11.152  < 2e-16 ***
Avg_alcohol_drinks          6.150e+00  1.337e+00   4.601 1.30e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 306.9602)

Number of Fisher Scoring iterations: 2

                                   2.5 %        97.5 %
(Intercept)                37.8583239859 58.1287921366
ln(Perfluorononanoic_acid)  0.1875837069  3.8068479841
Gender                     -2.0259826022  2.4574311049
Race                        0.4795755142  2.0153677214
Marital_Status             -3.7723181394 -2.2365442551
Ratio_income_poverty       -1.8258081127 -0.0751049723
BMI                         0.0784339819  0.4082412405
sleep_disorders            -6.4938307821 -1.3920359025
quit_smoking                0.0002992119  0.0004288186
Avg_alcohol_drinks          3.4959229980  8.8033786625

#sensitivity “perfluorooctanoic_acid” “perfluorooctanoic_acid_comment”


Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctanoic_acid_comment, 
    design = des_non_cancer, family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                               Estimate Std. Error t value Pr(>|t|)    
(Intercept)                     42.8717     0.3396 126.252  < 2e-16 ***
perfluorooctanoic_acid_comment   4.0902     0.6417   6.374 3.71e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 326.0826)

Number of Fisher Scoring iterations: 2

                                  2.5 %    97.5 %
(Intercept)                    42.19925 43.544148
perfluorooctanoic_acid_comment  2.81948  5.360832

Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctanoic_acid_comment + 
    Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                               Estimate Std. Error t value Pr(>|t|)    
(Intercept)                    46.41593    1.51423  30.653  < 2e-16 ***
perfluorooctanoic_acid_comment  2.48811    0.61706   4.032   0.0001 ***
Gender                          0.01509    0.44733   0.034   0.9731    
Race                            1.19996    0.19338   6.205 9.07e-09 ***
Marital_Status                 -2.47831    0.36859  -6.724 7.39e-10 ***
Ratio_income_poverty           -0.42265    0.17260  -2.449   0.0159 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 301.5538)

Number of Fisher Scoring iterations: 2

                                    2.5 %      97.5 %
(Intercept)                    43.4162538 49.41561292
perfluorooctanoic_acid_comment  1.2657192  3.71049195
Gender                         -0.8710606  0.90124972
Race                            0.8168709  1.58304546
Marital_Status                 -3.2084886 -1.74813571
Ratio_income_poverty           -0.7645623 -0.08072992

Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctanoic_acid_comment + 
    Gender + Race + Marital_Status + Ratio_income_poverty + BMI + 
    sleep_disorders + Smoked_days + now_smoke + quit_smoking + 
    Avg_alcohol_drinks + had_cancer, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients: (3 not defined because of singularities)
                                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)                     4.631e+01  5.647e+00   8.201 3.27e-12 ***
perfluorooctanoic_acid_comment  1.622e+00  1.302e+00   1.246 0.216452    
Gender                         -3.823e-01  1.213e+00  -0.315 0.753489    
Race                            1.398e+00  4.325e-01   3.232 0.001786 ** 
Marital_Status                 -3.160e+00  4.001e-01  -7.897 1.29e-11 ***
Ratio_income_poverty           -8.345e-01  4.463e-01  -1.870 0.065160 .  
BMI                             2.326e-01  9.104e-02   2.555 0.012522 *  
sleep_disorders                -3.827e+00  1.390e+00  -2.753 0.007301 ** 
quit_smoking                    3.435e-04  4.046e-05   8.490 8.84e-13 ***
Avg_alcohol_drinks              6.378e+00  1.700e+00   3.751 0.000332 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 307.4315)

Number of Fisher Scoring iterations: 2

                                       2.5 %        97.5 %
(Intercept)                    35.0706171983 57.5461226524
perfluorooctanoic_acid_comment -0.9689731913  4.2132718195
Gender                         -2.7966650387  2.0320466420
Race                            0.5371302337  2.2584986151
Marital_Status                 -3.9559210987 -2.3634161976
Ratio_income_poverty           -1.7225824386  0.0536372927
BMI                             0.0514141615  0.4137807433
sleep_disorders                -6.5931656862 -1.0607604572
quit_smoking                    0.0002630027  0.0004240497
Avg_alcohol_drinks              2.9939154785  9.7620641514

Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctanoic_acid), 
    design = des_non_cancer, family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                           Estimate Std. Error t value Pr(>|t|)    
(Intercept)                 44.1172     0.3914 112.705   <2e-16 ***
ln(perfluorooctanoic_acid)   0.1883     0.2831   0.665    0.507    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 329.8706)

Number of Fisher Scoring iterations: 2

                               2.5 %     97.5 %
(Intercept)                43.342007 44.8923166
ln(perfluorooctanoic_acid) -0.372333  0.7489362

Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctanoic_acid) + 
    Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                           Estimate Std. Error t value Pr(>|t|)    
(Intercept)                 46.3438     1.4802  31.310  < 2e-16 ***
ln(perfluorooctanoic_acid)   0.9657     0.3032   3.185  0.00186 ** 
Gender                       0.2967     0.4612   0.643  0.52130    
Race                         1.2253     0.1912   6.408 3.43e-09 ***
Marital_Status              -2.5883     0.3828  -6.761 6.13e-10 ***
Ratio_income_poverty        -0.4973     0.1828  -2.721  0.00753 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 302.3885)

Number of Fisher Scoring iterations: 2

                                2.5 %     97.5 %
(Intercept)                43.4116407 49.2760111
ln(perfluorooctanoic_acid)  0.3651383  1.5662865
Gender                     -0.6169626  1.2104153
Race                        0.8465337  1.6041159
Marital_Status             -3.3465716 -1.8299400
Ratio_income_poverty       -0.8592872 -0.1352337

Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctanoic_acid) + 
    Gender + Race + Marital_Status + Ratio_income_poverty + BMI + 
    sleep_disorders + Smoked_days + now_smoke + quit_smoking + 
    Avg_alcohol_drinks + had_cancer, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients: (3 not defined because of singularities)
                             Estimate Std. Error t value Pr(>|t|)    
(Intercept)                 4.591e+01  5.715e+00   8.034 6.93e-12 ***
ln(perfluorooctanoic_acid)  1.598e+00  9.643e-01   1.658  0.10131    
Gender                     -2.301e-02  1.252e+00  -0.018  0.98538    
Race                        1.380e+00  4.323e-01   3.192  0.00202 ** 
Marital_Status             -3.275e+00  4.225e-01  -7.752 2.47e-11 ***
Ratio_income_poverty       -9.275e-01  4.632e-01  -2.002  0.04867 *  
BMI                         2.550e-01  8.850e-02   2.881  0.00508 ** 
sleep_disorders            -4.031e+00  1.397e+00  -2.884  0.00504 ** 
quit_smoking                3.538e-04  4.071e-05   8.691 3.55e-13 ***
Avg_alcohol_drinks          5.900e+00  1.603e+00   3.681  0.00042 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 306.6574)

Number of Fisher Scoring iterations: 2

                                   2.5 %        97.5 %
(Intercept)                34.5411696039 57.2861295678
ln(perfluorooctanoic_acid) -0.3205654305  3.5173757614
Gender                     -2.5139770658  2.4679489908
Race                        0.5196506440  2.2403635368
Marital_Status             -4.1158973016 -2.4343510499
Ratio_income_poverty       -1.8493559368 -0.0055649759
BMI                         0.0788623493  0.4311003890
sleep_disorders            -6.8116762815 -1.2494731695
quit_smoking                0.0002727828  0.0004347966
Avg_alcohol_drinks          2.7104232201  9.0889779036

#sensitivity “perfluorooctane_sulfonic_acid” “perfluorooctane_sulfonic_acid_comment”


Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctane_sulfonic_acid_comment, 
    design = des_non_cancer, family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)                            44.2510     0.2882 153.558   <2e-16 ***
perfluorooctane_sulfonic_acid_comment   7.7446     3.8173   2.029   0.0447 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 329.6064)

Number of Fisher Scoring iterations: 2

                                           2.5 %   97.5 %
(Intercept)                           43.6803876 44.82171
perfluorooctane_sulfonic_acid_comment  0.1851965 15.30397

Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctane_sulfonic_acid_comment + 
    Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                                       Estimate Std. Error t value Pr(>|t|)    
(Intercept)                           47.280284   1.509515  31.322  < 2e-16 ***
perfluorooctane_sulfonic_acid_comment  9.095359   4.573562   1.989   0.0491 *  
Gender                                 0.003878   0.445615   0.009   0.9931    
Race                                   1.233430   0.191275   6.448 2.83e-09 ***
Marital_Status                        -2.549983   0.375619  -6.789 5.36e-10 ***
Ratio_income_poverty                  -0.417543   0.175685  -2.377   0.0191 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 302.5686)

Number of Fisher Scoring iterations: 2

                                            2.5 %      97.5 %
(Intercept)                           44.28994702 50.27062179
perfluorooctane_sulfonic_acid_comment  0.03516839 18.15554959
Gender                                -0.87888197  0.88663735
Race                                   0.85451578  1.61234431
Marital_Status                        -3.29408078 -1.80588586
Ratio_income_poverty                  -0.76557344 -0.06951231

Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctane_sulfonic_acid_comment + 
    Gender + Race + Marital_Status + Ratio_income_poverty + BMI + 
    sleep_disorders + Smoked_days + now_smoke + quit_smoking + 
    Avg_alcohol_drinks + had_cancer, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients: (3 not defined because of singularities)
                                        Estimate Std. Error t value Pr(>|t|)    
(Intercept)                            4.734e+01  5.569e+00   8.500 8.45e-13 ***
perfluorooctane_sulfonic_acid_comment  3.879e+00  9.606e+00   0.404 0.687413    
Gender                                -3.244e-01  1.225e+00  -0.265 0.791897    
Race                                   1.428e+00  4.277e-01   3.339 0.001281 ** 
Marital_Status                        -3.236e+00  4.227e-01  -7.655 3.82e-11 ***
Ratio_income_poverty                  -8.412e-01  4.513e-01  -1.864 0.065997 .  
BMI                                    2.391e-01  8.970e-02   2.665 0.009309 ** 
sleep_disorders                       -3.977e+00  1.394e+00  -2.852 0.005521 ** 
quit_smoking                           3.538e-04  4.062e-05   8.709 3.28e-13 ***
Avg_alcohol_drinks                     6.115e+00  1.629e+00   3.754 0.000328 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 307.9629)

Number of Fisher Scoring iterations: 2

                                              2.5 %        97.5 %
(Intercept)                            3.625483e+01 58.4213865517
perfluorooctane_sulfonic_acid_comment -1.523723e+01 22.9956009513
Gender                                -2.762962e+00  2.1141731392
Race                                   5.767528e-01  2.2791218918
Marital_Status                        -4.077069e+00 -2.3946425386
Ratio_income_poverty                  -1.739298e+00  0.0569125135
BMI                                    6.054745e-02  0.4175740423
sleep_disorders                       -6.751021e+00 -1.2021729804
quit_smoking                           2.729601e-04  0.0004346497
Avg_alcohol_drinks                     2.873375e+00  9.3561086956

Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctane_sulfonic_acid), 
    design = des_non_cancer, family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)                        39.7506     0.5994  66.319  < 2e-16 ***
ln(perfluorooctane_sulfonic_acid)   2.1196     0.2489   8.518 6.16e-14 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 325.5034)

Number of Fisher Scoring iterations: 2

                                      2.5 %    97.5 %
(Intercept)                       38.563667 40.937566
ln(perfluorooctane_sulfonic_acid)  1.626804  2.612394

Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctane_sulfonic_acid) + 
    Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients:
                                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)                        41.3150     1.6036  25.764  < 2e-16 ***
ln(perfluorooctane_sulfonic_acid)   2.4634     0.2805   8.783 1.87e-14 ***
Gender                              1.1298     0.4656   2.427  0.01681 *  
Race                                1.0454     0.1912   5.467 2.74e-07 ***
Marital_Status                     -2.5761     0.3784  -6.808 4.88e-10 ***
Ratio_income_poverty               -0.5421     0.1759  -3.081  0.00259 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 297.3742)

Number of Fisher Scoring iterations: 2

                                       2.5 %    97.5 %
(Intercept)                       38.1383445 44.491679
ln(perfluorooctane_sulfonic_acid)  1.9077359  3.018973
Gender                             0.2074995  2.052167
Race                               0.6665602  1.424178
Marital_Status                    -3.3257303 -1.826511
Ratio_income_poverty              -0.8906493 -0.193542

Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctane_sulfonic_acid) + 
    Gender + Race + Marital_Status + Ratio_income_poverty + BMI + 
    sleep_disorders + Smoked_days + now_smoke + quit_smoking + 
    Avg_alcohol_drinks + had_cancer, design = des_non_cancer, 
    family = "gaussian", data = non_cancer)

Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE, 
    data = non_cancer)

Coefficients: (3 not defined because of singularities)
                                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)                        3.779e+01  5.928e+00   6.375 1.10e-08 ***
ln(perfluorooctane_sulfonic_acid)  3.905e+00  8.399e-01   4.649 1.30e-05 ***
Gender                             1.679e+00  1.258e+00   1.335 0.185812    
Race                               9.525e-01  4.197e-01   2.270 0.025926 *  
Marital_Status                    -3.174e+00  4.190e-01  -7.576 5.45e-11 ***
Ratio_income_poverty              -9.358e-01  4.263e-01  -2.195 0.031063 *  
BMI                                2.921e-01  8.506e-02   3.434 0.000946 ***
sleep_disorders                   -4.074e+00  1.408e+00  -2.895 0.004893 ** 
quit_smoking                       3.371e-04  4.011e-05   8.406 1.29e-12 ***
Avg_alcohol_drinks                 5.427e+00  1.596e+00   3.401 0.001052 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 295.7605)

Number of Fisher Scoring iterations: 2

                                         2.5 %        97.5 %
(Intercept)                       25.992011394 49.5865423537
ln(perfluorooctane_sulfonic_acid)  2.233695705  5.5767921885
Gender                            -0.824589458  4.1820719340
Race                               0.117303667  1.7877055767
Marital_Status                    -4.008233517 -2.3405483456
Ratio_income_poverty              -1.784171445 -0.0873677205
BMI                                0.122781843  0.4613338368
sleep_disorders                   -6.875704479 -1.2731266854
quit_smoking                       0.000257335  0.0004169684
Avg_alcohol_drinks                 2.250880283  8.6021872146
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCmBgYHtyfQ0KbGlicmFyeSgiaGF2ZW4iKQ0KbGlicmFyeSgidGlkeXZlcnNlIikNCmxpYnJhcnkoImRwbHlyIikNCmxpYnJhcnkoImZvcmVpZ24iKQ0KbGlicmFyeSgic3VydmV5IikNCmxpYnJhcnkoImdncGxvdDIiKQ0KbGlicmFyeSgiY2FyIikNCmxpYnJhcnkoInJtcyIpDQpsaWJyYXJ5KCJTY2lWaWV3cyIpDQpgYGANCg0KDQojbGlzdCB2YXJpYWJsZQ0KYGBge3J9DQpGdWxsZGF0X1BoZW5vIDwtIEZhbGxkYXRfUGhlbm8NCmNvbG5hbWVzKEZ1bGxkYXRfUGhlbm8pDQpgYGANCiNQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQojUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50DQojcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50DQojcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudA0KDQojY2hlY2sgZWZmZWN0IG1vZGlmaWVycyBTdWJncm91cCBhbmFseXNpcyBmb3IgZ2VuZGVyLCByYWNlLCBCTUksIGluY29tZSwgc21va2luZyBhbmQgY2FuY2VyDQojZm9yIHN1Ymdyb3VwIGFuYWx5c2lzIGJ5IGdlbmRlcg0KYGBge3IgZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9VFJVRX0NCm1lbiA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kR2VuZGVyID09IDEsIF0NCndvbWVuIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRHZW5kZXIgPT0gMiwgXQ0KZGVzbWVuIDwtIHN2eWRlc2lnbihpZCA9fiBwc3UsIHN0cmF0YSA9fiBTdHJhdGEsIHdlaWdodHMgPX4gd2VpZ2h0XzIsIG5lc3QgPSBUUlVFLCBkYXRhID0gbWVuKSAjc2VsZWN0IG1lbg0KZGVzd29tZW4gPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSB3b21lbikgI3NlbGVjdCB3b21lbg0KDQojUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudA0KbW9kZWxfc2V4IDwtIGdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQgKyBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50KkdlbmRlciwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX3NleCkNCg0KbW9kZWxfbWVuIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBtZW4sIGRlc2lnbiA9IGRlc21lbiwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfbWVuKQ0KY29uZmludChtb2RlbF9tZW4pWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQptb2RlbF93b21lbiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gd29tZW4sIGRlc2lnbiA9IGRlc3dvbWVuLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF93b21lbikNCmNvbmZpbnQobW9kZWxfd29tZW4pWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQoNCiNQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQNCm1vZGVsX3NleCA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQgKyBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQqR2VuZGVyLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfc2V4KQ0KDQptb2RlbF9tZW4gPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbWVuLCBkZXNpZ24gPSBkZXNtZW4sIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX21lbikNCmNvbmZpbnQobW9kZWxfbWVuKVsiUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50IiwgXSAgDQptb2RlbF93b21lbiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSB3b21lbiwgZGVzaWduID0gZGVzd29tZW4sIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX3dvbWVuKQ0KY29uZmludChtb2RlbF93b21lbilbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KDQojcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50DQptb2RlbF9zZXggPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50ICsgcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50KkdlbmRlciwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX3NleCkNCg0KbW9kZWxfbWVuIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IG1lbiwgZGVzaWduID0gZGVzbWVuLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9tZW4pDQpjb25maW50KG1vZGVsX21lbilbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfd29tZW4gPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gd29tZW4sIGRlc2lnbiA9IGRlc3dvbWVuLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF93b21lbikNCmNvbmZpbnQobW9kZWxfd29tZW4pWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCg0KI3BlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQNCm1vZGVsX3NleCA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCpHZW5kZXIsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9zZXgpDQoNCm1vZGVsX21lbiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbWVuLCBkZXNpZ24gPSBkZXNtZW4sIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX21lbikNCmNvbmZpbnQobW9kZWxfbWVuKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfd29tZW4gPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IHdvbWVuLCBkZXNpZ24gPSBkZXN3b21lbiwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfd29tZW4pDQpjb25maW50KG1vZGVsX3dvbWVuKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KDQpgYGANCiNmb3Igc3ViZ3JvdXAgYW5hbHlzaXMgYnkgUmFjZQ0KYGBge3IgZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9VFJVRX0NCk1leGljYW4gPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJFJhY2UgPT0gMSwgXQ0KT3RoZXJfSGlzcGFuaWMgPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJFJhY2UgPT0gMiwgXQ0KTm9uX0hpc3BhbmljX3doaXRlIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRSYWNlID09IDMsIF0NCk5vbl9IaXNwYW5pY19CbGFjayA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kUmFjZSA9PSA0LCBdDQpPdGhlcl9SYWNlIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRSYWNlID09IDUsIF0NCg0KZGVzX01lIDwtIHN2eWRlc2lnbihpZCA9fiBwc3UsIHN0cmF0YSA9fiBTdHJhdGEsIHdlaWdodHMgPX4gd2VpZ2h0XzIsIG5lc3QgPSBUUlVFLCBkYXRhID0gTWV4aWNhbikgDQpkZXNfSGlzcGFuaWMgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBPdGhlcl9IaXNwYW5pYykgDQpkZXNfd2hpdGUgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBOb25fSGlzcGFuaWNfd2hpdGUpIA0KZGVzX0JsYWNrIDwtIHN2eWRlc2lnbihpZCA9fiBwc3UsIHN0cmF0YSA9fiBTdHJhdGEsIHdlaWdodHMgPX4gd2VpZ2h0XzIsIG5lc3QgPSBUUlVFLCBkYXRhID0gTm9uX0hpc3BhbmljX0JsYWNrKSANCmRlc19PdGhlciA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IE90aGVyX1JhY2UpIA0KDQpvcHRpb25zKHN1cnZleS5hZGp1c3QuZG9tYWluLmxvbmVseT1UUlVFKQ0Kb3B0aW9ucyhzdXJ2ZXkubG9uZWx5LnBzdT0iYWRqdXN0IikNCg0KI1BlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQNCm1vZGVsX3JhY2UgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKFJhY2UpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfcmFjZSkNCg0KbW9kZWxfTWUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE1leGljYW4sIGRlc2lnbiA9IGRlc19NZSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfTWUpDQpjb25maW50KG1vZGVsX01lKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfSGlzcGFuaWMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE90aGVyX0hpc3BhbmljLCBkZXNpZ24gPSBkZXNfSGlzcGFuaWMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0hpc3BhbmljKQ0KY29uZmludChtb2RlbF9IaXNwYW5pYylbIlBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX3doaXRlIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBOb25fSGlzcGFuaWNfd2hpdGUsIGRlc2lnbiA9IGRlc193aGl0ZSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfd2hpdGUpDQpjb25maW50KG1vZGVsX3doaXRlKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQmxhY2sgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE5vbl9IaXNwYW5pY19CbGFjaywgZGVzaWduID0gZGVzX0JsYWNrLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9CbGFjaykNCmNvbmZpbnQobW9kZWxfQmxhY2spWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQptb2RlbF9PdGhlciA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gT3RoZXJfUmFjZSwgZGVzaWduID0gZGVzX090aGVyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9PdGhlcikNCmNvbmZpbnQobW9kZWxfT3RoZXIpWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQoNCg0KI1BlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudA0KbW9kZWxfcmFjZSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQgKyBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKFJhY2UpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfcmFjZSkNCg0KbW9kZWxfTWUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTWV4aWNhbiwgZGVzaWduID0gZGVzX01lLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9NZSkNCmNvbmZpbnQobW9kZWxfTWUpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0hpc3BhbmljIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IE90aGVyX0hpc3BhbmljLCBkZXNpZ24gPSBkZXNfSGlzcGFuaWMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0hpc3BhbmljKQ0KY29uZmludChtb2RlbF9IaXNwYW5pYylbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfd2hpdGUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTm9uX0hpc3BhbmljX3doaXRlLCBkZXNpZ24gPSBkZXNfd2hpdGUsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX3doaXRlKQ0KY29uZmludChtb2RlbF93aGl0ZSlbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQmxhY2sgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTm9uX0hpc3BhbmljX0JsYWNrLCBkZXNpZ24gPSBkZXNfQmxhY2ssIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JsYWNrKQ0KY29uZmludChtb2RlbF9CbGFjaylbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfT3RoZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gT3RoZXJfUmFjZSwgZGVzaWduID0gZGVzX090aGVyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9PdGhlcikNCmNvbmZpbnQobW9kZWxfT3RoZXIpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCg0KI3BlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudA0KbW9kZWxfcmFjZSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQgKyBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKFJhY2UpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfcmFjZSkNCg0KbW9kZWxfTWUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTWV4aWNhbiwgZGVzaWduID0gZGVzX01lLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9NZSkNCmNvbmZpbnQobW9kZWxfTWUpWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0hpc3BhbmljIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IE90aGVyX0hpc3BhbmljLCBkZXNpZ24gPSBkZXNfSGlzcGFuaWMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0hpc3BhbmljKQ0KY29uZmludChtb2RlbF9IaXNwYW5pYylbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfd2hpdGUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTm9uX0hpc3BhbmljX3doaXRlLCBkZXNpZ24gPSBkZXNfd2hpdGUsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX3doaXRlKQ0KY29uZmludChtb2RlbF93aGl0ZSlbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQmxhY2sgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTm9uX0hpc3BhbmljX0JsYWNrLCBkZXNpZ24gPSBkZXNfQmxhY2ssIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JsYWNrKQ0KY29uZmludChtb2RlbF9CbGFjaylbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfT3RoZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gT3RoZXJfUmFjZSwgZGVzaWduID0gZGVzX090aGVyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9PdGhlcikNCmNvbmZpbnQobW9kZWxfT3RoZXIpWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCg0KI3BlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQNCm1vZGVsX3JhY2UgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKFJhY2UpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfcmFjZSkNCg0KbW9kZWxfTWUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE1leGljYW4sIGRlc2lnbiA9IGRlc19NZSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfTWUpDQpjb25maW50KG1vZGVsX01lKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfSGlzcGFuaWMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE90aGVyX0hpc3BhbmljLCBkZXNpZ24gPSBkZXNfSGlzcGFuaWMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0hpc3BhbmljKQ0KY29uZmludChtb2RlbF9IaXNwYW5pYylbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX3doaXRlIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBOb25fSGlzcGFuaWNfd2hpdGUsIGRlc2lnbiA9IGRlc193aGl0ZSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfd2hpdGUpDQpjb25maW50KG1vZGVsX3doaXRlKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQmxhY2sgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE5vbl9IaXNwYW5pY19CbGFjaywgZGVzaWduID0gZGVzX0JsYWNrLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9CbGFjaykNCmNvbmZpbnQobW9kZWxfQmxhY2spWyJwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQptb2RlbF9PdGhlciA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gT3RoZXJfUmFjZSwgZGVzaWduID0gZGVzX090aGVyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9PdGhlcikNCmNvbmZpbnQobW9kZWxfT3RoZXIpWyJwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQoNCmBgYA0KIyNmb3Igc3ViZ3JvdXAgYW5hbHlzaXMgYnkgQk1JDQpgYGB7ciBlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1UUlVFfQ0KRnVsbGRhdF9QaGVubyRCTUlbaXMubmEoRnVsbGRhdF9QaGVubyRCTUkpXSA8LSAwDQpCTUlfMSA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kQk1JIDwgMjUsIF0NCkJNSV8yIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRCTUkgPj0gMjUgJiBGdWxsZGF0X1BoZW5vJEJNSSA8IDMwLCBdDQpCTUlfMyA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kQk1JID49IDMwLCBdDQoNCkZ1bGxkYXRfUGhlbm8gPC0gRnVsbGRhdF9QaGVubyAlPiUgbXV0YXRlKEJNSV9jYXQgPSBjYXNlX3doZW4oDQogIEJNSSA+PSAzMCB+ICJvYmVzaXR5IiwNCiAgQk1JIDw9IDI1IH4gIm5vcm1hbCIsDQogIFRSVUUgfiAib3ZlcndlaWdodCINCikgKQ0KDQpkZXNCTUlfMSA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IEJNSV8xKSAjc2VsZWN0IEJNSSA8IDI1DQpkZXNCTUlfMiA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IEJNSV8yKSAjc2VsZWN0IDI1ID08IEJNSSA8MzANCmRlc0JNSV8zIDwtIHN2eWRlc2lnbihpZCA9fiBwc3UsIHN0cmF0YSA9fiBTdHJhdGEsIHdlaWdodHMgPX4gd2VpZ2h0XzIsIG5lc3QgPSBUUlVFLCBkYXRhID0gQk1JXzMpICNzZWxlY3QgPj0gMzANCg0KI1BlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQNCm1vZGVsX0JNSSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCpCTUlfY2F0LCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfQk1JKQ0KbW9kZWxfQk1JXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IEJNSV8xLCBkZXNpZ24gPSBkZXNCTUlfMSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfQk1JXzEpDQpjb25maW50KG1vZGVsX0JNSV8xKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQk1JXzIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IEJNSV8yLCBkZXNpZ24gPSBkZXNCTUlfMiwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfQk1JXzIpDQpjb25maW50KG1vZGVsX0JNSV8yKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQk1JXzMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IEJNSV8zLCBkZXNpZ24gPSBkZXNCTUlfMywgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfQk1JXzMpDQpjb25maW50KG1vZGVsX0JNSV8zKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KDQojUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50DQptb2RlbF9CTUkgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50ICsgUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50KkJNSV9jYXQsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9CTUkpDQptb2RlbF9CTUlfMSA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBCTUlfMSwgZGVzaWduID0gZGVzQk1JXzEsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JNSV8xKQ0KY29uZmludChtb2RlbF9CTUlfMSlbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQk1JXzIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gQk1JXzIsIGRlc2lnbiA9IGRlc0JNSV8yLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9CTUlfMikNCmNvbmZpbnQobW9kZWxfQk1JXzIpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0JNSV8zIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IEJNSV8zLCBkZXNpZ24gPSBkZXNCTUlfMywgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfQk1JXzMpDQpjb25maW50KG1vZGVsX0JNSV8zKVsiUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50IiwgXSANCg0KI3BlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudA0KbW9kZWxfQk1JIDwtIGdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCArIHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCpCTUlfY2F0LCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfQk1JKQ0KbW9kZWxfQk1JXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gQk1JXzEsIGRlc2lnbiA9IGRlc0JNSV8xLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9CTUlfMSkNCmNvbmZpbnQobW9kZWxfQk1JXzEpWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0JNSV8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IEJNSV8yLCBkZXNpZ24gPSBkZXNCTUlfMiwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfQk1JXzIpDQpjb25maW50KG1vZGVsX0JNSV8yKVsicGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50IiwgXSAgDQptb2RlbF9CTUlfMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBCTUlfMywgZGVzaWduID0gZGVzQk1JXzMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JNSV8zKQ0KY29uZmludChtb2RlbF9CTUlfMylbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0gDQoNCiNwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQptb2RlbF9CTUkgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQqQk1JX2NhdCwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX0JNSSkNCm1vZGVsX0JNSV8xIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBCTUlfMSwgZGVzaWduID0gZGVzQk1JXzEsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JNSV8xKQ0KY29uZmludChtb2RlbF9CTUlfMSlbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0JNSV8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBCTUlfMiwgZGVzaWduID0gZGVzQk1JXzIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JNSV8yKQ0KY29uZmludChtb2RlbF9CTUlfMilbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0JNSV8zIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBCTUlfMywgZGVzaWduID0gZGVzQk1JXzMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JNSV8zKQ0KY29uZmludChtb2RlbF9CTUlfMylbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdIA0KDQpgYGANCiNmb3Igc3ViZ3JvdXAgYW5hbHlzaXMgYnkgaW5jb21lDQpgYGB7ciBlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1UUlVFfQ0KRnVsbGRhdF9QaGVubyRSYXRpb19pbmNvbWVfcG92ZXJ0eVtpcy5uYShGdWxsZGF0X1BoZW5vJFJhdGlvX2luY29tZV9wb3ZlcnR5KV0gPC0gMA0KaW5jb21lXzEgPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJFJhdGlvX2luY29tZV9wb3ZlcnR5IDw9IDEsIF0NCmluY29tZV8yIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRSYXRpb19pbmNvbWVfcG92ZXJ0eSA+IDEgJiBGdWxsZGF0X1BoZW5vJFJhdGlvX2luY29tZV9wb3ZlcnR5IDwgNCwgXQ0KaW5jb21lXzMgPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJFJhdGlvX2luY29tZV9wb3ZlcnR5ID49IDQsIF0NCg0KDQpGdWxsZGF0X1BoZW5vIDwtIEZ1bGxkYXRfUGhlbm8gJT4lIG11dGF0ZShpbmNvbWVfY2F0ID0gY2FzZV93aGVuKA0KICBSYXRpb19pbmNvbWVfcG92ZXJ0eSA+PSA0IH4gInJpY2giLA0KICBSYXRpb19pbmNvbWVfcG92ZXJ0eSA8PSAxIH4gInBvb3IiLA0KICBUUlVFIH4gImF2ZXJhZ2UiDQopICkNCg0KZGVzaW5jb21lXzEgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBpbmNvbWVfMSkgI3NlbGVjdCBpbmNvbWUgPD0gMQ0KZGVzaW5jb21lXzIgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBpbmNvbWVfMikgI3NlbGVjdCAxIDwgaW5jb21lIDwgNA0KZGVzaW5jb21lXzMgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBpbmNvbWVfMykgI3NlbGVjdCA+PSA0DQoNCiNQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQptb2RlbF9pbmNvbWUgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKGluY29tZV9jYXQpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfaW5jb21lKQ0KbW9kZWxfaW5jb21lXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IGluY29tZV8xLCBkZXNpZ24gPSBkZXNpbmNvbWVfMSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfaW5jb21lXzEpDQpjb25maW50KG1vZGVsX2luY29tZV8xKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2luY29tZV8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBpbmNvbWVfMiwgZGVzaWduID0gZGVzaW5jb21lXzIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2luY29tZV8yKQ0KY29uZmludChtb2RlbF9pbmNvbWVfMilbIlBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9pbmNvbWVfMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gaW5jb21lXzMsIGRlc2lnbiA9IGRlc2luY29tZV8zLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9pbmNvbWVfMykNCmNvbmZpbnQobW9kZWxfaW5jb21lXzMpWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KDQojUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50DQptb2RlbF9pbmNvbWUgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50ICsgUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50KmFzLmZhY3RvcihpbmNvbWVfY2F0KSwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX2luY29tZSkNCm1vZGVsX2luY29tZV8xIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IGluY29tZV8xLCBkZXNpZ24gPSBkZXNpbmNvbWVfMSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfaW5jb21lXzEpDQpjb25maW50KG1vZGVsX2luY29tZV8xKVsiUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfaW5jb21lXzIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gaW5jb21lXzIsIGRlc2lnbiA9IGRlc2luY29tZV8yLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9pbmNvbWVfMikNCmNvbmZpbnQobW9kZWxfaW5jb21lXzIpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9pbmNvbWVfMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBpbmNvbWVfMywgZGVzaWduID0gZGVzaW5jb21lXzMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2luY29tZV8zKQ0KY29uZmludChtb2RlbF9pbmNvbWVfMylbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0NCg0KI3BlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudA0KbW9kZWxfaW5jb21lIDwtIGdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCArIHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCphcy5mYWN0b3IoaW5jb21lX2NhdCksIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9pbmNvbWUpDQptb2RlbF9pbmNvbWVfMSA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBpbmNvbWVfMSwgZGVzaWduID0gZGVzaW5jb21lXzEsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2luY29tZV8xKQ0KY29uZmludChtb2RlbF9pbmNvbWVfMSlbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2luY29tZV8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IGluY29tZV8yLCBkZXNpZ24gPSBkZXNpbmNvbWVfMiwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfaW5jb21lXzIpDQpjb25maW50KG1vZGVsX2luY29tZV8yKVsicGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfaW5jb21lXzMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gaW5jb21lXzMsIGRlc2lnbiA9IGRlc2luY29tZV8zLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9pbmNvbWVfMykNCmNvbmZpbnQobW9kZWxfaW5jb21lXzMpWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdDQoNCiNwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQptb2RlbF9pbmNvbWUgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKGluY29tZV9jYXQpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfaW5jb21lKQ0KbW9kZWxfaW5jb21lXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IGluY29tZV8xLCBkZXNpZ24gPSBkZXNpbmNvbWVfMSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfaW5jb21lXzEpDQpjb25maW50KG1vZGVsX2luY29tZV8xKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2luY29tZV8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBpbmNvbWVfMiwgZGVzaWduID0gZGVzaW5jb21lXzIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2luY29tZV8yKQ0KY29uZmludChtb2RlbF9pbmNvbWVfMilbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9pbmNvbWVfMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gaW5jb21lXzMsIGRlc2lnbiA9IGRlc2luY29tZV8zLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9pbmNvbWVfMykNCmNvbmZpbnQobW9kZWxfaW5jb21lXzMpWyJwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KDQpgYGANCiNmb3Igc3ViZ3JvdXAgYW5hbHlzaXMgYnkgY2FuY2VyDQpgYGB7ciBlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1UUlVFfQ0KY2FuY2VyIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRoYWRfY2FuY2VyID09IDEsIF0NCmNhbmNlciRoYWRfY2FuY2VyW2lzLm5hKGNhbmNlciRoYWRfY2FuY2VyKV0gPC0gMA0KY2FuY2VyIDwtIGNhbmNlcltjYW5jZXIkaGFkX2NhbmNlciAhPSAwLCAsIGRyb3AgPSBGQUxTRV0NCg0Kbm9uX2NhbmNlciA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kaGFkX2NhbmNlciA9PSAyLCBdDQpub25fY2FuY2VyJGhhZF9jYW5jZXJbaXMubmEobm9uX2NhbmNlciRoYWRfY2FuY2VyKV0gPC0gMA0Kbm9uX2NhbmNlciA8LSBub25fY2FuY2VyW25vbl9jYW5jZXIkaGFkX2NhbmNlciAhPSAwLCAsIGRyb3AgPSBGQUxTRV0NCg0KZGVzX2NhbmNlciA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IGNhbmNlcikgDQpkZXNfbm9uX2NhbmNlciA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IG5vbl9jYW5jZXIpIA0KDQojUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudA0KbW9kZWxfY2FuY2VyIDwtIGdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQgKyBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50KmhhZF9jYW5jZXIsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9jYW5jZXIpDQptb2RlbF9jYW5jZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IGNhbmNlciwgZGVzaWduID0gZGVzX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfY2FuY2VyKQ0KY29uZmludChtb2RlbF9jYW5jZXIpWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfbm9uX2NhbmNlciA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX25vbl9jYW5jZXIpDQpjb25maW50KG1vZGVsX25vbl9jYW5jZXIpWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KDQojUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50DQptb2RlbF9jYW5jZXIgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50ICsgUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50KmhhZF9jYW5jZXIsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9jYW5jZXIpDQptb2RlbF9jYW5jZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gY2FuY2VyLCBkZXNpZ24gPSBkZXNfY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9jYW5jZXIpDQpjb25maW50KG1vZGVsX2NhbmNlcilbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX25vbl9jYW5jZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX25vbl9jYW5jZXIpDQpjb25maW50KG1vZGVsX25vbl9jYW5jZXIpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdDQoNCiNwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQNCm1vZGVsX2NhbmNlciA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQgKyBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQqaGFkX2NhbmNlciwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX2NhbmNlcikNCm1vZGVsX2NhbmNlciA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBjYW5jZXIsIGRlc2lnbiA9IGRlc19jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2NhbmNlcikNCmNvbmZpbnQobW9kZWxfY2FuY2VyKVsicGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfbm9uX2NhbmNlciA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfbm9uX2NhbmNlcikNCmNvbmZpbnQobW9kZWxfbm9uX2NhbmNlcilbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0NCg0KI3BlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQNCm1vZGVsX2NhbmNlciA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCpoYWRfY2FuY2VyLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfY2FuY2VyKQ0KbW9kZWxfY2FuY2VyIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBjYW5jZXIsIGRlc2lnbiA9IGRlc19jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2NhbmNlcikNCmNvbmZpbnQobW9kZWxfY2FuY2VyKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX25vbl9jYW5jZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9ub25fY2FuY2VyKQ0KY29uZmludChtb2RlbF9ub25fY2FuY2VyKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCmBgYA0KDQojZm9yIHN1Ymdyb3VwIGFuYWx5c2lzIGJ5IHNtb2tpbmcNCmBgYHtyIGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPVRSVUV9DQpGdWxsZGF0X1BoZW5vJHF1aXRfc21va2luZ1tpcy5uYShGdWxsZGF0X1BoZW5vJHF1aXRfc21va2luZyldIDwtIDANCkZ1bGxkYXRfUGhlbm8kbm93X3Ntb2tlW2lzLm5hKEZ1bGxkYXRfUGhlbm8kbm93X3Ntb2tlKV0gPC0gMA0KY3VycmVudF9zbW9rZXJzIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRTbW9rZWRfZGF5cyA9PSAxICYgRnVsbGRhdF9QaGVubyRub3dfc21va2UgPT0gMSwgXQ0KZm9ybWVyX3Ntb2tlcnMgPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJFNtb2tlZF9kYXlzID09IDEgJiBGdWxsZGF0X1BoZW5vJHF1aXRfc21va2luZyA+IDEsIF0NCmZvcm1lcl9zbW9rZXJzJHBzdVtpcy5uYShmb3JtZXJfc21va2VycyRwc3UpXSA8LSAwDQpmb3JtZXJfc21va2VycyA8LSBmb3JtZXJfc21va2Vyc1tmb3JtZXJfc21va2VycyRwc3UgIT0gMCwgLCBkcm9wID0gRkFMU0VdDQoNCm5vbl9zbW9rZXJzIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRTbW9rZWRfZGF5cyA9PSAyLCBdDQpub25fc21va2VycyRTbW9rZWRfZGF5c1tpcy5uYShub25fc21va2VycyRTbW9rZWRfZGF5cyldIDwtIDANCm5vbl9zbW9rZXJzIDwtIG5vbl9zbW9rZXJzW25vbl9zbW9rZXJzJFNtb2tlZF9kYXlzICE9IDAsICwgZHJvcCA9IEZBTFNFXQ0KDQojc2VsZWN0IGhvc2Ugd2hvIHdlcmUgY29uc2lkZXJlZCBjdXJyZW50IHNtb2tlcnMgc21va2VkIG9uIGEgcmVndWxhciBiYXNpcyBhbmQgaGFkIHNtb2tlZCBhdCBsZWFzdCAxMDAgY2lnYXJldHRlcyBpbiB0aGVpciBsaWZldGltZS4NCmRlc2N1cnJlbnRfc21va2VycyA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IGN1cnJlbnRfc21va2VycykNCiNzZWxlY3QgRm9ybWVyIHNtb2tlcnMgaGFkIHNtb2tlZCBhdCBsZWFzdCAxMDAgY2lnYXJldHRlcyBhbmQgaGFkIHNpbmNlIHF1aXQuDQpkZXNmb3JtZXJfc21va2VycyA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IGZvcm1lcl9zbW9rZXJzKSANCiNzZWxlY3QgTm9uLXNtb2tlcnMgaGFkIGVpdGhlciBuZXZlciBzbW9rZWQgb3Igc21va2VkIGZld2VyIHRoYW4gMTAwIGNpZ2FyZXR0ZXMNCmRlc25vbl9zbW9rZXJzIDwtIHN2eWRlc2lnbihpZCA9fiBwc3UsIHN0cmF0YSA9fiBTdHJhdGEsIHdlaWdodHMgPX4gd2VpZ2h0XzIsIG5lc3QgPSBUUlVFLCBkYXRhID0gbm9uX3Ntb2tlcnMpIA0KDQoNCiNQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQptb2RlbF9zbW9rZSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCpub3dfc21va2UsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9zbW9rZSkNCm1vZGVsX2N1cnJlbnRfc21va2VycyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gY3VycmVudF9zbW9rZXJzLCBkZXNpZ24gPSBkZXNjdXJyZW50X3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2N1cnJlbnRfc21va2VycykNCmNvbmZpbnQobW9kZWxfY3VycmVudF9zbW9rZXJzKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2Zvcm1lcl9zbW9rZXJzIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBmb3JtZXJfc21va2VycywgZGVzaWduID0gZGVzZm9ybWVyX3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2Zvcm1lcl9zbW9rZXJzKQ0KY29uZmludChtb2RlbF9mb3JtZXJfc21va2VycylbIlBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9ub25fc21va2VycyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX3Ntb2tlcnMsIGRlc2lnbiA9IGRlc25vbl9zbW9rZXJzLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9ub25fc21va2VycykNCmNvbmZpbnQobW9kZWxfbm9uX3Ntb2tlcnMpWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KDQojUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50DQptb2RlbF9zbW9rZSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQgKyBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQqbm93X3Ntb2tlLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfc21va2UpDQptb2RlbF9jdXJyZW50X3Ntb2tlcnMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gY3VycmVudF9zbW9rZXJzLCBkZXNpZ24gPSBkZXNjdXJyZW50X3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2N1cnJlbnRfc21va2VycykNCmNvbmZpbnQobW9kZWxfY3VycmVudF9zbW9rZXJzKVsiUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfZm9ybWVyX3Ntb2tlcnMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gZm9ybWVyX3Ntb2tlcnMsIGRlc2lnbiA9IGRlc2Zvcm1lcl9zbW9rZXJzLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9mb3JtZXJfc21va2VycykNCmNvbmZpbnQobW9kZWxfZm9ybWVyX3Ntb2tlcnMpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9ub25fc21va2VycyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBub25fc21va2VycywgZGVzaWduID0gZGVzbm9uX3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX25vbl9zbW9rZXJzKQ0KY29uZmludChtb2RlbF9ub25fc21va2VycylbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0NCg0KI3BlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudA0KbW9kZWxfc21va2UgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50ICsgcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50Km5vd19zbW9rZSwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX3Ntb2tlKQ0KbW9kZWxfY3VycmVudF9zbW9rZXJzIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IGN1cnJlbnRfc21va2VycywgZGVzaWduID0gZGVzY3VycmVudF9zbW9rZXJzLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9jdXJyZW50X3Ntb2tlcnMpDQpjb25maW50KG1vZGVsX2N1cnJlbnRfc21va2VycylbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2Zvcm1lcl9zbW9rZXJzIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IGZvcm1lcl9zbW9rZXJzLCBkZXNpZ24gPSBkZXNmb3JtZXJfc21va2VycywgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfZm9ybWVyX3Ntb2tlcnMpDQpjb25maW50KG1vZGVsX2Zvcm1lcl9zbW9rZXJzKVsicGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfbm9uX3Ntb2tlcnMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX3Ntb2tlcnMsIGRlc2lnbiA9IGRlc25vbl9zbW9rZXJzLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9ub25fc21va2VycykNCmNvbmZpbnQobW9kZWxfbm9uX3Ntb2tlcnMpWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdDQoNCiNwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQptb2RlbF9zbW9rZSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCpub3dfc21va2UsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9zbW9rZSkNCm1vZGVsX2N1cnJlbnRfc21va2VycyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gY3VycmVudF9zbW9rZXJzLCBkZXNpZ24gPSBkZXNjdXJyZW50X3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2N1cnJlbnRfc21va2VycykNCmNvbmZpbnQobW9kZWxfY3VycmVudF9zbW9rZXJzKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2Zvcm1lcl9zbW9rZXJzIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBmb3JtZXJfc21va2VycywgZGVzaWduID0gZGVzZm9ybWVyX3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2Zvcm1lcl9zbW9rZXJzKQ0KY29uZmludChtb2RlbF9mb3JtZXJfc21va2VycylbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9ub25fc21va2VycyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX3Ntb2tlcnMsIGRlc2lnbiA9IGRlc25vbl9zbW9rZXJzLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9ub25fc21va2VycykNCmNvbmZpbnQobW9kZWxfbm9uX3Ntb2tlcnMpWyJwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KDQpgYGANCg0KDQoNCg0KDQoNCiNzZW5zaXRpdml0eSBhbmFseXNpcyB3aXRob3V0IGNhbmNlciBwYXRpZW50IG9ubHkgZm9yIHBmYXMNCmBgYHtyfQ0KI3N1YnNldCBjYW5jZXINCmNhbmNlciA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kaGFkX2NhbmNlciA9PSAxLCBdDQpjYW5jZXIkaGFkX2NhbmNlcltpcy5uYShjYW5jZXIkaGFkX2NhbmNlcildIDwtIDANCmNhbmNlciA8LSBjYW5jZXJbY2FuY2VyJGhhZF9jYW5jZXIgIT0gMCwgLCBkcm9wID0gRkFMU0VdDQoNCm5vbl9jYW5jZXIgPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJGhhZF9jYW5jZXIgPT0gMiwgXQ0Kbm9uX2NhbmNlciRoYWRfY2FuY2VyW2lzLm5hKG5vbl9jYW5jZXIkaGFkX2NhbmNlcildIDwtIDANCm5vbl9jYW5jZXIgPC0gbm9uX2NhbmNlcltub25fY2FuY2VyJGhhZF9jYW5jZXIgIT0gMCwgLCBkcm9wID0gRkFMU0VdDQoNCmRlc19jYW5jZXIgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBjYW5jZXIpIA0KZGVzX25vbl9jYW5jZXIgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBub25fY2FuY2VyKSANCmBgYA0KDQojc2Vuc2l0aXZpdHkgUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWQNCmBgYHtyIGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPVRSVUV9DQojYmluYXJ5IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkDQojbW9kZWxfMSAtLSBub24tYWRqdXN0ZWQNCm1vZGVsXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMSkNCmNvbmZpbnQobW9kZWxfMSkNCg0KI21vZGVsXzIgLS0gYWRqdXN0ZWQgZm9yIGNocm9ub2xvZ2ljYWxfYWdlLCBHZW5kZXIsIFJhY2UsIENEQUksIE1hcml0YWxfU3RhdHVzIGFuZCBmYW1pbHkgUmF0aW9faW5jb21lX3BvdmVydHkuDQptb2RlbF8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQgKyBHZW5kZXIgKyBSYWNlICsgTWFyaXRhbF9TdGF0dXMgKyBSYXRpb19pbmNvbWVfcG92ZXJ0eQ0KICAgICAgICAgICAgICAgICAgLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpIA0Kc3VtbWFyeShtb2RlbF8yKQ0KY29uZmludChtb2RlbF8yKQ0KDQojbW9kZWxfMyAtLSBhZGp1c3RlZCBmb3IgQk1JICsgc2xlZXBfZGlzb3JkZXJzICsgU21va2VkX2RheXMgKyBBdmdfYWxjb2hvbF9kcmlua3MgKyBoYWRfY2FuY2VyLg0KbW9kZWxfMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgR2VuZGVyICsgUmFjZSArIE1hcml0YWxfU3RhdHVzICsgUmF0aW9faW5jb21lX3BvdmVydHkgDQogICAgICAgICAgICAgICAgICArIEJNSSArIHNsZWVwX2Rpc29yZGVycyArIFNtb2tlZF9kYXlzICsgbm93X3Ntb2tlICsgcXVpdF9zbW9raW5nICsgQXZnX2FsY29ob2xfZHJpbmtzICsgaGFkX2NhbmNlcg0KICAgICAgICAgICAgICAgICAgLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpIA0Kc3VtbWFyeShtb2RlbF8zKQ0KY29uZmludChtb2RlbF8zKQ0KDQoNCiNjb250aW51b3VzIFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkDQptb2RlbF9YMSA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBsbihQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZCksIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfWDEpDQpjb25maW50KG1vZGVsX1gxKQ0KDQptb2RlbF9YMiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBsbihQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZCkgKyBHZW5kZXIgKyBSYWNlICsgIE1hcml0YWxfU3RhdHVzICsgUmF0aW9faW5jb21lX3BvdmVydHkNCiAgICAgICAgICAgICAgICAgICAsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfWDIpDQpjb25maW50KG1vZGVsX1gyKQ0KDQptb2RlbF9YMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBsbihQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZCkrIEdlbmRlciArIFJhY2UgKyBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5IA0KICAgICAgICAgICAgICAgICAgKyBCTUkgKyBzbGVlcF9kaXNvcmRlcnMgKyBTbW9rZWRfZGF5cyArIG5vd19zbW9rZSArIHF1aXRfc21va2luZyArIEF2Z19hbGNvaG9sX2RyaW5rcyArIGhhZF9jYW5jZXIsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfWDMpDQpjb25maW50KG1vZGVsX1gzKQ0KYGBgDQoNCiNzZW5zaXRpdml0eSAiUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZCIgICJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiICANCmBgYHtyIGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPVRSVUV9DQojYmluYXJ5DQojbW9kZWxfMSAtLSBub24tYWRqdXN0ZWQNCm1vZGVsXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpIA0Kc3VtbWFyeShtb2RlbF8xKQ0KY29uZmludChtb2RlbF8xKQ0KDQojbW9kZWxfMiAtLSBhZGp1c3RlZCBmb3IgY2hyb25vbG9naWNhbF9hZ2UsIEdlbmRlciwgUmFjZSwgQ0RBSSwgTWFyaXRhbF9TdGF0dXMgYW5kIGZhbWlseSBSYXRpb19pbmNvbWVfcG92ZXJ0eS4NCm1vZGVsXzIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50ICsgR2VuZGVyICsgUmFjZSArIE1hcml0YWxfU3RhdHVzICsgUmF0aW9faW5jb21lX3BvdmVydHkNCiAgICAgICAgICAgICAgICAgICwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMikNCmNvbmZpbnQobW9kZWxfMikNCg0KI21vZGVsXzMgLS0gYWRqdXN0ZWQgZm9yIEJNSSArIHNsZWVwX2Rpc29yZGVycyArIFNtb2tlZF9kYXlzICsgQXZnX2FsY29ob2xfZHJpbmtzICsgaGFkX2NhbmNlci4NCm1vZGVsXzMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50ICsgR2VuZGVyICsgUmFjZSArIE1hcml0YWxfU3RhdHVzICsgUmF0aW9faW5jb21lX3BvdmVydHkgDQogICAgICAgICAgICAgICAgICArIEJNSSArIHNsZWVwX2Rpc29yZGVycyArIFNtb2tlZF9kYXlzICsgbm93X3Ntb2tlICsgcXVpdF9zbW9raW5nICsgQXZnX2FsY29ob2xfZHJpbmtzICsgaGFkX2NhbmNlcg0KICAgICAgICAgICAgICAgICAgLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpIA0Kc3VtbWFyeShtb2RlbF8zKQ0KY29uZmludChtb2RlbF8zKQ0KDQoNCiNjb250aW51b3VzDQptb2RlbF9YMSA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBsbihQZXJmbHVvcm9ub25hbm9pY19hY2lkKSwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9YMSkNCmNvbmZpbnQobW9kZWxfWDEpDQoNCm1vZGVsX1gyIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IGxuKFBlcmZsdW9yb25vbmFub2ljX2FjaWQpICsgR2VuZGVyICsgUmFjZSArICBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5DQogICAgICAgICAgICAgICAgICAgLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX1gyKQ0KY29uZmludChtb2RlbF9YMikNCg0KbW9kZWxfWDMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gbG4oUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZCkrIEdlbmRlciArIFJhY2UgKyBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5IA0KICAgICAgICAgICAgICAgICAgKyBCTUkgKyBzbGVlcF9kaXNvcmRlcnMgKyBTbW9rZWRfZGF5cyArIG5vd19zbW9rZSArIHF1aXRfc21va2luZyArIEF2Z19hbGNvaG9sX2RyaW5rcyArIGhhZF9jYW5jZXIsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfWDMpDQpjb25maW50KG1vZGVsX1gzKQ0KYGBgDQoNCg0KI3NlbnNpdGl2aXR5ICJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkIiAgInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIgICAgDQpgYGB7ciBlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1UUlVFfQ0KI2JpbmFyeQ0KI21vZGVsXzEgLS0gbm9uLWFkanVzdGVkDQptb2RlbF8xIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMSkNCmNvbmZpbnQobW9kZWxfMSkNCg0KI21vZGVsXzIgLS0gYWRqdXN0ZWQgZm9yIGNocm9ub2xvZ2ljYWxfYWdlLCBHZW5kZXIsIFJhY2UsIENEQUksIE1hcml0YWxfU3RhdHVzIGFuZCBmYW1pbHkgUmF0aW9faW5jb21lX3BvdmVydHkuDQptb2RlbF8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCArIEdlbmRlciArIFJhY2UgKyBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5DQogICAgICAgICAgICAgICAgICAsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikgDQpzdW1tYXJ5KG1vZGVsXzIpDQpjb25maW50KG1vZGVsXzIpDQoNCiNtb2RlbF8zIC0tIGFkanVzdGVkIGZvciBCTUkgKyBzbGVlcF9kaXNvcmRlcnMgKyBTbW9rZWRfZGF5cyArIEF2Z19hbGNvaG9sX2RyaW5rcyArIGhhZF9jYW5jZXIuDQptb2RlbF8zIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCArIEdlbmRlciArIFJhY2UgKyBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5IA0KICAgICAgICAgICAgICAgICAgKyBCTUkgKyBzbGVlcF9kaXNvcmRlcnMgKyBTbW9rZWRfZGF5cyArIG5vd19zbW9rZSArIHF1aXRfc21va2luZyArIEF2Z19hbGNvaG9sX2RyaW5rcyArIGhhZF9jYW5jZXINCiAgICAgICAgICAgICAgICAgICwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMykNCmNvbmZpbnQobW9kZWxfMykNCg0KDQojY29udGludW91cw0KbW9kZWxfWDEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gbG4ocGVyZmx1b3Jvb2N0YW5vaWNfYWNpZCksIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfWDEpDQpjb25maW50KG1vZGVsX1gxKQ0KDQptb2RlbF9YMiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBsbihwZXJmbHVvcm9vY3Rhbm9pY19hY2lkKSArIEdlbmRlciArIFJhY2UgKyAgTWFyaXRhbF9TdGF0dXMgKyBSYXRpb19pbmNvbWVfcG92ZXJ0eQ0KICAgICAgICAgICAgICAgICAgICwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9YMikNCmNvbmZpbnQobW9kZWxfWDIpDQoNCm1vZGVsX1gzIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IGxuKHBlcmZsdW9yb29jdGFub2ljX2FjaWQpKyBHZW5kZXIgKyBSYWNlICsgTWFyaXRhbF9TdGF0dXMgKyBSYXRpb19pbmNvbWVfcG92ZXJ0eSANCiAgICAgICAgICAgICAgICAgICsgQk1JICsgc2xlZXBfZGlzb3JkZXJzICsgU21va2VkX2RheXMgKyBub3dfc21va2UgKyBxdWl0X3Ntb2tpbmcgKyBBdmdfYWxjb2hvbF9kcmlua3MgKyBoYWRfY2FuY2VyLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX1gzKQ0KY29uZmludChtb2RlbF9YMykNCmBgYA0KDQojc2Vuc2l0aXZpdHkgInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkIiAgICAgInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiDQpgYGB7ciBlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1UUlVFfQ0KI2JpbmFyeQ0KI21vZGVsXzEgLS0gbm9uLWFkanVzdGVkDQptb2RlbF8xIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikgDQpzdW1tYXJ5KG1vZGVsXzEpDQpjb25maW50KG1vZGVsXzEpDQoNCiNtb2RlbF8yIC0tIGFkanVzdGVkIGZvciBjaHJvbm9sb2dpY2FsX2FnZSwgR2VuZGVyLCBSYWNlLCBDREFJLCBNYXJpdGFsX1N0YXR1cyBhbmQgZmFtaWx5IFJhdGlvX2luY29tZV9wb3ZlcnR5Lg0KbW9kZWxfMiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgR2VuZGVyICsgUmFjZSArIE1hcml0YWxfU3RhdHVzICsgUmF0aW9faW5jb21lX3BvdmVydHkNCiAgICAgICAgICAgICAgICAgICwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMikNCmNvbmZpbnQobW9kZWxfMikNCg0KI21vZGVsXzMgLS0gYWRqdXN0ZWQgZm9yIEJNSSArIHNsZWVwX2Rpc29yZGVycyArIFNtb2tlZF9kYXlzICsgQXZnX2FsY29ob2xfZHJpbmtzICsgaGFkX2NhbmNlci4NCm1vZGVsXzMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIEdlbmRlciArIFJhY2UgKyBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5IA0KICAgICAgICAgICAgICAgICAgKyBCTUkgKyBzbGVlcF9kaXNvcmRlcnMgKyBTbW9rZWRfZGF5cyArIG5vd19zbW9rZSArIHF1aXRfc21va2luZyArIEF2Z19hbGNvaG9sX2RyaW5rcyArIGhhZF9jYW5jZXINCiAgICAgICAgICAgICAgICAgICwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMykNCmNvbmZpbnQobW9kZWxfMykNCg0KDQojY29udGludW91cw0KbW9kZWxfWDEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gbG4ocGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWQpLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX1gxKQ0KY29uZmludChtb2RlbF9YMSkNCg0KbW9kZWxfWDIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gbG4ocGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWQpICsgR2VuZGVyICsgUmFjZSArICBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5DQogICAgICAgICAgICAgICAgICAgLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX1gyKQ0KY29uZmludChtb2RlbF9YMikNCg0KbW9kZWxfWDMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gbG4ocGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWQpKyBHZW5kZXIgKyBSYWNlICsgTWFyaXRhbF9TdGF0dXMgKyBSYXRpb19pbmNvbWVfcG92ZXJ0eSANCiAgICAgICAgICAgICAgICAgICsgQk1JICsgc2xlZXBfZGlzb3JkZXJzICsgU21va2VkX2RheXMgKyBub3dfc21va2UgKyBxdWl0X3Ntb2tpbmcgKyBBdmdfYWxjb2hvbF9kcmlua3MgKyBoYWRfY2FuY2VyLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX1gzKQ0KY29uZmludChtb2RlbF9YMykNCmBgYA0KDQoNCg0K