udaje <- read.csv("dataEKONOMETRIA.csv")
udaje
# Skontrolujeme názvy stĺpcov

colnames(udaje)
[1] "Nazov"       "Kategoria"   "Forma"       "ROE"         "ROA"        
[6] "EBIT"        "EBITDAmarza" "M"           "Z"          
# Skontrolujeme štruktúru dát

str(udaje)
'data.frame':   53 obs. of  9 variables:
 $ Nazov      : chr  "Accenture, s.r.o." "Beiersdorf Slovakia, s.r.o." "Beko Manufacturing Slovakia spol. s r.o." "BILLA  s.r.o." ...
 $ Kategoria  : int  3 1 4 5 3 4 4 3 4 4 ...
 $ Forma      : chr  "sro" "sro" "sro" "sro" ...
 $ ROE        : num  0.2702 0.2938 0.6643 0.0956 0.1223 ...
 $ ROA        : num  0.0788 0.0801 0.0553 0.0363 0.0216 ...
 $ EBIT       : chr  "1,250,080.00" "1,072,061.00" "12,586,000.00" "19,677,000.00" ...
 $ EBITDAmarza: num  0.139 0.0339 0.0567 0.0803 0 ...
 $ M          : int  1 2 6 5 6 4 7 0 10 1 ...
 $ Z          : int  0 1 0 3 2 0 4 2 7 0 ...
# Skontrolujeme niekoľko prvých riadkov

head(udaje)
NA
library(ggplot2)

# Scatter plot: vzťah medzi ROA a ROE
ggplot(udaje, aes(x = ROA, y = ROE)) +
  geom_point(color = "steelblue", size = 2) +     # typ grafu – bodový
  theme_minimal() +
  labs(
    title = "Vzťah medzi ROA a ROE",
    x = "Návratnosť aktív (ROA)",
    y = "Návratnosť vlastného kapitálu (ROE)"
  )

library(dplyr)
library(knitr)

# Základné štatistiky ROE podľa kategórie
roe.stats <- udaje %>%
  group_by(Kategoria) %>%
  summarise(
    n      = n(),
    mean   = mean(ROE, na.rm = TRUE),
    sd     = sd(ROE, na.rm = TRUE),
    min    = min(ROE, na.rm = TRUE),
    q25    = quantile(ROE, 0.25, na.rm = TRUE),
    median = median(ROE, na.rm = TRUE),
    q75    = quantile(ROE, 0.75, na.rm = TRUE),
    max    = max(ROE, na.rm = TRUE),
    .groups = "drop"
  )
kable(roe.stats, digits = 2, caption = "Základné štatistiky ukazovateľa ROE podľa kategórie firmy")
Základné štatistiky ukazovateľa ROE podľa kategórie firmy
Kategoria n mean sd min q25 median q75 max
1 4 0.10 0.79 -0.95 -0.16 0.20 0.46 0.94
2 12 0.12 0.78 -1.84 0.03 0.08 0.78 1.00
3 16 0.28 0.26 0.08 0.12 0.18 0.30 0.99
4 19 0.22 0.27 -0.11 0.08 0.13 0.26 1.00
5 2 0.11 0.03 0.10 0.10 0.11 0.12 0.13
# Načítanie knižnice ggplot2

library(ggplot2)

# Boxplot pre ROE podľa kategórie

ggplot(udaje, aes(x = Kategoria, y = ROE)) +
geom_boxplot(fill = "lightblue", color = "darkblue") +
theme_minimal() +
labs(title = "ROE podľa kategórie firmy", x = "Kategória", y = "ROE")

Korelačná matica medzi numerickými premennými

# Korelačná matica medzi numerickými stĺpcami (napr. ROE, ROA, EBIT, Z)

cor_matrix <- cor(udaje[, c("ROE", "ROA", "EBIT", "Z")], use = "complete.obs")
Error in cor(udaje[, c("ROE", "ROA", "EBIT", "Z")], use = "complete.obs") : 
  no complete element pairs
# Skontrolujeme počet NA hodnôt v konkrétnych stĺpcoch

colSums(is.na(udaje[, c("ROE", "ROA", "EBIT", "Z")]))
 ROE  ROA EBIT    Z 
   0    0   53    0 
# Skontrolujeme, či sú stĺpce numerické

str(udaje[, c("ROE", "ROA", "EBIT", "Z")])
'data.frame':   53 obs. of  4 variables:
 $ ROE : num  0.2702 0.2938 0.6643 0.0956 0.1223 ...
 $ ROA : num  0.0788 0.0801 0.0553 0.0363 0.0216 ...
 $ EBIT: num  NA NA NA NA NA NA NA NA NA NA ...
 $ Z   : num  0 1 0 3 2 0 4 2 7 0 ...
# Odstránime stĺpec "EBIT"

udaje_clean <- udaje %>% select(-EBIT)

# Skontrolujeme korelačnú maticu pre zostávajúce stĺpce

cor_matrix <- cor(udaje_clean[, c("ROE", "ROA", "Z")], use = "complete.obs")
print(cor_matrix)
           ROE        ROA          Z
ROE 1.00000000 0.43620558 0.08620608
ROA 0.43620558 1.00000000 0.07900175
Z   0.08620608 0.07900175 1.00000000
# Načítanie knižnice pre vizualizáciu korelácie

library(reshape2)
library(ggplot2)

# Vytvorenie heatmapy korelačnej matice

cor_melt <- melt(cor_matrix)
ggplot(cor_melt, aes(Var1, Var2, fill = value)) +
geom_tile() +
scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1, 1)) +
theme_minimal() +
labs(title = "Korelačná matica medzi ROE, ROA a Z")

install.packages("reshape2")
trying URL 'http://rspm/default/__linux__/focal/latest/src/contrib/plyr_1.8.9.tar.gz'
trying URL 'http://rspm/default/__linux__/focal/latest/src/contrib/reshape2_1.4.5.tar.gz'

The downloaded source packages are in
    ‘/tmp/RtmpZddUxO/downloaded_packages’
library(dplyr)
library(ggplot2)
library(knitr)
library(kableExtra)
library(broom)

Scatter plot pre ROE a ROA

# Scatter plot medzi ROE a ROA

ggplot(udaje, aes(x = ROE, y = ROA)) +
geom_point() +
theme_minimal() +
labs(title = "Scatter plot medzi ROE a ROA (2013)", x = "ROE", y = "ROA")

Základné štatistiky pre ROE podľa kategórie firmy

# Základné štatistiky pre ROE podľa kategórie

roe.stats <- udaje %>%
group_by(Kategoria) %>%
summarise(
n      = n(),
mean   = mean(ROE, na.rm = TRUE),
sd     = sd(ROE, na.rm = TRUE),
min    = min(ROE, na.rm = TRUE),
q25    = quantile(ROE, 0.25, na.rm = TRUE),
median = median(ROE, na.rm = TRUE),
q75    = quantile(ROE, 0.75, na.rm = TRUE),
max    = max(ROE, na.rm = TRUE),
.groups = "drop"
)

# Vygenerovanie tabuľky s knitr

kable(roe.stats, digits = 2, caption = "Základné štatistiky ROE podľa kategórie firmy")
Základné štatistiky ROE podľa kategórie firmy
Kategoria n mean sd min q25 median q75 max
1 4 0.10 0.79 -0.95 -0.16 0.20 0.46 0.94
2 12 0.12 0.78 -1.84 0.03 0.08 0.78 1.00
3 16 0.28 0.26 0.08 0.12 0.18 0.30 0.99
4 19 0.22 0.27 -0.11 0.08 0.13 0.26 1.00
5 2 0.11 0.03 0.10 0.10 0.11 0.12 0.13
NA
# Štýlovanie tabuľky pomocou kableExtra

roe.stats %>%
kable(digits = 2, caption = "Základné štatistiky ROE podľa kategórie firmy") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
column_spec(1, bold = TRUE) %>%
row_spec(0, bold = TRUE, background = "#f2f2f2") %>%
add_header_above(c(" " = 2, "ROE Statistics" = 7))
Základné štatistiky ROE podľa kategórie firmy
ROE Statistics
Kategoria n mean sd min q25 median q75 max
1 4 0.10 0.79 -0.95 -0.16 0.20 0.46 0.94
2 12 0.12 0.78 -1.84 0.03 0.08 0.78 1.00
3 16 0.28 0.26 0.08 0.12 0.18 0.30 0.99
4 19 0.22 0.27 -0.11 0.08 0.13 0.26 1.00
5 2 0.11 0.03 0.10 0.10 0.11 0.12 0.13
NA

T-test pre porovnanie ROE medzi dvoma kategóriami Lineárna regresia na predikciu ROE (napr. na základe ROA a Z(zeny vo vedeni firiem))

# Lineárna regresia na predikciu ROE

model <- lm(ROE ~ ROA + Z, data = udaje)
summary(model)

Call:
lm(formula = ROE ~ ROA + Z, data = udaje)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.30969 -0.05167 -0.01887  0.03302  0.80426 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  0.04212    0.08744   0.482  0.63208   
ROA          1.50572    0.44411   3.390  0.00137 **
Z            0.01294    0.03167   0.409  0.68460   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4221 on 50 degrees of freedom
Multiple R-squared:  0.193, Adjusted R-squared:  0.1607 
F-statistic: 5.978 on 2 and 50 DF,  p-value: 0.004702

Zobrazenie regresných koeficientov

# Regresné koeficienty s knižnicou broom

coef.tbl <- tidy(model, conf.int = TRUE) %>%
mutate(
term = recode(term,
"(Intercept)" = "Intercept",
"ROA" = "Return on Assets",
"Z" = "Z"
),
stars = case_when(
p.value < 0.001 ~ "***",
p.value < 0.01  ~ "**",
p.value < 0.05  ~ "*",
p.value < 0.1   ~ "·",
TRUE            ~ ""
)
) %>%
transmute(
Term = term,
Estimate = estimate,
`Std. Error` = std.error,
`t value` = statistic,
`p value` = p.value,
`95% CI` = str_c("[", round(conf.low, 3), ", ", round(conf.high, 3), "]"),
Sig = stars
)
Error in `transmute()`:
ℹ In argument: `95% CI = str_c("[", round(conf.low, 3), ", ",
  round(conf.high, 3), "]")`.
Caused by error in `str_c()`:
! could not find function "str_c"
Run `]8;;x-r-run:rlang::last_trace()rlang::last_trace()]8;;` to see where the error occurred.
# Načítanie knižnice stringr

library(stringr)
# Regresné koeficienty s knižnicou broom

coef.tbl <- tidy(model, conf.int = TRUE) %>%
mutate(
term = recode(term,
"(Intercept)" = "Intercept",
"ROA" = "Return on Assets",
"Z" = "Z"
),
stars = case_when(
p.value < 0.001 ~ "***",
p.value < 0.01  ~ "**",
p.value < 0.05  ~ "*",
p.value < 0.1   ~ "·",
TRUE            ~ ""
)
) %>%
transmute(
Term = term,
Estimate = estimate,
`Std. Error` = std.error,
`t value` = statistic,
`p value` = p.value,
`95% CI` = str_c("[", round(conf.low, 3), ", ", round(conf.high, 3), "]"),
Sig = stars
)

# Tabuľka s regresnými koeficientmi

coef.tbl %>%
kable(digits = 3, caption = "OLS Regression Coefficients") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
column_spec(1, bold = TRUE) %>%
row_spec(0, bold = TRUE, background = "#f2f2f2") %>%
footnote(
general = "Signif. codes: *** p<0.001, ** p<0.01, * p<0.05, · p<0.1.",
threeparttable = TRUE
)
OLS Regression Coefficients
Term Estimate Std. Error t value p value 95% CI Sig
Intercept 0.042 0.087 0.482 0.632 [-0.133, 0.218]
Return on Assets 1.506 0.444 3.390 0.001 [0.614, 2.398] **
Z 0.013 0.032 0.409 0.685 [-0.051, 0.077]
Note:
Signif. codes: *** p<0.001, ** p<0.01, * p<0.05, · p<0.1.
NA

Vykonali sme lineárnu regresiu, kde ROE (Return on Equity) bola závislá na Return on Assets (ROA), podieli žien vo vedení (Z) a konštante (Intercept). Tu sú hlavné zistenia:

Intercept (Konštanta):

Odhad: 0.042

P-hodnota: 0.632, čo naznačuje, že konštanta nie je štatisticky významná.

Return on Assets (ROA):

Odhad: 1.506 – znamená, že pre každú jednotkovú zmenu ROA sa ROE zmení o 1.506 jednotiek, pričom všetky ostatné faktory sú konstantné.

P-hodnota: 0.001 – je pod prahom 0.05, čo znamená, že ROA je štatisticky významný prediktor pre ROE.

95% interval spoľahlivosti: [0.614, 2.398] – s 95% istotou vieme povedať, že skutočný efekt ROA na ROE sa nachádza v tomto intervale.

Podiel žien vo vedení (Z):

Odhad: 0.013 – znamená, že zvýšenie podielu žien vo vedení o 1 jednotku (t.j. o 100 %) spôsobí nárast ROE o 0.013.

P-hodnota: 0.685 – je vyššia než 0.05, čo naznačuje, že podiel žien vo vedení (Z) nie je štatisticky významný prediktor pre ROE v tomto modeli.

95% interval spoľahlivosti: [-0.051, 0.077] – tento interval zahŕňa nulu, čo znamená, že môžeme byť náchylní k záveru, že podiel žien vo vedení nemá výrazný vplyv na ROE.

Interpretácia:

ROA (Return on Assets) má silný a štatisticky významný vplyv na ROE, pričom vyššia efektívnosť aktív (ROA) vedie k vyššiemu ROE.

Podiel žien vo vedení (Z) nemá štatisticky významný vplyv na ROE v tomto modeli. Hoci odhad ukazuje pozitívny vplyv, výsledky p-hodnoty a interval spoľahlivosti naznačujú, že tento vplyv nie je dostatočne silný na to, aby bol považovaný za štatisticky významný.

Intercept (konštanta) je štatisticky nevýznamný, čo znamená, že nulová hodnota nezávislých premenných nezaručuje významnú hodnotu ROE.

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQotLS0KdGl0bGU6ICJQcsOhY2EgcyBkYXRhYsOhem91IgphdXRob3I6ICJOYXRhbGlhIE5hZGFza2EiCmRhdGU6ICJTZXB0ZW1iZXIgMjAyNSIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIHRoZW1lOiB1bml0ZWQKICAgIGhpZ2hsaWdodDogdGFuZ28KZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IDcyCi0tLQpgYGB7cn0KdWRhamUgPC0gcmVhZC5jc3YoImRhdGFFS09OT01FVFJJQS5jc3YiKQp1ZGFqZQpgYGAKYGBge3J9CiMgU2tvbnRyb2x1amVtZSBuw6F6dnkgc3TEunBjb3YKCmNvbG5hbWVzKHVkYWplKQoKIyBTa29udHJvbHVqZW1lIMWhdHJ1a3TDunJ1IGTDoXQKCnN0cih1ZGFqZSkKCiMgU2tvbnRyb2x1amVtZSBuaWVrb8S+a28gcHJ2w71jaCByaWFka292CgpoZWFkKHVkYWplKQoKYGBgCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCgojIFNjYXR0ZXIgcGxvdDogdnrFpWFoIG1lZHppIFJPQSBhIFJPRQpnZ3Bsb3QodWRhamUsIGFlcyh4ID0gUk9BLCB5ID0gUk9FKSkgKwogIGdlb21fcG9pbnQoY29sb3IgPSAic3RlZWxibHVlIiwgc2l6ZSA9IDIpICsgICAgICMgdHlwIGdyYWZ1IOKAkyBib2RvdsO9CiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKAogICAgdGl0bGUgPSAiVnrFpWFoIG1lZHppIFJPQSBhIFJPRSIsCiAgICB4ID0gIk7DoXZyYXRub3PFpSBha3TDrXYgKFJPQSkiLAogICAgeSA9ICJOw6F2cmF0bm9zxaUgdmxhc3Ruw6lobyBrYXBpdMOhbHUgKFJPRSkiCiAgKQpgYGAKYGBge3J9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoa25pdHIpCgojIFrDoWtsYWRuw6kgxaF0YXRpc3Rpa3kgUk9FIHBvZMS+YSBrYXRlZ8OzcmllCnJvZS5zdGF0cyA8LSB1ZGFqZSAlPiUKICBncm91cF9ieShLYXRlZ29yaWEpICU+JQogIHN1bW1hcmlzZSgKICAgIG4gICAgICA9IG4oKSwKICAgIG1lYW4gICA9IG1lYW4oUk9FLCBuYS5ybSA9IFRSVUUpLAogICAgc2QgICAgID0gc2QoUk9FLCBuYS5ybSA9IFRSVUUpLAogICAgbWluICAgID0gbWluKFJPRSwgbmEucm0gPSBUUlVFKSwKICAgIHEyNSAgICA9IHF1YW50aWxlKFJPRSwgMC4yNSwgbmEucm0gPSBUUlVFKSwKICAgIG1lZGlhbiA9IG1lZGlhbihST0UsIG5hLnJtID0gVFJVRSksCiAgICBxNzUgICAgPSBxdWFudGlsZShST0UsIDAuNzUsIG5hLnJtID0gVFJVRSksCiAgICBtYXggICAgPSBtYXgoUk9FLCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICkKa2FibGUocm9lLnN0YXRzLCBkaWdpdHMgPSAyLCBjYXB0aW9uID0gIlrDoWtsYWRuw6kgxaF0YXRpc3Rpa3kgdWthem92YXRlxL5hIFJPRSBwb2TEvmEga2F0ZWfDs3JpZSBmaXJteSIpCmBgYApgYGB7cn0KIyBOYcSNw610YW5pZSBrbmnFvm5pY2UgZ2dwbG90MgoKbGlicmFyeShnZ3Bsb3QyKQoKIyBCb3hwbG90IHByZSBST0UgcG9kxL5hIGthdGVnw7NyaWUKCmdncGxvdCh1ZGFqZSwgYWVzKHggPSBLYXRlZ29yaWEsIHkgPSBST0UpKSArCmdlb21fYm94cGxvdChmaWxsID0gImxpZ2h0Ymx1ZSIsIGNvbG9yID0gImRhcmtibHVlIikgKwp0aGVtZV9taW5pbWFsKCkgKwpsYWJzKHRpdGxlID0gIlJPRSBwb2TEvmEga2F0ZWfDs3JpZSBmaXJteSIsIHggPSAiS2F0ZWfDs3JpYSIsIHkgPSAiUk9FIikKCmBgYApLb3JlbGHEjW7DoSBtYXRpY2EgbWVkemkgbnVtZXJpY2vDvW1pIHByZW1lbm7DvW1pCmBgYHtyfQojIEtvcmVsYcSNbsOhIG1hdGljYSBtZWR6aSBudW1lcmlja8O9bWkgc3TEunBjYW1pIChuYXByLiBST0UsIFJPQSwgRUJJVCwgWikKCmNvcl9tYXRyaXggPC0gY29yKHVkYWplWywgYygiUk9FIiwgIlJPQSIsICJFQklUIiwgIloiKV0sIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQoKIyBWeXR2b3JlbmllIHRhYnXEvmt5IHMga29yZWzDoWNpb3UKCmthYmxlKGNvcl9tYXRyaXgsIGNhcHRpb24gPSAiS29yZWxhxI1uw6EgbWF0aWNhIG1lZHppIFJPRSwgUk9BLCBFQklUIGEgWiIsIGRpZ2l0cyA9IDIpCgpgYGAKYGBge3J9CiMgU2tvbnRyb2x1amVtZSBwb8SNZXQgTkEgaG9kbsO0dCB2IGtvbmtyw6l0bnljaCBzdMS6cGNvY2gKCmNvbFN1bXMoaXMubmEodWRhamVbLCBjKCJST0UiLCAiUk9BIiwgIkVCSVQiLCAiWiIpXSkpCgpgYGAKYGBge3J9CiMgU2tvbnRyb2x1amVtZSwgxI1pIHPDuiBzdMS6cGNlIG51bWVyaWNrw6kKCnN0cih1ZGFqZVssIGMoIlJPRSIsICJST0EiLCAiRUJJVCIsICJaIildKQoKYGBgCmBgYHtyfQojIE9kc3Ryw6FuaW1lIHN0xLpwZWMgIkVCSVQiCgp1ZGFqZV9jbGVhbiA8LSB1ZGFqZSAlPiUgc2VsZWN0KC1FQklUKQoKIyBTa29udHJvbHVqZW1lIGtvcmVsYcSNbsO6IG1hdGljdSBwcmUgem9zdMOhdmFqw7pjZSBzdMS6cGNlCgpjb3JfbWF0cml4IDwtIGNvcih1ZGFqZV9jbGVhblssIGMoIlJPRSIsICJST0EiLCAiWiIpXSwgdXNlID0gImNvbXBsZXRlLm9icyIpCnByaW50KGNvcl9tYXRyaXgpCgpgYGAKYGBge3J9CiMgTmHEjcOtdGFuaWUga25pxb5uaWNlIHByZSB2aXp1YWxpesOhY2l1IGtvcmVsw6FjaWUKCmxpYnJhcnkocmVzaGFwZTIpCmxpYnJhcnkoZ2dwbG90MikKCiMgVnl0dm9yZW5pZSBoZWF0bWFweSBrb3JlbGHEjW5laiBtYXRpY2UKCmNvcl9tZWx0IDwtIG1lbHQoY29yX21hdHJpeCkKZ2dwbG90KGNvcl9tZWx0LCBhZXMoVmFyMSwgVmFyMiwgZmlsbCA9IHZhbHVlKSkgKwpnZW9tX3RpbGUoKSArCnNjYWxlX2ZpbGxfZ3JhZGllbnQyKGxvdyA9ICJibHVlIiwgaGlnaCA9ICJyZWQiLCBtaWQgPSAid2hpdGUiLCBtaWRwb2ludCA9IDAsIGxpbWl0ID0gYygtMSwgMSkpICsKdGhlbWVfbWluaW1hbCgpICsKbGFicyh0aXRsZSA9ICJLb3JlbGHEjW7DoSBtYXRpY2EgbWVkemkgUk9FLCBST0EgYSBaIikKCmBgYApgYGB7cn0KaW5zdGFsbC5wYWNrYWdlcygicmVzaGFwZTIiKQoKYGBgCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShicm9vbSkKYGBgClNjYXR0ZXIgcGxvdCBwcmUgUk9FIGEgUk9BCmBgYHtyfQojIFNjYXR0ZXIgcGxvdCBtZWR6aSBST0UgYSBST0EKCmdncGxvdCh1ZGFqZSwgYWVzKHggPSBST0UsIHkgPSBST0EpKSArCmdlb21fcG9pbnQoKSArCnRoZW1lX21pbmltYWwoKSArCmxhYnModGl0bGUgPSAiU2NhdHRlciBwbG90IG1lZHppIFJPRSBhIFJPQSAoMjAxMykiLCB4ID0gIlJPRSIsIHkgPSAiUk9BIikKCmBgYApaw6FrbGFkbsOpIMWhdGF0aXN0aWt5IHByZSBST0UgcG9kxL5hIGthdGVnw7NyaWUgZmlybXkKYGBge3J9CiMgWsOha2xhZG7DqSDFoXRhdGlzdGlreSBwcmUgUk9FIHBvZMS+YSBrYXRlZ8OzcmllCgpyb2Uuc3RhdHMgPC0gdWRhamUgJT4lCmdyb3VwX2J5KEthdGVnb3JpYSkgJT4lCnN1bW1hcmlzZSgKbiAgICAgID0gbigpLAptZWFuICAgPSBtZWFuKFJPRSwgbmEucm0gPSBUUlVFKSwKc2QgICAgID0gc2QoUk9FLCBuYS5ybSA9IFRSVUUpLAptaW4gICAgPSBtaW4oUk9FLCBuYS5ybSA9IFRSVUUpLApxMjUgICAgPSBxdWFudGlsZShST0UsIDAuMjUsIG5hLnJtID0gVFJVRSksCm1lZGlhbiA9IG1lZGlhbihST0UsIG5hLnJtID0gVFJVRSksCnE3NSAgICA9IHF1YW50aWxlKFJPRSwgMC43NSwgbmEucm0gPSBUUlVFKSwKbWF4ICAgID0gbWF4KFJPRSwgbmEucm0gPSBUUlVFKSwKLmdyb3VwcyA9ICJkcm9wIgopCgojIFZ5Z2VuZXJvdmFuaWUgdGFidcS+a3kgcyBrbml0cgoKa2FibGUocm9lLnN0YXRzLCBkaWdpdHMgPSAyLCBjYXB0aW9uID0gIlrDoWtsYWRuw6kgxaF0YXRpc3Rpa3kgUk9FIHBvZMS+YSBrYXRlZ8OzcmllIGZpcm15IikKCmBgYApgYGB7cn0KIyDFoHTDvWxvdmFuaWUgdGFidcS+a3kgcG9tb2NvdSBrYWJsZUV4dHJhCgpyb2Uuc3RhdHMgJT4lCmthYmxlKGRpZ2l0cyA9IDIsIGNhcHRpb24gPSAiWsOha2xhZG7DqSDFoXRhdGlzdGlreSBST0UgcG9kxL5hIGthdGVnw7NyaWUgZmlybXkiKSAlPiUKa2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRkFMU0UsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiKSkgJT4lCmNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFKSAlPiUKcm93X3NwZWMoMCwgYm9sZCA9IFRSVUUsIGJhY2tncm91bmQgPSAiI2YyZjJmMiIpICU+JQphZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMiwgIlJPRSBTdGF0aXN0aWNzIiA9IDcpKQoKYGBgClQtdGVzdCBwcmUgcG9yb3ZuYW5pZSBST0UgbWVkemkgZHZvbWEga2F0ZWfDs3JpYW1pCkxpbmXDoXJuYSByZWdyZXNpYSBuYSBwcmVkaWtjaXUgUk9FIChuYXByLiBuYSB6w6FrbGFkZSBST0EgYSBaKHplbnkgdm8gdmVkZW5pIGZpcmllbSkpCmBgYHtyfQojIExpbmXDoXJuYSByZWdyZXNpYSBuYSBwcmVkaWtjaXUgUk9FCgptb2RlbCA8LSBsbShST0UgfiBST0EgKyBaLCBkYXRhID0gdWRhamUpCnN1bW1hcnkobW9kZWwpCgpgYGAKWm9icmF6ZW5pZSByZWdyZXNuw71jaCBrb2VmaWNpZW50b3YKYGBge3J9CiMgUmVncmVzbsOpIGtvZWZpY2llbnR5IHMga25pxb5uaWNvdSBicm9vbQoKY29lZi50YmwgPC0gdGlkeShtb2RlbCwgY29uZi5pbnQgPSBUUlVFKSAlPiUKbXV0YXRlKAp0ZXJtID0gcmVjb2RlKHRlcm0sCiIoSW50ZXJjZXB0KSIgPSAiSW50ZXJjZXB0IiwKIlJPQSIgPSAiUmV0dXJuIG9uIEFzc2V0cyIsCiJaIiA9ICJaIgopLApzdGFycyA9IGNhc2Vfd2hlbigKcC52YWx1ZSA8IDAuMDAxIH4gIioqKiIsCnAudmFsdWUgPCAwLjAxICB+ICIqKiIsCnAudmFsdWUgPCAwLjA1ICB+ICIqIiwKcC52YWx1ZSA8IDAuMSAgIH4gIsK3IiwKVFJVRSAgICAgICAgICAgIH4gIiIKKQopICU+JQp0cmFuc211dGUoClRlcm0gPSB0ZXJtLApFc3RpbWF0ZSA9IGVzdGltYXRlLApgU3RkLiBFcnJvcmAgPSBzdGQuZXJyb3IsCmB0IHZhbHVlYCA9IHN0YXRpc3RpYywKYHAgdmFsdWVgID0gcC52YWx1ZSwKYDk1JSBDSWAgPSBzdHJfYygiWyIsIHJvdW5kKGNvbmYubG93LCAzKSwgIiwgIiwgcm91bmQoY29uZi5oaWdoLCAzKSwgIl0iKSwKU2lnID0gc3RhcnMKKQoKIyBUYWJ1xL5rYSBzIHJlZ3Jlc27DvW1pIGtvZWZpY2llbnRtaQoKY29lZi50YmwgJT4lCmthYmxlKGRpZ2l0cyA9IDMsIGNhcHRpb24gPSAiT0xTIFJlZ3Jlc3Npb24gQ29lZmZpY2llbnRzIikgJT4lCmthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFLCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIikpICU+JQpjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSkgJT4lCnJvd19zcGVjKDAsIGJvbGQgPSBUUlVFLCBiYWNrZ3JvdW5kID0gIiNmMmYyZjIiKSAlPiUKZm9vdG5vdGUoCmdlbmVyYWwgPSAiU2lnbmlmLiBjb2RlczogKioqIHA8MC4wMDEsICoqIHA8MC4wMSwgKiBwPDAuMDUsIMK3IHA8MC4xLiIsCnRocmVlcGFydHRhYmxlID0gVFJVRQopCgpgYGAKYGBge3J9CiMgTmHEjcOtdGFuaWUga25pxb5uaWNlIHN0cmluZ3IKCmxpYnJhcnkoc3RyaW5ncikKCmBgYAoKYGBge3J9CiMgUmVncmVzbsOpIGtvZWZpY2llbnR5IHMga25pxb5uaWNvdSBicm9vbQoKY29lZi50YmwgPC0gdGlkeShtb2RlbCwgY29uZi5pbnQgPSBUUlVFKSAlPiUKbXV0YXRlKAp0ZXJtID0gcmVjb2RlKHRlcm0sCiIoSW50ZXJjZXB0KSIgPSAiSW50ZXJjZXB0IiwKIlJPQSIgPSAiUmV0dXJuIG9uIEFzc2V0cyIsCiJaIiA9ICJaIgopLApzdGFycyA9IGNhc2Vfd2hlbigKcC52YWx1ZSA8IDAuMDAxIH4gIioqKiIsCnAudmFsdWUgPCAwLjAxICB+ICIqKiIsCnAudmFsdWUgPCAwLjA1ICB+ICIqIiwKcC52YWx1ZSA8IDAuMSAgIH4gIsK3IiwKVFJVRSAgICAgICAgICAgIH4gIiIKKQopICU+JQp0cmFuc211dGUoClRlcm0gPSB0ZXJtLApFc3RpbWF0ZSA9IGVzdGltYXRlLApgU3RkLiBFcnJvcmAgPSBzdGQuZXJyb3IsCmB0IHZhbHVlYCA9IHN0YXRpc3RpYywKYHAgdmFsdWVgID0gcC52YWx1ZSwKYDk1JSBDSWAgPSBzdHJfYygiWyIsIHJvdW5kKGNvbmYubG93LCAzKSwgIiwgIiwgcm91bmQoY29uZi5oaWdoLCAzKSwgIl0iKSwKU2lnID0gc3RhcnMKKQoKIyBUYWJ1xL5rYSBzIHJlZ3Jlc27DvW1pIGtvZWZpY2llbnRtaQoKY29lZi50YmwgJT4lCmthYmxlKGRpZ2l0cyA9IDMsIGNhcHRpb24gPSAiT0xTIFJlZ3Jlc3Npb24gQ29lZmZpY2llbnRzIikgJT4lCmthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFLCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIikpICU+JQpjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSkgJT4lCnJvd19zcGVjKDAsIGJvbGQgPSBUUlVFLCBiYWNrZ3JvdW5kID0gIiNmMmYyZjIiKSAlPiUKZm9vdG5vdGUoCmdlbmVyYWwgPSAiU2lnbmlmLiBjb2RlczogKioqIHA8MC4wMDEsICoqIHA8MC4wMSwgKiBwPDAuMDUsIMK3IHA8MC4xLiIsCnRocmVlcGFydHRhYmxlID0gVFJVRQopCgpgYGAKVnlrb25hbGkgc21lIGxpbmXDoXJudSByZWdyZXNpdSwga2RlIFJPRSAoUmV0dXJuIG9uIEVxdWl0eSkgYm9sYSB6w6F2aXNsw6EgbmEgUmV0dXJuIG9uIEFzc2V0cyAoUk9BKSwgcG9kaWVsaSDFvmllbiB2byB2ZWRlbsOtIChaKSBhIGtvbsWhdGFudGUgKEludGVyY2VwdCkuIFR1IHPDuiBobGF2bsOpIHppc3RlbmlhOgoKSW50ZXJjZXB0IChLb27FoXRhbnRhKToKCk9kaGFkOiAwLjA0MgoKUC1ob2Rub3RhOiAwLjYzMiwgxI1vIG5hem5hxI11amUsIMW+ZSBrb27FoXRhbnRhIG5pZSBqZSDFoXRhdGlzdGlja3kgdsO9em5hbW7DoS4KClJldHVybiBvbiBBc3NldHMgKFJPQSk6CgpPZGhhZDogMS41MDYg4oCTIHpuYW1lbsOhLCDFvmUgcHJlIGthxb5kw7ogamVkbm90a292w7ogem1lbnUgUk9BIHNhIFJPRSB6bWVuw60gbyAxLjUwNiBqZWRub3RpZWssIHByacSNb20gdsWhZXRreSBvc3RhdG7DqSBmYWt0b3J5IHPDuiBrb25zdGFudG7DqS4KClAtaG9kbm90YTogMC4wMDEg4oCTIGplIHBvZCBwcmFob20gMC4wNSwgxI1vIHpuYW1lbsOhLCDFvmUgUk9BIGplIMWhdGF0aXN0aWNreSB2w716bmFtbsO9IHByZWRpa3RvciBwcmUgUk9FLgoKOTUlIGludGVydmFsIHNwb8S+YWhsaXZvc3RpOiBbMC42MTQsIDIuMzk4XSDigJMgcyA5NSUgaXN0b3RvdSB2aWVtZSBwb3ZlZGHFpSwgxb5lIHNrdXRvxI1uw70gZWZla3QgUk9BIG5hIFJPRSBzYSBuYWNow6FkemEgdiB0b210byBpbnRlcnZhbGUuCgpQb2RpZWwgxb5pZW4gdm8gdmVkZW7DrSAoWik6CgpPZGhhZDogMC4wMTMg4oCTIHpuYW1lbsOhLCDFvmUgenbDvcWhZW5pZSBwb2RpZWx1IMW+aWVuIHZvIHZlZGVuw60gbyAxIGplZG5vdGt1ICh0LmouIG8gMTAwICUpIHNww7Rzb2LDrSBuw6FyYXN0IFJPRSBvIDAuMDEzLgoKUC1ob2Rub3RhOiAwLjY4NSDigJMgamUgdnnFocWhaWEgbmXFviAwLjA1LCDEjW8gbmF6bmHEjXVqZSwgxb5lIHBvZGllbCDFvmllbiB2byB2ZWRlbsOtIChaKSBuaWUgamUgxaF0YXRpc3RpY2t5IHbDvXpuYW1uw70gcHJlZGlrdG9yIHByZSBST0UgdiB0b210byBtb2RlbGkuCgo5NSUgaW50ZXJ2YWwgc3BvxL5haGxpdm9zdGk6IFstMC4wNTEsIDAuMDc3XSDigJMgdGVudG8gaW50ZXJ2YWwgemFoxZXFiGEgbnVsdSwgxI1vIHpuYW1lbsOhLCDFvmUgbcO0xb5lbWUgYnnFpSBuw6FjaHlsbsOtIGsgesOhdmVydSwgxb5lIHBvZGllbCDFvmllbiB2byB2ZWRlbsOtIG5lbcOhIHbDvXJhem7DvSB2cGx5diBuYSBST0UuCgpJbnRlcnByZXTDoWNpYToKClJPQSAoUmV0dXJuIG9uIEFzc2V0cykgbcOhIHNpbG7DvSBhIMWhdGF0aXN0aWNreSB2w716bmFtbsO9IHZwbHl2IG5hIFJPRSwgcHJpxI1vbSB2ecWhxaFpYSBlZmVrdMOtdm5vc8WlIGFrdMOtdiAoUk9BKSB2ZWRpZSBrIHZ5xaHFoWllbXUgUk9FLgoKUG9kaWVsIMW+aWVuIHZvIHZlZGVuw60gKFopIG5lbcOhIMWhdGF0aXN0aWNreSB2w716bmFtbsO9IHZwbHl2IG5hIFJPRSB2IHRvbXRvIG1vZGVsaS4gSG9jaSBvZGhhZCB1a2F6dWplIHBveml0w612bnkgdnBseXYsIHbDvXNsZWRreSBwLWhvZG5vdHkgYSBpbnRlcnZhbCBzcG/EvmFobGl2b3N0aSBuYXpuYcSNdWrDuiwgxb5lIHRlbnRvIHZwbHl2IG5pZSBqZSBkb3N0YXRvxI1uZSBzaWxuw70gbmEgdG8sIGFieSBib2wgcG92YcW+b3ZhbsO9IHphIMWhdGF0aXN0aWNreSB2w716bmFtbsO9LgoKSW50ZXJjZXB0IChrb27FoXRhbnRhKSBqZSDFoXRhdGlzdGlja3kgbmV2w716bmFtbsO9LCDEjW8gem5hbWVuw6EsIMW+ZSBudWxvdsOhIGhvZG5vdGEgbmV6w6F2aXNsw71jaCBwcmVtZW5uw71jaCBuZXphcnXEjXVqZSB2w716bmFtbsO6IGhvZG5vdHUgUk9FLgo=