Name: series-workflowfq4st Phase: Succeeded StartedAt: 2026-06-22 21:36:17 +0000 UTC FinishedAt: 2026-06-23 01:44:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[0] Phase: Succeeded StartedAt: 2026-06-22 21:36:17 +0000 UTC FinishedAt: 2026-06-22 21:52:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 21:36:17 +0000 UTC FinishedAt: 2026-06-22 21:52:26 +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": "e1201ff76176ef666b13d1a4ec6b6190ddc6abc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_EXTENSION", "PAGE_OWNER", "PAGE_TABLE_CHECK", "PAGE_TABLE_CHECK_ENFORCED" ], "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": "e1201ff76176ef666b13d1a4ec6b6190ddc6abc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_EXTENSION", "PAGE_OWNER", "PAGE_TABLE_CHECK", "PAGE_TABLE_CHECK_ENFORCED" ], "series_id": "c9a6990f-fa5d-45a4-98b7-1dc3be99e711" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__split_page_owner", "__folio_copy_owner", "__page_table_check_puds_set", "__page_table_check_pmds_set", "__page_table_check_pud_clear", "__page_table_check_pmd_clear" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfRVhURU5TSU9OJiMzNDssCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDSyYjMzQ7LAogICAgJiMzNDtQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zcGxpdF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O19fZm9saW9fY29weV9vd25lciYjMzQ7LAogICAgJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQmIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0JiMzNDssCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXImIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBtYWNybyBhbmQgaXRzIHVuZGVybHlpbmcgaXRlcmF0b3IgZnVuY3Rpb25zIChgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgKSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBiYXNlZCBvbiBhIGBjb3VudGAgcGFyYW1ldGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBzdWJzeXN0ZW1zIHRoYXQgaXRlcmF0ZSBvdmVyIHBhZ2UgZXh0ZW5zaW9ucyBsaWtlIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciB1bm5lY2Vzc2FyeSBsb29rdXBzIHdoZW4gdGhlIGNvdW50IGlzIDAgb3Igd2hlbiBpdGVyYXRpbmcgb3ZlciBhIHNwZWNpZmljIG51bWJlciBvZiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYxZTYzMmJjZDMzNTVmYTA5MTI3ZmI3MzYzNDUxNmExMGU3ODIyMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAyMTo0OToxNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhcbmluZGV4IDYxZTg3NmUyNTVlODljLi5mMjNkNGIyMThkYTA3OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXG5AQCAtMTIwLDE0ICYjNDM7MTIwLDE4IEBAIHN0cnVjdCBwYWdlX2V4dF9pdGVyIHtcbiAgKiBwYWdlX2V4dF9pdGVyX2JlZ2luKCkgLSBQcmVwYXJlIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBwYWdlIGV4dGVuc2lvbnMuXG4gICogQGl0ZXI6IHBhZ2UgZXh0ZW5zaW9uIGl0ZXJhdG9yLlxuICAqIEBwZm46IFBGTiBvZiB0aGUgcGFnZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi5cbiYjNDM7ICogQGNvdW50OiBtYXhpbXVtIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgdG8gcmV0dXJuLlxuICAqXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIHRha2VuLlxuICAqXG4gICogUmV0dXJuOiBOVUxMIGlmIG5vIHBhZ2VfZXh0IGV4aXN0cyBmb3IgdGhpcyBwYWdlLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2JlZ2luKHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyLFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuJiM0MztcdGlmICghY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4gXHRpdGVyLVx1MDAzZWluZGV4ID0gMDtcbiBcdGl0ZXItXHUwMDNlc3RhcnRfcGZuID0gcGZuO1xuIFx0aXRlci1cdTAwM2VwYWdlX2V4dCA9IHBhZ2VfZXh0X2xvb2t1cChwZm4pO1xuQEAgLTEzOCwxOSAmIzQzOzE0MiwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHRfaXRlcl9iZWdpbihzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlcixcbiAvKipcbiAgKiBwYWdlX2V4dF9pdGVyX25leHQoKSAtIEdldCBuZXh0IHBhZ2UgZXh0ZW5zaW9uXG4gICogQGl0ZXI6IHBhZ2UgZXh0ZW5zaW9uIGl0ZXJhdG9yLlxuJiM0MzsgKiBAY291bnQ6IG1heGltdW0gbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyB0byByZXR1cm4uXG4gICpcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXG4gICpcbiAgKiBSZXR1cm46IE5VTEwgaWYgbm8gbmV4dCBwYWdlX2V4dCBleGlzdHMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfbmV4dChzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlcilcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfbmV4dChzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlcixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyLVx1MDAzZXBhZ2VfZXh0KSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpdGVyLVx1MDAzZWluZGV4JiM0MzsmIzQzOztcbiYjNDM7XHRpZiAoJiM0MzsmIzQzO2l0ZXItXHUwMDNlaW5kZXggXHUwMDNlPSBjb3VudClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuIFx0cGZuID0gaXRlci1cdTAwM2VzdGFydF9wZm4gJiM0MzsgaXRlci1cdTAwM2VpbmRleDtcbiBcbiBcdGlmIChwYWdlX2V4dF9pdGVyX25leHRfZmFzdF9wb3NzaWJsZShwZm4pKVxuQEAgLTE4Myw5ICYjNDM7MTkwLDkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVcbiAgKiBJTVBPUlRBTlQ6IG11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayB0YWtlbi5cbiAgKi9cbiAjZGVmaW5lIGZvcl9lYWNoX3BhZ2VfZXh0KF9fcGFnZSwgX19wZ2NvdW50LCBfX3BhZ2VfZXh0LCBfX2l0ZXIpIFxcXG4tXHRmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSk7XFxcbi1cdFx0X19wYWdlX2V4dCBcdTAwMjZcdTAwMjYgX19pdGVyLmluZGV4IFx1MDAzYyBfX3BnY291bnQ7ICAgICAgICAgIFxcXG4tXHRcdF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX25leHQoXHUwMDI2X19pdGVyKSlcbiYjNDM7XHRmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcbiYjNDM7XHRcdF9fcGFnZV9leHQ7IFxcXG4mIzQzO1x0XHRfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9uZXh0KFx1MDAyNl9faXRlciwgX19wZ2NvdW50KSlcbiBcbiAjZWxzZSAvKiAhQ09ORklHX1BBR0VfRVhURU5TSU9OICovXG4gc3RydWN0IHBhZ2VfZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfRVhURU5TSU9OJiMzNDssCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDSyYjMzQ7LAogICAgJiMzNDtQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zcGxpdF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O19fZm9saW9fY29weV9vd25lciYjMzQ7LAogICAgJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQmIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0JiMzNDssCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXImIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBtYWNybyBhbmQgaXRzIHVuZGVybHlpbmcgaXRlcmF0b3IgZnVuY3Rpb25zIChgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgKSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBiYXNlZCBvbiBhIGBjb3VudGAgcGFyYW1ldGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBzdWJzeXN0ZW1zIHRoYXQgaXRlcmF0ZSBvdmVyIHBhZ2UgZXh0ZW5zaW9ucyBsaWtlIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciB1bm5lY2Vzc2FyeSBsb29rdXBzIHdoZW4gdGhlIGNvdW50IGlzIDAgb3Igd2hlbiBpdGVyYXRpbmcgb3ZlciBhIHNwZWNpZmljIG51bWJlciBvZiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjFlNjMyYmNkMzM1NWZhMDkxMjdmYjczNjM0NTE2YTEwZTc4MjIxYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDIyIDIxOjQ5OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oCmluZGV4IDYxZTg3NmUyNTVlODljLi5mMjNkNGIyMThkYTA3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaApAQCAtMTIwLDE0ICYjNDM7MTIwLDE4IEBAIHN0cnVjdCBwYWdlX2V4dF9pdGVyIHsKICAqIHBhZ2VfZXh0X2l0ZXJfYmVnaW4oKSAtIFByZXBhcmUgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2UgZXh0ZW5zaW9ucy4KICAqIEBpdGVyOiBwYWdlIGV4dGVuc2lvbiBpdGVyYXRvci4KICAqIEBwZm46IFBGTiBvZiB0aGUgcGFnZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4KJiM0MzsgKiBAY291bnQ6IG1heGltdW0gbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyB0byByZXR1cm4uCiAgKgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIHRha2VuLgogICoKICAqIFJldHVybjogTlVMTCBpZiBubyBwYWdlX2V4dCBleGlzdHMgZm9yIHRoaXMgcGFnZS4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfYmVnaW4oc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsCi0JCQkJCQl1bnNpZ25lZCBsb25nIHBmbikKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewomIzQzOwlpZiAoIWNvdW50KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiAJaXRlci0mZ3Q7aW5kZXggPSAwOwogCWl0ZXItJmd0O3N0YXJ0X3BmbiA9IHBmbjsKIAlpdGVyLSZndDtwYWdlX2V4dCA9IHBhZ2VfZXh0X2xvb2t1cChwZm4pOwpAQCAtMTM4LDE5ICYjNDM7MTQyLDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2JlZ2luKHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyLAogLyoqCiAgKiBwYWdlX2V4dF9pdGVyX25leHQoKSAtIEdldCBuZXh0IHBhZ2UgZXh0ZW5zaW9uCiAgKiBAaXRlcjogcGFnZSBleHRlbnNpb24gaXRlcmF0b3IuCiYjNDM7ICogQGNvdW50OiBtYXhpbXVtIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgdG8gcmV0dXJuLgogICoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayB0YWtlbi4KICAqCiAgKiBSZXR1cm46IE5VTEwgaWYgbm8gbmV4dCBwYWdlX2V4dCBleGlzdHMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfbmV4dChzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlciwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFpdGVyLSZndDtwYWdlX2V4dCkpCiAJCXJldHVybiBOVUxMOwogCi0JaXRlci0mZ3Q7aW5kZXgmIzQzOyYjNDM7OwomIzQzOwlpZiAoJiM0MzsmIzQzO2l0ZXItJmd0O2luZGV4ICZndDs9IGNvdW50KQomIzQzOwkJcmV0dXJuIE5VTEw7CiAJcGZuID0gaXRlci0mZ3Q7c3RhcnRfcGZuICYjNDM7IGl0ZXItJmd0O2luZGV4OwogCiAJaWYgKHBhZ2VfZXh0X2l0ZXJfbmV4dF9mYXN0X3Bvc3NpYmxlKHBmbikpCkBAIC0xODMsOSAmIzQzOzE5MCw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2dldChjb25zdCBzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlCiAgKiBJTVBPUlRBTlQ6IG11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayB0YWtlbi4KICAqLwogI2RlZmluZSBmb3JfZWFjaF9wYWdlX2V4dChfX3BhZ2UsIF9fcGdjb3VudCwgX19wYWdlX2V4dCwgX19pdGVyKSBcCi0JZm9yIChfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9iZWdpbigmYW1wO19faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSk7XAotCQlfX3BhZ2VfZXh0ICZhbXA7JmFtcDsgX19pdGVyLmluZGV4ICZsdDsgX19wZ2NvdW50OyAgICAgICAgICBcCi0JCV9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX25leHQoJmFtcDtfX2l0ZXIpKQomIzQzOwlmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKCZhbXA7X19pdGVyLCBwYWdlX3RvX3BmbihfX3BhZ2UpLCBfX3BnY291bnQpOyBcCiYjNDM7CQlfX3BhZ2VfZXh0OyBcCiYjNDM7CQlfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9uZXh0KCZhbXA7X19pdGVyLCBfX3BnY291bnQpKQogCiAjZWxzZSAvKiAhQ09ORklHX1BBR0VfRVhURU5TSU9OICovCiBzdHJ1Y3QgcGFnZV9leHQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIEV4dGVuc2lvbiBJdGVyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyBgaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oYC4gU2VlbXMgbGlrZSBzb21lb25lJiMzOTtzIGJlZW4gd29ya2luZyBvbiBgcGFnZV9leHRfaXRlcl9iZWdpbmAgYW5kIGBwYWdlX2V4dF9pdGVyX25leHRgLiBUaGUgYmlnIGNoYW5nZSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBgY291bnRgIGFyZ3VtZW50LiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IG1lYW5zIHRoZXkmIzM5O3JlIGFpbWluZyB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBkdXJpbmcgaXRlcmF0aW9uLiBUaGF0IGdpdmVzIHVzIG1vcmUgY29udHJvbCBpbiBzb21lIGluc3RhbmNlcywgYW5kIHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlIGluIG1hbnkuCgpOb3csIHRoZXkmIzM5O3ZlIGFsc28gZ29uZSBhaGVhZCBhbmQgdXBkYXRlZCB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBtYWNyby4gSXQgc2VlbXMgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIHBhc3MgYF9fcGdjb3VudGAgKG9yIHdoYXRldmVyIHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY291bnQpIHRvIHRob3NlIGl0ZXJhdG9yIGZ1bmN0aW9ucy4gTWFrZXMgc2Vuc2U7IHlvdSB3YW50IHRoZSBtYWNybyB0byByZXNwZWN0IHRoYXQgbGltaXQuCgpNeSBuZXh0IHN0ZXA/IFdlbGwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgY29kZWJhc2UgYW5kIGZpbmQgKmV2ZXJ5KiB1c2Ugb2YgYGZvcl9lYWNoX3BhZ2VfZXh0YC4gVGhhdCYjMzk7cyBnb2luZyB0byB0ZWxsIG1lIHdoZXJlIHRoaXMgY2hhbmdlIHdpbGwgYWZmZWN0IHRoaW5ncywgYW5kIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGNvZGUgd2lsbCBiZWhhdmUgd2l0aCB0aGUgYWRkZWQgY29uc3RyYWludHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QsIHRoZSBwb3RlbnRpYWwgYmVuZWZpdHMsIGFuZCBvZiBjb3Vyc2UgYW55IHBvc3NpYmxlIHNpZGUgZWZmZWN0cyBvciBjb21wYXRpYmlsaXR5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3JfZWFjaF9wYWdlX2V4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDsuY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XG4tLVxuLmNsYW5nLWZvcm1hdC0zOTQtICAtICYjMzk7Zm9yX2VhY2hfb3JfYml0JiMzOTtcbi5jbGFuZy1mb3JtYXQ6Mzk1OiAgLSAmIzM5O2Zvcl9lYWNoX3BhZ2VfZXh0JiMzOTtcbi5jbGFuZy1mb3JtYXQtMzk2LSAgLSAmIzM5O2Zvcl9lYWNoX3BhdGgmIzM5O1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xODItLyoqXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTgzOiAqIGZvcl9lYWNoX3BhZ2VfZXh0KCk6IGl0ZXJhdGUgdGhyb3VnaCBwYWdlX2V4dCBvYmplY3RzLlxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTE4NC0gKiBAX19wYWdlOiB0aGUgcGFnZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpblxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTEtICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTkyOiNkZWZpbmUgZm9yX2VhY2hfcGFnZV9leHQoX19wYWdlLCBfX3BnY291bnQsIF9fcGFnZV9leHQsIF9faXRlcikgXFxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTMtXHRmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcbi0tXG5tbS9wYWdlX293bmVyLmM9MjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX293bmVyLmMtMjU1LVx0cmN1X3JlYWRfbG9jaygpO1xubW0vcGFnZV9vd25lci5jOjI1NjpcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xubW0vcGFnZV9vd25lci5jLTI1Ny1cdFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX293bmVyLmM9MjczPXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0yODMtXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9wYWdlX293bmVyLmM6Mjg0Olx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtMjg1LVx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zNjE9dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG4tLVxubW0vcGFnZV9vd25lci5jLTM2Ny1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2Vfb3duZXIuYzozNjg6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvbGRfb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtMzY5LVx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zNzU9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4tLVxubW0vcGFnZV9vd25lci5jLTQxNy1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2Vfb3duZXIuYzo0MTg6XHRmb3JfZWFjaF9wYWdlX2V4dChcdTAwMjZvbGQtXHUwMDNlcGFnZSwgMSBcdTAwM2NcdTAwM2MgbmV3X3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtNDE5LVx0XHRvbGRfcGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9NjM9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19jbGVhcih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBwZ2NudClcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNzctXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Nzg6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy03OS1cdFx0c3RydWN0IHBhZ2VfdGFibGVfY2hlY2sgKnB0YyA9IGdldF9wYWdlX3RhYmxlX2NoZWNrKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9OTc9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19zZXQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQsXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTExMi1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMTM6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xMTQtXHRcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTEzMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTEzOC1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMzk6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNDAtXHRcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBwYWdlX2V4dGAgSXRlcmF0aW9uIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgaXRlcmF0aW9uIGZ1bmN0aW9ucyBmb3IgYHBhZ2VfZXh0YCBzdHJ1Y3R1cmVzOiBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgY29uc2VxdWVudGx5LCBgZm9yX2VhY2hfcGFnZV9leHRgLiAgVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBpdGVyYXRpb24gaXMgbm93IGV4cGxpY2l0bHkgbGltaXRlZCBieSBhIGBjb3VudGAgcGFyYW1ldGVyLiAgCgpCZWZvcmUsIHRoZSBgZm9yX2VhY2hfcGFnZV9leHRgIG1hY3JvIGxvb2tlZCBsaWtlIHRoaXM6IHRoZSBsb29wIHdvdWxkICphbHdheXMqIGNhbGwgYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gLCBldmVuIGlmIHRoZSBpbnRlbmRlZCBwYWdlIGNvdW50IChgX19wZ2NvdW50YCkgd2FzIHplcm8uICBUaGVuLCBhIGNoZWNrLCBgX19pdGVyLmluZGV4ICZsdDsgX19wZ2NvdW50YCwgd291bGQgaW1tZWRpYXRlbHkgc2hvcnQtY2lyY3VpdCB0aGUgbG9vcC4gIFdoaWxlIHRlY2huaWNhbGx5IGNvcnJlY3QsIHRoZXJlIHdhcyBhIHdhc3RlZCBmdW5jdGlvbiBjYWxsLgoKTm93LCBJIHNlZSB0aGUgaW1wcm92ZW1lbnQuIGBwYWdlX2V4dF9pdGVyX2JlZ2luYCAqaXRzZWxmKiBjaGVja3MgdGhlIGBjb3VudGAgYXJndW1lbnQuICBJZiBgY291bnRgIGlzIHplcm8sIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYE5VTExgLiAgVGhpcyBpcyBtdWNoIGNsZWFuZXIuCgpgYGBjCnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2JlZ2luKHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyLAoJCXVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNvdW50KQp7CglpZiAoIWNvdW50KQoJCXJldHVybiBOVUxMOwpgYGAKClNpbWlsYXJseSwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAgYWxzbyB1c2VzIGBjb3VudGAuCgpgYGBjCnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsCgkJdW5zaWduZWQgbG9uZyBjb3VudCkKewoJdW5zaWduZWQgbG9uZyBwZm47CgoJaWYgKFdBUk5fT05fT05DRSghaXRlci0mZ3Q7cGFnZV9leHQpKQoJCXJldHVybiBOVUxMOwoKCWlmICgmIzQzOyYjNDM7aXRlci0mZ3Q7aW5kZXggJmd0Oz0gY291bnQpCgkJcmV0dXJuIE5VTEw7CmBgYAoKVGhpcyBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IGluIGNhc2VzIHdoZXJlIGBfX3BnY291bnRgIChvciwgbm93LCB0aGUgYGNvdW50YCBwYXJhbWV0ZXIpIGlzIHplcm8uICBJdCBhdm9pZHMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgY2FsbHMgdG8gYHBhZ2VfZXh0X2xvb2t1cChwZm4pYCwgd2hpY2ggY291bGQgYmUgY29zdGx5IG9yLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIGV2ZW4gcG9zZSBhIHNhZmV0eSBjb25jZXJuLiAgSXQgbG9va3MgbGlrZSBhIGdvb2QgZGVmZW5zaXZlIGNvZGluZyBtZWFzdXJlLgoKQWxzbywgaXQgbWVhbnMgdGhlIGNoZWNrIGZvciBleGl0aW5nIHRoZSBsb29wIGlzIG5vdyBoYW5kbGVkIGludGVybmFsbHkgYnkgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAsIG1ha2luZyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBjb2RlIHNsaWdodGx5IGNsZWFuZXIuCgpOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgc2NhbiBgbW0vcGFnZV9vd25lci5jYCBhbmQgYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AgdG8gc2VlIGhvdyB0aGlzIGltcGFjdHMgdGhvc2UgYXJlYXMuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aGUgaW1tZWRpYXRlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfUEFHRV9FWFRFTlNJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTc9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0xNzIwLVx0XHRcdG1pZ2h0IHRha2UgbG9uZ2VyLCBlc3BlY2lhbGx5IG9uIHN5c3RlbXMgd2l0aCBhIGxvdCBvZlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MTcyMTpcdFx0XHRtZW1vcnkuIEF2YWlsYWJsZSB3aXRoIENPTkZJR19QQUdFX0VYVEVOU0lPTj15LlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMTcyMi1cbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjEwPUdlbmVyYWxcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjMzLSAgYGBub2RlX3BhZ2VfZXh0YGAgaXMgYXJyYXkgb2YgZXh0ZW5zaW9ucyBvZiBzdHJ1Y3QgcGFnZXMuIEF2YWlsYWJsZSBvbmx5XG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjM0OiAgaW4gdGhlIGtlcm5lbHMgYnVpbHQgd2l0aCBgYENPTkZJR19QQUdFX0VYVEVOU0lPTmBgIGVuYWJsZWQuXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjM1LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjA1PW5vZGVfem9uZWxpc3Rz5byV55So44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMjEt5a+55LqO5L2/55SoRkxBVE1FTeWGheWtmOaooeWei+eahFVNQeezu+e7n++8jDDlj7foioLngrnnmoQgYGBub2RlX3BhZ2VfZXh0YGBcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjIyOuaYr3N0cnVjdCBwYWdlc+eahOaJqeWxleaVsOe7hOOAguWPquacieWcqOaehOW7uuaXtuW8gOWQr+S6hiBgYENPTkZJR19QQUdFX0VYVEVOU0lPTmBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIyMy3pgInpobnnmoTlhoXmoLjkuK3miY3lj6/nlKjjgIJcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0NjU9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ4Mi1cdHN0cnVjdCBwYWdlICpub2RlX21lbV9tYXA7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE0ODM6I2lmZGVmIENPTkZJR19QQUdFX0VYVEVOU0lPTlxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNDg0LVx0c3RydWN0IHBhZ2VfZXh0ICpub2RlX3BhZ2VfZXh0O1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTk5NT1zdHJ1Y3QgbWVtX3NlY3Rpb24ge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMjAxMC1cdHN0cnVjdCBtZW1fc2VjdGlvbl91c2FnZSAqdXNhZ2U7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjIwMTE6I2lmZGVmIENPTkZJR19QQUdFX0VYVEVOU0lPTlxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0yMDEyLVx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg9OT1zdHJ1Y3QgcGdsaXN0X2RhdGE7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgtMTAtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTE6I2lmZGVmIENPTkZJR19QQUdFX0VYVEVOU0lPTlxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTEyLS8qKlxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTYtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTk3OiNlbHNlIC8qICFDT05GSUdfUEFHRV9FWFRFTlNJT04gKi9cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTgtc3RydWN0IHBhZ2VfZXh0O1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0yMzE9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfZXh0X3B1dChzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0KVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0yMzMtfVxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oOjIzNDojZW5kaWYgLyogQ09ORklHX1BBR0VfRVhURU5TSU9OICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgtMjM1LSNlbmRpZiAvKiBfX0xJTlVYX1BBR0VfRVhUX0ggKi9cbi0tXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc9NDY9Q09ORklHX0RFQlVHX05FVD15XG4tLVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTU2LSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjU3OkNPTkZJR19QQUdFX0VYVEVOU0lPTj15XG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNTgtQ09ORklHX1BBR0VfT1dORVI9eVxuLS1cbm1tL01ha2VmaWxlPTEyNT1vYmotJChDT05GSUdfQkFMTE9PTikgJiM0Mzs9IGJhbGxvb24ub1xubW0vTWFrZWZpbGU6MTI2Om9iai0kKENPTkZJR19QQUdFX0VYVEVOU0lPTikgJiM0Mzs9IHBhZ2VfZXh0Lm9cbm1tL01ha2VmaWxlLTEyNy1vYmotJChDT05GSUdfUEFHRV9UQUJMRV9DSEVDSykgJiM0Mzs9IHBhZ2VfdGFibGVfY2hlY2sub1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2RlYnVnLmNvbmZpZz02PUNPTkZJR19ERUJVR19JTkZPX0RXQVJGND15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9kZWJ1Zy5jb25maWc6NzpDT05GSUdfUEFHRV9FWFRFTlNJT049eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvZGVidWcuY29uZmlnLTgtQ09ORklHX1BBR0VfUE9JU09OSU5HPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjIyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gYFBBR0VfRVhURU5TSU9OYCwgYFBBR0VfT1dORVJgLCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgIGFyZSB0aGUga2V5IG9uZXMgdGhhdCBzdGFuZCBvdXQuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7V2hlcmUgYXJlIHRoZXNlIGRlZmluZWQgYW5kIGRvY3VtZW50ZWQ/JiMzNDsgYW5kIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IGEgcmVmbGV4IGF0IHRoaXMgcG9pbnQ7IG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLCBLY29uZmlnIGlzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIGdvLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBgUEFHRV9FWFRFTlNJT05gIGlzIGFsbCBhYm91dCDigJMgdGhhdCYjMzk7bGwgbGlrZWx5IGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFsbCB0aHJlZSBhbmQgd2hhdCBjb25maWd1cmF0aW9uIGRlY2lzaW9ucyBhcmUgdGllZCB0byB0aGVtLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBhbmNob3IgZm9yIHRoZSByZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX0VYVEVOU0lPTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5tbS9LY29uZmlnLmRlYnVnOjI6Y29uZmlnIFBBR0VfRVhURU5TSU9OXG5tbS9LY29uZmlnLmRlYnVnLTMtXHRib29sIFwmIzM0O0V4dGVuZCBtZW1tYXAgb24gZXh0cmEgc3BhY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MjkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIERlYnVnZ2luZyBEaXZlOiBQQUdFX09XTkVSIGFuZCBQQUdFX1RBQkxFX0NIRUNLKioKClJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgZGVidWdnaW5nIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHZlcmlmeWluZyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9mIGEgY291cGxlIG9mIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWcgZmVhdHVyZXM6IGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgd2hlbiBJJiMzOTttIHRyYWNraW5nIGRvd24gbWVtb3J5IGNvcnJ1cHRpb24sIGxlYWtzLCBvciBhbnkgb3RoZXIgaXNzdWVzIGRlZXAgd2l0aGluIHRoZSBtZW1vcnkgc3Vic3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5IGFyZSB1c2VkIGFuZCB2ZXJpZnkgaWYgdGhleSBhcmUgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGlzIGZ1bmRhbWVudGFsIGZvciBteSBuZXh0IGRlYnVnZ2luZyBzZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9PV05FUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xuLS1cbm1tL0tjb25maWcuZGVidWctMTA0LVxubW0vS2NvbmZpZy5kZWJ1ZzoxMDU6Y29uZmlnIFBBR0VfT1dORVJcbm1tL0tjb25maWcuZGVidWctMTA2LVx0Ym9vbCBcJiMzNDtUcmFjayBwYWdlIG93bmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgUEFHRV9UQUJMRV9DSEVDS2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIFRoZSBjdXJyZW50IHN0YXRlIG9mIGFmZmFpcnMgc3VnZ2VzdHMgd2UgbmVlZCB0byBwZXJmb3JtIGEgY3JpdGljYWwgY2hlY2suIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiBgUEFHRV9UQUJMRV9DSEVDS2AuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBpdCYjMzk7cyBhIGRlZXAgZGl2ZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHBhZ2UgdGFibGUgc3RydWN0dXJlLiBBcmUgdGhlIG1hcHBpbmdzIGNvbnNpc3RlbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBpbmNvbnNpc3RlbmNpZXMsIHN1Y2ggYXMgZW50cmllcyBwb2ludGluZyB0byBpbnZhbGlkIHBoeXNpY2FsIGFkZHJlc3NlcyBvciwgbW9yZSBpbXBvcnRhbnRseSwgKnVub3duZWQqIHBhZ2VzIG1hcHBlZD8gVGhpcyBjaGVjayBpcyBmb3VuZGF0aW9uYWw7IGlmIHRoZSBwYWdlIHRhYmxlIGlzbiYjMzk7dCBzb3VuZCwgdGhlIGVudGlyZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gaXMgcG90ZW50aWFsbHkgY29tcHJvbWlzZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGhhbHQsIGRlYnVnLCBvciB0YWtlIHNvbWUgb3RoZXIgY29ycmVjdGl2ZSBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1RBQkxFX0NIRUNLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTA1PWNvbmZpZyBQQUdFX09XTkVSXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMjEtXG5tbS9LY29uZmlnLmRlYnVnOjEyMjpjb25maWcgUEFHRV9UQUJMRV9DSEVDS1xubW0vS2NvbmZpZy5kZWJ1Zy0xMjMtXHRib29sIFwmIzM0O0NoZWNrIGZvciBpbnZhbGlkIG1hcHBpbmdzIGluIHVzZXIgcGFnZSB0YWJsZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTEzNS1cbm1tL0tjb25maWcuZGVidWc6MTM2OmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXG5tbS9LY29uZmlnLmRlYnVnLTEzNy1cdGJvb2wgXCYjMzQ7RW5mb3JjZSB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvcGFnZV9leHQuaGAuIFRoYXQmIzM5O3MgYSBoZWFkZXIgZmlsZSwgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCYjMzk7cyBjcnVjaWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHdpdGggZXh0ZW5zaW9ucyB0byBwYWdlIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdXNlZCBieSBgbW0vcGFnZV9vd25lci5jYCBhbmQgYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AuIFRob3NlIGFyZSBpbXBvcnRhbnQgZmlsZXM7IHRoZSBmaXJzdCBvbmUgZGVhbHMgd2l0aCB0cmFja2luZyBwYWdlIG93bmVyc2hpcCBhbmQgdGhlIHNlY29uZCB3aXRoIGNoZWNraW5nIHRoZSBpbnRlZ3JpdHkgb2YgcGFnZSB0YWJsZXMuCgpUaGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlIHRvIGBwYWdlX2V4dF9pdGVyX2JlZ2luYCwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAsIGFuZCB0aGUgbWFjcm8gYGZvcl9lYWNoX3BhZ2VfZXh0YC4gUmlnaHQsIHRob3NlIGFyZSBhbGwgaW5saW5lLCBzbyB0aGUgYWN0dWFsIGNvZGUgaXMgaW5zZXJ0ZWQgZGlyZWN0bHkgd2hlcmUgdGhleSYjMzk7cmUgdXNlZC4gVGhpcyBpcyBhIGNydWNpYWwgcG9pbnQgZm9yIGZ1enppbmcuIFNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlIG1hY3JvIGFyZSBpbmxpbmVkLCB0aGUgZm9jdXMgZm9yIGZ1enppbmcgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGZ1bmN0aW9ucyB0aGF0ICpjYWxsKiBgZm9yX2VhY2hfcGFnZV9leHRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIG1ha2luZyB1c2Ugb2YgdGhpcyBtYWNybyBub3cuIFRob3NlIGFyZSB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBzdXJmYWNlLiBUaW1lIHRvIGZpbmQgd2hlcmUgdGhhdCBtYWNybyBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3JfZWFjaF9wYWdlX2V4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDsuY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XG4tLVxuLmNsYW5nLWZvcm1hdC0zOTQtICAtICYjMzk7Zm9yX2VhY2hfb3JfYml0JiMzOTtcbi5jbGFuZy1mb3JtYXQ6Mzk1OiAgLSAmIzM5O2Zvcl9lYWNoX3BhZ2VfZXh0JiMzOTtcbi5jbGFuZy1mb3JtYXQtMzk2LSAgLSAmIzM5O2Zvcl9lYWNoX3BhdGgmIzM5O1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xODItLyoqXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTgzOiAqIGZvcl9lYWNoX3BhZ2VfZXh0KCk6IGl0ZXJhdGUgdGhyb3VnaCBwYWdlX2V4dCBvYmplY3RzLlxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTE4NC0gKiBAX19wYWdlOiB0aGUgcGFnZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpblxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTEtICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTkyOiNkZWZpbmUgZm9yX2VhY2hfcGFnZV9leHQoX19wYWdlLCBfX3BnY291bnQsIF9fcGFnZV9leHQsIF9faXRlcikgXFxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTMtXHRmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcbi0tXG5tbS9wYWdlX293bmVyLmM9MjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX293bmVyLmMtMjU1LVx0cmN1X3JlYWRfbG9jaygpO1xubW0vcGFnZV9vd25lci5jOjI1NjpcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xubW0vcGFnZV9vd25lci5jLTI1Ny1cdFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX293bmVyLmM9MjczPXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0yODMtXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9wYWdlX293bmVyLmM6Mjg0Olx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtMjg1LVx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zNjE9dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG4tLVxubW0vcGFnZV9vd25lci5jLTM2Ny1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2Vfb3duZXIuYzozNjg6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvbGRfb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtMzY5LVx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zNzU9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4tLVxubW0vcGFnZV9vd25lci5jLTQxNy1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2Vfb3duZXIuYzo0MTg6XHRmb3JfZWFjaF9wYWdlX2V4dChcdTAwMjZvbGQtXHUwMDNlcGFnZSwgMSBcdTAwM2NcdTAwM2MgbmV3X3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtNDE5LVx0XHRvbGRfcGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9NjM9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19jbGVhcih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBwZ2NudClcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNzctXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Nzg6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy03OS1cdFx0c3RydWN0IHBhZ2VfdGFibGVfY2hlY2sgKnB0YyA9IGdldF9wYWdlX3RhYmxlX2NoZWNrKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9OTc9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19zZXQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQsXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTExMi1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMTM6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xMTQtXHRcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTEzMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTEzOC1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMzk6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNDAtXHRcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgT3duZXIgYW5kIFBhZ2UgVGFibGUgQ2hlY2sgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgLCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAsIGBfX3NwbGl0X3BhZ2Vfb3duZXJgLCBgX19mb2xpb19jb3B5X293bmVyYCwgYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgLCBgcGFnZV90YWJsZV9jaGVja19zZXRgLCBhbmQgYF9fcGFnZV90YWJsZV9jaGVja196ZXJvYC4gQmFzZWQgb24gdGhlaXIgbmFtZXMgYW5kIHRoZSBjb250ZXh0LCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgIGFuZCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgYXJlIGdvaW5nIHRvIGJlIGludm9rZWQgb24gYWxtb3N0IGV2ZXJ5IHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBhc3N1bWluZyBgUEFHRV9PV05FUmAgaXMgYWN0aXZlLiBUaGV5JiMzOTtyZSBoYW5kbGluZyB0cmFja2luZyBwYWdlIG93bmVyc2hpcCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIG1lbW9yeSBtYW5hZ2VtZW50LgoKU2ltaWxhcmx5LCB0aGUgYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgLCBgcGFnZV90YWJsZV9jaGVja19zZXRgLCBhbmQgYF9fcGFnZV90YWJsZV9jaGVja196ZXJvYCBmdW5jdGlvbnMgYXJlIGxpa2VseSB0aWVkIHRvIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gYFBBR0VfVEFCTEVfQ0hFQ0tgIGlzIGVuYWJsZWQuIFRoZXkgYXJlIHByb2JhYmx5IHVzZWQgZm9yIGRldGVjdGluZyBhbmQgbG9nZ2luZyBjb3JydXB0aW9uLCB3aGljaCBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmcuCgpUaGUga2V5IHF1ZXN0aW9uIG5vdyBpcyBwZXJmb3JtYW5jZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgcG90ZW50aWFsbHkgaGlnaCBmcmVxdWVuY3kgb2YgY2FsbHMgdG8gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlYC4gR2l2ZW4gaXRzIGxpa2VseSByb2xlIGluIGV2ZXJ5IGFsbG9jYXRpb24sIHRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZmlyc3QuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgYSBob3QgcGF0aCwgb3IgaWYgaXQmIzM5O3MgYWRkaW5nIGEgbWVhc3VyYWJsZSBvdmVyaGVhZC4gSXQgaXMgcG9zc2libGUsIGlmIG9wdGltaXplZCwgaXQgaXMgbm90IGEgYmlnIGNvbmNlcm4uIEkgbmVlZCB0byBtZWFzdXJlIGFuZCBwcm9maWxlIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYz0yMzE9c3RhdGljIHZvaWQgZGVjX3N0YWNrX3JlY29yZF9jb3VudChkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXG4tLVxubW0vcGFnZV9vd25lci5jLTI0My1cbm1tL3BhZ2Vfb3duZXIuYzoyNDQ6c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9vd25lci5jLTI0NS1cdFx0XHRcdFx0ICAgICAgZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zMzU9bm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcbi0tXG5tbS9wYWdlX293bmVyLmMtMzQxLVx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XG5tbS9wYWdlX293bmVyLmM6MzQyOlx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIC0xLFxubW0vcGFnZV9vd25lci5jLTM0My1cdFx0XHRcdCAgIHRzX25zZWMsIGN1cnJlbnQtXHUwMDNlcGlkLCBjdXJyZW50LVx1MDAzZXRnaWQsXG4tLVxubW0vcGFnZV9vd25lci5jPTM3NT12b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbi0tXG5tbS9wYWdlX293bmVyLmMtMzk3LVx0bWlncmF0ZV9oYW5kbGUgPSBuZXdfcGFnZV9vd25lci1cdTAwM2VoYW5kbGU7XG5tbS9wYWdlX293bmVyLmM6Mzk4Olx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlaGFuZGxlLFxubW0vcGFnZV9vd25lci5jLTM5OS1cdFx0XHRcdCAgIG9sZF9wYWdlX293bmVyLVx1MDAzZW9yZGVyLCBvbGRfcGFnZV9vd25lci1cdTAwM2VnZnBfbWFzayxcbi0tXG5tbS9wYWdlX293bmVyLmM9NzcyPXN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX293bmVyLmMtODI3LVx0XHRcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXG5tbS9wYWdlX293bmVyLmM6ODI4Olx0XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcbm1tL3BhZ2Vfb3duZXIuYy04MjktXHRcdFx0XHRcdFx0ICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Nzg0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlBhZ2UgT3duZXJzaGlwIGluIHRoZSBLZXJuZWw6IEEgUXVpY2sgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcGFnZSBvd25lcnNoaXAgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLkkgcmVtZW1iZXIgdGhhdCB0aGUgYF9fc2V0X3BhZ2Vfb3duZXJgIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGEgcGFnZSwgdGhhdCBtYWtlcyBzZW5zZS4gVGhlbiwgSSByZWNhbGwgdGhhdCBgX19zcGxpdF9wYWdlX293bmVyYCBjb21lcyBpbnRvIHBsYXkgd2hlbiBhIHBhZ2UgaXMgc3BsaXQgaW50byBzbWFsbGVyIHVuaXRzLiBBbmQgZmluYWxseSwgd2hlbiBhIGZvbGlvIGlzIGNvcGllZCwgcGFydGljdWxhcmx5IGR1cmluZyBtaWdyYXRpb24sIHRoZSBrZXJuZWwgdXNlcyBgX19mb2xpb19jb3B5X293bmVyYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBpbnRlZ3JpdHkgb2Ygb3VyIHBhZ2UgbWFuYWdlbWVudCBzeXN0ZW0uCgpOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgIGFuZCBgcGFnZV90YWJsZV9jaGVja19zZXRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaW5jb25zaXN0ZW5jaWVzIGNyZWVwaW5nIGluIGR1cmluZyB0aGVzZSBvcGVyYXRpb25zLCB3aGljaCBjb3VsZCBsZWFkIHRvIG5hc3R5IG1lbW9yeSBsZWFrcyBvciwgd29yc2UsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gdGhvc2UgZnVuY3Rpb25zIGFuZCBtYWtlIHN1cmUgdGhleSYjMzk7cmUgYWRoZXJpbmcgdG8gdGhlIGV4cGVjdGVkIHNlbWFudGljcyBvZiB0aGUgb3duZXJzaGlwIHN5c3RlbSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlc2UgY29yZSBhbGxvY2F0aW9uLCBzcGxpdCwgYW5kIGNvcHkgcm91dGluZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGlzIGlzIHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3RhYmxlX2NoZWNrX2NsZWFyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfdGFibGVfY2hlY2suYz01Mz1zdGF0aWMgc3RydWN0IHBhZ2VfdGFibGVfY2hlY2sgKmdldF9wYWdlX3RhYmxlX2NoZWNrKHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTYyLSAqL1xubW0vcGFnZV90YWJsZV9jaGVjay5jOjYzOnN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQpXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNjQte1xuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xNDg9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE1NC1cdGlmIChwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB0ZSkpXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTU1Olx0XHRwYWdlX3RhYmxlX2NoZWNrX2NsZWFyKHB0ZV9wZm4ocHRlKSwgUEFHRV9TSVpFIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNTYtfVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xNTk9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE2NS1cdGlmIChwbWRfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHBtZCkpXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTY2Olx0XHRwYWdlX3RhYmxlX2NoZWNrX2NsZWFyKHBtZF9wZm4ocG1kKSwgUE1EX1NJWkUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTE2Ny19XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE3MD12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTc2LVx0aWYgKHB1ZF91c2VyX2FjY2Vzc2libGVfcGFnZShtbSwgYWRkciwgcHVkKSlcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxNzc6XHRcdHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIocHVkX3BmbihwdWQpLCBQVURfU0laRSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTc4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb3QgUGF0aHMgYW5kIFplcm8gUGFnZSBDb3VudHMqKgoKT2theSwgdGhlc2UgZnVuY3Rpb25zLCBgX19zZXRfcGFnZV9vd25lcmAgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyYCwgYXJlIGRlZmluaXRlbHkgb24gdGhlIGhvdCBwYXRoLCBjYWxsZWQgYWxsIHRoZSB0aW1lLiBCdXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgYGZvcl9lYWNoX3BhZ2VfZXh0YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZnVuY3Rpb25hbCwgZml4aW5nIGEgcG90ZW50aWFsIGJ1Zy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBgZm9yX2VhY2hfcGFnZV9leHRgIHdpdGggYF9fcGdjb3VudCA9PSAwYCB3YXMgc3RpbGwgY2FsbGluZyBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYHBhZ2VfZXh0X2xvb2t1cChwZm4pYC4KClNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hlbiB3b3VsZCBgX19wZ2NvdW50YCBiZSB6ZXJvPyBJZiBpdCYjMzk7cyB6ZXJvLCB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgMC1vcmRlciBwYWdlLCByaWdodD8gQnV0IHRoZW4sIGAxICZsdDsmbHQ7IG9yZGVyYCBpcyBhdCBsZWFzdCAxLCBzbyB0aGUgY2hlY2sgb24gdGhlIHNpemUgb2YgdGhlIHBhZ2UgZXh0IHNlZW1zIG9mZi4KCkxldCBtZSB0aGluay4uLiBjb3VsZCBgcGdjbnRgIGluIGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYCBvciBgcGFnZV90YWJsZV9jaGVja19zZXRgIGJlIHplcm8/IEl0JiMzOTtzIHJlYWxseSBoYXJkIHRvIHJlbWVtYmVyIGVkZ2UgY2FzZXMuIEhhbmcgb24sIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtYWtpbmcgYSBzaWxseSBtaXN0YWtlLiBJJiMzOTttIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIHRoZSBiYXNpYyBzaGlmdCBjb25zdGFudHM6IGBQQUdFX1NJWkUgJmd0OyZndDsgUEFHRV9TSElGVGAgaXMgMSBhbmQgYFBNRF9TSVpFICZndDsmZ3Q7IFBBR0VfU0hJRlRgIGlzIDUxMiwgYWxsIGdvb2QuCgpPa2F5LCBiYWNrIHRvIHRoZSBjb3JlIHF1ZXN0aW9uOiB3aGVuIGlzIGBfX3BnY291bnRgIHplcm8/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBjaGVjayBgX19zcGxpdF9wYWdlX293bmVyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zcGxpdF9wYWdlX293bmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTEyPWV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xMy1cdFx0XHR1bnNpZ25lZCBzaG9ydCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MTQ6ZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMTUtXHRcdFx0aW50IG5ld19vcmRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9MzU9c3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMzgtXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDozOTpcdFx0X19zcGxpdF9wYWdlX293bmVyKHBhZ2UsIG9sZF9vcmRlciwgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQwLX1cbi0tXG5tbS9wYWdlX293bmVyLmM9MzQ4PXZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcbi0tXG5tbS9wYWdlX293bmVyLmMtMzYwLVxubW0vcGFnZV9vd25lci5jOjM2MTp2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcbm1tL3BhZ2Vfb3duZXIuYy0zNjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUGFnZSBUYWJsZSBNYW5pcHVsYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGZvY3VzZWQgb24gYF9fc3BsaXRfcGFnZV9vd25lcmAuIEkgc2VlIGl0IHRha2VzIGBvbGRfb3JkZXJgIGFuZCBgbmV3X29yZGVyYCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2sgb24gaG93IHBhZ2UgZXh0ZW50cyBhcmUgaGFuZGxlZC4gVGhlIGxvb3AgdXNpbmcgYGZvcl9lYWNoX3BhZ2VfZXh0YCB3aXRoIGAxICZsdDsmbHQ7IG9sZF9vcmRlcmAgY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHBhZ2Ugc2l6ZSBhZGp1c3RtZW50cy4gT2YgY291cnNlLCBgMSAmbHQ7Jmx0OyBvbGRfb3JkZXJgIGlzIGFsd2F5cyBhdCBsZWFzdCAxLCBidXQgSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB3ZSBnZXQgYSAqemVybyogY291bnQuCgpUaGUgcXVlc3Rpb24gdGhhdCBhcmlzZXMgaXM6IGFyZSB0aGVyZSBhbnkgc2NlbmFyaW9zIHdoZXJlIGBfX3BnY291bnRgIGJlY29tZXMgemVybz8gTXkgZmlyc3QgdGhvdWdodCBpbW1lZGlhdGVseSBsYW5kcyBvbiBgcGFnZV90YWJsZV9jaGVja19jbGVhcmAsIHNwZWNpZmljYWxseSBpZiBpdCYjMzk7cyBvcGVyYXRpbmcgb24gYSB6ZXJvZWQgY291bnQuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBTbywgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjYWxsZXJzIG9mIGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYC4KCkRpdmluZyBpbnRvIHRoZSBjYWxsZXJzLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcmAgaXMgcGFzc2luZyBgUEFHRV9TSVpFICZndDsmZ3Q7IFBBR0VfU0hJRlRgLCB3aGljaCByZXNvbHZlcyB0byAxLiBgX19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhcmAgaXMgcGFzc2luZyBgUE1EX1NJWkUgJmd0OyZndDsgUEFHRV9TSElGVGAsIHdoaWNoIGlzIDUxMi4gQW5kLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcmAgaXMgcGFzc2luZyBgUFVEX1NJWkUgJmd0OyZndDsgUEFHRV9TSElGVGAsIHdoaWNoIGlzIGEgbGFyZ2UgMjYyMTQ0LiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgZ3JhbnVsYXJpdGllcyB0aGlzIGNoZWNrIGlzIGJlaW5nIGFwcGxpZWQgdG8uCgpOb3csIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb3VudGVycGFydCwgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YC4gTXkgYW5hbHlzaXMgaXNuJiMzOTt0IGNvbXBsZXRlIHdpdGhvdXQgaW52ZXN0aWdhdGluZyB3aGF0JiMzOTtzIGhhcHBlbmluZyBvbiB0aGUgc2V0dGluZyBzaWRlIGFzIHdlbGwuIEkmIzM5O20gbm90aW5nIHRoaXMgZG93biwgc2luY2UgYm90aCBvcGVyYXRpb25zIG5lZWQgdG8gYmUgbG9va2VkIGF0IHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV90YWJsZV9jaGVja19zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV90YWJsZV9jaGVjay5jPTYzPXN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTk2LSAqL1xubW0vcGFnZV90YWJsZV9jaGVjay5jOjk3OnN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfc2V0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHBnY250LFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTk4LVx0XHRcdFx0IGJvb2wgcncpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE5OT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yMTEtXHRpZiAocHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKG1tLCBhZGRyLCBwdGUpKVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIxMjpcdFx0cGFnZV90YWJsZV9jaGVja19zZXQocHRlX3BmbihwdGUpLCBuciwgcHRlX3dyaXRlKHB0ZSkpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxMy19XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTIyOD12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNDEtXHRpZiAocG1kX3VzZXJfYWNjZXNzaWJsZV9wYWdlKG1tLCBhZGRyLCBwbWQpKVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI0MjpcdFx0cGFnZV90YWJsZV9jaGVja19zZXQocG1kX3BmbihwbWQpLCBzdHJpZGUgKiBuciwgcG1kX3dyaXRlKHBtZCkpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTI0My19XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTI0Nj12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNTctXHRpZiAocHVkX3VzZXJfYWNjZXNzaWJsZV9wYWdlKG1tLCBhZGRyLCBwdWQpKVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI1ODpcdFx0cGFnZV90YWJsZV9jaGVja19zZXQocHVkX3BmbihwdWQpLCBzdHJpZGUgKiBuciwgcHVkX3dyaXRlKHB1ZCkpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTI1OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzY2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgWmVyby1WYWx1ZWQgUGFyYW1ldGVyIGluIFBhZ2UgVGFibGUgQ2hlY2tzKioKCk9rYXksIHNvIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXRgIHRha2VzIGFuIGFyZ3VtZW50LCBgbnJgLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIGBucmAgY2FuLCB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcywgbGVnaXRpbWF0ZWx5IGJlIHplcm8uIElmIGl0ICpjYW4qLCB0aGVuIEkgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgbG9naWMgb2YgYF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAgdG8gZW5zdXJlIGl0IGhhbmRsZXMgdGhpcyBlZGdlIGNhc2UgZ3JhY2VmdWxseSwgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhIHplcm8gdmFsdWUuIElmIGl0ICpjYW5ub3QqLCB0aGVuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBpdCAqY291bGQqIGJlIHJlY2VpdmluZyBhIHplcm8gdmFsdWUgYW5kIHdoZXRoZXIgdGhhdCBjb25zdGl0dXRlcyBhIGJ1Zy4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXRgLiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCwgYW5kIHdpdGggd2hhdCB2YWx1ZXMgb2YgYG5yYCwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCB1c2FnZSwgYW5kIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gZGV0ZXJtaW5lIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIHBvc3NpYmlsaXR5IG9mIGEgemVyby12YWx1ZWQgYG5yYCBwYXJhbWV0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTIyLVx0XHRcdFx0ICBwdWRfdCBwdWQpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MjM6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI0LVx0XHRwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgbnIpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTc2PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTgyLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6ODM6XHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSwgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtODQtfVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xODg9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfZmxhZ3MocHRlX3QgcHRlKVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xOTgtXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTk5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjAwLVx0XHRcdFx0IHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsIHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjEzLX1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyMTQ6RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhpcyBgcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIFdoYXQmIzM5O3MgaXQgZG9pbmc/IElzIGl0IGEgY3J1Y2lhbCBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHNvbWV0aGluZyBhbmNpbGxhcnk/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgaXMgaXQgbW9yZSBvZiBhIGdlbmVyYWwgY29uY2VwdC4gRmlyc3QsIEnigJltIGdvaW5nIHRvIGNvbnNpZGVyIGl0cyBuYW1lLCBhcyBpdCB3b3VsZCBhcHBlYXIgdGhpcyBjb2RlIGlzIHdyaXR0ZW4gc28gdGhhdCBuYW1lcyBpbmRpY2F0ZSBmdW5jdGlvbi4gSSYjMzk7bSBpbWFnaW5pbmcgaXQmIzM5O3MgZGVzaWduZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBQYWdlIFRhYmxlIEVudHJpZXMgKFBURXMpIGJlaW5nIHNldCBjb3JyZWN0bHkuIEJ1dCB3aGF0IHNwZWNpZmljYWxseSBkb2VzICYjMzQ7c2V0JiMzNDsgbWVhbiBoZXJlPyBEb2VzIGl0IG1lYW4gdGhlIGV4cGVjdGVkIGJpdHMgYXJlIHNldCBjb3JyZWN0bHk/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGluaXRpYWxpemF0aW9uLCB1cGRhdGluZywgb3IgcGVyaGFwcyBjaGVja2luZyBmb3IgaW5jb25zaXN0ZW5jaWVzPyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgcG9zc2libGUgc2NlbmFyaW9zIHRoaXMgZnVuY3Rpb24gaGFuZGxlcy4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBjb2RlIGl0c2VsZiwgY29uc2lkZXJpbmcgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZSBhbmQgd2hldGhlciB0aGUgb3BlcmF0aW9uIGlzIGF0b21pYyBvciB0aHJlYWQgc2FmZS4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgY29kZSwgYW5kIGhvdyB0byB2ZXJpZnkgaXQuIEnigJlsbCBtYWtlIHN1cmUgdG8gbm90ZSBhbnkgYXNzdW1wdGlvbnMgYW5kIGVkZ2UgY2FzZXMgaXQgbWlnaHQgYmUgZGVzaWduZWQgdG8gaGFuZGxlIGFuZCBpZiB0aGVyZSBpcyBhbnkgcG90ZW50aWFsIGZvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gQW5kIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lLCBob3cgY3JpdGljYWwgaXMgdGhpcyBmdW5jdGlvbiYjMzk7cyBjb3JyZWN0IG9wZXJhdGlvbiB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3Mgc3RhYmlsaXR5IGFuZCBzZWN1cml0eT8gSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIHBvdGVudGlhbCBmb3IgYSBjcml0aWNhbCB2dWxuZXJhYmlsaXR5IHRvIGJlIGV4cG9zZWQuIEnigJlsbCBhcHByb2FjaCB0aGlzIHN5c3RlbWF0aWNhbGx5IHRvIGdhaW4gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTY3Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfcHRlc19hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTY4MC1cdGNhc2UgUEFHRV9TSVpFOlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6NjgxOlx0XHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBwdGUsIG5yKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTY4Mi1cdFx0YnJlYWs7XG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYz0xOTM9dm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jLTIxMC1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmM6MjExOlx0cGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgcHRlLCBucik7XG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jLTIxMi1cbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaD02MjI9c3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjI0LXtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjYyNTpcdHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIHB0ZXZhbCwgbnIpO1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjI2LVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTMzMj1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzMzYtXHRcdGVudHJ5ID0gY2xlYXJfcHRlX2JpdChlbnRyeSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEzMzc6XHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSwgbnIpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMzM4LVx0Zm9yICg7Oykge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTIxPXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjItXHRcdFx0XHQgIHB1ZF90IHB1ZCk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoyMzp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjQtXHRcdHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsIHVuc2lnbmVkIGludCBucik7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Njc9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTc1LVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6NzY6c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC03Ny1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTgyLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6ODM6XHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSwgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtODQtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTEzND1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTM4LVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTM5OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTQwLVx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9NDEwPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTQxMi17XG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDo0MTM6XHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBwdGUsIG5yKTtcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTQxNC1cbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTg4PXN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2ZsYWdzKHB0ZV90IHB0ZSlcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTk4LVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjE5OTp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIwMC1cdFx0XHRcdCBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxMy19XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MjE0OkVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yMTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjY1CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGBzZXRfcHRlc2AgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBgc2V0X3B0ZXNgIGlzIGEgcmVhbGx5IGNvbW1vbiBvcGVyYXRpb24sIHJpZ2h0PyBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzOiBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgYGZvcl9lYWNoX3BhZ2VfZXh0YC4gVGhhdCYjMzk7cyBhIHByZXR0eSB3aWRlIHJlYWNoLiBUaGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBpbXBvcnRhbnQgdG8gdGVzdCB0aG9yb3VnaGx5LiBCZWNhdXNlIGl04oCZcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QtZG8uIE5vIHF1ZXN0aW9ucyB0aGVyZS4KCkxldCYjMzk7cyBzZWUsIHdoYXQgY29uZmlncyBhcmUgcmVsZXZhbnQ/IFdlIG5lZWQgdG8gZW5hYmxlIGBQQUdFX0VYVEVOU0lPTmAsIG9idmlvdXNseSwgc2luY2UgdGhhdCYjMzk7cyB3aGF0IGV2ZXJ5dGhpbmcgZWxzZSBzZWVtcyB0byBoaW5nZSBvbi4gQW5kIGRlZmluaXRlbHkgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIFdhaXQgYSBtaW51dGUuLi4gYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AgYm90aCBkZXBlbmQgb24gYFBBR0VfRVhURU5TSU9OYCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gT2theSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCB3ZSBzaG91bGQgYmUgY29uc2lkZXJpbmcgaGVyZSwgc29tZXRoaW5nIHRoYXQgbWlnaHQgaW1wYWN0IGhvdyB0aGVzZSBmZWF0dXJlcyBpbnRlcmFjdCBvciByZXZlYWwgZGVlcGVyLCByZWxhdGVkIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBBR0VfRVhURU5TSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm1tL0tjb25maWcuZGVidWc6Mjpjb25maWcgUEFHRV9FWFRFTlNJT05cbm1tL0tjb25maWcuZGVidWctMy1cdGJvb2wgXCYjMzQ7RXh0ZW5kIG1lbW1hcCBvbiBleHRyYSBzcGFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYWdlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzU2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBLZXJuZWwgRGVidWdnaW5nIENvbmZpZ3VyYXRpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3VycmVudCBzdGF0dXMgb2Ygc29tZSBjcnVjaWFsIGRlYnVnZ2luZyBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgYW5kIHBhZ2UgdGFibGUgaW50ZWdyaXR5LiBUbyBkbyB0aGF0IGVmZmljaWVudGx5LCBteSBpbml0aWFsIHN0ZXAgaXMgdG8gaGVhZCBkaXJlY3RseSB0byBgbW0vS2NvbmZpZy5kZWJ1Z2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMgZm9yIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBUaGVzZSB0d28gYXJlIGZ1bmRhbWVudGFsIGZvciBpZGVudGlmeWluZyBtZW1vcnkgbGVha3MgYW5kIHN1YnRsZSBjb3JydXB0aW9uIGlzc3Vlcy4gSSBuZWVkIHRvIGtub3cgaWYgdGhleSYjMzk7cmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmRpdGlvbmFsbHkgY29uZmlndXJlZCwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgb3IgYnVpbGQgdHlwZS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGRpY3RhdGUgbXkgbmV4dCBkZWJ1Z2dpbmcgc3RlcHMgYW5kIGluZmx1ZW5jZSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgaW4gdGhlIGtlcm5lbCBsb2dzIG9yIG1lbW9yeSBkdW1wcy4gVGltZSB0byBkaXZlIGludG8gdGhhdCBLY29uZmlnIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX09XTkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMDQtXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXHRib29sIFwmIzM0O1RyYWNrIHBhZ2Ugb3duZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbnM6CgoqKkRlZXAgRGl2ZSBpbnRvIERlYnVnZ2luZyBPcHRpb25zKioKCkFscmlnaHQsIEkgbmVlZCB0byB0cm91Ymxlc2hvb3Qgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZXMsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIHByZXR0eSBzdGFuZGFyZCBvbmUsIGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3IgYWxsIHRob3NlIGRlYnVnZ2luZy1yZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgYFBBR0VfVEFCTEVfQ0hFQ0tgIG9wdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGUgZm9yIHdoYXQgSSBuZWVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1RBQkxFX0NIRUNLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTA1PWNvbmZpZyBQQUdFX09XTkVSXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMjEtXG5tbS9LY29uZmlnLmRlYnVnOjEyMjpjb25maWcgUEFHRV9UQUJMRV9DSEVDS1xubW0vS2NvbmZpZy5kZWJ1Zy0xMjMtXHRib29sIFwmIzM0O0NoZWNrIGZvciBpbnZhbGlkIG1hcHBpbmdzIGluIHVzZXIgcGFnZSB0YWJsZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTEzNS1cbm1tL0tjb25maWcuZGVidWc6MTM2OmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXG5tbS9LY29uZmlnLmRlYnVnLTEzNy1cdGJvb2wgXCYjMzQ7RW5mb3JjZSB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDAwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRW5hYmxpbmcgS2V5IE1lbW9yeSBNYW5hZ2VtZW50IEZlYXR1cmVzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgZW5hYmxlIHRob3NlIGNyaXRpY2FsIGZlYXR1cmVzOiBgUEFHRV9FWFRFTlNJT05gLCBgUEFHRV9PV05FUmAsIGBQQUdFX1RBQkxFX0NIRUNLYCwgYW5kIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gVGhlc2UgYWxsIHNlZW0gbGlrZSB0aGV5JiMzOTtsbCBjb250cmlidXRlIHRvIGEgbW9yZSByb2J1c3QgYW5kIHNlY3VyZSBtZW1vcnkgbW9kZWwuIFdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYFBBR0VfT1dORVJgIHJlcXVpcmluZyB0aGUgYHBhZ2Vfb3duZXI9b25gIGJvb3QgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGV0YWlsLCBhbmQgSSBkb24mIzM5O3Qgd2FudCB0byBtYWtlIGFuIGFzc3VtcHRpb24uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpcyBwcm9wZXJseSBjb25maWd1cmVkIGJlZm9yZSBJIGRvIGFueXRoaW5nLiBPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZG9jdW1lbnRhdGlvbiBvciBjb2RlIGZvciBgUEFHRV9PV05FUmAuIExldCYjMzk7cyBjbGFyaWZ5IGl0cyBiZWhhdmlvciBhbmQgZGVwZW5kZW5jaWVzIGJlZm9yZSBwcm9jZWVkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uYWxpdHkgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2Vfb3duZXI9b24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2FzYW4ucnN0PTk0PWVuYWJsZSBgYENPTkZJR19TVEFDS1RSQUNFYGAuIFRvIGluY2x1ZGUgYWxsb2MgYW5kIGZyZWUgc3RhY2sgdHJhY2VzIG9mIGFmZmVjdGVkXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q6OTU6cGh5c2ljYWwgcGFnZXMsIGVuYWJsZSBgYENPTkZJR19QQUdFX09XTkVSYGAgYW5kIGJvb3Qgd2l0aCBgYHBhZ2Vfb3duZXI9b25gYC5cbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2thc2FuLnJzdC05Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0PTM1PXBhZ2Ugb3duZXIgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gU28sIGlmIHlvdSYjMzk7ZCBsaWtlIHRvIHVzZSBpdCwgeW91IG5lZWRcbkRvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3Q6MzY6dG8gYWRkIFwmIzM0O3BhZ2Vfb3duZXI9b25cJiMzNDsgdG8geW91ciBib290IGNtZGxpbmUuIElmIHRoZSBrZXJuZWwgaXMgYnVpbHRcbkRvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QtMzctd2l0aCBwYWdlIG93bmVyIGFuZCBwYWdlIG93bmVyIGlzIGRpc2FibGVkIGluIHJ1bnRpbWUgZHVlIHRvIG5vdCBlbmFibGluZ1xuLS1cbkRvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3Q9NjU9VXNhZ2Vcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0LTcyLVxuRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdDo3MzoyKSBFbmFibGUgcGFnZSBvd25lcjogYWRkIFwmIzM0O3BhZ2Vfb3duZXI9b25cJiMzNDsgdG8gYm9vdCBjbWRsaW5lLlxuRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdC03NC1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2FzYW4ucnN0PTcyPUtBU0FO5Y+q5pSv5oyBU0xVQuOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rYXNhbi5yc3QtOTAtYGBDT05GSUdfU1RBQ0tUUkFDRWBgIOOAguimgeWMheaLrOWPl+W9seWTjeeJqeeQhumhtemdoueahOWIhumFjeWSjOmHiuaUvuWghuagiOi3n+i4queahOivne+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdDo5MTror7flkK/nlKggYGBDT05GSUdfUEFHRV9PV05FUmBgIOW5tuS9v+eUqCBgYHBhZ2Vfb3duZXI9b25gYCDov5vooYzlvJXlr7zjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rYXNhbi5yc3QtOTItXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGFnZV9vd25lci5yc3Q9MzI9cGFnZSBvd25lcuWcqOm7mOiupOaDheWGteS4i+aYr+emgeeUqOeahOOAguaJgOS7pe+8jOWmguaenOS9oOaDs+S9v+eUqOWug++8jOS9oOmcgOimgeWcqOS9oOeahOWQr+WKqGNtZGxpbmVcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BhZ2Vfb3duZXIucnN0OjMzOuS4reWKoOWFpVwmIzM0O3BhZ2Vfb3duZXI9b25cJiMzNDvjgILlpoLmnpzlhoXmoLjmmK/nlKhwYWdlIG93bmVy5p6E5bu655qE77yM5bm25LiU55Sx5LqO5rKh5pyJ5ZCv55So5ZCv5YqoXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9wYWdlX293bmVyLnJzdC0zNC3pgInpobnogIzlnKjov5DooYzml7bnpoHnlKhwYWdlIG93bmVy77yM6YKj5LmI6L+Q6KGM5pe255qE5byA6ZSA5piv5b6I5bCP55qE44CC5aaC5p6c5Zyo6L+Q6KGM5pe256aB55So77yM5a6D5LiNXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGFnZV9vd25lci5yc3QtNTktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9wYWdlX293bmVyLnJzdDo2MDoyKSDlkK/nlKhwYWdlIG93bmVyOiDmt7vliqAgXCYjMzQ7cGFnZV9vd25lcj1vblwmIzM0OyDliLAgYm9vdCBjbWRsaW5lLlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGFnZV9vd25lci5yc3QtNjEtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvZGV2LXRvb2xzL2thc2FuLnJzdD03Mj1LQVNBTuWPquaUr+aMgVNMVULjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9kZXYtdG9vbHMva2FzYW4ucnN0LTkwLWBgQ09ORklHX1NUQUNLVFJBQ0VgYCDjgILopoHljIXmi6zlj5flvbHpn7/niannkIbpoIHpnaLnmoTliIbphY3lkozph4vmlL7loIbmo6fot5/ouaTnmoToqbHvvIxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3Q6OTE66KuL5ZWT55SoIGBgQ09ORklHX1BBR0VfT1dORVJgYCDkuKbkvb/nlKggYGBwYWdlX293bmVyPW9uYGAg6YCy6KGM5byV5bCO44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9kZXYtdG9vbHMva2FzYW4ucnN0LTkyLVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjA9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzNy0jaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDM4Olx0LyogVXNlZCBieSBwYWdlX293bmVyPW9uIHRvIGRldGVjdCByZWN1cnNpb24gaW4gcGFnZSB0cmFja2luZy4gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDM5LVx0dW5zaWduZWRcdFx0XHRpbl9wYWdlX293bmVyOjE7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xMDU9Y29uZmlnIFBBR0VfT1dORVJcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTExNS1cdCAgZmVhdHVyZSBvbiB5b3VyIGJ1aWxkLCBpdCBpcyBkaXNhYmxlZCBpbiBkZWZhdWx0LiBZb3Ugc2hvdWxkIHBhc3Ncbm1tL0tjb25maWcuZGVidWc6MTE2Olx0ICBcJiMzNDtwYWdlX293bmVyPW9uXCYjMzQ7IHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4gRWF0c1xubW0vS2NvbmZpZy5kZWJ1Zy0xMTctXHQgIGEgZmFpciBhbW91bnQgb2YgbWVtb3J5IGlmIGVuYWJsZWQuIFNlZSB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY0NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDc5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBQYWdlIFRhYmxlIENoZWNrcyBhbmQgUEFHRV9PV05FUiBmb3IgU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGludGVncmF0ZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IHdpdGggc3l6a2FsbGVyLiAgV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWdlIHRhYmxlIGNoZWNrcyBhbmQgYFBBR0VfT1dORVJgLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gd2UgZGlyZWN0bHkgYWRkIGJvb3QgcGFyYW1ldGVycz8gUHJvYmFibHkgbm90LCBidXQgbWF5YmUgc3l6a2FsbGVyIGFscmVhZHkgaGFzIHNvbWV0aGluZywgb3Igd2UgY2FuIGp1c3QgZW5hYmxlIHRoZSBjb25maWcuIEdvb2QgbmV3cywgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgIHNlZW1zIGlkZWFsIGFzIGl0IGVuZm9yY2VzIGBQQUdFX1RBQkxFX0NIRUNLYCB3aXRob3V0IG5lZWRpbmcgYSBib290IHBhcmFtZXRlci4gVGhhdCYjMzk7cyBhIHdpbi4KCk5vdywgd2hlcmUgc2hvdWxkIHN5emthbGxlciYjMzk7cyBmb2N1cyBiZT8gSSBzdGFydGVkIGxpc3RpbmcgZnVuY3Rpb25zIHRvIHRhcmdldDogYF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlYCwgYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgLCBgX19zcGxpdF9wYWdlX293bmVyYCwgYF9fZm9saW9fY29weV9vd25lcmAsIGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYCwgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YCwgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AuIEhvbGQgb24sIGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYCBhbmQgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YCBhcmUgYHN0YXRpY2AuIE5vdCB1c2VmdWwuIFRoZSBleHBvcnRlZCBvbmVzIGFyZSB3aGVyZSB3ZSBzaG91bGQgYmUgbG9va2luZzogYF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAsIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXRgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YCwgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhcmAsIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyYCwgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AuCgpGb3IgYFBBR0VfT1dORVJgLCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBgX19zZXRfcGFnZV9vd25lcmAsIGBfX3NwbGl0X3BhZ2Vfb3duZXJgLCBgX19mb2xpb19jb3B5X293bmVyYCwgYW5kIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgLgoKSSB3YXMgZ2V0dGluZyByZWFkeSB0byBsaXN0IHRoZW0gYXMgZm9jdXMgc3ltYm9scywgYnV0IHdhaXQhIFRoZSBpbnN0cnVjdGlvbnMgZW1waGFzaXplIGF2b2lkaW5nICYjMzQ7Z2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMmIzM0OyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIGBfX3NldF9wYWdlX293bmVyYCBhbmQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAgKmFyZSogaG90IHBhdGhzIOKAkyBwYWdlIGFsbG9jYXRpb25zIGFuZCB1cGRhdGVzIGFyZSBjb3JlIHRvIGV2ZXJ5dGhpbmcuIExpc3RpbmcgdGhlbSBtaWdodCBiaWFzIHRoZSBmdXp6ZXIuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IHRvdWNoZXMgdGhlc2UgaG90IHBhdGggZnVuY3Rpb25zLiBJcyB0aGVyZSBhIHNwZWNpZmljIGZ1bmN0aW9uIHdoZXJlIGBfX3BnY291bnQgPT0gMGAgaXMgdHJpZ2dlcmVkIG9yIHJlbGF0ZWQgdG8gdGhlIHBhdGNoPyBUaGUgcGF0Y2ggbW9kaWZpZXMgYGZvcl9lYWNoX3BhZ2VfZXh0YCB3aXRoIGBjb3VudGAgbGltaXRzLiBDYWxsZXJzIHBhc3MgYDEgJmx0OyZsdDsgb3JkZXJgIG9yIGBwZ2NudGAuIEFuZCBgcGdjbnRgIGlzIHBvdGVudGlhbGx5IGBucmAgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAuIElmIGBucmAgaXMgMCwgd2UmIzM5O3JlIGluIHRoZSBuZXcgYmVoYXZpb3IuIFdoZW4gZG9lcyBgbnJgIGJlY29tZSAwPyBQb3RlbnRpYWxseSB3aXRoIGNlcnRhaW4gbW1hcC9tcHJvdGVjdC9tYWR2aXNlIGNhbGxzLgoKU2luY2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBob3QgcGF0aHMsIHNob3VsZCB3ZSBhdm9pZCB0aGVtIHRvIHByZXZlbnQgYmlhc2luZz8gTWF5YmUgd2Ugc2hvdWxkIGJlIGxpc3RpbmcgdGhlIGxlc3MgaG90IG9uZXMsIGxpa2UgYF9fc3BsaXRfcGFnZV9vd25lcmAgYW5kIGBfX2ZvbGlvX2NvcHlfb3duZXJgLiBIb2xkIG9uLCBgX19zcGxpdF9wYWdlX293bmVyYCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgaHVnZSBwYWdlIHNwbGl0cywgYW5kIGBfX2ZvbGlvX2NvcHlfb3duZXJgIGR1cmluZyBwYWdlIG1pZ3JhdGlvbi4gVGhvc2UgYXJlIG11Y2ggbGVzcyBmcmVxdWVudCB0aGFuIGJhc2ljIHBhZ2UgYWxsb2NhdGlvbi4KClNvLCBoZXJlJiMzOTtzIG15IHJlZmluZWQgbGlzdCBmb3IgYEZvY3VzU3ltYm9sc2A6CgoqICAgYF9fc3BsaXRfcGFnZV9vd25lcmAKKiAgIGBfX2ZvbGlvX2NvcHlfb3duZXJgCiogICBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YAoqICAgYF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldGAKKiAgIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyYAoqICAgYF9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXJgCgpOb3cgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBfX3NwbGl0X3BhZ2Vfb3duZXJgIGlzIGV4cG9ydGVkIG9yIHJlYWNoYWJsZSBmcm9tIHdoZXJlIHdlIGFyZSByaWdodCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3BsaXRfcGFnZV9vd25lciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xMj1leHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMTMtXHRcdFx0dW5zaWduZWQgc2hvcnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjE0OmV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTE1LVx0XHRcdGludCBuZXdfb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTM4LVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6Mzk6XHRcdF9fc3BsaXRfcGFnZV9vd25lcihwYWdlLCBvbGRfb3JkZXIsIG5ld19vcmRlcik7XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC00MC19XG4tLVxubW0vcGFnZV9vd25lci5jPTM0OD12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4tLVxubW0vcGFnZV9vd25lci5jLTM2MC1cbm1tL3BhZ2Vfb3duZXIuYzozNjE6dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG5tbS9wYWdlX293bmVyLmMtMzYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1OTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkRpZ2dpbmcgaW50byBgc3BsaXRfcGFnZV9vd25lcmAqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGlzIGJpdCBvZiBjb2RlLCBhbmQgSSYjMzk7dmUgZ290IGEgY2x1ZTogaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgbHVya2luZyBpbiBgbW0vcGFnZV9vd25lci5jYC4gVGhlIGZ1bmN0aW9uIEkmIzM5O20gYWZ0ZXIgaXMgYHNwbGl0X3BhZ2Vfb3duZXJgLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IG5hbWUsIGFuZCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBhIGZ1bmN0aW9uIHdpdGggYSBwcmV0dHkgc3BlY2lmaWMgbmFtZSwgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCBpdHNlbGYgY2FsbHMgYHNwbGl0X3BhZ2Vfb3duZXJgLgoKQWxyaWdodCwgc2luY2UgSSYjMzk7dmUgcGlubmVkIGRvd24gdGhlIGZ1bmN0aW9uIHRvIGNoZWNrLCBsZXQmIzM5O3MganVzdCB0cmFjZSB0aGUgY2FsbGVycyBvZiBgc3BsaXRfcGFnZV9vd25lcmAgZGlyZWN0bHkuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBjYWxsaW5nIGNvbnRleHQgYnkgZG9pbmcgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfcGFnZV9vd25lciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xMj1leHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMTMtXHRcdFx0dW5zaWduZWQgc2hvcnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjE0OmV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTE1LVx0XHRcdGludCBuZXdfb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTI4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0zNC1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM1OnN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMzYtXHRcdFx0aW50IG5ld19vcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0zOC1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM5Olx0XHRfX3NwbGl0X3BhZ2Vfb3duZXIocGFnZSwgb2xkX29yZGVyLCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDAtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTYwPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC02My19XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo2NDpzdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTY1LVx0XHRcdGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjcyPXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzcxNS1cdFx0Zm9saW9fc3BsaXRfbWVtY2dfcmVmcyhmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jOjM3MTY6XHRcdHNwbGl0X3BhZ2Vfb3duZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jLTM3MTctXHRcdHBnYWxsb2NfdGFnX3NwbGl0KGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcbi0tXG5tbS9odWdldGxiLmM9MzkxOT1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcbi0tXG5tbS9odWdldGxiLmMtMzk1MC1cbm1tL2h1Z2V0bGIuYzozOTUxOlx0XHRzcGxpdF9wYWdlX293bmVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGh1Z2VfcGFnZV9vcmRlcihzcmMpLCBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7XG5tbS9odWdldGxiLmMtMzk1Mi1cdFx0cGdhbGxvY190YWdfc3BsaXQoZm9saW8sIGh1Z2VfcGFnZV9vcmRlcihzcmMpLCBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTMwOTE9c3RhdGljIHZvaWQgX19zcGxpdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTMwOTQtXG5tbS9wYWdlX2FsbG9jLmM6MzA5NTpcdHNwbGl0X3BhZ2Vfb3duZXIocGFnZSwgb3JkZXIsIDApO1xubW0vcGFnZV9hbGxvYy5jLTMwOTYtXHRwZ2FsbG9jX3RhZ19zcGxpdChwYWdlX2ZvbGlvKHBhZ2UpLCBvcmRlciwgMCk7XG4tLVxubW0vcGFnZV9vd25lci5jPTM0OD12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4tLVxubW0vcGFnZV9vd25lci5jLTM2MC1cbm1tL3BhZ2Vfb3duZXIuYzozNjE6dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG5tbS9wYWdlX293bmVyLmMtMzYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IHRob3VnaHRzLCBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgT3duZXIgU3ltYm9scyBmb3IgUGFnZSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHJlcHJlc2VudCB0aGUgJiMzNDtvd25lciYjMzQ7IG9mIGEgcGFnZSBpbiB0aGlzIHN5c3RlbS4gSSYjMzk7dmUgYmVlbiBjb25zaWRlcmluZyBkaWZmZXJlbnQgc3ltYm9scyBhbmQgYF9fc3BsaXRfcGFnZV9vd25lcmAgaW1tZWRpYXRlbHkgc3RyaWtlcyBtZSBhcyBhIHNvbGlkIGNob2ljZS4gSXQmIzM5O3MgY2xlYXJseSBuYW1lZCwgbGlrZWx5IGludHVpdGl2ZSBmb3Igc29tZW9uZSBmYW1pbGlhciB3aXRoIHRoZSBpbnRlcm5hbCB3b3JraW5ncywgYW5kIHNlZW1zIHRvIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2Ygd2hhdCB3ZSBuZWVkLiBIb3dldmVyLCBiZWZvcmUgc2V0dGxpbmcgb24gdGhhdCwgaXQmIzM5O3Mgd29ydGggYSBtb21lbnQgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBhbmQgaWYgdGhlcmUgYXJlIGFsdGVybmF0aXZlcyB0aGF0IG1pZ2h0IGJlIG1vcmUgYXBwcm9wcmlhdGUgaW4gc3BlY2lmaWMgc2NlbmFyaW9zLiBUaGF0IGxlYWRzIG1lIHRvIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IGBfX2ZvbGlvX2NvcHlfb3duZXJgLiBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBzeW1ib2wgaXMgYSBiZXR0ZXIgZml0IG9yIG5vdC4gUGVyaGFwcyBib3RoIGFyZSB2YWxpZCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgZXhhY3QgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mb2xpb19jb3B5X293bmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTE0PWV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTE1LVx0XHRcdGludCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MTY6ZXh0ZXJuIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTE3LWV4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQzLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6NDQ6XHRcdF9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQ1LX1cbi0tXG5tbS9wYWdlX293bmVyLmM9MzYxPXZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLCBpbnQgbmV3X29yZGVyKVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0zNzQtXG5tbS9wYWdlX293bmVyLmM6Mzc1OnZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxubW0vcGFnZV9vd25lci5jLTM3Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPd25lcnNoaXAgVHJhbnNmZXIgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBmb2xpb19jb3B5X293bmVyYCBmdW5jdGlvbi4gSXQgc2VlbXMgaXQmIzM5O3MgYmVpbmcgaW52b2tlZCBkdXJpbmcgdGhlc2UgZm9saW8gbWlncmF0aW9uIHByb2Nlc3Nlcywgc3BlY2lmaWNhbGx5IGZyb20gYG1pZ3JhdGVfZm9saW9fZXh0cmFgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiAgUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbmVlZCBhIGNsZWFyZXIgcGljdHVyZSBvZiAqd2h5KiBpdCYjMzk7cyBiZWluZyBjYWxsZWQgYW5kIHdoZXJlIGVsc2UgaXQmIzM5O3MgaW4gdXNlLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgY2hlY2sgaXRzIGNhbGxlcnM7IGEgcXVpY2sgc2VhcmNoIGZvciBhbGwgdGhlIHBvaW50cyB3aGVyZSBgZm9saW9fY29weV9vd25lcmAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlIHNob3VsZCBzaGVkIHNvbWUgaW1tZWRpYXRlIGxpZ2h0LiAgVW5kZXJzdGFuZGluZyB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHRoaXMgb3duZXJzaGlwIHRyYW5zZmVyIGlzIGhhcHBlbmluZyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fY29weV9vd25lciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xND1leHRlcm4gdm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNS1cdFx0XHRpbnQgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjE2OmV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNy1leHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0zNT1zdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC00MC19XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQyLXtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQzLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6NDQ6XHRcdF9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQ1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD02ND1zdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC02Ny19XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo2ODpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNjkte1xuLS1cbm1tL21pZ3JhdGUuYz03NjI9dm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWlncmF0ZS5jLTg0NS1cbm1tL21pZ3JhdGUuYzo4NDY6XHRmb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlLmMtODQ3LVx0cGdhbGxvY190YWdfc3dhcChuZXdmb2xpbywgZm9saW8pO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zNjE9dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG4tLVxubW0vcGFnZV9vd25lci5jLTM3NC1cbm1tL3BhZ2Vfb3duZXIuYzozNzU6dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG5tbS9wYWdlX293bmVyLmMtMzc2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMjIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXNpbmcgb24gTWVtb3J5IE1hbmFnZW1lbnQgU3ltYm9scyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uICpZZXMqLCBgX19mb2xpb19jb3B5X293bmVyYCBpcyBhIHNvbGlkIHN5bWJvbCB0byByZWFsbHkgZHJpbGwgZG93biBpbnRvLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHRoYXQgcGFydGljdWxhciBzdWJzeXN0ZW0uIE5vdywgd2hhdCAqZWxzZSogaXMgb24gbXkgbWluZD8gSG1tLi4uIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXRgLiBUaGF0IHJpbmdzIGEgYmVsbCwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGZ1bGwgY29udGV4dCB0byBiZSB0aG9yb3VnaC4gSXQmIzM5O3MgcmVsYXRlZCB0byBwYWdlIHRhYmxlcywgSSBrbm93IHRoYXQuIExldCYjMzk7cyBzZWUgaG93IGJvdGggZml0IGludG8gdGhlIGxhcmdlciB2aWV3IG9mIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MjU9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI2LVx0XHRwbWRfdCAqcG1kcCwgcG1kX3QgcG1kLCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjc6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVx0XHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTk1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEwMC1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjEwMTpcdF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChtbSwgYWRkciwgcHVkcCwgcHVkLCBucik7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMDItfVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yNDQ9RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTI0NS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNDY6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNDctXHRcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsXHR1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI1OS19XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MjYwOkVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzg1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhIHRvbzoKCioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgTWFuaXB1bGF0aW9uIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7dmUgYmVlbiB0YWtpbmcgYSBsb29rIGF0IGEgZmV3IGZ1bmN0aW9ucyBoZXJlLCBhbmQgaXQmIzM5O3MgbG9va2luZyBwcmV0dHkgZ29vZCBzbyBmYXIuIFNwZWNpZmljYWxseSwgYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXRgIHNlZW0gdG8gYmUgZG9pbmcgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0LiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gc2V0dGluZyBQYWdlIFVwcGVyIERpcmVjdG9yaWVzIChQVURzKSBhbmQgUGFnZSBNaWRkbGUgRGlyZWN0b3JpZXMgKFBNRHMpIOKAkyBjb3JlIG9wZXJhdGlvbnMgaW4gbWFuYWdpbmcgdGhlIHBhZ2UgdGFibGUgaGllcmFyY2h5LiBJJiMzOTttIHNhdGlzZmllZCB0aGV5IGFyZSBmdW5jdGlvbmluZyBhcyBpbnRlbmRlZCB0byBlc3RhYmxpc2ggdGhlIGJhc2UgZW50cmllcyBmb3IgbWVtb3J5IG1hcHBpbmcuIFNpbWlsYXJseSwgYF9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXJgIGFuZCBgX19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhcmAgc2VlbSB0byBiZSBwcm9wZXJseSBoYW5kbGluZyB0aGUgZGVhbGxvY2F0aW9uIG9mIFBVRHMgYW5kIFBNRHMgcmVzcGVjdGl2ZWx5LCBjcml0aWNhbCBmb3IgZnJlZWluZyB1cCBtZW1vcnkgYW5kIG1haW50YWluaW5nIGNvbnNpc3RlbmN5LiBOb3csIG15IG5leHQgZm9jdXMgaXMgb24gYF9fcGFnZV90YWJsZV9jaGVja196ZXJvYC4gVGhpcyBvbmUgaXMgaW50ZXJlc3Rpbmc7IGxldCYjMzk7cyBkaWcgaW50byB0aGF0IG9uZSBhIGxpdHRsZSBtb3JlLiBJdOKAmXMgcHJvYmFibHkgY2hlY2tpbmcgZm9yIHplcm9lZCBlbnRyaWVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgcHJldmVudGluZyBwb3RlbnRpYWwgbGVha3Mgd2hlbiBtYXBwaW5nIG9yIHVubWFwcGluZyBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcGFnZV90YWJsZV9jaGVja196ZXJvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTE0PWV4dGVybiBzdHJ1Y3QgcGFnZV9leHRfb3BlcmF0aW9ucyBwYWdlX3RhYmxlX2NoZWNrX29wcztcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE1LVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTY6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfemVybyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE3LXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMzctXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDozODpcdF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHBhZ2UsIG9yZGVyKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTM5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD00MT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19mcmVlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtNDUtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDo0NjpcdF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHBhZ2UsIG9yZGVyKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTQ3LX1cbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9OTc9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19zZXQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQsXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTEzMC0gKi9cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMzE6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfemVybyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTEzMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTg0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk9wdGltaXppbmcgUGFnZSBFeHRlbnNpb24gSXRlcmF0aW9uKioKCk9rYXksIHNvIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AgaXMgZ2V0dGluZyBjYWxsZWQgKmEgbG90KiDigJMgZXZlcnkgc2luZ2xlIHRpbWUgd2UgYWxsb2NhdGUgb3IgZnJlZSBhIHBhZ2UuIFRoYXQmIzM5O3MgYSBzZXJpb3VzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGEgaG90IHBhdGggdGhhdCYjMzk7cyByZWFsbHkgaHVydGluZyB1cy4gVGhlIG9idmlvdXMgc29sdXRpb24gaXMgdG8gc2tpcCBgX19wYWdlX3RhYmxlX2NoZWNrX3plcm9gIGFuZCBgX19zZXRfcGFnZV9vd25lcmAuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyBmZWFzaWJsZS4KClRoZSBwYXRjaCBpdHNlbGYgbG9va3Mgc29saWQsIGZ1bmN0aW9uYWxseSBzcGVha2luZy4gSXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBwdXR0aW5nIGl0IHRocm91Z2ggZnV6emluZy4gVGhlIGtleSBjaGFuZ2VzIGFyZSB0byBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgYGZvcl9lYWNoX3BhZ2VfZXh0YCwgd2hlcmUgaXQgaW50cm9kdWNlcyBhIGBjb3VudGAgbGltaXRhdGlvbiB0byB0aGUgaXRlcmF0aW9uLiBUaGlzIGNoYW5nZSBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AsIHNpbmNlIHRoZXNlIGZlYXR1cmVzIGl0ZXJhdGUgdGhyb3VnaCBwYWdlIGV4dGVuc2lvbnMuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgYnJlYWsgYW55dGhpbmcgdW5leHBlY3RlZGx5OiBgUEFHRV9FWFRFTlNJT05gLCBgUEFHRV9PV05FUmAsIGBQQUdFX1RBQkxFX0NIRUNLYCwgYW5kIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gR290dGEgYmUgdGhvcm91Z2ggaGVyZS4KCkFoYSwgYSBzbmFnISBgUEFHRV9PV05FUmAgcmVxdWlyZXMgdGhlIGBwYWdlX293bmVyPW9uYCBib290IHBhcmFtZXRlci4gVGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgU3l6a2FsbGVyIG1pZ2h0IG5vdCBhdXRvbWF0aWNhbGx5IHByb3ZpZGUgaXQsIGJ1dCB0aGVyZSYjMzk7cyBub3QgbXVjaCB3ZSBjYW4gZG8gb24gb3VyIGVuZC4gVGhpcyBpcyBhIHBvaW50IG9mIGNvbmNlcm4uIENhbiB3ZSBwZXJoYXBzIGVuZm9yY2UgYFBBR0VfT1dORVJgIHRocm91Z2ggYSBjb25maWd1cmF0aW9uIG9wdGlvbj8gTGV0JiMzOTtzIGludmVzdGlnYXRlIHRoYXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBBR0VfT1dORVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cdGJvb2wgXCYjMzQ7VHJhY2sgcGFnZSBvd25lclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIzNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0JiMzOTtzIGEgZGlyZWN0IHJlcHJlc2VudGF0aW9uIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBBY2Nlc3MgQ29udHJvbCBNZWNoYW5pc21zKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gcGVyZm9ybSBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGZsYWdzIG9yIGluZGljYXRvcnMgb2YgYSBzcGVjaWZpYyBhY2Nlc3MgY29udHJvbCBlbmZvcmNlbWVudCBwb2xpY3kuIE15IGd1dCBzYXlzIHRvIGxvb2sgZm9yIGFueXRoaW5nIGV4cGxpY2l0bHkgbmFtZWQsIGxpa2UgYFBBR0VfT1dORVJfRU5GT1JDRURgIG9yIHNvbWV0aGluZyB3aXRoIGEgc2ltaWxhciBzZW1hbnRpYyBtZWFuaW5nLiBUaGUgZ29hbCBpcyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gb2J2aW91cywgdXBmcm9udCwgZGVkaWNhdGVkIG1lY2hhbmlzbS4gSXQgY291bGQgYmUgYSBzaW1wbGUgZmxhZywgYSBkZWRpY2F0ZWQgc2VjdGlvbiBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgcGVyaGFwcyBhIGNvbnN0YW50IHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gQ2F0Y2hpbmcgdGhpcyBlYXJseSBpcyBpbXBvcnRhbnQsIGFzIGl0IHdpbGwgbGlrZWx5IGRldGVybWluZSBteSBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEFHRV9PV05FUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q9OTQ9ZW5hYmxlIGBgQ09ORklHX1NUQUNLVFJBQ0VgYC4gVG8gaW5jbHVkZSBhbGxvYyBhbmQgZnJlZSBzdGFjayB0cmFjZXMgb2YgYWZmZWN0ZWRcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2thc2FuLnJzdDo5NTpwaHlzaWNhbCBwYWdlcywgZW5hYmxlIGBgQ09ORklHX1BBR0VfT1dORVJgYCBhbmQgYm9vdCB3aXRoIGBgcGFnZV9vd25lcj1vbmBgLlxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2FzYW4ucnN0LTk2LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rYXNhbi5yc3Q9NzI9S0FTQU7lj6rmlK/mjIFTTFVC44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdC05MC1gYENPTkZJR19TVEFDS1RSQUNFYGAg44CC6KaB5YyF5ous5Y+X5b2x5ZON54mp55CG6aG16Z2i55qE5YiG6YWN5ZKM6YeK5pS+5aCG5qCI6Lef6Liq55qE6K+d77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2FzYW4ucnN0OjkxOuivt+WQr+eUqCBgYENPTkZJR19QQUdFX09XTkVSYGAg5bm25L2/55SoIGBgcGFnZV9vd25lcj1vbmBgIOi/m+ihjOW8leWvvOOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdC05Mi1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9kZXYtdG9vbHMva2FzYW4ucnN0PTcyPUtBU0FO5Y+q5pSv5oyBU0xVQuOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3QtOTAtYGBDT05GSUdfU1RBQ0tUUkFDRWBgIOOAguimgeWMheaLrOWPl+W9semfv+eJqeeQhumggemdoueahOWIhumFjeWSjOmHi+aUvuWghuajp+i3n+i5pOeahOipse+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvZGV2LXRvb2xzL2thc2FuLnJzdDo5MTroq4vllZPnlKggYGBDT05GSUdfUEFHRV9PV05FUmBgIOS4puS9v+eUqCBgYHBhZ2Vfb3duZXI9b25gYCDpgLLooYzlvJXlsI7jgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3QtOTItXG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnPTM5ND1DT05GSUdfTUFHSUNfU1lTUlE9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnOjM5NTpDT05GSUdfUEFHRV9PV05FUj15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWctMzk2LUNPTkZJR19QQUdFX1BPSVNPTklORz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTgzOD1DT05GSUdfU0xVQl9ERUJVR19PTj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6ODM5OkNPTkZJR19QQUdFX09XTkVSPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy04NDAtQ09ORklHX0RFQlVHX1JPREFUQV9URVNUPXlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYz0xMDQ9c3RydWN0IGhpbmljM19jbGVhbl9xdWV1ZV9jdHh0IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYy0xMzAtI2RlZmluZSBTUV9DVFhUX1dRX1BBR0VfSElfUEZOX01BU0sgICAgICAgIEdFTk1BU0soMTksIDApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYzoxMzE6I2RlZmluZSBTUV9DVFhUX1dRX1BBR0VfT1dORVJfTUFTSyAgICAgICAgIEJJVCgyMylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19pby5jLTEzMi0jZGVmaW5lIFNRX0NUWFRfV1FfUEFHRV9TRVQodmFsLCBtZW1iZXIpICBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19pby5jLTE3OS0jZGVmaW5lIFJRX0NUWFRfV1FfUEFHRV9XUUVfVFlQRV9NQVNLICAgICAgR0VOTUFTSygyOSwgMjgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYzoxODA6I2RlZmluZSBSUV9DVFhUX1dRX1BBR0VfT1dORVJfTUFTSyAgICAgICAgIEJJVCgzMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19pby5jLTE4MS0jZGVmaW5lIFJRX0NUWFRfV1FfUEFHRV9TRVQodmFsLCBtZW1iZXIpICBcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjI6I2lmbmRlZiBfX0xJTlVYX1BBR0VfT1dORVJfSFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MzojZGVmaW5lIF9fTElOVVhfUEFHRV9PV05FUl9IXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC00LVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTYtXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo3OiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtOC1leHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9NzQ9c3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC03Ni19XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo3NzojZW5kaWYgLyogQ09ORklHX1BBR0VfT1dORVIgKi9cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjc4OiNlbmRpZiAvKiBfX0xJTlVYX1BBR0VfT1dORVJfSCAqL1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjA9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzNi0jZW5kaWZcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDM3OiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMzgtXHQvKiBVc2VkIGJ5IHBhZ2Vfb3duZXI9b24gdG8gZGV0ZWN0IHJlY3Vyc2lvbiBpbiBwYWdlIHRyYWNraW5nLiAqL1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wc3Atc2V2Lmg9NDI9dHlwZWRlZiBlbnVtIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvcHNwLXNldi5oLTc4LVx0U0VWX1JFVF9JTlZBTElEX01EQVRBX0VOVFJZICAgICAgICA9IDB4MDAxQixcbmluY2x1ZGUvdWFwaS9saW51eC9wc3Atc2V2Lmg6Nzk6XHRTRVZfUkVUX0lOVkFMSURfUEFHRV9PV05FUiAgICAgICAgID0gMHgwMDFDLFxuaW5jbHVkZS91YXBpL2xpbnV4L3BzcC1zZXYuaC04MC1cdFNFVl9SRVRfQUVBRF9PRkxPVyAgICAgICAgICAgICAgICAgPSAweDAwMUQsXG4tLVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnPTU3PUNPTkZJR19QQUdFX0VYVEVOU0lPTj15XG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc6NTg6Q09ORklHX1BBR0VfT1dORVI9eVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTU5LUNPTkZJR19ERUJVR19LTUVNTEVBSz15XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xMT1jb25maWcgREVCVUdfUEFHRUFMTE9DXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0yNS1cdCAgd2l0aCBzdGFjayB0cmFjZXMgb2YgbGFzdCBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIHRoZSBwYWdlLCB3aGVuXG5tbS9LY29uZmlnLmRlYnVnOjI2Olx0ICBQQUdFX09XTkVSIGlzIGFsc28gc2VsZWN0ZWQgYW5kIGVuYWJsZWQgb24gYm9vdC5cbm1tL0tjb25maWcuZGVidWctMjctXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cdGJvb2wgXCYjMzQ7VHJhY2sgcGFnZSBvd25lclwmIzM0O1xuLS1cbm1tL01ha2VmaWxlPTExNj1vYmotJChDT05GSUdfREVCVUdfVk1fUEdUQUJMRSkgJiM0Mzs9IGRlYnVnX3ZtX3BndGFibGUub1xubW0vTWFrZWZpbGU6MTE3Om9iai0kKENPTkZJR19QQUdFX09XTkVSKSAmIzQzOz0gcGFnZV9vd25lci5vXG5tbS9NYWtlZmlsZS0xMTgtb2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICYjNDM7PSBwYWdlX2lzb2xhdGlvbi5vXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUwOTU9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTMwLVxubW0vcGFnZV9hbGxvYy5jOjUxMzE6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG5tbS9wYWdlX2FsbG9jLmMtNTEzMi1cdC8qXG5tbS9wYWdlX2FsbG9jLmM6NTEzMzpcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXG5tbS9wYWdlX2FsbG9jLmMtNTEzNC1cdCAqIHNhdmUgdGhlIHN0YWNrIHdpdGggcGFnZXNldHMubG9jayBoZWxkLiBSZWxlYXNpbmcvcmVhY3F1aXJpbmdcbi0tXG5tbS9wYWdlX2V4dC5jPTgwPXN0YXRpYyBzdHJ1Y3QgcGFnZV9leHRfb3BlcmF0aW9ucyAqcGFnZV9leHRfb3BzW10gX19pbml0ZGF0YSA9IHtcbm1tL3BhZ2VfZXh0LmM6ODE6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG5tbS9wYWdlX2V4dC5jLTgyLVx0XHUwMDI2cGFnZV9vd25lcl9vcHMsXG4tLVxubW0vcGFnZV9vd25lci5jLTE4LS8qXG5tbS9wYWdlX293bmVyLmM6MTk6ICogVE9ETzogdGVhY2ggUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoX19kdW1wX3BhZ2Vfb3duZXIgYW5kIHNhdmVfc3RhY2spXG5tbS9wYWdlX293bmVyLmMtMjAtICogdG8gdXNlIG9mZiBzdGFjayB0ZW1wb3JhbCBzdG9yYWdlXG5tbS9wYWdlX293bmVyLmMtMjEtICovXG5tbS9wYWdlX293bmVyLmM6MjI6I2RlZmluZSBQQUdFX09XTkVSX1NUQUNLX0RFUFRIICgxNilcbm1tL3BhZ2Vfb3duZXIuYy0yMy1cbi0tXG5tbS9wYWdlX293bmVyLmM9MTU1PXN0YXRpYyBub2lubGluZSBkZXBvdF9zdGFja19oYW5kbGVfdCBzYXZlX3N0YWNrKGdmcF90IGZsYWdzKVxubW0vcGFnZV9vd25lci5jLTE1Ni17XG5tbS9wYWdlX293bmVyLmM6MTU3Olx0dW5zaWduZWQgbG9uZyBlbnRyaWVzW1BBR0VfT1dORVJfU1RBQ0tfREVQVEhdO1xubW0vcGFnZV9vd25lci5jLTE1OC1cdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbi0tXG5tbS92bXN0YXQuYz0xNjY1PXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93YmxvY2tjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZylcbi0tXG5tbS92bXN0YXQuYy0xNjgwLSAqIG9mIG90aGVyIHR5cGVzLiBUaGlzIGdpdmVzIGFuIGluZGljYXRpb24gb2YgaG93IHdlbGwgZmFsbGJhY2tzIGFyZSBiZWluZ1xubW0vdm1zdGF0LmM6MTY4MTogKiBjb250YWluZWQgYnkgcm1xdWV1ZV9mYWxsYmFjaygpLiBJdCByZXF1aXJlcyBpbmZvcm1hdGlvbiBmcm9tIFBBR0VfT1dORVJcbm1tL3Ztc3RhdC5jLTE2ODItICogdG8gZGV0ZXJtaW5lIHdoYXQgaXMgZ29pbmcgb25cbi0tXG5tbS92bXN0YXQuYz0xNjg0PXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqcGdkYXQpXG5tbS92bXN0YXQuYy0xNjg1LXtcbm1tL3Ztc3RhdC5jOjE2ODY6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG5tbS92bXN0YXQuYy0xNjg3LVx0aW50IG10eXBlO1xuLS1cbm1tL3Ztc3RhdC5jLTE3MDAtXHRcdHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCk7XG5tbS92bXN0YXQuYzoxNzAxOiNlbmRpZiAvKiBDT05GSUdfUEFHRV9PV05FUiAqL1xubW0vdm1zdGF0LmMtMTcwMi19XG4tLVxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluPTEwOD1MWF9WQUxVRShWTV9ETUFfQ09IRVJFTlQpXG4tLVxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluLTExMC0vKiBsaW51eC9wYWdlX2V4dC5oICovXG5zY3JpcHRzL2dkYi9saW51eC9jb25zdGFudHMucHkuaW46MTExOmlmIElTX0JVSUxUSU4oQ09ORklHX1BBR0VfT1dORVIpOlxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluLTExMi0gICAgTFhfR0RCUEFSU0VEKFBBR0VfRVhUX09XTkVSKVxuLS1cbnNjcmlwdHMvZ2RiL2xpbnV4L2NvbnN0YW50cy5weS5pbj0xNjg9TFhfQ09ORklHKENPTkZJR19TVEFDS0RFUE9UKVxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluOjE2OTpMWF9DT05GSUcoQ09ORklHX1BBR0VfT1dORVIpXG5zY3JpcHRzL2dkYi9saW51eC9jb25zdGFudHMucHkuaW4tMTcwLUxYX0NPTkZJRyhDT05GSUdfU0xVQl9ERUJVRylcbi0tXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5PTEwPWZyb20gbGludXggaW1wb3J0IHV0aWxzLCBzdGFja2RlcG90LCBjb25zdGFudHMsIG1tXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTExLVxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weToxMjppZiBjb25zdGFudHMuTFhfQ09ORklHX1BBR0VfT1dORVI6XG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTEzLSAgICBwYWdlX2V4dF90ID0gdXRpbHMuQ2FjaGVkVHlwZSgmIzM5O3N0cnVjdCBwYWdlX2V4dCYjMzk7KVxuLS1cbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktMTUtXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5OjE2OiAgICBQQUdFX09XTkVSX1NUQUNLX0RFUFRIID0gMTZcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktMTctICAgIFBBR0VfRVhUX09XTkVSID0gY29uc3RhbnRzLkxYX1BBR0VfRVhUX09XTkVSXG4tLVxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weT0zMD1jbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcbi0tXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTQxLSAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ3MsIGZyb21fdHR5KTpcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHk6NDI6ICAgICAgICBpZiBub3QgY29uc3RhbnRzLkxYX0NPTkZJR19QQUdFX09XTkVSOlxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weTo0MzogICAgICAgICAgICByYWlzZSBnZGIuR2RiRXJyb3IoJiMzOTtDT05GSUdfUEFHRV9PV05FUiBkb2VzIG5vdCBlbmFibGUmIzM5OylcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktNDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Mzg0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYXNvbmluZyBUaHJvdWdoIFBhZ2UgRXh0ZW5zaW9uIEl0ZXJhdGlvbiBMaW1pdHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGVyZSBpc24mIzM5O3QgYSBkaXJlY3QgZXF1aXZhbGVudCB0byBgUEFHRV9PV05FUl9FTkZPUkNFRGAsIHdoaWNoIGlzIGEgbGl0dGxlIHVudXN1YWwuIEhvd2V2ZXIsIHdlICpkbyogaGF2ZSBgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRGAsIGFuZCBJIHRoaW5rIHdlIGNhbiBsZXZlcmFnZSB0aGF0LiBNeSBwbGFuIGlzIHRvIGxpc3QgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgUEFHRV9FWFRFTlNJT05gLCBgUEFHRV9PV05FUmAsIGBQQUdFX1RBQkxFX0NIRUNLYCwgYW5kLCBjcnVjaWFsbHksIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4KClRoZSBoZWFydCBvZiB0aGlzIHBhdGNoIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIGBmb3JfZWFjaF9wYWdlX2V4dGAgbWFjcm8sIGFuZCB0aGUgYXNzb2NpYXRlZCBpdGVyYXRvciBmdW5jdGlvbnMgbGlrZSBgcGFnZV9leHRfaXRlcl9iZWdpbmAgYW5kIGBwYWdlX2V4dF9pdGVyX25leHRgLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBpbnRyb2R1Y2luZyBhIGBjb3VudGAgcGFyYW1ldGVyIHRvIGxpbWl0IGhvdyBtYW55IHBhZ2UgZXh0ZW5zaW9ucyB0aGVzZSBpdGVyYXRvcnMgcmV0dXJuLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEl0JiMzOTtzIGFmZmVjdGluZyBzdWJzeXN0ZW1zIHRoYXQgcmVseSBvbiBpdGVyYXRpbmcgdGhyb3VnaCBwYWdlIGV4dGVuc2lvbnMsIHdoaWNoIGluY2x1ZGVzIHRoaW5ncyBsaWtlIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBuZXcgYGNvdW50YCBsaW1pdCBpcyBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHVubmVjZXNzYXJ5IGxvb2t1cHMsIGVzcGVjaWFsbHkgd2hlbiB0aGUgYGNvdW50YCBpcyB6ZXJvIG9yIHdoZW4gd2UmIzM5O3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBwcm9jZXNzaW5nIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlc2Ugc3ltYm9sczogYF9fc3BsaXRfcGFnZV9vd25lcmAsIGBfX2ZvbGlvX2NvcHlfb3duZXJgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YCwgYF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldGAsIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyYCwgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kX2NsZWFyYC4gVGhpcyBpcyBob3cgdGhlIGNoZWNrcyBhcmUgbGlrZWx5IGltcGxlbWVudGVkLCBhbmQgdGhpcyB3aWxsIGJlIHVzZWZ1bCBhcyBhIHJlZmVyZW5jZSB0byB3aGF0IGlzIGNoYW5nZWQuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgdGhlc2Ugc3ltYm9scyBhcmUgdXNlZnVsLiBBaCEgSSBzZWUgdGhhdCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YCBpcyBleHBvcnRlZC4gT2theSwgYnV0IGlzIGl0IGFjdHVhbGx5ICp1c2VkKiBhbnl3aGVyZT8gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20uIEhtbSwgeWVzLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgdGhhdCBpcyB1c2VkIGluIGBzZXRfcHRlc2Agb3Igc2ltaWxhciBjYWxscyByZWxhdGVkIHRvIHB1ZHMuIE5vdyBJIHNob3VsZCBjaGVjayB3aGF0IGlzIGNhbGxpbmcgYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAgdG8gdW5kZXJzdGFuZCBpdHMgdXNlLWNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9NjczPXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGVzX2FueXN6KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjg4LVx0Y2FzZSBQVURfU0laRTpcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjY4OTpcdFx0cGFnZV90YWJsZV9jaGVja19wdWRzX3NldChtbSwgYWRkciwgKHB1ZF90ICopcHRlcCxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTY5MC1cdFx0XHRcdFx0ICBwdGVfcHVkKHB0ZSksIG5yKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yNT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjYtXHRcdHBtZF90ICpwbWRwLCBwbWRfdCBwbWQsIHVuc2lnbmVkIGludCBucik7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoyNzp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjgtXHRcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucik7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9ODY9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtOTQtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDo5NTpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTk2LVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucilcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMDAtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMDE6XHRfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQobW0sIGFkZHIsIHB1ZHAsIHB1ZCwgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTAyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0xNDU9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTQ5LVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTUwOnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTUxLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucilcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0xNTU9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE2My0jZGVmaW5lIHBhZ2VfdGFibGVfY2hlY2tfcG1kX3NldChtbSwgYWRkciwgcG1kcCwgcG1kKVx0cGFnZV90YWJsZV9jaGVja19wbWRzX3NldChtbSwgYWRkciwgcG1kcCwgcG1kLCAxKVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTY0OiNkZWZpbmUgcGFnZV90YWJsZV9jaGVja19wdWRfc2V0KG1tLCBhZGRyLCBwdWRwLCBwdWQpXHRwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KG1tLCBhZGRyLCBwdWRwLCBwdWQsIDEpXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNjUtXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTI0ND1FWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldCk7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQ1LVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI0Njp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI0Ny1cdFx0cHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCxcdHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjU5LX1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNjA6RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTI2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzMjYKCQkJCQkJCW91dHB1dDogMjUxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5OgoKKipUaGUgQ2FsbCBhbmQgdGhlIFRvb2wqKgoKT2theSwgc28gdGhlIHByb21wdCBjb25maXJtcyB0aGUgJiMzNDt0aGV5JiMzNDsgaW4gcXVlc3Rpb24gYXJlIGluZGVlZCB3aGF0IEkgdGhvdWdodCB0aGV5IHdlcmUuIEdvb2QuIE5vdywgaXQmIzM5O3MgdGltZSB0byBsZXZlcmFnZSB0aGUgc2V0LXJlc3VsdHMgdG9vbC4gSSBrbm93IGhvdyB0byBuYXZpZ2F0ZSB0aGlzOyBJJiMzOTtsbCB1c2UgaXQgdG8gc3RydWN0dXJlIGFuZCByZWZpbmUgdGhlIG91dHB1dCBiYXNlZCBvbiB3aGF0IHRoZSBwcm9tcHQgZ2F2ZSBtZS4gTGV0JiMzOTtzIHNlZSBob3cgZWZmaWNpZW50bHkgSSBjYW4gaW50ZWdyYXRlIHRoZSBuZXcgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX0VYVEVOU0lPTiYjMzQ7LAogICAgJiMzNDtQQUdFX09XTkVSJiMzNDssCiAgICAmIzM0O1BBR0VfVEFCTEVfQ0hFQ0smIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3BsaXRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX2NvcHlfb3duZXImIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0JiMzNDssCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldCYjMzQ7LAogICAgJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyJiMzNDssCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBmb3JfZWFjaF9wYWdlX2V4dGAgbWFjcm8gYW5kIGl0cyB1bmRlcmx5aW5nIGl0ZXJhdG9yIGZ1bmN0aW9ucyAoYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gLCBgcGFnZV9leHRfaXRlcl9uZXh0YCkgdG8gbGltaXQgdGhlIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgcmV0dXJuZWQgYmFzZWQgb24gYSBgY291bnRgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc3Vic3lzdGVtcyB0aGF0IGl0ZXJhdGUgb3ZlciBwYWdlIGV4dGVuc2lvbnMgbGlrZSBgUEFHRV9PV05FUmAgYW5kIGBQQUdFX1RBQkxFX0NIRUNLYC4gSXQgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgdW5uZWNlc3NhcnkgbG9va3VwcyB3aGVuIHRoZSBjb3VudCBpcyAwIG9yIHdoZW4gaXRlcmF0aW5nIG92ZXIgYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfRVhURU5TSU9OJiMzNDssCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDSyYjMzQ7LAogICAgJiMzNDtQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zcGxpdF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O19fZm9saW9fY29weV9vd25lciYjMzQ7LAogICAgJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQmIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0JiMzNDssCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXImIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBtYWNybyBhbmQgaXRzIHVuZGVybHlpbmcgaXRlcmF0b3IgZnVuY3Rpb25zIChgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgKSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBiYXNlZCBvbiBhIGBjb3VudGAgcGFyYW1ldGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBzdWJzeXN0ZW1zIHRoYXQgaXRlcmF0ZSBvdmVyIHBhZ2UgZXh0ZW5zaW9ucyBsaWtlIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciB1bm5lY2Vzc2FyeSBsb29rdXBzIHdoZW4gdGhlIGNvdW50IGlzIDAgb3Igd2hlbiBpdGVyYXRpbmcgb3ZlciBhIHNwZWNpZmljIG51bWJlciBvZiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjQ5OjE3LjI2NjE3MzI3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODA1MTI5MzY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX0VYVEVOU0lPTlwiLFxuICAgIFwiUEFHRV9PV05FUlwiLFxuICAgIFwiUEFHRV9UQUJMRV9DSEVDS1wiLFxuICAgIFwiUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3BsaXRfcGFnZV9vd25lclwiLFxuICAgIFwiX19mb2xpb19jb3B5X293bmVyXCIsXG4gICAgXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXRcIixcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldFwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhclwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgZm9yX2VhY2hfcGFnZV9leHRgIG1hY3JvIGFuZCBpdHMgdW5kZXJseWluZyBpdGVyYXRvciBmdW5jdGlvbnMgKGBwYWdlX2V4dF9pdGVyX2JlZ2luYCwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGApIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcGFnZSBleHRlbnNpb25zIHJldHVybmVkIGJhc2VkIG9uIGEgYGNvdW50YCBwYXJhbWV0ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHN1YnN5c3RlbXMgdGhhdCBpdGVyYXRlIG92ZXIgcGFnZSBleHRlbnNpb25zIGxpa2UgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIEl0IHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIHVubmVjZXNzYXJ5IGxvb2t1cHMgd2hlbiB0aGUgY291bnQgaXMgMCBvciB3aGVuIGl0ZXJhdGluZyBvdmVyIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OToxNy4yNjYxODE3NDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzI5NzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxZTYzMmJjZDMzNTVmYTA5MTI3ZmI3MzYzNDUxNmExMGU3ODIyMWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMjE6NDk6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXFxuaW5kZXggNjFlODc2ZTI1NWU4OWMuLmYyM2Q0YjIxOGRhMDc5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxcbkBAIC0xMjAsMTQgKzEyMCwxOCBAQCBzdHJ1Y3QgcGFnZV9leHRfaXRlciB7XFxuICAqIHBhZ2VfZXh0X2l0ZXJfYmVnaW4oKSAtIFByZXBhcmUgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2UgZXh0ZW5zaW9ucy5cXG4gICogQGl0ZXI6IHBhZ2UgZXh0ZW5zaW9uIGl0ZXJhdG9yLlxcbiAgKiBAcGZuOiBQRk4gb2YgdGhlIHBhZ2Ugd2UncmUgaW50ZXJlc3RlZCBpbi5cXG4rICogQGNvdW50OiBtYXhpbXVtIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgdG8gcmV0dXJuLlxcbiAgKlxcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXFxuICAqXFxuICAqIFJldHVybjogTlVMTCBpZiBubyBwYWdlX2V4dCBleGlzdHMgZm9yIHRoaXMgcGFnZS5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2JlZ2luKHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpXFxuIHtcXG4rXFx0aWYgKCFjb3VudClcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbiBcXHRpdGVyLVxcdTAwM2VpbmRleCA9IDA7XFxuIFxcdGl0ZXItXFx1MDAzZXN0YXJ0X3BmbiA9IHBmbjtcXG4gXFx0aXRlci1cXHUwMDNlcGFnZV9leHQgPSBwYWdlX2V4dF9sb29rdXAocGZuKTtcXG5AQCAtMTM4LDE5ICsxNDIsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfYmVnaW4oc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsXFxuIC8qKlxcbiAgKiBwYWdlX2V4dF9pdGVyX25leHQoKSAtIEdldCBuZXh0IHBhZ2UgZXh0ZW5zaW9uXFxuICAqIEBpdGVyOiBwYWdlIGV4dGVuc2lvbiBpdGVyYXRvci5cXG4rICogQGNvdW50OiBtYXhpbXVtIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgdG8gcmV0dXJuLlxcbiAgKlxcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXFxuICAqXFxuICAqIFJldHVybjogTlVMTCBpZiBubyBuZXh0IHBhZ2VfZXh0IGV4aXN0cy5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyLVxcdTAwM2VwYWdlX2V4dCkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0aXRlci1cXHUwMDNlaW5kZXgrKztcXG4rXFx0aWYgKCsraXRlci1cXHUwMDNlaW5kZXggXFx1MDAzZT0gY291bnQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRwZm4gPSBpdGVyLVxcdTAwM2VzdGFydF9wZm4gKyBpdGVyLVxcdTAwM2VpbmRleDtcXG4gXFxuIFxcdGlmIChwYWdlX2V4dF9pdGVyX25leHRfZmFzdF9wb3NzaWJsZShwZm4pKVxcbkBAIC0xODMsOSArMTkwLDkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVcXG4gICogSU1QT1JUQU5UOiBtdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXFxuICAqL1xcbiAjZGVmaW5lIGZvcl9lYWNoX3BhZ2VfZXh0KF9fcGFnZSwgX19wZ2NvdW50LCBfX3BhZ2VfZXh0LCBfX2l0ZXIpIFxcXFxcXG4tXFx0Zm9yIChfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9iZWdpbihcXHUwMDI2X19pdGVyLCBwYWdlX3RvX3BmbihfX3BhZ2UpKTtcXFxcXFxuLVxcdFxcdF9fcGFnZV9leHQgXFx1MDAyNlxcdTAwMjYgX19pdGVyLmluZGV4IFxcdTAwM2MgX19wZ2NvdW50OyAgICAgICAgICBcXFxcXFxuLVxcdFxcdF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX25leHQoXFx1MDAyNl9faXRlcikpXFxuK1xcdGZvciAoX19wYWdlX2V4dCA9IHBhZ2VfZXh0X2l0ZXJfYmVnaW4oXFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcXFxcbitcXHRcXHRfX3BhZ2VfZXh0OyBcXFxcXFxuK1xcdFxcdF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX25leHQoXFx1MDAyNl9faXRlciwgX19wZ2NvdW50KSlcXG4gXFxuICNlbHNlIC8qICFDT05GSUdfUEFHRV9FWFRFTlNJT04gKi9cXG4gc3RydWN0IHBhZ2VfZXh0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OToxNy43MjAxOTY0ODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NzU5NzI2MTAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX0VYVEVOU0lPTlwiLFxuICAgIFwiUEFHRV9PV05FUlwiLFxuICAgIFwiUEFHRV9UQUJMRV9DSEVDS1wiLFxuICAgIFwiUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3BsaXRfcGFnZV9vd25lclwiLFxuICAgIFwiX19mb2xpb19jb3B5X293bmVyXCIsXG4gICAgXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXRcIixcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldFwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhclwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgZm9yX2VhY2hfcGFnZV9leHRgIG1hY3JvIGFuZCBpdHMgdW5kZXJseWluZyBpdGVyYXRvciBmdW5jdGlvbnMgKGBwYWdlX2V4dF9pdGVyX2JlZ2luYCwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGApIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcGFnZSBleHRlbnNpb25zIHJldHVybmVkIGJhc2VkIG9uIGEgYGNvdW50YCBwYXJhbWV0ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHN1YnN5c3RlbXMgdGhhdCBpdGVyYXRlIG92ZXIgcGFnZSBleHRlbnNpb25zIGxpa2UgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIEl0IHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIHVubmVjZXNzYXJ5IGxvb2t1cHMgd2hlbiB0aGUgY291bnQgaXMgMCBvciB3aGVuIGl0ZXJhdGluZyBvdmVyIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxZTYzMmJjZDMzNTVmYTA5MTI3ZmI3MzYzNDUxNmExMGU3ODIyMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAyMTo0OToxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxuaW5kZXggNjFlODc2ZTI1NWU4OWMuLmYyM2Q0YjIxOGRhMDc5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhcbkBAIC0xMjAsMTQgKzEyMCwxOCBAQCBzdHJ1Y3QgcGFnZV9leHRfaXRlciB7XG4gICogcGFnZV9leHRfaXRlcl9iZWdpbigpIC0gUHJlcGFyZSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggcGFnZSBleHRlbnNpb25zLlxuICAqIEBpdGVyOiBwYWdlIGV4dGVuc2lvbiBpdGVyYXRvci5cbiAgKiBAcGZuOiBQRk4gb2YgdGhlIHBhZ2Ugd2UncmUgaW50ZXJlc3RlZCBpbi5cbisgKiBAY291bnQ6IG1heGltdW0gbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyB0byByZXR1cm4uXG4gICpcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXG4gICpcbiAgKiBSZXR1cm46IE5VTEwgaWYgbm8gcGFnZV9leHQgZXhpc3RzIGZvciB0aGlzIHBhZ2UuXG4gICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfYmVnaW4oc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsXG4tXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNvdW50KVxuIHtcbitcdGlmICghY291bnQpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0aXRlci1cdTAwM2VpbmRleCA9IDA7XG4gXHRpdGVyLVx1MDAzZXN0YXJ0X3BmbiA9IHBmbjtcbiBcdGl0ZXItXHUwMDNlcGFnZV9leHQgPSBwYWdlX2V4dF9sb29rdXAocGZuKTtcbkBAIC0xMzgsMTkgKzE0MiwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHRfaXRlcl9iZWdpbihzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlcixcbiAvKipcbiAgKiBwYWdlX2V4dF9pdGVyX25leHQoKSAtIEdldCBuZXh0IHBhZ2UgZXh0ZW5zaW9uXG4gICogQGl0ZXI6IHBhZ2UgZXh0ZW5zaW9uIGl0ZXJhdG9yLlxuKyAqIEBjb3VudDogbWF4aW11bSBudW1iZXIgb2YgcGFnZSBleHRlbnNpb25zIHRvIHJldHVybi5cbiAgKlxuICAqIE11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayB0YWtlbi5cbiAgKlxuICAqIFJldHVybjogTlVMTCBpZiBubyBuZXh0IHBhZ2VfZXh0IGV4aXN0cy5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHRfaXRlcl9uZXh0KHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsXG4rXHRcdHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyLVx1MDAzZXBhZ2VfZXh0KSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpdGVyLVx1MDAzZWluZGV4Kys7XG4rXHRpZiAoKytpdGVyLVx1MDAzZWluZGV4IFx1MDAzZT0gY291bnQpXG4rXHRcdHJldHVybiBOVUxMO1xuIFx0cGZuID0gaXRlci1cdTAwM2VzdGFydF9wZm4gKyBpdGVyLVx1MDAzZWluZGV4O1xuIFxuIFx0aWYgKHBhZ2VfZXh0X2l0ZXJfbmV4dF9mYXN0X3Bvc3NpYmxlKHBmbikpXG5AQCAtMTgzLDkgKzE5MCw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2dldChjb25zdCBzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlXG4gICogSU1QT1JUQU5UOiBtdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXG4gICovXG4gI2RlZmluZSBmb3JfZWFjaF9wYWdlX2V4dChfX3BhZ2UsIF9fcGdjb3VudCwgX19wYWdlX2V4dCwgX19pdGVyKSBcXFxuLVx0Zm9yIChfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9iZWdpbihcdTAwMjZfX2l0ZXIsIHBhZ2VfdG9fcGZuKF9fcGFnZSkpO1xcXG4tXHRcdF9fcGFnZV9leHQgXHUwMDI2XHUwMDI2IF9faXRlci5pbmRleCBcdTAwM2MgX19wZ2NvdW50OyAgICAgICAgICBcXFxuLVx0XHRfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9uZXh0KFx1MDAyNl9faXRlcikpXG4rXHRmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcbitcdFx0X19wYWdlX2V4dDsgXFxcbitcdFx0X19wYWdlX2V4dCA9IHBhZ2VfZXh0X2l0ZXJfbmV4dChcdTAwMjZfX2l0ZXIsIF9fcGdjb3VudCkpXG4gXG4gI2Vsc2UgLyogIUNPTkZJR19QQUdFX0VYVEVOU0lPTiAqL1xuIHN0cnVjdCBwYWdlX2V4dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjQ5OjE3LjcyMDE5ODIzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzIyODg4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIEV4dGVuc2lvbiBJdGVyYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyBgaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oYC4gU2VlbXMgbGlrZSBzb21lb25lJ3MgYmVlbiB3b3JraW5nIG9uIGBwYWdlX2V4dF9pdGVyX2JlZ2luYCBhbmQgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAuIFRoZSBiaWcgY2hhbmdlIGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGBjb3VudGAgYXJndW1lbnQuIFRoYXQncyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBtZWFucyB0aGV5J3JlIGFpbWluZyB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBkdXJpbmcgaXRlcmF0aW9uLiBUaGF0IGdpdmVzIHVzIG1vcmUgY29udHJvbCBpbiBzb21lIGluc3RhbmNlcywgYW5kIHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlIGluIG1hbnkuXG5cbk5vdywgdGhleSd2ZSBhbHNvIGdvbmUgYWhlYWQgYW5kIHVwZGF0ZWQgdGhlIGBmb3JfZWFjaF9wYWdlX2V4dGAgbWFjcm8uIEl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiBpcyB0byBwYXNzIGBfX3BnY291bnRgIChvciB3aGF0ZXZlciB2YXJpYWJsZSBpcyBiZWluZyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNvdW50KSB0byB0aG9zZSBpdGVyYXRvciBmdW5jdGlvbnMuIE1ha2VzIHNlbnNlOyB5b3Ugd2FudCB0aGUgbWFjcm8gdG8gcmVzcGVjdCB0aGF0IGxpbWl0LlxuXG5NeSBuZXh0IHN0ZXA/IFdlbGwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcy4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgZmluZCAqZXZlcnkqIHVzZSBvZiBgZm9yX2VhY2hfcGFnZV9leHRgLiBUaGF0J3MgZ29pbmcgdG8gdGVsbCBtZSB3aGVyZSB0aGlzIGNoYW5nZSB3aWxsIGFmZmVjdCB0aGluZ3MsIGFuZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb2RlIHdpbGwgYmVoYXZlIHdpdGggdGhlIGFkZGVkIGNvbnN0cmFpbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCB0aGUgcG90ZW50aWFsIGJlbmVmaXRzLCBhbmQgb2YgY291cnNlIGFueSBwb3NzaWJsZSBzaWRlIGVmZmVjdHMgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OToyMS42OTI0ODkyMDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzNjE5NjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb3JfZWFjaF9wYWdlX2V4dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCIuY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XFxuLS1cXG4uY2xhbmctZm9ybWF0LTM5NC0gIC0gJ2Zvcl9lYWNoX29yX2JpdCdcXG4uY2xhbmctZm9ybWF0OjM5NTogIC0gJ2Zvcl9lYWNoX3BhZ2VfZXh0J1xcbi5jbGFuZy1mb3JtYXQtMzk2LSAgLSAnZm9yX2VhY2hfcGF0aCdcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTE4Mi0vKipcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTgzOiAqIGZvcl9lYWNoX3BhZ2VfZXh0KCk6IGl0ZXJhdGUgdGhyb3VnaCBwYWdlX2V4dCBvYmplY3RzLlxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xODQtICogQF9fcGFnZTogdGhlIHBhZ2Ugd2UncmUgaW50ZXJlc3RlZCBpblxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTE5MS0gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTkyOiNkZWZpbmUgZm9yX2VhY2hfcGFnZV9leHQoX19wYWdlLCBfX3BnY291bnQsIF9fcGFnZV9leHQsIF9faXRlcikgXFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTMtXFx0Zm9yIChfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9iZWdpbihcXHUwMDI2X19pdGVyLCBwYWdlX3RvX3BmbihfX3BhZ2UpLCBfX3BnY291bnQpOyBcXFxcXFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0yNTUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL3BhZ2Vfb3duZXIuYzoyNTY6XFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX293bmVyLmMtMjU3LVxcdFxcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MjczPXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTI4My1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV9vd25lci5jOjI4NDpcXHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbm1tL3BhZ2Vfb3duZXIuYy0yODUtXFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz0zNjE9dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzY3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9wYWdlX293bmVyLmM6MzY4OlxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb2xkX29yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbm1tL3BhZ2Vfb3duZXIuYy0zNjktXFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz0zNzU9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtNDE3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9wYWdlX293bmVyLmM6NDE4OlxcdGZvcl9lYWNoX3BhZ2VfZXh0KFxcdTAwMjZvbGQtXFx1MDAzZXBhZ2UsIDEgXFx1MDAzY1xcdTAwM2MgbmV3X3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbm1tL3BhZ2Vfb3duZXIuYy00MTktXFx0XFx0b2xkX3BhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9NjM9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19jbGVhcih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBwZ2NudClcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy03Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjc4OlxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIHBnY250LCBwYWdlX2V4dCwgaXRlcikge1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy03OS1cXHRcXHRzdHJ1Y3QgcGFnZV90YWJsZV9jaGVjayAqcHRjID0gZ2V0X3BhZ2VfdGFibGVfY2hlY2socGFnZV9leHQpO1xcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTk3PXN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfc2V0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHBnY250LFxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTExMi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjExMzpcXHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTE0LVxcdFxcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTMxPXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3plcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xMzgtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMzk6XFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTQwLVxcdFxcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjQ5OjIzLjcyODY5MTUzN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjQ5MjA5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcGFnZV9leHRgIEl0ZXJhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgaXRlcmF0aW9uIGZ1bmN0aW9ucyBmb3IgYHBhZ2VfZXh0YCBzdHJ1Y3R1cmVzOiBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgY29uc2VxdWVudGx5LCBgZm9yX2VhY2hfcGFnZV9leHRgLiAgVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBpdGVyYXRpb24gaXMgbm93IGV4cGxpY2l0bHkgbGltaXRlZCBieSBhIGBjb3VudGAgcGFyYW1ldGVyLiAgXG5cbkJlZm9yZSwgdGhlIGBmb3JfZWFjaF9wYWdlX2V4dGAgbWFjcm8gbG9va2VkIGxpa2UgdGhpczogdGhlIGxvb3Agd291bGQgKmFsd2F5cyogY2FsbCBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGV2ZW4gaWYgdGhlIGludGVuZGVkIHBhZ2UgY291bnQgKGBfX3BnY291bnRgKSB3YXMgemVyby4gIFRoZW4sIGEgY2hlY2ssIGBfX2l0ZXIuaW5kZXggXHUwMDNjIF9fcGdjb3VudGAsIHdvdWxkIGltbWVkaWF0ZWx5IHNob3J0LWNpcmN1aXQgdGhlIGxvb3AuICBXaGlsZSB0ZWNobmljYWxseSBjb3JyZWN0LCB0aGVyZSB3YXMgYSB3YXN0ZWQgZnVuY3Rpb24gY2FsbC5cblxuTm93LCBJIHNlZSB0aGUgaW1wcm92ZW1lbnQuIGBwYWdlX2V4dF9pdGVyX2JlZ2luYCAqaXRzZWxmKiBjaGVja3MgdGhlIGBjb3VudGAgYXJndW1lbnQuICBJZiBgY291bnRgIGlzIHplcm8sIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYE5VTExgLiAgVGhpcyBpcyBtdWNoIGNsZWFuZXIuXG5cbmBgYGNcbnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2JlZ2luKHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyLFxuXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNvdW50KVxue1xuXHRpZiAoIWNvdW50KVxuXHRcdHJldHVybiBOVUxMO1xuYGBgXG5cblNpbWlsYXJseSwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAgYWxzbyB1c2VzIGBjb3VudGAuXG5cbmBgYGNcbnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsXG5cdFx0dW5zaWduZWQgbG9uZyBjb3VudClcbntcblx0dW5zaWduZWQgbG9uZyBwZm47XG5cblx0aWYgKFdBUk5fT05fT05DRSghaXRlci1cdTAwM2VwYWdlX2V4dCkpXG5cdFx0cmV0dXJuIE5VTEw7XG5cblx0aWYgKCsraXRlci1cdTAwM2VpbmRleCBcdTAwM2U9IGNvdW50KVxuXHRcdHJldHVybiBOVUxMO1xuYGBgXG5cblRoaXMgaXMgYSBnb29kIG9wdGltaXphdGlvbiwgZXNwZWNpYWxseSBpbiBjYXNlcyB3aGVyZSBgX19wZ2NvdW50YCAob3IsIG5vdywgdGhlIGBjb3VudGAgcGFyYW1ldGVyKSBpcyB6ZXJvLiAgSXQgYXZvaWRzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IGNhbGxzIHRvIGBwYWdlX2V4dF9sb29rdXAocGZuKWAsIHdoaWNoIGNvdWxkIGJlIGNvc3RseSBvciwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCBldmVuIHBvc2UgYSBzYWZldHkgY29uY2Vybi4gIEl0IGxvb2tzIGxpa2UgYSBnb29kIGRlZmVuc2l2ZSBjb2RpbmcgbWVhc3VyZS5cblxuQWxzbywgaXQgbWVhbnMgdGhlIGNoZWNrIGZvciBleGl0aW5nIHRoZSBsb29wIGlzIG5vdyBoYW5kbGVkIGludGVybmFsbHkgYnkgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAsIG1ha2luZyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBjb2RlIHNsaWdodGx5IGNsZWFuZXIuXG5cbk5vdywgbGV0J3MganVzdCBxdWlja2x5IHNjYW4gYG1tL3BhZ2Vfb3duZXIuY2AgYW5kIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgIHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIHRob3NlIGFyZWFzLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlIGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NDk6MzEuNDkzNjE0NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMTM2MjI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfUEFHRV9FWFRFTlNJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTc9S2VybmVsIHBhcmFtZXRlcnNcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTE3MjAtXFx0XFx0XFx0bWlnaHQgdGFrZSBsb25nZXIsIGVzcGVjaWFsbHkgb24gc3lzdGVtcyB3aXRoIGEgbG90IG9mXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MTcyMTpcXHRcXHRcXHRtZW1vcnkuIEF2YWlsYWJsZSB3aXRoIENPTkZJR19QQUdFX0VYVEVOU0lPTj15LlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTE3MjItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjEwPUdlbmVyYWxcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMzMtICBgYG5vZGVfcGFnZV9leHRgYCBpcyBhcnJheSBvZiBleHRlbnNpb25zIG9mIHN0cnVjdCBwYWdlcy4gQXZhaWxhYmxlIG9ubHlcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjM0OiAgaW4gdGhlIGtlcm5lbHMgYnVpbHQgd2l0aCBgYENPTkZJR19QQUdFX0VYVEVOU0lPTmBgIGVuYWJsZWQuXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIzNS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjA1PW5vZGVfem9uZWxpc3Rz5byV55So44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIyMS3lr7nkuo7kvb/nlKhGTEFUTUVN5YaF5a2Y5qih5Z6L55qEVU1B57O757uf77yMMOWPt+iKgueCueeahCBgYG5vZGVfcGFnZV9leHRgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjIyOuaYr3N0cnVjdCBwYWdlc+eahOaJqeWxleaVsOe7hOOAguWPquacieWcqOaehOW7uuaXtuW8gOWQr+S6hiBgYENPTkZJR19QQUdFX0VYVEVOU0lPTmBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMjMt6YCJ6aG555qE5YaF5qC45Lit5omN5Y+v55So44CCXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0NjU9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNDgyLVxcdHN0cnVjdCBwYWdlICpub2RlX21lbV9tYXA7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNDgzOiNpZmRlZiBDT05GSUdfUEFHRV9FWFRFTlNJT05cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0ODQtXFx0c3RydWN0IHBhZ2VfZXh0ICpub2RlX3BhZ2VfZXh0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xOTk1PXN0cnVjdCBtZW1fc2VjdGlvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTIwMTAtXFx0c3RydWN0IG1lbV9zZWN0aW9uX3VzYWdlICp1c2FnZTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjIwMTE6I2lmZGVmIENPTkZJR19QQUdFX0VYVEVOU0lPTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMjAxMi1cXHQvKlxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oPTk9c3RydWN0IHBnbGlzdF9kYXRhO1xcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xMC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTE6I2lmZGVmIENPTkZJR19QQUdFX0VYVEVOU0lPTlxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xMi0vKipcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTE5Ni1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTk3OiNlbHNlIC8qICFDT05GSUdfUEFHRV9FWFRFTlNJT04gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgtMTk4LXN0cnVjdCBwYWdlX2V4dDtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0yMzE9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfZXh0X3B1dChzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTIzMy19XFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oOjIzNDojZW5kaWYgLyogQ09ORklHX1BBR0VfRVhURU5TSU9OICovXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTIzNS0jZW5kaWYgLyogX19MSU5VWF9QQUdFX0VYVF9IICovXFxuLS1cXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc9NDY9Q09ORklHX0RFQlVHX05FVD15XFxuLS1cXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNTYtIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjU3OkNPTkZJR19QQUdFX0VYVEVOU0lPTj15XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTU4LUNPTkZJR19QQUdFX09XTkVSPXlcXG4tLVxcbm1tL01ha2VmaWxlPTEyNT1vYmotJChDT05GSUdfQkFMTE9PTikgKz0gYmFsbG9vbi5vXFxubW0vTWFrZWZpbGU6MTI2Om9iai0kKENPTkZJR19QQUdFX0VYVEVOU0lPTikgKz0gcGFnZV9leHQub1xcbm1tL01ha2VmaWxlLTEyNy1vYmotJChDT05GSUdfUEFHRV9UQUJMRV9DSEVDSykgKz0gcGFnZV90YWJsZV9jaGVjay5vXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9kZWJ1Zy5jb25maWc9Nj1DT05GSUdfREVCVUdfSU5GT19EV0FSRjQ9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2RlYnVnLmNvbmZpZzo3OkNPTkZJR19QQUdFX0VYVEVOU0lPTj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvZGVidWcuY29uZmlnLTgtQ09ORklHX1BBR0VfUE9JU09OSU5HPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NDk6MzMuNDI0OTgyNzczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3NzA4NDMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgc29tZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIGBQQUdFX0VYVEVOU0lPTmAsIGBQQUdFX09XTkVSYCwgYW5kIGBQQUdFX1RBQkxFX0NIRUNLYCBhcmUgdGhlIGtleSBvbmVzIHRoYXQgc3RhbmQgb3V0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiV2hlcmUgYXJlIHRoZXNlIGRlZmluZWQgYW5kIGRvY3VtZW50ZWQ/XCIgYW5kIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9LY29uZmlnYC4gSXQncyBhbG1vc3QgYSByZWZsZXggYXQgdGhpcyBwb2ludDsgbWVtb3J5IG1hbmFnZW1lbnQgc3R1ZmYsIEtjb25maWcgaXMgdXN1YWxseSB0aGUgcGxhY2UgdG8gZ28uIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgYFBBR0VfRVhURU5TSU9OYCBpcyBhbGwgYWJvdXQg4oCTIHRoYXQnbGwgbGlrZWx5IGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFsbCB0aHJlZSBhbmQgd2hhdCBjb25maWd1cmF0aW9uIGRlY2lzaW9ucyBhcmUgdGllZCB0byB0aGVtLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGFuY2hvciBmb3IgdGhlIHJlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTozNi40MDIwNjkzMDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3OTg3NzcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9FWFRFTlNJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm1tL0tjb25maWcuZGVidWc6Mjpjb25maWcgUEFHRV9FWFRFTlNJT05cXG5tbS9LY29uZmlnLmRlYnVnLTMtXFx0Ym9vbCBcXFwiRXh0ZW5kIG1lbW1hcCBvbiBleHRyYSBzcGFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYWdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTozOC4xODE5NjAwMjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxMTY3MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIERlYnVnZ2luZyBEaXZlOiBQQUdFX09XTkVSIGFuZCBQQUdFX1RBQkxFX0NIRUNLKipcblxuUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHZlcmlmeWluZyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9mIGEgY291cGxlIG9mIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWcgZmVhdHVyZXM6IGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgd2hlbiBJJ20gdHJhY2tpbmcgZG93biBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFueSBvdGhlciBpc3N1ZXMgZGVlcCB3aXRoaW4gdGhlIG1lbW9yeSBzdWJzeXN0ZW0uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkgYXJlIHVzZWQgYW5kIHZlcmlmeSBpZiB0aGV5IGFyZSBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgaXMgZnVuZGFtZW50YWwgZm9yIG15IG5leHQgZGVidWdnaW5nIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MjksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTo0MS40NTMxMzA1MDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDQ1MjQxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfT1dORVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTA0LVxcbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXFx0Ym9vbCBcXFwiVHJhY2sgcGFnZSBvd25lclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NDk6NDMuMjk3NjYxMjM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTUzNTg3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGBQQUdFX1RBQkxFX0NIRUNLYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgcmlnaHQgaW4uIFRoZSBjdXJyZW50IHN0YXRlIG9mIGFmZmFpcnMgc3VnZ2VzdHMgd2UgbmVlZCB0byBwZXJmb3JtIGEgY3JpdGljYWwgY2hlY2suIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiBgUEFHRV9UQUJMRV9DSEVDS2AuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IGl0J3MgYSBkZWVwIGRpdmUuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBwYWdlIHRhYmxlIHN0cnVjdHVyZS4gQXJlIHRoZSBtYXBwaW5ncyBjb25zaXN0ZW50PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgaW5jb25zaXN0ZW5jaWVzLCBzdWNoIGFzIGVudHJpZXMgcG9pbnRpbmcgdG8gaW52YWxpZCBwaHlzaWNhbCBhZGRyZXNzZXMgb3IsIG1vcmUgaW1wb3J0YW50bHksICp1bm93bmVkKiBwYWdlcyBtYXBwZWQ/IFRoaXMgY2hlY2sgaXMgZm91bmRhdGlvbmFsOyBpZiB0aGUgcGFnZSB0YWJsZSBpc24ndCBzb3VuZCwgdGhlIGVudGlyZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gaXMgcG90ZW50aWFsbHkgY29tcHJvbWlzZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGhhbHQsIGRlYnVnLCBvciB0YWtlIHNvbWUgb3RoZXIgY29ycmVjdGl2ZSBhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTo0Ni4zNTMwMjI2MjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjY0MDA4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0xMDU9Y29uZmlnIFBBR0VfT1dORVJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTIxLVxcbm1tL0tjb25maWcuZGVidWc6MTIyOmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMjMtXFx0Ym9vbCBcXFwiQ2hlY2sgZm9yIGludmFsaWQgbWFwcGluZ3MgaW4gdXNlciBwYWdlIHRhYmxlc1xcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTM1LVxcbm1tL0tjb25maWcuZGVidWc6MTM2OmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMzctXFx0Ym9vbCBcXFwiRW5mb3JjZSB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTo0OC4xMTk0MjkyMDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NDM4MTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhgLiBUaGF0J3MgYSBoZWFkZXIgZmlsZSwgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCdzIGNydWNpYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgd2l0aCBleHRlbnNpb25zIHRvIHBhZ2Ugc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCBpdCdzIHVzZWQgYnkgYG1tL3BhZ2Vfb3duZXIuY2AgYW5kIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLiBUaG9zZSBhcmUgaW1wb3J0YW50IGZpbGVzOyB0aGUgZmlyc3Qgb25lIGRlYWxzIHdpdGggdHJhY2tpbmcgcGFnZSBvd25lcnNoaXAgYW5kIHRoZSBzZWNvbmQgd2l0aCBjaGVja2luZyB0aGUgaW50ZWdyaXR5IG9mIHBhZ2UgdGFibGVzLlxuXG5UaGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlIHRvIGBwYWdlX2V4dF9pdGVyX2JlZ2luYCwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAsIGFuZCB0aGUgbWFjcm8gYGZvcl9lYWNoX3BhZ2VfZXh0YC4gUmlnaHQsIHRob3NlIGFyZSBhbGwgaW5saW5lLCBzbyB0aGUgYWN0dWFsIGNvZGUgaXMgaW5zZXJ0ZWQgZGlyZWN0bHkgd2hlcmUgdGhleSdyZSB1c2VkLiBUaGlzIGlzIGEgY3J1Y2lhbCBwb2ludCBmb3IgZnV6emluZy4gU2luY2UgdGhvc2UgZnVuY3Rpb25zIGFuZCB0aGUgbWFjcm8gYXJlIGlubGluZWQsIHRoZSBmb2N1cyBmb3IgZnV6emluZyBuZWVkcyB0byBzaGlmdCB0byB0aGUgZnVuY3Rpb25zIHRoYXQgKmNhbGwqIGBmb3JfZWFjaF9wYWdlX2V4dGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbWFraW5nIHVzZSBvZiB0aGlzIG1hY3JvIG5vdy4gVGhvc2UgYXJlIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgYXJlIG1vc3QgbGlrZWx5IHRvIHN1cmZhY2UuIFRpbWUgdG8gZmluZCB3aGVyZSB0aGF0IG1hY3JvIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NDk6NTEuODAzODE0ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM3NTYzNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9yX2VhY2hfcGFnZV9leHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiLmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxcbi0tXFxuLmNsYW5nLWZvcm1hdC0zOTQtICAtICdmb3JfZWFjaF9vcl9iaXQnXFxuLmNsYW5nLWZvcm1hdDozOTU6ICAtICdmb3JfZWFjaF9wYWdlX2V4dCdcXG4uY2xhbmctZm9ybWF0LTM5Ni0gIC0gJ2Zvcl9lYWNoX3BhdGgnXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg9MTc3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2dldChjb25zdCBzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xODItLyoqXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oOjE4MzogKiBmb3JfZWFjaF9wYWdlX2V4dCgpOiBpdGVyYXRlIHRocm91Z2ggcGFnZV9leHQgb2JqZWN0cy5cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgtMTg0LSAqIEBfX3BhZ2U6IHRoZSBwYWdlIHdlJ3JlIGludGVyZXN0ZWQgaW5cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTEtICovXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oOjE5MjojZGVmaW5lIGZvcl9lYWNoX3BhZ2VfZXh0KF9fcGFnZSwgX19wZ2NvdW50LCBfX3BhZ2VfZXh0LCBfX2l0ZXIpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgtMTkzLVxcdGZvciAoX19wYWdlX2V4dCA9IHBhZ2VfZXh0X2l0ZXJfYmVnaW4oXFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcXFxcbi0tXFxubW0vcGFnZV9vd25lci5jPTI0ND1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMjU1LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9wYWdlX293bmVyLmM6MjU2OlxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XFxubW0vcGFnZV9vd25lci5jLTI1Ny1cXHRcXHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTI3Mz1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0yODMtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL3BhZ2Vfb3duZXIuYzoyODQ6XFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX293bmVyLmMtMjg1LVxcdFxcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MzYxPXZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTM2Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV9vd25lci5jOjM2ODpcXHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9sZF9vcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX293bmVyLmMtMzY5LVxcdFxcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9Mzc1PXZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTQxNy1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV9vd25lci5jOjQxODpcXHRmb3JfZWFjaF9wYWdlX2V4dChcXHUwMDI2b2xkLVxcdTAwM2VwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG5ld19wYWdlX293bmVyLVxcdTAwM2VvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX293bmVyLmMtNDE5LVxcdFxcdG9sZF9wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTYzPXN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNzctXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzo3ODpcXHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNzktXFx0XFx0c3RydWN0IHBhZ2VfdGFibGVfY2hlY2sgKnB0YyA9IGdldF9wYWdlX3RhYmxlX2NoZWNrKHBhZ2VfZXh0KTtcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz05Nz1zdGF0aWMgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3NldCh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBwZ2NudCxcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xMTItXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMTM6XFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgcGdjbnQsIHBhZ2VfZXh0LCBpdGVyKSB7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTExNC1cXHRcXHRzdHJ1Y3QgcGFnZV90YWJsZV9jaGVjayAqcHRjID0gZ2V0X3BhZ2VfdGFibGVfY2hlY2socGFnZV9leHQpO1xcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTEzMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTM4LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTM5OlxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE0MC1cXHRcXHRzdHJ1Y3QgcGFnZV90YWJsZV9jaGVjayAqcHRjID0gZ2V0X3BhZ2VfdGFibGVfY2hlY2socGFnZV9leHQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTo1My42MDc1Nzc0MTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5ODM2ODc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBPd25lciBhbmQgUGFnZSBUYWJsZSBDaGVjayBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgLCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAsIGBfX3NwbGl0X3BhZ2Vfb3duZXJgLCBgX19mb2xpb19jb3B5X293bmVyYCwgYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgLCBgcGFnZV90YWJsZV9jaGVja19zZXRgLCBhbmQgYF9fcGFnZV90YWJsZV9jaGVja196ZXJvYC4gQmFzZWQgb24gdGhlaXIgbmFtZXMgYW5kIHRoZSBjb250ZXh0LCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgIGFuZCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgYXJlIGdvaW5nIHRvIGJlIGludm9rZWQgb24gYWxtb3N0IGV2ZXJ5IHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBhc3N1bWluZyBgUEFHRV9PV05FUmAgaXMgYWN0aXZlLiBUaGV5J3JlIGhhbmRsaW5nIHRyYWNraW5nIHBhZ2Ugb3duZXJzaGlwLCB3aGljaCBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW5kIHVuZGVyc3RhbmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblNpbWlsYXJseSwgdGhlIGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYCwgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YCwgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdGllZCB0byBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIGBQQUdFX1RBQkxFX0NIRUNLYCBpcyBlbmFibGVkLiBUaGV5IGFyZSBwcm9iYWJseSB1c2VkIGZvciBkZXRlY3RpbmcgYW5kIGxvZ2dpbmcgY29ycnVwdGlvbiwgd2hpY2ggaXMgdXNlZnVsIHdoZW4gZGVidWdnaW5nLlxuXG5UaGUga2V5IHF1ZXN0aW9uIG5vdyBpcyBwZXJmb3JtYW5jZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgcG90ZW50aWFsbHkgaGlnaCBmcmVxdWVuY3kgb2YgY2FsbHMgdG8gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlYC4gR2l2ZW4gaXRzIGxpa2VseSByb2xlIGluIGV2ZXJ5IGFsbG9jYXRpb24sIHRoYXQncyB0aGUgb25lIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmaXJzdC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCdzIGEgaG90IHBhdGgsIG9yIGlmIGl0J3MgYWRkaW5nIGEgbWVhc3VyYWJsZSBvdmVyaGVhZC4gSXQgaXMgcG9zc2libGUsIGlmIG9wdGltaXplZCwgaXQgaXMgbm90IGEgYmlnIGNvbmNlcm4uIEkgbmVlZCB0byBtZWFzdXJlIGFuZCBwcm9maWxlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NDk6NTguMjA1OTQ4Mzg2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkyMTMxNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2Vfb3duZXIuYz0yMzE9c3RhdGljIHZvaWQgZGVjX3N0YWNrX3JlY29yZF9jb3VudChkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMjQzLVxcbm1tL3BhZ2Vfb3duZXIuYzoyNDQ6c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2Vfb3duZXIuYy0yNDUtXFx0XFx0XFx0XFx0XFx0ICAgICAgZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxcbi0tXFxubW0vcGFnZV9vd25lci5jPTMzNT1ub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTM0MS1cXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcXG5tbS9wYWdlX293bmVyLmM6MzQyOlxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSxcXG5tbS9wYWdlX293bmVyLmMtMzQzLVxcdFxcdFxcdFxcdCAgIHRzX25zZWMsIGN1cnJlbnQtXFx1MDAzZXBpZCwgY3VycmVudC1cXHUwMDNldGdpZCxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz0zNzU9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzk3LVxcdG1pZ3JhdGVfaGFuZGxlID0gbmV3X3BhZ2Vfb3duZXItXFx1MDAzZWhhbmRsZTtcXG5tbS9wYWdlX293bmVyLmM6Mzk4OlxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKFxcdTAwMjZuZXdmb2xpby1cXHUwMDNlcGFnZSwgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZWhhbmRsZSxcXG5tbS9wYWdlX293bmVyLmMtMzk5LVxcdFxcdFxcdFxcdCAgIG9sZF9wYWdlX293bmVyLVxcdTAwM2VvcmRlciwgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZWdmcF9tYXNrLFxcbi0tXFxubW0vcGFnZV9vd25lci5jPTc3Mj1zdGF0aWMgdm9pZCBpbml0X3BhZ2VzX2luX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtODI3LVxcdFxcdFxcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXFxubW0vcGFnZV9vd25lci5jOjgyODpcXHRcXHRcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBlYXJseV9oYW5kbGUsIDAsIDAsXFxubW0vcGFnZV9vd25lci5jLTgyOS1cXHRcXHRcXHRcXHRcXHRcXHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cXHUwMDNlcGlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTo1OS45OTgwODU4MDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MDM5MDc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqUGFnZSBPd25lcnNoaXAgaW4gdGhlIEtlcm5lbDogQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgcGFnZSBvd25lcnNoaXAgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uSSByZW1lbWJlciB0aGF0IHRoZSBgX19zZXRfcGFnZV9vd25lcmAgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgdGhlIGFsbG9jYXRpb24gb2YgYSBwYWdlLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGVuLCBJIHJlY2FsbCB0aGF0IGBfX3NwbGl0X3BhZ2Vfb3duZXJgIGNvbWVzIGludG8gcGxheSB3aGVuIGEgcGFnZSBpcyBzcGxpdCBpbnRvIHNtYWxsZXIgdW5pdHMuIEFuZCBmaW5hbGx5LCB3aGVuIGEgZm9saW8gaXMgY29waWVkLCBwYXJ0aWN1bGFybHkgZHVyaW5nIG1pZ3JhdGlvbiwgdGhlIGtlcm5lbCB1c2VzIGBfX2ZvbGlvX2NvcHlfb3duZXJgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGludGVncml0eSBvZiBvdXIgcGFnZSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuTm93LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYCBhbmQgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIGluY29uc2lzdGVuY2llcyBjcmVlcGluZyBpbiBkdXJpbmcgdGhlc2Ugb3BlcmF0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byBuYXN0eSBtZW1vcnkgbGVha3Mgb3IsIHdvcnNlLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhvc2UgZnVuY3Rpb25zIGFuZCBtYWtlIHN1cmUgdGhleSdyZSBhZGhlcmluZyB0byB0aGUgZXhwZWN0ZWQgc2VtYW50aWNzIG9mIHRoZSBvd25lcnNoaXAgc3lzdGVtLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGVzZSBjb3JlIGFsbG9jYXRpb24sIHNwbGl0LCBhbmQgY29weSByb3V0aW5lcy4gTGV0J3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgdGhpcyBpcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc4NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjAzLjc4ODQ3OTM0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwOTk2ODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX3RhYmxlX2NoZWNrX2NsZWFyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfdGFibGVfY2hlY2suYz01Mz1zdGF0aWMgc3RydWN0IHBhZ2VfdGFibGVfY2hlY2sgKmdldF9wYWdlX3RhYmxlX2NoZWNrKHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNjItICovXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjYzOnN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTY0LXtcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xNDg9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTU0LVxcdGlmIChwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB0ZSkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjE1NTpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX2NsZWFyKHB0ZV9wZm4ocHRlKSwgUEFHRV9TSVpFIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNTYtfVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE1OT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNjUtXFx0aWYgKHBtZF91c2VyX2FjY2Vzc2libGVfcGFnZShtbSwgYWRkciwgcG1kKSlcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTY2OlxcdFxcdHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIocG1kX3BmbihwbWQpLCBQTURfU0laRSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTY3LX1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xNzA9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTc2LVxcdGlmIChwdWRfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB1ZCkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjE3NzpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX2NsZWFyKHB1ZF9wZm4ocHVkKSwgUFVEX1NJWkUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE3OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjA1LjU5ODQ2MDc0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjY4ODQ4MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSG90IFBhdGhzIGFuZCBaZXJvIFBhZ2UgQ291bnRzKipcblxuT2theSwgdGhlc2UgZnVuY3Rpb25zLCBgX19zZXRfcGFnZV9vd25lcmAgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyYCwgYXJlIGRlZmluaXRlbHkgb24gdGhlIGhvdCBwYXRoLCBjYWxsZWQgYWxsIHRoZSB0aW1lLiBCdXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgYGZvcl9lYWNoX3BhZ2VfZXh0YC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGZ1bmN0aW9uYWwsIGZpeGluZyBhIHBvdGVudGlhbCBidWcuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgYGZvcl9lYWNoX3BhZ2VfZXh0YCB3aXRoIGBfX3BnY291bnQgPT0gMGAgd2FzIHN0aWxsIGNhbGxpbmcgYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gLCBhbmQgdGhhdCBpbiB0dXJuIGNhbGxzIGBwYWdlX2V4dF9sb29rdXAocGZuKWAuXG5cblNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hlbiB3b3VsZCBgX19wZ2NvdW50YCBiZSB6ZXJvPyBJZiBpdCdzIHplcm8sIHdlIGFyZSBkZWFsaW5nIHdpdGggYSAwLW9yZGVyIHBhZ2UsIHJpZ2h0PyBCdXQgdGhlbiwgYDEgXHUwMDNjXHUwMDNjIG9yZGVyYCBpcyBhdCBsZWFzdCAxLCBzbyB0aGUgY2hlY2sgb24gdGhlIHNpemUgb2YgdGhlIHBhZ2UgZXh0IHNlZW1zIG9mZi5cblxuTGV0IG1lIHRoaW5rLi4uIGNvdWxkIGBwZ2NudGAgaW4gYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgIG9yIGBwYWdlX3RhYmxlX2NoZWNrX3NldGAgYmUgemVybz8gSXQncyByZWFsbHkgaGFyZCB0byByZW1lbWJlciBlZGdlIGNhc2VzLiBIYW5nIG9uLCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gbm90IG1ha2luZyBhIHNpbGx5IG1pc3Rha2UuIEknbSBqdXN0IHF1aWNrbHkgY29uZmlybWluZyB0aGUgYmFzaWMgc2hpZnQgY29uc3RhbnRzOiBgUEFHRV9TSVpFIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUYCBpcyAxIGFuZCBgUE1EX1NJWkUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlRgIGlzIDUxMiwgYWxsIGdvb2QuXG5cbk9rYXksIGJhY2sgdG8gdGhlIGNvcmUgcXVlc3Rpb246IHdoZW4gaXMgYF9fcGdjb3VudGAgemVybz8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgY2hlY2sgYF9fc3BsaXRfcGFnZV9vd25lcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjQzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjEwLjg2NzMxMTYwMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MzA1MDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X3BhZ2Vfb3duZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9MTI9ZXh0ZXJuIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xMy1cXHRcXHRcXHR1bnNpZ25lZCBzaG9ydCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2spO1xcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjE0OmV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNS1cXHRcXHRcXHRpbnQgbmV3X29yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMzgtXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDozOTpcXHRcXHRfX3NwbGl0X3BhZ2Vfb3duZXIocGFnZSwgb2xkX29yZGVyLCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQwLX1cXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz0zNDg9dm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTM2MC1cXG5tbS9wYWdlX293bmVyLmM6MzYxOnZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLCBpbnQgbmV3X29yZGVyKVxcbm1tL3BhZ2Vfb3duZXIuYy0zNjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MDoxMi42NDAzNjcxMzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4Mjk1NTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBUYWJsZSBNYW5pcHVsYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyBmb2N1c2VkIG9uIGBfX3NwbGl0X3BhZ2Vfb3duZXJgLiBJIHNlZSBpdCB0YWtlcyBgb2xkX29yZGVyYCBhbmQgYG5ld19vcmRlcmAsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGNoZWNrIG9uIGhvdyBwYWdlIGV4dGVudHMgYXJlIGhhbmRsZWQuIFRoZSBsb29wIHVzaW5nIGBmb3JfZWFjaF9wYWdlX2V4dGAgd2l0aCBgMSBcdTAwM2NcdTAwM2Mgb2xkX29yZGVyYCBjb25maXJtcyBteSBzdXNwaWNpb24gdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBwYWdlIHNpemUgYWRqdXN0bWVudHMuIE9mIGNvdXJzZSwgYDEgXHUwMDNjXHUwMDNjIG9sZF9vcmRlcmAgaXMgYWx3YXlzIGF0IGxlYXN0IDEsIGJ1dCBJJ20gbG9va2luZyBmb3Igd2hlcmUgd2UgZ2V0IGEgKnplcm8qIGNvdW50LlxuXG5UaGUgcXVlc3Rpb24gdGhhdCBhcmlzZXMgaXM6IGFyZSB0aGVyZSBhbnkgc2NlbmFyaW9zIHdoZXJlIGBfX3BnY291bnRgIGJlY29tZXMgemVybz8gTXkgZmlyc3QgdGhvdWdodCBpbW1lZGlhdGVseSBsYW5kcyBvbiBgcGFnZV90YWJsZV9jaGVja19jbGVhcmAsIHNwZWNpZmljYWxseSBpZiBpdCdzIG9wZXJhdGluZyBvbiBhIHplcm9lZCBjb3VudC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNhbGxlcnMgb2YgYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgLlxuXG5EaXZpbmcgaW50byB0aGUgY2FsbGVycywgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJgIGlzIHBhc3NpbmcgYFBBR0VfU0laRSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVGAsIHdoaWNoIHJlc29sdmVzIHRvIDEuIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kX2NsZWFyYCBpcyBwYXNzaW5nIGBQTURfU0laRSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVGAsIHdoaWNoIGlzIDUxMi4gQW5kLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcmAgaXMgcGFzc2luZyBgUFVEX1NJWkUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlRgLCB3aGljaCBpcyBhIGxhcmdlIDI2MjE0NC4gVGhpcyBnaXZlcyBtZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgZGlmZmVyZW50IGdyYW51bGFyaXRpZXMgdGhpcyBjaGVjayBpcyBiZWluZyBhcHBsaWVkIHRvLlxuXG5Ob3csIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb3VudGVycGFydCwgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YC4gTXkgYW5hbHlzaXMgaXNuJ3QgY29tcGxldGUgd2l0aG91dCBpbnZlc3RpZ2F0aW5nIHdoYXQncyBoYXBwZW5pbmcgb24gdGhlIHNldHRpbmcgc2lkZSBhcyB3ZWxsLiBJJ20gbm90aW5nIHRoaXMgZG93biwgc2luY2UgYm90aCBvcGVyYXRpb25zIG5lZWQgdG8gYmUgbG9va2VkIGF0IHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6MTcuODIzMzI1NzQ0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkzNTMwNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfdGFibGVfY2hlY2tfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfdGFibGVfY2hlY2suYz02Mz1zdGF0aWMgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHBnY250KVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTk2LSAqL1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzo5NzpzdGF0aWMgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3NldCh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBwZ2NudCxcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtOTgtXFx0XFx0XFx0XFx0IGJvb2wgcncpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTk5PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjExLVxcdGlmIChwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB0ZSkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIxMjpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX3NldChwdGVfcGZuKHB0ZSksIG5yLCBwdGVfd3JpdGUocHRlKSk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxMy19XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjI4PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQxLVxcdGlmIChwbWRfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHBtZCkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI0MjpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX3NldChwbWRfcGZuKHBtZCksIHN0cmlkZSAqIG5yLCBwbWRfd3JpdGUocG1kKSk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI0My19XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjQ2PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjU3LVxcdGlmIChwdWRfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB1ZCkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI1ODpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX3NldChwdWRfcGZuKHB1ZCksIHN0cmlkZSAqIG5yLCBwdWRfd3JpdGUocHVkKSk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI1OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjE5LjkxNjg2MjMzNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU4MzU2NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBaZXJvLVZhbHVlZCBQYXJhbWV0ZXIgaW4gUGFnZSBUYWJsZSBDaGVja3MqKlxuXG5Pa2F5LCBzbyBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0YCB0YWtlcyBhbiBhcmd1bWVudCwgYG5yYC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBgbnJgIGNhbiwgdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMsIGxlZ2l0aW1hdGVseSBiZSB6ZXJvLiBJZiBpdCAqY2FuKiwgdGhlbiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGxvZ2ljIG9mIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXRgIHRvIGVuc3VyZSBpdCBoYW5kbGVzIHRoaXMgZWRnZSBjYXNlIGdyYWNlZnVsbHksIGFuZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSB6ZXJvIHZhbHVlLiBJZiBpdCAqY2Fubm90KiwgdGhlbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgaXQgKmNvdWxkKiBiZSByZWNlaXZpbmcgYSB6ZXJvIHZhbHVlIGFuZCB3aGV0aGVyIHRoYXQgY29uc3RpdHV0ZXMgYSBidWcuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXRgLiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCwgYW5kIHdpdGggd2hhdCB2YWx1ZXMgb2YgYG5yYCwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCB1c2FnZSwgYW5kIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gZGV0ZXJtaW5lIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIHBvc3NpYmlsaXR5IG9mIGEgemVyby12YWx1ZWQgYG5yYCBwYXJhbWV0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzY2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6MjMuOTc1MjIyMzQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMxNTUxOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yMi1cXHRcXHRcXHRcXHQgIHB1ZF90IHB1ZCk7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MjM6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yNC1cXHRcXHRwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgbnIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9NzY9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC04Mi1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDo4MzpcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSwgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTg0LX1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xODg9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfZmxhZ3MocHRlX3QgcHRlKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5OC1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTk5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIwMC1cXHRcXHRcXHRcXHQgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxMy19XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIxNDpFWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6MjUuODA2NzgyODEyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzM5MzgxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGlzIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gV2hhdCdzIGl0IGRvaW5nPyBJcyBpdCBhIGNydWNpYWwgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCBvciBzb21ldGhpbmcgYW5jaWxsYXJ5PyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGlzIGl0IG1vcmUgb2YgYSBnZW5lcmFsIGNvbmNlcHQuIEZpcnN0LCBJ4oCZbSBnb2luZyB0byBjb25zaWRlciBpdHMgbmFtZSwgYXMgaXQgd291bGQgYXBwZWFyIHRoaXMgY29kZSBpcyB3cml0dGVuIHNvIHRoYXQgbmFtZXMgaW5kaWNhdGUgZnVuY3Rpb24uIEknbSBpbWFnaW5pbmcgaXQncyBkZXNpZ25lZCB0byB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIFBhZ2UgVGFibGUgRW50cmllcyAoUFRFcykgYmVpbmcgc2V0IGNvcnJlY3RseS4gQnV0IHdoYXQgc3BlY2lmaWNhbGx5IGRvZXMgXCJzZXRcIiBtZWFuIGhlcmU/IERvZXMgaXQgbWVhbiB0aGUgZXhwZWN0ZWQgYml0cyBhcmUgc2V0IGNvcnJlY3RseT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW5pdGlhbGl6YXRpb24sIHVwZGF0aW5nLCBvciBwZXJoYXBzIGNoZWNraW5nIGZvciBpbmNvbnNpc3RlbmNpZXM/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBwb3NzaWJsZSBzY2VuYXJpb3MgdGhpcyBmdW5jdGlvbiBoYW5kbGVzLiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSB0aGUgY29kZSBpdHNlbGYsIGNvbnNpZGVyaW5nIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4gTGV0J3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZSBhbmQgd2hldGhlciB0aGUgb3BlcmF0aW9uIGlzIGF0b21pYyBvciB0aHJlYWQgc2FmZS4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgY29kZSwgYW5kIGhvdyB0byB2ZXJpZnkgaXQuIEnigJlsbCBtYWtlIHN1cmUgdG8gbm90ZSBhbnkgYXNzdW1wdGlvbnMgYW5kIGVkZ2UgY2FzZXMgaXQgbWlnaHQgYmUgZGVzaWduZWQgdG8gaGFuZGxlIGFuZCBpZiB0aGVyZSBpcyBhbnkgcG90ZW50aWFsIGZvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gQW5kIEknbSBnb2luZyB0byBkZXRlcm1pbmUsIGhvdyBjcml0aWNhbCBpcyB0aGlzIGZ1bmN0aW9uJ3MgY29ycmVjdCBvcGVyYXRpb24gdG8gdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgc3RhYmlsaXR5IGFuZCBzZWN1cml0eT8gSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIHBvdGVudGlhbCBmb3IgYSBjcml0aWNhbCB2dWxuZXJhYmlsaXR5IHRvIGJlIGV4cG9zZWQuIEnigJlsbCBhcHByb2FjaCB0aGlzIHN5c3RlbWF0aWNhbGx5IHRvIGdhaW4gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjI5Ljc0MDcyNDE3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NzI2MTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTY3Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfcHRlc19hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjgwLVxcdGNhc2UgUEFHRV9TSVpFOlxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjY4MTpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBwdGUsIG5yKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC02ODItXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jPTE5Mz12b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0yMTAtXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYzoyMTE6XFx0cGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgcHRlLCBucik7XFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0yMTItXFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaD02MjI9c3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC02MjQte1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjYyNTpcXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBwdGV2YWwsIG5yKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC02MjYtXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEzMzI9c3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzMzYtXFx0XFx0ZW50cnkgPSBjbGVhcl9wdGVfYml0KGVudHJ5LCBfX3BncHJvdChfUEFHRV9VTlVTRUQpKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEzMzc6XFx0cGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgZW50cnksIG5yKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzMzgtXFx0Zm9yICg7Oykge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MjE9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjItXFx0XFx0XFx0XFx0ICBwdWRfdCBwdWQpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjIzOnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjQtXFx0XFx0cHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgdW5zaWduZWQgaW50IG5yKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTY3PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTc1LVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjc2OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTc3LVxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTgyLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjgzOlxcdF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgcHRlLCBucik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtODQtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEzOC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMzk6c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTQwLVxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTQxMD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTQxMi17XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6NDEzOlxcdHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSwgbnIpO1xcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTQxNC1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xODg9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfZmxhZ3MocHRlX3QgcHRlKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5OC1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTk5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIwMC1cXHRcXHRcXHRcXHQgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxMy19XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIxNDpFWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6MzEuNTk3OTkxNzYyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjUxOTgyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgYHNldF9wdGVzYCBDb3JlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gYHNldF9wdGVzYCBpcyBhIHJlYWxseSBjb21tb24gb3BlcmF0aW9uLCByaWdodD8gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBhcmVhczogYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gLCBgcGFnZV9leHRfaXRlcl9uZXh0YCwgYW5kIGBmb3JfZWFjaF9wYWdlX2V4dGAuIFRoYXQncyBhIHByZXR0eSB3aWRlIHJlYWNoLiBUaGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBpbXBvcnRhbnQgdG8gdGVzdCB0aG9yb3VnaGx5LiBCZWNhdXNlIGl04oCZcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QtZG8uIE5vIHF1ZXN0aW9ucyB0aGVyZS5cblxuTGV0J3Mgc2VlLCB3aGF0IGNvbmZpZ3MgYXJlIHJlbGV2YW50PyBXZSBuZWVkIHRvIGVuYWJsZSBgUEFHRV9FWFRFTlNJT05gLCBvYnZpb3VzbHksIHNpbmNlIHRoYXQncyB3aGF0IGV2ZXJ5dGhpbmcgZWxzZSBzZWVtcyB0byBoaW5nZSBvbi4gQW5kIGRlZmluaXRlbHkgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIFdhaXQgYSBtaW51dGUuLi4gYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AgYm90aCBkZXBlbmQgb24gYFBBR0VfRVhURU5TSU9OYCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWdzIHRoYXQgd2Ugc2hvdWxkIGJlIGNvbnNpZGVyaW5nIGhlcmUsIHNvbWV0aGluZyB0aGF0IG1pZ2h0IGltcGFjdCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3Qgb3IgcmV2ZWFsIGRlZXBlciwgcmVsYXRlZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjY1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjM1LjkyMzE5MzM4OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NzYzMzU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9FWFRFTlNJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm1tL0tjb25maWcuZGVidWc6Mjpjb25maWcgUEFHRV9FWFRFTlNJT05cXG5tbS9LY29uZmlnLmRlYnVnLTMtXFx0Ym9vbCBcXFwiRXh0ZW5kIG1lbW1hcCBvbiBleHRyYSBzcGFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYWdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MDozNy44MDA4MzI4NTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3MzU5MjE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBLZXJuZWwgRGVidWdnaW5nIENvbmZpZ3VyYXRpb25zKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHNvbWUgY3J1Y2lhbCBkZWJ1Z2dpbmcgb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgYW5kIHBhZ2UgdGFibGUgaW50ZWdyaXR5LiBUbyBkbyB0aGF0IGVmZmljaWVudGx5LCBteSBpbml0aWFsIHN0ZXAgaXMgdG8gaGVhZCBkaXJlY3RseSB0byBgbW0vS2NvbmZpZy5kZWJ1Z2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIFRoZXNlIHR3byBhcmUgZnVuZGFtZW50YWwgZm9yIGlkZW50aWZ5aW5nIG1lbW9yeSBsZWFrcyBhbmQgc3VidGxlIGNvcnJ1cHRpb24gaXNzdWVzLiBJIG5lZWQgdG8ga25vdyBpZiB0aGV5J3JlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25kaXRpb25hbGx5IGNvbmZpZ3VyZWQsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIG9yIGJ1aWxkIHR5cGUuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBkaWN0YXRlIG15IG5leHQgZGVidWdnaW5nIHN0ZXBzIGFuZCBpbmZsdWVuY2Ugd2hhdCBJJ20gbG9va2luZyBmb3IgaW4gdGhlIGtlcm5lbCBsb2dzIG9yIG1lbW9yeSBkdW1wcy4gVGltZSB0byBkaXZlIGludG8gdGhhdCBLY29uZmlnIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzU2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6NDIuNjc0NDI5MTA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM2MDcxMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX09XTkVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxcbm1tL0tjb25maWcuZGVidWctMTA2LVxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjQ0LjUxMDUwODM5MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIzMDQyOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb25zOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIERlYnVnZ2luZyBPcHRpb25zKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHRyb3VibGVzaG9vdCBzb21ldGhpbmcgcmVsYXRlZCB0byBwYWdlIHRhYmxlcywgc28gbGV0J3Mgc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgYXBwcm9hY2guIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYSBwcmV0dHkgc3RhbmRhcmQgb25lLCBpcyB0byBjaGVjayB0aGUgYG1tL0tjb25maWcuZGVidWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3IgYWxsIHRob3NlIGRlYnVnZ2luZy1yZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBgUEFHRV9UQUJMRV9DSEVDS2Agb3B0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3Igd2hhdCBJIG5lZWQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDgwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6NDguNDMzNTU0OTU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg4ODg4ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MTA1PWNvbmZpZyBQQUdFX09XTkVSXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEyMS1cXG5tbS9LY29uZmlnLmRlYnVnOjEyMjpjb25maWcgUEFHRV9UQUJMRV9DSEVDS1xcbm1tL0tjb25maWcuZGVidWctMTIzLVxcdGJvb2wgXFxcIkNoZWNrIGZvciBpbnZhbGlkIG1hcHBpbmdzIGluIHVzZXIgcGFnZSB0YWJsZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEzNS1cXG5tbS9LY29uZmlnLmRlYnVnOjEzNjpjb25maWcgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRFxcbm1tL0tjb25maWcuZGVidWctMTM3LVxcdGJvb2wgXFxcIkVuZm9yY2UgdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6NTAuMzIyNDUzNTQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzc0MTYxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW5hYmxpbmcgS2V5IE1lbW9yeSBNYW5hZ2VtZW50IEZlYXR1cmVzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZyB3ZSBzaG91bGQgZW5hYmxlIHRob3NlIGNyaXRpY2FsIGZlYXR1cmVzOiBgUEFHRV9FWFRFTlNJT05gLCBgUEFHRV9PV05FUmAsIGBQQUdFX1RBQkxFX0NIRUNLYCwgYW5kIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gVGhlc2UgYWxsIHNlZW0gbGlrZSB0aGV5J2xsIGNvbnRyaWJ1dGUgdG8gYSBtb3JlIHJvYnVzdCBhbmQgc2VjdXJlIG1lbW9yeSBtb2RlbC4gV2FpdCBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIHNvbWV0aGluZyBhYm91dCBgUEFHRV9PV05FUmAgcmVxdWlyaW5nIHRoZSBgcGFnZV9vd25lcj1vbmAgYm9vdCBwYXJhbWV0ZXIuIFRoYXQncyBhIGNyaXRpY2FsIGRldGFpbCwgYW5kIEkgZG9uJ3Qgd2FudCB0byBtYWtlIGFuIGFzc3VtcHRpb24uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpcyBwcm9wZXJseSBjb25maWd1cmVkIGJlZm9yZSBJIGRvIGFueXRoaW5nLiBPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZG9jdW1lbnRhdGlvbiBvciBjb2RlIGZvciBgUEFHRV9PV05FUmAuIExldCdzIGNsYXJpZnkgaXRzIGJlaGF2aW9yIGFuZCBkZXBlbmRlbmNpZXMgYmVmb3JlIHByb2NlZWRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb25hbGl0eSBmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MDo1NC41NTk4NzM1MDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzgzNDA5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9vd25lcj1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q9OTQ9ZW5hYmxlIGBgQ09ORklHX1NUQUNLVFJBQ0VgYC4gVG8gaW5jbHVkZSBhbGxvYyBhbmQgZnJlZSBzdGFjayB0cmFjZXMgb2YgYWZmZWN0ZWRcXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q6OTU6cGh5c2ljYWwgcGFnZXMsIGVuYWJsZSBgYENPTkZJR19QQUdFX09XTkVSYGAgYW5kIGJvb3Qgd2l0aCBgYHBhZ2Vfb3duZXI9b25gYC5cXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3QtOTYtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0PTM1PXBhZ2Ugb3duZXIgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gU28sIGlmIHlvdSdkIGxpa2UgdG8gdXNlIGl0LCB5b3UgbmVlZFxcbkRvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3Q6MzY6dG8gYWRkIFxcXCJwYWdlX293bmVyPW9uXFxcIiB0byB5b3VyIGJvb3QgY21kbGluZS4gSWYgdGhlIGtlcm5lbCBpcyBidWlsdFxcbkRvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QtMzctd2l0aCBwYWdlIG93bmVyIGFuZCBwYWdlIG93bmVyIGlzIGRpc2FibGVkIGluIHJ1bnRpbWUgZHVlIHRvIG5vdCBlbmFibGluZ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdD02NT1Vc2FnZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdC03Mi1cXG5Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0OjczOjIpIEVuYWJsZSBwYWdlIG93bmVyOiBhZGQgXFxcInBhZ2Vfb3duZXI9b25cXFwiIHRvIGJvb3QgY21kbGluZS5cXG5Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0LTc0LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdD03Mj1LQVNBTuWPquaUr+aMgVNMVULjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rYXNhbi5yc3QtOTAtYGBDT05GSUdfU1RBQ0tUUkFDRWBgIOOAguimgeWMheaLrOWPl+W9seWTjeeJqeeQhumhtemdoueahOWIhumFjeWSjOmHiuaUvuWghuagiOi3n+i4queahOivne+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rYXNhbi5yc3Q6OTE66K+35ZCv55SoIGBgQ09ORklHX1BBR0VfT1dORVJgYCDlubbkvb/nlKggYGBwYWdlX293bmVyPW9uYGAg6L+b6KGM5byV5a+844CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdC05Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BhZ2Vfb3duZXIucnN0PTMyPXBhZ2Ugb3duZXLlnKjpu5jorqTmg4XlhrXkuIvmmK/npoHnlKjnmoTjgILmiYDku6XvvIzlpoLmnpzkvaDmg7Pkvb/nlKjlroPvvIzkvaDpnIDopoHlnKjkvaDnmoTlkK/liqhjbWRsaW5lXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGFnZV9vd25lci5yc3Q6MzM65Lit5Yqg5YWlXFxcInBhZ2Vfb3duZXI9b25cXFwi44CC5aaC5p6c5YaF5qC45piv55SocGFnZSBvd25lcuaehOW7uueahO+8jOW5tuS4lOeUseS6juayoeacieWQr+eUqOWQr+WKqFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BhZ2Vfb3duZXIucnN0LTM0LemAiemhueiAjOWcqOi/kOihjOaXtuemgeeUqHBhZ2Ugb3duZXLvvIzpgqPkuYjov5DooYzml7bnmoTlvIDplIDmmK/lvojlsI/nmoTjgILlpoLmnpzlnKjov5DooYzml7bnpoHnlKjvvIzlroPkuI1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BhZ2Vfb3duZXIucnN0LTU5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BhZ2Vfb3duZXIucnN0OjYwOjIpIOWQr+eUqHBhZ2Ugb3duZXI6IOa3u+WKoCBcXFwicGFnZV9vd25lcj1vblxcXCIg5YiwIGJvb3QgY21kbGluZS5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9wYWdlX293bmVyLnJzdC02MS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3Q9NzI9S0FTQU7lj6rmlK/mjIFTTFVC44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9kZXYtdG9vbHMva2FzYW4ucnN0LTkwLWBgQ09ORklHX1NUQUNLVFJBQ0VgYCDjgILopoHljIXmi6zlj5flvbHpn7/niannkIbpoIHpnaLnmoTliIbphY3lkozph4vmlL7loIbmo6fot5/ouaTnmoToqbHvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9kZXYtdG9vbHMva2FzYW4ucnN0OjkxOuiri+WVk+eUqCBgYENPTkZJR19QQUdFX09XTkVSYGAg5Lim5L2/55SoIGBgcGFnZV9vd25lcj1vbmBgIOmAsuihjOW8leWwjuOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3QtOTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODIwPXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzNy0jaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTAzODpcXHQvKiBVc2VkIGJ5IHBhZ2Vfb3duZXI9b24gdG8gZGV0ZWN0IHJlY3Vyc2lvbiBpbiBwYWdlIHRyYWNraW5nLiAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDM5LVxcdHVuc2lnbmVkXFx0XFx0XFx0aW5fcGFnZV9vd25lcjoxO1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xMDU9Y29uZmlnIFBBR0VfT1dORVJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTE1LVxcdCAgZmVhdHVyZSBvbiB5b3VyIGJ1aWxkLCBpdCBpcyBkaXNhYmxlZCBpbiBkZWZhdWx0LiBZb3Ugc2hvdWxkIHBhc3NcXG5tbS9LY29uZmlnLmRlYnVnOjExNjpcXHQgIFxcXCJwYWdlX293bmVyPW9uXFxcIiB0byBib290IHBhcmFtZXRlciBpbiBvcmRlciB0byBlbmFibGUgaXQuIEVhdHNcXG5tbS9LY29uZmlnLmRlYnVnLTExNy1cXHQgIGEgZmFpciBhbW91bnQgb2YgbWVtb3J5IGlmIGVuYWJsZWQuIFNlZSB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MDo1Ni4zOTgyMjMwODVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExMTY4MzU1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gUGFnZSBUYWJsZSBDaGVja3MgYW5kIFBBR0VfT1dORVIgZm9yIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gaW50ZWdyYXRlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgd2l0aCBzeXprYWxsZXIuICBXZSdyZSBkZWFsaW5nIHdpdGggcGFnZSB0YWJsZSBjaGVja3MgYW5kIGBQQUdFX09XTkVSYC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIGRpcmVjdGx5IGFkZCBib290IHBhcmFtZXRlcnM/IFByb2JhYmx5IG5vdCwgYnV0IG1heWJlIHN5emthbGxlciBhbHJlYWR5IGhhcyBzb21ldGhpbmcsIG9yIHdlIGNhbiBqdXN0IGVuYWJsZSB0aGUgY29uZmlnLiBHb29kIG5ld3MsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCBzZWVtcyBpZGVhbCBhcyBpdCBlbmZvcmNlcyBgUEFHRV9UQUJMRV9DSEVDS2Agd2l0aG91dCBuZWVkaW5nIGEgYm9vdCBwYXJhbWV0ZXIuIFRoYXQncyBhIHdpbi5cblxuTm93LCB3aGVyZSBzaG91bGQgc3l6a2FsbGVyJ3MgZm9jdXMgYmU/IEkgc3RhcnRlZCBsaXN0aW5nIGZ1bmN0aW9ucyB0byB0YXJnZXQ6IGBfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZWAsIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCwgYF9fc3BsaXRfcGFnZV9vd25lcmAsIGBfX2ZvbGlvX2NvcHlfb3duZXJgLCBgcGFnZV90YWJsZV9jaGVja19jbGVhcmAsIGBwYWdlX3RhYmxlX2NoZWNrX3NldGAsIGFuZCBgX19wYWdlX3RhYmxlX2NoZWNrX3plcm9gLiBIb2xkIG9uLCBgcGFnZV90YWJsZV9jaGVja19jbGVhcmAgYW5kIGBwYWdlX3RhYmxlX2NoZWNrX3NldGAgYXJlIGBzdGF0aWNgLiBOb3QgdXNlZnVsLiBUaGUgZXhwb3J0ZWQgb25lcyBhcmUgd2hlcmUgd2Ugc2hvdWxkIGJlIGxvb2tpbmc6IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXRgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0YCwgYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAsIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyYCwgYF9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXJgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcmAsIGFuZCBgX19wYWdlX3RhYmxlX2NoZWNrX3plcm9gLlxuXG5Gb3IgYFBBR0VfT1dORVJgLCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBgX19zZXRfcGFnZV9vd25lcmAsIGBfX3NwbGl0X3BhZ2Vfb3duZXJgLCBgX19mb2xpb19jb3B5X293bmVyYCwgYW5kIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgLlxuXG5JIHdhcyBnZXR0aW5nIHJlYWR5IHRvIGxpc3QgdGhlbSBhcyBmb2N1cyBzeW1ib2xzLCBidXQgd2FpdCEgVGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemUgYXZvaWRpbmcgXCJnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uc1wiIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gYF9fc2V0X3BhZ2Vfb3duZXJgIGFuZCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0YCAqYXJlKiBob3QgcGF0aHMg4oCTIHBhZ2UgYWxsb2NhdGlvbnMgYW5kIHVwZGF0ZXMgYXJlIGNvcmUgdG8gZXZlcnl0aGluZy4gTGlzdGluZyB0aGVtIG1pZ2h0IGJpYXMgdGhlIGZ1enplci4gSG93ZXZlciwgdGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgdG91Y2hlcyB0aGVzZSBob3QgcGF0aCBmdW5jdGlvbnMuIElzIHRoZXJlIGEgc3BlY2lmaWMgZnVuY3Rpb24gd2hlcmUgYF9fcGdjb3VudCA9PSAwYCBpcyB0cmlnZ2VyZWQgb3IgcmVsYXRlZCB0byB0aGUgcGF0Y2g/IFRoZSBwYXRjaCBtb2RpZmllcyBgZm9yX2VhY2hfcGFnZV9leHRgIHdpdGggYGNvdW50YCBsaW1pdHMuIENhbGxlcnMgcGFzcyBgMSBcdTAwM2NcdTAwM2Mgb3JkZXJgIG9yIGBwZ2NudGAuIEFuZCBgcGdjbnRgIGlzIHBvdGVudGlhbGx5IGBucmAgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAuIElmIGBucmAgaXMgMCwgd2UncmUgaW4gdGhlIG5ldyBiZWhhdmlvci4gV2hlbiBkb2VzIGBucmAgYmVjb21lIDA/IFBvdGVudGlhbGx5IHdpdGggY2VydGFpbiBtbWFwL21wcm90ZWN0L21hZHZpc2UgY2FsbHMuXG5cblNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaG90IHBhdGhzLCBzaG91bGQgd2UgYXZvaWQgdGhlbSB0byBwcmV2ZW50IGJpYXNpbmc/IE1heWJlIHdlIHNob3VsZCBiZSBsaXN0aW5nIHRoZSBsZXNzIGhvdCBvbmVzLCBsaWtlIGBfX3NwbGl0X3BhZ2Vfb3duZXJgIGFuZCBgX19mb2xpb19jb3B5X293bmVyYC4gSG9sZCBvbiwgYF9fc3BsaXRfcGFnZV9vd25lcmAgaXMgb25seSBjYWxsZWQgZHVyaW5nIGh1Z2UgcGFnZSBzcGxpdHMsIGFuZCBgX19mb2xpb19jb3B5X293bmVyYCBkdXJpbmcgcGFnZSBtaWdyYXRpb24uIFRob3NlIGFyZSBtdWNoIGxlc3MgZnJlcXVlbnQgdGhhbiBiYXNpYyBwYWdlIGFsbG9jYXRpb24uXG5cblNvLCBoZXJlJ3MgbXkgcmVmaW5lZCBsaXN0IGZvciBgRm9jdXNTeW1ib2xzYDpcblxuKiAgIGBfX3NwbGl0X3BhZ2Vfb3duZXJgXG4qICAgYF9fZm9saW9fY29weV9vd25lcmBcbiogICBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YFxuKiAgIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXRgXG4qICAgYF9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXJgXG4qICAgYF9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXJgXG5cbk5vdyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYF9fc3BsaXRfcGFnZV9vd25lcmAgaXMgZXhwb3J0ZWQgb3IgcmVhY2hhYmxlIGZyb20gd2hlcmUgd2UgYXJlIHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NDUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MDcuNTE1MDYwNzg3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk0NDM5NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3BsaXRfcGFnZV9vd25lclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xMj1leHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTEzLVxcdFxcdFxcdHVuc2lnbmVkIHNob3J0IG9yZGVyLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MTQ6ZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTE1LVxcdFxcdFxcdGludCBuZXdfb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9MzU9c3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0zOC1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM5OlxcdFxcdF9fc3BsaXRfcGFnZV9vd25lcihwYWdlLCBvbGRfb3JkZXIsIG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDAtfVxcbi0tXFxubW0vcGFnZV9vd25lci5jPTM0OD12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzYwLVxcbm1tL3BhZ2Vfb3duZXIuYzozNjE6dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXFxubW0vcGFnZV9vd25lci5jLTM2Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUxOjA5LjMwOTUwNjA5NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjczODczMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqRGlnZ2luZyBpbnRvIGBzcGxpdF9wYWdlX293bmVyYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGlzIGJpdCBvZiBjb2RlLCBhbmQgSSd2ZSBnb3QgYSBjbHVlOiBpdCdzIG5vdCBkaXJlY3RseSBleHBvcnRlZCwgYnV0IGl0J3MgbHVya2luZyBpbiBgbW0vcGFnZV9vd25lci5jYC4gVGhlIGZ1bmN0aW9uIEknbSBhZnRlciBpcyBgc3BsaXRfcGFnZV9vd25lcmAuIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgbmFtZSwgYW5kIGl0J3MgY2FsbGVkIGZyb20gYSBmdW5jdGlvbiB3aXRoIGEgcHJldHR5IHNwZWNpZmljIG5hbWUsIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBvciBzb21ldGhpbmcgc2ltaWxhciwgd2hpY2ggaXRzZWxmIGNhbGxzIGBzcGxpdF9wYWdlX293bmVyYC5cblxuQWxyaWdodCwgc2luY2UgSSd2ZSBwaW5uZWQgZG93biB0aGUgZnVuY3Rpb24gdG8gY2hlY2ssIGxldCdzIGp1c3QgdHJhY2UgdGhlIGNhbGxlcnMgb2YgYHNwbGl0X3BhZ2Vfb3duZXJgIGRpcmVjdGx5LiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgY2FsbGluZyBjb250ZXh0IGJ5IGRvaW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MTQuNTgzMzgxOTE3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQwOTA0MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X3BhZ2Vfb3duZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9MTI9ZXh0ZXJuIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xMy1cXHRcXHRcXHR1bnNpZ25lZCBzaG9ydCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2spO1xcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjE0OmV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNS1cXHRcXHRcXHRpbnQgbmV3X29yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTI4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTM0LVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM1OnN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTM2LVxcdFxcdFxcdGludCBuZXdfb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0zOC1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM5OlxcdFxcdF9fc3BsaXRfcGFnZV9vd25lcihwYWdlLCBvbGRfb3JkZXIsIG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9NjA9c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNjMtfVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjY0OnN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTY1LVxcdFxcdFxcdGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2NzI9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3MTUtXFx0XFx0Zm9saW9fc3BsaXRfbWVtY2dfcmVmcyhmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYzozNzE2OlxcdFxcdHNwbGl0X3BhZ2Vfb3duZXIoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jLTM3MTctXFx0XFx0cGdhbGxvY190YWdfc3BsaXQoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTM5MTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXFxuLS1cXG5tbS9odWdldGxiLmMtMzk1MC1cXG5tbS9odWdldGxiLmM6Mzk1MTpcXHRcXHRzcGxpdF9wYWdlX293bmVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgaHVnZV9wYWdlX29yZGVyKHNyYyksIGh1Z2VfcGFnZV9vcmRlcihkc3QpKTtcXG5tbS9odWdldGxiLmMtMzk1Mi1cXHRcXHRwZ2FsbG9jX3RhZ19zcGxpdChmb2xpbywgaHVnZV9wYWdlX29yZGVyKHNyYyksIGh1Z2VfcGFnZV9vcmRlcihkc3QpKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zMDkxPXN0YXRpYyB2b2lkIF9fc3BsaXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTMwOTQtXFxubW0vcGFnZV9hbGxvYy5jOjMwOTU6XFx0c3BsaXRfcGFnZV9vd25lcihwYWdlLCBvcmRlciwgMCk7XFxubW0vcGFnZV9hbGxvYy5jLTMwOTYtXFx0cGdhbGxvY190YWdfc3BsaXQocGFnZV9mb2xpbyhwYWdlKSwgb3JkZXIsIDApO1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTM0OD12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzYwLVxcbm1tL3BhZ2Vfb3duZXIuYzozNjE6dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXFxubW0vcGFnZV9vd25lci5jLTM2Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUxOjE2LjMyNDI5NDA5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ1MDY1NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0cywgYW5kIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uc2lkZXJpbmcgT3duZXIgU3ltYm9scyBmb3IgUGFnZSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byByZXByZXNlbnQgdGhlIFwib3duZXJcIiBvZiBhIHBhZ2UgaW4gdGhpcyBzeXN0ZW0uIEkndmUgYmVlbiBjb25zaWRlcmluZyBkaWZmZXJlbnQgc3ltYm9scyBhbmQgYF9fc3BsaXRfcGFnZV9vd25lcmAgaW1tZWRpYXRlbHkgc3RyaWtlcyBtZSBhcyBhIHNvbGlkIGNob2ljZS4gSXQncyBjbGVhcmx5IG5hbWVkLCBsaWtlbHkgaW50dWl0aXZlIGZvciBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhlIGludGVybmFsIHdvcmtpbmdzLCBhbmQgc2VlbXMgdG8gY2FwdHVyZSB0aGUgZXNzZW5jZSBvZiB3aGF0IHdlIG5lZWQuIEhvd2V2ZXIsIGJlZm9yZSBzZXR0bGluZyBvbiB0aGF0LCBpdCdzIHdvcnRoIGEgbW9tZW50IHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgYW5kIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZXMgdGhhdCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlIGluIHNwZWNpZmljIHNjZW5hcmlvcy4gVGhhdCBsZWFkcyBtZSB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCBgX19mb2xpb19jb3B5X293bmVyYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgc3ltYm9sIGlzIGEgYmV0dGVyIGZpdCBvciBub3QuIFBlcmhhcHMgYm90aCBhcmUgdmFsaWQgYW5kIGl0IGRlcGVuZHMgb24gdGhlIGV4YWN0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzUzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MTkuMjY5MzYzMjc0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMxMTUxMzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9saW9fY29weV9vd25lclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xND1leHRlcm4gdm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMTUtXFx0XFx0XFx0aW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MTY6ZXh0ZXJuIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNy1leHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDMtXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo0NDpcXHRcXHRfX2ZvbGlvX2NvcHlfb3duZXIobmV3Zm9saW8sIG9sZCk7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDUtfVxcbi0tXFxubW0vcGFnZV9vd25lci5jPTM2MT12b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zNzQtXFxubW0vcGFnZV9vd25lci5jOjM3NTp2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG5tbS9wYWdlX293bmVyLmMtMzc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MjEuMzAwNTIxMjc1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTU3NTU0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPd25lcnNoaXAgVHJhbnNmZXIgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgZm9saW9fY29weV9vd25lcmAgZnVuY3Rpb24uIEl0IHNlZW1zIGl0J3MgYmVpbmcgaW52b2tlZCBkdXJpbmcgdGhlc2UgZm9saW8gbWlncmF0aW9uIHByb2Nlc3Nlcywgc3BlY2lmaWNhbGx5IGZyb20gYG1pZ3JhdGVfZm9saW9fZXh0cmFgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiAgUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbmVlZCBhIGNsZWFyZXIgcGljdHVyZSBvZiAqd2h5KiBpdCdzIGJlaW5nIGNhbGxlZCBhbmQgd2hlcmUgZWxzZSBpdCdzIGluIHVzZS4gVGhlIGZpcnN0IHRoaW5nIEknbGwgZG8gaXMgY2hlY2sgaXRzIGNhbGxlcnM7IGEgcXVpY2sgc2VhcmNoIGZvciBhbGwgdGhlIHBvaW50cyB3aGVyZSBgZm9saW9fY29weV9vd25lcmAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlIHNob3VsZCBzaGVkIHNvbWUgaW1tZWRpYXRlIGxpZ2h0LiAgVW5kZXJzdGFuZGluZyB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHRoaXMgb3duZXJzaGlwIHRyYW5zZmVyIGlzIGhhcHBlbmluZyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MToyNC43MTYyODAxMDNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzQ1NTQ2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fY29weV9vd25lclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xND1leHRlcm4gdm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMTUtXFx0XFx0XFx0aW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MTY6ZXh0ZXJuIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNy1leHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDAtfVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjQxOnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQyLXtcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC00My1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjQ0OlxcdFxcdF9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC00NS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD02ND1zdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTY3LX1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo2ODpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTY5LXtcXG4tLVxcbm1tL21pZ3JhdGUuYz03NjI9dm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9taWdyYXRlLmMtODQ1LVxcbm1tL21pZ3JhdGUuYzo4NDY6XFx0Zm9saW9fY29weV9vd25lcihuZXdmb2xpbywgZm9saW8pO1xcbm1tL21pZ3JhdGUuYy04NDctXFx0cGdhbGxvY190YWdfc3dhcChuZXdmb2xpbywgZm9saW8pO1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTM2MT12b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zNzQtXFxubW0vcGFnZV9vd25lci5jOjM3NTp2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG5tbS9wYWdlX293bmVyLmMtMzc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MjYuNTkwODQ0OTA4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODU0ODE4OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1c2luZyBvbiBNZW1vcnkgTWFuYWdlbWVudCBTeW1ib2xzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uICpZZXMqLCBgX19mb2xpb19jb3B5X293bmVyYCBpcyBhIHNvbGlkIHN5bWJvbCB0byByZWFsbHkgZHJpbGwgZG93biBpbnRvLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhhdCBwYXJ0aWN1bGFyIHN1YnN5c3RlbS4gTm93LCB3aGF0ICplbHNlKiBpcyBvbiBteSBtaW5kPyBIbW0uLi4gYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAuIFRoYXQgcmluZ3MgYSBiZWxsLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgZnVsbCBjb250ZXh0IHRvIGJlIHRob3JvdWdoLiBJdCdzIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZXMsIEkga25vdyB0aGF0LiBMZXQncyBzZWUgaG93IGJvdGggZml0IGludG8gdGhlIGxhcmdlciB2aWV3IG9mIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjEyMiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUxOjM3LjQ0NTY2NzcyN1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NDcwMTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MjU9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yNi1cXHRcXHRwbWRfdCAqcG1kcCwgcG1kX3QgcG1kLCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI3OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjgtXFx0XFx0cHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCwgdW5zaWduZWQgaW50IG5yKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTk1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTAwLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjEwMTpcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQobW0sIGFkZHIsIHB1ZHAsIHB1ZCwgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEwMi19XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjQ0PUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQ1LVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNDY6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQ3LVxcdFxcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsXFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI1OS19XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI2MDpFWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MzkuMzAwMzc0MDEyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTYzNDczNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSB0b286XG5cbioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgTWFuaXB1bGF0aW9uIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ3ZlIGJlZW4gdGFraW5nIGEgbG9vayBhdCBhIGZldyBmdW5jdGlvbnMgaGVyZSwgYW5kIGl0J3MgbG9va2luZyBwcmV0dHkgZ29vZCBzbyBmYXIuIFNwZWNpZmljYWxseSwgYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXRgIHNlZW0gdG8gYmUgZG9pbmcgZXhhY3RseSB3aGF0IEknZCBleHBlY3QuIFRoZXNlIGFyZSBsaWtlbHkgcmVsYXRlZCB0byBzZXR0aW5nIFBhZ2UgVXBwZXIgRGlyZWN0b3JpZXMgKFBVRHMpIGFuZCBQYWdlIE1pZGRsZSBEaXJlY3RvcmllcyAoUE1Ecykg4oCTIGNvcmUgb3BlcmF0aW9ucyBpbiBtYW5hZ2luZyB0aGUgcGFnZSB0YWJsZSBoaWVyYXJjaHkuIEknbSBzYXRpc2ZpZWQgdGhleSBhcmUgZnVuY3Rpb25pbmcgYXMgaW50ZW5kZWQgdG8gZXN0YWJsaXNoIHRoZSBiYXNlIGVudHJpZXMgZm9yIG1lbW9yeSBtYXBwaW5nLiBTaW1pbGFybHksIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyYCBhbmQgYF9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXJgIHNlZW0gdG8gYmUgcHJvcGVybHkgaGFuZGxpbmcgdGhlIGRlYWxsb2NhdGlvbiBvZiBQVURzIGFuZCBQTURzIHJlc3BlY3RpdmVseSwgY3JpdGljYWwgZm9yIGZyZWVpbmcgdXAgbWVtb3J5IGFuZCBtYWludGFpbmluZyBjb25zaXN0ZW5jeS4gTm93LCBteSBuZXh0IGZvY3VzIGlzIG9uIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AuIFRoaXMgb25lIGlzIGludGVyZXN0aW5nOyBsZXQncyBkaWcgaW50byB0aGF0IG9uZSBhIGxpdHRsZSBtb3JlLiBJdOKAmXMgcHJvYmFibHkgY2hlY2tpbmcgZm9yIHplcm9lZCBlbnRyaWVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgcHJldmVudGluZyBwb3RlbnRpYWwgbGVha3Mgd2hlbiBtYXBwaW5nIG9yIHVubWFwcGluZyBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzg1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6NDMuOTU2NzI0NzJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDI5ODM4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wYWdlX3RhYmxlX2NoZWNrX3plcm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MTQ9ZXh0ZXJuIHN0cnVjdCBwYWdlX2V4dF9vcGVyYXRpb25zIHBhZ2VfdGFibGVfY2hlY2tfb3BzO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE1LVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjE2OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3plcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTctdm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0zMz1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMzctXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mzg6XFx0X19wYWdlX3RhYmxlX2NoZWNrX3plcm8ocGFnZSwgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTM5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX2ZyZWUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTQ1LVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjQ2OlxcdF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHBhZ2UsIG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC00Ny19XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9OTc9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19zZXQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTMwLSAqL1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMzE6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfemVybyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xMzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MTo0NS43OTk3MTcwMzVaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ5MjQ0ODA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipPcHRpbWl6aW5nIFBhZ2UgRXh0ZW5zaW9uIEl0ZXJhdGlvbioqXG5cbk9rYXksIHNvIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AgaXMgZ2V0dGluZyBjYWxsZWQgKmEgbG90KiDigJMgZXZlcnkgc2luZ2xlIHRpbWUgd2UgYWxsb2NhdGUgb3IgZnJlZSBhIHBhZ2UuIFRoYXQncyBhIHNlcmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYSBob3QgcGF0aCB0aGF0J3MgcmVhbGx5IGh1cnRpbmcgdXMuIFRoZSBvYnZpb3VzIHNvbHV0aW9uIGlzIHRvIHNraXAgYF9fcGFnZV90YWJsZV9jaGVja196ZXJvYCBhbmQgYF9fc2V0X3BhZ2Vfb3duZXJgLiBMZXQncyBzZWUgaWYgdGhhdCdzIGZlYXNpYmxlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGxvb2tzIHNvbGlkLCBmdW5jdGlvbmFsbHkgc3BlYWtpbmcuIEl0J3MgZGVmaW5pdGVseSB3b3J0aCBwdXR0aW5nIGl0IHRocm91Z2ggZnV6emluZy4gVGhlIGtleSBjaGFuZ2VzIGFyZSB0byBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgYGZvcl9lYWNoX3BhZ2VfZXh0YCwgd2hlcmUgaXQgaW50cm9kdWNlcyBhIGBjb3VudGAgbGltaXRhdGlvbiB0byB0aGUgaXRlcmF0aW9uLiBUaGlzIGNoYW5nZSBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AsIHNpbmNlIHRoZXNlIGZlYXR1cmVzIGl0ZXJhdGUgdGhyb3VnaCBwYWdlIGV4dGVuc2lvbnMuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHdlIGRvbid0IGJyZWFrIGFueXRoaW5nIHVuZXhwZWN0ZWRseTogYFBBR0VfRVhURU5TSU9OYCwgYFBBR0VfT1dORVJgLCBgUEFHRV9UQUJMRV9DSEVDS2AsIGFuZCBgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRGAuIEdvdHRhIGJlIHRob3JvdWdoIGhlcmUuXG5cbkFoYSwgYSBzbmFnISBgUEFHRV9PV05FUmAgcmVxdWlyZXMgdGhlIGBwYWdlX293bmVyPW9uYCBib290IHBhcmFtZXRlci4gVGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGFuZCBTeXprYWxsZXIgbWlnaHQgbm90IGF1dG9tYXRpY2FsbHkgcHJvdmlkZSBpdCwgYnV0IHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIG9uIG91ciBlbmQuIFRoaXMgaXMgYSBwb2ludCBvZiBjb25jZXJuLiBDYW4gd2UgcGVyaGFwcyBlbmZvcmNlIGBQQUdFX09XTkVSYCB0aHJvdWdoIGEgY29uZmlndXJhdGlvbiBvcHRpb24/IExldCdzIGludmVzdGlnYXRlIHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1ODQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6NTUuMjkyMTY4MTA3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0MTg1ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX09XTkVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxcbm1tL0tjb25maWcuZGVidWctMTA2LVxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUxOjU3LjA0NjM1OTc3NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUzODE1MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQncyBhIGRpcmVjdCByZXByZXNlbnRhdGlvbiBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBBY2Nlc3MgQ29udHJvbCBNZWNoYW5pc21zKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBwZXJmb3JtIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSBmbGFncyBvciBpbmRpY2F0b3JzIG9mIGEgc3BlY2lmaWMgYWNjZXNzIGNvbnRyb2wgZW5mb3JjZW1lbnQgcG9saWN5LiBNeSBndXQgc2F5cyB0byBsb29rIGZvciBhbnl0aGluZyBleHBsaWNpdGx5IG5hbWVkLCBsaWtlIGBQQUdFX09XTkVSX0VORk9SQ0VEYCBvciBzb21ldGhpbmcgd2l0aCBhIHNpbWlsYXIgc2VtYW50aWMgbWVhbmluZy4gVGhlIGdvYWwgaXMgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gb2J2aW91cywgdXBmcm9udCwgZGVkaWNhdGVkIG1lY2hhbmlzbS4gSXQgY291bGQgYmUgYSBzaW1wbGUgZmxhZywgYSBkZWRpY2F0ZWQgc2VjdGlvbiBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgcGVyaGFwcyBhIGNvbnN0YW50IHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gQ2F0Y2hpbmcgdGhpcyBlYXJseSBpcyBpbXBvcnRhbnQsIGFzIGl0IHdpbGwgbGlrZWx5IGRldGVybWluZSBteSBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMzYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MjowMC4xMDAxNzc0NjFaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjExNjAzMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEFHRV9PV05FUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q9OTQ9ZW5hYmxlIGBgQ09ORklHX1NUQUNLVFJBQ0VgYC4gVG8gaW5jbHVkZSBhbGxvYyBhbmQgZnJlZSBzdGFjayB0cmFjZXMgb2YgYWZmZWN0ZWRcXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q6OTU6cGh5c2ljYWwgcGFnZXMsIGVuYWJsZSBgYENPTkZJR19QQUdFX09XTkVSYGAgYW5kIGJvb3Qgd2l0aCBgYHBhZ2Vfb3duZXI9b25gYC5cXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3QtOTYtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2FzYW4ucnN0PTcyPUtBU0FO5Y+q5pSv5oyBU0xVQuOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdC05MC1gYENPTkZJR19TVEFDS1RSQUNFYGAg44CC6KaB5YyF5ous5Y+X5b2x5ZON54mp55CG6aG16Z2i55qE5YiG6YWN5ZKM6YeK5pS+5aCG5qCI6Lef6Liq55qE6K+d77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdDo5MTror7flkK/nlKggYGBDT05GSUdfUEFHRV9PV05FUmBgIOW5tuS9v+eUqCBgYHBhZ2Vfb3duZXI9b25gYCDov5vooYzlvJXlr7zjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2FzYW4ucnN0LTkyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvZGV2LXRvb2xzL2thc2FuLnJzdD03Mj1LQVNBTuWPquaUr+aMgVNMVULjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3QtOTAtYGBDT05GSUdfU1RBQ0tUUkFDRWBgIOOAguimgeWMheaLrOWPl+W9semfv+eJqeeQhumggemdoueahOWIhumFjeWSjOmHi+aUvuWghuajp+i3n+i5pOeahOipse+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3Q6OTE66KuL5ZWT55SoIGBgQ09ORklHX1BBR0VfT1dORVJgYCDkuKbkvb/nlKggYGBwYWdlX293bmVyPW9uYGAg6YCy6KGM5byV5bCO44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvZGV2LXRvb2xzL2thc2FuLnJzdC05Mi1cXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz0zOTQ9Q09ORklHX01BR0lDX1NZU1JRPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc6Mzk1OkNPTkZJR19QQUdFX09XTkVSPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWctMzk2LUNPTkZJR19QQUdFX1BPSVNPTklORz15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODM4PUNPTkZJR19TTFVCX0RFQlVHX09OPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6ODM5OkNPTkZJR19QQUdFX09XTkVSPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctODQwLUNPTkZJR19ERUJVR19ST0RBVEFfVEVTVD15XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYz0xMDQ9c3RydWN0IGhpbmljM19jbGVhbl9xdWV1ZV9jdHh0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19pby5jLTEzMC0jZGVmaW5lIFNRX0NUWFRfV1FfUEFHRV9ISV9QRk5fTUFTSyAgICAgICAgR0VOTUFTSygxOSwgMClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYzoxMzE6I2RlZmluZSBTUV9DVFhUX1dRX1BBR0VfT1dORVJfTUFTSyAgICAgICAgIEJJVCgyMylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYy0xMzItI2RlZmluZSBTUV9DVFhUX1dRX1BBR0VfU0VUKHZhbCwgbWVtYmVyKSAgXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2lvLmMtMTc5LSNkZWZpbmUgUlFfQ1RYVF9XUV9QQUdFX1dRRV9UWVBFX01BU0sgICAgICBHRU5NQVNLKDI5LCAyOClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYzoxODA6I2RlZmluZSBSUV9DVFhUX1dRX1BBR0VfT1dORVJfTUFTSyAgICAgICAgIEJJVCgzMSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYy0xODEtI2RlZmluZSBSUV9DVFhUX1dRX1BBR0VfU0VUKHZhbCwgbWVtYmVyKSAgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjI6I2lmbmRlZiBfX0xJTlVYX1BBR0VfT1dORVJfSFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM6I2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC02LVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjc6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtOC1leHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD03ND1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNzYtfVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjc3OiNlbmRpZiAvKiBDT05GSUdfUEFHRV9PV05FUiAqL1xcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjc4OiNlbmRpZiAvKiBfX0xJTlVYX1BBR0VfT1dORVJfSCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTgyMD1zdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMzYtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEwMzc6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMzgtXFx0LyogVXNlZCBieSBwYWdlX293bmVyPW9uIHRvIGRldGVjdCByZWN1cnNpb24gaW4gcGFnZSB0cmFja2luZy4gKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9wc3Atc2V2Lmg9NDI9dHlwZWRlZiBlbnVtIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9wc3Atc2V2LmgtNzgtXFx0U0VWX1JFVF9JTlZBTElEX01EQVRBX0VOVFJZICAgICAgICA9IDB4MDAxQixcXG5pbmNsdWRlL3VhcGkvbGludXgvcHNwLXNldi5oOjc5OlxcdFNFVl9SRVRfSU5WQUxJRF9QQUdFX09XTkVSICAgICAgICAgPSAweDAwMUMsXFxuaW5jbHVkZS91YXBpL2xpbnV4L3BzcC1zZXYuaC04MC1cXHRTRVZfUkVUX0FFQURfT0ZMT1cgICAgICAgICAgICAgICAgID0gMHgwMDFELFxcbi0tXFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnPTU3PUNPTkZJR19QQUdFX0VYVEVOU0lPTj15XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjU4OkNPTkZJR19QQUdFX09XTkVSPXlcXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNTktQ09ORklHX0RFQlVHX0tNRU1MRUFLPXlcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9MTE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNS1cXHQgIHdpdGggc3RhY2sgdHJhY2VzIG9mIGxhc3QgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiB0aGUgcGFnZSwgd2hlblxcbm1tL0tjb25maWcuZGVidWc6MjY6XFx0ICBQQUdFX09XTkVSIGlzIGFsc28gc2VsZWN0ZWQgYW5kIGVuYWJsZWQgb24gYm9vdC5cXG5tbS9LY29uZmlnLmRlYnVnLTI3LVxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTA0LVxcbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXFx0Ym9vbCBcXFwiVHJhY2sgcGFnZSBvd25lclxcXCJcXG4tLVxcbm1tL01ha2VmaWxlPTExNj1vYmotJChDT05GSUdfREVCVUdfVk1fUEdUQUJMRSkgKz0gZGVidWdfdm1fcGd0YWJsZS5vXFxubW0vTWFrZWZpbGU6MTE3Om9iai0kKENPTkZJR19QQUdFX09XTkVSKSArPSBwYWdlX293bmVyLm9cXG5tbS9NYWtlZmlsZS0xMTgtb2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICs9IHBhZ2VfaXNvbGF0aW9uLm9cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDk1PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTMwLVxcbm1tL3BhZ2VfYWxsb2MuYzo1MTMxOiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbm1tL3BhZ2VfYWxsb2MuYy01MTMyLVxcdC8qXFxubW0vcGFnZV9hbGxvYy5jOjUxMzM6XFx0ICogUEFHRV9PV05FUiBtYXkgcmVjdXJzZSBpbnRvIHRoZSBhbGxvY2F0b3IgdG8gYWxsb2NhdGUgc3BhY2UgdG9cXG5tbS9wYWdlX2FsbG9jLmMtNTEzNC1cXHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXFxuLS1cXG5tbS9wYWdlX2V4dC5jPTgwPXN0YXRpYyBzdHJ1Y3QgcGFnZV9leHRfb3BlcmF0aW9ucyAqcGFnZV9leHRfb3BzW10gX19pbml0ZGF0YSA9IHtcXG5tbS9wYWdlX2V4dC5jOjgxOiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbm1tL3BhZ2VfZXh0LmMtODItXFx0XFx1MDAyNnBhZ2Vfb3duZXJfb3BzLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTE4LS8qXFxubW0vcGFnZV9vd25lci5jOjE5OiAqIFRPRE86IHRlYWNoIFBBR0VfT1dORVJfU1RBQ0tfREVQVEggKF9fZHVtcF9wYWdlX293bmVyIGFuZCBzYXZlX3N0YWNrKVxcbm1tL3BhZ2Vfb3duZXIuYy0yMC0gKiB0byB1c2Ugb2ZmIHN0YWNrIHRlbXBvcmFsIHN0b3JhZ2VcXG5tbS9wYWdlX293bmVyLmMtMjEtICovXFxubW0vcGFnZV9vd25lci5jOjIyOiNkZWZpbmUgUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoMTYpXFxubW0vcGFnZV9vd25lci5jLTIzLVxcbi0tXFxubW0vcGFnZV9vd25lci5jPTE1NT1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2F2ZV9zdGFjayhnZnBfdCBmbGFncylcXG5tbS9wYWdlX293bmVyLmMtMTU2LXtcXG5tbS9wYWdlX293bmVyLmM6MTU3OlxcdHVuc2lnbmVkIGxvbmcgZW50cmllc1tQQUdFX09XTkVSX1NUQUNLX0RFUFRIXTtcXG5tbS9wYWdlX293bmVyLmMtMTU4LVxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4tLVxcbm1tL3Ztc3RhdC5jPTE2NjU9c3RhdGljIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dibG9ja2NvdW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKVxcbi0tXFxubW0vdm1zdGF0LmMtMTY4MC0gKiBvZiBvdGhlciB0eXBlcy4gVGhpcyBnaXZlcyBhbiBpbmRpY2F0aW9uIG9mIGhvdyB3ZWxsIGZhbGxiYWNrcyBhcmUgYmVpbmdcXG5tbS92bXN0YXQuYzoxNjgxOiAqIGNvbnRhaW5lZCBieSBybXF1ZXVlX2ZhbGxiYWNrKCkuIEl0IHJlcXVpcmVzIGluZm9ybWF0aW9uIGZyb20gUEFHRV9PV05FUlxcbm1tL3Ztc3RhdC5jLTE2ODItICogdG8gZGV0ZXJtaW5lIHdoYXQgaXMgZ29pbmcgb25cXG4tLVxcbm1tL3Ztc3RhdC5jPTE2ODQ9c3RhdGljIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgcGdfZGF0YV90ICpwZ2RhdClcXG5tbS92bXN0YXQuYy0xNjg1LXtcXG5tbS92bXN0YXQuYzoxNjg2OiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbm1tL3Ztc3RhdC5jLTE2ODctXFx0aW50IG10eXBlO1xcbi0tXFxubW0vdm1zdGF0LmMtMTcwMC1cXHRcXHRwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQpO1xcbm1tL3Ztc3RhdC5jOjE3MDE6I2VuZGlmIC8qIENPTkZJR19QQUdFX09XTkVSICovXFxubW0vdm1zdGF0LmMtMTcwMi19XFxuLS1cXG5zY3JpcHRzL2dkYi9saW51eC9jb25zdGFudHMucHkuaW49MTA4PUxYX1ZBTFVFKFZNX0RNQV9DT0hFUkVOVClcXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L2NvbnN0YW50cy5weS5pbi0xMTAtLyogbGludXgvcGFnZV9leHQuaCAqL1xcbnNjcmlwdHMvZ2RiL2xpbnV4L2NvbnN0YW50cy5weS5pbjoxMTE6aWYgSVNfQlVJTFRJTihDT05GSUdfUEFHRV9PV05FUik6XFxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluLTExMi0gICAgTFhfR0RCUEFSU0VEKFBBR0VfRVhUX09XTkVSKVxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluPTE2OD1MWF9DT05GSUcoQ09ORklHX1NUQUNLREVQT1QpXFxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluOjE2OTpMWF9DT05GSUcoQ09ORklHX1BBR0VfT1dORVIpXFxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluLTE3MC1MWF9DT05GSUcoQ09ORklHX1NMVUJfREVCVUcpXFxuLS1cXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5PTEwPWZyb20gbGludXggaW1wb3J0IHV0aWxzLCBzdGFja2RlcG90LCBjb25zdGFudHMsIG1tXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS0xMS1cXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5OjEyOmlmIGNvbnN0YW50cy5MWF9DT05GSUdfUEFHRV9PV05FUjpcXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTEzLSAgICBwYWdlX2V4dF90ID0gdXRpbHMuQ2FjaGVkVHlwZSgnc3RydWN0IHBhZ2VfZXh0JylcXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktMTUtXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weToxNjogICAgUEFHRV9PV05FUl9TVEFDS19ERVBUSCA9IDE2XFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS0xNy0gICAgUEFHRV9FWFRfT1dORVIgPSBjb25zdGFudHMuTFhfUEFHRV9FWFRfT1dORVJcXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHk9MzA9Y2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XFxuLS1cXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTQxLSAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ3MsIGZyb21fdHR5KTpcXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5OjQyOiAgICAgICAgaWYgbm90IGNvbnN0YW50cy5MWF9DT05GSUdfUEFHRV9PV05FUjpcXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5OjQzOiAgICAgICAgICAgIHJhaXNlIGdkYi5HZGJFcnJvcignQ09ORklHX1BBR0VfT1dORVIgZG9lcyBub3QgZW5hYmxlJylcXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTQ0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MjowMS44MjEzNDQ4MzlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2NjIwMTIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFzb25pbmcgVGhyb3VnaCBQYWdlIEV4dGVuc2lvbiBJdGVyYXRpb24gTGltaXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGVyZSBpc24ndCBhIGRpcmVjdCBlcXVpdmFsZW50IHRvIGBQQUdFX09XTkVSX0VORk9SQ0VEYCwgd2hpY2ggaXMgYSBsaXR0bGUgdW51c3VhbC4gSG93ZXZlciwgd2UgKmRvKiBoYXZlIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCwgYW5kIEkgdGhpbmsgd2UgY2FuIGxldmVyYWdlIHRoYXQuIE15IHBsYW4gaXMgdG8gbGlzdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBQQUdFX0VYVEVOU0lPTmAsIGBQQUdFX09XTkVSYCwgYFBBR0VfVEFCTEVfQ0hFQ0tgLCBhbmQsIGNydWNpYWxseSwgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgLlxuXG5UaGUgaGVhcnQgb2YgdGhpcyBwYXRjaCBpcyB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBgZm9yX2VhY2hfcGFnZV9leHRgIG1hY3JvLCBhbmQgdGhlIGFzc29jaWF0ZWQgaXRlcmF0b3IgZnVuY3Rpb25zIGxpa2UgYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gIGFuZCBgcGFnZV9leHRfaXRlcl9uZXh0YC4gSXQncyBlc3NlbnRpYWxseSBpbnRyb2R1Y2luZyBhIGBjb3VudGAgcGFyYW1ldGVyIHRvIGxpbWl0IGhvdyBtYW55IHBhZ2UgZXh0ZW5zaW9ucyB0aGVzZSBpdGVyYXRvcnMgcmV0dXJuLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEl0J3MgYWZmZWN0aW5nIHN1YnN5c3RlbXMgdGhhdCByZWx5IG9uIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2UgZXh0ZW5zaW9ucywgd2hpY2ggaW5jbHVkZXMgdGhpbmdzIGxpa2UgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIG5ldyBgY291bnRgIGxpbWl0IGlzIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgdW5uZWNlc3NhcnkgbG9va3VwcywgZXNwZWNpYWxseSB3aGVuIHRoZSBgY291bnRgIGlzIHplcm8gb3Igd2hlbiB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gcHJvY2Vzc2luZyBhIHNwZWNpZmljIG51bWJlciBvZiBwYWdlcy5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlc2Ugc3ltYm9sczogYF9fc3BsaXRfcGFnZV9vd25lcmAsIGBfX2ZvbGlvX2NvcHlfb3duZXJgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YCwgYF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldGAsIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyYCwgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kX2NsZWFyYC4gVGhpcyBpcyBob3cgdGhlIGNoZWNrcyBhcmUgbGlrZWx5IGltcGxlbWVudGVkLCBhbmQgdGhpcyB3aWxsIGJlIHVzZWZ1bCBhcyBhIHJlZmVyZW5jZSB0byB3aGF0IGlzIGNoYW5nZWQuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSB0aGVzZSBzeW1ib2xzIGFyZSB1c2VmdWwuIEFoISBJIHNlZSB0aGF0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXRgIGlzIGV4cG9ydGVkLiBPa2F5LCBidXQgaXMgaXQgYWN0dWFsbHkgKnVzZWQqIGFueXdoZXJlPyBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tLiBIbW0sIHllcywgaXQncyBjYWxsZWQgZnJvbSBgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgdGhhdCBpcyB1c2VkIGluIGBzZXRfcHRlc2Agb3Igc2ltaWxhciBjYWxscyByZWxhdGVkIHRvIHB1ZHMuIE5vdyBJIHNob3VsZCBjaGVjayB3aGF0IGlzIGNhbGxpbmcgYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAgdG8gdW5kZXJzdGFuZCBpdHMgdXNlLWNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3Mzg0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUyOjA5LjA4NzU1MDQ3NFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTMzMTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTY3Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfcHRlc19hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjg4LVxcdGNhc2UgUFVEX1NJWkU6XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6Njg5OlxcdFxcdHBhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQobW0sIGFkZHIsIChwdWRfdCAqKXB0ZXAsXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjkwLVxcdFxcdFxcdFxcdFxcdCAgcHRlX3B1ZChwdGUpLCBucik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yNT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI2LVxcdFxcdHBtZF90ICpwbWRwLCBwbWRfdCBwbWQsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjc6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cXHRcXHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9ODY9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC05NC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDo5NTpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC05Ni1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEwMC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMDE6XFx0X19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KG1tLCBhZGRyLCBwdWRwLCBwdWQsIG5yKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMDItfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MTQ1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTQ5LVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjE1MDpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNTEtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0xNTU9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTYzLSNkZWZpbmUgcGFnZV90YWJsZV9jaGVja19wbWRfc2V0KG1tLCBhZGRyLCBwbWRwLCBwbWQpXFx0cGFnZV90YWJsZV9jaGVja19wbWRzX3NldChtbSwgYWRkciwgcG1kcCwgcG1kLCAxKVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjE2NDojZGVmaW5lIHBhZ2VfdGFibGVfY2hlY2tfcHVkX3NldChtbSwgYWRkciwgcHVkcCwgcHVkKVxcdHBhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQobW0sIGFkZHIsIHB1ZHAsIHB1ZCwgMSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNjUtXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjQ0PUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQ1LVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNDY6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQ3LVxcdFxcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsXFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI1OS19XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI2MDpFWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTI6MTAuOTMyODkxMjVaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMDAzMTIwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipUaGUgQ2FsbCBhbmQgdGhlIFRvb2wqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IGNvbmZpcm1zIHRoZSBcInRoZXlcIiBpbiBxdWVzdGlvbiBhcmUgaW5kZWVkIHdoYXQgSSB0aG91Z2h0IHRoZXkgd2VyZS4gR29vZC4gTm93LCBpdCdzIHRpbWUgdG8gbGV2ZXJhZ2UgdGhlIHNldC1yZXN1bHRzIHRvb2wuIEkga25vdyBob3cgdG8gbmF2aWdhdGUgdGhpczsgSSdsbCB1c2UgaXQgdG8gc3RydWN0dXJlIGFuZCByZWZpbmUgdGhlIG91dHB1dCBiYXNlZCBvbiB3aGF0IHRoZSBwcm9tcHQgZ2F2ZSBtZS4gTGV0J3Mgc2VlIGhvdyBlZmZpY2llbnRseSBJIGNhbiBpbnRlZ3JhdGUgdGhlIG5ldyBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzMjYsIk91dHB1dFRva2VucyI6MjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTI6MTUuMjQyOTI4MDY2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MjU0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfRVhURU5TSU9OXCIsXG4gICAgXCJQQUdFX09XTkVSXCIsXG4gICAgXCJQQUdFX1RBQkxFX0NIRUNLXCIsXG4gICAgXCJQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zcGxpdF9wYWdlX293bmVyXCIsXG4gICAgXCJfX2ZvbGlvX2NvcHlfb3duZXJcIixcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldFwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0XCIsXG4gICAgXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyXCIsXG4gICAgXCJfX3BhZ2VfdGFibGVfY2hlY2tfcG1kX2NsZWFyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBmb3JfZWFjaF9wYWdlX2V4dGAgbWFjcm8gYW5kIGl0cyB1bmRlcmx5aW5nIGl0ZXJhdG9yIGZ1bmN0aW9ucyAoYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gLCBgcGFnZV9leHRfaXRlcl9uZXh0YCkgdG8gbGltaXQgdGhlIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgcmV0dXJuZWQgYmFzZWQgb24gYSBgY291bnRgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc3Vic3lzdGVtcyB0aGF0IGl0ZXJhdGUgb3ZlciBwYWdlIGV4dGVuc2lvbnMgbGlrZSBgUEFHRV9PV05FUmAgYW5kIGBQQUdFX1RBQkxFX0NIRUNLYC4gSXQgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgdW5uZWNlc3NhcnkgbG9va3VwcyB3aGVuIHRoZSBjb3VudCBpcyAwIG9yIHdoZW4gaXRlcmF0aW5nIG92ZXIgYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9FWFRFTlNJT05cIixcbiAgICBcIlBBR0VfT1dORVJcIixcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tcIixcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NwbGl0X3BhZ2Vfb3duZXJcIixcbiAgICBcIl9fZm9saW9fY29weV9vd25lclwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0XCIsXG4gICAgXCJfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXRcIixcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXJcIixcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBtYWNybyBhbmQgaXRzIHVuZGVybHlpbmcgaXRlcmF0b3IgZnVuY3Rpb25zIChgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgKSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBiYXNlZCBvbiBhIGBjb3VudGAgcGFyYW1ldGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBzdWJzeXN0ZW1zIHRoYXQgaXRlcmF0ZSBvdmVyIHBhZ2UgZXh0ZW5zaW9ucyBsaWtlIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciB1bm5lY2Vzc2FyeSBsb29rdXBzIHdoZW4gdGhlIGNvdW50IGlzIDAgb3Igd2hlbiBpdGVyYXRpbmcgb3ZlciBhIHNwZWNpZmljIG51bWJlciBvZiBwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowfq4st[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 21:36:17 +0000 UTC FinishedAt: 2026-06-22 21:52:16 +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": "e1201ff76176ef666b13d1a4ec6b6190ddc6abc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_EXTENSION", "PAGE_OWNER", "PAGE_TABLE_CHECK", "PAGE_TABLE_CHECK_ENFORCED" ], "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": "e1201ff76176ef666b13d1a4ec6b6190ddc6abc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_EXTENSION", "PAGE_OWNER", "PAGE_TABLE_CHECK", "PAGE_TABLE_CHECK_ENFORCED" ], "series_id": "c9a6990f-fa5d-45a4-98b7-1dc3be99e711" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__split_page_owner", "__folio_copy_owner", "__page_table_check_puds_set", "__page_table_check_pmds_set", "__page_table_check_pud_clear", "__page_table_check_pmd_clear" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfRVhURU5TSU9OJiMzNDssCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDSyYjMzQ7LAogICAgJiMzNDtQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zcGxpdF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O19fZm9saW9fY29weV9vd25lciYjMzQ7LAogICAgJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQmIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0JiMzNDssCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXImIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBtYWNybyBhbmQgaXRzIHVuZGVybHlpbmcgaXRlcmF0b3IgZnVuY3Rpb25zIChgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgKSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBiYXNlZCBvbiBhIGBjb3VudGAgcGFyYW1ldGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBzdWJzeXN0ZW1zIHRoYXQgaXRlcmF0ZSBvdmVyIHBhZ2UgZXh0ZW5zaW9ucyBsaWtlIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciB1bm5lY2Vzc2FyeSBsb29rdXBzIHdoZW4gdGhlIGNvdW50IGlzIDAgb3Igd2hlbiBpdGVyYXRpbmcgb3ZlciBhIHNwZWNpZmljIG51bWJlciBvZiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYxZTYzMmJjZDMzNTVmYTA5MTI3ZmI3MzYzNDUxNmExMGU3ODIyMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAyMTo0OToxNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhcbmluZGV4IDYxZTg3NmUyNTVlODljLi5mMjNkNGIyMThkYTA3OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXG5AQCAtMTIwLDE0ICYjNDM7MTIwLDE4IEBAIHN0cnVjdCBwYWdlX2V4dF9pdGVyIHtcbiAgKiBwYWdlX2V4dF9pdGVyX2JlZ2luKCkgLSBQcmVwYXJlIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBwYWdlIGV4dGVuc2lvbnMuXG4gICogQGl0ZXI6IHBhZ2UgZXh0ZW5zaW9uIGl0ZXJhdG9yLlxuICAqIEBwZm46IFBGTiBvZiB0aGUgcGFnZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi5cbiYjNDM7ICogQGNvdW50OiBtYXhpbXVtIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgdG8gcmV0dXJuLlxuICAqXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIHRha2VuLlxuICAqXG4gICogUmV0dXJuOiBOVUxMIGlmIG5vIHBhZ2VfZXh0IGV4aXN0cyBmb3IgdGhpcyBwYWdlLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2JlZ2luKHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyLFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuJiM0MztcdGlmICghY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4gXHRpdGVyLVx1MDAzZWluZGV4ID0gMDtcbiBcdGl0ZXItXHUwMDNlc3RhcnRfcGZuID0gcGZuO1xuIFx0aXRlci1cdTAwM2VwYWdlX2V4dCA9IHBhZ2VfZXh0X2xvb2t1cChwZm4pO1xuQEAgLTEzOCwxOSAmIzQzOzE0MiwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHRfaXRlcl9iZWdpbihzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlcixcbiAvKipcbiAgKiBwYWdlX2V4dF9pdGVyX25leHQoKSAtIEdldCBuZXh0IHBhZ2UgZXh0ZW5zaW9uXG4gICogQGl0ZXI6IHBhZ2UgZXh0ZW5zaW9uIGl0ZXJhdG9yLlxuJiM0MzsgKiBAY291bnQ6IG1heGltdW0gbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyB0byByZXR1cm4uXG4gICpcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXG4gICpcbiAgKiBSZXR1cm46IE5VTEwgaWYgbm8gbmV4dCBwYWdlX2V4dCBleGlzdHMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfbmV4dChzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlcilcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfbmV4dChzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlcixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyLVx1MDAzZXBhZ2VfZXh0KSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpdGVyLVx1MDAzZWluZGV4JiM0MzsmIzQzOztcbiYjNDM7XHRpZiAoJiM0MzsmIzQzO2l0ZXItXHUwMDNlaW5kZXggXHUwMDNlPSBjb3VudClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuIFx0cGZuID0gaXRlci1cdTAwM2VzdGFydF9wZm4gJiM0MzsgaXRlci1cdTAwM2VpbmRleDtcbiBcbiBcdGlmIChwYWdlX2V4dF9pdGVyX25leHRfZmFzdF9wb3NzaWJsZShwZm4pKVxuQEAgLTE4Myw5ICYjNDM7MTkwLDkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVcbiAgKiBJTVBPUlRBTlQ6IG11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayB0YWtlbi5cbiAgKi9cbiAjZGVmaW5lIGZvcl9lYWNoX3BhZ2VfZXh0KF9fcGFnZSwgX19wZ2NvdW50LCBfX3BhZ2VfZXh0LCBfX2l0ZXIpIFxcXG4tXHRmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSk7XFxcbi1cdFx0X19wYWdlX2V4dCBcdTAwMjZcdTAwMjYgX19pdGVyLmluZGV4IFx1MDAzYyBfX3BnY291bnQ7ICAgICAgICAgIFxcXG4tXHRcdF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX25leHQoXHUwMDI2X19pdGVyKSlcbiYjNDM7XHRmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcbiYjNDM7XHRcdF9fcGFnZV9leHQ7IFxcXG4mIzQzO1x0XHRfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9uZXh0KFx1MDAyNl9faXRlciwgX19wZ2NvdW50KSlcbiBcbiAjZWxzZSAvKiAhQ09ORklHX1BBR0VfRVhURU5TSU9OICovXG4gc3RydWN0IHBhZ2VfZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfRVhURU5TSU9OJiMzNDssCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDSyYjMzQ7LAogICAgJiMzNDtQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zcGxpdF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O19fZm9saW9fY29weV9vd25lciYjMzQ7LAogICAgJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQmIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0JiMzNDssCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXImIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBtYWNybyBhbmQgaXRzIHVuZGVybHlpbmcgaXRlcmF0b3IgZnVuY3Rpb25zIChgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgKSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBiYXNlZCBvbiBhIGBjb3VudGAgcGFyYW1ldGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBzdWJzeXN0ZW1zIHRoYXQgaXRlcmF0ZSBvdmVyIHBhZ2UgZXh0ZW5zaW9ucyBsaWtlIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciB1bm5lY2Vzc2FyeSBsb29rdXBzIHdoZW4gdGhlIGNvdW50IGlzIDAgb3Igd2hlbiBpdGVyYXRpbmcgb3ZlciBhIHNwZWNpZmljIG51bWJlciBvZiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjFlNjMyYmNkMzM1NWZhMDkxMjdmYjczNjM0NTE2YTEwZTc4MjIxYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDIyIDIxOjQ5OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oCmluZGV4IDYxZTg3NmUyNTVlODljLi5mMjNkNGIyMThkYTA3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaApAQCAtMTIwLDE0ICYjNDM7MTIwLDE4IEBAIHN0cnVjdCBwYWdlX2V4dF9pdGVyIHsKICAqIHBhZ2VfZXh0X2l0ZXJfYmVnaW4oKSAtIFByZXBhcmUgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2UgZXh0ZW5zaW9ucy4KICAqIEBpdGVyOiBwYWdlIGV4dGVuc2lvbiBpdGVyYXRvci4KICAqIEBwZm46IFBGTiBvZiB0aGUgcGFnZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4KJiM0MzsgKiBAY291bnQ6IG1heGltdW0gbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyB0byByZXR1cm4uCiAgKgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIHRha2VuLgogICoKICAqIFJldHVybjogTlVMTCBpZiBubyBwYWdlX2V4dCBleGlzdHMgZm9yIHRoaXMgcGFnZS4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfYmVnaW4oc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsCi0JCQkJCQl1bnNpZ25lZCBsb25nIHBmbikKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewomIzQzOwlpZiAoIWNvdW50KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiAJaXRlci0mZ3Q7aW5kZXggPSAwOwogCWl0ZXItJmd0O3N0YXJ0X3BmbiA9IHBmbjsKIAlpdGVyLSZndDtwYWdlX2V4dCA9IHBhZ2VfZXh0X2xvb2t1cChwZm4pOwpAQCAtMTM4LDE5ICYjNDM7MTQyLDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2JlZ2luKHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyLAogLyoqCiAgKiBwYWdlX2V4dF9pdGVyX25leHQoKSAtIEdldCBuZXh0IHBhZ2UgZXh0ZW5zaW9uCiAgKiBAaXRlcjogcGFnZSBleHRlbnNpb24gaXRlcmF0b3IuCiYjNDM7ICogQGNvdW50OiBtYXhpbXVtIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgdG8gcmV0dXJuLgogICoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayB0YWtlbi4KICAqCiAgKiBSZXR1cm46IE5VTEwgaWYgbm8gbmV4dCBwYWdlX2V4dCBleGlzdHMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfbmV4dChzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlciwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFpdGVyLSZndDtwYWdlX2V4dCkpCiAJCXJldHVybiBOVUxMOwogCi0JaXRlci0mZ3Q7aW5kZXgmIzQzOyYjNDM7OwomIzQzOwlpZiAoJiM0MzsmIzQzO2l0ZXItJmd0O2luZGV4ICZndDs9IGNvdW50KQomIzQzOwkJcmV0dXJuIE5VTEw7CiAJcGZuID0gaXRlci0mZ3Q7c3RhcnRfcGZuICYjNDM7IGl0ZXItJmd0O2luZGV4OwogCiAJaWYgKHBhZ2VfZXh0X2l0ZXJfbmV4dF9mYXN0X3Bvc3NpYmxlKHBmbikpCkBAIC0xODMsOSAmIzQzOzE5MCw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2dldChjb25zdCBzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlCiAgKiBJTVBPUlRBTlQ6IG11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayB0YWtlbi4KICAqLwogI2RlZmluZSBmb3JfZWFjaF9wYWdlX2V4dChfX3BhZ2UsIF9fcGdjb3VudCwgX19wYWdlX2V4dCwgX19pdGVyKSBcCi0JZm9yIChfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9iZWdpbigmYW1wO19faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSk7XAotCQlfX3BhZ2VfZXh0ICZhbXA7JmFtcDsgX19pdGVyLmluZGV4ICZsdDsgX19wZ2NvdW50OyAgICAgICAgICBcCi0JCV9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX25leHQoJmFtcDtfX2l0ZXIpKQomIzQzOwlmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKCZhbXA7X19pdGVyLCBwYWdlX3RvX3BmbihfX3BhZ2UpLCBfX3BnY291bnQpOyBcCiYjNDM7CQlfX3BhZ2VfZXh0OyBcCiYjNDM7CQlfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9uZXh0KCZhbXA7X19pdGVyLCBfX3BnY291bnQpKQogCiAjZWxzZSAvKiAhQ09ORklHX1BBR0VfRVhURU5TSU9OICovCiBzdHJ1Y3QgcGFnZV9leHQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIEV4dGVuc2lvbiBJdGVyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyBgaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oYC4gU2VlbXMgbGlrZSBzb21lb25lJiMzOTtzIGJlZW4gd29ya2luZyBvbiBgcGFnZV9leHRfaXRlcl9iZWdpbmAgYW5kIGBwYWdlX2V4dF9pdGVyX25leHRgLiBUaGUgYmlnIGNoYW5nZSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBgY291bnRgIGFyZ3VtZW50LiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IG1lYW5zIHRoZXkmIzM5O3JlIGFpbWluZyB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBkdXJpbmcgaXRlcmF0aW9uLiBUaGF0IGdpdmVzIHVzIG1vcmUgY29udHJvbCBpbiBzb21lIGluc3RhbmNlcywgYW5kIHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlIGluIG1hbnkuCgpOb3csIHRoZXkmIzM5O3ZlIGFsc28gZ29uZSBhaGVhZCBhbmQgdXBkYXRlZCB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBtYWNyby4gSXQgc2VlbXMgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIHBhc3MgYF9fcGdjb3VudGAgKG9yIHdoYXRldmVyIHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY291bnQpIHRvIHRob3NlIGl0ZXJhdG9yIGZ1bmN0aW9ucy4gTWFrZXMgc2Vuc2U7IHlvdSB3YW50IHRoZSBtYWNybyB0byByZXNwZWN0IHRoYXQgbGltaXQuCgpNeSBuZXh0IHN0ZXA/IFdlbGwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgY29kZWJhc2UgYW5kIGZpbmQgKmV2ZXJ5KiB1c2Ugb2YgYGZvcl9lYWNoX3BhZ2VfZXh0YC4gVGhhdCYjMzk7cyBnb2luZyB0byB0ZWxsIG1lIHdoZXJlIHRoaXMgY2hhbmdlIHdpbGwgYWZmZWN0IHRoaW5ncywgYW5kIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGNvZGUgd2lsbCBiZWhhdmUgd2l0aCB0aGUgYWRkZWQgY29uc3RyYWludHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QsIHRoZSBwb3RlbnRpYWwgYmVuZWZpdHMsIGFuZCBvZiBjb3Vyc2UgYW55IHBvc3NpYmxlIHNpZGUgZWZmZWN0cyBvciBjb21wYXRpYmlsaXR5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3JfZWFjaF9wYWdlX2V4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDsuY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XG4tLVxuLmNsYW5nLWZvcm1hdC0zOTQtICAtICYjMzk7Zm9yX2VhY2hfb3JfYml0JiMzOTtcbi5jbGFuZy1mb3JtYXQ6Mzk1OiAgLSAmIzM5O2Zvcl9lYWNoX3BhZ2VfZXh0JiMzOTtcbi5jbGFuZy1mb3JtYXQtMzk2LSAgLSAmIzM5O2Zvcl9lYWNoX3BhdGgmIzM5O1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xODItLyoqXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTgzOiAqIGZvcl9lYWNoX3BhZ2VfZXh0KCk6IGl0ZXJhdGUgdGhyb3VnaCBwYWdlX2V4dCBvYmplY3RzLlxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTE4NC0gKiBAX19wYWdlOiB0aGUgcGFnZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpblxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTEtICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTkyOiNkZWZpbmUgZm9yX2VhY2hfcGFnZV9leHQoX19wYWdlLCBfX3BnY291bnQsIF9fcGFnZV9leHQsIF9faXRlcikgXFxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTMtXHRmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcbi0tXG5tbS9wYWdlX293bmVyLmM9MjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX293bmVyLmMtMjU1LVx0cmN1X3JlYWRfbG9jaygpO1xubW0vcGFnZV9vd25lci5jOjI1NjpcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xubW0vcGFnZV9vd25lci5jLTI1Ny1cdFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX293bmVyLmM9MjczPXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0yODMtXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9wYWdlX293bmVyLmM6Mjg0Olx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtMjg1LVx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zNjE9dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG4tLVxubW0vcGFnZV9vd25lci5jLTM2Ny1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2Vfb3duZXIuYzozNjg6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvbGRfb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtMzY5LVx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zNzU9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4tLVxubW0vcGFnZV9vd25lci5jLTQxNy1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2Vfb3duZXIuYzo0MTg6XHRmb3JfZWFjaF9wYWdlX2V4dChcdTAwMjZvbGQtXHUwMDNlcGFnZSwgMSBcdTAwM2NcdTAwM2MgbmV3X3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtNDE5LVx0XHRvbGRfcGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9NjM9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19jbGVhcih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBwZ2NudClcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNzctXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Nzg6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy03OS1cdFx0c3RydWN0IHBhZ2VfdGFibGVfY2hlY2sgKnB0YyA9IGdldF9wYWdlX3RhYmxlX2NoZWNrKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9OTc9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19zZXQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQsXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTExMi1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMTM6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xMTQtXHRcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTEzMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTEzOC1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMzk6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNDAtXHRcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBwYWdlX2V4dGAgSXRlcmF0aW9uIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgaXRlcmF0aW9uIGZ1bmN0aW9ucyBmb3IgYHBhZ2VfZXh0YCBzdHJ1Y3R1cmVzOiBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgY29uc2VxdWVudGx5LCBgZm9yX2VhY2hfcGFnZV9leHRgLiAgVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBpdGVyYXRpb24gaXMgbm93IGV4cGxpY2l0bHkgbGltaXRlZCBieSBhIGBjb3VudGAgcGFyYW1ldGVyLiAgCgpCZWZvcmUsIHRoZSBgZm9yX2VhY2hfcGFnZV9leHRgIG1hY3JvIGxvb2tlZCBsaWtlIHRoaXM6IHRoZSBsb29wIHdvdWxkICphbHdheXMqIGNhbGwgYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gLCBldmVuIGlmIHRoZSBpbnRlbmRlZCBwYWdlIGNvdW50IChgX19wZ2NvdW50YCkgd2FzIHplcm8uICBUaGVuLCBhIGNoZWNrLCBgX19pdGVyLmluZGV4ICZsdDsgX19wZ2NvdW50YCwgd291bGQgaW1tZWRpYXRlbHkgc2hvcnQtY2lyY3VpdCB0aGUgbG9vcC4gIFdoaWxlIHRlY2huaWNhbGx5IGNvcnJlY3QsIHRoZXJlIHdhcyBhIHdhc3RlZCBmdW5jdGlvbiBjYWxsLgoKTm93LCBJIHNlZSB0aGUgaW1wcm92ZW1lbnQuIGBwYWdlX2V4dF9pdGVyX2JlZ2luYCAqaXRzZWxmKiBjaGVja3MgdGhlIGBjb3VudGAgYXJndW1lbnQuICBJZiBgY291bnRgIGlzIHplcm8sIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYE5VTExgLiAgVGhpcyBpcyBtdWNoIGNsZWFuZXIuCgpgYGBjCnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2JlZ2luKHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyLAoJCXVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNvdW50KQp7CglpZiAoIWNvdW50KQoJCXJldHVybiBOVUxMOwpgYGAKClNpbWlsYXJseSwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAgYWxzbyB1c2VzIGBjb3VudGAuCgpgYGBjCnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsCgkJdW5zaWduZWQgbG9uZyBjb3VudCkKewoJdW5zaWduZWQgbG9uZyBwZm47CgoJaWYgKFdBUk5fT05fT05DRSghaXRlci0mZ3Q7cGFnZV9leHQpKQoJCXJldHVybiBOVUxMOwoKCWlmICgmIzQzOyYjNDM7aXRlci0mZ3Q7aW5kZXggJmd0Oz0gY291bnQpCgkJcmV0dXJuIE5VTEw7CmBgYAoKVGhpcyBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IGluIGNhc2VzIHdoZXJlIGBfX3BnY291bnRgIChvciwgbm93LCB0aGUgYGNvdW50YCBwYXJhbWV0ZXIpIGlzIHplcm8uICBJdCBhdm9pZHMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgY2FsbHMgdG8gYHBhZ2VfZXh0X2xvb2t1cChwZm4pYCwgd2hpY2ggY291bGQgYmUgY29zdGx5IG9yLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIGV2ZW4gcG9zZSBhIHNhZmV0eSBjb25jZXJuLiAgSXQgbG9va3MgbGlrZSBhIGdvb2QgZGVmZW5zaXZlIGNvZGluZyBtZWFzdXJlLgoKQWxzbywgaXQgbWVhbnMgdGhlIGNoZWNrIGZvciBleGl0aW5nIHRoZSBsb29wIGlzIG5vdyBoYW5kbGVkIGludGVybmFsbHkgYnkgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAsIG1ha2luZyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBjb2RlIHNsaWdodGx5IGNsZWFuZXIuCgpOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgc2NhbiBgbW0vcGFnZV9vd25lci5jYCBhbmQgYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AgdG8gc2VlIGhvdyB0aGlzIGltcGFjdHMgdGhvc2UgYXJlYXMuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aGUgaW1tZWRpYXRlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfUEFHRV9FWFRFTlNJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTc9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0xNzIwLVx0XHRcdG1pZ2h0IHRha2UgbG9uZ2VyLCBlc3BlY2lhbGx5IG9uIHN5c3RlbXMgd2l0aCBhIGxvdCBvZlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MTcyMTpcdFx0XHRtZW1vcnkuIEF2YWlsYWJsZSB3aXRoIENPTkZJR19QQUdFX0VYVEVOU0lPTj15LlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMTcyMi1cbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjEwPUdlbmVyYWxcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjMzLSAgYGBub2RlX3BhZ2VfZXh0YGAgaXMgYXJyYXkgb2YgZXh0ZW5zaW9ucyBvZiBzdHJ1Y3QgcGFnZXMuIEF2YWlsYWJsZSBvbmx5XG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjM0OiAgaW4gdGhlIGtlcm5lbHMgYnVpbHQgd2l0aCBgYENPTkZJR19QQUdFX0VYVEVOU0lPTmBgIGVuYWJsZWQuXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjM1LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjA1PW5vZGVfem9uZWxpc3Rz5byV55So44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMjEt5a+55LqO5L2/55SoRkxBVE1FTeWGheWtmOaooeWei+eahFVNQeezu+e7n++8jDDlj7foioLngrnnmoQgYGBub2RlX3BhZ2VfZXh0YGBcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjIyOuaYr3N0cnVjdCBwYWdlc+eahOaJqeWxleaVsOe7hOOAguWPquacieWcqOaehOW7uuaXtuW8gOWQr+S6hiBgYENPTkZJR19QQUdFX0VYVEVOU0lPTmBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIyMy3pgInpobnnmoTlhoXmoLjkuK3miY3lj6/nlKjjgIJcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0NjU9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ4Mi1cdHN0cnVjdCBwYWdlICpub2RlX21lbV9tYXA7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE0ODM6I2lmZGVmIENPTkZJR19QQUdFX0VYVEVOU0lPTlxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNDg0LVx0c3RydWN0IHBhZ2VfZXh0ICpub2RlX3BhZ2VfZXh0O1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTk5NT1zdHJ1Y3QgbWVtX3NlY3Rpb24ge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMjAxMC1cdHN0cnVjdCBtZW1fc2VjdGlvbl91c2FnZSAqdXNhZ2U7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjIwMTE6I2lmZGVmIENPTkZJR19QQUdFX0VYVEVOU0lPTlxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0yMDEyLVx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg9OT1zdHJ1Y3QgcGdsaXN0X2RhdGE7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgtMTAtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTE6I2lmZGVmIENPTkZJR19QQUdFX0VYVEVOU0lPTlxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTEyLS8qKlxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTYtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTk3OiNlbHNlIC8qICFDT05GSUdfUEFHRV9FWFRFTlNJT04gKi9cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTgtc3RydWN0IHBhZ2VfZXh0O1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0yMzE9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfZXh0X3B1dChzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0KVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0yMzMtfVxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oOjIzNDojZW5kaWYgLyogQ09ORklHX1BBR0VfRVhURU5TSU9OICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgtMjM1LSNlbmRpZiAvKiBfX0xJTlVYX1BBR0VfRVhUX0ggKi9cbi0tXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc9NDY9Q09ORklHX0RFQlVHX05FVD15XG4tLVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTU2LSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjU3OkNPTkZJR19QQUdFX0VYVEVOU0lPTj15XG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNTgtQ09ORklHX1BBR0VfT1dORVI9eVxuLS1cbm1tL01ha2VmaWxlPTEyNT1vYmotJChDT05GSUdfQkFMTE9PTikgJiM0Mzs9IGJhbGxvb24ub1xubW0vTWFrZWZpbGU6MTI2Om9iai0kKENPTkZJR19QQUdFX0VYVEVOU0lPTikgJiM0Mzs9IHBhZ2VfZXh0Lm9cbm1tL01ha2VmaWxlLTEyNy1vYmotJChDT05GSUdfUEFHRV9UQUJMRV9DSEVDSykgJiM0Mzs9IHBhZ2VfdGFibGVfY2hlY2sub1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2RlYnVnLmNvbmZpZz02PUNPTkZJR19ERUJVR19JTkZPX0RXQVJGND15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9kZWJ1Zy5jb25maWc6NzpDT05GSUdfUEFHRV9FWFRFTlNJT049eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvZGVidWcuY29uZmlnLTgtQ09ORklHX1BBR0VfUE9JU09OSU5HPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjIyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gYFBBR0VfRVhURU5TSU9OYCwgYFBBR0VfT1dORVJgLCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgIGFyZSB0aGUga2V5IG9uZXMgdGhhdCBzdGFuZCBvdXQuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7V2hlcmUgYXJlIHRoZXNlIGRlZmluZWQgYW5kIGRvY3VtZW50ZWQ/JiMzNDsgYW5kIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IGEgcmVmbGV4IGF0IHRoaXMgcG9pbnQ7IG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLCBLY29uZmlnIGlzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIGdvLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBgUEFHRV9FWFRFTlNJT05gIGlzIGFsbCBhYm91dCDigJMgdGhhdCYjMzk7bGwgbGlrZWx5IGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFsbCB0aHJlZSBhbmQgd2hhdCBjb25maWd1cmF0aW9uIGRlY2lzaW9ucyBhcmUgdGllZCB0byB0aGVtLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBhbmNob3IgZm9yIHRoZSByZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX0VYVEVOU0lPTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5tbS9LY29uZmlnLmRlYnVnOjI6Y29uZmlnIFBBR0VfRVhURU5TSU9OXG5tbS9LY29uZmlnLmRlYnVnLTMtXHRib29sIFwmIzM0O0V4dGVuZCBtZW1tYXAgb24gZXh0cmEgc3BhY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MjkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIERlYnVnZ2luZyBEaXZlOiBQQUdFX09XTkVSIGFuZCBQQUdFX1RBQkxFX0NIRUNLKioKClJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgZGVidWdnaW5nIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHZlcmlmeWluZyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9mIGEgY291cGxlIG9mIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWcgZmVhdHVyZXM6IGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgd2hlbiBJJiMzOTttIHRyYWNraW5nIGRvd24gbWVtb3J5IGNvcnJ1cHRpb24sIGxlYWtzLCBvciBhbnkgb3RoZXIgaXNzdWVzIGRlZXAgd2l0aGluIHRoZSBtZW1vcnkgc3Vic3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5IGFyZSB1c2VkIGFuZCB2ZXJpZnkgaWYgdGhleSBhcmUgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGlzIGZ1bmRhbWVudGFsIGZvciBteSBuZXh0IGRlYnVnZ2luZyBzZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9PV05FUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xuLS1cbm1tL0tjb25maWcuZGVidWctMTA0LVxubW0vS2NvbmZpZy5kZWJ1ZzoxMDU6Y29uZmlnIFBBR0VfT1dORVJcbm1tL0tjb25maWcuZGVidWctMTA2LVx0Ym9vbCBcJiMzNDtUcmFjayBwYWdlIG93bmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgUEFHRV9UQUJMRV9DSEVDS2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIFRoZSBjdXJyZW50IHN0YXRlIG9mIGFmZmFpcnMgc3VnZ2VzdHMgd2UgbmVlZCB0byBwZXJmb3JtIGEgY3JpdGljYWwgY2hlY2suIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiBgUEFHRV9UQUJMRV9DSEVDS2AuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBpdCYjMzk7cyBhIGRlZXAgZGl2ZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHBhZ2UgdGFibGUgc3RydWN0dXJlLiBBcmUgdGhlIG1hcHBpbmdzIGNvbnNpc3RlbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBpbmNvbnNpc3RlbmNpZXMsIHN1Y2ggYXMgZW50cmllcyBwb2ludGluZyB0byBpbnZhbGlkIHBoeXNpY2FsIGFkZHJlc3NlcyBvciwgbW9yZSBpbXBvcnRhbnRseSwgKnVub3duZWQqIHBhZ2VzIG1hcHBlZD8gVGhpcyBjaGVjayBpcyBmb3VuZGF0aW9uYWw7IGlmIHRoZSBwYWdlIHRhYmxlIGlzbiYjMzk7dCBzb3VuZCwgdGhlIGVudGlyZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gaXMgcG90ZW50aWFsbHkgY29tcHJvbWlzZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGhhbHQsIGRlYnVnLCBvciB0YWtlIHNvbWUgb3RoZXIgY29ycmVjdGl2ZSBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1RBQkxFX0NIRUNLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTA1PWNvbmZpZyBQQUdFX09XTkVSXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMjEtXG5tbS9LY29uZmlnLmRlYnVnOjEyMjpjb25maWcgUEFHRV9UQUJMRV9DSEVDS1xubW0vS2NvbmZpZy5kZWJ1Zy0xMjMtXHRib29sIFwmIzM0O0NoZWNrIGZvciBpbnZhbGlkIG1hcHBpbmdzIGluIHVzZXIgcGFnZSB0YWJsZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTEzNS1cbm1tL0tjb25maWcuZGVidWc6MTM2OmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXG5tbS9LY29uZmlnLmRlYnVnLTEzNy1cdGJvb2wgXCYjMzQ7RW5mb3JjZSB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvcGFnZV9leHQuaGAuIFRoYXQmIzM5O3MgYSBoZWFkZXIgZmlsZSwgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCYjMzk7cyBjcnVjaWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHdpdGggZXh0ZW5zaW9ucyB0byBwYWdlIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdXNlZCBieSBgbW0vcGFnZV9vd25lci5jYCBhbmQgYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AuIFRob3NlIGFyZSBpbXBvcnRhbnQgZmlsZXM7IHRoZSBmaXJzdCBvbmUgZGVhbHMgd2l0aCB0cmFja2luZyBwYWdlIG93bmVyc2hpcCBhbmQgdGhlIHNlY29uZCB3aXRoIGNoZWNraW5nIHRoZSBpbnRlZ3JpdHkgb2YgcGFnZSB0YWJsZXMuCgpUaGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlIHRvIGBwYWdlX2V4dF9pdGVyX2JlZ2luYCwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAsIGFuZCB0aGUgbWFjcm8gYGZvcl9lYWNoX3BhZ2VfZXh0YC4gUmlnaHQsIHRob3NlIGFyZSBhbGwgaW5saW5lLCBzbyB0aGUgYWN0dWFsIGNvZGUgaXMgaW5zZXJ0ZWQgZGlyZWN0bHkgd2hlcmUgdGhleSYjMzk7cmUgdXNlZC4gVGhpcyBpcyBhIGNydWNpYWwgcG9pbnQgZm9yIGZ1enppbmcuIFNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlIG1hY3JvIGFyZSBpbmxpbmVkLCB0aGUgZm9jdXMgZm9yIGZ1enppbmcgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGZ1bmN0aW9ucyB0aGF0ICpjYWxsKiBgZm9yX2VhY2hfcGFnZV9leHRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIG1ha2luZyB1c2Ugb2YgdGhpcyBtYWNybyBub3cuIFRob3NlIGFyZSB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBzdXJmYWNlLiBUaW1lIHRvIGZpbmQgd2hlcmUgdGhhdCBtYWNybyBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3JfZWFjaF9wYWdlX2V4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDsuY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XG4tLVxuLmNsYW5nLWZvcm1hdC0zOTQtICAtICYjMzk7Zm9yX2VhY2hfb3JfYml0JiMzOTtcbi5jbGFuZy1mb3JtYXQ6Mzk1OiAgLSAmIzM5O2Zvcl9lYWNoX3BhZ2VfZXh0JiMzOTtcbi5jbGFuZy1mb3JtYXQtMzk2LSAgLSAmIzM5O2Zvcl9lYWNoX3BhdGgmIzM5O1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xODItLyoqXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTgzOiAqIGZvcl9lYWNoX3BhZ2VfZXh0KCk6IGl0ZXJhdGUgdGhyb3VnaCBwYWdlX2V4dCBvYmplY3RzLlxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTE4NC0gKiBAX19wYWdlOiB0aGUgcGFnZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpblxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTEtICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTkyOiNkZWZpbmUgZm9yX2VhY2hfcGFnZV9leHQoX19wYWdlLCBfX3BnY291bnQsIF9fcGFnZV9leHQsIF9faXRlcikgXFxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTMtXHRmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcbi0tXG5tbS9wYWdlX293bmVyLmM9MjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX293bmVyLmMtMjU1LVx0cmN1X3JlYWRfbG9jaygpO1xubW0vcGFnZV9vd25lci5jOjI1NjpcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xubW0vcGFnZV9vd25lci5jLTI1Ny1cdFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX293bmVyLmM9MjczPXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0yODMtXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9wYWdlX293bmVyLmM6Mjg0Olx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtMjg1LVx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zNjE9dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG4tLVxubW0vcGFnZV9vd25lci5jLTM2Ny1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2Vfb3duZXIuYzozNjg6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvbGRfb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtMzY5LVx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zNzU9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4tLVxubW0vcGFnZV9vd25lci5jLTQxNy1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2Vfb3duZXIuYzo0MTg6XHRmb3JfZWFjaF9wYWdlX2V4dChcdTAwMjZvbGQtXHUwMDNlcGFnZSwgMSBcdTAwM2NcdTAwM2MgbmV3X3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG5tbS9wYWdlX293bmVyLmMtNDE5LVx0XHRvbGRfcGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9NjM9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19jbGVhcih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBwZ2NudClcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNzctXHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Nzg6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy03OS1cdFx0c3RydWN0IHBhZ2VfdGFibGVfY2hlY2sgKnB0YyA9IGdldF9wYWdlX3RhYmxlX2NoZWNrKHBhZ2VfZXh0KTtcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9OTc9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19zZXQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQsXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTExMi1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMTM6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xMTQtXHRcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTEzMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTEzOC1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMzk6XHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNDAtXHRcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgT3duZXIgYW5kIFBhZ2UgVGFibGUgQ2hlY2sgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgLCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAsIGBfX3NwbGl0X3BhZ2Vfb3duZXJgLCBgX19mb2xpb19jb3B5X293bmVyYCwgYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgLCBgcGFnZV90YWJsZV9jaGVja19zZXRgLCBhbmQgYF9fcGFnZV90YWJsZV9jaGVja196ZXJvYC4gQmFzZWQgb24gdGhlaXIgbmFtZXMgYW5kIHRoZSBjb250ZXh0LCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgIGFuZCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgYXJlIGdvaW5nIHRvIGJlIGludm9rZWQgb24gYWxtb3N0IGV2ZXJ5IHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBhc3N1bWluZyBgUEFHRV9PV05FUmAgaXMgYWN0aXZlLiBUaGV5JiMzOTtyZSBoYW5kbGluZyB0cmFja2luZyBwYWdlIG93bmVyc2hpcCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIG1lbW9yeSBtYW5hZ2VtZW50LgoKU2ltaWxhcmx5LCB0aGUgYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgLCBgcGFnZV90YWJsZV9jaGVja19zZXRgLCBhbmQgYF9fcGFnZV90YWJsZV9jaGVja196ZXJvYCBmdW5jdGlvbnMgYXJlIGxpa2VseSB0aWVkIHRvIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gYFBBR0VfVEFCTEVfQ0hFQ0tgIGlzIGVuYWJsZWQuIFRoZXkgYXJlIHByb2JhYmx5IHVzZWQgZm9yIGRldGVjdGluZyBhbmQgbG9nZ2luZyBjb3JydXB0aW9uLCB3aGljaCBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmcuCgpUaGUga2V5IHF1ZXN0aW9uIG5vdyBpcyBwZXJmb3JtYW5jZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgcG90ZW50aWFsbHkgaGlnaCBmcmVxdWVuY3kgb2YgY2FsbHMgdG8gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlYC4gR2l2ZW4gaXRzIGxpa2VseSByb2xlIGluIGV2ZXJ5IGFsbG9jYXRpb24sIHRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZmlyc3QuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgYSBob3QgcGF0aCwgb3IgaWYgaXQmIzM5O3MgYWRkaW5nIGEgbWVhc3VyYWJsZSBvdmVyaGVhZC4gSXQgaXMgcG9zc2libGUsIGlmIG9wdGltaXplZCwgaXQgaXMgbm90IGEgYmlnIGNvbmNlcm4uIEkgbmVlZCB0byBtZWFzdXJlIGFuZCBwcm9maWxlIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYz0yMzE9c3RhdGljIHZvaWQgZGVjX3N0YWNrX3JlY29yZF9jb3VudChkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXG4tLVxubW0vcGFnZV9vd25lci5jLTI0My1cbm1tL3BhZ2Vfb3duZXIuYzoyNDQ6c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9vd25lci5jLTI0NS1cdFx0XHRcdFx0ICAgICAgZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zMzU9bm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcbi0tXG5tbS9wYWdlX293bmVyLmMtMzQxLVx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XG5tbS9wYWdlX293bmVyLmM6MzQyOlx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIC0xLFxubW0vcGFnZV9vd25lci5jLTM0My1cdFx0XHRcdCAgIHRzX25zZWMsIGN1cnJlbnQtXHUwMDNlcGlkLCBjdXJyZW50LVx1MDAzZXRnaWQsXG4tLVxubW0vcGFnZV9vd25lci5jPTM3NT12b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbi0tXG5tbS9wYWdlX293bmVyLmMtMzk3LVx0bWlncmF0ZV9oYW5kbGUgPSBuZXdfcGFnZV9vd25lci1cdTAwM2VoYW5kbGU7XG5tbS9wYWdlX293bmVyLmM6Mzk4Olx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlaGFuZGxlLFxubW0vcGFnZV9vd25lci5jLTM5OS1cdFx0XHRcdCAgIG9sZF9wYWdlX293bmVyLVx1MDAzZW9yZGVyLCBvbGRfcGFnZV9vd25lci1cdTAwM2VnZnBfbWFzayxcbi0tXG5tbS9wYWdlX293bmVyLmM9NzcyPXN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX293bmVyLmMtODI3LVx0XHRcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXG5tbS9wYWdlX293bmVyLmM6ODI4Olx0XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcbm1tL3BhZ2Vfb3duZXIuYy04MjktXHRcdFx0XHRcdFx0ICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Nzg0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlBhZ2UgT3duZXJzaGlwIGluIHRoZSBLZXJuZWw6IEEgUXVpY2sgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcGFnZSBvd25lcnNoaXAgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLkkgcmVtZW1iZXIgdGhhdCB0aGUgYF9fc2V0X3BhZ2Vfb3duZXJgIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGEgcGFnZSwgdGhhdCBtYWtlcyBzZW5zZS4gVGhlbiwgSSByZWNhbGwgdGhhdCBgX19zcGxpdF9wYWdlX293bmVyYCBjb21lcyBpbnRvIHBsYXkgd2hlbiBhIHBhZ2UgaXMgc3BsaXQgaW50byBzbWFsbGVyIHVuaXRzLiBBbmQgZmluYWxseSwgd2hlbiBhIGZvbGlvIGlzIGNvcGllZCwgcGFydGljdWxhcmx5IGR1cmluZyBtaWdyYXRpb24sIHRoZSBrZXJuZWwgdXNlcyBgX19mb2xpb19jb3B5X293bmVyYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBpbnRlZ3JpdHkgb2Ygb3VyIHBhZ2UgbWFuYWdlbWVudCBzeXN0ZW0uCgpOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgIGFuZCBgcGFnZV90YWJsZV9jaGVja19zZXRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaW5jb25zaXN0ZW5jaWVzIGNyZWVwaW5nIGluIGR1cmluZyB0aGVzZSBvcGVyYXRpb25zLCB3aGljaCBjb3VsZCBsZWFkIHRvIG5hc3R5IG1lbW9yeSBsZWFrcyBvciwgd29yc2UsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gdGhvc2UgZnVuY3Rpb25zIGFuZCBtYWtlIHN1cmUgdGhleSYjMzk7cmUgYWRoZXJpbmcgdG8gdGhlIGV4cGVjdGVkIHNlbWFudGljcyBvZiB0aGUgb3duZXJzaGlwIHN5c3RlbSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlc2UgY29yZSBhbGxvY2F0aW9uLCBzcGxpdCwgYW5kIGNvcHkgcm91dGluZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGlzIGlzIHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3RhYmxlX2NoZWNrX2NsZWFyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfdGFibGVfY2hlY2suYz01Mz1zdGF0aWMgc3RydWN0IHBhZ2VfdGFibGVfY2hlY2sgKmdldF9wYWdlX3RhYmxlX2NoZWNrKHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTYyLSAqL1xubW0vcGFnZV90YWJsZV9jaGVjay5jOjYzOnN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQpXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNjQte1xuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xNDg9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE1NC1cdGlmIChwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB0ZSkpXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTU1Olx0XHRwYWdlX3RhYmxlX2NoZWNrX2NsZWFyKHB0ZV9wZm4ocHRlKSwgUEFHRV9TSVpFIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNTYtfVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xNTk9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE2NS1cdGlmIChwbWRfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHBtZCkpXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTY2Olx0XHRwYWdlX3RhYmxlX2NoZWNrX2NsZWFyKHBtZF9wZm4ocG1kKSwgUE1EX1NJWkUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTE2Ny19XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE3MD12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTc2LVx0aWYgKHB1ZF91c2VyX2FjY2Vzc2libGVfcGFnZShtbSwgYWRkciwgcHVkKSlcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxNzc6XHRcdHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIocHVkX3BmbihwdWQpLCBQVURfU0laRSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTc4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb3QgUGF0aHMgYW5kIFplcm8gUGFnZSBDb3VudHMqKgoKT2theSwgdGhlc2UgZnVuY3Rpb25zLCBgX19zZXRfcGFnZV9vd25lcmAgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyYCwgYXJlIGRlZmluaXRlbHkgb24gdGhlIGhvdCBwYXRoLCBjYWxsZWQgYWxsIHRoZSB0aW1lLiBCdXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgYGZvcl9lYWNoX3BhZ2VfZXh0YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZnVuY3Rpb25hbCwgZml4aW5nIGEgcG90ZW50aWFsIGJ1Zy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBgZm9yX2VhY2hfcGFnZV9leHRgIHdpdGggYF9fcGdjb3VudCA9PSAwYCB3YXMgc3RpbGwgY2FsbGluZyBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYHBhZ2VfZXh0X2xvb2t1cChwZm4pYC4KClNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hlbiB3b3VsZCBgX19wZ2NvdW50YCBiZSB6ZXJvPyBJZiBpdCYjMzk7cyB6ZXJvLCB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgMC1vcmRlciBwYWdlLCByaWdodD8gQnV0IHRoZW4sIGAxICZsdDsmbHQ7IG9yZGVyYCBpcyBhdCBsZWFzdCAxLCBzbyB0aGUgY2hlY2sgb24gdGhlIHNpemUgb2YgdGhlIHBhZ2UgZXh0IHNlZW1zIG9mZi4KCkxldCBtZSB0aGluay4uLiBjb3VsZCBgcGdjbnRgIGluIGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYCBvciBgcGFnZV90YWJsZV9jaGVja19zZXRgIGJlIHplcm8/IEl0JiMzOTtzIHJlYWxseSBoYXJkIHRvIHJlbWVtYmVyIGVkZ2UgY2FzZXMuIEhhbmcgb24sIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtYWtpbmcgYSBzaWxseSBtaXN0YWtlLiBJJiMzOTttIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIHRoZSBiYXNpYyBzaGlmdCBjb25zdGFudHM6IGBQQUdFX1NJWkUgJmd0OyZndDsgUEFHRV9TSElGVGAgaXMgMSBhbmQgYFBNRF9TSVpFICZndDsmZ3Q7IFBBR0VfU0hJRlRgIGlzIDUxMiwgYWxsIGdvb2QuCgpPa2F5LCBiYWNrIHRvIHRoZSBjb3JlIHF1ZXN0aW9uOiB3aGVuIGlzIGBfX3BnY291bnRgIHplcm8/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBjaGVjayBgX19zcGxpdF9wYWdlX293bmVyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zcGxpdF9wYWdlX293bmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTEyPWV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xMy1cdFx0XHR1bnNpZ25lZCBzaG9ydCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MTQ6ZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMTUtXHRcdFx0aW50IG5ld19vcmRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9MzU9c3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMzgtXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDozOTpcdFx0X19zcGxpdF9wYWdlX293bmVyKHBhZ2UsIG9sZF9vcmRlciwgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQwLX1cbi0tXG5tbS9wYWdlX293bmVyLmM9MzQ4PXZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcbi0tXG5tbS9wYWdlX293bmVyLmMtMzYwLVxubW0vcGFnZV9vd25lci5jOjM2MTp2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcbm1tL3BhZ2Vfb3duZXIuYy0zNjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUGFnZSBUYWJsZSBNYW5pcHVsYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGZvY3VzZWQgb24gYF9fc3BsaXRfcGFnZV9vd25lcmAuIEkgc2VlIGl0IHRha2VzIGBvbGRfb3JkZXJgIGFuZCBgbmV3X29yZGVyYCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2sgb24gaG93IHBhZ2UgZXh0ZW50cyBhcmUgaGFuZGxlZC4gVGhlIGxvb3AgdXNpbmcgYGZvcl9lYWNoX3BhZ2VfZXh0YCB3aXRoIGAxICZsdDsmbHQ7IG9sZF9vcmRlcmAgY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHBhZ2Ugc2l6ZSBhZGp1c3RtZW50cy4gT2YgY291cnNlLCBgMSAmbHQ7Jmx0OyBvbGRfb3JkZXJgIGlzIGFsd2F5cyBhdCBsZWFzdCAxLCBidXQgSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB3ZSBnZXQgYSAqemVybyogY291bnQuCgpUaGUgcXVlc3Rpb24gdGhhdCBhcmlzZXMgaXM6IGFyZSB0aGVyZSBhbnkgc2NlbmFyaW9zIHdoZXJlIGBfX3BnY291bnRgIGJlY29tZXMgemVybz8gTXkgZmlyc3QgdGhvdWdodCBpbW1lZGlhdGVseSBsYW5kcyBvbiBgcGFnZV90YWJsZV9jaGVja19jbGVhcmAsIHNwZWNpZmljYWxseSBpZiBpdCYjMzk7cyBvcGVyYXRpbmcgb24gYSB6ZXJvZWQgY291bnQuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBTbywgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjYWxsZXJzIG9mIGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYC4KCkRpdmluZyBpbnRvIHRoZSBjYWxsZXJzLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcmAgaXMgcGFzc2luZyBgUEFHRV9TSVpFICZndDsmZ3Q7IFBBR0VfU0hJRlRgLCB3aGljaCByZXNvbHZlcyB0byAxLiBgX19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhcmAgaXMgcGFzc2luZyBgUE1EX1NJWkUgJmd0OyZndDsgUEFHRV9TSElGVGAsIHdoaWNoIGlzIDUxMi4gQW5kLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcmAgaXMgcGFzc2luZyBgUFVEX1NJWkUgJmd0OyZndDsgUEFHRV9TSElGVGAsIHdoaWNoIGlzIGEgbGFyZ2UgMjYyMTQ0LiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgZ3JhbnVsYXJpdGllcyB0aGlzIGNoZWNrIGlzIGJlaW5nIGFwcGxpZWQgdG8uCgpOb3csIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb3VudGVycGFydCwgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YC4gTXkgYW5hbHlzaXMgaXNuJiMzOTt0IGNvbXBsZXRlIHdpdGhvdXQgaW52ZXN0aWdhdGluZyB3aGF0JiMzOTtzIGhhcHBlbmluZyBvbiB0aGUgc2V0dGluZyBzaWRlIGFzIHdlbGwuIEkmIzM5O20gbm90aW5nIHRoaXMgZG93biwgc2luY2UgYm90aCBvcGVyYXRpb25zIG5lZWQgdG8gYmUgbG9va2VkIGF0IHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV90YWJsZV9jaGVja19zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV90YWJsZV9jaGVjay5jPTYzPXN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTk2LSAqL1xubW0vcGFnZV90YWJsZV9jaGVjay5jOjk3OnN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfc2V0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHBnY250LFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTk4LVx0XHRcdFx0IGJvb2wgcncpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE5OT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yMTEtXHRpZiAocHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKG1tLCBhZGRyLCBwdGUpKVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIxMjpcdFx0cGFnZV90YWJsZV9jaGVja19zZXQocHRlX3BmbihwdGUpLCBuciwgcHRlX3dyaXRlKHB0ZSkpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxMy19XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTIyOD12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNDEtXHRpZiAocG1kX3VzZXJfYWNjZXNzaWJsZV9wYWdlKG1tLCBhZGRyLCBwbWQpKVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI0MjpcdFx0cGFnZV90YWJsZV9jaGVja19zZXQocG1kX3BmbihwbWQpLCBzdHJpZGUgKiBuciwgcG1kX3dyaXRlKHBtZCkpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTI0My19XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTI0Nj12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNTctXHRpZiAocHVkX3VzZXJfYWNjZXNzaWJsZV9wYWdlKG1tLCBhZGRyLCBwdWQpKVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI1ODpcdFx0cGFnZV90YWJsZV9jaGVja19zZXQocHVkX3BmbihwdWQpLCBzdHJpZGUgKiBuciwgcHVkX3dyaXRlKHB1ZCkpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTI1OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzY2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgWmVyby1WYWx1ZWQgUGFyYW1ldGVyIGluIFBhZ2UgVGFibGUgQ2hlY2tzKioKCk9rYXksIHNvIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXRgIHRha2VzIGFuIGFyZ3VtZW50LCBgbnJgLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIGBucmAgY2FuLCB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcywgbGVnaXRpbWF0ZWx5IGJlIHplcm8uIElmIGl0ICpjYW4qLCB0aGVuIEkgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgbG9naWMgb2YgYF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAgdG8gZW5zdXJlIGl0IGhhbmRsZXMgdGhpcyBlZGdlIGNhc2UgZ3JhY2VmdWxseSwgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhIHplcm8gdmFsdWUuIElmIGl0ICpjYW5ub3QqLCB0aGVuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBpdCAqY291bGQqIGJlIHJlY2VpdmluZyBhIHplcm8gdmFsdWUgYW5kIHdoZXRoZXIgdGhhdCBjb25zdGl0dXRlcyBhIGJ1Zy4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXRgLiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCwgYW5kIHdpdGggd2hhdCB2YWx1ZXMgb2YgYG5yYCwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCB1c2FnZSwgYW5kIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gZGV0ZXJtaW5lIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIHBvc3NpYmlsaXR5IG9mIGEgemVyby12YWx1ZWQgYG5yYCBwYXJhbWV0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTIyLVx0XHRcdFx0ICBwdWRfdCBwdWQpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MjM6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI0LVx0XHRwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgbnIpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTc2PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTgyLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6ODM6XHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSwgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtODQtfVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xODg9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfZmxhZ3MocHRlX3QgcHRlKVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xOTgtXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTk5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjAwLVx0XHRcdFx0IHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsIHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjEzLX1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyMTQ6RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhpcyBgcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIFdoYXQmIzM5O3MgaXQgZG9pbmc/IElzIGl0IGEgY3J1Y2lhbCBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHNvbWV0aGluZyBhbmNpbGxhcnk/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgaXMgaXQgbW9yZSBvZiBhIGdlbmVyYWwgY29uY2VwdC4gRmlyc3QsIEnigJltIGdvaW5nIHRvIGNvbnNpZGVyIGl0cyBuYW1lLCBhcyBpdCB3b3VsZCBhcHBlYXIgdGhpcyBjb2RlIGlzIHdyaXR0ZW4gc28gdGhhdCBuYW1lcyBpbmRpY2F0ZSBmdW5jdGlvbi4gSSYjMzk7bSBpbWFnaW5pbmcgaXQmIzM5O3MgZGVzaWduZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBQYWdlIFRhYmxlIEVudHJpZXMgKFBURXMpIGJlaW5nIHNldCBjb3JyZWN0bHkuIEJ1dCB3aGF0IHNwZWNpZmljYWxseSBkb2VzICYjMzQ7c2V0JiMzNDsgbWVhbiBoZXJlPyBEb2VzIGl0IG1lYW4gdGhlIGV4cGVjdGVkIGJpdHMgYXJlIHNldCBjb3JyZWN0bHk/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGluaXRpYWxpemF0aW9uLCB1cGRhdGluZywgb3IgcGVyaGFwcyBjaGVja2luZyBmb3IgaW5jb25zaXN0ZW5jaWVzPyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgcG9zc2libGUgc2NlbmFyaW9zIHRoaXMgZnVuY3Rpb24gaGFuZGxlcy4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBjb2RlIGl0c2VsZiwgY29uc2lkZXJpbmcgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZSBhbmQgd2hldGhlciB0aGUgb3BlcmF0aW9uIGlzIGF0b21pYyBvciB0aHJlYWQgc2FmZS4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgY29kZSwgYW5kIGhvdyB0byB2ZXJpZnkgaXQuIEnigJlsbCBtYWtlIHN1cmUgdG8gbm90ZSBhbnkgYXNzdW1wdGlvbnMgYW5kIGVkZ2UgY2FzZXMgaXQgbWlnaHQgYmUgZGVzaWduZWQgdG8gaGFuZGxlIGFuZCBpZiB0aGVyZSBpcyBhbnkgcG90ZW50aWFsIGZvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gQW5kIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lLCBob3cgY3JpdGljYWwgaXMgdGhpcyBmdW5jdGlvbiYjMzk7cyBjb3JyZWN0IG9wZXJhdGlvbiB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3Mgc3RhYmlsaXR5IGFuZCBzZWN1cml0eT8gSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIHBvdGVudGlhbCBmb3IgYSBjcml0aWNhbCB2dWxuZXJhYmlsaXR5IHRvIGJlIGV4cG9zZWQuIEnigJlsbCBhcHByb2FjaCB0aGlzIHN5c3RlbWF0aWNhbGx5IHRvIGdhaW4gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTY3Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfcHRlc19hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTY4MC1cdGNhc2UgUEFHRV9TSVpFOlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6NjgxOlx0XHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBwdGUsIG5yKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTY4Mi1cdFx0YnJlYWs7XG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYz0xOTM9dm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jLTIxMC1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmM6MjExOlx0cGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgcHRlLCBucik7XG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jLTIxMi1cbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaD02MjI9c3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjI0LXtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjYyNTpcdHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIHB0ZXZhbCwgbnIpO1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjI2LVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTMzMj1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzMzYtXHRcdGVudHJ5ID0gY2xlYXJfcHRlX2JpdChlbnRyeSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEzMzc6XHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSwgbnIpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMzM4LVx0Zm9yICg7Oykge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTIxPXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjItXHRcdFx0XHQgIHB1ZF90IHB1ZCk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoyMzp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjQtXHRcdHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsIHVuc2lnbmVkIGludCBucik7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Njc9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTc1LVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6NzY6c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC03Ny1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTgyLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6ODM6XHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSwgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtODQtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTEzND1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTM4LVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTM5OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTQwLVx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9NDEwPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTQxMi17XG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDo0MTM6XHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBwdGUsIG5yKTtcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTQxNC1cbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTg4PXN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2ZsYWdzKHB0ZV90IHB0ZSlcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTk4LVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjE5OTp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIwMC1cdFx0XHRcdCBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxMy19XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MjE0OkVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yMTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjY1CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGBzZXRfcHRlc2AgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBgc2V0X3B0ZXNgIGlzIGEgcmVhbGx5IGNvbW1vbiBvcGVyYXRpb24sIHJpZ2h0PyBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzOiBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgYGZvcl9lYWNoX3BhZ2VfZXh0YC4gVGhhdCYjMzk7cyBhIHByZXR0eSB3aWRlIHJlYWNoLiBUaGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBpbXBvcnRhbnQgdG8gdGVzdCB0aG9yb3VnaGx5LiBCZWNhdXNlIGl04oCZcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QtZG8uIE5vIHF1ZXN0aW9ucyB0aGVyZS4KCkxldCYjMzk7cyBzZWUsIHdoYXQgY29uZmlncyBhcmUgcmVsZXZhbnQ/IFdlIG5lZWQgdG8gZW5hYmxlIGBQQUdFX0VYVEVOU0lPTmAsIG9idmlvdXNseSwgc2luY2UgdGhhdCYjMzk7cyB3aGF0IGV2ZXJ5dGhpbmcgZWxzZSBzZWVtcyB0byBoaW5nZSBvbi4gQW5kIGRlZmluaXRlbHkgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIFdhaXQgYSBtaW51dGUuLi4gYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AgYm90aCBkZXBlbmQgb24gYFBBR0VfRVhURU5TSU9OYCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gT2theSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCB3ZSBzaG91bGQgYmUgY29uc2lkZXJpbmcgaGVyZSwgc29tZXRoaW5nIHRoYXQgbWlnaHQgaW1wYWN0IGhvdyB0aGVzZSBmZWF0dXJlcyBpbnRlcmFjdCBvciByZXZlYWwgZGVlcGVyLCByZWxhdGVkIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBBR0VfRVhURU5TSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm1tL0tjb25maWcuZGVidWc6Mjpjb25maWcgUEFHRV9FWFRFTlNJT05cbm1tL0tjb25maWcuZGVidWctMy1cdGJvb2wgXCYjMzQ7RXh0ZW5kIG1lbW1hcCBvbiBleHRyYSBzcGFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYWdlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzU2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBLZXJuZWwgRGVidWdnaW5nIENvbmZpZ3VyYXRpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3VycmVudCBzdGF0dXMgb2Ygc29tZSBjcnVjaWFsIGRlYnVnZ2luZyBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgYW5kIHBhZ2UgdGFibGUgaW50ZWdyaXR5LiBUbyBkbyB0aGF0IGVmZmljaWVudGx5LCBteSBpbml0aWFsIHN0ZXAgaXMgdG8gaGVhZCBkaXJlY3RseSB0byBgbW0vS2NvbmZpZy5kZWJ1Z2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMgZm9yIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBUaGVzZSB0d28gYXJlIGZ1bmRhbWVudGFsIGZvciBpZGVudGlmeWluZyBtZW1vcnkgbGVha3MgYW5kIHN1YnRsZSBjb3JydXB0aW9uIGlzc3Vlcy4gSSBuZWVkIHRvIGtub3cgaWYgdGhleSYjMzk7cmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmRpdGlvbmFsbHkgY29uZmlndXJlZCwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgb3IgYnVpbGQgdHlwZS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGRpY3RhdGUgbXkgbmV4dCBkZWJ1Z2dpbmcgc3RlcHMgYW5kIGluZmx1ZW5jZSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgaW4gdGhlIGtlcm5lbCBsb2dzIG9yIG1lbW9yeSBkdW1wcy4gVGltZSB0byBkaXZlIGludG8gdGhhdCBLY29uZmlnIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX09XTkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMDQtXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXHRib29sIFwmIzM0O1RyYWNrIHBhZ2Ugb3duZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbnM6CgoqKkRlZXAgRGl2ZSBpbnRvIERlYnVnZ2luZyBPcHRpb25zKioKCkFscmlnaHQsIEkgbmVlZCB0byB0cm91Ymxlc2hvb3Qgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZXMsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIHByZXR0eSBzdGFuZGFyZCBvbmUsIGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3IgYWxsIHRob3NlIGRlYnVnZ2luZy1yZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgYFBBR0VfVEFCTEVfQ0hFQ0tgIG9wdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGUgZm9yIHdoYXQgSSBuZWVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1RBQkxFX0NIRUNLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTA1PWNvbmZpZyBQQUdFX09XTkVSXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMjEtXG5tbS9LY29uZmlnLmRlYnVnOjEyMjpjb25maWcgUEFHRV9UQUJMRV9DSEVDS1xubW0vS2NvbmZpZy5kZWJ1Zy0xMjMtXHRib29sIFwmIzM0O0NoZWNrIGZvciBpbnZhbGlkIG1hcHBpbmdzIGluIHVzZXIgcGFnZSB0YWJsZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTEzNS1cbm1tL0tjb25maWcuZGVidWc6MTM2OmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXG5tbS9LY29uZmlnLmRlYnVnLTEzNy1cdGJvb2wgXCYjMzQ7RW5mb3JjZSB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDAwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRW5hYmxpbmcgS2V5IE1lbW9yeSBNYW5hZ2VtZW50IEZlYXR1cmVzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgZW5hYmxlIHRob3NlIGNyaXRpY2FsIGZlYXR1cmVzOiBgUEFHRV9FWFRFTlNJT05gLCBgUEFHRV9PV05FUmAsIGBQQUdFX1RBQkxFX0NIRUNLYCwgYW5kIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gVGhlc2UgYWxsIHNlZW0gbGlrZSB0aGV5JiMzOTtsbCBjb250cmlidXRlIHRvIGEgbW9yZSByb2J1c3QgYW5kIHNlY3VyZSBtZW1vcnkgbW9kZWwuIFdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYFBBR0VfT1dORVJgIHJlcXVpcmluZyB0aGUgYHBhZ2Vfb3duZXI9b25gIGJvb3QgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGV0YWlsLCBhbmQgSSBkb24mIzM5O3Qgd2FudCB0byBtYWtlIGFuIGFzc3VtcHRpb24uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpcyBwcm9wZXJseSBjb25maWd1cmVkIGJlZm9yZSBJIGRvIGFueXRoaW5nLiBPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZG9jdW1lbnRhdGlvbiBvciBjb2RlIGZvciBgUEFHRV9PV05FUmAuIExldCYjMzk7cyBjbGFyaWZ5IGl0cyBiZWhhdmlvciBhbmQgZGVwZW5kZW5jaWVzIGJlZm9yZSBwcm9jZWVkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uYWxpdHkgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2Vfb3duZXI9b24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2FzYW4ucnN0PTk0PWVuYWJsZSBgYENPTkZJR19TVEFDS1RSQUNFYGAuIFRvIGluY2x1ZGUgYWxsb2MgYW5kIGZyZWUgc3RhY2sgdHJhY2VzIG9mIGFmZmVjdGVkXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q6OTU6cGh5c2ljYWwgcGFnZXMsIGVuYWJsZSBgYENPTkZJR19QQUdFX09XTkVSYGAgYW5kIGJvb3Qgd2l0aCBgYHBhZ2Vfb3duZXI9b25gYC5cbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2thc2FuLnJzdC05Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0PTM1PXBhZ2Ugb3duZXIgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gU28sIGlmIHlvdSYjMzk7ZCBsaWtlIHRvIHVzZSBpdCwgeW91IG5lZWRcbkRvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3Q6MzY6dG8gYWRkIFwmIzM0O3BhZ2Vfb3duZXI9b25cJiMzNDsgdG8geW91ciBib290IGNtZGxpbmUuIElmIHRoZSBrZXJuZWwgaXMgYnVpbHRcbkRvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QtMzctd2l0aCBwYWdlIG93bmVyIGFuZCBwYWdlIG93bmVyIGlzIGRpc2FibGVkIGluIHJ1bnRpbWUgZHVlIHRvIG5vdCBlbmFibGluZ1xuLS1cbkRvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3Q9NjU9VXNhZ2Vcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0LTcyLVxuRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdDo3MzoyKSBFbmFibGUgcGFnZSBvd25lcjogYWRkIFwmIzM0O3BhZ2Vfb3duZXI9b25cJiMzNDsgdG8gYm9vdCBjbWRsaW5lLlxuRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdC03NC1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2FzYW4ucnN0PTcyPUtBU0FO5Y+q5pSv5oyBU0xVQuOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rYXNhbi5yc3QtOTAtYGBDT05GSUdfU1RBQ0tUUkFDRWBgIOOAguimgeWMheaLrOWPl+W9seWTjeeJqeeQhumhtemdoueahOWIhumFjeWSjOmHiuaUvuWghuagiOi3n+i4queahOivne+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdDo5MTror7flkK/nlKggYGBDT05GSUdfUEFHRV9PV05FUmBgIOW5tuS9v+eUqCBgYHBhZ2Vfb3duZXI9b25gYCDov5vooYzlvJXlr7zjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rYXNhbi5yc3QtOTItXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGFnZV9vd25lci5yc3Q9MzI9cGFnZSBvd25lcuWcqOm7mOiupOaDheWGteS4i+aYr+emgeeUqOeahOOAguaJgOS7pe+8jOWmguaenOS9oOaDs+S9v+eUqOWug++8jOS9oOmcgOimgeWcqOS9oOeahOWQr+WKqGNtZGxpbmVcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BhZ2Vfb3duZXIucnN0OjMzOuS4reWKoOWFpVwmIzM0O3BhZ2Vfb3duZXI9b25cJiMzNDvjgILlpoLmnpzlhoXmoLjmmK/nlKhwYWdlIG93bmVy5p6E5bu655qE77yM5bm25LiU55Sx5LqO5rKh5pyJ5ZCv55So5ZCv5YqoXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9wYWdlX293bmVyLnJzdC0zNC3pgInpobnogIzlnKjov5DooYzml7bnpoHnlKhwYWdlIG93bmVy77yM6YKj5LmI6L+Q6KGM5pe255qE5byA6ZSA5piv5b6I5bCP55qE44CC5aaC5p6c5Zyo6L+Q6KGM5pe256aB55So77yM5a6D5LiNXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGFnZV9vd25lci5yc3QtNTktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9wYWdlX293bmVyLnJzdDo2MDoyKSDlkK/nlKhwYWdlIG93bmVyOiDmt7vliqAgXCYjMzQ7cGFnZV9vd25lcj1vblwmIzM0OyDliLAgYm9vdCBjbWRsaW5lLlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGFnZV9vd25lci5yc3QtNjEtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvZGV2LXRvb2xzL2thc2FuLnJzdD03Mj1LQVNBTuWPquaUr+aMgVNMVULjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9kZXYtdG9vbHMva2FzYW4ucnN0LTkwLWBgQ09ORklHX1NUQUNLVFJBQ0VgYCDjgILopoHljIXmi6zlj5flvbHpn7/niannkIbpoIHpnaLnmoTliIbphY3lkozph4vmlL7loIbmo6fot5/ouaTnmoToqbHvvIxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3Q6OTE66KuL5ZWT55SoIGBgQ09ORklHX1BBR0VfT1dORVJgYCDkuKbkvb/nlKggYGBwYWdlX293bmVyPW9uYGAg6YCy6KGM5byV5bCO44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9kZXYtdG9vbHMva2FzYW4ucnN0LTkyLVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjA9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzNy0jaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDM4Olx0LyogVXNlZCBieSBwYWdlX293bmVyPW9uIHRvIGRldGVjdCByZWN1cnNpb24gaW4gcGFnZSB0cmFja2luZy4gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDM5LVx0dW5zaWduZWRcdFx0XHRpbl9wYWdlX293bmVyOjE7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xMDU9Y29uZmlnIFBBR0VfT1dORVJcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTExNS1cdCAgZmVhdHVyZSBvbiB5b3VyIGJ1aWxkLCBpdCBpcyBkaXNhYmxlZCBpbiBkZWZhdWx0LiBZb3Ugc2hvdWxkIHBhc3Ncbm1tL0tjb25maWcuZGVidWc6MTE2Olx0ICBcJiMzNDtwYWdlX293bmVyPW9uXCYjMzQ7IHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4gRWF0c1xubW0vS2NvbmZpZy5kZWJ1Zy0xMTctXHQgIGEgZmFpciBhbW91bnQgb2YgbWVtb3J5IGlmIGVuYWJsZWQuIFNlZSB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY0NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDc5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBQYWdlIFRhYmxlIENoZWNrcyBhbmQgUEFHRV9PV05FUiBmb3IgU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGludGVncmF0ZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IHdpdGggc3l6a2FsbGVyLiAgV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWdlIHRhYmxlIGNoZWNrcyBhbmQgYFBBR0VfT1dORVJgLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gd2UgZGlyZWN0bHkgYWRkIGJvb3QgcGFyYW1ldGVycz8gUHJvYmFibHkgbm90LCBidXQgbWF5YmUgc3l6a2FsbGVyIGFscmVhZHkgaGFzIHNvbWV0aGluZywgb3Igd2UgY2FuIGp1c3QgZW5hYmxlIHRoZSBjb25maWcuIEdvb2QgbmV3cywgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgIHNlZW1zIGlkZWFsIGFzIGl0IGVuZm9yY2VzIGBQQUdFX1RBQkxFX0NIRUNLYCB3aXRob3V0IG5lZWRpbmcgYSBib290IHBhcmFtZXRlci4gVGhhdCYjMzk7cyBhIHdpbi4KCk5vdywgd2hlcmUgc2hvdWxkIHN5emthbGxlciYjMzk7cyBmb2N1cyBiZT8gSSBzdGFydGVkIGxpc3RpbmcgZnVuY3Rpb25zIHRvIHRhcmdldDogYF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlYCwgYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgLCBgX19zcGxpdF9wYWdlX293bmVyYCwgYF9fZm9saW9fY29weV9vd25lcmAsIGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYCwgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YCwgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AuIEhvbGQgb24sIGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYCBhbmQgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YCBhcmUgYHN0YXRpY2AuIE5vdCB1c2VmdWwuIFRoZSBleHBvcnRlZCBvbmVzIGFyZSB3aGVyZSB3ZSBzaG91bGQgYmUgbG9va2luZzogYF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAsIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXRgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YCwgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhcmAsIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyYCwgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AuCgpGb3IgYFBBR0VfT1dORVJgLCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBgX19zZXRfcGFnZV9vd25lcmAsIGBfX3NwbGl0X3BhZ2Vfb3duZXJgLCBgX19mb2xpb19jb3B5X293bmVyYCwgYW5kIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgLgoKSSB3YXMgZ2V0dGluZyByZWFkeSB0byBsaXN0IHRoZW0gYXMgZm9jdXMgc3ltYm9scywgYnV0IHdhaXQhIFRoZSBpbnN0cnVjdGlvbnMgZW1waGFzaXplIGF2b2lkaW5nICYjMzQ7Z2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMmIzM0OyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIGBfX3NldF9wYWdlX293bmVyYCBhbmQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAgKmFyZSogaG90IHBhdGhzIOKAkyBwYWdlIGFsbG9jYXRpb25zIGFuZCB1cGRhdGVzIGFyZSBjb3JlIHRvIGV2ZXJ5dGhpbmcuIExpc3RpbmcgdGhlbSBtaWdodCBiaWFzIHRoZSBmdXp6ZXIuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IHRvdWNoZXMgdGhlc2UgaG90IHBhdGggZnVuY3Rpb25zLiBJcyB0aGVyZSBhIHNwZWNpZmljIGZ1bmN0aW9uIHdoZXJlIGBfX3BnY291bnQgPT0gMGAgaXMgdHJpZ2dlcmVkIG9yIHJlbGF0ZWQgdG8gdGhlIHBhdGNoPyBUaGUgcGF0Y2ggbW9kaWZpZXMgYGZvcl9lYWNoX3BhZ2VfZXh0YCB3aXRoIGBjb3VudGAgbGltaXRzLiBDYWxsZXJzIHBhc3MgYDEgJmx0OyZsdDsgb3JkZXJgIG9yIGBwZ2NudGAuIEFuZCBgcGdjbnRgIGlzIHBvdGVudGlhbGx5IGBucmAgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAuIElmIGBucmAgaXMgMCwgd2UmIzM5O3JlIGluIHRoZSBuZXcgYmVoYXZpb3IuIFdoZW4gZG9lcyBgbnJgIGJlY29tZSAwPyBQb3RlbnRpYWxseSB3aXRoIGNlcnRhaW4gbW1hcC9tcHJvdGVjdC9tYWR2aXNlIGNhbGxzLgoKU2luY2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBob3QgcGF0aHMsIHNob3VsZCB3ZSBhdm9pZCB0aGVtIHRvIHByZXZlbnQgYmlhc2luZz8gTWF5YmUgd2Ugc2hvdWxkIGJlIGxpc3RpbmcgdGhlIGxlc3MgaG90IG9uZXMsIGxpa2UgYF9fc3BsaXRfcGFnZV9vd25lcmAgYW5kIGBfX2ZvbGlvX2NvcHlfb3duZXJgLiBIb2xkIG9uLCBgX19zcGxpdF9wYWdlX293bmVyYCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgaHVnZSBwYWdlIHNwbGl0cywgYW5kIGBfX2ZvbGlvX2NvcHlfb3duZXJgIGR1cmluZyBwYWdlIG1pZ3JhdGlvbi4gVGhvc2UgYXJlIG11Y2ggbGVzcyBmcmVxdWVudCB0aGFuIGJhc2ljIHBhZ2UgYWxsb2NhdGlvbi4KClNvLCBoZXJlJiMzOTtzIG15IHJlZmluZWQgbGlzdCBmb3IgYEZvY3VzU3ltYm9sc2A6CgoqICAgYF9fc3BsaXRfcGFnZV9vd25lcmAKKiAgIGBfX2ZvbGlvX2NvcHlfb3duZXJgCiogICBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YAoqICAgYF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldGAKKiAgIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyYAoqICAgYF9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXJgCgpOb3cgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBfX3NwbGl0X3BhZ2Vfb3duZXJgIGlzIGV4cG9ydGVkIG9yIHJlYWNoYWJsZSBmcm9tIHdoZXJlIHdlIGFyZSByaWdodCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3BsaXRfcGFnZV9vd25lciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xMj1leHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMTMtXHRcdFx0dW5zaWduZWQgc2hvcnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjE0OmV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTE1LVx0XHRcdGludCBuZXdfb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTM4LVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6Mzk6XHRcdF9fc3BsaXRfcGFnZV9vd25lcihwYWdlLCBvbGRfb3JkZXIsIG5ld19vcmRlcik7XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC00MC19XG4tLVxubW0vcGFnZV9vd25lci5jPTM0OD12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4tLVxubW0vcGFnZV9vd25lci5jLTM2MC1cbm1tL3BhZ2Vfb3duZXIuYzozNjE6dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG5tbS9wYWdlX293bmVyLmMtMzYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1OTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkRpZ2dpbmcgaW50byBgc3BsaXRfcGFnZV9vd25lcmAqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGlzIGJpdCBvZiBjb2RlLCBhbmQgSSYjMzk7dmUgZ290IGEgY2x1ZTogaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgbHVya2luZyBpbiBgbW0vcGFnZV9vd25lci5jYC4gVGhlIGZ1bmN0aW9uIEkmIzM5O20gYWZ0ZXIgaXMgYHNwbGl0X3BhZ2Vfb3duZXJgLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IG5hbWUsIGFuZCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBhIGZ1bmN0aW9uIHdpdGggYSBwcmV0dHkgc3BlY2lmaWMgbmFtZSwgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCBpdHNlbGYgY2FsbHMgYHNwbGl0X3BhZ2Vfb3duZXJgLgoKQWxyaWdodCwgc2luY2UgSSYjMzk7dmUgcGlubmVkIGRvd24gdGhlIGZ1bmN0aW9uIHRvIGNoZWNrLCBsZXQmIzM5O3MganVzdCB0cmFjZSB0aGUgY2FsbGVycyBvZiBgc3BsaXRfcGFnZV9vd25lcmAgZGlyZWN0bHkuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBjYWxsaW5nIGNvbnRleHQgYnkgZG9pbmcgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfcGFnZV9vd25lciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xMj1leHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMTMtXHRcdFx0dW5zaWduZWQgc2hvcnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjE0OmV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTE1LVx0XHRcdGludCBuZXdfb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTI4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0zNC1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM1OnN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMzYtXHRcdFx0aW50IG5ld19vcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0zOC1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM5Olx0XHRfX3NwbGl0X3BhZ2Vfb3duZXIocGFnZSwgb2xkX29yZGVyLCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDAtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTYwPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC02My19XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo2NDpzdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTY1LVx0XHRcdGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjcyPXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzcxNS1cdFx0Zm9saW9fc3BsaXRfbWVtY2dfcmVmcyhmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jOjM3MTY6XHRcdHNwbGl0X3BhZ2Vfb3duZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jLTM3MTctXHRcdHBnYWxsb2NfdGFnX3NwbGl0KGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcbi0tXG5tbS9odWdldGxiLmM9MzkxOT1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcbi0tXG5tbS9odWdldGxiLmMtMzk1MC1cbm1tL2h1Z2V0bGIuYzozOTUxOlx0XHRzcGxpdF9wYWdlX293bmVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGh1Z2VfcGFnZV9vcmRlcihzcmMpLCBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7XG5tbS9odWdldGxiLmMtMzk1Mi1cdFx0cGdhbGxvY190YWdfc3BsaXQoZm9saW8sIGh1Z2VfcGFnZV9vcmRlcihzcmMpLCBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTMwOTE9c3RhdGljIHZvaWQgX19zcGxpdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTMwOTQtXG5tbS9wYWdlX2FsbG9jLmM6MzA5NTpcdHNwbGl0X3BhZ2Vfb3duZXIocGFnZSwgb3JkZXIsIDApO1xubW0vcGFnZV9hbGxvYy5jLTMwOTYtXHRwZ2FsbG9jX3RhZ19zcGxpdChwYWdlX2ZvbGlvKHBhZ2UpLCBvcmRlciwgMCk7XG4tLVxubW0vcGFnZV9vd25lci5jPTM0OD12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4tLVxubW0vcGFnZV9vd25lci5jLTM2MC1cbm1tL3BhZ2Vfb3duZXIuYzozNjE6dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG5tbS9wYWdlX293bmVyLmMtMzYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IHRob3VnaHRzLCBhbmQgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgT3duZXIgU3ltYm9scyBmb3IgUGFnZSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHJlcHJlc2VudCB0aGUgJiMzNDtvd25lciYjMzQ7IG9mIGEgcGFnZSBpbiB0aGlzIHN5c3RlbS4gSSYjMzk7dmUgYmVlbiBjb25zaWRlcmluZyBkaWZmZXJlbnQgc3ltYm9scyBhbmQgYF9fc3BsaXRfcGFnZV9vd25lcmAgaW1tZWRpYXRlbHkgc3RyaWtlcyBtZSBhcyBhIHNvbGlkIGNob2ljZS4gSXQmIzM5O3MgY2xlYXJseSBuYW1lZCwgbGlrZWx5IGludHVpdGl2ZSBmb3Igc29tZW9uZSBmYW1pbGlhciB3aXRoIHRoZSBpbnRlcm5hbCB3b3JraW5ncywgYW5kIHNlZW1zIHRvIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2Ygd2hhdCB3ZSBuZWVkLiBIb3dldmVyLCBiZWZvcmUgc2V0dGxpbmcgb24gdGhhdCwgaXQmIzM5O3Mgd29ydGggYSBtb21lbnQgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBhbmQgaWYgdGhlcmUgYXJlIGFsdGVybmF0aXZlcyB0aGF0IG1pZ2h0IGJlIG1vcmUgYXBwcm9wcmlhdGUgaW4gc3BlY2lmaWMgc2NlbmFyaW9zLiBUaGF0IGxlYWRzIG1lIHRvIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IGBfX2ZvbGlvX2NvcHlfb3duZXJgLiBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBzeW1ib2wgaXMgYSBiZXR0ZXIgZml0IG9yIG5vdC4gUGVyaGFwcyBib3RoIGFyZSB2YWxpZCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgZXhhY3QgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mb2xpb19jb3B5X293bmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTE0PWV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTE1LVx0XHRcdGludCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MTY6ZXh0ZXJuIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTE3LWV4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQzLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6NDQ6XHRcdF9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQ1LX1cbi0tXG5tbS9wYWdlX293bmVyLmM9MzYxPXZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLCBpbnQgbmV3X29yZGVyKVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0zNzQtXG5tbS9wYWdlX293bmVyLmM6Mzc1OnZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxubW0vcGFnZV9vd25lci5jLTM3Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPd25lcnNoaXAgVHJhbnNmZXIgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBmb2xpb19jb3B5X293bmVyYCBmdW5jdGlvbi4gSXQgc2VlbXMgaXQmIzM5O3MgYmVpbmcgaW52b2tlZCBkdXJpbmcgdGhlc2UgZm9saW8gbWlncmF0aW9uIHByb2Nlc3Nlcywgc3BlY2lmaWNhbGx5IGZyb20gYG1pZ3JhdGVfZm9saW9fZXh0cmFgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiAgUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbmVlZCBhIGNsZWFyZXIgcGljdHVyZSBvZiAqd2h5KiBpdCYjMzk7cyBiZWluZyBjYWxsZWQgYW5kIHdoZXJlIGVsc2UgaXQmIzM5O3MgaW4gdXNlLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgY2hlY2sgaXRzIGNhbGxlcnM7IGEgcXVpY2sgc2VhcmNoIGZvciBhbGwgdGhlIHBvaW50cyB3aGVyZSBgZm9saW9fY29weV9vd25lcmAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlIHNob3VsZCBzaGVkIHNvbWUgaW1tZWRpYXRlIGxpZ2h0LiAgVW5kZXJzdGFuZGluZyB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHRoaXMgb3duZXJzaGlwIHRyYW5zZmVyIGlzIGhhcHBlbmluZyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fY29weV9vd25lciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xND1leHRlcm4gdm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNS1cdFx0XHRpbnQgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjE2OmV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNy1leHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0zNT1zdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC00MC19XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQyLXtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQzLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6NDQ6XHRcdF9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTtcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQ1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD02ND1zdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC02Ny19XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo2ODpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNjkte1xuLS1cbm1tL21pZ3JhdGUuYz03NjI9dm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWlncmF0ZS5jLTg0NS1cbm1tL21pZ3JhdGUuYzo4NDY6XHRmb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlLmMtODQ3LVx0cGdhbGxvY190YWdfc3dhcChuZXdmb2xpbywgZm9saW8pO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zNjE9dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG4tLVxubW0vcGFnZV9vd25lci5jLTM3NC1cbm1tL3BhZ2Vfb3duZXIuYzozNzU6dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG5tbS9wYWdlX293bmVyLmMtMzc2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMjIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXNpbmcgb24gTWVtb3J5IE1hbmFnZW1lbnQgU3ltYm9scyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uICpZZXMqLCBgX19mb2xpb19jb3B5X293bmVyYCBpcyBhIHNvbGlkIHN5bWJvbCB0byByZWFsbHkgZHJpbGwgZG93biBpbnRvLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHRoYXQgcGFydGljdWxhciBzdWJzeXN0ZW0uIE5vdywgd2hhdCAqZWxzZSogaXMgb24gbXkgbWluZD8gSG1tLi4uIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXRgLiBUaGF0IHJpbmdzIGEgYmVsbCwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGZ1bGwgY29udGV4dCB0byBiZSB0aG9yb3VnaC4gSXQmIzM5O3MgcmVsYXRlZCB0byBwYWdlIHRhYmxlcywgSSBrbm93IHRoYXQuIExldCYjMzk7cyBzZWUgaG93IGJvdGggZml0IGludG8gdGhlIGxhcmdlciB2aWV3IG9mIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MjU9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI2LVx0XHRwbWRfdCAqcG1kcCwgcG1kX3QgcG1kLCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjc6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVx0XHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTk1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEwMC1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjEwMTpcdF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChtbSwgYWRkciwgcHVkcCwgcHVkLCBucik7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMDItfVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yNDQ9RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTI0NS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNDY6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNDctXHRcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsXHR1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI1OS19XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MjYwOkVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzg1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhIHRvbzoKCioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgTWFuaXB1bGF0aW9uIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7dmUgYmVlbiB0YWtpbmcgYSBsb29rIGF0IGEgZmV3IGZ1bmN0aW9ucyBoZXJlLCBhbmQgaXQmIzM5O3MgbG9va2luZyBwcmV0dHkgZ29vZCBzbyBmYXIuIFNwZWNpZmljYWxseSwgYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXRgIHNlZW0gdG8gYmUgZG9pbmcgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0LiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gc2V0dGluZyBQYWdlIFVwcGVyIERpcmVjdG9yaWVzIChQVURzKSBhbmQgUGFnZSBNaWRkbGUgRGlyZWN0b3JpZXMgKFBNRHMpIOKAkyBjb3JlIG9wZXJhdGlvbnMgaW4gbWFuYWdpbmcgdGhlIHBhZ2UgdGFibGUgaGllcmFyY2h5LiBJJiMzOTttIHNhdGlzZmllZCB0aGV5IGFyZSBmdW5jdGlvbmluZyBhcyBpbnRlbmRlZCB0byBlc3RhYmxpc2ggdGhlIGJhc2UgZW50cmllcyBmb3IgbWVtb3J5IG1hcHBpbmcuIFNpbWlsYXJseSwgYF9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXJgIGFuZCBgX19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhcmAgc2VlbSB0byBiZSBwcm9wZXJseSBoYW5kbGluZyB0aGUgZGVhbGxvY2F0aW9uIG9mIFBVRHMgYW5kIFBNRHMgcmVzcGVjdGl2ZWx5LCBjcml0aWNhbCBmb3IgZnJlZWluZyB1cCBtZW1vcnkgYW5kIG1haW50YWluaW5nIGNvbnNpc3RlbmN5LiBOb3csIG15IG5leHQgZm9jdXMgaXMgb24gYF9fcGFnZV90YWJsZV9jaGVja196ZXJvYC4gVGhpcyBvbmUgaXMgaW50ZXJlc3Rpbmc7IGxldCYjMzk7cyBkaWcgaW50byB0aGF0IG9uZSBhIGxpdHRsZSBtb3JlLiBJdOKAmXMgcHJvYmFibHkgY2hlY2tpbmcgZm9yIHplcm9lZCBlbnRyaWVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgcHJldmVudGluZyBwb3RlbnRpYWwgbGVha3Mgd2hlbiBtYXBwaW5nIG9yIHVubWFwcGluZyBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcGFnZV90YWJsZV9jaGVja196ZXJvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTE0PWV4dGVybiBzdHJ1Y3QgcGFnZV9leHRfb3BlcmF0aW9ucyBwYWdlX3RhYmxlX2NoZWNrX29wcztcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE1LVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTY6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfemVybyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE3LXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMzctXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDozODpcdF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHBhZ2UsIG9yZGVyKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTM5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD00MT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19mcmVlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtNDUtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDo0NjpcdF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHBhZ2UsIG9yZGVyKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTQ3LX1cbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9OTc9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19zZXQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQsXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTEzMC0gKi9cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMzE6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfemVybyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTEzMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTg0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk9wdGltaXppbmcgUGFnZSBFeHRlbnNpb24gSXRlcmF0aW9uKioKCk9rYXksIHNvIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AgaXMgZ2V0dGluZyBjYWxsZWQgKmEgbG90KiDigJMgZXZlcnkgc2luZ2xlIHRpbWUgd2UgYWxsb2NhdGUgb3IgZnJlZSBhIHBhZ2UuIFRoYXQmIzM5O3MgYSBzZXJpb3VzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGEgaG90IHBhdGggdGhhdCYjMzk7cyByZWFsbHkgaHVydGluZyB1cy4gVGhlIG9idmlvdXMgc29sdXRpb24gaXMgdG8gc2tpcCBgX19wYWdlX3RhYmxlX2NoZWNrX3plcm9gIGFuZCBgX19zZXRfcGFnZV9vd25lcmAuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyBmZWFzaWJsZS4KClRoZSBwYXRjaCBpdHNlbGYgbG9va3Mgc29saWQsIGZ1bmN0aW9uYWxseSBzcGVha2luZy4gSXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBwdXR0aW5nIGl0IHRocm91Z2ggZnV6emluZy4gVGhlIGtleSBjaGFuZ2VzIGFyZSB0byBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgYGZvcl9lYWNoX3BhZ2VfZXh0YCwgd2hlcmUgaXQgaW50cm9kdWNlcyBhIGBjb3VudGAgbGltaXRhdGlvbiB0byB0aGUgaXRlcmF0aW9uLiBUaGlzIGNoYW5nZSBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AsIHNpbmNlIHRoZXNlIGZlYXR1cmVzIGl0ZXJhdGUgdGhyb3VnaCBwYWdlIGV4dGVuc2lvbnMuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgYnJlYWsgYW55dGhpbmcgdW5leHBlY3RlZGx5OiBgUEFHRV9FWFRFTlNJT05gLCBgUEFHRV9PV05FUmAsIGBQQUdFX1RBQkxFX0NIRUNLYCwgYW5kIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gR290dGEgYmUgdGhvcm91Z2ggaGVyZS4KCkFoYSwgYSBzbmFnISBgUEFHRV9PV05FUmAgcmVxdWlyZXMgdGhlIGBwYWdlX293bmVyPW9uYCBib290IHBhcmFtZXRlci4gVGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgU3l6a2FsbGVyIG1pZ2h0IG5vdCBhdXRvbWF0aWNhbGx5IHByb3ZpZGUgaXQsIGJ1dCB0aGVyZSYjMzk7cyBub3QgbXVjaCB3ZSBjYW4gZG8gb24gb3VyIGVuZC4gVGhpcyBpcyBhIHBvaW50IG9mIGNvbmNlcm4uIENhbiB3ZSBwZXJoYXBzIGVuZm9yY2UgYFBBR0VfT1dORVJgIHRocm91Z2ggYSBjb25maWd1cmF0aW9uIG9wdGlvbj8gTGV0JiMzOTtzIGludmVzdGlnYXRlIHRoYXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBBR0VfT1dORVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cdGJvb2wgXCYjMzQ7VHJhY2sgcGFnZSBvd25lclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAyMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIzNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0JiMzOTtzIGEgZGlyZWN0IHJlcHJlc2VudGF0aW9uIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBBY2Nlc3MgQ29udHJvbCBNZWNoYW5pc21zKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gcGVyZm9ybSBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGZsYWdzIG9yIGluZGljYXRvcnMgb2YgYSBzcGVjaWZpYyBhY2Nlc3MgY29udHJvbCBlbmZvcmNlbWVudCBwb2xpY3kuIE15IGd1dCBzYXlzIHRvIGxvb2sgZm9yIGFueXRoaW5nIGV4cGxpY2l0bHkgbmFtZWQsIGxpa2UgYFBBR0VfT1dORVJfRU5GT1JDRURgIG9yIHNvbWV0aGluZyB3aXRoIGEgc2ltaWxhciBzZW1hbnRpYyBtZWFuaW5nLiBUaGUgZ29hbCBpcyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gb2J2aW91cywgdXBmcm9udCwgZGVkaWNhdGVkIG1lY2hhbmlzbS4gSXQgY291bGQgYmUgYSBzaW1wbGUgZmxhZywgYSBkZWRpY2F0ZWQgc2VjdGlvbiBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgcGVyaGFwcyBhIGNvbnN0YW50IHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gQ2F0Y2hpbmcgdGhpcyBlYXJseSBpcyBpbXBvcnRhbnQsIGFzIGl0IHdpbGwgbGlrZWx5IGRldGVybWluZSBteSBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEFHRV9PV05FUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q9OTQ9ZW5hYmxlIGBgQ09ORklHX1NUQUNLVFJBQ0VgYC4gVG8gaW5jbHVkZSBhbGxvYyBhbmQgZnJlZSBzdGFjayB0cmFjZXMgb2YgYWZmZWN0ZWRcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2thc2FuLnJzdDo5NTpwaHlzaWNhbCBwYWdlcywgZW5hYmxlIGBgQ09ORklHX1BBR0VfT1dORVJgYCBhbmQgYm9vdCB3aXRoIGBgcGFnZV9vd25lcj1vbmBgLlxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2FzYW4ucnN0LTk2LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rYXNhbi5yc3Q9NzI9S0FTQU7lj6rmlK/mjIFTTFVC44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdC05MC1gYENPTkZJR19TVEFDS1RSQUNFYGAg44CC6KaB5YyF5ous5Y+X5b2x5ZON54mp55CG6aG16Z2i55qE5YiG6YWN5ZKM6YeK5pS+5aCG5qCI6Lef6Liq55qE6K+d77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2FzYW4ucnN0OjkxOuivt+WQr+eUqCBgYENPTkZJR19QQUdFX09XTkVSYGAg5bm25L2/55SoIGBgcGFnZV9vd25lcj1vbmBgIOi/m+ihjOW8leWvvOOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdC05Mi1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9kZXYtdG9vbHMva2FzYW4ucnN0PTcyPUtBU0FO5Y+q5pSv5oyBU0xVQuOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3QtOTAtYGBDT05GSUdfU1RBQ0tUUkFDRWBgIOOAguimgeWMheaLrOWPl+W9semfv+eJqeeQhumggemdoueahOWIhumFjeWSjOmHi+aUvuWghuajp+i3n+i5pOeahOipse+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvZGV2LXRvb2xzL2thc2FuLnJzdDo5MTroq4vllZPnlKggYGBDT05GSUdfUEFHRV9PV05FUmBgIOS4puS9v+eUqCBgYHBhZ2Vfb3duZXI9b25gYCDpgLLooYzlvJXlsI7jgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3QtOTItXG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnPTM5ND1DT05GSUdfTUFHSUNfU1lTUlE9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnOjM5NTpDT05GSUdfUEFHRV9PV05FUj15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWctMzk2LUNPTkZJR19QQUdFX1BPSVNPTklORz15XG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTgzOD1DT05GSUdfU0xVQl9ERUJVR19PTj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6ODM5OkNPTkZJR19QQUdFX09XTkVSPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy04NDAtQ09ORklHX0RFQlVHX1JPREFUQV9URVNUPXlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYz0xMDQ9c3RydWN0IGhpbmljM19jbGVhbl9xdWV1ZV9jdHh0IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYy0xMzAtI2RlZmluZSBTUV9DVFhUX1dRX1BBR0VfSElfUEZOX01BU0sgICAgICAgIEdFTk1BU0soMTksIDApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYzoxMzE6I2RlZmluZSBTUV9DVFhUX1dRX1BBR0VfT1dORVJfTUFTSyAgICAgICAgIEJJVCgyMylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19pby5jLTEzMi0jZGVmaW5lIFNRX0NUWFRfV1FfUEFHRV9TRVQodmFsLCBtZW1iZXIpICBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19pby5jLTE3OS0jZGVmaW5lIFJRX0NUWFRfV1FfUEFHRV9XUUVfVFlQRV9NQVNLICAgICAgR0VOTUFTSygyOSwgMjgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYzoxODA6I2RlZmluZSBSUV9DVFhUX1dRX1BBR0VfT1dORVJfTUFTSyAgICAgICAgIEJJVCgzMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19pby5jLTE4MS0jZGVmaW5lIFJRX0NUWFRfV1FfUEFHRV9TRVQodmFsLCBtZW1iZXIpICBcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjI6I2lmbmRlZiBfX0xJTlVYX1BBR0VfT1dORVJfSFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MzojZGVmaW5lIF9fTElOVVhfUEFHRV9PV05FUl9IXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC00LVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTYtXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo3OiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtOC1leHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9NzQ9c3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC03Ni19XG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo3NzojZW5kaWYgLyogQ09ORklHX1BBR0VfT1dORVIgKi9cbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjc4OiNlbmRpZiAvKiBfX0xJTlVYX1BBR0VfT1dORVJfSCAqL1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjA9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzNi0jZW5kaWZcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDM3OiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMzgtXHQvKiBVc2VkIGJ5IHBhZ2Vfb3duZXI9b24gdG8gZGV0ZWN0IHJlY3Vyc2lvbiBpbiBwYWdlIHRyYWNraW5nLiAqL1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wc3Atc2V2Lmg9NDI9dHlwZWRlZiBlbnVtIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvcHNwLXNldi5oLTc4LVx0U0VWX1JFVF9JTlZBTElEX01EQVRBX0VOVFJZICAgICAgICA9IDB4MDAxQixcbmluY2x1ZGUvdWFwaS9saW51eC9wc3Atc2V2Lmg6Nzk6XHRTRVZfUkVUX0lOVkFMSURfUEFHRV9PV05FUiAgICAgICAgID0gMHgwMDFDLFxuaW5jbHVkZS91YXBpL2xpbnV4L3BzcC1zZXYuaC04MC1cdFNFVl9SRVRfQUVBRF9PRkxPVyAgICAgICAgICAgICAgICAgPSAweDAwMUQsXG4tLVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnPTU3PUNPTkZJR19QQUdFX0VYVEVOU0lPTj15XG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc6NTg6Q09ORklHX1BBR0VfT1dORVI9eVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTU5LUNPTkZJR19ERUJVR19LTUVNTEVBSz15XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xMT1jb25maWcgREVCVUdfUEFHRUFMTE9DXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0yNS1cdCAgd2l0aCBzdGFjayB0cmFjZXMgb2YgbGFzdCBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIHRoZSBwYWdlLCB3aGVuXG5tbS9LY29uZmlnLmRlYnVnOjI2Olx0ICBQQUdFX09XTkVSIGlzIGFsc28gc2VsZWN0ZWQgYW5kIGVuYWJsZWQgb24gYm9vdC5cbm1tL0tjb25maWcuZGVidWctMjctXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cdGJvb2wgXCYjMzQ7VHJhY2sgcGFnZSBvd25lclwmIzM0O1xuLS1cbm1tL01ha2VmaWxlPTExNj1vYmotJChDT05GSUdfREVCVUdfVk1fUEdUQUJMRSkgJiM0Mzs9IGRlYnVnX3ZtX3BndGFibGUub1xubW0vTWFrZWZpbGU6MTE3Om9iai0kKENPTkZJR19QQUdFX09XTkVSKSAmIzQzOz0gcGFnZV9vd25lci5vXG5tbS9NYWtlZmlsZS0xMTgtb2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICYjNDM7PSBwYWdlX2lzb2xhdGlvbi5vXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUwOTU9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTMwLVxubW0vcGFnZV9hbGxvYy5jOjUxMzE6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG5tbS9wYWdlX2FsbG9jLmMtNTEzMi1cdC8qXG5tbS9wYWdlX2FsbG9jLmM6NTEzMzpcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXG5tbS9wYWdlX2FsbG9jLmMtNTEzNC1cdCAqIHNhdmUgdGhlIHN0YWNrIHdpdGggcGFnZXNldHMubG9jayBoZWxkLiBSZWxlYXNpbmcvcmVhY3F1aXJpbmdcbi0tXG5tbS9wYWdlX2V4dC5jPTgwPXN0YXRpYyBzdHJ1Y3QgcGFnZV9leHRfb3BlcmF0aW9ucyAqcGFnZV9leHRfb3BzW10gX19pbml0ZGF0YSA9IHtcbm1tL3BhZ2VfZXh0LmM6ODE6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG5tbS9wYWdlX2V4dC5jLTgyLVx0XHUwMDI2cGFnZV9vd25lcl9vcHMsXG4tLVxubW0vcGFnZV9vd25lci5jLTE4LS8qXG5tbS9wYWdlX293bmVyLmM6MTk6ICogVE9ETzogdGVhY2ggUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoX19kdW1wX3BhZ2Vfb3duZXIgYW5kIHNhdmVfc3RhY2spXG5tbS9wYWdlX293bmVyLmMtMjAtICogdG8gdXNlIG9mZiBzdGFjayB0ZW1wb3JhbCBzdG9yYWdlXG5tbS9wYWdlX293bmVyLmMtMjEtICovXG5tbS9wYWdlX293bmVyLmM6MjI6I2RlZmluZSBQQUdFX09XTkVSX1NUQUNLX0RFUFRIICgxNilcbm1tL3BhZ2Vfb3duZXIuYy0yMy1cbi0tXG5tbS9wYWdlX293bmVyLmM9MTU1PXN0YXRpYyBub2lubGluZSBkZXBvdF9zdGFja19oYW5kbGVfdCBzYXZlX3N0YWNrKGdmcF90IGZsYWdzKVxubW0vcGFnZV9vd25lci5jLTE1Ni17XG5tbS9wYWdlX293bmVyLmM6MTU3Olx0dW5zaWduZWQgbG9uZyBlbnRyaWVzW1BBR0VfT1dORVJfU1RBQ0tfREVQVEhdO1xubW0vcGFnZV9vd25lci5jLTE1OC1cdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbi0tXG5tbS92bXN0YXQuYz0xNjY1PXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93YmxvY2tjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZylcbi0tXG5tbS92bXN0YXQuYy0xNjgwLSAqIG9mIG90aGVyIHR5cGVzLiBUaGlzIGdpdmVzIGFuIGluZGljYXRpb24gb2YgaG93IHdlbGwgZmFsbGJhY2tzIGFyZSBiZWluZ1xubW0vdm1zdGF0LmM6MTY4MTogKiBjb250YWluZWQgYnkgcm1xdWV1ZV9mYWxsYmFjaygpLiBJdCByZXF1aXJlcyBpbmZvcm1hdGlvbiBmcm9tIFBBR0VfT1dORVJcbm1tL3Ztc3RhdC5jLTE2ODItICogdG8gZGV0ZXJtaW5lIHdoYXQgaXMgZ29pbmcgb25cbi0tXG5tbS92bXN0YXQuYz0xNjg0PXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqcGdkYXQpXG5tbS92bXN0YXQuYy0xNjg1LXtcbm1tL3Ztc3RhdC5jOjE2ODY6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG5tbS92bXN0YXQuYy0xNjg3LVx0aW50IG10eXBlO1xuLS1cbm1tL3Ztc3RhdC5jLTE3MDAtXHRcdHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCk7XG5tbS92bXN0YXQuYzoxNzAxOiNlbmRpZiAvKiBDT05GSUdfUEFHRV9PV05FUiAqL1xubW0vdm1zdGF0LmMtMTcwMi19XG4tLVxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluPTEwOD1MWF9WQUxVRShWTV9ETUFfQ09IRVJFTlQpXG4tLVxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluLTExMC0vKiBsaW51eC9wYWdlX2V4dC5oICovXG5zY3JpcHRzL2dkYi9saW51eC9jb25zdGFudHMucHkuaW46MTExOmlmIElTX0JVSUxUSU4oQ09ORklHX1BBR0VfT1dORVIpOlxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluLTExMi0gICAgTFhfR0RCUEFSU0VEKFBBR0VfRVhUX09XTkVSKVxuLS1cbnNjcmlwdHMvZ2RiL2xpbnV4L2NvbnN0YW50cy5weS5pbj0xNjg9TFhfQ09ORklHKENPTkZJR19TVEFDS0RFUE9UKVxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluOjE2OTpMWF9DT05GSUcoQ09ORklHX1BBR0VfT1dORVIpXG5zY3JpcHRzL2dkYi9saW51eC9jb25zdGFudHMucHkuaW4tMTcwLUxYX0NPTkZJRyhDT05GSUdfU0xVQl9ERUJVRylcbi0tXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5PTEwPWZyb20gbGludXggaW1wb3J0IHV0aWxzLCBzdGFja2RlcG90LCBjb25zdGFudHMsIG1tXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTExLVxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weToxMjppZiBjb25zdGFudHMuTFhfQ09ORklHX1BBR0VfT1dORVI6XG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTEzLSAgICBwYWdlX2V4dF90ID0gdXRpbHMuQ2FjaGVkVHlwZSgmIzM5O3N0cnVjdCBwYWdlX2V4dCYjMzk7KVxuLS1cbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktMTUtXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5OjE2OiAgICBQQUdFX09XTkVSX1NUQUNLX0RFUFRIID0gMTZcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktMTctICAgIFBBR0VfRVhUX09XTkVSID0gY29uc3RhbnRzLkxYX1BBR0VfRVhUX09XTkVSXG4tLVxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weT0zMD1jbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcbi0tXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTQxLSAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ3MsIGZyb21fdHR5KTpcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHk6NDI6ICAgICAgICBpZiBub3QgY29uc3RhbnRzLkxYX0NPTkZJR19QQUdFX09XTkVSOlxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weTo0MzogICAgICAgICAgICByYWlzZSBnZGIuR2RiRXJyb3IoJiMzOTtDT05GSUdfUEFHRV9PV05FUiBkb2VzIG5vdCBlbmFibGUmIzM5OylcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktNDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Mzg0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYXNvbmluZyBUaHJvdWdoIFBhZ2UgRXh0ZW5zaW9uIEl0ZXJhdGlvbiBMaW1pdHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGVyZSBpc24mIzM5O3QgYSBkaXJlY3QgZXF1aXZhbGVudCB0byBgUEFHRV9PV05FUl9FTkZPUkNFRGAsIHdoaWNoIGlzIGEgbGl0dGxlIHVudXN1YWwuIEhvd2V2ZXIsIHdlICpkbyogaGF2ZSBgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRGAsIGFuZCBJIHRoaW5rIHdlIGNhbiBsZXZlcmFnZSB0aGF0LiBNeSBwbGFuIGlzIHRvIGxpc3QgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgUEFHRV9FWFRFTlNJT05gLCBgUEFHRV9PV05FUmAsIGBQQUdFX1RBQkxFX0NIRUNLYCwgYW5kLCBjcnVjaWFsbHksIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4KClRoZSBoZWFydCBvZiB0aGlzIHBhdGNoIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIGBmb3JfZWFjaF9wYWdlX2V4dGAgbWFjcm8sIGFuZCB0aGUgYXNzb2NpYXRlZCBpdGVyYXRvciBmdW5jdGlvbnMgbGlrZSBgcGFnZV9leHRfaXRlcl9iZWdpbmAgYW5kIGBwYWdlX2V4dF9pdGVyX25leHRgLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBpbnRyb2R1Y2luZyBhIGBjb3VudGAgcGFyYW1ldGVyIHRvIGxpbWl0IGhvdyBtYW55IHBhZ2UgZXh0ZW5zaW9ucyB0aGVzZSBpdGVyYXRvcnMgcmV0dXJuLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEl0JiMzOTtzIGFmZmVjdGluZyBzdWJzeXN0ZW1zIHRoYXQgcmVseSBvbiBpdGVyYXRpbmcgdGhyb3VnaCBwYWdlIGV4dGVuc2lvbnMsIHdoaWNoIGluY2x1ZGVzIHRoaW5ncyBsaWtlIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBuZXcgYGNvdW50YCBsaW1pdCBpcyBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHVubmVjZXNzYXJ5IGxvb2t1cHMsIGVzcGVjaWFsbHkgd2hlbiB0aGUgYGNvdW50YCBpcyB6ZXJvIG9yIHdoZW4gd2UmIzM5O3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBwcm9jZXNzaW5nIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlc2Ugc3ltYm9sczogYF9fc3BsaXRfcGFnZV9vd25lcmAsIGBfX2ZvbGlvX2NvcHlfb3duZXJgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YCwgYF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldGAsIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyYCwgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kX2NsZWFyYC4gVGhpcyBpcyBob3cgdGhlIGNoZWNrcyBhcmUgbGlrZWx5IGltcGxlbWVudGVkLCBhbmQgdGhpcyB3aWxsIGJlIHVzZWZ1bCBhcyBhIHJlZmVyZW5jZSB0byB3aGF0IGlzIGNoYW5nZWQuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgdGhlc2Ugc3ltYm9scyBhcmUgdXNlZnVsLiBBaCEgSSBzZWUgdGhhdCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YCBpcyBleHBvcnRlZC4gT2theSwgYnV0IGlzIGl0IGFjdHVhbGx5ICp1c2VkKiBhbnl3aGVyZT8gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20uIEhtbSwgeWVzLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgdGhhdCBpcyB1c2VkIGluIGBzZXRfcHRlc2Agb3Igc2ltaWxhciBjYWxscyByZWxhdGVkIHRvIHB1ZHMuIE5vdyBJIHNob3VsZCBjaGVjayB3aGF0IGlzIGNhbGxpbmcgYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAgdG8gdW5kZXJzdGFuZCBpdHMgdXNlLWNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9NjczPXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGVzX2FueXN6KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjg4LVx0Y2FzZSBQVURfU0laRTpcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjY4OTpcdFx0cGFnZV90YWJsZV9jaGVja19wdWRzX3NldChtbSwgYWRkciwgKHB1ZF90ICopcHRlcCxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTY5MC1cdFx0XHRcdFx0ICBwdGVfcHVkKHB0ZSksIG5yKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yNT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjYtXHRcdHBtZF90ICpwbWRwLCBwbWRfdCBwbWQsIHVuc2lnbmVkIGludCBucik7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoyNzp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjgtXHRcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucik7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9ODY9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtOTQtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDo5NTpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTk2LVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucilcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMDAtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMDE6XHRfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQobW0sIGFkZHIsIHB1ZHAsIHB1ZCwgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTAyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0xNDU9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTQ5LVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTUwOnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTUxLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucilcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0xNTU9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE2My0jZGVmaW5lIHBhZ2VfdGFibGVfY2hlY2tfcG1kX3NldChtbSwgYWRkciwgcG1kcCwgcG1kKVx0cGFnZV90YWJsZV9jaGVja19wbWRzX3NldChtbSwgYWRkciwgcG1kcCwgcG1kLCAxKVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTY0OiNkZWZpbmUgcGFnZV90YWJsZV9jaGVja19wdWRfc2V0KG1tLCBhZGRyLCBwdWRwLCBwdWQpXHRwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KG1tLCBhZGRyLCBwdWRwLCBwdWQsIDEpXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNjUtXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTI0ND1FWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldCk7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQ1LVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI0Njp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI0Ny1cdFx0cHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCxcdHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjU5LX1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNjA6RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTI2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMjE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzMjYKCQkJCQkJCW91dHB1dDogMjUxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5OgoKKipUaGUgQ2FsbCBhbmQgdGhlIFRvb2wqKgoKT2theSwgc28gdGhlIHByb21wdCBjb25maXJtcyB0aGUgJiMzNDt0aGV5JiMzNDsgaW4gcXVlc3Rpb24gYXJlIGluZGVlZCB3aGF0IEkgdGhvdWdodCB0aGV5IHdlcmUuIEdvb2QuIE5vdywgaXQmIzM5O3MgdGltZSB0byBsZXZlcmFnZSB0aGUgc2V0LXJlc3VsdHMgdG9vbC4gSSBrbm93IGhvdyB0byBuYXZpZ2F0ZSB0aGlzOyBJJiMzOTtsbCB1c2UgaXQgdG8gc3RydWN0dXJlIGFuZCByZWZpbmUgdGhlIG91dHB1dCBiYXNlZCBvbiB3aGF0IHRoZSBwcm9tcHQgZ2F2ZSBtZS4gTGV0JiMzOTtzIHNlZSBob3cgZWZmaWNpZW50bHkgSSBjYW4gaW50ZWdyYXRlIHRoZSBuZXcgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDIxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX0VYVEVOU0lPTiYjMzQ7LAogICAgJiMzNDtQQUdFX09XTkVSJiMzNDssCiAgICAmIzM0O1BBR0VfVEFCTEVfQ0hFQ0smIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3BsaXRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX2NvcHlfb3duZXImIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0JiMzNDssCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldCYjMzQ7LAogICAgJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyJiMzNDssCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBmb3JfZWFjaF9wYWdlX2V4dGAgbWFjcm8gYW5kIGl0cyB1bmRlcmx5aW5nIGl0ZXJhdG9yIGZ1bmN0aW9ucyAoYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gLCBgcGFnZV9leHRfaXRlcl9uZXh0YCkgdG8gbGltaXQgdGhlIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgcmV0dXJuZWQgYmFzZWQgb24gYSBgY291bnRgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc3Vic3lzdGVtcyB0aGF0IGl0ZXJhdGUgb3ZlciBwYWdlIGV4dGVuc2lvbnMgbGlrZSBgUEFHRV9PV05FUmAgYW5kIGBQQUdFX1RBQkxFX0NIRUNLYC4gSXQgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgdW5uZWNlc3NhcnkgbG9va3VwcyB3aGVuIHRoZSBjb3VudCBpcyAwIG9yIHdoZW4gaXRlcmF0aW5nIG92ZXIgYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfRVhURU5TSU9OJiMzNDssCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDSyYjMzQ7LAogICAgJiMzNDtQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zcGxpdF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O19fZm9saW9fY29weV9vd25lciYjMzQ7LAogICAgJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQmIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0JiMzNDssCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXImIzM0OywKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBtYWNybyBhbmQgaXRzIHVuZGVybHlpbmcgaXRlcmF0b3IgZnVuY3Rpb25zIChgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgKSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBiYXNlZCBvbiBhIGBjb3VudGAgcGFyYW1ldGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBzdWJzeXN0ZW1zIHRoYXQgaXRlcmF0ZSBvdmVyIHBhZ2UgZXh0ZW5zaW9ucyBsaWtlIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciB1bm5lY2Vzc2FyeSBsb29rdXBzIHdoZW4gdGhlIGNvdW50IGlzIDAgb3Igd2hlbiBpdGVyYXRpbmcgb3ZlciBhIHNwZWNpZmljIG51bWJlciBvZiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjQ5OjE3LjI2NjE3MzI3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODA1MTI5MzY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX0VYVEVOU0lPTlwiLFxuICAgIFwiUEFHRV9PV05FUlwiLFxuICAgIFwiUEFHRV9UQUJMRV9DSEVDS1wiLFxuICAgIFwiUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3BsaXRfcGFnZV9vd25lclwiLFxuICAgIFwiX19mb2xpb19jb3B5X293bmVyXCIsXG4gICAgXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXRcIixcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldFwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhclwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgZm9yX2VhY2hfcGFnZV9leHRgIG1hY3JvIGFuZCBpdHMgdW5kZXJseWluZyBpdGVyYXRvciBmdW5jdGlvbnMgKGBwYWdlX2V4dF9pdGVyX2JlZ2luYCwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGApIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcGFnZSBleHRlbnNpb25zIHJldHVybmVkIGJhc2VkIG9uIGEgYGNvdW50YCBwYXJhbWV0ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHN1YnN5c3RlbXMgdGhhdCBpdGVyYXRlIG92ZXIgcGFnZSBleHRlbnNpb25zIGxpa2UgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIEl0IHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIHVubmVjZXNzYXJ5IGxvb2t1cHMgd2hlbiB0aGUgY291bnQgaXMgMCBvciB3aGVuIGl0ZXJhdGluZyBvdmVyIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OToxNy4yNjYxODE3NDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzI5NzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxZTYzMmJjZDMzNTVmYTA5MTI3ZmI3MzYzNDUxNmExMGU3ODIyMWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMjE6NDk6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXFxuaW5kZXggNjFlODc2ZTI1NWU4OWMuLmYyM2Q0YjIxOGRhMDc5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxcbkBAIC0xMjAsMTQgKzEyMCwxOCBAQCBzdHJ1Y3QgcGFnZV9leHRfaXRlciB7XFxuICAqIHBhZ2VfZXh0X2l0ZXJfYmVnaW4oKSAtIFByZXBhcmUgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2UgZXh0ZW5zaW9ucy5cXG4gICogQGl0ZXI6IHBhZ2UgZXh0ZW5zaW9uIGl0ZXJhdG9yLlxcbiAgKiBAcGZuOiBQRk4gb2YgdGhlIHBhZ2Ugd2UncmUgaW50ZXJlc3RlZCBpbi5cXG4rICogQGNvdW50OiBtYXhpbXVtIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgdG8gcmV0dXJuLlxcbiAgKlxcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXFxuICAqXFxuICAqIFJldHVybjogTlVMTCBpZiBubyBwYWdlX2V4dCBleGlzdHMgZm9yIHRoaXMgcGFnZS5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2JlZ2luKHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgY291bnQpXFxuIHtcXG4rXFx0aWYgKCFjb3VudClcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbiBcXHRpdGVyLVxcdTAwM2VpbmRleCA9IDA7XFxuIFxcdGl0ZXItXFx1MDAzZXN0YXJ0X3BmbiA9IHBmbjtcXG4gXFx0aXRlci1cXHUwMDNlcGFnZV9leHQgPSBwYWdlX2V4dF9sb29rdXAocGZuKTtcXG5AQCAtMTM4LDE5ICsxNDIsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfYmVnaW4oc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsXFxuIC8qKlxcbiAgKiBwYWdlX2V4dF9pdGVyX25leHQoKSAtIEdldCBuZXh0IHBhZ2UgZXh0ZW5zaW9uXFxuICAqIEBpdGVyOiBwYWdlIGV4dGVuc2lvbiBpdGVyYXRvci5cXG4rICogQGNvdW50OiBtYXhpbXVtIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgdG8gcmV0dXJuLlxcbiAgKlxcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXFxuICAqXFxuICAqIFJldHVybjogTlVMTCBpZiBubyBuZXh0IHBhZ2VfZXh0IGV4aXN0cy5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyLVxcdTAwM2VwYWdlX2V4dCkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0aXRlci1cXHUwMDNlaW5kZXgrKztcXG4rXFx0aWYgKCsraXRlci1cXHUwMDNlaW5kZXggXFx1MDAzZT0gY291bnQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRwZm4gPSBpdGVyLVxcdTAwM2VzdGFydF9wZm4gKyBpdGVyLVxcdTAwM2VpbmRleDtcXG4gXFxuIFxcdGlmIChwYWdlX2V4dF9pdGVyX25leHRfZmFzdF9wb3NzaWJsZShwZm4pKVxcbkBAIC0xODMsOSArMTkwLDkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVcXG4gICogSU1QT1JUQU5UOiBtdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXFxuICAqL1xcbiAjZGVmaW5lIGZvcl9lYWNoX3BhZ2VfZXh0KF9fcGFnZSwgX19wZ2NvdW50LCBfX3BhZ2VfZXh0LCBfX2l0ZXIpIFxcXFxcXG4tXFx0Zm9yIChfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9iZWdpbihcXHUwMDI2X19pdGVyLCBwYWdlX3RvX3BmbihfX3BhZ2UpKTtcXFxcXFxuLVxcdFxcdF9fcGFnZV9leHQgXFx1MDAyNlxcdTAwMjYgX19pdGVyLmluZGV4IFxcdTAwM2MgX19wZ2NvdW50OyAgICAgICAgICBcXFxcXFxuLVxcdFxcdF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX25leHQoXFx1MDAyNl9faXRlcikpXFxuK1xcdGZvciAoX19wYWdlX2V4dCA9IHBhZ2VfZXh0X2l0ZXJfYmVnaW4oXFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcXFxcbitcXHRcXHRfX3BhZ2VfZXh0OyBcXFxcXFxuK1xcdFxcdF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX25leHQoXFx1MDAyNl9faXRlciwgX19wZ2NvdW50KSlcXG4gXFxuICNlbHNlIC8qICFDT05GSUdfUEFHRV9FWFRFTlNJT04gKi9cXG4gc3RydWN0IHBhZ2VfZXh0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OToxNy43MjAxOTY0ODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NzU5NzI2MTAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX0VYVEVOU0lPTlwiLFxuICAgIFwiUEFHRV9PV05FUlwiLFxuICAgIFwiUEFHRV9UQUJMRV9DSEVDS1wiLFxuICAgIFwiUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3BsaXRfcGFnZV9vd25lclwiLFxuICAgIFwiX19mb2xpb19jb3B5X293bmVyXCIsXG4gICAgXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXRcIixcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldFwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhclwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3BtZF9jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgZm9yX2VhY2hfcGFnZV9leHRgIG1hY3JvIGFuZCBpdHMgdW5kZXJseWluZyBpdGVyYXRvciBmdW5jdGlvbnMgKGBwYWdlX2V4dF9pdGVyX2JlZ2luYCwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGApIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcGFnZSBleHRlbnNpb25zIHJldHVybmVkIGJhc2VkIG9uIGEgYGNvdW50YCBwYXJhbWV0ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIHN1YnN5c3RlbXMgdGhhdCBpdGVyYXRlIG92ZXIgcGFnZSBleHRlbnNpb25zIGxpa2UgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIEl0IHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIHVubmVjZXNzYXJ5IGxvb2t1cHMgd2hlbiB0aGUgY291bnQgaXMgMCBvciB3aGVuIGl0ZXJhdGluZyBvdmVyIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxZTYzMmJjZDMzNTVmYTA5MTI3ZmI3MzYzNDUxNmExMGU3ODIyMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAyMTo0OToxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaFxuaW5kZXggNjFlODc2ZTI1NWU4OWMuLmYyM2Q0YjIxOGRhMDc5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhcbkBAIC0xMjAsMTQgKzEyMCwxOCBAQCBzdHJ1Y3QgcGFnZV9leHRfaXRlciB7XG4gICogcGFnZV9leHRfaXRlcl9iZWdpbigpIC0gUHJlcGFyZSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggcGFnZSBleHRlbnNpb25zLlxuICAqIEBpdGVyOiBwYWdlIGV4dGVuc2lvbiBpdGVyYXRvci5cbiAgKiBAcGZuOiBQRk4gb2YgdGhlIHBhZ2Ugd2UncmUgaW50ZXJlc3RlZCBpbi5cbisgKiBAY291bnQ6IG1heGltdW0gbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyB0byByZXR1cm4uXG4gICpcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXG4gICpcbiAgKiBSZXR1cm46IE5VTEwgaWYgbm8gcGFnZV9leHQgZXhpc3RzIGZvciB0aGlzIHBhZ2UuXG4gICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfYmVnaW4oc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsXG4tXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNvdW50KVxuIHtcbitcdGlmICghY291bnQpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0aXRlci1cdTAwM2VpbmRleCA9IDA7XG4gXHRpdGVyLVx1MDAzZXN0YXJ0X3BmbiA9IHBmbjtcbiBcdGl0ZXItXHUwMDNlcGFnZV9leHQgPSBwYWdlX2V4dF9sb29rdXAocGZuKTtcbkBAIC0xMzgsMTkgKzE0MiwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHRfaXRlcl9iZWdpbihzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlcixcbiAvKipcbiAgKiBwYWdlX2V4dF9pdGVyX25leHQoKSAtIEdldCBuZXh0IHBhZ2UgZXh0ZW5zaW9uXG4gICogQGl0ZXI6IHBhZ2UgZXh0ZW5zaW9uIGl0ZXJhdG9yLlxuKyAqIEBjb3VudDogbWF4aW11bSBudW1iZXIgb2YgcGFnZSBleHRlbnNpb25zIHRvIHJldHVybi5cbiAgKlxuICAqIE11c3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayB0YWtlbi5cbiAgKlxuICAqIFJldHVybjogTlVMTCBpZiBubyBuZXh0IHBhZ2VfZXh0IGV4aXN0cy5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHRfaXRlcl9uZXh0KHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsXG4rXHRcdHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyLVx1MDAzZXBhZ2VfZXh0KSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpdGVyLVx1MDAzZWluZGV4Kys7XG4rXHRpZiAoKytpdGVyLVx1MDAzZWluZGV4IFx1MDAzZT0gY291bnQpXG4rXHRcdHJldHVybiBOVUxMO1xuIFx0cGZuID0gaXRlci1cdTAwM2VzdGFydF9wZm4gKyBpdGVyLVx1MDAzZWluZGV4O1xuIFxuIFx0aWYgKHBhZ2VfZXh0X2l0ZXJfbmV4dF9mYXN0X3Bvc3NpYmxlKHBmbikpXG5AQCAtMTgzLDkgKzE5MCw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2dldChjb25zdCBzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlXG4gICogSU1QT1JUQU5UOiBtdXN0IGJlIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgdGFrZW4uXG4gICovXG4gI2RlZmluZSBmb3JfZWFjaF9wYWdlX2V4dChfX3BhZ2UsIF9fcGdjb3VudCwgX19wYWdlX2V4dCwgX19pdGVyKSBcXFxuLVx0Zm9yIChfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9iZWdpbihcdTAwMjZfX2l0ZXIsIHBhZ2VfdG9fcGZuKF9fcGFnZSkpO1xcXG4tXHRcdF9fcGFnZV9leHQgXHUwMDI2XHUwMDI2IF9faXRlci5pbmRleCBcdTAwM2MgX19wZ2NvdW50OyAgICAgICAgICBcXFxuLVx0XHRfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9uZXh0KFx1MDAyNl9faXRlcikpXG4rXHRmb3IgKF9fcGFnZV9leHQgPSBwYWdlX2V4dF9pdGVyX2JlZ2luKFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcbitcdFx0X19wYWdlX2V4dDsgXFxcbitcdFx0X19wYWdlX2V4dCA9IHBhZ2VfZXh0X2l0ZXJfbmV4dChcdTAwMjZfX2l0ZXIsIF9fcGdjb3VudCkpXG4gXG4gI2Vsc2UgLyogIUNPTkZJR19QQUdFX0VYVEVOU0lPTiAqL1xuIHN0cnVjdCBwYWdlX2V4dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjQ5OjE3LjcyMDE5ODIzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzIyODg4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIEV4dGVuc2lvbiBJdGVyYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyBgaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oYC4gU2VlbXMgbGlrZSBzb21lb25lJ3MgYmVlbiB3b3JraW5nIG9uIGBwYWdlX2V4dF9pdGVyX2JlZ2luYCBhbmQgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAuIFRoZSBiaWcgY2hhbmdlIGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGBjb3VudGAgYXJndW1lbnQuIFRoYXQncyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBtZWFucyB0aGV5J3JlIGFpbWluZyB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBkdXJpbmcgaXRlcmF0aW9uLiBUaGF0IGdpdmVzIHVzIG1vcmUgY29udHJvbCBpbiBzb21lIGluc3RhbmNlcywgYW5kIHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlIGluIG1hbnkuXG5cbk5vdywgdGhleSd2ZSBhbHNvIGdvbmUgYWhlYWQgYW5kIHVwZGF0ZWQgdGhlIGBmb3JfZWFjaF9wYWdlX2V4dGAgbWFjcm8uIEl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiBpcyB0byBwYXNzIGBfX3BnY291bnRgIChvciB3aGF0ZXZlciB2YXJpYWJsZSBpcyBiZWluZyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNvdW50KSB0byB0aG9zZSBpdGVyYXRvciBmdW5jdGlvbnMuIE1ha2VzIHNlbnNlOyB5b3Ugd2FudCB0aGUgbWFjcm8gdG8gcmVzcGVjdCB0aGF0IGxpbWl0LlxuXG5NeSBuZXh0IHN0ZXA/IFdlbGwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcy4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgZmluZCAqZXZlcnkqIHVzZSBvZiBgZm9yX2VhY2hfcGFnZV9leHRgLiBUaGF0J3MgZ29pbmcgdG8gdGVsbCBtZSB3aGVyZSB0aGlzIGNoYW5nZSB3aWxsIGFmZmVjdCB0aGluZ3MsIGFuZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb2RlIHdpbGwgYmVoYXZlIHdpdGggdGhlIGFkZGVkIGNvbnN0cmFpbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCB0aGUgcG90ZW50aWFsIGJlbmVmaXRzLCBhbmQgb2YgY291cnNlIGFueSBwb3NzaWJsZSBzaWRlIGVmZmVjdHMgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OToyMS42OTI0ODkyMDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzNjE5NjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb3JfZWFjaF9wYWdlX2V4dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCIuY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XFxuLS1cXG4uY2xhbmctZm9ybWF0LTM5NC0gIC0gJ2Zvcl9lYWNoX29yX2JpdCdcXG4uY2xhbmctZm9ybWF0OjM5NTogIC0gJ2Zvcl9lYWNoX3BhZ2VfZXh0J1xcbi5jbGFuZy1mb3JtYXQtMzk2LSAgLSAnZm9yX2VhY2hfcGF0aCdcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTE4Mi0vKipcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTgzOiAqIGZvcl9lYWNoX3BhZ2VfZXh0KCk6IGl0ZXJhdGUgdGhyb3VnaCBwYWdlX2V4dCBvYmplY3RzLlxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xODQtICogQF9fcGFnZTogdGhlIHBhZ2Ugd2UncmUgaW50ZXJlc3RlZCBpblxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTE5MS0gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTkyOiNkZWZpbmUgZm9yX2VhY2hfcGFnZV9leHQoX19wYWdlLCBfX3BnY291bnQsIF9fcGFnZV9leHQsIF9faXRlcikgXFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTMtXFx0Zm9yIChfX3BhZ2VfZXh0ID0gcGFnZV9leHRfaXRlcl9iZWdpbihcXHUwMDI2X19pdGVyLCBwYWdlX3RvX3BmbihfX3BhZ2UpLCBfX3BnY291bnQpOyBcXFxcXFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0yNTUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL3BhZ2Vfb3duZXIuYzoyNTY6XFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX293bmVyLmMtMjU3LVxcdFxcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MjczPXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTI4My1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV9vd25lci5jOjI4NDpcXHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbm1tL3BhZ2Vfb3duZXIuYy0yODUtXFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz0zNjE9dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzY3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9wYWdlX293bmVyLmM6MzY4OlxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb2xkX29yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbm1tL3BhZ2Vfb3duZXIuYy0zNjktXFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz0zNzU9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtNDE3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9wYWdlX293bmVyLmM6NDE4OlxcdGZvcl9lYWNoX3BhZ2VfZXh0KFxcdTAwMjZvbGQtXFx1MDAzZXBhZ2UsIDEgXFx1MDAzY1xcdTAwM2MgbmV3X3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbm1tL3BhZ2Vfb3duZXIuYy00MTktXFx0XFx0b2xkX3BhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9NjM9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19jbGVhcih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBwZ2NudClcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy03Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjc4OlxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIHBnY250LCBwYWdlX2V4dCwgaXRlcikge1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy03OS1cXHRcXHRzdHJ1Y3QgcGFnZV90YWJsZV9jaGVjayAqcHRjID0gZ2V0X3BhZ2VfdGFibGVfY2hlY2socGFnZV9leHQpO1xcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTk3PXN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfc2V0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHBnY250LFxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTExMi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjExMzpcXHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTE0LVxcdFxcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTMxPXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3plcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xMzgtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMzk6XFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTQwLVxcdFxcdHN0cnVjdCBwYWdlX3RhYmxlX2NoZWNrICpwdGMgPSBnZXRfcGFnZV90YWJsZV9jaGVjayhwYWdlX2V4dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjQ5OjIzLjcyODY5MTUzN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjQ5MjA5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcGFnZV9leHRgIEl0ZXJhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgaXRlcmF0aW9uIGZ1bmN0aW9ucyBmb3IgYHBhZ2VfZXh0YCBzdHJ1Y3R1cmVzOiBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgY29uc2VxdWVudGx5LCBgZm9yX2VhY2hfcGFnZV9leHRgLiAgVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBpdGVyYXRpb24gaXMgbm93IGV4cGxpY2l0bHkgbGltaXRlZCBieSBhIGBjb3VudGAgcGFyYW1ldGVyLiAgXG5cbkJlZm9yZSwgdGhlIGBmb3JfZWFjaF9wYWdlX2V4dGAgbWFjcm8gbG9va2VkIGxpa2UgdGhpczogdGhlIGxvb3Agd291bGQgKmFsd2F5cyogY2FsbCBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGV2ZW4gaWYgdGhlIGludGVuZGVkIHBhZ2UgY291bnQgKGBfX3BnY291bnRgKSB3YXMgemVyby4gIFRoZW4sIGEgY2hlY2ssIGBfX2l0ZXIuaW5kZXggXHUwMDNjIF9fcGdjb3VudGAsIHdvdWxkIGltbWVkaWF0ZWx5IHNob3J0LWNpcmN1aXQgdGhlIGxvb3AuICBXaGlsZSB0ZWNobmljYWxseSBjb3JyZWN0LCB0aGVyZSB3YXMgYSB3YXN0ZWQgZnVuY3Rpb24gY2FsbC5cblxuTm93LCBJIHNlZSB0aGUgaW1wcm92ZW1lbnQuIGBwYWdlX2V4dF9pdGVyX2JlZ2luYCAqaXRzZWxmKiBjaGVja3MgdGhlIGBjb3VudGAgYXJndW1lbnQuICBJZiBgY291bnRgIGlzIHplcm8sIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYE5VTExgLiAgVGhpcyBpcyBtdWNoIGNsZWFuZXIuXG5cbmBgYGNcbnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2JlZ2luKHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyLFxuXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNvdW50KVxue1xuXHRpZiAoIWNvdW50KVxuXHRcdHJldHVybiBOVUxMO1xuYGBgXG5cblNpbWlsYXJseSwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAgYWxzbyB1c2VzIGBjb3VudGAuXG5cbmBgYGNcbnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX25leHQoc3RydWN0IHBhZ2VfZXh0X2l0ZXIgKml0ZXIsXG5cdFx0dW5zaWduZWQgbG9uZyBjb3VudClcbntcblx0dW5zaWduZWQgbG9uZyBwZm47XG5cblx0aWYgKFdBUk5fT05fT05DRSghaXRlci1cdTAwM2VwYWdlX2V4dCkpXG5cdFx0cmV0dXJuIE5VTEw7XG5cblx0aWYgKCsraXRlci1cdTAwM2VpbmRleCBcdTAwM2U9IGNvdW50KVxuXHRcdHJldHVybiBOVUxMO1xuYGBgXG5cblRoaXMgaXMgYSBnb29kIG9wdGltaXphdGlvbiwgZXNwZWNpYWxseSBpbiBjYXNlcyB3aGVyZSBgX19wZ2NvdW50YCAob3IsIG5vdywgdGhlIGBjb3VudGAgcGFyYW1ldGVyKSBpcyB6ZXJvLiAgSXQgYXZvaWRzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IGNhbGxzIHRvIGBwYWdlX2V4dF9sb29rdXAocGZuKWAsIHdoaWNoIGNvdWxkIGJlIGNvc3RseSBvciwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCBldmVuIHBvc2UgYSBzYWZldHkgY29uY2Vybi4gIEl0IGxvb2tzIGxpa2UgYSBnb29kIGRlZmVuc2l2ZSBjb2RpbmcgbWVhc3VyZS5cblxuQWxzbywgaXQgbWVhbnMgdGhlIGNoZWNrIGZvciBleGl0aW5nIHRoZSBsb29wIGlzIG5vdyBoYW5kbGVkIGludGVybmFsbHkgYnkgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAsIG1ha2luZyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBjb2RlIHNsaWdodGx5IGNsZWFuZXIuXG5cbk5vdywgbGV0J3MganVzdCBxdWlja2x5IHNjYW4gYG1tL3BhZ2Vfb3duZXIuY2AgYW5kIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgIHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIHRob3NlIGFyZWFzLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlIGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NDk6MzEuNDkzNjE0NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMTM2MjI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfUEFHRV9FWFRFTlNJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTc9S2VybmVsIHBhcmFtZXRlcnNcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTE3MjAtXFx0XFx0XFx0bWlnaHQgdGFrZSBsb25nZXIsIGVzcGVjaWFsbHkgb24gc3lzdGVtcyB3aXRoIGEgbG90IG9mXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MTcyMTpcXHRcXHRcXHRtZW1vcnkuIEF2YWlsYWJsZSB3aXRoIENPTkZJR19QQUdFX0VYVEVOU0lPTj15LlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTE3MjItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjEwPUdlbmVyYWxcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMzMtICBgYG5vZGVfcGFnZV9leHRgYCBpcyBhcnJheSBvZiBleHRlbnNpb25zIG9mIHN0cnVjdCBwYWdlcy4gQXZhaWxhYmxlIG9ubHlcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjM0OiAgaW4gdGhlIGtlcm5lbHMgYnVpbHQgd2l0aCBgYENPTkZJR19QQUdFX0VYVEVOU0lPTmBgIGVuYWJsZWQuXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIzNS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjA1PW5vZGVfem9uZWxpc3Rz5byV55So44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTIyMS3lr7nkuo7kvb/nlKhGTEFUTUVN5YaF5a2Y5qih5Z6L55qEVU1B57O757uf77yMMOWPt+iKgueCueeahCBgYG5vZGVfcGFnZV9leHRgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MjIyOuaYr3N0cnVjdCBwYWdlc+eahOaJqeWxleaVsOe7hOOAguWPquacieWcqOaehOW7uuaXtuW8gOWQr+S6hiBgYENPTkZJR19QQUdFX0VYVEVOU0lPTmBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yMjMt6YCJ6aG555qE5YaF5qC45Lit5omN5Y+v55So44CCXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0NjU9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNDgyLVxcdHN0cnVjdCBwYWdlICpub2RlX21lbV9tYXA7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNDgzOiNpZmRlZiBDT05GSUdfUEFHRV9FWFRFTlNJT05cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE0ODQtXFx0c3RydWN0IHBhZ2VfZXh0ICpub2RlX3BhZ2VfZXh0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xOTk1PXN0cnVjdCBtZW1fc2VjdGlvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTIwMTAtXFx0c3RydWN0IG1lbV9zZWN0aW9uX3VzYWdlICp1c2FnZTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjIwMTE6I2lmZGVmIENPTkZJR19QQUdFX0VYVEVOU0lPTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMjAxMi1cXHQvKlxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oPTk9c3RydWN0IHBnbGlzdF9kYXRhO1xcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xMC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTE6I2lmZGVmIENPTkZJR19QQUdFX0VYVEVOU0lPTlxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xMi0vKipcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0X2l0ZXJfZ2V0KGNvbnN0IHN0cnVjdCBwYWdlX2V4dF9pdGVyICppdGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTE5Ni1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg6MTk3OiNlbHNlIC8qICFDT05GSUdfUEFHRV9FWFRFTlNJT04gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgtMTk4LXN0cnVjdCBwYWdlX2V4dDtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaD0yMzE9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfZXh0X3B1dChzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTIzMy19XFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oOjIzNDojZW5kaWYgLyogQ09ORklHX1BBR0VfRVhURU5TSU9OICovXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oLTIzNS0jZW5kaWYgLyogX19MSU5VWF9QQUdFX0VYVF9IICovXFxuLS1cXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc9NDY9Q09ORklHX0RFQlVHX05FVD15XFxuLS1cXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNTYtIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjU3OkNPTkZJR19QQUdFX0VYVEVOU0lPTj15XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTU4LUNPTkZJR19QQUdFX09XTkVSPXlcXG4tLVxcbm1tL01ha2VmaWxlPTEyNT1vYmotJChDT05GSUdfQkFMTE9PTikgKz0gYmFsbG9vbi5vXFxubW0vTWFrZWZpbGU6MTI2Om9iai0kKENPTkZJR19QQUdFX0VYVEVOU0lPTikgKz0gcGFnZV9leHQub1xcbm1tL01ha2VmaWxlLTEyNy1vYmotJChDT05GSUdfUEFHRV9UQUJMRV9DSEVDSykgKz0gcGFnZV90YWJsZV9jaGVjay5vXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9kZWJ1Zy5jb25maWc9Nj1DT05GSUdfREVCVUdfSU5GT19EV0FSRjQ9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2RlYnVnLmNvbmZpZzo3OkNPTkZJR19QQUdFX0VYVEVOU0lPTj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvZGVidWcuY29uZmlnLTgtQ09ORklHX1BBR0VfUE9JU09OSU5HPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NDk6MzMuNDI0OTgyNzczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3NzA4NDMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgc29tZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIGBQQUdFX0VYVEVOU0lPTmAsIGBQQUdFX09XTkVSYCwgYW5kIGBQQUdFX1RBQkxFX0NIRUNLYCBhcmUgdGhlIGtleSBvbmVzIHRoYXQgc3RhbmQgb3V0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiV2hlcmUgYXJlIHRoZXNlIGRlZmluZWQgYW5kIGRvY3VtZW50ZWQ/XCIgYW5kIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9LY29uZmlnYC4gSXQncyBhbG1vc3QgYSByZWZsZXggYXQgdGhpcyBwb2ludDsgbWVtb3J5IG1hbmFnZW1lbnQgc3R1ZmYsIEtjb25maWcgaXMgdXN1YWxseSB0aGUgcGxhY2UgdG8gZ28uIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgYFBBR0VfRVhURU5TSU9OYCBpcyBhbGwgYWJvdXQg4oCTIHRoYXQnbGwgbGlrZWx5IGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFsbCB0aHJlZSBhbmQgd2hhdCBjb25maWd1cmF0aW9uIGRlY2lzaW9ucyBhcmUgdGllZCB0byB0aGVtLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGFuY2hvciBmb3IgdGhlIHJlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTozNi40MDIwNjkzMDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3OTg3NzcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9FWFRFTlNJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm1tL0tjb25maWcuZGVidWc6Mjpjb25maWcgUEFHRV9FWFRFTlNJT05cXG5tbS9LY29uZmlnLmRlYnVnLTMtXFx0Ym9vbCBcXFwiRXh0ZW5kIG1lbW1hcCBvbiBleHRyYSBzcGFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYWdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTozOC4xODE5NjAwMjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxMTY3MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIERlYnVnZ2luZyBEaXZlOiBQQUdFX09XTkVSIGFuZCBQQUdFX1RBQkxFX0NIRUNLKipcblxuUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHZlcmlmeWluZyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9mIGEgY291cGxlIG9mIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWcgZmVhdHVyZXM6IGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgd2hlbiBJJ20gdHJhY2tpbmcgZG93biBtZW1vcnkgY29ycnVwdGlvbiwgbGVha3MsIG9yIGFueSBvdGhlciBpc3N1ZXMgZGVlcCB3aXRoaW4gdGhlIG1lbW9yeSBzdWJzeXN0ZW0uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkgYXJlIHVzZWQgYW5kIHZlcmlmeSBpZiB0aGV5IGFyZSBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgaXMgZnVuZGFtZW50YWwgZm9yIG15IG5leHQgZGVidWdnaW5nIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MjksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTo0MS40NTMxMzA1MDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDQ1MjQxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfT1dORVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTA0LVxcbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXFx0Ym9vbCBcXFwiVHJhY2sgcGFnZSBvd25lclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NDk6NDMuMjk3NjYxMjM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTUzNTg3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGBQQUdFX1RBQkxFX0NIRUNLYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgcmlnaHQgaW4uIFRoZSBjdXJyZW50IHN0YXRlIG9mIGFmZmFpcnMgc3VnZ2VzdHMgd2UgbmVlZCB0byBwZXJmb3JtIGEgY3JpdGljYWwgY2hlY2suIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiBgUEFHRV9UQUJMRV9DSEVDS2AuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IGl0J3MgYSBkZWVwIGRpdmUuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBwYWdlIHRhYmxlIHN0cnVjdHVyZS4gQXJlIHRoZSBtYXBwaW5ncyBjb25zaXN0ZW50PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgaW5jb25zaXN0ZW5jaWVzLCBzdWNoIGFzIGVudHJpZXMgcG9pbnRpbmcgdG8gaW52YWxpZCBwaHlzaWNhbCBhZGRyZXNzZXMgb3IsIG1vcmUgaW1wb3J0YW50bHksICp1bm93bmVkKiBwYWdlcyBtYXBwZWQ/IFRoaXMgY2hlY2sgaXMgZm91bmRhdGlvbmFsOyBpZiB0aGUgcGFnZSB0YWJsZSBpc24ndCBzb3VuZCwgdGhlIGVudGlyZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gaXMgcG90ZW50aWFsbHkgY29tcHJvbWlzZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGhhbHQsIGRlYnVnLCBvciB0YWtlIHNvbWUgb3RoZXIgY29ycmVjdGl2ZSBhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTo0Ni4zNTMwMjI2MjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjY0MDA4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0xMDU9Y29uZmlnIFBBR0VfT1dORVJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTIxLVxcbm1tL0tjb25maWcuZGVidWc6MTIyOmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMjMtXFx0Ym9vbCBcXFwiQ2hlY2sgZm9yIGludmFsaWQgbWFwcGluZ3MgaW4gdXNlciBwYWdlIHRhYmxlc1xcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTM1LVxcbm1tL0tjb25maWcuZGVidWc6MTM2OmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMzctXFx0Ym9vbCBcXFwiRW5mb3JjZSB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTo0OC4xMTk0MjkyMDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NDM4MTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmhgLiBUaGF0J3MgYSBoZWFkZXIgZmlsZSwgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCdzIGNydWNpYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgd2l0aCBleHRlbnNpb25zIHRvIHBhZ2Ugc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCBpdCdzIHVzZWQgYnkgYG1tL3BhZ2Vfb3duZXIuY2AgYW5kIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLiBUaG9zZSBhcmUgaW1wb3J0YW50IGZpbGVzOyB0aGUgZmlyc3Qgb25lIGRlYWxzIHdpdGggdHJhY2tpbmcgcGFnZSBvd25lcnNoaXAgYW5kIHRoZSBzZWNvbmQgd2l0aCBjaGVja2luZyB0aGUgaW50ZWdyaXR5IG9mIHBhZ2UgdGFibGVzLlxuXG5UaGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlIHRvIGBwYWdlX2V4dF9pdGVyX2JlZ2luYCwgYHBhZ2VfZXh0X2l0ZXJfbmV4dGAsIGFuZCB0aGUgbWFjcm8gYGZvcl9lYWNoX3BhZ2VfZXh0YC4gUmlnaHQsIHRob3NlIGFyZSBhbGwgaW5saW5lLCBzbyB0aGUgYWN0dWFsIGNvZGUgaXMgaW5zZXJ0ZWQgZGlyZWN0bHkgd2hlcmUgdGhleSdyZSB1c2VkLiBUaGlzIGlzIGEgY3J1Y2lhbCBwb2ludCBmb3IgZnV6emluZy4gU2luY2UgdGhvc2UgZnVuY3Rpb25zIGFuZCB0aGUgbWFjcm8gYXJlIGlubGluZWQsIHRoZSBmb2N1cyBmb3IgZnV6emluZyBuZWVkcyB0byBzaGlmdCB0byB0aGUgZnVuY3Rpb25zIHRoYXQgKmNhbGwqIGBmb3JfZWFjaF9wYWdlX2V4dGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbWFraW5nIHVzZSBvZiB0aGlzIG1hY3JvIG5vdy4gVGhvc2UgYXJlIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgYXJlIG1vc3QgbGlrZWx5IHRvIHN1cmZhY2UuIFRpbWUgdG8gZmluZCB3aGVyZSB0aGF0IG1hY3JvIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NDk6NTEuODAzODE0ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM3NTYzNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9yX2VhY2hfcGFnZV9leHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiLmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxcbi0tXFxuLmNsYW5nLWZvcm1hdC0zOTQtICAtICdmb3JfZWFjaF9vcl9iaXQnXFxuLmNsYW5nLWZvcm1hdDozOTU6ICAtICdmb3JfZWFjaF9wYWdlX2V4dCdcXG4uY2xhbmctZm9ybWF0LTM5Ni0gIC0gJ2Zvcl9lYWNoX3BhdGgnXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0Lmg9MTc3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dF9pdGVyX2dldChjb25zdCBzdHJ1Y3QgcGFnZV9leHRfaXRlciAqaXRlcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xODItLyoqXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oOjE4MzogKiBmb3JfZWFjaF9wYWdlX2V4dCgpOiBpdGVyYXRlIHRocm91Z2ggcGFnZV9leHQgb2JqZWN0cy5cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgtMTg0LSAqIEBfX3BhZ2U6IHRoZSBwYWdlIHdlJ3JlIGludGVyZXN0ZWQgaW5cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9leHQuaC0xOTEtICovXFxuaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oOjE5MjojZGVmaW5lIGZvcl9lYWNoX3BhZ2VfZXh0KF9fcGFnZSwgX19wZ2NvdW50LCBfX3BhZ2VfZXh0LCBfX2l0ZXIpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgtMTkzLVxcdGZvciAoX19wYWdlX2V4dCA9IHBhZ2VfZXh0X2l0ZXJfYmVnaW4oXFx1MDAyNl9faXRlciwgcGFnZV90b19wZm4oX19wYWdlKSwgX19wZ2NvdW50KTsgXFxcXFxcbi0tXFxubW0vcGFnZV9vd25lci5jPTI0ND1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMjU1LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9wYWdlX293bmVyLmM6MjU2OlxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XFxubW0vcGFnZV9vd25lci5jLTI1Ny1cXHRcXHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTI3Mz1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0yODMtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL3BhZ2Vfb3duZXIuYzoyODQ6XFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX293bmVyLmMtMjg1LVxcdFxcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MzYxPXZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTM2Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV9vd25lci5jOjM2ODpcXHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9sZF9vcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX293bmVyLmMtMzY5LVxcdFxcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9Mzc1PXZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTQxNy1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vcGFnZV9vd25lci5jOjQxODpcXHRmb3JfZWFjaF9wYWdlX2V4dChcXHUwMDI2b2xkLVxcdTAwM2VwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG5ld19wYWdlX293bmVyLVxcdTAwM2VvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX293bmVyLmMtNDE5LVxcdFxcdG9sZF9wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTYzPXN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNzctXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzo3ODpcXHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCBwZ2NudCwgcGFnZV9leHQsIGl0ZXIpIHtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNzktXFx0XFx0c3RydWN0IHBhZ2VfdGFibGVfY2hlY2sgKnB0YyA9IGdldF9wYWdlX3RhYmxlX2NoZWNrKHBhZ2VfZXh0KTtcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz05Nz1zdGF0aWMgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3NldCh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBwZ2NudCxcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xMTItXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMTM6XFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgcGdjbnQsIHBhZ2VfZXh0LCBpdGVyKSB7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTExNC1cXHRcXHRzdHJ1Y3QgcGFnZV90YWJsZV9jaGVjayAqcHRjID0gZ2V0X3BhZ2VfdGFibGVfY2hlY2socGFnZV9leHQpO1xcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTEzMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTM4LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTM5OlxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE0MC1cXHRcXHRzdHJ1Y3QgcGFnZV90YWJsZV9jaGVjayAqcHRjID0gZ2V0X3BhZ2VfdGFibGVfY2hlY2socGFnZV9leHQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTo1My42MDc1Nzc0MTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5ODM2ODc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBPd25lciBhbmQgUGFnZSBUYWJsZSBDaGVjayBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgLCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAsIGBfX3NwbGl0X3BhZ2Vfb3duZXJgLCBgX19mb2xpb19jb3B5X293bmVyYCwgYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgLCBgcGFnZV90YWJsZV9jaGVja19zZXRgLCBhbmQgYF9fcGFnZV90YWJsZV9jaGVja196ZXJvYC4gQmFzZWQgb24gdGhlaXIgbmFtZXMgYW5kIHRoZSBjb250ZXh0LCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgIGFuZCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgYXJlIGdvaW5nIHRvIGJlIGludm9rZWQgb24gYWxtb3N0IGV2ZXJ5IHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBhc3N1bWluZyBgUEFHRV9PV05FUmAgaXMgYWN0aXZlLiBUaGV5J3JlIGhhbmRsaW5nIHRyYWNraW5nIHBhZ2Ugb3duZXJzaGlwLCB3aGljaCBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW5kIHVuZGVyc3RhbmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblNpbWlsYXJseSwgdGhlIGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYCwgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YCwgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdGllZCB0byBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIGBQQUdFX1RBQkxFX0NIRUNLYCBpcyBlbmFibGVkLiBUaGV5IGFyZSBwcm9iYWJseSB1c2VkIGZvciBkZXRlY3RpbmcgYW5kIGxvZ2dpbmcgY29ycnVwdGlvbiwgd2hpY2ggaXMgdXNlZnVsIHdoZW4gZGVidWdnaW5nLlxuXG5UaGUga2V5IHF1ZXN0aW9uIG5vdyBpcyBwZXJmb3JtYW5jZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgcG90ZW50aWFsbHkgaGlnaCBmcmVxdWVuY3kgb2YgY2FsbHMgdG8gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlYC4gR2l2ZW4gaXRzIGxpa2VseSByb2xlIGluIGV2ZXJ5IGFsbG9jYXRpb24sIHRoYXQncyB0aGUgb25lIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmaXJzdC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCdzIGEgaG90IHBhdGgsIG9yIGlmIGl0J3MgYWRkaW5nIGEgbWVhc3VyYWJsZSBvdmVyaGVhZC4gSXQgaXMgcG9zc2libGUsIGlmIG9wdGltaXplZCwgaXQgaXMgbm90IGEgYmlnIGNvbmNlcm4uIEkgbmVlZCB0byBtZWFzdXJlIGFuZCBwcm9maWxlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NDk6NTguMjA1OTQ4Mzg2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkyMTMxNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2Vfb3duZXIuYz0yMzE9c3RhdGljIHZvaWQgZGVjX3N0YWNrX3JlY29yZF9jb3VudChkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMjQzLVxcbm1tL3BhZ2Vfb3duZXIuYzoyNDQ6c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2Vfb3duZXIuYy0yNDUtXFx0XFx0XFx0XFx0XFx0ICAgICAgZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxcbi0tXFxubW0vcGFnZV9vd25lci5jPTMzNT1ub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTM0MS1cXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcXG5tbS9wYWdlX293bmVyLmM6MzQyOlxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSxcXG5tbS9wYWdlX293bmVyLmMtMzQzLVxcdFxcdFxcdFxcdCAgIHRzX25zZWMsIGN1cnJlbnQtXFx1MDAzZXBpZCwgY3VycmVudC1cXHUwMDNldGdpZCxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz0zNzU9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzk3LVxcdG1pZ3JhdGVfaGFuZGxlID0gbmV3X3BhZ2Vfb3duZXItXFx1MDAzZWhhbmRsZTtcXG5tbS9wYWdlX293bmVyLmM6Mzk4OlxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKFxcdTAwMjZuZXdmb2xpby1cXHUwMDNlcGFnZSwgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZWhhbmRsZSxcXG5tbS9wYWdlX293bmVyLmMtMzk5LVxcdFxcdFxcdFxcdCAgIG9sZF9wYWdlX293bmVyLVxcdTAwM2VvcmRlciwgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZWdmcF9tYXNrLFxcbi0tXFxubW0vcGFnZV9vd25lci5jPTc3Mj1zdGF0aWMgdm9pZCBpbml0X3BhZ2VzX2luX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtODI3LVxcdFxcdFxcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXFxubW0vcGFnZV9vd25lci5jOjgyODpcXHRcXHRcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBlYXJseV9oYW5kbGUsIDAsIDAsXFxubW0vcGFnZV9vd25lci5jLTgyOS1cXHRcXHRcXHRcXHRcXHRcXHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cXHUwMDNlcGlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo0OTo1OS45OTgwODU4MDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MDM5MDc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqUGFnZSBPd25lcnNoaXAgaW4gdGhlIEtlcm5lbDogQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgcGFnZSBvd25lcnNoaXAgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uSSByZW1lbWJlciB0aGF0IHRoZSBgX19zZXRfcGFnZV9vd25lcmAgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgdGhlIGFsbG9jYXRpb24gb2YgYSBwYWdlLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGVuLCBJIHJlY2FsbCB0aGF0IGBfX3NwbGl0X3BhZ2Vfb3duZXJgIGNvbWVzIGludG8gcGxheSB3aGVuIGEgcGFnZSBpcyBzcGxpdCBpbnRvIHNtYWxsZXIgdW5pdHMuIEFuZCBmaW5hbGx5LCB3aGVuIGEgZm9saW8gaXMgY29waWVkLCBwYXJ0aWN1bGFybHkgZHVyaW5nIG1pZ3JhdGlvbiwgdGhlIGtlcm5lbCB1c2VzIGBfX2ZvbGlvX2NvcHlfb3duZXJgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGludGVncml0eSBvZiBvdXIgcGFnZSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuTm93LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyYCBhbmQgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIGluY29uc2lzdGVuY2llcyBjcmVlcGluZyBpbiBkdXJpbmcgdGhlc2Ugb3BlcmF0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byBuYXN0eSBtZW1vcnkgbGVha3Mgb3IsIHdvcnNlLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhvc2UgZnVuY3Rpb25zIGFuZCBtYWtlIHN1cmUgdGhleSdyZSBhZGhlcmluZyB0byB0aGUgZXhwZWN0ZWQgc2VtYW50aWNzIG9mIHRoZSBvd25lcnNoaXAgc3lzdGVtLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGVzZSBjb3JlIGFsbG9jYXRpb24sIHNwbGl0LCBhbmQgY29weSByb3V0aW5lcy4gTGV0J3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgdGhpcyBpcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc4NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjAzLjc4ODQ3OTM0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwOTk2ODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX3RhYmxlX2NoZWNrX2NsZWFyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfdGFibGVfY2hlY2suYz01Mz1zdGF0aWMgc3RydWN0IHBhZ2VfdGFibGVfY2hlY2sgKmdldF9wYWdlX3RhYmxlX2NoZWNrKHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtNjItICovXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjYzOnN0YXRpYyB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTY0LXtcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xNDg9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTU0LVxcdGlmIChwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB0ZSkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjE1NTpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX2NsZWFyKHB0ZV9wZm4ocHRlKSwgUEFHRV9TSVpFIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNTYtfVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE1OT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNjUtXFx0aWYgKHBtZF91c2VyX2FjY2Vzc2libGVfcGFnZShtbSwgYWRkciwgcG1kKSlcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTY2OlxcdFxcdHBhZ2VfdGFibGVfY2hlY2tfY2xlYXIocG1kX3BmbihwbWQpLCBQTURfU0laRSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTY3LX1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xNzA9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTc2LVxcdGlmIChwdWRfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB1ZCkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjE3NzpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX2NsZWFyKHB1ZF9wZm4ocHVkKSwgUFVEX1NJWkUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE3OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjA1LjU5ODQ2MDc0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjY4ODQ4MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSG90IFBhdGhzIGFuZCBaZXJvIFBhZ2UgQ291bnRzKipcblxuT2theSwgdGhlc2UgZnVuY3Rpb25zLCBgX19zZXRfcGFnZV9vd25lcmAgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyYCwgYXJlIGRlZmluaXRlbHkgb24gdGhlIGhvdCBwYXRoLCBjYWxsZWQgYWxsIHRoZSB0aW1lLiBCdXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgYGZvcl9lYWNoX3BhZ2VfZXh0YC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGZ1bmN0aW9uYWwsIGZpeGluZyBhIHBvdGVudGlhbCBidWcuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgYGZvcl9lYWNoX3BhZ2VfZXh0YCB3aXRoIGBfX3BnY291bnQgPT0gMGAgd2FzIHN0aWxsIGNhbGxpbmcgYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gLCBhbmQgdGhhdCBpbiB0dXJuIGNhbGxzIGBwYWdlX2V4dF9sb29rdXAocGZuKWAuXG5cblNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hlbiB3b3VsZCBgX19wZ2NvdW50YCBiZSB6ZXJvPyBJZiBpdCdzIHplcm8sIHdlIGFyZSBkZWFsaW5nIHdpdGggYSAwLW9yZGVyIHBhZ2UsIHJpZ2h0PyBCdXQgdGhlbiwgYDEgXHUwMDNjXHUwMDNjIG9yZGVyYCBpcyBhdCBsZWFzdCAxLCBzbyB0aGUgY2hlY2sgb24gdGhlIHNpemUgb2YgdGhlIHBhZ2UgZXh0IHNlZW1zIG9mZi5cblxuTGV0IG1lIHRoaW5rLi4uIGNvdWxkIGBwZ2NudGAgaW4gYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgIG9yIGBwYWdlX3RhYmxlX2NoZWNrX3NldGAgYmUgemVybz8gSXQncyByZWFsbHkgaGFyZCB0byByZW1lbWJlciBlZGdlIGNhc2VzLiBIYW5nIG9uLCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gbm90IG1ha2luZyBhIHNpbGx5IG1pc3Rha2UuIEknbSBqdXN0IHF1aWNrbHkgY29uZmlybWluZyB0aGUgYmFzaWMgc2hpZnQgY29uc3RhbnRzOiBgUEFHRV9TSVpFIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUYCBpcyAxIGFuZCBgUE1EX1NJWkUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlRgIGlzIDUxMiwgYWxsIGdvb2QuXG5cbk9rYXksIGJhY2sgdG8gdGhlIGNvcmUgcXVlc3Rpb246IHdoZW4gaXMgYF9fcGdjb3VudGAgemVybz8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgY2hlY2sgYF9fc3BsaXRfcGFnZV9vd25lcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjQzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjEwLjg2NzMxMTYwMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MzA1MDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X3BhZ2Vfb3duZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9MTI9ZXh0ZXJuIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xMy1cXHRcXHRcXHR1bnNpZ25lZCBzaG9ydCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2spO1xcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjE0OmV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNS1cXHRcXHRcXHRpbnQgbmV3X29yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMzgtXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDozOTpcXHRcXHRfX3NwbGl0X3BhZ2Vfb3duZXIocGFnZSwgb2xkX29yZGVyLCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQwLX1cXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz0zNDg9dm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTM2MC1cXG5tbS9wYWdlX293bmVyLmM6MzYxOnZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLCBpbnQgbmV3X29yZGVyKVxcbm1tL3BhZ2Vfb3duZXIuYy0zNjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MDoxMi42NDAzNjcxMzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4Mjk1NTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBUYWJsZSBNYW5pcHVsYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyBmb2N1c2VkIG9uIGBfX3NwbGl0X3BhZ2Vfb3duZXJgLiBJIHNlZSBpdCB0YWtlcyBgb2xkX29yZGVyYCBhbmQgYG5ld19vcmRlcmAsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGNoZWNrIG9uIGhvdyBwYWdlIGV4dGVudHMgYXJlIGhhbmRsZWQuIFRoZSBsb29wIHVzaW5nIGBmb3JfZWFjaF9wYWdlX2V4dGAgd2l0aCBgMSBcdTAwM2NcdTAwM2Mgb2xkX29yZGVyYCBjb25maXJtcyBteSBzdXNwaWNpb24gdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBwYWdlIHNpemUgYWRqdXN0bWVudHMuIE9mIGNvdXJzZSwgYDEgXHUwMDNjXHUwMDNjIG9sZF9vcmRlcmAgaXMgYWx3YXlzIGF0IGxlYXN0IDEsIGJ1dCBJJ20gbG9va2luZyBmb3Igd2hlcmUgd2UgZ2V0IGEgKnplcm8qIGNvdW50LlxuXG5UaGUgcXVlc3Rpb24gdGhhdCBhcmlzZXMgaXM6IGFyZSB0aGVyZSBhbnkgc2NlbmFyaW9zIHdoZXJlIGBfX3BnY291bnRgIGJlY29tZXMgemVybz8gTXkgZmlyc3QgdGhvdWdodCBpbW1lZGlhdGVseSBsYW5kcyBvbiBgcGFnZV90YWJsZV9jaGVja19jbGVhcmAsIHNwZWNpZmljYWxseSBpZiBpdCdzIG9wZXJhdGluZyBvbiBhIHplcm9lZCBjb3VudC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNhbGxlcnMgb2YgYHBhZ2VfdGFibGVfY2hlY2tfY2xlYXJgLlxuXG5EaXZpbmcgaW50byB0aGUgY2FsbGVycywgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJgIGlzIHBhc3NpbmcgYFBBR0VfU0laRSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVGAsIHdoaWNoIHJlc29sdmVzIHRvIDEuIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kX2NsZWFyYCBpcyBwYXNzaW5nIGBQTURfU0laRSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVGAsIHdoaWNoIGlzIDUxMi4gQW5kLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcmAgaXMgcGFzc2luZyBgUFVEX1NJWkUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlRgLCB3aGljaCBpcyBhIGxhcmdlIDI2MjE0NC4gVGhpcyBnaXZlcyBtZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgZGlmZmVyZW50IGdyYW51bGFyaXRpZXMgdGhpcyBjaGVjayBpcyBiZWluZyBhcHBsaWVkIHRvLlxuXG5Ob3csIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb3VudGVycGFydCwgYHBhZ2VfdGFibGVfY2hlY2tfc2V0YC4gTXkgYW5hbHlzaXMgaXNuJ3QgY29tcGxldGUgd2l0aG91dCBpbnZlc3RpZ2F0aW5nIHdoYXQncyBoYXBwZW5pbmcgb24gdGhlIHNldHRpbmcgc2lkZSBhcyB3ZWxsLiBJJ20gbm90aW5nIHRoaXMgZG93biwgc2luY2UgYm90aCBvcGVyYXRpb25zIG5lZWQgdG8gYmUgbG9va2VkIGF0IHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6MTcuODIzMzI1NzQ0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkzNTMwNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfdGFibGVfY2hlY2tfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfdGFibGVfY2hlY2suYz02Mz1zdGF0aWMgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX2NsZWFyKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHBnY250KVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTk2LSAqL1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzo5NzpzdGF0aWMgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3NldCh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBwZ2NudCxcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtOTgtXFx0XFx0XFx0XFx0IGJvb2wgcncpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTk5PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjExLVxcdGlmIChwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB0ZSkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIxMjpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX3NldChwdGVfcGZuKHB0ZSksIG5yLCBwdGVfd3JpdGUocHRlKSk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxMy19XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjI4PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQxLVxcdGlmIChwbWRfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHBtZCkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI0MjpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX3NldChwbWRfcGZuKHBtZCksIHN0cmlkZSAqIG5yLCBwbWRfd3JpdGUocG1kKSk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI0My19XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjQ2PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjU3LVxcdGlmIChwdWRfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB1ZCkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI1ODpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX3NldChwdWRfcGZuKHB1ZCksIHN0cmlkZSAqIG5yLCBwdWRfd3JpdGUocHVkKSk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI1OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjE5LjkxNjg2MjMzNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU4MzU2NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBaZXJvLVZhbHVlZCBQYXJhbWV0ZXIgaW4gUGFnZSBUYWJsZSBDaGVja3MqKlxuXG5Pa2F5LCBzbyBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0YCB0YWtlcyBhbiBhcmd1bWVudCwgYG5yYC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBgbnJgIGNhbiwgdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMsIGxlZ2l0aW1hdGVseSBiZSB6ZXJvLiBJZiBpdCAqY2FuKiwgdGhlbiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGxvZ2ljIG9mIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXRgIHRvIGVuc3VyZSBpdCBoYW5kbGVzIHRoaXMgZWRnZSBjYXNlIGdyYWNlZnVsbHksIGFuZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSB6ZXJvIHZhbHVlLiBJZiBpdCAqY2Fubm90KiwgdGhlbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgaXQgKmNvdWxkKiBiZSByZWNlaXZpbmcgYSB6ZXJvIHZhbHVlIGFuZCB3aGV0aGVyIHRoYXQgY29uc3RpdHV0ZXMgYSBidWcuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXRgLiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCwgYW5kIHdpdGggd2hhdCB2YWx1ZXMgb2YgYG5yYCwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCB1c2FnZSwgYW5kIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gZGV0ZXJtaW5lIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIHBvc3NpYmlsaXR5IG9mIGEgemVyby12YWx1ZWQgYG5yYCBwYXJhbWV0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzY2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6MjMuOTc1MjIyMzQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMxNTUxOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yMi1cXHRcXHRcXHRcXHQgIHB1ZF90IHB1ZCk7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MjM6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yNC1cXHRcXHRwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgbnIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9NzY9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC04Mi1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDo4MzpcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSwgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTg0LX1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xODg9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfZmxhZ3MocHRlX3QgcHRlKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5OC1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTk5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIwMC1cXHRcXHRcXHRcXHQgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxMy19XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIxNDpFWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6MjUuODA2NzgyODEyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzM5MzgxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGlzIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gV2hhdCdzIGl0IGRvaW5nPyBJcyBpdCBhIGNydWNpYWwgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCBvciBzb21ldGhpbmcgYW5jaWxsYXJ5PyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGlzIGl0IG1vcmUgb2YgYSBnZW5lcmFsIGNvbmNlcHQuIEZpcnN0LCBJ4oCZbSBnb2luZyB0byBjb25zaWRlciBpdHMgbmFtZSwgYXMgaXQgd291bGQgYXBwZWFyIHRoaXMgY29kZSBpcyB3cml0dGVuIHNvIHRoYXQgbmFtZXMgaW5kaWNhdGUgZnVuY3Rpb24uIEknbSBpbWFnaW5pbmcgaXQncyBkZXNpZ25lZCB0byB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIFBhZ2UgVGFibGUgRW50cmllcyAoUFRFcykgYmVpbmcgc2V0IGNvcnJlY3RseS4gQnV0IHdoYXQgc3BlY2lmaWNhbGx5IGRvZXMgXCJzZXRcIiBtZWFuIGhlcmU/IERvZXMgaXQgbWVhbiB0aGUgZXhwZWN0ZWQgYml0cyBhcmUgc2V0IGNvcnJlY3RseT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW5pdGlhbGl6YXRpb24sIHVwZGF0aW5nLCBvciBwZXJoYXBzIGNoZWNraW5nIGZvciBpbmNvbnNpc3RlbmNpZXM/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBwb3NzaWJsZSBzY2VuYXJpb3MgdGhpcyBmdW5jdGlvbiBoYW5kbGVzLiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSB0aGUgY29kZSBpdHNlbGYsIGNvbnNpZGVyaW5nIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4gTGV0J3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZSBhbmQgd2hldGhlciB0aGUgb3BlcmF0aW9uIGlzIGF0b21pYyBvciB0aHJlYWQgc2FmZS4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgY29kZSwgYW5kIGhvdyB0byB2ZXJpZnkgaXQuIEnigJlsbCBtYWtlIHN1cmUgdG8gbm90ZSBhbnkgYXNzdW1wdGlvbnMgYW5kIGVkZ2UgY2FzZXMgaXQgbWlnaHQgYmUgZGVzaWduZWQgdG8gaGFuZGxlIGFuZCBpZiB0aGVyZSBpcyBhbnkgcG90ZW50aWFsIGZvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gQW5kIEknbSBnb2luZyB0byBkZXRlcm1pbmUsIGhvdyBjcml0aWNhbCBpcyB0aGlzIGZ1bmN0aW9uJ3MgY29ycmVjdCBvcGVyYXRpb24gdG8gdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgc3RhYmlsaXR5IGFuZCBzZWN1cml0eT8gSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIHBvdGVudGlhbCBmb3IgYSBjcml0aWNhbCB2dWxuZXJhYmlsaXR5IHRvIGJlIGV4cG9zZWQuIEnigJlsbCBhcHByb2FjaCB0aGlzIHN5c3RlbWF0aWNhbGx5IHRvIGdhaW4gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjI5Ljc0MDcyNDE3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NzI2MTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTY3Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfcHRlc19hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjgwLVxcdGNhc2UgUEFHRV9TSVpFOlxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjY4MTpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBwdGUsIG5yKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC02ODItXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jPTE5Mz12b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0yMTAtXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYzoyMTE6XFx0cGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgcHRlLCBucik7XFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYy0yMTItXFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaD02MjI9c3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC02MjQte1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjYyNTpcXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBwdGV2YWwsIG5yKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC02MjYtXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEzMzI9c3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzMzYtXFx0XFx0ZW50cnkgPSBjbGVhcl9wdGVfYml0KGVudHJ5LCBfX3BncHJvdChfUEFHRV9VTlVTRUQpKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEzMzc6XFx0cGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgZW50cnksIG5yKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzMzgtXFx0Zm9yICg7Oykge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MjE9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjItXFx0XFx0XFx0XFx0ICBwdWRfdCBwdWQpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjIzOnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjQtXFx0XFx0cHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgdW5zaWduZWQgaW50IG5yKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTY3PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTc1LVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjc2OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTc3LVxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTgyLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjgzOlxcdF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldChtbSwgYWRkciwgcHRlcCwgcHRlLCBucik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtODQtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEzOC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMzk6c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTQwLVxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTQxMD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTQxMi17XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6NDEzOlxcdHBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSwgbnIpO1xcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTQxNC1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xODg9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfZmxhZ3MocHRlX3QgcHRlKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5OC1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTk5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIwMC1cXHRcXHRcXHRcXHQgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxMy19XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIxNDpFWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTIxNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6MzEuNTk3OTkxNzYyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjUxOTgyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgYHNldF9wdGVzYCBDb3JlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gYHNldF9wdGVzYCBpcyBhIHJlYWxseSBjb21tb24gb3BlcmF0aW9uLCByaWdodD8gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBhcmVhczogYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gLCBgcGFnZV9leHRfaXRlcl9uZXh0YCwgYW5kIGBmb3JfZWFjaF9wYWdlX2V4dGAuIFRoYXQncyBhIHByZXR0eSB3aWRlIHJlYWNoLiBUaGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBpbXBvcnRhbnQgdG8gdGVzdCB0aG9yb3VnaGx5LiBCZWNhdXNlIGl04oCZcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QtZG8uIE5vIHF1ZXN0aW9ucyB0aGVyZS5cblxuTGV0J3Mgc2VlLCB3aGF0IGNvbmZpZ3MgYXJlIHJlbGV2YW50PyBXZSBuZWVkIHRvIGVuYWJsZSBgUEFHRV9FWFRFTlNJT05gLCBvYnZpb3VzbHksIHNpbmNlIHRoYXQncyB3aGF0IGV2ZXJ5dGhpbmcgZWxzZSBzZWVtcyB0byBoaW5nZSBvbi4gQW5kIGRlZmluaXRlbHkgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIFdhaXQgYSBtaW51dGUuLi4gYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AgYm90aCBkZXBlbmQgb24gYFBBR0VfRVhURU5TSU9OYCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWdzIHRoYXQgd2Ugc2hvdWxkIGJlIGNvbnNpZGVyaW5nIGhlcmUsIHNvbWV0aGluZyB0aGF0IG1pZ2h0IGltcGFjdCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3Qgb3IgcmV2ZWFsIGRlZXBlciwgcmVsYXRlZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjY1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjM1LjkyMzE5MzM4OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NzYzMzU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9FWFRFTlNJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm1tL0tjb25maWcuZGVidWc6Mjpjb25maWcgUEFHRV9FWFRFTlNJT05cXG5tbS9LY29uZmlnLmRlYnVnLTMtXFx0Ym9vbCBcXFwiRXh0ZW5kIG1lbW1hcCBvbiBleHRyYSBzcGFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYWdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MDozNy44MDA4MzI4NTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3MzU5MjE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBLZXJuZWwgRGVidWdnaW5nIENvbmZpZ3VyYXRpb25zKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHNvbWUgY3J1Y2lhbCBkZWJ1Z2dpbmcgb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgYW5kIHBhZ2UgdGFibGUgaW50ZWdyaXR5LiBUbyBkbyB0aGF0IGVmZmljaWVudGx5LCBteSBpbml0aWFsIHN0ZXAgaXMgdG8gaGVhZCBkaXJlY3RseSB0byBgbW0vS2NvbmZpZy5kZWJ1Z2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIFRoZXNlIHR3byBhcmUgZnVuZGFtZW50YWwgZm9yIGlkZW50aWZ5aW5nIG1lbW9yeSBsZWFrcyBhbmQgc3VidGxlIGNvcnJ1cHRpb24gaXNzdWVzLiBJIG5lZWQgdG8ga25vdyBpZiB0aGV5J3JlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25kaXRpb25hbGx5IGNvbmZpZ3VyZWQsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIG9yIGJ1aWxkIHR5cGUuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBkaWN0YXRlIG15IG5leHQgZGVidWdnaW5nIHN0ZXBzIGFuZCBpbmZsdWVuY2Ugd2hhdCBJJ20gbG9va2luZyBmb3IgaW4gdGhlIGtlcm5lbCBsb2dzIG9yIG1lbW9yeSBkdW1wcy4gVGltZSB0byBkaXZlIGludG8gdGhhdCBLY29uZmlnIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzU2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6NDIuNjc0NDI5MTA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM2MDcxMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX09XTkVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxcbm1tL0tjb25maWcuZGVidWctMTA2LVxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUwOjQ0LjUxMDUwODM5MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIzMDQyOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb25zOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIERlYnVnZ2luZyBPcHRpb25zKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHRyb3VibGVzaG9vdCBzb21ldGhpbmcgcmVsYXRlZCB0byBwYWdlIHRhYmxlcywgc28gbGV0J3Mgc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgYXBwcm9hY2guIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYSBwcmV0dHkgc3RhbmRhcmQgb25lLCBpcyB0byBjaGVjayB0aGUgYG1tL0tjb25maWcuZGVidWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3IgYWxsIHRob3NlIGRlYnVnZ2luZy1yZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBgUEFHRV9UQUJMRV9DSEVDS2Agb3B0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3Igd2hhdCBJIG5lZWQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDgwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6NDguNDMzNTU0OTU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg4ODg4ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MTA1PWNvbmZpZyBQQUdFX09XTkVSXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEyMS1cXG5tbS9LY29uZmlnLmRlYnVnOjEyMjpjb25maWcgUEFHRV9UQUJMRV9DSEVDS1xcbm1tL0tjb25maWcuZGVidWctMTIzLVxcdGJvb2wgXFxcIkNoZWNrIGZvciBpbnZhbGlkIG1hcHBpbmdzIGluIHVzZXIgcGFnZSB0YWJsZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEzNS1cXG5tbS9LY29uZmlnLmRlYnVnOjEzNjpjb25maWcgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRFxcbm1tL0tjb25maWcuZGVidWctMTM3LVxcdGJvb2wgXFxcIkVuZm9yY2UgdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTA6NTAuMzIyNDUzNTQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzc0MTYxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW5hYmxpbmcgS2V5IE1lbW9yeSBNYW5hZ2VtZW50IEZlYXR1cmVzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZyB3ZSBzaG91bGQgZW5hYmxlIHRob3NlIGNyaXRpY2FsIGZlYXR1cmVzOiBgUEFHRV9FWFRFTlNJT05gLCBgUEFHRV9PV05FUmAsIGBQQUdFX1RBQkxFX0NIRUNLYCwgYW5kIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gVGhlc2UgYWxsIHNlZW0gbGlrZSB0aGV5J2xsIGNvbnRyaWJ1dGUgdG8gYSBtb3JlIHJvYnVzdCBhbmQgc2VjdXJlIG1lbW9yeSBtb2RlbC4gV2FpdCBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIHNvbWV0aGluZyBhYm91dCBgUEFHRV9PV05FUmAgcmVxdWlyaW5nIHRoZSBgcGFnZV9vd25lcj1vbmAgYm9vdCBwYXJhbWV0ZXIuIFRoYXQncyBhIGNyaXRpY2FsIGRldGFpbCwgYW5kIEkgZG9uJ3Qgd2FudCB0byBtYWtlIGFuIGFzc3VtcHRpb24uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpcyBwcm9wZXJseSBjb25maWd1cmVkIGJlZm9yZSBJIGRvIGFueXRoaW5nLiBPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZG9jdW1lbnRhdGlvbiBvciBjb2RlIGZvciBgUEFHRV9PV05FUmAuIExldCdzIGNsYXJpZnkgaXRzIGJlaGF2aW9yIGFuZCBkZXBlbmRlbmNpZXMgYmVmb3JlIHByb2NlZWRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb25hbGl0eSBmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MDo1NC41NTk4NzM1MDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzgzNDA5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9vd25lcj1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q9OTQ9ZW5hYmxlIGBgQ09ORklHX1NUQUNLVFJBQ0VgYC4gVG8gaW5jbHVkZSBhbGxvYyBhbmQgZnJlZSBzdGFjayB0cmFjZXMgb2YgYWZmZWN0ZWRcXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q6OTU6cGh5c2ljYWwgcGFnZXMsIGVuYWJsZSBgYENPTkZJR19QQUdFX09XTkVSYGAgYW5kIGJvb3Qgd2l0aCBgYHBhZ2Vfb3duZXI9b25gYC5cXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3QtOTYtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0PTM1PXBhZ2Ugb3duZXIgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gU28sIGlmIHlvdSdkIGxpa2UgdG8gdXNlIGl0LCB5b3UgbmVlZFxcbkRvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3Q6MzY6dG8gYWRkIFxcXCJwYWdlX293bmVyPW9uXFxcIiB0byB5b3VyIGJvb3QgY21kbGluZS4gSWYgdGhlIGtlcm5lbCBpcyBidWlsdFxcbkRvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QtMzctd2l0aCBwYWdlIG93bmVyIGFuZCBwYWdlIG93bmVyIGlzIGRpc2FibGVkIGluIHJ1bnRpbWUgZHVlIHRvIG5vdCBlbmFibGluZ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdD02NT1Vc2FnZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdC03Mi1cXG5Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0OjczOjIpIEVuYWJsZSBwYWdlIG93bmVyOiBhZGQgXFxcInBhZ2Vfb3duZXI9b25cXFwiIHRvIGJvb3QgY21kbGluZS5cXG5Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0LTc0LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdD03Mj1LQVNBTuWPquaUr+aMgVNMVULjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rYXNhbi5yc3QtOTAtYGBDT05GSUdfU1RBQ0tUUkFDRWBgIOOAguimgeWMheaLrOWPl+W9seWTjeeJqeeQhumhtemdoueahOWIhumFjeWSjOmHiuaUvuWghuagiOi3n+i4queahOivne+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rYXNhbi5yc3Q6OTE66K+35ZCv55SoIGBgQ09ORklHX1BBR0VfT1dORVJgYCDlubbkvb/nlKggYGBwYWdlX293bmVyPW9uYGAg6L+b6KGM5byV5a+844CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdC05Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BhZ2Vfb3duZXIucnN0PTMyPXBhZ2Ugb3duZXLlnKjpu5jorqTmg4XlhrXkuIvmmK/npoHnlKjnmoTjgILmiYDku6XvvIzlpoLmnpzkvaDmg7Pkvb/nlKjlroPvvIzkvaDpnIDopoHlnKjkvaDnmoTlkK/liqhjbWRsaW5lXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGFnZV9vd25lci5yc3Q6MzM65Lit5Yqg5YWlXFxcInBhZ2Vfb3duZXI9b25cXFwi44CC5aaC5p6c5YaF5qC45piv55SocGFnZSBvd25lcuaehOW7uueahO+8jOW5tuS4lOeUseS6juayoeacieWQr+eUqOWQr+WKqFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BhZ2Vfb3duZXIucnN0LTM0LemAiemhueiAjOWcqOi/kOihjOaXtuemgeeUqHBhZ2Ugb3duZXLvvIzpgqPkuYjov5DooYzml7bnmoTlvIDplIDmmK/lvojlsI/nmoTjgILlpoLmnpzlnKjov5DooYzml7bnpoHnlKjvvIzlroPkuI1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BhZ2Vfb3duZXIucnN0LTU5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BhZ2Vfb3duZXIucnN0OjYwOjIpIOWQr+eUqHBhZ2Ugb3duZXI6IOa3u+WKoCBcXFwicGFnZV9vd25lcj1vblxcXCIg5YiwIGJvb3QgY21kbGluZS5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9wYWdlX293bmVyLnJzdC02MS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3Q9NzI9S0FTQU7lj6rmlK/mjIFTTFVC44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9kZXYtdG9vbHMva2FzYW4ucnN0LTkwLWBgQ09ORklHX1NUQUNLVFJBQ0VgYCDjgILopoHljIXmi6zlj5flvbHpn7/niannkIbpoIHpnaLnmoTliIbphY3lkozph4vmlL7loIbmo6fot5/ouaTnmoToqbHvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9kZXYtdG9vbHMva2FzYW4ucnN0OjkxOuiri+WVk+eUqCBgYENPTkZJR19QQUdFX09XTkVSYGAg5Lim5L2/55SoIGBgcGFnZV9vd25lcj1vbmBgIOmAsuihjOW8leWwjuOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3QtOTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODIwPXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzNy0jaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTAzODpcXHQvKiBVc2VkIGJ5IHBhZ2Vfb3duZXI9b24gdG8gZGV0ZWN0IHJlY3Vyc2lvbiBpbiBwYWdlIHRyYWNraW5nLiAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDM5LVxcdHVuc2lnbmVkXFx0XFx0XFx0aW5fcGFnZV9vd25lcjoxO1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xMDU9Y29uZmlnIFBBR0VfT1dORVJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTE1LVxcdCAgZmVhdHVyZSBvbiB5b3VyIGJ1aWxkLCBpdCBpcyBkaXNhYmxlZCBpbiBkZWZhdWx0LiBZb3Ugc2hvdWxkIHBhc3NcXG5tbS9LY29uZmlnLmRlYnVnOjExNjpcXHQgIFxcXCJwYWdlX293bmVyPW9uXFxcIiB0byBib290IHBhcmFtZXRlciBpbiBvcmRlciB0byBlbmFibGUgaXQuIEVhdHNcXG5tbS9LY29uZmlnLmRlYnVnLTExNy1cXHQgIGEgZmFpciBhbW91bnQgb2YgbWVtb3J5IGlmIGVuYWJsZWQuIFNlZSB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MDo1Ni4zOTgyMjMwODVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExMTY4MzU1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gUGFnZSBUYWJsZSBDaGVja3MgYW5kIFBBR0VfT1dORVIgZm9yIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gaW50ZWdyYXRlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgd2l0aCBzeXprYWxsZXIuICBXZSdyZSBkZWFsaW5nIHdpdGggcGFnZSB0YWJsZSBjaGVja3MgYW5kIGBQQUdFX09XTkVSYC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIGRpcmVjdGx5IGFkZCBib290IHBhcmFtZXRlcnM/IFByb2JhYmx5IG5vdCwgYnV0IG1heWJlIHN5emthbGxlciBhbHJlYWR5IGhhcyBzb21ldGhpbmcsIG9yIHdlIGNhbiBqdXN0IGVuYWJsZSB0aGUgY29uZmlnLiBHb29kIG5ld3MsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCBzZWVtcyBpZGVhbCBhcyBpdCBlbmZvcmNlcyBgUEFHRV9UQUJMRV9DSEVDS2Agd2l0aG91dCBuZWVkaW5nIGEgYm9vdCBwYXJhbWV0ZXIuIFRoYXQncyBhIHdpbi5cblxuTm93LCB3aGVyZSBzaG91bGQgc3l6a2FsbGVyJ3MgZm9jdXMgYmU/IEkgc3RhcnRlZCBsaXN0aW5nIGZ1bmN0aW9ucyB0byB0YXJnZXQ6IGBfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZWAsIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCwgYF9fc3BsaXRfcGFnZV9vd25lcmAsIGBfX2ZvbGlvX2NvcHlfb3duZXJgLCBgcGFnZV90YWJsZV9jaGVja19jbGVhcmAsIGBwYWdlX3RhYmxlX2NoZWNrX3NldGAsIGFuZCBgX19wYWdlX3RhYmxlX2NoZWNrX3plcm9gLiBIb2xkIG9uLCBgcGFnZV90YWJsZV9jaGVja19jbGVhcmAgYW5kIGBwYWdlX3RhYmxlX2NoZWNrX3NldGAgYXJlIGBzdGF0aWNgLiBOb3QgdXNlZnVsLiBUaGUgZXhwb3J0ZWQgb25lcyBhcmUgd2hlcmUgd2Ugc2hvdWxkIGJlIGxvb2tpbmc6IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXRgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0YCwgYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAsIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyYCwgYF9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXJgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZF9jbGVhcmAsIGFuZCBgX19wYWdlX3RhYmxlX2NoZWNrX3plcm9gLlxuXG5Gb3IgYFBBR0VfT1dORVJgLCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBgX19zZXRfcGFnZV9vd25lcmAsIGBfX3NwbGl0X3BhZ2Vfb3duZXJgLCBgX19mb2xpb19jb3B5X293bmVyYCwgYW5kIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgLlxuXG5JIHdhcyBnZXR0aW5nIHJlYWR5IHRvIGxpc3QgdGhlbSBhcyBmb2N1cyBzeW1ib2xzLCBidXQgd2FpdCEgVGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemUgYXZvaWRpbmcgXCJnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uc1wiIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gYF9fc2V0X3BhZ2Vfb3duZXJgIGFuZCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0YCAqYXJlKiBob3QgcGF0aHMg4oCTIHBhZ2UgYWxsb2NhdGlvbnMgYW5kIHVwZGF0ZXMgYXJlIGNvcmUgdG8gZXZlcnl0aGluZy4gTGlzdGluZyB0aGVtIG1pZ2h0IGJpYXMgdGhlIGZ1enplci4gSG93ZXZlciwgdGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgdG91Y2hlcyB0aGVzZSBob3QgcGF0aCBmdW5jdGlvbnMuIElzIHRoZXJlIGEgc3BlY2lmaWMgZnVuY3Rpb24gd2hlcmUgYF9fcGdjb3VudCA9PSAwYCBpcyB0cmlnZ2VyZWQgb3IgcmVsYXRlZCB0byB0aGUgcGF0Y2g/IFRoZSBwYXRjaCBtb2RpZmllcyBgZm9yX2VhY2hfcGFnZV9leHRgIHdpdGggYGNvdW50YCBsaW1pdHMuIENhbGxlcnMgcGFzcyBgMSBcdTAwM2NcdTAwM2Mgb3JkZXJgIG9yIGBwZ2NudGAuIEFuZCBgcGdjbnRgIGlzIHBvdGVudGlhbGx5IGBucmAgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVzX3NldGAuIElmIGBucmAgaXMgMCwgd2UncmUgaW4gdGhlIG5ldyBiZWhhdmlvci4gV2hlbiBkb2VzIGBucmAgYmVjb21lIDA/IFBvdGVudGlhbGx5IHdpdGggY2VydGFpbiBtbWFwL21wcm90ZWN0L21hZHZpc2UgY2FsbHMuXG5cblNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaG90IHBhdGhzLCBzaG91bGQgd2UgYXZvaWQgdGhlbSB0byBwcmV2ZW50IGJpYXNpbmc/IE1heWJlIHdlIHNob3VsZCBiZSBsaXN0aW5nIHRoZSBsZXNzIGhvdCBvbmVzLCBsaWtlIGBfX3NwbGl0X3BhZ2Vfb3duZXJgIGFuZCBgX19mb2xpb19jb3B5X293bmVyYC4gSG9sZCBvbiwgYF9fc3BsaXRfcGFnZV9vd25lcmAgaXMgb25seSBjYWxsZWQgZHVyaW5nIGh1Z2UgcGFnZSBzcGxpdHMsIGFuZCBgX19mb2xpb19jb3B5X293bmVyYCBkdXJpbmcgcGFnZSBtaWdyYXRpb24uIFRob3NlIGFyZSBtdWNoIGxlc3MgZnJlcXVlbnQgdGhhbiBiYXNpYyBwYWdlIGFsbG9jYXRpb24uXG5cblNvLCBoZXJlJ3MgbXkgcmVmaW5lZCBsaXN0IGZvciBgRm9jdXNTeW1ib2xzYDpcblxuKiAgIGBfX3NwbGl0X3BhZ2Vfb3duZXJgXG4qICAgYF9fZm9saW9fY29weV9vd25lcmBcbiogICBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YFxuKiAgIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXRgXG4qICAgYF9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXJgXG4qICAgYF9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXJgXG5cbk5vdyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYF9fc3BsaXRfcGFnZV9vd25lcmAgaXMgZXhwb3J0ZWQgb3IgcmVhY2hhYmxlIGZyb20gd2hlcmUgd2UgYXJlIHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NDUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MDcuNTE1MDYwNzg3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk0NDM5NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3BsaXRfcGFnZV9vd25lclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xMj1leHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTEzLVxcdFxcdFxcdHVuc2lnbmVkIHNob3J0IG9yZGVyLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MTQ6ZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTE1LVxcdFxcdFxcdGludCBuZXdfb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9MzU9c3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0zOC1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM5OlxcdFxcdF9fc3BsaXRfcGFnZV9vd25lcihwYWdlLCBvbGRfb3JkZXIsIG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDAtfVxcbi0tXFxubW0vcGFnZV9vd25lci5jPTM0OD12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzYwLVxcbm1tL3BhZ2Vfb3duZXIuYzozNjE6dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXFxubW0vcGFnZV9vd25lci5jLTM2Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUxOjA5LjMwOTUwNjA5NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjczODczMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqRGlnZ2luZyBpbnRvIGBzcGxpdF9wYWdlX293bmVyYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGlzIGJpdCBvZiBjb2RlLCBhbmQgSSd2ZSBnb3QgYSBjbHVlOiBpdCdzIG5vdCBkaXJlY3RseSBleHBvcnRlZCwgYnV0IGl0J3MgbHVya2luZyBpbiBgbW0vcGFnZV9vd25lci5jYC4gVGhlIGZ1bmN0aW9uIEknbSBhZnRlciBpcyBgc3BsaXRfcGFnZV9vd25lcmAuIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgbmFtZSwgYW5kIGl0J3MgY2FsbGVkIGZyb20gYSBmdW5jdGlvbiB3aXRoIGEgcHJldHR5IHNwZWNpZmljIG5hbWUsIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBvciBzb21ldGhpbmcgc2ltaWxhciwgd2hpY2ggaXRzZWxmIGNhbGxzIGBzcGxpdF9wYWdlX293bmVyYC5cblxuQWxyaWdodCwgc2luY2UgSSd2ZSBwaW5uZWQgZG93biB0aGUgZnVuY3Rpb24gdG8gY2hlY2ssIGxldCdzIGp1c3QgdHJhY2UgdGhlIGNhbGxlcnMgb2YgYHNwbGl0X3BhZ2Vfb3duZXJgIGRpcmVjdGx5LiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgY2FsbGluZyBjb250ZXh0IGJ5IGRvaW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MTQuNTgzMzgxOTE3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQwOTA0MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X3BhZ2Vfb3duZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9MTI9ZXh0ZXJuIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xMy1cXHRcXHRcXHR1bnNpZ25lZCBzaG9ydCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2spO1xcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjE0OmV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNS1cXHRcXHRcXHRpbnQgbmV3X29yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTI4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTM0LVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM1OnN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTM2LVxcdFxcdFxcdGludCBuZXdfb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0zOC1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM5OlxcdFxcdF9fc3BsaXRfcGFnZV9vd25lcihwYWdlLCBvbGRfb3JkZXIsIG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9NjA9c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNjMtfVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjY0OnN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTY1LVxcdFxcdFxcdGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2NzI9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3MTUtXFx0XFx0Zm9saW9fc3BsaXRfbWVtY2dfcmVmcyhmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYzozNzE2OlxcdFxcdHNwbGl0X3BhZ2Vfb3duZXIoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jLTM3MTctXFx0XFx0cGdhbGxvY190YWdfc3BsaXQoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTM5MTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXFxuLS1cXG5tbS9odWdldGxiLmMtMzk1MC1cXG5tbS9odWdldGxiLmM6Mzk1MTpcXHRcXHRzcGxpdF9wYWdlX293bmVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgaHVnZV9wYWdlX29yZGVyKHNyYyksIGh1Z2VfcGFnZV9vcmRlcihkc3QpKTtcXG5tbS9odWdldGxiLmMtMzk1Mi1cXHRcXHRwZ2FsbG9jX3RhZ19zcGxpdChmb2xpbywgaHVnZV9wYWdlX29yZGVyKHNyYyksIGh1Z2VfcGFnZV9vcmRlcihkc3QpKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zMDkxPXN0YXRpYyB2b2lkIF9fc3BsaXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTMwOTQtXFxubW0vcGFnZV9hbGxvYy5jOjMwOTU6XFx0c3BsaXRfcGFnZV9vd25lcihwYWdlLCBvcmRlciwgMCk7XFxubW0vcGFnZV9hbGxvYy5jLTMwOTYtXFx0cGdhbGxvY190YWdfc3BsaXQocGFnZV9mb2xpbyhwYWdlKSwgb3JkZXIsIDApO1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTM0OD12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzYwLVxcbm1tL3BhZ2Vfb3duZXIuYzozNjE6dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXFxubW0vcGFnZV9vd25lci5jLTM2Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUxOjE2LjMyNDI5NDA5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ1MDY1NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0cywgYW5kIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uc2lkZXJpbmcgT3duZXIgU3ltYm9scyBmb3IgUGFnZSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byByZXByZXNlbnQgdGhlIFwib3duZXJcIiBvZiBhIHBhZ2UgaW4gdGhpcyBzeXN0ZW0uIEkndmUgYmVlbiBjb25zaWRlcmluZyBkaWZmZXJlbnQgc3ltYm9scyBhbmQgYF9fc3BsaXRfcGFnZV9vd25lcmAgaW1tZWRpYXRlbHkgc3RyaWtlcyBtZSBhcyBhIHNvbGlkIGNob2ljZS4gSXQncyBjbGVhcmx5IG5hbWVkLCBsaWtlbHkgaW50dWl0aXZlIGZvciBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhlIGludGVybmFsIHdvcmtpbmdzLCBhbmQgc2VlbXMgdG8gY2FwdHVyZSB0aGUgZXNzZW5jZSBvZiB3aGF0IHdlIG5lZWQuIEhvd2V2ZXIsIGJlZm9yZSBzZXR0bGluZyBvbiB0aGF0LCBpdCdzIHdvcnRoIGEgbW9tZW50IHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgYW5kIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZXMgdGhhdCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlIGluIHNwZWNpZmljIHNjZW5hcmlvcy4gVGhhdCBsZWFkcyBtZSB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCBgX19mb2xpb19jb3B5X293bmVyYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgc3ltYm9sIGlzIGEgYmV0dGVyIGZpdCBvciBub3QuIFBlcmhhcHMgYm90aCBhcmUgdmFsaWQgYW5kIGl0IGRlcGVuZHMgb24gdGhlIGV4YWN0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzUzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MTkuMjY5MzYzMjc0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMxMTUxMzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9saW9fY29weV9vd25lclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xND1leHRlcm4gdm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMTUtXFx0XFx0XFx0aW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MTY6ZXh0ZXJuIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNy1leHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDMtXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo0NDpcXHRcXHRfX2ZvbGlvX2NvcHlfb3duZXIobmV3Zm9saW8sIG9sZCk7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDUtfVxcbi0tXFxubW0vcGFnZV9vd25lci5jPTM2MT12b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zNzQtXFxubW0vcGFnZV9vd25lci5jOjM3NTp2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG5tbS9wYWdlX293bmVyLmMtMzc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MjEuMzAwNTIxMjc1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTU3NTU0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPd25lcnNoaXAgVHJhbnNmZXIgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgZm9saW9fY29weV9vd25lcmAgZnVuY3Rpb24uIEl0IHNlZW1zIGl0J3MgYmVpbmcgaW52b2tlZCBkdXJpbmcgdGhlc2UgZm9saW8gbWlncmF0aW9uIHByb2Nlc3Nlcywgc3BlY2lmaWNhbGx5IGZyb20gYG1pZ3JhdGVfZm9saW9fZXh0cmFgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiAgUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbmVlZCBhIGNsZWFyZXIgcGljdHVyZSBvZiAqd2h5KiBpdCdzIGJlaW5nIGNhbGxlZCBhbmQgd2hlcmUgZWxzZSBpdCdzIGluIHVzZS4gVGhlIGZpcnN0IHRoaW5nIEknbGwgZG8gaXMgY2hlY2sgaXRzIGNhbGxlcnM7IGEgcXVpY2sgc2VhcmNoIGZvciBhbGwgdGhlIHBvaW50cyB3aGVyZSBgZm9saW9fY29weV9vd25lcmAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlIHNob3VsZCBzaGVkIHNvbWUgaW1tZWRpYXRlIGxpZ2h0LiAgVW5kZXJzdGFuZGluZyB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHRoaXMgb3duZXJzaGlwIHRyYW5zZmVyIGlzIGhhcHBlbmluZyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MToyNC43MTYyODAxMDNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzQ1NTQ2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fY29weV9vd25lclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xND1leHRlcm4gdm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMTUtXFx0XFx0XFx0aW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MTY6ZXh0ZXJuIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0xNy1leHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oPTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNDAtfVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjQxOnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQyLXtcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC00My1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjQ0OlxcdFxcdF9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC00NS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD02ND1zdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTY3LX1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaDo2ODpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTY5LXtcXG4tLVxcbm1tL21pZ3JhdGUuYz03NjI9dm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9taWdyYXRlLmMtODQ1LVxcbm1tL21pZ3JhdGUuYzo4NDY6XFx0Zm9saW9fY29weV9vd25lcihuZXdmb2xpbywgZm9saW8pO1xcbm1tL21pZ3JhdGUuYy04NDctXFx0cGdhbGxvY190YWdfc3dhcChuZXdmb2xpbywgZm9saW8pO1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTM2MT12b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zNzQtXFxubW0vcGFnZV9vd25lci5jOjM3NTp2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG5tbS9wYWdlX293bmVyLmMtMzc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MjYuNTkwODQ0OTA4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODU0ODE4OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1c2luZyBvbiBNZW1vcnkgTWFuYWdlbWVudCBTeW1ib2xzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uICpZZXMqLCBgX19mb2xpb19jb3B5X293bmVyYCBpcyBhIHNvbGlkIHN5bWJvbCB0byByZWFsbHkgZHJpbGwgZG93biBpbnRvLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhhdCBwYXJ0aWN1bGFyIHN1YnN5c3RlbS4gTm93LCB3aGF0ICplbHNlKiBpcyBvbiBteSBtaW5kPyBIbW0uLi4gYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAuIFRoYXQgcmluZ3MgYSBiZWxsLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgZnVsbCBjb250ZXh0IHRvIGJlIHRob3JvdWdoLiBJdCdzIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZXMsIEkga25vdyB0aGF0LiBMZXQncyBzZWUgaG93IGJvdGggZml0IGludG8gdGhlIGxhcmdlciB2aWV3IG9mIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjEyMiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUxOjM3LjQ0NTY2NzcyN1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NDcwMTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MjU9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yNi1cXHRcXHRwbWRfdCAqcG1kcCwgcG1kX3QgcG1kLCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI3OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMjgtXFx0XFx0cHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCwgdW5zaWduZWQgaW50IG5yKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTk1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTAwLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjEwMTpcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQobW0sIGFkZHIsIHB1ZHAsIHB1ZCwgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEwMi19XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjQ0PUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQ1LVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNDY6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQ3LVxcdFxcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsXFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI1OS19XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI2MDpFWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6MzkuMzAwMzc0MDEyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTYzNDczNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSB0b286XG5cbioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgTWFuaXB1bGF0aW9uIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ3ZlIGJlZW4gdGFraW5nIGEgbG9vayBhdCBhIGZldyBmdW5jdGlvbnMgaGVyZSwgYW5kIGl0J3MgbG9va2luZyBwcmV0dHkgZ29vZCBzbyBmYXIuIFNwZWNpZmljYWxseSwgYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXRgIHNlZW0gdG8gYmUgZG9pbmcgZXhhY3RseSB3aGF0IEknZCBleHBlY3QuIFRoZXNlIGFyZSBsaWtlbHkgcmVsYXRlZCB0byBzZXR0aW5nIFBhZ2UgVXBwZXIgRGlyZWN0b3JpZXMgKFBVRHMpIGFuZCBQYWdlIE1pZGRsZSBEaXJlY3RvcmllcyAoUE1Ecykg4oCTIGNvcmUgb3BlcmF0aW9ucyBpbiBtYW5hZ2luZyB0aGUgcGFnZSB0YWJsZSBoaWVyYXJjaHkuIEknbSBzYXRpc2ZpZWQgdGhleSBhcmUgZnVuY3Rpb25pbmcgYXMgaW50ZW5kZWQgdG8gZXN0YWJsaXNoIHRoZSBiYXNlIGVudHJpZXMgZm9yIG1lbW9yeSBtYXBwaW5nLiBTaW1pbGFybHksIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyYCBhbmQgYF9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXJgIHNlZW0gdG8gYmUgcHJvcGVybHkgaGFuZGxpbmcgdGhlIGRlYWxsb2NhdGlvbiBvZiBQVURzIGFuZCBQTURzIHJlc3BlY3RpdmVseSwgY3JpdGljYWwgZm9yIGZyZWVpbmcgdXAgbWVtb3J5IGFuZCBtYWludGFpbmluZyBjb25zaXN0ZW5jeS4gTm93LCBteSBuZXh0IGZvY3VzIGlzIG9uIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AuIFRoaXMgb25lIGlzIGludGVyZXN0aW5nOyBsZXQncyBkaWcgaW50byB0aGF0IG9uZSBhIGxpdHRsZSBtb3JlLiBJdOKAmXMgcHJvYmFibHkgY2hlY2tpbmcgZm9yIHplcm9lZCBlbnRyaWVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgcHJldmVudGluZyBwb3RlbnRpYWwgbGVha3Mgd2hlbiBtYXBwaW5nIG9yIHVubWFwcGluZyBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzg1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6NDMuOTU2NzI0NzJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDI5ODM4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wYWdlX3RhYmxlX2NoZWNrX3plcm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MTQ9ZXh0ZXJuIHN0cnVjdCBwYWdlX2V4dF9vcGVyYXRpb25zIHBhZ2VfdGFibGVfY2hlY2tfb3BzO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE1LVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjE2OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3plcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTctdm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0zMz1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMzctXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mzg6XFx0X19wYWdlX3RhYmxlX2NoZWNrX3plcm8ocGFnZSwgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTM5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX2ZyZWUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTQ1LVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjQ2OlxcdF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHBhZ2UsIG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC00Ny19XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9OTc9c3RhdGljIHZvaWQgcGFnZV90YWJsZV9jaGVja19zZXQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgcGdjbnQsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTMwLSAqL1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxMzE6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfemVybyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xMzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MTo0NS43OTk3MTcwMzVaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ5MjQ0ODA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipPcHRpbWl6aW5nIFBhZ2UgRXh0ZW5zaW9uIEl0ZXJhdGlvbioqXG5cbk9rYXksIHNvIGBfX3BhZ2VfdGFibGVfY2hlY2tfemVyb2AgaXMgZ2V0dGluZyBjYWxsZWQgKmEgbG90KiDigJMgZXZlcnkgc2luZ2xlIHRpbWUgd2UgYWxsb2NhdGUgb3IgZnJlZSBhIHBhZ2UuIFRoYXQncyBhIHNlcmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYSBob3QgcGF0aCB0aGF0J3MgcmVhbGx5IGh1cnRpbmcgdXMuIFRoZSBvYnZpb3VzIHNvbHV0aW9uIGlzIHRvIHNraXAgYF9fcGFnZV90YWJsZV9jaGVja196ZXJvYCBhbmQgYF9fc2V0X3BhZ2Vfb3duZXJgLiBMZXQncyBzZWUgaWYgdGhhdCdzIGZlYXNpYmxlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGxvb2tzIHNvbGlkLCBmdW5jdGlvbmFsbHkgc3BlYWtpbmcuIEl0J3MgZGVmaW5pdGVseSB3b3J0aCBwdXR0aW5nIGl0IHRocm91Z2ggZnV6emluZy4gVGhlIGtleSBjaGFuZ2VzIGFyZSB0byBgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgLCBhbmQgYGZvcl9lYWNoX3BhZ2VfZXh0YCwgd2hlcmUgaXQgaW50cm9kdWNlcyBhIGBjb3VudGAgbGltaXRhdGlvbiB0byB0aGUgaXRlcmF0aW9uLiBUaGlzIGNoYW5nZSBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AsIHNpbmNlIHRoZXNlIGZlYXR1cmVzIGl0ZXJhdGUgdGhyb3VnaCBwYWdlIGV4dGVuc2lvbnMuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHdlIGRvbid0IGJyZWFrIGFueXRoaW5nIHVuZXhwZWN0ZWRseTogYFBBR0VfRVhURU5TSU9OYCwgYFBBR0VfT1dORVJgLCBgUEFHRV9UQUJMRV9DSEVDS2AsIGFuZCBgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRGAuIEdvdHRhIGJlIHRob3JvdWdoIGhlcmUuXG5cbkFoYSwgYSBzbmFnISBgUEFHRV9PV05FUmAgcmVxdWlyZXMgdGhlIGBwYWdlX293bmVyPW9uYCBib290IHBhcmFtZXRlci4gVGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGFuZCBTeXprYWxsZXIgbWlnaHQgbm90IGF1dG9tYXRpY2FsbHkgcHJvdmlkZSBpdCwgYnV0IHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIG9uIG91ciBlbmQuIFRoaXMgaXMgYSBwb2ludCBvZiBjb25jZXJuLiBDYW4gd2UgcGVyaGFwcyBlbmZvcmNlIGBQQUdFX09XTkVSYCB0aHJvdWdoIGEgY29uZmlndXJhdGlvbiBvcHRpb24/IExldCdzIGludmVzdGlnYXRlIHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1ODQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTE6NTUuMjkyMTY4MTA3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0MTg1ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX09XTkVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxcbm1tL0tjb25maWcuZGVidWctMTA2LVxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUxOjU3LjA0NjM1OTc3NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUzODE1MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQncyBhIGRpcmVjdCByZXByZXNlbnRhdGlvbiBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBBY2Nlc3MgQ29udHJvbCBNZWNoYW5pc21zKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBwZXJmb3JtIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSBmbGFncyBvciBpbmRpY2F0b3JzIG9mIGEgc3BlY2lmaWMgYWNjZXNzIGNvbnRyb2wgZW5mb3JjZW1lbnQgcG9saWN5LiBNeSBndXQgc2F5cyB0byBsb29rIGZvciBhbnl0aGluZyBleHBsaWNpdGx5IG5hbWVkLCBsaWtlIGBQQUdFX09XTkVSX0VORk9SQ0VEYCBvciBzb21ldGhpbmcgd2l0aCBhIHNpbWlsYXIgc2VtYW50aWMgbWVhbmluZy4gVGhlIGdvYWwgaXMgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gb2J2aW91cywgdXBmcm9udCwgZGVkaWNhdGVkIG1lY2hhbmlzbS4gSXQgY291bGQgYmUgYSBzaW1wbGUgZmxhZywgYSBkZWRpY2F0ZWQgc2VjdGlvbiBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgcGVyaGFwcyBhIGNvbnN0YW50IHVzZWQgdGhyb3VnaG91dCB0aGUgY29kZS4gQ2F0Y2hpbmcgdGhpcyBlYXJseSBpcyBpbXBvcnRhbnQsIGFzIGl0IHdpbGwgbGlrZWx5IGRldGVybWluZSBteSBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMzYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MjowMC4xMDAxNzc0NjFaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjExNjAzMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEFHRV9PV05FUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q9OTQ9ZW5hYmxlIGBgQ09ORklHX1NUQUNLVFJBQ0VgYC4gVG8gaW5jbHVkZSBhbGxvYyBhbmQgZnJlZSBzdGFjayB0cmFjZXMgb2YgYWZmZWN0ZWRcXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3Q6OTU6cGh5c2ljYWwgcGFnZXMsIGVuYWJsZSBgYENPTkZJR19QQUdFX09XTkVSYGAgYW5kIGJvb3Qgd2l0aCBgYHBhZ2Vfb3duZXI9b25gYC5cXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3QtOTYtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2FzYW4ucnN0PTcyPUtBU0FO5Y+q5pSv5oyBU0xVQuOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdC05MC1gYENPTkZJR19TVEFDS1RSQUNFYGAg44CC6KaB5YyF5ous5Y+X5b2x5ZON54mp55CG6aG16Z2i55qE5YiG6YWN5ZKM6YeK5pS+5aCG5qCI6Lef6Liq55qE6K+d77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2thc2FuLnJzdDo5MTror7flkK/nlKggYGBDT05GSUdfUEFHRV9PV05FUmBgIOW5tuS9v+eUqCBgYHBhZ2Vfb3duZXI9b25gYCDov5vooYzlvJXlr7zjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2FzYW4ucnN0LTkyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvZGV2LXRvb2xzL2thc2FuLnJzdD03Mj1LQVNBTuWPquaUr+aMgVNMVULjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3QtOTAtYGBDT05GSUdfU1RBQ0tUUkFDRWBgIOOAguimgeWMheaLrOWPl+W9semfv+eJqeeQhumggemdoueahOWIhumFjeWSjOmHi+aUvuWghuajp+i3n+i5pOeahOipse+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL2Rldi10b29scy9rYXNhbi5yc3Q6OTE66KuL5ZWT55SoIGBgQ09ORklHX1BBR0VfT1dORVJgYCDkuKbkvb/nlKggYGBwYWdlX293bmVyPW9uYGAg6YCy6KGM5byV5bCO44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvZGV2LXRvb2xzL2thc2FuLnJzdC05Mi1cXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz0zOTQ9Q09ORklHX01BR0lDX1NZU1JRPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc6Mzk1OkNPTkZJR19QQUdFX09XTkVSPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWctMzk2LUNPTkZJR19QQUdFX1BPSVNPTklORz15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODM4PUNPTkZJR19TTFVCX0RFQlVHX09OPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6ODM5OkNPTkZJR19QQUdFX09XTkVSPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctODQwLUNPTkZJR19ERUJVR19ST0RBVEFfVEVTVD15XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYz0xMDQ9c3RydWN0IGhpbmljM19jbGVhbl9xdWV1ZV9jdHh0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19pby5jLTEzMC0jZGVmaW5lIFNRX0NUWFRfV1FfUEFHRV9ISV9QRk5fTUFTSyAgICAgICAgR0VOTUFTSygxOSwgMClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYzoxMzE6I2RlZmluZSBTUV9DVFhUX1dRX1BBR0VfT1dORVJfTUFTSyAgICAgICAgIEJJVCgyMylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYy0xMzItI2RlZmluZSBTUV9DVFhUX1dRX1BBR0VfU0VUKHZhbCwgbWVtYmVyKSAgXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2lvLmMtMTc5LSNkZWZpbmUgUlFfQ1RYVF9XUV9QQUdFX1dRRV9UWVBFX01BU0sgICAgICBHRU5NQVNLKDI5LCAyOClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYzoxODA6I2RlZmluZSBSUV9DVFhUX1dRX1BBR0VfT1dORVJfTUFTSyAgICAgICAgIEJJVCgzMSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfaW8uYy0xODEtI2RlZmluZSBSUV9DVFhUX1dRX1BBR0VfU0VUKHZhbCwgbWVtYmVyKSAgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjI6I2lmbmRlZiBfX0xJTlVYX1BBR0VfT1dORVJfSFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjM6I2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSFxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC02LVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjc6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtOC1leHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD03ND1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgtNzYtfVxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjc3OiNlbmRpZiAvKiBDT05GSUdfUEFHRV9PV05FUiAqL1xcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oOjc4OiNlbmRpZiAvKiBfX0xJTlVYX1BBR0VfT1dORVJfSCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTgyMD1zdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMzYtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEwMzc6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMzgtXFx0LyogVXNlZCBieSBwYWdlX293bmVyPW9uIHRvIGRldGVjdCByZWN1cnNpb24gaW4gcGFnZSB0cmFja2luZy4gKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9wc3Atc2V2Lmg9NDI9dHlwZWRlZiBlbnVtIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9wc3Atc2V2LmgtNzgtXFx0U0VWX1JFVF9JTlZBTElEX01EQVRBX0VOVFJZICAgICAgICA9IDB4MDAxQixcXG5pbmNsdWRlL3VhcGkvbGludXgvcHNwLXNldi5oOjc5OlxcdFNFVl9SRVRfSU5WQUxJRF9QQUdFX09XTkVSICAgICAgICAgPSAweDAwMUMsXFxuaW5jbHVkZS91YXBpL2xpbnV4L3BzcC1zZXYuaC04MC1cXHRTRVZfUkVUX0FFQURfT0ZMT1cgICAgICAgICAgICAgICAgID0gMHgwMDFELFxcbi0tXFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnPTU3PUNPTkZJR19QQUdFX0VYVEVOU0lPTj15XFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjU4OkNPTkZJR19QQUdFX09XTkVSPXlcXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNTktQ09ORklHX0RFQlVHX0tNRU1MRUFLPXlcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9MTE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNS1cXHQgIHdpdGggc3RhY2sgdHJhY2VzIG9mIGxhc3QgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiB0aGUgcGFnZSwgd2hlblxcbm1tL0tjb25maWcuZGVidWc6MjY6XFx0ICBQQUdFX09XTkVSIGlzIGFsc28gc2VsZWN0ZWQgYW5kIGVuYWJsZWQgb24gYm9vdC5cXG5tbS9LY29uZmlnLmRlYnVnLTI3LVxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTA0LVxcbm1tL0tjb25maWcuZGVidWc6MTA1OmNvbmZpZyBQQUdFX09XTkVSXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXFx0Ym9vbCBcXFwiVHJhY2sgcGFnZSBvd25lclxcXCJcXG4tLVxcbm1tL01ha2VmaWxlPTExNj1vYmotJChDT05GSUdfREVCVUdfVk1fUEdUQUJMRSkgKz0gZGVidWdfdm1fcGd0YWJsZS5vXFxubW0vTWFrZWZpbGU6MTE3Om9iai0kKENPTkZJR19QQUdFX09XTkVSKSArPSBwYWdlX293bmVyLm9cXG5tbS9NYWtlZmlsZS0xMTgtb2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICs9IHBhZ2VfaXNvbGF0aW9uLm9cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDk1PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTMwLVxcbm1tL3BhZ2VfYWxsb2MuYzo1MTMxOiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbm1tL3BhZ2VfYWxsb2MuYy01MTMyLVxcdC8qXFxubW0vcGFnZV9hbGxvYy5jOjUxMzM6XFx0ICogUEFHRV9PV05FUiBtYXkgcmVjdXJzZSBpbnRvIHRoZSBhbGxvY2F0b3IgdG8gYWxsb2NhdGUgc3BhY2UgdG9cXG5tbS9wYWdlX2FsbG9jLmMtNTEzNC1cXHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXFxuLS1cXG5tbS9wYWdlX2V4dC5jPTgwPXN0YXRpYyBzdHJ1Y3QgcGFnZV9leHRfb3BlcmF0aW9ucyAqcGFnZV9leHRfb3BzW10gX19pbml0ZGF0YSA9IHtcXG5tbS9wYWdlX2V4dC5jOjgxOiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbm1tL3BhZ2VfZXh0LmMtODItXFx0XFx1MDAyNnBhZ2Vfb3duZXJfb3BzLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTE4LS8qXFxubW0vcGFnZV9vd25lci5jOjE5OiAqIFRPRE86IHRlYWNoIFBBR0VfT1dORVJfU1RBQ0tfREVQVEggKF9fZHVtcF9wYWdlX293bmVyIGFuZCBzYXZlX3N0YWNrKVxcbm1tL3BhZ2Vfb3duZXIuYy0yMC0gKiB0byB1c2Ugb2ZmIHN0YWNrIHRlbXBvcmFsIHN0b3JhZ2VcXG5tbS9wYWdlX293bmVyLmMtMjEtICovXFxubW0vcGFnZV9vd25lci5jOjIyOiNkZWZpbmUgUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoMTYpXFxubW0vcGFnZV9vd25lci5jLTIzLVxcbi0tXFxubW0vcGFnZV9vd25lci5jPTE1NT1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2F2ZV9zdGFjayhnZnBfdCBmbGFncylcXG5tbS9wYWdlX293bmVyLmMtMTU2LXtcXG5tbS9wYWdlX293bmVyLmM6MTU3OlxcdHVuc2lnbmVkIGxvbmcgZW50cmllc1tQQUdFX09XTkVSX1NUQUNLX0RFUFRIXTtcXG5tbS9wYWdlX293bmVyLmMtMTU4LVxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4tLVxcbm1tL3Ztc3RhdC5jPTE2NjU9c3RhdGljIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dibG9ja2NvdW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKVxcbi0tXFxubW0vdm1zdGF0LmMtMTY4MC0gKiBvZiBvdGhlciB0eXBlcy4gVGhpcyBnaXZlcyBhbiBpbmRpY2F0aW9uIG9mIGhvdyB3ZWxsIGZhbGxiYWNrcyBhcmUgYmVpbmdcXG5tbS92bXN0YXQuYzoxNjgxOiAqIGNvbnRhaW5lZCBieSBybXF1ZXVlX2ZhbGxiYWNrKCkuIEl0IHJlcXVpcmVzIGluZm9ybWF0aW9uIGZyb20gUEFHRV9PV05FUlxcbm1tL3Ztc3RhdC5jLTE2ODItICogdG8gZGV0ZXJtaW5lIHdoYXQgaXMgZ29pbmcgb25cXG4tLVxcbm1tL3Ztc3RhdC5jPTE2ODQ9c3RhdGljIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgcGdfZGF0YV90ICpwZ2RhdClcXG5tbS92bXN0YXQuYy0xNjg1LXtcXG5tbS92bXN0YXQuYzoxNjg2OiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbm1tL3Ztc3RhdC5jLTE2ODctXFx0aW50IG10eXBlO1xcbi0tXFxubW0vdm1zdGF0LmMtMTcwMC1cXHRcXHRwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQpO1xcbm1tL3Ztc3RhdC5jOjE3MDE6I2VuZGlmIC8qIENPTkZJR19QQUdFX09XTkVSICovXFxubW0vdm1zdGF0LmMtMTcwMi19XFxuLS1cXG5zY3JpcHRzL2dkYi9saW51eC9jb25zdGFudHMucHkuaW49MTA4PUxYX1ZBTFVFKFZNX0RNQV9DT0hFUkVOVClcXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L2NvbnN0YW50cy5weS5pbi0xMTAtLyogbGludXgvcGFnZV9leHQuaCAqL1xcbnNjcmlwdHMvZ2RiL2xpbnV4L2NvbnN0YW50cy5weS5pbjoxMTE6aWYgSVNfQlVJTFRJTihDT05GSUdfUEFHRV9PV05FUik6XFxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluLTExMi0gICAgTFhfR0RCUEFSU0VEKFBBR0VfRVhUX09XTkVSKVxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluPTE2OD1MWF9DT05GSUcoQ09ORklHX1NUQUNLREVQT1QpXFxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluOjE2OTpMWF9DT05GSUcoQ09ORklHX1BBR0VfT1dORVIpXFxuc2NyaXB0cy9nZGIvbGludXgvY29uc3RhbnRzLnB5LmluLTE3MC1MWF9DT05GSUcoQ09ORklHX1NMVUJfREVCVUcpXFxuLS1cXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5PTEwPWZyb20gbGludXggaW1wb3J0IHV0aWxzLCBzdGFja2RlcG90LCBjb25zdGFudHMsIG1tXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS0xMS1cXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5OjEyOmlmIGNvbnN0YW50cy5MWF9DT05GSUdfUEFHRV9PV05FUjpcXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTEzLSAgICBwYWdlX2V4dF90ID0gdXRpbHMuQ2FjaGVkVHlwZSgnc3RydWN0IHBhZ2VfZXh0JylcXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHktMTUtXFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weToxNjogICAgUEFHRV9PV05FUl9TVEFDS19ERVBUSCA9IDE2XFxuc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weS0xNy0gICAgUEFHRV9FWFRfT1dORVIgPSBjb25zdGFudHMuTFhfUEFHRV9FWFRfT1dORVJcXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHk9MzA9Y2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XFxuLS1cXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTQxLSAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ3MsIGZyb21fdHR5KTpcXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5OjQyOiAgICAgICAgaWYgbm90IGNvbnN0YW50cy5MWF9DT05GSUdfUEFHRV9PV05FUjpcXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5OjQzOiAgICAgICAgICAgIHJhaXNlIGdkYi5HZGJFcnJvcignQ09ORklHX1BBR0VfT1dORVIgZG9lcyBub3QgZW5hYmxlJylcXG5zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5LTQ0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQyMTo1MjowMS44MjEzNDQ4MzlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2NjIwMTIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFzb25pbmcgVGhyb3VnaCBQYWdlIEV4dGVuc2lvbiBJdGVyYXRpb24gTGltaXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGVyZSBpc24ndCBhIGRpcmVjdCBlcXVpdmFsZW50IHRvIGBQQUdFX09XTkVSX0VORk9SQ0VEYCwgd2hpY2ggaXMgYSBsaXR0bGUgdW51c3VhbC4gSG93ZXZlciwgd2UgKmRvKiBoYXZlIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCwgYW5kIEkgdGhpbmsgd2UgY2FuIGxldmVyYWdlIHRoYXQuIE15IHBsYW4gaXMgdG8gbGlzdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBQQUdFX0VYVEVOU0lPTmAsIGBQQUdFX09XTkVSYCwgYFBBR0VfVEFCTEVfQ0hFQ0tgLCBhbmQsIGNydWNpYWxseSwgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgLlxuXG5UaGUgaGVhcnQgb2YgdGhpcyBwYXRjaCBpcyB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBgZm9yX2VhY2hfcGFnZV9leHRgIG1hY3JvLCBhbmQgdGhlIGFzc29jaWF0ZWQgaXRlcmF0b3IgZnVuY3Rpb25zIGxpa2UgYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gIGFuZCBgcGFnZV9leHRfaXRlcl9uZXh0YC4gSXQncyBlc3NlbnRpYWxseSBpbnRyb2R1Y2luZyBhIGBjb3VudGAgcGFyYW1ldGVyIHRvIGxpbWl0IGhvdyBtYW55IHBhZ2UgZXh0ZW5zaW9ucyB0aGVzZSBpdGVyYXRvcnMgcmV0dXJuLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEl0J3MgYWZmZWN0aW5nIHN1YnN5c3RlbXMgdGhhdCByZWx5IG9uIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2UgZXh0ZW5zaW9ucywgd2hpY2ggaW5jbHVkZXMgdGhpbmdzIGxpa2UgYFBBR0VfT1dORVJgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS2AuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIG5ldyBgY291bnRgIGxpbWl0IGlzIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgdW5uZWNlc3NhcnkgbG9va3VwcywgZXNwZWNpYWxseSB3aGVuIHRoZSBgY291bnRgIGlzIHplcm8gb3Igd2hlbiB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gcHJvY2Vzc2luZyBhIHNwZWNpZmljIG51bWJlciBvZiBwYWdlcy5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlc2Ugc3ltYm9sczogYF9fc3BsaXRfcGFnZV9vd25lcmAsIGBfX2ZvbGlvX2NvcHlfb3duZXJgLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0YCwgYF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldGAsIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyYCwgYW5kIGBfX3BhZ2VfdGFibGVfY2hlY2tfcG1kX2NsZWFyYC4gVGhpcyBpcyBob3cgdGhlIGNoZWNrcyBhcmUgbGlrZWx5IGltcGxlbWVudGVkLCBhbmQgdGhpcyB3aWxsIGJlIHVzZWZ1bCBhcyBhIHJlZmVyZW5jZSB0byB3aGF0IGlzIGNoYW5nZWQuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSB0aGVzZSBzeW1ib2xzIGFyZSB1c2VmdWwuIEFoISBJIHNlZSB0aGF0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXRgIGlzIGV4cG9ydGVkLiBPa2F5LCBidXQgaXMgaXQgYWN0dWFsbHkgKnVzZWQqIGFueXdoZXJlPyBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tLiBIbW0sIHllcywgaXQncyBjYWxsZWQgZnJvbSBgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgdGhhdCBpcyB1c2VkIGluIGBzZXRfcHRlc2Agb3Igc2ltaWxhciBjYWxscyByZWxhdGVkIHRvIHB1ZHMuIE5vdyBJIHNob3VsZCBjaGVjayB3aGF0IGlzIGNhbGxpbmcgYF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldGAgdG8gdW5kZXJzdGFuZCBpdHMgdXNlLWNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3Mzg0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDIxOjUyOjA5LjA4NzU1MDQ3NFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTMzMTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTY3Mz1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfcHRlc19hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjg4LVxcdGNhc2UgUFVEX1NJWkU6XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6Njg5OlxcdFxcdHBhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQobW0sIGFkZHIsIChwdWRfdCAqKXB0ZXAsXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNjkwLVxcdFxcdFxcdFxcdFxcdCAgcHRlX3B1ZChwdGUpLCBucik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yNT12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wbWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI2LVxcdFxcdHBtZF90ICpwbWRwLCBwbWRfdCBwbWQsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjc6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cXHRcXHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9ODY9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC05NC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDo5NTpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC05Ni1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEwMC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMDE6XFx0X19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KG1tLCBhZGRyLCBwdWRwLCBwdWQsIG5yKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMDItfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MTQ1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTQ5LVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjE1MDpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNTEtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0xNTU9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTYzLSNkZWZpbmUgcGFnZV90YWJsZV9jaGVja19wbWRfc2V0KG1tLCBhZGRyLCBwbWRwLCBwbWQpXFx0cGFnZV90YWJsZV9jaGVja19wbWRzX3NldChtbSwgYWRkciwgcG1kcCwgcG1kLCAxKVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjE2NDojZGVmaW5lIHBhZ2VfdGFibGVfY2hlY2tfcHVkX3NldChtbSwgYWRkciwgcHVkcCwgcHVkKVxcdHBhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQobW0sIGFkZHIsIHB1ZHAsIHB1ZCwgMSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNjUtXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjQ0PUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQ1LVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNDY6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjQ3LVxcdFxcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsXFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI1OS19XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI2MDpFWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldCk7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTI6MTAuOTMyODkxMjVaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMDAzMTIwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipUaGUgQ2FsbCBhbmQgdGhlIFRvb2wqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IGNvbmZpcm1zIHRoZSBcInRoZXlcIiBpbiBxdWVzdGlvbiBhcmUgaW5kZWVkIHdoYXQgSSB0aG91Z2h0IHRoZXkgd2VyZS4gR29vZC4gTm93LCBpdCdzIHRpbWUgdG8gbGV2ZXJhZ2UgdGhlIHNldC1yZXN1bHRzIHRvb2wuIEkga25vdyBob3cgdG8gbmF2aWdhdGUgdGhpczsgSSdsbCB1c2UgaXQgdG8gc3RydWN0dXJlIGFuZCByZWZpbmUgdGhlIG91dHB1dCBiYXNlZCBvbiB3aGF0IHRoZSBwcm9tcHQgZ2F2ZSBtZS4gTGV0J3Mgc2VlIGhvdyBlZmZpY2llbnRseSBJIGNhbiBpbnRlZ3JhdGUgdGhlIG5ldyBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzMjYsIk91dHB1dFRva2VucyI6MjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMjE6NTI6MTUuMjQyOTI4MDY2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MjU0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfRVhURU5TSU9OXCIsXG4gICAgXCJQQUdFX09XTkVSXCIsXG4gICAgXCJQQUdFX1RBQkxFX0NIRUNLXCIsXG4gICAgXCJQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zcGxpdF9wYWdlX293bmVyXCIsXG4gICAgXCJfX2ZvbGlvX2NvcHlfb3duZXJcIixcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldFwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3BtZHNfc2V0XCIsXG4gICAgXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHVkX2NsZWFyXCIsXG4gICAgXCJfX3BhZ2VfdGFibGVfY2hlY2tfcG1kX2NsZWFyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBmb3JfZWFjaF9wYWdlX2V4dGAgbWFjcm8gYW5kIGl0cyB1bmRlcmx5aW5nIGl0ZXJhdG9yIGZ1bmN0aW9ucyAoYHBhZ2VfZXh0X2l0ZXJfYmVnaW5gLCBgcGFnZV9leHRfaXRlcl9uZXh0YCkgdG8gbGltaXQgdGhlIG51bWJlciBvZiBwYWdlIGV4dGVuc2lvbnMgcmV0dXJuZWQgYmFzZWQgb24gYSBgY291bnRgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBhZmZlY3Rpbmcgc3Vic3lzdGVtcyB0aGF0IGl0ZXJhdGUgb3ZlciBwYWdlIGV4dGVuc2lvbnMgbGlrZSBgUEFHRV9PV05FUmAgYW5kIGBQQUdFX1RBQkxFX0NIRUNLYC4gSXQgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgdW5uZWNlc3NhcnkgbG9va3VwcyB3aGVuIHRoZSBjb3VudCBpcyAwIG9yIHdoZW4gaXRlcmF0aW5nIG92ZXIgYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9FWFRFTlNJT05cIixcbiAgICBcIlBBR0VfT1dORVJcIixcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tcIixcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NwbGl0X3BhZ2Vfb3duZXJcIixcbiAgICBcIl9fZm9saW9fY29weV9vd25lclwiLFxuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0XCIsXG4gICAgXCJfX3BhZ2VfdGFibGVfY2hlY2tfcG1kc19zZXRcIixcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wdWRfY2xlYXJcIixcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wbWRfY2xlYXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGZvcl9lYWNoX3BhZ2VfZXh0YCBtYWNybyBhbmQgaXRzIHVuZGVybHlpbmcgaXRlcmF0b3IgZnVuY3Rpb25zIChgcGFnZV9leHRfaXRlcl9iZWdpbmAsIGBwYWdlX2V4dF9pdGVyX25leHRgKSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhZ2UgZXh0ZW5zaW9ucyByZXR1cm5lZCBiYXNlZCBvbiBhIGBjb3VudGAgcGFyYW1ldGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBzdWJzeXN0ZW1zIHRoYXQgaXRlcmF0ZSBvdmVyIHBhZ2UgZXh0ZW5zaW9ucyBsaWtlIGBQQUdFX09XTkVSYCBhbmQgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciB1bm5lY2Vzc2FyeSBsb29rdXBzIHdoZW4gdGhlIGNvdW50IGlzIDAgb3Igd2hlbiBpdGVyYXRpbmcgb3ZlciBhIHNwZWNpZmljIG51bWJlciBvZiBwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowfq4st[1] Phase: Succeeded StartedAt: 2026-06-22 21:52:26 +0000 UTC FinishedAt: 2026-06-22 21:52:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-22 21:52:26 +0000 UTC FinishedAt: 2026-06-22 21:52:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2] Phase: Succeeded StartedAt: 2026-06-22 21:52:26 +0000 UTC FinishedAt: 2026-06-23 01:44:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 21:52:26 +0000 UTC FinishedAt: 2026-06-23 01:44:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 21:52:26 +0000 UTC FinishedAt: 2026-06-22 21:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 21:52:26 +0000 UTC FinishedAt: 2026-06-22 21:52:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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-workflowfq4st/series-workflowfq4st-convert-artifact-3219874601/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 21:52:36 +0000 UTC FinishedAt: 2026-06-22 22:15:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 21:52:36 +0000 UTC FinishedAt: 2026-06-22 22:15:04 +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:*0b9fb880-beaa-40a5-8cca-40f5d67ec842,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-workflowfq4st/series-workflowfq4st-convert-artifact-3219874601/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": "8a167138-2d5b-425c-95b1-36db4a0ef0cd", "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-workflowfq4st/series-workflowfq4st-build-action-3101805447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 21:52:36 +0000 UTC FinishedAt: 2026-06-22 22:14:54 +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:*0b9fb880-beaa-40a5-8cca-40f5d67ec842,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-workflowfq4st/series-workflowfq4st-convert-artifact-3219874601/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": "8a167138-2d5b-425c-95b1-36db4a0ef0cd", "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-workflowfq4st/series-workflowfq4st-build-action-3101805447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:15:04 +0000 UTC FinishedAt: 2026-06-22 22:15:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:15:04 +0000 UTC FinishedAt: 2026-06-22 22:15:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:15:04 +0000 UTC FinishedAt: 2026-06-22 22:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:15:04 +0000 UTC FinishedAt: 2026-06-22 22:15:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-workflowfq4st/series-workflowfq4st-convert-artifact-560103612/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:15:15 +0000 UTC FinishedAt: 2026-06-22 22:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:15:15 +0000 UTC FinishedAt: 2026-06-22 22:17:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a167138-2d5b-425c-95b1-36db4a0ef0cd,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-workflowfq4st/series-workflowfq4st-build-action-3101805447/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-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:17:11 +0000 UTC FinishedAt: 2026-06-22 22:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:17:11 +0000 UTC FinishedAt: 2026-06-22 22:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:17:11 +0000 UTC FinishedAt: 2026-06-22 22:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:17:11 +0000 UTC FinishedAt: 2026-06-22 22:38:49 +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:*0b9fb880-beaa-40a5-8cca-40f5d67ec842,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-workflowfq4st/series-workflowfq4st-convert-artifact-560103612/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": "58c93c8c-f5f4-4236-8cf7-1fb0abe53ae0", "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-workflowfq4st/series-workflowfq4st-build-action-4048964376/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:17:11 +0000 UTC FinishedAt: 2026-06-22 22:38:39 +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:*0b9fb880-beaa-40a5-8cca-40f5d67ec842,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-workflowfq4st/series-workflowfq4st-convert-artifact-560103612/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": "58c93c8c-f5f4-4236-8cf7-1fb0abe53ae0", "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-workflowfq4st/series-workflowfq4st-build-action-4048964376/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:38:49 +0000 UTC FinishedAt: 2026-06-22 22:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:38:49 +0000 UTC FinishedAt: 2026-06-22 22:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:38:49 +0000 UTC FinishedAt: 2026-06-22 22:40:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:38:49 +0000 UTC FinishedAt: 2026-06-22 22:40:40 +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:*58c93c8c-f5f4-4236-8cf7-1fb0abe53ae0,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-workflowfq4st/series-workflowfq4st-build-action-4048964376/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-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:40:50 +0000 UTC FinishedAt: 2026-06-23 01:44:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:40:50 +0000 UTC FinishedAt: 2026-06-23 01:44:48 +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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"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:*8a167138-2d5b-425c-95b1-36db4a0ef0cd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*58c93c8c-f5f4-4236-8cf7-1fb0abe53ae0,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-workflowfq4st/series-workflowfq4st-build-action-3101805447/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-workflowfq4st/series-workflowfq4st-build-action-4048964376/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:40:50 +0000 UTC FinishedAt: 2026-06-22 22:41:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:40:50 +0000 UTC FinishedAt: 2026-06-22 22:41:30 +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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"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-workflowfq4st/series-workflowfq4st-convert-artifact-3237612421/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:40:50 +0000 UTC FinishedAt: 2026-06-22 22:40:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:40:50 +0000 UTC FinishedAt: 2026-06-22 22:40:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:40:50 +0000 UTC FinishedAt: 2026-06-22 22:40:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:41:37 +0000 UTC FinishedAt: 2026-06-23 01:44:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfq4st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"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":["__split_page_owner","__folio_copy_owner","__page_table_check_puds_set","__page_table_check_pmds_set","__page_table_check_pud_clear","__page_table_check_pmd_clear"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e1201ff76176ef666b13d1a4ec6b6190ddc6abc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_EXTENSION","PAGE_OWNER","PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED"],"series_id":"c9a6990f-fa5d-45a4-98b7-1dc3be99e711","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-06-22 22:41:37 +0000 UTC FinishedAt: 2026-06-23 01:44:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a167138-2d5b-425c-95b1-36db4a0ef0cd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*58c93c8c-f5f4-4236-8cf7-1fb0abe53ae0,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-workflowfq4st/series-workflowfq4st-build-action-3101805447/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-workflowfq4st/series-workflowfq4st-build-action-4048964376/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-workflowfq4st/series-workflowfq4st-convert-artifact-3237612421/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,}