Načítanie dát

econ <- read.csv("economics.csv")
str(econ)
'data.frame':   574 obs. of  7 variables:
 $ X       : int  1 2 3 4 5 6 7 8 9 10 ...
 $ date    : chr  "1967-07-01" "1967-08-01" "1967-09-01" "1967-10-01" ...
 $ pce     : num  507 510 516 512 517 ...
 $ pop     : num  198712 198911 199113 199311 199498 ...
 $ psavert : num  12.6 12.6 11.9 12.9 12.8 11.8 11.7 12.3 11.7 12.3 ...
 $ uempmed : num  4.5 4.7 4.6 4.9 4.7 4.8 5.1 4.5 4.1 4.6 ...
 $ unemploy: int  2944 2945 2958 3143 3066 3018 2878 3001 2877 2709 ...
summary(econ)
       X             date                pce         
 Min.   :  1.0   Length:574         Min.   :  506.7  
 1st Qu.:144.2   Class :character   1st Qu.: 1578.3  
 Median :287.5   Mode  :character   Median : 3936.8  
 Mean   :287.5                      Mean   : 4820.1  
 3rd Qu.:430.8                      3rd Qu.: 7626.3  
 Max.   :574.0                      Max.   :12193.8  
      pop            psavert          uempmed      
 Min.   :198712   Min.   : 2.200   Min.   : 4.000  
 1st Qu.:224896   1st Qu.: 6.400   1st Qu.: 6.000  
 Median :253060   Median : 8.400   Median : 7.500  
 Mean   :257160   Mean   : 8.567   Mean   : 8.609  
 3rd Qu.:290291   3rd Qu.:11.100   3rd Qu.: 9.100  
 Max.   :320402   Max.   :17.300   Max.   :25.200  
    unemploy    
 Min.   : 2685  
 1st Qu.: 6284  
 Median : 7494  
 Mean   : 7771  
 3rd Qu.: 8686  
 Max.   :15352  

udaje <- read.csv("economics.csv")
model <- lm(pce ~ unemploy + psavert + pop, 
            data = udaje)

summary(model)

Call:
lm(formula = pce ~ unemploy + psavert + pop, data = udaje)

Residuals:
     Min       1Q   Median       3Q      Max 
-1045.64  -360.58   -71.61   392.67  1308.28 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -2.547e+04  4.344e+02 -58.617   <2e-16 ***
unemploy    -1.085e-01  1.175e-02  -9.238   <2e-16 ***
psavert      2.019e+02  1.477e+01  13.667   <2e-16 ***
pop          1.143e-01  1.467e-03  77.907   <2e-16 ***
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 490.8 on 570 degrees of freedom
Multiple R-squared:  0.9811,    Adjusted R-squared:  0.981 
F-statistic:  9841 on 3 and 570 DF,  p-value: < 2.2e-16

Všetky premenné sú extrémne významné. Populácia a úspory majú silný pozitívny vzťah so spotrebou. Nezamestnanosť má slabý, ale štatisticky významný negatívny vplyv.

Vizualizácia vybraných premenných

plot(econ$unemploy, type="l", main="Nezamestnanosť")

plot(econ$pce, type="l", main="Osobná spotreba (PCE)")

Krivka nezamestnanosti má „cik-cak“ vzor. Môžme vidieť sezónnosť.

Krivka osobnej spotreby ide neustále hore – od hodnoty približne 1000 až po viac ako 12 000. To znamená, že spotreba domácností v USA dlhodobo rástla. Žiadna sezónnosť - Čiarkovaná línia, nemá žiadny opakujúci sa „cik-cak“ vzor narozdiel od krivky nezamestnanosti.

Jednoduchý regresný model

Vysvetlím miera nezamestnanosti (unemploy) pomocou osobnej spotreby (pce).

model1 <- lm(unemploy ~ pce, data=econ)
summary(model1)

Call:
lm(formula = unemploy ~ pce, data = econ)

Residuals:
    Min      1Q  Median      3Q     Max 
-3215.3 -1546.3  -388.8  1485.8  5493.2 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 5571.1416   146.7269   37.97   <2e-16 ***
pce            0.4565     0.0245   18.63   <2e-16 ***
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2086 on 572 degrees of freedom
Multiple R-squared:  0.3776,    Adjusted R-squared:  0.3765 
F-statistic: 347.1 on 1 and 572 DF,  p-value: < 2.2e-16

Koeficient pce je významný, ale pravdepodobne zachytáva len spoločný trend, nie reálny vzťah. R² je nízke (≈0.38), model nevysvetľuje nezamestnanosť dobre. Interpretácia je ekonomicky nelogická.

Viacnásobný regresný model

Vysvetlím nezamestnanosť pomocou viacerých premenných.

model2 <- lm(unemploy ~ pce + pop + uempmed, data=econ)
summary(model2)

Call:
lm(formula = unemploy ~ pce + pop + uempmed, data = econ)

Residuals:
    Min      1Q  Median      3Q     Max 
-3182.4  -733.1   -38.1   645.8  3749.1 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -2.659e+04  1.585e+03  -16.78   <2e-16 ***
pce         -1.510e+00  8.132e-02  -18.56   <2e-16 ***
pop          1.406e-01  7.531e-03   18.67   <2e-16 ***
uempmed      6.370e+02  1.560e+01   40.84   <2e-16 ***
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1030 on 570 degrees of freedom
Multiple R-squared:  0.8488,    Adjusted R-squared:  0.848 
F-statistic:  1067 on 3 and 570 DF,  p-value: < 2.2e-16

Model ukazuje, že počet nezamestnaných najlepšie vysvetľuje dĺžka nezamestnanosti a populácia, zatiaľ čo negatívna väzba s PCE je pravdepodobne dôsledkom trendu v časovej rade, nie skutočného ekonomického vzťahu.

Multikolinearita – VIF

library(car)
vif(model2)
      pce       pop   uempmed 
45.187660 41.216070  2.216113 

Výstup ukazuje, že model má extrémne vysokú multikolinearitu medzi premennými pce a pop, čo spôsobuje, že ich koeficienty sú veľmi nespoľahlivé a ich vplyv na nezamestnanosť nemožno z modelu dôveryhodne interpretovať.

Korelačná matica

vars <- econ[, c("pce", "pop", "uempmed", "unemploy")]
round(cor(vars, use="complete.obs"), 3)
           pce   pop uempmed unemploy
pce      1.000 0.987   0.727    0.615
pop      0.987 1.000   0.695    0.634
uempmed  0.727 0.695   1.000    0.869
unemploy 0.615 0.634   0.869    1.000

Pce(spotreba domácností) a pop(populácia) sú veľmi silne korelované (logické – väčšia populácia spotrebuje viac).

Uempmed(doba nezamestnanosti) a unemploy(počet nezamestnaných) sú tiež veľmi silne korelované (dlhšia nezamestnanosť súvisí s väčším počtom nezamestnaných).

Všetky premenné sú medzi sebou pozitívne korelované, žiadna nie je negatívne korelovaná.

pairs(vars,
      main = "Scatterplotová matica – premenné pce, pop, uempmed, unemploy")

Condition Number

library(MASS)
x <- model.matrix(model2)[, -1]
sv <- svd(x)$d
condition_number <- max(sv) / min(sv)
condition_number
[1] 91271.39

Číslo podmienky ~ 91 271 je extrémne vysoké. Prakticky to znamená že matica je silne kolineárna – niektoré premenné sú takmer lineárne závislé.

PCA

vars <- econ[, c("pce", "pop", "uempmed", "unemploy")]

pca_res <- prcomp(vars, center = TRUE, scale. = TRUE)  

summary(pca_res)
Importance of components:
                          PC1    PC2    PC3     PC4
Standard deviation     1.8072 0.7743 0.3572 0.08321
Proportion of Variance 0.8165 0.1499 0.0319 0.00173
Cumulative Proportion  0.8165 0.9664 0.9983 1.00000
pca_res$rotation  
               PC1        PC2         PC3        PC4
pce      0.5120962  0.4817677 -0.08517838  0.7059759
pop      0.5099582  0.4850154  0.22550790 -0.6736831
uempmed  0.5026852 -0.4187833 -0.73740369 -0.1678212
unemploy 0.4743498 -0.5977294  0.63097277  0.1399470
head(pca_res$x)
           PC1        PC2        PC3       PC4
[1,] -2.803222 0.15410408 -0.6711345 0.1294587
[2,] -2.775348 0.13653351 -0.7056593 0.1182991
[3,] -2.781611 0.14724649 -0.6834953 0.1205157
[4,] -2.709410 0.07695554 -0.6918826 0.1137444
[5,] -2.744368 0.11794864 -0.6733345 0.1154366
[6,] -2.737427 0.12175595 -0.7019615 0.1074157

Dáta sú vysoko korelované. PC1 vysvetľuje väčšinu variability (81,6%) – dá sa považovať za hlavnú dimenziu dát. PC2 zachytáva kontrast medzi ekonomickými veličinami (pce, pop) a nezamestnanosťou (uempmed, unemploy). PC3 a PC4 sú zanedbateľné, takže dá sa znížiť dimenzionalita z 4 na 2 bez veľkej straty informácií.

Škálovanie vysvetľujúcich premenných

econ_scaled <- econ
econ_scaled[, c("pce", "pop", "uempmed")] <- scale(econ_scaled[, c("pce", "pop", "uempmed")])

Model so škálovanými premennými

model_scaled <- lm(unemploy ~ pce + pop + uempmed, data = econ_scaled)

summary(model_scaled)

Call:
lm(formula = unemploy ~ pce + pop + uempmed, data = econ_scaled)

Residuals:
    Min      1Q  Median      3Q     Max 
-3182.4  -733.1   -38.1   645.8  3749.1 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  7771.31      42.99  180.76   <2e-16 ***
pce         -5369.67     289.25  -18.56   <2e-16 ***
pop          5157.45     276.24   18.67   <2e-16 ***
uempmed      2615.76      64.06   40.84   <2e-16 ***
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1030 on 570 degrees of freedom
Multiple R-squared:  0.8488,    Adjusted R-squared:  0.848 
F-statistic:  1067 on 3 and 570 DF,  p-value: < 2.2e-16

Po škálovaní sa koeficienty dostali na porovnateľnú mierku. Všetky premenné sú stále veľmi významné. Populácia a medián dĺžky nezamestnanosti zvyšujú počet nezamestnaných, zatiaľ čo PCE ho znižuje. Hodnota R² (~0.85) ukazuje, že model vysvetľuje veľkú časť variability.

Dôležité je, že škálovanie neodstránilo multikolinearitu – vysoká závislosť medzi pce a pop zostáva. Škálovanie iba stabilizuje výpočty, ale samotný problém nevyrieši.

LS0tCnRpdGxlOiAiTXVsdGlrb2xpbmVhcml0YSIKYXV0aG9yOiBBbGljYSBUdnJkw6EKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBlY2hvID0gVFJVRSwKICBtZXNzYWdlID0gRkFMU0UsCiAgd2FybmluZyA9IEZBTFNFCikKYGBgCgojIE5hxI3DrXRhbmllIGTDoXQKYGBge3J9CmVjb24gPC0gcmVhZC5jc3YoImVjb25vbWljcy5jc3YiKQpzdHIoZWNvbikKc3VtbWFyeShlY29uKQpgYGAKCi0tLQpgYGB7cn0KdWRhamUgPC0gcmVhZC5jc3YoImVjb25vbWljcy5jc3YiKQptb2RlbCA8LSBsbShwY2UgfiB1bmVtcGxveSArIHBzYXZlcnQgKyBwb3AsIAogICAgICAgICAgICBkYXRhID0gdWRhamUpCgpzdW1tYXJ5KG1vZGVsKQpgYGAKVsWhZXRreSBwcmVtZW5uw6kgc8O6IGV4dHLDqW1uZSB2w716bmFtbsOpLiBQb3B1bMOhY2lhIGEgw7pzcG9yeSBtYWrDuiBzaWxuw70gcG96aXTDrXZueSB2esWlYWggc28gc3BvdHJlYm91LiBOZXphbWVzdG5hbm9zxaUgbcOhIHNsYWLDvSwgYWxlIMWhdGF0aXN0aWNreSB2w716bmFtbsO9IG5lZ2F0w612bnkgdnBseXYuCgoKCiMgVml6dWFsaXrDoWNpYSB2eWJyYW7DvWNoIHByZW1lbm7DvWNoCmBgYHtyfQpwbG90KGVjb24kdW5lbXBsb3ksIHR5cGU9ImwiLCBtYWluPSJOZXphbWVzdG5hbm9zxaUiKQpwbG90KGVjb24kcGNlLCB0eXBlPSJsIiwgbWFpbj0iT3NvYm7DoSBzcG90cmViYSAoUENFKSIpCmBgYApLcml2a2EgbmV6YW1lc3RuYW5vc3RpIG3DoSDigJ5jaWstY2Fr4oCcIHZ6b3IuIE3DtMW+bWUgdmlkaWXFpSBzZXrDs25ub3PFpS4gCgpLcml2a2Egb3NvYm5laiBzcG90cmVieSBpZGUgbmV1c3TDoWxlIGhvcmUg4oCTIG9kIGhvZG5vdHkgcHJpYmxpxb5uZSAxMDAwIGHFviBwbyB2aWFjIGFrbyAxMiAwMDAuIFRvIHpuYW1lbsOhLCDFvmUgc3BvdHJlYmEgZG9tw6Fjbm9zdMOtIHYgVVNBIGRsaG9kb2JvIHLDoXN0bGEuIMW9aWFkbmEgc2V6w7Nubm9zxaUgLSDEjGlhcmtvdmFuw6EgbMOtbmlhLCBuZW3DoSDFvmlhZG55IG9wYWt1asO6Y2kgc2Eg4oCeY2lrLWNha+KAnCB2em9yIG5hcm96ZGllbCBvZCBrcml2a3kgbmV6YW1lc3RuYW5vc3RpLgoKIyBKZWRub2R1Y2jDvSByZWdyZXNuw70gbW9kZWwKVnlzdmV0bMOtbSAqKm1pZXJhIG5lemFtZXN0bmFub3N0aSoqIChgdW5lbXBsb3lgKSBwb21vY291ICoqb3NvYm5laiBzcG90cmVieSoqIChgcGNlYCkuCgpgYGB7cn0KbW9kZWwxIDwtIGxtKHVuZW1wbG95IH4gcGNlLCBkYXRhPWVjb24pCnN1bW1hcnkobW9kZWwxKQpgYGAKS29lZmljaWVudCBwY2UgamUgdsO9em5hbW7DvSwgYWxlIHByYXZkZXBvZG9ibmUgemFjaHl0w6F2YSBsZW4gc3BvbG/EjW7DvSB0cmVuZCwgbmllIHJlw6FsbnkgdnrFpWFoLiBSwrIgamUgbsOtemtlICjiiYgwLjM4KSwgbW9kZWwgbmV2eXN2ZXTEvnVqZSBuZXphbWVzdG5hbm9zxaUgZG9icmUuIEludGVycHJldMOhY2lhIGplIGVrb25vbWlja3kgbmVsb2dpY2vDoS4KCiMgVmlhY27DoXNvYm7DvSByZWdyZXNuw70gbW9kZWwKVnlzdmV0bMOtbSBuZXphbWVzdG5hbm9zxaUgcG9tb2NvdSB2aWFjZXLDvWNoIHByZW1lbm7DvWNoLgoKYGBge3J9Cm1vZGVsMiA8LSBsbSh1bmVtcGxveSB+IHBjZSArIHBvcCArIHVlbXBtZWQsIGRhdGE9ZWNvbikKc3VtbWFyeShtb2RlbDIpCmBgYApNb2RlbCB1a2F6dWplLCDFvmUgcG/EjWV0IG5lemFtZXN0bmFuw71jaCBuYWpsZXDFoWllIHZ5c3ZldMS+dWplIGTEusW+a2EgbmV6YW1lc3RuYW5vc3RpIGEgcG9wdWzDoWNpYSwgemF0aWHEviDEjW8gbmVnYXTDrXZuYSB2w6R6YmEgcyBQQ0UgamUgcHJhdmRlcG9kb2JuZSBkw7RzbGVka29tIHRyZW5kdSB2IMSNYXNvdmVqIHJhZGUsIG5pZSBza3V0b8SNbsOpaG8gZWtvbm9taWNrw6lobyB2esWlYWh1LgoKIyBNdWx0aWtvbGluZWFyaXRhIOKAkyBWSUYKYGBge3J9CmxpYnJhcnkoY2FyKQp2aWYobW9kZWwyKQpgYGAKVsO9c3R1cCB1a2F6dWplLCDFvmUgbW9kZWwgbcOhIGV4dHLDqW1uZSB2eXNva8O6IG11bHRpa29saW5lYXJpdHUgbWVkemkgcHJlbWVubsO9bWkgcGNlIGEgcG9wLCDEjW8gc3DDtHNvYnVqZSwgxb5lIGljaCBrb2VmaWNpZW50eSBzw7ogdmXEvm1pIG5lc3BvxL5haGxpdsOpIGEgaWNoIHZwbHl2IG5hIG5lemFtZXN0bmFub3PFpSBuZW1vxb5ubyB6IG1vZGVsdSBkw7R2ZXJ5aG9kbmUgaW50ZXJwcmV0b3ZhxaUuCgojIEtvcmVsYcSNbsOhIG1hdGljYQpgYGB7cn0KdmFycyA8LSBlY29uWywgYygicGNlIiwgInBvcCIsICJ1ZW1wbWVkIiwgInVuZW1wbG95IildCnJvdW5kKGNvcih2YXJzLCB1c2U9ImNvbXBsZXRlLm9icyIpLCAzKQpgYGAKUGNlKHNwb3RyZWJhIGRvbcOhY25vc3TDrSkgYSBwb3AocG9wdWzDoWNpYSkgc8O6IHZlxL5taSBzaWxuZSBrb3JlbG92YW7DqSAobG9naWNrw6kg4oCTIHbDpMSNxaFpYSBwb3B1bMOhY2lhIHNwb3RyZWJ1amUgdmlhYykuCgpVZW1wbWVkKGRvYmEgbmV6YW1lc3RuYW5vc3RpKSBhIHVuZW1wbG95KHBvxI1ldCBuZXphbWVzdG5hbsO9Y2gpIHPDuiB0aWXFviB2ZcS+bWkgc2lsbmUga29yZWxvdmFuw6kgKGRsaMWhaWEgbmV6YW1lc3RuYW5vc8WlIHPDunZpc8OtIHMgdsOkxI3FocOtbSBwb8SNdG9tIG5lemFtZXN0bmFuw71jaCkuCgpWxaFldGt5IHByZW1lbm7DqSBzw7ogbWVkemkgc2Vib3UgcG96aXTDrXZuZSBrb3JlbG92YW7DqSwgxb5pYWRuYSBuaWUgamUgbmVnYXTDrXZuZSBrb3JlbG92YW7DoS4KCmBgYHtyfQpwYWlycyh2YXJzLAogICAgICBtYWluID0gIlNjYXR0ZXJwbG90b3bDoSBtYXRpY2Eg4oCTIHByZW1lbm7DqSBwY2UsIHBvcCwgdWVtcG1lZCwgdW5lbXBsb3kiKQpgYGAKCgojIENvbmRpdGlvbiBOdW1iZXIKYGBge3J9CmxpYnJhcnkoTUFTUykKeCA8LSBtb2RlbC5tYXRyaXgobW9kZWwyKVssIC0xXQpzdiA8LSBzdmQoeCkkZApjb25kaXRpb25fbnVtYmVyIDwtIG1heChzdikgLyBtaW4oc3YpCmNvbmRpdGlvbl9udW1iZXIKYGBgCsSMw61zbG8gcG9kbWllbmt5IH4gOTEgMjcxIGplIGV4dHLDqW1uZSB2eXNva8OpLiBQcmFrdGlja3kgdG8gem5hbWVuw6Egxb5lIG1hdGljYSBqZSBzaWxuZSBrb2xpbmXDoXJuYSDigJMgbmlla3RvcsOpIHByZW1lbm7DqSBzw7ogdGFrbWVyIGxpbmXDoXJuZSB6w6F2aXNsw6kuCgojIFBDQQoKYGBge3J9CnZhcnMgPC0gZWNvblssIGMoInBjZSIsICJwb3AiLCAidWVtcG1lZCIsICJ1bmVtcGxveSIpXQoKcGNhX3JlcyA8LSBwcmNvbXAodmFycywgY2VudGVyID0gVFJVRSwgc2NhbGUuID0gVFJVRSkgIAoKc3VtbWFyeShwY2FfcmVzKQoKcGNhX3JlcyRyb3RhdGlvbiAgCgpoZWFkKHBjYV9yZXMkeCkKYGBgCkTDoXRhIHPDuiB2eXNva28ga29yZWxvdmFuw6kuIFBDMSB2eXN2ZXTEvnVqZSB2w6TEjcWhaW51IHZhcmlhYmlsaXR5ICg4MSw2JSkg4oCTIGTDoSBzYSBwb3Zhxb5vdmHFpSB6YSBobGF2bsO6IGRpbWVueml1IGTDoXQuIFBDMiB6YWNoeXTDoXZhIGtvbnRyYXN0IG1lZHppIGVrb25vbWlja8O9bWkgdmVsacSNaW5hbWkgKHBjZSwgcG9wKSBhIG5lemFtZXN0bmFub3PFpW91ICh1ZW1wbWVkLCB1bmVtcGxveSkuIFBDMyBhIFBDNCBzw7ogemFuZWRiYXRlxL5uw6ksIHRha8W+ZSBkw6Egc2Egem7DrcW+acWlIGRpbWVuemlvbmFsaXRhIHogNCBuYSAyIGJleiB2ZcS+a2VqIHN0cmF0eSBpbmZvcm3DoWNpw60uCgojIMWga8OhbG92YW5pZSB2eXN2ZXTEvnVqw7pjaWNoIHByZW1lbm7DvWNoCmBgYHtyfQplY29uX3NjYWxlZCA8LSBlY29uCmVjb25fc2NhbGVkWywgYygicGNlIiwgInBvcCIsICJ1ZW1wbWVkIildIDwtIHNjYWxlKGVjb25fc2NhbGVkWywgYygicGNlIiwgInBvcCIsICJ1ZW1wbWVkIildKQpgYGAKCgojIE1vZGVsIHNvIMWha8OhbG92YW7DvW1pIHByZW1lbm7DvW1pCmBgYHtyfQptb2RlbF9zY2FsZWQgPC0gbG0odW5lbXBsb3kgfiBwY2UgKyBwb3AgKyB1ZW1wbWVkLCBkYXRhID0gZWNvbl9zY2FsZWQpCgpzdW1tYXJ5KG1vZGVsX3NjYWxlZCkKYGBgClBvIMWha8OhbG92YW7DrSBzYSBrb2VmaWNpZW50eSBkb3N0YWxpIG5hIHBvcm92bmF0ZcS+bsO6IG1pZXJrdS4gVsWhZXRreSBwcmVtZW5uw6kgc8O6IHN0w6FsZSB2ZcS+bWkgdsO9em5hbW7DqS4gUG9wdWzDoWNpYSBhIG1lZGnDoW4gZMS6xb5reSBuZXphbWVzdG5hbm9zdGkgenZ5xaF1asO6IHBvxI1ldCBuZXphbWVzdG5hbsO9Y2gsIHphdGlhxL4gxI1vIFBDRSBobyB6bmnFvnVqZS4gSG9kbm90YSBSwrIgKH4wLjg1KSB1a2F6dWplLCDFvmUgbW9kZWwgdnlzdmV0xL51amUgdmXEvmvDuiDEjWFzxaUgdmFyaWFiaWxpdHkuCgpEw7RsZcW+aXTDqSBqZSwgxb5lIMWha8OhbG92YW5pZSBuZW9kc3Ryw6FuaWxvIG11bHRpa29saW5lYXJpdHUg4oCTIHZ5c29rw6EgesOhdmlzbG9zxaUgbWVkemkgcGNlIGEgcG9wIHpvc3TDoXZhLiDFoGvDoWxvdmFuaWUgaWJhIHN0YWJpbGl6dWplIHbDvXBvxI10eSwgYWxlIHNhbW90bsO9IHByb2Jsw6ltIG5ldnlyaWXFoWkuCg==