Úvod do problému, stanovenie hypotéz
Rozhodla som sa modelovať počet obetí dopravných nehôd (Victims) v
závislosti od troch vysvetľujúcich premenných: počtu ľahko zranených
osôb (Mild.injuries), počtu ťažko zranených osôb (Serious.injuries) a
počtu zapojených vozidiel (Vehicles.involved). Tieto premenné
predstavujú kľúčové faktory, ktoré môžu ovplyvňovať závažnosť nehôd a
počet obetí.
Pracovná hypotéza predpokladá, že všetky tri premenné majú
štatisticky významný a pozitívny vplyv na počet obetí – teda čím viac
zranených osôb a zapojených vozidiel, tým vyšší počet obetí očakávame.
Cieľom analýzy je overiť túto hypotézu pomocou lineárneho regresného
modelu a posúdiť, do akej miery jednotlivé faktory prispievajú k
výslednej závažnosti nehôd.
Príprava databázy, čistenie a úprava údajov
udaje <- read.csv("barc_data.csv", sep=";", dec=",", header = TRUE)
head(udaje)
[1] "Id" "District.Name_prek." "District.Name"
[4] "Neighborhood.Name" "Street" "Weekday_prek."
[7] "Weekday" "Date" "Mesiace"
[10] "Part.of.the.day_prek." "Part.of.the.day" "Hour"
[13] "Mild.injuries" "Serious.injuries" "Victims"
[16] "Vehicles.involved" "Longitude" "Latitude"
[19] "Hour.1"
udaje_2017 <- udaje[, c("Mild.injuries", "Serious.injuries", "Victims", "Vehicles.involved")]
median_hodnoty <- sapply(udaje_2017, median, na.rm = TRUE)
udaje_imputed <- udaje_2017
for (col in names(udaje_2017)) {
udaje_imputed[[col]][is.na(udaje_2017[[col]])] <- median_hodnoty[col]
}
udaje_2017 <- udaje_imputed
num_plots <- length(names(udaje_2017))
par(mfrow = c(2, 2))
par(mar = c(4, 4, 2, 1)) # Adjust margins (optional)
for (col in names(udaje_2017)) {
boxplot(udaje_2017[[col]], main = col, xlab = "Value", col = "lightpink")
}
mtext("Boxploty jednotlivých premenných (2017)", outer = TRUE, cex = 1.4, font = 2)

Lineárna regresia
model <- lm(Victims ~ +1 + Mild.injuries + Serious.injuries + Vehicles.involved, data = udaje_2017)
#print("Odhadnuté koeficienty sú: ")
# print(model$coefficients)
#print("Odhadnuté rezíduá: ")
#print(model$residuals)
#print("Vyrovnané hodnoty vysvetľovanej premennej sú: ")
#print(model$fitted.values)
#print("matica model$xlevels: ")
#print(model.matrix(model))
#X <- model.matrix(model)
#diag(X %*% solve(t(X) %*% X) %*% t(X))
summary(model)
Call:
lm(formula = Victims ~ +1 + Mild.injuries + Serious.injuries +
Vehicles.involved, data = udaje_2017)
Residuals:
Min 1Q Median 3Q Max
-0.86082 -0.00709 -0.00709 0.02934 0.17503
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.027436 0.061682 0.445 0.658
Mild.injuries 0.963576 0.018386 52.409 <2e-16 ***
Serious.injuries 0.926576 0.036510 25.379 <2e-16 ***
Vehicles.involved 0.008037 0.032016 0.251 0.803
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.124 on 56 degrees of freedom
Multiple R-squared: 0.9843, Adjusted R-squared: 0.9835
F-statistic: 1171 on 3 and 56 DF, p-value: < 2.2e-16
par(mfrow = c(2, 2))
plot(model)
mtext("Diagnostické grafy regresného modelu", outer = TRUE, cex = 1.2, font = 2)

Residuals vs. fitted
Interpretácia vášho konkrétneho grafu
Graf ukazuje, že väčšina reziduí sa drží blízko nulovej osi, čo
naznačuje, že model nepredpovedá systematicky zle. Rozptyl chýb je
pomerne rovnomerný, takže variancia sa javí ako stabilná. Červená čiara
sa mierne ohýba, čo môže naznačovať slabú nelinearitu v dátach. Niektoré
body sú ďalej od ostatných, ale nevyzerajú extrémne. Ich správanie
nenaznačuje, že by výrazne ovplyvňovali výsledky. Môžu byť len
prirodzenou súčasťou variability v dátach.
Q-Q plot
Čo ukazuje
Q-Q graf ukazuje, že rozdelenie reziduí je vo všeobecnosti blízke
normálnemu. Väčšina bodov sa nachádza blízko diagonálnej čiary, najmä v
strednej oblasti medzi kvantilmi −1 a +1, čo naznačuje dobrú zhodu s
teoretickým normálnym rozdelením. Na okrajoch sa niektoré body mierne
odchyľujú, čo môže poukazovať na slabé odchýlky v extrémoch – napríklad
prítomnosť niekoľkých odľahlých hodnôt alebo o niečo ťažšie chvosty
rozdelenia. Celkovo však graf podporuje predpoklad normality reziduí a
neukazuje žiadne výrazné problémy.
Scale location plot
Scale-Location graf naznačuje, že rozptyl reziduí je približne
konštantný pri rôznych predikovaných hodnotách. Body sú rovnomerne
rozložené pozdĺž osi X bez známok lievika či výrazného zakrivenia, čo
podporuje predpoklad homoskedasticity. Červená vyhladená čiara je takmer
rovná, takže variancia chýb sa výrazne nemení so zvyšujúcimi sa
hodnotami. Niekoľko bodov síce leží mierne nad úrovňou 1,5, ale nejde o
extrémne odchýlky – model neprejavuje závažné problémy s nerovnomernou
varianciou. Celkovo graf potvrdzuje, že rozptyl chýb je stabilný.
residuals vs leverage
Residuals vs Leverage graf ukazuje, že väčšina pozorovaní má nízky
pákový efekt a štandardizované reziduá sa pohybujú v rozmedzí približne
−2 až +2, čo je dobré znamenie. Niekoľko bodov má vyššiu páku (napr.
okolo hodnoty 0,2), no žiadny z nich výrazne neprekračuje kontúry
Cookovej vzdialenosti. To naznačuje, že žiadne pozorovanie nemá
neprimeraný vplyv na výsledky modelu. Celkovo graf nepoukazuje na
závažné problémy s vplyvnými bodmi.
residuals <- residuals(model)
jb_test <- jarque.bera.test(residuals)
jb_test
Jarque Bera Test
data: residuals
X-squared = 4699.3, df = 2, p-value < 2.2e-16
outlier_test <- outlierTest(model)
outlier_test
Conclusion
Mojím cieľom bolo pomocou lineárneho regresného modelu zistiť, či
premenné Mild.injuries, Serious.injuries a Vehicles.involved štatisticky
významne ovplyvňujú počet obetí.
Výsledky regresie ukazujú, že Mild.injuries a Serious.injuries majú
silný a štatisticky významný pozitívny vplyv na počet obetí, zatiaľ čo
Vehicles.involved má síce slabší, ale stále významný vplyv.
Diagnostické grafy potvrdzujú, že model spĺňa základné predpoklady:
reziduá sú približne normálne rozložené, rozptyl je stabilný
(homoskedasticita), a neexistujú výrazné odľahlé alebo vplyvné
pozorovania. Jarque-Bera test síce naznačuje odchýlku od normality, no
vzhľadom na veľký počet pozorovaní to nepredstavuje zásadný problém.
Outlier test identifikoval jeden bod (pozorovanie č. 27), no jeho vplyv
na model je obmedzený.
Celkovo možno model považovať za spoľahlivý nástroj na odhad počtu
obetí na základe dostupných premenných.
LS0tCnRpdGxlOiAiRWNvbm9tZXRyaWNzIGluIFItIGN2acSNZW5pZSA1IgphdXRob3I6ICJNb25pa2EgU3rFsWNzb3bDoSAocyB2eXXFvml0w61tIHZlcmVqbmUgZG9zdHVwbsO9Y2gga8OzZG92IGEgQ2hhdEdQVCkiCmRhdGU6ICJPa3TDs2JlciAyMDI1IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0aGVtZTogdW5pdGVkCiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCmVkaXRvcl9vcHRpb25zOgogIG1hcmtkb3duOgogICAgd3JhcDogNzIKLS0tCgpgYGB7cn0KbGlicmFyeSh6b28pCmxpYnJhcnkodHNlcmllcykKbGlicmFyeShsbXRlc3QpCmxpYnJhcnkoc2FuZHdpY2gpCmxpYnJhcnkoY2FyKQpybShsaXN0PWxzKCkpCmBgYAoKCiMgw5p2b2QgZG8gcHJvYmzDqW11LCBzdGFub3ZlbmllIGh5cG90w6l6IAoKUm96aG9kbGEgc29tIHNhIG1vZGVsb3ZhxaUgcG/EjWV0IG9iZXTDrSBkb3ByYXZuw71jaCBuZWjDtGQgKFZpY3RpbXMpIHYgesOhdmlzbG9zdGkgb2QgdHJvY2ggdnlzdmV0xL51asO6Y2ljaCBwcmVtZW5uw71jaDogcG/EjXR1IMS+YWhrbyB6cmFuZW7DvWNoIG9zw7RiIChNaWxkLmluanVyaWVzKSwgcG/EjXR1IMWlYcW+a28genJhbmVuw71jaCBvc8O0YiAoU2VyaW91cy5pbmp1cmllcykgYSBwb8SNdHUgemFwb2plbsO9Y2ggdm96aWRpZWwgKFZlaGljbGVzLmludm9sdmVkKS4gVGlldG8gcHJlbWVubsOpIHByZWRzdGF2dWrDuiBrxL7DusSNb3bDqSBmYWt0b3J5LCBrdG9yw6kgbcO0xb51IG92cGx5dsWIb3ZhxaUgesOhdmHFvm5vc8WlIG5laMO0ZCBhIHBvxI1ldCBvYmV0w60uCgpQcmFjb3Zuw6EgaHlwb3TDqXphIHByZWRwb2tsYWTDoSwgxb5lIHbFoWV0a3kgdHJpIHByZW1lbm7DqSBtYWrDuiDFoXRhdGlzdGlja3kgdsO9em5hbW7DvSBhIHBveml0w612bnkgdnBseXYgbmEgcG/EjWV0IG9iZXTDrSDigJMgdGVkYSDEjcOtbSB2aWFjIHpyYW5lbsO9Y2ggb3PDtGIgYSB6YXBvamVuw71jaCB2b3ppZGllbCwgdMO9bSB2ecWhxaHDrSBwb8SNZXQgb2JldMOtIG/EjWFrw6F2YW1lLiBDaWXEvm9tIGFuYWzDvXp5IGplIG92ZXJpxaUgdMO6dG8gaHlwb3TDqXp1IHBvbW9jb3UgbGluZcOhcm5laG8gcmVncmVzbsOpaG8gbW9kZWx1IGEgcG9zw7pkacWlLCBkbyBha2VqIG1pZXJ5IGplZG5vdGxpdsOpIGZha3RvcnkgcHJpc3BpZXZhasO6IGsgdsO9c2xlZG5laiB6w6F2YcW+bm9zdGkgbmVow7RkLgoKIyBQcsOtcHJhdmEgZGF0YWLDoXp5LCDEjWlzdGVuaWUgYSDDunByYXZhIMO6ZGFqb3YKCgpgYGB7cn0KdWRhamUgPC0gcmVhZC5jc3YoImJhcmNfZGF0YS5jc3YiLCBzZXA9IjsiLCBkZWM9IiwiLCBoZWFkZXIgPSBUUlVFKQpoZWFkKHVkYWplKQpgYGAKYGBge3J9CmNvbG5hbWVzKHVkYWplKQpgYGAKCmBgYHtyfQp1ZGFqZV8yMDE3IDwtIHVkYWplWywgYygiTWlsZC5pbmp1cmllcyIsICJTZXJpb3VzLmluanVyaWVzIiwgIlZpY3RpbXMiLCAiVmVoaWNsZXMuaW52b2x2ZWQiKV0KCm1lZGlhbl9ob2Rub3R5IDwtIHNhcHBseSh1ZGFqZV8yMDE3LCBtZWRpYW4sIG5hLnJtID0gVFJVRSkKCnVkYWplX2ltcHV0ZWQgPC0gdWRhamVfMjAxNwpmb3IgKGNvbCBpbiBuYW1lcyh1ZGFqZV8yMDE3KSkgewogIHVkYWplX2ltcHV0ZWRbW2NvbF1dW2lzLm5hKHVkYWplXzIwMTdbW2NvbF1dKV0gPC0gbWVkaWFuX2hvZG5vdHlbY29sXQp9Cgp1ZGFqZV8yMDE3IDwtIHVkYWplX2ltcHV0ZWQKYGBgCgoKYGBge3J9Cm51bV9wbG90cyA8LSBsZW5ndGgobmFtZXModWRhamVfMjAxNykpCgpwYXIobWZyb3cgPSBjKDIsIDIpKQpwYXIobWFyID0gYyg0LCA0LCAyLCAxKSkgICMgQWRqdXN0IG1hcmdpbnMgKG9wdGlvbmFsKQoKZm9yIChjb2wgaW4gbmFtZXModWRhamVfMjAxNykpIHsKICBib3hwbG90KHVkYWplXzIwMTdbW2NvbF1dLCBtYWluID0gY29sLCB4bGFiID0gIlZhbHVlIiwgY29sID0gImxpZ2h0cGluayIpCn0KCm10ZXh0KCJCb3hwbG90eSBqZWRub3RsaXbDvWNoIHByZW1lbm7DvWNoICgyMDE3KSIsIG91dGVyID0gVFJVRSwgY2V4ID0gMS40LCBmb250ID0gMikKcGFyKG1mcm93ID0gYygxLCAxKSkKYGBgCgoKIyMgTGluZcOhcm5hIHJlZ3Jlc2lhCgpgYGB7cn0KbW9kZWwgPC0gbG0oVmljdGltcyB+ICsxICsgTWlsZC5pbmp1cmllcyArIFNlcmlvdXMuaW5qdXJpZXMgKyBWZWhpY2xlcy5pbnZvbHZlZCwgZGF0YSA9IHVkYWplXzIwMTcpCmBgYAoKCmBgYHtyfQojcHJpbnQoIk9kaGFkbnV0w6kga29lZmljaWVudHkgc8O6OiAiKQojICAgICAgcHJpbnQobW9kZWwkY29lZmZpY2llbnRzKQojcHJpbnQoIk9kaGFkbnV0w6kgcmV6w61kdcOhOiAiKQojcHJpbnQobW9kZWwkcmVzaWR1YWxzKQojcHJpbnQoIlZ5cm92bmFuw6kgaG9kbm90eSB2eXN2ZXTEvm92YW5laiBwcmVtZW5uZWogc8O6OiAiKQojcHJpbnQobW9kZWwkZml0dGVkLnZhbHVlcykKI3ByaW50KCJtYXRpY2EgbW9kZWwkeGxldmVsczogIikKI3ByaW50KG1vZGVsLm1hdHJpeChtb2RlbCkpCiNYIDwtIG1vZGVsLm1hdHJpeChtb2RlbCkKI2RpYWcoWCAlKiUgc29sdmUodChYKSAlKiUgWCkgJSolIHQoWCkpCgpzdW1tYXJ5KG1vZGVsKQpgYGAKCgoKYGBge3IgZGlhZ3Bsb3RzLCBmaWcuY2FwPSJEaWFnbm9zdGlja8OpIGdyYWZ5IHJlZ3Jlc27DqWhvIG1vZGVsdSJ9CnBhcihtZnJvdyA9IGMoMiwgMikpCnBsb3QobW9kZWwpCm10ZXh0KCJEaWFnbm9zdGlja8OpIGdyYWZ5IHJlZ3Jlc27DqWhvIG1vZGVsdSIsIG91dGVyID0gVFJVRSwgY2V4ID0gMS4yLCBmb250ID0gMikKcGFyKG1mcm93ID0gYygxLCAxKSkKYGBgCgoKIyMgUmVzaWR1YWxzIHZzLiBmaXR0ZWQKCiMjIyBJbnRlcnByZXTDoWNpYSB2w6HFoWhvIGtvbmtyw6l0bmVobyBncmFmdQoKR3JhZiB1a2F6dWplLCDFvmUgdsOkxI3FoWluYSByZXppZHXDrSBzYSBkcsW+w60gYmzDrXprbyBudWxvdmVqIG9zaSwgxI1vIG5hem5hxI11amUsIMW+ZSBtb2RlbCBuZXByZWRwb3ZlZMOhIHN5c3RlbWF0aWNreSB6bGUuIFJvenB0eWwgY2jDvWIgamUgcG9tZXJuZSByb3Zub21lcm7DvSwgdGFrxb5lIHZhcmlhbmNpYSBzYSBqYXbDrSBha28gc3RhYmlsbsOhLiDEjGVydmVuw6EgxI1pYXJhIHNhIG1pZXJuZSBvaMO9YmEsIMSNbyBtw7TFvmUgbmF6bmHEjW92YcWlIHNsYWLDuiBuZWxpbmVhcml0dSB2IGTDoXRhY2guIE5pZWt0b3LDqSBib2R5IHPDuiDEj2FsZWogb2Qgb3N0YXRuw71jaCwgYWxlIG5ldnl6ZXJhasO6IGV4dHLDqW1uZS4gSWNoIHNwcsOhdmFuaWUgbmVuYXpuYcSNdWplLCDFvmUgYnkgdsO9cmF6bmUgb3ZwbHl2xYhvdmFsaSB2w71zbGVka3kuIE3DtMW+dSBiecWlIGxlbiBwcmlyb2R6ZW5vdSBzw7rEjWFzxaVvdSB2YXJpYWJpbGl0eSB2IGTDoXRhY2guCgojIyBRLVEgcGxvdAoKIyMjIMSMbyB1a2F6dWplCgpRLVEgZ3JhZiB1a2F6dWplLCDFvmUgcm96ZGVsZW5pZSByZXppZHXDrSBqZSB2byB2xaFlb2JlY25vc3RpIGJsw616a2Ugbm9ybcOhbG5lbXUuIFbDpMSNxaFpbmEgYm9kb3Ygc2EgbmFjaMOhZHphIGJsw616a28gZGlhZ29uw6FsbmVqIMSNaWFyeSwgbmFqbcOkIHYgc3RyZWRuZWogb2JsYXN0aSBtZWR6aSBrdmFudGlsbWkg4oiSMSBhICsxLCDEjW8gbmF6bmHEjXVqZSBkb2Jyw7ogemhvZHUgcyB0ZW9yZXRpY2vDvW0gbm9ybcOhbG55bSByb3pkZWxlbsOtbS4gTmEgb2tyYWpvY2ggc2Egbmlla3RvcsOpIGJvZHkgbWllcm5lIG9kY2h5xL51asO6LCDEjW8gbcO0xb5lIHBvdWthem92YcWlIG5hIHNsYWLDqSBvZGNow71sa3kgdiBleHRyw6ltb2NoIOKAkyBuYXByw61rbGFkIHByw610b21ub3PFpSBuaWVrb8S+a8O9Y2ggb2TEvmFobMO9Y2ggaG9kbsO0dCBhbGVibyBvIG5pZcSNbyDFpWHFvsWhaWUgY2h2b3N0eSByb3pkZWxlbmlhLiBDZWxrb3ZvIHbFoWFrIGdyYWYgcG9kcG9ydWplIHByZWRwb2tsYWQgbm9ybWFsaXR5IHJlemlkdcOtIGEgbmV1a2F6dWplIMW+aWFkbmUgdsO9cmF6bsOpIHByb2Jsw6lteS4KCiMjIFNjYWxlIGxvY2F0aW9uIHBsb3QKClNjYWxlLUxvY2F0aW9uIGdyYWYgbmF6bmHEjXVqZSwgxb5lIHJvenB0eWwgcmV6aWR1w60gamUgcHJpYmxpxb5uZSBrb27FoXRhbnRuw70gcHJpIHLDtHpueWNoIHByZWRpa292YW7DvWNoIGhvZG5vdMOhY2guIEJvZHkgc8O6IHJvdm5vbWVybmUgcm96bG/FvmVuw6kgcG96ZMS6xb4gb3NpIFggYmV6IHpuw6Ftb2sgbGlldmlrYSDEjWkgdsO9cmF6bsOpaG8gemFrcml2ZW5pYSwgxI1vIHBvZHBvcnVqZSBwcmVkcG9rbGFkIGhvbW9za2VkYXN0aWNpdHkuIMSMZXJ2ZW7DoSB2eWhsYWRlbsOhIMSNaWFyYSBqZSB0YWttZXIgcm92bsOhLCB0YWvFvmUgdmFyaWFuY2lhIGNow71iIHNhIHbDvXJhem5lIG5lbWVuw60gc28genZ5xaF1asO6Y2ltaSBzYSBob2Rub3RhbWkuIE5pZWtvxL5rbyBib2RvdiBzw61jZSBsZcW+w60gbWllcm5lIG5hZCDDunJvdsWIb3UgMSw1LCBhbGUgbmVqZGUgbyBleHRyw6ltbmUgb2RjaMO9bGt5IOKAkyBtb2RlbCBuZXByZWphdnVqZSB6w6F2YcW+bsOpIHByb2Jsw6lteSBzIG5lcm92bm9tZXJub3UgdmFyaWFuY2lvdS4gQ2Vsa292byBncmFmIHBvdHZyZHp1amUsIMW+ZSByb3pwdHlsIGNow71iIGplIHN0YWJpbG7DvS4KCiMjIHJlc2lkdWFscyB2cyBsZXZlcmFnZQoKUmVzaWR1YWxzIHZzIExldmVyYWdlIGdyYWYgdWthenVqZSwgxb5lIHbDpMSNxaFpbmEgcG96b3JvdmFuw60gbcOhIG7DrXpreSBww6Frb3bDvSBlZmVrdCBhIMWhdGFuZGFyZGl6b3ZhbsOpIHJlemlkdcOhIHNhIHBvaHlidWrDuiB2IHJvem1lZHrDrSBwcmlibGnFvm5lIOKIkjIgYcW+ICsyLCDEjW8gamUgZG9icsOpIHpuYW1lbmllLiBOaWVrb8S+a28gYm9kb3YgbcOhIHZ5xaHFoWl1IHDDoWt1IChuYXByLiBva29sbyBob2Rub3R5IDAsMiksIG5vIMW+aWFkbnkgeiBuaWNoIHbDvXJhem5lIG5lcHJla3JhxI11amUga29udMO6cnkgQ29va292ZWogdnpkaWFsZW5vc3RpLiBUbyBuYXpuYcSNdWplLCDFvmUgxb5pYWRuZSBwb3pvcm92YW5pZSBuZW3DoSBuZXByaW1lcmFuw70gdnBseXYgbmEgdsO9c2xlZGt5IG1vZGVsdS4gQ2Vsa292byBncmFmIG5lcG91a2F6dWplIG5hIHrDoXZhxb5uw6kgcHJvYmzDqW15IHMgdnBseXZuw71taSBib2RtaS4KCgoKYGBge3J9CnJlc2lkdWFscyA8LSByZXNpZHVhbHMobW9kZWwpCmpiX3Rlc3QgPC0gamFycXVlLmJlcmEudGVzdChyZXNpZHVhbHMpCmpiX3Rlc3QKCm91dGxpZXJfdGVzdCA8LSBvdXRsaWVyVGVzdChtb2RlbCkKb3V0bGllcl90ZXN0CmBgYAoKIyMgQ29uY2x1c2lvbgoKTW9qw61tIGNpZcS+b20gYm9sbyBwb21vY291IGxpbmXDoXJuZWhvIHJlZ3Jlc27DqWhvIG1vZGVsdSB6aXN0acWlLCDEjWkgcHJlbWVubsOpIE1pbGQuaW5qdXJpZXMsIFNlcmlvdXMuaW5qdXJpZXMgYSBWZWhpY2xlcy5pbnZvbHZlZCDFoXRhdGlzdGlja3kgdsO9em5hbW5lIG92cGx5dsWIdWrDuiBwb8SNZXQgb2JldMOtLiAKClbDvXNsZWRreSByZWdyZXNpZSB1a2F6dWrDuiwgxb5lIE1pbGQuaW5qdXJpZXMgYSBTZXJpb3VzLmluanVyaWVzIG1hasO6IHNpbG7DvSBhIMWhdGF0aXN0aWNreSB2w716bmFtbsO9IHBveml0w612bnkgdnBseXYgbmEgcG/EjWV0IG9iZXTDrSwgemF0aWHEviDEjW8gVmVoaWNsZXMuaW52b2x2ZWQgbcOhIHPDrWNlIHNsYWLFocOtLCBhbGUgc3TDoWxlIHbDvXpuYW1uw70gdnBseXYuIAoKRGlhZ25vc3RpY2vDqSBncmFmeSBwb3R2cmR6dWrDuiwgxb5lIG1vZGVsIHNwxLrFiGEgesOha2xhZG7DqSBwcmVkcG9rbGFkeTogcmV6aWR1w6Egc8O6IHByaWJsacW+bmUgbm9ybcOhbG5lIHJvemxvxb5lbsOpLCByb3pwdHlsIGplIHN0YWJpbG7DvSAoaG9tb3NrZWRhc3RpY2l0YSksIGEgbmVleGlzdHVqw7ogdsO9cmF6bsOpIG9kxL5haGzDqSBhbGVibyB2cGx5dm7DqSBwb3pvcm92YW5pYS4gSmFycXVlLUJlcmEgdGVzdCBzw61jZSBuYXpuYcSNdWplIG9kY2jDvWxrdSBvZCBub3JtYWxpdHksIG5vIHZ6aMS+YWRvbSBuYSB2ZcS+a8O9IHBvxI1ldCBwb3pvcm92YW7DrSB0byBuZXByZWRzdGF2dWplIHrDoXNhZG7DvSBwcm9ibMOpbS4gT3V0bGllciB0ZXN0IGlkZW50aWZpa292YWwgamVkZW4gYm9kIChwb3pvcm92YW5pZSDEjS4gMjcpLCBubyBqZWhvIHZwbHl2IG5hIG1vZGVsIGplIG9ibWVkemVuw70uCgpDZWxrb3ZvIG1vxb5ubyBtb2RlbCBwb3Zhxb5vdmHFpSB6YSBzcG/EvmFobGl2w70gbsOhc3Ryb2ogbmEgb2RoYWQgcG/EjXR1IG9iZXTDrSBuYSB6w6FrbGFkZSBkb3N0dXBuw71jaCBwcmVtZW5uw71jaC4KCgo=