calculate_var <- function(rendimientos, rport, pv, n, conf_levels, weights, cov_portafolio) {
  var_results <- list()
  
  
  alpha.p <- (1 - conf_levels)/2
  sd_portafolio <- apply(rendimientos, 2, sd)
  varpn <- sd_portafolio * qnorm(alpha.p) * sqrt(1) * pv
  varpn_port <- sqrt(t(weights) %*% cov_portafolio %*% weights) * qnorm(alpha.p) * sqrt(1) * pv
  
  var_results$varpn <- varpn
  var_results$varpn_port <- varpn_port
  
  
  alpha.h <- 1 - conf_levels
  varh <- apply(rendimientos, 2, quantile, alpha.h) * sqrt(1) * pv
  varh_port <- quantile(rport, alpha.h) * sqrt(1) * pv
  
  var_results$varh <- varh
  var_results$varh_port <- varh_port
  
  return(var_results)
}

5 años


ALFA2 <- ALFA["2018-05-31/"]


rendimientos <- na.omit(Return.calculate(ALFA2), method = "log")


sd_portafolio <- apply(rendimientos, 2, sd)
cor_portafolio <- cor(rendimientos, use = "complete.obs", method = "pearson")
cov_portafolio <- diag(sd_portafolio) %*% cor_portafolio %*% diag(sd_portafolio)


weights <- c(0.06, 0.09, 0.14, 0.11, 0.14, 0.07, 0.05, 0.08, 0.08, 0.13, 0.05, 0)


volport <- sqrt(t(as.matrix(weights)) %*% cov_portafolio %*% as.matrix(weights))
rport <- rendimientos %*% as.matrix(weights)


var_results <- calculate_var(rendimientos, rport, pv = 1000000, n = 13, conf_levels = c(0.9, 0.95, 0.99), weights = weights, cov_portafolio = cov_portafolio)



varh_port <- var_results$varh_port
varh <- var_results$varh
varpn_port <- var_results$varpn_port
varpn <- var_results$varpn


#Activos

varh_tbl <- data.frame(Value = varh)

kable(varh_tbl, format = "html", col.names = c("ARCA", "AMÉRICA MÓVIL", "BIMBO", "CEMEX", "FEMSA", "INBURSA", "BANORTE", "G.MEXICO", "COCA COLA", "WALMART", "KIMBERLY", "IPC")) %>%
  kable_styling() %>% 
  add_header_above(c("VaR histórico a 5 años" = 13))
VaR histórico a 5 años
ARCA AMÉRICA MÓVIL BIMBO CEMEX FEMSA INBURSA BANORTE G.MEXICO COCA COLA WALMART KIMBERLY IPC
10% -19413.88 -22280.21 -26185.37 -32774.27 -19645.89 -28135.90 -31056.72 -32597.75 -19355.99 -22949.21 -25084.28 -17651.91
5% -25941.05 -29401.30 -34357.47 -45389.25 -25450.17 -38880.08 -43688.83 -44153.54 -27169.38 -30134.62 -34295.97 -24251.76
1% -44636.50 -50117.54 -59009.80 -73434.51 -47732.33 -64113.26 -77136.30 -60366.57 -45817.64 -51901.83 -53018.90 -45205.97

# Portafolio
portfolio_var_table <- data.frame(
  "Portfolio",
  Historical = var_results$varh_port,
  Parametric = var_results$varpn_port
)
portfolio_var_table %>%
    select(2) %>%
    kable(align = "c", col.names = c("VaR"), caption = "VaR Histórico portafolio a 5 años") %>%
    kable_styling()
VaR Histórico portafolio a 5 años
VaR
10% -17660.57
5% -24847.48
1% -47208.72
NA
NA

3 años


ALFA2 <- ALFA["2021-05-31/"]


rendimientos <- na.omit(Return.calculate(ALFA2), method = "log")


sd_portafolio <- apply(rendimientos, 2, sd)
cor_portafolio <- cor(rendimientos, use = "complete.obs", method = "pearson")
cov_portafolio <- diag(sd_portafolio) %*% cor_portafolio %*% diag(sd_portafolio)

weights <- c(0.06, 0.09, 0.14, 0.11, 0.14, 0.07, 0.05, 0.08, 0.08, 0.13, 0.05, 0)

volport <- sqrt(t(as.matrix(weights)) %*% cov_portafolio %*% as.matrix(weights))
rport <- rendimientos %*% as.matrix(weights)

var_results <- calculate_var(rendimientos, rport, pv = 1000000, n = 13, conf_levels = c(0.9, 0.95, 0.99), weights = weights, cov_portafolio = cov_portafolio)


varh_port <- var_results$varh_port
varh <- var_results$varh
varpn_port <- var_results$varpn_port
varpn <- var_results$varpn


#Activos

varh_tbl <- data.frame(Value = varh)

kable(varh_tbl, format = "html", col.names = c("ARCA", "AMÉRICA MÓVIL", "BIMBO", "CEMEX", "FEMSA", "INBURSA", "BANORTE", "G.MEXICO", "COCA COLA", "WALMART", "KIMBERLY", "IPC")) %>%
  kable_styling() %>% 
  add_header_above(c("VaR histórico a 3 años" = 13))
VaR histórico a 3 años
ARCA AMÉRICA MÓVIL BIMBO CEMEX FEMSA INBURSA BANORTE G.MEXICO COCA COLA WALMART KIMBERLY IPC
10% -17983.59 -20872.93 -25868.65 -32125.34 -18964.15 -25545.86 -28673.95 -35244.42 -16568.96 -21964.14 -23493.91 -16967.82
5% -22295.72 -28439.86 -32419.29 -42428.07 -24146.27 -33504.05 -37771.26 -45741.27 -23492.11 -27744.81 -31088.82 -21633.34
1% -33562.36 -40178.09 -48922.96 -59171.36 -36743.37 -51690.70 -54453.63 -56068.26 -33756.69 -36207.01 -43213.41 -30476.03

# Portafolio
portfolio_var_table <- data.frame(
  "Portfolio",
  Historical = var_results$varh_port,
  Parametric = var_results$varpn_port
)
portfolio_var_table %>%
    select(2) %>%
    kable(align = "c", col.names = c("VaR"), caption = "VaR Histórico 3 años portafolio") %>%
    kable_styling()
VaR Histórico 3 años portafolio
VaR
10% -15595.33
5% -22677.79
1% -28959.80
NA
NA

1 año

ALFA2 <- ALFA["2021-05-31/"]

rendimientos <- na.omit(Return.calculate(ALFA2), method = "log")

sd_portafolio <- apply(rendimientos, 2, sd)
cor_portafolio <- cor(rendimientos, use = "complete.obs", method = "pearson")
cov_portafolio <- diag(sd_portafolio) %*% cor_portafolio %*% diag(sd_portafolio)

weights <- c(0.06, 0.09, 0.14, 0.11, 0.14, 0.07, 0.05, 0.08, 0.08, 0.13, 0.05, 0)

volport <- sqrt(t(as.matrix(weights)) %*% cov_portafolio %*% as.matrix(weights))
rport <- rendimientos %*% as.matrix(weights)

var_results <- calculate_var(rendimientos, rport, pv = 1000000, n = 13, conf_levels = c(0.9, 0.95, 0.99), weights = weights, cov_portafolio = cov_portafolio)


varh_port <- var_results$varh_port
varh <- var_results$varh
varpn_port <- var_results$varpn_port
varpn <- var_results$varpn


#Activos

varh_tbl <- data.frame(Value = varh)

kable(varh_tbl, format = "html", col.names = c("ARCA", "AMÉRICA MÓVIL", "BIMBO", "CEMEX", "FEMSA", "INBURSA", "BANORTE", "G.MEXICO", "COCA COLA", "WALMART", "KIMBERLY", "IPC")) %>%
  kable_styling() %>% 
  add_header_above(c("VaR histórico a 1 año" = 13))
VaR histórico a 1 año
ARCA AMÉRICA MÓVIL BIMBO CEMEX FEMSA INBURSA BANORTE G.MEXICO COCA COLA WALMART KIMBERLY IPC
10% -17983.59 -20872.93 -25868.65 -32125.34 -18964.15 -25545.86 -28673.95 -35244.42 -16568.96 -21964.14 -23493.91 -16967.82
5% -22295.72 -28439.86 -32419.29 -42428.07 -24146.27 -33504.05 -37771.26 -45741.27 -23492.11 -27744.81 -31088.82 -21633.34
1% -33562.36 -40178.09 -48922.96 -59171.36 -36743.37 -51690.70 -54453.63 -56068.26 -33756.69 -36207.01 -43213.41 -30476.03

# Portafolio
portfolio_var_table <- data.frame(
  "Portfolio",
  Historical = var_results$varh_port,
  Parametric = var_results$varpn_port
)
portfolio_var_table %>%
    select(2) %>%
    kable(align = "c", col.names = c("VaR"), caption = "VaR histórico a 1 año portafolio") %>%
    kable_styling()
VaR histórico a 1 año portafolio
VaR
10% -15595.33
5% -22677.79
1% -28959.80
NA
NA
LS0tCnRpdGxlOiAiQ8OhbGN1bG8gZGVsIFZhUiIKYXV0aG9yOiAiRXF1aXBvIE5hY2lvbmFsIC0gUG9ydGFmb2xpbyBBTEZBIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICBkZl9wcmludDogcGFnZWQKLS0tCgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KHh0cykKbGlicmFyeShkcGx5cikKbGlicmFyeShQZXJmb3JtYW5jZUFuYWx5dGljcykKbGlicmFyeShrYWJsZUV4dHJhKQpsaWJyYXJ5KGZvcm1hdHRhYmxlKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KHNjYWxlcykKCgpwcmVjaW9zIDwtIHJlYWRfZXhjZWwoIn4vRGVza3RvcC9SL1ByZWNpb3NIaXN0b3JpY29zLnhsc3giKQoKcHJlY2lvcyA8LSBwcmVjaW9zICU+JSAgCiAgbXV0YXRlKERhdGUgPSBhcy5EYXRlKERhdGUsIGZvcm1hdCA9ICIlbS8lZC8lWSIpKQoKQUxGQSA8LSB4dHMocHJlY2lvc1ssIDI6MTNdLCBvcmRlci5ieSA9IHByZWNpb3MkRGF0ZSkKCmBgYAoKCgpgYGB7cn0KCgpjYWxjdWxhdGVfdmFyIDwtIGZ1bmN0aW9uKHJlbmRpbWllbnRvcywgcnBvcnQsIHB2LCBuLCBjb25mX2xldmVscywgd2VpZ2h0cywgY292X3BvcnRhZm9saW8pIHsKICB2YXJfcmVzdWx0cyA8LSBsaXN0KCkKICAKICAKICBhbHBoYS5wIDwtICgxIC0gY29uZl9sZXZlbHMpLzIKICBzZF9wb3J0YWZvbGlvIDwtIGFwcGx5KHJlbmRpbWllbnRvcywgMiwgc2QpCiAgdmFycG4gPC0gc2RfcG9ydGFmb2xpbyAqIHFub3JtKGFscGhhLnApICogc3FydCgxKSAqIHB2CiAgdmFycG5fcG9ydCA8LSBzcXJ0KHQod2VpZ2h0cykgJSolIGNvdl9wb3J0YWZvbGlvICUqJSB3ZWlnaHRzKSAqIHFub3JtKGFscGhhLnApICogc3FydCgxKSAqIHB2CiAgCiAgdmFyX3Jlc3VsdHMkdmFycG4gPC0gdmFycG4KICB2YXJfcmVzdWx0cyR2YXJwbl9wb3J0IDwtIHZhcnBuX3BvcnQKICAKICAKICBhbHBoYS5oIDwtIDEgLSBjb25mX2xldmVscwogIHZhcmggPC0gYXBwbHkocmVuZGltaWVudG9zLCAyLCBxdWFudGlsZSwgYWxwaGEuaCkgKiBzcXJ0KDEpICogcHYKICB2YXJoX3BvcnQgPC0gcXVhbnRpbGUocnBvcnQsIGFscGhhLmgpICogc3FydCgxKSAqIHB2CiAgCiAgdmFyX3Jlc3VsdHMkdmFyaCA8LSB2YXJoCiAgdmFyX3Jlc3VsdHMkdmFyaF9wb3J0IDwtIHZhcmhfcG9ydAogIAogIHJldHVybih2YXJfcmVzdWx0cykKfQpgYGAKCiMjIDUgYcOxb3MKCmBgYHtyLCB3YXJuaW5nPUZBTFNFfQoKQUxGQTIgPC0gQUxGQVsiMjAxOC0wNS0zMS8iXQoKCnJlbmRpbWllbnRvcyA8LSBuYS5vbWl0KFJldHVybi5jYWxjdWxhdGUoQUxGQTIpLCBtZXRob2QgPSAibG9nIikKCgpzZF9wb3J0YWZvbGlvIDwtIGFwcGx5KHJlbmRpbWllbnRvcywgMiwgc2QpCmNvcl9wb3J0YWZvbGlvIDwtIGNvcihyZW5kaW1pZW50b3MsIHVzZSA9ICJjb21wbGV0ZS5vYnMiLCBtZXRob2QgPSAicGVhcnNvbiIpCmNvdl9wb3J0YWZvbGlvIDwtIGRpYWcoc2RfcG9ydGFmb2xpbykgJSolIGNvcl9wb3J0YWZvbGlvICUqJSBkaWFnKHNkX3BvcnRhZm9saW8pCgoKd2VpZ2h0cyA8LSBjKDAuMDYsIDAuMDksIDAuMTQsIDAuMTEsIDAuMTQsIDAuMDcsIDAuMDUsIDAuMDgsIDAuMDgsIDAuMTMsIDAuMDUsIDApCgoKdm9scG9ydCA8LSBzcXJ0KHQoYXMubWF0cml4KHdlaWdodHMpKSAlKiUgY292X3BvcnRhZm9saW8gJSolIGFzLm1hdHJpeCh3ZWlnaHRzKSkKcnBvcnQgPC0gcmVuZGltaWVudG9zICUqJSBhcy5tYXRyaXgod2VpZ2h0cykKCgp2YXJfcmVzdWx0cyA8LSBjYWxjdWxhdGVfdmFyKHJlbmRpbWllbnRvcywgcnBvcnQsIHB2ID0gMTAwMDAwMCwgbiA9IDEzLCBjb25mX2xldmVscyA9IGMoMC45LCAwLjk1LCAwLjk5KSwgd2VpZ2h0cyA9IHdlaWdodHMsIGNvdl9wb3J0YWZvbGlvID0gY292X3BvcnRhZm9saW8pCgoKCnZhcmhfcG9ydCA8LSB2YXJfcmVzdWx0cyR2YXJoX3BvcnQKdmFyaCA8LSB2YXJfcmVzdWx0cyR2YXJoCnZhcnBuX3BvcnQgPC0gdmFyX3Jlc3VsdHMkdmFycG5fcG9ydAp2YXJwbiA8LSB2YXJfcmVzdWx0cyR2YXJwbgoKCiNBY3Rpdm9zCgp2YXJoX3RibCA8LSBkYXRhLmZyYW1lKFZhbHVlID0gdmFyaCkKCmthYmxlKHZhcmhfdGJsLCBmb3JtYXQgPSAiaHRtbCIsIGNvbC5uYW1lcyA9IGMoIkFSQ0EiLCAiQU3DiVJJQ0EgTcOTVklMIiwgIkJJTUJPIiwgIkNFTUVYIiwgIkZFTVNBIiwgIklOQlVSU0EiLCAiQkFOT1JURSIsICJHLk1FWElDTyIsICJDT0NBIENPTEEiLCAiV0FMTUFSVCIsICJLSU1CRVJMWSIsICJJUEMiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlZhUiBoaXN0w7NyaWNvIGEgNSBhw7FvcyIgPSAxMykpCgojIFBvcnRhZm9saW8KcG9ydGZvbGlvX3Zhcl90YWJsZSA8LSBkYXRhLmZyYW1lKAogICJQb3J0Zm9saW8iLAogIEhpc3RvcmljYWwgPSB2YXJfcmVzdWx0cyR2YXJoX3BvcnQsCiAgUGFyYW1ldHJpYyA9IHZhcl9yZXN1bHRzJHZhcnBuX3BvcnQKKQpwb3J0Zm9saW9fdmFyX3RhYmxlICU+JQogICAgc2VsZWN0KDIpICU+JQogICAga2FibGUoYWxpZ24gPSAiYyIsIGNvbC5uYW1lcyA9IGMoIlZhUiIpLCBjYXB0aW9uID0gIlZhUiBIaXN0w7NyaWNvIHBvcnRhZm9saW8gYSA1IGHDsW9zIikgJT4lCiAgICBrYWJsZV9zdHlsaW5nKCkKCgpgYGAKCiMjIDMgYcOxb3MKCgoKCmBgYHtyLCB3YXJuaW5nPUZBTFNFfQoKQUxGQTIgPC0gQUxGQVsiMjAyMS0wNS0zMS8iXQoKCnJlbmRpbWllbnRvcyA8LSBuYS5vbWl0KFJldHVybi5jYWxjdWxhdGUoQUxGQTIpLCBtZXRob2QgPSAibG9nIikKCgpzZF9wb3J0YWZvbGlvIDwtIGFwcGx5KHJlbmRpbWllbnRvcywgMiwgc2QpCmNvcl9wb3J0YWZvbGlvIDwtIGNvcihyZW5kaW1pZW50b3MsIHVzZSA9ICJjb21wbGV0ZS5vYnMiLCBtZXRob2QgPSAicGVhcnNvbiIpCmNvdl9wb3J0YWZvbGlvIDwtIGRpYWcoc2RfcG9ydGFmb2xpbykgJSolIGNvcl9wb3J0YWZvbGlvICUqJSBkaWFnKHNkX3BvcnRhZm9saW8pCgp3ZWlnaHRzIDwtIGMoMC4wNiwgMC4wOSwgMC4xNCwgMC4xMSwgMC4xNCwgMC4wNywgMC4wNSwgMC4wOCwgMC4wOCwgMC4xMywgMC4wNSwgMCkKCnZvbHBvcnQgPC0gc3FydCh0KGFzLm1hdHJpeCh3ZWlnaHRzKSkgJSolIGNvdl9wb3J0YWZvbGlvICUqJSBhcy5tYXRyaXgod2VpZ2h0cykpCnJwb3J0IDwtIHJlbmRpbWllbnRvcyAlKiUgYXMubWF0cml4KHdlaWdodHMpCgp2YXJfcmVzdWx0cyA8LSBjYWxjdWxhdGVfdmFyKHJlbmRpbWllbnRvcywgcnBvcnQsIHB2ID0gMTAwMDAwMCwgbiA9IDEzLCBjb25mX2xldmVscyA9IGMoMC45LCAwLjk1LCAwLjk5KSwgd2VpZ2h0cyA9IHdlaWdodHMsIGNvdl9wb3J0YWZvbGlvID0gY292X3BvcnRhZm9saW8pCgoKdmFyaF9wb3J0IDwtIHZhcl9yZXN1bHRzJHZhcmhfcG9ydAp2YXJoIDwtIHZhcl9yZXN1bHRzJHZhcmgKdmFycG5fcG9ydCA8LSB2YXJfcmVzdWx0cyR2YXJwbl9wb3J0CnZhcnBuIDwtIHZhcl9yZXN1bHRzJHZhcnBuCgoKI0FjdGl2b3MKCnZhcmhfdGJsIDwtIGRhdGEuZnJhbWUoVmFsdWUgPSB2YXJoKQoKa2FibGUodmFyaF90YmwsIGZvcm1hdCA9ICJodG1sIiwgY29sLm5hbWVzID0gYygiQVJDQSIsICJBTcOJUklDQSBNw5NWSUwiLCAiQklNQk8iLCAiQ0VNRVgiLCAiRkVNU0EiLCAiSU5CVVJTQSIsICJCQU5PUlRFIiwgIkcuTUVYSUNPIiwgIkNPQ0EgQ09MQSIsICJXQUxNQVJUIiwgIktJTUJFUkxZIiwgIklQQyIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiVmFSIGhpc3TDs3JpY28gYSAzIGHDsW9zIiA9IDEzKSkKCiMgUG9ydGFmb2xpbwpwb3J0Zm9saW9fdmFyX3RhYmxlIDwtIGRhdGEuZnJhbWUoCiAgIlBvcnRmb2xpbyIsCiAgSGlzdG9yaWNhbCA9IHZhcl9yZXN1bHRzJHZhcmhfcG9ydCwKICBQYXJhbWV0cmljID0gdmFyX3Jlc3VsdHMkdmFycG5fcG9ydAopCnBvcnRmb2xpb192YXJfdGFibGUgJT4lCiAgICBzZWxlY3QoMikgJT4lCiAgICBrYWJsZShhbGlnbiA9ICJjIiwgY29sLm5hbWVzID0gYygiVmFSIiksIGNhcHRpb24gPSAiVmFSIEhpc3TDs3JpY28gMyBhw7FvcyBwb3J0YWZvbGlvIikgJT4lCiAgICBrYWJsZV9zdHlsaW5nKCkKCgpgYGAKCgoKIyMgMSBhw7FvCgoKYGBge3IsIHdhcm5pbmc9RkFMU0V9CkFMRkEyIDwtIEFMRkFbIjIwMjEtMDUtMzEvIl0KCnJlbmRpbWllbnRvcyA8LSBuYS5vbWl0KFJldHVybi5jYWxjdWxhdGUoQUxGQTIpLCBtZXRob2QgPSAibG9nIikKCnNkX3BvcnRhZm9saW8gPC0gYXBwbHkocmVuZGltaWVudG9zLCAyLCBzZCkKY29yX3BvcnRhZm9saW8gPC0gY29yKHJlbmRpbWllbnRvcywgdXNlID0gImNvbXBsZXRlLm9icyIsIG1ldGhvZCA9ICJwZWFyc29uIikKY292X3BvcnRhZm9saW8gPC0gZGlhZyhzZF9wb3J0YWZvbGlvKSAlKiUgY29yX3BvcnRhZm9saW8gJSolIGRpYWcoc2RfcG9ydGFmb2xpbykKCndlaWdodHMgPC0gYygwLjA2LCAwLjA5LCAwLjE0LCAwLjExLCAwLjE0LCAwLjA3LCAwLjA1LCAwLjA4LCAwLjA4LCAwLjEzLCAwLjA1LCAwKQoKdm9scG9ydCA8LSBzcXJ0KHQoYXMubWF0cml4KHdlaWdodHMpKSAlKiUgY292X3BvcnRhZm9saW8gJSolIGFzLm1hdHJpeCh3ZWlnaHRzKSkKcnBvcnQgPC0gcmVuZGltaWVudG9zICUqJSBhcy5tYXRyaXgod2VpZ2h0cykKCnZhcl9yZXN1bHRzIDwtIGNhbGN1bGF0ZV92YXIocmVuZGltaWVudG9zLCBycG9ydCwgcHYgPSAxMDAwMDAwLCBuID0gMTMsIGNvbmZfbGV2ZWxzID0gYygwLjksIDAuOTUsIDAuOTkpLCB3ZWlnaHRzID0gd2VpZ2h0cywgY292X3BvcnRhZm9saW8gPSBjb3ZfcG9ydGFmb2xpbykKCgp2YXJoX3BvcnQgPC0gdmFyX3Jlc3VsdHMkdmFyaF9wb3J0CnZhcmggPC0gdmFyX3Jlc3VsdHMkdmFyaAp2YXJwbl9wb3J0IDwtIHZhcl9yZXN1bHRzJHZhcnBuX3BvcnQKdmFycG4gPC0gdmFyX3Jlc3VsdHMkdmFycG4KCgojQWN0aXZvcwoKdmFyaF90YmwgPC0gZGF0YS5mcmFtZShWYWx1ZSA9IHZhcmgpCgprYWJsZSh2YXJoX3RibCwgZm9ybWF0ID0gImh0bWwiLCBjb2wubmFtZXMgPSBjKCJBUkNBIiwgIkFNw4lSSUNBIE3Dk1ZJTCIsICJCSU1CTyIsICJDRU1FWCIsICJGRU1TQSIsICJJTkJVUlNBIiwgIkJBTk9SVEUiLCAiRy5NRVhJQ08iLCAiQ09DQSBDT0xBIiwgIldBTE1BUlQiLCAiS0lNQkVSTFkiLCAiSVBDIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJWYVIgaGlzdMOzcmljbyBhIDEgYcOxbyIgPSAxMykpCgojIFBvcnRhZm9saW8KcG9ydGZvbGlvX3Zhcl90YWJsZSA8LSBkYXRhLmZyYW1lKAogICJQb3J0Zm9saW8iLAogIEhpc3RvcmljYWwgPSB2YXJfcmVzdWx0cyR2YXJoX3BvcnQsCiAgUGFyYW1ldHJpYyA9IHZhcl9yZXN1bHRzJHZhcnBuX3BvcnQKKQpwb3J0Zm9saW9fdmFyX3RhYmxlICU+JQogICAgc2VsZWN0KDIpICU+JQogICAga2FibGUoYWxpZ24gPSAiYyIsIGNvbC5uYW1lcyA9IGMoIlZhUiIpLCBjYXB0aW9uID0gIlZhUiBoaXN0w7NyaWNvIGEgMSBhw7FvIHBvcnRhZm9saW8iKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoKQoKCmBgYAo=