## 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 × 9
## 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
## # ℹ 2 more variables: ret_STB <dbl>, ret_EIB <dbl>
4.2. Thống kê mô tả
## # A tibble: 2 × 9
## variable n mean sd skew kurt min p50 max
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 RF_daily 2496 0.0001 0.0001 -0.119 -1.17 0 0.0001 0.0002
## 2 VN_INDEX 2497 978. 261. -0.0058 -0.94 522. 983. 1529.
## # A tibble: 10 × 8
## asset n mean_ret sd_ret skew_ret kurt_ret mean_ex sd_ex
## <chr> <dbl> <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 RF_daily 2496 0.0001 0.0001 -0.119 -1.17 NA NA
## 10 VN_INDEX 2497 978. 261. -0.0058 -0.94 NA NA
## 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
4.3. Ước lượng Camp
## # A tibble: 8 × 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.7334, … 0.231 0 0.246 2495
## 2 MBB 0.0003 [-0.0003, 0.0009] 1.07 [1.0214, … 0.320 0 0.399 2495
## 3 BID 0.0002 [-0.0005, 0.001] 1.10 [1.0329, … 0.518 0 0.301 2495
## 4 CTG 0.0002 [-0.0005, 0.0009] 1.14 [1.0753, … 0.566 0 0.356 2495
## 5 SHB 0.0002 [-0.0008, 0.0011] 0.489 [0.4042, … 0.738 0 0.049 2495
## 6 ACB 0.0005 [-0.0002, 0.0012] 0.525 [0.4629, … 0.144 0 0.0984 2495
## 7 STB 0 [-0.0007, 0.0008] 1.15 [1.0802, … 0.948 0 0.307 2495
## 8 EIB 0 [-0.0008, 0.0009] 0.479 [0.4057, … 0.964 0 0.0615 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)
\]
4.4. Lợi suất kì vọng Camp và phân loại định giá
## # A tibble: 8 × 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.0002, … 0.788 [0.733… 0.231 0 0.246 2495 0.000677
## 2 MBB 0.0003 [-0.0003, … 1.07 [1.021… 0.320 0 0.399 2495 0.000654
## 3 BID 0.0002 [-0.0005, … 1.10 [1.032… 0.518 0 0.301 2495 0.000610
## 4 CTG 0.0002 [-0.0005, … 1.14 [1.075… 0.566 0 0.356 2495 0.000569
## 5 SHB 0.0002 [-0.0008, … 0.489 [0.404… 0.738 0 0.049 2495 0.000385
## 6 ACB 0.0005 [-0.0002, … 0.525 [0.462… 0.144 0 0.0984 2495 0.000769
## 7 STB 0 [-0.0007, … 1.15 [1.080… 0.948 0 0.307 2495 0.000404
## 8 EIB 0 [-0.0008, … 0.479 [0.405… 0.964 0 0.0615 2495 0.000238
## # ℹ 3 more variables: er_capm <dbl>, gap <dbl>, price_flag <chr>

LS0tCnRpdGxlOiAiVMOgaSBjaMOtbmggMiIKYXV0aG9yOiAiUGjhuqFtIFh1w6JuIEhvYW4gIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclSDolTTolUywgJWQgLSAlbSAtICVZJylgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jOiB0cnVlCiAgd29yZF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiAnNCcKICBwZGZfZG9jdW1lbnQ6CiAgICBsYXRleF9lbmdpbmU6IHhlbGF0ZXgKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAoJZWNobyA9IEZBTFNFLAoJbWVzc2FnZSA9IEZBTFNFLAoJd2FybmluZyA9IEZBTFNFCikKYGBgCgo8c3R5bGU+CmJvZHkgewogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE2cHg7CiAgdGV4dC1hbGlnbjoganVzdGlmeTsKICBsaW5lLWhlaWdodDogMS41Owp9CmgyIHsKICBjb2xvcjogcmVkOwp9CmgzIHsKICBjb2xvcjogZGFya2JsdWU7Cn0KPC9zdHlsZT4KCmBgYHtyfQppbnN0YWxsZWQucGFja2FnZXMoInhsc3giKQpsaWJyYXJ5KG9wZW54bHN4KQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShEVCkKbGlicmFyeShwYW5kZXIpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeShza2ltcikKbGlicmFyeShwc3ljaCkKbGlicmFyeShmb3JtYXR0YWJsZSkKbGlicmFyeShodG1sdG9vbHMpCmxpYnJhcnkoRGVzY1Rvb2xzKQpsaWJyYXJ5KGVwaXRvb2xzKQpsaWJyYXJ5KHBST0MpCmxpYnJhcnkoZ2dyZXBlbCkKbGlicmFyeShncmlkRXh0cmEpCmBgYAoKCgojIDQuMS4gR2nhu5tpIHRoaeG7h3UgY2jGsMahbmcKCmBgYHtyfQojID09PT0gNC4xIEdJ4buaSSBUSEnhu4ZVIENIxq/GoE5HID09PT0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKCiMgPT09PSA0LjEgR0nhu5pJIFRISeG7hlUgQ0jGr8agTkcgPT09PQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShyZWFkeGwpCgojIDEuIMSQ4buNYyBmaWxlIEV4Y2VsCmhvYW5nYW5hbHlzaXMgPC0gcmVhZF9leGNlbCgiL1VzZXJzL3BoYW14dWFuaG9hbi9Eb2N1bWVudHMvVGllzILMiXUgbHVhzKPMgm4gL8SQacyjbmggZ2lhzIEgdGHMgGkgc2HMiW4gdGHMgGkgY2hpzIFuaCAyL0R1IGxpZXUgY2h1YW4ueGxzeCIpIHw+CiAgYXJyYW5nZShEYXRlKQoKIyAyLiBYZW0gY+G6pXUgdHLDumMgZOG7ryBsaeG7h3UKY2F0KCJLw61jaCB0aMaw4bubYyBi4buZIGThu68gbGnhu4d1OiIsIG5yb3coaG9hbmdhbmFseXNpcyksICJkw7JuZyB2w6AiLCBuY29sKGhvYW5nYW5hbHlzaXMpLCAiY+G7mXRcbiIpCnN0cihob2FuZ2FuYWx5c2lzKQoKIyAzLiBEYW5oIHPDoWNoIG3DoyBj4buVIHBoaeG6v3UgKGxv4bqhaSBi4buPIGPhu5l0IGNo4buJIHPhu5EgJiBSRikKdGlja2VycyA8LSBzZXRkaWZmKG5hbWVzKGhvYW5nYW5hbHlzaXMpLCBjKCJEYXRlIiwgIlZOX0lOREVYIikpCgojIDQuMSDigJQgdMOtbmggbOG7o2kgc3XhuqV0OiBLSMOUTkcgdMOtbmggY2hvIFZOX0lOREVYICYgUkZfZGFpbHkKdGlja2VycyA8LSBzZXRkaWZmKG5hbWVzKGhvYW5nYW5hbHlzaXMpLCBjKCJEYXRlIiwgIlZOX0lOREVYIiwgIlJGX2RhaWx5IikpCgojIENI4buIIHTDrW5oIHJldF8qIGNobyBjw6FjIG3DoyBj4buVIHBoaeG6v3UKcmV0dXJucyA8LSBob2FuZ2FuYWx5c2lzIHw+CiAgbXV0YXRlKGFjcm9zcyhhbGxfb2YodGlja2VycyksCiAgICAgICAgICAgICAgICB+IGxvZygueCAvIGxhZygueCkpLCAubmFtZXMgPSAicmV0X3suY29sfSIpKSB8PgogIHNlbGVjdChEYXRlLCBzdGFydHNfd2l0aCgicmV0XyIpKQoKIyBUw61uaCBybSB2w6AgcmYgUknDik5HIChraMO0bmcgdOG6oW8gcmV0X1ZOX0lOREVYKQpob2FuZ2FuYWx5c2lzIDwtIGhvYW5nYW5hbHlzaXMgfD4KICBtdXRhdGUoCiAgICByZiA9IFJGX2RhaWx5LAogICAgcm0gPSBsb2coVk5fSU5ERVggLyBsYWcoVk5fSU5ERVgpKSwgICAjIGzhu6NpIHN14bqldCB0aOG7iyB0csaw4budbmcKICAgIHJtX2V4Y2VzcyA9IHJtIC0gcmYKICApCgojIDUuIELhuqNuZyBs4bujaSBzdeG6pXQgKDYgZMOybmcgxJHhuqd1KQpoZWFkKHJldHVybnMpCgoKYGBgCgojIDQuMi4gVGjhu5FuZyBrw6ogbcO0IHThuqMKCmBgYHtyfQojID09PT0gNC4yIFRI4buQTkcgS8OKIE3DlCBU4bqiIChraMO0bmcgY+G6p24gaG9hbmdhbmFseXNpc19sb25nIOG7nyA0LjEpID09PT0KbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShlMTA3MSkKbGlicmFyeShnZ3Bsb3QyKQoKIyAoQSkgVGjhu5FuZyBrw6ogbcO0IHThuqMgY2hvIFZOX0lOREVYICYgUkZfZGFpbHkgKGxldmVsLCBraMO0bmcgcGjhuqNpIHJldHVybikKdm5fcmZfZGVzYyA8LSBob2FuZ2FuYWx5c2lzIHw+CiAgZHBseXI6OnNlbGVjdChWTl9JTkRFWCwgUkZfZGFpbHkpIHw+CiAgdGlkeXI6OnBpdm90X2xvbmdlcihldmVyeXRoaW5nKCksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgfD4KICBkcGx5cjo6Z3JvdXBfYnkodmFyaWFibGUpIHw+CiAgZHBseXI6OnN1bW1hcmlzZSgKICAgIG4gICAgPSBzdW0oIWlzLm5hKHZhbHVlKSksCiAgICBtZWFuID0gbWVhbih2YWx1ZSwgbmEucm0gPSBUUlVFKSwKICAgIHNkICAgPSBzZCh2YWx1ZSwgICBuYS5ybSA9IFRSVUUpLAogICAgc2tldyA9IGUxMDcxOjpza2V3bmVzcyh2YWx1ZSwgbmEucm0gPSBUUlVFKSwKICAgIGt1cnQgPSBlMTA3MTo6a3VydG9zaXModmFsdWUsIG5hLnJtID0gVFJVRSksCiAgICBtaW4gID0gbWluKHZhbHVlLCAgbmEucm0gPSBUUlVFKSwKICAgIHA1MCAgPSBtZWRpYW4odmFsdWUsIG5hLnJtID0gVFJVRSksCiAgICBtYXggID0gbWF4KHZhbHVlLCAgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICApIHw+CiAgZHBseXI6Om11dGF0ZShkcGx5cjo6YWNyb3NzKHdoZXJlKGlzLm51bWVyaWMpLCB+IHJvdW5kKC54LCA0KSkpCgpwcmludCh2bl9yZl9kZXNjKQoKIyAwKSBYw6FjIMSR4buLbmggY8OhYyBj4buZdCBs4bujaSBzdeG6pXQKcmV0X2NvbHMgPC0gZ3JlcCgiXnJldF8iLCBuYW1lcyhyZXR1cm5zKSwgdmFsdWUgPSBUUlVFKQoKIyAxKSBU4bqhbyBk4buvIGxp4buHdSBMT05HIHThuqFpIMSRw6J5IChrw6htIHJtLCByZiB2w6AgZXhjZXNzKQojICAgIC0gcm06IGzhu6NpIHN14bqldCB0aOG7iyB0csaw4budbmcgPSByZXRfVk5fSU5ERVggKMSRw6MgY8OzIHRyb25nICdyZXR1cm5zJykKIyAgICAtIHJmOiBsw6NpIHN14bqldCBwaGkgcuG7p2kgcm8gdOG7qyBj4buZdCBSRl9kYWlseSBj4bunYSAnaG9hbmdhbmFseXNpcycKCgpob2FuZ2FuYWx5c2lzX2xvbmcgPC0gcmV0dXJucyAlPiUKICBtdXRhdGUoCiAgICByZiAgICAgICAgPSBob2FuZ2FuYWx5c2lzJFJGX2RhaWx5LAogICBybSA9IGhvYW5nYW5hbHlzaXMkcm0sCiAgICBybV9leGNlc3MgPSBybSAtIHJmCiAgKSAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzICAgICAgPSBhbGxfb2YocmV0X2NvbHMpLAogICAgbmFtZXNfdG8gID0gImFzc2V0IiwKICAgIHZhbHVlc190byA9ICJyaSIKICApICU+JQogIG11dGF0ZSgKICAgIGFzc2V0ICAgICA9IGdzdWIoIl5yZXRfIiwgIiIsIGFzc2V0KSwKICAgIHJpX2V4Y2VzcyA9IHJpIC0gcmYKICApCgojIDIpIFRo4buRbmcga8OqIG3DtCB04bqjIHRoZW8gbcOjCmRlc2NfdGJsIDwtIGhvYW5nYW5hbHlzaXNfbG9uZyAlPiUKICBncm91cF9ieShhc3NldCkgJT4lCiAgc3VtbWFyaXNlKAogICAgbiAgICAgICAgPSBzdW0oIWlzLm5hKHJpKSksCiAgICBtZWFuX3JldCA9IG1lYW4ocmksIG5hLnJtID0gVFJVRSksCiAgICBzZF9yZXQgICA9IHNkKHJpLCBuYS5ybSA9IFRSVUUpLAogICAgc2tld19yZXQgPSBza2V3bmVzcyhyaSwgbmEucm0gPSBUUlVFKSwKICAgIGt1cnRfcmV0ID0ga3VydG9zaXMocmksIG5hLnJtID0gVFJVRSksCiAgICBtZWFuX2V4ICA9IG1lYW4ocmlfZXhjZXNzLCBuYS5ybSA9IFRSVUUpLAogICAgc2RfZXggICAgPSBzZChyaV9leGNlc3MsIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzICA9ICJkcm9wIgogICkKCnByaW50KAogIGRwbHlyOjpiaW5kX3Jvd3MoCiAgICBkZXNjX3RibCwKICAgIHZuX3JmX2Rlc2MgJT4lIGRwbHlyOjp0cmFuc211dGUoCiAgICAgIGFzc2V0ICAgID0gdmFyaWFibGUsCiAgICAgIG4gICAgICAgID0gbiwgICAgICAgICAgICAgICAgICMgaG/hurdjOiBuID0gbiAtIDFMIMSR4buDIGto4bubcCBz4buRIGvhu7MgduG7m2kgcmV0dXJucwogICAgICBtZWFuX3JldCA9IG1lYW4sCiAgICAgIHNkX3JldCAgID0gc2QsCiAgICAgIHNrZXdfcmV0ID0gc2tldywKICAgICAga3VydF9yZXQgPSBrdXJ0LAogICAgICBtZWFuX2V4ICA9IE5BX3JlYWxfLAogICAgICBzZF9leCAgICA9IE5BX3JlYWxfCiAgICApCiAgKQopCgojIDMpIE1hIHRy4bqtbiB0xrDGoW5nIHF1YW4gZ2nhu69hIGPDoWMgbOG7o2kgc3XhuqV0IChiYW8gZ+G7k20gdGjhu4sgdHLGsOG7nW5nKQpyZXRfd2lkZSA8LSByZXR1cm5zICU+JQogIGRwbHlyOjpzZWxlY3QoYWxsX29mKHJldF9jb2xzKSkgJT4lCiAgdGlkeXI6OmRyb3BfbmEoKQoKcHJpbnQocm91bmQoY29yKHJldF93aWRlLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksIDMpKQoKYGBgCgoKIyA0LjMuIMav4bubYyBsxrDhu6NuZyBDYW1wCgpgYGB7cn0KIyA9PT09IDQuMyDGr+G7mkMgTMav4buiTkcgQ0FQTSAobMOgbSB0csOybiA0IGNo4buvIHPhu5EgdGjhuq1wIHBow6JuKSA9PT09CmxpYnJhcnkoYnJvb20pCmxpYnJhcnkocHVycnIpCm9wdGlvbnMoc2NpcGVuID0gOTk5KSAjIHRyw6FuaCBk4bqhbmcga2hvYSBo4buNYwoKIyBEYW5oIHPDoWNoIG3Dowp0aWNrZXJzIDwtIHVuaXF1ZShob2FuZ2FuYWx5c2lzX2xvbmckYXNzZXQpCgojIEjDoG0gxrDhu5tjIGzGsOG7o25nIENBUE0gY2hvIDEgbcOjCmZpdF9jYXBtX29uZSA8LSBmdW5jdGlvbihzeW0pIHsKICBkZiA8LSBob2FuZ2FuYWx5c2lzX2xvbmcgfD4gZmlsdGVyKGFzc2V0ID09IHN5bSkgfD4gZHJvcF9uYShyaV9leGNlc3MsIHJtX2V4Y2VzcykKICBpZiAobnJvdyhkZikgPCAxMCkgcmV0dXJuKE5VTEwpCiAgCiAgbSA8LSBsbShyaV9leGNlc3MgfiBybV9leGNlc3MsIGRhdGEgPSBkZikKICB0ZCA8LSB0aWR5KG0sIGNvbmYuaW50ID0gVFJVRSkKICAKICB0aWJibGUoCiAgICBhc3NldCAgICA9IHN5bSwKICAgIGFscGhhICAgID0gcm91bmQodGQkZXN0aW1hdGVbdGQkdGVybSA9PSAiKEludGVyY2VwdCkiXSwgNCksCiAgICBhbHBoYV9jaSA9IHBhc3RlMCgiWyIsCiAgICAgICAgICAgICAgICAgICAgICByb3VuZCh0ZCRjb25mLmxvd1t0ZCR0ZXJtID09ICIoSW50ZXJjZXB0KSJdLCA0KSwgIiwgIiwKICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKHRkJGNvbmYuaGlnaFt0ZCR0ZXJtID09ICIoSW50ZXJjZXB0KSJdLCA0KSwgIl0iKSwKICAgIGJldGEgICAgID0gcm91bmQodGQkZXN0aW1hdGVbdGQkdGVybSA9PSAicm1fZXhjZXNzIl0sIDQpLAogICAgYmV0YV9jaSAgPSBwYXN0ZTAoIlsiLAogICAgICAgICAgICAgICAgICAgICAgcm91bmQodGQkY29uZi5sb3dbdGQkdGVybSA9PSAicm1fZXhjZXNzIl0sIDQpLCAiLCAiLAogICAgICAgICAgICAgICAgICAgICAgcm91bmQodGQkY29uZi5oaWdoW3RkJHRlcm0gPT0gInJtX2V4Y2VzcyJdLCA0KSwgIl0iKSwKICAgIHBfYWxwaGEgID0gcm91bmQodGQkcC52YWx1ZVt0ZCR0ZXJtID09ICIoSW50ZXJjZXB0KSJdLCA0KSwKICAgIHBfYmV0YSAgID0gcm91bmQodGQkcC52YWx1ZVt0ZCR0ZXJtID09ICJybV9leGNlc3MiXSwgNCksCiAgICByX3NxdWFyZWQgPSByb3VuZChnbGFuY2UobSkkci5zcXVhcmVkLCA0KSwKICAgIG4gICAgICAgID0gbm9icyhtKQogICkKfQoKIyBDaOG6oXkgY2hvIHThuqV0IGPhuqMgbcOjCmNhcG1fdGJsIDwtIG1hcF9kZnIodGlja2VycywgZml0X2NhcG1fb25lKQoKIyBIaeG7g24gdGjhu4sKcHJpbnQoY2FwbV90YmwsIG4gPSBucm93KGNhcG1fdGJsKSkKCgpgYGAKCioqUGjGsMahbmcgdHLDrG5oIENBUE0gY2hvIHThu6tuZyBtw6MqKgoKUGjGsMahbmcgdHLDrG5oIHThu5VuZyBxdcOhdDoKCiQkClJfe2ksdH0gLSBSX3tmLHR9ID0gXGhhdHtcYWxwaGF9X2kgKyBcaGF0e1xiZXRhfV9pIFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykgKyBcdmFyZXBzaWxvbl97aSx0fQokJAoKKipWQ0IqKiAgCiQkClJfe1x0ZXh0e1ZDQn0sdH0gLSBSX3tmLHR9ID0gMC4wMDA0ICsgMC43ODc2IFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykKJCQKCioqTUJCKiogIAokJApSX3tcdGV4dHtNQkJ9LHR9IC0gUl97Zix0fSA9IDAuMDAwMyArIDEuMDczMSBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoqKkJJRCoqICAKJCQKUl97XHRleHR7QklEfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDIgKyAxLjA5ODcgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKKipDVEcqKiAgCiQkClJfe1x0ZXh0e0NUR30sdH0gLSBSX3tmLHR9ID0gMC4wMDAyICsgMS4xMzUyIFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykKJCQKCioqU0hCKiogIAokJApSX3tcdGV4dHtTSEJ9LHR9IC0gUl97Zix0fSA9IDAuMDAwMiArIDAuNDg4NyBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoqKkFDQioqICAKJCQKUl97XHRleHR7QUNCfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDUgKyAwLjUyNTMgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKKipTVEIqKiAgCiQkClJfe1x0ZXh0e1NUQn0sdH0gLSBSX3tmLHR9ID0gMC4wMDAwICsgMS4xNDc5IFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykKJCQKCioqRUlCKiogIAokJApSX3tcdGV4dHtFSUJ9LHR9IC0gUl97Zix0fSA9IDAuMDAwMCArIDAuNDc5MyBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoKIyA0LjQuIEzhu6NpIHN14bqldCBrw6wgduG7jW5nIENhbXAgdsOgIHBow6JuIGxv4bqhaSDEkeG7i25oIGdpw6EKCmBgYHtyfQojID09PT0gNC40IEzhu6JJIFNV4bqkVCBL4buyIFbhu4xORyBDQVBNICYgUEjDgk4gTE/huqBJIMSQ4buKTkggR0nDgSA9PT09CmxpYnJhcnkoZ2dyZXBlbCkKCnJmX2JhciAgICA8LSBtZWFuKGhvYW5nYW5hbHlzaXNfbG9uZyRyZiwgbmEucm0gPSBUUlVFKQpta3RfZXhiYXIgPC0gbWVhbihob2FuZ2FuYWx5c2lzX2xvbmckcm1fZXhjZXNzLCBuYS5ybSA9IFRSVUUpCgptZWFuX3JlYWxpemVkIDwtIGhvYW5nYW5hbHlzaXNfbG9uZyAlPiUKICBncm91cF9ieShhc3NldCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fcmV0ID0gbWVhbihyaSwgbmEucm0gPSBUUlVFKSwgLmdyb3VwcyA9ICJkcm9wIikKCmNhcG1fZXZhbCA8LSBjYXBtX3RibCAlPiUKICBsZWZ0X2pvaW4obWVhbl9yZWFsaXplZCwgYnkgPSAiYXNzZXQiKSAlPiUKICBtdXRhdGUoCiAgICBlcl9jYXBtID0gcmZfYmFyICsgYmV0YSAqIG1rdF9leGJhciwKICAgIGdhcCAgICAgPSBtZWFuX3JldCAtIGVyX2NhcG0sCiAgICBwcmljZV9mbGFnID0gY2FzZV93aGVuKAogICAgICBnYXAgPiAwICB+ICJVbmRlcnByaWNlZCIsCiAgICAgIGdhcCA8IDAgIH4gIk92ZXJwcmljZWQiLAogICAgICBUUlVFICAgICB+ICJGYWlybHkgcHJpY2VkIgogICAgKQogICkKCnByaW50KGNhcG1fZXZhbCkKCiMgU2VjdXJpdHkgTWFya2V0IExpbmU6IGNo4bqlbSDEkWVuID0gRVtSX2ldX0NBUE0sIHbDsm5nIHRyw7JuIHRy4bqvbmcgPSBtZWFuX3JldApnZ3Bsb3QoY2FwbV9ldmFsLCBhZXMoeCA9IGJldGEpKSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gcmZfYmFyLCBzbG9wZSA9IG1rdF9leGJhcikgKwogIGdlb21fcG9pbnQoYWVzKHkgPSBlcl9jYXBtKSwgc2l6ZSA9IDIpICsgICAgICAgICAgICAgICAgICAgICAjIMSRaeG7g20gxJFlbiAoRVtSaV1fQ0FQTSkKICBnZW9tX3BvaW50KGFlcyh5ID0gbWVhbl9yZXQpLCBzaGFwZSA9IDEsIHNpemUgPSAyLCBzdHJva2UgPSAxKSArICAjIMSRaeG7g20gdHLhuq9uZyAobWVhbl9yZXQpCiAgZ2VvbV90ZXh0KGFlcyh5ID0gbWVhbl9yZXQsIGxhYmVsID0gYXNzZXQpLCAgICAgICAgICAgICAgICAgICMgPC0tIE5Iw4NOIFRSw4pOIMSQSeG7gk0gVFLhuq5ORwogICAgICAgICAgICB2anVzdCA9IC0wLjksIHNpemUgPSAzLCBjaGVja19vdmVybGFwID0gVFJVRSkgKwogIGxhYnModGl0bGUgPSAiU2VjdXJpdHkgTWFya2V0IExpbmUiLAogICAgICAgeCA9ICJCZXRhIiwgeSA9ICJSZXR1cm4iKSArCiAgdGhlbWVfbWluaW1hbCgpCgpgYGAKCgoKCgoK