Data are organized in two big time points: 2012 and 2017. They are collected from the clinics, and with many explainatory variables.
More women are in the population
Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.

Drug popularity
Some drugs are more popular in 2017, some are in 2012. Interesting to see people take different drugs across 5 years, some gain popularity could due to the prices. Apparently there are a huge different between reported drug usage and acutual, probably due to embarrassing. And reported drug tend to be less leathal.
NAs introduced by coercion


BMI distributiion between M vs. F. between years.
Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.

Death Vs. days stay in hostpital
The long ger you stay, the more chance you will be dead (not causal!!!). Age, gender and year didn’t show significant, so it suggests there could be correlation between the length of staying and death, which makes sense, stay longer could due to more leathal injury.
[1] "Linear Model"
Call:
lm(formula = Death ~ ., data = days_admit_table)
Residuals:
Min 1Q Median 3Q Max
-0.3007684151 -0.2034820342 -0.1630665482 -0.0908523098 0.9451737841
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -16.28717787693 17.03732279629 -0.95597 0.3398110
Year 0.00816361366 0.00846111330 0.96484 0.3353562
GenderMale -0.04513807811 0.04602496076 -0.98073 0.3274689
Age 0.00205438844 0.00157650561 1.30313 0.1934709
Days_admitted -0.00289942642 0.00104439528 -2.77618 0.0058251 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.374348056 on 319 degrees of freedom
Multiple R-squared: 0.0349183969, Adjusted R-squared: 0.0228170602
F-statistic: 2.88549916 on 4 and 319 DF, p-value: 0.0226722786
[1] "Logit Model"
Call:
glm(formula = Death ~ ., family = binomial(link = "logit"), data = days_admit_table)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.975320831 -0.682316937 -0.566830256 -0.263549189 2.815453124
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -119.8911284794 124.1103588483 -0.96600 0.3340421
Year 0.0588082230 0.0616253714 0.95429 0.3399389
GenderMale -0.4328864896 0.3278110104 -1.32054 0.1866559
Age 0.0152640507 0.0111389497 1.37033 0.1705835
Days_admitted -0.0532811397 0.0185267176 -2.87591 0.0040287 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 298.3133873 on 323 degrees of freedom
Residual deviance: 280.6577174 on 319 degrees of freedom
AIC: 290.6577174
Number of Fisher Scoring iterations: 6
Length of stay Versus Consult reason
- Length of stay Vs (x) 1,2,3,4,5 Nominal

THe fallowing show there’s significant between reasons.
Analysis of Variance Table
Response: Days_admitted
Df Sum Sq Mean Sq F value Pr(>F)
consult_reason 4 4934.6731 1233.668276 3.17792 0.013973 *
Residuals 319 123835.5831 388.199320
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
The following “Difference in mean levels of consult_reason” is multiple comparison, so between 3 and 1 there’s huge difference, 3 and 2 there’s OK difference. The rest just to hard to tell. So basically the interval cover 0, is not significant different between two reasons. For sure there’s no differece between 2 and 1

Will taking different drug affect death? Some does leath!
NAs introduced by coercion
[1] "Logit Model"
Call:
glm(formula = Death ~ ., family = binomial(link = "logit"), data = drug_detected_tbl)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.208921015 -0.635450169 -0.565193813 -0.163354392 2.987922462
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.4973432764 0.2492951913 -6.00631 1.898e-09 ***
Amphetamines1 -17.3705093340 1339.0479485840 -0.01297 0.989650
Barbiturates1 -0.2250443412 1.1336034827 -0.19852 0.842637
Benzodiazepines.oxazepam..tenazepam..lorazepam..diazepam1 0.3007977735 0.3742515051 0.80373 0.421552
X9.Carboxy.THC1 -0.2560533053 0.3388455599 -0.75566 0.449851
Cocaine.Benzoylecgonine1 -0.7972412124 0.6751247640 -1.18088 0.237650
Methadone1 0.3941721523 0.6629573351 0.59457 0.552133
Opiates.Opioids1 0.3212416071 0.4753632609 0.67578 0.499180
Oxycodone1 -1.2575653461 0.7899301891 -1.59200 0.111386
methamphetamine1 18.1002730663 1339.0479910448 0.01352 0.989215
MDMA1 0.8628675035 4176.6508933671 0.00021 0.999835
codine1 3.0225964420 1.2563799990 2.40580 0.016137 *
Hydrocodone1 -0.7630088564 1.0159433768 -0.75103 0.452632
Hydromorphone1 -0.0625524485 0.6171946895 -0.10135 0.919273
morphine1 -2.0007804323 0.8605861411 -2.32490 0.020077 *
oxymorphone1 0.8020964264 0.9227174512 0.86928 0.384696
Heroin1 0.1268939147 1.0828987040 0.11718 0.906718
Fentanyl1 -2.4154149715 1.2199735055 -1.97989 0.047716 *
Norfentanyl1 2.9200309066 1.2051191807 2.42302 0.015392 *
Ketamine1 -16.3721588368 3956.1804049720 -0.00414 0.996698
trazodone1 -16.6438177961 3956.1804007808 -0.00421 0.996643
dextromethorphan1 1.2113782261 1.5553826796 0.77883 0.436080
norbuprenorphine.buprenorphine1 -1.6314827912 1.0831083585 -1.50630 0.131991
Gabapentin.neurontin1 -14.4039972947 3956.1806134133 -0.00364 0.997095
Other1 0.2976352880 0.8136896245 0.36578 0.714526
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 298.3133873 on 323 degrees of freedom
Residual deviance: 262.9125929 on 299 degrees of freedom
AIC: 312.9125929
Number of Fisher Scoring iterations: 16
Will drug and Alcohol affect death? probably not. However, the above results show some drugs more leathal, some are not, so there might be interaction amoung drugs, so we might need to investigate, because I didn’t apply every single drug, I only used the “drug_only” variable.
the condition has length > 1 and only the first element will be used
[1] "Logit Model for Drug and Alcohol"
Call:
glm(formula = Death ~ ., data = drug_alco)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.198979592 -0.198979592 -0.145454546 -0.123287671 0.876712329
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.1232876712 0.0442901453 2.78364 0.0056939 **
only_drug1 0.0756919206 0.0518865995 1.45880 0.1455993
only_alcohol1 0.0221668742 0.0675663946 0.32808 0.7430685
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 0.143198038983)
Null deviance: 46.32098765 on 323 degrees of freedom
Residual deviance: 45.96657051 on 321 degrees of freedom
AIC: 294.7555374
Number of Fisher Scoring iterations: 2
Infection
Drugs vs infection, what drugs?
BUT!! Change to the other infection Drug affect infection.
[1] "Infection vs Drugs"
Call:
lm(formula = Infection ~ ., data = drug_infection)
Residuals:
Min 1Q Median 3Q Max
-0.158163265 -0.158163265 -0.158163265 0.000000000 0.972602740
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.0273972603 0.0345932737 0.79198 0.4289559
only_drug1 0.1307660050 0.0405265625 3.22667 0.0013816 **
only_alcohol1 -0.0273972603 0.0527734277 -0.51915 0.6040147
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.29556506 on 321 degrees of freedom
Multiple R-squared: 0.053873296, Adjusted R-squared: 0.0479784256
F-statistic: 9.13901275 on 2 and 321 DF, p-value: 0.000137994799
Death vs Infection, Fracture (The model will have overlapping between the two populations. This means they will be somewhat collinear. You will make a ven-diagram type plot for these two. This will allow us to look at the percentage of each population, you can do this: total/death, infected/death, and fracture(the six values)/death)
[1] "Death vs. infection"
Call:
glm(formula = Death ~ ., family = binomial(link = "logit"), data = death_infect)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.627470661 -0.627470661 -0.627470661 -0.508353679 2.054367640
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.525219833 0.153019177 -9.96751 < 2e-16 ***
Infection1 -0.455781635 0.554881801 -0.82140 0.41142
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 298.3133873 on 323 degrees of freedom
Residual deviance: 297.5712030 on 322 degrees of freedom
AIC: 301.571203
Number of Fisher Scoring iterations: 4
Death vs Fracture not working
Variable names: “Spine.Fracture.and.Skull.fracture”, “Spine.fracture.and.skull.bleeding”, “Spine.fracture..skull.fracture..and.skull.bleed”.
The first and second are all 0s. Model doesn’t make sense.
[1] "Death vs. Fracture"
Call:
glm(formula = Death ~ ., family = binomial(link = "logit"), data = death_fracture,
na.action = na.omit)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.61815085 -0.61815085 -0.61815085 -0.61815085 1.87040095
Coefficients: (2 not defined because of singularities)
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.558144618 0.147025649 -10.59777 < 2e-16 ***
Spine.Fracture.and.Skull.fracture NA NA NA NA
Spine.fracture.and.skull.bleeding -14.007923631 1029.121475000 -0.01361 0.98914
Spine.fracture..skull.fracture..and.skull.bleed NA NA NA NA
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 298.3133873 on 323 degrees of freedom
Residual deviance: 297.5517704 on 322 degrees of freedom
AIC: 301.5517704
Number of Fisher Scoring iterations: 14
Fractures vs Death:
INFECTION (Brain and/or Spine) Check on these variables. If they have less than the power you need, just throw them out! Spine Fracture Only Skull Fracture Only Skull Bleeding Only Spine Fracture and Skull fracture Spine fracture and skull bleeding Skull Fracture and skull bleeding
Spine fracture, skull fracture, and skull bleed
What I want to know is: How many (%) people with infection die, how many people (%) with fractures or bleeds die, and how those things stack up against each other.
Here the NA shows that category is all 0.
[1] "Death vs. Fracture"
Call:
glm(formula = Death ~ ., family = binomial(link = "logit"), data = fracture_dat,
na.action = na.omit)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.7408601025 -0.6980287711 -0.6038568651 -0.0001315057 1.8930184728
Coefficients: (3 not defined because of singularities)
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.609437912 0.223606798 -7.19763 6.127e-13 ***
Brain.Bleed 0.321583624 0.457692865 0.70262 0.48229
Spine.Fracture.Only -16.956630597 1331.428048160 -0.01274 0.98984
Skull.Fracture.Only -16.956630597 1581.972246138 -0.01072 0.99145
Skull.Bleeding.Only 0.135174778 0.462933386 0.29200 0.77029
Spine.Fracture.and.Skull.fracture NA NA NA NA
Spine.fracture.and.skull.bleeding -17.278214222 4612.202004318 -0.00375 0.99701
Skull.Fracture.and.skull.bleeding NA NA NA NA
Spine.fracture..skull.fracture..and.skull.bleed NA NA NA NA
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 298.3133873 on 323 degrees of freedom
Residual deviance: 278.6113172 on 318 degrees of freedom
AIC: 290.6113172
Number of Fisher Scoring iterations: 17
If a patient can give history, then death is looming, but doesn’t mean he will be infected easily.
Death vs. Given History
Call:
glm(formula = Death ~ Given_Hist, family = binomial(link = "logit"),
data = death_hist)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.864926485 -0.864926485 -0.368300411 -0.368300411 2.334343378
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.656756907 0.298631194 -8.89645 < 2.22e-16 ***
Given_Hist2 1.866235562 0.349595682 5.33827 9.3839e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 298.3133873 on 323 degrees of freedom
Residual deviance: 263.6329075 on 322 degrees of freedom
AIC: 267.6329075
Number of Fisher Scoring iterations: 5
Infection vs. Given History Yes the longer you stay you tend to get infected
Call:
glm(formula = Infection ~ Given_Hist, family = binomial(link = "logit"),
data = death_hist)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.620010187 -0.620010187 -0.119310250 -0.119310250 3.146032380
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.551543934 0.194608624 -7.97264 1.5532e-15 ***
Given_Hist2 -3.390098467 1.022158080 -3.31661 0.00091117 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 213.2781577 on 323 degrees of freedom
Residual deviance: 181.5367342 on 322 degrees of freedom
AIC: 185.5367342
Number of Fisher Scoring iterations: 7
Days of admission vs. Infection
The longer you stay, the more chance you could get infected, here shows the correlation, whcih is very significant!!!
Call:
glm(formula = Infection ~ Days_admitted, family = binomial(link = "logit"),
data = days_admit_vs_infection_table)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.175532488 -0.428515275 -0.397595075 -0.381722277 2.312434633
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.62822661614 0.24066528508 -10.92067 < 2.22e-16 ***
Days_admitted 0.02604356272 0.00741333491 3.51307 0.00044296 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 213.2781577 on 323 degrees of freedom
Residual deviance: 199.7581270 on 322 degrees of freedom
AIC: 203.758127
Number of Fisher Scoring iterations: 5
Drugs vs Infection
Call:
glm(formula = death_infect.Infection ~ ., family = binomial(link = "logit"),
data = drug_detected_vs_Infection_tbl)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.3918138582 -0.5031080366 -0.2945449506 -0.0498081816 2.7682742814
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.003101160 0.313149229 -6.39663 1.5884e-10 ***
Amphetamines1 -1.473333763 2.293630546 -0.64236 0.52064024
Barbiturates1 -15.126621917 1897.791071010 -0.00797 0.99364041
Benzodiazepines.oxazepam..tenazepam..lorazepam..diazepam1 -2.192354002 0.815805171 -2.68735 0.00720214 **
X9.Carboxy.THC1 -0.997642802 0.553448506 -1.80259 0.07145204 .
Cocaine.Benzoylecgonine1 0.544146668 0.656865929 0.82840 0.40744493
Methadone1 1.919809146 0.997169516 1.92526 0.05419702 .
Opiates.Opioids1 -4.408092286 1.530219602 -2.88069 0.00396802 **
Oxycodone1 3.764431530 1.037302935 3.62906 0.00028446 ***
methamphetamine1 2.166478575 2.267246364 0.95555 0.33929711
MDMA1 -13.819445930 6522.639111036 -0.00212 0.99830953
codine1 -15.618263240 2190.820319448 -0.00713 0.99431196
Hydrocodone1 -1.393475306 1.273632894 -1.09409 0.27391334
Hydromorphone1 1.506385165 0.884054574 1.70395 0.08839035 .
morphine1 -1.844818213 0.936341936 -1.97024 0.04881089 *
oxymorphone1 -3.572404321 1.367790332 -2.61181 0.00900651 **
Heroin1 1.246424875 1.380802094 0.90268 0.36669482
Fentanyl1 0.263292605 1.205897582 0.21834 0.82716620
Norfentanyl1 -0.610534234 1.221428532 -0.49985 0.61717887
Ketamine1 26.660873598 6522.638885991 0.00409 0.99673871
trazodone1 -15.255785370 6522.638751213 -0.00234 0.99813383
dextromethorphan1 1.622038533 1.699241944 0.95457 0.33979723
norbuprenorphine.buprenorphine1 2.258498955 0.744987753 3.03159 0.00243268 **
Gabapentin.neurontin1 19.011001211 6522.638744598 0.00291 0.99767447
Other1 -0.123046768 1.456922311 -0.08446 0.93269337
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 213.2781577 on 323 degrees of freedom
Residual deviance: 153.1785245 on 299 degrees of freedom
AIC: 203.1785245
Number of Fisher Scoring iterations: 17
LS0tCnRpdGxlOiAiQW5hbHlzaXMgTWFyY2ggMywgMjAxOSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKRGF0YSBhcmUgb3JnYW5pemVkIGluIHR3byBiaWcgdGltZSBwb2ludHM6IDIwMTIgYW5kIDIwMTcuIFRoZXkgYXJlIGNvbGxlY3RlZCBmcm9tIHRoZSBjbGluaWNzLCBhbmQgd2l0aCBtYW55IGV4cGxhaW5hdG9yeSB2YXJpYWJsZXMuIAoKYGBge3IsIGVjaG89RkFMU0V9CmxpYnJhcnkocmVhZHhsKQpJVkRBIDwtIHJlYWRfZXhjZWwoIklWREEgU1RVRFkvSVZEQS54bHN4IikKCmNvbHVtX2Rlc2MgPC0gZGF0YS5mcmFtZSh1bmxpc3QoY29sbmFtZXMoSVZEQSkpLCB1bmxpc3QoSVZEQVsxLF0sIHVzZS5uYW1lcyA9IEZBTFNFKSkKY29sbmFtZXMoY29sdW1fZGVzYykgPC0gYygiVmFyaWFibGUiLCAiRGVzY3JpcHRpb24iKQoKZGF0IDwtIElWREFbLTEsXQoKZGF0JGAwYCA8LSBmYWN0b3IoZGF0JGAwYCkKaGVhZChkYXQpCgpzdHIoZGF0KQp5ZWFyX2NvbCA8LSBkYXQkYDBgCgp0ZW1wIDwtIGNvbG5hbWVzKGRhdCkKCmRhdF9yZW1vdmFsIDwtIGRhdAojY29sbmFtZXMoZGF0X3JlbW92YWwpCmRhdF9yZW1vdmFsCmBgYAoKIyMjIE1vcmUgd29tZW4gYXJlIGluIHRoZSBwb3B1bGF0aW9uCmBgYHtyIGdlbmRlciwgZWNobz1GQUxTRX0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHJlc2hhcGUyKQpsaWJyYXJ5KHBseXIpCgpkYXRfcmVtb3ZhbCRhZ2UgPSBhcy5udW1lcmljKGRhdF9yZW1vdmFsJGFnZSkKZGF0X3JlbW92YWwkc2V4W2RhdF9yZW1vdmFsJHNleD09IjEiXSA8LSAiTWFsZSIgCmRhdF9yZW1vdmFsJHNleFtkYXRfcmVtb3ZhbCRzZXg9PSIwIl0gPC0gIkZlbWFsZSIKZGF0X3JlbW92YWwkYDBgW2RhdF9yZW1vdmFsJGAwYD09MTJdIDwtIDIwMTIKZGF0X3JlbW92YWwkYDBgW2RhdF9yZW1vdmFsJGAwYD09MTddIDwtIDIwMTcKCmdlbmRlcl90YWJsZSA9IGRhdGEuZnJhbWUoWWVhcj0gZmFjdG9yKGRhdF9yZW1vdmFsJGAwYCksIEdlbmRlciA9IGRhdF9yZW1vdmFsJHNleCwgQWdlID0gZGF0X3JlbW92YWwkYWdlKQoKZ2dwbG90KGRhdGEgPSBnZW5kZXJfdGFibGUsIGFlcyh4ID0gQWdlLCBmaWxsID0gR2VuZGVyKSkgKwogICAgICAgICMgZ2VvbV9iYXIoZGF0YT1zdWJzZXQoZ2VuZGVyX3RhYmxlLEdlbmRlcj09IkZlbWFsZSIpKSArIAogICAgICAgICMgZ2VvbV9iYXIoZGF0YT1zdWJzZXQoZ2VuZGVyX3RhYmxlLEdlbmRlcj09Ik1hbGUiKSxhZXMoeT0uLmNvdW50Li4qKC0xKSkpICsgCiAgICAgICAgZ2VvbV9oaXN0b2dyYW0oZGF0YT1zdWJzZXQoZ2VuZGVyX3RhYmxlLEdlbmRlcj09Ik1hbGUiKSwgYnJlYWtzPXNlcSgxMCwgODUsIGJ5PTEwKSwgY29sPSJibGFjayIpICsgCiAgICAgICAgZ2VvbV9oaXN0b2dyYW0oZGF0YT1zdWJzZXQoZ2VuZGVyX3RhYmxlLEdlbmRlcj09IkZlbWFsZSIpLCBicmVha3M9c2VxKDEwLCA4NSwgYnk9MTApLCBjb2w9ImJsYWNrIiwgYWVzKHk9Li5jb3VudC4uKigtMSkpKSArIAogICAgICAgIHNjYWxlX3hfZGlzY3JldGUoKSArCiAgICAgICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTApICsKICAgICAgICB4bGFiKCJBZ2UiKSArIHlsYWIoIkNvdW50IikgKwogICAgICAgIGNvb3JkX2ZsaXAoKSArCiAgICAgICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSkgKwogICAgICAgIHNjYWxlX3lfY29udGludW91cyhicmVha3M9c2VxKC05MCw5MCw1KSxsYWJlbHM9YWJzKHNlcSgtOTAsOTAsNSkpKSArIAogICAgICAgIHNjYWxlX3hfY29udGludW91cyhicmVha3M9c2VxKC05MCw5MCwxMCksbGFiZWxzPWFicyhzZXEoLTkwLDkwLDEwKSkpICsKICAgICAgICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJEYXJrMiIpICsKICAgICAgICBmYWNldF93cmFwKH5ZZWFyKQoKYGBgCgojIyMgRHJ1ZyBwb3B1bGFyaXR5ClNvbWUgZHJ1Z3MgYXJlIG1vcmUgcG9wdWxhciBpbiAyMDE3LCBzb21lIGFyZSBpbiAyMDEyLiBJbnRlcmVzdGluZyB0byBzZWUgcGVvcGxlIHRha2UgZGlmZmVyZW50IGRydWdzIGFjcm9zcyA1IHllYXJzLCBzb21lIGdhaW4gcG9wdWxhcml0eSBjb3VsZCBkdWUgdG8gdGhlIHByaWNlcy4gQXBwYXJlbnRseSB0aGVyZSBhcmUgYSBodWdlIGRpZmZlcmVudCBiZXR3ZWVuIHJlcG9ydGVkIGRydWcgdXNhZ2UgYW5kIGFjdXR1YWwsIHByb2JhYmx5IGR1ZSB0byBlbWJhcnJhc3NpbmcuIEFuZCByZXBvcnRlZCBkcnVnIHRlbmQgdG8gYmUgbGVzcyBsZWF0aGFsLgoKYGBge3IgZWNobz1GQUxTRX0KbGlicmFyeSh0aWR5cikKIyAiZHJ1Z3NfYWJ1c2VkIgpkcnVnc19yZXBvcnRlZCA8LSBzYXBwbHkoY29sdW1fZGVzYyREZXNjcmlwdGlvblt3aGljaChncmVwbCgiZHJ1Z3NfYWJ1c2VkIiwgY29sdW1fZGVzYyRWYXJpYWJsZSkpXSwgZnVuY3Rpb24oeCkgewogICAgICAgIGEgPSBzdHJzcGxpdChhcy5jaGFyYWN0ZXIoeCksIHNwbGl0ID0gIj0iKVtbMV1dWzJdCiAgICAgICAgYSA9IGdzdWIoIlxcKXxcXCgiLCAiIiwgYSkKICAgICAgICByZXR1cm4oYSkKfSkKCmRydWdzX2RldGVjdGVkPC0gc2FwcGx5KGNvbHVtX2Rlc2MkRGVzY3JpcHRpb25bd2hpY2goZ3JlcGwoImRvYV91cmluZSIsIGNvbHVtX2Rlc2MkVmFyaWFibGUpKV0sIGZ1bmN0aW9uKHgpIHsKICAgICAgICBhID0gc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKHgpLCBzcGxpdCA9ICI9IilbWzFdXVsyXQogICAgICAgIGEgPSBnc3ViKCJcXCl8XFwoIiwgIiIsIGEpCiAgICAgICAgcmV0dXJuKGEpCn0pCiMgUmVwZXRlZCAyMSBhbmQgMjIgZm9yIEZlbnRhbnlsCiNkYXRbLGMoNjMsNjQpXQojSVZEQVssYyg2Myw2NCldCmBgYAoKCgpgYGB7ciBlY2hvPUZBTFNFfQojIHJlbW92ZSBjb2x1bW4gImZlbnRhbnlsIiAKZGF0X3JlbW92ZV9mZW50YW55bCAgPC0gZGF0X3JlbW92YWxbLC02NF0KZHJ1Z3NfZGV0ZWN0ZWQgPC0gZHJ1Z3NfZGV0ZWN0ZWRbLTIyXQoKCmRydWdfcmVwb3J0ZWRfdGJsIDwtIGRhdF9yZW1vdmVfZmVudGFueWxbLGdyZXBsKCJkcnVnc19hYnVzZWQiLCBjb2xuYW1lcyhkYXRfcmVtb3ZlX2ZlbnRhbnlsKSldCmRydWdfZGV0ZWN0ZWRfdGJsIDwtIGRhdF9yZW1vdmVfZmVudGFueWxbLGdyZXBsKCJkb2FfdXJpbmUiLCBjb2xuYW1lcyhkYXRfcmVtb3ZlX2ZlbnRhbnlsKSldCgoKY29sbmFtZXMoZHJ1Z19yZXBvcnRlZF90YmwpID0gZHJ1Z3NfcmVwb3J0ZWQKY29sbmFtZXMoZHJ1Z19kZXRlY3RlZF90YmwpID0gZHJ1Z3NfZGV0ZWN0ZWQKCmRydWdfcmVwb3J0ZWRfY29sIDwtIGFwcGx5KGRydWdfcmVwb3J0ZWRfdGJsLCAyLCBhcy5udW1lcmljKQpkcnVnX3JlcG9ydGVkX3RibCA8LSBkYXRhLmZyYW1lKFllYXI9ZGF0X3JlbW92ZV9mZW50YW55bCRgMGAsIEdlbmRlciA9IGRhdF9yZW1vdmFsJHNleCwgQWdlID0gZGF0X3JlbW92YWwkYWdlLCBkcnVnX3JlcG9ydGVkX2NvbCkKCmRydWdfcmVwb3J0ZWRfc3VtXzIwMTIgPC1hcHBseShkcnVnX3JlcG9ydGVkX2NvbFt3aGljaChkcnVnX3JlcG9ydGVkX3RibCRZZWFyPT0yMDEyKSxdLCAyLCBzdW0pCmRydWdfcmVwb3J0ZWRfc3VtXzIwMTIgPC0gZGF0YS5mcmFtZShOYW1lID0gbmFtZXMoZHJ1Z19yZXBvcnRlZF9zdW1fMjAxMiksIENvdW50PWFzLm51bWVyaWMoZHJ1Z19yZXBvcnRlZF9zdW1fMjAxMiksIFllYXI9IjIwMTIiKQpkcnVnX3JlcG9ydGVkX3N1bV8yMDEyIDwtIG5hLm9taXQoZHJ1Z19yZXBvcnRlZF9zdW1fMjAxMikKCmRydWdfcmVwb3J0ZWRfc3VtXzIwMTcgPC1hcHBseShkcnVnX3JlcG9ydGVkX2NvbFt3aGljaChkcnVnX3JlcG9ydGVkX3RibCRZZWFyPT0yMDE3KSxdLCAyLCBzdW0pCmRydWdfcmVwb3J0ZWRfc3VtXzIwMTcgPC0gZGF0YS5mcmFtZShOYW1lID0gbmFtZXMoZHJ1Z19yZXBvcnRlZF9zdW1fMjAxNyksIENvdW50PWFzLm51bWVyaWMoZHJ1Z19yZXBvcnRlZF9zdW1fMjAxNyksIFllYXI9IjIwMTciKQpkcnVnX3JlcG9ydGVkX3N1bV8yMDE3IDwtIG5hLm9taXQoZHJ1Z19yZXBvcnRlZF9zdW1fMjAxNykKCmRydWdfcmVwb3J0ZWRfc3VtIDwtIHJiaW5kKGRydWdfcmVwb3J0ZWRfc3VtXzIwMTIsIGRydWdfcmVwb3J0ZWRfc3VtXzIwMTcpCmBgYAoKYGBge3IgZWNobz1GQUxTRX0KZHJ1Z19kZXRlY3RlZF9jb2wgPC0gYXBwbHkoZHJ1Z19kZXRlY3RlZF90YmwsIDIsIGFzLm51bWVyaWMpCmRydWdfZGV0ZWN0ZWRfdGJsIDwtIGRhdGEuZnJhbWUoWWVhcj1kYXRfcmVtb3ZlX2ZlbnRhbnlsJGAwYCwgR2VuZGVyID0gZGF0X3JlbW92YWwkc2V4LCBBZ2UgPSBkYXRfcmVtb3ZhbCRhZ2UsIGRydWdfZGV0ZWN0ZWRfY29sKQoKIyBkcnVnX2RldGVjdGVkX3N1bSA8LSBkYXRhLmZyYW1lKFllYXI9ZGF0JGAwYCwgZHJ1Z19kZXRlY3RlZF9jb2wpCmRydWdfZGV0ZWN0ZWRfc3VtXzIwMTIgPC1hcHBseShkcnVnX2RldGVjdGVkX2NvbFt3aGljaChkcnVnX3JlcG9ydGVkX3RibCRZZWFyPT0yMDEyKSxdLCAyLCBzdW0pCmRydWdfZGV0ZWN0ZWRfc3VtXzIwMTIgPC0gZGF0YS5mcmFtZShOYW1lID0gbmFtZXMoZHJ1Z19kZXRlY3RlZF9zdW1fMjAxMiksIENvdW50PWFzLm51bWVyaWMoZHJ1Z19kZXRlY3RlZF9zdW1fMjAxMiksIFllYXI9IjIwMTIiKQpkcnVnX2RldGVjdGVkX3N1bV8yMDEyIDwtIG5hLm9taXQoZHJ1Z19kZXRlY3RlZF9zdW1fMjAxMikKCmRydWdfZGV0ZWN0ZWRfc3VtXzIwMTcgPC1hcHBseShkcnVnX2RldGVjdGVkX2NvbFt3aGljaChkcnVnX3JlcG9ydGVkX3RibCRZZWFyPT0yMDE3KSxdLCAyLCBzdW0pCmRydWdfZGV0ZWN0ZWRfc3VtXzIwMTcgPC0gZGF0YS5mcmFtZShOYW1lID0gbmFtZXMoZHJ1Z19kZXRlY3RlZF9zdW1fMjAxNyksIENvdW50PWFzLm51bWVyaWMoZHJ1Z19kZXRlY3RlZF9zdW1fMjAxNyksIFllYXI9IjIwMTciKQpkcnVnX2RldGVjdGVkX3N1bV8yMDE3IDwtIG5hLm9taXQoZHJ1Z19kZXRlY3RlZF9zdW1fMjAxNykKCmRydWdfZGV0ZWN0ZWRfc3VtIDwtIHJiaW5kKGRydWdfZGV0ZWN0ZWRfc3VtXzIwMTIsIGRydWdfZGV0ZWN0ZWRfc3VtXzIwMTcpCmRydWdfZGV0ZWN0ZWRfc3VtIDwtIGRydWdfZGV0ZWN0ZWRfc3VtWy0xLF0KIyBkcnVnX2RldGVjdGVkX3N1bSA8LSBkYXRhLmZyYW1lKFllYXIgPSBjKCIyMDEyIiwgIjIwMTciKSwgZHJ1Z19kZXRlY3RlZF9zdW0pCgojc3VtKGRydWdfZGV0ZWN0ZWRfc3VtXzIwMTIsIG5hLnJtID0gVCkKCmdncGxvdChkcnVnX2RldGVjdGVkX3N1bSwgYWVzKHggPSBDb3VudCwgeSA9IHJlb3JkZXIoTmFtZSwgQ291bnQpLCBjb2xvdXI9WWVhcikpICsKICBnZW9tX3BvaW50KHNpemU9MykgKyAgIyBVc2UgYSBsYXJnZXIgZG90CiAgdGhlbWVfYncoKSArCiAgICAgICAgZ2d0aXRsZSgiRGV0ZWN0ZWQgU3Vic3RhbmNlIGluIEJsb29kIG9yIFVyaW5lIikgKyAKICB0aGVtZSgKICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiZ3JleTYwIiwgbGluZXR5cGUgPSAiZGFzaGVkIikKICApCmBgYAoKYGBge3IsIGVjaG89IEZBTFNFfQpnZ3Bsb3QoZHJ1Z19yZXBvcnRlZF9zdW0sIGFlcyh4ID0gQ291bnQsIHkgPSByZW9yZGVyKE5hbWUsIENvdW50KSwgY29sb3VyPVllYXIpKSArCiAgZ2VvbV9wb2ludChzaXplPTMpICsgICMgVXNlIGEgbGFyZ2VyIGRvdAogIHRoZW1lX2J3KCkgKwogICAgICAgIGdndGl0bGUoIlN1YnN0YW5jZSBpbiBSZXBvcnRzIikgKyAKICB0aGVtZSgKICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiZ3JleTYwIiwgbGluZXR5cGUgPSAiZGFzaGVkIikKICApCgoKYGBgCiMjIyBCTUkgZGlzdHJpYnV0aWlvbiBiZXR3ZWVuIE0gdnMuIEYuIGJldHdlZW4geWVhcnMuIApgYGB7ciBCTUksIGVjaG89RkFMU0V9CiMgZGF0X3JlbW92YWwkYWdlID0gYXMubnVtZXJpYyhkYXRfcmVtb3ZhbCRhZ2UpCiMgZGF0X3JlbW92YWwkc2V4W2RhdF9yZW1vdmFsJHNleD09IjEiXSA8LSAiTWFsZSIgCiMgZGF0X3JlbW92YWwkc2V4W2RhdF9yZW1vdmFsJHNleD09IjAiXSA8LSAiRmVtYWxlIgojIGRhdF9yZW1vdmFsJGAwYFtkYXRfcmVtb3ZhbCRgMGA9PTEyXSA8LSAyMDEyCiMgZGF0X3JlbW92YWwkYDBgW2RhdF9yZW1vdmFsJGAwYD09MTddIDwtIDIwMTcKCmJtaV90YWJsZSA9IGRhdGEuZnJhbWUoWWVhcj0gZGF0X3JlbW92YWwkYDBgLCBHZW5kZXIgPSBkYXRfcmVtb3ZhbCRzZXgsIEJNSSA9IGFzLm51bWVyaWMoZGF0X3JlbW92YWwkYm1pKSwgQWdlID0gZGF0X3JlbW92YWwkYWdlKQpibWlfdGFibGUgPC0gYm1pX3RhYmxlWy13aGljaChibWlfdGFibGUkQk1JPT0wKSxdCm9wdGlvbnMoZGlnaXRzID0gMTIpCgojIGdncGxvdChkYXRhID0gYm1pX3RhYmxlLCBhZXMoeCA9IEJNSSwgZmlsbCA9IEdlbmRlcikpICsKIyAgICAgICAgIGdlb21faGlzdG9ncmFtKGRhdGE9c3Vic2V0KGJtaV90YWJsZSxHZW5kZXI9PSJGZW1hbGUiKSwgY29sPSJibGFjayIpICsgCiMgICAgICAgICBnZW9tX2hpc3RvZ3JhbShkYXRhPXN1YnNldChibWlfdGFibGUsR2VuZGVyPT0iTWFsZSIpLCBjb2w9ImJsYWNrIiwgYWVzKHk9Li5jb3VudC4uKigtMSkpKSArIAojICAgICAgICAgc2NhbGVfeF9kaXNjcmV0ZSgpICsKIyAgICAgICAgIGdlb21faGxpbmUoeWludGVyY2VwdD0wKSArCiMgICAgICAgICB4bGFiKCJCTUkiKSArIHlsYWIoIkNvdW50IikgKwojICAgICAgICAgY29vcmRfZmxpcCgpICsKIyAgICAgICAgIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCkpICsKIyAgICAgICAgIHNjYWxlX3lfY29udGludW91cyhicmVha3M9c2VxKC05MCw5MCw1KSxsYWJlbHM9YWJzKHNlcSgtOTAsOTAsNSkpKSArIAojICAgICAgICAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcz1zZXEoLTkwLDkwLDEwKSxsYWJlbHM9YWJzKHNlcSgtOTAsOTAsMTApKSkgKwojICAgICAgICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iRGFyazIiKSArCiMgICAgICAgICBmYWNldF93cmFwKH5ZZWFyKQoKCgoKZ2VuZGVyX3RhYmxlID0gZGF0YS5mcmFtZShZZWFyPSBmYWN0b3IoZGF0X3JlbW92YWwkYDBgKSwgR2VuZGVyID0gZGF0X3JlbW92YWwkc2V4LCBBZ2UgPSBkYXRfcmVtb3ZhbCRhZ2UpCgpnZ3Bsb3QoZGF0YSA9IGdlbmRlcl90YWJsZSwgYWVzKHggPSBBZ2UsIGZpbGwgPSBHZW5kZXIpKSArCiAgICAgICAgIyBnZW9tX2JhcihkYXRhPXN1YnNldChnZW5kZXJfdGFibGUsR2VuZGVyPT0iRmVtYWxlIikpICsgCiAgICAgICAgIyBnZW9tX2JhcihkYXRhPXN1YnNldChnZW5kZXJfdGFibGUsR2VuZGVyPT0iTWFsZSIpLGFlcyh5PS4uY291bnQuLiooLTEpKSkgKyAKICAgICAgICBnZW9tX2hpc3RvZ3JhbShkYXRhPXN1YnNldChnZW5kZXJfdGFibGUsR2VuZGVyPT0iTWFsZSIpLCBicmVha3M9c2VxKDEwLCA4NSwgYnk9MTApLCBjb2w9ImJsYWNrIikgKyAKICAgICAgICBnZW9tX2hpc3RvZ3JhbShkYXRhPXN1YnNldChnZW5kZXJfdGFibGUsR2VuZGVyPT0iRmVtYWxlIiksIGJyZWFrcz1zZXEoMTAsIDg1LCBieT0xMCksIGNvbD0iYmxhY2siLCBhZXMoeT0uLmNvdW50Li4qKC0xKSkpICsgCiAgICAgICAgc2NhbGVfeF9kaXNjcmV0ZSgpICsKICAgICAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MCkgKwogICAgICAgIHhsYWIoIkFnZSIpICsgeWxhYigiQ291bnQiKSArCiAgICAgICAgY29vcmRfZmxpcCgpICsKICAgICAgICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTApKSArCiAgICAgICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz1zZXEoLTkwLDkwLDUpLGxhYmVscz1hYnMoc2VxKC05MCw5MCw1KSkpICsgCiAgICAgICAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcz1zZXEoLTkwLDkwLDEwKSxsYWJlbHM9YWJzKHNlcSgtOTAsOTAsMTApKSkgKwogICAgICAgIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IkRhcmsyIikgKwogICAgICAgIGZhY2V0X3dyYXAoflllYXIpCgoKCmBgYAojIyMgRGVhdGggVnMuIGRheXMgc3RheSBpbiBob3N0cGl0YWwKVGhlIGxvbmcgZ2VyIHlvdSBzdGF5LCB0aGUgbW9yZSBjaGFuY2UgeW91IHdpbGwgYmUgZGVhZCAobm90IGNhdXNhbCEhISkuCkFnZSwgZ2VuZGVyIGFuZCB5ZWFyIGRpZG4ndCBzaG93IHNpZ25pZmljYW50LCBzbyBpdCBzdWdnZXN0cyB0aGVyZSBjb3VsZCBiZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRoZSBsZW5ndGggb2Ygc3RheWluZyBhbmQgZGVhdGgsIHdoaWNoIG1ha2VzIHNlbnNlLCBzdGF5IGxvbmdlciBjb3VsZCBkdWUgdG8gbW9yZSBsZWF0aGFsIGluanVyeS4KYGBge3IgZGF5c19hZG1pdCwgZWNobz1GQUxTRX0KIyBkYXRfcmVtb3ZhbCRhZ2UgPSBhcy5udW1lcmljKGRhdF9yZW1vdmFsJGFnZSkKIyBkYXRfcmVtb3ZhbCRzZXhbZGF0X3JlbW92YWwkc2V4PT0iMSJdIDwtICJNYWxlIiAKIyBkYXRfcmVtb3ZhbCRzZXhbZGF0X3JlbW92YWwkc2V4PT0iMCJdIDwtICJGZW1hbGUiCiMgZGF0X3JlbW92YWwkYDBgW2RhdF9yZW1vdmFsJGAwYD09MTJdIDwtIDIwMTIKIyBkYXRfcmVtb3ZhbCRgMGBbZGF0X3JlbW92YWwkYDBgPT0xN10gPC0gMjAxNwpkZWF0aF90YWJsZSA8LSBkYXRfcmVtb3ZhbFssd2hpY2goZ3JlcGwoImRlYXRoIiwgY29sbmFtZXMoZGF0X3JlbW92YWwpKSldWywxOjJdCmRlYXRoX2NvbCA8LSBzYXBwbHkoYygxOm5yb3coZGVhdGhfdGFibGUpKSwgZnVuY3Rpb24oaSl7CiAgICAgICAgaWYoYW55KGFzLm51bWVyaWMoZGVhdGhfdGFibGVbaSxdKT4wKSl7CiAgICAgICAgICAgICAgICByZXR1cm4oMSkKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIHJldHVybigwKQogICAgICAgIH0KfSkKCmRheXNfYWRtaXRfdGFibGUgPSBkYXRhLmZyYW1lKFllYXI9IGRhdF9yZW1vdmFsJGAwYCwgR2VuZGVyID0gZGF0X3JlbW92YWwkc2V4LCBBZ2UgPSBhcy5udW1lcmljKGRhdF9yZW1vdmFsJGFnZSksIERheXNfYWRtaXR0ZWQgPSBhcy5udW1lcmljKGRhdF9yZW1vdmFsJGRheXNfYWRtaXQpLCBEZWF0aCA9IGRlYXRoX2NvbCkKCm1vZGVsID0gbG0oRGVhdGh+LiwgZGF0YSA9IGRheXNfYWRtaXRfdGFibGUpCnByaW50KCJMaW5lYXIgTW9kZWwiKQpwcmludChzdW1tYXJ5KG1vZGVsKSkKCgoKbW9kZWwgPSBnbG0oRGVhdGh+LiwgZGF0YSA9IGRheXNfYWRtaXRfdGFibGUsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkKcHJpbnQoIkxvZ2l0IE1vZGVsIikKc3VtbWFyeShtb2RlbCkKYGBgCgoKIyMjIExlbmd0aCBvZiBzdGF5IFZlcnN1cyBDb25zdWx0IHJlYXNvbgooeSkgTGVuZ3RoIG9mIHN0YXkgVnMgKHgpIDEsMiwzLDQsNQpOb21pbmFsCmBgYHtyICwgZWNobz1GQUxTRX0KIyBkYXRfcmVtb3ZhbCRhZ2UgPSBhcy5udW1lcmljKGRhdF9yZW1vdmFsJGFnZSkKIyBkYXRfcmVtb3ZhbCRzZXhbZGF0X3JlbW92YWwkc2V4PT0iMSJdIDwtICJNYWxlIiAKIyBkYXRfcmVtb3ZhbCRzZXhbZGF0X3JlbW92YWwkc2V4PT0iMCJdIDwtICJGZW1hbGUiCiMgZGF0X3JlbW92YWwkYDBgW2RhdF9yZW1vdmFsJGAwYD09MTJdIDwtIDIwMTIKIyBkYXRfcmVtb3ZhbCRgMGBbZGF0X3JlbW92YWwkYDBgPT0xN10gPC0gMjAxNwoKc3RheV92c19jb25zdWx0IDwtIGRhdGEuZnJhbWUoQ29uc3VsdF9SZWFzb24gPSBkYXRfcmVtb3ZhbFssd2hpY2goZ3JlcGwoImNvbnN1bHRfcmVhc29uIiwgY29sbmFtZXMoZGF0X3JlbW92YWwpKSldWywxXSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERheXNfYWRtaXR0ZWQgPSBhcy5udW1lcmljKGRhdF9yZW1vdmFsJGRheXNfYWRtaXQpKQoKZ2dwbG90KHN0YXlfdnNfY29uc3VsdCwgYWVzKHk9RGF5c19hZG1pdHRlZCwgeD1jb25zdWx0X3JlYXNvbikpICsgCiAgZ2VvbV9ib3hwbG90KCkgKwogIHN0YXRfc3VtbWFyeShmdW4uZGF0YT1tZWFuX2NsX2Jvb3QsIGdlb209ImVycm9yYmFyIiwgY29sb3VyPSJyZWQiLCB3aWR0aD0wLjEpICsKICBzdGF0X3N1bW1hcnkoZnVuLnk9bWVhbiwgZ2VvbT0icG9pbnQiLCBjb2xvdXI9InJlZCIpCmBgYAoKVEhlIGZhbGxvd2luZyBzaG93IHRoZXJlJ3Mgc2lnbmlmaWNhbnQgYmV0d2VlbiByZWFzb25zLgpgYGB7ciwgZWNobz1GQUxTRX0KbW9kZWwgPSBhb3YoRGF5c19hZG1pdHRlZH4uLCBkYXRhID0gc3RheV92c19jb25zdWx0KQphbm92YShtb2RlbCkKCmBgYAoKCgoKCgoKIyMjIyBUaGUgZm9sbG93aW5nICJEaWZmZXJlbmNlIGluIG1lYW4gbGV2ZWxzIG9mIGNvbnN1bHRfcmVhc29uIiBpcyBtdWx0aXBsZSBjb21wYXJpc29uLCBzbyBiZXR3ZWVuIDMgYW5kIDEgdGhlcmUncyBodWdlIGRpZmZlcmVuY2UsICAzIGFuZCAyIHRoZXJlJ3MgT0sgZGlmZmVyZW5jZS4gVGhlIHJlc3QganVzdCB0byBoYXJkIHRvIHRlbGwuIFNvIGJhc2ljYWxseSB0aGUgaW50ZXJ2YWwgY292ZXIgMCwgaXMgbm90IHNpZ25pZmljYW50IGRpZmZlcmVudCBiZXR3ZWVuIHR3byByZWFzb25zLiBGb3Igc3VyZSB0aGVyZSdzIG5vIGRpZmZlcmVjZSBiZXR3ZWVuIDIgYW5kIDEKYGBge3IsIGVjaG89RkFMU0V9CiMgVFVLRVkgPC0gVHVrZXlIU0QobW9kZWwpCiMgcGxvdChUVUtFWSAsIGxhcz0xICwgY29sPSJicm93biIgKQoKdGt5ID0gYXMuZGF0YS5mcmFtZShUdWtleUhTRChtb2RlbCkkY29uc3VsdF9yZWFzb24pCnRreSRwYWlyID0gcm93bmFtZXModGt5KQoKIyBQbG90IHBhaXJ3aXNlIFR1a2V5SFNEIGNvbXBhcmlzb25zIGFuZCBjb2xvciBieSBzaWduaWZpY2FuY2UgbGV2ZWwKZ2dwbG90KHRreSwgYWVzKGNvbG91cj1jdXQoYHAgYWRqYCwgYygwLCAwLjAxLCAwLjA1LCAxKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPWMoInA8MC4wMSIsInA8MC4wNSIsIk5vbi1TaWciKSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTAsIGx0eT0iMTEiLCBjb2xvdXI9ImdyZXkzMCIpICsKICBnZW9tX2Vycm9yYmFyKGFlcyhwYWlyLCB5bWluPWx3ciwgeW1heD11cHIpLCB3aWR0aD0wLjIpICsKICBnZW9tX3BvaW50KGFlcyhwYWlyLCBkaWZmKSkgKwogIGxhYnMoY29sb3VyPSIiKQpgYGAKCgojIyMgV2lsbCB0YWtpbmcgZGlmZmVyZW50IGRydWcgYWZmZWN0IGRlYXRoPyBTb21lIGRvZXMgbGVhdGghCgoKYGBge3IsIGVjaG89RkFMU0V9CiMgZGVhdGhfdGFibGUgPC0gZGF0X3JlbW92YWxbLHdoaWNoKGdyZXBsKCJkZWF0aCIsIGNvbG5hbWVzKGRhdF9yZW1vdmFsKSkpXVssMToyXQojIGRlYXRoX2NvbCA8LSBzYXBwbHkoYygxOm5yb3coZGVhdGhfdGFibGUpKSwgZnVuY3Rpb24oaSl7CiMgICAgICAgICBpZihhbnkoYXMubnVtZXJpYyhkZWF0aF90YWJsZVtpLF0pPjApKXsKIyAgICAgICAgICAgICAgICAgcmV0dXJuKDEpCiMgICAgICAgICB9CiMgICAgICAgICBlbHNlewojICAgICAgICAgICAgICAgICByZXR1cm4oMCkKIyAgICAgICAgIH0KIyB9KQoKZHJ1Z19yZXBvcnRlZF90YmwgPC0gZGF0X3JlbW92ZTY0WyxncmVwbCgiZHJ1Z3NfYWJ1c2VkIiwgY29sbmFtZXMoZGF0X3JlbW92ZTY0KSldCmRydWdfZGV0ZWN0ZWRfdGJsIDwtIGRhdF9yZW1vdmU2NFssZ3JlcGwoImRvYV91cmluZSIsIGNvbG5hbWVzKGRhdF9yZW1vdmU2NCkpXQoKCmNvbG5hbWVzKGRydWdfcmVwb3J0ZWRfdGJsKSA9IGRydWdzX3JlcG9ydGVkCmNvbG5hbWVzKGRydWdfZGV0ZWN0ZWRfdGJsKSA9IGRydWdzX2RldGVjdGVkCgpkcnVnX3JlcG9ydGVkX3RibCA8LSBhcHBseShkcnVnX3JlcG9ydGVkX3RibCwgMiwgYXMubnVtZXJpYykKZHJ1Z19yZXBvcnRlZF90YmwgPC0gZHJ1Z19yZXBvcnRlZF90YmxbLC1jKHdoaWNoKGFzLnZlY3RvcihhcHBseShkcnVnX3JlcG9ydGVkX3RibCwgMiwgc3VtKSk9PTApKV0KI2RydWdfcmVwb3J0ZWRfdGJsIDwtIGFwcGx5KGRydWdfcmVwb3J0ZWRfdGJsLCAyLCBhcy5mYWN0b3IpCiMgCmRydWdfZGV0ZWN0ZWRfdGJsIDwtIGFwcGx5KGRydWdfZGV0ZWN0ZWRfdGJsLCAyLCBhcy5udW1lcmljKQoKZHJ1Z19kZXRlY3RlZF90YmwgPC0gZHJ1Z19kZXRlY3RlZF90YmxbLC1jKHdoaWNoKGFzLnZlY3RvcihhcHBseShkcnVnX2RldGVjdGVkX3RibCwgMiwgc3VtKSk9PTApLCBuY29sKGRydWdfZGV0ZWN0ZWRfdGJsKSldCmRydWdfZGV0ZWN0ZWRfdGJsIDwtIGFwcGx5KGRydWdfZGV0ZWN0ZWRfdGJsLCAyLCBhcy5mYWN0b3IpCgpkcnVnX3JlcG9ydGVkX3RibCA9IG5hLm9taXQoZGF0YS5mcmFtZShEZWF0aCA9IGRlYXRoX2NvbCwgZHJ1Z19yZXBvcnRlZF90YmwpKQpkcnVnX2RldGVjdGVkX3RibCA9IG5hLm9taXQoZGF0YS5mcmFtZShEZWF0aCA9IGRlYXRoX2NvbCwgZHJ1Z19kZXRlY3RlZF90YmwpKQoKbW9kZWwgPSBnbG0oRGVhdGh+LiwgZGF0YSA9IGRydWdfZGV0ZWN0ZWRfdGJsLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IikpCnByaW50KCJMb2dpdCBNb2RlbCIpCnN1bW1hcnkobW9kZWwpICAgICAgICAgICAgICAgICAgCgpgYGAKV2lsbCBkcnVnIGFuZCBBbGNvaG9sIGFmZmVjdCBkZWF0aD8gcHJvYmFibHkgbm90LiBIb3dldmVyLCB0aGUgYWJvdmUgcmVzdWx0cyBzaG93IHNvbWUgZHJ1Z3MgbW9yZSBsZWF0aGFsLCBzb21lIGFyZSBub3QsIHNvIHRoZXJlIG1pZ2h0IGJlIGludGVyYWN0aW9uIGFtb3VuZyBkcnVncywgc28gd2UgbWlnaHQgbmVlZCB0byBpbnZlc3RpZ2F0ZSwgYmVjYXVzZSBJIGRpZG4ndCBhcHBseSBldmVyeSBzaW5nbGUgZHJ1ZywgSSBvbmx5IHVzZWQgdGhlICJkcnVnX29ubHkiIHZhcmlhYmxlLgpgYGB7ciBkcnVnX2FsY28sIGVjaG89RkFMU0V9Cm9ubHlfZHJ1ZyA8LSBkYXRfcmVtb3ZlNjRbLGdyZXBsKCJvbmx5X2RydWciLCBjb2xuYW1lcyhkYXRfcmVtb3ZlNjQpKV0Kb25seV9hbGNvaG9sIDwtIGRhdF9yZW1vdmU2NFssZ3JlcGwoIm9ubHlfYWxjb2hvbCIsIGNvbG5hbWVzKGRhdF9yZW1vdmU2NCkpXQpib3RoX2RydWdfYWxjb2hvIDwtIGRhdF9yZW1vdmU2NFssZ3JlcGwoImJvdGhfZHJ1Z19hbGNvaG8iLCBjb2xuYW1lcyhkYXRfcmVtb3ZlNjQpKV0KCmZvcihpIGluIGMoMTpsZW5ndGgoYm90aF9kcnVnX2FsY29obykpKXsKICAgICAgICBpZihib3RoX2RydWdfYWxjb2hvW2ldPT0xKXsKICAgICAgICAgICAgICBvbmx5X2RydWdbaV0gPSAxCiAgICAgICAgICAgICAgb25seV9hbGNvaG9sW2ldPTEKICAgICAgICB9Cn0KCmRydWdfYWxjbyA8LSBuYS5vbWl0KGRhdGEuZnJhbWUoRGVhdGggPSBkZWF0aF9jb2wsIERydWdfT25seSA9IG9ubHlfZHJ1ZywgQWxjb19Pbmx5ID0gb25seV9hbGNvaG9sKSkKCiNtb2RlbCA9IGdsbShEZWF0aH5EcnVnX09ubHkrQWxjb19Pbmx5K0RydWdfT25seTpBbGNvX09ubHksIGRhdGEgPSBkcnVnX2FsY28sIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkKbW9kZWwgPSBnbG0oRGVhdGh+LiwgZGF0YSA9IGRydWdfYWxjbykKcHJpbnQoIkxvZ2l0IE1vZGVsIGZvciBEcnVnIGFuZCBBbGNvaG9sIikKc3VtbWFyeShtb2RlbCkgICAgICAgICAgCgpgYGAKCiMjIEluZmVjdGlvbgoKCkRydWdzIHZzIGluZmVjdGlvbiwgd2hhdCBkcnVncz8KCkJVVCEhIENoYW5nZSB0byB0aGUgb3RoZXIgaW5mZWN0aW9uIERydWcgYWZmZWN0IGluZmVjdGlvbi4gCmBgYHtyLCBlY2hvPUZBTFNFfQoKaW5mZWN0X2RhdCA8LSBkYXRfcmVtb3ZhbFssd2hpY2goZ3JlcGwoIklORkVDVElPTiIsIGNvbG5hbWVzKGRhdF9yZW1vdmFsKSkpXQojaW5mZWN0X2RhdCA8LSBpbmZlY3RfZGF0WywtYygxLDgpXQoKY29sbmFtZXMoaW5mZWN0X2RhdCkgPC0gYygiSW5mZWN0aW9uIikKZHJ1Z19pbmZlY3Rpb24gPC0gZGF0YS5mcmFtZShJbmZlY3Rpb24gPSBpbmZlY3RfZGF0LCBEcnVnX09ubHkgPSBvbmx5X2RydWcsIEFsY29fT25seSA9IG9ubHlfYWxjb2hvbCkKCiNtb2RlbCA9IGdsbShEZWF0aH5EcnVnX09ubHkrQWxjb19Pbmx5K0RydWdfT25seTpBbGNvX09ubHksIGRhdGEgPSBkcnVnX2FsY28sIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkKbW9kZWwgPSBsbShJbmZlY3Rpb25+LiwgZGF0YSA9IGRydWdfaW5mZWN0aW9uKQpwcmludCgiSW5mZWN0aW9uIHZzIERydWdzIikKc3VtbWFyeShtb2RlbCkgICAgICAgCgpgYGAKCgoKCkRlYXRoIHZzIEluZmVjdGlvbiwgRnJhY3R1cmUgKFRoZSBtb2RlbCB3aWxsIGhhdmUgb3ZlcmxhcHBpbmcgYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpb25zLiBUaGlzIG1lYW5zCnRoZXkgd2lsbCBiZSBzb21ld2hhdCBjb2xsaW5lYXIuIFlvdSB3aWxsIG1ha2UgYSB2ZW4tZGlhZ3JhbSB0eXBlIHBsb3QgZm9yIHRoZXNlIHR3by4gVGhpcyB3aWxsIGFsbG93IHVzCnRvIGxvb2sgYXQgdGhlIHBlcmNlbnRhZ2Ugb2YgZWFjaCBwb3B1bGF0aW9uLCB5b3UgY2FuIGRvIHRoaXM6IHRvdGFsL2RlYXRoLCBpbmZlY3RlZC9kZWF0aCwgYW5kCmZyYWN0dXJlKHRoZSBzaXggdmFsdWVzKS9kZWF0aCkKCgpgYGB7ciBpbmZlY3Rpb24sIGVjaG89RkFMU0V9CiNpbmZlY3RfY29sX25hbWUgPC0gYygiSGVhcnQiLCAiTHVuZyIsICJTa2luIiwgIkpvaW50X2JvbmUiLCAiU2Vwc2lzIiwgIk90aGVyIikKCiNjb2x1bV9kZXNjCmluZmVjdF9kYXQgPC0gZGF0X3JlbW92YWxbLHdoaWNoKGdyZXBsKCJJTkZFQ1RJT04iLCBjb2xuYW1lcyhkYXRfcmVtb3ZhbCkpKV0KI2luZmVjdF9kYXQgPC0gaW5mZWN0X2RhdFssLWMoMSw4KV0KCmNvbG5hbWVzKGluZmVjdF9kYXQpIDwtIGMoIkluZmVjdGlvbiIpCgpkZWF0aF9pbmZlY3QgPC0gZGF0YS5mcmFtZShEZWF0aCA9IGRlYXRoX2NvbCwgaW5mZWN0X2RhdCkKCm1vZGVsIDwtIGdsbShEZWF0aH4uLCBkYXRhID0gZGVhdGhfaW5mZWN0LCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IikpCnByaW50KCJEZWF0aCB2cy4gaW5mZWN0aW9uIikKc3VtbWFyeShtb2RlbCkKYGBgCgojIyMgRGVhdGggdnMgRnJhY3R1cmUgbm90IHdvcmtpbmcgCgpWYXJpYWJsZSBuYW1lczogIlNwaW5lLkZyYWN0dXJlLmFuZC5Ta3VsbC5mcmFjdHVyZSIsICJTcGluZS5mcmFjdHVyZS5hbmQuc2t1bGwuYmxlZWRpbmciLCAiU3BpbmUuZnJhY3R1cmUuLnNrdWxsLmZyYWN0dXJlLi5hbmQuc2t1bGwuYmxlZWQiLiAKClRoZSBmaXJzdCBhbmQgc2Vjb25kIGFyZSBhbGwgMHMuIE1vZGVsIGRvZXNuJ3QgbWFrZSBzZW5zZS4KCmBgYHtyLCBlY2hvPUZBTFNFfQojIGdyZXBsKCJmcmFjdHVyZSIsIGNvbHVtX2Rlc2MkVmFyaWFibGUpCmZyYWN0dXJlX2RhdCA8LSBkYXRfcmVtb3ZhbFssd2hpY2goZ3JlcGwoImZyYWN0dXJlIiwgY29sbmFtZXMoZGF0X3JlbW92YWwpKSldCiMgaW5mZWN0X2RhdCA8LSBpbmZlY3RfZGF0WywtYygxLDgpXQojIGNvbG5hbWVzKGZyYWN0dXJlX2RhdCkgPC0gYygiRnJhY3R1cmUiKQoKZGVhdGhfZnJhY3R1cmUgPC0gZGF0YS5mcmFtZShEZWF0aCA9IGRlYXRoX2NvbCwgZnJhY3R1cmVfZGF0KQojIGNvbG5hbWVzKGRlYXRoX2ZyYWN0dXJlKQojIHN1bShmcmFjdHVyZV9kYXRbLDFdKQoKbW9kZWwgPC0gZ2xtKERlYXRofi4sIGRhdGEgPSBkZWF0aF9mcmFjdHVyZSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpLCBuYS5hY3Rpb24gPSBuYS5vbWl0KQpwcmludCgiRGVhdGggdnMuIEZyYWN0dXJlIikKc3VtbWFyeShtb2RlbCkKCmBgYAoKIyMgRnJhY3R1cmVzIHZzIERlYXRoOiAKSU5GRUNUSU9OIChCcmFpbiBhbmQvb3IgU3BpbmUpCkNoZWNrIG9uIHRoZXNlIHZhcmlhYmxlcy4gSWYgdGhleSBoYXZlIGxlc3MgdGhhbiB0aGUgcG93ZXIgeW91IG5lZWQsIGp1c3QgdGhyb3cgdGhlbSBvdXQhClNwaW5lIEZyYWN0dXJlIE9ubHkKU2t1bGwgRnJhY3R1cmUgT25seQpTa3VsbCBCbGVlZGluZyBPbmx5ClNwaW5lIEZyYWN0dXJlIGFuZCBTa3VsbCBmcmFjdHVyZQpTcGluZSBmcmFjdHVyZSBhbmQgc2t1bGwgYmxlZWRpbmcKU2t1bGwgRnJhY3R1cmUgYW5kIHNrdWxsIGJsZWVkaW5nCgpTcGluZSBmcmFjdHVyZSwgc2t1bGwgZnJhY3R1cmUsIGFuZCBza3VsbCBibGVlZAoKV2hhdCBJIHdhbnQgdG8ga25vdyBpczogSG93IG1hbnkgKCUpIHBlb3BsZSB3aXRoIGluZmVjdGlvbiBkaWUsIGhvdyBtYW55IHBlb3BsZSAoJSkKd2l0aCBmcmFjdHVyZXMgb3IgYmxlZWRzIGRpZSwgYW5kIGhvdyB0aG9zZSB0aGluZ3Mgc3RhY2sgdXAgYWdhaW5zdCBlYWNoIG90aGVyLgoKIyMjIEhlcmUgdGhlIE5BIHNob3dzIHRoYXQgY2F0ZWdvcnkgaXMgYWxsIDAuIApgYGB7ciwgZWNobz1GQUxTRX0KZnJhY3R1cmVfZGF0IDwtIGRhdF9yZW1vdmFsWyxjKDExMToxMTgpXQpmcmFjdHVyZV9kYXQgPC0gZGF0YS5mcmFtZShEZWF0aCA9IGRlYXRoX2NvbCwgZnJhY3R1cmVfZGF0KQoKbW9kZWwgPC0gZ2xtKERlYXRofi4sIGRhdGEgPSBmcmFjdHVyZV9kYXQsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSwgbmEuYWN0aW9uID0gbmEub21pdCkKcHJpbnQoIkRlYXRoIHZzLiBGcmFjdHVyZSIpCnN1bW1hcnkobW9kZWwpCgpgYGAKIyMjIENvdW50aW5nOgpgYGB7ciwgZWNobz1GQUxTRX0KCmFnZ3JlZ2F0ZShEZWF0aCB+IEJyYWluLkJsZWVkICsgU3BpbmUuRnJhY3R1cmUuT25seSArIFNrdWxsLkZyYWN0dXJlLk9ubHkgKyBTa3VsbC5CbGVlZGluZy5Pbmx5ICsgU3BpbmUuRnJhY3R1cmUuYW5kLlNrdWxsLmZyYWN0dXJlCiAgICAgICAgICArIFNwaW5lLmZyYWN0dXJlLmFuZC5za3VsbC5ibGVlZGluZywgZGF0YT1mcmFjdHVyZV9kYXQsIEZVTj1mdW5jdGlvbih4KSB7c3VtKHgpL2xlbmd0aCh4KX0pCgoKYGBgCgpgYGB7ciwgZWNobz1GQUxTRX0KCmFnZ3JlZ2F0ZShEZWF0aCB+IC4sIGRhdGE9ZGVhdGhfaW5mZWN0LCBGVU49ZnVuY3Rpb24oeCkge3N1bSh4KS9sZW5ndGgoeCl9KQoKCmBgYAoKCiMjIyBJZiBhIHBhdGllbnQgY2FuIGdpdmUgaGlzdG9yeSwgdGhlbiBkZWF0aCBpcyBsb29taW5nLCBidXQgZG9lc24ndCBtZWFuIGhlIHdpbGwgYmUgaW5mZWN0ZWQgZWFzaWx5LgoKRGVhdGggdnMuIEdpdmVuIEhpc3RvcnkKCmBgYHtyIGdpdmVfaGlzdG9yeSwgZWNobz1GQUxTRX0KZ2l2ZV9oaXN0IDwtIGRhdF9yZW1vdmFsWyx3aGljaChncmVwbCgiY29uc2Npb3VzIiwgY29sbmFtZXMoZGF0X3JlbW92YWwpKSldCgpkZWF0aF9oaXN0IDwtIGRhdGEuZnJhbWUoRGVhdGggPSBkZWF0aF9jb2wsIEluZmVjdCA9IGRlYXRoX2luZmVjdCRJbmZlY3Rpb24sIEdpdmVuX0hpc3QgPSBnaXZlX2hpc3QpCgpjb2xuYW1lcyhkZWF0aF9oaXN0KSA8LSBjKCJEZWF0aCIsICJJbmZlY3Rpb24iLCAiR2l2ZW5fSGlzdCIpCgptb2RlbCA8LSBnbG0oRGVhdGh+R2l2ZW5fSGlzdCwgZGF0YSA9IGRlYXRoX2hpc3QsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkKc3VtbWFyeShtb2RlbCkKCmBgYAoKSW5mZWN0aW9uIHZzLiBHaXZlbiBIaXN0b3J5ClllcyB0aGUgbG9uZ2VyIHlvdSBzdGF5IHlvdSB0ZW5kIHRvIGdldCBpbmZlY3RlZApgYGB7ciwgZWNobz1GQUxTRX0KCm1vZGVsIDwtIGdsbShJbmZlY3Rpb25+R2l2ZW5fSGlzdCwgZGF0YSA9IGRlYXRoX2hpc3QsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkKc3VtbWFyeShtb2RlbCkKCmBgYAoKCiMjIyBEYXlzIG9mIGFkbWlzc2lvbiB2cy4gSW5mZWN0aW9uCgpUaGUgbG9uZ2VyIHlvdSBzdGF5LCB0aGUgbW9yZSBjaGFuY2UgeW91IGNvdWxkIGdldCBpbmZlY3RlZCwgaGVyZSBzaG93cyB0aGUgY29ycmVsYXRpb24sIHdoY2loIGlzIHZlcnkgc2lnbmlmaWNhbnQhISEKCmBgYHtyLCBlY2hvPUZBTFNFfQoKRGF5c19hZG1pdHRlZCA8LSBkYXlzX2FkbWl0X3RhYmxlJERheXNfYWRtaXR0ZWQKSW5mZWN0aW9uIDwtIGRlYXRoX2hpc3QkSW5mZWN0aW9uCmRheXNfYWRtaXRfdnNfaW5mZWN0aW9uX3RhYmxlIDwtIGRhdGEuZnJhbWUoRGF5c19hZG1pdHRlZCwgSW5mZWN0aW9uKQptb2RlbCA8LSBnbG0oSW5mZWN0aW9ufkRheXNfYWRtaXR0ZWQsIGRhdGEgPSBkYXlzX2FkbWl0X3ZzX2luZmVjdGlvbl90YWJsZSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpKQpzdW1tYXJ5KG1vZGVsKQoKCmBgYAojIyMgRHJ1Z3MgdnMgSW5mZWN0aW9uCgoKYGBge3IsIGVjaG89RkFMU0V9CgpkcnVnX2RldGVjdGVkX3ZzX0luZmVjdGlvbl90YmwgPC0gZGF0YS5mcmFtZShkZWF0aF9pbmZlY3QkSW5mZWN0aW9uLCBkcnVnX2RldGVjdGVkX3RibFssLTFdKQptb2RlbCA8LSBnbG0oZGVhdGhfaW5mZWN0LkluZmVjdGlvbn4uLCBkYXRhID0gZHJ1Z19kZXRlY3RlZF92c19JbmZlY3Rpb25fdGJsLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IikpCnN1bW1hcnkobW9kZWwpCmBgYAoK