## Package LibPath Version Priority Depends Imports LinkingTo Suggests
## Enhances License License_is_FOSS License_restricts_use OS_type Archs
## MD5sum NeedsCompilation Built
4.1. Giới thiệu chương
## Kích thước bộ dữ liệu: 2497 dòng và 11 cột
## tibble [2,497 × 11] (S3: tbl_df/tbl/data.frame)
## $ Date : POSIXct[1:2497], format: "2015-01-05" "2015-01-06" ...
## $ VCB : num [1:2497] 16822 17929 17718 18245 19458 ...
## $ MBB : num [1:2497] 4270 4401 4434 4467 4697 ...
## $ BID : num [1:2497] 8197 8388 8642 8642 9214 ...
## $ CTG : num [1:2497] 9134 9200 9463 9266 9529 ...
## $ SHB : num [1:2497] 3922 3984 4181 4230 4230 ...
## $ ACB : num [1:2497] 3780 3820 3985 3989 4042 ...
## $ STB : num [1:2497] 13462 13692 13769 13923 14231 ...
## $ EIB : num [1:2497] 10667 10833 11000 10917 11167 ...
## $ VN_INDEX: num [1:2497] 550 552 553 570 574 ...
## $ RF_daily: num [1:2497] 0.000182 0.000183 0.000183 0.000183 0.00018 ...
## # A tibble: 6 × 10
## Date ret_VCB ret_MBB ret_BID ret_CTG ret_SHB ret_ACB
## <dttm> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2015-01-05 00:00:00 NA NA NA NA NA NA
## 2 2015-01-06 00:00:00 0.0637 0.0303 0.0230 0.00717 0.0156 0.0106
## 3 2015-01-07 00:00:00 -0.0118 0.00742 0.0298 0.0282 0.0482 0.0422
## 4 2015-01-08 00:00:00 0.0293 0.00737 0 -0.0211 0.0117 0.00108
## 5 2015-01-09 00:00:00 0.0644 0.0502 0.0641 0.0280 0 0.0130
## 6 2015-01-12 00:00:00 0.00809 -0.00703 0.0667 0.0137 0.0455 0.0128
## # ℹ 3 more variables: ret_STB <dbl>, ret_EIB <dbl>, ret_VN_INDEX <dbl>
4.2. Thống kê mô tả
## # A tibble: 9 × 8
## asset n mean_ret sd_ret skew_ret kurt_ret mean_ex sd_ex
## <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ACB 2496 0.000769 0.0191 -1.02 12.4 0.000651 0.0191
## 2 BID 2496 0.000610 0.0228 -0.198 2.37 0.000500 0.0228
## 3 CTG 2496 0.000569 0.0217 -0.150 2.30 0.000461 0.0217
## 4 EIB 2496 0.000238 0.0220 -0.0810 3.85 0.000130 0.0220
## 5 MBB 2496 0.000654 0.0193 -0.771 7.23 0.000546 0.0194
## 6 SHB 2496 0.000385 0.0251 -0.0359 4.27 0.000277 0.0251
## 7 STB 2496 0.000404 0.0236 0.00696 1.47 0.000289 0.0236
## 8 VCB 2496 0.000677 0.0181 -0.259 4.76 0.000558 0.0181
## 9 VN_INDEX 2496 0.000335 0.0114 -0.942 4.58 0.000230 0.0114
## ret_VCB ret_MBB ret_BID ret_CTG ret_SHB ret_ACB ret_STB ret_EIB
## ret_VCB 1.000 0.494 0.542 0.561 0.085 0.155 0.398 0.181
## ret_MBB 0.494 1.000 0.608 0.698 0.193 0.293 0.599 0.244
## ret_BID 0.542 0.608 1.000 0.708 0.138 0.220 0.498 0.219
## ret_CTG 0.561 0.698 0.708 1.000 0.146 0.250 0.568 0.284
## ret_SHB 0.085 0.193 0.138 0.146 1.000 0.181 0.189 0.108
## ret_ACB 0.155 0.293 0.220 0.250 0.181 1.000 0.261 0.126
## ret_STB 0.398 0.599 0.498 0.568 0.189 0.261 1.000 0.267
## ret_EIB 0.181 0.244 0.219 0.284 0.108 0.126 0.267 1.000
## ret_VN_INDEX 0.495 0.632 0.548 0.597 0.221 0.313 0.554 0.248
## ret_VN_INDEX
## ret_VCB 0.495
## ret_MBB 0.632
## ret_BID 0.548
## ret_CTG 0.597
## ret_SHB 0.221
## ret_ACB 0.313
## ret_STB 0.554
## ret_EIB 0.248
## ret_VN_INDEX 1.000

4.3. Ước lượng Camp
## # A tibble: 9 × 9
## asset alpha alpha_ci beta beta_ci p_alpha p_beta r_squared n
## <chr> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <dbl> <int>
## 1 VCB 0.0004 [-0.0002, 0.001] 0.788 [0.733… 0.231 0 0.246 2495
## 2 MBB 0.0003 [-0.0003, 0.0009] 1.07 [1.021… 0.320 0 0.399 2495
## 3 BID 0.0002 [-0.0005, 0.001] 1.10 [1.032… 0.518 0 0.301 2495
## 4 CTG 0.0002 [-0.0005, 0.0009] 1.14 [1.075… 0.566 0 0.356 2495
## 5 SHB 0.0002 [-0.0008, 0.0011] 0.489 [0.404… 0.738 0 0.049 2495
## 6 ACB 0.0005 [-0.0002, 0.0012] 0.525 [0.462… 0.144 0 0.0984 2495
## 7 STB 0 [-0.0007, 0.0008] 1.15 [1.080… 0.948 0 0.307 2495
## 8 EIB 0 [-0.0008, 0.0009] 0.479 [0.405… 0.964 0 0.0615 2495
## 9 VN_INDEX 0 [0, 0] 1 [1, 1] 0.237 0 1 2495
Phương trình CAPM cho từng mã
Phương trình tổng quát:
\[
R_{i,t} - R_{f,t} = \hat{\alpha}_i + \hat{\beta}_i \,\big( R_{m,t} -
R_{f,t} \big) + \varepsilon_{i,t}
\]
VCB
\[
R_{\text{VCB},t} - R_{f,t} = 0.0004 + 0.7876 \,\big( R_{m,t} - R_{f,t}
\big)
\]
MBB
\[
R_{\text{MBB},t} - R_{f,t} = 0.0003 + 1.0731 \,\big( R_{m,t} - R_{f,t}
\big)
\]
BID
\[
R_{\text{BID},t} - R_{f,t} = 0.0002 + 1.0987 \,\big( R_{m,t} - R_{f,t}
\big)
\]
CTG
\[
R_{\text{CTG},t} - R_{f,t} = 0.0002 + 1.1352 \,\big( R_{m,t} - R_{f,t}
\big)
\]
SHB
\[
R_{\text{SHB},t} - R_{f,t} = 0.0002 + 0.4887 \,\big( R_{m,t} - R_{f,t}
\big)
\]
ACB
\[
R_{\text{ACB},t} - R_{f,t} = 0.0005 + 0.5253 \,\big( R_{m,t} - R_{f,t}
\big)
\]
STB
\[
R_{\text{STB},t} - R_{f,t} = 0.0000 + 1.1479 \,\big( R_{m,t} - R_{f,t}
\big)
\]
EIB
\[
R_{\text{EIB},t} - R_{f,t} = 0.0000 + 0.4793 \,\big( R_{m,t} - R_{f,t}
\big)
\]
VN_INDEX
\[
R_{\text{VN\_INDEX},t} - R_{f,t} = 0.0000 + 1.0000 \,\big( R_{m,t} -
R_{f,t} \big)
\]
4.4. Lợi suất kì vọng Camp và phân loại định giá
## # A tibble: 9 × 13
## asset alpha alpha_ci beta beta_ci p_alpha p_beta r_squared n mean_ret
## <chr> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <dbl> <int> <dbl>
## 1 VCB 0.0004 [-0.000… 0.788 [0.733… 0.231 0 0.246 2495 0.000677
## 2 MBB 0.0003 [-0.000… 1.07 [1.021… 0.320 0 0.399 2495 0.000654
## 3 BID 0.0002 [-0.000… 1.10 [1.032… 0.518 0 0.301 2495 0.000610
## 4 CTG 0.0002 [-0.000… 1.14 [1.075… 0.566 0 0.356 2495 0.000569
## 5 SHB 0.0002 [-0.000… 0.489 [0.404… 0.738 0 0.049 2495 0.000385
## 6 ACB 0.0005 [-0.000… 0.525 [0.462… 0.144 0 0.0984 2495 0.000769
## 7 STB 0 [-0.000… 1.15 [1.080… 0.948 0 0.307 2495 0.000404
## 8 EIB 0 [-0.000… 0.479 [0.405… 0.964 0 0.0615 2495 0.000238
## 9 VN_INDEX 0 [0, 0] 1 [1, 1] 0.237 0 1 2495 0.000335
## # ℹ 3 more variables: er_capm <dbl>, gap <dbl>, price_flag <chr>

LS0tCnRpdGxlOiAiVMOgaSBjaMOtbmggMiIKYXV0aG9yOiAiUGjhuqFtIFh1w6JuIEhvYW4gIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclSDolTTolUywgJWQgLSAlbSAtICVZJylgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jOiB0cnVlCiAgd29yZF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiAnNCcKICBwZGZfZG9jdW1lbnQ6CiAgICBsYXRleF9lbmdpbmU6IHhlbGF0ZXgKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAoJZWNobyA9IEZBTFNFLAoJbWVzc2FnZSA9IEZBTFNFLAoJd2FybmluZyA9IEZBTFNFCikKYGBgCgo8c3R5bGU+CmJvZHkgewogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE2cHg7CiAgdGV4dC1hbGlnbjoganVzdGlmeTsKICBsaW5lLWhlaWdodDogMS41Owp9CmgyIHsKICBjb2xvcjogcmVkOwp9CmgzIHsKICBjb2xvcjogZGFya2JsdWU7Cn0KPC9zdHlsZT4KCmBgYHtyfQppbnN0YWxsZWQucGFja2FnZXMoInhsc3giKQpsaWJyYXJ5KG9wZW54bHN4KQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShEVCkKbGlicmFyeShwYW5kZXIpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeShza2ltcikKbGlicmFyeShwc3ljaCkKbGlicmFyeShmb3JtYXR0YWJsZSkKbGlicmFyeShodG1sdG9vbHMpCmxpYnJhcnkoRGVzY1Rvb2xzKQpsaWJyYXJ5KGVwaXRvb2xzKQpsaWJyYXJ5KHBST0MpCmxpYnJhcnkoZ2dyZXBlbCkKbGlicmFyeShncmlkRXh0cmEpCmBgYAoKCgojIDQuMS4gR2nhu5tpIHRoaeG7h3UgY2jGsMahbmcKCmBgYHtyfQojID09PT0gNC4xIEdJ4buaSSBUSEnhu4ZVIENIxq/GoE5HID09PT0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKCiMgPT09PSA0LjEgR0nhu5pJIFRISeG7hlUgQ0jGr8agTkcgPT09PQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShyZWFkeGwpCgojIDEuIMSQ4buNYyBmaWxlIEV4Y2VsCmhvYW5nYW5hbHlzaXMgPC0gcmVhZF9leGNlbCgiL1VzZXJzL3BoYW14dWFuaG9hbi9Eb2N1bWVudHMvVGllzILMiXUgbHVhzKPMgm4gL8SQacyjbmggZ2lhzIEgdGHMgGkgc2HMiW4gdGHMgGkgY2hpzIFuaCAyL0R1IGxpZXUgY2h1YW4ueGxzeCIpIHw+CiAgYXJyYW5nZShEYXRlKQoKIyAyLiBYZW0gY+G6pXUgdHLDumMgZOG7ryBsaeG7h3UKY2F0KCJLw61jaCB0aMaw4bubYyBi4buZIGThu68gbGnhu4d1OiIsIG5yb3coaG9hbmdhbmFseXNpcyksICJkw7JuZyB2w6AiLCBuY29sKGhvYW5nYW5hbHlzaXMpLCAiY+G7mXRcbiIpCnN0cihob2FuZ2FuYWx5c2lzKQoKIyAzLiBEYW5oIHPDoWNoIG3DoyBj4buVIHBoaeG6v3UgKGxv4bqhaSBi4buPIGPhu5l0IGNo4buJIHPhu5EgJiBSRikKdGlja2VycyA8LSBzZXRkaWZmKG5hbWVzKGhvYW5nYW5hbHlzaXMpLCBjKCJEYXRlIiwgIlZOX0lOREVYIiwgIlJGX2RhaWx5IikpCgojIDQuIFTDrW5oIGzhu6NpIHN14bqldCBsb2cgY2hvIHThu6tuZyBtw6MgJiBWTl9JTkRFWApyZXR1cm5zIDwtIGhvYW5nYW5hbHlzaXMgfD4KICBtdXRhdGUoYWNyb3NzKGFsbF9vZihjKHRpY2tlcnMsICJWTl9JTkRFWCIpKSwKICAgICAgICAgICAgICAgIH4gbG9nKC54IC8gbGFnKC54KSksIC5uYW1lcyA9ICJyZXRfey5jb2x9IikpIHw+CiAgc2VsZWN0KERhdGUsIHN0YXJ0c193aXRoKCJyZXRfIikpCgojIDUuIELhuqNuZyBs4bujaSBzdeG6pXQgKDYgZMOybmcgxJHhuqd1KQpoZWFkKHJldHVybnMpCgoKYGBgCgojIDQuMi4gVGjhu5FuZyBrw6ogbcO0IHThuqMKCmBgYHtyfQojID09PT0gNC4yIFRI4buQTkcgS8OKIE3DlCBU4bqiIChraMO0bmcgY+G6p24gaG9hbmdhbmFseXNpc19sb25nIOG7nyA0LjEpID09PT0KbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShlMTA3MSkKbGlicmFyeShnZ3Bsb3QyKQoKIyAwKSBYw6FjIMSR4buLbmggY8OhYyBj4buZdCBs4bujaSBzdeG6pXQKcmV0X2NvbHMgPC0gZ3JlcCgiXnJldF8iLCBuYW1lcyhyZXR1cm5zKSwgdmFsdWUgPSBUUlVFKQoKIyAxKSBU4bqhbyBk4buvIGxp4buHdSBMT05HIHThuqFpIMSRw6J5IChrw6htIHJtLCByZiB2w6AgZXhjZXNzKQojICAgIC0gcm06IGzhu6NpIHN14bqldCB0aOG7iyB0csaw4budbmcgPSByZXRfVk5fSU5ERVggKMSRw6MgY8OzIHRyb25nICdyZXR1cm5zJykKIyAgICAtIHJmOiBsw6NpIHN14bqldCBwaGkgcuG7p2kgcm8gdOG7qyBj4buZdCBSRl9kYWlseSBj4bunYSAnaG9hbmdhbmFseXNpcycKaG9hbmdhbmFseXNpc19sb25nIDwtIHJldHVybnMgJT4lCiAgbXV0YXRlKAogICAgcmYgICAgICAgID0gaG9hbmdhbmFseXNpcyRSRl9kYWlseSwKICAgIHJtICAgICAgICA9IC5kYXRhW1sicmV0X1ZOX0lOREVYIl1dLAogICAgcm1fZXhjZXNzID0gcm0gLSByZgogICkgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyAgICAgID0gYWxsX29mKHJldF9jb2xzKSwKICAgIG5hbWVzX3RvICA9ICJhc3NldCIsCiAgICB2YWx1ZXNfdG8gPSAicmkiCiAgKSAlPiUKICBtdXRhdGUoCiAgICBhc3NldCAgICAgPSBnc3ViKCJecmV0XyIsICIiLCBhc3NldCksCiAgICByaV9leGNlc3MgPSByaSAtIHJmCiAgKQoKIyAyKSBUaOG7kW5nIGvDqiBtw7QgdOG6oyB0aGVvIG3DowpkZXNjX3RibCA8LSBob2FuZ2FuYWx5c2lzX2xvbmcgJT4lCiAgZ3JvdXBfYnkoYXNzZXQpICU+JQogIHN1bW1hcmlzZSgKICAgIG4gICAgICAgID0gc3VtKCFpcy5uYShyaSkpLAogICAgbWVhbl9yZXQgPSBtZWFuKHJpLCBuYS5ybSA9IFRSVUUpLAogICAgc2RfcmV0ICAgPSBzZChyaSwgbmEucm0gPSBUUlVFKSwKICAgIHNrZXdfcmV0ID0gc2tld25lc3MocmksIG5hLnJtID0gVFJVRSksCiAgICBrdXJ0X3JldCA9IGt1cnRvc2lzKHJpLCBuYS5ybSA9IFRSVUUpLAogICAgbWVhbl9leCAgPSBtZWFuKHJpX2V4Y2VzcywgbmEucm0gPSBUUlVFKSwKICAgIHNkX2V4ICAgID0gc2QocmlfZXhjZXNzLCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyAgPSAiZHJvcCIKICApCgpwcmludChkZXNjX3RibCkKCiMgMykgTWEgdHLhuq1uIHTGsMahbmcgcXVhbiBnaeG7r2EgY8OhYyBs4bujaSBzdeG6pXQgKGJhbyBn4buTbSB0aOG7iyB0csaw4budbmcpCnJldF93aWRlIDwtIHJldHVybnMgJT4lCiAgZHBseXI6OnNlbGVjdChhbGxfb2YocmV0X2NvbHMpKSAlPiUKICB0aWR5cjo6ZHJvcF9uYSgpCgpwcmludChyb3VuZChjb3IocmV0X3dpZGUsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwgMykpCgojIDQpIEJp4buDdSDEkeG7kyBs4bujaSBzdeG6pXQgdGjhu4sgdHLGsOG7nW5nIFZOX0lOREVYIHRoZW8gbmfDoHkKZ2dwbG90KAogIGRhdGEgPSB0aWJibGUoRGF0ZSA9IGhvYW5nYW5hbHlzaXMkRGF0ZSwgcm0gPSByZXR1cm5zJHJldF9WTl9JTkRFWCksCiAgYWVzKHggPSBEYXRlLCB5ID0gcm0pCikgKwogIGdlb21fbGluZSgpICsKICBsYWJzKAogICAgdGl0bGUgPSAiTOG7o2kgc3XhuqV0IG5nw6B5IGPhu6dhIFZOX0lOREVYIChsb2ctcmV0dXJuKSIsCiAgICB4ID0gIk5nw6B5IiwgeSA9ICJybSIKICApICsKICB0aGVtZV9taW5pbWFsKCkKCmBgYAoKCiMgNC4zLiDGr+G7m2MgbMaw4bujbmcgQ2FtcAoKYGBge3J9CiMgPT09PSA0LjMgxq/hu5pDIEzGr+G7ok5HIENBUE0gKGzDoG0gdHLDsm4gNCBjaOG7ryBz4buRIHRo4bqtcCBwaMOibikgPT09PQpsaWJyYXJ5KGJyb29tKQpsaWJyYXJ5KHB1cnJyKQpvcHRpb25zKHNjaXBlbiA9IDk5OSkgIyB0csOhbmggZOG6oW5nIGtob2EgaOG7jWMKCiMgRGFuaCBzw6FjaCBtw6MKdGlja2VycyA8LSB1bmlxdWUoaG9hbmdhbmFseXNpc19sb25nJGFzc2V0KQoKIyBIw6BtIMaw4bubYyBsxrDhu6NuZyBDQVBNIGNobyAxIG3DowpmaXRfY2FwbV9vbmUgPC0gZnVuY3Rpb24oc3ltKSB7CiAgZGYgPC0gaG9hbmdhbmFseXNpc19sb25nIHw+IGZpbHRlcihhc3NldCA9PSBzeW0pIHw+IGRyb3BfbmEocmlfZXhjZXNzLCBybV9leGNlc3MpCiAgaWYgKG5yb3coZGYpIDwgMTApIHJldHVybihOVUxMKQogIAogIG0gPC0gbG0ocmlfZXhjZXNzIH4gcm1fZXhjZXNzLCBkYXRhID0gZGYpCiAgdGQgPC0gdGlkeShtLCBjb25mLmludCA9IFRSVUUpCiAgCiAgdGliYmxlKAogICAgYXNzZXQgICAgPSBzeW0sCiAgICBhbHBoYSAgICA9IHJvdW5kKHRkJGVzdGltYXRlW3RkJHRlcm0gPT0gIihJbnRlcmNlcHQpIl0sIDQpLAogICAgYWxwaGFfY2kgPSBwYXN0ZTAoIlsiLAogICAgICAgICAgICAgICAgICAgICAgcm91bmQodGQkY29uZi5sb3dbdGQkdGVybSA9PSAiKEludGVyY2VwdCkiXSwgNCksICIsICIsCiAgICAgICAgICAgICAgICAgICAgICByb3VuZCh0ZCRjb25mLmhpZ2hbdGQkdGVybSA9PSAiKEludGVyY2VwdCkiXSwgNCksICJdIiksCiAgICBiZXRhICAgICA9IHJvdW5kKHRkJGVzdGltYXRlW3RkJHRlcm0gPT0gInJtX2V4Y2VzcyJdLCA0KSwKICAgIGJldGFfY2kgID0gcGFzdGUwKCJbIiwKICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKHRkJGNvbmYubG93W3RkJHRlcm0gPT0gInJtX2V4Y2VzcyJdLCA0KSwgIiwgIiwKICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKHRkJGNvbmYuaGlnaFt0ZCR0ZXJtID09ICJybV9leGNlc3MiXSwgNCksICJdIiksCiAgICBwX2FscGhhICA9IHJvdW5kKHRkJHAudmFsdWVbdGQkdGVybSA9PSAiKEludGVyY2VwdCkiXSwgNCksCiAgICBwX2JldGEgICA9IHJvdW5kKHRkJHAudmFsdWVbdGQkdGVybSA9PSAicm1fZXhjZXNzIl0sIDQpLAogICAgcl9zcXVhcmVkID0gcm91bmQoZ2xhbmNlKG0pJHIuc3F1YXJlZCwgNCksCiAgICBuICAgICAgICA9IG5vYnMobSkKICApCn0KCiMgQ2jhuqF5IGNobyB04bqldCBj4bqjIG3DowpjYXBtX3RibCA8LSBtYXBfZGZyKHRpY2tlcnMsIGZpdF9jYXBtX29uZSkKCiMgSGnhu4NuIHRo4buLCnByaW50KGNhcG1fdGJsLCBuID0gbnJvdyhjYXBtX3RibCkpCgoKYGBgCgoqKlBoxrDGoW5nIHRyw6xuaCBDQVBNIGNobyB04burbmcgbcOjKioKClBoxrDGoW5nIHRyw6xuaCB04buVbmcgcXXDoXQ6CgokJApSX3tpLHR9IC0gUl97Zix0fSA9IFxoYXR7XGFscGhhfV9pICsgXGhhdHtcYmV0YX1faSBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpICsgXHZhcmVwc2lsb25fe2ksdH0KJCQKCioqVkNCKiogIAokJApSX3tcdGV4dHtWQ0J9LHR9IC0gUl97Zix0fSA9IDAuMDAwNCArIDAuNzg3NiBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoqKk1CQioqICAKJCQKUl97XHRleHR7TUJCfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDMgKyAxLjA3MzEgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKKipCSUQqKiAgCiQkClJfe1x0ZXh0e0JJRH0sdH0gLSBSX3tmLHR9ID0gMC4wMDAyICsgMS4wOTg3IFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykKJCQKCioqQ1RHKiogIAokJApSX3tcdGV4dHtDVEd9LHR9IC0gUl97Zix0fSA9IDAuMDAwMiArIDEuMTM1MiBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoqKlNIQioqICAKJCQKUl97XHRleHR7U0hCfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDIgKyAwLjQ4ODcgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKKipBQ0IqKiAgCiQkClJfe1x0ZXh0e0FDQn0sdH0gLSBSX3tmLHR9ID0gMC4wMDA1ICsgMC41MjUzIFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykKJCQKCioqU1RCKiogIAokJApSX3tcdGV4dHtTVEJ9LHR9IC0gUl97Zix0fSA9IDAuMDAwMCArIDEuMTQ3OSBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoqKkVJQioqICAKJCQKUl97XHRleHR7RUlCfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDAgKyAwLjQ3OTMgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKKipWTl9JTkRFWCoqICAKJCQKUl97XHRleHR7Vk5cX0lOREVYfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDAgKyAxLjAwMDAgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKCiMgNC40LiBM4bujaSBzdeG6pXQga8OsIHbhu41uZyBDYW1wIHbDoCBwaMOibiBsb+G6oWkgxJHhu4tuaCBnacOhCgpgYGB7cn0KIyA9PT09IDQuNCBM4buiSSBTVeG6pFQgS+G7siBW4buMTkcgQ0FQTSAmIFBIw4JOIExP4bqgSSDEkOG7ik5IIEdJw4EgPT09PQpsaWJyYXJ5KGdncmVwZWwpCgpyZl9iYXIgICAgPC0gbWVhbihob2FuZ2FuYWx5c2lzX2xvbmckcmYsIG5hLnJtID0gVFJVRSkKbWt0X2V4YmFyIDwtIG1lYW4oaG9hbmdhbmFseXNpc19sb25nJHJtX2V4Y2VzcywgbmEucm0gPSBUUlVFKQoKbWVhbl9yZWFsaXplZCA8LSBob2FuZ2FuYWx5c2lzX2xvbmcgJT4lCiAgZ3JvdXBfYnkoYXNzZXQpICU+JQogIHN1bW1hcmlzZShtZWFuX3JldCA9IG1lYW4ocmksIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpCgpjYXBtX2V2YWwgPC0gY2FwbV90YmwgJT4lCiAgbGVmdF9qb2luKG1lYW5fcmVhbGl6ZWQsIGJ5ID0gImFzc2V0IikgJT4lCiAgbXV0YXRlKAogICAgZXJfY2FwbSA9IHJmX2JhciArIGJldGEgKiBta3RfZXhiYXIsCiAgICBnYXAgICAgID0gbWVhbl9yZXQgLSBlcl9jYXBtLAogICAgcHJpY2VfZmxhZyA9IGNhc2Vfd2hlbigKICAgICAgZ2FwID4gMCAgfiAiVW5kZXJwcmljZWQiLAogICAgICBnYXAgPCAwICB+ICJPdmVycHJpY2VkIiwKICAgICAgVFJVRSAgICAgfiAiRmFpcmx5IHByaWNlZCIKICAgICkKICApCgpwcmludChjYXBtX2V2YWwpCgojIFNlY3VyaXR5IE1hcmtldCBMaW5lOiBjaOG6pW0gxJFlbiA9IEVbUl9pXV9DQVBNLCB2w7JuZyB0csOybiB0cuG6r25nID0gbWVhbl9yZXQKZ2dwbG90KGNhcG1fZXZhbCwgYWVzKHggPSBiZXRhKSkgKwogIGdlb21fYWJsaW5lKGludGVyY2VwdCA9IHJmX2Jhciwgc2xvcGUgPSBta3RfZXhiYXIpICsKICBnZW9tX3BvaW50KGFlcyh5ID0gZXJfY2FwbSksIHNpemUgPSAyKSArICAgICAgICAgICAgICAgICAgICAgIyDEkWnhu4NtIMSRZW4gKEVbUmldX0NBUE0pCiAgZ2VvbV9wb2ludChhZXMoeSA9IG1lYW5fcmV0KSwgc2hhcGUgPSAxLCBzaXplID0gMiwgc3Ryb2tlID0gMSkgKyAgIyDEkWnhu4NtIHRy4bqvbmcgKG1lYW5fcmV0KQogIGdlb21fdGV4dChhZXMoeSA9IG1lYW5fcmV0LCBsYWJlbCA9IGFzc2V0KSwgICAgICAgICAgICAgICAgICAjIDwtLSBOSMODTiBUUsOKTiDEkEnhu4JNIFRS4bquTkcKICAgICAgICAgICAgdmp1c3QgPSAtMC45LCBzaXplID0gMywgY2hlY2tfb3ZlcmxhcCA9IFRSVUUpICsKICBsYWJzKHRpdGxlID0gIlNlY3VyaXR5IE1hcmtldCBMaW5lIiwKICAgICAgIHggPSAiQmV0YSIsIHkgPSAiUmV0dXJuIikgKwogIHRoZW1lX21pbmltYWwoKQoKYGBgCgoKCgoKCg==