Pendahuluan

Caffe Mocha GIF

Penelitian ini dilakukan untuk mengetahui faktor-faktor yang memengaruhi penjualan produk Caffe Mocha pada dataset Coffee Chain. Caffe Mocha dipilih karena merupakan salah satu jenis minuman dalam kategori Espresso, yang memiliki nilai penjualan relatif tinggi dibandingkan produk kopi biasa. Selain itu Caffe Mocha dipilih karena memiliki jumlah transaksi yang cukup besar (480 entri), sehingga model yang dibangun lebih stabil. Tujuan dari penelitian ini adalah untuk memahami variabel apa saja yang secara signifikan memengaruhi besarnya penjualan Caffe Mocha dan bagaimana hubungan antara variabel-variabel tersebut.

Dalam analisis ini, variabel yang digunakan sebagai variabel dependen (Y) adalah Sales (dollar), yaitu nilai total penjualan dari produk. Sales dipilih karena mewakili performa kinerja penjualan secara langsung. Sementara itu, variabel independen (X) yang digunakan meliputi Marketing, Inventory, dan COGS (Cost of Goods Sold). Marketing (dollar) mewakili besarnya anggaran promosi yang dapat meningkatkan penjualan, Inventory (unit) menunjukkan stok yang tersedia yang bisa memengaruhi kemampuan memenuhi permintaan, dan COGS (dollar) merepresentasikan biaya produksi yang juga dapat memengaruhi margin dan strategi harga. Ketiga variabel ini memiliki kaitan yang logis dalam konteks manajemen penjualan produk.

Untuk menganalisis hubungan antar variabel, metode yang digunakan adalah regresi linear berganda dengan estimasi robust Least Trimmed Squares (LTS). Metode LTS dipilih karena memiliki keunggulan dalam menghadapi data yang mungkin mengandung pencilan (outlier) atau ketidakteraturan lainnya, yang bisa memengaruhi akurasi model regresi biasa. Dengan menggunakan pendekatan robust, hasil analisis diharapkan tetap stabil dan andal meskipun terdapat observasi yang ekstrem dalam data.

Landasan Teori

Uji Asumsi Klasik

Uji asumsi klasik dilakukan untuk melihat apakah model regresi yang diperoleh memenuhi asumsi klasik sehingga dapat dikatakan bahwa model yang dihasilkan bersifat BLUE (Best Linear Unbiased Estimator). Jika ada asumsi yang dilanggar, maka tidak dapat digunakan. Maka dari itu, digunakan regresi robust.

Uji Normalitas

Untuk menguji apakah dalam model regresi variabel pengganggu atau residual memiliki distribusi normal atau tidak maka digunakan uji Kolmogorov Smirnov Test. Keputusan untuk menolak \(H_0\) jika p-value kurang dari tingkat signifikansi (𝛼) 5%.

Uji Heterokedastisitas

Uji Heteroskedastisitas bertujuan untuk mengetahui apakah variansi galat bersifat homoskedastisitas atau heteroskedastisitas. Heteroskedastisitas akan menyebabkan penaksiran koefisien-koefisien regresi menjadi tidak efisien dan hasil taksiran dapat menjadi kurang atau melebihi dari semestinya. Dengan demikian, agar koefisien-koefisien regresi tidak salah taksir maka heteroskedastisitas harus dihilangkan. Salah satu metode uji heteroskedastisitas adalah uji Breusch-Pagan.

Uji Multikolinearitas

Untuk melakukan uji multikolinearitas, dapat digunakan metode Variance Inflation Factor (VIF). VIF mengukur sejauh mana variabel independen terkait erat dengan variabel lain dalam model regresi. Semakin tinggi nilai VIF, semakin tinggi tingkat multikolinearitas. Nilai VIF>10 menunjukkan adanya multikolinearitas yang signifikan.

Uji Autokorelasi

Uji autokorelasi atau uji non-autokorelasi dalam konteks regresi adalah pengujian apakah terdapat hubungan linier antara nilai residual pada suatu observasi dengan nilai residual pada observasi sebelumnya.Pengujian autokorelasi dapat dilakukan dengan uji Durbin-Watson

Uji Linearitas

Uji linearitas digunakan untuk melihat apakah model yang digunakan memiliki hubungan linear atau tidak. Uji linearitas sangat penting dalam regresi linier karena model regresi linier mengasumsikan bahwa hubungan antara variabel dependen dan independen dapat dijelaskan dengan garis lurus.

Regresi Robust Estimasi LTS

Least Trimmed Square (LTS) diusulkan oleh Rousseuw (1984) sebagai alternatif robust untuk mengatasi kelemahan MKT, yaitu dengan menggunakan sebanyak ℎ (ℎ ≤ 𝑛) kuadrat sesatan yang diurutkan nilainya (Rousseuw, 1984). Rumus pada estimasi LTS sebagai berikut :

\[ Q_{\mathrm{LTS}} = \sum_{i=1}^{h} e_i^2 \]

Keterangan:
- \(h = \left\lfloor \tfrac{n}{2} \right\rfloor + \left\lfloor \tfrac{k+2}{2} \right\rfloor\)
- \(e_i = \hat y_i - X_i^\ \hat\beta_0\)

Menurut Rousseeuw dan Hubert (1997) estimator untuk LTS dapat didapatkan dengan cara:

\[ s_{\mathrm{LTS}} = d_{h,n}\, \sqrt{\frac{1}{h}\sum_{i=1}^{h} e_i^2} \]

dengan:
- \(d_{h,n} = \displaystyle \frac{1}{\sqrt{\,1 - \dfrac{2n}{h\,c_{h,n}}\;\phi\bigl(1/c_{h,n}\bigr)\,}}\)
- \(c_{h,n} = \displaystyle \frac{1}{\Phi^{-1}\!\Bigl(\tfrac{h + n}{2n}\Bigr)}\)

Setelah didapatkan nilai \(s_{LTS}\) lalu menghitung pembobot \(w_i\) dengan rumus:

\[ w_i \;=\; \begin{cases} 0, & \text{jika } \Bigl|\dfrac{e_i}{s_{\mathrm{LTS}}}\Bigr| > 2.5,\\[0.5em] 1, & \text{lainnya.} \end{cases} \]

Source Code

Library yang digunakan

library(car)
## Loading required package: carData
library(zoo)
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(lmtest)
library(robustbase)
library(car)
library(MASS)
library(lmtest)
library(readxl)

Import Data

caffeemocha <- read_excel("D:/caffeemocha.xlsx")
caffeemocha
## # A tibble: 480 × 4
##    Sales Marketing Inventory  COGS
##    <dbl>     <dbl>     <dbl> <dbl>
##  1   134        15       456    54
##  2   546        77      1310   234
##  3    43         4       777    17
##  4   123        14       821    50
##  5   341        47      1091   170
##  6   150        21       965    69
##  7   180        68       522    75
##  8   190        72       551    79
##  9   126        57       435    63
## 10    90        34       261    37
## # ℹ 470 more rows
#MEMBUAT DATA FRAME
data<-data.frame(caffeemocha)

Statsitik Deskriptif

#Statistik Deskriptif
summary(data)
##      Sales         Marketing        Inventory           COGS       
##  Min.   : 39.0   Min.   :  4.00   Min.   : 251.0   Min.   : 15.00  
##  1st Qu.:104.8   1st Qu.: 15.00   1st Qu.: 432.2   1st Qu.: 44.00  
##  Median :133.0   Median : 28.50   Median : 615.0   Median : 59.00  
##  Mean   :176.9   Mean   : 41.01   Mean   : 756.2   Mean   : 79.15  
##  3rd Qu.:227.0   3rd Qu.: 53.00   3rd Qu.: 897.2   3rd Qu.:103.25  
##  Max.   :687.0   Max.   :156.00   Max.   :3641.0   Max.   :295.00

Model Prediksi MKT

MKT=lm(Sales~.,data=data)
summary(MKT)
## 
## Call:
## lm(formula = Sales ~ ., data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -174.46  -12.82    1.39   20.74   79.57 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 44.851196   3.143345   14.27   <2e-16 ***
## Marketing   -0.685188   0.063286  -10.83   <2e-16 ***
## Inventory   -0.082956   0.004127  -20.10   <2e-16 ***
## COGS         2.815921   0.042934   65.59   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 35.85 on 476 degrees of freedom
## Multiple R-squared:  0.9241, Adjusted R-squared:  0.9236 
## F-statistic:  1930 on 3 and 476 DF,  p-value: < 2.2e-16

Jadi model prediksi MKT nya : \[ \widehat{\text{Sales}} \;=\; 44.851196 \;-\;0.685188\,\mathrm{Marketing} \;-\;0.082956\,\mathrm{Inventory} \;+\;2.815921\,\mathrm{COGS} \;+\varepsilon_i \]

Uji signifikansi

Uji Simultan

\[ \begin{aligned}[l] H_0:\;&\;\beta_{\mathrm{Marketing}} = \beta_{\mathrm{Inventory}} = \beta_{\mathrm{COGS}} = 0,\\ H_1:\;&\;\text{setidaknya salah satu }\beta_i \neq 0. \end{aligned} \]

\[ \begin{aligned}[l] \alpha &= 0.05,\\ \text{Tolak }H_0 &\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] p\text{-value} &= 2.2\times10^{-16}. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}<0.05,\\\text{maka H0 ditolak} \\\text{yang berarti bahwa paling tidak terdapat satu dari variabel Marketing (X1), Inventory (X2), COGS (X3) berpengaruh signifikan terhadap Sales} } \]

Uji Parsial

Uji Parsial Variabel Marketing : \[ \begin{aligned}[l] H_0:\;&\beta_{\mathrm{Marketing}} = 0,\\ H_1:\;&\beta_{\mathrm{Marketing}} \neq 0,\\ \alpha &= 0.05,\\ \text{Tolak }H_0 &\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] t_{\mathrm{Marketing}} &= -10.83,\\ p\text{-value} &< 2\times10^{-16}. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}<0.05,\; \beta_{\mathrm{Marketing}}\text{ signifikan terhadap Sales.} } \] Uji Parsial Inventory \[ \begin{aligned}[l] H_0:\;&\beta_{\mathrm{Inventory}} = 0,\\ H_1:\;&\beta_{\mathrm{Inventory}} \neq 0,\\ \alpha &= 0.05,\\ \text{Tolak }H_0 &\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] t_{\mathrm{Inventory}} &= -20.10,\\ p\text{-value} &< 2\times10^{-16}. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}<0.05,\; \beta_{\mathrm{Inventory}}\text{ signifikan terhadap Sales.} } \] Uji Parsial COGS \[ \begin{aligned}[l] H_0:\;&\beta_{\mathrm{COGS}} = 0,\\ H_1:\;&\beta_{\mathrm{COGS}} \neq 0,\\ \alpha &= 0.05,\\ \text{Tolak }H_0 &\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] t_{\mathrm{COGS}} &= 65.59,\\ p\text{-value} &< 2\times10^{-16}. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}<0.05,\; \beta_{\mathrm{COGS}}\text{ signifikan terhadap Sales.} } \]

Uji asumsi

Uji Normalitas

#Menggunakan Uji Kolmogorov Smirnov
ks.test(MKT$residuals, 'pnorm')
## Warning in ks.test.default(MKT$residuals, "pnorm"): ties should not be present
## for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  MKT$residuals
## D = 0.4857, p-value < 2.2e-16
## alternative hypothesis: two-sided

\[ \begin{aligned}[l] H_0:\;&\text{Residual mengikuti distribusi normal},\\ H_1:\;&\text{Residual tidak mengikuti distribusi normal},\\ \alpha &= 0.05,\\ \text{Tolak }H_0&\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] p\text{-value} &< 2.2\times10^{-16}. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}<0.05,\; \text{maka residual tidak berdistribusi normal.} } \]

Uji Heterokedastisitas

#Menggunakan Uji Breusch-Pagan
bptest(MKT)
## 
##  studentized Breusch-Pagan test
## 
## data:  MKT
## BP = 133.18, df = 3, p-value < 2.2e-16

\[ \begin{aligned}[l] H_0:\;&\text{Tidak terdapat Heterokedastisitas},\\ H_1:\;&\text{Terdapat Heterokedastisitas},\\ \alpha &= 0.05,\\ \text{Tolak }H_0 &\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] \mathrm{BP} &= 133.18,\\ \mathrm{df} &= 3,\\ p\text{-value} &< 2.2\times10^{-16}. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}<0.05,\; \text{maka H}_0\text{ ditolak maka terdapat heteroskedastisitas.} } \]

Uji Autokorelasi

#Menggunakan Uji Durbin Watson
dwtest(MKT)
## 
##  Durbin-Watson test
## 
## data:  MKT
## DW = 1.7342, p-value = 0.001815
## alternative hypothesis: true autocorrelation is greater than 0

\[ \begin{aligned}[l] H_0:\;&\rho = 0 \quad(\text{tidak ada autokorelasi}),\\ H_1:\;&\rho \neq 0 \quad(\text{ada autokorelasi}),\\ \alpha &= 0.05,\\ \text{Tolak }H_0 &\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] \mathrm{DW} &= 1.7342,\\ p\text{-value} &= 0.001815. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}<0.05,\; H_0\text{ ditolak maka terdapat autokorelasi residual.} } \]

Uji Multikolinearitas

#Menggunakan Uji VIF
vif(MKT)
## Marketing Inventory      COGS 
##  1.883039  1.597174  2.194673

\[ \begin{aligned}[l] H_0:\;&\text{Tidak terdapat multikolinearitas antar variabel},\\ H_1:\;&\text{Terdapat multikolinearitas antar variabel},\\ \text{Kriteria: }&\text{tolak }H_0\;\text{jika VIF} > 10. \end{aligned} \]

\[ \begin{aligned}[l] \mathrm{VIF}(\mathrm{Marketing}) &= 1.8830,\\ \mathrm{VIF}(\mathrm{Inventory}) &= 1.5972,\\ \mathrm{VIF}(\mathrm{COGS}) &= 2.1947. \end{aligned} \]

\[ \boxed{ \text{Karena semua VIF}<10,\; \text{maka gagal tolak }H_0\;\Longrightarrow\; \text{tidak ada multikolinearitas.} } \]

Uji Liniearitas

# Uji Asumsi Linearitas menggunakan Ramsey RESET
ramsey_test <- resettest(MKT, power = 2)
ramsey_test
## 
##  RESET test
## 
## data:  MKT
## RESET = 43.833, df1 = 1, df2 = 475, p-value = 9.691e-11

\[ \begin{aligned}[l] H_0:\;&\text{Model memenuhi asumsi linearitas},\\ H_1:\;&\text{Model tidak memenuhi asumsi linearitas},\\ \alpha &= 0.05,\\ \text{Tolak }H_0 &\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] p\text{-value} &= 9.691\times10^{-11}. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}<0.05,\; H_0\text{ ditolak maka model tidak memenuhi asumsi linearitas.} } \]

Deteksi Outlier

boxplot(data)

Dilihat dari boxplot tersebut dapat disimpulkan terdapat outlier pada data.

dffits_values <- dffits(MKT)
nilai_pembanding <- 2 * (sqrt(4/480))
cat("\nNilai Pembanding DFFITS:", nilai_pembanding)
## 
## Nilai Pembanding DFFITS: 0.1825742
jumlah_outlier <- sum(abs(dffits_values) > nilai_pembanding)
cat("\n\nJumlah Data Outlier:", jumlah_outlier)
## 
## 
## Jumlah Data Outlier: 40

Model Regresi Robust Estimasi LTS

model_robust <- ltsReg(Sales ~ Marketing + Inventory + COGS, data = data)
model_robust
## 
## Call:
## ltsReg.formula(formula = Sales ~ Marketing + Inventory + COGS,     data = data)
## 
## Coefficients:
## Intercept  Marketing  Inventory       COGS  
##  2.397061  -0.049805   0.001041   2.409433  
## 
## Scale estimate 9.212
summary(model_robust)
## 
## Call:
## ltsReg.formula(formula = Sales ~ Marketing + Inventory + COGS, 
##     data = data)
## 
## Residuals (from reweighted LS):
##     Min      1Q  Median      3Q     Max 
## -20.605  -1.707   0.000   2.567  20.427 
## 
## Coefficients:
##            Estimate Std. Error t value Pr(>|t|)    
## Intercept  2.397061   1.079482   2.221   0.0269 *  
## Marketing -0.049805   0.019446  -2.561   0.0108 *  
## Inventory  0.001041   0.001946   0.535   0.5931    
## COGS       2.409433   0.016090 149.747   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.356 on 395 degrees of freedom
## Multiple R-Squared: 0.9943,  Adjusted R-squared: 0.9942 
## F-statistic: 2.292e+04 on 3 and 395 DF,  p-value: < 2.2e-16

Jadi model regresi robust nya : \[ \widehat{\text{Sales}} \;=\; 2.397061 \;-\;0.049805\,\mathrm{Marketing} \;+\;0.001041\,\mathrm{Inventory} \;+\;2.409433\,\mathrm{COGS} \;+\varepsilon_i \]

Artinya:

  • Intercept (2,3971): ketika COGS, Marketing, dan Inventory semuanya bernilai nol, model memprediksi Sales sebesar sekitar 2,40 unit.

  • COGS (2,4094): setiap kenaikan 1 satuan dalam COGS (biaya pokok penjualan) dikaitkan dengan peningkatan Sales sebesar kira-kira 2,41 satuan, menandakan bahwa COGS memiliki pengaruh positif dan terbesar di antara ketiga prediktor.

  • Marketing (−0,0498): setiap tambahan 1 satuan belanja Marketing diperkirakan menurunkan Sales sebesar 0,05 satuan—efek negatif yang relatif kecil, mungkin karena peningkatan pengeluaran pemasaran pada titik tertentu tidak selalu langsung mendorong penjualan.

  • Inventory (0,0010): koefisien positif tapi sangat kecil, menunjukkan bahwa perubahan Inventory hampir tidak berpengaruh terhadap Sales dalam rentang data ini.

Secara keseluruhan, COGS adalah pendorong utama penjualan, sementara Marketing dan Inventory memberikan efek yang jauh lebih lemah, bahkan Marketing sedikit menurunkan prediksi Sales dan Inventory nyaris tidak berdampak.

Uji Signifikansi Model

Uji Simultan

\[ \begin{aligned}[l] H_0:\;&\;\beta_{\mathrm{Marketing}} = \beta_{\mathrm{Inventory}} = \beta_{\mathrm{COGS}} = 0,\\ H_1:\;&\;\text{setidaknya salah satu }\beta_i \neq 0. \end{aligned} \]

\[ \begin{aligned}[l] \alpha &= 0.05,\\ \text{Tolak }H_0 &\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] p\text{-value} &= 2.2\times10^{-16}. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}<0.05,\\\text{maka H0 ditolak} \\\text{yang berarti bahwa paling tidak terdapat satu dari variabel Marketing (X1), Inventory (X2), COGS (X3) berpengaruh signifikan terhadap Sales} } \]

Uji Parsial

Uji Parsial Marketing \[ \begin{aligned}[l] H_0:\;&\beta_{\mathrm{Marketing}} = 0,\\ H_1:\;&\beta_{\mathrm{Marketing}} \neq 0. \end{aligned} \]

\[ \begin{aligned}[l] \alpha &= 0.05,\\ \text{Tolak }H_0 &\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] t(395) &= -2.561,\\ p\text{-value} &= 0.0108. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}<0.05,\; \beta_{\mathrm{Marketing}}\text{ signifikan terhadap Sales.} } \] Uji Parsial Inventory: \[ \begin{aligned}[l] H_0:\;&\beta_{\mathrm{Inventory}} = 0,\\ H_1:\;&\beta_{\mathrm{Inventory}} \neq 0. \end{aligned} \]

\[ \begin{aligned}[l] \alpha &= 0.05,\\ \text{Tolak }H_0 &\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] t(395) &= 0.535,\\ p\text{-value} &= 0.5931. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}\ge 0.05,\; \beta_{\mathrm{Inventory}}\text{ tidak signifikan terhadap Sales.} } \] Uji Parsial COGS: \[ \begin{aligned}[l] H_0:\;&\beta_{\mathrm{COGS}} = 0,\\ H_1:\;&\beta_{\mathrm{COGS}} \neq 0. \end{aligned} \]

\[ \begin{aligned}[l] \alpha &= 0.05,\\ \text{Tolak }H_0 &\quad\text{jika }p\text{-value}<\alpha. \end{aligned} \]

\[ \begin{aligned}[l] t(395) &= 149.747,\\ p\text{-value} &< 2\times10^{-16}. \end{aligned} \]

\[ \boxed{ \text{Karena }p\text{-value}<0.05,\; \beta_{\mathrm{COGS}}\text{ signifikan terhadap Sales.} } \]

Interpretasi

Secara simultan uji F menunjukkan bahwa secara keseluruhan ketiga prediktor yaitu COGS, Marketing, dan Inventory secara bersama‐sama berpengaruh signifikan terhadap Sales (F(3,395)=22920, p-value<2.2×10⁻¹⁶), artinya model regresi robust LTS ini layak digunakan untuk memprediksi Sales. Namun, pada uji parsial hanya COGS (t=149.747, p<2×10⁻¹⁶) dan Marketing (t=–2.561, p=0.0108) yang terbukti signifikan secara individual, sedangkan Inventory (t=0.535, p=0.5931) tidak signifikan; ini menandakan bahwa peningkatan COGS dan perubahan strategi Marketing benar‐benar berdampak pada penjualan, sementara variasi Inventory dalam rentang data ini tidak memberikan kontribusi yang berarti.

Kesimpulan

Dari analisis regresi MKT awal, ditemukan bahwa model OLS signifikan secara simultan namun melanggar beberapa asumsi klasik (normalitas, heteroskedastisitas, autokorelasi, dan linearitas), meskipun multikolinearitas tidak menjadi isu besar. Dengan melakukan estimasi robust LTS, model menjadi tahan terhadap pencilan dan menghasilkan persamaan

\[ \widehat{\text{Sales}} = 2{,}3971 - 0{,}0498\,\text{Marketing} + 0{,}0010\,\text{Inventory} + 2{,}4094\,\text{COGS} + \varepsilon_i. \]

Artinya:

  • COGS (biaya pokok penjualan) punya pengaruh paling besar: naik setengah dolar COGS, penjualan naik sekitar $2,40.
  • Marketing (anggaran iklan) sedikit menurunkan penjualan mungkin karena kampanye belum tepat sasaran.
  • Inventory (stok barang) hampir tidak berpengaruh.

Dari sudut pandang bisnis, hasil ini menunjukkan bahwa CaffeMocha sebaiknya fokus mengatur ulang biaya produksi dan memperbaiki cara promosi. Mengeluarkan biaya lebih untuk iklan ternyata belum tentu menaikkan penjualan, jadi strategi pemasarannya mungkin perlu dievaluasi. Sementara itu, menambah stok barang juga tidak banyak pengaruhnya terhadap penjualan.Karena model LTS membuang atau mengecilkan pengaruh angka penjualan yang sangat tinggi atau sangat rendah, hasilnya lebih mencerminkan kondisi rata-rata sehari-hari. Dengan begitu, rencana belanja dan produksi bisa disusun dengan lebih mantap, tanpa khawatir dipengaruhi data yang outlier.

Referensi

☀️

🌙

LS0tDQp0aXRsZTogIkFOQUxJU0lTIFJFR1JFU0kgUk9CVVNUIERFTkdBTiBFU1RJTUFTSSBMVFMgUEFEQSBQRU5KVUFMQU4gUFJPRFVLIENBRkZFTU9DSEEiDQphdXRob3I6ICI8Y2VudGVyPkZheXp1bCBIYXEgTS5CIChNMDcyMzAzNik8L2NlbnRlcj4gIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0KY3NzOiAiY3VzdG9tLmNzcyINCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0DQotLS0NCg0KIyBQZW5kYWh1bHVhbg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tYm90dG9tOiAxZW07Ij4NCiAgPGltZyBzcmM9ImNvZmZlZS5naWYiIGFsdD0iQ2FmZmUgTW9jaGEgR0lGIiB3aWR0aD0iNDAwIiAvPg0KPC9kaXY+DQoNCjxwIHN0eWxlPSJjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjoganVzdGlmeTsiPg0KUGVuZWxpdGlhbiBpbmkgZGlsYWt1a2FuIHVudHVrIG1lbmdldGFodWkgZmFrdG9yLWZha3RvciB5YW5nIG1lbWVuZ2FydWhpIHBlbmp1YWxhbiBwcm9kdWsgKkNhZmZlIE1vY2hhKiBwYWRhIGRhdGFzZXQgKkNvZmZlZSBDaGFpbiouICpDYWZmZSBNb2NoYSogZGlwaWxpaCBrYXJlbmEgbWVydXBha2FuIHNhbGFoIHNhdHUgamVuaXMgbWludW1hbiBkYWxhbSBrYXRlZ29yaSAqRXNwcmVzc28qLCB5YW5nIG1lbWlsaWtpIG5pbGFpIHBlbmp1YWxhbiByZWxhdGlmIHRpbmdnaSBkaWJhbmRpbmdrYW4gcHJvZHVrIGtvcGkgYmlhc2EuIFNlbGFpbiBpdHUgKkNhZmZlIE1vY2hhKiBkaXBpbGloIGthcmVuYSBtZW1pbGlraSBqdW1sYWggdHJhbnNha3NpIHlhbmcgY3VrdXAgYmVzYXIgKDQ4MCBlbnRyaSksIHNlaGluZ2dhIG1vZGVsIHlhbmcgZGliYW5ndW4gbGViaWggc3RhYmlsLiBUdWp1YW4gZGFyaSBwZW5lbGl0aWFuIGluaSBhZGFsYWggdW50dWsgbWVtYWhhbWkgdmFyaWFiZWwgYXBhIHNhamEgeWFuZyBzZWNhcmEgc2lnbmlmaWthbiBtZW1lbmdhcnVoaSBiZXNhcm55YSBwZW5qdWFsYW4gKkNhZmZlIE1vY2hhKiBkYW4gYmFnYWltYW5hIGh1YnVuZ2FuIGFudGFyYSB2YXJpYWJlbC12YXJpYWJlbCB0ZXJzZWJ1dC4NCjwvcD4gDQoNCjxwIHN0eWxlPSJjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjoganVzdGlmeTsiPg0KRGFsYW0gYW5hbGlzaXMgaW5pLCB2YXJpYWJlbCB5YW5nIGRpZ3VuYWthbiBzZWJhZ2FpIHZhcmlhYmVsIGRlcGVuZGVuIChZKSBhZGFsYWggKlNhbGVzKiAoKmRvbGxhciopLCB5YWl0dSBuaWxhaSB0b3RhbCBwZW5qdWFsYW4gZGFyaSBwcm9kdWsuICpTYWxlcyogZGlwaWxpaCBrYXJlbmEgbWV3YWtpbGkgcGVyZm9ybWEga2luZXJqYSBwZW5qdWFsYW4gc2VjYXJhIGxhbmdzdW5nLiBTZW1lbnRhcmEgaXR1LCB2YXJpYWJlbCBpbmRlcGVuZGVuIChYKSB5YW5nIGRpZ3VuYWthbiBtZWxpcHV0aSAqTWFya2V0aW5nKiwgKkludmVudG9yeSosIGRhbiBDT0dTICgqQ29zdCBvZiBHb29kcyBTb2xkKikuICpNYXJrZXRpbmcqICgqZG9sbGFyKikgbWV3YWtpbGkgYmVzYXJueWEgYW5nZ2FyYW4gcHJvbW9zaSB5YW5nIGRhcGF0IG1lbmluZ2thdGthbiBwZW5qdWFsYW4sICpJbnZlbnRvcnkqICgqdW5pdCopIG1lbnVuanVra2FuIHN0b2sgeWFuZyB0ZXJzZWRpYSB5YW5nIGJpc2EgbWVtZW5nYXJ1aGkga2VtYW1wdWFuIG1lbWVudWhpIHBlcm1pbnRhYW4sIGRhbiAqQ09HUyogKCpkb2xsYXIqKSBtZXJlcHJlc2VudGFzaWthbiBiaWF5YSBwcm9kdWtzaSB5YW5nIGp1Z2EgZGFwYXQgbWVtZW5nYXJ1aGkgbWFyZ2luIGRhbiBzdHJhdGVnaSBoYXJnYS4gS2V0aWdhIHZhcmlhYmVsIGluaSBtZW1pbGlraSBrYWl0YW4geWFuZyBsb2dpcyBkYWxhbSBrb250ZWtzIG1hbmFqZW1lbiBwZW5qdWFsYW4gcHJvZHVrLg0KPC9wPiANCg0KPHAgc3R5bGU9ImNvbG9yOiBibGFjazsgZm9udC1zaXplOiAxOHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyI+DQpVbnR1ayBtZW5nYW5hbGlzaXMgaHVidW5nYW4gYW50YXIgdmFyaWFiZWwsIG1ldG9kZSB5YW5nIGRpZ3VuYWthbiBhZGFsYWggcmVncmVzaSBsaW5lYXIgYmVyZ2FuZGEgZGVuZ2FuIGVzdGltYXNpICpyb2J1c3QgTGVhc3QgVHJpbW1lZCBTcXVhcmVzKiAoTFRTKS4gTWV0b2RlIExUUyBkaXBpbGloIGthcmVuYSBtZW1pbGlraSBrZXVuZ2d1bGFuIGRhbGFtIG1lbmdoYWRhcGkgZGF0YSB5YW5nIG11bmdraW4gbWVuZ2FuZHVuZyBwZW5jaWxhbiAoKm91dGxpZXIqKSBhdGF1IGtldGlkYWt0ZXJhdHVyYW4gbGFpbm55YSwgeWFuZyBiaXNhIG1lbWVuZ2FydWhpIGFrdXJhc2kgbW9kZWwgcmVncmVzaSBiaWFzYS4gRGVuZ2FuIG1lbmdndW5ha2FuIHBlbmRla2F0YW4gKnJvYnVzdCosIGhhc2lsIGFuYWxpc2lzIGRpaGFyYXBrYW4gdGV0YXAgc3RhYmlsIGRhbiBhbmRhbCBtZXNraXB1biB0ZXJkYXBhdCBvYnNlcnZhc2kgeWFuZyBla3N0cmVtIGRhbGFtIGRhdGEuDQo8L3A+IA0KDQojIExhbmRhc2FuIFRlb3JpDQojIyBVamkgQXN1bXNpIEtsYXNpaw0KPHAgc3R5bGU9ImNvbG9yOiBibGFjazsgZm9udC1zaXplOiAxOHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyI+DQpVamkgYXN1bXNpIGtsYXNpayBkaWxha3VrYW4gdW50dWsgbWVsaWhhdCBhcGFrYWggbW9kZWwgcmVncmVzaSB5YW5nIGRpcGVyb2xlaA0KbWVtZW51aGkgYXN1bXNpIGtsYXNpayBzZWhpbmdnYSBkYXBhdCBkaWthdGFrYW4gYmFod2EgbW9kZWwgeWFuZyBkaWhhc2lsa2FuIGJlcnNpZmF0DQpCTFVFICgqQmVzdCBMaW5lYXIgVW5iaWFzZWQgRXN0aW1hdG9yKikuIEppa2EgYWRhIGFzdW1zaSB5YW5nIGRpbGFuZ2dhciwgbWFrYSB0aWRhayBkYXBhdCBkaWd1bmFrYW4uIE1ha2EgZGFyaSBpdHUsIGRpZ3VuYWthbiByZWdyZXNpIHJvYnVzdC4gDQo8L3A+IA0KIyMjIFVqaSBOb3JtYWxpdGFzDQo8cCBzdHlsZT0iY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDE4cHg7IHRleHQtYWxpZ246IGp1c3RpZnk7Ij4NClVudHVrIG1lbmd1amkgYXBha2FoIGRhbGFtIG1vZGVsIHJlZ3Jlc2kgdmFyaWFiZWwgcGVuZ2dhbmdndSBhdGF1IHJlc2lkdWFsDQptZW1pbGlraSBkaXN0cmlidXNpIG5vcm1hbCBhdGF1IHRpZGFrIG1ha2EgZGlndW5ha2FuIHVqaSAqS29sbW9nb3JvdiBTbWlybm92IFRlc3QqLiBLZXB1dHVzYW4gdW50dWsgbWVub2xhaw0KJEhfMCQgamlrYSAqcC12YWx1ZSoga3VyYW5nIGRhcmkgdGluZ2thdCBzaWduaWZpa2Fuc2kgKPCdm7wpIDUlLg0KPC9wPiANCiMjIyBVamkgSGV0ZXJva2VkYXN0aXNpdGFzDQo8cCBzdHlsZT0iY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDE4cHg7IHRleHQtYWxpZ246IGp1c3RpZnk7Ij4NClVqaSBIZXRlcm9za2VkYXN0aXNpdGFzIGJlcnR1anVhbiB1bnR1ayBtZW5nZXRhaHVpIGFwYWthaCB2YXJpYW5zaSBnYWxhdCBiZXJzaWZhdCBob21vc2tlZGFzdGlzaXRhcyBhdGF1IGhldGVyb3NrZWRhc3Rpc2l0YXMuIEhldGVyb3NrZWRhc3Rpc2l0YXMgYWthbiBtZW55ZWJhYmthbiBwZW5ha3NpcmFuIGtvZWZpc2llbi1rb2VmaXNpZW4gcmVncmVzaSBtZW5qYWRpIHRpZGFrIGVmaXNpZW4gZGFuIGhhc2lsIHRha3NpcmFuIGRhcGF0IG1lbmphZGkga3VyYW5nIGF0YXUgbWVsZWJpaGkgZGFyaSBzZW1lc3RpbnlhLiBEZW5nYW4gZGVtaWtpYW4sIGFnYXIga29lZmlzaWVuLWtvZWZpc2llbiByZWdyZXNpIHRpZGFrIHNhbGFoIHRha3NpciBtYWthDQpoZXRlcm9za2VkYXN0aXNpdGFzIGhhcnVzIGRpaGlsYW5na2FuLiBTYWxhaCBzYXR1IG1ldG9kZSB1amkgaGV0ZXJvc2tlZGFzdGlzaXRhcyBhZGFsYWggdWppICpCcmV1c2NoLVBhZ2FuKi4NCjwvcD4gDQojIyMgVWppIE11bHRpa29saW5lYXJpdGFzDQo8cCBzdHlsZT0iY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDE4cHg7IHRleHQtYWxpZ246IGp1c3RpZnk7Ij4NClVudHVrIG1lbGFrdWthbiB1amkgbXVsdGlrb2xpbmVhcml0YXMsIGRhcGF0IGRpZ3VuYWthbiBtZXRvZGUgKlZhcmlhbmNlIEluZmxhdGlvbiBGYWN0b3IqIChWSUYpLiBWSUYgbWVuZ3VrdXIgc2VqYXVoIG1hbmEgdmFyaWFiZWwgaW5kZXBlbmRlbiB0ZXJrYWl0IGVyYXQgZGVuZ2FuIHZhcmlhYmVsIGxhaW4gZGFsYW0gbW9kZWwgcmVncmVzaS4gU2VtYWtpbiB0aW5nZ2kgbmlsYWkgVklGLCBzZW1ha2luIHRpbmdnaSB0aW5na2F0IG11bHRpa29saW5lYXJpdGFzLiBOaWxhaSBWSUY+MTAgbWVudW5qdWtrYW4gYWRhbnlhIG11bHRpa29saW5lYXJpdGFzIHlhbmcgc2lnbmlmaWthbi4NCjwvcD4gDQojIyMgVWppIEF1dG9rb3JlbGFzaQ0KPHAgc3R5bGU9ImNvbG9yOiBibGFjazsgZm9udC1zaXplOiAxOHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyI+DQpVamkgYXV0b2tvcmVsYXNpIGF0YXUgdWppIG5vbi1hdXRva29yZWxhc2kgZGFsYW0ga29udGVrcyByZWdyZXNpIGFkYWxhaCBwZW5ndWppYW4gYXBha2FoIHRlcmRhcGF0IGh1YnVuZ2FuIGxpbmllciBhbnRhcmEgbmlsYWkgcmVzaWR1YWwgcGFkYSBzdWF0dSBvYnNlcnZhc2kgZGVuZ2FuIG5pbGFpIHJlc2lkdWFsIHBhZGEgb2JzZXJ2YXNpIHNlYmVsdW1ueWEuUGVuZ3VqaWFuIGF1dG9rb3JlbGFzaSBkYXBhdCBkaWxha3VrYW4gZGVuZ2FuIHVqaSAqRHVyYmluLVdhdHNvbioNCjwvcD4gDQojIyMgVWppIExpbmVhcml0YXMNCjxwIHN0eWxlPSJjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjoganVzdGlmeTsiPg0KVWppIGxpbmVhcml0YXMgZGlndW5ha2FuIHVudHVrIG1lbGloYXQgYXBha2FoIG1vZGVsIHlhbmcgZGlndW5ha2FuIG1lbWlsaWtpIGh1YnVuZ2FuIGxpbmVhciBhdGF1IHRpZGFrLiBVamkgbGluZWFyaXRhcyBzYW5nYXQgcGVudGluZyBkYWxhbSByZWdyZXNpIGxpbmllciBrYXJlbmEgbW9kZWwgcmVncmVzaSBsaW5pZXIgbWVuZ2FzdW1zaWthbiBiYWh3YSBodWJ1bmdhbiBhbnRhcmEgdmFyaWFiZWwgZGVwZW5kZW4gZGFuIGluZGVwZW5kZW4gZGFwYXQgZGlqZWxhc2thbiBkZW5nYW4gZ2FyaXMgbHVydXMuDQo8L3A+IA0KDQojIyBSZWdyZXNpIFJvYnVzdCBFc3RpbWFzaSBMVFMNCjxwIHN0eWxlPSJjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjoganVzdGlmeTsiPg0KKkxlYXN0IFRyaW1tZWQgU3F1YXJlKiAoTFRTKSBkaXVzdWxrYW4gb2xlaCBSb3Vzc2V1dyAoMTk4NCkgc2ViYWdhaSBhbHRlcm5hdGlmIHJvYnVzdCANCnVudHVrIG1lbmdhdGFzaSBrZWxlbWFoYW4gTUtULCB5YWl0dSBkZW5nYW4gbWVuZ2d1bmFrYW4gc2ViYW55YWsg4oSOICjihI4g4omkIPCdkZspIGt1YWRyYXQgDQpzZXNhdGFuIHlhbmcgZGl1cnV0a2FuICBuaWxhaW55YSAoUm91c3NldXcsIDE5ODQpLiBSdW11cyBwYWRhDQplc3RpbWFzaSBMVFMgc2ViYWdhaSBiZXJpa3V0IDoNCg0KDQokJA0KUV97XG1hdGhybXtMVFN9fSA9IFxzdW1fe2k9MX1ee2h9IGVfaV4yDQokJA0KDQoqKktldGVyYW5nYW46KiogIA0KLSBcKGggPSBcbGVmdFxsZmxvb3IgXHRmcmFje259ezJ9IFxyaWdodFxyZmxvb3IgKyBcbGVmdFxsZmxvb3IgXHRmcmFje2srMn17Mn0gXHJpZ2h0XHJmbG9vclwpICANCi0gXChlX2kgPSBcaGF0IHlfaSAtIFhfaV5cIFxoYXRcYmV0YV8wXCkNCg0KTWVudXJ1dCBSb3Vzc2VldXcgZGFuIEh1YmVydCAoMTk5NykgZXN0aW1hdG9yIHVudHVrIExUUyBkYXBhdCBkaWRhcGF0a2FuIGRlbmdhbiANCmNhcmE6DQoNCiQkDQpzX3tcbWF0aHJte0xUU319DQo9IGRfe2gsbn1cLA0KICBcc3FydHtcZnJhY3sxfXtofVxzdW1fe2k9MX1ee2h9IGVfaV4yfQ0KJCQNCg0KKipkZW5nYW46KiogIA0KLSBcKGRfe2gsbn0gPSBcZGlzcGxheXN0eWxlIFxmcmFjezF9e1xzcXJ0e1wsMSAtIFxkZnJhY3sybn17aFwsY197aCxufX1cO1xwaGlcYmlnbCgxL2Nfe2gsbn1cYmlncilcLH19XCkgIA0KLSBcKGNfe2gsbn0gPSBcZGlzcGxheXN0eWxlIFxmcmFjezF9e1xQaGleey0xfVwhXEJpZ2woXHRmcmFje2ggKyBufXsybn1cQmlncil9XCkgIA0KDQpTZXRlbGFoIGRpZGFwYXRrYW4gbmlsYWkgJHNfe0xUU30kIGxhbHUgbWVuZ2hpdHVuZyBwZW1ib2JvdCAkd19pJCBkZW5nYW4gcnVtdXM6DQoNCiQkDQp3X2kgXDs9XDsNClxiZWdpbntjYXNlc30NCiAgMCwgJiBcdGV4dHtqaWthIH0gXEJpZ2x8XGRmcmFje2VfaX17c197XG1hdGhybXtMVFN9fX1cQmlncnwgPiAyLjUsXFxbMC41ZW1dDQogIDEsICYgXHRleHR7bGFpbm55YS59DQpcZW5ke2Nhc2VzfQ0KJCQNCg0KPC9wPiANCg0KIyAqU291cmNlIENvZGUqDQojIyAqTGlicmFyeSogeWFuZyBkaWd1bmFrYW4NCmBgYHtyfQ0KbGlicmFyeShjYXIpDQpsaWJyYXJ5KHpvbykNCmxpYnJhcnkobG10ZXN0KQ0KbGlicmFyeShyb2J1c3RiYXNlKQ0KbGlicmFyeShjYXIpDQpsaWJyYXJ5KE1BU1MpDQpsaWJyYXJ5KGxtdGVzdCkNCmxpYnJhcnkocmVhZHhsKQ0KYGBgDQoNCiMjICpJbXBvcnQqIERhdGENCmBgYHtyfQ0KY2FmZmVlbW9jaGEgPC0gcmVhZF9leGNlbCgiRDovY2FmZmVlbW9jaGEueGxzeCIpDQpjYWZmZWVtb2NoYQ0KDQojTUVNQlVBVCBEQVRBIEZSQU1FDQpkYXRhPC1kYXRhLmZyYW1lKGNhZmZlZW1vY2hhKQ0KYGBgDQojIyBTdGF0c2l0aWsgRGVza3JpcHRpZg0KYGBge3J9DQojU3RhdGlzdGlrIERlc2tyaXB0aWYNCnN1bW1hcnkoZGF0YSkNCmBgYA0KIyMgTW9kZWwgUHJlZGlrc2kgTUtUDQpgYGB7cn0NCk1LVD1sbShTYWxlc34uLGRhdGE9ZGF0YSkNCnN1bW1hcnkoTUtUKQ0KYGBgDQo8cCBzdHlsZT0iY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDE4cHg7IHRleHQtYWxpZ246IGp1c3RpZnk7Ij4NCkphZGkgbW9kZWwgcHJlZGlrc2kgTUtUIG55YSA6IA0KJCQNClx3aWRlaGF0e1x0ZXh0e1NhbGVzfX0NClw7PVw7DQo0NC44NTExOTYNClw7LVw7MC42ODUxODhcLFxtYXRocm17TWFya2V0aW5nfQ0KXDstXDswLjA4Mjk1NlwsXG1hdGhybXtJbnZlbnRvcnl9DQpcOytcOzIuODE1OTIxXCxcbWF0aHJte0NPR1N9DQpcOytcdmFyZXBzaWxvbl9pDQokJA0KPC9wPiANCiMjIFVqaSBzaWduaWZpa2Fuc2kNCiMjIyBVamkgU2ltdWx0YW4NCjxwIHN0eWxlPSJjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjoganVzdGlmeTsiPg0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KSF8wOlw7Jlw7XGJldGFfe1xtYXRocm17TWFya2V0aW5nfX0gPSBcYmV0YV97XG1hdGhybXtJbnZlbnRvcnl9fSA9IFxiZXRhX3tcbWF0aHJte0NPR1N9fSA9IDAsXFwNCkhfMTpcOyZcO1x0ZXh0e3NldGlkYWtueWEgc2FsYWggc2F0dSB9XGJldGFfaSBcbmVxIDAuDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQpcYWxwaGEgJj0gMC4wNSxcXA0KXHRleHR7VG9sYWsgfUhfMCAmXHF1YWRcdGV4dHtqaWthIH1wXHRleHR7LXZhbHVlfTxcYWxwaGEuDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQpwXHRleHR7LXZhbHVlfSAmPSAyLjJcdGltZXMxMF57LTE2fS4NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiQkDQpcYm94ZWR7DQogIFx0ZXh0e0thcmVuYSB9cFx0ZXh0ey12YWx1ZX08MC4wNSxcXFx0ZXh0e21ha2EgSDAgZGl0b2xha30gXFxcdGV4dHt5YW5nIGJlcmFydGkgYmFod2EgcGFsaW5nIHRpZGFrIHRlcmRhcGF0IHNhdHUgZGFyaSB2YXJpYWJlbCANCiAgTWFya2V0aW5nIChYMSksIEludmVudG9yeSAoWDIpLCBDT0dTIChYMykgYmVycGVuZ2FydWggc2lnbmlmaWthbiB0ZXJoYWRhcCBTYWxlc30NCn0NCiQkDQoNCjwvcD4gIA0KDQojIyMgVWppIFBhcnNpYWwNCjxwIHN0eWxlPSJjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjoganVzdGlmeTsiPg0KVWppIFBhcnNpYWwgVmFyaWFiZWwgTWFya2V0aW5nIDoNCiQkDQpcYmVnaW57YWxpZ25lZH1bbF0NCkhfMDpcOyZcYmV0YV97XG1hdGhybXtNYXJrZXRpbmd9fSA9IDAsXFwNCkhfMTpcOyZcYmV0YV97XG1hdGhybXtNYXJrZXRpbmd9fSBcbmVxIDAsXFwNClxhbHBoYSAmPSAwLjA1LFxcDQpcdGV4dHtUb2xhayB9SF8wICZccXVhZFx0ZXh0e2ppa2EgfXBcdGV4dHstdmFsdWV9PFxhbHBoYS4NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiQkDQpcYmVnaW57YWxpZ25lZH1bbF0NCnRfe1xtYXRocm17TWFya2V0aW5nfX0gJj0gLTEwLjgzLFxcDQpwXHRleHR7LXZhbHVlfSAmPCAyXHRpbWVzMTBeey0xNn0uDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJveGVkew0KICBcdGV4dHtLYXJlbmEgfXBcdGV4dHstdmFsdWV9PDAuMDUsXDsNCiAgXGJldGFfe1xtYXRocm17TWFya2V0aW5nfX1cdGV4dHsgc2lnbmlmaWthbiB0ZXJoYWRhcCBTYWxlcy59DQp9DQokJA0KVWppIFBhcnNpYWwgSW52ZW50b3J5DQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQpIXzA6XDsmXGJldGFfe1xtYXRocm17SW52ZW50b3J5fX0gPSAwLFxcDQpIXzE6XDsmXGJldGFfe1xtYXRocm17SW52ZW50b3J5fX0gXG5lcSAwLFxcDQpcYWxwaGEgJj0gMC4wNSxcXA0KXHRleHR7VG9sYWsgfUhfMCAmXHF1YWRcdGV4dHtqaWthIH1wXHRleHR7LXZhbHVlfTxcYWxwaGEuDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQp0X3tcbWF0aHJte0ludmVudG9yeX19ICY9IC0yMC4xMCxcXA0KcFx0ZXh0ey12YWx1ZX0gJjwgMlx0aW1lczEwXnstMTZ9Lg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxib3hlZHsNCiAgXHRleHR7S2FyZW5hIH1wXHRleHR7LXZhbHVlfTwwLjA1LFw7DQogIFxiZXRhX3tcbWF0aHJte0ludmVudG9yeX19XHRleHR7IHNpZ25pZmlrYW4gdGVyaGFkYXAgU2FsZXMufQ0KfQ0KJCQNClVqaSBQYXJzaWFsIENPR1MNCiQkDQpcYmVnaW57YWxpZ25lZH1bbF0NCkhfMDpcOyZcYmV0YV97XG1hdGhybXtDT0dTfX0gPSAwLFxcDQpIXzE6XDsmXGJldGFfe1xtYXRocm17Q09HU319IFxuZXEgMCxcXA0KXGFscGhhICY9IDAuMDUsXFwNClx0ZXh0e1RvbGFrIH1IXzAgJlxxdWFkXHRleHR7amlrYSB9cFx0ZXh0ey12YWx1ZX08XGFscGhhLg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KdF97XG1hdGhybXtDT0dTfX0gJj0gNjUuNTksXFwNCnBcdGV4dHstdmFsdWV9ICY8IDJcdGltZXMxMF57LTE2fS4NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiQkDQpcYm94ZWR7DQogIFx0ZXh0e0thcmVuYSB9cFx0ZXh0ey12YWx1ZX08MC4wNSxcOw0KICBcYmV0YV97XG1hdGhybXtDT0dTfX1cdGV4dHsgc2lnbmlmaWthbiB0ZXJoYWRhcCBTYWxlcy59DQp9DQokJA0KDQo8L3A+DQojIyBVamkgYXN1bXNpDQojIyMgVWppIE5vcm1hbGl0YXMNCjxwIHN0eWxlPSJjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjoganVzdGlmeTsiPg0KYGBge3J9DQojTWVuZ2d1bmFrYW4gVWppIEtvbG1vZ29yb3YgU21pcm5vdg0Ka3MudGVzdChNS1QkcmVzaWR1YWxzLCAncG5vcm0nKQ0KYGBgDQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQpIXzA6XDsmXHRleHR7UmVzaWR1YWwgbWVuZ2lrdXRpIGRpc3RyaWJ1c2kgbm9ybWFsfSxcXA0KSF8xOlw7Jlx0ZXh0e1Jlc2lkdWFsIHRpZGFrIG1lbmdpa3V0aSBkaXN0cmlidXNpIG5vcm1hbH0sXFwNClxhbHBoYSAmPSAwLjA1LFxcDQpcdGV4dHtUb2xhayB9SF8wJlxxdWFkXHRleHR7amlrYSB9cFx0ZXh0ey12YWx1ZX08XGFscGhhLg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KcFx0ZXh0ey12YWx1ZX0gJjwgMi4yXHRpbWVzMTBeey0xNn0uDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJveGVkew0KICBcdGV4dHtLYXJlbmEgfXBcdGV4dHstdmFsdWV9PDAuMDUsXDsNCiAgXHRleHR7bWFrYSByZXNpZHVhbCB0aWRhayBiZXJkaXN0cmlidXNpIG5vcm1hbC59DQp9DQokJA0KDQo8L3A+DQojIyMgVWppIEhldGVyb2tlZGFzdGlzaXRhcw0KPHAgc3R5bGU9ImNvbG9yOiBibGFjazsgZm9udC1zaXplOiAxOHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyI+DQpgYGB7cn0NCiNNZW5nZ3VuYWthbiBVamkgQnJldXNjaC1QYWdhbg0KYnB0ZXN0KE1LVCkNCmBgYA0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KSF8wOlw7Jlx0ZXh0e1RpZGFrIHRlcmRhcGF0IEhldGVyb2tlZGFzdGlzaXRhc30sXFwNCkhfMTpcOyZcdGV4dHtUZXJkYXBhdCBIZXRlcm9rZWRhc3Rpc2l0YXN9LFxcDQpcYWxwaGEgJj0gMC4wNSxcXA0KXHRleHR7VG9sYWsgfUhfMCAmXHF1YWRcdGV4dHtqaWthIH1wXHRleHR7LXZhbHVlfTxcYWxwaGEuDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQpcbWF0aHJte0JQfSAmPSAxMzMuMTgsXFwNClxtYXRocm17ZGZ9ICY9IDMsXFwNCnBcdGV4dHstdmFsdWV9ICY8IDIuMlx0aW1lczEwXnstMTZ9Lg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxib3hlZHsNCiAgXHRleHR7S2FyZW5hIH1wXHRleHR7LXZhbHVlfTwwLjA1LFw7DQogIFx0ZXh0e21ha2EgSH1fMFx0ZXh0eyBkaXRvbGFrIG1ha2EgdGVyZGFwYXQgaGV0ZXJvc2tlZGFzdGlzaXRhcy59DQp9DQokJA0KDQo8L3A+DQoNCiMjIyBVamkgQXV0b2tvcmVsYXNpDQo8cCBzdHlsZT0iY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDE4cHg7IHRleHQtYWxpZ246IGp1c3RpZnk7Ij4NCmBgYHtyfQ0KI01lbmdndW5ha2FuIFVqaSBEdXJiaW4gV2F0c29uDQpkd3Rlc3QoTUtUKQ0KYGBgDQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQpIXzA6XDsmXHJobyA9IDAgXHF1YWQoXHRleHR7dGlkYWsgYWRhIGF1dG9rb3JlbGFzaX0pLFxcDQpIXzE6XDsmXHJobyBcbmVxIDAgXHF1YWQoXHRleHR7YWRhIGF1dG9rb3JlbGFzaX0pLFxcDQpcYWxwaGEgJj0gMC4wNSxcXA0KXHRleHR7VG9sYWsgfUhfMCAmXHF1YWRcdGV4dHtqaWthIH1wXHRleHR7LXZhbHVlfTxcYWxwaGEuDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQpcbWF0aHJte0RXfSAmPSAxLjczNDIsXFwNCnBcdGV4dHstdmFsdWV9ICY9IDAuMDAxODE1Lg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxib3hlZHsNCiAgXHRleHR7S2FyZW5hIH1wXHRleHR7LXZhbHVlfTwwLjA1LFw7DQogIEhfMFx0ZXh0eyBkaXRvbGFrIG1ha2EgdGVyZGFwYXQgYXV0b2tvcmVsYXNpIHJlc2lkdWFsLn0NCn0NCiQkDQoNCjwvcD4NCiMjIyBVamkgTXVsdGlrb2xpbmVhcml0YXMNCjxwIHN0eWxlPSJjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjoganVzdGlmeTsiPg0KYGBge3J9DQojTWVuZ2d1bmFrYW4gVWppIFZJRg0KdmlmKE1LVCkNCmBgYA0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KSF8wOlw7Jlx0ZXh0e1RpZGFrIHRlcmRhcGF0IG11bHRpa29saW5lYXJpdGFzIGFudGFyIHZhcmlhYmVsfSxcXA0KSF8xOlw7Jlx0ZXh0e1RlcmRhcGF0IG11bHRpa29saW5lYXJpdGFzIGFudGFyIHZhcmlhYmVsfSxcXA0KXHRleHR7S3JpdGVyaWE6IH0mXHRleHR7dG9sYWsgfUhfMFw7XHRleHR7amlrYSBWSUZ9ID4gMTAuDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQpcbWF0aHJte1ZJRn0oXG1hdGhybXtNYXJrZXRpbmd9KSAmPSAxLjg4MzAsXFwNClxtYXRocm17VklGfShcbWF0aHJte0ludmVudG9yeX0pICY9IDEuNTk3MixcXA0KXG1hdGhybXtWSUZ9KFxtYXRocm17Q09HU30pICY9IDIuMTk0Ny4NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiQkDQpcYm94ZWR7DQogIFx0ZXh0e0thcmVuYSBzZW11YSBWSUZ9PDEwLFw7DQogIFx0ZXh0e21ha2EgZ2FnYWwgdG9sYWsgfUhfMFw7XExvbmdyaWdodGFycm93XDsNCiAgXHRleHR7dGlkYWsgYWRhIG11bHRpa29saW5lYXJpdGFzLn0NCn0NCiQkDQoNCjwvcD4NCiMjIyBVamkgTGluaWVhcml0YXMNCjxwIHN0eWxlPSJjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjoganVzdGlmeTsiPg0KYGBge3J9DQojIFVqaSBBc3Vtc2kgTGluZWFyaXRhcyBtZW5nZ3VuYWthbiBSYW1zZXkgUkVTRVQNCnJhbXNleV90ZXN0IDwtIHJlc2V0dGVzdChNS1QsIHBvd2VyID0gMikNCnJhbXNleV90ZXN0DQpgYGANCiQkDQpcYmVnaW57YWxpZ25lZH1bbF0NCkhfMDpcOyZcdGV4dHtNb2RlbCBtZW1lbnVoaSBhc3Vtc2kgbGluZWFyaXRhc30sXFwNCkhfMTpcOyZcdGV4dHtNb2RlbCB0aWRhayBtZW1lbnVoaSBhc3Vtc2kgbGluZWFyaXRhc30sXFwNClxhbHBoYSAmPSAwLjA1LFxcDQpcdGV4dHtUb2xhayB9SF8wICZccXVhZFx0ZXh0e2ppa2EgfXBcdGV4dHstdmFsdWV9PFxhbHBoYS4NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiQkDQpcYmVnaW57YWxpZ25lZH1bbF0NCnBcdGV4dHstdmFsdWV9ICY9IDkuNjkxXHRpbWVzMTBeey0xMX0uDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJveGVkew0KICBcdGV4dHtLYXJlbmEgfXBcdGV4dHstdmFsdWV9PDAuMDUsXDsNCiAgSF8wXHRleHR7IGRpdG9sYWsgbWFrYSBtb2RlbCB0aWRhayBtZW1lbnVoaSBhc3Vtc2kgbGluZWFyaXRhcy59DQp9DQokJA0KDQo8L3A+DQojIyBEZXRla3NpIE91dGxpZXINCjxwIHN0eWxlPSJjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjoganVzdGlmeTsiPg0KYGBge3J9DQpib3hwbG90KGRhdGEpDQpgYGANCg0KRGlsaWhhdCBkYXJpIGJveHBsb3QgdGVyc2VidXQgZGFwYXQgZGlzaW1wdWxrYW4gdGVyZGFwYXQgb3V0bGllciBwYWRhIGRhdGEuDQoNCmBgYHtyfQ0KZGZmaXRzX3ZhbHVlcyA8LSBkZmZpdHMoTUtUKQ0KbmlsYWlfcGVtYmFuZGluZyA8LSAyICogKHNxcnQoNC80ODApKQ0KY2F0KCJcbk5pbGFpIFBlbWJhbmRpbmcgREZGSVRTOiIsIG5pbGFpX3BlbWJhbmRpbmcpDQoNCmBgYA0KYGBge3J9DQpqdW1sYWhfb3V0bGllciA8LSBzdW0oYWJzKGRmZml0c192YWx1ZXMpID4gbmlsYWlfcGVtYmFuZGluZykNCmNhdCgiXG5cbkp1bWxhaCBEYXRhIE91dGxpZXI6IiwganVtbGFoX291dGxpZXIpDQoNCmBgYA0KDQo8L3A+DQoNCiMgTW9kZWwgUmVncmVzaSBSb2J1c3QgRXN0aW1hc2kgTFRTDQo8cCBzdHlsZT0iY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDE4cHg7IHRleHQtYWxpZ246IGp1c3RpZnk7Ij4NCmBgYHtyfQ0KbW9kZWxfcm9idXN0IDwtIGx0c1JlZyhTYWxlcyB+IE1hcmtldGluZyArIEludmVudG9yeSArIENPR1MsIGRhdGEgPSBkYXRhKQ0KbW9kZWxfcm9idXN0DQpzdW1tYXJ5KG1vZGVsX3JvYnVzdCkNCmBgYA0KSmFkaSBtb2RlbCByZWdyZXNpIHJvYnVzdCBueWEgOiANCiQkDQpcd2lkZWhhdHtcdGV4dHtTYWxlc319DQpcOz1cOw0KMi4zOTcwNjENClw7LVw7MC4wNDk4MDVcLFxtYXRocm17TWFya2V0aW5nfQ0KXDsrXDswLjAwMTA0MVwsXG1hdGhybXtJbnZlbnRvcnl9DQpcOytcOzIuNDA5NDMzXCxcbWF0aHJte0NPR1N9DQpcOytcdmFyZXBzaWxvbl9pDQokJA0KDQpBcnRpbnlhOg0KDQotICoqSW50ZXJjZXB0ICgyLDM5NzEpOioqIGtldGlrYSBDT0dTLCBNYXJrZXRpbmcsIGRhbiBJbnZlbnRvcnkgc2VtdWFueWEgYmVybmlsYWkgbm9sLCBtb2RlbCBtZW1wcmVkaWtzaSBTYWxlcyBzZWJlc2FyIHNla2l0YXIgMiw0MCB1bml0Lg0KDQotICoqQ09HUyAoMiw0MDk0KToqKiBzZXRpYXAga2VuYWlrYW4gMSBzYXR1YW4gZGFsYW0gQ09HUyAoYmlheWEgcG9rb2sgcGVuanVhbGFuKSBkaWthaXRrYW4gZGVuZ2FuIHBlbmluZ2thdGFuIFNhbGVzIHNlYmVzYXIga2lyYS1raXJhIDIsNDEgc2F0dWFuLCBtZW5hbmRha2FuIGJhaHdhIENPR1MgbWVtaWxpa2kgcGVuZ2FydWggcG9zaXRpZiBkYW4gdGVyYmVzYXIgZGkgYW50YXJhIGtldGlnYSBwcmVkaWt0b3IuDQoNCi0gKipNYXJrZXRpbmcgKOKIkjAsMDQ5OCk6Kiogc2V0aWFwIHRhbWJhaGFuIDEgc2F0dWFuIGJlbGFuamEgTWFya2V0aW5nIGRpcGVya2lyYWthbiBtZW51cnVua2FuIFNhbGVzIHNlYmVzYXIgMCwwNSBzYXR1YW7igJRlZmVrIG5lZ2F0aWYgeWFuZyByZWxhdGlmIGtlY2lsLCBtdW5na2luIGthcmVuYSBwZW5pbmdrYXRhbiBwZW5nZWx1YXJhbiBwZW1hc2FyYW4gcGFkYSB0aXRpayB0ZXJ0ZW50dSB0aWRhayBzZWxhbHUgbGFuZ3N1bmcgbWVuZG9yb25nIHBlbmp1YWxhbi4NCg0KLSAqKkludmVudG9yeSAoMCwwMDEwKToqKiBrb2VmaXNpZW4gcG9zaXRpZiB0YXBpIHNhbmdhdCBrZWNpbCwgbWVudW5qdWtrYW4gYmFod2EgcGVydWJhaGFuIEludmVudG9yeSBoYW1waXIgdGlkYWsgYmVycGVuZ2FydWggdGVyaGFkYXAgU2FsZXMgZGFsYW0gcmVudGFuZyBkYXRhIGluaS4NCg0KU2VjYXJhIGtlc2VsdXJ1aGFuLCBDT0dTIGFkYWxhaCBwZW5kb3JvbmcgdXRhbWEgcGVuanVhbGFuLCBzZW1lbnRhcmEgTWFya2V0aW5nIGRhbiBJbnZlbnRvcnkgbWVtYmVyaWthbiBlZmVrIHlhbmcgamF1aCBsZWJpaCBsZW1haCwgYmFoa2FuIE1hcmtldGluZyBzZWRpa2l0IG1lbnVydW5rYW4gcHJlZGlrc2kgU2FsZXMgZGFuIEludmVudG9yeSBueWFyaXMgdGlkYWsgYmVyZGFtcGFrLg0KDQo8L3A+DQoNCiMjIFVqaSBTaWduaWZpa2Fuc2kgTW9kZWwNCiMjIyBVamkgU2ltdWx0YW4NCiQkDQpcYmVnaW57YWxpZ25lZH1bbF0NCkhfMDpcOyZcO1xiZXRhX3tcbWF0aHJte01hcmtldGluZ319ID0gXGJldGFfe1xtYXRocm17SW52ZW50b3J5fX0gPSBcYmV0YV97XG1hdGhybXtDT0dTfX0gPSAwLFxcDQpIXzE6XDsmXDtcdGV4dHtzZXRpZGFrbnlhIHNhbGFoIHNhdHUgfVxiZXRhX2kgXG5lcSAwLg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KXGFscGhhICY9IDAuMDUsXFwNClx0ZXh0e1RvbGFrIH1IXzAgJlxxdWFkXHRleHR7amlrYSB9cFx0ZXh0ey12YWx1ZX08XGFscGhhLg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KcFx0ZXh0ey12YWx1ZX0gJj0gMi4yXHRpbWVzMTBeey0xNn0uDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJveGVkew0KICBcdGV4dHtLYXJlbmEgfXBcdGV4dHstdmFsdWV9PDAuMDUsXFxcdGV4dHttYWthIEgwIGRpdG9sYWt9IFxcXHRleHR7eWFuZyBiZXJhcnRpIGJhaHdhIHBhbGluZyB0aWRhayB0ZXJkYXBhdCBzYXR1IGRhcmkgdmFyaWFiZWwgDQogIE1hcmtldGluZyAoWDEpLCBJbnZlbnRvcnkgKFgyKSwgQ09HUyAoWDMpIGJlcnBlbmdhcnVoIHNpZ25pZmlrYW4gdGVyaGFkYXAgU2FsZXN9DQp9DQokJA0KDQoNCiMjIyBVamkgUGFyc2lhbA0KVWppIFBhcnNpYWwgTWFya2V0aW5nDQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQpIXzA6XDsmXGJldGFfe1xtYXRocm17TWFya2V0aW5nfX0gPSAwLFxcDQpIXzE6XDsmXGJldGFfe1xtYXRocm17TWFya2V0aW5nfX0gXG5lcSAwLg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KXGFscGhhICY9IDAuMDUsXFwNClx0ZXh0e1RvbGFrIH1IXzAgJlxxdWFkXHRleHR7amlrYSB9cFx0ZXh0ey12YWx1ZX08XGFscGhhLg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KdCgzOTUpICY9IC0yLjU2MSxcXA0KcFx0ZXh0ey12YWx1ZX0gJj0gMC4wMTA4Lg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxib3hlZHsNCiAgXHRleHR7S2FyZW5hIH1wXHRleHR7LXZhbHVlfTwwLjA1LFw7DQogIFxiZXRhX3tcbWF0aHJte01hcmtldGluZ319XHRleHR7IHNpZ25pZmlrYW4gdGVyaGFkYXAgU2FsZXMufQ0KfQ0KJCQNClVqaSBQYXJzaWFsIEludmVudG9yeToNCiQkDQpcYmVnaW57YWxpZ25lZH1bbF0NCkhfMDpcOyZcYmV0YV97XG1hdGhybXtJbnZlbnRvcnl9fSA9IDAsXFwNCkhfMTpcOyZcYmV0YV97XG1hdGhybXtJbnZlbnRvcnl9fSBcbmVxIDAuDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQpcYWxwaGEgJj0gMC4wNSxcXA0KXHRleHR7VG9sYWsgfUhfMCAmXHF1YWRcdGV4dHtqaWthIH1wXHRleHR7LXZhbHVlfTxcYWxwaGEuDQpcZW5ke2FsaWduZWR9DQokJA0KDQokJA0KXGJlZ2lue2FsaWduZWR9W2xdDQp0KDM5NSkgJj0gMC41MzUsXFwNCnBcdGV4dHstdmFsdWV9ICY9IDAuNTkzMS4NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiQkDQpcYm94ZWR7DQogIFx0ZXh0e0thcmVuYSB9cFx0ZXh0ey12YWx1ZX1cZ2UgMC4wNSxcOw0KICBcYmV0YV97XG1hdGhybXtJbnZlbnRvcnl9fVx0ZXh0eyB0aWRhayBzaWduaWZpa2FuIHRlcmhhZGFwIFNhbGVzLn0NCn0NCiQkDQpVamkgUGFyc2lhbCBDT0dTOg0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KSF8wOlw7JlxiZXRhX3tcbWF0aHJte0NPR1N9fSA9IDAsXFwNCkhfMTpcOyZcYmV0YV97XG1hdGhybXtDT0dTfX0gXG5lcSAwLg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KXGFscGhhICY9IDAuMDUsXFwNClx0ZXh0e1RvbGFrIH1IXzAgJlxxdWFkXHRleHR7amlrYSB9cFx0ZXh0ey12YWx1ZX08XGFscGhhLg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KJCQNClxiZWdpbnthbGlnbmVkfVtsXQ0KdCgzOTUpICY9IDE0OS43NDcsXFwNCnBcdGV4dHstdmFsdWV9ICY8IDJcdGltZXMxMF57LTE2fS4NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiQkDQpcYm94ZWR7DQogIFx0ZXh0e0thcmVuYSB9cFx0ZXh0ey12YWx1ZX08MC4wNSxcOw0KICBcYmV0YV97XG1hdGhybXtDT0dTfX1cdGV4dHsgc2lnbmlmaWthbiB0ZXJoYWRhcCBTYWxlcy59DQp9DQokJA0KDQojIyMgSW50ZXJwcmV0YXNpDQoNClNlY2FyYSBzaW11bHRhbiB1amkgRiBtZW51bmp1a2thbiBiYWh3YSBzZWNhcmEga2VzZWx1cnVoYW4ga2V0aWdhIHByZWRpa3RvciB5YWl0dSAqKkNPR1MsIE1hcmtldGluZywgZGFuIEludmVudG9yeSoqIHNlY2FyYSBiZXJzYW1h4oCQc2FtYSAqKmJlcnBlbmdhcnVoIHNpZ25pZmlrYW4qKiB0ZXJoYWRhcCBTYWxlcyAoRigzLDM5NSk9MjI5MjAsIHAtdmFsdWU8Mi4yw5cxMOKBu8K54oG2KSwgYXJ0aW55YSBtb2RlbCByZWdyZXNpIHJvYnVzdCBMVFMgaW5pIGxheWFrIGRpZ3VuYWthbiB1bnR1ayBtZW1wcmVkaWtzaSBTYWxlcy4gTmFtdW4sIHBhZGEgdWppIHBhcnNpYWwgaGFueWEgKipDT0dTKiogKHQ9MTQ5Ljc0NywgcDwyw5cxMOKBu8K54oG2KSBkYW4gKipNYXJrZXRpbmcqKiAodD3igJMyLjU2MSwgcD0wLjAxMDgpIHlhbmcgdGVyYnVrdGkgc2lnbmlmaWthbiBzZWNhcmEgaW5kaXZpZHVhbCwgc2VkYW5na2FuICoqSW52ZW50b3J5KiogKHQ9MC41MzUsIHA9MC41OTMxKSB0aWRhayBzaWduaWZpa2FuOyBpbmkgbWVuYW5kYWthbiBiYWh3YSBwZW5pbmdrYXRhbiBDT0dTIGRhbiBwZXJ1YmFoYW4gc3RyYXRlZ2kgTWFya2V0aW5nIGJlbmFy4oCQYmVuYXIgYmVyZGFtcGFrIHBhZGEgcGVuanVhbGFuLCBzZW1lbnRhcmEgdmFyaWFzaSBJbnZlbnRvcnkgZGFsYW0gcmVudGFuZyBkYXRhIGluaSB0aWRhayBtZW1iZXJpa2FuIGtvbnRyaWJ1c2kgeWFuZyBiZXJhcnRpLg0KDQoNCiMgS2VzaW1wdWxhbg0KPHAgc3R5bGU9ImNvbG9yOiBibGFjazsgZm9udC1zaXplOiAxOHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyI+DQoNCkRhcmkgYW5hbGlzaXMgcmVncmVzaSBNS1QgYXdhbCwgZGl0ZW11a2FuIGJhaHdhIG1vZGVsIE9MUyBzaWduaWZpa2FuIHNlY2FyYSBzaW11bHRhbiBuYW11biBtZWxhbmdnYXIgYmViZXJhcGEgYXN1bXNpIGtsYXNpayAobm9ybWFsaXRhcywgaGV0ZXJvc2tlZGFzdGlzaXRhcywgYXV0b2tvcmVsYXNpLCBkYW4gbGluZWFyaXRhcyksIG1lc2tpcHVuIG11bHRpa29saW5lYXJpdGFzIHRpZGFrIG1lbmphZGkgaXN1IGJlc2FyLiBEZW5nYW4gbWVsYWt1a2FuIGVzdGltYXNpIHJvYnVzdCBMVFMsIG1vZGVsIG1lbmphZGkgdGFoYW4gdGVyaGFkYXAgcGVuY2lsYW4gZGFuIG1lbmdoYXNpbGthbiBwZXJzYW1hYW4gIA0KDQpcWw0KXHdpZGVoYXR7XHRleHR7U2FsZXN9fSA9IDJ7LH0zOTcxIC0gMHssfTA0OThcLFx0ZXh0e01hcmtldGluZ30gKyAweyx9MDAxMFwsXHRleHR7SW52ZW50b3J5fSArIDJ7LH00MDk0XCxcdGV4dHtDT0dTfSArIFx2YXJlcHNpbG9uX2kuDQpcXQ0KDQpBcnRpbnlhOg0KDQotICoqQ09HUyoqIChiaWF5YSBwb2tvayBwZW5qdWFsYW4pIHB1bnlhIHBlbmdhcnVoIHBhbGluZyBiZXNhcjogbmFpayBzZXRlbmdhaCBkb2xhciBDT0dTLCBwZW5qdWFsYW4gbmFpayBzZWtpdGFyIFwkMiw0MC4NCi0gKipNYXJrZXRpbmcqKiAoYW5nZ2FyYW4gaWtsYW4pIHNlZGlraXQgbWVudXJ1bmthbiBwZW5qdWFsYW4gbXVuZ2tpbiBrYXJlbmEga2FtcGFueWUgYmVsdW0gdGVwYXQgc2FzYXJhbi4NCi0gKipJbnZlbnRvcnkqKiAoc3RvayBiYXJhbmcpIGhhbXBpciB0aWRhayBiZXJwZW5nYXJ1aC4NCg0KRGFyaSBzdWR1dCBwYW5kYW5nIGJpc25pcywgaGFzaWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIENhZmZlTW9jaGEgc2ViYWlrbnlhIGZva3VzIG1lbmdhdHVyIHVsYW5nIGJpYXlhIHByb2R1a3NpIGRhbiBtZW1wZXJiYWlraSBjYXJhIHByb21vc2kuIE1lbmdlbHVhcmthbiBiaWF5YSBsZWJpaCB1bnR1ayBpa2xhbiB0ZXJueWF0YSBiZWx1bSB0ZW50dSBtZW5haWtrYW4gcGVuanVhbGFuLCBqYWRpIHN0cmF0ZWdpIHBlbWFzYXJhbm55YSBtdW5na2luIHBlcmx1IGRpZXZhbHVhc2kuIFNlbWVudGFyYSBpdHUsIG1lbmFtYmFoIHN0b2sgYmFyYW5nIGp1Z2EgdGlkYWsgYmFueWFrIHBlbmdhcnVobnlhIHRlcmhhZGFwIHBlbmp1YWxhbi5LYXJlbmEgbW9kZWwgTFRTIG1lbWJ1YW5nIGF0YXUgbWVuZ2VjaWxrYW4gcGVuZ2FydWggYW5na2EgcGVuanVhbGFuIHlhbmcgc2FuZ2F0IHRpbmdnaSBhdGF1IHNhbmdhdCByZW5kYWgsIGhhc2lsbnlhIGxlYmloIG1lbmNlcm1pbmthbiBrb25kaXNpIHJhdGEtcmF0YSBzZWhhcmktaGFyaS4gRGVuZ2FuIGJlZ2l0dSwgcmVuY2FuYSBiZWxhbmphIGRhbiBwcm9kdWtzaSBiaXNhIGRpc3VzdW4gZGVuZ2FuIGxlYmloIG1hbnRhcCwgdGFucGEga2hhd2F0aXIgZGlwZW5nYXJ1aGkgZGF0YSB5YW5nIG91dGxpZXIuDQoNCjwvcD4NCg0KIyBSZWZlcmVuc2kNCg0KLSBZaWh1aSBYaWUsIEouIEouIEFsbGFpcmUsIGRhbiBHYXJyZXR0IEdyb2xlbXVuZCwgUiBNYXJrZG93bjogVGhlIERlZmluaXRpdmUgR3VpZGUsIENoYXBtYW4gDQomIEhhbGwgLyBDUkMgUHJlc3MsIDIwMjIgKGh0dHBzOi8vYm9va2Rvd24ub3JnL3lpaHVpL3JtYXJrZG93bi8pDQotIFBlcmloYXRpbmksIEQuIEkuICgyMDE4KS4gUGVyYmFuZGluZ2FuIE1ldG9kZSBFc3RpbWFzaSBMVFMsIEVzdGltYXNpIE0sIGRhbiBFc3RpbWFzaSBTIHBhZGEgUmVncmVzaSBSb2J1c3QgKFN0dWRpIEthc3VzOiBQZW1iaWF5YWFuIE1vYmlsIHBhZGEgUGVydXNhaGFhbiDigJhY4oCZVGFodW4gMjAxNikuDQotIGh0dHBzOi8vd3d3LmdlZWtzZm9yZ2Vla3Mub3JnL3JvYnVzdGJhc2UtcGFja2FnZS1pbi1yLw0KDQo8c3R5bGU+IA0KICAgIGJvZHkgeyANCiAgICAgICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyANCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0IyQUM4ODsgDQogICAgfSANCiAgICBoMSwgaDIgeyANCiAgICAgICAgY29sb3I6IGRhcmtncmVlbjsgDQogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgDQogICAgICAgIGZvbnQtc3R5bGU6IG9ibGlxdWU7DQogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICANCiAgICB9IA0KICAgIHAgeyANCiAgICAgICAgdGV4dC1hbGlnbjoganVzdGlmeTsgDQogICAgICAgIGZvbnQtc2l6ZTogMThweDsgDQogICAgICAgIGNvbG9yOiAjMzMzOyANCiAgICB9IA0KICAgcC5taXJpbmcgeyBmb250LXN0eWxlOiBpdGFsaWM7fSANCjwvc3R5bGU+IA0KDQo8ZGl2IGlkPSJkYXJrLW1vZGUtdG9nZ2xlIj4NCiAgPHNwYW4gY2xhc3M9InN1biI+4piA77iPPC9zcGFuPg0KICA8ZGl2IGNsYXNzPSJ0b2dnbGUtc3dpdGNoIiBvbmNsaWNrPSJkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2RhcmstbW9kZScpIj48L2Rpdj4NCiAgPHNwYW4gY2xhc3M9Im1vb24iPvCfjJk8L3NwYW4+DQo8L2Rpdj4NCg0K