Name: series-workflowxghkg Phase: Succeeded StartedAt: 2026-09-04 05:13:21 +0000 UTC FinishedAt: 2026-09-04 09:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[0] Phase: Succeeded StartedAt: 2026-09-04 05:13:21 +0000 UTC FinishedAt: 2026-09-04 05:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 05:13:21 +0000 UTC FinishedAt: 2026-09-04 05:33:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "08dd568d68633c480ad5ca66afe1eb62f37773a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_PMEM", "LIBNVDIMM", "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "08dd568d68633c480ad5ca66afe1eb62f37773a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_PMEM", "LIBNVDIMM", "MEMORY_FAILURE" ], "series_id": "407c4852-dc9c-47fe-b232-44d64203ceca" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "pmem_mkpage_present", "__pmem_clear_poison", "pmem_clear_poison", "pmem_do_write", "pmem_recovery_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUE1FTSYjMzQ7LAogICAgJiMzNDtMSUJOVkRJTU0mIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwbWVtX21rcGFnZV9wcmVzZW50JiMzNDssCiAgICAmIzM0O19fcG1lbV9jbGVhcl9wb2lzb24mIzM0OywKICAgICYjMzQ7cG1lbV9jbGVhcl9wb2lzb24mIzM0OywKICAgICYjMzQ7cG1lbV9kb193cml0ZSYjMzQ7LAogICAgJiMzNDtwbWVtX3JlY292ZXJ5X3dyaXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSByZWZhY3RvcmluZyAvIGNsZWFudXAgdGhhdCBhZGRzIHN0YW5kYXJkIFRFU1RTQ0ZMQUdfRkFMU0UgZGVmaW5pdGlvbnMgZm9yIEhXUG9pc29uIGluIFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFx1MDAzZSB3aGVuIENPTkZJR19NRU1PUllfRkFJTFVSRSBpcyBub3Qgc2V0LCBhbmQgcmVtb3ZlcyB0aGUgZHJpdmVyLXNwZWNpZmljIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uIHdyYXBwZXIgaW4gZmF2b3Igb2YgZGlyZWN0bHkgY2FsbGluZyBUZXN0Q2xlYXJQYWdlSFdQb2lzb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbikgdG8gbGludXgvcGFnZS1mbGFncy5oIGZvciAhQ09ORklHX01FTU9SWV9GQUlMVVJFIGJ1aWxkcyBhbmQgdXBkYXRlcyBwbWVtX21rcGFnZV9wcmVzZW50KCkgaW4gZHJpdmVycy9udmRpbW0vcG1lbS5jIHRvIGRpcmVjdGx5IGNhbGwgVGVzdENsZWFyUGFnZUhXUG9pc29uKCkgaW5zdGVhZCBvZiBhbiBudmRpbW0tc3BlY2lmaWMgd3JhcHBlci4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBwYWdlLWZsYWcgbWFjcm9zIGFuZCB0aGUgcGVyc2lzdGVudCBtZW1vcnkgYmxvY2svREFYIGRyaXZlciBwb2lzb24tY2xlYXJpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MzQ0MmYwMzIzMzc1MjljMzU4YzJmNzRhZDA0YzM4MzQ0ODk4ZjE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNTozMTo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9wbWVtLmMgYi9kcml2ZXJzL252ZGltbS9wbWVtLmNcbmluZGV4IDMwYTUxYzM2NWNlOGIuLjVmYjg2NTk1ZThiZDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252ZGltbS9wbWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uY1xuQEAgLTgwLDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXG4gXHRcdCAqIGhlcmUgc2luY2Ugd2UmIzM5O3JlIGluIHRoZSBkcml2ZXIgSS9PIHBhdGggYW5kXG4gXHRcdCAqIG91dHN0YW5kaW5nIEkvTyByZXF1ZXN0cyBwaW4gdGhlIGRldl9wYWdlbWFwLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHBhZ2UpKVxuJiM0MztcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcbiBcdFx0XHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaCBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxuaW5kZXggYTQ4NTA5ZjkwMTk2OC4uNzY4NzA1MDVkZDc5NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udmRpbW0vcG1lbS5oXG5AQCAtMSw3ICYjNDM7MSw2IEBAXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAjaWZuZGVmIF9fTlZESU1NX1BNRU1fSF9fXG4gI2RlZmluZSBfX05WRElNTV9QTUVNX0hfX1xuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbkBAIC0zMSwxNSAmIzQzOzMwLDQgQEAgbG9uZyBfX3BtZW1fZGlyZWN0X2FjY2VzcyhzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBnb2ZmX3QgcGdvZmYsXG4gXHRcdGxvbmcgbnJfcGFnZXMsIGVudW0gZGF4X2FjY2Vzc19tb2RlIG1vZGUsIHZvaWQgKiprYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyAqcGZuKTtcbiBcbi0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4tc3RhdGljIGlubGluZSBib29sIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuLXtcbi1cdHJldHVybiBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSk7XG4tfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSBib29sIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tI2VuZGlmXG4gI2VuZGlmIC8qIF9fTlZESU1NX1BNRU1fSF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uYTIzMTVhYjFkZDNhNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTY1Niw2ICYjNDM7NjU2LDcgQEAgVEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbiAjZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcdTAwM2NcdTAwM2MgUEdfaHdwb2lzb24pXG4gI2Vsc2VcbiBQQUdFRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pXG4mIzQzO1RFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKVxuICNkZWZpbmUgX19QR19IV1BPSVNPTiAwXG4gI2VuZGlmXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9QTUVNJiMzNDssCiAgICAmIzM0O0xJQk5WRElNTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BtZW1fbWtwYWdlX3ByZXNlbnQmIzM0OywKICAgICYjMzQ7X19wbWVtX2NsZWFyX3BvaXNvbiYjMzQ7LAogICAgJiMzNDtwbWVtX2NsZWFyX3BvaXNvbiYjMzQ7LAogICAgJiMzNDtwbWVtX2RvX3dyaXRlJiMzNDssCiAgICAmIzM0O3BtZW1fcmVjb3Zlcnlfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbikgdG8gbGludXgvcGFnZS1mbGFncy5oIGZvciAhQ09ORklHX01FTU9SWV9GQUlMVVJFIGJ1aWxkcyBhbmQgdXBkYXRlcyBwbWVtX21rcGFnZV9wcmVzZW50KCkgaW4gZHJpdmVycy9udmRpbW0vcG1lbS5jIHRvIGRpcmVjdGx5IGNhbGwgVGVzdENsZWFyUGFnZUhXUG9pc29uKCkgaW5zdGVhZCBvZiBhbiBudmRpbW0tc3BlY2lmaWMgd3JhcHBlci4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBwYWdlLWZsYWcgbWFjcm9zIGFuZCB0aGUgcGVyc2lzdGVudCBtZW1vcnkgYmxvY2svREFYIGRyaXZlciBwb2lzb24tY2xlYXJpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MzQ0MmYwMzIzMzc1MjljMzU4YzJmNzRhZDA0YzM4MzQ0ODk4ZjE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNTozMTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uYyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uYwppbmRleCAzMGE1MWMzNjVjZThiLi41ZmI4NjU5NWU4YmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL252ZGltbS9wbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udmRpbW0vcG1lbS5jCkBAIC04MCw3ICYjNDM7ODAsNyBAQCBzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LAogCQkgKiBoZXJlIHNpbmNlIHdlJiMzOTtyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZAogCQkgKiBvdXRzdGFuZGluZyBJL08gcmVxdWVzdHMgcGluIHRoZSBkZXZfcGFnZW1hcC4KIAkJICovCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihwYWdlKSkKJiM0MzsJCWlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpCiAJCQljbGVhcl9tY2Vfbm9zcGVjKHBmbik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udmRpbW0vcG1lbS5oIGIvZHJpdmVycy9udmRpbW0vcG1lbS5oCmluZGV4IGE0ODUwOWY5MDE5NjguLjc2ODcwNTA1ZGQ3OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252ZGltbS9wbWVtLmgKQEAgLTEsNyAmIzQzOzEsNiBAQAogLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KICNpZm5kZWYgX19OVkRJTU1fUE1FTV9IX18KICNkZWZpbmUgX19OVkRJTU1fUE1FTV9IX18KLSNpbmNsdWRlICZsdDtsaW51eC9wYWdlLWZsYWdzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFkYmxvY2tzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwpAQCAtMzEsMTUgJiM0MzszMCw0IEBAIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLAogCQlsb25nIG5yX3BhZ2VzLCBlbnVtIGRheF9hY2Nlc3NfbW9kZSBtb2RlLCB2b2lkICoqa2FkZHIsCiAJCXVuc2lnbmVkIGxvbmcgKnBmbik7CiAKLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKICNlbmRpZiAvKiBfX05WRElNTV9QTUVNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA3YTg2MzU3MmFkY2U3Li5hMjMxNWFiMWRkM2E1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtNjU2LDYgJiM0Mzs2NTYsNyBAQCBURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKQogI2RlZmluZSBfX1BHX0hXUE9JU09OICgxVUwgJmx0OyZsdDsgUEdfaHdwb2lzb24pCiAjZWxzZQogUEFHRUZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKQomIzQzO1RFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKQogI2RlZmluZSBfX1BHX0hXUE9JU09OIDAKICNlbmRpZgogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MjEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgR2l0IFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHVzZXImIzM5O3MgZ2l2ZW4gbWUgYSBnaXQgcGF0Y2ggZGlmZiBhbmQgd2FudHMgbXkgZXhwZXJ0IGV5ZSBvbiBpdHMgc3VpdGFiaWxpdHkgZm9yIHN5emthbGxlciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgb24gYW4gYW1kNjQgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQ/IFRoaXMgaXMgTGludXgga2VybmVsIHBhdGNoIHRyaWFnZSBmb3IgZnV6emluZyDigJMgcHVyZSBzb2Z0d2FyZSB0ZXN0aW5nIGFuZCBkZWZlbnNpdmUgUUEsIHNvIGluaGVyZW50bHkgYmVuaWduLiBObyByZWQgZmxhZ3MgcmlnaHQgb2ZmIHRoZSBiYXQsIHdoaWNoIGlzIGdvb2QuCgpOb3csIHRoZSBwYXRjaCBpdHNlbGYuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBjaGFuZ2VzIGFjcm9zcyB0aHJlZSBmaWxlcywgYW5kIHRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIG1lbW9yeSBwb2lzb24gZmxhZy4KCiogICBgZHJpdmVycy9udmRpbW0vcG1lbS5jYDogVGhlIGNydWNpYWwgY2hhbmdlIGhlcmUgaXMgaW4gYHBtZW1fbWtwYWdlX3ByZXNlbnRgLiBUaGUgY29kZSB3ZW50IGZyb20gYGlmICh0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihwYWdlKSlgIHRvIGBpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpKWAuIFRoaXMgaXMgdGhlIG1vc3QgdmlzaWJsZSBjaGFuZ2UuCiogICBgZHJpdmVycy9udmRpbW0vcG1lbS5oYDogVGhpcyBtZWFucyB0aGUgbnZkaW1tLXNwZWNpZmljIHdyYXBwZXIgZnVuY3Rpb24gYHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uYCBpcyByZW1vdmVkIGJlY2F1c2UgaXQmIzM5O3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKiAgIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGA6IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIFByZXZpb3VzbHksIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb25gIHdhc24mIzM5O3QgZGVmaW5lZCBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCB3YXMgZGlzYWJsZWQuIFRoZSBwYXRjaCBub3cgaW50cm9kdWNlcyBgVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pYCB1bmRlciB0aGUgYCNlbHNlYCBjb25kaXRpb24gZm9yIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBUaGlzIGNsZXZlcmx5IGRlZmluZXMgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgdG8gc2ltcGx5IHJldHVybiAwL2ZhbHNlIGluIHRoZSBhYnNlbmNlIG9mIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLgoKRXNzZW50aWFsbHksIHRoZXkmIzM5O3ZlIHJlZmFjdG9yZWQgdGhlIGNvZGUgdG8gdXNlIHRoZSBtb3JlIGdlbmVyaWMgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgdW5jb25kaXRpb25hbGx5LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZW5hYmxlZC4gSXQgcHJvdmlkZXMgYSBjb21tb24gcGF0aCByZWdhcmRsZXNzLCBhbmQgdGhhdCBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYW55IGltcGxpY2l0IGJlaGF2aW9yIGJlaW5nIGNoYW5nZWQgdGhhdCBjb3VsZCB0cmlwIHVwIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcnVuIHNvbWUgcXVpY2sgY2hlY2tzIHVzaW5nIG15IHN0YW5kYXJkIHNldCBvZiBjb2RlYmFzZSB0b29scy4gSSYjMzk7bGwgc2VhcmNoIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbmQgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgbWF5YmUgbG9vayBmb3IgaW5kaXJlY3QgY2FsbHMgb3IgdXNlcyBvZiB0aGlzIHBvaXNvbiBmbGFnIHRoYXQgbWlnaHQgaGF2ZSBzdWJ0bGUsIHVuZXhwZWN0ZWQgZWZmZWN0cy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBsb2NhbGl6ZWQsIHdlbGwtdW5kZXJzdG9vZCwgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGZ1enppbmcgc3VyZmFjZXMgb3IsIGNydWNpYWxseSwgZWxpbWluYXRlIGV4aXN0aW5nIG9uZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG1lbV9ta3BhZ2VfcHJlc2VudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9wbWVtLmM9NTg9c3RhdGljIHBoeXNfYWRkcl90IHRvX29mZnNldChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHNlY3Rvcl90IHNlY3Rvcilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjItXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NjM6c3RhdGljIHZvaWQgcG1lbV9ta3BhZ2VfcHJlc2VudChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBoeXNfYWRkcl90IG9mZnNldCxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02NC1cdFx0dW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9OTc9c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEwMy1cdGlmIChjbGVhcmVkIFx1MDAzZSAwKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTA0Olx0XHRwbWVtX21rcGFnZV9wcmVzZW50KHBtZW0sIG9mZnNldCwgY2xlYXJlZCk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTA1LVx0XHRhcmNoX2ludmFsaWRhdGVfcG1lbShwbWVtLVx1MDAzZXZpcnRfYWRkciAmIzQzOyBvZmZzZXQsIGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gUGFnZSBGbGFncyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGVzZSBwYWdlIGZsYWdzLCBzbyBsZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIGFyb3VuZCBsaW5lIDY1Ni4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IG1hY3JvIG9yIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRoYXQmIzM5O3MgY2F1c2luZyB0aGUgdHJvdWJsZS4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSBhbGxvY2F0aW9uIG9yIG1heWJlIHNvbWUgc29ydCBvZiBtaWdyYXRpb24gb3IgaXNvbGF0aW9uIGZsYWcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUga2VybmVsIGRldnMgaGF2ZSBjb29rZWQgdXAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGdyb3VuZCB0cnV0aCBJIG5lZWQgdG8gZGVidWcgdGhpcyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NDU6XHRcdEZPTElPX1RFU1RfU0VUX0ZMQUcobWxvY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDY0NjpcdCNlbHNlXG4gNjQ3Olx0Rk9MSU9fRkxBR19GQUxTRShtbG9ja2VkKVxuIDY0ODpcdFx0X19GT0xJT19DTEVBUl9GTEFHX05PT1AobWxvY2tlZClcbiA2NDk6XHRcdEZPTElPX1RFU1RfQ0xFQVJfRkxBR19GQUxTRShtbG9ja2VkKVxuIDY1MDpcdFx0Rk9MSU9fVEVTVF9TRVRfRkxBR19GQUxTRShtbG9ja2VkKVxuIDY1MTpcdCNlbmRpZlxuIDY1MjpcdFxuIDY1MzpcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbiA2NTQ6XHRQQUdFRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbiA2NTU6XHRURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxuIDY1NjpcdCNkZWZpbmUgX19QR19IV1BPSVNPTiAoMVVMIFx1MDAzY1x1MDAzYyBQR19od3BvaXNvbilcbiA2NTc6XHQjZWxzZVxuIDY1ODpcdFBBR0VGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbiA2NTk6XHRURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbiA2NjA6XHQjZGVmaW5lIF9fUEdfSFdQT0lTT04gMFxuIDY2MTpcdCNlbmRpZlxuIDY2MjpcdFxuIDY2MzpcdCNpZmRlZiBDT05GSUdfUEFHRV9JRExFX0ZMQUdcbiA2NjQ6XHQjaWZkZWYgQ09ORklHXzY0QklUXG4gNjY1Olx0Rk9MSU9fVEVTVF9GTEFHKHlvdW5nLCBGT0xJT19IRUFEX1BBR0UpXG4gNjY2Olx0Rk9MSU9fU0VUX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcbiA2Njc6XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcbiA2Njg6XHRGT0xJT19GTEFHKGlkbGUsIEZPTElPX0hFQURfUEFHRSlcbiA2Njk6XHQjZW5kaWZcbiA2NzA6XHQvKiBTZWUgcGFnZV9pZGxlLmggZm9yICE2NEJJVCB3b3JrYXJvdW5kICovXG4gNjcxOlx0I2Vsc2UgLyogIUNPTkZJR19QQUdFX0lETEVfRkxBRyAqL1xuIDY3MjpcdEZPTElPX0ZMQUdfRkFMU0UoeW91bmcpXG4gNjczOlx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHX0ZBTFNFKHlvdW5nKVxuIDY3NDpcdEZPTElPX0ZMQUdfRkFMU0UoaWRsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjg0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gcG1lbV9ta3BhZ2VfcHJlc2VudCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byB0aGUgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AgZmlsZSDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcGVyc2lzdGVudCBtZW1vcnkgc3R1ZmYgbGl2ZXMsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIE5WRElNTSBkcml2ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcGFnZSBoYW5kbGluZywgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHBtZW1fbWtwYWdlX3ByZXNlbnRgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIHdpbGwgYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBtZW1vcnkgcGFnZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBwZXJzaXN0ZW50IG1lbW9yeSBkZXZpY2VzLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBjb2RlIGVuc3VyZXMgZGF0YSBjb25zaXN0ZW5jeSBhbmQgaGFuZGxlcyBwb3RlbnRpYWwgcG93ZXIgZmFpbHVyZXMgaW4gcmVsYXRpb24gdG8gbWVtb3J5IGJlaW5nICYjMzQ7cHJlc2VudCYjMzQ7LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgdG8gaG93IHdlIGFyZSBtYWtpbmcgdGhpcyB3b3JrIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gVGltZSB0byBkaWcgaW4gYW5kIHJlbWluZCBteXNlbGYgb2YgdGhvc2UgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tL3BtZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcdHJldHVybiAoc2VjdG9yIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQpICYjNDM7IHBtZW0tXHUwMDNlZGF0YV9vZmZzZXQ7XG4gIDYxOlx0fVxuICA2MjpcdFxuICA2MzpcdHN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXG4gIDY0Olx0XHRcdHVuc2lnbmVkIGludCBsZW4pXG4gIDY1Olx0e1xuICA2NjpcdFx0cGh5c19hZGRyX3QgcGh5cyA9IHBtZW1fdG9fcGh5cyhwbWVtLCBvZmZzZXQpO1xuICA2NzpcdFx0dW5zaWduZWQgbG9uZyBwZm5fc3RhcnQsIHBmbl9lbmQsIHBmbjtcbiAgNjg6XHRcbiAgNjk6XHRcdC8qIG9ubHkgcG1lbSBpbiB0aGUgbGluZWFyIG1hcCBzdXBwb3J0cyBIV1BvaXNvbiAqL1xuICA3MDpcdFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihwbWVtLVx1MDAzZXZpcnRfYWRkcikpXG4gIDcxOlx0XHRcdHJldHVybjtcbiAgNzI6XHRcbiAgNzM6XHRcdHBmbl9zdGFydCA9IFBIWVNfUEZOKHBoeXMpO1xuICA3NDpcdFx0cGZuX2VuZCA9IHBmbl9zdGFydCAmIzQzOyBQSFlTX1BGTihsZW4pO1xuICA3NTpcdFx0Zm9yIChwZm4gPSBwZm5fc3RhcnQ7IHBmbiBcdTAwM2MgcGZuX2VuZDsgcGZuJiM0MzsmIzQzOykge1xuICA3NjpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4gIDc3Olx0XG4gIDc4Olx0XHRcdC8qXG4gIDc5Olx0XHRcdCAqIE5vdGUsIG5vIG5lZWQgdG8gaG9sZCBhIGdldF9kZXZfcGFnZW1hcCgpIHJlZmVyZW5jZVxuICA4MDpcdFx0XHQgKiBoZXJlIHNpbmNlIHdlJiMzOTtyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZFxuICA4MTpcdFx0XHQgKiBvdXRzdGFuZGluZyBJL08gcmVxdWVzdHMgcGluIHRoZSBkZXZfcGFnZW1hcC5cbiAgODI6XHRcdFx0ICovXG4gIDgzOlx0XHRcdGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpXG4gIDg0Olx0XHRcdFx0Y2xlYXJfbWNlX25vc3BlYyhwZm4pO1xuICA4NTpcdFx0fVxuICA4NjpcdH1cbiAgODc6XHRcbiAgODg6XHRzdGF0aWMgdm9pZCBwbWVtX2NsZWFyX2JiKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgc2VjdG9yX3Qgc2VjdG9yLCBsb25nIGJsa3MpXG4gIDg5Olx0e1xuICA5MDpcdFx0aWYgKGJsa3MgPT0gMClcbiAgOTE6XHRcdFx0cmV0dXJuO1xuICA5MjpcdFx0YmFkYmxvY2tzX2NsZWFyKFx1MDAyNnBtZW0tXHUwMDNlYmIsIHNlY3RvciwgYmxrcyk7XG4gIDkzOlx0XHRpZiAocG1lbS1cdTAwM2ViYl9zdGF0ZSlcbiAgOTQ6XHRcdFx0c3lzZnNfbm90aWZ5X2RpcmVudChwbWVtLVx1MDAzZWJiX3N0YXRlKTtcbiAgOTU6XHR9XG4gIDk2Olx0XG4gIDk3Olx0c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG4gIDk4Olx0XHRcdHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbilcbiAgOTk6XHR7XG4gMTAwOlx0XHRwaHlzX2FkZHJfdCBwaHlzID0gcG1lbV90b19waHlzKHBtZW0sIG9mZnNldCk7XG4gMTAxOlx0XHRsb25nIGNsZWFyZWQgPSBudmRpbW1fY2xlYXJfcG9pc29uKHRvX2RldihwbWVtKSwgcGh5cywgbGVuKTtcbiAxMDI6XHRcbiAxMDM6XHRcdGlmIChjbGVhcmVkIFx1MDAzZSAwKSB7XG4gMTA0Olx0XHRcdHBtZW1fbWtwYWdlX3ByZXNlbnQocG1lbSwgb2Zmc2V0LCBjbGVhcmVkKTtcbiAxMDU6XHRcdFx0YXJjaF9pbnZhbGlkYXRlX3BtZW0ocG1lbS1cdTAwM2V2aXJ0X2FkZHIgJiM0Mzsgb2Zmc2V0LCBsZW4pO1xuIDEwNjpcdFx0fVxuIDEwNzpcdFx0cmV0dXJuIGNsZWFyZWQ7XG4gMTA4Olx0fVxuIDEwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBOVkRJTU0vUE1FTSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBhcmUgTlZESU1NL1BNRU0gdGFyZ2V0cyB2aWFibGUgZm9yIGZ1enppbmcsIGFuZCBhcmUgdGhleSB3b3J0aCB0aGUgZWZmb3J0PyBUaW1lIHRvIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgpUaGUgY2hhbmdlIHRvdWNoZXMgYm90aCBjb3JlIGZpbGVzIGFuZCBkcml2ZXJzLiBTcGVjaWZpY2FsbHksIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgYWRkaW5nIHRoZSBgVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pYCBtYWNybywgKmFuZCogdXBkYXRlcyB0byBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBhbmQgYHBtZW0uaGAsIHdpdGggZGlyZWN0IGNhbGxzIHRvIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSlgLiBTbyB0aGF0IHRpY2tzIHRoZSBib3ggb2YgYmVpbmcgYW4gYXJlYSB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgaW4gYSB3YXkgd2UmIzM5O2QgbGlrZSB0byB0YXJnZXQgaXQuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBOVkRJTU0vUE1FTSBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgc2V0dXAuIENhbiBJIGV2ZW4gZ2V0IGF0IGl0PyBHb29kIG5ld3Mg4oCTIGl0IGxvb2tzIGxpa2UgTlZESU1NL1BNRU0gaXMgZW11bGF0YWJsZSBpbiBRRU1VLiBUaGluZ3MgbGlrZSBgbWVtbWFwPW5uW0tNR11Ac3NbS01HXWAsIEFDUEkgTkZJVCwgdmlydGlvLXBtZW0sIGFuZCB0aGUgdW5kZXJseWluZyBuZF9lODIwIC8gbGlibnZkaW1tIC8gcG1lbSBkcml2ZXIgcHJvdmlkZSBhIHBhdGguIEFuZCBzaW5jZSB0aGUgY29kZSB0aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgbGl2ZXMgaW4gYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AsIHRoaXMgc2VlbXMgdG8gY29uZmlybSBpdCYjMzk7cyBhIGRyaXZlciB3ZSAqY2FuKiBnZXQgYXQuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRvIGVuYWJsZSB0aGlzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyB0byBzZWUgZXhhY3RseSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkIHRvIGJlIHNldCB0byBlbmFibGUgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AuIE9uY2UgSSBrbm93IHRoYXQsIEkmIzM5O2xsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGdhdWdlIHRoZSBzY29wZSBhbmQgY29tcGxleGl0eSBvZiBzZXR0aW5nIHVwIGEgZnV6emluZyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfUE1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tL0tjb25maWc9MTc9aWYgTElCTlZESU1NXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE4LVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxOTpjb25maWcgQkxLX0RFVl9QTUVNXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTIwLVx0dHJpc3RhdGUgXCYjMzQ7UE1FTTogUGVyc2lzdGVudCBtZW1vcnkgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTlZESU1NIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9udmRpbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHpvb20gaW4gYXJvdW5kIGxpbmUgMTcuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSBlc3NlbnRpYWwgZm9yIGNvbmZpZ3VyaW5nIGtlcm5lbCBtb2R1bGVzLCBzbyB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIG9wdGlvbnMgcmVsYXRlZCB0byBOb24tVm9sYXRpbGUgRElNTXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSwgdGhpbmdzIGxpa2Ugd2hldGhlciBvciBub3QgdGhlIE5WRElNTSBzdXBwb3J0IGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBkaXJlY3RseSBvciBhcyBhIG1vZHVsZSwgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHNldHRpbmdzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgcHJpbWFyeSBkZWNpc2lvbiBwb2ludHMgdGhlIGtlcm5lbCBtYWtlcyBkdXJpbmcgY29tcGlsYXRpb24gY29uY2VybmluZyBOVkRJTU0gc3VwcG9ydCwgYXMgSSBtaWdodCBiZSBwcmVwYXJpbmcgdG8gZWl0aGVyIGVuYWJsZSwgZGlzYWJsZSwgb3IgYWRqdXN0IHRoZXNlIHNldHRpbmdzIGZvciBhIHNwZWNpZmljIGRlcGxveW1lbnQgb3IgZGVidWdnaW5nIHNjZW5hcmlvLiBUaGlzIGxpbmUgb2YgaW5xdWlyeSBzaG91bGQgcXVpY2tseSBnaXZlIG1lIHRoZSBzY29wZSBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIExJQk5WRElNTVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlZESU1NIChOb24tVm9sYXRpbGUgTWVtb3J5IERldmljZSkgU3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBQSFlTX0FERFJfVF82NEJJVFxuICAgNTpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbiAgIDY6XHRcdGRlcGVuZHMgb24gQkxLX0RFVlxuICAgNzpcdFx0c2VsZWN0IE1FTVJFR0lPTlxuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBHZW5lcmljIHN1cHBvcnQgZm9yIG5vbi12b2xhdGlsZSBtZW1vcnkgZGV2aWNlcyBpbmNsdWRpbmdcbiAgMTA6XHRcdCAgQUNQSS02LU5GSVQgZGVmaW5lZCByZXNvdXJjZXMuICBPbiBwbGF0Zm9ybXMgdGhhdCBkZWZpbmUgYW5cbiAgMTE6XHRcdCAgTkZJVCwgb3Igb3RoZXJ3aXNlIGNhbiBkaXNjb3ZlciBOVkRJTU0gcmVzb3VyY2VzLCBhIGxpYm52ZGltbVxuICAxMjpcdFx0ICBidXMgaXMgcmVnaXN0ZXJlZCB0byBhZHZlcnRpc2UgUE1FTSAocGVyc2lzdGVudCBtZW1vcnkpXG4gIDEzOlx0XHQgIG5hbWVzcGFjZXMgKC9kZXYvcG1lbVgpLiBBIFBNRU0gbmFtZXNwYWNlIHJlZmVycyB0byBhXG4gIDE0Olx0XHQgIG1lbW9yeSByZXNvdXJjZSB0aGF0IG1heSBzcGFuIG11bHRpcGxlIERJTU1zIGFuZCBzdXBwb3J0IERBWFxuICAxNTpcdFx0ICAoc2VlIENPTkZJR19EQVgpLlxuICAxNjpcdFxuICAxNzpcdGlmIExJQk5WRElNTVxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBCTEtfREVWX1BNRU1cbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O1BNRU06IFBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDIxOlx0XHRkZWZhdWx0IExJQk5WRElNTVxuICAyMjpcdFx0c2VsZWN0IERBWFxuICAyMzpcdFx0c2VsZWN0IE5EX0JUVCBpZiBCVFRcbiAgMjQ6XHRcdHNlbGVjdCBORF9QRk4gaWYgTlZESU1NX1BGTlxuICAyNTpcdFx0aGVscFxuICAyNjpcdFx0ICBNZW1vcnkgcmFuZ2VzIGZvciBQTUVNIGFyZSBkZXNjcmliZWQgYnkgZWl0aGVyIGFuIE5GSVRcbiAgMjc6XHRcdCAgKE5WRElNTSBGaXJtd2FyZSBJbnRlcmZhY2UgVGFibGUsIHNlZSBDT05GSUdfQUNQSV9ORklUKSwgYVxuICAyODpcdFx0ICBub24tc3RhbmRhcmQgT0VNLXNwZWNpZmljIEU4MjAgbWVtb3J5IHR5cGUgKHR5cGUtMTIsIHNlZVxuICAyOTpcdFx0ICBDT05GSUdfWDg2X1BNRU1fTEVHQUNZKSwgb3IgaXQgaXMgbWFudWFsbHkgc3BlY2lmaWVkIGJ5IHRoZVxuICAzMDpcdFx0ICAmIzM5O21lbW1hcD1ubltLTUddIXNzW0tNR10mIzM5OyBrZXJuZWwgY29tbWFuZCBsaW5lIChzZWVcbiAgMzE6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy5yc3QpLiAgVGhpcyBkcml2ZXIgY29udmVydHNcbiAgMzI6XHRcdCAgdGhlc2UgcGVyc2lzdGVudCBtZW1vcnkgcmFuZ2VzIGludG8gYmxvY2sgZGV2aWNlcyB0aGF0IGFyZVxuICAzMzpcdFx0ICBjYXBhYmxlIG9mIERBWCAoZGlyZWN0LWFjY2VzcykgZmlsZSBzeXN0ZW0gbWFwcGluZ3MuICBTZWVcbiAgMzQ6XHRcdCAgRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL252ZGltbS9udmRpbW0ucnN0IGZvciBtb3JlIGRldGFpbHMuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBhbiBOVkRJTU1cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgTkRfQ0xBSU1cbiAgMzk6XHRcdGJvb2xcbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk0OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBOVk1lLW92ZXItRmFicmljIFBNRU0gRHJpdmVyKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYF9fcG1lbV9jbGVhcl9wb2lzb25gIGFuZCBgcG1lbV9ta3BhZ2VfcHJlc2VudGAgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoZSBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBmaWxlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhlIGBwbWVtYCBkcml2ZXIgaGVyZSBpcyBoYW5kbGluZyBwZXJzaXN0ZW50IG1lbW9yeSwgbGlrZWx5IE5WRElNTXMsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udHJvbCBmbG93LCBzbyBJIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aC4gTGV0JiMzOTtzIHNlZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSAqcmVhY2hlZCouIFdoZXJlIGFyZSB0aGV5IGNhbGxlZD8gQXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgYSBkYXRhIGFjY2VzcyBwYXRoPyBJIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMsIG9mIGNvdXJzZSwgYnV0IGFsc28gZm9yIGluZGlyZWN0IHVzYWdlIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgb3IgbWFjcm9zLCB3aGljaCBtaWdodCBiZSBjb21tb24gaW4gdGhpcyBraW5kIG9mIGRyaXZlciBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgYWxsIGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTlZNZS1vdmVyLUZhYnJpYyBzdGFjazsgYW55IGNhbGxzIHRvIG9yIGZyb20gdGhlIGZhYnJpYyBsYXllcnMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlci4gVGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGNvbnNpc3RlbmN5IG1vZGVsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBib3RoIGhhcmR3YXJlIGFuZCB0aGUgc29mdHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZW1fY2xlYXJfcG9pc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udmRpbW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udmRpbW0vcG1lbS5jPTg4PXN0YXRpYyB2b2lkIHBtZW1fY2xlYXJfYmIoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IsIGxvbmcgYmxrcylcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTYtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6OTc6c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTgtXHRcdHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTA5LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjExMDpzdGF0aWMgYmxrX3N0YXR1c190IHBtZW1fY2xlYXJfcG9pc29uKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMTEtXHRcdHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbilcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMTIte1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjExMzpcdGxvbmcgY2xlYXJlZCA9IF9fcG1lbV9jbGVhcl9wb2lzb24ocG1lbSwgb2Zmc2V0LCBsZW4pO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTExNC1cbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MTgwPXN0YXRpYyBibGtfc3RhdHVzX3QgcG1lbV9kb193cml0ZShzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE4Ny1cdGlmICh1bmxpa2VseShpc19iYWRfcG1lbShcdTAwMjZwbWVtLVx1MDAzZWJiLCBzZWN0b3IsIGxlbikpKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTg4Olx0XHRibGtfc3RhdHVzX3QgcmMgPSBwbWVtX2NsZWFyX3BvaXNvbihwbWVtLCBwbWVtX29mZiwgbGVuKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xODktXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTM0MD1zdGF0aWMgc2l6ZV90IHBtZW1fcmVjb3Zlcnlfd3JpdGUoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHBnb2ZmX3QgcGdvZmYsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTM2NC1cdHBtZW1fb2ZmID0gUEZOX1BIWVMocGdvZmYpICYjNDM7IHBtZW0tXHUwMDNlZGF0YV9vZmZzZXQ7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MzY1Olx0Y2xlYXJlZCA9IF9fcG1lbV9jbGVhcl9wb2lzb24ocG1lbSwgcG1lbV9vZmYsIGxlbik7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzY2LVx0aWYgKGNsZWFyZWQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGNsZWFyZWQgXHUwMDNjIGxlbikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODU4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBlcnNpc3RlbnQgTWVtb3J5IFdyaXRlIFBhdGhzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlc2UgcGVyc2lzdGVudCBtZW1vcnkgd3JpdGUgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLCBgcG1lbV9kb193cml0ZWAgc2VlbXMgdG8gYmUgbmVzdGxlZCB3aXRoaW4gdGhlIHN0YW5kYXJkIGJsb2NrIEkvTyBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBoYW5naW5nIG91dCBpbiBgcG1lbV9zdWJtaXRfYmlvYC4gT24gdGhlIG90aGVyIGhhbmQsIGBwbWVtX3JlY292ZXJ5X3dyaXRlYCBpcyBjbGVhcmx5IHRpZWQgdG8gZGlyZWN0IGFjY2VzcyAoREFYKSBvcGVyYXRpb25zLCBsaWtlbHkgaGFuZGxpbmcgbW9yZSBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGVyc2lzdGVudCBtZW1vcnkgZGV2aWNlIGl0c2VsZi4KCkdpdmVuIHRoaXMsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG91dCBgcG1lbV9zdWJtaXRfYmlvYCBpbiBtb3JlIGRldGFpbCB0byBjbGFyaWZ5IGl0cyByb2xlLiBUaGlzIHBhdGggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgZ2VuZXJhbCBibG9jay1sZXZlbCBvcGVyYXRpb25zLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgUE0gbGF5ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9udmRpbW0vcG1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRzdGF0aWMgdm9pZCBwbWVtX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIDIwMTpcdHtcbiAyMDI6XHRcdGludCByZXQgPSAwO1xuIDIwMzpcdFx0YmxrX3N0YXR1c190IHJjID0gMDtcbiAyMDQ6XHRcdGJvb2wgZG9fYWNjdDtcbiAyMDU6XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XG4gMjA2Olx0XHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xuIDIwNzpcdFx0c3RydWN0IGJ2ZWNfaXRlciBpdGVyO1xuIDIwODpcdFx0c3RydWN0IHBtZW1fZGV2aWNlICpwbWVtID0gYmlvLVx1MDAzZWJpX2JkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMjA5Olx0XHRzdHJ1Y3QgbmRfcmVnaW9uICpuZF9yZWdpb24gPSB0b19yZWdpb24ocG1lbSk7XG4gMjEwOlx0XG4gMjExOlx0XHRpZiAoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgUkVRX1BSRUZMVVNIKSB7XG4gMjEyOlx0XHRcdHJldCA9IG52ZGltbV9mbHVzaChuZF9yZWdpb24sIE5VTEwpO1xuIDIxMzpcdFx0XHRpZiAocmV0KSB7XG4gMjE0Olx0XHRcdFx0YmlvLVx1MDAzZWJpX3N0YXR1cyA9IGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KTtcbiAyMTU6XHRcdFx0XHRiaW9fZW5kaW8oYmlvKTtcbiAyMTY6XHRcdFx0XHRyZXR1cm47XG4gMjE3Olx0XHRcdH1cbiAyMTg6XHRcdH1cbiAyMTk6XHRcbiAyMjA6XHRcdGlmIChiaW9faGFzX2RhdGEoYmlvKSkge1xuIDIyMTpcdFx0XHRkb19hY2N0ID0gYmxrX3F1ZXVlX2lvX3N0YXQoYmlvLVx1MDAzZWJpX2JkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VxdWV1ZSk7XG4gMjIyOlx0XHRcdGlmIChkb19hY2N0KVxuIDIyMzpcdFx0XHRcdHN0YXJ0ID0gYmlvX3N0YXJ0X2lvX2FjY3QoYmlvKTtcbiAyMjQ6XHRcdFx0YmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgYmlvLCBpdGVyKSB7XG4gMjI1Olx0XHRcdFx0aWYgKG9wX2lzX3dyaXRlKGJpb19vcChiaW8pKSlcbiAyMjY6XHRcdFx0XHRcdHJjID0gcG1lbV9kb193cml0ZShwbWVtLCBidmVjLmJ2X3BhZ2UsXG4gMjI3Olx0XHRcdFx0XHRcdFx0ICAgYnZlYy5idl9vZmZzZXQsXG4gMjI4Olx0XHRcdFx0XHRcdFx0ICAgaXRlci5iaV9zZWN0b3IsXG4gMjI5Olx0XHRcdFx0XHRcdFx0ICAgYnZlYy5idl9sZW4pO1xuIDIzMDpcdFx0XHRcdGVsc2VcbiAyMzE6XHRcdFx0XHRcdHJjID0gcG1lbV9kb19yZWFkKHBtZW0sIGJ2ZWMuYnZfcGFnZSxcbiAyMzI6XHRcdFx0XHRcdFx0XHQgIGJ2ZWMuYnZfb2Zmc2V0LFxuIDIzMzpcdFx0XHRcdFx0XHRcdCAgaXRlci5iaV9zZWN0b3IsXG4gMjM0Olx0XHRcdFx0XHRcdFx0ICBidmVjLmJ2X2xlbik7XG4gMjM1Olx0XHRcdFx0aWYgKHJjKSB7XG4gMjM2Olx0XHRcdFx0XHRiaW8tXHUwMDNlYmlfc3RhdHVzID0gcmM7XG4gMjM3Olx0XHRcdFx0XHRicmVhaztcbiAyMzg6XHRcdFx0XHR9XG4gMjM5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc1MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBOVkRJTU0gUG9pc29uIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uIGlzIHRvIG9wdGltaXplL3NpbXBsaWZ5IHRoZSBoYW5kbGluZyBvZiBoYXJkd2FyZSBwb2lzb25pbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIE5WRElNTXMsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYW5hbHl6ZSB3aGV0aGVyIHRoZSBwYXRjaCB3YXJyYW50cyBhIGZ1enppbmcgZWZmb3J0LgoKRmlyc3QsIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AuICBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYSBjb25kaXRpb25hbCB3cmFwcGVyIChgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb25gKSBpcyBiZWluZyByZW1vdmVkLCBhbmQgdGhlIGNhbGwgdG8gYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgaXMgbm93IGhhcHBlbmluZyBkaXJlY3RseS4gVGhlIG9yaWdpbmFsIHdyYXBwZXIgd2FzIGNoZWNraW5nIGZvciBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhbmQgdGhlbiBjYWxsaW5nIHRoZSBwb2lzb24gZnVuY3Rpb24uIE5vdyB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGRpcmVjdGx5LgoKTm93LCBkb2VzIHRoaXMgcXVhbGlmeSBhcyBzb21ldGhpbmcgd29ydGggZnV6emluZz8gIFRoZSBjcml0ZXJpYSBhcmUgcHJldHR5IGNsZWFyOiAmIzM0O0RvIG5vdCBibGluZGx5IHRydXN0ICYjMzk7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM5OyBjbGFpbXMmIzM0Oy4gIEV2ZW4gcmVmYWN0b3JpbmdzIGNhbiBpbnRyb2R1Y2Ugc3VidGxlIHNoaWZ0cy4gU2luY2UgdGhpcyBtb2RpZmllcyByZWFjaGFibGUsIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgKHNwZWNpZmljYWxseSwgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBwYWdlIGZsYWdzIGFuZCB0aGUgTlZESU1NIGJsb2NrIGRyaXZlciksIEkmIzM5O2QgaGF2ZSB0byBzYXkgKipXb3J0aEZ1enppbmcgPSB0cnVlKiouIFRoZSBtb2RpZmljYXRpb25zIGFyZW4mIzM5O3QgZG9jdW1lbnRhdGlvbiwgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIHBhdGhzIHNwZWNpZmljIHRvIG90aGVyIGFyY2hpdGVjdHVyZXMuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHBvdGVudGlhbCBlbnRyeXBvaW50cyBvciBjcml0aWNhbCBzeW1ib2xzLiBMb29raW5nIGluIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgZGlyZWN0IGVudHJ5cG9pbnRzIG9yIHRoYXQgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gdGFyZ2V0LiAgSSBzZWUgYSBudW1iZXIgb2Ygc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBwbWVtX21rcGFnZV9wcmVzZW50YCwgYF9fcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9kb193cml0ZWAsIGFuZCBgcG1lbV9zdWJtaXRfYmlvYCwgYW5kIGFsc28gYHBtZW1fcmVjb3Zlcnlfd3JpdGVgLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBjYXJlZnVsbHkgYXQgdGhlIGNvZGUgaW4gYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2Agbm93IHRvIGRldGVybWluZSB3aGF0IGlzIHJlYWNoYWJsZSBmcm9tIG91dHNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tL3BtZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9wbWVtLmMtMzMtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MzQ6c3RhdGljIHN0cnVjdCBkZXZpY2UgKnRvX2RldihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0pXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzUte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00Mi1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0MzpzdGF0aWMgc3RydWN0IG5kX3JlZ2lvbiAqdG9fcmVnaW9uKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSlcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NC17XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ3LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjQ4OnN0YXRpYyBwaHlzX2FkZHJfdCBwbWVtX3RvX3BoeXMoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDkte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01Mi1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MzpzdGF0aWMgc2VjdG9yX3QgdG9fc2VjdChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBoeXNfYWRkcl90IG9mZnNldClcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01NC17XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU3LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjU4OnN0YXRpYyBwaHlzX2FkZHJfdCB0b19vZmZzZXQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTkte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02Mi1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo2MzpzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY0LVx0XHR1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy04Ny1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo4ODpzdGF0aWMgdm9pZCBwbWVtX2NsZWFyX2JiKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgc2VjdG9yX3Qgc2VjdG9yLCBsb25nIGJsa3MpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtODkte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05Ni1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo5NzpzdGF0aWMgbG9uZyBfX3BtZW1fY2xlYXJfcG9pc29uKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05OC1cdFx0cGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMDktXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTEwOnN0YXRpYyBibGtfc3RhdHVzX3QgcG1lbV9jbGVhcl9wb2lzb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTExMS1cdFx0cGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMjMtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTI0OnN0YXRpYyB2b2lkIHdyaXRlX3BtZW0odm9pZCAqcG1lbV9hZGRyLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMjUtXHRcdHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE0MS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxNDI6c3RhdGljIGJsa19zdGF0dXNfdCByZWFkX3BtZW0oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvZmYsXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTQzLVx0XHR2b2lkICpwbWVtX2FkZHIsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE2My1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxNjQ6c3RhdGljIGJsa19zdGF0dXNfdCBwbWVtX2RvX3JlYWQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE2NS1cdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IHBhZ2Vfb2ZmLFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xNzktXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTgwOnN0YXRpYyBibGtfc3RhdHVzX3QgcG1lbV9kb193cml0ZShzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTgxLVx0XHRcdHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZV9vZmYsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE5OS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoyMDA6c3RhdGljIHZvaWQgcG1lbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yMDEte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNTYtLyogc2VlIFwmIzM0O3N0cm9uZ1wmIzM0OyBkZWNsYXJhdGlvbiBpbiB0b29scy90ZXN0aW5nL252ZGltbS9wbWVtLWRheC5jICovXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MjU3Ol9fd2VhayBsb25nIF9fcG1lbV9kaXJlY3RfYWNjZXNzKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGdvZmZfdCBwZ29mZixcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNTgtXHRcdGxvbmcgbnJfcGFnZXMsIGVudW0gZGF4X2FjY2Vzc19tb2RlIG1vZGUsIHZvaWQgKiprYWRkcixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MzAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgcG1lbV9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zMDctXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MzA4OnN0YXRpYyBpbnQgcG1lbV9kYXhfemVyb19wYWdlX3JhbmdlKHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBwZ29mZl90IHBnb2ZmLFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMwOS1cdFx0XHRcdCAgICBzaXplX3QgbnJfcGFnZXMpXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMxNy1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzozMTg6c3RhdGljIGxvbmcgcG1lbV9kYXhfZGlyZWN0X2FjY2VzcyhzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2RldixcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zMTktXHRcdHBnb2ZmX3QgcGdvZmYsIGxvbmcgbnJfcGFnZXMsIGVudW0gZGF4X2FjY2Vzc19tb2RlIG1vZGUsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMzOS0gKi9cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzozNDA6c3RhdGljIHNpemVfdCBwbWVtX3JlY292ZXJ5X3dyaXRlKHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBwZ29mZl90IHBnb2ZmLFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTM0MS1cdFx0dm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTM4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGRheF9vcGVyYXRpb25zIHBtZW1fZGF4X29wcyA9IHtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzg3LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjM4ODpzdGF0aWMgc3NpemVfdCB3cml0ZV9jYWNoZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zODktXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTM5NS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzozOTY6c3RhdGljIHNzaXplX3Qgd3JpdGVfY2FjaGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTM5Ny1cdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDA4LX1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0MDk6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlX2NhY2hlKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00MTAtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NDExOnN0YXRpYyB1bW9kZV90IGRheF92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgbilcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00MTIte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnBtZW1fYXR0cmlidXRlX2dyb3Vwc1tdID0ge1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00MzUtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NDM2OnN0YXRpYyB2b2lkIHBtZW1fcmVsZWFzZV9kaXNrKHZvaWQgKl9fcG1lbSlcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00Mzcte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NDctXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NDQ4OnN0YXRpYyBpbnQgcG1lbV9wYWdlbWFwX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDQ5LVx0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgaW50IG1mX2ZsYWdzKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZnNkYXhfcGFnZW1hcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ2Mi1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0NjM6c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NjQtXHRcdHN0cnVjdCBuZF9uYW1lc3BhY2VfY29tbW9uICpuZG5zKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02MTAtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NjExOnN0YXRpYyBpbnQgbmRfcG1lbV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjEyLXtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjYyLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjY2MzpzdGF0aWMgdm9pZCBuZF9wbWVtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjY0LXtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjc5LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjY4MDpzdGF0aWMgdm9pZCBuZF9wbWVtX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02ODEte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02ODQtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6Njg1OnN0YXRpYyB2b2lkIHBtZW1fcmV2YWxpZGF0ZV9wb2lzb24oc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY4Ni17XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTczMS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3MzI6c3RhdGljIHZvaWQgcG1lbV9yZXZhbGlkYXRlX3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzMzLXtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzQ3LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc0ODpzdGF0aWMgdm9pZCBuZF9wbWVtX25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gbnZkaW1tX2V2ZW50IGV2ZW50KVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTc0OS17XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTc2Mi1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3NjM6TU9EVUxFX0FMSUFTKFwmIzM0O3BtZW1cJiMzNDspO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc2NDpNT0RVTEVfQUxJQVNfTkRfREVWSUNFKE5EX0RFVklDRV9OQU1FU1BBQ0VfSU8pO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc2NTpNT0RVTEVfQUxJQVNfTkRfREVWSUNFKE5EX0RFVklDRV9OQU1FU1BBQ0VfUE1FTSk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzY2LXN0YXRpYyBzdHJ1Y3QgbmRfZGV2aWNlX2RyaXZlciBuZF9wbWVtX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzc2LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc3Nzptb2R1bGVfbmRfZHJpdmVyKG5kX3BtZW1fZHJpdmVyKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy03NzgtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6Nzc5Ok1PRFVMRV9BVVRIT1IoXCYjMzQ7Um9zcyBad2lzbGVyIFx1MDAzY3Jvc3Muendpc2xlckBsaW51eC5pbnRlbC5jb21cdTAwM2VcJiMzNDspO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc4MDpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TlZESU1NIFBlcnNpc3RlbnQgTWVtb3J5IERyaXZlclwmIzM0Oyk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NzgxOk1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTCB2MlwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzk2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb25gIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGltcGFjdCBvZiBgVGVzdENsZWFyUGFnZUhXUG9pc29uYC4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgZmlndXJpbmcgb3V0ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBjYW4mIzM5O3QganVzdCBvcGVyYXRlIGluIGEgdmFjdXVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGNvZGUgYW5kIGhvdyB3aWRlc3ByZWFkIGl0cyB1c2UgaXMuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiBldmVyeSBwbGFjZSBpbiB0aGUga2VybmVsIHRoYXQgcmVsaWVzIG9uIG9yIGludGVyYWN0cyB3aXRoIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb25gLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gcHJvY2VlZCB3aXRoIGFueSBhbmFseXNpcyBvciBtb2RpZmljYXRpb25zLiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtUZXN0Q2xlYXJQYWdlSFdQb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udmRpbW0vcG1lbS5jPTYzPXN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTgyLVx0XHQgKi9cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo4MzpcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy04NC1cdFx0XHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzM2PWludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODIyLVx0XHRmb2xpb19wdXQoZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyODIzOlx0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MjQtXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9Nzg2MD1ib29sIHB1dF9wYWdlX2JhY2tfYnVkZHkoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTc4NzAtXHRcdF9fZnJlZV9vbmVfcGFnZShwYWdlLCBwZm4sIHpvbmUsIDAsIG1pZ3JhdGV0eXBlLCBGUElfTk9ORSk7XG5tbS9wYWdlX2FsbG9jLmM6Nzg3MTpcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcbm1tL3BhZ2VfYWxsb2MuYy03ODcyLVx0XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHB1dF9wYWdlX2JhY2tfYnVkZHlgIGFuZCBgdW5wb2lzb25fbWVtb3J5YCBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlaXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEZpcnN0LCBJJiMzOTtsbCBjb25maXJtIHRoYXQgYHVucG9pc29uX21lbW9yeWAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGlzLCBhcyBJIHJlY2FsbCwgb25seSBlbmFibGVkIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgc2V0LiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBwdXRfcGFnZV9iYWNrX2J1ZGR5YD8gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGl0cyBiZWhhdmlvciBpcyBhbHNvIGdvdmVybmVkIGJ5IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBvciBpZiBpdCBvcGVyYXRlcyBpbmRlcGVuZGVudGx5LCBvciB1bmRlciBhIGRpZmZlcmVudCBjb25kaXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgZm9yIHRoYXQuIExldCYjMzk7cyBnZXQgdG8gdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzg1MDpcdFx0XHR9XG43ODUxOlx0XHRcdGlmIChwYWdlX2NvdW50KHBhZ2VfaGVhZCkgXHUwMDNlIDApXG43ODUyOlx0XHRcdFx0YnJlYWs7XG43ODUzOlx0XHR9XG43ODU0Olx0XHRyZXR1cm4gZmFsc2U7XG43ODU1Olx0fVxuNzg1NjpcdFxuNzg1NzpcdC8qXG43ODU4Olx0ICogQ2FuY2VsIHRha2VvZmYgZG9uZSBieSB0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KCkuXG43ODU5Olx0ICovXG43ODYwOlx0Ym9vbCBwdXRfcGFnZV9iYWNrX2J1ZGR5KHN0cnVjdCBwYWdlICpwYWdlKVxuNzg2MTpcdHtcbjc4NjI6XHRcdHN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpO1xuNzg2MzpcdFxuNzg2NDpcdFx0Z3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSkoXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbjc4NjU6XHRcdGlmIChwdXRfcGFnZV90ZXN0emVybyhwYWdlKSkge1xuNzg2NjpcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuNzg2NzpcdFx0XHRpbnQgbWlncmF0ZXR5cGUgPSBnZXRfcGZuYmxvY2tfbWlncmF0ZXR5cGUocGFnZSwgcGZuKTtcbjc4Njg6XHRcbjc4Njk6XHRcdFx0Q2xlYXJQYWdlSFdQb2lzb25UYWtlbk9mZihwYWdlKTtcbjc4NzA6XHRcdFx0X19mcmVlX29uZV9wYWdlKHBhZ2UsIHBmbiwgem9uZSwgMCwgbWlncmF0ZXR5cGUsIEZQSV9OT05FKTtcbjc4NzE6XHRcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcbjc4NzI6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjc4NzM6XHRcdH1cbjc4NzQ6XHRcbjc4NzU6XHRcdHJldHVybiBmYWxzZTtcbjc4NzY6XHR9XG43ODc3Olx0I2VuZGlmXG43ODc4Olx0XG43ODc5Olx0Ym9vbCBoYXNfbWFuYWdlZF96b25lKGVudW0gem9uZV90eXBlIHpvbmUpXG43ODgwOlx0e1xuNzg4MTpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDtcbjc4ODI6XHRcbjc4ODM6XHRcdGZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkge1xuNzg4NDpcdFx0XHRpZiAobWFuYWdlZF96b25lKFx1MDAyNnBnZGF0LVx1MDAzZW5vZGVfem9uZXNbem9uZV0pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE2MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHB1dF9wYWdlX2JhY2tfYnVkZHlgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYHB1dF9wYWdlX2JhY2tfYnVkZHlgIGlzIGRlZmluZWQsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNvbmRpdGlvbmFsLiBJdCYjMzk7cyBuZXN0bGVkIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRWAgYmxvY2suIFNvLCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29tcGlsZWQgYW5kIGluY2x1ZGVkIGlmIHRoZSBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgdHJhY2UgaXRzIGV4ZWN1dGlvbi4gSnVzdCB0byBiZSBzdXJlLCBJIHdpbGwgY2hlY2sgdGhlIGAjZW5kaWZgIG9uIGxpbmUgNzg3NyB0byBjb25maXJtIHRoZSBjb25kaXRpb25hbCBibG9jayBpcyBjbG9zZWQgcHJvcGVybHkuCgpOb3csIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcy4gTGV0JiMzOTtzIHZlcmlmeSBsaW5lIDc4MzAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODIwOlx0XHRcdGFkZF90b19mcmVlX2xpc3QoY3VycmVudF9idWRkeSwgem9uZSwgaGlnaCwgbWlncmF0ZXR5cGUsIGZhbHNlKTtcbjc4MjE6XHRcdFx0c2V0X2J1ZGR5X29yZGVyKGN1cnJlbnRfYnVkZHksIGhpZ2gpO1xuNzgyMjpcdFx0fVxuNzgyMzpcdH1cbjc4MjQ6XHRcbjc4MjU6XHQvKlxuNzgyNjpcdCAqIFRha2UgYSBwYWdlIHRoYXQgd2lsbCBiZSBtYXJrZWQgYXMgcG9pc29uZWQgb2ZmIHRoZSBidWRkeSBhbGxvY2F0b3IuXG43ODI3Olx0ICovXG43ODI4Olx0Ym9vbCB0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHN0cnVjdCBwYWdlICpwYWdlKVxuNzgyOTpcdHtcbjc4MzA6XHRcdHN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpO1xuNzgzMTpcdFx0dW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbjc4MzI6XHRcdHVuc2lnbmVkIGludCBvcmRlcjtcbjc4MzM6XHRcbjc4MzQ6XHRcdGd1YXJkKHNwaW5sb2NrX2lycXNhdmUpKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG43ODM1Olx0XHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjIE5SX1BBR0VfT1JERVJTOyBvcmRlciYjNDM7JiM0MzspIHtcbjc4MzY6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2VfaGVhZCA9IHBhZ2UgLSAocGZuIFx1MDAyNiAoKDEgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDEpKTtcbjc4Mzc6XHRcdFx0aW50IHBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlX2hlYWQpO1xuNzgzODpcdFxuNzgzOTpcdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2VfaGVhZCkgXHUwMDI2XHUwMDI2IHBhZ2Vfb3JkZXIgXHUwMDNlPSBvcmRlcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc2MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGJlZm9yZSBsaW5lIDc4MjAuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBgI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRWAgZXhpc3QgKmJlZm9yZSogdGhhdCBsaW5lPyBUaGlzIGlzIGEgcHJldHR5IGNvbW1vbiBwYXR0ZXJuLCBjaGVja2luZyBmb3IgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBiZWZvcmUgaW5jbHVkaW5nIG9yIGNvbmRpdGlvbmFsbHkgY29tcGlsaW5nIGEgYmxvY2sgb2YgY29kZS4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSBmaWxlLCBvciBtYXliZSB1c2Ugc29tZSBjbGV2ZXIgZ3JlcHBpbmcsIHRvIGRldGVybWluZSBpZiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlIGlzIHByZXNlbnQgYW5kIHdoZXJlIGV4YWN0bHkgaXQgaXMgaW4gcmVsYXRpb24gdG8gdGhhdCBsaW5lIG51bWJlci4gSXTigJlzIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc4MDA6XHRcdFx0XHRcdCAgIHN0cnVjdCBwYWdlICp0YXJnZXQsIGludCBsb3csIGludCBoaWdoLFxuNzgwMTpcdFx0XHRcdFx0ICAgaW50IG1pZ3JhdGV0eXBlKVxuNzgwMjpcdHtcbjc4MDM6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIGhpZ2g7XG43ODA0Olx0XHRzdHJ1Y3QgcGFnZSAqY3VycmVudF9idWRkeTtcbjc4MDU6XHRcbjc4MDY6XHRcdHdoaWxlIChoaWdoIFx1MDAzZSBsb3cpIHtcbjc4MDc6XHRcdFx0aGlnaC0tO1xuNzgwODpcdFx0XHRzaXplIFx1MDAzZVx1MDAzZT0gMTtcbjc4MDk6XHRcbjc4MTA6XHRcdFx0aWYgKHRhcmdldCBcdTAwM2U9IFx1MDAyNnBhZ2Vbc2l6ZV0pIHtcbjc4MTE6XHRcdFx0XHRjdXJyZW50X2J1ZGR5ID0gcGFnZTtcbjc4MTI6XHRcdFx0XHRwYWdlID0gcGFnZSAmIzQzOyBzaXplO1xuNzgxMzpcdFx0XHR9IGVsc2Uge1xuNzgxNDpcdFx0XHRcdGN1cnJlbnRfYnVkZHkgPSBwYWdlICYjNDM7IHNpemU7XG43ODE1Olx0XHRcdH1cbjc4MTY6XHRcbjc4MTc6XHRcdFx0aWYgKHNldF9wYWdlX2d1YXJkKHpvbmUsIGN1cnJlbnRfYnVkZHksIGhpZ2gpKVxuNzgxODpcdFx0XHRcdGNvbnRpbnVlO1xuNzgxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIxMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipMb2NhdGluZyBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgaW4gbW0vcGFnZV9hbGxvYy5jKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc2VjdGlvbiB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2Agd2hlcmUgYCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGRlZmluZWQgb3IgdXRpbGl6ZWQuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgaGFuZGxpbmcgZm9yIG1lbW9yeSBmYWlsdXJlIHNjZW5hcmlvcywgbGlrZWx5IHJlbGF0ZWQgdG8gZXJyb3IgaW5qZWN0aW9uLCBmYXVsdCBoYW5kbGluZywgb3IgbWF5YmUgZXZlbiBoYXJkd2FyZSByZWxpYWJpbGl0eSBmZWF0dXJlcy4gTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSB0aGlua2luZyBhYm91dCBob3cgdGhpcyBjb3VsZCBpbnRlcmFjdCB3aXRoIE5VTUEgbm9kZXMsIHpvbmUgbWFuYWdlbWVudCwgYW5kIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gc3RyYXRlZ3kuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHNlYXJjaCBpdCBhbmQgcmV2aWV3IHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGZhaWx1cmUgbW9kZXMgYXJlIGJlaW5nIGFkZHJlc3NlZCBhbmQgaG93IHRoZSBjb2RlIHJlc3BvbmRzIHRvIHRoZW0sIGxvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gTXkgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29kZWJhc2Ugd2l0aCByZWdhcmQgdG8gbWVtb3J5IGZhaWx1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9Nzc4ND1FWFBPUlRfU1lNQk9MKGlzX2ZyZWVfYnVkZHlfcGFnZSk7XG5tbS9wYWdlX2FsbG9jLmMtNzc4NS1cbm1tL3BhZ2VfYWxsb2MuYzo3Nzg2OiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbm1tL3BhZ2VfYWxsb2MuYy03Nzg3LXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfdG9fZnJlZV9saXN0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgem9uZSAqem9uZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5WRElNTS9QTUVNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBwZXJmZWN0LiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogd2hhdCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSB3ZSB3b3JraW5nIHdpdGggaGVyZT8gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkmIzM5O3ZlIGlkZW50aWZpZWQgc28gZmFyLiBGaXJzdCwgd2UmIzM5O3ZlIGdvdCBgQkxLX0RFVl9QTUVNYCwgd2hpY2ggcmVzaWRlcyBpbiBgZHJpdmVycy9udmRpbW0vS2NvbmZpZ2AuIFRoaXMgaXMgYSBwcmltYXJ5IGRyaXZlciB0byBjb25zaWRlci4gV2UgbmVlZCB0byByZW1lbWJlciB0aGF0IGBMSUJOVkRJTU1gIGlzIGl0cyBwYXJlbnQgY29uZmlndXJhdGlvbiwgc28gdGhhdCYjMzk7cyBpbmhlcmVudGx5IGltcG9ydGFudCwgdG9vLiBUaGVuLCB3ZSBoYXZlIGBNRU1PUllfRkFJTFVSRWAuIEl0IGFwcGVhcnMgdGhpcyBpcyBrZXksIGFzIGl0JiMzOTtzIHdoZXJlIHRoZSBgSFdQb2lzb25gIGZsYWcgaXMgZGVmaW5lZCBhbmQgbWFuYWdlZC4gSWYgdGhhdCBpc24mIzM5O3QgcHJlc2VudCwgdGhlIGNvZGUgdXNlcyBgVEVTVFNDRkxBR19GQUxTRWAsIHdoaWNoIGlzIG9idmlvdXNseSBzb21ldGhpbmcgdG8gY29uc2lkZXIuCgpJJiMzOTtkIGxpa2UgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGZvciBudmRpbW0gb3IgcG1lbS4gQSBkZWVwZXIgZGl2ZSBpbnRvIGBkcml2ZXJzL252ZGltbS9LY29uZmlnYCBpcyBlc3NlbnRpYWwgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBiZSBjZXJ0YWluIEkgaGF2ZSBhbGwgdGhlIHB1enpsZSBwaWVjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjI6bWVudWNvbmZpZyBMSUJOVkRJTU1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05WRElNTSAoTm9uLVZvbGF0aWxlIE1lbW9yeSBEZXZpY2UpIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE3PWlmIExJQk5WRElNTVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xOC1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6MTk6Y29uZmlnIEJMS19ERVZfUE1FTVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1BNRU06IFBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0zNy1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6Mzg6Y29uZmlnIE5EX0NMQUlNXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTM5LVx0Ym9vbFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy00MC1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6NDE6Y29uZmlnIE5EX0JUVFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy00Mi1cdHRyaXN0YXRlXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTQzLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo0NDpjb25maWcgQlRUXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTQ1LVx0Ym9vbCBcJiMzNDtCVFQ6IEJsb2NrIFRyYW5zbGF0aW9uIFRhYmxlIChhdG9taWMgc2VjdG9yIHVwZGF0ZXMpXCYjMzQ7XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy01OC1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6NTk6Y29uZmlnIE5EX1BGTlxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy02MC1cdHRyaXN0YXRlXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTYxLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo2Mjpjb25maWcgTlZESU1NX1BGTlxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy02My1cdGJvb2wgXCYjMzQ7UEZOOiBNYXAgcGVyc2lzdGVudCAoZGV2aWNlKSBtZW1vcnlcJiMzNDtcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTc2LVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo3Nzpjb25maWcgTlZESU1NX0RBWFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7TlZESU1NIERBWDogUmF3IGFjY2VzcyB0byBwZXJzaXN0ZW50IG1lbW9yeVwmIzM0O1xuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctODktXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjkwOmNvbmZpZyBPRl9QTUVNXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTkxLVx0dHJpc3RhdGUgXCYjMzQ7RGV2aWNlLXRyZWUgc3VwcG9ydCBmb3IgcGVyc2lzdGVudCBtZW1vcnkgcmVnaW9uc1wmIzM0O1xuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctOTktXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjEwMDpjb25maWcgUkFNREFYXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgcGVyc2lzdGVudCBtZW1vcnkgaW50ZXJmYWNlcyBvbiBSQU0gY2FydmVvdXRzXCYjMzQ7XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xMTgtXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjExOTpjb25maWcgTlZESU1NX0tFWVNcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTIwLVx0ZGVmX2Jvb2wgeVxuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTIzLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxMjQ6Y29uZmlnIE5WRElNTV9LTVNBTlxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xMjUtXHRib29sXG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNDItXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE0Mzpjb25maWcgTlZESU1NX1RFU1RfQlVJTERcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTQ0LVx0dHJpc3RhdGUgXCYjMzQ7QnVpbGQgdGhlIHVuaXQgdGVzdCBjb3JlXCYjMzQ7XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTQtXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1NTpjb25maWcgTlZESU1NX1NFQ1VSSVRZX1RFU1RcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTU2LVx0Ym9vbCBcJiMzNDtFbmFibGUgTlZESU1NIHNlY3VyaXR5IHVuaXQgdGVzdHNcJiMzNDtcbi0tXG5kcml2ZXJzL252ZGltbS9idXMuYz05OTA9c3RhdGljIGludCBuZF9uc19mb3JnZXRfcG9pc29uX2NoZWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL252ZGltbS9idXMuYy05OTQtXG5kcml2ZXJzL252ZGltbS9idXMuYzo5OTU6Lyogc2V0X2NvbmZpZyByZXF1aXJlcyBhbiBpZGxlIGludGVybGVhdmUgc2V0ICovXG5kcml2ZXJzL252ZGltbS9idXMuYy05OTYtc3RhdGljIGludCBuZF9jbWRfY2xlYXJfdG9fc2VuZChzdHJ1Y3QgbnZkaW1tX2J1cyAqbnZkaW1tX2J1cyxcbi0tXG5kcml2ZXJzL252ZGltbS9kaW1tLmM9MTY9c3RhdGljIGludCBudmRpbW1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbnZkaW1tL2RpbW0uYy05NS1cbmRyaXZlcnMvbnZkaW1tL2RpbW0uYzo5NjpcdGRldl9kYmcoZGV2LCBcJiMzNDtjb25maWcgZGF0YSBzaXplOiAlZFxcblwmIzM0OywgbmRkLVx1MDAzZW5zYXJlYS5jb25maWdfc2l6ZSk7XG5kcml2ZXJzL252ZGltbS9kaW1tLmMtOTctXG4tLVxuZHJpdmVycy9udmRpbW0vbGFiZWwuYz00NDU9aW50IG5kX2xhYmVsX2RhdGFfaW5pdChzdHJ1Y3QgbnZkaW1tX2RydmRhdGEgKm5kZClcbi0tXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jLTQ1Ny1cdCAgICBuZGQtXHUwMDNlbnNhcmVhLmNvbmZpZ19zaXplID09IDApIHtcbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmM6NDU4Olx0XHRkZXZfZGJnKG5kZC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBpbml0IGNvbmZpZyBkYXRhIGFyZWE6ICgldToldSlcXG5cJiMzNDssXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jLTQ1OS1cdFx0XHRuZGQtXHUwMDNlbnNhcmVhLm1heF94ZmVyLCBuZGQtXHUwMDNlbnNhcmVhLmNvbmZpZ19zaXplKTtcbi0tXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jLTQ3Ny1cbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmM6NDc4Olx0LyogQWxsb2NhdGUgY29uZmlnIGRhdGEgKi9cbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmMtNDc5LVx0Y29uZmlnX3NpemUgPSBuZGQtXHUwMDNlbnNhcmVhLmNvbmZpZ19zaXplO1xuLS1cbmRyaXZlcnMvbnZkaW1tL25kLmg9NjYyPXZvaWQgZGV2bV9uYW1lc3BhY2VfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9udmRpbW0vbmQuaC02NjQtI2lmIElTX0VOQUJMRUQoQ09ORklHX05EX0NMQUlNKVxuZHJpdmVycy9udmRpbW0vbmQuaDo2NjU6LyogbWF4IHN0cnVjdCBwYWdlIHNpemUgaW5kZXBlbmRlbnQgb2Yga2VybmVsIGNvbmZpZyAqL1xuZHJpdmVycy9udmRpbW0vbmQuaC02NjYtI2RlZmluZSBNQVhfU1RSVUNUX1BBR0VfU0laRSA2NFxuLS1cbmRyaXZlcnMvbnZkaW1tL3ZpcnRpb19wbWVtLmM9NjI9c3RhdGljIGludCB2aXJ0aW9fcG1lbV9wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL252ZGltbS92aXJ0aW9fcG1lbS5jLTcxLVx0aWYgKCF2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VnZXQpIHtcbmRyaXZlcnMvbnZkaW1tL3ZpcnRpb19wbWVtLmM6NzI6XHRcdGRldl9lcnIoXHUwMDI2dmRldi1cdTAwM2VkZXYsIFwmIzM0OyVzIGZhaWx1cmU6IGNvbmZpZyBhY2Nlc3MgZGlzYWJsZWRcXG5cJiMzNDssXG5kcml2ZXJzL252ZGltbS92aXJ0aW9fcG1lbS5jLTczLVx0XHRcdF9fZnVuY19fKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NzYKCQkJCQkJCW91dHB1dDogMTk0CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGBwbWVtLmNgIEZvY3VzIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoZSByaWdodCBmdW5jdGlvbnMgd2l0aGluIGBwbWVtLmNgIGFyZSB0YXJnZXRlZCBmb3IgZnV6emluZy4gVGhlIGNoYW5nZSBpcyBkaXJlY3RseSBpbXBhY3RpbmcgYHBtZW1fbWtwYWdlX3ByZXNlbnRgLCBhbmQgdGhhdCBmdW5jdGlvbiYjMzk7cyBsaW5rZWQgdG8gYF9fcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9kb193cml0ZWAsIGBwbWVtX3JlY292ZXJ5X3dyaXRlYCwgYW5kIGBwbWVtX3N1Ym1pdF9iaW9gLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhlc2UgYXJlIGFsbCBwcmV0dHkgc3BlY2lmaWMgdG8gdGhlIHBtZW0gZHJpdmVyIGl0c2VsZiwgbm90IHNvbWUgbGlmZWN5Y2xlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnbG9iYWxseSB1c2VkLiBUaGF0JiMzOTtzIGdvb2QgZnJvbSBhIGZvY3VzIHN0YW5kcG9pbnQuIEl0IGluZGljYXRlcyBhIGRlZmluZWQgc2NvcGUuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJIG5lZWQgdG8ganVzdGlmeSBmdXp6aW5nIHRoaXMuIFRoZSBwYXRjaCBpcyBzaW1wbGlmeWluZyBgcG1lbV9ta3BhZ2VfcHJlc2VudGAgYnkgdXNpbmcgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbigpYCBkaXJlY3RseSBhbmQgYWRkaW5nIGEgYFRFU1RTQ0ZMQUdfRkFMU0VgIG1hY3JvLiBUaGlzIG1vZGlmaWVzIGNvcmUgcGFnZSBmbGFnIGRlZmluaXRpb25zLCBhbmQgc2luY2UgcG1lbSBibG9jayBkcml2ZXIgZXJyb3IvcG9pc29uIHJlY292ZXJ5IHBhdGhzIGFyZSBwb3RlbnRpYWxseSB0b3VjaGVkLCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUuIFRoZSBgRm9jdXNTeW1ib2xzYCBsb29rIHJpZ2h0LCBsaXN0aW5nIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjcnVjaWFsOiBCTEtfREVWX1BNRU0sIExJQk5WRElNTSwgYW5kIE1FTU9SWV9GQUlMVVJFIGFyZSBhbGwgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHBtZW0gd29ya3MuIFRoZSBgTUVNT1JZX0ZBSUxVUkVgIG9uZSBpcyBlc3BlY2lhbGx5IHJlbGV2YW50IHRvIHRoaXMgcGF0Y2gsIHNpbmNlIGl0IGlzIGRpc2FibGluZyBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSXQgc2hvdWxkIGJlIHdvcnRoIGZ1enppbmcgYXMgdGhlIGNvZGUgaXMgbW9kaWZ5aW5nIGVycm9yIHJlY292ZXJ5IHBhdGhzLiBTbywgeWVzLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIHRydWUuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUE1FTSYjMzQ7LAogICAgJiMzNDtMSUJOVkRJTU0mIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwbWVtX21rcGFnZV9wcmVzZW50JiMzNDssCiAgICAmIzM0O19fcG1lbV9jbGVhcl9wb2lzb24mIzM0OywKICAgICYjMzQ7cG1lbV9jbGVhcl9wb2lzb24mIzM0OywKICAgICYjMzQ7cG1lbV9kb193cml0ZSYjMzQ7LAogICAgJiMzNDtwbWVtX3JlY292ZXJ5X3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pIHRvIGxpbnV4L3BhZ2UtZmxhZ3MuaCBmb3IgIUNPTkZJR19NRU1PUllfRkFJTFVSRSBidWlsZHMgYW5kIHVwZGF0ZXMgcG1lbV9ta3BhZ2VfcHJlc2VudCgpIGluIGRyaXZlcnMvbnZkaW1tL3BtZW0uYyB0byBkaXJlY3RseSBjYWxsIFRlc3RDbGVhclBhZ2VIV1BvaXNvbigpIGluc3RlYWQgb2YgYW4gbnZkaW1tLXNwZWNpZmljIHdyYXBwZXIuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgcGFnZS1mbGFnIG1hY3JvcyBhbmQgdGhlIHBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrL0RBWCBkcml2ZXIgcG9pc29uLWNsZWFyaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1BNRU0mIzM0OywKICAgICYjMzQ7TElCTlZESU1NJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cG1lbV9ta3BhZ2VfcHJlc2VudCYjMzQ7LAogICAgJiMzNDtfX3BtZW1fY2xlYXJfcG9pc29uJiMzNDssCiAgICAmIzM0O3BtZW1fY2xlYXJfcG9pc29uJiMzNDssCiAgICAmIzM0O3BtZW1fZG9fd3JpdGUmIzM0OywKICAgICYjMzQ7cG1lbV9yZWNvdmVyeV93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKSB0byBsaW51eC9wYWdlLWZsYWdzLmggZm9yICFDT05GSUdfTUVNT1JZX0ZBSUxVUkUgYnVpbGRzIGFuZCB1cGRhdGVzIHBtZW1fbWtwYWdlX3ByZXNlbnQoKSBpbiBkcml2ZXJzL252ZGltbS9wbWVtLmMgdG8gZGlyZWN0bHkgY2FsbCBUZXN0Q2xlYXJQYWdlSFdQb2lzb24oKSBpbnN0ZWFkIG9mIGFuIG52ZGltbS1zcGVjaWZpYyB3cmFwcGVyLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIHBhZ2UtZmxhZyBtYWNyb3MgYW5kIHRoZSBwZXJzaXN0ZW50IG1lbW9yeSBibG9jay9EQVggZHJpdmVyIHBvaXNvbi1jbGVhcmluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcgLyBjbGVhbnVwIHRoYXQgYWRkcyBzdGFuZGFyZCBURVNUU0NGTEFHX0ZBTFNFIGRlZmluaXRpb25zIGZvciBIV1BvaXNvbiBpbiBcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcdTAwM2Ugd2hlbiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgaXMgbm90IHNldCwgYW5kIHJlbW92ZXMgdGhlIGRyaXZlci1zcGVjaWZpYyB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbiB3cmFwcGVyIGluIGZhdm9yIG9mIGRpcmVjdGx5IGNhbGxpbmcgVGVzdENsZWFyUGFnZUhXUG9pc29uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRhcmllcyBvciBkYXRhIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MzQ0MmYwMzIzMzc1MjljMzU4YzJmNzRhZDA0YzM4MzQ0ODk4ZjE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNTozMTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uYyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uYwppbmRleCAzMGE1MWMzNjVjZThiLi41ZmI4NjU5NWU4YmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL252ZGltbS9wbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udmRpbW0vcG1lbS5jCkBAIC04MCw3ICYjNDM7ODAsNyBAQCBzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LAogCQkgKiBoZXJlIHNpbmNlIHdlJiMzOTtyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZAogCQkgKiBvdXRzdGFuZGluZyBJL08gcmVxdWVzdHMgcGluIHRoZSBkZXZfcGFnZW1hcC4KIAkJICovCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihwYWdlKSkKJiM0MzsJCWlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpCiAJCQljbGVhcl9tY2Vfbm9zcGVjKHBmbik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udmRpbW0vcG1lbS5oIGIvZHJpdmVycy9udmRpbW0vcG1lbS5oCmluZGV4IGE0ODUwOWY5MDE5NjguLjc2ODcwNTA1ZGQ3OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252ZGltbS9wbWVtLmgKQEAgLTEsNyAmIzQzOzEsNiBAQAogLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KICNpZm5kZWYgX19OVkRJTU1fUE1FTV9IX18KICNkZWZpbmUgX19OVkRJTU1fUE1FTV9IX18KLSNpbmNsdWRlICZsdDtsaW51eC9wYWdlLWZsYWdzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFkYmxvY2tzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwpAQCAtMzEsMTUgJiM0MzszMCw0IEBAIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLAogCQlsb25nIG5yX3BhZ2VzLCBlbnVtIGRheF9hY2Nlc3NfbW9kZSBtb2RlLCB2b2lkICoqa2FkZHIsCiAJCXVuc2lnbmVkIGxvbmcgKnBmbik7CiAKLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKICNlbmRpZiAvKiBfX05WRElNTV9QTUVNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA3YTg2MzU3MmFkY2U3Li5hMjMxNWFiMWRkM2E1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtNjU2LDYgJiM0Mzs2NTYsNyBAQCBURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKQogI2RlZmluZSBfX1BHX0hXUE9JU09OICgxVUwgJmx0OyZsdDsgUEdfaHdwb2lzb24pCiAjZWxzZQogUEFHRUZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKQomIzQzO1RFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKQogI2RlZmluZSBfX1BHX0hXUE9JU09OIDAKICNlbmRpZgogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUE1FTSBQb2lzb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjaGFuZ2VzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIE5WRElNTSBkcml2ZXIgYW5kIG1lbW9yeSBlcnJvciBoYW5kbGluZy4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgaW4gYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AuIFRoZSBgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb24ocGFnZSlgIGZ1bmN0aW9uIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKWAuIEkgaW1tZWRpYXRlbHkgc3VzcGVjdCB0aGlzIGlzIHJlbGF0ZWQgdG8gaGFyZHdhcmUgcG9pc29uIGhhbmRsaW5nLCB3aGljaCBpcyBzdGFuZGFyZCB3aXRoIE5WRElNTXMsIHBhcnRpY3VsYXJseSBpbiBtb3JlIHJlY2VudCBrZXJuZWxzLgoKVGhlbiwgbG9va2luZyBhdCBgZHJpdmVycy9udmRpbW0vcG1lbS5oYCwgdGhlIHBhdGNoIHJlbW92ZXMgdGhlIGAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZS1mbGFncy5oJmd0O2AgYW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZSByZXBsYWNlZCBoZWxwZXIsIGB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbmAuIEkmIzM5O2QgZXhwZWN0IHRoZSBoZWFkZXIgaW5jbHVzaW9uIHRvIGJlIHJlbW92ZWQgYmVjYXVzZSB0aGUgaGVscGVyIGlzIHJlbW92ZWQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBsb2dpYyBoYXMgYmVlbiByZWZhY3RvcmVkIG9yIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb24gaXMgZGVmaW5lZC4KCkZpbmFsbHksIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGNoYW5nZSBjYXRjaGVzIG15IGV5ZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYWRkaXRpb24gb2YgYFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKWAgaW4gdGhlIGAjZWxzZWAgYnJhbmNoICh3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzbiYjMzk7dCBkZWZpbmVkKSBpcyBrZXkuIEJhc2ljYWxseSwgd2hlbiBtZW1vcnkgZmFpbHVyZSBpc24mIzM5O3QgZW5hYmxlZCwgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgaXMgZGVmaW5lZCB0byBzaW1wbHkgcmV0dXJuIGZhbHNlIChvciB6ZXJvLCBkZXBlbmRpbmcgb24gaG93IGBURVNUU0NGTEFHX0ZBTFNFYCBpcyBkZWZpbmVkKS4gVGhpcyBpbXBsaWVzIGEgY29uZGl0aW9uYWwgYmVoYXZpb3IsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoeS4gTXkgZ3Vlc3MgaXMgdGhhdCB0aGUgcGF0Y2ggb3B0aW1pemVzIHRoZSBIV1BvaXNvbiBjbGVhcmluZywgYnV0IG9ubHkgd2hlbiB0aGUgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgb3B0aW9uIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gV2hlbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpc24mIzM5O3QgZW5hYmxlZCwgdGhlIHByZXZpb3VzIGNvZGUgcGF0aCBpcyByZXRhaW5lZCwgYnV0IHRoZSBjb2RlIG5vdyBoYXMgYSBuZXcgZGVmaW5pdGlvbiBvZiBgVGVzdENsZWFyUGFnZUhXUG9pc29uYCB3aGljaCByZXR1cm5zIDAuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYm90aCBgcG1lbS5jYCBhbmQgYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCB0byBmdWxseSBncmFzcCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIG1vZGlmaWNhdGlvbiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cyB3aXRoaW4gdGhlIE5WRElNTSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZW1fbWtwYWdlX3ByZXNlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9wbWVtLmM9NTg9c3RhdGljIHBoeXNfYWRkcl90IHRvX29mZnNldChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHNlY3Rvcl90IHNlY3Rvcilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjItXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NjM6c3RhdGljIHZvaWQgcG1lbV9ta3BhZ2VfcHJlc2VudChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBoeXNfYWRkcl90IG9mZnNldCxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02NC1cdFx0dW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9OTc9c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEwMy1cdGlmIChjbGVhcmVkIFx1MDAzZSAwKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTA0Olx0XHRwbWVtX21rcGFnZV9wcmVzZW50KHBtZW0sIG9mZnNldCwgY2xlYXJlZCk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTA1LVx0XHRhcmNoX2ludmFsaWRhdGVfcG1lbShwbWVtLVx1MDAzZXZpcnRfYWRkciAmIzQzOyBvZmZzZXQsIGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBQZXJzaXN0ZW50IE1lbW9yeSBEcml2ZXIqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlJiMzOTtyZSBoYW5kbGluZyBOVkRJTU0gcGVyc2lzdGVudCBtZW1vcnkgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgcmVhZC1maWxlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBsaW5lcyA2MyB0aHJvdWdoIDk1IG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBmb2N1c2luZyB0aGVyZSBiZWNhdXNlIHNvbWV0aGluZyBpbiB0aGF0IGFyZWEgZmVsdCBsaWtlIGl0IG5lZWRlZCByZXZpc2l0aW5nLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGF0IGNvZGUgYmxvY2ssIGNoZWNraW5nIGZvci4uLiB3ZWxsLCBJJiMzOTtsbCBrbm93IGl0IHdoZW4gSSBzZWUgaXQuIEl0IGNvdWxkIGJlIGEgc3BlY2lmaWMgbWVtb3J5IGFjY2VzcyBwYXR0ZXJuLCBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIG9yIGV2ZW4ganVzdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGVycm9yIGNvbmRpdGlvbnMuIEkmIzM5O20gcHJlcGFyZWQgdG8gZm9sbG93IHRoZSBmbG93IGZyb20gdGhlcmUsIGJ1dCB0aGF0IHNlY3Rpb24gZmVlbHMgbGlrZSBhIGxpa2VseSBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9wbWVtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHRyZXR1cm4gKHNlY3RvciBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZUKSAmIzQzOyBwbWVtLVx1MDAzZWRhdGFfb2Zmc2V0O1xuICA2MTpcdH1cbiAgNjI6XHRcbiAgNjM6XHRzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LFxuICA2NDpcdFx0XHR1bnNpZ25lZCBpbnQgbGVuKVxuICA2NTpcdHtcbiAgNjY6XHRcdHBoeXNfYWRkcl90IHBoeXMgPSBwbWVtX3RvX3BoeXMocG1lbSwgb2Zmc2V0KTtcbiAgNjc6XHRcdHVuc2lnbmVkIGxvbmcgcGZuX3N0YXJ0LCBwZm5fZW5kLCBwZm47XG4gIDY4Olx0XG4gIDY5Olx0XHQvKiBvbmx5IHBtZW0gaW4gdGhlIGxpbmVhciBtYXAgc3VwcG9ydHMgSFdQb2lzb24gKi9cbiAgNzA6XHRcdGlmIChpc192bWFsbG9jX2FkZHIocG1lbS1cdTAwM2V2aXJ0X2FkZHIpKVxuICA3MTpcdFx0XHRyZXR1cm47XG4gIDcyOlx0XG4gIDczOlx0XHRwZm5fc3RhcnQgPSBQSFlTX1BGTihwaHlzKTtcbiAgNzQ6XHRcdHBmbl9lbmQgPSBwZm5fc3RhcnQgJiM0MzsgUEhZU19QRk4obGVuKTtcbiAgNzU6XHRcdGZvciAocGZuID0gcGZuX3N0YXJ0OyBwZm4gXHUwMDNjIHBmbl9lbmQ7IHBmbiYjNDM7JiM0MzspIHtcbiAgNzY6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuICA3NzpcdFxuICA3ODpcdFx0XHQvKlxuICA3OTpcdFx0XHQgKiBOb3RlLCBubyBuZWVkIHRvIGhvbGQgYSBnZXRfZGV2X3BhZ2VtYXAoKSByZWZlcmVuY2VcbiAgODA6XHRcdFx0ICogaGVyZSBzaW5jZSB3ZSYjMzk7cmUgaW4gdGhlIGRyaXZlciBJL08gcGF0aCBhbmRcbiAgODE6XHRcdFx0ICogb3V0c3RhbmRpbmcgSS9PIHJlcXVlc3RzIHBpbiB0aGUgZGV2X3BhZ2VtYXAuXG4gIDgyOlx0XHRcdCAqL1xuICA4MzpcdFx0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpKVxuICA4NDpcdFx0XHRcdGNsZWFyX21jZV9ub3NwZWMocGZuKTtcbiAgODU6XHRcdH1cbiAgODY6XHR9XG4gIDg3Olx0XG4gIDg4Olx0c3RhdGljIHZvaWQgcG1lbV9jbGVhcl9iYihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHNlY3Rvcl90IHNlY3RvciwgbG9uZyBibGtzKVxuICA4OTpcdHtcbiAgOTA6XHRcdGlmIChibGtzID09IDApXG4gIDkxOlx0XHRcdHJldHVybjtcbiAgOTI6XHRcdGJhZGJsb2Nrc19jbGVhcihcdTAwMjZwbWVtLVx1MDAzZWJiLCBzZWN0b3IsIGJsa3MpO1xuICA5MzpcdFx0aWYgKHBtZW0tXHUwMDNlYmJfc3RhdGUpXG4gIDk0Olx0XHRcdHN5c2ZzX25vdGlmeV9kaXJlbnQocG1lbS1cdTAwM2ViYl9zdGF0ZSk7XG4gIDk1Olx0fVxuICA5NjpcdFxuICA5NzpcdHN0YXRpYyBsb25nIF9fcG1lbV9jbGVhcl9wb2lzb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxuICA5ODpcdFx0XHRwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW4pXG4gIDk5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBQYWdlIEZsYWdzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZXNlIHBhZ2UgZmxhZ3MsIHNvIGxldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgYXJvdW5kIGxpbmUgNjU2LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcmVsZXZhbnQgbWFjcm8gb3Igc3RydWN0dXJlIGRlZmluaXRpb24gdGhhdCYjMzk7cyBjYXVzaW5nIHRoZSB0cm91YmxlLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBwYWdlIGFsbG9jYXRpb24gb3IgbWF5YmUgc29tZSBzb3J0IG9mIG1pZ3JhdGlvbiBvciBpc29sYXRpb24gZmxhZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBrZXJuZWwgZGV2cyBoYXZlIGNvb2tlZCB1cC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZ3JvdW5kIHRydXRoIEkgbmVlZCB0byBkZWJ1ZyB0aGlzIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NDU6XHRcdEZPTElPX1RFU1RfU0VUX0ZMQUcobWxvY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDY0NjpcdCNlbHNlXG4gNjQ3Olx0Rk9MSU9fRkxBR19GQUxTRShtbG9ja2VkKVxuIDY0ODpcdFx0X19GT0xJT19DTEVBUl9GTEFHX05PT1AobWxvY2tlZClcbiA2NDk6XHRcdEZPTElPX1RFU1RfQ0xFQVJfRkxBR19GQUxTRShtbG9ja2VkKVxuIDY1MDpcdFx0Rk9MSU9fVEVTVF9TRVRfRkxBR19GQUxTRShtbG9ja2VkKVxuIDY1MTpcdCNlbmRpZlxuIDY1MjpcdFxuIDY1MzpcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbiA2NTQ6XHRQQUdFRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbiA2NTU6XHRURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxuIDY1NjpcdCNkZWZpbmUgX19QR19IV1BPSVNPTiAoMVVMIFx1MDAzY1x1MDAzYyBQR19od3BvaXNvbilcbiA2NTc6XHQjZWxzZVxuIDY1ODpcdFBBR0VGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbiA2NTk6XHRURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbiA2NjA6XHQjZGVmaW5lIF9fUEdfSFdQT0lTT04gMFxuIDY2MTpcdCNlbmRpZlxuIDY2MjpcdFxuIDY2MzpcdCNpZmRlZiBDT05GSUdfUEFHRV9JRExFX0ZMQUdcbiA2NjQ6XHQjaWZkZWYgQ09ORklHXzY0QklUXG4gNjY1Olx0Rk9MSU9fVEVTVF9GTEFHKHlvdW5nLCBGT0xJT19IRUFEX1BBR0UpXG4gNjY2Olx0Rk9MSU9fU0VUX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcbiA2Njc6XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcbiA2Njg6XHRGT0xJT19GTEFHKGlkbGUsIEZPTElPX0hFQURfUEFHRSlcbiA2Njk6XHQjZW5kaWZcbiA2NzA6XHQvKiBTZWUgcGFnZV9pZGxlLmggZm9yICE2NEJJVCB3b3JrYXJvdW5kICovXG4gNjcxOlx0I2Vsc2UgLyogIUNPTkZJR19QQUdFX0lETEVfRkxBRyAqL1xuIDY3MjpcdEZPTElPX0ZMQUdfRkFMU0UoeW91bmcpXG4gNjczOlx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHX0ZBTFNFKHlvdW5nKVxuIDY3NDpcdEZPTElPX0ZMQUdfRkFMU0UoaWRsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzNAoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiAzNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIENvZGUgQ2xlYW51cCoqCgpPa2F5LCBzbyB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNvZGUgY2xlYW51cCwgYSByZWZhY3RvcmluZyBwYXRjaCByZWFsbHkuIEkmIzM5O20gYWRkaW5nIGBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilgIGluIGBsaW51eC9wYWdlLWZsYWdzLmhgIHdoaWNoIGRlZmluZXMgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKWAgYW5kIGBUZXN0U2V0UGFnZUhXUG9pc29uKHBhZ2UpYCBldmVuIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZGlzYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCwgdW5pZnlpbmcgdGhlIGRlZmluaXRpb25zLiBJJiMzOTttIGFsc28gcmVtb3ZpbmcgYSBkcml2ZXItc3BlY2lmaWMgd3JhcHBlciwgYHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHBhZ2UpYCwgaW4gYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AgaW4gZmF2b3Igb2YgZGlyZWN0bHkgdXNpbmcgdGhlIHN0YW5kYXJkIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSlgIG1hY3JvLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgYWZ0ZXIgcmV2aWV3aW5nLCB0aGVyZSBhcmUgemVybyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbnZvbHZlZCwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdXNlci1zcGFjZSBjb3BpZXMgaGFwcGVuaW5nLCBhbmQgbm90aGluZyB0aGF0IHRvdWNoZXMgZGF0YSBmbG93IG9yIGJvdW5kcyBjaGVja2luZy4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgY29uc29saWRhdGluZyB0aGUgd2F5IHdlIGhhbmRsZSB0aGVzZSBwYWdlIGZsYWcgaGVscGVyIG1hY3Jvcy4gVGhpcyBpcyBhYm91dCBhcyBsb3ctcmlzayBhcyBpdCBnZXRzLgoKVGhlcmVmb3JlLCBubyBuZWVkIHRvIGZsYWcgdGhpcyB3aXRoIGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjbGVhciBvbiB0aGUganVzdGlmaWNhdGlvbiwgbGV0JiMzOTtzIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTi4gV2l0aCBLQVNBTiwgc3RhbmRhcmQgYnVpbGRzLCBJJiMzOTttIGNoZWNraW5nIGdlbmVyYWwgbWVtb3J5IGFjY2Vzc2VzLCBwYWdlIGZsYWcgb3BlcmF0aW9ucywgZXRjLiBLTVNBTiBmb2N1c2VzIHNwZWNpZmljYWxseSBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzICp0byogdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIGFueSBvZiB0aG9zZSBhcmVhcy4gSXQmIzM5O3MganVzdCBhIHJlZmFjdG9yaW5nIG9mIGV4aXN0aW5nIHBhZ2UgZmxhZyBoZWxwZXJzIGFuZCByZW1vdmVzIHRoYXQgcG1lbSB3cmFwcGVyLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCBleHBvc2VkLCBvciBtYW5pcHVsYXRlZC4gTm8gbmV3IGJ1ZmZlcnMsIG5vIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgbm8tb3AgY29uY2VybmluZyBLTVNBTi4KCk9rYXksIHRoYXQmIzM5O3MgZW5vdWdoLCBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIC8gY2xlYW51cCB0aGF0IGFkZHMgc3RhbmRhcmQgVEVTVFNDRkxBR19GQUxTRSBkZWZpbml0aW9ucyBmb3IgSFdQb2lzb24gaW4gXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXHUwMDNlIHdoZW4gQ09ORklHX01FTU9SWV9GQUlMVVJFIGlzIG5vdCBzZXQsIGFuZCByZW1vdmVzIHRoZSBkcml2ZXItc3BlY2lmaWMgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb24gd3JhcHBlciBpbiBmYXZvciBvZiBkaXJlY3RseSBjYWxsaW5nIFRlc3RDbGVhclBhZ2VIV1BvaXNvbi4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMgb3IgZGF0YSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSByZWZhY3RvcmluZyAvIGNsZWFudXAgdGhhdCBhZGRzIHN0YW5kYXJkIFRFU1RTQ0ZMQUdfRkFMU0UgZGVmaW5pdGlvbnMgZm9yIEhXUG9pc29uIGluIFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFx1MDAzZSB3aGVuIENPTkZJR19NRU1PUllfRkFJTFVSRSBpcyBub3Qgc2V0LCBhbmQgcmVtb3ZlcyB0aGUgZHJpdmVyLXNwZWNpZmljIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uIHdyYXBwZXIgaW4gZmF2b3Igb2YgZGlyZWN0bHkgY2FsbGluZyBUZXN0Q2xlYXJQYWdlSFdQb2lzb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzE6NTUuMjU3NTM1ODIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2NTg2ODM0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9QTUVNXCIsXG4gICAgXCJMSUJOVkRJTU1cIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicG1lbV9ta3BhZ2VfcHJlc2VudFwiLFxuICAgIFwiX19wbWVtX2NsZWFyX3BvaXNvblwiLFxuICAgIFwicG1lbV9jbGVhcl9wb2lzb25cIixcbiAgICBcInBtZW1fZG9fd3JpdGVcIixcbiAgICBcInBtZW1fcmVjb3Zlcnlfd3JpdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcgLyBjbGVhbnVwIHRoYXQgYWRkcyBzdGFuZGFyZCBURVNUU0NGTEFHX0ZBTFNFIGRlZmluaXRpb25zIGZvciBIV1BvaXNvbiBpbiBcXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXFx1MDAzZSB3aGVuIENPTkZJR19NRU1PUllfRkFJTFVSRSBpcyBub3Qgc2V0LCBhbmQgcmVtb3ZlcyB0aGUgZHJpdmVyLXNwZWNpZmljIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uIHdyYXBwZXIgaW4gZmF2b3Igb2YgZGlyZWN0bHkgY2FsbGluZyBUZXN0Q2xlYXJQYWdlSFdQb2lzb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKSB0byBsaW51eC9wYWdlLWZsYWdzLmggZm9yICFDT05GSUdfTUVNT1JZX0ZBSUxVUkUgYnVpbGRzIGFuZCB1cGRhdGVzIHBtZW1fbWtwYWdlX3ByZXNlbnQoKSBpbiBkcml2ZXJzL252ZGltbS9wbWVtLmMgdG8gZGlyZWN0bHkgY2FsbCBUZXN0Q2xlYXJQYWdlSFdQb2lzb24oKSBpbnN0ZWFkIG9mIGFuIG52ZGltbS1zcGVjaWZpYyB3cmFwcGVyLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIHBhZ2UtZmxhZyBtYWNyb3MgYW5kIHRoZSBwZXJzaXN0ZW50IG1lbW9yeSBibG9jay9EQVggZHJpdmVyIHBvaXNvbi1jbGVhcmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzE6NTUuMjU3NTQwMTAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc0NzI5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MzQ0MmYwMzIzMzc1MjljMzU4YzJmNzRhZDA0YzM4MzQ0ODk4ZjE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDU6MzE6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udmRpbW0vcG1lbS5jIGIvZHJpdmVycy9udmRpbW0vcG1lbS5jXFxuaW5kZXggMzBhNTFjMzY1Y2U4Yi4uNWZiODY1OTVlOGJkNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252ZGltbS9wbWVtLmNcXG4rKysgYi9kcml2ZXJzL252ZGltbS9wbWVtLmNcXG5AQCAtODAsNyArODAsNyBAQCBzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LFxcbiBcXHRcXHQgKiBoZXJlIHNpbmNlIHdlJ3JlIGluIHRoZSBkcml2ZXIgSS9PIHBhdGggYW5kXFxuIFxcdFxcdCAqIG91dHN0YW5kaW5nIEkvTyByZXF1ZXN0cyBwaW4gdGhlIGRldl9wYWdlbWFwLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHBhZ2UpKVxcbitcXHRcXHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpKVxcbiBcXHRcXHRcXHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XFxuIFxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9wbWVtLmggYi9kcml2ZXJzL252ZGltbS9wbWVtLmhcXG5pbmRleCBhNDg1MDlmOTAxOTY4Li43Njg3MDUwNWRkNzk3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxcbisrKyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxcbkBAIC0xLDcgKzEsNiBAQFxcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbiAjaWZuZGVmIF9fTlZESU1NX1BNRU1fSF9fXFxuICNkZWZpbmUgX19OVkRJTU1fUE1FTV9IX19cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcmVtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuQEAgLTMxLDE1ICszMCw0IEBAIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLFxcbiBcXHRcXHRsb25nIG5yX3BhZ2VzLCBlbnVtIGRheF9hY2Nlc3NfbW9kZSBtb2RlLCB2b2lkICoqa2FkZHIsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgKnBmbik7XFxuIFxcbi0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4te1xcbi1cXHRyZXR1cm4gVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpO1xcbi19XFxuLSNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4te1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4tI2VuZGlmXFxuICNlbmRpZiAvKiBfX05WRElNTV9QTUVNX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uYTIzMTVhYjFkZDNhNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTY1Niw2ICs2NTYsNyBAQCBURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxcbiAjZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcXHUwMDNjXFx1MDAzYyBQR19od3BvaXNvbilcXG4gI2Vsc2VcXG4gUEFHRUZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKVxcbitURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcXG4gI2RlZmluZSBfX1BHX0hXUE9JU09OIDBcXG4gI2VuZGlmXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMTo1NS42NTU2MDcxMzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY1NDkzNTEyNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfUE1FTVwiLFxuICAgIFwiTElCTlZESU1NXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBtZW1fbWtwYWdlX3ByZXNlbnRcIixcbiAgICBcIl9fcG1lbV9jbGVhcl9wb2lzb25cIixcbiAgICBcInBtZW1fY2xlYXJfcG9pc29uXCIsXG4gICAgXCJwbWVtX2RvX3dyaXRlXCIsXG4gICAgXCJwbWVtX3JlY292ZXJ5X3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbikgdG8gbGludXgvcGFnZS1mbGFncy5oIGZvciAhQ09ORklHX01FTU9SWV9GQUlMVVJFIGJ1aWxkcyBhbmQgdXBkYXRlcyBwbWVtX21rcGFnZV9wcmVzZW50KCkgaW4gZHJpdmVycy9udmRpbW0vcG1lbS5jIHRvIGRpcmVjdGx5IGNhbGwgVGVzdENsZWFyUGFnZUhXUG9pc29uKCkgaW5zdGVhZCBvZiBhbiBudmRpbW0tc3BlY2lmaWMgd3JhcHBlci4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBwYWdlLWZsYWcgbWFjcm9zIGFuZCB0aGUgcGVyc2lzdGVudCBtZW1vcnkgYmxvY2svREFYIGRyaXZlciBwb2lzb24tY2xlYXJpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTM0NDJmMDMyMzM3NTI5YzM1OGMyZjc0YWQwNGMzODM0NDg5OGYxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDU6MzE6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9wbWVtLmMgYi9kcml2ZXJzL252ZGltbS9wbWVtLmNcbmluZGV4IDMwYTUxYzM2NWNlOGIuLjVmYjg2NTk1ZThiZDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252ZGltbS9wbWVtLmNcbisrKyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uY1xuQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIHZvaWQgcG1lbV9ta3BhZ2VfcHJlc2VudChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBoeXNfYWRkcl90IG9mZnNldCxcbiBcdFx0ICogaGVyZSBzaW5jZSB3ZSdyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZFxuIFx0XHQgKiBvdXRzdGFuZGluZyBJL08gcmVxdWVzdHMgcGluIHRoZSBkZXZfcGFnZW1hcC5cbiBcdFx0ICovXG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihwYWdlKSlcbitcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcbiBcdFx0XHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaCBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxuaW5kZXggYTQ4NTA5ZjkwMTk2OC4uNzY4NzA1MDVkZDc5NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxuKysrIGIvZHJpdmVycy9udmRpbW0vcG1lbS5oXG5AQCAtMSw3ICsxLDYgQEBcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICNpZm5kZWYgX19OVkRJTU1fUE1FTV9IX19cbiAjZGVmaW5lIF9fTlZESU1NX1BNRU1fSF9fXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuQEAgLTMxLDE1ICszMCw0IEBAIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLFxuIFx0XHRsb25nIG5yX3BhZ2VzLCBlbnVtIGRheF9hY2Nlc3NfbW9kZSBtb2RlLCB2b2lkICoqa2FkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgKnBmbik7XG4gXG4tI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcbi17XG4tXHRyZXR1cm4gVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLSNlbmRpZlxuICNlbmRpZiAvKiBfX05WRElNTV9QTUVNX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbmluZGV4IDdhODYzNTcyYWRjZTcuLmEyMzE1YWIxZGQzYTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbkBAIC02NTYsNiArNjU2LDcgQEAgVEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbiAjZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcdTAwM2NcdTAwM2MgUEdfaHdwb2lzb24pXG4gI2Vsc2VcbiBQQUdFRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pXG4rVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pXG4gI2RlZmluZSBfX1BHX0hXUE9JU09OIDBcbiAjZW5kaWZcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMxOjU1LjY1NTYwOTE1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MjA1MjE2NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIEdpdCBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdXNlcidzIGdpdmVuIG1lIGEgZ2l0IHBhdGNoIGRpZmYgYW5kIHdhbnRzIG15IGV4cGVydCBleWUgb24gaXRzIHN1aXRhYmlsaXR5IGZvciBzeXprYWxsZXIgZnV6emluZywgc3BlY2lmaWNhbGx5IG9uIGFuIGFtZDY0IGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50PyBUaGlzIGlzIExpbnV4IGtlcm5lbCBwYXRjaCB0cmlhZ2UgZm9yIGZ1enppbmcg4oCTIHB1cmUgc29mdHdhcmUgdGVzdGluZyBhbmQgZGVmZW5zaXZlIFFBLCBzbyBpbmhlcmVudGx5IGJlbmlnbi4gTm8gcmVkIGZsYWdzIHJpZ2h0IG9mZiB0aGUgYmF0LCB3aGljaCBpcyBnb29kLlxuXG5Ob3csIHRoZSBwYXRjaCBpdHNlbGYuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBjaGFuZ2VzIGFjcm9zcyB0aHJlZSBmaWxlcywgYW5kIHRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIG1lbW9yeSBwb2lzb24gZmxhZy5cblxuKiAgIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgOiBUaGUgY3J1Y2lhbCBjaGFuZ2UgaGVyZSBpcyBpbiBgcG1lbV9ta3BhZ2VfcHJlc2VudGAuIFRoZSBjb2RlIHdlbnQgZnJvbSBgaWYgKHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHBhZ2UpKWAgdG8gYGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpYC4gVGhpcyBpcyB0aGUgbW9zdCB2aXNpYmxlIGNoYW5nZS5cbiogICBgZHJpdmVycy9udmRpbW0vcG1lbS5oYDogVGhpcyBtZWFucyB0aGUgbnZkaW1tLXNwZWNpZmljIHdyYXBwZXIgZnVuY3Rpb24gYHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uYCBpcyByZW1vdmVkIGJlY2F1c2UgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5LlxuKiAgIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGA6IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIFByZXZpb3VzbHksIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb25gIHdhc24ndCBkZWZpbmVkIGlmIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIHdhcyBkaXNhYmxlZC4gVGhlIHBhdGNoIG5vdyBpbnRyb2R1Y2VzIGBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilgIHVuZGVyIHRoZSBgI2Vsc2VgIGNvbmRpdGlvbiBmb3IgYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIFRoaXMgY2xldmVybHkgZGVmaW5lcyBgVGVzdENsZWFyUGFnZUhXUG9pc29uYCB0byBzaW1wbHkgcmV0dXJuIDAvZmFsc2UgaW4gdGhlIGFic2VuY2Ugb2YgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3ZlIHJlZmFjdG9yZWQgdGhlIGNvZGUgdG8gdXNlIHRoZSBtb3JlIGdlbmVyaWMgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgdW5jb25kaXRpb25hbGx5LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZW5hYmxlZC4gSXQgcHJvdmlkZXMgYSBjb21tb24gcGF0aCByZWdhcmRsZXNzLCBhbmQgdGhhdCBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUncyBhbnkgaW1wbGljaXQgYmVoYXZpb3IgYmVpbmcgY2hhbmdlZCB0aGF0IGNvdWxkIHRyaXAgdXAgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHJ1biBzb21lIHF1aWNrIGNoZWNrcyB1c2luZyBteSBzdGFuZGFyZCBzZXQgb2YgY29kZWJhc2UgdG9vbHMuIEknbGwgc2VhcmNoIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbmQgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgbWF5YmUgbG9vayBmb3IgaW5kaXJlY3QgY2FsbHMgb3IgdXNlcyBvZiB0aGlzIHBvaXNvbiBmbGFnIHRoYXQgbWlnaHQgaGF2ZSBzdWJ0bGUsIHVuZXhwZWN0ZWQgZWZmZWN0cy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBsb2NhbGl6ZWQsIHdlbGwtdW5kZXJzdG9vZCwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgZnV6emluZyBzdXJmYWNlcyBvciwgY3J1Y2lhbGx5LCBlbGltaW5hdGUgZXhpc3Rpbmcgb25lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyMSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjEwLjg2MDgzMTY3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE0ODgzMTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZW1fbWtwYWdlX3ByZXNlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udmRpbW0vcG1lbS5jPTU4PXN0YXRpYyBwaHlzX2FkZHJfdCB0b19vZmZzZXQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjYzOnN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY0LVxcdFxcdHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9OTc9c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTAzLVxcdGlmIChjbGVhcmVkIFxcdTAwM2UgMCkge1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxMDQ6XFx0XFx0cG1lbV9ta3BhZ2VfcHJlc2VudChwbWVtLCBvZmZzZXQsIGNsZWFyZWQpO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMDUtXFx0XFx0YXJjaF9pbnZhbGlkYXRlX3BtZW0ocG1lbS1cXHUwMDNldmlydF9hZGRyICsgb2Zmc2V0LCBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjoxMy4zNzU3MjEyNTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY2ODA5MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIFBhZ2UgRmxhZ3MqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZXNlIHBhZ2UgZmxhZ3MsIHNvIGxldCdzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIGFyb3VuZCBsaW5lIDY1Ni4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIHJlbGV2YW50IG1hY3JvIG9yIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRoYXQncyBjYXVzaW5nIHRoZSB0cm91YmxlLiBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHBhZ2UgYWxsb2NhdGlvbiBvciBtYXliZSBzb21lIHNvcnQgb2YgbWlncmF0aW9uIG9yIGlzb2xhdGlvbiBmbGFnLiBMZXQncyBzZWUgd2hhdCB0aGUga2VybmVsIGRldnMgaGF2ZSBjb29rZWQgdXAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGdyb3VuZCB0cnV0aCBJIG5lZWQgdG8gZGVidWcgdGhpcyBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU0MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjE2LjE0MjUzMzAxOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NDU6XFx0XFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyhtbG9ja2VkLCBGT0xJT19IRUFEX1BBR0UpXFxuIDY0NjpcXHQjZWxzZVxcbiA2NDc6XFx0Rk9MSU9fRkxBR19GQUxTRShtbG9ja2VkKVxcbiA2NDg6XFx0XFx0X19GT0xJT19DTEVBUl9GTEFHX05PT1AobWxvY2tlZClcXG4gNjQ5OlxcdFxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBR19GQUxTRShtbG9ja2VkKVxcbiA2NTA6XFx0XFx0Rk9MSU9fVEVTVF9TRVRfRkxBR19GQUxTRShtbG9ja2VkKVxcbiA2NTE6XFx0I2VuZGlmXFxuIDY1MjpcXHRcXG4gNjUzOlxcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG4gNjU0OlxcdFBBR0VGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxcbiA2NTU6XFx0VEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcXG4gNjU2OlxcdCNkZWZpbmUgX19QR19IV1BPSVNPTiAoMVVMIFxcdTAwM2NcXHUwMDNjIFBHX2h3cG9pc29uKVxcbiA2NTc6XFx0I2Vsc2VcXG4gNjU4OlxcdFBBR0VGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcXG4gNjU5OlxcdFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKVxcbiA2NjA6XFx0I2RlZmluZSBfX1BHX0hXUE9JU09OIDBcXG4gNjYxOlxcdCNlbmRpZlxcbiA2NjI6XFx0XFxuIDY2MzpcXHQjaWZkZWYgQ09ORklHX1BBR0VfSURMRV9GTEFHXFxuIDY2NDpcXHQjaWZkZWYgQ09ORklHXzY0QklUXFxuIDY2NTpcXHRGT0xJT19URVNUX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcXG4gNjY2OlxcdEZPTElPX1NFVF9GTEFHKHlvdW5nLCBGT0xJT19IRUFEX1BBR0UpXFxuIDY2NzpcXHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcXG4gNjY4OlxcdEZPTElPX0ZMQUcoaWRsZSwgRk9MSU9fSEVBRF9QQUdFKVxcbiA2Njk6XFx0I2VuZGlmXFxuIDY3MDpcXHQvKiBTZWUgcGFnZV9pZGxlLmggZm9yICE2NEJJVCB3b3JrYXJvdW5kICovXFxuIDY3MTpcXHQjZWxzZSAvKiAhQ09ORklHX1BBR0VfSURMRV9GTEFHICovXFxuIDY3MjpcXHRGT0xJT19GTEFHX0ZBTFNFKHlvdW5nKVxcbiA2NzM6XFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHX0ZBTFNFKHlvdW5nKVxcbiA2NzQ6XFx0Rk9MSU9fRkxBR19GQUxTRShpZGxlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjoxNi4xNDI2MzkzMzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDg0ODA5Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBwbWVtX21rcGFnZV9wcmVzZW50KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGhlYWQgb3ZlciB0byB0aGUgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AgZmlsZSDigJMgdGhhdCdzIHdoZXJlIHRoZSBwZXJzaXN0ZW50IG1lbW9yeSBzdHVmZiBsaXZlcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgTlZESU1NIGRyaXZlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwYWdlIGhhbmRsaW5nLCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBwbWVtX21rcGFnZV9wcmVzZW50YCBmdW5jdGlvbi4gVGhhdCBmdW5jdGlvbiB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIG1hbmFnZXMgbWVtb3J5IHBhZ2VzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgcGVyc2lzdGVudCBtZW1vcnkgZGV2aWNlcy4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aGUgY29kZSBlbnN1cmVzIGRhdGEgY29uc2lzdGVuY3kgYW5kIGhhbmRsZXMgcG90ZW50aWFsIHBvd2VyIGZhaWx1cmVzIGluIHJlbGF0aW9uIHRvIG1lbW9yeSBiZWluZyBcInByZXNlbnRcIi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgdG8gaG93IHdlIGFyZSBtYWtpbmcgdGhpcyB3b3JrIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gVGltZSB0byBkaWcgaW4gYW5kIHJlbWluZCBteXNlbGYgb2YgdGhvc2UgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI4NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6MTkuNjI3NDUyNDg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbnZkaW1tL3BtZW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRyZXR1cm4gKHNlY3RvciBcXHUwMDNjXFx1MDAzYyBTRUNUT1JfU0hJRlQpICsgcG1lbS1cXHUwMDNlZGF0YV9vZmZzZXQ7XFxuICA2MTpcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXFxuICA2NDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGVuKVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0cGh5c19hZGRyX3QgcGh5cyA9IHBtZW1fdG9fcGh5cyhwbWVtLCBvZmZzZXQpO1xcbiAgNjc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm5fc3RhcnQsIHBmbl9lbmQsIHBmbjtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0Lyogb25seSBwbWVtIGluIHRoZSBsaW5lYXIgbWFwIHN1cHBvcnRzIEhXUG9pc29uICovXFxuICA3MDpcXHRcXHRpZiAoaXNfdm1hbGxvY19hZGRyKHBtZW0tXFx1MDAzZXZpcnRfYWRkcikpXFxuICA3MTpcXHRcXHRcXHRyZXR1cm47XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdHBmbl9zdGFydCA9IFBIWVNfUEZOKHBoeXMpO1xcbiAgNzQ6XFx0XFx0cGZuX2VuZCA9IHBmbl9zdGFydCArIFBIWVNfUEZOKGxlbik7XFxuICA3NTpcXHRcXHRmb3IgKHBmbiA9IHBmbl9zdGFydDsgcGZuIFxcdTAwM2MgcGZuX2VuZDsgcGZuKyspIHtcXG4gIDc2OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0XFx0LypcXG4gIDc5OlxcdFxcdFxcdCAqIE5vdGUsIG5vIG5lZWQgdG8gaG9sZCBhIGdldF9kZXZfcGFnZW1hcCgpIHJlZmVyZW5jZVxcbiAgODA6XFx0XFx0XFx0ICogaGVyZSBzaW5jZSB3ZSdyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZFxcbiAgODE6XFx0XFx0XFx0ICogb3V0c3RhbmRpbmcgSS9PIHJlcXVlc3RzIHBpbiB0aGUgZGV2X3BhZ2VtYXAuXFxuICA4MjpcXHRcXHRcXHQgKi9cXG4gIDgzOlxcdFxcdFxcdGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpXFxuICA4NDpcXHRcXHRcXHRcXHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XFxuICA4NTpcXHRcXHR9XFxuICA4NjpcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdHN0YXRpYyB2b2lkIHBtZW1fY2xlYXJfYmIoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IsIGxvbmcgYmxrcylcXG4gIDg5OlxcdHtcXG4gIDkwOlxcdFxcdGlmIChibGtzID09IDApXFxuICA5MTpcXHRcXHRcXHRyZXR1cm47XFxuICA5MjpcXHRcXHRiYWRibG9ja3NfY2xlYXIoXFx1MDAyNnBtZW0tXFx1MDAzZWJiLCBzZWN0b3IsIGJsa3MpO1xcbiAgOTM6XFx0XFx0aWYgKHBtZW0tXFx1MDAzZWJiX3N0YXRlKVxcbiAgOTQ6XFx0XFx0XFx0c3lzZnNfbm90aWZ5X2RpcmVudChwbWVtLVxcdTAwM2ViYl9zdGF0ZSk7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBsb25nIF9fcG1lbV9jbGVhcl9wb2lzb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxcbiAgOTg6XFx0XFx0XFx0cGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuKVxcbiAgOTk6XFx0e1xcbiAxMDA6XFx0XFx0cGh5c19hZGRyX3QgcGh5cyA9IHBtZW1fdG9fcGh5cyhwbWVtLCBvZmZzZXQpO1xcbiAxMDE6XFx0XFx0bG9uZyBjbGVhcmVkID0gbnZkaW1tX2NsZWFyX3BvaXNvbih0b19kZXYocG1lbSksIHBoeXMsIGxlbik7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmIChjbGVhcmVkIFxcdTAwM2UgMCkge1xcbiAxMDQ6XFx0XFx0XFx0cG1lbV9ta3BhZ2VfcHJlc2VudChwbWVtLCBvZmZzZXQsIGNsZWFyZWQpO1xcbiAxMDU6XFx0XFx0XFx0YXJjaF9pbnZhbGlkYXRlX3BtZW0ocG1lbS1cXHUwMDNldmlydF9hZGRyICsgb2Zmc2V0LCBsZW4pO1xcbiAxMDY6XFx0XFx0fVxcbiAxMDc6XFx0XFx0cmV0dXJuIGNsZWFyZWQ7XFxuIDEwODpcXHR9XFxuIDEwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6MTkuNjI3NTg4Mjc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY0MTIzNjk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIE5WRElNTS9QTUVNKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBhcmUgTlZESU1NL1BNRU0gdGFyZ2V0cyB2aWFibGUgZm9yIGZ1enppbmcsIGFuZCBhcmUgdGhleSB3b3J0aCB0aGUgZWZmb3J0PyBUaW1lIHRvIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QuXG5cblRoZSBjaGFuZ2UgdG91Y2hlcyBib3RoIGNvcmUgZmlsZXMgYW5kIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCBhZGRpbmcgdGhlIGBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilgIG1hY3JvLCAqYW5kKiB1cGRhdGVzIHRvIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgIGFuZCBgcG1lbS5oYCwgd2l0aCBkaXJlY3QgY2FsbHMgdG8gYFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKWAuIFNvIHRoYXQgdGlja3MgdGhlIGJveCBvZiBiZWluZyBhbiBhcmVhIHRoYXQgY291bGQgYmUgZXhwb3NlZCBpbiBhIHdheSB3ZSdkIGxpa2UgdG8gdGFyZ2V0IGl0LlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBOVkRJTU0vUE1FTSBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgc2V0dXAuIENhbiBJIGV2ZW4gZ2V0IGF0IGl0PyBHb29kIG5ld3Mg4oCTIGl0IGxvb2tzIGxpa2UgTlZESU1NL1BNRU0gaXMgZW11bGF0YWJsZSBpbiBRRU1VLiBUaGluZ3MgbGlrZSBgbWVtbWFwPW5uW0tNR11Ac3NbS01HXWAsIEFDUEkgTkZJVCwgdmlydGlvLXBtZW0sIGFuZCB0aGUgdW5kZXJseWluZyBuZF9lODIwIC8gbGlibnZkaW1tIC8gcG1lbSBkcml2ZXIgcHJvdmlkZSBhIHBhdGguIEFuZCBzaW5jZSB0aGUgY29kZSB0aGF0J3MgYmVpbmcgY2hhbmdlZCBsaXZlcyBpbiBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCwgdGhpcyBzZWVtcyB0byBjb25maXJtIGl0J3MgYSBkcml2ZXIgd2UgKmNhbiogZ2V0IGF0LlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdG8gZW5hYmxlIHRoaXMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIHNlZSBleGFjdGx5IHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWQgdG8gYmUgc2V0IHRvIGVuYWJsZSBgZHJpdmVycy9udmRpbW0vcG1lbS5jYC4gT25jZSBJIGtub3cgdGhhdCwgSSdsbCBiZSBpbiBhIGJldHRlciBwb3NpdGlvbiB0byBnYXVnZSB0aGUgc2NvcGUgYW5kIGNvbXBsZXhpdHkgb2Ygc2V0dGluZyB1cCBhIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjoyMy4yNjg4MjczNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MTIwMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1BNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udmRpbW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udmRpbW0vS2NvbmZpZz0xNz1pZiBMSUJOVkRJTU1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6MTk6Y29uZmlnIEJMS19ERVZfUE1FTVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIlBNRU06IFBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjoyMy4zNTY5NTQ5MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ4NTEyOTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVkRJTU0gS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9udmRpbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gem9vbSBpbiBhcm91bmQgbGluZSAxNy4gVGhlIEtjb25maWcgZmlsZXMgYXJlIGVzc2VudGlhbCBmb3IgY29uZmlndXJpbmcga2VybmVsIG1vZHVsZXMsIHNvIHRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIHRoZSBvcHRpb25zIHJlbGF0ZWQgdG8gTm9uLVZvbGF0aWxlIERJTU1zLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSwgdGhpbmdzIGxpa2Ugd2hldGhlciBvciBub3QgdGhlIE5WRElNTSBzdXBwb3J0IGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBkaXJlY3RseSBvciBhcyBhIG1vZHVsZSwgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHNldHRpbmdzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgcHJpbWFyeSBkZWNpc2lvbiBwb2ludHMgdGhlIGtlcm5lbCBtYWtlcyBkdXJpbmcgY29tcGlsYXRpb24gY29uY2VybmluZyBOVkRJTU0gc3VwcG9ydCwgYXMgSSBtaWdodCBiZSBwcmVwYXJpbmcgdG8gZWl0aGVyIGVuYWJsZSwgZGlzYWJsZSwgb3IgYWRqdXN0IHRoZXNlIHNldHRpbmdzIGZvciBhIHNwZWNpZmljIGRlcGxveW1lbnQgb3IgZGVidWdnaW5nIHNjZW5hcmlvLiBUaGlzIGxpbmUgb2YgaW5xdWlyeSBzaG91bGQgcXVpY2tseSBnaXZlIG1lIHRoZSBzY29wZSBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6MjUuODQyMDg2OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9udmRpbW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBMSUJOVkRJTU1cXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJOVkRJTU0gKE5vbi1Wb2xhdGlsZSBNZW1vcnkgRGV2aWNlKSBTdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBQSFlTX0FERFJfVF82NEJJVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVlxcbiAgIDc6XFx0XFx0c2VsZWN0IE1FTVJFR0lPTlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBHZW5lcmljIHN1cHBvcnQgZm9yIG5vbi12b2xhdGlsZSBtZW1vcnkgZGV2aWNlcyBpbmNsdWRpbmdcXG4gIDEwOlxcdFxcdCAgQUNQSS02LU5GSVQgZGVmaW5lZCByZXNvdXJjZXMuICBPbiBwbGF0Zm9ybXMgdGhhdCBkZWZpbmUgYW5cXG4gIDExOlxcdFxcdCAgTkZJVCwgb3Igb3RoZXJ3aXNlIGNhbiBkaXNjb3ZlciBOVkRJTU0gcmVzb3VyY2VzLCBhIGxpYm52ZGltbVxcbiAgMTI6XFx0XFx0ICBidXMgaXMgcmVnaXN0ZXJlZCB0byBhZHZlcnRpc2UgUE1FTSAocGVyc2lzdGVudCBtZW1vcnkpXFxuICAxMzpcXHRcXHQgIG5hbWVzcGFjZXMgKC9kZXYvcG1lbVgpLiBBIFBNRU0gbmFtZXNwYWNlIHJlZmVycyB0byBhXFxuICAxNDpcXHRcXHQgIG1lbW9yeSByZXNvdXJjZSB0aGF0IG1heSBzcGFuIG11bHRpcGxlIERJTU1zIGFuZCBzdXBwb3J0IERBWFxcbiAgMTU6XFx0XFx0ICAoc2VlIENPTkZJR19EQVgpLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBMSUJOVkRJTU1cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIEJMS19ERVZfUE1FTVxcbiAgMjA6XFx0XFx0dHJpc3RhdGUgXFxcIlBNRU06IFBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMjE6XFx0XFx0ZGVmYXVsdCBMSUJOVkRJTU1cXG4gIDIyOlxcdFxcdHNlbGVjdCBEQVhcXG4gIDIzOlxcdFxcdHNlbGVjdCBORF9CVFQgaWYgQlRUXFxuICAyNDpcXHRcXHRzZWxlY3QgTkRfUEZOIGlmIE5WRElNTV9QRk5cXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgTWVtb3J5IHJhbmdlcyBmb3IgUE1FTSBhcmUgZGVzY3JpYmVkIGJ5IGVpdGhlciBhbiBORklUXFxuICAyNzpcXHRcXHQgIChOVkRJTU0gRmlybXdhcmUgSW50ZXJmYWNlIFRhYmxlLCBzZWUgQ09ORklHX0FDUElfTkZJVCksIGFcXG4gIDI4OlxcdFxcdCAgbm9uLXN0YW5kYXJkIE9FTS1zcGVjaWZpYyBFODIwIG1lbW9yeSB0eXBlICh0eXBlLTEyLCBzZWVcXG4gIDI5OlxcdFxcdCAgQ09ORklHX1g4Nl9QTUVNX0xFR0FDWSksIG9yIGl0IGlzIG1hbnVhbGx5IHNwZWNpZmllZCBieSB0aGVcXG4gIDMwOlxcdFxcdCAgJ21lbW1hcD1ubltLTUddIXNzW0tNR10nIGtlcm5lbCBjb21tYW5kIGxpbmUgKHNlZVxcbiAgMzE6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnJzdCkuICBUaGlzIGRyaXZlciBjb252ZXJ0c1xcbiAgMzI6XFx0XFx0ICB0aGVzZSBwZXJzaXN0ZW50IG1lbW9yeSByYW5nZXMgaW50byBibG9jayBkZXZpY2VzIHRoYXQgYXJlXFxuICAzMzpcXHRcXHQgIGNhcGFibGUgb2YgREFYIChkaXJlY3QtYWNjZXNzKSBmaWxlIHN5c3RlbSBtYXBwaW5ncy4gIFNlZVxcbiAgMzQ6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbnZkaW1tL252ZGltbS5yc3QgZm9yIG1vcmUgZGV0YWlscy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2UgYW4gTlZESU1NXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBORF9DTEFJTVxcbiAgMzk6XFx0XFx0Ym9vbFxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjI1Ljg0MjE2MTY1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0Mjg4MzMzNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVk1lLW92ZXItRmFicmljIFBNRU0gRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgX19wbWVtX2NsZWFyX3BvaXNvbmAgYW5kIGBwbWVtX21rcGFnZV9wcmVzZW50YCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgIGZpbGUuIEknbSBhc3N1bWluZyB0aGF0IHRoZSBgcG1lbWAgZHJpdmVyIGhlcmUgaXMgaGFuZGxpbmcgcGVyc2lzdGVudCBtZW1vcnksIGxpa2VseSBOVkRJTU1zLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSBuZWVkIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGguIExldCdzIHNlZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSAqcmVhY2hlZCouIFdoZXJlIGFyZSB0aGV5IGNhbGxlZD8gQXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgYSBkYXRhIGFjY2VzcyBwYXRoPyBJIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMsIG9mIGNvdXJzZSwgYnV0IGFsc28gZm9yIGluZGlyZWN0IHVzYWdlIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgb3IgbWFjcm9zLCB3aGljaCBtaWdodCBiZSBjb21tb24gaW4gdGhpcyBraW5kIG9mIGRyaXZlciBjb2RlLiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBhbGwgaW50ZXJmYWNlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBOVk1lLW92ZXItRmFicmljIHN0YWNrOyBhbnkgY2FsbHMgdG8gb3IgZnJvbSB0aGUgZmFicmljIGxheWVycyBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgY29uc2lzdGVuY3kgbW9kZWwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGJvdGggaGFyZHdhcmUgYW5kIHRoZSBzb2Z0d2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk0OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6MjkuMjcwOTk4MTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMTQ0NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZW1fY2xlYXJfcG9pc29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZkaW1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZkaW1tL3BtZW0uYz04OD1zdGF0aWMgdm9pZCBwbWVtX2NsZWFyX2JiKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgc2VjdG9yX3Qgc2VjdG9yLCBsb25nIGJsa3MpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTYtXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjk3OnN0YXRpYyBsb25nIF9fcG1lbV9jbGVhcl9wb2lzb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05OC1cXHRcXHRwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTA5LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxMTA6c3RhdGljIGJsa19zdGF0dXNfdCBwbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTExMS1cXHRcXHRwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW4pXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTExMi17XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjExMzpcXHRsb25nIGNsZWFyZWQgPSBfX3BtZW1fY2xlYXJfcG9pc29uKHBtZW0sIG9mZnNldCwgbGVuKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTE0LVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTE4MD1zdGF0aWMgYmxrX3N0YXR1c190IHBtZW1fZG9fd3JpdGUoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE4Ny1cXHRpZiAodW5saWtlbHkoaXNfYmFkX3BtZW0oXFx1MDAyNnBtZW0tXFx1MDAzZWJiLCBzZWN0b3IsIGxlbikpKSB7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjE4ODpcXHRcXHRibGtfc3RhdHVzX3QgcmMgPSBwbWVtX2NsZWFyX3BvaXNvbihwbWVtLCBwbWVtX29mZiwgbGVuKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTg5LVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTM0MD1zdGF0aWMgc2l6ZV90IHBtZW1fcmVjb3Zlcnlfd3JpdGUoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHBnb2ZmX3QgcGdvZmYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzY0LVxcdHBtZW1fb2ZmID0gUEZOX1BIWVMocGdvZmYpICsgcG1lbS1cXHUwMDNlZGF0YV9vZmZzZXQ7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjM2NTpcXHRjbGVhcmVkID0gX19wbWVtX2NsZWFyX3BvaXNvbihwbWVtLCBwbWVtX29mZiwgbGVuKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzY2LVxcdGlmIChjbGVhcmVkIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBjbGVhcmVkIFxcdTAwM2MgbGVuKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjI5LjM1MTE0OTAwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzM0MjY5MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgUGVyc2lzdGVudCBNZW1vcnkgV3JpdGUgUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlc2UgcGVyc2lzdGVudCBtZW1vcnkgd3JpdGUgZnVuY3Rpb25zLiBMZXQncyBzZWUsIGBwbWVtX2RvX3dyaXRlYCBzZWVtcyB0byBiZSBuZXN0bGVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgYmxvY2sgSS9PIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGhhbmdpbmcgb3V0IGluIGBwbWVtX3N1Ym1pdF9iaW9gLiBPbiB0aGUgb3RoZXIgaGFuZCwgYHBtZW1fcmVjb3Zlcnlfd3JpdGVgIGlzIGNsZWFybHkgdGllZCB0byBkaXJlY3QgYWNjZXNzIChEQVgpIG9wZXJhdGlvbnMsIGxpa2VseSBoYW5kbGluZyBtb3JlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwZXJzaXN0ZW50IG1lbW9yeSBkZXZpY2UgaXRzZWxmLlxuXG5HaXZlbiB0aGlzLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBvdXQgYHBtZW1fc3VibWl0X2Jpb2AgaW4gbW9yZSBkZXRhaWwgdG8gY2xhcmlmeSBpdHMgcm9sZS4gVGhpcyBwYXRoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGdlbmVyYWwgYmxvY2stbGV2ZWwgb3BlcmF0aW9ucywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIFBNIGxheWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODU4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6MzQuNjg1NDIxMTI4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252ZGltbS9wbWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdHN0YXRpYyB2b2lkIHBtZW1fc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuIDIwMTpcXHR7XFxuIDIwMjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMjAzOlxcdFxcdGJsa19zdGF0dXNfdCByYyA9IDA7XFxuIDIwNDpcXHRcXHRib29sIGRvX2FjY3Q7XFxuIDIwNTpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0O1xcbiAyMDY6XFx0XFx0c3RydWN0IGJpb192ZWMgYnZlYztcXG4gMjA3OlxcdFxcdHN0cnVjdCBidmVjX2l0ZXIgaXRlcjtcXG4gMjA4OlxcdFxcdHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSA9IGJpby1cXHUwMDNlYmlfYmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAyMDk6XFx0XFx0c3RydWN0IG5kX3JlZ2lvbiAqbmRfcmVnaW9uID0gdG9fcmVnaW9uKHBtZW0pO1xcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRpZiAoYmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNiBSRVFfUFJFRkxVU0gpIHtcXG4gMjEyOlxcdFxcdFxcdHJldCA9IG52ZGltbV9mbHVzaChuZF9yZWdpb24sIE5VTEwpO1xcbiAyMTM6XFx0XFx0XFx0aWYgKHJldCkge1xcbiAyMTQ6XFx0XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9zdGF0dXMgPSBlcnJub190b19ibGtfc3RhdHVzKHJldCk7XFxuIDIxNTpcXHRcXHRcXHRcXHRiaW9fZW5kaW8oYmlvKTtcXG4gMjE2OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjE3OlxcdFxcdFxcdH1cXG4gMjE4OlxcdFxcdH1cXG4gMjE5OlxcdFxcbiAyMjA6XFx0XFx0aWYgKGJpb19oYXNfZGF0YShiaW8pKSB7XFxuIDIyMTpcXHRcXHRcXHRkb19hY2N0ID0gYmxrX3F1ZXVlX2lvX3N0YXQoYmlvLVxcdTAwM2ViaV9iZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VxdWV1ZSk7XFxuIDIyMjpcXHRcXHRcXHRpZiAoZG9fYWNjdClcXG4gMjIzOlxcdFxcdFxcdFxcdHN0YXJ0ID0gYmlvX3N0YXJ0X2lvX2FjY3QoYmlvKTtcXG4gMjI0OlxcdFxcdFxcdGJpb19mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIGJpbywgaXRlcikge1xcbiAyMjU6XFx0XFx0XFx0XFx0aWYgKG9wX2lzX3dyaXRlKGJpb19vcChiaW8pKSlcXG4gMjI2OlxcdFxcdFxcdFxcdFxcdHJjID0gcG1lbV9kb193cml0ZShwbWVtLCBidmVjLmJ2X3BhZ2UsXFxuIDIyNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBidmVjLmJ2X29mZnNldCxcXG4gMjI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGl0ZXIuYmlfc2VjdG9yLFxcbiAyMjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgYnZlYy5idl9sZW4pO1xcbiAyMzA6XFx0XFx0XFx0XFx0ZWxzZVxcbiAyMzE6XFx0XFx0XFx0XFx0XFx0cmMgPSBwbWVtX2RvX3JlYWQocG1lbSwgYnZlYy5idl9wYWdlLFxcbiAyMzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBidmVjLmJ2X29mZnNldCxcXG4gMjMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaXRlci5iaV9zZWN0b3IsXFxuIDIzNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGJ2ZWMuYnZfbGVuKTtcXG4gMjM1OlxcdFxcdFxcdFxcdGlmIChyYykge1xcbiAyMzY6XFx0XFx0XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9zdGF0dXMgPSByYztcXG4gMjM3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMzg6XFx0XFx0XFx0XFx0fVxcbiAyMzk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjozNC42ODU1NTkzMzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxODk4MjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBOVkRJTU0gUG9pc29uIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2gncyBjb3JlIGZ1bmN0aW9uIGlzIHRvIG9wdGltaXplL3NpbXBsaWZ5IHRoZSBoYW5kbGluZyBvZiBoYXJkd2FyZSBwb2lzb25pbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIE5WRElNTXMsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBhbmFseXplIHdoZXRoZXIgdGhlIHBhdGNoIHdhcnJhbnRzIGEgZnV6emluZyBlZmZvcnQuXG5cbkZpcnN0LCBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AuICBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYSBjb25kaXRpb25hbCB3cmFwcGVyIChgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb25gKSBpcyBiZWluZyByZW1vdmVkLCBhbmQgdGhlIGNhbGwgdG8gYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgaXMgbm93IGhhcHBlbmluZyBkaXJlY3RseS4gVGhlIG9yaWdpbmFsIHdyYXBwZXIgd2FzIGNoZWNraW5nIGZvciBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhbmQgdGhlbiBjYWxsaW5nIHRoZSBwb2lzb24gZnVuY3Rpb24uIE5vdyB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGRpcmVjdGx5LlxuXG5Ob3csIGRvZXMgdGhpcyBxdWFsaWZ5IGFzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nPyAgVGhlIGNyaXRlcmlhIGFyZSBwcmV0dHkgY2xlYXI6IFwiRG8gbm90IGJsaW5kbHkgdHJ1c3QgJ25vIGZ1bmN0aW9uYWwgY2hhbmdlJyBjbGFpbXNcIi4gIEV2ZW4gcmVmYWN0b3JpbmdzIGNhbiBpbnRyb2R1Y2Ugc3VidGxlIHNoaWZ0cy4gU2luY2UgdGhpcyBtb2RpZmllcyByZWFjaGFibGUsIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgKHNwZWNpZmljYWxseSwgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBwYWdlIGZsYWdzIGFuZCB0aGUgTlZESU1NIGJsb2NrIGRyaXZlciksIEknZCBoYXZlIHRvIHNheSAqKldvcnRoRnV6emluZyA9IHRydWUqKi4gVGhlIG1vZGlmaWNhdGlvbnMgYXJlbid0IGRvY3VtZW50YXRpb24sIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciBwYXRocyBzcGVjaWZpYyB0byBvdGhlciBhcmNoaXRlY3R1cmVzLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHBvdGVudGlhbCBlbnRyeXBvaW50cyBvciBjcml0aWNhbCBzeW1ib2xzLiBMb29raW5nIGluIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgZGlyZWN0IGVudHJ5cG9pbnRzIG9yIHRoYXQgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gdGFyZ2V0LiAgSSBzZWUgYSBudW1iZXIgb2Ygc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBwbWVtX21rcGFnZV9wcmVzZW50YCwgYF9fcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9kb193cml0ZWAsIGFuZCBgcG1lbV9zdWJtaXRfYmlvYCwgYW5kIGFsc28gYHBtZW1fcmVjb3Zlcnlfd3JpdGVgLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGNhcmVmdWxseSBhdCB0aGUgY29kZSBpbiBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBub3cgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgcmVhY2hhYmxlIGZyb20gb3V0c2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc1MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjM5LjYwNDU0NTE4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMjM1NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZkaW1tL3BtZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252ZGltbS9wbWVtLmMtMzMtXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjM0OnN0YXRpYyBzdHJ1Y3QgZGV2aWNlICp0b19kZXYoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtKVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zNS17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjQzOnN0YXRpYyBzdHJ1Y3QgbmRfcmVnaW9uICp0b19yZWdpb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtKVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NC17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDctXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjQ4OnN0YXRpYyBwaHlzX2FkZHJfdCBwbWVtX3RvX3BoeXMoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ5LXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01Mi1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTM6c3RhdGljIHNlY3Rvcl90IHRvX3NlY3Qoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU0LXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01Ny1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTg6c3RhdGljIHBoeXNfYWRkcl90IHRvX29mZnNldChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHNlY3Rvcl90IHNlY3RvcilcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTkte1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTYyLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo2MzpzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LFxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02NC1cXHRcXHR1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTg3LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo4ODpzdGF0aWMgdm9pZCBwbWVtX2NsZWFyX2JiKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgc2VjdG9yX3Qgc2VjdG9yLCBsb25nIGJsa3MpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTg5LXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05Ni1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6OTc6c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTk4LVxcdFxcdHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMDktXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjExMDpzdGF0aWMgYmxrX3N0YXR1c190IHBtZW1fY2xlYXJfcG9pc29uKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSxcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTExLVxcdFxcdHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMjMtXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjEyNDpzdGF0aWMgdm9pZCB3cml0ZV9wbWVtKHZvaWQgKnBtZW1fYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEyNS1cXHRcXHR1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE0MS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTQyOnN0YXRpYyBibGtfc3RhdHVzX3QgcmVhZF9wbWVtKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb2ZmLFxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xNDMtXFx0XFx0dm9pZCAqcG1lbV9hZGRyLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE2My1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTY0OnN0YXRpYyBibGtfc3RhdHVzX3QgcG1lbV9kb19yZWFkKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSxcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTY1LVxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZV9vZmYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTc5LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxODA6c3RhdGljIGJsa19zdGF0dXNfdCBwbWVtX2RvX3dyaXRlKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSxcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTgxLVxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZV9vZmYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTk5LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoyMDA6c3RhdGljIHZvaWQgcG1lbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjAxLXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNTYtLyogc2VlIFxcXCJzdHJvbmdcXFwiIGRlY2xhcmF0aW9uIGluIHRvb2xzL3Rlc3RpbmcvbnZkaW1tL3BtZW0tZGF4LmMgKi9cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MjU3Ol9fd2VhayBsb25nIF9fcG1lbV9kaXJlY3RfYWNjZXNzKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGdvZmZfdCBwZ29mZixcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjU4LVxcdFxcdGxvbmcgbnJfcGFnZXMsIGVudW0gZGF4X2FjY2Vzc19tb2RlIG1vZGUsIHZvaWQgKiprYWRkcixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz0zMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBwbWVtX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzA3LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzozMDg6c3RhdGljIGludCBwbWVtX2RheF96ZXJvX3BhZ2VfcmFuZ2Uoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHBnb2ZmX3QgcGdvZmYsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMwOS1cXHRcXHRcXHRcXHQgICAgc2l6ZV90IG5yX3BhZ2VzKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMxNy1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MzE4OnN0YXRpYyBsb25nIHBtZW1fZGF4X2RpcmVjdF9hY2Nlc3Moc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMxOS1cXHRcXHRwZ29mZl90IHBnb2ZmLCBsb25nIG5yX3BhZ2VzLCBlbnVtIGRheF9hY2Nlc3NfbW9kZSBtb2RlLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMzOS0gKi9cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MzQwOnN0YXRpYyBzaXplX3QgcG1lbV9yZWNvdmVyeV93cml0ZShzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2RldiwgcGdvZmZfdCBwZ29mZixcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzQxLVxcdFxcdHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTM4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGRheF9vcGVyYXRpb25zIHBtZW1fZGF4X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zODctXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjM4ODpzdGF0aWMgc3NpemVfdCB3cml0ZV9jYWNoZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzg5LVxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzk1LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzozOTY6c3RhdGljIHNzaXplX3Qgd3JpdGVfY2FjaGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zOTctXFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00MDgtfVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0MDk6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlX2NhY2hlKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDEwLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0MTE6c3RhdGljIHVtb2RlX3QgZGF4X3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBuKVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00MTIte1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcG1lbV9hdHRyaWJ1dGVfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDM1LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0MzY6c3RhdGljIHZvaWQgcG1lbV9yZWxlYXNlX2Rpc2sodm9pZCAqX19wbWVtKVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00Mzcte1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ0Ny1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NDQ4OnN0YXRpYyBpbnQgcG1lbV9wYWdlbWFwX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ0OS1cXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgaW50IG1mX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBmc2RheF9wYWdlbWFwX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NjItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjQ2MzpzdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NjQtXFx0XFx0c3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjEwLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo2MTE6c3RhdGljIGludCBuZF9wbWVtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjEyLXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02NjItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjY2MzpzdGF0aWMgdm9pZCBuZF9wbWVtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY2NC17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjc5LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo2ODA6c3RhdGljIHZvaWQgbmRfcG1lbV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY4MS17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjg0LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo2ODU6c3RhdGljIHZvaWQgcG1lbV9yZXZhbGlkYXRlX3BvaXNvbihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY4Ni17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzMxLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3MzI6c3RhdGljIHZvaWQgcG1lbV9yZXZhbGlkYXRlX3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTczMy17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzQ3LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3NDg6c3RhdGljIHZvaWQgbmRfcG1lbV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIG52ZGltbV9ldmVudCBldmVudClcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzQ5LXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy03NjItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc2MzpNT0RVTEVfQUxJQVMoXFxcInBtZW1cXFwiKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NzY0Ok1PRFVMRV9BTElBU19ORF9ERVZJQ0UoTkRfREVWSUNFX05BTUVTUEFDRV9JTyk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc2NTpNT0RVTEVfQUxJQVNfTkRfREVWSUNFKE5EX0RFVklDRV9OQU1FU1BBQ0VfUE1FTSk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTc2Ni1zdGF0aWMgc3RydWN0IG5kX2RldmljZV9kcml2ZXIgbmRfcG1lbV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzc2LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3Nzc6bW9kdWxlX25kX2RyaXZlcihuZF9wbWVtX2RyaXZlcik7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTc3OC1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6Nzc5Ok1PRFVMRV9BVVRIT1IoXFxcIlJvc3MgWndpc2xlciBcXHUwMDNjcm9zcy56d2lzbGVyQGxpbnV4LmludGVsLmNvbVxcdTAwM2VcXFwiKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NzgwOk1PRFVMRV9ERVNDUklQVElPTihcXFwiTlZESU1NIFBlcnNpc3RlbnQgTWVtb3J5IERyaXZlclxcXCIpO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3ODE6TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTCB2MlxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjo0MC4wNTc3ODYwMzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwODE1ODEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbXBhY3Qgb2YgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIGZpZ3VyaW5nIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBrZXJuZWwuIEkgY2FuJ3QganVzdCBvcGVyYXRlIGluIGEgdmFjdXVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGNvZGUgYW5kIGhvdyB3aWRlc3ByZWFkIGl0cyB1c2UgaXMuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEknbSBnb2luZyB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGV2ZXJ5IHBsYWNlIGluIHRoZSBrZXJuZWwgdGhhdCByZWxpZXMgb24gb3IgaW50ZXJhY3RzIHdpdGggYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBwcm9jZWVkIHdpdGggYW55IGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbnMuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzk2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NDIuMDY1OTQ3MTM2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk3NTU2NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRlc3RDbGVhclBhZ2VIV1BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252ZGltbS9wbWVtLmM9NjM9c3RhdGljIHZvaWQgcG1lbV9ta3BhZ2VfcHJlc2VudChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBoeXNfYWRkcl90IG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy04Mi1cXHRcXHQgKi9cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6ODM6XFx0XFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtODQtXFx0XFx0XFx0Y2xlYXJfbWNlX25vc3BlYyhwZm4pO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzM2PWludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MjItXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4MjM6XFx0XFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgyNC1cXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc4NjA9Ym9vbCBwdXRfcGFnZV9iYWNrX2J1ZGR5KHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTc4NzAtXFx0XFx0X19mcmVlX29uZV9wYWdlKHBhZ2UsIHBmbiwgem9uZSwgMCwgbWlncmF0ZXR5cGUsIEZQSV9OT05FKTtcXG5tbS9wYWdlX2FsbG9jLmM6Nzg3MTpcXHRcXHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpKVxcbm1tL3BhZ2VfYWxsb2MuYy03ODcyLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjo0NC4yNjM1MTE0MTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyNzMxMTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgcHV0X3BhZ2VfYmFja19idWRkeWAgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGVpciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gRmlyc3QsIEknbGwgY29uZmlybSB0aGF0IGB1bnBvaXNvbl9tZW1vcnlgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBpcywgYXMgSSByZWNhbGwsIG9ubHkgZW5hYmxlZCB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHNldC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBwdXRfcGFnZV9iYWNrX2J1ZGR5YD8gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGl0cyBiZWhhdmlvciBpcyBhbHNvIGdvdmVybmVkIGJ5IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBvciBpZiBpdCBvcGVyYXRlcyBpbmRlcGVuZGVudGx5LCBvciB1bmRlciBhIGRpZmZlcmVudCBjb25kaXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBmb3IgdGhhdC4gTGV0J3MgZ2V0IHRvIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjo0Ny4xOTA4Mjc1ODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODUwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3ODUwOlxcdFxcdFxcdH1cXG43ODUxOlxcdFxcdFxcdGlmIChwYWdlX2NvdW50KHBhZ2VfaGVhZCkgXFx1MDAzZSAwKVxcbjc4NTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzg1MzpcXHRcXHR9XFxuNzg1NDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNzg1NTpcXHR9XFxuNzg1NjpcXHRcXG43ODU3OlxcdC8qXFxuNzg1ODpcXHQgKiBDYW5jZWwgdGFrZW9mZiBkb25lIGJ5IHRha2VfcGFnZV9vZmZfYnVkZHkoKS5cXG43ODU5OlxcdCAqL1xcbjc4NjA6XFx0Ym9vbCBwdXRfcGFnZV9iYWNrX2J1ZGR5KHN0cnVjdCBwYWdlICpwYWdlKVxcbjc4NjE6XFx0e1xcbjc4NjI6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XFxuNzg2MzpcXHRcXG43ODY0OlxcdFxcdGd1YXJkKHNwaW5sb2NrX2lycXNhdmUpKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrKTtcXG43ODY1OlxcdFxcdGlmIChwdXRfcGFnZV90ZXN0emVybyhwYWdlKSkge1xcbjc4NjY6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG43ODY3OlxcdFxcdFxcdGludCBtaWdyYXRldHlwZSA9IGdldF9wZm5ibG9ja19taWdyYXRldHlwZShwYWdlLCBwZm4pO1xcbjc4Njg6XFx0XFxuNzg2OTpcXHRcXHRcXHRDbGVhclBhZ2VIV1BvaXNvblRha2VuT2ZmKHBhZ2UpO1xcbjc4NzA6XFx0XFx0XFx0X19mcmVlX29uZV9wYWdlKHBhZ2UsIHBmbiwgem9uZSwgMCwgbWlncmF0ZXR5cGUsIEZQSV9OT05FKTtcXG43ODcxOlxcdFxcdFxcdGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpXFxuNzg3MjpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG43ODczOlxcdFxcdH1cXG43ODc0OlxcdFxcbjc4NzU6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjc4NzY6XFx0fVxcbjc4Nzc6XFx0I2VuZGlmXFxuNzg3ODpcXHRcXG43ODc5OlxcdGJvb2wgaGFzX21hbmFnZWRfem9uZShlbnVtIHpvbmVfdHlwZSB6b25lKVxcbjc4ODA6XFx0e1xcbjc4ODE6XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDtcXG43ODgyOlxcdFxcbjc4ODM6XFx0XFx0Zm9yX2VhY2hfb25saW5lX3BnZGF0KHBnZGF0KSB7XFxuNzg4NDpcXHRcXHRcXHRpZiAobWFuYWdlZF96b25lKFxcdTAwMjZwZ2RhdC1cXHUwMDNlbm9kZV96b25lc1t6b25lXSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjQ3LjE5MTMzOTUzNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTgxMjg1NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHB1dF9wYWdlX2JhY2tfYnVkZHlgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBwdXRfcGFnZV9iYWNrX2J1ZGR5YCBpcyBkZWZpbmVkLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGNvbmRpdGlvbmFsLiBJdCdzIG5lc3RsZWQgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBibG9jay4gU28sIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjb21waWxlZCBhbmQgaW5jbHVkZWQgaWYgdGhlIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgdHJhY2UgaXRzIGV4ZWN1dGlvbi4gSnVzdCB0byBiZSBzdXJlLCBJIHdpbGwgY2hlY2sgdGhlIGAjZW5kaWZgIG9uIGxpbmUgNzg3NyB0byBjb25maXJtIHRoZSBjb25kaXRpb25hbCBibG9jayBpcyBjbG9zZWQgcHJvcGVybHkuXG5cbk5vdywgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzLiBMZXQncyB2ZXJpZnkgbGluZSA3ODMwIGluIGBtbS9wYWdlX2FsbG9jLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE2MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NDkuMTcyNjI5Mzc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Njk3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4MjA6XFx0XFx0XFx0YWRkX3RvX2ZyZWVfbGlzdChjdXJyZW50X2J1ZGR5LCB6b25lLCBoaWdoLCBtaWdyYXRldHlwZSwgZmFsc2UpO1xcbjc4MjE6XFx0XFx0XFx0c2V0X2J1ZGR5X29yZGVyKGN1cnJlbnRfYnVkZHksIGhpZ2gpO1xcbjc4MjI6XFx0XFx0fVxcbjc4MjM6XFx0fVxcbjc4MjQ6XFx0XFxuNzgyNTpcXHQvKlxcbjc4MjY6XFx0ICogVGFrZSBhIHBhZ2UgdGhhdCB3aWxsIGJlIG1hcmtlZCBhcyBwb2lzb25lZCBvZmYgdGhlIGJ1ZGR5IGFsbG9jYXRvci5cXG43ODI3OlxcdCAqL1xcbjc4Mjg6XFx0Ym9vbCB0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHN0cnVjdCBwYWdlICpwYWdlKVxcbjc4Mjk6XFx0e1xcbjc4MzA6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XFxuNzgzMTpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbjc4MzI6XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbjc4MzM6XFx0XFxuNzgzNDpcXHRcXHRndWFyZChzcGlubG9ja19pcnFzYXZlKShcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuNzgzNTpcXHRcXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXFx1MDAzYyBOUl9QQUdFX09SREVSUzsgb3JkZXIrKykge1xcbjc4MzY6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2VfaGVhZCA9IHBhZ2UgLSAocGZuIFxcdTAwMjYgKCgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSAtIDEpKTtcXG43ODM3OlxcdFxcdFxcdGludCBwYWdlX29yZGVyID0gYnVkZHlfb3JkZXIocGFnZV9oZWFkKTtcXG43ODM4OlxcdFxcbjc4Mzk6XFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlX2hlYWQpIFxcdTAwMjZcXHUwMDI2IHBhZ2Vfb3JkZXIgXFx1MDAzZT0gb3JkZXIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NDkuMTc1MzAyMzY1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzc1NTY3MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYmVmb3JlIGxpbmUgNzgyMC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBleGlzdCAqYmVmb3JlKiB0aGF0IGxpbmU/IFRoaXMgaXMgYSBwcmV0dHkgY29tbW9uIHBhdHRlcm4sIGNoZWNraW5nIGZvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGJlZm9yZSBpbmNsdWRpbmcgb3IgY29uZGl0aW9uYWxseSBjb21waWxpbmcgYSBibG9jayBvZiBjb2RlLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGZpbGUsIG9yIG1heWJlIHVzZSBzb21lIGNsZXZlciBncmVwcGluZywgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmUgaXMgcHJlc2VudCBhbmQgd2hlcmUgZXhhY3RseSBpdCBpcyBpbiByZWxhdGlvbiB0byB0aGF0IGxpbmUgbnVtYmVyLiBJdOKAmXMgaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc2MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NTEuNDEyODYyNTUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzgwMDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGFnZSAqdGFyZ2V0LCBpbnQgbG93LCBpbnQgaGlnaCxcXG43ODAxOlxcdFxcdFxcdFxcdFxcdCAgIGludCBtaWdyYXRldHlwZSlcXG43ODAyOlxcdHtcXG43ODAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2MgaGlnaDtcXG43ODA0OlxcdFxcdHN0cnVjdCBwYWdlICpjdXJyZW50X2J1ZGR5O1xcbjc4MDU6XFx0XFxuNzgwNjpcXHRcXHR3aGlsZSAoaGlnaCBcXHUwMDNlIGxvdykge1xcbjc4MDc6XFx0XFx0XFx0aGlnaC0tO1xcbjc4MDg6XFx0XFx0XFx0c2l6ZSBcXHUwMDNlXFx1MDAzZT0gMTtcXG43ODA5OlxcdFxcbjc4MTA6XFx0XFx0XFx0aWYgKHRhcmdldCBcXHUwMDNlPSBcXHUwMDI2cGFnZVtzaXplXSkge1xcbjc4MTE6XFx0XFx0XFx0XFx0Y3VycmVudF9idWRkeSA9IHBhZ2U7XFxuNzgxMjpcXHRcXHRcXHRcXHRwYWdlID0gcGFnZSArIHNpemU7XFxuNzgxMzpcXHRcXHRcXHR9IGVsc2Uge1xcbjc4MTQ6XFx0XFx0XFx0XFx0Y3VycmVudF9idWRkeSA9IHBhZ2UgKyBzaXplO1xcbjc4MTU6XFx0XFx0XFx0fVxcbjc4MTY6XFx0XFxuNzgxNzpcXHRcXHRcXHRpZiAoc2V0X3BhZ2VfZ3VhcmQoem9uZSwgY3VycmVudF9idWRkeSwgaGlnaCkpXFxuNzgxODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43ODE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjo1MS40MTM0OTI2ODNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4MjY4NDE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkxvY2F0aW5nIENPTkZJR19NRU1PUllfRkFJTFVSRSBpbiBtbS9wYWdlX2FsbG9jLmMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHNlY3Rpb24gd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHdoZXJlIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBkZWZpbmVkIG9yIHV0aWxpemVkLiBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGhhbmRsaW5nIGZvciBtZW1vcnkgZmFpbHVyZSBzY2VuYXJpb3MsIGxpa2VseSByZWxhdGVkIHRvIGVycm9yIGluamVjdGlvbiwgZmF1bHQgaGFuZGxpbmcsIG9yIG1heWJlIGV2ZW4gaGFyZHdhcmUgcmVsaWFiaWxpdHkgZmVhdHVyZXMuIE15IGJyYWluJ3MgYWxyZWFkeSB0aGlua2luZyBhYm91dCBob3cgdGhpcyBjb3VsZCBpbnRlcmFjdCB3aXRoIE5VTUEgbm9kZXMsIHpvbmUgbWFuYWdlbWVudCwgYW5kIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gc3RyYXRlZ3kuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc2VhcmNoIGl0IGFuZCByZXZpZXcgdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgZmFpbHVyZSBtb2RlcyBhcmUgYmVpbmcgYWRkcmVzc2VkIGFuZCBob3cgdGhlIGNvZGUgcmVzcG9uZHMgdG8gdGhlbSwgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb2RlYmFzZSB3aXRoIHJlZ2FyZCB0byBtZW1vcnkgZmFpbHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjUzLjU5NjE4MDU2NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzNTM5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTU9SWV9GQUlMVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9Nzc4ND1FWFBPUlRfU1lNQk9MKGlzX2ZyZWVfYnVkZHlfcGFnZSk7XFxubW0vcGFnZV9hbGxvYy5jLTc3ODUtXFxubW0vcGFnZV9hbGxvYy5jOjc3ODY6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL3BhZ2VfYWxsb2MuYy03Nzg3LXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfdG9fZnJlZV9saXN0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgem9uZSAqem9uZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NTMuNjY0NTQwMzYxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMjQyNjY0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5WRElNTS9QTUVNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHBlcmZlY3QuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGF0IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgYXJlIHdlIHdvcmtpbmcgd2l0aCBoZXJlPyBMZXQncyBicmVhayBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJJ3ZlIGlkZW50aWZpZWQgc28gZmFyLiBGaXJzdCwgd2UndmUgZ290IGBCTEtfREVWX1BNRU1gLCB3aGljaCByZXNpZGVzIGluIGBkcml2ZXJzL252ZGltbS9LY29uZmlnYC4gVGhpcyBpcyBhIHByaW1hcnkgZHJpdmVyIHRvIGNvbnNpZGVyLiBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYExJQk5WRElNTWAgaXMgaXRzIHBhcmVudCBjb25maWd1cmF0aW9uLCBzbyB0aGF0J3MgaW5oZXJlbnRseSBpbXBvcnRhbnQsIHRvby4gVGhlbiwgd2UgaGF2ZSBgTUVNT1JZX0ZBSUxVUkVgLiBJdCBhcHBlYXJzIHRoaXMgaXMga2V5LCBhcyBpdCdzIHdoZXJlIHRoZSBgSFdQb2lzb25gIGZsYWcgaXMgZGVmaW5lZCBhbmQgbWFuYWdlZC4gSWYgdGhhdCBpc24ndCBwcmVzZW50LCB0aGUgY29kZSB1c2VzIGBURVNUU0NGTEFHX0ZBTFNFYCwgd2hpY2ggaXMgb2J2aW91c2x5IHNvbWV0aGluZyB0byBjb25zaWRlci5cblxuSSdkIGxpa2UgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBmb3IgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgZm9yIG52ZGltbSBvciBwbWVtLiBBIGRlZXBlciBkaXZlIGludG8gYGRyaXZlcnMvbnZkaW1tL0tjb25maWdgIGlzIGVzc2VudGlhbCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGFsbCB0aGUgcHV6emxlIHBpZWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NTYuNjg4ODEwNjM3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTY5ODM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZkaW1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZkaW1tL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjI6bWVudWNvbmZpZyBMSUJOVkRJTU1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5WRElNTSAoTm9uLVZvbGF0aWxlIE1lbW9yeSBEZXZpY2UpIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE3PWlmIExJQk5WRElNTVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTgtXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxOTpjb25maWcgQkxLX0RFVl9QTUVNXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiUE1FTTogUGVyc2lzdGVudCBtZW1vcnkgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTM3LVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6Mzg6Y29uZmlnIE5EX0NMQUlNXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0zOS1cXHRib29sXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjQxOmNvbmZpZyBORF9CVFRcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTQyLVxcdHRyaXN0YXRlXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy00My1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjQ0OmNvbmZpZyBCVFRcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTQ1LVxcdGJvb2wgXFxcIkJUVDogQmxvY2sgVHJhbnNsYXRpb24gVGFibGUgKGF0b21pYyBzZWN0b3IgdXBkYXRlcylcXFwiXFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTU4LVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6NTk6Y29uZmlnIE5EX1BGTlxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjAtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTYxLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6NjI6Y29uZmlnIE5WRElNTV9QRk5cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTYzLVxcdGJvb2wgXFxcIlBGTjogTWFwIHBlcnNpc3RlbnQgKGRldmljZSkgbWVtb3J5XFxcIlxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy03Ni1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjc3OmNvbmZpZyBOVkRJTU1fREFYXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJOVkRJTU0gREFYOiBSYXcgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5XFxcIlxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy04OS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjkwOmNvbmZpZyBPRl9QTUVNXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy05MS1cXHR0cmlzdGF0ZSBcXFwiRGV2aWNlLXRyZWUgc3VwcG9ydCBmb3IgcGVyc2lzdGVudCBtZW1vcnkgcmVnaW9uc1xcXCJcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctOTktXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxMDA6Y29uZmlnIFJBTURBWFxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IHBlcnNpc3RlbnQgbWVtb3J5IGludGVyZmFjZXMgb24gUkFNIGNhcnZlb3V0c1xcXCJcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTE4LVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6MTE5OmNvbmZpZyBOVkRJTU1fS0VZU1xcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTIwLVxcdGRlZl9ib29sIHlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTIzLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6MTI0OmNvbmZpZyBOVkRJTU1fS01TQU5cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTEyNS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE0Mi1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE0Mzpjb25maWcgTlZESU1NX1RFU1RfQlVJTERcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE0NC1cXHR0cmlzdGF0ZSBcXFwiQnVpbGQgdGhlIHVuaXQgdGVzdCBjb3JlXFxcIlxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTQtXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxNTU6Y29uZmlnIE5WRElNTV9TRUNVUklUWV9URVNUXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTYtXFx0Ym9vbCBcXFwiRW5hYmxlIE5WRElNTSBzZWN1cml0eSB1bml0IHRlc3RzXFxcIlxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnVzLmM9OTkwPXN0YXRpYyBpbnQgbmRfbnNfZm9yZ2V0X3BvaXNvbl9jaGVjayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idXMuYy05OTQtXFxuZHJpdmVycy9udmRpbW0vYnVzLmM6OTk1Oi8qIHNldF9jb25maWcgcmVxdWlyZXMgYW4gaWRsZSBpbnRlcmxlYXZlIHNldCAqL1xcbmRyaXZlcnMvbnZkaW1tL2J1cy5jLTk5Ni1zdGF0aWMgaW50IG5kX2NtZF9jbGVhcl90b19zZW5kKHN0cnVjdCBudmRpbW1fYnVzICpudmRpbW1fYnVzLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vZGltbS5jPTE2PXN0YXRpYyBpbnQgbnZkaW1tX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2RpbW0uYy05NS1cXG5kcml2ZXJzL252ZGltbS9kaW1tLmM6OTY6XFx0ZGV2X2RiZyhkZXYsIFxcXCJjb25maWcgZGF0YSBzaXplOiAlZFxcXFxuXFxcIiwgbmRkLVxcdTAwM2Vuc2FyZWEuY29uZmlnX3NpemUpO1xcbmRyaXZlcnMvbnZkaW1tL2RpbW0uYy05Ny1cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmM9NDQ1PWludCBuZF9sYWJlbF9kYXRhX2luaXQoc3RydWN0IG52ZGltbV9kcnZkYXRhICpuZGQpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jLTQ1Ny1cXHQgICAgbmRkLVxcdTAwM2Vuc2FyZWEuY29uZmlnX3NpemUgPT0gMCkge1xcbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmM6NDU4OlxcdFxcdGRldl9kYmcobmRkLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gaW5pdCBjb25maWcgZGF0YSBhcmVhOiAoJXU6JXUpXFxcXG5cXFwiLFxcbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmMtNDU5LVxcdFxcdFxcdG5kZC1cXHUwMDNlbnNhcmVhLm1heF94ZmVyLCBuZGQtXFx1MDAzZW5zYXJlYS5jb25maWdfc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jLTQ3Ny1cXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jOjQ3ODpcXHQvKiBBbGxvY2F0ZSBjb25maWcgZGF0YSAqL1xcbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmMtNDc5LVxcdGNvbmZpZ19zaXplID0gbmRkLVxcdTAwM2Vuc2FyZWEuY29uZmlnX3NpemU7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9uZC5oPTY2Mj12b2lkIGRldm1fbmFtZXNwYWNlX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vbmQuaC02NjQtI2lmIElTX0VOQUJMRUQoQ09ORklHX05EX0NMQUlNKVxcbmRyaXZlcnMvbnZkaW1tL25kLmg6NjY1Oi8qIG1heCBzdHJ1Y3QgcGFnZSBzaXplIGluZGVwZW5kZW50IG9mIGtlcm5lbCBjb25maWcgKi9cXG5kcml2ZXJzL252ZGltbS9uZC5oLTY2Ni0jZGVmaW5lIE1BWF9TVFJVQ1RfUEFHRV9TSVpFIDY0XFxuLS1cXG5kcml2ZXJzL252ZGltbS92aXJ0aW9fcG1lbS5jPTYyPXN0YXRpYyBpbnQgdmlydGlvX3BtZW1fcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL252ZGltbS92aXJ0aW9fcG1lbS5jLTcxLVxcdGlmICghdmRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VnZXQpIHtcXG5kcml2ZXJzL252ZGltbS92aXJ0aW9fcG1lbS5jOjcyOlxcdFxcdGRldl9lcnIoXFx1MDAyNnZkZXYtXFx1MDAzZWRldiwgXFxcIiVzIGZhaWx1cmU6IGNvbmZpZyBhY2Nlc3MgZGlzYWJsZWRcXFxcblxcXCIsXFxuZHJpdmVycy9udmRpbW0vdmlydGlvX3BtZW0uYy03My1cXHRcXHRcXHRfX2Z1bmNfXyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjU2Ljc1ODUxMzQxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjUxNjYxMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGBwbWVtLmNgIEZvY3VzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBlbnN1cmluZyB0aGUgcmlnaHQgZnVuY3Rpb25zIHdpdGhpbiBgcG1lbS5jYCBhcmUgdGFyZ2V0ZWQgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2UgaXMgZGlyZWN0bHkgaW1wYWN0aW5nIGBwbWVtX21rcGFnZV9wcmVzZW50YCwgYW5kIHRoYXQgZnVuY3Rpb24ncyBsaW5rZWQgdG8gYF9fcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9kb193cml0ZWAsIGBwbWVtX3JlY292ZXJ5X3dyaXRlYCwgYW5kIGBwbWVtX3N1Ym1pdF9iaW9gLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhlc2UgYXJlIGFsbCBwcmV0dHkgc3BlY2lmaWMgdG8gdGhlIHBtZW0gZHJpdmVyIGl0c2VsZiwgbm90IHNvbWUgbGlmZWN5Y2xlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnbG9iYWxseSB1c2VkLiBUaGF0J3MgZ29vZCBmcm9tIGEgZm9jdXMgc3RhbmRwb2ludC4gSXQgaW5kaWNhdGVzIGEgZGVmaW5lZCBzY29wZS5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJIG5lZWQgdG8ganVzdGlmeSBmdXp6aW5nIHRoaXMuIFRoZSBwYXRjaCBpcyBzaW1wbGlmeWluZyBgcG1lbV9ta3BhZ2VfcHJlc2VudGAgYnkgdXNpbmcgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbigpYCBkaXJlY3RseSBhbmQgYWRkaW5nIGEgYFRFU1RTQ0ZMQUdfRkFMU0VgIG1hY3JvLiBUaGlzIG1vZGlmaWVzIGNvcmUgcGFnZSBmbGFnIGRlZmluaXRpb25zLCBhbmQgc2luY2UgcG1lbSBibG9jayBkcml2ZXIgZXJyb3IvcG9pc29uIHJlY292ZXJ5IHBhdGhzIGFyZSBwb3RlbnRpYWxseSB0b3VjaGVkLCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUuIFRoZSBgRm9jdXNTeW1ib2xzYCBsb29rIHJpZ2h0LCBsaXN0aW5nIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjcnVjaWFsOiBCTEtfREVWX1BNRU0sIExJQk5WRElNTSwgYW5kIE1FTU9SWV9GQUlMVVJFIGFyZSBhbGwgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHBtZW0gd29ya3MuIFRoZSBgTUVNT1JZX0ZBSUxVUkVgIG9uZSBpcyBlc3BlY2lhbGx5IHJlbGV2YW50IHRvIHRoaXMgcGF0Y2gsIHNpbmNlIGl0IGlzIGRpc2FibGluZyBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSXQgc2hvdWxkIGJlIHdvcnRoIGZ1enppbmcgYXMgdGhlIGNvZGUgaXMgbW9kaWZ5aW5nIGVycm9yIHJlY292ZXJ5IHBhdGhzLiBTbywgeWVzLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIHRydWUuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDc2LCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMzowMS4wMTAxNzc0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODkzODkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9QTUVNXCIsXG4gICAgXCJMSUJOVkRJTU1cIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicG1lbV9ta3BhZ2VfcHJlc2VudFwiLFxuICAgIFwiX19wbWVtX2NsZWFyX3BvaXNvblwiLFxuICAgIFwicG1lbV9jbGVhcl9wb2lzb25cIixcbiAgICBcInBtZW1fZG9fd3JpdGVcIixcbiAgICBcInBtZW1fcmVjb3Zlcnlfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKSB0byBsaW51eC9wYWdlLWZsYWdzLmggZm9yICFDT05GSUdfTUVNT1JZX0ZBSUxVUkUgYnVpbGRzIGFuZCB1cGRhdGVzIHBtZW1fbWtwYWdlX3ByZXNlbnQoKSBpbiBkcml2ZXJzL252ZGltbS9wbWVtLmMgdG8gZGlyZWN0bHkgY2FsbCBUZXN0Q2xlYXJQYWdlSFdQb2lzb24oKSBpbnN0ZWFkIG9mIGFuIG52ZGltbS1zcGVjaWZpYyB3cmFwcGVyLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIHBhZ2UtZmxhZyBtYWNyb3MgYW5kIHRoZSBwZXJzaXN0ZW50IG1lbW9yeSBibG9jay9EQVggZHJpdmVyIHBvaXNvbi1jbGVhcmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1BNRU1cIixcbiAgICBcIkxJQk5WRElNTVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbWVtX21rcGFnZV9wcmVzZW50XCIsXG4gICAgXCJfX3BtZW1fY2xlYXJfcG9pc29uXCIsXG4gICAgXCJwbWVtX2NsZWFyX3BvaXNvblwiLFxuICAgIFwicG1lbV9kb193cml0ZVwiLFxuICAgIFwicG1lbV9yZWNvdmVyeV93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pIHRvIGxpbnV4L3BhZ2UtZmxhZ3MuaCBmb3IgIUNPTkZJR19NRU1PUllfRkFJTFVSRSBidWlsZHMgYW5kIHVwZGF0ZXMgcG1lbV9ta3BhZ2VfcHJlc2VudCgpIGluIGRyaXZlcnMvbnZkaW1tL3BtZW0uYyB0byBkaXJlY3RseSBjYWxsIFRlc3RDbGVhclBhZ2VIV1BvaXNvbigpIGluc3RlYWQgb2YgYW4gbnZkaW1tLXNwZWNpZmljIHdyYXBwZXIuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgcGFnZS1mbGFnIG1hY3JvcyBhbmQgdGhlIHBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrL0RBWCBkcml2ZXIgcG9pc29uLWNsZWFyaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMzowMS4xNDkxMjQ1MjRaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzY3MDgxMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzM6MDEuMTQ5NTc5ODQ0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI3NjY2MjA5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcgLyBjbGVhbnVwIHRoYXQgYWRkcyBzdGFuZGFyZCBURVNUU0NGTEFHX0ZBTFNFIGRlZmluaXRpb25zIGZvciBIV1BvaXNvbiBpbiBcXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXFx1MDAzZSB3aGVuIENPTkZJR19NRU1PUllfRkFJTFVSRSBpcyBub3Qgc2V0LCBhbmQgcmVtb3ZlcyB0aGUgZHJpdmVyLXNwZWNpZmljIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uIHdyYXBwZXIgaW4gZmF2b3Igb2YgZGlyZWN0bHkgY2FsbGluZyBUZXN0Q2xlYXJQYWdlSFdQb2lzb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MzQ0MmYwMzIzMzc1MjljMzU4YzJmNzRhZDA0YzM4MzQ0ODk4ZjE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNTozMTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uYyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uY1xuaW5kZXggMzBhNTFjMzY1Y2U4Yi4uNWZiODY1OTVlOGJkNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uY1xuKysrIGIvZHJpdmVycy9udmRpbW0vcG1lbS5jXG5AQCAtODAsNyArODAsNyBAQCBzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LFxuIFx0XHQgKiBoZXJlIHNpbmNlIHdlJ3JlIGluIHRoZSBkcml2ZXIgSS9PIHBhdGggYW5kXG4gXHRcdCAqIG91dHN0YW5kaW5nIEkvTyByZXF1ZXN0cyBwaW4gdGhlIGRldl9wYWdlbWFwLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHBhZ2UpKVxuK1x0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpKVxuIFx0XHRcdGNsZWFyX21jZV9ub3NwZWMocGZuKTtcbiBcdH1cbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udmRpbW0vcG1lbS5oIGIvZHJpdmVycy9udmRpbW0vcG1lbS5oXG5pbmRleCBhNDg1MDlmOTAxOTY4Li43Njg3MDUwNWRkNzk3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udmRpbW0vcG1lbS5oXG4rKysgYi9kcml2ZXJzL252ZGltbS9wbWVtLmhcbkBAIC0xLDcgKzEsNiBAQFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gI2lmbmRlZiBfX05WRElNTV9QTUVNX0hfX1xuICNkZWZpbmUgX19OVkRJTU1fUE1FTV9IX19cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWRibG9ja3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5AQCAtMzEsMTUgKzMwLDQgQEAgbG9uZyBfX3BtZW1fZGlyZWN0X2FjY2VzcyhzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBnb2ZmX3QgcGdvZmYsXG4gXHRcdGxvbmcgbnJfcGFnZXMsIGVudW0gZGF4X2FjY2Vzc19tb2RlIG1vZGUsIHZvaWQgKiprYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyAqcGZuKTtcbiBcbi0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4tc3RhdGljIGlubGluZSBib29sIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuLXtcbi1cdHJldHVybiBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSk7XG4tfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSBib29sIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tI2VuZGlmXG4gI2VuZGlmIC8qIF9fTlZESU1NX1BNRU1fSF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uYTIzMTVhYjFkZDNhNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTY1Niw2ICs2NTYsNyBAQCBURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxuICNkZWZpbmUgX19QR19IV1BPSVNPTiAoMVVMIFx1MDAzY1x1MDAzYyBQR19od3BvaXNvbilcbiAjZWxzZVxuIFBBR0VGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbitURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbiAjZGVmaW5lIF9fUEdfSFdQT0lTT04gMFxuICNlbmRpZlxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzM6MDEuMTQ5NTgwNjg0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2ODM3NTAwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQTUVNIFBvaXNvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjaGFuZ2VzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIE5WRElNTSBkcml2ZXIgYW5kIG1lbW9yeSBlcnJvciBoYW5kbGluZy5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyBpbiBgZHJpdmVycy9udmRpbW0vcG1lbS5jYC4gVGhlIGB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihwYWdlKWAgZnVuY3Rpb24gaXMgYmVpbmcgcmVwbGFjZWQgd2l0aCBgVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpYC4gSSBpbW1lZGlhdGVseSBzdXNwZWN0IHRoaXMgaXMgcmVsYXRlZCB0byBoYXJkd2FyZSBwb2lzb24gaGFuZGxpbmcsIHdoaWNoIGlzIHN0YW5kYXJkIHdpdGggTlZESU1NcywgcGFydGljdWxhcmx5IGluIG1vcmUgcmVjZW50IGtlcm5lbHMuXG5cblRoZW4sIGxvb2tpbmcgYXQgYGRyaXZlcnMvbnZkaW1tL3BtZW0uaGAsIHRoZSBwYXRjaCByZW1vdmVzIHRoZSBgI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXHUwMDNlYCBhbmQgdGhlIGRlZmluaXRpb24gb2YgdGhlIHJlcGxhY2VkIGhlbHBlciwgYHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uYC4gSSdkIGV4cGVjdCB0aGUgaGVhZGVyIGluY2x1c2lvbiB0byBiZSByZW1vdmVkIGJlY2F1c2UgdGhlIGhlbHBlciBpcyByZW1vdmVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgbG9naWMgaGFzIGJlZW4gcmVmYWN0b3JlZCBvciB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9uIGlzIGRlZmluZWQuXG5cbkZpbmFsbHksIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGNoYW5nZSBjYXRjaGVzIG15IGV5ZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYWRkaXRpb24gb2YgYFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKWAgaW4gdGhlIGAjZWxzZWAgYnJhbmNoICh3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzbid0IGRlZmluZWQpIGlzIGtleS4gQmFzaWNhbGx5LCB3aGVuIG1lbW9yeSBmYWlsdXJlIGlzbid0IGVuYWJsZWQsIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb25gIGlzIGRlZmluZWQgdG8gc2ltcGx5IHJldHVybiBmYWxzZSAob3IgemVybywgZGVwZW5kaW5nIG9uIGhvdyBgVEVTVFNDRkxBR19GQUxTRWAgaXMgZGVmaW5lZCkuIFRoaXMgaW1wbGllcyBhIGNvbmRpdGlvbmFsIGJlaGF2aW9yLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSB3aHkuIE15IGd1ZXNzIGlzIHRoYXQgdGhlIHBhdGNoIG9wdGltaXplcyB0aGUgSFdQb2lzb24gY2xlYXJpbmcsIGJ1dCBvbmx5IHdoZW4gdGhlIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIG9wdGlvbiBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuIFdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXNuJ3QgZW5hYmxlZCwgdGhlIHByZXZpb3VzIGNvZGUgcGF0aCBpcyByZXRhaW5lZCwgYnV0IHRoZSBjb2RlIG5vdyBoYXMgYSBuZXcgZGVmaW5pdGlvbiBvZiBgVGVzdENsZWFyUGFnZUhXUG9pc29uYCB3aGljaCByZXR1cm5zIDAuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBib3RoIGBwbWVtLmNgIGFuZCBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIG9mIHRoaXMgbW9kaWZpY2F0aW9uLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIHdpdGhpbiB0aGUgTlZESU1NIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMzOjA0LjgzMzMzNTEwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDIwNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZW1fbWtwYWdlX3ByZXNlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udmRpbW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udmRpbW0vcG1lbS5jPTU4PXN0YXRpYyBwaHlzX2FkZHJfdCB0b19vZmZzZXQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjYzOnN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY0LVxcdFxcdHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9OTc9c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTAzLVxcdGlmIChjbGVhcmVkIFxcdTAwM2UgMCkge1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxMDQ6XFx0XFx0cG1lbV9ta3BhZ2VfcHJlc2VudChwbWVtLCBvZmZzZXQsIGNsZWFyZWQpO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMDUtXFx0XFx0YXJjaF9pbnZhbGlkYXRlX3BtZW0ocG1lbS1cXHUwMDNldmlydF9hZGRyICsgb2Zmc2V0LCBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMzowNC45NDQzNjA1NjlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3ODU1NzExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUGVyc2lzdGVudCBNZW1vcnkgRHJpdmVyKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlJ3JlIGhhbmRsaW5nIE5WRElNTSBwZXJzaXN0ZW50IG1lbW9yeSB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYHJlYWQtZmlsZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBsaW5lcyA2MyB0aHJvdWdoIDk1IG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSdtIGZvY3VzaW5nIHRoZXJlIGJlY2F1c2Ugc29tZXRoaW5nIGluIHRoYXQgYXJlYSBmZWx0IGxpa2UgaXQgbmVlZGVkIHJldmlzaXRpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhhdCBjb2RlIGJsb2NrLCBjaGVja2luZyBmb3IuLi4gd2VsbCwgSSdsbCBrbm93IGl0IHdoZW4gSSBzZWUgaXQuIEl0IGNvdWxkIGJlIGEgc3BlY2lmaWMgbWVtb3J5IGFjY2VzcyBwYXR0ZXJuLCBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIG9yIGV2ZW4ganVzdCBob3cgd2UncmUgaGFuZGxpbmcgZXJyb3IgY29uZGl0aW9ucy4gSSdtIHByZXBhcmVkIHRvIGZvbGxvdyB0aGUgZmxvdyBmcm9tIHRoZXJlLCBidXQgdGhhdCBzZWN0aW9uIGZlZWxzIGxpa2UgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMzowNi45MjI5MjAzOThaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbnZkaW1tL3BtZW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRyZXR1cm4gKHNlY3RvciBcXHUwMDNjXFx1MDAzYyBTRUNUT1JfU0hJRlQpICsgcG1lbS1cXHUwMDNlZGF0YV9vZmZzZXQ7XFxuICA2MTpcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXFxuICA2NDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGVuKVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0cGh5c19hZGRyX3QgcGh5cyA9IHBtZW1fdG9fcGh5cyhwbWVtLCBvZmZzZXQpO1xcbiAgNjc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm5fc3RhcnQsIHBmbl9lbmQsIHBmbjtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0Lyogb25seSBwbWVtIGluIHRoZSBsaW5lYXIgbWFwIHN1cHBvcnRzIEhXUG9pc29uICovXFxuICA3MDpcXHRcXHRpZiAoaXNfdm1hbGxvY19hZGRyKHBtZW0tXFx1MDAzZXZpcnRfYWRkcikpXFxuICA3MTpcXHRcXHRcXHRyZXR1cm47XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdHBmbl9zdGFydCA9IFBIWVNfUEZOKHBoeXMpO1xcbiAgNzQ6XFx0XFx0cGZuX2VuZCA9IHBmbl9zdGFydCArIFBIWVNfUEZOKGxlbik7XFxuICA3NTpcXHRcXHRmb3IgKHBmbiA9IHBmbl9zdGFydDsgcGZuIFxcdTAwM2MgcGZuX2VuZDsgcGZuKyspIHtcXG4gIDc2OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0XFx0LypcXG4gIDc5OlxcdFxcdFxcdCAqIE5vdGUsIG5vIG5lZWQgdG8gaG9sZCBhIGdldF9kZXZfcGFnZW1hcCgpIHJlZmVyZW5jZVxcbiAgODA6XFx0XFx0XFx0ICogaGVyZSBzaW5jZSB3ZSdyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZFxcbiAgODE6XFx0XFx0XFx0ICogb3V0c3RhbmRpbmcgSS9PIHJlcXVlc3RzIHBpbiB0aGUgZGV2X3BhZ2VtYXAuXFxuICA4MjpcXHRcXHRcXHQgKi9cXG4gIDgzOlxcdFxcdFxcdGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpXFxuICA4NDpcXHRcXHRcXHRcXHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XFxuICA4NTpcXHRcXHR9XFxuICA4NjpcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdHN0YXRpYyB2b2lkIHBtZW1fY2xlYXJfYmIoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IsIGxvbmcgYmxrcylcXG4gIDg5OlxcdHtcXG4gIDkwOlxcdFxcdGlmIChibGtzID09IDApXFxuICA5MTpcXHRcXHRcXHRyZXR1cm47XFxuICA5MjpcXHRcXHRiYWRibG9ja3NfY2xlYXIoXFx1MDAyNnBtZW0tXFx1MDAzZWJiLCBzZWN0b3IsIGJsa3MpO1xcbiAgOTM6XFx0XFx0aWYgKHBtZW0tXFx1MDAzZWJiX3N0YXRlKVxcbiAgOTQ6XFx0XFx0XFx0c3lzZnNfbm90aWZ5X2RpcmVudChwbWVtLVxcdTAwM2ViYl9zdGF0ZSk7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBsb25nIF9fcG1lbV9jbGVhcl9wb2lzb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxcbiAgOTg6XFx0XFx0XFx0cGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuKVxcbiAgOTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMzowNi45MjMwMzAxNzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyNDYwMDU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byBQYWdlIEZsYWdzKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGVzZSBwYWdlIGZsYWdzLCBzbyBsZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCBhcm91bmQgbGluZSA2NTYuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSByZWxldmFudCBtYWNybyBvciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiB0aGF0J3MgY2F1c2luZyB0aGUgdHJvdWJsZS4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBwYWdlIGFsbG9jYXRpb24gb3IgbWF5YmUgc29tZSBzb3J0IG9mIG1pZ3JhdGlvbiBvciBpc29sYXRpb24gZmxhZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGtlcm5lbCBkZXZzIGhhdmUgY29va2VkIHVwLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBncm91bmQgdHJ1dGggSSBuZWVkIHRvIGRlYnVnIHRoaXMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMzOjA4Ljg0NzYzMjc4OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjQ1OlxcdFxcdEZPTElPX1RFU1RfU0VUX0ZMQUcobWxvY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA2NDY6XFx0I2Vsc2VcXG4gNjQ3OlxcdEZPTElPX0ZMQUdfRkFMU0UobWxvY2tlZClcXG4gNjQ4OlxcdFxcdF9fRk9MSU9fQ0xFQVJfRkxBR19OT09QKG1sb2NrZWQpXFxuIDY0OTpcXHRcXHRGT0xJT19URVNUX0NMRUFSX0ZMQUdfRkFMU0UobWxvY2tlZClcXG4gNjUwOlxcdFxcdEZPTElPX1RFU1RfU0VUX0ZMQUdfRkFMU0UobWxvY2tlZClcXG4gNjUxOlxcdCNlbmRpZlxcbiA2NTI6XFx0XFxuIDY1MzpcXHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuIDY1NDpcXHRQQUdFRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcXG4gNjU1OlxcdFRFU1RTQ0ZMQUcoSFdQb2lzb24sIGh3cG9pc29uLCBQRl9BTlkpXFxuIDY1NjpcXHQjZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcXHUwMDNjXFx1MDAzYyBQR19od3BvaXNvbilcXG4gNjU3OlxcdCNlbHNlXFxuIDY1ODpcXHRQQUdFRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pXFxuIDY1OTpcXHRURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcXG4gNjYwOlxcdCNkZWZpbmUgX19QR19IV1BPSVNPTiAwXFxuIDY2MTpcXHQjZW5kaWZcXG4gNjYyOlxcdFxcbiA2NjM6XFx0I2lmZGVmIENPTkZJR19QQUdFX0lETEVfRkxBR1xcbiA2NjQ6XFx0I2lmZGVmIENPTkZJR182NEJJVFxcbiA2NjU6XFx0Rk9MSU9fVEVTVF9GTEFHKHlvdW5nLCBGT0xJT19IRUFEX1BBR0UpXFxuIDY2NjpcXHRGT0xJT19TRVRfRkxBRyh5b3VuZywgRk9MSU9fSEVBRF9QQUdFKVxcbiA2Njc6XFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHlvdW5nLCBGT0xJT19IRUFEX1BBR0UpXFxuIDY2ODpcXHRGT0xJT19GTEFHKGlkbGUsIEZPTElPX0hFQURfUEFHRSlcXG4gNjY5OlxcdCNlbmRpZlxcbiA2NzA6XFx0LyogU2VlIHBhZ2VfaWRsZS5oIGZvciAhNjRCSVQgd29ya2Fyb3VuZCAqL1xcbiA2NzE6XFx0I2Vsc2UgLyogIUNPTkZJR19QQUdFX0lETEVfRkxBRyAqL1xcbiA2NzI6XFx0Rk9MSU9fRkxBR19GQUxTRSh5b3VuZylcXG4gNjczOlxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBR19GQUxTRSh5b3VuZylcXG4gNjc0OlxcdEZPTElPX0ZMQUdfRkFMU0UoaWRsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzM6MDguODQ3NzU5NzQ5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNjg0MDg2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIENvZGUgQ2xlYW51cCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY29kZSBjbGVhbnVwLCBhIHJlZmFjdG9yaW5nIHBhdGNoIHJlYWxseS4gSSdtIGFkZGluZyBgVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pYCBpbiBgbGludXgvcGFnZS1mbGFncy5oYCB3aGljaCBkZWZpbmVzIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSlgIGFuZCBgVGVzdFNldFBhZ2VIV1BvaXNvbihwYWdlKWAgZXZlbiB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGRpc2FibGVkLiBUaGF0J3MgZ29vZCwgdW5pZnlpbmcgdGhlIGRlZmluaXRpb25zLiBJJ20gYWxzbyByZW1vdmluZyBhIGRyaXZlci1zcGVjaWZpYyB3cmFwcGVyLCBgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb24ocGFnZSlgLCBpbiBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBpbiBmYXZvciBvZiBkaXJlY3RseSB1c2luZyB0aGUgc3RhbmRhcmQgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKWAgbWFjcm8uXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGFmdGVyIHJldmlld2luZywgdGhlcmUgYXJlIHplcm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHVzZXItc3BhY2UgY29waWVzIGhhcHBlbmluZywgYW5kIG5vdGhpbmcgdGhhdCB0b3VjaGVzIGRhdGEgZmxvdyBvciBib3VuZHMgY2hlY2tpbmcuIEl0J3MgcmVhbGx5IGp1c3QgY29uc29saWRhdGluZyB0aGUgd2F5IHdlIGhhbmRsZSB0aGVzZSBwYWdlIGZsYWcgaGVscGVyIG1hY3Jvcy4gVGhpcyBpcyBhYm91dCBhcyBsb3ctcmlzayBhcyBpdCBnZXRzLlxuXG5UaGVyZWZvcmUsIG5vIG5lZWQgdG8gZmxhZyB0aGlzIHdpdGggYE5lZWRzS01TQU4gPSBmYWxzZWAuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEknbSBjbGVhciBvbiB0aGUganVzdGlmaWNhdGlvbiwgbGV0J3MgY29udHJhc3QgS0FTQU4gYW5kIEtNU0FOLiBXaXRoIEtBU0FOLCBzdGFuZGFyZCBidWlsZHMsIEknbSBjaGVja2luZyBnZW5lcmFsIG1lbW9yeSBhY2Nlc3NlcywgcGFnZSBmbGFnIG9wZXJhdGlvbnMsIGV0Yy4gS01TQU4gZm9jdXNlcyBzcGVjaWZpY2FsbHkgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyAqdG8qIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBkb2Vzbid0IHRvdWNoIGFueSBvZiB0aG9zZSBhcmVhcy4gSXQncyBqdXN0IGEgcmVmYWN0b3Jpbmcgb2YgZXhpc3RpbmcgcGFnZSBmbGFnIGhlbHBlcnMgYW5kIHJlbW92ZXMgdGhhdCBwbWVtIHdyYXBwZXIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQsIGV4cG9zZWQsIG9yIG1hbmlwdWxhdGVkLiBObyBuZXcgYnVmZmVycywgbm8gZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgaXMgYSBuby1vcCBjb25jZXJuaW5nIEtNU0FOLlxuXG5Pa2F5LCB0aGF0J3MgZW5vdWdoLCBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMzQsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzM6MTMuOTE2MTcxNDkyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIC8gY2xlYW51cCB0aGF0IGFkZHMgc3RhbmRhcmQgVEVTVFNDRkxBR19GQUxTRSBkZWZpbml0aW9ucyBmb3IgSFdQb2lzb24gaW4gXFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFxcdTAwM2Ugd2hlbiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgaXMgbm90IHNldCwgYW5kIHJlbW92ZXMgdGhlIGRyaXZlci1zcGVjaWZpYyB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbiB3cmFwcGVyIGluIGZhdm9yIG9mIGRpcmVjdGx5IGNhbGxpbmcgVGVzdENsZWFyUGFnZUhXUG9pc29uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRhcmllcyBvciBkYXRhIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSByZWZhY3RvcmluZyAvIGNsZWFudXAgdGhhdCBhZGRzIHN0YW5kYXJkIFRFU1RTQ0ZMQUdfRkFMU0UgZGVmaW5pdGlvbnMgZm9yIEhXUG9pc29uIGluIFxcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcXHUwMDNlIHdoZW4gQ09ORklHX01FTU9SWV9GQUlMVVJFIGlzIG5vdCBzZXQsIGFuZCByZW1vdmVzIHRoZSBkcml2ZXItc3BlY2lmaWMgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb24gd3JhcHBlciBpbiBmYXZvciBvZiBkaXJlY3RseSBjYWxsaW5nIFRlc3RDbGVhclBhZ2VIV1BvaXNvbi4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMgb3IgZGF0YSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxghkg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 05:13:21 +0000 UTC FinishedAt: 2026-09-04 05:33:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "08dd568d68633c480ad5ca66afe1eb62f37773a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_PMEM", "LIBNVDIMM", "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "08dd568d68633c480ad5ca66afe1eb62f37773a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_PMEM", "LIBNVDIMM", "MEMORY_FAILURE" ], "series_id": "407c4852-dc9c-47fe-b232-44d64203ceca" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "pmem_mkpage_present", "__pmem_clear_poison", "pmem_clear_poison", "pmem_do_write", "pmem_recovery_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUE1FTSYjMzQ7LAogICAgJiMzNDtMSUJOVkRJTU0mIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwbWVtX21rcGFnZV9wcmVzZW50JiMzNDssCiAgICAmIzM0O19fcG1lbV9jbGVhcl9wb2lzb24mIzM0OywKICAgICYjMzQ7cG1lbV9jbGVhcl9wb2lzb24mIzM0OywKICAgICYjMzQ7cG1lbV9kb193cml0ZSYjMzQ7LAogICAgJiMzNDtwbWVtX3JlY292ZXJ5X3dyaXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSByZWZhY3RvcmluZyAvIGNsZWFudXAgdGhhdCBhZGRzIHN0YW5kYXJkIFRFU1RTQ0ZMQUdfRkFMU0UgZGVmaW5pdGlvbnMgZm9yIEhXUG9pc29uIGluIFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFx1MDAzZSB3aGVuIENPTkZJR19NRU1PUllfRkFJTFVSRSBpcyBub3Qgc2V0LCBhbmQgcmVtb3ZlcyB0aGUgZHJpdmVyLXNwZWNpZmljIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uIHdyYXBwZXIgaW4gZmF2b3Igb2YgZGlyZWN0bHkgY2FsbGluZyBUZXN0Q2xlYXJQYWdlSFdQb2lzb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbikgdG8gbGludXgvcGFnZS1mbGFncy5oIGZvciAhQ09ORklHX01FTU9SWV9GQUlMVVJFIGJ1aWxkcyBhbmQgdXBkYXRlcyBwbWVtX21rcGFnZV9wcmVzZW50KCkgaW4gZHJpdmVycy9udmRpbW0vcG1lbS5jIHRvIGRpcmVjdGx5IGNhbGwgVGVzdENsZWFyUGFnZUhXUG9pc29uKCkgaW5zdGVhZCBvZiBhbiBudmRpbW0tc3BlY2lmaWMgd3JhcHBlci4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBwYWdlLWZsYWcgbWFjcm9zIGFuZCB0aGUgcGVyc2lzdGVudCBtZW1vcnkgYmxvY2svREFYIGRyaXZlciBwb2lzb24tY2xlYXJpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MzQ0MmYwMzIzMzc1MjljMzU4YzJmNzRhZDA0YzM4MzQ0ODk4ZjE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNTozMTo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9wbWVtLmMgYi9kcml2ZXJzL252ZGltbS9wbWVtLmNcbmluZGV4IDMwYTUxYzM2NWNlOGIuLjVmYjg2NTk1ZThiZDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252ZGltbS9wbWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uY1xuQEAgLTgwLDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXG4gXHRcdCAqIGhlcmUgc2luY2Ugd2UmIzM5O3JlIGluIHRoZSBkcml2ZXIgSS9PIHBhdGggYW5kXG4gXHRcdCAqIG91dHN0YW5kaW5nIEkvTyByZXF1ZXN0cyBwaW4gdGhlIGRldl9wYWdlbWFwLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHBhZ2UpKVxuJiM0MztcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcbiBcdFx0XHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaCBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxuaW5kZXggYTQ4NTA5ZjkwMTk2OC4uNzY4NzA1MDVkZDc5NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udmRpbW0vcG1lbS5oXG5AQCAtMSw3ICYjNDM7MSw2IEBAXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAjaWZuZGVmIF9fTlZESU1NX1BNRU1fSF9fXG4gI2RlZmluZSBfX05WRElNTV9QTUVNX0hfX1xuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbkBAIC0zMSwxNSAmIzQzOzMwLDQgQEAgbG9uZyBfX3BtZW1fZGlyZWN0X2FjY2VzcyhzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBnb2ZmX3QgcGdvZmYsXG4gXHRcdGxvbmcgbnJfcGFnZXMsIGVudW0gZGF4X2FjY2Vzc19tb2RlIG1vZGUsIHZvaWQgKiprYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyAqcGZuKTtcbiBcbi0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4tc3RhdGljIGlubGluZSBib29sIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuLXtcbi1cdHJldHVybiBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSk7XG4tfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSBib29sIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tI2VuZGlmXG4gI2VuZGlmIC8qIF9fTlZESU1NX1BNRU1fSF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uYTIzMTVhYjFkZDNhNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTY1Niw2ICYjNDM7NjU2LDcgQEAgVEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbiAjZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcdTAwM2NcdTAwM2MgUEdfaHdwb2lzb24pXG4gI2Vsc2VcbiBQQUdFRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pXG4mIzQzO1RFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKVxuICNkZWZpbmUgX19QR19IV1BPSVNPTiAwXG4gI2VuZGlmXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9QTUVNJiMzNDssCiAgICAmIzM0O0xJQk5WRElNTSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BtZW1fbWtwYWdlX3ByZXNlbnQmIzM0OywKICAgICYjMzQ7X19wbWVtX2NsZWFyX3BvaXNvbiYjMzQ7LAogICAgJiMzNDtwbWVtX2NsZWFyX3BvaXNvbiYjMzQ7LAogICAgJiMzNDtwbWVtX2RvX3dyaXRlJiMzNDssCiAgICAmIzM0O3BtZW1fcmVjb3Zlcnlfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbikgdG8gbGludXgvcGFnZS1mbGFncy5oIGZvciAhQ09ORklHX01FTU9SWV9GQUlMVVJFIGJ1aWxkcyBhbmQgdXBkYXRlcyBwbWVtX21rcGFnZV9wcmVzZW50KCkgaW4gZHJpdmVycy9udmRpbW0vcG1lbS5jIHRvIGRpcmVjdGx5IGNhbGwgVGVzdENsZWFyUGFnZUhXUG9pc29uKCkgaW5zdGVhZCBvZiBhbiBudmRpbW0tc3BlY2lmaWMgd3JhcHBlci4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBwYWdlLWZsYWcgbWFjcm9zIGFuZCB0aGUgcGVyc2lzdGVudCBtZW1vcnkgYmxvY2svREFYIGRyaXZlciBwb2lzb24tY2xlYXJpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MzQ0MmYwMzIzMzc1MjljMzU4YzJmNzRhZDA0YzM4MzQ0ODk4ZjE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNTozMTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uYyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uYwppbmRleCAzMGE1MWMzNjVjZThiLi41ZmI4NjU5NWU4YmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL252ZGltbS9wbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udmRpbW0vcG1lbS5jCkBAIC04MCw3ICYjNDM7ODAsNyBAQCBzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LAogCQkgKiBoZXJlIHNpbmNlIHdlJiMzOTtyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZAogCQkgKiBvdXRzdGFuZGluZyBJL08gcmVxdWVzdHMgcGluIHRoZSBkZXZfcGFnZW1hcC4KIAkJICovCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihwYWdlKSkKJiM0MzsJCWlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpCiAJCQljbGVhcl9tY2Vfbm9zcGVjKHBmbik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udmRpbW0vcG1lbS5oIGIvZHJpdmVycy9udmRpbW0vcG1lbS5oCmluZGV4IGE0ODUwOWY5MDE5NjguLjc2ODcwNTA1ZGQ3OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252ZGltbS9wbWVtLmgKQEAgLTEsNyAmIzQzOzEsNiBAQAogLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KICNpZm5kZWYgX19OVkRJTU1fUE1FTV9IX18KICNkZWZpbmUgX19OVkRJTU1fUE1FTV9IX18KLSNpbmNsdWRlICZsdDtsaW51eC9wYWdlLWZsYWdzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFkYmxvY2tzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwpAQCAtMzEsMTUgJiM0MzszMCw0IEBAIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLAogCQlsb25nIG5yX3BhZ2VzLCBlbnVtIGRheF9hY2Nlc3NfbW9kZSBtb2RlLCB2b2lkICoqa2FkZHIsCiAJCXVuc2lnbmVkIGxvbmcgKnBmbik7CiAKLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKICNlbmRpZiAvKiBfX05WRElNTV9QTUVNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA3YTg2MzU3MmFkY2U3Li5hMjMxNWFiMWRkM2E1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtNjU2LDYgJiM0Mzs2NTYsNyBAQCBURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKQogI2RlZmluZSBfX1BHX0hXUE9JU09OICgxVUwgJmx0OyZsdDsgUEdfaHdwb2lzb24pCiAjZWxzZQogUEFHRUZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKQomIzQzO1RFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKQogI2RlZmluZSBfX1BHX0hXUE9JU09OIDAKICNlbmRpZgogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MjEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgR2l0IFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHVzZXImIzM5O3MgZ2l2ZW4gbWUgYSBnaXQgcGF0Y2ggZGlmZiBhbmQgd2FudHMgbXkgZXhwZXJ0IGV5ZSBvbiBpdHMgc3VpdGFiaWxpdHkgZm9yIHN5emthbGxlciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgb24gYW4gYW1kNjQgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQ/IFRoaXMgaXMgTGludXgga2VybmVsIHBhdGNoIHRyaWFnZSBmb3IgZnV6emluZyDigJMgcHVyZSBzb2Z0d2FyZSB0ZXN0aW5nIGFuZCBkZWZlbnNpdmUgUUEsIHNvIGluaGVyZW50bHkgYmVuaWduLiBObyByZWQgZmxhZ3MgcmlnaHQgb2ZmIHRoZSBiYXQsIHdoaWNoIGlzIGdvb2QuCgpOb3csIHRoZSBwYXRjaCBpdHNlbGYuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBjaGFuZ2VzIGFjcm9zcyB0aHJlZSBmaWxlcywgYW5kIHRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIG1lbW9yeSBwb2lzb24gZmxhZy4KCiogICBgZHJpdmVycy9udmRpbW0vcG1lbS5jYDogVGhlIGNydWNpYWwgY2hhbmdlIGhlcmUgaXMgaW4gYHBtZW1fbWtwYWdlX3ByZXNlbnRgLiBUaGUgY29kZSB3ZW50IGZyb20gYGlmICh0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihwYWdlKSlgIHRvIGBpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpKWAuIFRoaXMgaXMgdGhlIG1vc3QgdmlzaWJsZSBjaGFuZ2UuCiogICBgZHJpdmVycy9udmRpbW0vcG1lbS5oYDogVGhpcyBtZWFucyB0aGUgbnZkaW1tLXNwZWNpZmljIHdyYXBwZXIgZnVuY3Rpb24gYHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uYCBpcyByZW1vdmVkIGJlY2F1c2UgaXQmIzM5O3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKiAgIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGA6IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIFByZXZpb3VzbHksIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb25gIHdhc24mIzM5O3QgZGVmaW5lZCBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCB3YXMgZGlzYWJsZWQuIFRoZSBwYXRjaCBub3cgaW50cm9kdWNlcyBgVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pYCB1bmRlciB0aGUgYCNlbHNlYCBjb25kaXRpb24gZm9yIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBUaGlzIGNsZXZlcmx5IGRlZmluZXMgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgdG8gc2ltcGx5IHJldHVybiAwL2ZhbHNlIGluIHRoZSBhYnNlbmNlIG9mIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLgoKRXNzZW50aWFsbHksIHRoZXkmIzM5O3ZlIHJlZmFjdG9yZWQgdGhlIGNvZGUgdG8gdXNlIHRoZSBtb3JlIGdlbmVyaWMgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgdW5jb25kaXRpb25hbGx5LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZW5hYmxlZC4gSXQgcHJvdmlkZXMgYSBjb21tb24gcGF0aCByZWdhcmRsZXNzLCBhbmQgdGhhdCBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYW55IGltcGxpY2l0IGJlaGF2aW9yIGJlaW5nIGNoYW5nZWQgdGhhdCBjb3VsZCB0cmlwIHVwIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcnVuIHNvbWUgcXVpY2sgY2hlY2tzIHVzaW5nIG15IHN0YW5kYXJkIHNldCBvZiBjb2RlYmFzZSB0b29scy4gSSYjMzk7bGwgc2VhcmNoIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbmQgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgbWF5YmUgbG9vayBmb3IgaW5kaXJlY3QgY2FsbHMgb3IgdXNlcyBvZiB0aGlzIHBvaXNvbiBmbGFnIHRoYXQgbWlnaHQgaGF2ZSBzdWJ0bGUsIHVuZXhwZWN0ZWQgZWZmZWN0cy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBsb2NhbGl6ZWQsIHdlbGwtdW5kZXJzdG9vZCwgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGZ1enppbmcgc3VyZmFjZXMgb3IsIGNydWNpYWxseSwgZWxpbWluYXRlIGV4aXN0aW5nIG9uZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG1lbV9ta3BhZ2VfcHJlc2VudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9wbWVtLmM9NTg9c3RhdGljIHBoeXNfYWRkcl90IHRvX29mZnNldChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHNlY3Rvcl90IHNlY3Rvcilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjItXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NjM6c3RhdGljIHZvaWQgcG1lbV9ta3BhZ2VfcHJlc2VudChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBoeXNfYWRkcl90IG9mZnNldCxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02NC1cdFx0dW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9OTc9c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEwMy1cdGlmIChjbGVhcmVkIFx1MDAzZSAwKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTA0Olx0XHRwbWVtX21rcGFnZV9wcmVzZW50KHBtZW0sIG9mZnNldCwgY2xlYXJlZCk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTA1LVx0XHRhcmNoX2ludmFsaWRhdGVfcG1lbShwbWVtLVx1MDAzZXZpcnRfYWRkciAmIzQzOyBvZmZzZXQsIGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gUGFnZSBGbGFncyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGVzZSBwYWdlIGZsYWdzLCBzbyBsZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIGFyb3VuZCBsaW5lIDY1Ni4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IG1hY3JvIG9yIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRoYXQmIzM5O3MgY2F1c2luZyB0aGUgdHJvdWJsZS4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSBhbGxvY2F0aW9uIG9yIG1heWJlIHNvbWUgc29ydCBvZiBtaWdyYXRpb24gb3IgaXNvbGF0aW9uIGZsYWcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUga2VybmVsIGRldnMgaGF2ZSBjb29rZWQgdXAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGdyb3VuZCB0cnV0aCBJIG5lZWQgdG8gZGVidWcgdGhpcyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NDU6XHRcdEZPTElPX1RFU1RfU0VUX0ZMQUcobWxvY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDY0NjpcdCNlbHNlXG4gNjQ3Olx0Rk9MSU9fRkxBR19GQUxTRShtbG9ja2VkKVxuIDY0ODpcdFx0X19GT0xJT19DTEVBUl9GTEFHX05PT1AobWxvY2tlZClcbiA2NDk6XHRcdEZPTElPX1RFU1RfQ0xFQVJfRkxBR19GQUxTRShtbG9ja2VkKVxuIDY1MDpcdFx0Rk9MSU9fVEVTVF9TRVRfRkxBR19GQUxTRShtbG9ja2VkKVxuIDY1MTpcdCNlbmRpZlxuIDY1MjpcdFxuIDY1MzpcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbiA2NTQ6XHRQQUdFRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbiA2NTU6XHRURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxuIDY1NjpcdCNkZWZpbmUgX19QR19IV1BPSVNPTiAoMVVMIFx1MDAzY1x1MDAzYyBQR19od3BvaXNvbilcbiA2NTc6XHQjZWxzZVxuIDY1ODpcdFBBR0VGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbiA2NTk6XHRURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbiA2NjA6XHQjZGVmaW5lIF9fUEdfSFdQT0lTT04gMFxuIDY2MTpcdCNlbmRpZlxuIDY2MjpcdFxuIDY2MzpcdCNpZmRlZiBDT05GSUdfUEFHRV9JRExFX0ZMQUdcbiA2NjQ6XHQjaWZkZWYgQ09ORklHXzY0QklUXG4gNjY1Olx0Rk9MSU9fVEVTVF9GTEFHKHlvdW5nLCBGT0xJT19IRUFEX1BBR0UpXG4gNjY2Olx0Rk9MSU9fU0VUX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcbiA2Njc6XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcbiA2Njg6XHRGT0xJT19GTEFHKGlkbGUsIEZPTElPX0hFQURfUEFHRSlcbiA2Njk6XHQjZW5kaWZcbiA2NzA6XHQvKiBTZWUgcGFnZV9pZGxlLmggZm9yICE2NEJJVCB3b3JrYXJvdW5kICovXG4gNjcxOlx0I2Vsc2UgLyogIUNPTkZJR19QQUdFX0lETEVfRkxBRyAqL1xuIDY3MjpcdEZPTElPX0ZMQUdfRkFMU0UoeW91bmcpXG4gNjczOlx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHX0ZBTFNFKHlvdW5nKVxuIDY3NDpcdEZPTElPX0ZMQUdfRkFMU0UoaWRsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjg0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gcG1lbV9ta3BhZ2VfcHJlc2VudCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byB0aGUgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AgZmlsZSDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcGVyc2lzdGVudCBtZW1vcnkgc3R1ZmYgbGl2ZXMsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIE5WRElNTSBkcml2ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcGFnZSBoYW5kbGluZywgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHBtZW1fbWtwYWdlX3ByZXNlbnRgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIHdpbGwgYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBtZW1vcnkgcGFnZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBwZXJzaXN0ZW50IG1lbW9yeSBkZXZpY2VzLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBjb2RlIGVuc3VyZXMgZGF0YSBjb25zaXN0ZW5jeSBhbmQgaGFuZGxlcyBwb3RlbnRpYWwgcG93ZXIgZmFpbHVyZXMgaW4gcmVsYXRpb24gdG8gbWVtb3J5IGJlaW5nICYjMzQ7cHJlc2VudCYjMzQ7LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgdG8gaG93IHdlIGFyZSBtYWtpbmcgdGhpcyB3b3JrIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gVGltZSB0byBkaWcgaW4gYW5kIHJlbWluZCBteXNlbGYgb2YgdGhvc2UgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tL3BtZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcdHJldHVybiAoc2VjdG9yIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQpICYjNDM7IHBtZW0tXHUwMDNlZGF0YV9vZmZzZXQ7XG4gIDYxOlx0fVxuICA2MjpcdFxuICA2MzpcdHN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXG4gIDY0Olx0XHRcdHVuc2lnbmVkIGludCBsZW4pXG4gIDY1Olx0e1xuICA2NjpcdFx0cGh5c19hZGRyX3QgcGh5cyA9IHBtZW1fdG9fcGh5cyhwbWVtLCBvZmZzZXQpO1xuICA2NzpcdFx0dW5zaWduZWQgbG9uZyBwZm5fc3RhcnQsIHBmbl9lbmQsIHBmbjtcbiAgNjg6XHRcbiAgNjk6XHRcdC8qIG9ubHkgcG1lbSBpbiB0aGUgbGluZWFyIG1hcCBzdXBwb3J0cyBIV1BvaXNvbiAqL1xuICA3MDpcdFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihwbWVtLVx1MDAzZXZpcnRfYWRkcikpXG4gIDcxOlx0XHRcdHJldHVybjtcbiAgNzI6XHRcbiAgNzM6XHRcdHBmbl9zdGFydCA9IFBIWVNfUEZOKHBoeXMpO1xuICA3NDpcdFx0cGZuX2VuZCA9IHBmbl9zdGFydCAmIzQzOyBQSFlTX1BGTihsZW4pO1xuICA3NTpcdFx0Zm9yIChwZm4gPSBwZm5fc3RhcnQ7IHBmbiBcdTAwM2MgcGZuX2VuZDsgcGZuJiM0MzsmIzQzOykge1xuICA3NjpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4gIDc3Olx0XG4gIDc4Olx0XHRcdC8qXG4gIDc5Olx0XHRcdCAqIE5vdGUsIG5vIG5lZWQgdG8gaG9sZCBhIGdldF9kZXZfcGFnZW1hcCgpIHJlZmVyZW5jZVxuICA4MDpcdFx0XHQgKiBoZXJlIHNpbmNlIHdlJiMzOTtyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZFxuICA4MTpcdFx0XHQgKiBvdXRzdGFuZGluZyBJL08gcmVxdWVzdHMgcGluIHRoZSBkZXZfcGFnZW1hcC5cbiAgODI6XHRcdFx0ICovXG4gIDgzOlx0XHRcdGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpXG4gIDg0Olx0XHRcdFx0Y2xlYXJfbWNlX25vc3BlYyhwZm4pO1xuICA4NTpcdFx0fVxuICA4NjpcdH1cbiAgODc6XHRcbiAgODg6XHRzdGF0aWMgdm9pZCBwbWVtX2NsZWFyX2JiKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgc2VjdG9yX3Qgc2VjdG9yLCBsb25nIGJsa3MpXG4gIDg5Olx0e1xuICA5MDpcdFx0aWYgKGJsa3MgPT0gMClcbiAgOTE6XHRcdFx0cmV0dXJuO1xuICA5MjpcdFx0YmFkYmxvY2tzX2NsZWFyKFx1MDAyNnBtZW0tXHUwMDNlYmIsIHNlY3RvciwgYmxrcyk7XG4gIDkzOlx0XHRpZiAocG1lbS1cdTAwM2ViYl9zdGF0ZSlcbiAgOTQ6XHRcdFx0c3lzZnNfbm90aWZ5X2RpcmVudChwbWVtLVx1MDAzZWJiX3N0YXRlKTtcbiAgOTU6XHR9XG4gIDk2Olx0XG4gIDk3Olx0c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG4gIDk4Olx0XHRcdHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbilcbiAgOTk6XHR7XG4gMTAwOlx0XHRwaHlzX2FkZHJfdCBwaHlzID0gcG1lbV90b19waHlzKHBtZW0sIG9mZnNldCk7XG4gMTAxOlx0XHRsb25nIGNsZWFyZWQgPSBudmRpbW1fY2xlYXJfcG9pc29uKHRvX2RldihwbWVtKSwgcGh5cywgbGVuKTtcbiAxMDI6XHRcbiAxMDM6XHRcdGlmIChjbGVhcmVkIFx1MDAzZSAwKSB7XG4gMTA0Olx0XHRcdHBtZW1fbWtwYWdlX3ByZXNlbnQocG1lbSwgb2Zmc2V0LCBjbGVhcmVkKTtcbiAxMDU6XHRcdFx0YXJjaF9pbnZhbGlkYXRlX3BtZW0ocG1lbS1cdTAwM2V2aXJ0X2FkZHIgJiM0Mzsgb2Zmc2V0LCBsZW4pO1xuIDEwNjpcdFx0fVxuIDEwNzpcdFx0cmV0dXJuIGNsZWFyZWQ7XG4gMTA4Olx0fVxuIDEwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBOVkRJTU0vUE1FTSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBhcmUgTlZESU1NL1BNRU0gdGFyZ2V0cyB2aWFibGUgZm9yIGZ1enppbmcsIGFuZCBhcmUgdGhleSB3b3J0aCB0aGUgZWZmb3J0PyBUaW1lIHRvIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgpUaGUgY2hhbmdlIHRvdWNoZXMgYm90aCBjb3JlIGZpbGVzIGFuZCBkcml2ZXJzLiBTcGVjaWZpY2FsbHksIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgYWRkaW5nIHRoZSBgVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pYCBtYWNybywgKmFuZCogdXBkYXRlcyB0byBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBhbmQgYHBtZW0uaGAsIHdpdGggZGlyZWN0IGNhbGxzIHRvIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSlgLiBTbyB0aGF0IHRpY2tzIHRoZSBib3ggb2YgYmVpbmcgYW4gYXJlYSB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgaW4gYSB3YXkgd2UmIzM5O2QgbGlrZSB0byB0YXJnZXQgaXQuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBOVkRJTU0vUE1FTSBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgc2V0dXAuIENhbiBJIGV2ZW4gZ2V0IGF0IGl0PyBHb29kIG5ld3Mg4oCTIGl0IGxvb2tzIGxpa2UgTlZESU1NL1BNRU0gaXMgZW11bGF0YWJsZSBpbiBRRU1VLiBUaGluZ3MgbGlrZSBgbWVtbWFwPW5uW0tNR11Ac3NbS01HXWAsIEFDUEkgTkZJVCwgdmlydGlvLXBtZW0sIGFuZCB0aGUgdW5kZXJseWluZyBuZF9lODIwIC8gbGlibnZkaW1tIC8gcG1lbSBkcml2ZXIgcHJvdmlkZSBhIHBhdGguIEFuZCBzaW5jZSB0aGUgY29kZSB0aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgbGl2ZXMgaW4gYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AsIHRoaXMgc2VlbXMgdG8gY29uZmlybSBpdCYjMzk7cyBhIGRyaXZlciB3ZSAqY2FuKiBnZXQgYXQuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRvIGVuYWJsZSB0aGlzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyB0byBzZWUgZXhhY3RseSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkIHRvIGJlIHNldCB0byBlbmFibGUgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AuIE9uY2UgSSBrbm93IHRoYXQsIEkmIzM5O2xsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGdhdWdlIHRoZSBzY29wZSBhbmQgY29tcGxleGl0eSBvZiBzZXR0aW5nIHVwIGEgZnV6emluZyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfUE1FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tL0tjb25maWc9MTc9aWYgTElCTlZESU1NXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE4LVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxOTpjb25maWcgQkxLX0RFVl9QTUVNXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTIwLVx0dHJpc3RhdGUgXCYjMzQ7UE1FTTogUGVyc2lzdGVudCBtZW1vcnkgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTlZESU1NIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9udmRpbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHpvb20gaW4gYXJvdW5kIGxpbmUgMTcuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSBlc3NlbnRpYWwgZm9yIGNvbmZpZ3VyaW5nIGtlcm5lbCBtb2R1bGVzLCBzbyB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIG9wdGlvbnMgcmVsYXRlZCB0byBOb24tVm9sYXRpbGUgRElNTXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSwgdGhpbmdzIGxpa2Ugd2hldGhlciBvciBub3QgdGhlIE5WRElNTSBzdXBwb3J0IGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBkaXJlY3RseSBvciBhcyBhIG1vZHVsZSwgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHNldHRpbmdzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgcHJpbWFyeSBkZWNpc2lvbiBwb2ludHMgdGhlIGtlcm5lbCBtYWtlcyBkdXJpbmcgY29tcGlsYXRpb24gY29uY2VybmluZyBOVkRJTU0gc3VwcG9ydCwgYXMgSSBtaWdodCBiZSBwcmVwYXJpbmcgdG8gZWl0aGVyIGVuYWJsZSwgZGlzYWJsZSwgb3IgYWRqdXN0IHRoZXNlIHNldHRpbmdzIGZvciBhIHNwZWNpZmljIGRlcGxveW1lbnQgb3IgZGVidWdnaW5nIHNjZW5hcmlvLiBUaGlzIGxpbmUgb2YgaW5xdWlyeSBzaG91bGQgcXVpY2tseSBnaXZlIG1lIHRoZSBzY29wZSBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIExJQk5WRElNTVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlZESU1NIChOb24tVm9sYXRpbGUgTWVtb3J5IERldmljZSkgU3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBQSFlTX0FERFJfVF82NEJJVFxuICAgNTpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbiAgIDY6XHRcdGRlcGVuZHMgb24gQkxLX0RFVlxuICAgNzpcdFx0c2VsZWN0IE1FTVJFR0lPTlxuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBHZW5lcmljIHN1cHBvcnQgZm9yIG5vbi12b2xhdGlsZSBtZW1vcnkgZGV2aWNlcyBpbmNsdWRpbmdcbiAgMTA6XHRcdCAgQUNQSS02LU5GSVQgZGVmaW5lZCByZXNvdXJjZXMuICBPbiBwbGF0Zm9ybXMgdGhhdCBkZWZpbmUgYW5cbiAgMTE6XHRcdCAgTkZJVCwgb3Igb3RoZXJ3aXNlIGNhbiBkaXNjb3ZlciBOVkRJTU0gcmVzb3VyY2VzLCBhIGxpYm52ZGltbVxuICAxMjpcdFx0ICBidXMgaXMgcmVnaXN0ZXJlZCB0byBhZHZlcnRpc2UgUE1FTSAocGVyc2lzdGVudCBtZW1vcnkpXG4gIDEzOlx0XHQgIG5hbWVzcGFjZXMgKC9kZXYvcG1lbVgpLiBBIFBNRU0gbmFtZXNwYWNlIHJlZmVycyB0byBhXG4gIDE0Olx0XHQgIG1lbW9yeSByZXNvdXJjZSB0aGF0IG1heSBzcGFuIG11bHRpcGxlIERJTU1zIGFuZCBzdXBwb3J0IERBWFxuICAxNTpcdFx0ICAoc2VlIENPTkZJR19EQVgpLlxuICAxNjpcdFxuICAxNzpcdGlmIExJQk5WRElNTVxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBCTEtfREVWX1BNRU1cbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O1BNRU06IFBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDIxOlx0XHRkZWZhdWx0IExJQk5WRElNTVxuICAyMjpcdFx0c2VsZWN0IERBWFxuICAyMzpcdFx0c2VsZWN0IE5EX0JUVCBpZiBCVFRcbiAgMjQ6XHRcdHNlbGVjdCBORF9QRk4gaWYgTlZESU1NX1BGTlxuICAyNTpcdFx0aGVscFxuICAyNjpcdFx0ICBNZW1vcnkgcmFuZ2VzIGZvciBQTUVNIGFyZSBkZXNjcmliZWQgYnkgZWl0aGVyIGFuIE5GSVRcbiAgMjc6XHRcdCAgKE5WRElNTSBGaXJtd2FyZSBJbnRlcmZhY2UgVGFibGUsIHNlZSBDT05GSUdfQUNQSV9ORklUKSwgYVxuICAyODpcdFx0ICBub24tc3RhbmRhcmQgT0VNLXNwZWNpZmljIEU4MjAgbWVtb3J5IHR5cGUgKHR5cGUtMTIsIHNlZVxuICAyOTpcdFx0ICBDT05GSUdfWDg2X1BNRU1fTEVHQUNZKSwgb3IgaXQgaXMgbWFudWFsbHkgc3BlY2lmaWVkIGJ5IHRoZVxuICAzMDpcdFx0ICAmIzM5O21lbW1hcD1ubltLTUddIXNzW0tNR10mIzM5OyBrZXJuZWwgY29tbWFuZCBsaW5lIChzZWVcbiAgMzE6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy5yc3QpLiAgVGhpcyBkcml2ZXIgY29udmVydHNcbiAgMzI6XHRcdCAgdGhlc2UgcGVyc2lzdGVudCBtZW1vcnkgcmFuZ2VzIGludG8gYmxvY2sgZGV2aWNlcyB0aGF0IGFyZVxuICAzMzpcdFx0ICBjYXBhYmxlIG9mIERBWCAoZGlyZWN0LWFjY2VzcykgZmlsZSBzeXN0ZW0gbWFwcGluZ3MuICBTZWVcbiAgMzQ6XHRcdCAgRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL252ZGltbS9udmRpbW0ucnN0IGZvciBtb3JlIGRldGFpbHMuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBhbiBOVkRJTU1cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgTkRfQ0xBSU1cbiAgMzk6XHRcdGJvb2xcbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk0OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBOVk1lLW92ZXItRmFicmljIFBNRU0gRHJpdmVyKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYF9fcG1lbV9jbGVhcl9wb2lzb25gIGFuZCBgcG1lbV9ta3BhZ2VfcHJlc2VudGAgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoZSBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBmaWxlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhlIGBwbWVtYCBkcml2ZXIgaGVyZSBpcyBoYW5kbGluZyBwZXJzaXN0ZW50IG1lbW9yeSwgbGlrZWx5IE5WRElNTXMsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udHJvbCBmbG93LCBzbyBJIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aC4gTGV0JiMzOTtzIHNlZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSAqcmVhY2hlZCouIFdoZXJlIGFyZSB0aGV5IGNhbGxlZD8gQXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgYSBkYXRhIGFjY2VzcyBwYXRoPyBJIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMsIG9mIGNvdXJzZSwgYnV0IGFsc28gZm9yIGluZGlyZWN0IHVzYWdlIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgb3IgbWFjcm9zLCB3aGljaCBtaWdodCBiZSBjb21tb24gaW4gdGhpcyBraW5kIG9mIGRyaXZlciBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgYWxsIGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTlZNZS1vdmVyLUZhYnJpYyBzdGFjazsgYW55IGNhbGxzIHRvIG9yIGZyb20gdGhlIGZhYnJpYyBsYXllcnMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlci4gVGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGNvbnNpc3RlbmN5IG1vZGVsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBib3RoIGhhcmR3YXJlIGFuZCB0aGUgc29mdHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZW1fY2xlYXJfcG9pc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udmRpbW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udmRpbW0vcG1lbS5jPTg4PXN0YXRpYyB2b2lkIHBtZW1fY2xlYXJfYmIoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IsIGxvbmcgYmxrcylcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTYtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6OTc6c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTgtXHRcdHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTA5LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjExMDpzdGF0aWMgYmxrX3N0YXR1c190IHBtZW1fY2xlYXJfcG9pc29uKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMTEtXHRcdHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbilcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMTIte1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjExMzpcdGxvbmcgY2xlYXJlZCA9IF9fcG1lbV9jbGVhcl9wb2lzb24ocG1lbSwgb2Zmc2V0LCBsZW4pO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTExNC1cbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MTgwPXN0YXRpYyBibGtfc3RhdHVzX3QgcG1lbV9kb193cml0ZShzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE4Ny1cdGlmICh1bmxpa2VseShpc19iYWRfcG1lbShcdTAwMjZwbWVtLVx1MDAzZWJiLCBzZWN0b3IsIGxlbikpKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTg4Olx0XHRibGtfc3RhdHVzX3QgcmMgPSBwbWVtX2NsZWFyX3BvaXNvbihwbWVtLCBwbWVtX29mZiwgbGVuKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xODktXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTM0MD1zdGF0aWMgc2l6ZV90IHBtZW1fcmVjb3Zlcnlfd3JpdGUoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHBnb2ZmX3QgcGdvZmYsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTM2NC1cdHBtZW1fb2ZmID0gUEZOX1BIWVMocGdvZmYpICYjNDM7IHBtZW0tXHUwMDNlZGF0YV9vZmZzZXQ7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MzY1Olx0Y2xlYXJlZCA9IF9fcG1lbV9jbGVhcl9wb2lzb24ocG1lbSwgcG1lbV9vZmYsIGxlbik7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzY2LVx0aWYgKGNsZWFyZWQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGNsZWFyZWQgXHUwMDNjIGxlbikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODU4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBlcnNpc3RlbnQgTWVtb3J5IFdyaXRlIFBhdGhzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlc2UgcGVyc2lzdGVudCBtZW1vcnkgd3JpdGUgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLCBgcG1lbV9kb193cml0ZWAgc2VlbXMgdG8gYmUgbmVzdGxlZCB3aXRoaW4gdGhlIHN0YW5kYXJkIGJsb2NrIEkvTyBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBoYW5naW5nIG91dCBpbiBgcG1lbV9zdWJtaXRfYmlvYC4gT24gdGhlIG90aGVyIGhhbmQsIGBwbWVtX3JlY292ZXJ5X3dyaXRlYCBpcyBjbGVhcmx5IHRpZWQgdG8gZGlyZWN0IGFjY2VzcyAoREFYKSBvcGVyYXRpb25zLCBsaWtlbHkgaGFuZGxpbmcgbW9yZSBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcGVyc2lzdGVudCBtZW1vcnkgZGV2aWNlIGl0c2VsZi4KCkdpdmVuIHRoaXMsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG91dCBgcG1lbV9zdWJtaXRfYmlvYCBpbiBtb3JlIGRldGFpbCB0byBjbGFyaWZ5IGl0cyByb2xlLiBUaGlzIHBhdGggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgZ2VuZXJhbCBibG9jay1sZXZlbCBvcGVyYXRpb25zLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgUE0gbGF5ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9udmRpbW0vcG1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRzdGF0aWMgdm9pZCBwbWVtX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIDIwMTpcdHtcbiAyMDI6XHRcdGludCByZXQgPSAwO1xuIDIwMzpcdFx0YmxrX3N0YXR1c190IHJjID0gMDtcbiAyMDQ6XHRcdGJvb2wgZG9fYWNjdDtcbiAyMDU6XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XG4gMjA2Olx0XHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xuIDIwNzpcdFx0c3RydWN0IGJ2ZWNfaXRlciBpdGVyO1xuIDIwODpcdFx0c3RydWN0IHBtZW1fZGV2aWNlICpwbWVtID0gYmlvLVx1MDAzZWJpX2JkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMjA5Olx0XHRzdHJ1Y3QgbmRfcmVnaW9uICpuZF9yZWdpb24gPSB0b19yZWdpb24ocG1lbSk7XG4gMjEwOlx0XG4gMjExOlx0XHRpZiAoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgUkVRX1BSRUZMVVNIKSB7XG4gMjEyOlx0XHRcdHJldCA9IG52ZGltbV9mbHVzaChuZF9yZWdpb24sIE5VTEwpO1xuIDIxMzpcdFx0XHRpZiAocmV0KSB7XG4gMjE0Olx0XHRcdFx0YmlvLVx1MDAzZWJpX3N0YXR1cyA9IGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KTtcbiAyMTU6XHRcdFx0XHRiaW9fZW5kaW8oYmlvKTtcbiAyMTY6XHRcdFx0XHRyZXR1cm47XG4gMjE3Olx0XHRcdH1cbiAyMTg6XHRcdH1cbiAyMTk6XHRcbiAyMjA6XHRcdGlmIChiaW9faGFzX2RhdGEoYmlvKSkge1xuIDIyMTpcdFx0XHRkb19hY2N0ID0gYmxrX3F1ZXVlX2lvX3N0YXQoYmlvLVx1MDAzZWJpX2JkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VxdWV1ZSk7XG4gMjIyOlx0XHRcdGlmIChkb19hY2N0KVxuIDIyMzpcdFx0XHRcdHN0YXJ0ID0gYmlvX3N0YXJ0X2lvX2FjY3QoYmlvKTtcbiAyMjQ6XHRcdFx0YmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgYmlvLCBpdGVyKSB7XG4gMjI1Olx0XHRcdFx0aWYgKG9wX2lzX3dyaXRlKGJpb19vcChiaW8pKSlcbiAyMjY6XHRcdFx0XHRcdHJjID0gcG1lbV9kb193cml0ZShwbWVtLCBidmVjLmJ2X3BhZ2UsXG4gMjI3Olx0XHRcdFx0XHRcdFx0ICAgYnZlYy5idl9vZmZzZXQsXG4gMjI4Olx0XHRcdFx0XHRcdFx0ICAgaXRlci5iaV9zZWN0b3IsXG4gMjI5Olx0XHRcdFx0XHRcdFx0ICAgYnZlYy5idl9sZW4pO1xuIDIzMDpcdFx0XHRcdGVsc2VcbiAyMzE6XHRcdFx0XHRcdHJjID0gcG1lbV9kb19yZWFkKHBtZW0sIGJ2ZWMuYnZfcGFnZSxcbiAyMzI6XHRcdFx0XHRcdFx0XHQgIGJ2ZWMuYnZfb2Zmc2V0LFxuIDIzMzpcdFx0XHRcdFx0XHRcdCAgaXRlci5iaV9zZWN0b3IsXG4gMjM0Olx0XHRcdFx0XHRcdFx0ICBidmVjLmJ2X2xlbik7XG4gMjM1Olx0XHRcdFx0aWYgKHJjKSB7XG4gMjM2Olx0XHRcdFx0XHRiaW8tXHUwMDNlYmlfc3RhdHVzID0gcmM7XG4gMjM3Olx0XHRcdFx0XHRicmVhaztcbiAyMzg6XHRcdFx0XHR9XG4gMjM5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc1MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBOVkRJTU0gUG9pc29uIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uIGlzIHRvIG9wdGltaXplL3NpbXBsaWZ5IHRoZSBoYW5kbGluZyBvZiBoYXJkd2FyZSBwb2lzb25pbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIE5WRElNTXMsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYW5hbHl6ZSB3aGV0aGVyIHRoZSBwYXRjaCB3YXJyYW50cyBhIGZ1enppbmcgZWZmb3J0LgoKRmlyc3QsIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AuICBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYSBjb25kaXRpb25hbCB3cmFwcGVyIChgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb25gKSBpcyBiZWluZyByZW1vdmVkLCBhbmQgdGhlIGNhbGwgdG8gYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgaXMgbm93IGhhcHBlbmluZyBkaXJlY3RseS4gVGhlIG9yaWdpbmFsIHdyYXBwZXIgd2FzIGNoZWNraW5nIGZvciBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhbmQgdGhlbiBjYWxsaW5nIHRoZSBwb2lzb24gZnVuY3Rpb24uIE5vdyB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGRpcmVjdGx5LgoKTm93LCBkb2VzIHRoaXMgcXVhbGlmeSBhcyBzb21ldGhpbmcgd29ydGggZnV6emluZz8gIFRoZSBjcml0ZXJpYSBhcmUgcHJldHR5IGNsZWFyOiAmIzM0O0RvIG5vdCBibGluZGx5IHRydXN0ICYjMzk7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM5OyBjbGFpbXMmIzM0Oy4gIEV2ZW4gcmVmYWN0b3JpbmdzIGNhbiBpbnRyb2R1Y2Ugc3VidGxlIHNoaWZ0cy4gU2luY2UgdGhpcyBtb2RpZmllcyByZWFjaGFibGUsIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgKHNwZWNpZmljYWxseSwgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBwYWdlIGZsYWdzIGFuZCB0aGUgTlZESU1NIGJsb2NrIGRyaXZlciksIEkmIzM5O2QgaGF2ZSB0byBzYXkgKipXb3J0aEZ1enppbmcgPSB0cnVlKiouIFRoZSBtb2RpZmljYXRpb25zIGFyZW4mIzM5O3QgZG9jdW1lbnRhdGlvbiwgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIHBhdGhzIHNwZWNpZmljIHRvIG90aGVyIGFyY2hpdGVjdHVyZXMuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHBvdGVudGlhbCBlbnRyeXBvaW50cyBvciBjcml0aWNhbCBzeW1ib2xzLiBMb29raW5nIGluIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgZGlyZWN0IGVudHJ5cG9pbnRzIG9yIHRoYXQgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gdGFyZ2V0LiAgSSBzZWUgYSBudW1iZXIgb2Ygc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBwbWVtX21rcGFnZV9wcmVzZW50YCwgYF9fcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9kb193cml0ZWAsIGFuZCBgcG1lbV9zdWJtaXRfYmlvYCwgYW5kIGFsc28gYHBtZW1fcmVjb3Zlcnlfd3JpdGVgLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBjYXJlZnVsbHkgYXQgdGhlIGNvZGUgaW4gYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2Agbm93IHRvIGRldGVybWluZSB3aGF0IGlzIHJlYWNoYWJsZSBmcm9tIG91dHNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tL3BtZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9wbWVtLmMtMzMtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MzQ6c3RhdGljIHN0cnVjdCBkZXZpY2UgKnRvX2RldihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0pXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzUte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00Mi1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0MzpzdGF0aWMgc3RydWN0IG5kX3JlZ2lvbiAqdG9fcmVnaW9uKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSlcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NC17XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ3LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjQ4OnN0YXRpYyBwaHlzX2FkZHJfdCBwbWVtX3RvX3BoeXMoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDkte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01Mi1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MzpzdGF0aWMgc2VjdG9yX3QgdG9fc2VjdChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBoeXNfYWRkcl90IG9mZnNldClcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01NC17XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU3LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjU4OnN0YXRpYyBwaHlzX2FkZHJfdCB0b19vZmZzZXQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTkte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02Mi1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo2MzpzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY0LVx0XHR1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy04Ny1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo4ODpzdGF0aWMgdm9pZCBwbWVtX2NsZWFyX2JiKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgc2VjdG9yX3Qgc2VjdG9yLCBsb25nIGJsa3MpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtODkte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05Ni1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo5NzpzdGF0aWMgbG9uZyBfX3BtZW1fY2xlYXJfcG9pc29uKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05OC1cdFx0cGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMDktXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTEwOnN0YXRpYyBibGtfc3RhdHVzX3QgcG1lbV9jbGVhcl9wb2lzb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTExMS1cdFx0cGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMjMtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTI0OnN0YXRpYyB2b2lkIHdyaXRlX3BtZW0odm9pZCAqcG1lbV9hZGRyLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMjUtXHRcdHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE0MS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxNDI6c3RhdGljIGJsa19zdGF0dXNfdCByZWFkX3BtZW0oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvZmYsXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTQzLVx0XHR2b2lkICpwbWVtX2FkZHIsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE2My1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxNjQ6c3RhdGljIGJsa19zdGF0dXNfdCBwbWVtX2RvX3JlYWQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE2NS1cdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IHBhZ2Vfb2ZmLFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xNzktXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTgwOnN0YXRpYyBibGtfc3RhdHVzX3QgcG1lbV9kb193cml0ZShzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTgxLVx0XHRcdHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZV9vZmYsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE5OS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoyMDA6c3RhdGljIHZvaWQgcG1lbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yMDEte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNTYtLyogc2VlIFwmIzM0O3N0cm9uZ1wmIzM0OyBkZWNsYXJhdGlvbiBpbiB0b29scy90ZXN0aW5nL252ZGltbS9wbWVtLWRheC5jICovXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MjU3Ol9fd2VhayBsb25nIF9fcG1lbV9kaXJlY3RfYWNjZXNzKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGdvZmZfdCBwZ29mZixcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNTgtXHRcdGxvbmcgbnJfcGFnZXMsIGVudW0gZGF4X2FjY2Vzc19tb2RlIG1vZGUsIHZvaWQgKiprYWRkcixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MzAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgcG1lbV9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zMDctXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MzA4OnN0YXRpYyBpbnQgcG1lbV9kYXhfemVyb19wYWdlX3JhbmdlKHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBwZ29mZl90IHBnb2ZmLFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMwOS1cdFx0XHRcdCAgICBzaXplX3QgbnJfcGFnZXMpXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMxNy1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzozMTg6c3RhdGljIGxvbmcgcG1lbV9kYXhfZGlyZWN0X2FjY2VzcyhzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2RldixcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zMTktXHRcdHBnb2ZmX3QgcGdvZmYsIGxvbmcgbnJfcGFnZXMsIGVudW0gZGF4X2FjY2Vzc19tb2RlIG1vZGUsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMzOS0gKi9cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzozNDA6c3RhdGljIHNpemVfdCBwbWVtX3JlY292ZXJ5X3dyaXRlKHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBwZ29mZl90IHBnb2ZmLFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTM0MS1cdFx0dm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTM4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGRheF9vcGVyYXRpb25zIHBtZW1fZGF4X29wcyA9IHtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzg3LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjM4ODpzdGF0aWMgc3NpemVfdCB3cml0ZV9jYWNoZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zODktXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTM5NS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzozOTY6c3RhdGljIHNzaXplX3Qgd3JpdGVfY2FjaGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTM5Ny1cdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDA4LX1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0MDk6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlX2NhY2hlKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00MTAtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NDExOnN0YXRpYyB1bW9kZV90IGRheF92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgbilcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00MTIte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnBtZW1fYXR0cmlidXRlX2dyb3Vwc1tdID0ge1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00MzUtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NDM2OnN0YXRpYyB2b2lkIHBtZW1fcmVsZWFzZV9kaXNrKHZvaWQgKl9fcG1lbSlcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00Mzcte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NDctXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NDQ4OnN0YXRpYyBpbnQgcG1lbV9wYWdlbWFwX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDQ5LVx0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgaW50IG1mX2ZsYWdzKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZnNkYXhfcGFnZW1hcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ2Mi1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0NjM6c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NjQtXHRcdHN0cnVjdCBuZF9uYW1lc3BhY2VfY29tbW9uICpuZG5zKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02MTAtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NjExOnN0YXRpYyBpbnQgbmRfcG1lbV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjEyLXtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjYyLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjY2MzpzdGF0aWMgdm9pZCBuZF9wbWVtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjY0LXtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjc5LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjY4MDpzdGF0aWMgdm9pZCBuZF9wbWVtX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02ODEte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02ODQtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6Njg1OnN0YXRpYyB2b2lkIHBtZW1fcmV2YWxpZGF0ZV9wb2lzb24oc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY4Ni17XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTczMS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3MzI6c3RhdGljIHZvaWQgcG1lbV9yZXZhbGlkYXRlX3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzMzLXtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzQ3LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc0ODpzdGF0aWMgdm9pZCBuZF9wbWVtX25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gbnZkaW1tX2V2ZW50IGV2ZW50KVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTc0OS17XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTc2Mi1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3NjM6TU9EVUxFX0FMSUFTKFwmIzM0O3BtZW1cJiMzNDspO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc2NDpNT0RVTEVfQUxJQVNfTkRfREVWSUNFKE5EX0RFVklDRV9OQU1FU1BBQ0VfSU8pO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc2NTpNT0RVTEVfQUxJQVNfTkRfREVWSUNFKE5EX0RFVklDRV9OQU1FU1BBQ0VfUE1FTSk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzY2LXN0YXRpYyBzdHJ1Y3QgbmRfZGV2aWNlX2RyaXZlciBuZF9wbWVtX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzc2LVxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc3Nzptb2R1bGVfbmRfZHJpdmVyKG5kX3BtZW1fZHJpdmVyKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy03NzgtXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6Nzc5Ok1PRFVMRV9BVVRIT1IoXCYjMzQ7Um9zcyBad2lzbGVyIFx1MDAzY3Jvc3Muendpc2xlckBsaW51eC5pbnRlbC5jb21cdTAwM2VcJiMzNDspO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc4MDpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TlZESU1NIFBlcnNpc3RlbnQgTWVtb3J5IERyaXZlclwmIzM0Oyk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NzgxOk1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTCB2MlwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzk2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb25gIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGltcGFjdCBvZiBgVGVzdENsZWFyUGFnZUhXUG9pc29uYC4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgZmlndXJpbmcgb3V0ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBjYW4mIzM5O3QganVzdCBvcGVyYXRlIGluIGEgdmFjdXVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGNvZGUgYW5kIGhvdyB3aWRlc3ByZWFkIGl0cyB1c2UgaXMuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiBldmVyeSBwbGFjZSBpbiB0aGUga2VybmVsIHRoYXQgcmVsaWVzIG9uIG9yIGludGVyYWN0cyB3aXRoIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb25gLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gcHJvY2VlZCB3aXRoIGFueSBhbmFseXNpcyBvciBtb2RpZmljYXRpb25zLiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtUZXN0Q2xlYXJQYWdlSFdQb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udmRpbW0vcG1lbS5jPTYzPXN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTgyLVx0XHQgKi9cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo4MzpcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy04NC1cdFx0XHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzM2PWludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODIyLVx0XHRmb2xpb19wdXQoZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyODIzOlx0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MjQtXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9Nzg2MD1ib29sIHB1dF9wYWdlX2JhY2tfYnVkZHkoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTc4NzAtXHRcdF9fZnJlZV9vbmVfcGFnZShwYWdlLCBwZm4sIHpvbmUsIDAsIG1pZ3JhdGV0eXBlLCBGUElfTk9ORSk7XG5tbS9wYWdlX2FsbG9jLmM6Nzg3MTpcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcbm1tL3BhZ2VfYWxsb2MuYy03ODcyLVx0XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHB1dF9wYWdlX2JhY2tfYnVkZHlgIGFuZCBgdW5wb2lzb25fbWVtb3J5YCBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlaXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEZpcnN0LCBJJiMzOTtsbCBjb25maXJtIHRoYXQgYHVucG9pc29uX21lbW9yeWAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGlzLCBhcyBJIHJlY2FsbCwgb25seSBlbmFibGVkIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgc2V0LiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBwdXRfcGFnZV9iYWNrX2J1ZGR5YD8gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGl0cyBiZWhhdmlvciBpcyBhbHNvIGdvdmVybmVkIGJ5IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBvciBpZiBpdCBvcGVyYXRlcyBpbmRlcGVuZGVudGx5LCBvciB1bmRlciBhIGRpZmZlcmVudCBjb25kaXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgZm9yIHRoYXQuIExldCYjMzk7cyBnZXQgdG8gdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzg1MDpcdFx0XHR9XG43ODUxOlx0XHRcdGlmIChwYWdlX2NvdW50KHBhZ2VfaGVhZCkgXHUwMDNlIDApXG43ODUyOlx0XHRcdFx0YnJlYWs7XG43ODUzOlx0XHR9XG43ODU0Olx0XHRyZXR1cm4gZmFsc2U7XG43ODU1Olx0fVxuNzg1NjpcdFxuNzg1NzpcdC8qXG43ODU4Olx0ICogQ2FuY2VsIHRha2VvZmYgZG9uZSBieSB0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KCkuXG43ODU5Olx0ICovXG43ODYwOlx0Ym9vbCBwdXRfcGFnZV9iYWNrX2J1ZGR5KHN0cnVjdCBwYWdlICpwYWdlKVxuNzg2MTpcdHtcbjc4NjI6XHRcdHN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpO1xuNzg2MzpcdFxuNzg2NDpcdFx0Z3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSkoXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbjc4NjU6XHRcdGlmIChwdXRfcGFnZV90ZXN0emVybyhwYWdlKSkge1xuNzg2NjpcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuNzg2NzpcdFx0XHRpbnQgbWlncmF0ZXR5cGUgPSBnZXRfcGZuYmxvY2tfbWlncmF0ZXR5cGUocGFnZSwgcGZuKTtcbjc4Njg6XHRcbjc4Njk6XHRcdFx0Q2xlYXJQYWdlSFdQb2lzb25UYWtlbk9mZihwYWdlKTtcbjc4NzA6XHRcdFx0X19mcmVlX29uZV9wYWdlKHBhZ2UsIHBmbiwgem9uZSwgMCwgbWlncmF0ZXR5cGUsIEZQSV9OT05FKTtcbjc4NzE6XHRcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcbjc4NzI6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjc4NzM6XHRcdH1cbjc4NzQ6XHRcbjc4NzU6XHRcdHJldHVybiBmYWxzZTtcbjc4NzY6XHR9XG43ODc3Olx0I2VuZGlmXG43ODc4Olx0XG43ODc5Olx0Ym9vbCBoYXNfbWFuYWdlZF96b25lKGVudW0gem9uZV90eXBlIHpvbmUpXG43ODgwOlx0e1xuNzg4MTpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDtcbjc4ODI6XHRcbjc4ODM6XHRcdGZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkge1xuNzg4NDpcdFx0XHRpZiAobWFuYWdlZF96b25lKFx1MDAyNnBnZGF0LVx1MDAzZW5vZGVfem9uZXNbem9uZV0pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE2MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHB1dF9wYWdlX2JhY2tfYnVkZHlgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYHB1dF9wYWdlX2JhY2tfYnVkZHlgIGlzIGRlZmluZWQsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNvbmRpdGlvbmFsLiBJdCYjMzk7cyBuZXN0bGVkIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRWAgYmxvY2suIFNvLCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29tcGlsZWQgYW5kIGluY2x1ZGVkIGlmIHRoZSBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgdHJhY2UgaXRzIGV4ZWN1dGlvbi4gSnVzdCB0byBiZSBzdXJlLCBJIHdpbGwgY2hlY2sgdGhlIGAjZW5kaWZgIG9uIGxpbmUgNzg3NyB0byBjb25maXJtIHRoZSBjb25kaXRpb25hbCBibG9jayBpcyBjbG9zZWQgcHJvcGVybHkuCgpOb3csIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcy4gTGV0JiMzOTtzIHZlcmlmeSBsaW5lIDc4MzAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODIwOlx0XHRcdGFkZF90b19mcmVlX2xpc3QoY3VycmVudF9idWRkeSwgem9uZSwgaGlnaCwgbWlncmF0ZXR5cGUsIGZhbHNlKTtcbjc4MjE6XHRcdFx0c2V0X2J1ZGR5X29yZGVyKGN1cnJlbnRfYnVkZHksIGhpZ2gpO1xuNzgyMjpcdFx0fVxuNzgyMzpcdH1cbjc4MjQ6XHRcbjc4MjU6XHQvKlxuNzgyNjpcdCAqIFRha2UgYSBwYWdlIHRoYXQgd2lsbCBiZSBtYXJrZWQgYXMgcG9pc29uZWQgb2ZmIHRoZSBidWRkeSBhbGxvY2F0b3IuXG43ODI3Olx0ICovXG43ODI4Olx0Ym9vbCB0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHN0cnVjdCBwYWdlICpwYWdlKVxuNzgyOTpcdHtcbjc4MzA6XHRcdHN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpO1xuNzgzMTpcdFx0dW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbjc4MzI6XHRcdHVuc2lnbmVkIGludCBvcmRlcjtcbjc4MzM6XHRcbjc4MzQ6XHRcdGd1YXJkKHNwaW5sb2NrX2lycXNhdmUpKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG43ODM1Olx0XHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjIE5SX1BBR0VfT1JERVJTOyBvcmRlciYjNDM7JiM0MzspIHtcbjc4MzY6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2VfaGVhZCA9IHBhZ2UgLSAocGZuIFx1MDAyNiAoKDEgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDEpKTtcbjc4Mzc6XHRcdFx0aW50IHBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlX2hlYWQpO1xuNzgzODpcdFxuNzgzOTpcdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2VfaGVhZCkgXHUwMDI2XHUwMDI2IHBhZ2Vfb3JkZXIgXHUwMDNlPSBvcmRlcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc2MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGJlZm9yZSBsaW5lIDc4MjAuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBgI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRWAgZXhpc3QgKmJlZm9yZSogdGhhdCBsaW5lPyBUaGlzIGlzIGEgcHJldHR5IGNvbW1vbiBwYXR0ZXJuLCBjaGVja2luZyBmb3IgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBiZWZvcmUgaW5jbHVkaW5nIG9yIGNvbmRpdGlvbmFsbHkgY29tcGlsaW5nIGEgYmxvY2sgb2YgY29kZS4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSBmaWxlLCBvciBtYXliZSB1c2Ugc29tZSBjbGV2ZXIgZ3JlcHBpbmcsIHRvIGRldGVybWluZSBpZiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlIGlzIHByZXNlbnQgYW5kIHdoZXJlIGV4YWN0bHkgaXQgaXMgaW4gcmVsYXRpb24gdG8gdGhhdCBsaW5lIG51bWJlci4gSXTigJlzIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc4MDA6XHRcdFx0XHRcdCAgIHN0cnVjdCBwYWdlICp0YXJnZXQsIGludCBsb3csIGludCBoaWdoLFxuNzgwMTpcdFx0XHRcdFx0ICAgaW50IG1pZ3JhdGV0eXBlKVxuNzgwMjpcdHtcbjc4MDM6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIGhpZ2g7XG43ODA0Olx0XHRzdHJ1Y3QgcGFnZSAqY3VycmVudF9idWRkeTtcbjc4MDU6XHRcbjc4MDY6XHRcdHdoaWxlIChoaWdoIFx1MDAzZSBsb3cpIHtcbjc4MDc6XHRcdFx0aGlnaC0tO1xuNzgwODpcdFx0XHRzaXplIFx1MDAzZVx1MDAzZT0gMTtcbjc4MDk6XHRcbjc4MTA6XHRcdFx0aWYgKHRhcmdldCBcdTAwM2U9IFx1MDAyNnBhZ2Vbc2l6ZV0pIHtcbjc4MTE6XHRcdFx0XHRjdXJyZW50X2J1ZGR5ID0gcGFnZTtcbjc4MTI6XHRcdFx0XHRwYWdlID0gcGFnZSAmIzQzOyBzaXplO1xuNzgxMzpcdFx0XHR9IGVsc2Uge1xuNzgxNDpcdFx0XHRcdGN1cnJlbnRfYnVkZHkgPSBwYWdlICYjNDM7IHNpemU7XG43ODE1Olx0XHRcdH1cbjc4MTY6XHRcbjc4MTc6XHRcdFx0aWYgKHNldF9wYWdlX2d1YXJkKHpvbmUsIGN1cnJlbnRfYnVkZHksIGhpZ2gpKVxuNzgxODpcdFx0XHRcdGNvbnRpbnVlO1xuNzgxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIxMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipMb2NhdGluZyBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgaW4gbW0vcGFnZV9hbGxvYy5jKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc2VjdGlvbiB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2Agd2hlcmUgYCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGRlZmluZWQgb3IgdXRpbGl6ZWQuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgaGFuZGxpbmcgZm9yIG1lbW9yeSBmYWlsdXJlIHNjZW5hcmlvcywgbGlrZWx5IHJlbGF0ZWQgdG8gZXJyb3IgaW5qZWN0aW9uLCBmYXVsdCBoYW5kbGluZywgb3IgbWF5YmUgZXZlbiBoYXJkd2FyZSByZWxpYWJpbGl0eSBmZWF0dXJlcy4gTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSB0aGlua2luZyBhYm91dCBob3cgdGhpcyBjb3VsZCBpbnRlcmFjdCB3aXRoIE5VTUEgbm9kZXMsIHpvbmUgbWFuYWdlbWVudCwgYW5kIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gc3RyYXRlZ3kuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHNlYXJjaCBpdCBhbmQgcmV2aWV3IHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGZhaWx1cmUgbW9kZXMgYXJlIGJlaW5nIGFkZHJlc3NlZCBhbmQgaG93IHRoZSBjb2RlIHJlc3BvbmRzIHRvIHRoZW0sIGxvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gTXkgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29kZWJhc2Ugd2l0aCByZWdhcmQgdG8gbWVtb3J5IGZhaWx1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9Nzc4ND1FWFBPUlRfU1lNQk9MKGlzX2ZyZWVfYnVkZHlfcGFnZSk7XG5tbS9wYWdlX2FsbG9jLmMtNzc4NS1cbm1tL3BhZ2VfYWxsb2MuYzo3Nzg2OiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbm1tL3BhZ2VfYWxsb2MuYy03Nzg3LXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfdG9fZnJlZV9saXN0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgem9uZSAqem9uZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5WRElNTS9QTUVNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBwZXJmZWN0LiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogd2hhdCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSB3ZSB3b3JraW5nIHdpdGggaGVyZT8gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkmIzM5O3ZlIGlkZW50aWZpZWQgc28gZmFyLiBGaXJzdCwgd2UmIzM5O3ZlIGdvdCBgQkxLX0RFVl9QTUVNYCwgd2hpY2ggcmVzaWRlcyBpbiBgZHJpdmVycy9udmRpbW0vS2NvbmZpZ2AuIFRoaXMgaXMgYSBwcmltYXJ5IGRyaXZlciB0byBjb25zaWRlci4gV2UgbmVlZCB0byByZW1lbWJlciB0aGF0IGBMSUJOVkRJTU1gIGlzIGl0cyBwYXJlbnQgY29uZmlndXJhdGlvbiwgc28gdGhhdCYjMzk7cyBpbmhlcmVudGx5IGltcG9ydGFudCwgdG9vLiBUaGVuLCB3ZSBoYXZlIGBNRU1PUllfRkFJTFVSRWAuIEl0IGFwcGVhcnMgdGhpcyBpcyBrZXksIGFzIGl0JiMzOTtzIHdoZXJlIHRoZSBgSFdQb2lzb25gIGZsYWcgaXMgZGVmaW5lZCBhbmQgbWFuYWdlZC4gSWYgdGhhdCBpc24mIzM5O3QgcHJlc2VudCwgdGhlIGNvZGUgdXNlcyBgVEVTVFNDRkxBR19GQUxTRWAsIHdoaWNoIGlzIG9idmlvdXNseSBzb21ldGhpbmcgdG8gY29uc2lkZXIuCgpJJiMzOTtkIGxpa2UgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGZvciBudmRpbW0gb3IgcG1lbS4gQSBkZWVwZXIgZGl2ZSBpbnRvIGBkcml2ZXJzL252ZGltbS9LY29uZmlnYCBpcyBlc3NlbnRpYWwgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBiZSBjZXJ0YWluIEkgaGF2ZSBhbGwgdGhlIHB1enpsZSBwaWVjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjI6bWVudWNvbmZpZyBMSUJOVkRJTU1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05WRElNTSAoTm9uLVZvbGF0aWxlIE1lbW9yeSBEZXZpY2UpIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE3PWlmIExJQk5WRElNTVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xOC1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6MTk6Y29uZmlnIEJMS19ERVZfUE1FTVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1BNRU06IFBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0zNy1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6Mzg6Y29uZmlnIE5EX0NMQUlNXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTM5LVx0Ym9vbFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy00MC1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6NDE6Y29uZmlnIE5EX0JUVFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy00Mi1cdHRyaXN0YXRlXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTQzLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo0NDpjb25maWcgQlRUXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTQ1LVx0Ym9vbCBcJiMzNDtCVFQ6IEJsb2NrIFRyYW5zbGF0aW9uIFRhYmxlIChhdG9taWMgc2VjdG9yIHVwZGF0ZXMpXCYjMzQ7XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy01OC1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6NTk6Y29uZmlnIE5EX1BGTlxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy02MC1cdHRyaXN0YXRlXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTYxLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo2Mjpjb25maWcgTlZESU1NX1BGTlxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy02My1cdGJvb2wgXCYjMzQ7UEZOOiBNYXAgcGVyc2lzdGVudCAoZGV2aWNlKSBtZW1vcnlcJiMzNDtcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTc2LVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo3Nzpjb25maWcgTlZESU1NX0RBWFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7TlZESU1NIERBWDogUmF3IGFjY2VzcyB0byBwZXJzaXN0ZW50IG1lbW9yeVwmIzM0O1xuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctODktXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjkwOmNvbmZpZyBPRl9QTUVNXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTkxLVx0dHJpc3RhdGUgXCYjMzQ7RGV2aWNlLXRyZWUgc3VwcG9ydCBmb3IgcGVyc2lzdGVudCBtZW1vcnkgcmVnaW9uc1wmIzM0O1xuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctOTktXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjEwMDpjb25maWcgUkFNREFYXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgcGVyc2lzdGVudCBtZW1vcnkgaW50ZXJmYWNlcyBvbiBSQU0gY2FydmVvdXRzXCYjMzQ7XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xMTgtXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjExOTpjb25maWcgTlZESU1NX0tFWVNcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTIwLVx0ZGVmX2Jvb2wgeVxuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTIzLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxMjQ6Y29uZmlnIE5WRElNTV9LTVNBTlxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xMjUtXHRib29sXG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNDItXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE0Mzpjb25maWcgTlZESU1NX1RFU1RfQlVJTERcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTQ0LVx0dHJpc3RhdGUgXCYjMzQ7QnVpbGQgdGhlIHVuaXQgdGVzdCBjb3JlXCYjMzQ7XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTQtXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1NTpjb25maWcgTlZESU1NX1NFQ1VSSVRZX1RFU1RcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTU2LVx0Ym9vbCBcJiMzNDtFbmFibGUgTlZESU1NIHNlY3VyaXR5IHVuaXQgdGVzdHNcJiMzNDtcbi0tXG5kcml2ZXJzL252ZGltbS9idXMuYz05OTA9c3RhdGljIGludCBuZF9uc19mb3JnZXRfcG9pc29uX2NoZWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL252ZGltbS9idXMuYy05OTQtXG5kcml2ZXJzL252ZGltbS9idXMuYzo5OTU6Lyogc2V0X2NvbmZpZyByZXF1aXJlcyBhbiBpZGxlIGludGVybGVhdmUgc2V0ICovXG5kcml2ZXJzL252ZGltbS9idXMuYy05OTYtc3RhdGljIGludCBuZF9jbWRfY2xlYXJfdG9fc2VuZChzdHJ1Y3QgbnZkaW1tX2J1cyAqbnZkaW1tX2J1cyxcbi0tXG5kcml2ZXJzL252ZGltbS9kaW1tLmM9MTY9c3RhdGljIGludCBudmRpbW1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbnZkaW1tL2RpbW0uYy05NS1cbmRyaXZlcnMvbnZkaW1tL2RpbW0uYzo5NjpcdGRldl9kYmcoZGV2LCBcJiMzNDtjb25maWcgZGF0YSBzaXplOiAlZFxcblwmIzM0OywgbmRkLVx1MDAzZW5zYXJlYS5jb25maWdfc2l6ZSk7XG5kcml2ZXJzL252ZGltbS9kaW1tLmMtOTctXG4tLVxuZHJpdmVycy9udmRpbW0vbGFiZWwuYz00NDU9aW50IG5kX2xhYmVsX2RhdGFfaW5pdChzdHJ1Y3QgbnZkaW1tX2RydmRhdGEgKm5kZClcbi0tXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jLTQ1Ny1cdCAgICBuZGQtXHUwMDNlbnNhcmVhLmNvbmZpZ19zaXplID09IDApIHtcbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmM6NDU4Olx0XHRkZXZfZGJnKG5kZC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBpbml0IGNvbmZpZyBkYXRhIGFyZWE6ICgldToldSlcXG5cJiMzNDssXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jLTQ1OS1cdFx0XHRuZGQtXHUwMDNlbnNhcmVhLm1heF94ZmVyLCBuZGQtXHUwMDNlbnNhcmVhLmNvbmZpZ19zaXplKTtcbi0tXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jLTQ3Ny1cbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmM6NDc4Olx0LyogQWxsb2NhdGUgY29uZmlnIGRhdGEgKi9cbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmMtNDc5LVx0Y29uZmlnX3NpemUgPSBuZGQtXHUwMDNlbnNhcmVhLmNvbmZpZ19zaXplO1xuLS1cbmRyaXZlcnMvbnZkaW1tL25kLmg9NjYyPXZvaWQgZGV2bV9uYW1lc3BhY2VfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9udmRpbW0vbmQuaC02NjQtI2lmIElTX0VOQUJMRUQoQ09ORklHX05EX0NMQUlNKVxuZHJpdmVycy9udmRpbW0vbmQuaDo2NjU6LyogbWF4IHN0cnVjdCBwYWdlIHNpemUgaW5kZXBlbmRlbnQgb2Yga2VybmVsIGNvbmZpZyAqL1xuZHJpdmVycy9udmRpbW0vbmQuaC02NjYtI2RlZmluZSBNQVhfU1RSVUNUX1BBR0VfU0laRSA2NFxuLS1cbmRyaXZlcnMvbnZkaW1tL3ZpcnRpb19wbWVtLmM9NjI9c3RhdGljIGludCB2aXJ0aW9fcG1lbV9wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL252ZGltbS92aXJ0aW9fcG1lbS5jLTcxLVx0aWYgKCF2ZGV2LVx1MDAzZWNvbmZpZy1cdTAwM2VnZXQpIHtcbmRyaXZlcnMvbnZkaW1tL3ZpcnRpb19wbWVtLmM6NzI6XHRcdGRldl9lcnIoXHUwMDI2dmRldi1cdTAwM2VkZXYsIFwmIzM0OyVzIGZhaWx1cmU6IGNvbmZpZyBhY2Nlc3MgZGlzYWJsZWRcXG5cJiMzNDssXG5kcml2ZXJzL252ZGltbS92aXJ0aW9fcG1lbS5jLTczLVx0XHRcdF9fZnVuY19fKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NzYKCQkJCQkJCW91dHB1dDogMTk0CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGBwbWVtLmNgIEZvY3VzIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoZSByaWdodCBmdW5jdGlvbnMgd2l0aGluIGBwbWVtLmNgIGFyZSB0YXJnZXRlZCBmb3IgZnV6emluZy4gVGhlIGNoYW5nZSBpcyBkaXJlY3RseSBpbXBhY3RpbmcgYHBtZW1fbWtwYWdlX3ByZXNlbnRgLCBhbmQgdGhhdCBmdW5jdGlvbiYjMzk7cyBsaW5rZWQgdG8gYF9fcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9kb193cml0ZWAsIGBwbWVtX3JlY292ZXJ5X3dyaXRlYCwgYW5kIGBwbWVtX3N1Ym1pdF9iaW9gLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhlc2UgYXJlIGFsbCBwcmV0dHkgc3BlY2lmaWMgdG8gdGhlIHBtZW0gZHJpdmVyIGl0c2VsZiwgbm90IHNvbWUgbGlmZWN5Y2xlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnbG9iYWxseSB1c2VkLiBUaGF0JiMzOTtzIGdvb2QgZnJvbSBhIGZvY3VzIHN0YW5kcG9pbnQuIEl0IGluZGljYXRlcyBhIGRlZmluZWQgc2NvcGUuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJIG5lZWQgdG8ganVzdGlmeSBmdXp6aW5nIHRoaXMuIFRoZSBwYXRjaCBpcyBzaW1wbGlmeWluZyBgcG1lbV9ta3BhZ2VfcHJlc2VudGAgYnkgdXNpbmcgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbigpYCBkaXJlY3RseSBhbmQgYWRkaW5nIGEgYFRFU1RTQ0ZMQUdfRkFMU0VgIG1hY3JvLiBUaGlzIG1vZGlmaWVzIGNvcmUgcGFnZSBmbGFnIGRlZmluaXRpb25zLCBhbmQgc2luY2UgcG1lbSBibG9jayBkcml2ZXIgZXJyb3IvcG9pc29uIHJlY292ZXJ5IHBhdGhzIGFyZSBwb3RlbnRpYWxseSB0b3VjaGVkLCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUuIFRoZSBgRm9jdXNTeW1ib2xzYCBsb29rIHJpZ2h0LCBsaXN0aW5nIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjcnVjaWFsOiBCTEtfREVWX1BNRU0sIExJQk5WRElNTSwgYW5kIE1FTU9SWV9GQUlMVVJFIGFyZSBhbGwgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHBtZW0gd29ya3MuIFRoZSBgTUVNT1JZX0ZBSUxVUkVgIG9uZSBpcyBlc3BlY2lhbGx5IHJlbGV2YW50IHRvIHRoaXMgcGF0Y2gsIHNpbmNlIGl0IGlzIGRpc2FibGluZyBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSXQgc2hvdWxkIGJlIHdvcnRoIGZ1enppbmcgYXMgdGhlIGNvZGUgaXMgbW9kaWZ5aW5nIGVycm9yIHJlY292ZXJ5IHBhdGhzLiBTbywgeWVzLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIHRydWUuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUE1FTSYjMzQ7LAogICAgJiMzNDtMSUJOVkRJTU0mIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwbWVtX21rcGFnZV9wcmVzZW50JiMzNDssCiAgICAmIzM0O19fcG1lbV9jbGVhcl9wb2lzb24mIzM0OywKICAgICYjMzQ7cG1lbV9jbGVhcl9wb2lzb24mIzM0OywKICAgICYjMzQ7cG1lbV9kb193cml0ZSYjMzQ7LAogICAgJiMzNDtwbWVtX3JlY292ZXJ5X3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pIHRvIGxpbnV4L3BhZ2UtZmxhZ3MuaCBmb3IgIUNPTkZJR19NRU1PUllfRkFJTFVSRSBidWlsZHMgYW5kIHVwZGF0ZXMgcG1lbV9ta3BhZ2VfcHJlc2VudCgpIGluIGRyaXZlcnMvbnZkaW1tL3BtZW0uYyB0byBkaXJlY3RseSBjYWxsIFRlc3RDbGVhclBhZ2VIV1BvaXNvbigpIGluc3RlYWQgb2YgYW4gbnZkaW1tLXNwZWNpZmljIHdyYXBwZXIuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgcGFnZS1mbGFnIG1hY3JvcyBhbmQgdGhlIHBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrL0RBWCBkcml2ZXIgcG9pc29uLWNsZWFyaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1BNRU0mIzM0OywKICAgICYjMzQ7TElCTlZESU1NJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cG1lbV9ta3BhZ2VfcHJlc2VudCYjMzQ7LAogICAgJiMzNDtfX3BtZW1fY2xlYXJfcG9pc29uJiMzNDssCiAgICAmIzM0O3BtZW1fY2xlYXJfcG9pc29uJiMzNDssCiAgICAmIzM0O3BtZW1fZG9fd3JpdGUmIzM0OywKICAgICYjMzQ7cG1lbV9yZWNvdmVyeV93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKSB0byBsaW51eC9wYWdlLWZsYWdzLmggZm9yICFDT05GSUdfTUVNT1JZX0ZBSUxVUkUgYnVpbGRzIGFuZCB1cGRhdGVzIHBtZW1fbWtwYWdlX3ByZXNlbnQoKSBpbiBkcml2ZXJzL252ZGltbS9wbWVtLmMgdG8gZGlyZWN0bHkgY2FsbCBUZXN0Q2xlYXJQYWdlSFdQb2lzb24oKSBpbnN0ZWFkIG9mIGFuIG52ZGltbS1zcGVjaWZpYyB3cmFwcGVyLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIHBhZ2UtZmxhZyBtYWNyb3MgYW5kIHRoZSBwZXJzaXN0ZW50IG1lbW9yeSBibG9jay9EQVggZHJpdmVyIHBvaXNvbi1jbGVhcmluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcgLyBjbGVhbnVwIHRoYXQgYWRkcyBzdGFuZGFyZCBURVNUU0NGTEFHX0ZBTFNFIGRlZmluaXRpb25zIGZvciBIV1BvaXNvbiBpbiBcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcdTAwM2Ugd2hlbiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgaXMgbm90IHNldCwgYW5kIHJlbW92ZXMgdGhlIGRyaXZlci1zcGVjaWZpYyB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbiB3cmFwcGVyIGluIGZhdm9yIG9mIGRpcmVjdGx5IGNhbGxpbmcgVGVzdENsZWFyUGFnZUhXUG9pc29uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRhcmllcyBvciBkYXRhIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MzQ0MmYwMzIzMzc1MjljMzU4YzJmNzRhZDA0YzM4MzQ0ODk4ZjE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNTozMTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uYyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uYwppbmRleCAzMGE1MWMzNjVjZThiLi41ZmI4NjU5NWU4YmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL252ZGltbS9wbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udmRpbW0vcG1lbS5jCkBAIC04MCw3ICYjNDM7ODAsNyBAQCBzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LAogCQkgKiBoZXJlIHNpbmNlIHdlJiMzOTtyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZAogCQkgKiBvdXRzdGFuZGluZyBJL08gcmVxdWVzdHMgcGluIHRoZSBkZXZfcGFnZW1hcC4KIAkJICovCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihwYWdlKSkKJiM0MzsJCWlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpCiAJCQljbGVhcl9tY2Vfbm9zcGVjKHBmbik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udmRpbW0vcG1lbS5oIGIvZHJpdmVycy9udmRpbW0vcG1lbS5oCmluZGV4IGE0ODUwOWY5MDE5NjguLjc2ODcwNTA1ZGQ3OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252ZGltbS9wbWVtLmgKQEAgLTEsNyAmIzQzOzEsNiBAQAogLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KICNpZm5kZWYgX19OVkRJTU1fUE1FTV9IX18KICNkZWZpbmUgX19OVkRJTU1fUE1FTV9IX18KLSNpbmNsdWRlICZsdDtsaW51eC9wYWdlLWZsYWdzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFkYmxvY2tzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwpAQCAtMzEsMTUgJiM0MzszMCw0IEBAIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLAogCQlsb25nIG5yX3BhZ2VzLCBlbnVtIGRheF9hY2Nlc3NfbW9kZSBtb2RlLCB2b2lkICoqa2FkZHIsCiAJCXVuc2lnbmVkIGxvbmcgKnBmbik7CiAKLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKICNlbmRpZiAvKiBfX05WRElNTV9QTUVNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA3YTg2MzU3MmFkY2U3Li5hMjMxNWFiMWRkM2E1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtNjU2LDYgJiM0Mzs2NTYsNyBAQCBURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKQogI2RlZmluZSBfX1BHX0hXUE9JU09OICgxVUwgJmx0OyZsdDsgUEdfaHdwb2lzb24pCiAjZWxzZQogUEFHRUZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKQomIzQzO1RFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKQogI2RlZmluZSBfX1BHX0hXUE9JU09OIDAKICNlbmRpZgogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUE1FTSBQb2lzb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjaGFuZ2VzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIE5WRElNTSBkcml2ZXIgYW5kIG1lbW9yeSBlcnJvciBoYW5kbGluZy4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgaW4gYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AuIFRoZSBgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb24ocGFnZSlgIGZ1bmN0aW9uIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKWAuIEkgaW1tZWRpYXRlbHkgc3VzcGVjdCB0aGlzIGlzIHJlbGF0ZWQgdG8gaGFyZHdhcmUgcG9pc29uIGhhbmRsaW5nLCB3aGljaCBpcyBzdGFuZGFyZCB3aXRoIE5WRElNTXMsIHBhcnRpY3VsYXJseSBpbiBtb3JlIHJlY2VudCBrZXJuZWxzLgoKVGhlbiwgbG9va2luZyBhdCBgZHJpdmVycy9udmRpbW0vcG1lbS5oYCwgdGhlIHBhdGNoIHJlbW92ZXMgdGhlIGAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZS1mbGFncy5oJmd0O2AgYW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZSByZXBsYWNlZCBoZWxwZXIsIGB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbmAuIEkmIzM5O2QgZXhwZWN0IHRoZSBoZWFkZXIgaW5jbHVzaW9uIHRvIGJlIHJlbW92ZWQgYmVjYXVzZSB0aGUgaGVscGVyIGlzIHJlbW92ZWQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBsb2dpYyBoYXMgYmVlbiByZWZhY3RvcmVkIG9yIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb24gaXMgZGVmaW5lZC4KCkZpbmFsbHksIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGNoYW5nZSBjYXRjaGVzIG15IGV5ZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYWRkaXRpb24gb2YgYFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKWAgaW4gdGhlIGAjZWxzZWAgYnJhbmNoICh3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzbiYjMzk7dCBkZWZpbmVkKSBpcyBrZXkuIEJhc2ljYWxseSwgd2hlbiBtZW1vcnkgZmFpbHVyZSBpc24mIzM5O3QgZW5hYmxlZCwgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgaXMgZGVmaW5lZCB0byBzaW1wbHkgcmV0dXJuIGZhbHNlIChvciB6ZXJvLCBkZXBlbmRpbmcgb24gaG93IGBURVNUU0NGTEFHX0ZBTFNFYCBpcyBkZWZpbmVkKS4gVGhpcyBpbXBsaWVzIGEgY29uZGl0aW9uYWwgYmVoYXZpb3IsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoeS4gTXkgZ3Vlc3MgaXMgdGhhdCB0aGUgcGF0Y2ggb3B0aW1pemVzIHRoZSBIV1BvaXNvbiBjbGVhcmluZywgYnV0IG9ubHkgd2hlbiB0aGUgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgb3B0aW9uIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gV2hlbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpc24mIzM5O3QgZW5hYmxlZCwgdGhlIHByZXZpb3VzIGNvZGUgcGF0aCBpcyByZXRhaW5lZCwgYnV0IHRoZSBjb2RlIG5vdyBoYXMgYSBuZXcgZGVmaW5pdGlvbiBvZiBgVGVzdENsZWFyUGFnZUhXUG9pc29uYCB3aGljaCByZXR1cm5zIDAuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYm90aCBgcG1lbS5jYCBhbmQgYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCB0byBmdWxseSBncmFzcCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIG1vZGlmaWNhdGlvbiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cyB3aXRoaW4gdGhlIE5WRElNTSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZW1fbWtwYWdlX3ByZXNlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9wbWVtLmM9NTg9c3RhdGljIHBoeXNfYWRkcl90IHRvX29mZnNldChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHNlY3Rvcl90IHNlY3Rvcilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjItXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NjM6c3RhdGljIHZvaWQgcG1lbV9ta3BhZ2VfcHJlc2VudChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBoeXNfYWRkcl90IG9mZnNldCxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02NC1cdFx0dW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9OTc9c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEwMy1cdGlmIChjbGVhcmVkIFx1MDAzZSAwKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTA0Olx0XHRwbWVtX21rcGFnZV9wcmVzZW50KHBtZW0sIG9mZnNldCwgY2xlYXJlZCk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTA1LVx0XHRhcmNoX2ludmFsaWRhdGVfcG1lbShwbWVtLVx1MDAzZXZpcnRfYWRkciAmIzQzOyBvZmZzZXQsIGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBQZXJzaXN0ZW50IE1lbW9yeSBEcml2ZXIqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlJiMzOTtyZSBoYW5kbGluZyBOVkRJTU0gcGVyc2lzdGVudCBtZW1vcnkgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgcmVhZC1maWxlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBsaW5lcyA2MyB0aHJvdWdoIDk1IG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBmb2N1c2luZyB0aGVyZSBiZWNhdXNlIHNvbWV0aGluZyBpbiB0aGF0IGFyZWEgZmVsdCBsaWtlIGl0IG5lZWRlZCByZXZpc2l0aW5nLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGF0IGNvZGUgYmxvY2ssIGNoZWNraW5nIGZvci4uLiB3ZWxsLCBJJiMzOTtsbCBrbm93IGl0IHdoZW4gSSBzZWUgaXQuIEl0IGNvdWxkIGJlIGEgc3BlY2lmaWMgbWVtb3J5IGFjY2VzcyBwYXR0ZXJuLCBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIG9yIGV2ZW4ganVzdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGVycm9yIGNvbmRpdGlvbnMuIEkmIzM5O20gcHJlcGFyZWQgdG8gZm9sbG93IHRoZSBmbG93IGZyb20gdGhlcmUsIGJ1dCB0aGF0IHNlY3Rpb24gZmVlbHMgbGlrZSBhIGxpa2VseSBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9wbWVtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHRyZXR1cm4gKHNlY3RvciBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZUKSAmIzQzOyBwbWVtLVx1MDAzZWRhdGFfb2Zmc2V0O1xuICA2MTpcdH1cbiAgNjI6XHRcbiAgNjM6XHRzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LFxuICA2NDpcdFx0XHR1bnNpZ25lZCBpbnQgbGVuKVxuICA2NTpcdHtcbiAgNjY6XHRcdHBoeXNfYWRkcl90IHBoeXMgPSBwbWVtX3RvX3BoeXMocG1lbSwgb2Zmc2V0KTtcbiAgNjc6XHRcdHVuc2lnbmVkIGxvbmcgcGZuX3N0YXJ0LCBwZm5fZW5kLCBwZm47XG4gIDY4Olx0XG4gIDY5Olx0XHQvKiBvbmx5IHBtZW0gaW4gdGhlIGxpbmVhciBtYXAgc3VwcG9ydHMgSFdQb2lzb24gKi9cbiAgNzA6XHRcdGlmIChpc192bWFsbG9jX2FkZHIocG1lbS1cdTAwM2V2aXJ0X2FkZHIpKVxuICA3MTpcdFx0XHRyZXR1cm47XG4gIDcyOlx0XG4gIDczOlx0XHRwZm5fc3RhcnQgPSBQSFlTX1BGTihwaHlzKTtcbiAgNzQ6XHRcdHBmbl9lbmQgPSBwZm5fc3RhcnQgJiM0MzsgUEhZU19QRk4obGVuKTtcbiAgNzU6XHRcdGZvciAocGZuID0gcGZuX3N0YXJ0OyBwZm4gXHUwMDNjIHBmbl9lbmQ7IHBmbiYjNDM7JiM0MzspIHtcbiAgNzY6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuICA3NzpcdFxuICA3ODpcdFx0XHQvKlxuICA3OTpcdFx0XHQgKiBOb3RlLCBubyBuZWVkIHRvIGhvbGQgYSBnZXRfZGV2X3BhZ2VtYXAoKSByZWZlcmVuY2VcbiAgODA6XHRcdFx0ICogaGVyZSBzaW5jZSB3ZSYjMzk7cmUgaW4gdGhlIGRyaXZlciBJL08gcGF0aCBhbmRcbiAgODE6XHRcdFx0ICogb3V0c3RhbmRpbmcgSS9PIHJlcXVlc3RzIHBpbiB0aGUgZGV2X3BhZ2VtYXAuXG4gIDgyOlx0XHRcdCAqL1xuICA4MzpcdFx0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpKVxuICA4NDpcdFx0XHRcdGNsZWFyX21jZV9ub3NwZWMocGZuKTtcbiAgODU6XHRcdH1cbiAgODY6XHR9XG4gIDg3Olx0XG4gIDg4Olx0c3RhdGljIHZvaWQgcG1lbV9jbGVhcl9iYihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHNlY3Rvcl90IHNlY3RvciwgbG9uZyBibGtzKVxuICA4OTpcdHtcbiAgOTA6XHRcdGlmIChibGtzID09IDApXG4gIDkxOlx0XHRcdHJldHVybjtcbiAgOTI6XHRcdGJhZGJsb2Nrc19jbGVhcihcdTAwMjZwbWVtLVx1MDAzZWJiLCBzZWN0b3IsIGJsa3MpO1xuICA5MzpcdFx0aWYgKHBtZW0tXHUwMDNlYmJfc3RhdGUpXG4gIDk0Olx0XHRcdHN5c2ZzX25vdGlmeV9kaXJlbnQocG1lbS1cdTAwM2ViYl9zdGF0ZSk7XG4gIDk1Olx0fVxuICA5NjpcdFxuICA5NzpcdHN0YXRpYyBsb25nIF9fcG1lbV9jbGVhcl9wb2lzb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxuICA5ODpcdFx0XHRwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW4pXG4gIDk5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBQYWdlIEZsYWdzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZXNlIHBhZ2UgZmxhZ3MsIHNvIGxldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgYXJvdW5kIGxpbmUgNjU2LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcmVsZXZhbnQgbWFjcm8gb3Igc3RydWN0dXJlIGRlZmluaXRpb24gdGhhdCYjMzk7cyBjYXVzaW5nIHRoZSB0cm91YmxlLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBwYWdlIGFsbG9jYXRpb24gb3IgbWF5YmUgc29tZSBzb3J0IG9mIG1pZ3JhdGlvbiBvciBpc29sYXRpb24gZmxhZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBrZXJuZWwgZGV2cyBoYXZlIGNvb2tlZCB1cC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZ3JvdW5kIHRydXRoIEkgbmVlZCB0byBkZWJ1ZyB0aGlzIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NDU6XHRcdEZPTElPX1RFU1RfU0VUX0ZMQUcobWxvY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDY0NjpcdCNlbHNlXG4gNjQ3Olx0Rk9MSU9fRkxBR19GQUxTRShtbG9ja2VkKVxuIDY0ODpcdFx0X19GT0xJT19DTEVBUl9GTEFHX05PT1AobWxvY2tlZClcbiA2NDk6XHRcdEZPTElPX1RFU1RfQ0xFQVJfRkxBR19GQUxTRShtbG9ja2VkKVxuIDY1MDpcdFx0Rk9MSU9fVEVTVF9TRVRfRkxBR19GQUxTRShtbG9ja2VkKVxuIDY1MTpcdCNlbmRpZlxuIDY1MjpcdFxuIDY1MzpcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbiA2NTQ6XHRQQUdFRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbiA2NTU6XHRURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxuIDY1NjpcdCNkZWZpbmUgX19QR19IV1BPSVNPTiAoMVVMIFx1MDAzY1x1MDAzYyBQR19od3BvaXNvbilcbiA2NTc6XHQjZWxzZVxuIDY1ODpcdFBBR0VGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbiA2NTk6XHRURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbiA2NjA6XHQjZGVmaW5lIF9fUEdfSFdQT0lTT04gMFxuIDY2MTpcdCNlbmRpZlxuIDY2MjpcdFxuIDY2MzpcdCNpZmRlZiBDT05GSUdfUEFHRV9JRExFX0ZMQUdcbiA2NjQ6XHQjaWZkZWYgQ09ORklHXzY0QklUXG4gNjY1Olx0Rk9MSU9fVEVTVF9GTEFHKHlvdW5nLCBGT0xJT19IRUFEX1BBR0UpXG4gNjY2Olx0Rk9MSU9fU0VUX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcbiA2Njc6XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcbiA2Njg6XHRGT0xJT19GTEFHKGlkbGUsIEZPTElPX0hFQURfUEFHRSlcbiA2Njk6XHQjZW5kaWZcbiA2NzA6XHQvKiBTZWUgcGFnZV9pZGxlLmggZm9yICE2NEJJVCB3b3JrYXJvdW5kICovXG4gNjcxOlx0I2Vsc2UgLyogIUNPTkZJR19QQUdFX0lETEVfRkxBRyAqL1xuIDY3MjpcdEZPTElPX0ZMQUdfRkFMU0UoeW91bmcpXG4gNjczOlx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHX0ZBTFNFKHlvdW5nKVxuIDY3NDpcdEZPTElPX0ZMQUdfRkFMU0UoaWRsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzNAoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiAzNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIENvZGUgQ2xlYW51cCoqCgpPa2F5LCBzbyB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNvZGUgY2xlYW51cCwgYSByZWZhY3RvcmluZyBwYXRjaCByZWFsbHkuIEkmIzM5O20gYWRkaW5nIGBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilgIGluIGBsaW51eC9wYWdlLWZsYWdzLmhgIHdoaWNoIGRlZmluZXMgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKWAgYW5kIGBUZXN0U2V0UGFnZUhXUG9pc29uKHBhZ2UpYCBldmVuIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZGlzYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCwgdW5pZnlpbmcgdGhlIGRlZmluaXRpb25zLiBJJiMzOTttIGFsc28gcmVtb3ZpbmcgYSBkcml2ZXItc3BlY2lmaWMgd3JhcHBlciwgYHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHBhZ2UpYCwgaW4gYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AgaW4gZmF2b3Igb2YgZGlyZWN0bHkgdXNpbmcgdGhlIHN0YW5kYXJkIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSlgIG1hY3JvLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgYWZ0ZXIgcmV2aWV3aW5nLCB0aGVyZSBhcmUgemVybyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbnZvbHZlZCwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdXNlci1zcGFjZSBjb3BpZXMgaGFwcGVuaW5nLCBhbmQgbm90aGluZyB0aGF0IHRvdWNoZXMgZGF0YSBmbG93IG9yIGJvdW5kcyBjaGVja2luZy4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgY29uc29saWRhdGluZyB0aGUgd2F5IHdlIGhhbmRsZSB0aGVzZSBwYWdlIGZsYWcgaGVscGVyIG1hY3Jvcy4gVGhpcyBpcyBhYm91dCBhcyBsb3ctcmlzayBhcyBpdCBnZXRzLgoKVGhlcmVmb3JlLCBubyBuZWVkIHRvIGZsYWcgdGhpcyB3aXRoIGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjbGVhciBvbiB0aGUganVzdGlmaWNhdGlvbiwgbGV0JiMzOTtzIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTi4gV2l0aCBLQVNBTiwgc3RhbmRhcmQgYnVpbGRzLCBJJiMzOTttIGNoZWNraW5nIGdlbmVyYWwgbWVtb3J5IGFjY2Vzc2VzLCBwYWdlIGZsYWcgb3BlcmF0aW9ucywgZXRjLiBLTVNBTiBmb2N1c2VzIHNwZWNpZmljYWxseSBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzICp0byogdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIGFueSBvZiB0aG9zZSBhcmVhcy4gSXQmIzM5O3MganVzdCBhIHJlZmFjdG9yaW5nIG9mIGV4aXN0aW5nIHBhZ2UgZmxhZyBoZWxwZXJzIGFuZCByZW1vdmVzIHRoYXQgcG1lbSB3cmFwcGVyLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCBleHBvc2VkLCBvciBtYW5pcHVsYXRlZC4gTm8gbmV3IGJ1ZmZlcnMsIG5vIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgbm8tb3AgY29uY2VybmluZyBLTVNBTi4KCk9rYXksIHRoYXQmIzM5O3MgZW5vdWdoLCBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIC8gY2xlYW51cCB0aGF0IGFkZHMgc3RhbmRhcmQgVEVTVFNDRkxBR19GQUxTRSBkZWZpbml0aW9ucyBmb3IgSFdQb2lzb24gaW4gXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXHUwMDNlIHdoZW4gQ09ORklHX01FTU9SWV9GQUlMVVJFIGlzIG5vdCBzZXQsIGFuZCByZW1vdmVzIHRoZSBkcml2ZXItc3BlY2lmaWMgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb24gd3JhcHBlciBpbiBmYXZvciBvZiBkaXJlY3RseSBjYWxsaW5nIFRlc3RDbGVhclBhZ2VIV1BvaXNvbi4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMgb3IgZGF0YSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSByZWZhY3RvcmluZyAvIGNsZWFudXAgdGhhdCBhZGRzIHN0YW5kYXJkIFRFU1RTQ0ZMQUdfRkFMU0UgZGVmaW5pdGlvbnMgZm9yIEhXUG9pc29uIGluIFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFx1MDAzZSB3aGVuIENPTkZJR19NRU1PUllfRkFJTFVSRSBpcyBub3Qgc2V0LCBhbmQgcmVtb3ZlcyB0aGUgZHJpdmVyLXNwZWNpZmljIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uIHdyYXBwZXIgaW4gZmF2b3Igb2YgZGlyZWN0bHkgY2FsbGluZyBUZXN0Q2xlYXJQYWdlSFdQb2lzb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzE6NTUuMjU3NTM1ODIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2NTg2ODM0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9QTUVNXCIsXG4gICAgXCJMSUJOVkRJTU1cIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicG1lbV9ta3BhZ2VfcHJlc2VudFwiLFxuICAgIFwiX19wbWVtX2NsZWFyX3BvaXNvblwiLFxuICAgIFwicG1lbV9jbGVhcl9wb2lzb25cIixcbiAgICBcInBtZW1fZG9fd3JpdGVcIixcbiAgICBcInBtZW1fcmVjb3Zlcnlfd3JpdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcgLyBjbGVhbnVwIHRoYXQgYWRkcyBzdGFuZGFyZCBURVNUU0NGTEFHX0ZBTFNFIGRlZmluaXRpb25zIGZvciBIV1BvaXNvbiBpbiBcXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXFx1MDAzZSB3aGVuIENPTkZJR19NRU1PUllfRkFJTFVSRSBpcyBub3Qgc2V0LCBhbmQgcmVtb3ZlcyB0aGUgZHJpdmVyLXNwZWNpZmljIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uIHdyYXBwZXIgaW4gZmF2b3Igb2YgZGlyZWN0bHkgY2FsbGluZyBUZXN0Q2xlYXJQYWdlSFdQb2lzb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKSB0byBsaW51eC9wYWdlLWZsYWdzLmggZm9yICFDT05GSUdfTUVNT1JZX0ZBSUxVUkUgYnVpbGRzIGFuZCB1cGRhdGVzIHBtZW1fbWtwYWdlX3ByZXNlbnQoKSBpbiBkcml2ZXJzL252ZGltbS9wbWVtLmMgdG8gZGlyZWN0bHkgY2FsbCBUZXN0Q2xlYXJQYWdlSFdQb2lzb24oKSBpbnN0ZWFkIG9mIGFuIG52ZGltbS1zcGVjaWZpYyB3cmFwcGVyLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIHBhZ2UtZmxhZyBtYWNyb3MgYW5kIHRoZSBwZXJzaXN0ZW50IG1lbW9yeSBibG9jay9EQVggZHJpdmVyIHBvaXNvbi1jbGVhcmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzE6NTUuMjU3NTQwMTAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc0NzI5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MzQ0MmYwMzIzMzc1MjljMzU4YzJmNzRhZDA0YzM4MzQ0ODk4ZjE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDU6MzE6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udmRpbW0vcG1lbS5jIGIvZHJpdmVycy9udmRpbW0vcG1lbS5jXFxuaW5kZXggMzBhNTFjMzY1Y2U4Yi4uNWZiODY1OTVlOGJkNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252ZGltbS9wbWVtLmNcXG4rKysgYi9kcml2ZXJzL252ZGltbS9wbWVtLmNcXG5AQCAtODAsNyArODAsNyBAQCBzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LFxcbiBcXHRcXHQgKiBoZXJlIHNpbmNlIHdlJ3JlIGluIHRoZSBkcml2ZXIgSS9PIHBhdGggYW5kXFxuIFxcdFxcdCAqIG91dHN0YW5kaW5nIEkvTyByZXF1ZXN0cyBwaW4gdGhlIGRldl9wYWdlbWFwLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHBhZ2UpKVxcbitcXHRcXHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpKVxcbiBcXHRcXHRcXHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XFxuIFxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9wbWVtLmggYi9kcml2ZXJzL252ZGltbS9wbWVtLmhcXG5pbmRleCBhNDg1MDlmOTAxOTY4Li43Njg3MDUwNWRkNzk3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxcbisrKyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxcbkBAIC0xLDcgKzEsNiBAQFxcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbiAjaWZuZGVmIF9fTlZESU1NX1BNRU1fSF9fXFxuICNkZWZpbmUgX19OVkRJTU1fUE1FTV9IX19cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JhZGJsb2Nrcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcmVtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuQEAgLTMxLDE1ICszMCw0IEBAIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLFxcbiBcXHRcXHRsb25nIG5yX3BhZ2VzLCBlbnVtIGRheF9hY2Nlc3NfbW9kZSBtb2RlLCB2b2lkICoqa2FkZHIsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgKnBmbik7XFxuIFxcbi0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4te1xcbi1cXHRyZXR1cm4gVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpO1xcbi19XFxuLSNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4te1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuLX1cXG4tI2VuZGlmXFxuICNlbmRpZiAvKiBfX05WRElNTV9QTUVNX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uYTIzMTVhYjFkZDNhNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTY1Niw2ICs2NTYsNyBAQCBURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxcbiAjZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcXHUwMDNjXFx1MDAzYyBQR19od3BvaXNvbilcXG4gI2Vsc2VcXG4gUEFHRUZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKVxcbitURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcXG4gI2RlZmluZSBfX1BHX0hXUE9JU09OIDBcXG4gI2VuZGlmXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMTo1NS42NTU2MDcxMzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY1NDkzNTEyNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfUE1FTVwiLFxuICAgIFwiTElCTlZESU1NXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBtZW1fbWtwYWdlX3ByZXNlbnRcIixcbiAgICBcIl9fcG1lbV9jbGVhcl9wb2lzb25cIixcbiAgICBcInBtZW1fY2xlYXJfcG9pc29uXCIsXG4gICAgXCJwbWVtX2RvX3dyaXRlXCIsXG4gICAgXCJwbWVtX3JlY292ZXJ5X3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbikgdG8gbGludXgvcGFnZS1mbGFncy5oIGZvciAhQ09ORklHX01FTU9SWV9GQUlMVVJFIGJ1aWxkcyBhbmQgdXBkYXRlcyBwbWVtX21rcGFnZV9wcmVzZW50KCkgaW4gZHJpdmVycy9udmRpbW0vcG1lbS5jIHRvIGRpcmVjdGx5IGNhbGwgVGVzdENsZWFyUGFnZUhXUG9pc29uKCkgaW5zdGVhZCBvZiBhbiBudmRpbW0tc3BlY2lmaWMgd3JhcHBlci4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBwYWdlLWZsYWcgbWFjcm9zIGFuZCB0aGUgcGVyc2lzdGVudCBtZW1vcnkgYmxvY2svREFYIGRyaXZlciBwb2lzb24tY2xlYXJpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTM0NDJmMDMyMzM3NTI5YzM1OGMyZjc0YWQwNGMzODM0NDg5OGYxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDU6MzE6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9wbWVtLmMgYi9kcml2ZXJzL252ZGltbS9wbWVtLmNcbmluZGV4IDMwYTUxYzM2NWNlOGIuLjVmYjg2NTk1ZThiZDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252ZGltbS9wbWVtLmNcbisrKyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uY1xuQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIHZvaWQgcG1lbV9ta3BhZ2VfcHJlc2VudChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBoeXNfYWRkcl90IG9mZnNldCxcbiBcdFx0ICogaGVyZSBzaW5jZSB3ZSdyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZFxuIFx0XHQgKiBvdXRzdGFuZGluZyBJL08gcmVxdWVzdHMgcGluIHRoZSBkZXZfcGFnZW1hcC5cbiBcdFx0ICovXG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihwYWdlKSlcbitcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcbiBcdFx0XHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaCBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxuaW5kZXggYTQ4NTA5ZjkwMTk2OC4uNzY4NzA1MDVkZDc5NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uaFxuKysrIGIvZHJpdmVycy9udmRpbW0vcG1lbS5oXG5AQCAtMSw3ICsxLDYgQEBcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICNpZm5kZWYgX19OVkRJTU1fUE1FTV9IX19cbiAjZGVmaW5lIF9fTlZESU1NX1BNRU1fSF9fXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFkYmxvY2tzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuQEAgLTMxLDE1ICszMCw0IEBAIGxvbmcgX19wbWVtX2RpcmVjdF9hY2Nlc3Moc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwZ29mZl90IHBnb2ZmLFxuIFx0XHRsb25nIG5yX3BhZ2VzLCBlbnVtIGRheF9hY2Nlc3NfbW9kZSBtb2RlLCB2b2lkICoqa2FkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgKnBmbik7XG4gXG4tI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcbi17XG4tXHRyZXR1cm4gVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSlcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLSNlbmRpZlxuICNlbmRpZiAvKiBfX05WRElNTV9QTUVNX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbmluZGV4IDdhODYzNTcyYWRjZTcuLmEyMzE1YWIxZGQzYTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbkBAIC02NTYsNiArNjU2LDcgQEAgVEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbiAjZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcdTAwM2NcdTAwM2MgUEdfaHdwb2lzb24pXG4gI2Vsc2VcbiBQQUdFRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pXG4rVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pXG4gI2RlZmluZSBfX1BHX0hXUE9JU09OIDBcbiAjZW5kaWZcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMxOjU1LjY1NTYwOTE1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MjA1MjE2NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIEdpdCBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdXNlcidzIGdpdmVuIG1lIGEgZ2l0IHBhdGNoIGRpZmYgYW5kIHdhbnRzIG15IGV4cGVydCBleWUgb24gaXRzIHN1aXRhYmlsaXR5IGZvciBzeXprYWxsZXIgZnV6emluZywgc3BlY2lmaWNhbGx5IG9uIGFuIGFtZDY0IGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50PyBUaGlzIGlzIExpbnV4IGtlcm5lbCBwYXRjaCB0cmlhZ2UgZm9yIGZ1enppbmcg4oCTIHB1cmUgc29mdHdhcmUgdGVzdGluZyBhbmQgZGVmZW5zaXZlIFFBLCBzbyBpbmhlcmVudGx5IGJlbmlnbi4gTm8gcmVkIGZsYWdzIHJpZ2h0IG9mZiB0aGUgYmF0LCB3aGljaCBpcyBnb29kLlxuXG5Ob3csIHRoZSBwYXRjaCBpdHNlbGYuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBjaGFuZ2VzIGFjcm9zcyB0aHJlZSBmaWxlcywgYW5kIHRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIG1lbW9yeSBwb2lzb24gZmxhZy5cblxuKiAgIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgOiBUaGUgY3J1Y2lhbCBjaGFuZ2UgaGVyZSBpcyBpbiBgcG1lbV9ta3BhZ2VfcHJlc2VudGAuIFRoZSBjb2RlIHdlbnQgZnJvbSBgaWYgKHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHBhZ2UpKWAgdG8gYGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpYC4gVGhpcyBpcyB0aGUgbW9zdCB2aXNpYmxlIGNoYW5nZS5cbiogICBgZHJpdmVycy9udmRpbW0vcG1lbS5oYDogVGhpcyBtZWFucyB0aGUgbnZkaW1tLXNwZWNpZmljIHdyYXBwZXIgZnVuY3Rpb24gYHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uYCBpcyByZW1vdmVkIGJlY2F1c2UgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5LlxuKiAgIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGA6IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIFByZXZpb3VzbHksIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb25gIHdhc24ndCBkZWZpbmVkIGlmIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIHdhcyBkaXNhYmxlZC4gVGhlIHBhdGNoIG5vdyBpbnRyb2R1Y2VzIGBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilgIHVuZGVyIHRoZSBgI2Vsc2VgIGNvbmRpdGlvbiBmb3IgYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIFRoaXMgY2xldmVybHkgZGVmaW5lcyBgVGVzdENsZWFyUGFnZUhXUG9pc29uYCB0byBzaW1wbHkgcmV0dXJuIDAvZmFsc2UgaW4gdGhlIGFic2VuY2Ugb2YgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3ZlIHJlZmFjdG9yZWQgdGhlIGNvZGUgdG8gdXNlIHRoZSBtb3JlIGdlbmVyaWMgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgdW5jb25kaXRpb25hbGx5LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZW5hYmxlZC4gSXQgcHJvdmlkZXMgYSBjb21tb24gcGF0aCByZWdhcmRsZXNzLCBhbmQgdGhhdCBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUncyBhbnkgaW1wbGljaXQgYmVoYXZpb3IgYmVpbmcgY2hhbmdlZCB0aGF0IGNvdWxkIHRyaXAgdXAgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHJ1biBzb21lIHF1aWNrIGNoZWNrcyB1c2luZyBteSBzdGFuZGFyZCBzZXQgb2YgY29kZWJhc2UgdG9vbHMuIEknbGwgc2VhcmNoIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbmQgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgbWF5YmUgbG9vayBmb3IgaW5kaXJlY3QgY2FsbHMgb3IgdXNlcyBvZiB0aGlzIHBvaXNvbiBmbGFnIHRoYXQgbWlnaHQgaGF2ZSBzdWJ0bGUsIHVuZXhwZWN0ZWQgZWZmZWN0cy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBsb2NhbGl6ZWQsIHdlbGwtdW5kZXJzdG9vZCwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgZnV6emluZyBzdXJmYWNlcyBvciwgY3J1Y2lhbGx5LCBlbGltaW5hdGUgZXhpc3Rpbmcgb25lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyMSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjEwLjg2MDgzMTY3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE0ODgzMTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZW1fbWtwYWdlX3ByZXNlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udmRpbW0vcG1lbS5jPTU4PXN0YXRpYyBwaHlzX2FkZHJfdCB0b19vZmZzZXQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjYzOnN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY0LVxcdFxcdHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9OTc9c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTAzLVxcdGlmIChjbGVhcmVkIFxcdTAwM2UgMCkge1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxMDQ6XFx0XFx0cG1lbV9ta3BhZ2VfcHJlc2VudChwbWVtLCBvZmZzZXQsIGNsZWFyZWQpO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMDUtXFx0XFx0YXJjaF9pbnZhbGlkYXRlX3BtZW0ocG1lbS1cXHUwMDNldmlydF9hZGRyICsgb2Zmc2V0LCBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjoxMy4zNzU3MjEyNTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY2ODA5MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIFBhZ2UgRmxhZ3MqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZXNlIHBhZ2UgZmxhZ3MsIHNvIGxldCdzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIGFyb3VuZCBsaW5lIDY1Ni4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIHJlbGV2YW50IG1hY3JvIG9yIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRoYXQncyBjYXVzaW5nIHRoZSB0cm91YmxlLiBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHBhZ2UgYWxsb2NhdGlvbiBvciBtYXliZSBzb21lIHNvcnQgb2YgbWlncmF0aW9uIG9yIGlzb2xhdGlvbiBmbGFnLiBMZXQncyBzZWUgd2hhdCB0aGUga2VybmVsIGRldnMgaGF2ZSBjb29rZWQgdXAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGdyb3VuZCB0cnV0aCBJIG5lZWQgdG8gZGVidWcgdGhpcyBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU0MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjE2LjE0MjUzMzAxOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NDU6XFx0XFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyhtbG9ja2VkLCBGT0xJT19IRUFEX1BBR0UpXFxuIDY0NjpcXHQjZWxzZVxcbiA2NDc6XFx0Rk9MSU9fRkxBR19GQUxTRShtbG9ja2VkKVxcbiA2NDg6XFx0XFx0X19GT0xJT19DTEVBUl9GTEFHX05PT1AobWxvY2tlZClcXG4gNjQ5OlxcdFxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBR19GQUxTRShtbG9ja2VkKVxcbiA2NTA6XFx0XFx0Rk9MSU9fVEVTVF9TRVRfRkxBR19GQUxTRShtbG9ja2VkKVxcbiA2NTE6XFx0I2VuZGlmXFxuIDY1MjpcXHRcXG4gNjUzOlxcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG4gNjU0OlxcdFBBR0VGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxcbiA2NTU6XFx0VEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcXG4gNjU2OlxcdCNkZWZpbmUgX19QR19IV1BPSVNPTiAoMVVMIFxcdTAwM2NcXHUwMDNjIFBHX2h3cG9pc29uKVxcbiA2NTc6XFx0I2Vsc2VcXG4gNjU4OlxcdFBBR0VGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcXG4gNjU5OlxcdFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKVxcbiA2NjA6XFx0I2RlZmluZSBfX1BHX0hXUE9JU09OIDBcXG4gNjYxOlxcdCNlbmRpZlxcbiA2NjI6XFx0XFxuIDY2MzpcXHQjaWZkZWYgQ09ORklHX1BBR0VfSURMRV9GTEFHXFxuIDY2NDpcXHQjaWZkZWYgQ09ORklHXzY0QklUXFxuIDY2NTpcXHRGT0xJT19URVNUX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcXG4gNjY2OlxcdEZPTElPX1NFVF9GTEFHKHlvdW5nLCBGT0xJT19IRUFEX1BBR0UpXFxuIDY2NzpcXHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoeW91bmcsIEZPTElPX0hFQURfUEFHRSlcXG4gNjY4OlxcdEZPTElPX0ZMQUcoaWRsZSwgRk9MSU9fSEVBRF9QQUdFKVxcbiA2Njk6XFx0I2VuZGlmXFxuIDY3MDpcXHQvKiBTZWUgcGFnZV9pZGxlLmggZm9yICE2NEJJVCB3b3JrYXJvdW5kICovXFxuIDY3MTpcXHQjZWxzZSAvKiAhQ09ORklHX1BBR0VfSURMRV9GTEFHICovXFxuIDY3MjpcXHRGT0xJT19GTEFHX0ZBTFNFKHlvdW5nKVxcbiA2NzM6XFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHX0ZBTFNFKHlvdW5nKVxcbiA2NzQ6XFx0Rk9MSU9fRkxBR19GQUxTRShpZGxlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjoxNi4xNDI2MzkzMzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDg0ODA5Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBwbWVtX21rcGFnZV9wcmVzZW50KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGhlYWQgb3ZlciB0byB0aGUgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AgZmlsZSDigJMgdGhhdCdzIHdoZXJlIHRoZSBwZXJzaXN0ZW50IG1lbW9yeSBzdHVmZiBsaXZlcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgTlZESU1NIGRyaXZlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwYWdlIGhhbmRsaW5nLCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBwbWVtX21rcGFnZV9wcmVzZW50YCBmdW5jdGlvbi4gVGhhdCBmdW5jdGlvbiB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIG1hbmFnZXMgbWVtb3J5IHBhZ2VzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgcGVyc2lzdGVudCBtZW1vcnkgZGV2aWNlcy4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aGUgY29kZSBlbnN1cmVzIGRhdGEgY29uc2lzdGVuY3kgYW5kIGhhbmRsZXMgcG90ZW50aWFsIHBvd2VyIGZhaWx1cmVzIGluIHJlbGF0aW9uIHRvIG1lbW9yeSBiZWluZyBcInByZXNlbnRcIi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgdG8gaG93IHdlIGFyZSBtYWtpbmcgdGhpcyB3b3JrIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gVGltZSB0byBkaWcgaW4gYW5kIHJlbWluZCBteXNlbGYgb2YgdGhvc2UgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI4NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6MTkuNjI3NDUyNDg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbnZkaW1tL3BtZW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRyZXR1cm4gKHNlY3RvciBcXHUwMDNjXFx1MDAzYyBTRUNUT1JfU0hJRlQpICsgcG1lbS1cXHUwMDNlZGF0YV9vZmZzZXQ7XFxuICA2MTpcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXFxuICA2NDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGVuKVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0cGh5c19hZGRyX3QgcGh5cyA9IHBtZW1fdG9fcGh5cyhwbWVtLCBvZmZzZXQpO1xcbiAgNjc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm5fc3RhcnQsIHBmbl9lbmQsIHBmbjtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0Lyogb25seSBwbWVtIGluIHRoZSBsaW5lYXIgbWFwIHN1cHBvcnRzIEhXUG9pc29uICovXFxuICA3MDpcXHRcXHRpZiAoaXNfdm1hbGxvY19hZGRyKHBtZW0tXFx1MDAzZXZpcnRfYWRkcikpXFxuICA3MTpcXHRcXHRcXHRyZXR1cm47XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdHBmbl9zdGFydCA9IFBIWVNfUEZOKHBoeXMpO1xcbiAgNzQ6XFx0XFx0cGZuX2VuZCA9IHBmbl9zdGFydCArIFBIWVNfUEZOKGxlbik7XFxuICA3NTpcXHRcXHRmb3IgKHBmbiA9IHBmbl9zdGFydDsgcGZuIFxcdTAwM2MgcGZuX2VuZDsgcGZuKyspIHtcXG4gIDc2OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0XFx0LypcXG4gIDc5OlxcdFxcdFxcdCAqIE5vdGUsIG5vIG5lZWQgdG8gaG9sZCBhIGdldF9kZXZfcGFnZW1hcCgpIHJlZmVyZW5jZVxcbiAgODA6XFx0XFx0XFx0ICogaGVyZSBzaW5jZSB3ZSdyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZFxcbiAgODE6XFx0XFx0XFx0ICogb3V0c3RhbmRpbmcgSS9PIHJlcXVlc3RzIHBpbiB0aGUgZGV2X3BhZ2VtYXAuXFxuICA4MjpcXHRcXHRcXHQgKi9cXG4gIDgzOlxcdFxcdFxcdGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpXFxuICA4NDpcXHRcXHRcXHRcXHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XFxuICA4NTpcXHRcXHR9XFxuICA4NjpcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdHN0YXRpYyB2b2lkIHBtZW1fY2xlYXJfYmIoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IsIGxvbmcgYmxrcylcXG4gIDg5OlxcdHtcXG4gIDkwOlxcdFxcdGlmIChibGtzID09IDApXFxuICA5MTpcXHRcXHRcXHRyZXR1cm47XFxuICA5MjpcXHRcXHRiYWRibG9ja3NfY2xlYXIoXFx1MDAyNnBtZW0tXFx1MDAzZWJiLCBzZWN0b3IsIGJsa3MpO1xcbiAgOTM6XFx0XFx0aWYgKHBtZW0tXFx1MDAzZWJiX3N0YXRlKVxcbiAgOTQ6XFx0XFx0XFx0c3lzZnNfbm90aWZ5X2RpcmVudChwbWVtLVxcdTAwM2ViYl9zdGF0ZSk7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBsb25nIF9fcG1lbV9jbGVhcl9wb2lzb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxcbiAgOTg6XFx0XFx0XFx0cGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuKVxcbiAgOTk6XFx0e1xcbiAxMDA6XFx0XFx0cGh5c19hZGRyX3QgcGh5cyA9IHBtZW1fdG9fcGh5cyhwbWVtLCBvZmZzZXQpO1xcbiAxMDE6XFx0XFx0bG9uZyBjbGVhcmVkID0gbnZkaW1tX2NsZWFyX3BvaXNvbih0b19kZXYocG1lbSksIHBoeXMsIGxlbik7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmIChjbGVhcmVkIFxcdTAwM2UgMCkge1xcbiAxMDQ6XFx0XFx0XFx0cG1lbV9ta3BhZ2VfcHJlc2VudChwbWVtLCBvZmZzZXQsIGNsZWFyZWQpO1xcbiAxMDU6XFx0XFx0XFx0YXJjaF9pbnZhbGlkYXRlX3BtZW0ocG1lbS1cXHUwMDNldmlydF9hZGRyICsgb2Zmc2V0LCBsZW4pO1xcbiAxMDY6XFx0XFx0fVxcbiAxMDc6XFx0XFx0cmV0dXJuIGNsZWFyZWQ7XFxuIDEwODpcXHR9XFxuIDEwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6MTkuNjI3NTg4Mjc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY0MTIzNjk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIE5WRElNTS9QTUVNKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBhcmUgTlZESU1NL1BNRU0gdGFyZ2V0cyB2aWFibGUgZm9yIGZ1enppbmcsIGFuZCBhcmUgdGhleSB3b3J0aCB0aGUgZWZmb3J0PyBUaW1lIHRvIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QuXG5cblRoZSBjaGFuZ2UgdG91Y2hlcyBib3RoIGNvcmUgZmlsZXMgYW5kIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCBhZGRpbmcgdGhlIGBURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilgIG1hY3JvLCAqYW5kKiB1cGRhdGVzIHRvIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgIGFuZCBgcG1lbS5oYCwgd2l0aCBkaXJlY3QgY2FsbHMgdG8gYFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKWAuIFNvIHRoYXQgdGlja3MgdGhlIGJveCBvZiBiZWluZyBhbiBhcmVhIHRoYXQgY291bGQgYmUgZXhwb3NlZCBpbiBhIHdheSB3ZSdkIGxpa2UgdG8gdGFyZ2V0IGl0LlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBOVkRJTU0vUE1FTSBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgc2V0dXAuIENhbiBJIGV2ZW4gZ2V0IGF0IGl0PyBHb29kIG5ld3Mg4oCTIGl0IGxvb2tzIGxpa2UgTlZESU1NL1BNRU0gaXMgZW11bGF0YWJsZSBpbiBRRU1VLiBUaGluZ3MgbGlrZSBgbWVtbWFwPW5uW0tNR11Ac3NbS01HXWAsIEFDUEkgTkZJVCwgdmlydGlvLXBtZW0sIGFuZCB0aGUgdW5kZXJseWluZyBuZF9lODIwIC8gbGlibnZkaW1tIC8gcG1lbSBkcml2ZXIgcHJvdmlkZSBhIHBhdGguIEFuZCBzaW5jZSB0aGUgY29kZSB0aGF0J3MgYmVpbmcgY2hhbmdlZCBsaXZlcyBpbiBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCwgdGhpcyBzZWVtcyB0byBjb25maXJtIGl0J3MgYSBkcml2ZXIgd2UgKmNhbiogZ2V0IGF0LlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdG8gZW5hYmxlIHRoaXMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIHNlZSBleGFjdGx5IHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWQgdG8gYmUgc2V0IHRvIGVuYWJsZSBgZHJpdmVycy9udmRpbW0vcG1lbS5jYC4gT25jZSBJIGtub3cgdGhhdCwgSSdsbCBiZSBpbiBhIGJldHRlciBwb3NpdGlvbiB0byBnYXVnZSB0aGUgc2NvcGUgYW5kIGNvbXBsZXhpdHkgb2Ygc2V0dGluZyB1cCBhIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjoyMy4yNjg4MjczNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MTIwMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1BNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udmRpbW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udmRpbW0vS2NvbmZpZz0xNz1pZiBMSUJOVkRJTU1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6MTk6Y29uZmlnIEJMS19ERVZfUE1FTVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIlBNRU06IFBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjoyMy4zNTY5NTQ5MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ4NTEyOTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVkRJTU0gS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9udmRpbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gem9vbSBpbiBhcm91bmQgbGluZSAxNy4gVGhlIEtjb25maWcgZmlsZXMgYXJlIGVzc2VudGlhbCBmb3IgY29uZmlndXJpbmcga2VybmVsIG1vZHVsZXMsIHNvIHRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIHRoZSBvcHRpb25zIHJlbGF0ZWQgdG8gTm9uLVZvbGF0aWxlIERJTU1zLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSwgdGhpbmdzIGxpa2Ugd2hldGhlciBvciBub3QgdGhlIE5WRElNTSBzdXBwb3J0IGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBkaXJlY3RseSBvciBhcyBhIG1vZHVsZSwgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHNldHRpbmdzLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgcHJpbWFyeSBkZWNpc2lvbiBwb2ludHMgdGhlIGtlcm5lbCBtYWtlcyBkdXJpbmcgY29tcGlsYXRpb24gY29uY2VybmluZyBOVkRJTU0gc3VwcG9ydCwgYXMgSSBtaWdodCBiZSBwcmVwYXJpbmcgdG8gZWl0aGVyIGVuYWJsZSwgZGlzYWJsZSwgb3IgYWRqdXN0IHRoZXNlIHNldHRpbmdzIGZvciBhIHNwZWNpZmljIGRlcGxveW1lbnQgb3IgZGVidWdnaW5nIHNjZW5hcmlvLiBUaGlzIGxpbmUgb2YgaW5xdWlyeSBzaG91bGQgcXVpY2tseSBnaXZlIG1lIHRoZSBzY29wZSBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6MjUuODQyMDg2OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9udmRpbW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBMSUJOVkRJTU1cXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJOVkRJTU0gKE5vbi1Wb2xhdGlsZSBNZW1vcnkgRGV2aWNlKSBTdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBQSFlTX0FERFJfVF82NEJJVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVlxcbiAgIDc6XFx0XFx0c2VsZWN0IE1FTVJFR0lPTlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBHZW5lcmljIHN1cHBvcnQgZm9yIG5vbi12b2xhdGlsZSBtZW1vcnkgZGV2aWNlcyBpbmNsdWRpbmdcXG4gIDEwOlxcdFxcdCAgQUNQSS02LU5GSVQgZGVmaW5lZCByZXNvdXJjZXMuICBPbiBwbGF0Zm9ybXMgdGhhdCBkZWZpbmUgYW5cXG4gIDExOlxcdFxcdCAgTkZJVCwgb3Igb3RoZXJ3aXNlIGNhbiBkaXNjb3ZlciBOVkRJTU0gcmVzb3VyY2VzLCBhIGxpYm52ZGltbVxcbiAgMTI6XFx0XFx0ICBidXMgaXMgcmVnaXN0ZXJlZCB0byBhZHZlcnRpc2UgUE1FTSAocGVyc2lzdGVudCBtZW1vcnkpXFxuICAxMzpcXHRcXHQgIG5hbWVzcGFjZXMgKC9kZXYvcG1lbVgpLiBBIFBNRU0gbmFtZXNwYWNlIHJlZmVycyB0byBhXFxuICAxNDpcXHRcXHQgIG1lbW9yeSByZXNvdXJjZSB0aGF0IG1heSBzcGFuIG11bHRpcGxlIERJTU1zIGFuZCBzdXBwb3J0IERBWFxcbiAgMTU6XFx0XFx0ICAoc2VlIENPTkZJR19EQVgpLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBMSUJOVkRJTU1cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIEJMS19ERVZfUE1FTVxcbiAgMjA6XFx0XFx0dHJpc3RhdGUgXFxcIlBNRU06IFBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMjE6XFx0XFx0ZGVmYXVsdCBMSUJOVkRJTU1cXG4gIDIyOlxcdFxcdHNlbGVjdCBEQVhcXG4gIDIzOlxcdFxcdHNlbGVjdCBORF9CVFQgaWYgQlRUXFxuICAyNDpcXHRcXHRzZWxlY3QgTkRfUEZOIGlmIE5WRElNTV9QRk5cXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgTWVtb3J5IHJhbmdlcyBmb3IgUE1FTSBhcmUgZGVzY3JpYmVkIGJ5IGVpdGhlciBhbiBORklUXFxuICAyNzpcXHRcXHQgIChOVkRJTU0gRmlybXdhcmUgSW50ZXJmYWNlIFRhYmxlLCBzZWUgQ09ORklHX0FDUElfTkZJVCksIGFcXG4gIDI4OlxcdFxcdCAgbm9uLXN0YW5kYXJkIE9FTS1zcGVjaWZpYyBFODIwIG1lbW9yeSB0eXBlICh0eXBlLTEyLCBzZWVcXG4gIDI5OlxcdFxcdCAgQ09ORklHX1g4Nl9QTUVNX0xFR0FDWSksIG9yIGl0IGlzIG1hbnVhbGx5IHNwZWNpZmllZCBieSB0aGVcXG4gIDMwOlxcdFxcdCAgJ21lbW1hcD1ubltLTUddIXNzW0tNR10nIGtlcm5lbCBjb21tYW5kIGxpbmUgKHNlZVxcbiAgMzE6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnJzdCkuICBUaGlzIGRyaXZlciBjb252ZXJ0c1xcbiAgMzI6XFx0XFx0ICB0aGVzZSBwZXJzaXN0ZW50IG1lbW9yeSByYW5nZXMgaW50byBibG9jayBkZXZpY2VzIHRoYXQgYXJlXFxuICAzMzpcXHRcXHQgIGNhcGFibGUgb2YgREFYIChkaXJlY3QtYWNjZXNzKSBmaWxlIHN5c3RlbSBtYXBwaW5ncy4gIFNlZVxcbiAgMzQ6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbnZkaW1tL252ZGltbS5yc3QgZm9yIG1vcmUgZGV0YWlscy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2UgYW4gTlZESU1NXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBORF9DTEFJTVxcbiAgMzk6XFx0XFx0Ym9vbFxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjI1Ljg0MjE2MTY1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0Mjg4MzMzNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVk1lLW92ZXItRmFicmljIFBNRU0gRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgX19wbWVtX2NsZWFyX3BvaXNvbmAgYW5kIGBwbWVtX21rcGFnZV9wcmVzZW50YCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgIGZpbGUuIEknbSBhc3N1bWluZyB0aGF0IHRoZSBgcG1lbWAgZHJpdmVyIGhlcmUgaXMgaGFuZGxpbmcgcGVyc2lzdGVudCBtZW1vcnksIGxpa2VseSBOVkRJTU1zLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSBuZWVkIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGguIExldCdzIHNlZSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSAqcmVhY2hlZCouIFdoZXJlIGFyZSB0aGV5IGNhbGxlZD8gQXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgYSBkYXRhIGFjY2VzcyBwYXRoPyBJIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMsIG9mIGNvdXJzZSwgYnV0IGFsc28gZm9yIGluZGlyZWN0IHVzYWdlIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgb3IgbWFjcm9zLCB3aGljaCBtaWdodCBiZSBjb21tb24gaW4gdGhpcyBraW5kIG9mIGRyaXZlciBjb2RlLiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBhbGwgaW50ZXJmYWNlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBOVk1lLW92ZXItRmFicmljIHN0YWNrOyBhbnkgY2FsbHMgdG8gb3IgZnJvbSB0aGUgZmFicmljIGxheWVycyBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgY29uc2lzdGVuY3kgbW9kZWwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGJvdGggaGFyZHdhcmUgYW5kIHRoZSBzb2Z0d2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk0OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6MjkuMjcwOTk4MTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMTQ0NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZW1fY2xlYXJfcG9pc29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZkaW1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZkaW1tL3BtZW0uYz04OD1zdGF0aWMgdm9pZCBwbWVtX2NsZWFyX2JiKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgc2VjdG9yX3Qgc2VjdG9yLCBsb25nIGJsa3MpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTYtXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjk3OnN0YXRpYyBsb25nIF9fcG1lbV9jbGVhcl9wb2lzb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05OC1cXHRcXHRwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTA5LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxMTA6c3RhdGljIGJsa19zdGF0dXNfdCBwbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTExMS1cXHRcXHRwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW4pXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTExMi17XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjExMzpcXHRsb25nIGNsZWFyZWQgPSBfX3BtZW1fY2xlYXJfcG9pc29uKHBtZW0sIG9mZnNldCwgbGVuKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTE0LVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTE4MD1zdGF0aWMgYmxrX3N0YXR1c190IHBtZW1fZG9fd3JpdGUoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE4Ny1cXHRpZiAodW5saWtlbHkoaXNfYmFkX3BtZW0oXFx1MDAyNnBtZW0tXFx1MDAzZWJiLCBzZWN0b3IsIGxlbikpKSB7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjE4ODpcXHRcXHRibGtfc3RhdHVzX3QgcmMgPSBwbWVtX2NsZWFyX3BvaXNvbihwbWVtLCBwbWVtX29mZiwgbGVuKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTg5LVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTM0MD1zdGF0aWMgc2l6ZV90IHBtZW1fcmVjb3Zlcnlfd3JpdGUoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHBnb2ZmX3QgcGdvZmYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzY0LVxcdHBtZW1fb2ZmID0gUEZOX1BIWVMocGdvZmYpICsgcG1lbS1cXHUwMDNlZGF0YV9vZmZzZXQ7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjM2NTpcXHRjbGVhcmVkID0gX19wbWVtX2NsZWFyX3BvaXNvbihwbWVtLCBwbWVtX29mZiwgbGVuKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzY2LVxcdGlmIChjbGVhcmVkIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBjbGVhcmVkIFxcdTAwM2MgbGVuKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjI5LjM1MTE0OTAwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzM0MjY5MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgUGVyc2lzdGVudCBNZW1vcnkgV3JpdGUgUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlc2UgcGVyc2lzdGVudCBtZW1vcnkgd3JpdGUgZnVuY3Rpb25zLiBMZXQncyBzZWUsIGBwbWVtX2RvX3dyaXRlYCBzZWVtcyB0byBiZSBuZXN0bGVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgYmxvY2sgSS9PIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGhhbmdpbmcgb3V0IGluIGBwbWVtX3N1Ym1pdF9iaW9gLiBPbiB0aGUgb3RoZXIgaGFuZCwgYHBtZW1fcmVjb3Zlcnlfd3JpdGVgIGlzIGNsZWFybHkgdGllZCB0byBkaXJlY3QgYWNjZXNzIChEQVgpIG9wZXJhdGlvbnMsIGxpa2VseSBoYW5kbGluZyBtb3JlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwZXJzaXN0ZW50IG1lbW9yeSBkZXZpY2UgaXRzZWxmLlxuXG5HaXZlbiB0aGlzLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBvdXQgYHBtZW1fc3VibWl0X2Jpb2AgaW4gbW9yZSBkZXRhaWwgdG8gY2xhcmlmeSBpdHMgcm9sZS4gVGhpcyBwYXRoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGdlbmVyYWwgYmxvY2stbGV2ZWwgb3BlcmF0aW9ucywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIFBNIGxheWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODU4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6MzQuNjg1NDIxMTI4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252ZGltbS9wbWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdHN0YXRpYyB2b2lkIHBtZW1fc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuIDIwMTpcXHR7XFxuIDIwMjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMjAzOlxcdFxcdGJsa19zdGF0dXNfdCByYyA9IDA7XFxuIDIwNDpcXHRcXHRib29sIGRvX2FjY3Q7XFxuIDIwNTpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0O1xcbiAyMDY6XFx0XFx0c3RydWN0IGJpb192ZWMgYnZlYztcXG4gMjA3OlxcdFxcdHN0cnVjdCBidmVjX2l0ZXIgaXRlcjtcXG4gMjA4OlxcdFxcdHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSA9IGJpby1cXHUwMDNlYmlfYmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAyMDk6XFx0XFx0c3RydWN0IG5kX3JlZ2lvbiAqbmRfcmVnaW9uID0gdG9fcmVnaW9uKHBtZW0pO1xcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRpZiAoYmlvLVxcdTAwM2ViaV9vcGYgXFx1MDAyNiBSRVFfUFJFRkxVU0gpIHtcXG4gMjEyOlxcdFxcdFxcdHJldCA9IG52ZGltbV9mbHVzaChuZF9yZWdpb24sIE5VTEwpO1xcbiAyMTM6XFx0XFx0XFx0aWYgKHJldCkge1xcbiAyMTQ6XFx0XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9zdGF0dXMgPSBlcnJub190b19ibGtfc3RhdHVzKHJldCk7XFxuIDIxNTpcXHRcXHRcXHRcXHRiaW9fZW5kaW8oYmlvKTtcXG4gMjE2OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjE3OlxcdFxcdFxcdH1cXG4gMjE4OlxcdFxcdH1cXG4gMjE5OlxcdFxcbiAyMjA6XFx0XFx0aWYgKGJpb19oYXNfZGF0YShiaW8pKSB7XFxuIDIyMTpcXHRcXHRcXHRkb19hY2N0ID0gYmxrX3F1ZXVlX2lvX3N0YXQoYmlvLVxcdTAwM2ViaV9iZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VxdWV1ZSk7XFxuIDIyMjpcXHRcXHRcXHRpZiAoZG9fYWNjdClcXG4gMjIzOlxcdFxcdFxcdFxcdHN0YXJ0ID0gYmlvX3N0YXJ0X2lvX2FjY3QoYmlvKTtcXG4gMjI0OlxcdFxcdFxcdGJpb19mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIGJpbywgaXRlcikge1xcbiAyMjU6XFx0XFx0XFx0XFx0aWYgKG9wX2lzX3dyaXRlKGJpb19vcChiaW8pKSlcXG4gMjI2OlxcdFxcdFxcdFxcdFxcdHJjID0gcG1lbV9kb193cml0ZShwbWVtLCBidmVjLmJ2X3BhZ2UsXFxuIDIyNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBidmVjLmJ2X29mZnNldCxcXG4gMjI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGl0ZXIuYmlfc2VjdG9yLFxcbiAyMjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgYnZlYy5idl9sZW4pO1xcbiAyMzA6XFx0XFx0XFx0XFx0ZWxzZVxcbiAyMzE6XFx0XFx0XFx0XFx0XFx0cmMgPSBwbWVtX2RvX3JlYWQocG1lbSwgYnZlYy5idl9wYWdlLFxcbiAyMzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBidmVjLmJ2X29mZnNldCxcXG4gMjMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaXRlci5iaV9zZWN0b3IsXFxuIDIzNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGJ2ZWMuYnZfbGVuKTtcXG4gMjM1OlxcdFxcdFxcdFxcdGlmIChyYykge1xcbiAyMzY6XFx0XFx0XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9zdGF0dXMgPSByYztcXG4gMjM3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMzg6XFx0XFx0XFx0XFx0fVxcbiAyMzk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjozNC42ODU1NTkzMzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxODk4MjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBOVkRJTU0gUG9pc29uIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2gncyBjb3JlIGZ1bmN0aW9uIGlzIHRvIG9wdGltaXplL3NpbXBsaWZ5IHRoZSBoYW5kbGluZyBvZiBoYXJkd2FyZSBwb2lzb25pbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIE5WRElNTXMsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBhbmFseXplIHdoZXRoZXIgdGhlIHBhdGNoIHdhcnJhbnRzIGEgZnV6emluZyBlZmZvcnQuXG5cbkZpcnN0LCBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AuICBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYSBjb25kaXRpb25hbCB3cmFwcGVyIChgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb25gKSBpcyBiZWluZyByZW1vdmVkLCBhbmQgdGhlIGNhbGwgdG8gYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgaXMgbm93IGhhcHBlbmluZyBkaXJlY3RseS4gVGhlIG9yaWdpbmFsIHdyYXBwZXIgd2FzIGNoZWNraW5nIGZvciBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhbmQgdGhlbiBjYWxsaW5nIHRoZSBwb2lzb24gZnVuY3Rpb24uIE5vdyB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGRpcmVjdGx5LlxuXG5Ob3csIGRvZXMgdGhpcyBxdWFsaWZ5IGFzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nPyAgVGhlIGNyaXRlcmlhIGFyZSBwcmV0dHkgY2xlYXI6IFwiRG8gbm90IGJsaW5kbHkgdHJ1c3QgJ25vIGZ1bmN0aW9uYWwgY2hhbmdlJyBjbGFpbXNcIi4gIEV2ZW4gcmVmYWN0b3JpbmdzIGNhbiBpbnRyb2R1Y2Ugc3VidGxlIHNoaWZ0cy4gU2luY2UgdGhpcyBtb2RpZmllcyByZWFjaGFibGUsIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgKHNwZWNpZmljYWxseSwgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBwYWdlIGZsYWdzIGFuZCB0aGUgTlZESU1NIGJsb2NrIGRyaXZlciksIEknZCBoYXZlIHRvIHNheSAqKldvcnRoRnV6emluZyA9IHRydWUqKi4gVGhlIG1vZGlmaWNhdGlvbnMgYXJlbid0IGRvY3VtZW50YXRpb24sIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciBwYXRocyBzcGVjaWZpYyB0byBvdGhlciBhcmNoaXRlY3R1cmVzLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHBvdGVudGlhbCBlbnRyeXBvaW50cyBvciBjcml0aWNhbCBzeW1ib2xzLiBMb29raW5nIGluIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgZGlyZWN0IGVudHJ5cG9pbnRzIG9yIHRoYXQgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gdGFyZ2V0LiAgSSBzZWUgYSBudW1iZXIgb2Ygc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBwbWVtX21rcGFnZV9wcmVzZW50YCwgYF9fcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9kb193cml0ZWAsIGFuZCBgcG1lbV9zdWJtaXRfYmlvYCwgYW5kIGFsc28gYHBtZW1fcmVjb3Zlcnlfd3JpdGVgLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGNhcmVmdWxseSBhdCB0aGUgY29kZSBpbiBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBub3cgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgcmVhY2hhYmxlIGZyb20gb3V0c2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc1MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjM5LjYwNDU0NTE4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMjM1NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZkaW1tL3BtZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252ZGltbS9wbWVtLmMtMzMtXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjM0OnN0YXRpYyBzdHJ1Y3QgZGV2aWNlICp0b19kZXYoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtKVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zNS17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjQzOnN0YXRpYyBzdHJ1Y3QgbmRfcmVnaW9uICp0b19yZWdpb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtKVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NC17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDctXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjQ4OnN0YXRpYyBwaHlzX2FkZHJfdCBwbWVtX3RvX3BoeXMoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ5LXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01Mi1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTM6c3RhdGljIHNlY3Rvcl90IHRvX3NlY3Qoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTU0LXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01Ny1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTg6c3RhdGljIHBoeXNfYWRkcl90IHRvX29mZnNldChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHNlY3Rvcl90IHNlY3RvcilcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTkte1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTYyLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo2MzpzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LFxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02NC1cXHRcXHR1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTg3LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo4ODpzdGF0aWMgdm9pZCBwbWVtX2NsZWFyX2JiKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgc2VjdG9yX3Qgc2VjdG9yLCBsb25nIGJsa3MpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTg5LXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05Ni1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6OTc6c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTk4LVxcdFxcdHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMDktXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjExMDpzdGF0aWMgYmxrX3N0YXR1c190IHBtZW1fY2xlYXJfcG9pc29uKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSxcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTExLVxcdFxcdHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMjMtXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjEyNDpzdGF0aWMgdm9pZCB3cml0ZV9wbWVtKHZvaWQgKnBtZW1fYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEyNS1cXHRcXHR1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE0MS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTQyOnN0YXRpYyBibGtfc3RhdHVzX3QgcmVhZF9wbWVtKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb2ZmLFxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xNDMtXFx0XFx0dm9pZCAqcG1lbV9hZGRyLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTE2My1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTY0OnN0YXRpYyBibGtfc3RhdHVzX3QgcG1lbV9kb19yZWFkKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSxcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTY1LVxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZV9vZmYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTc5LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxODA6c3RhdGljIGJsa19zdGF0dXNfdCBwbWVtX2RvX3dyaXRlKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSxcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTgxLVxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZV9vZmYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTk5LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoyMDA6c3RhdGljIHZvaWQgcG1lbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjAxLXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNTYtLyogc2VlIFxcXCJzdHJvbmdcXFwiIGRlY2xhcmF0aW9uIGluIHRvb2xzL3Rlc3RpbmcvbnZkaW1tL3BtZW0tZGF4LmMgKi9cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MjU3Ol9fd2VhayBsb25nIF9fcG1lbV9kaXJlY3RfYWNjZXNzKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGdvZmZfdCBwZ29mZixcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjU4LVxcdFxcdGxvbmcgbnJfcGFnZXMsIGVudW0gZGF4X2FjY2Vzc19tb2RlIG1vZGUsIHZvaWQgKiprYWRkcixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz0zMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBwbWVtX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzA3LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzozMDg6c3RhdGljIGludCBwbWVtX2RheF96ZXJvX3BhZ2VfcmFuZ2Uoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHBnb2ZmX3QgcGdvZmYsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMwOS1cXHRcXHRcXHRcXHQgICAgc2l6ZV90IG5yX3BhZ2VzKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMxNy1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MzE4OnN0YXRpYyBsb25nIHBtZW1fZGF4X2RpcmVjdF9hY2Nlc3Moc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMxOS1cXHRcXHRwZ29mZl90IHBnb2ZmLCBsb25nIG5yX3BhZ2VzLCBlbnVtIGRheF9hY2Nlc3NfbW9kZSBtb2RlLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTMzOS0gKi9cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MzQwOnN0YXRpYyBzaXplX3QgcG1lbV9yZWNvdmVyeV93cml0ZShzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2RldiwgcGdvZmZfdCBwZ29mZixcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzQxLVxcdFxcdHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTM4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGRheF9vcGVyYXRpb25zIHBtZW1fZGF4X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zODctXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjM4ODpzdGF0aWMgc3NpemVfdCB3cml0ZV9jYWNoZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzg5LVxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMzk1LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzozOTY6c3RhdGljIHNzaXplX3Qgd3JpdGVfY2FjaGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0zOTctXFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00MDgtfVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0MDk6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlX2NhY2hlKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDEwLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0MTE6c3RhdGljIHVtb2RlX3QgZGF4X3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBuKVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00MTIte1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcG1lbV9hdHRyaWJ1dGVfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDM1LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0MzY6c3RhdGljIHZvaWQgcG1lbV9yZWxlYXNlX2Rpc2sodm9pZCAqX19wbWVtKVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00Mzcte1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ0Ny1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NDQ4OnN0YXRpYyBpbnQgcG1lbV9wYWdlbWFwX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ0OS1cXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgaW50IG1mX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBmc2RheF9wYWdlbWFwX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NjItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjQ2MzpzdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00NjQtXFx0XFx0c3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjEwLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo2MTE6c3RhdGljIGludCBuZF9wbWVtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjEyLXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy02NjItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjY2MzpzdGF0aWMgdm9pZCBuZF9wbWVtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY2NC17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjc5LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo2ODA6c3RhdGljIHZvaWQgbmRfcG1lbV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY4MS17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjg0LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo2ODU6c3RhdGljIHZvaWQgcG1lbV9yZXZhbGlkYXRlX3BvaXNvbihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY4Ni17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzMxLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3MzI6c3RhdGljIHZvaWQgcG1lbV9yZXZhbGlkYXRlX3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTczMy17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzQ3LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3NDg6c3RhdGljIHZvaWQgbmRfcG1lbV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIG52ZGltbV9ldmVudCBldmVudClcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzQ5LXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy03NjItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc2MzpNT0RVTEVfQUxJQVMoXFxcInBtZW1cXFwiKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NzY0Ok1PRFVMRV9BTElBU19ORF9ERVZJQ0UoTkRfREVWSUNFX05BTUVTUEFDRV9JTyk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjc2NTpNT0RVTEVfQUxJQVNfTkRfREVWSUNFKE5EX0RFVklDRV9OQU1FU1BBQ0VfUE1FTSk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTc2Ni1zdGF0aWMgc3RydWN0IG5kX2RldmljZV9kcml2ZXIgbmRfcG1lbV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNzc2LVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3Nzc6bW9kdWxlX25kX2RyaXZlcihuZF9wbWVtX2RyaXZlcik7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTc3OC1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6Nzc5Ok1PRFVMRV9BVVRIT1IoXFxcIlJvc3MgWndpc2xlciBcXHUwMDNjcm9zcy56d2lzbGVyQGxpbnV4LmludGVsLmNvbVxcdTAwM2VcXFwiKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NzgwOk1PRFVMRV9ERVNDUklQVElPTihcXFwiTlZESU1NIFBlcnNpc3RlbnQgTWVtb3J5IERyaXZlclxcXCIpO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo3ODE6TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTCB2MlxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjo0MC4wNTc3ODYwMzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwODE1ODEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbXBhY3Qgb2YgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIGZpZ3VyaW5nIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBrZXJuZWwuIEkgY2FuJ3QganVzdCBvcGVyYXRlIGluIGEgdmFjdXVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGNvZGUgYW5kIGhvdyB3aWRlc3ByZWFkIGl0cyB1c2UgaXMuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEknbSBnb2luZyB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGV2ZXJ5IHBsYWNlIGluIHRoZSBrZXJuZWwgdGhhdCByZWxpZXMgb24gb3IgaW50ZXJhY3RzIHdpdGggYFRlc3RDbGVhclBhZ2VIV1BvaXNvbmAuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBwcm9jZWVkIHdpdGggYW55IGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbnMuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzk2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NDIuMDY1OTQ3MTM2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk3NTU2NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRlc3RDbGVhclBhZ2VIV1BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252ZGltbS9wbWVtLmM9NjM9c3RhdGljIHZvaWQgcG1lbV9ta3BhZ2VfcHJlc2VudChzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBoeXNfYWRkcl90IG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy04Mi1cXHRcXHQgKi9cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6ODM6XFx0XFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKSlcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtODQtXFx0XFx0XFx0Y2xlYXJfbWNlX25vc3BlYyhwZm4pO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzM2PWludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4MjItXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4MjM6XFx0XFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgyNC1cXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc4NjA9Ym9vbCBwdXRfcGFnZV9iYWNrX2J1ZGR5KHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTc4NzAtXFx0XFx0X19mcmVlX29uZV9wYWdlKHBhZ2UsIHBmbiwgem9uZSwgMCwgbWlncmF0ZXR5cGUsIEZQSV9OT05FKTtcXG5tbS9wYWdlX2FsbG9jLmM6Nzg3MTpcXHRcXHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpKVxcbm1tL3BhZ2VfYWxsb2MuYy03ODcyLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjo0NC4yNjM1MTE0MTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyNzMxMTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgcHV0X3BhZ2VfYmFja19idWRkeWAgYW5kIGB1bnBvaXNvbl9tZW1vcnlgIGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGVpciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gRmlyc3QsIEknbGwgY29uZmlybSB0aGF0IGB1bnBvaXNvbl9tZW1vcnlgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBpcywgYXMgSSByZWNhbGwsIG9ubHkgZW5hYmxlZCB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHNldC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBwdXRfcGFnZV9iYWNrX2J1ZGR5YD8gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGl0cyBiZWhhdmlvciBpcyBhbHNvIGdvdmVybmVkIGJ5IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBvciBpZiBpdCBvcGVyYXRlcyBpbmRlcGVuZGVudGx5LCBvciB1bmRlciBhIGRpZmZlcmVudCBjb25kaXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBmb3IgdGhhdC4gTGV0J3MgZ2V0IHRvIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjo0Ny4xOTA4Mjc1ODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODUwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3ODUwOlxcdFxcdFxcdH1cXG43ODUxOlxcdFxcdFxcdGlmIChwYWdlX2NvdW50KHBhZ2VfaGVhZCkgXFx1MDAzZSAwKVxcbjc4NTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzg1MzpcXHRcXHR9XFxuNzg1NDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNzg1NTpcXHR9XFxuNzg1NjpcXHRcXG43ODU3OlxcdC8qXFxuNzg1ODpcXHQgKiBDYW5jZWwgdGFrZW9mZiBkb25lIGJ5IHRha2VfcGFnZV9vZmZfYnVkZHkoKS5cXG43ODU5OlxcdCAqL1xcbjc4NjA6XFx0Ym9vbCBwdXRfcGFnZV9iYWNrX2J1ZGR5KHN0cnVjdCBwYWdlICpwYWdlKVxcbjc4NjE6XFx0e1xcbjc4NjI6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XFxuNzg2MzpcXHRcXG43ODY0OlxcdFxcdGd1YXJkKHNwaW5sb2NrX2lycXNhdmUpKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrKTtcXG43ODY1OlxcdFxcdGlmIChwdXRfcGFnZV90ZXN0emVybyhwYWdlKSkge1xcbjc4NjY6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG43ODY3OlxcdFxcdFxcdGludCBtaWdyYXRldHlwZSA9IGdldF9wZm5ibG9ja19taWdyYXRldHlwZShwYWdlLCBwZm4pO1xcbjc4Njg6XFx0XFxuNzg2OTpcXHRcXHRcXHRDbGVhclBhZ2VIV1BvaXNvblRha2VuT2ZmKHBhZ2UpO1xcbjc4NzA6XFx0XFx0XFx0X19mcmVlX29uZV9wYWdlKHBhZ2UsIHBmbiwgem9uZSwgMCwgbWlncmF0ZXR5cGUsIEZQSV9OT05FKTtcXG43ODcxOlxcdFxcdFxcdGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpXFxuNzg3MjpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG43ODczOlxcdFxcdH1cXG43ODc0OlxcdFxcbjc4NzU6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjc4NzY6XFx0fVxcbjc4Nzc6XFx0I2VuZGlmXFxuNzg3ODpcXHRcXG43ODc5OlxcdGJvb2wgaGFzX21hbmFnZWRfem9uZShlbnVtIHpvbmVfdHlwZSB6b25lKVxcbjc4ODA6XFx0e1xcbjc4ODE6XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDtcXG43ODgyOlxcdFxcbjc4ODM6XFx0XFx0Zm9yX2VhY2hfb25saW5lX3BnZGF0KHBnZGF0KSB7XFxuNzg4NDpcXHRcXHRcXHRpZiAobWFuYWdlZF96b25lKFxcdTAwMjZwZ2RhdC1cXHUwMDNlbm9kZV96b25lc1t6b25lXSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjQ3LjE5MTMzOTUzNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTgxMjg1NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHB1dF9wYWdlX2JhY2tfYnVkZHlgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBwdXRfcGFnZV9iYWNrX2J1ZGR5YCBpcyBkZWZpbmVkLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGNvbmRpdGlvbmFsLiBJdCdzIG5lc3RsZWQgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBibG9jay4gU28sIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjb21waWxlZCBhbmQgaW5jbHVkZWQgaWYgdGhlIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgdHJhY2UgaXRzIGV4ZWN1dGlvbi4gSnVzdCB0byBiZSBzdXJlLCBJIHdpbGwgY2hlY2sgdGhlIGAjZW5kaWZgIG9uIGxpbmUgNzg3NyB0byBjb25maXJtIHRoZSBjb25kaXRpb25hbCBibG9jayBpcyBjbG9zZWQgcHJvcGVybHkuXG5cbk5vdywgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzLiBMZXQncyB2ZXJpZnkgbGluZSA3ODMwIGluIGBtbS9wYWdlX2FsbG9jLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE2MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NDkuMTcyNjI5Mzc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Njk3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4MjA6XFx0XFx0XFx0YWRkX3RvX2ZyZWVfbGlzdChjdXJyZW50X2J1ZGR5LCB6b25lLCBoaWdoLCBtaWdyYXRldHlwZSwgZmFsc2UpO1xcbjc4MjE6XFx0XFx0XFx0c2V0X2J1ZGR5X29yZGVyKGN1cnJlbnRfYnVkZHksIGhpZ2gpO1xcbjc4MjI6XFx0XFx0fVxcbjc4MjM6XFx0fVxcbjc4MjQ6XFx0XFxuNzgyNTpcXHQvKlxcbjc4MjY6XFx0ICogVGFrZSBhIHBhZ2UgdGhhdCB3aWxsIGJlIG1hcmtlZCBhcyBwb2lzb25lZCBvZmYgdGhlIGJ1ZGR5IGFsbG9jYXRvci5cXG43ODI3OlxcdCAqL1xcbjc4Mjg6XFx0Ym9vbCB0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHN0cnVjdCBwYWdlICpwYWdlKVxcbjc4Mjk6XFx0e1xcbjc4MzA6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XFxuNzgzMTpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbjc4MzI6XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbjc4MzM6XFx0XFxuNzgzNDpcXHRcXHRndWFyZChzcGlubG9ja19pcnFzYXZlKShcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuNzgzNTpcXHRcXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXFx1MDAzYyBOUl9QQUdFX09SREVSUzsgb3JkZXIrKykge1xcbjc4MzY6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2VfaGVhZCA9IHBhZ2UgLSAocGZuIFxcdTAwMjYgKCgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSAtIDEpKTtcXG43ODM3OlxcdFxcdFxcdGludCBwYWdlX29yZGVyID0gYnVkZHlfb3JkZXIocGFnZV9oZWFkKTtcXG43ODM4OlxcdFxcbjc4Mzk6XFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlX2hlYWQpIFxcdTAwMjZcXHUwMDI2IHBhZ2Vfb3JkZXIgXFx1MDAzZT0gb3JkZXIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NDkuMTc1MzAyMzY1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzc1NTY3MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYmVmb3JlIGxpbmUgNzgyMC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBleGlzdCAqYmVmb3JlKiB0aGF0IGxpbmU/IFRoaXMgaXMgYSBwcmV0dHkgY29tbW9uIHBhdHRlcm4sIGNoZWNraW5nIGZvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGJlZm9yZSBpbmNsdWRpbmcgb3IgY29uZGl0aW9uYWxseSBjb21waWxpbmcgYSBibG9jayBvZiBjb2RlLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGZpbGUsIG9yIG1heWJlIHVzZSBzb21lIGNsZXZlciBncmVwcGluZywgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmUgaXMgcHJlc2VudCBhbmQgd2hlcmUgZXhhY3RseSBpdCBpcyBpbiByZWxhdGlvbiB0byB0aGF0IGxpbmUgbnVtYmVyLiBJdOKAmXMgaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc2MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NTEuNDEyODYyNTUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzgwMDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGFnZSAqdGFyZ2V0LCBpbnQgbG93LCBpbnQgaGlnaCxcXG43ODAxOlxcdFxcdFxcdFxcdFxcdCAgIGludCBtaWdyYXRldHlwZSlcXG43ODAyOlxcdHtcXG43ODAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2MgaGlnaDtcXG43ODA0OlxcdFxcdHN0cnVjdCBwYWdlICpjdXJyZW50X2J1ZGR5O1xcbjc4MDU6XFx0XFxuNzgwNjpcXHRcXHR3aGlsZSAoaGlnaCBcXHUwMDNlIGxvdykge1xcbjc4MDc6XFx0XFx0XFx0aGlnaC0tO1xcbjc4MDg6XFx0XFx0XFx0c2l6ZSBcXHUwMDNlXFx1MDAzZT0gMTtcXG43ODA5OlxcdFxcbjc4MTA6XFx0XFx0XFx0aWYgKHRhcmdldCBcXHUwMDNlPSBcXHUwMDI2cGFnZVtzaXplXSkge1xcbjc4MTE6XFx0XFx0XFx0XFx0Y3VycmVudF9idWRkeSA9IHBhZ2U7XFxuNzgxMjpcXHRcXHRcXHRcXHRwYWdlID0gcGFnZSArIHNpemU7XFxuNzgxMzpcXHRcXHRcXHR9IGVsc2Uge1xcbjc4MTQ6XFx0XFx0XFx0XFx0Y3VycmVudF9idWRkeSA9IHBhZ2UgKyBzaXplO1xcbjc4MTU6XFx0XFx0XFx0fVxcbjc4MTY6XFx0XFxuNzgxNzpcXHRcXHRcXHRpZiAoc2V0X3BhZ2VfZ3VhcmQoem9uZSwgY3VycmVudF9idWRkeSwgaGlnaCkpXFxuNzgxODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43ODE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMjo1MS40MTM0OTI2ODNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4MjY4NDE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkxvY2F0aW5nIENPTkZJR19NRU1PUllfRkFJTFVSRSBpbiBtbS9wYWdlX2FsbG9jLmMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHNlY3Rpb24gd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHdoZXJlIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBkZWZpbmVkIG9yIHV0aWxpemVkLiBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGhhbmRsaW5nIGZvciBtZW1vcnkgZmFpbHVyZSBzY2VuYXJpb3MsIGxpa2VseSByZWxhdGVkIHRvIGVycm9yIGluamVjdGlvbiwgZmF1bHQgaGFuZGxpbmcsIG9yIG1heWJlIGV2ZW4gaGFyZHdhcmUgcmVsaWFiaWxpdHkgZmVhdHVyZXMuIE15IGJyYWluJ3MgYWxyZWFkeSB0aGlua2luZyBhYm91dCBob3cgdGhpcyBjb3VsZCBpbnRlcmFjdCB3aXRoIE5VTUEgbm9kZXMsIHpvbmUgbWFuYWdlbWVudCwgYW5kIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gc3RyYXRlZ3kuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc2VhcmNoIGl0IGFuZCByZXZpZXcgdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgZmFpbHVyZSBtb2RlcyBhcmUgYmVpbmcgYWRkcmVzc2VkIGFuZCBob3cgdGhlIGNvZGUgcmVzcG9uZHMgdG8gdGhlbSwgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb2RlYmFzZSB3aXRoIHJlZ2FyZCB0byBtZW1vcnkgZmFpbHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjUzLjU5NjE4MDU2NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzNTM5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTU9SWV9GQUlMVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9Nzc4ND1FWFBPUlRfU1lNQk9MKGlzX2ZyZWVfYnVkZHlfcGFnZSk7XFxubW0vcGFnZV9hbGxvYy5jLTc3ODUtXFxubW0vcGFnZV9hbGxvYy5jOjc3ODY6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL3BhZ2VfYWxsb2MuYy03Nzg3LXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfdG9fZnJlZV9saXN0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgem9uZSAqem9uZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NTMuNjY0NTQwMzYxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMjQyNjY0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5WRElNTS9QTUVNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHBlcmZlY3QuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGF0IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgYXJlIHdlIHdvcmtpbmcgd2l0aCBoZXJlPyBMZXQncyBicmVhayBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJJ3ZlIGlkZW50aWZpZWQgc28gZmFyLiBGaXJzdCwgd2UndmUgZ290IGBCTEtfREVWX1BNRU1gLCB3aGljaCByZXNpZGVzIGluIGBkcml2ZXJzL252ZGltbS9LY29uZmlnYC4gVGhpcyBpcyBhIHByaW1hcnkgZHJpdmVyIHRvIGNvbnNpZGVyLiBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYExJQk5WRElNTWAgaXMgaXRzIHBhcmVudCBjb25maWd1cmF0aW9uLCBzbyB0aGF0J3MgaW5oZXJlbnRseSBpbXBvcnRhbnQsIHRvby4gVGhlbiwgd2UgaGF2ZSBgTUVNT1JZX0ZBSUxVUkVgLiBJdCBhcHBlYXJzIHRoaXMgaXMga2V5LCBhcyBpdCdzIHdoZXJlIHRoZSBgSFdQb2lzb25gIGZsYWcgaXMgZGVmaW5lZCBhbmQgbWFuYWdlZC4gSWYgdGhhdCBpc24ndCBwcmVzZW50LCB0aGUgY29kZSB1c2VzIGBURVNUU0NGTEFHX0ZBTFNFYCwgd2hpY2ggaXMgb2J2aW91c2x5IHNvbWV0aGluZyB0byBjb25zaWRlci5cblxuSSdkIGxpa2UgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBmb3IgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgZm9yIG52ZGltbSBvciBwbWVtLiBBIGRlZXBlciBkaXZlIGludG8gYGRyaXZlcnMvbnZkaW1tL0tjb25maWdgIGlzIGVzc2VudGlhbCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGFsbCB0aGUgcHV6emxlIHBpZWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzI6NTYuNjg4ODEwNjM3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTY5ODM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZkaW1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZkaW1tL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjI6bWVudWNvbmZpZyBMSUJOVkRJTU1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5WRElNTSAoTm9uLVZvbGF0aWxlIE1lbW9yeSBEZXZpY2UpIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE3PWlmIExJQk5WRElNTVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTgtXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxOTpjb25maWcgQkxLX0RFVl9QTUVNXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiUE1FTTogUGVyc2lzdGVudCBtZW1vcnkgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTM3LVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6Mzg6Y29uZmlnIE5EX0NMQUlNXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0zOS1cXHRib29sXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjQxOmNvbmZpZyBORF9CVFRcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTQyLVxcdHRyaXN0YXRlXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy00My1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjQ0OmNvbmZpZyBCVFRcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTQ1LVxcdGJvb2wgXFxcIkJUVDogQmxvY2sgVHJhbnNsYXRpb24gVGFibGUgKGF0b21pYyBzZWN0b3IgdXBkYXRlcylcXFwiXFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTU4LVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6NTk6Y29uZmlnIE5EX1BGTlxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjAtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTYxLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6NjI6Y29uZmlnIE5WRElNTV9QRk5cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTYzLVxcdGJvb2wgXFxcIlBGTjogTWFwIHBlcnNpc3RlbnQgKGRldmljZSkgbWVtb3J5XFxcIlxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy03Ni1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjc3OmNvbmZpZyBOVkRJTU1fREFYXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJOVkRJTU0gREFYOiBSYXcgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5XFxcIlxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy04OS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjkwOmNvbmZpZyBPRl9QTUVNXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy05MS1cXHR0cmlzdGF0ZSBcXFwiRGV2aWNlLXRyZWUgc3VwcG9ydCBmb3IgcGVyc2lzdGVudCBtZW1vcnkgcmVnaW9uc1xcXCJcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctOTktXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxMDA6Y29uZmlnIFJBTURBWFxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IHBlcnNpc3RlbnQgbWVtb3J5IGludGVyZmFjZXMgb24gUkFNIGNhcnZlb3V0c1xcXCJcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTE4LVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6MTE5OmNvbmZpZyBOVkRJTU1fS0VZU1xcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTIwLVxcdGRlZl9ib29sIHlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTIzLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc6MTI0OmNvbmZpZyBOVkRJTU1fS01TQU5cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTEyNS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE0Mi1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE0Mzpjb25maWcgTlZESU1NX1RFU1RfQlVJTERcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE0NC1cXHR0cmlzdGF0ZSBcXFwiQnVpbGQgdGhlIHVuaXQgdGVzdCBjb3JlXFxcIlxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTQtXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxNTU6Y29uZmlnIE5WRElNTV9TRUNVUklUWV9URVNUXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTYtXFx0Ym9vbCBcXFwiRW5hYmxlIE5WRElNTSBzZWN1cml0eSB1bml0IHRlc3RzXFxcIlxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnVzLmM9OTkwPXN0YXRpYyBpbnQgbmRfbnNfZm9yZ2V0X3BvaXNvbl9jaGVjayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idXMuYy05OTQtXFxuZHJpdmVycy9udmRpbW0vYnVzLmM6OTk1Oi8qIHNldF9jb25maWcgcmVxdWlyZXMgYW4gaWRsZSBpbnRlcmxlYXZlIHNldCAqL1xcbmRyaXZlcnMvbnZkaW1tL2J1cy5jLTk5Ni1zdGF0aWMgaW50IG5kX2NtZF9jbGVhcl90b19zZW5kKHN0cnVjdCBudmRpbW1fYnVzICpudmRpbW1fYnVzLFxcbi0tXFxuZHJpdmVycy9udmRpbW0vZGltbS5jPTE2PXN0YXRpYyBpbnQgbnZkaW1tX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2RpbW0uYy05NS1cXG5kcml2ZXJzL252ZGltbS9kaW1tLmM6OTY6XFx0ZGV2X2RiZyhkZXYsIFxcXCJjb25maWcgZGF0YSBzaXplOiAlZFxcXFxuXFxcIiwgbmRkLVxcdTAwM2Vuc2FyZWEuY29uZmlnX3NpemUpO1xcbmRyaXZlcnMvbnZkaW1tL2RpbW0uYy05Ny1cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmM9NDQ1PWludCBuZF9sYWJlbF9kYXRhX2luaXQoc3RydWN0IG52ZGltbV9kcnZkYXRhICpuZGQpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jLTQ1Ny1cXHQgICAgbmRkLVxcdTAwM2Vuc2FyZWEuY29uZmlnX3NpemUgPT0gMCkge1xcbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmM6NDU4OlxcdFxcdGRldl9kYmcobmRkLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gaW5pdCBjb25maWcgZGF0YSBhcmVhOiAoJXU6JXUpXFxcXG5cXFwiLFxcbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmMtNDU5LVxcdFxcdFxcdG5kZC1cXHUwMDNlbnNhcmVhLm1heF94ZmVyLCBuZGQtXFx1MDAzZW5zYXJlYS5jb25maWdfc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jLTQ3Ny1cXG5kcml2ZXJzL252ZGltbS9sYWJlbC5jOjQ3ODpcXHQvKiBBbGxvY2F0ZSBjb25maWcgZGF0YSAqL1xcbmRyaXZlcnMvbnZkaW1tL2xhYmVsLmMtNDc5LVxcdGNvbmZpZ19zaXplID0gbmRkLVxcdTAwM2Vuc2FyZWEuY29uZmlnX3NpemU7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9uZC5oPTY2Mj12b2lkIGRldm1fbmFtZXNwYWNlX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vbmQuaC02NjQtI2lmIElTX0VOQUJMRUQoQ09ORklHX05EX0NMQUlNKVxcbmRyaXZlcnMvbnZkaW1tL25kLmg6NjY1Oi8qIG1heCBzdHJ1Y3QgcGFnZSBzaXplIGluZGVwZW5kZW50IG9mIGtlcm5lbCBjb25maWcgKi9cXG5kcml2ZXJzL252ZGltbS9uZC5oLTY2Ni0jZGVmaW5lIE1BWF9TVFJVQ1RfUEFHRV9TSVpFIDY0XFxuLS1cXG5kcml2ZXJzL252ZGltbS92aXJ0aW9fcG1lbS5jPTYyPXN0YXRpYyBpbnQgdmlydGlvX3BtZW1fcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL252ZGltbS92aXJ0aW9fcG1lbS5jLTcxLVxcdGlmICghdmRldi1cXHUwMDNlY29uZmlnLVxcdTAwM2VnZXQpIHtcXG5kcml2ZXJzL252ZGltbS92aXJ0aW9fcG1lbS5jOjcyOlxcdFxcdGRldl9lcnIoXFx1MDAyNnZkZXYtXFx1MDAzZWRldiwgXFxcIiVzIGZhaWx1cmU6IGNvbmZpZyBhY2Nlc3MgZGlzYWJsZWRcXFxcblxcXCIsXFxuZHJpdmVycy9udmRpbW0vdmlydGlvX3BtZW0uYy03My1cXHRcXHRcXHRfX2Z1bmNfXyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMyOjU2Ljc1ODUxMzQxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjUxNjYxMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGBwbWVtLmNgIEZvY3VzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBlbnN1cmluZyB0aGUgcmlnaHQgZnVuY3Rpb25zIHdpdGhpbiBgcG1lbS5jYCBhcmUgdGFyZ2V0ZWQgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2UgaXMgZGlyZWN0bHkgaW1wYWN0aW5nIGBwbWVtX21rcGFnZV9wcmVzZW50YCwgYW5kIHRoYXQgZnVuY3Rpb24ncyBsaW5rZWQgdG8gYF9fcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9jbGVhcl9wb2lzb25gLCBgcG1lbV9kb193cml0ZWAsIGBwbWVtX3JlY292ZXJ5X3dyaXRlYCwgYW5kIGBwbWVtX3N1Ym1pdF9iaW9gLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhlc2UgYXJlIGFsbCBwcmV0dHkgc3BlY2lmaWMgdG8gdGhlIHBtZW0gZHJpdmVyIGl0c2VsZiwgbm90IHNvbWUgbGlmZWN5Y2xlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnbG9iYWxseSB1c2VkLiBUaGF0J3MgZ29vZCBmcm9tIGEgZm9jdXMgc3RhbmRwb2ludC4gSXQgaW5kaWNhdGVzIGEgZGVmaW5lZCBzY29wZS5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJIG5lZWQgdG8ganVzdGlmeSBmdXp6aW5nIHRoaXMuIFRoZSBwYXRjaCBpcyBzaW1wbGlmeWluZyBgcG1lbV9ta3BhZ2VfcHJlc2VudGAgYnkgdXNpbmcgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbigpYCBkaXJlY3RseSBhbmQgYWRkaW5nIGEgYFRFU1RTQ0ZMQUdfRkFMU0VgIG1hY3JvLiBUaGlzIG1vZGlmaWVzIGNvcmUgcGFnZSBmbGFnIGRlZmluaXRpb25zLCBhbmQgc2luY2UgcG1lbSBibG9jayBkcml2ZXIgZXJyb3IvcG9pc29uIHJlY292ZXJ5IHBhdGhzIGFyZSBwb3RlbnRpYWxseSB0b3VjaGVkLCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUuIFRoZSBgRm9jdXNTeW1ib2xzYCBsb29rIHJpZ2h0LCBsaXN0aW5nIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjcnVjaWFsOiBCTEtfREVWX1BNRU0sIExJQk5WRElNTSwgYW5kIE1FTU9SWV9GQUlMVVJFIGFyZSBhbGwgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHBtZW0gd29ya3MuIFRoZSBgTUVNT1JZX0ZBSUxVUkVgIG9uZSBpcyBlc3BlY2lhbGx5IHJlbGV2YW50IHRvIHRoaXMgcGF0Y2gsIHNpbmNlIGl0IGlzIGRpc2FibGluZyBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSXQgc2hvdWxkIGJlIHdvcnRoIGZ1enppbmcgYXMgdGhlIGNvZGUgaXMgbW9kaWZ5aW5nIGVycm9yIHJlY292ZXJ5IHBhdGhzLiBTbywgeWVzLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIHRydWUuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDc2LCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMzowMS4wMTAxNzc0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODkzODkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9QTUVNXCIsXG4gICAgXCJMSUJOVkRJTU1cIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicG1lbV9ta3BhZ2VfcHJlc2VudFwiLFxuICAgIFwiX19wbWVtX2NsZWFyX3BvaXNvblwiLFxuICAgIFwicG1lbV9jbGVhcl9wb2lzb25cIixcbiAgICBcInBtZW1fZG9fd3JpdGVcIixcbiAgICBcInBtZW1fcmVjb3Zlcnlfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKSB0byBsaW51eC9wYWdlLWZsYWdzLmggZm9yICFDT05GSUdfTUVNT1JZX0ZBSUxVUkUgYnVpbGRzIGFuZCB1cGRhdGVzIHBtZW1fbWtwYWdlX3ByZXNlbnQoKSBpbiBkcml2ZXJzL252ZGltbS9wbWVtLmMgdG8gZGlyZWN0bHkgY2FsbCBUZXN0Q2xlYXJQYWdlSFdQb2lzb24oKSBpbnN0ZWFkIG9mIGFuIG52ZGltbS1zcGVjaWZpYyB3cmFwcGVyLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIHBhZ2UtZmxhZyBtYWNyb3MgYW5kIHRoZSBwZXJzaXN0ZW50IG1lbW9yeSBibG9jay9EQVggZHJpdmVyIHBvaXNvbi1jbGVhcmluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1BNRU1cIixcbiAgICBcIkxJQk5WRElNTVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbWVtX21rcGFnZV9wcmVzZW50XCIsXG4gICAgXCJfX3BtZW1fY2xlYXJfcG9pc29uXCIsXG4gICAgXCJwbWVtX2NsZWFyX3BvaXNvblwiLFxuICAgIFwicG1lbV9kb193cml0ZVwiLFxuICAgIFwicG1lbV9yZWNvdmVyeV93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pIHRvIGxpbnV4L3BhZ2UtZmxhZ3MuaCBmb3IgIUNPTkZJR19NRU1PUllfRkFJTFVSRSBidWlsZHMgYW5kIHVwZGF0ZXMgcG1lbV9ta3BhZ2VfcHJlc2VudCgpIGluIGRyaXZlcnMvbnZkaW1tL3BtZW0uYyB0byBkaXJlY3RseSBjYWxsIFRlc3RDbGVhclBhZ2VIV1BvaXNvbigpIGluc3RlYWQgb2YgYW4gbnZkaW1tLXNwZWNpZmljIHdyYXBwZXIuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgcGFnZS1mbGFnIG1hY3JvcyBhbmQgdGhlIHBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrL0RBWCBkcml2ZXIgcG9pc29uLWNsZWFyaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMzowMS4xNDkxMjQ1MjRaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzY3MDgxMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzM6MDEuMTQ5NTc5ODQ0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI3NjY2MjA5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcgLyBjbGVhbnVwIHRoYXQgYWRkcyBzdGFuZGFyZCBURVNUU0NGTEFHX0ZBTFNFIGRlZmluaXRpb25zIGZvciBIV1BvaXNvbiBpbiBcXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXFx1MDAzZSB3aGVuIENPTkZJR19NRU1PUllfRkFJTFVSRSBpcyBub3Qgc2V0LCBhbmQgcmVtb3ZlcyB0aGUgZHJpdmVyLXNwZWNpZmljIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uIHdyYXBwZXIgaW4gZmF2b3Igb2YgZGlyZWN0bHkgY2FsbGluZyBUZXN0Q2xlYXJQYWdlSFdQb2lzb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MzQ0MmYwMzIzMzc1MjljMzU4YzJmNzRhZDA0YzM4MzQ0ODk4ZjE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNTozMTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uYyBiL2RyaXZlcnMvbnZkaW1tL3BtZW0uY1xuaW5kZXggMzBhNTFjMzY1Y2U4Yi4uNWZiODY1OTVlOGJkNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZkaW1tL3BtZW0uY1xuKysrIGIvZHJpdmVycy9udmRpbW0vcG1lbS5jXG5AQCAtODAsNyArODAsNyBAQCBzdGF0aWMgdm9pZCBwbWVtX21rcGFnZV9wcmVzZW50KHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGh5c19hZGRyX3Qgb2Zmc2V0LFxuIFx0XHQgKiBoZXJlIHNpbmNlIHdlJ3JlIGluIHRoZSBkcml2ZXIgSS9PIHBhdGggYW5kXG4gXHRcdCAqIG91dHN0YW5kaW5nIEkvTyByZXF1ZXN0cyBwaW4gdGhlIGRldl9wYWdlbWFwLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHBhZ2UpKVxuK1x0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpKVxuIFx0XHRcdGNsZWFyX21jZV9ub3NwZWMocGZuKTtcbiBcdH1cbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udmRpbW0vcG1lbS5oIGIvZHJpdmVycy9udmRpbW0vcG1lbS5oXG5pbmRleCBhNDg1MDlmOTAxOTY4Li43Njg3MDUwNWRkNzk3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udmRpbW0vcG1lbS5oXG4rKysgYi9kcml2ZXJzL252ZGltbS9wbWVtLmhcbkBAIC0xLDcgKzEsNiBAQFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gI2lmbmRlZiBfX05WRElNTV9QTUVNX0hfX1xuICNkZWZpbmUgX19OVkRJTU1fUE1FTV9IX19cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWRibG9ja3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5AQCAtMzEsMTUgKzMwLDQgQEAgbG9uZyBfX3BtZW1fZGlyZWN0X2FjY2VzcyhzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sIHBnb2ZmX3QgcGdvZmYsXG4gXHRcdGxvbmcgbnJfcGFnZXMsIGVudW0gZGF4X2FjY2Vzc19tb2RlIG1vZGUsIHZvaWQgKiprYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyAqcGZuKTtcbiBcbi0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4tc3RhdGljIGlubGluZSBib29sIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuLXtcbi1cdHJldHVybiBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSk7XG4tfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSBib29sIHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tI2VuZGlmXG4gI2VuZGlmIC8qIF9fTlZESU1NX1BNRU1fSF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uYTIzMTVhYjFkZDNhNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTY1Niw2ICs2NTYsNyBAQCBURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxuICNkZWZpbmUgX19QR19IV1BPSVNPTiAoMVVMIFx1MDAzY1x1MDAzYyBQR19od3BvaXNvbilcbiAjZWxzZVxuIFBBR0VGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbitURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbiAjZGVmaW5lIF9fUEdfSFdQT0lTT04gMFxuICNlbmRpZlxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzM6MDEuMTQ5NTgwNjg0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2ODM3NTAwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQTUVNIFBvaXNvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjaGFuZ2VzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIE5WRElNTSBkcml2ZXIgYW5kIG1lbW9yeSBlcnJvciBoYW5kbGluZy5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyBpbiBgZHJpdmVycy9udmRpbW0vcG1lbS5jYC4gVGhlIGB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbihwYWdlKWAgZnVuY3Rpb24gaXMgYmVpbmcgcmVwbGFjZWQgd2l0aCBgVGVzdENsZWFyUGFnZUhXUG9pc29uKHBhZ2UpYC4gSSBpbW1lZGlhdGVseSBzdXNwZWN0IHRoaXMgaXMgcmVsYXRlZCB0byBoYXJkd2FyZSBwb2lzb24gaGFuZGxpbmcsIHdoaWNoIGlzIHN0YW5kYXJkIHdpdGggTlZESU1NcywgcGFydGljdWxhcmx5IGluIG1vcmUgcmVjZW50IGtlcm5lbHMuXG5cblRoZW4sIGxvb2tpbmcgYXQgYGRyaXZlcnMvbnZkaW1tL3BtZW0uaGAsIHRoZSBwYXRjaCByZW1vdmVzIHRoZSBgI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXHUwMDNlYCBhbmQgdGhlIGRlZmluaXRpb24gb2YgdGhlIHJlcGxhY2VkIGhlbHBlciwgYHRlc3RfYW5kX2NsZWFyX3BtZW1fcG9pc29uYC4gSSdkIGV4cGVjdCB0aGUgaGVhZGVyIGluY2x1c2lvbiB0byBiZSByZW1vdmVkIGJlY2F1c2UgdGhlIGhlbHBlciBpcyByZW1vdmVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgbG9naWMgaGFzIGJlZW4gcmVmYWN0b3JlZCBvciB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9uIGlzIGRlZmluZWQuXG5cbkZpbmFsbHksIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGNoYW5nZSBjYXRjaGVzIG15IGV5ZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYWRkaXRpb24gb2YgYFRFU1RTQ0ZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKWAgaW4gdGhlIGAjZWxzZWAgYnJhbmNoICh3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzbid0IGRlZmluZWQpIGlzIGtleS4gQmFzaWNhbGx5LCB3aGVuIG1lbW9yeSBmYWlsdXJlIGlzbid0IGVuYWJsZWQsIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb25gIGlzIGRlZmluZWQgdG8gc2ltcGx5IHJldHVybiBmYWxzZSAob3IgemVybywgZGVwZW5kaW5nIG9uIGhvdyBgVEVTVFNDRkxBR19GQUxTRWAgaXMgZGVmaW5lZCkuIFRoaXMgaW1wbGllcyBhIGNvbmRpdGlvbmFsIGJlaGF2aW9yLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSB3aHkuIE15IGd1ZXNzIGlzIHRoYXQgdGhlIHBhdGNoIG9wdGltaXplcyB0aGUgSFdQb2lzb24gY2xlYXJpbmcsIGJ1dCBvbmx5IHdoZW4gdGhlIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIG9wdGlvbiBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuIFdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXNuJ3QgZW5hYmxlZCwgdGhlIHByZXZpb3VzIGNvZGUgcGF0aCBpcyByZXRhaW5lZCwgYnV0IHRoZSBjb2RlIG5vdyBoYXMgYSBuZXcgZGVmaW5pdGlvbiBvZiBgVGVzdENsZWFyUGFnZUhXUG9pc29uYCB3aGljaCByZXR1cm5zIDAuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBib3RoIGBwbWVtLmNgIGFuZCBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIG9mIHRoaXMgbW9kaWZpY2F0aW9uLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIHdpdGhpbiB0aGUgTlZESU1NIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMzOjA0LjgzMzMzNTEwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDIwNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZW1fbWtwYWdlX3ByZXNlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udmRpbW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udmRpbW0vcG1lbS5jPTU4PXN0YXRpYyBwaHlzX2FkZHJfdCB0b19vZmZzZXQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNjItXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjYzOnN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTY0LVxcdFxcdHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9OTc9c3RhdGljIGxvbmcgX19wbWVtX2NsZWFyX3BvaXNvbihzdHJ1Y3QgcG1lbV9kZXZpY2UgKnBtZW0sXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMTAzLVxcdGlmIChjbGVhcmVkIFxcdTAwM2UgMCkge1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxMDQ6XFx0XFx0cG1lbV9ta3BhZ2VfcHJlc2VudChwbWVtLCBvZmZzZXQsIGNsZWFyZWQpO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMDUtXFx0XFx0YXJjaF9pbnZhbGlkYXRlX3BtZW0ocG1lbS1cXHUwMDNldmlydF9hZGRyICsgb2Zmc2V0LCBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMzowNC45NDQzNjA1NjlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3ODU1NzExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUGVyc2lzdGVudCBNZW1vcnkgRHJpdmVyKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlJ3JlIGhhbmRsaW5nIE5WRElNTSBwZXJzaXN0ZW50IG1lbW9yeSB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYHJlYWQtZmlsZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBsaW5lcyA2MyB0aHJvdWdoIDk1IG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSdtIGZvY3VzaW5nIHRoZXJlIGJlY2F1c2Ugc29tZXRoaW5nIGluIHRoYXQgYXJlYSBmZWx0IGxpa2UgaXQgbmVlZGVkIHJldmlzaXRpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhhdCBjb2RlIGJsb2NrLCBjaGVja2luZyBmb3IuLi4gd2VsbCwgSSdsbCBrbm93IGl0IHdoZW4gSSBzZWUgaXQuIEl0IGNvdWxkIGJlIGEgc3BlY2lmaWMgbWVtb3J5IGFjY2VzcyBwYXR0ZXJuLCBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIG9yIGV2ZW4ganVzdCBob3cgd2UncmUgaGFuZGxpbmcgZXJyb3IgY29uZGl0aW9ucy4gSSdtIHByZXBhcmVkIHRvIGZvbGxvdyB0aGUgZmxvdyBmcm9tIHRoZXJlLCBidXQgdGhhdCBzZWN0aW9uIGZlZWxzIGxpa2UgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMzowNi45MjI5MjAzOThaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbnZkaW1tL3BtZW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRyZXR1cm4gKHNlY3RvciBcXHUwMDNjXFx1MDAzYyBTRUNUT1JfU0hJRlQpICsgcG1lbS1cXHUwMDNlZGF0YV9vZmZzZXQ7XFxuICA2MTpcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0YXRpYyB2b2lkIHBtZW1fbWtwYWdlX3ByZXNlbnQoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBwaHlzX2FkZHJfdCBvZmZzZXQsXFxuICA2NDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGVuKVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0cGh5c19hZGRyX3QgcGh5cyA9IHBtZW1fdG9fcGh5cyhwbWVtLCBvZmZzZXQpO1xcbiAgNjc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm5fc3RhcnQsIHBmbl9lbmQsIHBmbjtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0Lyogb25seSBwbWVtIGluIHRoZSBsaW5lYXIgbWFwIHN1cHBvcnRzIEhXUG9pc29uICovXFxuICA3MDpcXHRcXHRpZiAoaXNfdm1hbGxvY19hZGRyKHBtZW0tXFx1MDAzZXZpcnRfYWRkcikpXFxuICA3MTpcXHRcXHRcXHRyZXR1cm47XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdHBmbl9zdGFydCA9IFBIWVNfUEZOKHBoeXMpO1xcbiAgNzQ6XFx0XFx0cGZuX2VuZCA9IHBmbl9zdGFydCArIFBIWVNfUEZOKGxlbik7XFxuICA3NTpcXHRcXHRmb3IgKHBmbiA9IHBmbl9zdGFydDsgcGZuIFxcdTAwM2MgcGZuX2VuZDsgcGZuKyspIHtcXG4gIDc2OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0XFx0LypcXG4gIDc5OlxcdFxcdFxcdCAqIE5vdGUsIG5vIG5lZWQgdG8gaG9sZCBhIGdldF9kZXZfcGFnZW1hcCgpIHJlZmVyZW5jZVxcbiAgODA6XFx0XFx0XFx0ICogaGVyZSBzaW5jZSB3ZSdyZSBpbiB0aGUgZHJpdmVyIEkvTyBwYXRoIGFuZFxcbiAgODE6XFx0XFx0XFx0ICogb3V0c3RhbmRpbmcgSS9PIHJlcXVlc3RzIHBpbiB0aGUgZGV2X3BhZ2VtYXAuXFxuICA4MjpcXHRcXHRcXHQgKi9cXG4gIDgzOlxcdFxcdFxcdGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSkpXFxuICA4NDpcXHRcXHRcXHRcXHRjbGVhcl9tY2Vfbm9zcGVjKHBmbik7XFxuICA4NTpcXHRcXHR9XFxuICA4NjpcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdHN0YXRpYyB2b2lkIHBtZW1fY2xlYXJfYmIoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IsIGxvbmcgYmxrcylcXG4gIDg5OlxcdHtcXG4gIDkwOlxcdFxcdGlmIChibGtzID09IDApXFxuICA5MTpcXHRcXHRcXHRyZXR1cm47XFxuICA5MjpcXHRcXHRiYWRibG9ja3NfY2xlYXIoXFx1MDAyNnBtZW0tXFx1MDAzZWJiLCBzZWN0b3IsIGJsa3MpO1xcbiAgOTM6XFx0XFx0aWYgKHBtZW0tXFx1MDAzZWJiX3N0YXRlKVxcbiAgOTQ6XFx0XFx0XFx0c3lzZnNfbm90aWZ5X2RpcmVudChwbWVtLVxcdTAwM2ViYl9zdGF0ZSk7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBsb25nIF9fcG1lbV9jbGVhcl9wb2lzb24oc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLFxcbiAgOTg6XFx0XFx0XFx0cGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuKVxcbiAgOTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNTozMzowNi45MjMwMzAxNzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyNDYwMDU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byBQYWdlIEZsYWdzKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGVzZSBwYWdlIGZsYWdzLCBzbyBsZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCBhcm91bmQgbGluZSA2NTYuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSByZWxldmFudCBtYWNybyBvciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiB0aGF0J3MgY2F1c2luZyB0aGUgdHJvdWJsZS4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBwYWdlIGFsbG9jYXRpb24gb3IgbWF5YmUgc29tZSBzb3J0IG9mIG1pZ3JhdGlvbiBvciBpc29sYXRpb24gZmxhZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGtlcm5lbCBkZXZzIGhhdmUgY29va2VkIHVwLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBncm91bmQgdHJ1dGggSSBuZWVkIHRvIGRlYnVnIHRoaXMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA1OjMzOjA4Ljg0NzYzMjc4OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjQ1OlxcdFxcdEZPTElPX1RFU1RfU0VUX0ZMQUcobWxvY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA2NDY6XFx0I2Vsc2VcXG4gNjQ3OlxcdEZPTElPX0ZMQUdfRkFMU0UobWxvY2tlZClcXG4gNjQ4OlxcdFxcdF9fRk9MSU9fQ0xFQVJfRkxBR19OT09QKG1sb2NrZWQpXFxuIDY0OTpcXHRcXHRGT0xJT19URVNUX0NMRUFSX0ZMQUdfRkFMU0UobWxvY2tlZClcXG4gNjUwOlxcdFxcdEZPTElPX1RFU1RfU0VUX0ZMQUdfRkFMU0UobWxvY2tlZClcXG4gNjUxOlxcdCNlbmRpZlxcbiA2NTI6XFx0XFxuIDY1MzpcXHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuIDY1NDpcXHRQQUdFRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcXG4gNjU1OlxcdFRFU1RTQ0ZMQUcoSFdQb2lzb24sIGh3cG9pc29uLCBQRl9BTlkpXFxuIDY1NjpcXHQjZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcXHUwMDNjXFx1MDAzYyBQR19od3BvaXNvbilcXG4gNjU3OlxcdCNlbHNlXFxuIDY1ODpcXHRQQUdFRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pXFxuIDY1OTpcXHRURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcXG4gNjYwOlxcdCNkZWZpbmUgX19QR19IV1BPSVNPTiAwXFxuIDY2MTpcXHQjZW5kaWZcXG4gNjYyOlxcdFxcbiA2NjM6XFx0I2lmZGVmIENPTkZJR19QQUdFX0lETEVfRkxBR1xcbiA2NjQ6XFx0I2lmZGVmIENPTkZJR182NEJJVFxcbiA2NjU6XFx0Rk9MSU9fVEVTVF9GTEFHKHlvdW5nLCBGT0xJT19IRUFEX1BBR0UpXFxuIDY2NjpcXHRGT0xJT19TRVRfRkxBRyh5b3VuZywgRk9MSU9fSEVBRF9QQUdFKVxcbiA2Njc6XFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHlvdW5nLCBGT0xJT19IRUFEX1BBR0UpXFxuIDY2ODpcXHRGT0xJT19GTEFHKGlkbGUsIEZPTElPX0hFQURfUEFHRSlcXG4gNjY5OlxcdCNlbmRpZlxcbiA2NzA6XFx0LyogU2VlIHBhZ2VfaWRsZS5oIGZvciAhNjRCSVQgd29ya2Fyb3VuZCAqL1xcbiA2NzE6XFx0I2Vsc2UgLyogIUNPTkZJR19QQUdFX0lETEVfRkxBRyAqL1xcbiA2NzI6XFx0Rk9MSU9fRkxBR19GQUxTRSh5b3VuZylcXG4gNjczOlxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBR19GQUxTRSh5b3VuZylcXG4gNjc0OlxcdEZPTElPX0ZMQUdfRkFMU0UoaWRsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzM6MDguODQ3NzU5NzQ5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNjg0MDg2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIENvZGUgQ2xlYW51cCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY29kZSBjbGVhbnVwLCBhIHJlZmFjdG9yaW5nIHBhdGNoIHJlYWxseS4gSSdtIGFkZGluZyBgVEVTVFNDRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pYCBpbiBgbGludXgvcGFnZS1mbGFncy5oYCB3aGljaCBkZWZpbmVzIGBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocGFnZSlgIGFuZCBgVGVzdFNldFBhZ2VIV1BvaXNvbihwYWdlKWAgZXZlbiB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGRpc2FibGVkLiBUaGF0J3MgZ29vZCwgdW5pZnlpbmcgdGhlIGRlZmluaXRpb25zLiBJJ20gYWxzbyByZW1vdmluZyBhIGRyaXZlci1zcGVjaWZpYyB3cmFwcGVyLCBgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb24ocGFnZSlgLCBpbiBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBpbiBmYXZvciBvZiBkaXJlY3RseSB1c2luZyB0aGUgc3RhbmRhcmQgYFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwYWdlKWAgbWFjcm8uXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGFmdGVyIHJldmlld2luZywgdGhlcmUgYXJlIHplcm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHVzZXItc3BhY2UgY29waWVzIGhhcHBlbmluZywgYW5kIG5vdGhpbmcgdGhhdCB0b3VjaGVzIGRhdGEgZmxvdyBvciBib3VuZHMgY2hlY2tpbmcuIEl0J3MgcmVhbGx5IGp1c3QgY29uc29saWRhdGluZyB0aGUgd2F5IHdlIGhhbmRsZSB0aGVzZSBwYWdlIGZsYWcgaGVscGVyIG1hY3Jvcy4gVGhpcyBpcyBhYm91dCBhcyBsb3ctcmlzayBhcyBpdCBnZXRzLlxuXG5UaGVyZWZvcmUsIG5vIG5lZWQgdG8gZmxhZyB0aGlzIHdpdGggYE5lZWRzS01TQU4gPSBmYWxzZWAuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEknbSBjbGVhciBvbiB0aGUganVzdGlmaWNhdGlvbiwgbGV0J3MgY29udHJhc3QgS0FTQU4gYW5kIEtNU0FOLiBXaXRoIEtBU0FOLCBzdGFuZGFyZCBidWlsZHMsIEknbSBjaGVja2luZyBnZW5lcmFsIG1lbW9yeSBhY2Nlc3NlcywgcGFnZSBmbGFnIG9wZXJhdGlvbnMsIGV0Yy4gS01TQU4gZm9jdXNlcyBzcGVjaWZpY2FsbHkgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyAqdG8qIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBkb2Vzbid0IHRvdWNoIGFueSBvZiB0aG9zZSBhcmVhcy4gSXQncyBqdXN0IGEgcmVmYWN0b3Jpbmcgb2YgZXhpc3RpbmcgcGFnZSBmbGFnIGhlbHBlcnMgYW5kIHJlbW92ZXMgdGhhdCBwbWVtIHdyYXBwZXIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQsIGV4cG9zZWQsIG9yIG1hbmlwdWxhdGVkLiBObyBuZXcgYnVmZmVycywgbm8gZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgaXMgYSBuby1vcCBjb25jZXJuaW5nIEtNU0FOLlxuXG5Pa2F5LCB0aGF0J3MgZW5vdWdoLCBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMzQsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDU6MzM6MTMuOTE2MTcxNDkyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIC8gY2xlYW51cCB0aGF0IGFkZHMgc3RhbmRhcmQgVEVTVFNDRkxBR19GQUxTRSBkZWZpbml0aW9ucyBmb3IgSFdQb2lzb24gaW4gXFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFxcdTAwM2Ugd2hlbiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgaXMgbm90IHNldCwgYW5kIHJlbW92ZXMgdGhlIGRyaXZlci1zcGVjaWZpYyB0ZXN0X2FuZF9jbGVhcl9wbWVtX3BvaXNvbiB3cmFwcGVyIGluIGZhdm9yIG9mIGRpcmVjdGx5IGNhbGxpbmcgVGVzdENsZWFyUGFnZUhXUG9pc29uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRhcmllcyBvciBkYXRhIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSByZWZhY3RvcmluZyAvIGNsZWFudXAgdGhhdCBhZGRzIHN0YW5kYXJkIFRFU1RTQ0ZMQUdfRkFMU0UgZGVmaW5pdGlvbnMgZm9yIEhXUG9pc29uIGluIFxcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcXHUwMDNlIHdoZW4gQ09ORklHX01FTU9SWV9GQUlMVVJFIGlzIG5vdCBzZXQsIGFuZCByZW1vdmVzIHRoZSBkcml2ZXItc3BlY2lmaWMgdGVzdF9hbmRfY2xlYXJfcG1lbV9wb2lzb24gd3JhcHBlciBpbiBmYXZvciBvZiBkaXJlY3RseSBjYWxsaW5nIFRlc3RDbGVhclBhZ2VIV1BvaXNvbi4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMgb3IgZGF0YSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxghkg[1] Phase: Succeeded StartedAt: 2026-09-04 05:33:18 +0000 UTC FinishedAt: 2026-09-04 05:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 05:33:18 +0000 UTC FinishedAt: 2026-09-04 05:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2] Phase: Succeeded StartedAt: 2026-09-04 05:33:18 +0000 UTC FinishedAt: 2026-09-04 09:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 05:33:18 +0000 UTC FinishedAt: 2026-09-04 09:14:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 05:33:18 +0000 UTC FinishedAt: 2026-09-04 05:33:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 05:33:18 +0000 UTC FinishedAt: 2026-09-04 05:33:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-convert-artifact-155748343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 05:33:28 +0000 UTC FinishedAt: 2026-09-04 05:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 05:33:28 +0000 UTC FinishedAt: 2026-09-04 05:51:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ff52ee7f-a8a0-4d99-b91b-9dcbcdfa79d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-convert-artifact-155748343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5ad18b3d-53e1-4ee4-8fbd-7951964a767c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-build-action-1156454989/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 05:33:28 +0000 UTC FinishedAt: 2026-09-04 05:51:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ff52ee7f-a8a0-4d99-b91b-9dcbcdfa79d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-convert-artifact-155748343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5ad18b3d-53e1-4ee4-8fbd-7951964a767c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-build-action-1156454989/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 05:51:40 +0000 UTC FinishedAt: 2026-09-04 05:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 05:51:40 +0000 UTC FinishedAt: 2026-09-04 05:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 05:51:40 +0000 UTC FinishedAt: 2026-09-04 05:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 05:51:40 +0000 UTC FinishedAt: 2026-09-04 05:51:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-convert-artifact-2752247590/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 05:51:50 +0000 UTC FinishedAt: 2026-09-04 05:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 05:51:50 +0000 UTC FinishedAt: 2026-09-04 05:53:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ad18b3d-53e1-4ee4-8fbd-7951964a767c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-build-action-1156454989/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 05:53:58 +0000 UTC FinishedAt: 2026-09-04 05:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 05:53:58 +0000 UTC FinishedAt: 2026-09-04 05:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 05:53:58 +0000 UTC FinishedAt: 2026-09-04 06:10:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 05:53:58 +0000 UTC FinishedAt: 2026-09-04 06:10:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ff52ee7f-a8a0-4d99-b91b-9dcbcdfa79d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-convert-artifact-2752247590/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "138bb9de-b425-41de-baa4-3449f1fc3222", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-build-action-3571127530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 05:53:58 +0000 UTC FinishedAt: 2026-09-04 06:09:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ff52ee7f-a8a0-4d99-b91b-9dcbcdfa79d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-convert-artifact-2752247590/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "138bb9de-b425-41de-baa4-3449f1fc3222", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-build-action-3571127530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 06:10:00 +0000 UTC FinishedAt: 2026-09-04 06:10:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 06:10:00 +0000 UTC FinishedAt: 2026-09-04 06:10:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 06:10:00 +0000 UTC FinishedAt: 2026-09-04 06:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 06:10:00 +0000 UTC FinishedAt: 2026-09-04 06:12:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*138bb9de-b425-41de-baa4-3449f1fc3222,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-build-action-3571127530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 06:12:17 +0000 UTC FinishedAt: 2026-09-04 09:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 06:12:17 +0000 UTC FinishedAt: 2026-09-04 09:14:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5ad18b3d-53e1-4ee4-8fbd-7951964a767c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*138bb9de-b425-41de-baa4-3449f1fc3222,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-build-action-1156454989/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-build-action-3571127530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 06:12:17 +0000 UTC FinishedAt: 2026-09-04 06:12:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 06:12:17 +0000 UTC FinishedAt: 2026-09-04 06:12:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-convert-artifact-3256099435/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 06:12:17 +0000 UTC FinishedAt: 2026-09-04 06:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 06:12:17 +0000 UTC FinishedAt: 2026-09-04 06:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 06:12:17 +0000 UTC FinishedAt: 2026-09-04 06:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 06:12:27 +0000 UTC FinishedAt: 2026-09-04 09:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxghkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pmem_mkpage_present","__pmem_clear_poison","pmem_clear_poison","pmem_do_write","pmem_recovery_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08dd568d68633c480ad5ca66afe1eb62f37773a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_PMEM","LIBNVDIMM","MEMORY_FAILURE"],"series_id":"407c4852-dc9c-47fe-b232-44d64203ceca","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 06:12:27 +0000 UTC FinishedAt: 2026-09-04 09:14:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ad18b3d-53e1-4ee4-8fbd-7951964a767c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*138bb9de-b425-41de-baa4-3449f1fc3222,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-build-action-1156454989/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-build-action-3571127530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxghkg/series-workflowxghkg-convert-artifact-3256099435/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}