1 Dataset - Onderzoeksvraag - Design?

  • Prostaatkanker case studie

  • Associatie tussen prostaat specifiek antigen concentratie en andere predictoren

  • Type response?

  • Type predictoren?

2 Data-exploratie

prostate <- read_csv("https://raw.githubusercontent.com/statomics/sbc20/master/data/prostate.csv")

prostate <- prostate %>%
  mutate(svi = as.factor(svi))

library(GGally)
prostate %>%
  dplyr::select(-pgg45)  %>%
  ggpairs()

  • Schatting voor parameter \(\beta_v\) mogelijks geen zuiver effect van tumor volume.
  • Zelfs als lcavol niet is geassocieerd met het lpsa, dan nog kunnen patiënten met een groter tumor volume een hoger lpsa hebben omdat ze bijvoorbeeld een aantasting van de zaadblaasjes hebben (svi status 1). \(\rightarrow\) Confounding.
  • Door de svi status in het model op te nemen corrigeren we voor de mogelijkse confounding.

3 Vertalen van onderzoeksvraag naar populatie parameters: effectgrootte

\[\text{E}\left(Y\vert X_v, X_w, X_s\right) = \beta_0 + \beta_v X_v + \beta_w X_w + \beta_s X_s\]

  • Associatie van predictoren met log PSA: hellingen van het model

  • Meer accurate predicties door meerdere predictoren simultaan in rekening te brengen

  • Interpretatie?

    • verschil in gemiddelde uitkomst tussen subjecten die in één eenheid van log tumor volume (\(X_v\)) verschillen, maar dezelfde waarde hebben voor de overige verklarende variabelen (\(X_w\) en \(X_s\)) in het model.

    • Associatie tussen log PSA en de predictor log tumor volume waarbij gecorrigeerd wordt voor de overige predictoren, hier dus associatie van log PSA en het log tumor volume na correctie voor log prostaatgewicht en svi-status.

4 Schatten van effectgrootte a.d.h.v. steekproef

  • Kleinste kwadratentechniek
lmV <- lm(lpsa~lcavol, prostate)
summary(lmV)

Call:
lm(formula = lpsa ~ lcavol, data = prostate)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.67624 -0.41648  0.09859  0.50709  1.89672 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.50730    0.12194   12.36   <2e-16 ***
lcavol       0.71932    0.06819   10.55   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.7875 on 95 degrees of freedom
Multiple R-squared:  0.5394,    Adjusted R-squared:  0.5346 
F-statistic: 111.3 on 1 and 95 DF,  p-value: < 2.2e-16
lmVWS <- lm(lpsa~lcavol + lweight + svi, prostate)
summary(lmVWS)

Call:
lm(formula = lpsa ~ lcavol + lweight + svi, data = prostate)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.72966 -0.45767  0.02814  0.46404  1.57012 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.26807    0.54350  -0.493  0.62301    
lcavol       0.55164    0.07467   7.388  6.3e-11 ***
lweight      0.50854    0.15017   3.386  0.00104 ** 
sviinvasion  0.66616    0.20978   3.176  0.00203 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.7168 on 93 degrees of freedom
Multiple R-squared:  0.6264,    Adjusted R-squared:  0.6144 
F-statistic: 51.99 on 3 and 93 DF,  p-value: < 2.2e-16

De parameter bij lcavol geeft nu aan dat patiënten met een tumorvolume dat 1% hoger ligt, maar eenzelfde prostaat gewicht en svi status hebben, een prostaat antigeen concentratie zullen hebben dat gemiddeld slechts 0.55% hoger ligt.

De reden dat we eerder een verschil van meer dan 0.72% vonden, kan worden verklaard doordat patiënten met een verschil in tumorvolume vaak ook verschillen in prostaat gewicht en svi status en omdat prostaat gewicht en svi mogelijks ook een associatie vertonen met log PSA

5 Inferentie

  • Kunnen we hetgeen we zien in de steekproef vertalen naar de populatie toe?

  • Hiervoor moeten we rekening houden dat we maar een heel klein deel van de populatie hebben kunnen bemonsteren.

  • Gevens, statistieken en conclusies zijn stochastisch. Ze variëren van steekproef tot steekproef.

  • We moeten die variabiliteit in kunnen schatten o.b.v. één enkele steekproef!

5.1 Aannames?

5.1.1 Representatieve steekproef:

\(\hat\beta_j\) is een onvertekende schatter van \(\beta\) als steekproef representatief is

\[E[\hat \beta_j]=\beta_j\]

5.1.2 Normaliteit

\[Y_{i} \sim N(\mu_i,\sigma^2)\] \[Y_i \sim N(\beta_0+\beta_vx_{iv}+\beta_wx_{iw} + \beta_sx_{is},\sigma^2) \longrightarrow \hat \beta_j \sim N(\beta_j, \sigma^2_{\hat \beta_j})\]

en lineaire combinaties van de model parameterschatters zijn ook normaal verdeeld.

\[ \longrightarrow L^T\hat \beta \sim N(L^T\beta, \sigma^2_{L^T\hat{\boldsymbol{\beta}}}) \]

5.1.3 Onafhankelijkheid en gelijkheid van variantie

\[\sigma^2_{L^T\hat{\boldsymbol{\beta}}} = c_L \sigma^2 \]

  • \(\sigma^2?\)

\[\hat \sigma^2 = MSE = \sum\limits_{i=1} ^ n \frac{(Y_i - \hat Y_i)^2}{n-p}\]

\[SE_{L^T\hat{\boldsymbol{\beta}}} = c_L \hat \sigma \]

  • t statistiek

\[ T = \frac{L\hat{\boldsymbol{\beta}} - L\boldsymbol{\beta}}{\text{SE}_{L\hat{\boldsymbol{\beta}}}} \sim t_{n-p}\]

  • BI en T-test \(H_0: L\boldsymbol{\beta} = 0\) vs \(H_1: L\boldsymbol{\beta} \neq 0\)

  • F statistiek volgt F-verdeling onder de \(H_0\) \[ F = \frac{MSR_2 - MSR_1}{MSE} \sim F_{p_2 - p_1,n-p_2}\]

6 R - output

library(car)
summary(lmVWS)

Call:
lm(formula = lpsa ~ lcavol + lweight + svi, data = prostate)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.72966 -0.45767  0.02814  0.46404  1.57012 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.26807    0.54350  -0.493  0.62301    
lcavol       0.55164    0.07467   7.388  6.3e-11 ***
lweight      0.50854    0.15017   3.386  0.00104 ** 
sviinvasion  0.66616    0.20978   3.176  0.00203 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.7168 on 93 degrees of freedom
Multiple R-squared:  0.6264,    Adjusted R-squared:  0.6144 
F-statistic: 51.99 on 3 and 93 DF,  p-value: < 2.2e-16
Anova(lmVWS, type = "III")

7 Conclusie

De associaties tussen lpsa \(\leftrightarrow\) log kanker volume, lpsa \(\leftrightarrow\) log prostaat gewicht en lpsa \(\leftrightarrow\) status van de zaadblaasjes zijn respectievelijk extreem significant (\(p<<0.001\)) en sterk significant (\(p = 0.001\) en \(p = 0.002\)).

  • interpretaties van de hellingen en BI!

8 Wat als aannames niet zijn voldaan?

  • Normaliteit en heteroscedasticiteit niet voldaan: transformatie van Y
  • Lineariteit niet voldaan: transformatie van X of hogere orde termen (interacties en machten \(X^2, X^3, ...\)).
  • Normaliteit niet voldaan: bij grote steekproeven CLT
LS0tCnRpdGxlOiAnMTAuIFJlY2FwOiBBbGdlbWVlbiBMaW5lYWlyIE1vZGVsIC0gQWRkaXRpZWYgTW9kZWwnCmF1dGhvcjogIkxpZXZlbiBDbGVtZW50IgpkYXRlOiAic3RhdE9taWNzLCBHaGVudCBVbml2ZXJzaXR5IChodHRwczovL3N0YXRvbWljcy5naXRodWIuaW8pIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgdGhlbWU6IGNvc21vCiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIGxhdGV4X2VuZ2luZTogeGVsYXRleAotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoaW5jbHVkZSA9IFRSVUUsIGNvbW1lbnQgPSBOQSwgZWNobyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkKbGlicmFyeSh0aWR5dmVyc2UpCmBgYAoKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CiNEbyBub3QgcnVuIGR1cmluZyB0aGUgbGVjdHVyZSB3aGVuIHdlIHdvcmsgaW50ZXJhY3RpdmVseQpzZXQuc2VlZCgxMzE0KQpgYGAKCiMgRGF0YXNldCAtIE9uZGVyem9la3N2cmFhZyAtIERlc2lnbj8KCi0gUHJvc3RhYXRrYW5rZXIgY2FzZSBzdHVkaWUKLSBBc3NvY2lhdGllIHR1c3NlbiBwcm9zdGFhdCBzcGVjaWZpZWsgYW50aWdlbiBjb25jZW50cmF0aWUgZW4gYW5kZXJlIHByZWRpY3RvcmVuCgotIFR5cGUgcmVzcG9uc2U/Ci0gVHlwZSBwcmVkaWN0b3Jlbj8KCiMgRGF0YS1leHBsb3JhdGllCgpgYGB7cn0KcHJvc3RhdGUgPC0gcmVhZF9jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGF0b21pY3Mvc2JjMjAvbWFzdGVyL2RhdGEvcHJvc3RhdGUuY3N2IikKCnByb3N0YXRlIDwtIHByb3N0YXRlICU+JQogIG11dGF0ZShzdmkgPSBhcy5mYWN0b3Ioc3ZpKSkKCmxpYnJhcnkoR0dhbGx5KQpwcm9zdGF0ZSAlPiUKICBkcGx5cjo6c2VsZWN0KC1wZ2c0NSkgICU+JQogIGdncGFpcnMoKQpgYGAKCi0gU2NoYXR0aW5nIHZvb3IgcGFyYW1ldGVyICRcYmV0YV92JCBtb2dlbGlqa3MgZ2VlbiB6dWl2ZXIgZWZmZWN0IHZhbiB0dW1vciB2b2x1bWUuCi0gWmVsZnMgYWxzIGxjYXZvbCBuaWV0IGlzIGdlYXNzb2NpZWVyZCBtZXQgaGV0IGxwc2EsICBkYW4gbm9nIGt1bm5lbiBwYXRpw6tudGVuIG1ldCBlZW4gZ3JvdGVyIHR1bW9yIHZvbHVtZSBlZW4gaG9nZXIgbHBzYSBoZWJiZW4gb21kYXQgemUgYmlqdm9vcmJlZWxkIGVlbiBhYW50YXN0aW5nIHZhbiBkZSB6YWFkYmxhYXNqZXMgaGViYmVuIChzdmkgc3RhdHVzIDEpLgokXHJpZ2h0YXJyb3ckIENvbmZvdW5kaW5nLgotIERvb3IgZGUgc3ZpIHN0YXR1cyBpbiBoZXQgbW9kZWwgb3AgdGUgbmVtZW4gY29ycmlnZXJlbiB3ZSB2b29yIGRlIG1vZ2VsaWprc2UgY29uZm91bmRpbmcuCgojIFZlcnRhbGVuIHZhbiBvbmRlcnpvZWtzdnJhYWcgbmFhciBwb3B1bGF0aWUgcGFyYW1ldGVyczogZWZmZWN0Z3Jvb3R0ZQoKXFtcdGV4dHtFfVxsZWZ0KFlcdmVydCBYX3YsIFhfdywgWF9zXHJpZ2h0KSA9IFxiZXRhXzAgKyBcYmV0YV92IFhfdiArIFxiZXRhX3cgWF93ICsgXGJldGFfcyBYX3NcXQoKCi0gQXNzb2NpYXRpZSB2YW4gcHJlZGljdG9yZW4gbWV0IGxvZyBQU0E6IGhlbGxpbmdlbiB2YW4gaGV0IG1vZGVsCi0gTWVlciBhY2N1cmF0ZSBwcmVkaWN0aWVzIGRvb3IgbWVlcmRlcmUgcHJlZGljdG9yZW4gc2ltdWx0YWFuIGluIHJla2VuaW5nIHRlIGJyZW5nZW4KCgotIEludGVycHJldGF0aWU/CgogIC0gdmVyc2NoaWwgaW4gZ2VtaWRkZWxkZSB1aXRrb21zdCB0dXNzZW4gc3ViamVjdGVuIGRpZSBpbiDDqcOpbiBlZW5oZWlkIHZhbiBsb2cgdHVtb3Igdm9sdW1lICgkWF92JCkgdmVyc2NoaWxsZW4sIG1hYXIgZGV6ZWxmZGUgd2FhcmRlIGhlYmJlbiB2b29yIGRlIG92ZXJpZ2UgdmVya2xhcmVuZGUgdmFyaWFiZWxlbiAoJFhfdyQgZW4gJFhfcyQpIGluIGhldCBtb2RlbC4KCiAgLSBBc3NvY2lhdGllIHR1c3NlbiBsb2cgUFNBIGVuIGRlIHByZWRpY3RvciBsb2cgdHVtb3Igdm9sdW1lIHdhYXJiaWogZ2Vjb3JyaWdlZXJkIHdvcmR0IHZvb3IgZGUgb3ZlcmlnZSBwcmVkaWN0b3JlbiwgIGhpZXIgZHVzIGFzc29jaWF0aWUgdmFuIGxvZyBQU0EgZW4gaGV0IGxvZyB0dW1vciB2b2x1bWUgbmEgY29ycmVjdGllIHZvb3IgbG9nIHByb3N0YWF0Z2V3aWNodCBlbiBzdmktc3RhdHVzLgoKCiMgU2NoYXR0ZW4gdmFuIGVmZmVjdGdyb290dGUgYS5kLmgudi4gc3RlZWtwcm9lZgoKLSBLbGVpbnN0ZSBrd2FkcmF0ZW50ZWNobmllawoKYGBge3J9CmxtViA8LSBsbShscHNhfmxjYXZvbCwgcHJvc3RhdGUpCnN1bW1hcnkobG1WKQpsbVZXUyA8LSBsbShscHNhfmxjYXZvbCArIGx3ZWlnaHQgKyBzdmksIHByb3N0YXRlKQpzdW1tYXJ5KGxtVldTKQpgYGAKCkRlIHBhcmFtZXRlciBiaWogbGNhdm9sIGdlZWZ0IG51IGFhbiBkYXQgcGF0acOrbnRlbiBtZXQgZWVuIHR1bW9ydm9sdW1lIGRhdCAxJSBob2dlciBsaWd0LCBtYWFyIGVlbnplbGZkZSBwcm9zdGFhdCBnZXdpY2h0IGVuIHN2aSBzdGF0dXMgaGViYmVuLCBlZW4gcHJvc3RhYXQgYW50aWdlZW4gY29uY2VudHJhdGllIHp1bGxlbiBoZWJiZW4gZGF0IGdlbWlkZGVsZCBzbGVjaHRzIDAuNTUlIGhvZ2VyIGxpZ3QuCgpEZSByZWRlbiBkYXQgd2UgZWVyZGVyIGVlbiB2ZXJzY2hpbCB2YW4gbWVlciBkYW4gMC43MiUgdm9uZGVuLCBrYW4gd29yZGVuIHZlcmtsYWFyZCBkb29yZGF0IHBhdGnDq250ZW4gbWV0IGVlbiB2ZXJzY2hpbCBpbiB0dW1vcnZvbHVtZSB2YWFrIG9vayB2ZXJzY2hpbGxlbiBpbiBwcm9zdGFhdCBnZXdpY2h0IGVuIHN2aSBzdGF0dXMgZW4gb21kYXQgcHJvc3RhYXQgZ2V3aWNodCBlbiBzdmkgbW9nZWxpamtzIG9vayBlZW4gYXNzb2NpYXRpZSB2ZXJ0b25lbiBtZXQgbG9nIFBTQQoKCmBgYHtyIG91dC53aWR0aD0nODAlJywgZmlnLmFzcD0uOCwgZmlnLmFsaWduPSdjZW50ZXInLCBtZXNzYWdlPUZBTFNFLGVjaG89RkFMU0V9CmxpYnJhcnkocGxvdDNEKQpncmlkLmxpbmVzID0gMTAKeCA8LSBwcm9zdGF0ZSRsY2F2b2wKeSA8LSBwcm9zdGF0ZSRsd2VpZ2h0CnogPC0gcHJvc3RhdGUkbHBzYQpmaXQgPC0gbG0oen54K3krc3ZpLGRhdGE9cHJvc3RhdGUpCngucHJlZCA8LSBzZXEobWluKHgpLCBtYXgoeCksIGxlbmd0aC5vdXQgPSBncmlkLmxpbmVzKQp5LnByZWQgPC0gc2VxKG1pbih5KSwgbWF4KHkpLCBsZW5ndGgub3V0ID0gZ3JpZC5saW5lcykKCiMgZml0dGVkIHBvaW50cyBmb3IgZHJvcGxpbmVzIHRvIHN1cmZhY2UKdGg9MjAKcGg9NQpzY2F0dGVyM0QoeCwgeSwgeiwgcGNoID0gMTYsY29sPWMoImRhcmtibHVlIiwicmVkIilbYXMuZG91YmxlKHByb3N0YXRlJHN2aSldLCBjZXggPSAuNzUsCiAgICB0aGV0YSA9IHRoLCBwaGkgPSBwaCwgdGlja3R5cGUgPSAiZGV0YWlsZWQiLAogICAgeGxhYiA9ICJsY2F2b2wiLCB5bGFiID0gImx3ZWlnaHQiLCB6bGFiID0gImxwc2EiLCAgCiAgIGNvbHZhcj1GQUxTRSxidHkgPSAiZyIpCgpmb3IgKGkgaW4gMTpucm93KHByb3N0YXRlKSkKbGluZXMzRCh4PXJlcChwcm9zdGF0ZSRsY2F2b2xbaV0sMikseT1yZXAocHJvc3RhdGUkbHdlaWdodFtpXSwyKSx6PWMocHJvc3RhdGUkbHBzYVtpXSxsbVZXUyRmaXRbaV0pLGNvbD1jKCJkYXJrYmx1ZSIsInJlZCIpW2FzLmRvdWJsZShwcm9zdGF0ZSRzdmkpW2ldXSxhZGQ9VFJVRSxsdHk9MikKCnoucHJlZDNEIDwtIG91dGVyKHgucHJlZCwgeS5wcmVkLCBmdW5jdGlvbih4LHkpIHtsbVZXUyRjb2VmWzFdK2xtVldTJGNvZWZbMl0qeCtsbVZXUyRjb2VmWzNdKnl9KQp4LnByZWQzRCA8LSBvdXRlcih4LnByZWQseS5wcmVkLGZ1bmN0aW9uKHgseSkgeCkKeS5wcmVkM0QgPC0gb3V0ZXIoeC5wcmVkLHkucHJlZCxmdW5jdGlvbih4LHkpIHkpCnN1cmYzRCh4LnByZWQzRCx5LnByZWQzRCx6LnByZWQzRCxjb2w9ImJsdWUiLGZhY2V0cz1OQSxhZGQ9VFJVRSkKejIucHJlZDNEIDwtIG91dGVyKHgucHJlZCwgeS5wcmVkLCBmdW5jdGlvbih4LHkpIHtsbVZXUyRjb2VmWzFdK2xtVldTJGNvZWZbNF0rbG1WV1MkY29lZlsyXSp4K2xtVldTJGNvZWZbM10qeX0pCnN1cmYzRCh4LnByZWQzRCx5LnByZWQzRCx6Mi5wcmVkM0QsY29sPSJyZWQiLGZhY2V0cz1OQSxhZGQ9VFJVRSkKYGBgCgojIEluZmVyZW50aWUKCi0gS3VubmVuIHdlIGhldGdlZW4gd2UgemllbiBpbiBkZSBzdGVla3Byb2VmIHZlcnRhbGVuIG5hYXIgZGUgcG9wdWxhdGllIHRvZT8KCi0gSGllcnZvb3IgbW9ldGVuIHdlIHJla2VuaW5nIGhvdWRlbiBkYXQgd2UgbWFhciBlZW4gaGVlbCBrbGVpbiBkZWVsIHZhbiBkZSBwb3B1bGF0aWUgaGViYmVuIGt1bm5lbiBiZW1vbnN0ZXJlbi4KCi0gR2V2ZW5zLCBzdGF0aXN0aWVrZW4gZW4gY29uY2x1c2llcyB6aWpuIHN0b2NoYXN0aXNjaC4gWmUgdmFyacOrcmVuIHZhbiBzdGVla3Byb2VmIHRvdCBzdGVla3Byb2VmLgoKLSBXZSBtb2V0ZW4gZGllIHZhcmlhYmlsaXRlaXQgaW4ga3VubmVuIHNjaGF0dGVuIG8uYi52LiDDqcOpbiBlbmtlbGUgc3RlZWtwcm9lZiEKCiMjIEFhbm5hbWVzPwojIyMgUmVwcmVzZW50YXRpZXZlIHN0ZWVrcHJvZWY6CgokXGhhdFxiZXRhX2okIGlzIGVlbiBvbnZlcnRla2VuZGUgc2NoYXR0ZXIgdmFuICRcYmV0YSQgYWxzIHN0ZWVrcHJvZWYgcmVwcmVzZW50YXRpZWYgaXMKClxbRVtcaGF0IFxiZXRhX2pdPVxiZXRhX2pcXQoKIyMjIE5vcm1hbGl0ZWl0CgpcW1lfe2l9IFxzaW0gTihcbXVfaSxcc2lnbWFeMilcXQpcW1lfaSBcc2ltIE4oXGJldGFfMCtcYmV0YV92eF97aXZ9K1xiZXRhX3d4X3tpd30gKyBcYmV0YV9zeF97aXN9LFxzaWdtYV4yKSAgXGxvbmdyaWdodGFycm93IFxoYXQgXGJldGFfaiBcc2ltIE4oXGJldGFfaiwgXHNpZ21hXjJfe1xoYXQgXGJldGFfan0pXF0KCmVuIGxpbmVhaXJlIGNvbWJpbmF0aWVzIHZhbiBkZSBtb2RlbCBwYXJhbWV0ZXJzY2hhdHRlcnMgemlqbiBvb2sgbm9ybWFhbCB2ZXJkZWVsZC4KClxbClxsb25ncmlnaHRhcnJvdyBMXlRcaGF0IFxiZXRhIFxzaW0gTihMXlRcYmV0YSwgXHNpZ21hXjJfe0xeVFxoYXR7XGJvbGRzeW1ib2x7XGJldGF9fX0pClxdCgojIyMgT25hZmhhbmtlbGlqa2hlaWQgZW4gZ2VsaWpraGVpZCB2YW4gdmFyaWFudGllCgpcW1xzaWdtYV4yX3tMXlRcaGF0e1xib2xkc3ltYm9se1xiZXRhfX19ID0gY19MIFxzaWdtYV4yIFxdCgotICRcc2lnbWFeMj8kCgpcW1xoYXQgXHNpZ21hXjIgPSBNU0UgPSBcc3VtXGxpbWl0c197aT0xfSBeIG4gXGZyYWN7KFlfaSAtIFxoYXQgWV9pKV4yfXtuLXB9XF0KClxbU0Vfe0xeVFxoYXR7XGJvbGRzeW1ib2x7XGJldGF9fX0gPSBjX0wgXGhhdCBcc2lnbWEgXF0KCi0gdCBzdGF0aXN0aWVrCgpcWyBUID0gXGZyYWN7TFxoYXR7XGJvbGRzeW1ib2x7XGJldGF9fSAtIExcYm9sZHN5bWJvbHtcYmV0YX19e1x0ZXh0e1NFfV97TFxoYXR7XGJvbGRzeW1ib2x7XGJldGF9fX19CiBcc2ltIHRfe24tcH1cXQoKLSBCSSBlbiBULXRlc3QgJEhfMDogTFxib2xkc3ltYm9se1xiZXRhfSA9IDAkIHZzICAkSF8xOiBMXGJvbGRzeW1ib2x7XGJldGF9IFxuZXEgMCQKCi0gRiBzdGF0aXN0aWVrIHZvbGd0IEYtdmVyZGVsaW5nIG9uZGVyIGRlICRIXzAkClxbIEYgPSBcZnJhY3tNU1JfMiAtIE1TUl8xfXtNU0V9IFxzaW0gRl97cF8yIC0gcF8xLG4tcF8yfVxdCgojIFIgLSBvdXRwdXQKCmBgYHtyfQpsaWJyYXJ5KGNhcikKc3VtbWFyeShsbVZXUykKQW5vdmEobG1WV1MsIHR5cGUgPSAiSUlJIikKYGBgCgojIENvbmNsdXNpZQoKRGUgYXNzb2NpYXRpZXMgdHVzc2VuIGxwc2EgJFxsZWZ0cmlnaHRhcnJvdyQgbG9nIGthbmtlciB2b2x1bWUsIGxwc2EgJFxsZWZ0cmlnaHRhcnJvdyQgbG9nIHByb3N0YWF0IGdld2ljaHQgZW4gbHBzYSAkXGxlZnRyaWdodGFycm93JCBzdGF0dXMgdmFuIGRlIHphYWRibGFhc2plcyB6aWpuIHJlc3BlY3RpZXZlbGlqayBleHRyZWVtIHNpZ25pZmljYW50ICgkcDw8MC4wMDEkKSBlbiBzdGVyayBzaWduaWZpY2FudCAoJHAgPSAwLjAwMSQgZW4gJHAgPSAwLjAwMiQpLgoKKyBpbnRlcnByZXRhdGllcyB2YW4gZGUgaGVsbGluZ2VuIGVuIEJJIQoKCiMgV2F0IGFscyBhYW5uYW1lcyBuaWV0IHppam4gdm9sZGFhbj8KCi0gTm9ybWFsaXRlaXQgZW4gaGV0ZXJvc2NlZGFzdGljaXRlaXQgbmlldCB2b2xkYWFuOiB0cmFuc2Zvcm1hdGllIHZhbiBZCi0gTGluZWFyaXRlaXQgbmlldCB2b2xkYWFuOiB0cmFuc2Zvcm1hdGllIHZhbiBYIG9mIGhvZ2VyZSBvcmRlIHRlcm1lbiAoaW50ZXJhY3RpZXMgZW4gbWFjaHRlbiAkWF4yLCBYXjMsIC4uLiQpLgotIE5vcm1hbGl0ZWl0IG5pZXQgdm9sZGFhbjogYmlqIGdyb3RlIHN0ZWVrcHJvZXZlbiBDTFQK