Analisis Angka Kemiskinan Menggunakan Regresi Data Panel

Kelompok 1

2023-03-06

Anggota Kelompok 1

  • G1401201004 Alfidhia Rahman Nasa Juhanda
  • G1401201050 Hanung Safrizal
  • G1401201064 Muhammad Irsyad Robbani
  • G1401201081 Zakiyah Azzahra
  • G1401201092 Muhammad Zhillan Zakiyyan
lapply(c("kableExtra","tidyverse","plm","tinytex","tseries","lmtest", 
         "broom", "stargazer", "RColorBrewer"), library, character.only = T)[[1]]
## [1] "kableExtra" "stats"      "graphics"   "grDevices"  "utils"     
## [6] "datasets"   "methods"    "base"

Data

Data yang digunakan adalah data Tingkat Kemiskinan Dengan 4 Peubah bebas yang diberikan saat responsi. Data ini berjenis data panel dengan individunya adalah 32 Provinsi di Indonesia (34 Provinsi kecuali Provinsi DKI Jakarta dan Kalimantan Utara) selama 13 tahun (Tahun 2008-2020) dengan peubah-peubah sebagai berikut:

  • KMIS : Kemiskinan (%) (Peubah Respons)

  • INFR : Infrastrukur (Juta)

  • PEKO : Pertumbuhan Ekonomi (%)

  • INFL : Inflasi (%)

  • PGGR : Pengangguran (%)

Untuk lebih jelasnya, dapat dilihat dari output berikut:

## tibble [416 × 7] (S3: tbl_df/tbl/data.frame)
##  $ PROVINSI: Factor w/ 32 levels "Aceh","BABEL",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ TAHUN   : Factor w/ 13 levels "2008","2009",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ KMIS    : num [1:416] 6.17 5.13 4.88 4.2 3.95 4.49 4.76 5.25 4.15 4.14 ...
##  $ INFRA   : num [1:416] 430814 484340 336352 298867 348529 ...
##  $ PEKO    : num [1:416] 5.97 5.33 5.83 6.49 6.65 6.69 6.73 6.03 6.32 5.56 ...
##  $ INFL    : num [1:416] 9.62 4.37 8.1 3.75 4.71 8.16 8.43 2.75 3.23 3.32 ...
##  $ PGGR    : num [1:416] 3.31 3.13 3.06 2.95 2.1 1.83 1.9 1.99 1.89 1.48 ...

Dapat terlihat bahwa terdapat 416 total observasi, yaitu 32 individu dengan periode 13 tahun. Semua peubah berjenis numerik kontinu. Berikut adalah 13 observasi teratas dari data yang digunakan yang menunjukan semua observasi yang terdapat di Provinsi Bali:

kemis %>% head(13)

Metodologi

Metodologi yang digunakan adalah sebagai berikut:

  1. Eksplorasi Data

  2. Menduga parameter model CEM

  3. Menduga parameter model FEM

  4. Melakukan Uji Chow

  5. Menduga Parameter model REM

  6. Melakukan Uji Hausman

  7. Pengujian asumsi terhadap Model terpilih

  8. Jika asumsi tidak terpenuhi, akan dilakukan penanganan asumsi

  9. Interpretasi model terbaik

Berikut adalah dari metode penelitian yang digunakan:

Eksplorasi Data

Plot

ggplot(data=kemis, aes(x=TAHUN, y=KMIS, group = PROVINSI, colour = PROVINSI))+ theme_bw()+
  geom_line(size=1.2) +
  geom_point( size=3, shape=19, fill="red") + 
  labs(colour="Provinsi", title = "Tingkat Kemiskinan di Indonesia", subtitle = "Tahun 2008-2020") +
  theme(plot.title = element_text(hjust = 0.5,face = "bold"), plot.subtitle = element_text(hjust = 0.5))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Interpretasi: Line chart di atas menampilkan sebaran tingkat kemiskinan per provinsi di Indonesia dari tahun 2008 sampai 2020, dapat dilihat bahwa Papua Barat memiliki tingkat kemiskinan paling tinggi, kemudian Provinsi yang memiliki tingkat kemiskinan yang tinggi adalah Maluku dan Papua yang mana ketiga Provinsi tersebut merupakan daerah bagian timur Indonesia. Hal ini mengindikasikan bahwa terdapat perbedaan untuk setiap individu

Map Chart

Map di bawah ini dibuat pada Aplikasi Tableau Public, merupakan sebaran rata-rata kemiskinan di Indonesia pada selama tahun 2008 hingga 2020.

Interpretasi: Sebaran rata-rata kemiskinan di Indonesia yang ditampilkan pada map chart di atas menunjukkan bahwa semakin pekat warna merah daerah tersebut maka semakin tinggi tingkat kemiskinan di provinsi tersebut dan semakin pekat warna hijau daerah tersebut maka semakin rendah tingkat kemiskinan di daerah tersebut. Wilayah Indonesia bagian timur di dominasi oleh warna merah yang artinya masih banyak daerah di bagian timur Indonesia yang memiliki tingkat kemiskinan tinggi, dapat dilihat juga semua provinsi yang terdapat pada Pulau Kalimantan, Pulau Jawa dan Bali memiliki tingkat kemiskinan yang rendah. Hal ini juga mengindikasikan bahwa terdapat perbedaan untuk setiap individu.

Common-Effect Model

Common Effect Model (CEM) atau disebut juga pooled regression model merupakan salah satu model dalam regresi data panel yang mengkombinasikan data cross-section dan time series menjadi satu kesatuan (pooldata) yang kemudian diestimasi modelnya dengan teknik OLS. Akibatnya, perbedaan baik antar individu maupun antar waktu tidak dapat diamati. Dengan kata lain, dalam pendekatan ini dimensi individu maupun waktu tidak diperhatikan. Diasumsikan bahwa perilaku data antar Individu sama dalam berbagai kurun waktu. Persamaan pool model dapat dituliskan sebagai berikut:

\[ \begin{aligned} y_{it} &= \alpha + \beta_{1}x_{1,it}+ \beta_{2}x_{2,it}+...+\beta_{k}x_{k,it}+\varepsilon_{it} \\ \end{aligned} \]

dengan \(y_{ij}\) merupakan variabel dependen individu ke-i dan waktu ke-j. \(\alpha\) adalah intersep, \(x_{p,ij}\) adalah variabel independen ke-p individu ke-i dan waktu ke-j, \(\beta_k\) koefisien variabel bebas, dan \(\varepsilon_{ij}\) merupakan galat individu ke-i dan waktu ke-j.

Selain asumsi kesamaan pengaruh individu dan waktu, asumsi lain yang diperlukan pada model ini adalah asumsi normalitas, homogenitas, dan kebebasan galat.

Model CEM

Program R menyediakan package plm yang dapat memodelkan data menjadi model CEM.

Dalam pemodelan ini, dapat dibuat hipotesis:

\[ \begin{aligned} H_0 &: \text{CEM adalah model yang tidak layak}\\ H_1 &: \text{CEM adalah model yang layak} \end{aligned} \]

library(plm)
cem <- plm(KMIS ~ INFRA + PEKO + INFL + PGGR, data = kemis, model = "pooling")
summary(cem)
## Pooling Model
## 
## Call:
## plm(formula = KMIS ~ INFRA + PEKO + INFL + PGGR, data = kemis, 
##     model = "pooling")
## 
## Balanced Panel: n = 32, T = 13, N = 416
## 
## Residuals:
##    Min. 1st Qu.  Median 3rd Qu.    Max. 
## -9.1611 -5.1292 -1.5170  4.5191 19.6026 
## 
## Coefficients:
##               Estimate Std. Error t-value  Pr(>|t|)    
## (Intercept) 6.6707e+00 1.1961e+00  5.5772 4.438e-08 ***
## INFRA       1.0347e-06 2.9780e-07  3.4746 0.0005661 ***
## PEKO        5.0286e-01 8.2736e-02  6.0779 2.781e-09 ***
## INFL        3.1338e-01 1.0394e-01  3.0151 0.0027284 ** 
## PGGR        4.8913e-02 1.3531e-01  0.3615 0.7179249    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    17772
## Residual Sum of Squares: 15525
## R-Squared:      0.12645
## Adj. R-Squared: 0.11794
## F-statistic: 14.873 on 4 and 411 DF, p-value: 2.3234e-11

Pada dasarnya, pendugaan model yang dilakukan oleh metode CEM menghasilkan model yang sama persis dengan metode Regresi Linear Berganda dengan memandang setiap baris pada data adalah individu yang berbeda-beda. Model regresi yang dihasilkan adalah sebagai berikut:

\[ \begin{aligned} KMIS_{it} &= 6.67 + 1.0347(10^{-6})INFRA_{it}+0.5PEKO_{it}-0.31INFL_{it}+0.049PGGR_{it}+\varepsilon_{it} \\ \end{aligned} \]

Interpretasi:

  • Setiap kenaikan satu satuan Infrastruktur menyebabkan Tingkat Kemiskinan meningkat sebesar 1.0347x10^-6 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Pertumbuhan Ekonomi menyebabkan Tingkat Kemiskinan meningkat sebesar 0.5 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Inflasimenyebabkan Tingkat Kemiskinan menurun sebesar 0.31 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Pengangguran menyebabkan Tingkat Kemiskinan meningkat sebesar 0.049 persen dengan menganggap peubah lain konstan.

Untuk semua p-value di bawah 5%, maka terdapat cukup bukti untuk menolak \(H_0\) (kurang dari 5% kemungkinan bahwa \(H_0\) benar).

  • p-value uji-F < 2.22e-16 << 5%. Artinya, dapat dikatakan bahwa model layak untuk digunakan.

  • p-value uji-T untuk peubah INFRA, PEKO, dan INFL < 5%. Artinya, dapat dikatakan bahwa peubah tersebut berpengaruh signifikan terhadap model.

\(R^2\) merupakan nilai yang menunjukan kekuatan hubungan antara peubah bebas dan peubah respons. Semakin tinggi nilai \(R^2\), maka semakin baik model tersebut.

  • \(R^2\) pada model sebesar 0.12645 atau 12.645% yang mengindikasikan bahwa peubah yang digunakan kurang baik dalam menggambarkan model.

Meskipun sebagian besar parameter model signifikan, tetapi nilai R2 model kurang baik dan fakta bahwa model CEM mengabaikan pengaruh individu dan waktu tidak bisa diabaikan. Kedua faktor tersebut bisa berpengaruh terhadap keheterogenan sisaan pada model. Oleh karena itu, perlu dilakukan perbandingan model CEM dengan FEM dan REM untuk memastikan model terbaik.

Fixed-Effect Model

Fixed-Effect model merupakan salah satu jenis model dalam regresi data panel yang mempertimbangkan adanya pengaruh individu dan waktu. Terdapat asumsi bahwa intersep antar individu dan waktu berbeda tetapi koefisien regresi konstan untuk semua individu dan waktu. Model yang memiliki pengaruh dari salah satu dari individu atau waktu disebut model sisaan satu arah dan model yang memiliki pengaruh dari keduanya disebut model sisaan dua arah. Pendugaan pada model ini biasa dilakukan dengan model Within atau Least Square Dummy Variable (LSDV).

Within vs LSDV (?)

Perlu diperhatikan bahwa model within akan menghasilkan output yang sama seperti model LSDV tanpa referensi atau tanpa intersep. Pembuktiannya dapat dilihat di bawah ini:

fem_within <- plm(KMIS ~ INFRA + PEKO + INFL + PGGR, index = c("PROVINSI", "TAHUN"), 
                  model = "within", effect= "individual", data = kemis)
fem_lsdv_tanpa_referensi <- lm(KMIS ~ INFRA + PEKO + INFL + PGGR + PROVINSI - 1, 
                               data = kemis)
fem_within$coefficients; fem_lsdv_tanpa_referensi$coefficients[1:4]
##         INFRA          PEKO          INFL          PGGR 
## -6.936362e-07  1.829038e-01  1.744263e-01  6.578657e-01
##         INFRA          PEKO          INFL          PGGR 
## -6.936362e-07  1.829038e-01  1.744263e-01  6.578657e-01

Dapat terlihat bahwa pengaruh setiap peubah adalah sama. Begitu pun dengan pengaruh setiap individunya:

as.data.frame(cbind(Within=fixef(fem_within, effect = "individual"), 
                    LSDV= fem_lsdv_tanpa_referensi$coefficients[5:36]))

Oleh karena itu, kita hanya akan menggunakan satu metode, yaitu model within.

Persamaan Model FEM

Persamaan model Fixed-Effect :

  • Pengaruh Individu

\[ \begin{aligned} y_{it} = \alpha + f_i +\beta_1x_{1,it} + \beta_2x_{2,it} + ... + \beta_kx_{k,it} + \varepsilon_{it} \end{aligned} \]

  • Pengaruh Waktu

\[ \begin{aligned} y_{it} = \alpha + \lambda_t +\beta_1x_{1,it} + \beta_2x_{2,it} + ... + \beta_kx_{k,it} + \varepsilon_{it} \end{aligned} \]

  • Model Dua arah (pengaruh individu dan waktu)

\[ \begin{aligned} y_{it} = \alpha + f_i + \lambda_t +\beta_1x_{1,it} + \beta_2x_{2,it} + ... + \beta_kx_{k,it} + \varepsilon_{it} \end{aligned} \]

FEM INDIVIDUAL

Efek komponen sisaaan satu arah pada individu.

fem <- plm(KMIS ~ INFRA + PEKO + INFL + PGGR, index = c("PROVINSI", "TAHUN"),
           model = "within", effect= "individual", data = kemis)
summary(fem)
## Oneway (individual) effect Within Model
## 
## Call:
## plm(formula = KMIS ~ INFRA + PEKO + INFL + PGGR, data = kemis, 
##     effect = "individual", model = "within", index = c("PROVINSI", 
##         "TAHUN"))
## 
## Balanced Panel: n = 32, T = 13, N = 416
## 
## Residuals:
##     Min.  1st Qu.   Median  3rd Qu.     Max. 
## -4.76845 -0.95405 -0.11980  0.76873  6.62826 
## 
## Coefficients:
##          Estimate  Std. Error t-value  Pr(>|t|)    
## INFRA -6.9364e-07  1.2802e-07 -5.4184 1.070e-07 ***
## PEKO   1.8290e-01  2.5300e-02  7.2293 2.689e-12 ***
## INFL   1.7443e-01  2.9213e-02  5.9708 5.422e-09 ***
## PGGR   6.5787e-01  7.8248e-02  8.4074 8.533e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    2088
## Residual Sum of Squares: 1025.6
## R-Squared:      0.50881
## Adj. R-Squared: 0.46356
## F-statistic: 98.4064 on 4 and 380 DF, p-value: < 2.22e-16

Didapat model sebagai berikut:

\[ \begin{aligned} KMIS_{it} &= f_i-6.9364(10^{-7})INFRA_{it}+0.1829PEKO_{it}-0.17441INFL_{it}+0.6579PGGR_{it}+\varepsilon_{it} \\ \end{aligned} \]

Interpretasi :

  • Setiap kenaikan satu satuan Infrastruktur menyebabkan Tingkat Kemiskinan menurun sebesar 6.9364x10^-7 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Pertumbuhan Ekonomi menyebabkan Tingkat Kemiskinan meningkat sebesar 0.1829 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Inflasimenyebabkan Tingkat Kemiskinan menurun sebesar 0.1744 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Pengangguran menyebabkan Tingkat Kemiskinan meningkat sebesar 0.6579 persen dengan menganggap peubah lain konstan.

Untuk semua p-value di bawah 5%, maka terdapat cukup bukti untuk menolak \(H_0\) (kurang dari 5% kemungkinan bahwa \(H_0\) benar).

  • Model memiliki p-value pada uji F yang lebih kecil dari 0.05 (< 2.22e-16) yang berarti model ini layak untuk digunakan
  • p-value uji-T untuk peubah INFRA, PEKO, dan INFL < 5%. Artinya, dapat dikatakan bahwa peubah tersebut berpengaruh signifikan terhadap model.

\(R^2\) merupakan nilai yang menunjukan kekuatan hubungan antara peubah bebas dan peubah respons. Semakin tinggi nilai \(R^2\), maka semakin baik model tersebut.

  • \(R^2\) pada model sebesar 0.50881 atau 50.881% yang mengindikasikan bahwa peubah yang digunakan cukup baik dalam menggambarkan model.

  • Model dapat menjelaskan sebesar 46.356% dari keragaman data yang dilihat dari \(R^2 Adj\).

Nilai Intersep dari setiap individu

summary(fixef(fem, effect="individual"))
##             Estimate Std. Error t-value  Pr(>|t|)    
## Aceh        12.76929    0.90100 14.1724 < 2.2e-16 ***
## BABEL        1.15546    0.63089  1.8315 0.0678101 .  
## Bali         1.53673    0.54757  2.8064 0.0052672 ** 
## Banten      -2.43011    1.01291 -2.3991 0.0169149 *  
## Bengkulu    13.04266    0.62535 20.8567 < 2.2e-16 ***
## DIY         10.43756    0.59606 17.5110 < 2.2e-16 ***
## Gorontalo   14.13774    0.64218 22.0152 < 2.2e-16 ***
## JABAR        3.27902    1.04650  3.1333 0.0018626 ** 
## Jambi        3.70584    0.65751  5.6362 3.394e-08 ***
## JATENG      10.57064    0.84614 12.4927 < 2.2e-16 ***
## JATIM       10.36797    0.81561 12.7119 < 2.2e-16 ***
## KALBAR       4.56660    0.69636  6.5578 1.786e-10 ***
## KALSEL       0.50206    0.67719  0.7414 0.4589218    
## KALTENG      2.18406    0.64430  3.3898 0.0007727 ***
## KALTIM       0.24362    0.84257  0.2891 0.7726350    
## Kepri        0.73340    0.76332  0.9608 0.3372577    
## Lampung     11.01549    0.72114 15.2751 < 2.2e-16 ***
## Maluku      14.23684    0.92636 15.3685 < 2.2e-16 ***
## MALUT        3.05684    0.70061  4.3631 1.654e-05 ***
## NTB         13.62690    0.67977 20.0462 < 2.2e-16 ***
## NTT         19.07966    0.67755 28.1597 < 2.2e-16 ***
## PAPUA       24.63917    0.83838 29.3889 < 2.2e-16 ***
## PapuaBarat  21.12064    0.81518 25.9091 < 2.2e-16 ***
## RIAU         3.00880    0.74952  4.0143 7.185e-05 ***
## SULBAR       8.91121    0.59002 15.1033 < 2.2e-16 ***
## SULSEL       5.49197    0.86742  6.3314 6.860e-10 ***
## SULTENG     10.85094    0.69374 15.6411 < 2.2e-16 ***
## SulTenggara  9.98109    0.67618 14.7610 < 2.2e-16 ***
## SULUT        2.02268    0.88163  2.2943 0.0223203 *  
## SUMBAR       2.45959    0.79659  3.0876 0.0021656 ** 
## SUMSEL       9.57356    0.73051 13.1053 < 2.2e-16 ***
## SUMUT        5.63776    0.87574  6.4377 3.662e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Nilai diatas adalah nilai pengaruh konstan dari masing-masing individu yang pada model dapat dituliskan sebagai \(f_i\).

FEM TIME

Efek komponen sisaaan satu arah pada waktu.

fem_time <- plm(KMIS ~ INFRA + PEKO + INFL + PGGR, index = c("PROVINSI", "TAHUN"),
                model = "within", effect= "time", data = kemis)
summary(fem_time)
## Oneway (time) effect Within Model
## 
## Call:
## plm(formula = KMIS ~ INFRA + PEKO + INFL + PGGR, data = kemis, 
##     effect = "time", model = "within", index = c("PROVINSI", 
##         "TAHUN"))
## 
## Balanced Panel: n = 32, T = 13, N = 416
## 
## Residuals:
##     Min.  1st Qu.   Median  3rd Qu.     Max. 
## -11.1310  -4.3205  -1.7469   4.1329  17.5313 
## 
## Coefficients:
##          Estimate  Std. Error t-value  Pr(>|t|)    
## INFRA  1.9886e-06  3.3696e-07  5.9017 7.693e-09 ***
## PEKO   5.2529e-01  9.4188e-02  5.5771 4.516e-08 ***
## INFL   6.0293e-02  2.0750e-01  0.2906   0.77153    
## PGGR  -2.5724e-01  1.3818e-01 -1.8616   0.06339 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    16380
## Residual Sum of Squares: 13680
## R-Squared:      0.16481
## Adj. R-Squared: 0.13131
## F-statistic: 19.6832 on 4 and 399 DF, p-value: 8.4451e-15

Didapat model sebagai berikut:

\[ \begin{aligned} KMIS_{it} &= \lambda_t+1.989(10^{-6})INFRA_{it}+0.525PEKO_{it}+0.063INFL_{it}-0.257PGGR_{it}+\varepsilon_{it} \\ \end{aligned} \]

Interpretasi :

  • Setiap kenaikan satu satuan Infrastruktur menyebabkan Tingkat Kemiskinan meningkat sebesar 1.989x10^-6 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Pertumbuhan Ekonomi menyebabkan Tingkat Kemiskinan meningkat sebesar 0.525 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Inflasimenyebabkan Tingkat Kemiskinan meningkat sebesar 0.063 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Pengangguran menyebabkan Tingkat Kemiskinan menurun sebesar 0.257 persen dengan menganggap peubah lain konstan.

Untuk semua p-value di bawah 5%, maka terdapat cukup bukti untuk menolak \(H_0\) (kurang dari 5% kemungkinan bahwa \(H_0\) benar).

  • Model memiliki p-value pada uji F yang lebih kecil dari 0.05 (< 8.4451e-15) yang berarti model ini layak untuk digunakan

  • p-value uji-T untuk peubah INFRA dan PEKO< 5% dan INFL < 10%. Artinya, dapat dikatakan bahwa peubah tersebut berpengaruh signifikan terhadap model.

\(R^2\) merupakan nilai yang menunjukan kekuatan hubungan antara peubah bebas dan peubah respons. Semakin tinggi nilai \(R^2\), maka semakin baik model tersebut.

  • \(R^2\) pada model sebesar 0.16481 atau 16.481% yang mengindikasikan bahwa peubah yang digunakan tidak baik dalam menggambarkan model.

  • Model dapat menjelaskan sebesar 13.131% dari keragaman data yang dilihat dari \(R^2 Adj\) yang mengindikasikan bahwa peubah yang digunakan tidak baik dalam menggambarkan model.

Nilai Intersep dari setiap waktu

summary(fixef(fem_time, effect="time"))
##      Estimate Std. Error t-value  Pr(>|t|)    
## 2008  13.2114     2.9719  4.4454 1.138e-05 ***
## 2009  12.4802     1.7951  6.9524 1.474e-11 ***
## 2010  10.5120     2.2926  4.5852 6.079e-06 ***
## 2011   9.3642     1.8790  4.9836 9.318e-07 ***
## 2012   8.2289     1.8189  4.5241 8.011e-06 ***
## 2013   8.1076     2.3144  3.5030 0.0005120 ***
## 2014   8.0184     2.3076  3.4747 0.0005674 ***
## 2015   8.2809     1.7461  4.7426 2.942e-06 ***
## 2016   4.3752     1.8103  2.4169 0.0161026 *  
## 2017   5.9215     1.6797  3.5253 0.0004720 ***
## 2018   5.2166     1.6680  3.1274 0.0018928 ** 
## 2019   4.4697     1.6320  2.7389 0.0064413 ** 
## 2020  10.1492     1.4282  7.1064 5.523e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Nilai diatas adalah nilai pengaruh konstan dari masing-masing waktu yang pada model dapat dituliskan sebagai \(\lambda_t\).

FEM TWO WAYS

Efek komponen sisaaan satu arah pada individu.

fem_twoways <- plm(KMIS ~ INFRA + PEKO + INFL + PGGR, index = c("PROVINSI", "TAHUN"),
                   model = "within", effect= "twoways", data = kemis)
summary(fem_twoways)
## Twoways effects Within Model
## 
## Call:
## plm(formula = KMIS ~ INFRA + PEKO + INFL + PGGR, data = kemis, 
##     effect = "twoways", model = "within", index = c("PROVINSI", 
##         "TAHUN"))
## 
## Balanced Panel: n = 32, T = 13, N = 416
## 
## Residuals:
##      Min.   1st Qu.    Median   3rd Qu.      Max. 
## -3.718143 -0.713539  0.050615  0.682921  4.957867 
## 
## Coefficients:
##          Estimate  Std. Error t-value  Pr(>|t|)    
## INFRA -6.2411e-07  1.5858e-07 -3.9356 9.922e-05 ***
## PEKO   1.5398e-01  2.4514e-02  6.2813 9.478e-10 ***
## INFL   1.1098e-01  4.7496e-02  2.3367   0.01999 *  
## PGGR  -6.3412e-02  7.8861e-02 -0.8041   0.42186    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    695.57
## Residual Sum of Squares: 592.21
## R-Squared:      0.14859
## Adj. R-Squared: 0.039851
## F-statistic: 16.0562 on 4 and 368 DF, p-value: 3.9613e-12

Didapat model sebagai berikut:

\[ \begin{aligned} KMIS_{it} &= f_i+\lambda_t-6.241(10^{-7})INFRA_{it}+0.154PEKO_{it}+0.111INFL_{it}-0.063PGGR_{it}+\varepsilon_{it} \\ \end{aligned} \]

Interpretasi :

  • Setiap kenaikan satu satuan Infrastruktur menyebabkan Tingkat Kemiskinan menurun sebesar 6.241x10^-7 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Pertumbuhan Ekonomi menyebabkan Tingkat Kemiskinan meningkat sebesar 0.154 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Inflasimenyebabkan Tingkat Kemiskinan meningkat sebesar 0.111 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Pengangguran menyebabkan Tingkat Kemiskinan menurun sebesar 0.063 persen dengan menganggap peubah lain konstan.

Untuk semua p-value di bawah 5%, maka terdapat cukup bukti untuk menolak \(H_0\) (kurang dari 5% kemungkinan bahwa \(H_0\) benar).

  • Model memiliki p-value pada uji F yang lebih kecil dari 0.05 (< 2.22e-16) yang berarti model ini layak untuk digunakan
  • p-value uji-T untuk peubah INFRA, PEKO, dan INFL < 5%. Artinya, dapat dikatakan bahwa peubah tersebut berpengaruh signifikan terhadap model.

\(R^2\) merupakan nilai yang menunjukan kekuatan hubungan antara peubah bebas dan peubah respons. Semakin tinggi nilai \(R^2\), maka semakin baik model tersebut.

  • \(R^2\) pada model sebesar 0.14859 atau 14.859% yang mengindikasikan bahwa peubah yang digunakan tidak baik dalam menggambarkan model.

  • Model dapat menjelaskan sebesar 3.985% dari keragaman data yang dilihat dari \(R^2 Adj\) yang mengindikasikan bahwa peubah yang digunakan tidak baik dalam menggambarkan model.

Nilai Intersep dari setiap individu dan waktu

data.frame(summary(fixef(fem_twoways, effect="twoways")))

Nilai diatas adalah nilai pengaruh konstan dari gabungan masing-masing individu dan waktu yang pada model dapat dituliskan sebagai \(f_i+\lambda_t\).

Uji-Chow

Uji Chow adalah uji formal untuk menguji ada atau tidaknya pengaruh spesifik individu dan pengaruh spesifik waktu pada data panel.

Hipotesis pada uji ini yaitu :

  • Untuk menguji pengaruh individu

\[ \begin{aligned} H_{01} &: \text{Tidak ada pengaruh spesifik individu} \\ H_{11} &: \text{Ada pengaruh spesifik individu} \end{aligned} \]

  • Untuk menguji pengaruh waktu

\[ \begin{aligned} H_{02} &: \text{Tidak ada pengaruh spesifik waktu} \\ H_{12} &: \text{Ada pengaruh spesifik waktu} \end{aligned} \]

Statsitik Uji yang digunakan :

  • Pengaruh individu

\[ \begin{aligned} F_{Hitung} = \frac{JKG_{MG} - JKG_{MPTI}}{JKG_{MPTI}} . \frac{NT-N-K}{N-1} \end{aligned} \]

  • Pengaruh Waktu

\[ \begin{aligned} F_{Hitung} = \frac{JKG_{MG} - JKG_{MPTW}}{JKG_{MPTW}} . \frac{N-T-K}{T-1} \end{aligned} \]

Uji Chow

\[ \begin{aligned} H_0 &: \text{Model Common Effect} \\ H_1 &: \text{Model Fixed Effect} \end{aligned} \]

\(H_0\) akan ditolak apabila p-value lebih kecil dari alpha yaitu 0.05

pooltest(cem, fem)
## 
##  F statistic
## 
## data:  KMIS ~ INFRA + PEKO + INFL + PGGR
## F = 173.29, df1 = 31, df2 = 380, p-value < 2.2e-16
## alternative hypothesis: unstability

Nilai p-value sebesar \(2.2e-16\) berarti keputusan Tolak H0 atau model fixed effect lebih layak digunakan pada data ini.

Uji pengaruh individu / waktu

Selanjutnya karena yang terpilih adalah model Fixed-Effect akan dilihat komponen yang memiliki pengaruh tetap apakah individu, waktu, atau keduanya.

Efek Individu dan Waktu

plmtest(fem, type = "bp", effect = "twoways")
## 
##  Lagrange Multiplier Test - two-ways effects (Breusch-Pagan)
## 
## data:  KMIS ~ INFRA + PEKO + INFL + PGGR
## chisq = 1746.8, df = 2, p-value < 2.2e-16
## alternative hypothesis: significant effects

Efek Individu

plmtest(fem, type = "bp", effect = "individual")
## 
##  Lagrange Multiplier Test - (Breusch-Pagan)
## 
## data:  KMIS ~ INFRA + PEKO + INFL + PGGR
## chisq = 1726.2, df = 1, p-value < 2.2e-16
## alternative hypothesis: significant effects

Efek Waktu

plmtest(fem, type = "bp", effect = "time")
## 
##  Lagrange Multiplier Test - time effects (Breusch-Pagan)
## 
## data:  KMIS ~ INFRA + PEKO + INFL + PGGR
## chisq = 20.619, df = 1, p-value = 5.605e-06
## alternative hypothesis: significant effects

Dari ketiga uji diatas didapat nilai p-value yang lebih kecil dari 0.05 yang berarti keputusannya adalah Tak Tolak \(H_0\) atau terdapat pengaruh yang signifikan dari individu maupun waktu. Sehingga akan diduga parameter pengaruh twoways pada Random Effect Model.

Random-Effect Model

Model pengaruh acak mengasumsikan tidak ada korelasi antara pengaruh spesifik individu dan pengaruh spesifik waktu dengan peubah bebas. Asumsi ini membuat komponen sisaan dari pengaruh spesifik individu dan pengaruh spesifik waktu dimasukan kedalam sisaan. Model sisaan satu arah yaitu:

\[ \begin{aligned} y_{it} &= \alpha + \beta_{1}x_{1,it}+ \beta_{2}x_{2,it}+...+\beta_{k}x_{k,it}+ f_{i} +\varepsilon_{it}\ \text{(pengaruh Individu)} \\ \end{aligned} \]

\[ \begin{aligned} y_{it} &= \alpha + \beta_{1}x_{1,it}+ \beta_{2}x_{2,it}+...+\beta_{k}x_{k,it}+ \lambda_{t} +\varepsilon_{it} \\ \end{aligned} \]

Model sisaan dua arah yaitu:

\[ \begin{aligned} y_{it} &= \alpha + \beta_{1}x_{1,it}+ \beta_{2}x_{2,it}+...+\beta_{k}x_{k,it}+ f_{i}+ \lambda_{t} +\varepsilon_{it} \\ \end{aligned} \] Dengan \(\alpha\) merupakan intersep model dan \(f_i\) dan \(\lambda_t\) merupakan pengaruh acak masing-masing individu dan waktu. Pendugaan parameter model pengaruh acak menggunakan Generalized Least Square (Baltagi 2008).

Generalized Least Square

Analisis data panel tidak sepenuhnya mengikuti prosedur regresi biasa yang tidak dapat menjelaskan keragaman data. Perlunya mempertimbangkan keragaman data tersebut untuk dapat mengetahui dalam penggalian lebih lanjut terhadap informasi yang dikandung data. Salah satu cara untuk melakukan hal tersebut yaitu dengan metode Generalized Least Square (GLS). GLS dipakai sebagai estimator analisis data panel dengan persamaan sistem karena informasi heterogenitas antara individu dan waktu digunakan sebagai informasi yang penting untuk menghasilkan parameter \(\hat{\beta}\) Persamaan dalam pendugaan parameter GLS adalah sebagai berikut.

\[ \begin{aligned} \hat {\beta} &= (X'(\sum)^{-1} X )^{-1} X'(\sum) ^{-1} y \\ \end{aligned} \]

Metode GLS memasukkan struktur matriks ragam peragam residual pada parameter \(\hat{\beta}\) (Ekananda 2016).

Pendugaan Parameter

Jika pada model FEM mengasumsikan bahwa nilai dari pengaruh spesifik individu bersifat fixed pada setiap unit, maka pada model random effect diasumsikan bahwa pengaruh tersebut bersifat acak. Dalam hal ini misalnya model one way individu pada data Grundfeld, maka ke-10 firm memiliki nilai rataan umum intersep yang sama, sedangkan perbedaan intersep antar masing-masing unit firm direfleksikan pada error termnya.

rem_gls <- plm(KMIS ~ INFRA + PEKO + INFL + PGGR, data = kemis, 
                    index = c("PROVINSI", "TAHUN"), 
                    effect = "twoways", model = "random")
summary(rem_gls)
## Twoways effects Random Effect Model 
##    (Swamy-Arora's transformation)
## 
## Call:
## plm(formula = KMIS ~ INFRA + PEKO + INFL + PGGR, data = kemis, 
##     effect = "twoways", model = "random", index = c("PROVINSI", 
##         "TAHUN"))
## 
## Balanced Panel: n = 32, T = 13, N = 416
## 
## Effects:
##                   var std.dev share
## idiosyncratic  1.6093  1.2686 0.047
## individual    32.6514  5.7141 0.947
## time           0.2158  0.4646 0.006
## theta: 0.9385 (id) 0.5653 (time) 0.5648 (total)
## 
## Residuals:
##     Min.  1st Qu.   Median  3rd Qu.     Max. 
## -3.48112 -0.80340 -0.21541  0.46391  6.46679 
## 
## Coefficients:
##                Estimate  Std. Error z-value  Pr(>|z|)    
## (Intercept)  1.0883e+01  1.2462e+00  8.7327 < 2.2e-16 ***
## INFRA       -7.8316e-07  1.4391e-07 -5.4421 5.266e-08 ***
## PEKO         1.6972e-01  2.4964e-02  6.7988 1.055e-11 ***
## INFL         1.7252e-01  3.8357e-02  4.4977 6.871e-06 ***
## PGGR         1.6255e-01  7.7831e-02  2.0886   0.03675 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    1018
## Residual Sum of Squares: 773.87
## R-Squared:      0.23978
## Adj. R-Squared: 0.23238
## Chisq: 129.63 on 4 DF, p-value: < 2.22e-16

Didapat model sebagai berikut:

\[ \begin{aligned} KMIS_{it} &= 10.883+\lambda_t-7.832(10^{-7})INFRA_{it}+0.1697PEKO_{it}+0.1725INFL_{it}+0.1625PGGR_{it}+f_{i}+ \lambda_{t}+\varepsilon_{it} \\ \end{aligned} \]

Interpretasi :

  • Setiap kenaikan satu satuan Infrastruktur menyebabkan Tingkat Kemiskinan menurun sebesar 7.832x10^-7 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Pertumbuhan Ekonomi menyebabkan Tingkat Kemiskinan meningkat sebesar 0.1697 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Inflasimenyebabkan Tingkat Kemiskinan meningkat sebesar 0.1725 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Pengangguran menyebabkan Tingkat Kemiskinan meningkat sebesar 0.1625 persen dengan menganggap peubah lain konstan.

Untuk semua p-value di bawah 5%, maka terdapat cukup bukti untuk menolak \(H_0\) (kurang dari 5% kemungkinan bahwa \(H_0\) benar).

  • Model memiliki p-value pada uji F yang lebih kecil dari 0.05 (< 2.22e-16) yang berarti model ini layak untuk digunakan
  • p-value uji-T untuk semua peubah < 5%. Artinya, dapat dikatakan bahwa semua peubah berpengaruh signifikan terhadap model.

\(R^2\) merupakan nilai yang menunjukan kekuatan hubungan antara peubah bebas dan peubah respons. Semakin tinggi nilai \(R^2\), maka semakin baik model tersebut.

  • \(R^2\) pada model sebesar 0.23978 atau 23.978% yang mengindikasikan bahwa peubah yang digunakan tidak baik dalam menggambarkan model.

  • Model dapat menjelaskan sebesar 23.238% dari keragaman data yang dilihat dari \(R^2 Adj\) yang mengindikasikan bahwa peubah yang digunakan tidak baik dalam menggambarkan model.

Cek Signifikansi Pengaruh Individu

#efek individu 
plmtest(rem_gls,type = "bp", effect="individu")
## 
##  Lagrange Multiplier Test - (Breusch-Pagan)
## 
## data:  KMIS ~ INFRA + PEKO + INFL + PGGR
## chisq = 1726.2, df = 1, p-value < 2.2e-16
## alternative hypothesis: significant effects

Karena nilai p-value < 0.05, maka tolak \(H_0\) atau pengaruh individu signifikan terhadap model. ## Cek Signifikansi Pengaruh waktu

#efek waktu 
plmtest(rem_gls,type = "bp", effect="time")
## 
##  Lagrange Multiplier Test - time effects (Breusch-Pagan)
## 
## data:  KMIS ~ INFRA + PEKO + INFL + PGGR
## chisq = 20.619, df = 1, p-value = 5.605e-06
## alternative hypothesis: significant effects

Karena nilai p-value < 0.05, maka tolak \(H_0\) atau pengaruh waktu signifikan terhadap model. Artinya, model twoways tepat digunakan untuk metode REM.

tidy_ranef <- tidy(ranef(rem_gls, effect="individual"))
kable(tidy_ranef, digits=3, caption = "Pengaruh Acak Individu", 
      col.names = c("Firm", "Pengaruh Acak Individu"))
Pengaruh Acak Individu
Firm Pengaruh Acak Individu
Aceh 6.126
BABEL -7.343
Bali -7.966
Banten -7.781
Bengkulu 4.284
DIY 1.665
Gorontalo 5.649
JABAR -2.633
Jambi -4.748
JATENG 2.839
JATIM 2.102
KALBAR -3.821
KALSEL -7.716
KALTENG -6.500
KALTIM -6.354
Kepri -6.480
Lampung 2.918
Maluku 7.982
MALUT -5.020
NTB 5.297
NTT 10.094
PAPUA 15.991
PapuaBarat 13.705
RIAU -4.408
SULBAR -0.234
SULSEL -1.920
SULTENG 2.308
SulTenggara 1.422
SULUT -4.619
SUMBAR -4.909
SUMSEL 1.670
SUMUT -1.601

Output diatas merupakan pengaruh acak dari setiap unit individu, nilai tersebut tersebut menunjukkan seberapa besar perbedaan nilai komponen error acak masing-masing unit indvidu terhadap nilai intersep umum.

tidy_ranef <- tidy(ranef(rem_gls, effect="time"))
kable(tidy_ranef, digits=3, caption = "Pengaruh Acak Waktu", 
      col.names = c("Firm", "Pengaruh Acak Waktu"))
Pengaruh Acak Waktu
Firm Pengaruh Acak Waktu
2008 1.605
2009 1.982
2010 0.593
2011 0.169
2012 -0.496
2013 -0.924
2014 -1.205
2015 -0.515
2016 0.530
2017 -0.476
2018 -0.639
2019 -0.704
2020 0.080

Output diatas merupakan pengaruh acak dari setiap unit waktu, nilai tersebut tersebut menunjukkan seberapa besar perbedaan nilai komponen error acak masing-masing unit waktu terhadap nilai intersep umum.

FEM vs REM

Uji Haussman

Pada bagian sebelumnya, cukup bukti yang menyatakan bahwa model FEM lebih baik daripada model CEM. Oleh karena itu, tahap selanjutnya akan dibandingkan kebaikan model FEM jika dibanding model REM. Uji yang digunakan adalah uji Hausman dengan menggunakan fungsi phtest(FEM,REM).

Pengujian ini dilakukan untuk memilih model antara model pengaruh tetap atau model pengaruh acak yang sesuai untuk menggambarkan suatu data panel. Uji Hausman didasarkan pada perbedaan penduga model pengaruh tetap \(\hat{\beta}_{MPT}\) dengan penduga model pengaruh acak \(\hat{\beta}_{MPA}\). Kedua penduga konsisten dalam kondisi \(H_0\), tetapi \(\hat{\beta}_{MPA}\) akan bias dan tidak konsisten pada \(H_1\). Pengujian hipotesisnya adalah:

\(H_0\): Model pengaruh acak (REM) adalah model yang tepat

\(H_1\): Model pengaruh tetap (FEM) adalah model yang tepat

#fem dengan rem gls
phtest(fem_twoways, rem_gls)
## 
##  Hausman Test
## 
## data:  KMIS ~ INFRA + PEKO + INFL + PGGR
## chisq = 40.108, df = 4, p-value = 4.111e-08
## alternative hypothesis: one model is inconsistent

Karena nilai p-value yang diperoleh kurang dari dari alpha 5%, maka Tolak H0 yang mengindikasikan bahwa model yang sesuai adalah model FEM.

UJi Diagnostik Sisaan

res <- residuals(fem_twoways)

Uji Normalitas

jarque.bera.test(res)
## 
##  Jarque Bera Test
## 
## data:  res
## X-squared = 65.966, df = 2, p-value = 4.774e-15

Histogram

# Histogram 
ggplot(as.data.frame(res), aes(x = res)) +
  geom_histogram(aes(y = after_stat(density)), color = "white", fill = "steelblue") +
  geom_density(color = "red", linewidth = 1) +
  theme_minimal()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Uji Autokorelasi

pbgtest(fem_twoways)
## 
##  Breusch-Godfrey/Wooldridge test for serial correlation in panel models
## 
## data:  KMIS ~ INFRA + PEKO + INFL + PGGR
## chisq = 194.35, df = 13, p-value < 2.2e-16
## alternative hypothesis: serial correlation in idiosyncratic errors

Uji Kehomogenan

bptest(fem_twoways)
## 
##  studentized Breusch-Pagan test
## 
## data:  fem_twoways
## BP = 16.998, df = 4, p-value = 0.001935

Kesimpulan uji diagnostik :

  • Sisaan tidak menyebar normal (Asumsi kenormalan tidak terpenuhi)
  • Sisaan memiliki autokorelasi (Asumsi kebebasan belum terpenuhi)
  • Sisaan tidak homogen (Asumsi kehomogenan belum terpenuhi)

Terlihat bahwa semua asumsi tidak terpenuhi, oleh karena itu, diperlukan penanganan yaitu dengan transformasi menggunakan First Difference. Yaitu sebagai berikut:

Penanganan Asumsi - FEM First Difference

First Difference Estimator (FD-Estimator) merupakan estimator untuk data panel yang digunakan pada model efek tetap satu arah (Oneway-FEM) atau dua arah (twoway-FEM). FD berguna dalam validasi model dimana pada data panel terdapat beberapa nilai amatan yang hilang. Berikut adalah model umum yang digunakan dalah FEM First Difference:

\[ \begin{aligned} \Delta y_{it} &= \beta_{1}\Delta x_{it1} + \beta_{2}\Delta x_{it2} + ... + \beta_{k}\Delta x_{itk} + \varepsilon_{it} \end{aligned} \]

Dalam hal ini, kita akan menggunakan metode FD pada model twoways. Untuk \(\tilde{y}_{it}= \Delta y_{it}\) dan \(\tilde{X}_{it}= \Delta X_{it}\), didefinisikan:

\(\tilde{{y} }_{i,t}={y} _{i,t}-{y} _{i-1,t}-{y} _{i,t-1}+{y} _{i-1,t-1}\)

dan

\(\tilde{{X} }_{s,t}={X} _{s,t}-{X} _{i-1,t}-{X} _{i,t-1}+{X} _{i-1,t-1}\)

Sehingga, kita perlu mentransformasi setiap nilai di peubah respons (Y = KMIS) dan peubah bebas (X) pada data dengan fungsi berikut:

transform_data <- function(df) {
  df$dY <- NA # create a new column for the transformed Y values
  df$dX1 <- NA # create a new column for the transformed X4 values
  df$dX2 <- NA # create a new column for the transformed X2 values
  df$dX3 <- NA # create a new column for the transformed X3 values
  df$dX4 <- NA # create a new column for the transformed X4 values
  df$PROVINSI <- as.numeric(df$PROVINSI)
  df$TAHUN <- as.numeric(as.character(df$TAHUN))
  for (i in 2:32) {
    for (t in 2009:2020) {
      y_it <- df$Y[df$PROVINSI == i & df$TAHUN == t]
      y_i1t <- df$Y[df$PROVINSI == i-1 & df$TAHUN == t]
      y_it1 <- df$Y[df$PROVINSI == i & df$TAHUN == t-1]
      y_i1t1 <- df$Y[df$PROVINSI == i-1 & df$TAHUN == t-1]
      df$dY[df$PROVINSI == i & df$TAHUN == t] <- y_it - y_i1t - y_it1 + y_i1t1
      
      x1_it <- df$X1[df$PROVINSI == i & df$TAHUN == t]
      x1_i1t <- df$X1[df$PROVINSI == i-1 & df$TAHUN == t]
      x1_it1 <- df$X1[df$PROVINSI == i & df$TAHUN == t-1]
      x1_i1t1 <- df$X1[df$PROVINSI == i-1 & df$TAHUN == t-1]
      df$dX1[df$PROVINSI == i & df$TAHUN == t] <- x1_it - x1_i1t - x1_it1 + x1_i1t
      
      x2_it <- df$X2[df$PROVINSI == i & df$TAHUN == t]
      x2_i1t <- df$X2[df$PROVINSI == i-1 & df$TAHUN == t]
      x2_it1 <- df$X2[df$PROVINSI == i & df$TAHUN == t-1]
      x2_i1t1 <- df$X2[df$PROVINSI == i-1 & df$TAHUN == t-1]
      df$dX2[df$PROVINSI == i & df$TAHUN == t] <- x2_it - x2_i1t - x2_it1 + x2_i1t
      
      x3_it <- df$X3[df$PROVINSI == i & df$TAHUN == t]
      x3_i1t <- df$X3[df$PROVINSI == i-1 & df$TAHUN == t]
      x3_it1 <- df$X3[df$PROVINSI == i & df$TAHUN == t-1]
      x3_i1t1 <- df$X3[df$PROVINSI == i-1 & df$TAHUN == t-1]
      df$dX3[df$PROVINSI == i & df$TAHUN == t] <- x3_it - x3_i1t - x3_it1 + x3_i1t
      
      x4_it <- df$X4[df$PROVINSI == i & df$TAHUN == t]
      x4_i1t <- df$X4[df$PROVINSI == i-1 & df$TAHUN == t]
      x4_it1 <- df$X4[df$PROVINSI == i & df$TAHUN == t-1]
      x4_i1t1 <- df$X4[df$PROVINSI == i-1 & df$TAHUN == t-1]
      df$dX4[df$PROVINSI == i & df$TAHUN == t] <- x4_it - x4_i1t - x4_it1 + x4_i1t
    }
  }
  return(df)
}
datapanel <- kemis
colnames(datapanel)[3:7] <- c("Y","X1","X2","X3","X4")
datapanel_transform <- transform_data(datapanel)
datapanel_transform$PROVINSI <- as.character(datapanel$PROVINSI)
datapanel_transform$PROVINSI <- as.factor(datapanel_transform$PROVINSI)
datapanel_transform$TAHUN <- as.factor(datapanel_transform$TAHUN)
datapanel_transform <- datapanel_transform[-c(3:7)]

Sehingga dihasilkan data baru:

datapanel_transform

Merupakan hasil transformasi dengan metode first difference. Dapat dilihat juga:

datapanel_transform[is.na(datapanel_transform$dY),]

Terlihat bahwa untuk setiap provinsi pada tahun 2008, dihasilkan missing value yang disebabkan oleh proses differencing. Selain itu, Individu (Provinsi) Aceh juga menghasilkan missing value untuk semua tahunnya, hal ini karena provinsi Aceh dijadikan sebagai referensi untuk proses differencing.

Selanjutnya, kita lakukan analisis FEM Two ways pada data yang telah ditransformasi

fem_fd <- plm(dY ~ dX1 + dX2 + dX3 + dX4, datapanel_transform,  effect = "twoways",
              model = "within", index = c("PROVINSI","TAHUN"))

summary(fem_fd)
## Twoways effects Within Model
## 
## Call:
## plm(formula = dY ~ dX1 + dX2 + dX3 + dX4, data = datapanel_transform, 
##     effect = "twoways", model = "within", index = c("PROVINSI", 
##         "TAHUN"))
## 
## Balanced Panel: n = 31, T = 12, N = 372
## 
## Residuals:
##       Min.    1st Qu.     Median    3rd Qu.       Max. 
## -3.3121975 -0.3403635  0.0093208  0.3378036  3.8711121 
## 
## Coefficients:
##        Estimate  Std. Error t-value Pr(>|t|)
## dX1 -2.4022e-08  1.0283e-07 -0.2336   0.8154
## dX2  2.0223e-02  1.7955e-02  1.1263   0.2609
## dX3 -1.4416e-02  2.4369e-02 -0.5916   0.5546
## dX4 -7.1072e-02  6.0126e-02 -1.1820   0.2380
## 
## Total Sum of Squares:    244.66
## Residual Sum of Squares: 242.27
## R-Squared:      0.0097933
## Adj. R-Squared: -0.12689
## F-statistic: 0.806049 on 4 and 326 DF, p-value: 0.522

Uji Diagnostik Sisaan ulang

Uji Normalitas

res2 <- residuals(fem_fd)
jarque.bera.test(res2)
## 
##  Jarque Bera Test
## 
## data:  res2
## X-squared = 498.3, df = 2, p-value < 2.2e-16
# Histogram 
ggplot(as.data.frame(res2), aes(x = res2)) +
  geom_histogram(aes(y = after_stat(density)), color = "white", fill = "steelblue") +
  geom_density(color = "red", linewidth = 1) +
  theme_minimal()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Uji Autokorelasi

pbgtest(fem_fd)
## 
##  Breusch-Godfrey/Wooldridge test for serial correlation in panel models
## 
## data:  dY ~ dX1 + dX2 + dX3 + dX4
## chisq = 83.889, df = 12, p-value = 7.439e-13
## alternative hypothesis: serial correlation in idiosyncratic errors

Uji Kehomogenan

bptest(fem_fd)
## 
##  studentized Breusch-Pagan test
## 
## data:  fem_fd
## BP = 7.0383, df = 4, p-value = 0.1339

Dari hasil di atas, dapat terlihat bahwa p-value dari uji bptest > 0.05 yang mengindikasikan bahwa asumsi kehomogenan telah terpenuhi dari yang sebelumnya tidak. Artinya, transformasi ini berhasil mengatasi heterogenitas pada sisaan.

Namun, perlu diperhatikan juga bahwa pada model setelah transformasi, tidak ada parameter yang signifikan dengan nilai p-value uji F sebesar 0.522 > 0.05 yang berarti model tidak layak. Selain itu, nilai R^2-nya sangat kecil yaitu sebesar 0.0097933. Artinya, dapat dikatakan bahwa model sebelum transformasi lebih baik dengan asumsi homogen yang tidak terpenuhi.

Salah satu solusi untuk masalah ini adalah untuk menggunakan transformasi lain. Jika model yang didapat oleh transformasi lain tidak lebih baik, maka solusi alternatifnya adalah dengan menggunakan analisis non-parametrik yang tidak memerlukan asumsi.

LS0tDQp0aXRsZTogIkFuYWxpc2lzIEFuZ2thIEtlbWlza2luYW4gTWVuZ2d1bmFrYW4gUmVncmVzaSBEYXRhIFBhbmVsIg0KYXV0aG9yOiAiS2Vsb21wb2sgMSINCmRhdGU6ICIyMDIzLTAzLTA2Ig0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpkb3duY3V0ZToNCiAgICBkb3duY3V0ZV90aGVtZTogImNoYW9zIg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMw0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIHRoZW1lOiBjZXJ1bGVhbg0KICAgIGhpZ2hsaWdodDogImthdGUiDQotLS0NCg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPg0KDQoqKkFuZ2dvdGEgS2Vsb21wb2sgMSoqDQoNCjwvcD4NCg0KLSAgIEcxNDAxMjAxMDA0IEFsZmlkaGlhIFJhaG1hbiBOYXNhIEp1aGFuZGENCi0gICBHMTQwMTIwMTA1MCBIYW51bmcgU2Fmcml6YWwNCi0gICBHMTQwMTIwMTA2NCBNdWhhbW1hZCBJcnN5YWQgUm9iYmFuaQ0KLSAgIEcxNDAxMjAxMDgxIFpha2l5YWggQXp6YWhyYQ0KLSAgIEcxNDAxMjAxMDkyIE11aGFtbWFkIFpoaWxsYW4gWmFraXl5YW4NCg0KYGBge3Igd2FybmluZz1GLCBtZXNzYWdlPUZ9DQpsYXBwbHkoYygia2FibGVFeHRyYSIsInRpZHl2ZXJzZSIsInBsbSIsInRpbnl0ZXgiLCJ0c2VyaWVzIiwibG10ZXN0IiwgDQogICAgICAgICAiYnJvb20iLCAic3RhcmdhemVyIiwgIlJDb2xvckJyZXdlciIpLCBsaWJyYXJ5LCBjaGFyYWN0ZXIub25seSA9IFQpW1sxXV0NCmBgYA0KDQojIERhdGENCg0KRGF0YSB5YW5nIGRpZ3VuYWthbiBhZGFsYWggZGF0YSBUaW5na2F0IEtlbWlza2luYW4gRGVuZ2FuIDQgUGV1YmFoIGJlYmFzIHlhbmcgZGliZXJpa2FuIHNhYXQgcmVzcG9uc2kuIERhdGEgaW5pIGJlcmplbmlzIGRhdGEgcGFuZWwgZGVuZ2FuIGluZGl2aWR1bnlhIGFkYWxhaCAzMiBQcm92aW5zaSBkaSBJbmRvbmVzaWEgKDM0IFByb3ZpbnNpIGtlY3VhbGkgUHJvdmluc2kgREtJIEpha2FydGEgZGFuIEthbGltYW50YW4gVXRhcmEpIHNlbGFtYSAxMyB0YWh1biAoVGFodW4gMjAwOC0yMDIwKSBkZW5nYW4gcGV1YmFoLXBldWJhaCBzZWJhZ2FpIGJlcmlrdXQ6DQoNCi0gICBLTUlTIDogS2VtaXNraW5hbiAoJSkgKFBldWJhaCBSZXNwb25zKQ0KDQotICAgSU5GUiA6IEluZnJhc3RydWt1ciAoSnV0YSkNCg0KLSAgIFBFS08gOiBQZXJ0dW1idWhhbiBFa29ub21pICglKQ0KDQotICAgSU5GTCA6IEluZmxhc2kgKCUpDQoNCi0gICBQR0dSIDogUGVuZ2FuZ2d1cmFuICglKQ0KDQpVbnR1ayBsZWJpaCBqZWxhc255YSwgZGFwYXQgZGlsaWhhdCBkYXJpIG91dHB1dCBiZXJpa3V0Og0KDQpgYGB7ciwgZWNobyA9IEZBTFNFfQ0Ka2VtaXMgPC0gcmVhZHhsOjpyZWFkX2V4Y2VsKCJEYXRhLnhsc3giKQ0Ka2VtaXMkUFJPVklOU0kgPC0gYXMuZmFjdG9yKGtlbWlzJFBST1ZJTlNJKQ0Ka2VtaXMkVEFIVU4gPC0gYXMuZmFjdG9yKGtlbWlzJFRBSFVOKQ0Kc3RyKGtlbWlzKQ0KYGBgDQoNCkRhcGF0IHRlcmxpaGF0IGJhaHdhIHRlcmRhcGF0IDQxNiB0b3RhbCBvYnNlcnZhc2ksIHlhaXR1IDMyIGluZGl2aWR1IGRlbmdhbiBwZXJpb2RlIDEzIHRhaHVuLiBTZW11YSBwZXViYWggYmVyamVuaXMgbnVtZXJpayBrb250aW51LiBCZXJpa3V0IGFkYWxhaCAxMyBvYnNlcnZhc2kgdGVyYXRhcyBkYXJpIGRhdGEgeWFuZyBkaWd1bmFrYW4geWFuZyBtZW51bmp1a2FuIHNlbXVhIG9ic2VydmFzaSB5YW5nIHRlcmRhcGF0IGRpIFByb3ZpbnNpIEJhbGk6DQoNCmBgYHtyfQ0Ka2VtaXMgJT4lIGhlYWQoMTMpDQpgYGANCg0KIyBNZXRvZG9sb2dpDQoNCk1ldG9kb2xvZ2kgeWFuZyBkaWd1bmFrYW4gYWRhbGFoIHNlYmFnYWkgYmVyaWt1dDoNCg0KMS4gIEVrc3Bsb3Jhc2kgRGF0YQ0KDQoyLiAgTWVuZHVnYSBwYXJhbWV0ZXIgbW9kZWwgQ0VNDQoNCjMuICBNZW5kdWdhIHBhcmFtZXRlciBtb2RlbCBGRU0NCg0KNC4gIE1lbGFrdWthbiBVamkgQ2hvdw0KDQo1LiAgTWVuZHVnYSBQYXJhbWV0ZXIgbW9kZWwgUkVNDQoNCjYuICBNZWxha3VrYW4gVWppIEhhdXNtYW4NCg0KNy4gIFBlbmd1amlhbiBhc3Vtc2kgdGVyaGFkYXAgTW9kZWwgdGVycGlsaWgNCg0KOC4gIEppa2EgYXN1bXNpIHRpZGFrIHRlcnBlbnVoaSwgYWthbiBkaWxha3VrYW4gcGVuYW5nYW5hbiBhc3Vtc2kNCg0KOS4gIEludGVycHJldGFzaSBtb2RlbCB0ZXJiYWlrDQoNCkJlcmlrdXQgYWRhbGFoIGRhcmkgbWV0b2RlIHBlbmVsaXRpYW4geWFuZyBkaWd1bmFrYW46DQoNCiFbXShpbWFnZXMvU2NyZWVuc2hvdCUyMDIwMjMtMDQtMDIlMjAxNzMxMjEucG5nKQ0KDQojIEVrc3Bsb3Jhc2kgRGF0YQ0KDQojIyBQbG90DQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGE9a2VtaXMsIGFlcyh4PVRBSFVOLCB5PUtNSVMsIGdyb3VwID0gUFJPVklOU0ksIGNvbG91ciA9IFBST1ZJTlNJKSkrIHRoZW1lX2J3KCkrDQogIGdlb21fbGluZShzaXplPTEuMikgKw0KICBnZW9tX3BvaW50KCBzaXplPTMsIHNoYXBlPTE5LCBmaWxsPSJyZWQiKSArIA0KICBsYWJzKGNvbG91cj0iUHJvdmluc2kiLCB0aXRsZSA9ICJUaW5na2F0IEtlbWlza2luYW4gZGkgSW5kb25lc2lhIiwgc3VidGl0bGUgPSAiVGFodW4gMjAwOC0yMDIwIikgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LGZhY2UgPSAiYm9sZCIpLCBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCmBgYA0KDQo+ICoqSW50ZXJwcmV0YXNpOiANCkxpbmUgY2hhcnQgZGkgYXRhcyBtZW5hbXBpbGthbiBzZWJhcmFuIHRpbmdrYXQga2VtaXNraW5hbiBwZXIgcHJvdmluc2kgZGkgSW5kb25lc2lhIGRhcmkgdGFodW4gMjAwOCBzYW1wYWkgMjAyMCwgZGFwYXQgZGlsaWhhdCBiYWh3YSBQYXB1YSBCYXJhdCBtZW1pbGlraSB0aW5na2F0IGtlbWlza2luYW4gcGFsaW5nIHRpbmdnaSwga2VtdWRpYW4gUHJvdmluc2kgeWFuZyBtZW1pbGlraSB0aW5na2F0IGtlbWlza2luYW4geWFuZyB0aW5nZ2kgYWRhbGFoIE1hbHVrdSBkYW4gUGFwdWEgeWFuZyBtYW5hIGtldGlnYSBQcm92aW5zaSB0ZXJzZWJ1dCBtZXJ1cGFrYW4gZGFlcmFoIGJhZ2lhbiB0aW11ciBJbmRvbmVzaWEuIEhhbCBpbmkgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHRlcmRhcGF0IHBlcmJlZGFhbiB1bnR1ayBzZXRpYXAgaW5kaXZpZHUqKg0KDQojIyBNYXAgQ2hhcnQNCg0KTWFwIGRpIGJhd2FoIGluaSBkaWJ1YXQgcGFkYSBBcGxpa2FzaSBbVGFibGVhdSBQdWJsaWNdKGh0dHBzOi8vcHVibGljLnRhYmxlYXUuY29tL2FwcC9wcm9maWxlL2FsZmlkaGlhLnJhaG1hbi5uYXNhLmp1aGFuZGEvdml6L1JhdGEtcmF0YUtlbWlza2luYW5kaUluZG9uZXNpYS9EYXNoYm9hcmQxKSwgbWVydXBha2FuIHNlYmFyYW4gcmF0YS1yYXRhIGtlbWlza2luYW4gZGkgSW5kb25lc2lhIHBhZGEgc2VsYW1hIHRhaHVuIDIwMDggaGluZ2dhIDIwMjAuDQoNCiFbXShEYXNoYm9hcmQlMjAxLnBuZykNCg0KPiAqKkludGVycHJldGFzaToNClNlYmFyYW4gcmF0YS1yYXRhIGtlbWlza2luYW4gZGkgSW5kb25lc2lhIHlhbmcgZGl0YW1waWxrYW4gcGFkYSBtYXAgY2hhcnQgZGkgYXRhcyBtZW51bmp1a2thbiBiYWh3YSBzZW1ha2luIHBla2F0IHdhcm5hIG1lcmFoIGRhZXJhaCB0ZXJzZWJ1dCBtYWthIHNlbWFraW4gdGluZ2dpIHRpbmdrYXQga2VtaXNraW5hbiBkaSBwcm92aW5zaSB0ZXJzZWJ1dCBkYW4gc2VtYWtpbiBwZWthdCB3YXJuYSBoaWphdSBkYWVyYWggdGVyc2VidXQgbWFrYSBzZW1ha2luIHJlbmRhaCB0aW5na2F0IGtlbWlza2luYW4gZGkgZGFlcmFoIHRlcnNlYnV0LiBXaWxheWFoIEluZG9uZXNpYSBiYWdpYW4gdGltdXIgZGkgZG9taW5hc2kgb2xlaCB3YXJuYSBtZXJhaCB5YW5nIGFydGlueWEgbWFzaWggYmFueWFrIGRhZXJhaCBkaSBiYWdpYW4gdGltdXIgSW5kb25lc2lhIHlhbmcgbWVtaWxpa2kgdGluZ2thdCBrZW1pc2tpbmFuIHRpbmdnaSwgZGFwYXQgZGlsaWhhdCBqdWdhIHNlbXVhIHByb3ZpbnNpIHlhbmcgdGVyZGFwYXQgcGFkYSBQdWxhdSBLYWxpbWFudGFuLCBQdWxhdSBKYXdhIGRhbiBCYWxpIG1lbWlsaWtpIHRpbmdrYXQga2VtaXNraW5hbiB5YW5nIHJlbmRhaC4gSGFsIGluaSBqdWdhIG1lbmdpbmRpa2FzaWthbiBiYWh3YSB0ZXJkYXBhdCBwZXJiZWRhYW4gdW50dWsgc2V0aWFwIGluZGl2aWR1LioqDQoNCiMgQ29tbW9uLUVmZmVjdCBNb2RlbA0KDQpDb21tb24gRWZmZWN0IE1vZGVsIChDRU0pIGF0YXUgZGlzZWJ1dCBqdWdhICpwb29sZWQgcmVncmVzc2lvbiBtb2RlbCogbWVydXBha2FuIHNhbGFoIHNhdHUgbW9kZWwgZGFsYW0gcmVncmVzaSBkYXRhIHBhbmVsIHlhbmcgbWVuZ2tvbWJpbmFzaWthbiBkYXRhICpjcm9zcy1zZWN0aW9uKiBkYW4gKnRpbWUgc2VyaWVzKiBtZW5qYWRpIHNhdHUga2VzYXR1YW4gKHBvb2xkYXRhKSB5YW5nIGtlbXVkaWFuIGRpZXN0aW1hc2kgbW9kZWxueWEgZGVuZ2FuIHRla25payBPTFMuIEFraWJhdG55YSwgcGVyYmVkYWFuIGJhaWsgYW50YXIgaW5kaXZpZHUgbWF1cHVuIGFudGFyIHdha3R1IHRpZGFrIGRhcGF0IGRpYW1hdGkuIERlbmdhbiBrYXRhIGxhaW4sIGRhbGFtIHBlbmRla2F0YW4gaW5pIGRpbWVuc2kgaW5kaXZpZHUgbWF1cHVuIHdha3R1IHRpZGFrIGRpcGVyaGF0aWthbi4gRGlhc3Vtc2lrYW4gYmFod2EgcGVyaWxha3UgZGF0YSBhbnRhciBJbmRpdmlkdSBzYW1hIGRhbGFtIGJlcmJhZ2FpIGt1cnVuIHdha3R1LiBQZXJzYW1hYW4gcG9vbCBtb2RlbCBkYXBhdCBkaXR1bGlza2FuIHNlYmFnYWkgYmVyaWt1dDoNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KeV97aXR9ICY9IFxhbHBoYSArIFxiZXRhX3sxfXhfezEsaXR9KyBcYmV0YV97Mn14X3syLGl0fSsuLi4rXGJldGFfe2t9eF97ayxpdH0rXHZhcmVwc2lsb25fe2l0fSBcXA0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KZGVuZ2FuICR5X3tpan0kIG1lcnVwYWthbiB2YXJpYWJlbCBkZXBlbmRlbiBpbmRpdmlkdSBrZS1pIGRhbiB3YWt0dSBrZS1qLiAkXGFscGhhJCBhZGFsYWggaW50ZXJzZXAsICR4X3twLGlqfSQgYWRhbGFoIHZhcmlhYmVsIGluZGVwZW5kZW4ga2UtcCBpbmRpdmlkdSBrZS1pIGRhbiB3YWt0dSBrZS1qLCAkXGJldGFfayQga29lZmlzaWVuIHZhcmlhYmVsIGJlYmFzLCBkYW4gJFx2YXJlcHNpbG9uX3tpan0kIG1lcnVwYWthbiBnYWxhdCBpbmRpdmlkdSBrZS1pIGRhbiB3YWt0dSBrZS1qLg0KDQpTZWxhaW4gYXN1bXNpIGtlc2FtYWFuIHBlbmdhcnVoIGluZGl2aWR1IGRhbiB3YWt0dSwgYXN1bXNpIGxhaW4geWFuZyBkaXBlcmx1a2FuIHBhZGEgbW9kZWwgaW5pIGFkYWxhaCBhc3Vtc2kgbm9ybWFsaXRhcywgaG9tb2dlbml0YXMsIGRhbiBrZWJlYmFzYW4gZ2FsYXQuDQoNCiMjIE1vZGVsIENFTQ0KDQpQcm9ncmFtIFIgbWVueWVkaWFrYW4gcGFja2FnZSBgcGxtYCB5YW5nIGRhcGF0IG1lbW9kZWxrYW4gZGF0YSBtZW5qYWRpIG1vZGVsIENFTS4NCg0KRGFsYW0gcGVtb2RlbGFuIGluaSwgZGFwYXQgZGlidWF0IGhpcG90ZXNpczoNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KSF8wICY6IFx0ZXh0e0NFTSBhZGFsYWggbW9kZWwgeWFuZyB0aWRhayBsYXlha31cXA0KSF8xICY6IFx0ZXh0e0NFTSBhZGFsYWggbW9kZWwgeWFuZyBsYXlha30NClxlbmR7YWxpZ25lZH0NCiQkDQoNCmBgYHtyfQ0KbGlicmFyeShwbG0pDQpjZW0gPC0gcGxtKEtNSVMgfiBJTkZSQSArIFBFS08gKyBJTkZMICsgUEdHUiwgZGF0YSA9IGtlbWlzLCBtb2RlbCA9ICJwb29saW5nIikNCnN1bW1hcnkoY2VtKQ0KYGBgDQoNClBhZGEgZGFzYXJueWEsIHBlbmR1Z2FhbiBtb2RlbCB5YW5nIGRpbGFrdWthbiBvbGVoIG1ldG9kZSBDRU0gbWVuZ2hhc2lsa2FuIG1vZGVsIHlhbmcgc2FtYSBwZXJzaXMgZGVuZ2FuIG1ldG9kZSBSZWdyZXNpIExpbmVhciBCZXJnYW5kYSBkZW5nYW4gbWVtYW5kYW5nIHNldGlhcCBiYXJpcyBwYWRhIGRhdGEgYWRhbGFoIGluZGl2aWR1IHlhbmcgYmVyYmVkYS1iZWRhLiBNb2RlbCByZWdyZXNpIHlhbmcgZGloYXNpbGthbiBhZGFsYWggc2ViYWdhaSBiZXJpa3V0Og0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpLTUlTX3tpdH0gJj0gNi42NyArIDEuMDM0NygxMF57LTZ9KUlORlJBX3tpdH0rMC41UEVLT197aXR9LTAuMzFJTkZMX3tpdH0rMC4wNDlQR0dSX3tpdH0rXHZhcmVwc2lsb25fe2l0fSBcXA0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KKipJbnRlcnByZXRhc2k6KioNCg0KLSBTZXRpYXAga2VuYWlrYW4gc2F0dSBzYXR1YW4gYEluZnJhc3RydWt0dXJgIG1lbnllYmFia2FuIGBUaW5na2F0IEtlbWlza2luYW5gIG1lbmluZ2thdCBzZWJlc2FyIGAxLjAzNDd4MTBeLTZgIHBlcnNlbiBkZW5nYW4gbWVuZ2FuZ2dhcCBwZXViYWggbGFpbiBrb25zdGFuLg0KDQotIFNldGlhcCBrZW5haWthbiBzYXR1IHNhdHVhbiBgUGVydHVtYnVoYW4gRWtvbm9taWAgbWVueWViYWJrYW4gYFRpbmdrYXQgS2VtaXNraW5hbmAgbWVuaW5na2F0IHNlYmVzYXIgYDAuNWAgcGVyc2VuIGRlbmdhbiBtZW5nYW5nZ2FwIHBldWJhaCBsYWluIGtvbnN0YW4uDQoNCi0gU2V0aWFwIGtlbmFpa2FuIHNhdHUgc2F0dWFuIGBJbmZsYXNpYG1lbnllYmFia2FuIGBUaW5na2F0IEtlbWlza2luYW5gIG1lbnVydW4gc2ViZXNhciBgMC4zMWAgcGVyc2VuIGRlbmdhbiBtZW5nYW5nZ2FwIHBldWJhaCBsYWluIGtvbnN0YW4uDQoNCi0gU2V0aWFwIGtlbmFpa2FuIHNhdHUgc2F0dWFuIGBQZW5nYW5nZ3VyYW5gIG1lbnllYmFia2FuIGBUaW5na2F0IEtlbWlza2luYW5gIG1lbmluZ2thdCBzZWJlc2FyIGAwLjA0OWAgcGVyc2VuIGRlbmdhbiBtZW5nYW5nZ2FwIHBldWJhaCBsYWluIGtvbnN0YW4uDQoNClVudHVrIHNlbXVhIHAtdmFsdWUgZGkgYmF3YWggNSUsIG1ha2EgdGVyZGFwYXQgY3VrdXAgYnVrdGkgdW50dWsgbWVub2xhayAkSF8wJCAoa3VyYW5nIGRhcmkgNSUga2VtdW5na2luYW4gYmFod2EgJEhfMCQgYmVuYXIpLg0KDQotICAgcC12YWx1ZSB1amktRiA8IDIuMjJlLTE2IDw8IDUlLiBBcnRpbnlhLCBkYXBhdCBkaWthdGFrYW4gYmFod2EgbW9kZWwgbGF5YWsgdW50dWsgZGlndW5ha2FuLg0KDQotICAgcC12YWx1ZSB1amktVCB1bnR1ayBwZXViYWggYElORlJBYCwgYFBFS09gLCBkYW4gYElORkxgIDwgNSUuIEFydGlueWEsIGRhcGF0IGRpa2F0YWthbiBiYWh3YSBwZXViYWggdGVyc2VidXQgYmVycGVuZ2FydWggc2lnbmlmaWthbiB0ZXJoYWRhcCBtb2RlbC4NCg0KJFJeMiQgbWVydXBha2FuIG5pbGFpIHlhbmcgbWVudW5qdWthbiBrZWt1YXRhbiBodWJ1bmdhbiBhbnRhcmEgcGV1YmFoIGJlYmFzIGRhbiBwZXViYWggcmVzcG9ucy4gU2VtYWtpbiB0aW5nZ2kgbmlsYWkgJFJeMiQsIG1ha2Egc2VtYWtpbiBiYWlrIG1vZGVsIHRlcnNlYnV0Lg0KDQotICAgJFJeMiQgcGFkYSBtb2RlbCBzZWJlc2FyIDAuMTI2NDUgYXRhdSAxMi42NDUlIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHBldWJhaCB5YW5nIGRpZ3VuYWthbiBrdXJhbmcgYmFpayBkYWxhbSBtZW5nZ2FtYmFya2FuIG1vZGVsLg0KDQpNZXNraXB1biBzZWJhZ2lhbiBiZXNhciBwYXJhbWV0ZXIgbW9kZWwgc2lnbmlmaWthbiwgdGV0YXBpIG5pbGFpIFIyIG1vZGVsIGt1cmFuZyBiYWlrIGRhbiBmYWt0YSBiYWh3YSBtb2RlbCBDRU0gbWVuZ2FiYWlrYW4gcGVuZ2FydWggaW5kaXZpZHUgZGFuIHdha3R1IHRpZGFrIGJpc2EgZGlhYmFpa2FuLiBLZWR1YSBmYWt0b3IgdGVyc2VidXQgYmlzYSBiZXJwZW5nYXJ1aCB0ZXJoYWRhcCBrZWhldGVyb2dlbmFuIHNpc2FhbiBwYWRhIG1vZGVsLiBPbGVoIGthcmVuYSBpdHUsIHBlcmx1IGRpbGFrdWthbiBwZXJiYW5kaW5nYW4gbW9kZWwgQ0VNIGRlbmdhbiBGRU0gZGFuIFJFTSB1bnR1ayBtZW1hc3Rpa2FuIG1vZGVsIHRlcmJhaWsuDQoNCiMgRml4ZWQtRWZmZWN0IE1vZGVsDQoNCkZpeGVkLUVmZmVjdCBtb2RlbCBtZXJ1cGFrYW4gc2FsYWggc2F0dSBqZW5pcyBtb2RlbCBkYWxhbSByZWdyZXNpIGRhdGEgcGFuZWwgeWFuZyBtZW1wZXJ0aW1iYW5na2FuIGFkYW55YSBwZW5nYXJ1aCBpbmRpdmlkdSBkYW4gd2FrdHUuIFRlcmRhcGF0IGFzdW1zaSBiYWh3YSBpbnRlcnNlcCBhbnRhciBpbmRpdmlkdSBkYW4gd2FrdHUgYmVyYmVkYSB0ZXRhcGkga29lZmlzaWVuIHJlZ3Jlc2kga29uc3RhbiB1bnR1ayBzZW11YSBpbmRpdmlkdSBkYW4gd2FrdHUuIE1vZGVsIHlhbmcgbWVtaWxpa2kgcGVuZ2FydWggZGFyaSBzYWxhaCBzYXR1IGRhcmkgaW5kaXZpZHUgYXRhdSB3YWt0dSBkaXNlYnV0IG1vZGVsIHNpc2FhbiBzYXR1IGFyYWggZGFuIG1vZGVsIHlhbmcgbWVtaWxpa2kgcGVuZ2FydWggZGFyaSBrZWR1YW55YSBkaXNlYnV0IG1vZGVsIHNpc2FhbiBkdWEgYXJhaC4gUGVuZHVnYWFuIHBhZGEgbW9kZWwgaW5pIGJpYXNhIGRpbGFrdWthbiBkZW5nYW4gbW9kZWwgKldpdGhpbiogYXRhdSAqTGVhc3QgU3F1YXJlIER1bW15IFZhcmlhYmxlKiAoTFNEVikuIA0KDQojIyBXaXRoaW4gdnMgTFNEViAoPykNCg0KUGVybHUgZGlwZXJoYXRpa2FuIGJhaHdhIG1vZGVsICp3aXRoaW4qIGFrYW4gbWVuZ2hhc2lsa2FuIG91dHB1dCB5YW5nIHNhbWEgc2VwZXJ0aSBtb2RlbCBMU0RWIHRhbnBhIHJlZmVyZW5zaSBhdGF1IHRhbnBhIGludGVyc2VwLiBQZW1idWt0aWFubnlhIGRhcGF0IGRpbGloYXQgZGkgYmF3YWggaW5pOg0KDQpgYGB7cn0NCmZlbV93aXRoaW4gPC0gcGxtKEtNSVMgfiBJTkZSQSArIFBFS08gKyBJTkZMICsgUEdHUiwgaW5kZXggPSBjKCJQUk9WSU5TSSIsICJUQUhVTiIpLCANCiAgICAgICAgICAgICAgICAgIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdD0gImluZGl2aWR1YWwiLCBkYXRhID0ga2VtaXMpDQpmZW1fbHNkdl90YW5wYV9yZWZlcmVuc2kgPC0gbG0oS01JUyB+IElORlJBICsgUEVLTyArIElORkwgKyBQR0dSICsgUFJPVklOU0kgLSAxLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0ga2VtaXMpDQpmZW1fd2l0aGluJGNvZWZmaWNpZW50czsgZmVtX2xzZHZfdGFucGFfcmVmZXJlbnNpJGNvZWZmaWNpZW50c1sxOjRdDQpgYGANCkRhcGF0IHRlcmxpaGF0IGJhaHdhIHBlbmdhcnVoIHNldGlhcCBwZXViYWggYWRhbGFoIHNhbWEuIEJlZ2l0dSBwdW4gZGVuZ2FuIHBlbmdhcnVoIHNldGlhcCBpbmRpdmlkdW55YToNCg0KYGBge3J9DQphcy5kYXRhLmZyYW1lKGNiaW5kKFdpdGhpbj1maXhlZihmZW1fd2l0aGluLCBlZmZlY3QgPSAiaW5kaXZpZHVhbCIpLCANCiAgICAgICAgICAgICAgICAgICAgTFNEVj0gZmVtX2xzZHZfdGFucGFfcmVmZXJlbnNpJGNvZWZmaWNpZW50c1s1OjM2XSkpDQpgYGANCg0KT2xlaCBrYXJlbmEgaXR1LCBraXRhIGhhbnlhIGFrYW4gKiptZW5nZ3VuYWthbiBzYXR1IG1ldG9kZSwgeWFpdHUgbW9kZWwgd2l0aGluKiouDQoNCiMjIFBlcnNhbWFhbiBNb2RlbCBGRU0NCg0KUGVyc2FtYWFuIG1vZGVsIEZpeGVkLUVmZmVjdCA6DQoNCi0gICBQZW5nYXJ1aCBJbmRpdmlkdQ0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQp5X3tpdH0gPSBcYWxwaGEgKyBmX2kgK1xiZXRhXzF4X3sxLGl0fSArIFxiZXRhXzJ4X3syLGl0fSArIC4uLiArIFxiZXRhX2t4X3trLGl0fSArIFx2YXJlcHNpbG9uX3tpdH0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCi0gICBQZW5nYXJ1aCBXYWt0dQ0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQp5X3tpdH0gPSBcYWxwaGEgKyBcbGFtYmRhX3QgK1xiZXRhXzF4X3sxLGl0fSArIFxiZXRhXzJ4X3syLGl0fSArIC4uLiArIFxiZXRhX2t4X3trLGl0fSArIFx2YXJlcHNpbG9uX3tpdH0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCi0gICBNb2RlbCBEdWEgYXJhaCAocGVuZ2FydWggaW5kaXZpZHUgZGFuIHdha3R1KQ0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQp5X3tpdH0gPSBcYWxwaGEgKyBmX2kgKyBcbGFtYmRhX3QgK1xiZXRhXzF4X3sxLGl0fSArIFxiZXRhXzJ4X3syLGl0fSArIC4uLiArIFxiZXRhX2t4X3trLGl0fSArIFx2YXJlcHNpbG9uX3tpdH0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiMjIEZFTSBJTkRJVklEVUFMDQoNCkVmZWsga29tcG9uZW4gc2lzYWFhbiBzYXR1IGFyYWggcGFkYSBpbmRpdmlkdS4NCg0KYGBge3J9DQpmZW0gPC0gcGxtKEtNSVMgfiBJTkZSQSArIFBFS08gKyBJTkZMICsgUEdHUiwgaW5kZXggPSBjKCJQUk9WSU5TSSIsICJUQUhVTiIpLA0KICAgICAgICAgICBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3Q9ICJpbmRpdmlkdWFsIiwgZGF0YSA9IGtlbWlzKQ0Kc3VtbWFyeShmZW0pDQpgYGANCkRpZGFwYXQgbW9kZWwgc2ViYWdhaSBiZXJpa3V0Og0KDQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NCktNSVNfe2l0fSAmPSBmX2ktNi45MzY0KDEwXnstN30pSU5GUkFfe2l0fSswLjE4MjlQRUtPX3tpdH0tMC4xNzQ0MUlORkxfe2l0fSswLjY1NzlQR0dSX3tpdH0rXHZhcmVwc2lsb25fe2l0fSBcXA0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KSW50ZXJwcmV0YXNpIDoNCg0KLSBTZXRpYXAga2VuYWlrYW4gc2F0dSBzYXR1YW4gYEluZnJhc3RydWt0dXJgIG1lbnllYmFia2FuIGBUaW5na2F0IEtlbWlza2luYW5gIG1lbnVydW4gc2ViZXNhciBgNi45MzY0eDEwXi03YCBwZXJzZW4gZGVuZ2FuIG1lbmdhbmdnYXAgcGV1YmFoIGxhaW4ga29uc3Rhbi4NCg0KLSBTZXRpYXAga2VuYWlrYW4gc2F0dSBzYXR1YW4gYFBlcnR1bWJ1aGFuIEVrb25vbWlgIG1lbnllYmFia2FuIGBUaW5na2F0IEtlbWlza2luYW5gIG1lbmluZ2thdCBzZWJlc2FyIGAwLjE4MjlgIHBlcnNlbiBkZW5nYW4gbWVuZ2FuZ2dhcCBwZXViYWggbGFpbiBrb25zdGFuLg0KDQotIFNldGlhcCBrZW5haWthbiBzYXR1IHNhdHVhbiBgSW5mbGFzaWBtZW55ZWJhYmthbiBgVGluZ2thdCBLZW1pc2tpbmFuYCBtZW51cnVuIHNlYmVzYXIgYDAuMTc0NGAgcGVyc2VuIGRlbmdhbiBtZW5nYW5nZ2FwIHBldWJhaCBsYWluIGtvbnN0YW4uDQoNCi0gU2V0aWFwIGtlbmFpa2FuIHNhdHUgc2F0dWFuIGBQZW5nYW5nZ3VyYW5gIG1lbnllYmFia2FuIGBUaW5na2F0IEtlbWlza2luYW5gIG1lbmluZ2thdCBzZWJlc2FyIGAwLjY1NzlgIHBlcnNlbiBkZW5nYW4gbWVuZ2FuZ2dhcCBwZXViYWggbGFpbiBrb25zdGFuLg0KDQpVbnR1ayBzZW11YSBwLXZhbHVlIGRpIGJhd2FoIDUlLCBtYWthIHRlcmRhcGF0IGN1a3VwIGJ1a3RpIHVudHVrIG1lbm9sYWsgJEhfMCQgKGt1cmFuZyBkYXJpIDUlIGtlbXVuZ2tpbmFuIGJhaHdhICRIXzAkIGJlbmFyKS4NCg0KLSAgIE1vZGVsIG1lbWlsaWtpIGBwLXZhbHVlYCBwYWRhIHVqaSBGIHlhbmcgbGViaWgga2VjaWwgZGFyaSAwLjA1IChcPCAyLjIyZS0xNikgeWFuZyBiZXJhcnRpIG1vZGVsIGluaSBsYXlhayB1bnR1ayBkaWd1bmFrYW4NCi0gICBwLXZhbHVlIHVqaS1UIHVudHVrIHBldWJhaCBgSU5GUkFgLCBgUEVLT2AsIGRhbiBgSU5GTGAgPCA1JS4gQXJ0aW55YSwgZGFwYXQgZGlrYXRha2FuIGJhaHdhIHBldWJhaCB0ZXJzZWJ1dCBiZXJwZW5nYXJ1aCBzaWduaWZpa2FuIHRlcmhhZGFwIG1vZGVsLg0KDQokUl4yJCBtZXJ1cGFrYW4gbmlsYWkgeWFuZyBtZW51bmp1a2FuIGtla3VhdGFuIGh1YnVuZ2FuIGFudGFyYSBwZXViYWggYmViYXMgZGFuIHBldWJhaCByZXNwb25zLiBTZW1ha2luIHRpbmdnaSBuaWxhaSAkUl4yJCwgbWFrYSBzZW1ha2luIGJhaWsgbW9kZWwgdGVyc2VidXQuDQoNCi0gICAkUl4yJCBwYWRhIG1vZGVsIHNlYmVzYXIgIDAuNTA4ODEgYXRhdSA1MC44ODElIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHBldWJhaCB5YW5nIGRpZ3VuYWthbiBjdWt1cCBiYWlrIGRhbGFtIG1lbmdnYW1iYXJrYW4gbW9kZWwuDQoNCi0gICBNb2RlbCBkYXBhdCBtZW5qZWxhc2thbiBzZWJlc2FyIDQ2LjM1NiUgZGFyaSBrZXJhZ2FtYW4gZGF0YSB5YW5nIGRpbGloYXQgZGFyaSAkUl4yIEFkaiQuDQoNCiMjIyBOaWxhaSBJbnRlcnNlcCBkYXJpIHNldGlhcCBpbmRpdmlkdQ0KDQpgYGB7cn0NCnN1bW1hcnkoZml4ZWYoZmVtLCBlZmZlY3Q9ImluZGl2aWR1YWwiKSkNCmBgYA0KDQpOaWxhaSBkaWF0YXMgYWRhbGFoIG5pbGFpIHBlbmdhcnVoIGtvbnN0YW4gZGFyaSBtYXNpbmctbWFzaW5nIGluZGl2aWR1IHlhbmcgcGFkYSBtb2RlbCBkYXBhdCBkaXR1bGlza2FuIHNlYmFnYWkgJGZfaSQuDQoNCiMjIEZFTSBUSU1FDQoNCkVmZWsga29tcG9uZW4gc2lzYWFhbiBzYXR1IGFyYWggcGFkYSB3YWt0dS4NCg0KYGBge3J9DQpmZW1fdGltZSA8LSBwbG0oS01JUyB+IElORlJBICsgUEVLTyArIElORkwgKyBQR0dSLCBpbmRleCA9IGMoIlBST1ZJTlNJIiwgIlRBSFVOIiksDQogICAgICAgICAgICAgICAgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0PSAidGltZSIsIGRhdGEgPSBrZW1pcykNCnN1bW1hcnkoZmVtX3RpbWUpDQpgYGANCg0KRGlkYXBhdCBtb2RlbCBzZWJhZ2FpIGJlcmlrdXQ6DQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NCktNSVNfe2l0fSAmPSBcbGFtYmRhX3QrMS45ODkoMTBeey02fSlJTkZSQV97aXR9KzAuNTI1UEVLT197aXR9KzAuMDYzSU5GTF97aXR9LTAuMjU3UEdHUl97aXR9K1x2YXJlcHNpbG9uX3tpdH0gXFwNClxlbmR7YWxpZ25lZH0NCiQkDQoNCkludGVycHJldGFzaSA6DQoNCi0gU2V0aWFwIGtlbmFpa2FuIHNhdHUgc2F0dWFuIGBJbmZyYXN0cnVrdHVyYCBtZW55ZWJhYmthbiBgVGluZ2thdCBLZW1pc2tpbmFuYCBtZW5pbmdrYXQgc2ViZXNhciBgMS45ODl4MTBeLTZgIHBlcnNlbiBkZW5nYW4gbWVuZ2FuZ2dhcCBwZXViYWggbGFpbiBrb25zdGFuLg0KDQotIFNldGlhcCBrZW5haWthbiBzYXR1IHNhdHVhbiBgUGVydHVtYnVoYW4gRWtvbm9taWAgbWVueWViYWJrYW4gYFRpbmdrYXQgS2VtaXNraW5hbmAgbWVuaW5na2F0IHNlYmVzYXIgYDAuNTI1YCBwZXJzZW4gZGVuZ2FuIG1lbmdhbmdnYXAgcGV1YmFoIGxhaW4ga29uc3Rhbi4NCg0KLSBTZXRpYXAga2VuYWlrYW4gc2F0dSBzYXR1YW4gYEluZmxhc2lgbWVueWViYWJrYW4gYFRpbmdrYXQgS2VtaXNraW5hbmAgbWVuaW5na2F0IHNlYmVzYXIgYDAuMDYzYCBwZXJzZW4gZGVuZ2FuIG1lbmdhbmdnYXAgcGV1YmFoIGxhaW4ga29uc3Rhbi4NCg0KLSBTZXRpYXAga2VuYWlrYW4gc2F0dSBzYXR1YW4gYFBlbmdhbmdndXJhbmAgbWVueWViYWJrYW4gYFRpbmdrYXQgS2VtaXNraW5hbmAgbWVudXJ1biBzZWJlc2FyIGAwLjI1N2AgcGVyc2VuIGRlbmdhbiBtZW5nYW5nZ2FwIHBldWJhaCBsYWluIGtvbnN0YW4uDQoNClVudHVrIHNlbXVhIHAtdmFsdWUgZGkgYmF3YWggNSUsIG1ha2EgdGVyZGFwYXQgY3VrdXAgYnVrdGkgdW50dWsgbWVub2xhayAkSF8wJCAoa3VyYW5nIGRhcmkgNSUga2VtdW5na2luYW4gYmFod2EgJEhfMCQgYmVuYXIpLg0KDQotICAgTW9kZWwgbWVtaWxpa2kgYHAtdmFsdWVgIHBhZGEgdWppIEYgeWFuZyBsZWJpaCBrZWNpbCBkYXJpIDAuMDUgKFw8IDguNDQ1MWUtMTUpIHlhbmcgYmVyYXJ0aSBtb2RlbCBpbmkgbGF5YWsgdW50dWsgZGlndW5ha2FuDQoNCi0gICBwLXZhbHVlIHVqaS1UIHVudHVrIHBldWJhaCBgSU5GUkFgIGRhbiBgUEVLT2A8IDUlIGRhbiBgSU5GTGAgPCAxMCUuIEFydGlueWEsIGRhcGF0IGRpa2F0YWthbiBiYWh3YSBwZXViYWggdGVyc2VidXQgYmVycGVuZ2FydWggc2lnbmlmaWthbiB0ZXJoYWRhcCBtb2RlbC4NCg0KJFJeMiQgbWVydXBha2FuIG5pbGFpIHlhbmcgbWVudW5qdWthbiBrZWt1YXRhbiBodWJ1bmdhbiBhbnRhcmEgcGV1YmFoIGJlYmFzIGRhbiBwZXViYWggcmVzcG9ucy4gU2VtYWtpbiB0aW5nZ2kgbmlsYWkgJFJeMiQsIG1ha2Egc2VtYWtpbiBiYWlrIG1vZGVsIHRlcnNlYnV0Lg0KDQotICAgJFJeMiQgcGFkYSBtb2RlbCBzZWJlc2FyICAwLjE2NDgxIGF0YXUgMTYuNDgxJSB5YW5nIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBwZXViYWggeWFuZyBkaWd1bmFrYW4gdGlkYWsgYmFpayBkYWxhbSBtZW5nZ2FtYmFya2FuIG1vZGVsLg0KDQotICAgTW9kZWwgZGFwYXQgbWVuamVsYXNrYW4gc2ViZXNhciAxMy4xMzElIGRhcmkga2VyYWdhbWFuIGRhdGEgeWFuZyBkaWxpaGF0IGRhcmkgJFJeMiBBZGokIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHBldWJhaCB5YW5nIGRpZ3VuYWthbiB0aWRhayBiYWlrIGRhbGFtIG1lbmdnYW1iYXJrYW4gbW9kZWwuDQoNCg0KIyMjIE5pbGFpIEludGVyc2VwIGRhcmkgc2V0aWFwIHdha3R1DQoNCmBgYHtyfQ0Kc3VtbWFyeShmaXhlZihmZW1fdGltZSwgZWZmZWN0PSJ0aW1lIikpDQpgYGANCg0KTmlsYWkgZGlhdGFzIGFkYWxhaCBuaWxhaSBwZW5nYXJ1aCBrb25zdGFuIGRhcmkgbWFzaW5nLW1hc2luZyB3YWt0dSB5YW5nIHBhZGEgbW9kZWwgZGFwYXQgZGl0dWxpc2thbiBzZWJhZ2FpICRcbGFtYmRhX3QkLg0KDQojIyBGRU0gVFdPIFdBWVMNCg0KRWZlayBrb21wb25lbiBzaXNhYWFuIHNhdHUgYXJhaCBwYWRhIGluZGl2aWR1Lg0KDQpgYGB7cn0NCmZlbV90d293YXlzIDwtIHBsbShLTUlTIH4gSU5GUkEgKyBQRUtPICsgSU5GTCArIFBHR1IsIGluZGV4ID0gYygiUFJPVklOU0kiLCAiVEFIVU4iKSwNCiAgICAgICAgICAgICAgICAgICBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3Q9ICJ0d293YXlzIiwgZGF0YSA9IGtlbWlzKQ0Kc3VtbWFyeShmZW1fdHdvd2F5cykNCmBgYA0KRGlkYXBhdCBtb2RlbCBzZWJhZ2FpIGJlcmlrdXQ6DQoNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KS01JU197aXR9ICY9IGZfaStcbGFtYmRhX3QtNi4yNDEoMTBeey03fSlJTkZSQV97aXR9KzAuMTU0UEVLT197aXR9KzAuMTExSU5GTF97aXR9LTAuMDYzUEdHUl97aXR9K1x2YXJlcHNpbG9uX3tpdH0gXFwNClxlbmR7YWxpZ25lZH0NCiQkDQoNCkludGVycHJldGFzaSA6DQoNCi0gU2V0aWFwIGtlbmFpa2FuIHNhdHUgc2F0dWFuIGBJbmZyYXN0cnVrdHVyYCBtZW55ZWJhYmthbiBgVGluZ2thdCBLZW1pc2tpbmFuYCBtZW51cnVuIHNlYmVzYXIgYDYuMjQxeDEwXi03YCBwZXJzZW4gZGVuZ2FuIG1lbmdhbmdnYXAgcGV1YmFoIGxhaW4ga29uc3Rhbi4NCg0KLSBTZXRpYXAga2VuYWlrYW4gc2F0dSBzYXR1YW4gYFBlcnR1bWJ1aGFuIEVrb25vbWlgIG1lbnllYmFia2FuIGBUaW5na2F0IEtlbWlza2luYW5gIG1lbmluZ2thdCBzZWJlc2FyIGAwLjE1NGAgcGVyc2VuIGRlbmdhbiBtZW5nYW5nZ2FwIHBldWJhaCBsYWluIGtvbnN0YW4uDQoNCi0gU2V0aWFwIGtlbmFpa2FuIHNhdHUgc2F0dWFuIGBJbmZsYXNpYG1lbnllYmFia2FuIGBUaW5na2F0IEtlbWlza2luYW5gIG1lbmluZ2thdCBzZWJlc2FyIGAwLjExMWAgcGVyc2VuIGRlbmdhbiBtZW5nYW5nZ2FwIHBldWJhaCBsYWluIGtvbnN0YW4uDQoNCi0gU2V0aWFwIGtlbmFpa2FuIHNhdHUgc2F0dWFuIGBQZW5nYW5nZ3VyYW5gIG1lbnllYmFia2FuIGBUaW5na2F0IEtlbWlza2luYW5gIG1lbnVydW4gc2ViZXNhciBgMC4wNjNgIHBlcnNlbiBkZW5nYW4gbWVuZ2FuZ2dhcCBwZXViYWggbGFpbiBrb25zdGFuLg0KDQpVbnR1ayBzZW11YSBwLXZhbHVlIGRpIGJhd2FoIDUlLCBtYWthIHRlcmRhcGF0IGN1a3VwIGJ1a3RpIHVudHVrIG1lbm9sYWsgJEhfMCQgKGt1cmFuZyBkYXJpIDUlIGtlbXVuZ2tpbmFuIGJhaHdhICRIXzAkIGJlbmFyKS4NCg0KLSAgIE1vZGVsIG1lbWlsaWtpIGBwLXZhbHVlYCBwYWRhIHVqaSBGIHlhbmcgbGViaWgga2VjaWwgZGFyaSAwLjA1IChcPCAyLjIyZS0xNikgeWFuZyBiZXJhcnRpIG1vZGVsIGluaSBsYXlhayB1bnR1ayBkaWd1bmFrYW4NCi0gICBwLXZhbHVlIHVqaS1UIHVudHVrIHBldWJhaCBgSU5GUkFgLCBgUEVLT2AsIGRhbiBgSU5GTGAgPCA1JS4gQXJ0aW55YSwgZGFwYXQgZGlrYXRha2FuIGJhaHdhIHBldWJhaCB0ZXJzZWJ1dCBiZXJwZW5nYXJ1aCBzaWduaWZpa2FuIHRlcmhhZGFwIG1vZGVsLg0KDQokUl4yJCBtZXJ1cGFrYW4gbmlsYWkgeWFuZyBtZW51bmp1a2FuIGtla3VhdGFuIGh1YnVuZ2FuIGFudGFyYSBwZXViYWggYmViYXMgZGFuIHBldWJhaCByZXNwb25zLiBTZW1ha2luIHRpbmdnaSBuaWxhaSAkUl4yJCwgbWFrYSBzZW1ha2luIGJhaWsgbW9kZWwgdGVyc2VidXQuDQoNCi0gICAkUl4yJCBwYWRhIG1vZGVsIHNlYmVzYXIgIDAuMTQ4NTkgYXRhdSAxNC44NTklIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHBldWJhaCB5YW5nIGRpZ3VuYWthbiB0aWRhayBiYWlrIGRhbGFtIG1lbmdnYW1iYXJrYW4gbW9kZWwuDQoNCi0gICBNb2RlbCBkYXBhdCBtZW5qZWxhc2thbiBzZWJlc2FyIDMuOTg1JSBkYXJpIGtlcmFnYW1hbiBkYXRhIHlhbmcgZGlsaWhhdCBkYXJpICRSXjIgQWRqJCB5YW5nIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBwZXViYWggeWFuZyBkaWd1bmFrYW4gdGlkYWsgYmFpayBkYWxhbSBtZW5nZ2FtYmFya2FuIG1vZGVsLg0KDQoNCiMjIyBOaWxhaSBJbnRlcnNlcCBkYXJpIHNldGlhcCBpbmRpdmlkdSBkYW4gd2FrdHUNCg0KYGBge3J9DQpkYXRhLmZyYW1lKHN1bW1hcnkoZml4ZWYoZmVtX3R3b3dheXMsIGVmZmVjdD0idHdvd2F5cyIpKSkNCmBgYA0KDQpOaWxhaSBkaWF0YXMgYWRhbGFoIG5pbGFpIHBlbmdhcnVoIGtvbnN0YW4gZGFyaSBnYWJ1bmdhbiBtYXNpbmctbWFzaW5nIGluZGl2aWR1IGRhbiB3YWt0dSB5YW5nIHBhZGEgbW9kZWwgZGFwYXQgZGl0dWxpc2thbiBzZWJhZ2FpICRmX2krXGxhbWJkYV90JC4NCg0KIyBVamktQ2hvdw0KDQpVamkgQ2hvdyBhZGFsYWggdWppIGZvcm1hbCB1bnR1ayBtZW5ndWppIGFkYSBhdGF1IHRpZGFrbnlhIHBlbmdhcnVoIHNwZXNpZmlrIGluZGl2aWR1IGRhbiBwZW5nYXJ1aCBzcGVzaWZpayB3YWt0dSBwYWRhIGRhdGEgcGFuZWwuDQoNCkhpcG90ZXNpcyBwYWRhIHVqaSBpbmkgeWFpdHUgOg0KDQotICAgVW50dWsgbWVuZ3VqaSBwZW5nYXJ1aCBpbmRpdmlkdQ0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpIX3swMX0gJjogXHRleHR7VGlkYWsgYWRhIHBlbmdhcnVoIHNwZXNpZmlrIGluZGl2aWR1fSBcXA0KSF97MTF9ICY6IFx0ZXh0e0FkYSBwZW5nYXJ1aCBzcGVzaWZpayBpbmRpdmlkdX0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCi0gICBVbnR1ayBtZW5ndWppIHBlbmdhcnVoIHdha3R1DQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NCkhfezAyfSAmOiBcdGV4dHtUaWRhayBhZGEgcGVuZ2FydWggc3Blc2lmaWsgd2FrdHV9IFxcDQpIX3sxMn0gJjogXHRleHR7QWRhIHBlbmdhcnVoIHNwZXNpZmlrIHdha3R1fQ0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KU3RhdHNpdGlrIFVqaSB5YW5nIGRpZ3VuYWthbiA6DQoNCi0gICBQZW5nYXJ1aCBpbmRpdmlkdQ0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpGX3tIaXR1bmd9ID0gXGZyYWN7SktHX3tNR30gLSBKS0dfe01QVEl9fXtKS0dfe01QVEl9fSAuIFxmcmFje05ULU4tS317Ti0xfQ0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KLSAgIFBlbmdhcnVoIFdha3R1DQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NCkZfe0hpdHVuZ30gPSBcZnJhY3tKS0dfe01HfSAtIEpLR197TVBUV319e0pLR197TVBUV319IC4gXGZyYWN7Ti1ULUt9e1QtMX0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiMjIFVqaSBDaG93DQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NCkhfMCAmOiBcdGV4dHtNb2RlbCBDb21tb24gRWZmZWN0fSBcXA0KSF8xICY6IFx0ZXh0e01vZGVsIEZpeGVkIEVmZmVjdH0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCiRIXzAkIGFrYW4gZGl0b2xhayBhcGFiaWxhIGBwLXZhbHVlYCBsZWJpaCBrZWNpbCBkYXJpIGBhbHBoYWAgeWFpdHUgMC4wNQ0KDQpgYGB7cn0NCnBvb2x0ZXN0KGNlbSwgZmVtKQ0KYGBgDQoNCk5pbGFpIGBwLXZhbHVlYCBzZWJlc2FyICQyLjJlLTE2JCBiZXJhcnRpIGtlcHV0dXNhbiAqVG9sYWsgSDAqIGF0YXUgbW9kZWwgZml4ZWQgZWZmZWN0IGxlYmloIGxheWFrIGRpZ3VuYWthbiBwYWRhIGRhdGEgaW5pLg0KDQojIyBVamkgcGVuZ2FydWggaW5kaXZpZHUgLyB3YWt0dQ0KDQpTZWxhbmp1dG55YSBrYXJlbmEgeWFuZyB0ZXJwaWxpaCBhZGFsYWggbW9kZWwgRml4ZWQtRWZmZWN0IGFrYW4gZGlsaWhhdCBrb21wb25lbiB5YW5nIG1lbWlsaWtpIHBlbmdhcnVoIHRldGFwIGFwYWthaCBpbmRpdmlkdSwgd2FrdHUsIGF0YXUga2VkdWFueWEuDQoNCiMjIyBFZmVrIEluZGl2aWR1IGRhbiBXYWt0dQ0KDQpgYGB7cn0NCnBsbXRlc3QoZmVtLCB0eXBlID0gImJwIiwgZWZmZWN0ID0gInR3b3dheXMiKQ0KYGBgDQoNCiMjIyBFZmVrIEluZGl2aWR1DQoNCmBgYHtyfQ0KcGxtdGVzdChmZW0sIHR5cGUgPSAiYnAiLCBlZmZlY3QgPSAiaW5kaXZpZHVhbCIpDQpgYGANCg0KIyMjIEVmZWsgV2FrdHUNCg0KYGBge3J9DQpwbG10ZXN0KGZlbSwgdHlwZSA9ICJicCIsIGVmZmVjdCA9ICJ0aW1lIikNCmBgYA0KDQpEYXJpIGtldGlnYSB1amkgZGlhdGFzIGRpZGFwYXQgbmlsYWkgKnAtdmFsdWUqIHlhbmcgbGViaWgga2VjaWwgZGFyaSAwLjA1IHlhbmcgYmVyYXJ0aSBrZXB1dHVzYW5ueWEgYWRhbGFoIFRhayBUb2xhayAkSF8wJCBhdGF1IHRlcmRhcGF0IHBlbmdhcnVoIHlhbmcgc2lnbmlmaWthbiBkYXJpIGluZGl2aWR1IG1hdXB1biB3YWt0dS4gU2VoaW5nZ2EgYWthbiBkaWR1Z2EgcGFyYW1ldGVyIHBlbmdhcnVoIHR3b3dheXMgcGFkYSBSYW5kb20gRWZmZWN0IE1vZGVsLg0KDQojIFJhbmRvbS1FZmZlY3QgTW9kZWwNCg0KTW9kZWwgcGVuZ2FydWggYWNhayBtZW5nYXN1bXNpa2FuIHRpZGFrIGFkYSBrb3JlbGFzaSBhbnRhcmEgcGVuZ2FydWggc3Blc2lmaWsgaW5kaXZpZHUgZGFuIHBlbmdhcnVoIHNwZXNpZmlrIHdha3R1IGRlbmdhbiBwZXViYWggYmViYXMuIEFzdW1zaSBpbmkgbWVtYnVhdCBrb21wb25lbiBzaXNhYW4gZGFyaSBwZW5nYXJ1aCBzcGVzaWZpayBpbmRpdmlkdSBkYW4gcGVuZ2FydWggc3Blc2lmaWsgd2FrdHUgZGltYXN1a2FuIGtlZGFsYW0gc2lzYWFuLiBNb2RlbCBzaXNhYW4gc2F0dSBhcmFoIHlhaXR1Og0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQp5X3tpdH0gJj0gXGFscGhhICsgIFxiZXRhX3sxfXhfezEsaXR9Kw0KXGJldGFfezJ9eF97MixpdH0rLi4uK1xiZXRhX3trfXhfe2ssaXR9KyBmX3tpfSArXHZhcmVwc2lsb25fe2l0fVwgIFx0ZXh0eyhwZW5nYXJ1aCBJbmRpdmlkdSl9DQogXFwNClxlbmR7YWxpZ25lZH0NCiQkDQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NCnlfe2l0fSAmPSBcYWxwaGEgKyAgXGJldGFfezF9eF97MSxpdH0rDQpcYmV0YV97Mn14X3syLGl0fSsuLi4rXGJldGFfe2t9eF97ayxpdH0rIFxsYW1iZGFfe3R9ICtcdmFyZXBzaWxvbl97aXR9DQpcXA0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KTW9kZWwgc2lzYWFuIGR1YSBhcmFoIHlhaXR1Og0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQp5X3tpdH0gJj0gXGFscGhhICsgXGJldGFfezF9eF97MSxpdH0rDQpcYmV0YV97Mn14X3syLGl0fSsuLi4rXGJldGFfe2t9eF97ayxpdH0rIGZfe2l9KyBcbGFtYmRhX3t0fQ0KK1x2YXJlcHNpbG9uX3tpdH0gXFwNClxlbmR7YWxpZ25lZH0NCiQkDQpEZW5nYW4gJFxhbHBoYSQgbWVydXBha2FuIGludGVyc2VwIG1vZGVsIGRhbiAkZl9pJCBkYW4gJFxsYW1iZGFfdCQgbWVydXBha2FuIHBlbmdhcnVoIGFjYWsgbWFzaW5nLW1hc2luZyBpbmRpdmlkdSBkYW4gd2FrdHUuIFBlbmR1Z2FhbiBwYXJhbWV0ZXIgbW9kZWwgcGVuZ2FydWggYWNhayBtZW5nZ3VuYWthbiBHZW5lcmFsaXplZCBMZWFzdCBTcXVhcmUgKEJhbHRhZ2kgMjAwOCkuDQoNCiMjIEdlbmVyYWxpemVkIExlYXN0IFNxdWFyZQ0KDQpBbmFsaXNpcyBkYXRhIHBhbmVsIHRpZGFrIHNlcGVudWhueWEgbWVuZ2lrdXRpIHByb3NlZHVyIHJlZ3Jlc2kgYmlhc2EgeWFuZyB0aWRhayBkYXBhdCBtZW5qZWxhc2thbiBrZXJhZ2FtYW4gZGF0YS4gUGVybHVueWEgbWVtcGVydGltYmFuZ2thbiBrZXJhZ2FtYW4gZGF0YSB0ZXJzZWJ1dCB1bnR1ayBkYXBhdCBtZW5nZXRhaHVpIGRhbGFtIHBlbmdnYWxpYW4gbGViaWggbGFuanV0IHRlcmhhZGFwIGluZm9ybWFzaSB5YW5nIGRpa2FuZHVuZyBkYXRhLiBTYWxhaCBzYXR1IGNhcmEgdW50dWsgbWVsYWt1a2FuIGhhbCB0ZXJzZWJ1dCB5YWl0dSBkZW5nYW4gbWV0b2RlIEdlbmVyYWxpemVkIExlYXN0IFNxdWFyZSAoR0xTKS4gR0xTIGRpcGFrYWkgc2ViYWdhaSBlc3RpbWF0b3IgYW5hbGlzaXMgZGF0YSBwYW5lbCBkZW5nYW4gcGVyc2FtYWFuIHNpc3RlbSBrYXJlbmEgaW5mb3JtYXNpIGhldGVyb2dlbml0YXMgYW50YXJhIGluZGl2aWR1IGRhbiB3YWt0dSBkaWd1bmFrYW4gc2ViYWdhaSBpbmZvcm1hc2kgeWFuZyBwZW50aW5nIHVudHVrIG1lbmdoYXNpbGthbiBwYXJhbWV0ZXIgJFxoYXR7XGJldGF9JCBQZXJzYW1hYW4gZGFsYW0gcGVuZHVnYWFuIHBhcmFtZXRlciBHTFMgYWRhbGFoIHNlYmFnYWkgYmVyaWt1dC4NCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KXGhhdCB7XGJldGF9ICY9IChYJyhcc3VtKV57LTF9IFggKV57LTF9ICBYJyhcc3VtKSBeey0xfQ0KeSAgXFwNClxlbmR7YWxpZ25lZH0NCiQkDQoNCk1ldG9kZSBHTFMgbWVtYXN1a2thbiBzdHJ1a3R1ciBtYXRyaWtzIHJhZ2FtIHBlcmFnYW0gcmVzaWR1YWwgcGFkYSBwYXJhbWV0ZXIgJFxoYXR7XGJldGF9JCAoRWthbmFuZGEgMjAxNikuDQoNCiMjIFBlbmR1Z2FhbiBQYXJhbWV0ZXINCg0KSmlrYSBwYWRhIG1vZGVsIEZFTSBtZW5nYXN1bXNpa2FuIGJhaHdhIG5pbGFpIGRhcmkgcGVuZ2FydWggc3Blc2lmaWsgaW5kaXZpZHUgYmVyc2lmYXQgZml4ZWQgcGFkYSBzZXRpYXAgdW5pdCwgbWFrYSBwYWRhIG1vZGVsIHJhbmRvbSBlZmZlY3QgZGlhc3Vtc2lrYW4gYmFod2EgcGVuZ2FydWggdGVyc2VidXQgYmVyc2lmYXQgYWNhay4gRGFsYW0gaGFsIGluaSBtaXNhbG55YSBtb2RlbCBvbmUgd2F5IGluZGl2aWR1IHBhZGEgZGF0YSBHcnVuZGZlbGQsIG1ha2Ega2UtMTAgZmlybSBtZW1pbGlraSBuaWxhaSByYXRhYW4gdW11bSBpbnRlcnNlcCB5YW5nIHNhbWEsIHNlZGFuZ2thbiBwZXJiZWRhYW4gaW50ZXJzZXAgYW50YXIgbWFzaW5nLW1hc2luZyB1bml0IGZpcm0gZGlyZWZsZWtzaWthbiBwYWRhIGVycm9yIHRlcm1ueWEuDQoNCmBgYHtyfQ0KcmVtX2dscyA8LSBwbG0oS01JUyB+IElORlJBICsgUEVLTyArIElORkwgKyBQR0dSLCBkYXRhID0ga2VtaXMsIA0KICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGMoIlBST1ZJTlNJIiwgIlRBSFVOIiksIA0KICAgICAgICAgICAgICAgICAgICBlZmZlY3QgPSAidHdvd2F5cyIsIG1vZGVsID0gInJhbmRvbSIpDQpzdW1tYXJ5KHJlbV9nbHMpDQpgYGANCkRpZGFwYXQgbW9kZWwgc2ViYWdhaSBiZXJpa3V0Og0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpLTUlTX3tpdH0gJj0gMTAuODgzK1xsYW1iZGFfdC03LjgzMigxMF57LTd9KUlORlJBX3tpdH0rMC4xNjk3UEVLT197aXR9KzAuMTcyNUlORkxfe2l0fSswLjE2MjVQR0dSX3tpdH0rZl97aX0rIFxsYW1iZGFfe3R9K1x2YXJlcHNpbG9uX3tpdH0gXFwNClxlbmR7YWxpZ25lZH0NCiQkDQoNCkludGVycHJldGFzaSA6DQoNCi0gU2V0aWFwIGtlbmFpa2FuIHNhdHUgc2F0dWFuIGBJbmZyYXN0cnVrdHVyYCBtZW55ZWJhYmthbiBgVGluZ2thdCBLZW1pc2tpbmFuYCBtZW51cnVuIHNlYmVzYXIgYDcuODMyeDEwXi03YCBwZXJzZW4gZGVuZ2FuIG1lbmdhbmdnYXAgcGV1YmFoIGxhaW4ga29uc3Rhbi4NCg0KLSBTZXRpYXAga2VuYWlrYW4gc2F0dSBzYXR1YW4gYFBlcnR1bWJ1aGFuIEVrb25vbWlgIG1lbnllYmFia2FuIGBUaW5na2F0IEtlbWlza2luYW5gIG1lbmluZ2thdCBzZWJlc2FyIGAwLjE2OTdgIHBlcnNlbiBkZW5nYW4gbWVuZ2FuZ2dhcCBwZXViYWggbGFpbiBrb25zdGFuLg0KDQotIFNldGlhcCBrZW5haWthbiBzYXR1IHNhdHVhbiBgSW5mbGFzaWBtZW55ZWJhYmthbiBgVGluZ2thdCBLZW1pc2tpbmFuYCBtZW5pbmdrYXQgc2ViZXNhciBgMC4xNzI1YCBwZXJzZW4gZGVuZ2FuIG1lbmdhbmdnYXAgcGV1YmFoIGxhaW4ga29uc3Rhbi4NCg0KLSBTZXRpYXAga2VuYWlrYW4gc2F0dSBzYXR1YW4gYFBlbmdhbmdndXJhbmAgbWVueWViYWJrYW4gYFRpbmdrYXQgS2VtaXNraW5hbmAgbWVuaW5na2F0IHNlYmVzYXIgYDAuMTYyNWAgcGVyc2VuIGRlbmdhbiBtZW5nYW5nZ2FwIHBldWJhaCBsYWluIGtvbnN0YW4uDQoNClVudHVrIHNlbXVhIHAtdmFsdWUgZGkgYmF3YWggNSUsIG1ha2EgdGVyZGFwYXQgY3VrdXAgYnVrdGkgdW50dWsgbWVub2xhayAkSF8wJCAoa3VyYW5nIGRhcmkgNSUga2VtdW5na2luYW4gYmFod2EgJEhfMCQgYmVuYXIpLg0KDQotICAgTW9kZWwgbWVtaWxpa2kgYHAtdmFsdWVgIHBhZGEgdWppIEYgeWFuZyBsZWJpaCBrZWNpbCBkYXJpIDAuMDUgKFw8IDIuMjJlLTE2KSB5YW5nIGJlcmFydGkgbW9kZWwgaW5pIGxheWFrIHVudHVrIGRpZ3VuYWthbg0KLSAgIHAtdmFsdWUgdWppLVQgdW50dWsgc2VtdWEgcGV1YmFoIDwgNSUuIEFydGlueWEsIGRhcGF0IGRpa2F0YWthbiBiYWh3YSBzZW11YSBwZXViYWggYmVycGVuZ2FydWggc2lnbmlmaWthbiB0ZXJoYWRhcCBtb2RlbC4NCg0KJFJeMiQgbWVydXBha2FuIG5pbGFpIHlhbmcgbWVudW5qdWthbiBrZWt1YXRhbiBodWJ1bmdhbiBhbnRhcmEgcGV1YmFoIGJlYmFzIGRhbiBwZXViYWggcmVzcG9ucy4gU2VtYWtpbiB0aW5nZ2kgbmlsYWkgJFJeMiQsIG1ha2Egc2VtYWtpbiBiYWlrIG1vZGVsIHRlcnNlYnV0Lg0KDQotICAgJFJeMiQgcGFkYSBtb2RlbCBzZWJlc2FyICAwLjIzOTc4IGF0YXUgMjMuOTc4JSB5YW5nIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBwZXViYWggeWFuZyBkaWd1bmFrYW4gdGlkYWsgYmFpayBkYWxhbSBtZW5nZ2FtYmFya2FuIG1vZGVsLg0KDQotICAgTW9kZWwgZGFwYXQgbWVuamVsYXNrYW4gc2ViZXNhciAyMy4yMzglIGRhcmkga2VyYWdhbWFuIGRhdGEgeWFuZyBkaWxpaGF0IGRhcmkgJFJeMiBBZGokIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHBldWJhaCB5YW5nIGRpZ3VuYWthbiB0aWRhayBiYWlrIGRhbGFtIG1lbmdnYW1iYXJrYW4gbW9kZWwuDQoNCg0KIyMgQ2VrIFNpZ25pZmlrYW5zaSBQZW5nYXJ1aCBJbmRpdmlkdQ0KDQpgYGB7cn0NCiNlZmVrIGluZGl2aWR1IA0KcGxtdGVzdChyZW1fZ2xzLHR5cGUgPSAiYnAiLCBlZmZlY3Q9ImluZGl2aWR1IikNCmBgYA0KS2FyZW5hIG5pbGFpIHAtdmFsdWUgPCAwLjA1LCBtYWthIHRvbGFrICRIXzAkIGF0YXUgcGVuZ2FydWggaW5kaXZpZHUgc2lnbmlmaWthbiB0ZXJoYWRhcCBtb2RlbC4gDQojIyBDZWsgU2lnbmlmaWthbnNpIFBlbmdhcnVoIHdha3R1DQoNCmBgYHtyfQ0KI2VmZWsgd2FrdHUgDQpwbG10ZXN0KHJlbV9nbHMsdHlwZSA9ICJicCIsIGVmZmVjdD0idGltZSIpDQpgYGANCkthcmVuYSBuaWxhaSBwLXZhbHVlIDwgMC4wNSwgbWFrYSB0b2xhayAkSF8wJCBhdGF1IHBlbmdhcnVoIHdha3R1IHNpZ25pZmlrYW4gdGVyaGFkYXAgbW9kZWwuIEFydGlueWEsIG1vZGVsIHR3b3dheXMgdGVwYXQgZGlndW5ha2FuIHVudHVrIG1ldG9kZSBSRU0uDQoNCmBgYHtyLCB3YXJuaW5nPUZ9DQp0aWR5X3JhbmVmIDwtIHRpZHkocmFuZWYocmVtX2dscywgZWZmZWN0PSJpbmRpdmlkdWFsIikpDQprYWJsZSh0aWR5X3JhbmVmLCBkaWdpdHM9MywgY2FwdGlvbiA9ICJQZW5nYXJ1aCBBY2FrIEluZGl2aWR1IiwgDQogICAgICBjb2wubmFtZXMgPSBjKCJGaXJtIiwgIlBlbmdhcnVoIEFjYWsgSW5kaXZpZHUiKSkNCmBgYA0KDQpPdXRwdXQgZGlhdGFzIG1lcnVwYWthbiBwZW5nYXJ1aCBhY2FrIGRhcmkgc2V0aWFwIHVuaXQgaW5kaXZpZHUsIG5pbGFpIHRlcnNlYnV0IHRlcnNlYnV0IG1lbnVuanVra2FuIHNlYmVyYXBhIGJlc2FyIHBlcmJlZGFhbiBuaWxhaSBrb21wb25lbiBlcnJvciBhY2FrIG1hc2luZy1tYXNpbmcgdW5pdCBpbmR2aWR1IHRlcmhhZGFwIG5pbGFpIGludGVyc2VwIHVtdW0uDQoNCmBgYHtyLCB3YXJuaW5nPUZ9DQp0aWR5X3JhbmVmIDwtIHRpZHkocmFuZWYocmVtX2dscywgZWZmZWN0PSJ0aW1lIikpDQprYWJsZSh0aWR5X3JhbmVmLCBkaWdpdHM9MywgY2FwdGlvbiA9ICJQZW5nYXJ1aCBBY2FrIFdha3R1IiwgDQogICAgICBjb2wubmFtZXMgPSBjKCJGaXJtIiwgIlBlbmdhcnVoIEFjYWsgV2FrdHUiKSkNCmBgYA0KDQpPdXRwdXQgZGlhdGFzIG1lcnVwYWthbiBwZW5nYXJ1aCBhY2FrIGRhcmkgc2V0aWFwIHVuaXQgd2FrdHUsIG5pbGFpIHRlcnNlYnV0IHRlcnNlYnV0IG1lbnVuanVra2FuIHNlYmVyYXBhIGJlc2FyIHBlcmJlZGFhbiBuaWxhaSBrb21wb25lbiBlcnJvciBhY2FrIG1hc2luZy1tYXNpbmcgdW5pdCB3YWt0dSB0ZXJoYWRhcCBuaWxhaSBpbnRlcnNlcCB1bXVtLg0KDQojIEZFTSB2cyBSRU0NCg0KIyMgVWppIEhhdXNzbWFuDQoNClBhZGEgYmFnaWFuIHNlYmVsdW1ueWEsIGN1a3VwIGJ1a3RpIHlhbmcgbWVueWF0YWthbiBiYWh3YSBtb2RlbCBGRU0gbGViaWggYmFpayBkYXJpcGFkYSBtb2RlbCBDRU0uIE9sZWgga2FyZW5hIGl0dSwgdGFoYXAgc2VsYW5qdXRueWEgYWthbiBkaWJhbmRpbmdrYW4ga2ViYWlrYW4gbW9kZWwgRkVNIGppa2EgZGliYW5kaW5nIG1vZGVsIFJFTS4gVWppIHlhbmcgZGlndW5ha2FuIGFkYWxhaCB1amkgYEhhdXNtYW5gIGRlbmdhbiBtZW5nZ3VuYWthbiBmdW5nc2kgYHBodGVzdChGRU0sUkVNKWAuDQoNClBlbmd1amlhbiBpbmkgZGlsYWt1a2FuIHVudHVrIG1lbWlsaWggbW9kZWwgYW50YXJhIG1vZGVsIHBlbmdhcnVoIHRldGFwIGF0YXUgbW9kZWwgcGVuZ2FydWggYWNhayB5YW5nIHNlc3VhaSB1bnR1ayBtZW5nZ2FtYmFya2FuIHN1YXR1IGRhdGEgcGFuZWwuIFVqaSBIYXVzbWFuIGRpZGFzYXJrYW4gcGFkYSBwZXJiZWRhYW4gcGVuZHVnYSBtb2RlbCBwZW5nYXJ1aCB0ZXRhcCAkXGhhdHtcYmV0YX1fe01QVH0kIGRlbmdhbiBwZW5kdWdhIG1vZGVsIHBlbmdhcnVoIGFjYWsgJFxoYXR7XGJldGF9X3tNUEF9JC4gS2VkdWEgcGVuZHVnYSBrb25zaXN0ZW4gZGFsYW0ga29uZGlzaSAkSF8wJCwgdGV0YXBpICRcaGF0e1xiZXRhfV97TVBBfSQgYWthbiBiaWFzIGRhbiB0aWRhayBrb25zaXN0ZW4gcGFkYSAkSF8xJC4gUGVuZ3VqaWFuIGhpcG90ZXNpc255YSBhZGFsYWg6DQoNCiRIXzAkOiBNb2RlbCBwZW5nYXJ1aCBhY2FrIChSRU0pIGFkYWxhaCBtb2RlbCB5YW5nIHRlcGF0DQoNCiRIXzEkOiBNb2RlbCBwZW5nYXJ1aCB0ZXRhcCAoRkVNKSBhZGFsYWggbW9kZWwgeWFuZyB0ZXBhdA0KDQpgYGB7cn0NCiNmZW0gZGVuZ2FuIHJlbSBnbHMNCnBodGVzdChmZW1fdHdvd2F5cywgcmVtX2dscykNCmBgYA0KDQpLYXJlbmEgbmlsYWkgcC12YWx1ZSB5YW5nIGRpcGVyb2xlaCBrdXJhbmcgZGFyaSBkYXJpIGFscGhhIDUlLCBtYWthIFRvbGFrIEgwIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGJhaHdhICoqbW9kZWwgeWFuZyBzZXN1YWkgYWRhbGFoIG1vZGVsIEZFTSoqLg0KDQojIFVKaSBEaWFnbm9zdGlrIFNpc2Fhbg0KDQpgYGB7cn0NCnJlcyA8LSByZXNpZHVhbHMoZmVtX3R3b3dheXMpDQpgYGANCg0KIyMgVWppIE5vcm1hbGl0YXMNCg0KYGBge3J9DQpqYXJxdWUuYmVyYS50ZXN0KHJlcykNCmBgYA0KDQojIyMgKkhpc3RvZ3JhbSoNCg0KYGBge3J9DQojIEhpc3RvZ3JhbSANCmdncGxvdChhcy5kYXRhLmZyYW1lKHJlcyksIGFlcyh4ID0gcmVzKSkgKw0KICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IGFmdGVyX3N0YXQoZGVuc2l0eSkpLCBjb2xvciA9ICJ3aGl0ZSIsIGZpbGwgPSAic3RlZWxibHVlIikgKw0KICBnZW9tX2RlbnNpdHkoY29sb3IgPSAicmVkIiwgbGluZXdpZHRoID0gMSkgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQojIyBVamkgQXV0b2tvcmVsYXNpDQoNCmBgYHtyfQ0KcGJndGVzdChmZW1fdHdvd2F5cykNCmBgYA0KDQojIyBVamkgS2Vob21vZ2VuYW4NCg0KYGBge3J9DQpicHRlc3QoZmVtX3R3b3dheXMpDQpgYGANCg0KS2VzaW1wdWxhbiB1amkgZGlhZ25vc3RpayA6DQoNCi0gICBTaXNhYW4gdGlkYWsgbWVueWViYXIgbm9ybWFsIChBc3Vtc2kga2Vub3JtYWxhbiB0aWRhayB0ZXJwZW51aGkpDQotICAgU2lzYWFuIG1lbWlsaWtpIGF1dG9rb3JlbGFzaSAoQXN1bXNpIGtlYmViYXNhbiBiZWx1bSB0ZXJwZW51aGkpDQotICAgU2lzYWFuIHRpZGFrIGhvbW9nZW4gKEFzdW1zaSBrZWhvbW9nZW5hbiBiZWx1bSB0ZXJwZW51aGkpDQoNClRlcmxpaGF0IGJhaHdhIHNlbXVhIGFzdW1zaSB0aWRhayB0ZXJwZW51aGksIG9sZWgga2FyZW5hIGl0dSwgZGlwZXJsdWthbiBwZW5hbmdhbmFuIHlhaXR1IGRlbmdhbiB0cmFuc2Zvcm1hc2kgbWVuZ2d1bmFrYW4gRmlyc3QgRGlmZmVyZW5jZS4gWWFpdHUgc2ViYWdhaSBiZXJpa3V0Og0KDQojIFBlbmFuZ2FuYW4gQXN1bXNpIC0gRkVNIEZpcnN0IERpZmZlcmVuY2UNCg0KRmlyc3QgRGlmZmVyZW5jZSBFc3RpbWF0b3IgKEZELUVzdGltYXRvcikgbWVydXBha2FuIGVzdGltYXRvciB1bnR1ayBkYXRhIHBhbmVsIHlhbmcgZGlndW5ha2FuIHBhZGEgbW9kZWwgZWZlayB0ZXRhcCBzYXR1IGFyYWggKE9uZXdheS1GRU0pIGF0YXUgZHVhIGFyYWggKHR3b3dheS1GRU0pLiBGRCBiZXJndW5hIGRhbGFtIHZhbGlkYXNpIG1vZGVsIGRpbWFuYSBwYWRhIGRhdGEgcGFuZWwgdGVyZGFwYXQgYmViZXJhcGEgbmlsYWkgYW1hdGFuIHlhbmcgaGlsYW5nLiBCZXJpa3V0IGFkYWxhaCBtb2RlbCB1bXVtIHlhbmcgZGlndW5ha2FuIGRhbGFoIEZFTSBGaXJzdCBEaWZmZXJlbmNlOg0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpcRGVsdGEgeV97aXR9ICY9IFxiZXRhX3sxfVxEZWx0YSB4X3tpdDF9ICsgXGJldGFfezJ9XERlbHRhIHhfe2l0Mn0gKyAuLi4gKyBcYmV0YV97a31cRGVsdGEgeF97aXRrfSArIFx2YXJlcHNpbG9uX3tpdH0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCkRhbGFtIGhhbCBpbmksIGtpdGEgYWthbiBtZW5nZ3VuYWthbiBtZXRvZGUgRkQgcGFkYSBtb2RlbCB0d293YXlzLiBVbnR1ayAkXHRpbGRle3l9X3tpdH09IFxEZWx0YSB5X3tpdH0kIGRhbiAkXHRpbGRle1h9X3tpdH09IFxEZWx0YSBYX3tpdH0kLCBkaWRlZmluaXNpa2FuOg0KDQokXHRpbGRle3t5fSB9X3tpLHR9PXt5fSBfe2ksdH0te3l9IF97aS0xLHR9LXt5fSBfe2ksdC0xfSt7eX0gX3tpLTEsdC0xfSQNCg0KZGFuDQoNCiRcdGlsZGV7e1h9IH1fe3MsdH09e1h9IF97cyx0fS17WH0gX3tpLTEsdH0te1h9IF97aSx0LTF9K3tYfSBfe2ktMSx0LTF9JA0KDQpTZWhpbmdnYSwga2l0YSBwZXJsdSBtZW50cmFuc2Zvcm1hc2kgc2V0aWFwIG5pbGFpIGRpIHBldWJhaCByZXNwb25zIChZID0gS01JUykgZGFuIHBldWJhaCBiZWJhcyAoWCkgcGFkYSBkYXRhIGRlbmdhbiBmdW5nc2kgYmVyaWt1dDoNCg0KYGBge3J9DQp0cmFuc2Zvcm1fZGF0YSA8LSBmdW5jdGlvbihkZikgew0KICBkZiRkWSA8LSBOQSAjIGNyZWF0ZSBhIG5ldyBjb2x1bW4gZm9yIHRoZSB0cmFuc2Zvcm1lZCBZIHZhbHVlcw0KICBkZiRkWDEgPC0gTkEgIyBjcmVhdGUgYSBuZXcgY29sdW1uIGZvciB0aGUgdHJhbnNmb3JtZWQgWDQgdmFsdWVzDQogIGRmJGRYMiA8LSBOQSAjIGNyZWF0ZSBhIG5ldyBjb2x1bW4gZm9yIHRoZSB0cmFuc2Zvcm1lZCBYMiB2YWx1ZXMNCiAgZGYkZFgzIDwtIE5BICMgY3JlYXRlIGEgbmV3IGNvbHVtbiBmb3IgdGhlIHRyYW5zZm9ybWVkIFgzIHZhbHVlcw0KICBkZiRkWDQgPC0gTkEgIyBjcmVhdGUgYSBuZXcgY29sdW1uIGZvciB0aGUgdHJhbnNmb3JtZWQgWDQgdmFsdWVzDQogIGRmJFBST1ZJTlNJIDwtIGFzLm51bWVyaWMoZGYkUFJPVklOU0kpDQogIGRmJFRBSFVOIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKGRmJFRBSFVOKSkNCiAgZm9yIChpIGluIDI6MzIpIHsNCiAgICBmb3IgKHQgaW4gMjAwOToyMDIwKSB7DQogICAgICB5X2l0IDwtIGRmJFlbZGYkUFJPVklOU0kgPT0gaSAmIGRmJFRBSFVOID09IHRdDQogICAgICB5X2kxdCA8LSBkZiRZW2RmJFBST1ZJTlNJID09IGktMSAmIGRmJFRBSFVOID09IHRdDQogICAgICB5X2l0MSA8LSBkZiRZW2RmJFBST1ZJTlNJID09IGkgJiBkZiRUQUhVTiA9PSB0LTFdDQogICAgICB5X2kxdDEgPC0gZGYkWVtkZiRQUk9WSU5TSSA9PSBpLTEgJiBkZiRUQUhVTiA9PSB0LTFdDQogICAgICBkZiRkWVtkZiRQUk9WSU5TSSA9PSBpICYgZGYkVEFIVU4gPT0gdF0gPC0geV9pdCAtIHlfaTF0IC0geV9pdDEgKyB5X2kxdDENCiAgICAgIA0KICAgICAgeDFfaXQgPC0gZGYkWDFbZGYkUFJPVklOU0kgPT0gaSAmIGRmJFRBSFVOID09IHRdDQogICAgICB4MV9pMXQgPC0gZGYkWDFbZGYkUFJPVklOU0kgPT0gaS0xICYgZGYkVEFIVU4gPT0gdF0NCiAgICAgIHgxX2l0MSA8LSBkZiRYMVtkZiRQUk9WSU5TSSA9PSBpICYgZGYkVEFIVU4gPT0gdC0xXQ0KICAgICAgeDFfaTF0MSA8LSBkZiRYMVtkZiRQUk9WSU5TSSA9PSBpLTEgJiBkZiRUQUhVTiA9PSB0LTFdDQogICAgICBkZiRkWDFbZGYkUFJPVklOU0kgPT0gaSAmIGRmJFRBSFVOID09IHRdIDwtIHgxX2l0IC0geDFfaTF0IC0geDFfaXQxICsgeDFfaTF0DQogICAgICANCiAgICAgIHgyX2l0IDwtIGRmJFgyW2RmJFBST1ZJTlNJID09IGkgJiBkZiRUQUhVTiA9PSB0XQ0KICAgICAgeDJfaTF0IDwtIGRmJFgyW2RmJFBST1ZJTlNJID09IGktMSAmIGRmJFRBSFVOID09IHRdDQogICAgICB4Ml9pdDEgPC0gZGYkWDJbZGYkUFJPVklOU0kgPT0gaSAmIGRmJFRBSFVOID09IHQtMV0NCiAgICAgIHgyX2kxdDEgPC0gZGYkWDJbZGYkUFJPVklOU0kgPT0gaS0xICYgZGYkVEFIVU4gPT0gdC0xXQ0KICAgICAgZGYkZFgyW2RmJFBST1ZJTlNJID09IGkgJiBkZiRUQUhVTiA9PSB0XSA8LSB4Ml9pdCAtIHgyX2kxdCAtIHgyX2l0MSArIHgyX2kxdA0KICAgICAgDQogICAgICB4M19pdCA8LSBkZiRYM1tkZiRQUk9WSU5TSSA9PSBpICYgZGYkVEFIVU4gPT0gdF0NCiAgICAgIHgzX2kxdCA8LSBkZiRYM1tkZiRQUk9WSU5TSSA9PSBpLTEgJiBkZiRUQUhVTiA9PSB0XQ0KICAgICAgeDNfaXQxIDwtIGRmJFgzW2RmJFBST1ZJTlNJID09IGkgJiBkZiRUQUhVTiA9PSB0LTFdDQogICAgICB4M19pMXQxIDwtIGRmJFgzW2RmJFBST1ZJTlNJID09IGktMSAmIGRmJFRBSFVOID09IHQtMV0NCiAgICAgIGRmJGRYM1tkZiRQUk9WSU5TSSA9PSBpICYgZGYkVEFIVU4gPT0gdF0gPC0geDNfaXQgLSB4M19pMXQgLSB4M19pdDEgKyB4M19pMXQNCiAgICAgIA0KICAgICAgeDRfaXQgPC0gZGYkWDRbZGYkUFJPVklOU0kgPT0gaSAmIGRmJFRBSFVOID09IHRdDQogICAgICB4NF9pMXQgPC0gZGYkWDRbZGYkUFJPVklOU0kgPT0gaS0xICYgZGYkVEFIVU4gPT0gdF0NCiAgICAgIHg0X2l0MSA8LSBkZiRYNFtkZiRQUk9WSU5TSSA9PSBpICYgZGYkVEFIVU4gPT0gdC0xXQ0KICAgICAgeDRfaTF0MSA8LSBkZiRYNFtkZiRQUk9WSU5TSSA9PSBpLTEgJiBkZiRUQUhVTiA9PSB0LTFdDQogICAgICBkZiRkWDRbZGYkUFJPVklOU0kgPT0gaSAmIGRmJFRBSFVOID09IHRdIDwtIHg0X2l0IC0geDRfaTF0IC0geDRfaXQxICsgeDRfaTF0DQogICAgfQ0KICB9DQogIHJldHVybihkZikNCn0NCmRhdGFwYW5lbCA8LSBrZW1pcw0KY29sbmFtZXMoZGF0YXBhbmVsKVszOjddIDwtIGMoIlkiLCJYMSIsIlgyIiwiWDMiLCJYNCIpDQpkYXRhcGFuZWxfdHJhbnNmb3JtIDwtIHRyYW5zZm9ybV9kYXRhKGRhdGFwYW5lbCkNCmRhdGFwYW5lbF90cmFuc2Zvcm0kUFJPVklOU0kgPC0gYXMuY2hhcmFjdGVyKGRhdGFwYW5lbCRQUk9WSU5TSSkNCmRhdGFwYW5lbF90cmFuc2Zvcm0kUFJPVklOU0kgPC0gYXMuZmFjdG9yKGRhdGFwYW5lbF90cmFuc2Zvcm0kUFJPVklOU0kpDQpkYXRhcGFuZWxfdHJhbnNmb3JtJFRBSFVOIDwtIGFzLmZhY3RvcihkYXRhcGFuZWxfdHJhbnNmb3JtJFRBSFVOKQ0KZGF0YXBhbmVsX3RyYW5zZm9ybSA8LSBkYXRhcGFuZWxfdHJhbnNmb3JtWy1jKDM6NyldDQpgYGANCg0KU2VoaW5nZ2EgZGloYXNpbGthbiBkYXRhIGJhcnU6DQoNCmBgYHtyfQ0KZGF0YXBhbmVsX3RyYW5zZm9ybQ0KYGBgDQoNCk1lcnVwYWthbiBoYXNpbCB0cmFuc2Zvcm1hc2kgZGVuZ2FuIG1ldG9kZSBmaXJzdCBkaWZmZXJlbmNlLiBEYXBhdCBkaWxpaGF0IGp1Z2E6DQoNCmBgYHtyfQ0KZGF0YXBhbmVsX3RyYW5zZm9ybVtpcy5uYShkYXRhcGFuZWxfdHJhbnNmb3JtJGRZKSxdDQpgYGANCg0KVGVybGloYXQgYmFod2EgdW50dWsgc2V0aWFwIHByb3ZpbnNpIHBhZGEgdGFodW4gMjAwOCwgZGloYXNpbGthbiBtaXNzaW5nIHZhbHVlIHlhbmcgZGlzZWJhYmthbiBvbGVoIHByb3NlcyBkaWZmZXJlbmNpbmcuIFNlbGFpbiBpdHUsIEluZGl2aWR1IChQcm92aW5zaSkgQWNlaCBqdWdhIG1lbmdoYXNpbGthbiBtaXNzaW5nIHZhbHVlIHVudHVrIHNlbXVhIHRhaHVubnlhLCBoYWwgaW5pIGthcmVuYSBwcm92aW5zaSBBY2VoIGRpamFkaWthbiBzZWJhZ2FpIHJlZmVyZW5zaSB1bnR1ayBwcm9zZXMgZGlmZmVyZW5jaW5nLiANCg0KU2VsYW5qdXRueWEsIGtpdGEgbGFrdWthbiBhbmFsaXNpcyBGRU0gVHdvIHdheXMgcGFkYSBkYXRhIHlhbmcgdGVsYWggZGl0cmFuc2Zvcm1hc2kNCg0KYGBge3J9DQpmZW1fZmQgPC0gcGxtKGRZIH4gZFgxICsgZFgyICsgZFgzICsgZFg0LCBkYXRhcGFuZWxfdHJhbnNmb3JtLCAgZWZmZWN0ID0gInR3b3dheXMiLA0KICAgICAgICAgICAgICBtb2RlbCA9ICJ3aXRoaW4iLCBpbmRleCA9IGMoIlBST1ZJTlNJIiwiVEFIVU4iKSkNCg0Kc3VtbWFyeShmZW1fZmQpDQpgYGANCg0KIyMgVWppIERpYWdub3N0aWsgU2lzYWFuIHVsYW5nDQoNCiMjIyBVamkgTm9ybWFsaXRhcw0KDQpgYGB7cn0NCnJlczIgPC0gcmVzaWR1YWxzKGZlbV9mZCkNCmphcnF1ZS5iZXJhLnRlc3QocmVzMikNCmBgYA0KDQpgYGB7cn0NCiMgSGlzdG9ncmFtIA0KZ2dwbG90KGFzLmRhdGEuZnJhbWUocmVzMiksIGFlcyh4ID0gcmVzMikpICsNCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBhZnRlcl9zdGF0KGRlbnNpdHkpKSwgY29sb3IgPSAid2hpdGUiLCBmaWxsID0gInN0ZWVsYmx1ZSIpICsNCiAgZ2VvbV9kZW5zaXR5KGNvbG9yID0gInJlZCIsIGxpbmV3aWR0aCA9IDEpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KIyMjIFVqaSBBdXRva29yZWxhc2kNCg0KYGBge3J9DQpwYmd0ZXN0KGZlbV9mZCkNCmBgYA0KDQojIyMgVWppIEtlaG9tb2dlbmFuDQoNCmBgYHtyfQ0KYnB0ZXN0KGZlbV9mZCkNCmBgYA0KRGFyaSBoYXNpbCBkaSBhdGFzLCBkYXBhdCB0ZXJsaWhhdCBiYWh3YSBwLXZhbHVlIGRhcmkgdWppIGBicHRlc3RgID4gMC4wNSB5YW5nIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBhc3Vtc2kga2Vob21vZ2VuYW4gdGVsYWggdGVycGVudWhpIGRhcmkgeWFuZyBzZWJlbHVtbnlhIHRpZGFrLiBBcnRpbnlhLCB0cmFuc2Zvcm1hc2kgaW5pIGJlcmhhc2lsIG1lbmdhdGFzaSBoZXRlcm9nZW5pdGFzIHBhZGEgc2lzYWFuLg0KDQpOYW11biwgcGVybHUgZGlwZXJoYXRpa2FuIGp1Z2EgYmFod2EgcGFkYSBtb2RlbCBzZXRlbGFoIHRyYW5zZm9ybWFzaSwgdGlkYWsgYWRhIHBhcmFtZXRlciB5YW5nIHNpZ25pZmlrYW4gZGVuZ2FuIG5pbGFpIHAtdmFsdWUgdWppIEYgc2ViZXNhciAwLjUyMiA+IDAuMDUgeWFuZyBiZXJhcnRpIG1vZGVsIHRpZGFrIGxheWFrLiBTZWxhaW4gaXR1LCBuaWxhaSBSXjItbnlhIHNhbmdhdCBrZWNpbCB5YWl0dSBzZWJlc2FyIDAuMDA5NzkzMy4gQXJ0aW55YSwgZGFwYXQgZGlrYXRha2FuIGJhaHdhIG1vZGVsIHNlYmVsdW0gdHJhbnNmb3JtYXNpIGxlYmloIGJhaWsgZGVuZ2FuIGFzdW1zaSBob21vZ2VuIHlhbmcgdGlkYWsgdGVycGVudWhpLg0KDQpTYWxhaCBzYXR1IHNvbHVzaSB1bnR1ayBtYXNhbGFoIGluaSBhZGFsYWggdW50dWsgbWVuZ2d1bmFrYW4gdHJhbnNmb3JtYXNpIGxhaW4uIEppa2EgbW9kZWwgeWFuZyBkaWRhcGF0IG9sZWggdHJhbnNmb3JtYXNpIGxhaW4gdGlkYWsgbGViaWggYmFpaywgbWFrYSBzb2x1c2kgYWx0ZXJuYXRpZm55YSBhZGFsYWggZGVuZ2FuIG1lbmdndW5ha2FuIGFuYWxpc2lzIG5vbi1wYXJhbWV0cmlrIHlhbmcgdGlkYWsgbWVtZXJsdWthbiBhc3Vtc2kuDQoNCg==