This is an R Markdown
Notebook. When you execute code within the notebook, the results appear
beneath the code.
Try executing this chunk by clicking the Run button within
the chunk or by placing your cursor inside it and pressing
Ctrl+Shift+Enter.
# ==============================================================================
# TEMPLATE JAWABAN KUIS
# Komputasi Statistika, Kelas D
# Prodi S1 Statistika FSAD ITS - Semester Genap 2025/2026
# Kamis, 12 Maret 2026
# ==============================================================================
# Nama : BEATRISIA KAYLLA SIMANJUNTAK
# NRP : 5003251189
# Kelas : D
# ==============================================================================
# ==============================================================================
# Soal 1 [TOTAL 50 poin] - Winsorized Mean
# ==============================================================================
# Data
data <- c(12, 45, 52, 58, 61, 63, 67, 70, 72, 75, 78, 82, 88, 95, 310)
# --- [a] Buatlah fungsi winsorized_mean(x, alpha) ---
sort_function <- function(data){
sorted_data <- sort(data)
return(sorted_data)
}
mean_function <- function(data){
mean_value <- mean(data)
return(mean_value)
}
data <- sort_function(data)
winsor_function <- function(data, alpha){
data_sort <- sort_function(data)
n <- length(data_sort)
k <- floor(n * alpha)
winsor_data <- data_sort
for(i in 1:k){
winsor_data[i] <- data_sort[k+1]
}
for(i in (n-k+1):n){
winsor_data[i] <- data_sort[n-k]
}
return(winsor_data)
}
winsor_mean <- function(data, alpha){
data_winsor <- winsor_function(data, alpha)
mean_w <- mean_function(data_winsor)
return(list(
winsor_data = data_winsor,
winsor_mean = mean_w
))
}
# --- [b] Hitung ordinary mean (alpha=0) dan Winsorized mean 20% (alpha=0.2) ---
# Ordinary mean
# TULIS KODE ANDA DI SINI
result_00 <- winsor_mean(data, 0)
cat("Winsorized data alpha 0 :", result_00$winsor_data, "\n")
cat("Winsorized mean alpha 0 :", result_00$winsor_mean)
# Winsorized mean 20%
# TULIS KODE ANDA DI SINI
result_02 <- winsor_mean(data, 0.2)
cat("Winsorized data alpha 0.2 :", result_02$winsor_data, "\n")
cat("Winsorized mean alpha 0.2 :", result_02$winsor_mean, "\n\n")
# ==============================================================================
# Soal 2 [TOTAL 60 poin] - Weighted Multivariate Descriptive Statistics
# ==============================================================================
# --- Baca data CSV ---
df <- read.csv("C:/Users/HP/Downloads/Quiz 1 Komstat/data_quiz1.csv")
X <- as.matrix(df[, c("x1", "x2", "x3")])
w <- df$w
# --- [a] Buatlah fungsi weighted_corr(X, w) ---
weighted_corr <- function(X, w) {
# TULIS KODE ANDA DI SINI
X <- as.matrix(X)
n <- nrow(X)
W <- diag(w)
one_n <- matrix(1, nrow = n, ncol = 1)
nw <- as.numeric(t(one_n) %*% w)
x_bar_w <- (1/nw) * t(X) %*% W %*% one_n
D <- X - (one_n %*% t(x_bar_w))
Sw <- (1/nw) * t(D) %*% W %*% D
sw <- sqrt(diag(Sw))
V_inv <- diag(1/sw)
Rw <- V_inv %*% Sw %*% V_inv
return(list(
W = W,
mean_w = x_bar_w,
S_w = Sw,
s_w = sw,
R_w = Rw
))
}
hasil <- weighted_corr(X, w)
print(hasil$W)
print(hasil$mean_w)
print(hasil$S_w)
print(hasil$s_w)
print(hasil$R_w)
# --- [b] Aplikasikan fungsi pada data ---
# Panggil fungsi
# TULIS KODE ANDA DI SINI
hasil <- weighted_corr(X, w)
# Tampilkan vektor mean tertimbang
# TULIS KODE ANDA DI SINI
print(hasil$mean_w)
# Tampilkan matriks varians-kovarians tertimbang
# TULIS KODE ANDA DI SINI
print(hasil$S_w)
# Tampilkan vektor standar deviasi tertimbang
# TULIS KODE ANDA DI SINI
print(hasil$s_w)
# Tampilkan matriks korelasi tertimbang
# TULIS KODE ANDA DI SINI
print(hasil$R_w)
install.packages("ggplot2")
install.packages("corrplot")
library("ggplot2")
# 1. LOAD LIBRARIES (Penting agar tidak error "function not found")
library(ggplot2)
library(corrplot)
# ==============================================================================
# SOAL 1: WINSORIZED MEAN
# ==============================================================================
# Data Awal (Definisikan objek ini dulu!)
data_awal <- c(12, 45, 52, 58, 61, 63, 67, 70, 72, 75, 78, 82, 88, 95, 310)
# Fungsi Winsor (Sesuai kode Anda yang sudah diperbaiki)
winsor_function <- function(data, alpha){
data_sort <- sort(data)
n <- length(data_sort)
k <- floor(n * alpha)
winsor_data <- data_sort
if(k > 0){
for(i in 1:k) winsor_data[i] <- data_sort[k+1]
for(i in (n-k+1):n) winsor_data[i] <- data_sort[n-k]
}
return(winsor_data)
}
# Hitung Winsor 20%
data_winsor_20 <- winsor_function(data_awal, 0.2)
mean_winsor <- mean(data_winsor_20)
# VISUALISASI SOAL 1
library(ggplot2)
df_box <- data.frame(
Nilai = c(data_awal, data_winsor_20),
Tipe = rep(c("Original", "Winsorized 20%"), each = length(data_awal))
)
ggplot(df_box, aes(x = Tipe, y = Nilai, fill = Tipe)) +
geom_boxplot() +
scale_fill_manual(values = c("steelblue", "skyblue")) +
labs(title = "Boxplot Perbandingan Data Asli vs Winsorized") +
theme_minimal()
# ==============================================================================
# SOAL 2: MULTIVARIATE CORRELATION
# ==============================================================================
# Menggunakan matriks korelasi yang Anda dapatkan sebelumnya
# Kita buat matriksnya secara manual agar kode ini bisa jalan (reproducible)
Rw_matrix <- matrix(c(1.0000000, -0.9531095, -0.9558207,
-0.9531095, 1.0000000, 0.9891979,
-0.9558207, 0.9891979, 1.0000000),
nrow = 3, byrow = TRUE)
colnames(Rw_matrix) <- rownames(Rw_matrix) <- c("x1", "x2", "x3")
# VISUALISASI SOAL 2
corrplot(Rw_matrix, method = "color", addCoef.col = "black",
tl.col = "black", title = "\nHeatmap Korelasi Tertimbang", mar=c(0,0,1,0))
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpUaGlzIGlzIGFuIFtSIE1hcmtkb3duXShodHRwOi8vcm1hcmtkb3duLnJzdHVkaW8uY29tKSBOb3RlYm9vay4gV2hlbiB5b3UgZXhlY3V0ZSBjb2RlIHdpdGhpbiB0aGUgbm90ZWJvb2ssIHRoZSByZXN1bHRzIGFwcGVhciBiZW5lYXRoIHRoZSBjb2RlLg0KDQpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouDQoNCmBgYHtyfQ0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgVEVNUExBVEUgSkFXQUJBTiBLVUlTDQojIEtvbXB1dGFzaSBTdGF0aXN0aWthLCBLZWxhcyBEDQojIFByb2RpIFMxIFN0YXRpc3Rpa2EgRlNBRCBJVFMgLSBTZW1lc3RlciBHZW5hcCAyMDI1LzIwMjYNCiMgS2FtaXMsIDEyIE1hcmV0IDIwMjYNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIE5hbWEgIDogQkVBVFJJU0lBIEtBWUxMQSBTSU1BTkpVTlRBSw0KIyBOUlAgICA6IDUwMDMyNTExODkNCiMgS2VsYXMgOiBEDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIFNvYWwgMSBbVE9UQUwgNTAgcG9pbl0gLSBXaW5zb3JpemVkIE1lYW4NCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCiMgRGF0YQ0KZGF0YSA8LSBjKDEyLCA0NSwgNTIsIDU4LCA2MSwgNjMsIDY3LCA3MCwgNzIsIDc1LCA3OCwgODIsIDg4LCA5NSwgMzEwKQ0KIyAtLS0gW2FdIEJ1YXRsYWggZnVuZ3NpIHdpbnNvcml6ZWRfbWVhbih4LCBhbHBoYSkgLS0tDQpzb3J0X2Z1bmN0aW9uIDwtIGZ1bmN0aW9uKGRhdGEpew0KICBzb3J0ZWRfZGF0YSA8LSBzb3J0KGRhdGEpDQogIHJldHVybihzb3J0ZWRfZGF0YSkNCn0NCg0KbWVhbl9mdW5jdGlvbiA8LSBmdW5jdGlvbihkYXRhKXsNCiAgbWVhbl92YWx1ZSA8LSBtZWFuKGRhdGEpDQogIHJldHVybihtZWFuX3ZhbHVlKQ0KfQ0KDQpkYXRhIDwtIHNvcnRfZnVuY3Rpb24oZGF0YSkNCg0Kd2luc29yX2Z1bmN0aW9uIDwtIGZ1bmN0aW9uKGRhdGEsIGFscGhhKXsNCiAgDQogIGRhdGFfc29ydCA8LSBzb3J0X2Z1bmN0aW9uKGRhdGEpDQogIA0KICBuIDwtIGxlbmd0aChkYXRhX3NvcnQpDQogIGsgPC0gZmxvb3IobiAqIGFscGhhKQ0KICANCiAgd2luc29yX2RhdGEgPC0gZGF0YV9zb3J0DQogIA0KICBmb3IoaSBpbiAxOmspew0KICAgIHdpbnNvcl9kYXRhW2ldIDwtIGRhdGFfc29ydFtrKzFdDQogIH0NCiAgDQogIGZvcihpIGluIChuLWsrMSk6bil7DQogICAgd2luc29yX2RhdGFbaV0gPC0gZGF0YV9zb3J0W24ta10NCiAgfQ0KICANCiAgcmV0dXJuKHdpbnNvcl9kYXRhKQ0KfQ0KDQp3aW5zb3JfbWVhbiA8LSBmdW5jdGlvbihkYXRhLCBhbHBoYSl7DQogIA0KICBkYXRhX3dpbnNvciA8LSB3aW5zb3JfZnVuY3Rpb24oZGF0YSwgYWxwaGEpDQogIG1lYW5fdyA8LSBtZWFuX2Z1bmN0aW9uKGRhdGFfd2luc29yKQ0KICANCiAgcmV0dXJuKGxpc3QoDQogICAgd2luc29yX2RhdGEgPSBkYXRhX3dpbnNvciwNCiAgICB3aW5zb3JfbWVhbiA9IG1lYW5fdw0KICApKQ0KfQ0KDQoNCiMgLS0tIFtiXSBIaXR1bmcgb3JkaW5hcnkgbWVhbiAoYWxwaGE9MCkgZGFuIFdpbnNvcml6ZWQgbWVhbiAyMCUgKGFscGhhPTAuMikgLS0tDQoNCiMgT3JkaW5hcnkgbWVhbg0KIyBUVUxJUyBLT0RFIEFOREEgREkgU0lOSQ0KcmVzdWx0XzAwIDwtIHdpbnNvcl9tZWFuKGRhdGEsIDApDQpjYXQoIldpbnNvcml6ZWQgZGF0YSBhbHBoYSAwIDoiLCByZXN1bHRfMDAkd2luc29yX2RhdGEsICJcbiIpDQpjYXQoIldpbnNvcml6ZWQgbWVhbiBhbHBoYSAwIDoiLCByZXN1bHRfMDAkd2luc29yX21lYW4pDQoNCiMgV2luc29yaXplZCBtZWFuIDIwJQ0KIyBUVUxJUyBLT0RFIEFOREEgREkgU0lOSQ0KcmVzdWx0XzAyIDwtIHdpbnNvcl9tZWFuKGRhdGEsIDAuMikNCmNhdCgiV2luc29yaXplZCBkYXRhIGFscGhhIDAuMiA6IiwgcmVzdWx0XzAyJHdpbnNvcl9kYXRhLCAiXG4iKQ0KY2F0KCJXaW5zb3JpemVkIG1lYW4gYWxwaGEgMC4yIDoiLCByZXN1bHRfMDIkd2luc29yX21lYW4sICJcblxuIikNCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgU29hbCAyIFtUT1RBTCA2MCBwb2luXSAtIFdlaWdodGVkIE11bHRpdmFyaWF0ZSBEZXNjcmlwdGl2ZSBTdGF0aXN0aWNzDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIC0tLSBCYWNhIGRhdGEgQ1NWIC0tLQ0KZGYgPC0gcmVhZC5jc3YoIkM6L1VzZXJzL0hQL0Rvd25sb2Fkcy9RdWl6IDEgS29tc3RhdC9kYXRhX3F1aXoxLmNzdiIpDQpYIDwtIGFzLm1hdHJpeChkZlssIGMoIngxIiwgIngyIiwgIngzIildKQ0KdyA8LSBkZiR3DQoNCiMgLS0tIFthXSBCdWF0bGFoIGZ1bmdzaSB3ZWlnaHRlZF9jb3JyKFgsIHcpIC0tLQ0KDQp3ZWlnaHRlZF9jb3JyIDwtIGZ1bmN0aW9uKFgsIHcpIHsNCiAgIyBUVUxJUyBLT0RFIEFOREEgREkgU0lOSQ0KICBYIDwtIGFzLm1hdHJpeChYKQ0KICBuIDwtIG5yb3coWCkNCiAgVyA8LSBkaWFnKHcpDQogIA0KICBvbmVfbiA8LSBtYXRyaXgoMSwgbnJvdyA9IG4sIG5jb2wgPSAxKQ0KICBudyA8LSBhcy5udW1lcmljKHQob25lX24pICUqJSB3KQ0KICANCiAgeF9iYXJfdyA8LSAoMS9udykgKiB0KFgpICUqJSBXICUqJSBvbmVfbg0KICANCiAgRCA8LSBYIC0gKG9uZV9uICUqJSB0KHhfYmFyX3cpKQ0KICANCiAgU3cgPC0gKDEvbncpICogdChEKSAlKiUgVyAlKiUgRA0KICANCiAgc3cgPC0gc3FydChkaWFnKFN3KSkNCiAgDQogIFZfaW52IDwtIGRpYWcoMS9zdykNCiAgUncgPC0gVl9pbnYgJSolIFN3ICUqJSBWX2ludg0KICANCiAgcmV0dXJuKGxpc3QoDQogICAgVyA9IFcsDQogICAgbWVhbl93ID0geF9iYXJfdywNCiAgICBTX3cgPSBTdywNCiAgICBzX3cgPSBzdywNCiAgICBSX3cgPSBSdw0KICApKQ0KfQ0KDQpoYXNpbCA8LSB3ZWlnaHRlZF9jb3JyKFgsIHcpDQpwcmludChoYXNpbCRXKQ0KcHJpbnQoaGFzaWwkbWVhbl93KQ0KcHJpbnQoaGFzaWwkU193KQ0KcHJpbnQoaGFzaWwkc193KQ0KcHJpbnQoaGFzaWwkUl93KQ0KDQoNCg0KDQoNCiMgLS0tIFtiXSBBcGxpa2FzaWthbiBmdW5nc2kgcGFkYSBkYXRhIC0tLQ0KDQojIFBhbmdnaWwgZnVuZ3NpDQojIFRVTElTIEtPREUgQU5EQSBESSBTSU5JDQpoYXNpbCA8LSB3ZWlnaHRlZF9jb3JyKFgsIHcpDQoNCiMgVGFtcGlsa2FuIHZla3RvciBtZWFuIHRlcnRpbWJhbmcNCiMgVFVMSVMgS09ERSBBTkRBIERJIFNJTkkNCnByaW50KGhhc2lsJG1lYW5fdykNCg0KIyBUYW1waWxrYW4gbWF0cmlrcyB2YXJpYW5zLWtvdmFyaWFucyB0ZXJ0aW1iYW5nDQojIFRVTElTIEtPREUgQU5EQSBESSBTSU5JDQpwcmludChoYXNpbCRTX3cpDQoNCiMgVGFtcGlsa2FuIHZla3RvciBzdGFuZGFyIGRldmlhc2kgdGVydGltYmFuZw0KIyBUVUxJUyBLT0RFIEFOREEgREkgU0lOSQ0KcHJpbnQoaGFzaWwkc193KQ0KDQojIFRhbXBpbGthbiBtYXRyaWtzIGtvcmVsYXNpIHRlcnRpbWJhbmcNCiMgVFVMSVMgS09ERSBBTkRBIERJIFNJTkkNCnByaW50KGhhc2lsJFJfdykNCg0KDQpgYGANCg0KYGBge3J9DQoNCmluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQ0KaW5zdGFsbC5wYWNrYWdlcygiY29ycnBsb3QiKQ0KbGlicmFyeSgiZ2dwbG90MiIpDQoNCiMgMS4gTE9BRCBMSUJSQVJJRVMgKFBlbnRpbmcgYWdhciB0aWRhayBlcnJvciAiZnVuY3Rpb24gbm90IGZvdW5kIikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoY29ycnBsb3QpDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIFNPQUwgMTogV0lOU09SSVpFRCBNRUFODQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIERhdGEgQXdhbCAoRGVmaW5pc2lrYW4gb2JqZWsgaW5pIGR1bHUhKQ0KZGF0YV9hd2FsIDwtIGMoMTIsIDQ1LCA1MiwgNTgsIDYxLCA2MywgNjcsIDcwLCA3MiwgNzUsIDc4LCA4MiwgODgsIDk1LCAzMTApDQoNCiMgRnVuZ3NpIFdpbnNvciAoU2VzdWFpIGtvZGUgQW5kYSB5YW5nIHN1ZGFoIGRpcGVyYmFpa2kpDQp3aW5zb3JfZnVuY3Rpb24gPC0gZnVuY3Rpb24oZGF0YSwgYWxwaGEpew0KICBkYXRhX3NvcnQgPC0gc29ydChkYXRhKQ0KICBuIDwtIGxlbmd0aChkYXRhX3NvcnQpDQogIGsgPC0gZmxvb3IobiAqIGFscGhhKQ0KICB3aW5zb3JfZGF0YSA8LSBkYXRhX3NvcnQNCiAgaWYoayA+IDApew0KICAgIGZvcihpIGluIDE6aykgd2luc29yX2RhdGFbaV0gPC0gZGF0YV9zb3J0W2srMV0NCiAgICBmb3IoaSBpbiAobi1rKzEpOm4pIHdpbnNvcl9kYXRhW2ldIDwtIGRhdGFfc29ydFtuLWtdDQogIH0NCiAgcmV0dXJuKHdpbnNvcl9kYXRhKQ0KfQ0KDQojIEhpdHVuZyBXaW5zb3IgMjAlDQpkYXRhX3dpbnNvcl8yMCA8LSB3aW5zb3JfZnVuY3Rpb24oZGF0YV9hd2FsLCAwLjIpDQptZWFuX3dpbnNvciA8LSBtZWFuKGRhdGFfd2luc29yXzIwKQ0KDQojIFZJU1VBTElTQVNJIFNPQUwgMQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpkZl9ib3ggPC0gZGF0YS5mcmFtZSgNCiAgTmlsYWkgPSBjKGRhdGFfYXdhbCwgZGF0YV93aW5zb3JfMjApLA0KICBUaXBlID0gcmVwKGMoIk9yaWdpbmFsIiwgIldpbnNvcml6ZWQgMjAlIiksIGVhY2ggPSBsZW5ndGgoZGF0YV9hd2FsKSkNCikNCg0KZ2dwbG90KGRmX2JveCwgYWVzKHggPSBUaXBlLCB5ID0gTmlsYWksIGZpbGwgPSBUaXBlKSkgKw0KICBnZW9tX2JveHBsb3QoKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoInN0ZWVsYmx1ZSIsICJza3libHVlIikpICsNCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IFBlcmJhbmRpbmdhbiBEYXRhIEFzbGkgdnMgV2luc29yaXplZCIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIFNPQUwgMjogTVVMVElWQVJJQVRFIENPUlJFTEFUSU9ODQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIE1lbmdndW5ha2FuIG1hdHJpa3Mga29yZWxhc2kgeWFuZyBBbmRhIGRhcGF0a2FuIHNlYmVsdW1ueWENCiMgS2l0YSBidWF0IG1hdHJpa3NueWEgc2VjYXJhIG1hbnVhbCBhZ2FyIGtvZGUgaW5pIGJpc2EgamFsYW4gKHJlcHJvZHVjaWJsZSkNClJ3X21hdHJpeCA8LSBtYXRyaXgoYygxLjAwMDAwMDAsIC0wLjk1MzEwOTUsIC0wLjk1NTgyMDcsDQogICAgICAgICAgICAgICAgICAgICAgLTAuOTUzMTA5NSwgIDEuMDAwMDAwMCwgIDAuOTg5MTk3OSwNCiAgICAgICAgICAgICAgICAgICAgICAtMC45NTU4MjA3LCAgMC45ODkxOTc5LCAgMS4wMDAwMDAwKSwgDQogICAgICAgICAgICAgICAgICAgIG5yb3cgPSAzLCBieXJvdyA9IFRSVUUpDQpjb2xuYW1lcyhSd19tYXRyaXgpIDwtIHJvd25hbWVzKFJ3X21hdHJpeCkgPC0gYygieDEiLCAieDIiLCAieDMiKQ0KDQojIFZJU1VBTElTQVNJIFNPQUwgMg0KY29ycnBsb3QoUndfbWF0cml4LCBtZXRob2QgPSAiY29sb3IiLCBhZGRDb2VmLmNvbCA9ICJibGFjayIsIA0KICAgICAgICAgdGwuY29sID0gImJsYWNrIiwgdGl0bGUgPSAiXG5IZWF0bWFwIEtvcmVsYXNpIFRlcnRpbWJhbmciLCBtYXI9YygwLDAsMSwwKSkNCmBgYA0K